On Mon, 2010-07-26 at 16:32 +0900, Nhat Huy wrote: > On Mon, Jul 26, 2010 at 3:54 PM, Tomas Härdin <[email protected]>wrote: > > > On Thu, 2010-07-22 at 23:40 +0900, Nhat Huy wrote: > > > On Thu, Jul 22, 2010 at 7:20 PM, Tomas Härdin <[email protected] > > >wrote: > > > > > > > On Thu, 2010-07-22 at 18:26 +0900, Nhat Huy wrote: > > > > > My input file points to a ES bitstream, that's why I can not pass a > > char* > > > > > file name to av_open_input_file. > > > > > > > > > > Any helps will appreciated. > > > > > Thanks. > > > > > > > > > > > > > > > > > > > > On Thu, Jul 22, 2010 at 6:18 PM, Nhat Huy <[email protected]> > > wrote: > > > > > > > > > > > Hi all, > > > > > > > > > > > > I have a problem with the function av_open_input_file. > > > > > > > > > > > > As normal , we can use it like this: > > > > > > > > > > > > if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL)!=0) > > > > > > return -1; // Couldn't open file > > > > > > > > > > > > My problem is that I can not pass argv[1] into this function, now I > > > > have to > > > > > > pass a file pointer, which already is opened by fopen in another > > > > function. > > > > > > > > > > > > Can anyone help me with this problem ? I stuck with it. > > > > > > > > > > > > Best regards, > > > > > > Huy. > > > > > > > > > > > > > > > > > > > > Check out how the "pipe" protocol works. Use fileno() to get the file > > > > descriptor corresponding to the given FILE*. IIRC you do something like > > > > "pipe:<fd>", like "pipe:0" to read from stdin. > > > > > > > > You could also possibly hack it using named pipes, but I suspect the > > > > above method is the easiest. > > > > > > > > /Tomas > > > > > > > > _______________________________________________ > > > > libav-user mailing list > > > > [email protected] > > > > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > > > > > > > > > > > > > > Thanks Tomas. > > > > > > According to your reply. > > > Is the following code right ? > > > > > > FILE* input; > > > input = fopen(filename,"rb"); > > > fd = fileno(input); > > > if(av_open_input_file(&pFormatCtx, "pipe:fd", NULL, 0, NULL)!=0) > > > return -1; // Couldn't open file > > > > > > Thank you very much. > > > Huy > > > > Uhm.. You need to use sprintf(), like: > > > > char temp[32]; > > sprintf(temp, "pipe:%i", fd); > > if(av_open_input_file(&pFormatCtx, temp, NULL, 0, NULL)!=0) > > return -1; // Couldn't open file > > > > /Tomas > > > > _______________________________________________ > > libav-user mailing list > > [email protected] > > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > > > > > > Hi Tomas, > > Now can I pass a bit-stream buffer instead of a file in FFmpeg ? Because my > input bit-stream is stored in memory, not in a file. I stuck is this > problem. > > Can I write my program like this? > > int main{ > unsigned char *OutBuf; > FILE* input; > > input = fopen(argv[1], "rb"); > fread(bitStream_buffer, 1 ,length ,input); > > if(av_open_input_file(&pFormatCtx, bitStream_buffer, NULL, 0, NULL)!=0) > > ........... > } > > Regards, > Huy.
No. I'm not sure how to handle that specific case. Are you really reading a file to RAM or is that just an example? You need to explain your situation more clearly, because in your initial post you said you had a FILE pointer, which means you shouldn't need to read into any buffer. Btw, ffmpeg can transcode certain videos from stdin nowadays. Try outputing your data stdout then pipe that to ffmpeg with "-" as the input file, like "./your_program | ffmpeg -i - output.avi" and see what happens. /Tomas
signature.asc
Description: This is a digitally signed message part
_______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
