[Libav-user] avformat_open_input with custom AVIOContext
Louis M
ffmpeg at tioui.com
Tue Jul 31 02:41:47 CEST 2012
Hello everyone,
I am creating a library to put more than one file into one file (some
kind of package file). So, I need to use a custom AVIOContext. I try
the following code to test and the "avformat_open_input" give function
give me an "Invalid data found when processing input" error.
The Code:
#include <stdio.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
int read_packet(void *opaque, uint8_t *buf, int buf_size){
FILE *the_file = (FILE *) opaque;
return(fread(buf,1,buf_size,the_file));
}
int64_t seek(void *opaque, int64_t offset, int whence){
FILE *the_file = (FILE *) opaque;
return(fseek ( the_file, offset, whence ));
}
int main(){
AVFormatContext *input;
AVIOContext * avio_context;
unsigned char * bio_buffer;
FILE *the_file;
the_file=fopen("sound.flac","rb");
input=avformat_alloc_context();
bio_buffer=(unsigned char *)av_malloc(4092);
avio_context=avio_alloc_context(bio_buffer,4092,0,the_file,&read_packet,NULL,&seek);
input->pb=avio_context;
if(!input->pb) {
return 1;
}
int r=avformat_open_input(&input,"stream",NULL,NULL);
if(r<0){
char * error;
error=malloc(64);
av_strerror(r,error,64);
printf("Error: %s\n",error);
free(error);
return 1;
}
avformat_free_context(input);
av_free(avio_context);
av_free(bio_buffer);
fclose(the_file);
}
The "sound.flac" file is a standard flac file. Here is what the
"ffmpeg -i sound.flac" command line give me:
[flac @ 0x1c0a7a0] max_analyze_duration reached
Input #0, flac, from 'sound.flac':
Duration: 00:00:15.31, bitrate: 342 kb/s
Stream #0.0: Audio: flac, 44100 Hz, 1 channels, s16
At least one output file must be specified
So, if someone can help me out. I'm a stuck here.
Thanks in advance.
Louis M
More information about the Libav-user
mailing list