Dear Libav-user Thank for reply, I found out it had memory pool , it only can store 3 frames.
Best Regards, Antony Lin -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of wm4 Sent: Thursday, February 05, 2015 6:52 PM To: [email protected] Subject: Re: [Libav-user] How to allocate memory to store the image data (when use av_frame_alloc) ? On Thu, 5 Feb 2015 16:52:27 +0800 林其益 <[email protected]> wrote: > Dear Libav: > > > > Sorry for my poor english first. > > > > When using avcode_alloc_frame with avcodec_decode_video2 to decode h264 > stream, I found out that the data pointer of AVFrame will change everytime i > decode a new frame. > > So if i need to buffer the decoded frame, i must copy the image data to > other place (which allocate to store the image data). > > > > Could I not to allocate memory to store the image data (decode frame), > because it will cost me 10 ms every frame ( 8 M resolution picture)? > > > > If I just store the AVFrame 's data pointer for every frames, It only had > three sets of data pointer, so frames will be overwrite if you decode more > than three times before to use it (to display it on the screen). > > Three sets of data pointer(3 frames buffer) is not enough for my implement > of buffering decoded frame, I want to buffer 10 frames (decode 10 frames > before to display it to the screen). Because I frame of H264 ( 8M > resolution) will recevie very slow (more than 100 ms) and decode very slow > (more than 100 ms), so I need buffer 10 frames to let display the stream > smoothly. > > > > My question is : > > 1. Could ffmpeg decode h264 use 10 sets of data pointer (not just three > sets of data pointer)? > > or > > 2. Could I allocate my own memory to the data[] array to AVFrame (not > allocate by the ffmpeg library)? > > > > //////////////////////////////////////////////////////////////////////////// > //////////////////////////////////////////////////////////////////////////// > /// > > example code is describe as follow: > > /* c code bellow */ > > AVFrame * pFrame; > > pFrame = avcode_alloc_frame(); > > while (still_has_h264_frame) > > { > > avcodec_decode_video2(avctx, pFrame,....); > > printf(" data pointer of pFrame: %d %d %d \n", pFrame->data[0], > pFrame->data[1], pFrame->data[2]); > > } > > > > /* result print log */ > > > > data pointer of pFrame: 396361792 395445504 401670240 > > data pointer of pFrame: 405536832 402628512 402864768 > > data pointer of pFrame: 430506048 431489120 431725376 > > data pointer of pFrame: 396361792 395445504 401670240 <--- from here , > the data point is the same as 1'th frame > > data pointer of pFrame: 405536832 402628512 402864768 <--- from here , > the data point is the same as 2'th frame > > data pointer of pFrame: 430506048 431489120 431725376 <--- from here , > the data point is the same as 3'th frame > > ...... > > > > Best Regards, > > Antony Lin > > > > > The decoder already uses a memory pool for AVFrame image data. _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
