Hello, I've a problem feeding the av_read_frame function with my h.264 video data—after reading the first frame (from memory): it simply stopped and won't read anymore.
I've build the FormatContext using av_alloc_put_byte() ... the pVideoBuffer is allocated using av_malloc and it's size is 256k. My[Read|Write|Seek]Func are static hooks I use using the this_ptr as (void*) opaque to get the call back to my object. pFormatCtx->pb = av_alloc_put_byte( pVideoBuffer, int(pVideoBufferSize), 1, (void*)this, MyReadFunc, MyWriteFunc, MySeekFunc ); After that I probe the input stream using my video data from my internal buffer, I make a call to "av_open_input_stream" and successfully open the stream. In the next step av_read_frame() is called, which calls my MyReadFunc() function. From there I copy the video data from my interal buffer to the "buf" parameter in the read function - but after a call to av_read_frame(), the buffer from the ByteIOContext changes and its the 256k buffer I allocated but a different one and 32k large. I copy 17k of video data and quit. After that a second call goes to MyReadFunc() but at that moment no more video data is available ... so I copy 0 bytes. I quit the function and return from av_read_frame() successfully with >=0. I start decoding with avcodec_decode_video2() and I get told my frame is finished ... no problem there (the decoded output inside the frame looks okay and like YUV420P). After that i free the AVPacket and make another call to av_read_frame() but know no video data is available—but I also won't jump to MyReadFunc() trying to read data. The read-loop is started again when the next chunks of data come in and my internal buffer is filled. But all subsequent calls to av_read_frame() directly return without leaving me a chance to copy the video data to the buffer. I've checked the ByteIOContext after that: pb->buffer_size is still at 32k, pb->buf_ptr is the same as pb->buf_end (same address) and pos is at 17k. Did I do something wrong with the internal buffers I allocated or didn't I understood the use of the buffers? I don't know why this is happening, but after that no frames will get read although I've plenty of video data available. Any ideas? thank you very much... _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
