On 10/7/13, Julian Herrera (TVGenius) <[email protected]> wrote: > Hello all, > > I have developed a video player based on ffmpeg for iOS, which is intended > to play MPEG-2 (SD) and H264 (HD) streams from a DVB-S source. The rendering > of the decoded video frames is performed by an OpenGL component also > responsible for converting YUV frames to RGB. > > I used the code in ffplay.c as a reference for the steps necessary to decode > and display the video frames, but I was wondering whether I can improve the > process by eliminating the need of copying locally each decoded frame before > enqueuing them for rendering. > > Basically I would like to implement the fix proposed in line 1612 of > ffplay.c (ffmpeg v. 2.0) to bypass the local copy of the decoded frame. So > the idea is to allocate a brand new AVFrame every time before calling > avcodec_decode_video2() and then send the frame to the renderer, instead of > passing a single reusable AVFrame to the decoder and copying locally the > result frame (this single copying step consumes around 10% of the processor > time on an iPad 4 whilst decoding h264-based 1080i streams). > > I tried such idea unsuccessfully. The resulted frames were rendered out of > order, so the video was played as if the images were going back and forth in > time. If I call av_frame_clone(videoFrame) before sending the frame to the
I guess your code does not use reference counting and thus that call copies all data. > renderer, the video is played correctly but the same high processor usage > occurs, which is what I am trying to prevent. > > Could you shed some light on how to solve this issue if it is possible? > > Regards, > Julian Herrera > _______________________________________________ > 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
