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

Reply via email to