>>>> Hello,
>>>>
>>>> I've been experimenting with encoding with a  cuda card, and I noticed 
>>>> that setting the pict_type member of the AVFrame structure to 
>>>> AV_PICTURE_TYPE_I >does not trigger it to encode the next frame as an IDR 
>>>> frame as libx264 does. I looked at the nvidia docs and it appears there is 
>>>> a mechanism for this behavior.
>> 
>>> Is that behaviour documented anywhere?
>> 
>> I found documentation on the nvidia site 
>> (https://developer.nvidia.com/nvencode), here is the section of the document 
>> that I referred to in my previous post...
>
>I'm talking about ffmpeg AVFrames.
>I was not aware libx264 even did that, and I don't see any documentation that 
>it's possible to force an IDR/I frame that way.
>
>It should be trivial to add the same behaviour to nvenc.

Not exactly documented completely, but I found out about it when I look at the 
libx264 options output by the command "ffmpeg -h encoder=libx264" which lists a 
-forced_idr option. After seeing that I looked into libx264.c and found the 
area where it switches on frame->pict_type and sets the corresponding 
X264Context members.

Here is the code from libx264.c, X264_frame function. Its indispensable when 
dealing with live RTP streams and recovering from packet loss.

        switch (frame->pict_type) {
        case AV_PICTURE_TYPE_I:
            x4->pic.i_type = x4->forced_idr >= 0 ? X264_TYPE_IDR
                                                 : X264_TYPE_KEYFRAME;
            break;
        case AV_PICTURE_TYPE_P:
            x4->pic.i_type = X264_TYPE_P;
            break;
        case AV_PICTURE_TYPE_B:
            x4->pic.i_type = X264_TYPE_B;
            break;
        default:
            x4->pic.i_type = X264_TYPE_AUTO;
            break;
        }

I'm trying to put together a patch, but I'm struggling a bit setting up to 
build.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to