[FFmpeg-devel] [PATCH] VC1 VDPAU: Mark missing reference frames as such.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Tue Oct 1 08:04:34 CEST 2013



On 01.10.2013, at 03:15, Michael Niedermayer <michaelni at gmx.at> wrote:

> On Sat, Sep 28, 2013 at 11:13:35AM +0200, Reimar Döffinger wrote:
>> Currently the code passes some nonsense values as
>> references instead, causing corruption with NVidia's
>> and assertion failures with Mesa's implementation.
>> For non-corrupted input this mostly happens in
>> interlaced bitstreams, e.g.
>> http://samples.mplayerhq.hu/V-codecs/WMV9/interlaced/480i30__codec_WVC1__mode_2__framerate_29.970__type_2__preproc_17.wmv.
>> The != VDP_INVALID handle assert does not trigger
>> (and probably is quite nonsense) because the frames
>> are initialized to 0.
>> 
>> Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
>> ---
>> libavcodec/vdpau_vc1.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>> 
>> diff --git a/libavcodec/vdpau_vc1.c b/libavcodec/vdpau_vc1.c
>> index 272b2d9..c6e3343 100644
>> --- a/libavcodec/vdpau_vc1.c
>> +++ b/libavcodec/vdpau_vc1.c
>> @@ -44,14 +44,18 @@ static int vdpau_vc1_start_frame(AVCodecContext *avctx,
>> 
>>     switch (s->pict_type) {
>>     case AV_PICTURE_TYPE_B:
>> +        if (s->next_picture_ptr) {
>>         ref = ff_vdpau_get_surface_id(&s->next_picture);
>>         assert(ref != VDP_INVALID_HANDLE);
>>         info->backward_reference = ref;
>> +        }
>>         /* fall-through */
>>     case AV_PICTURE_TYPE_P:
>> +        if (s->last_picture_ptr) {
> 
> vc1 contains quite a few NULL checks on srcy/uv, that is
> picture.f.data[0]
> dunno if that can be used here too

data[0] can validly be 0 as far as I can tell.
Also I check the _ptr ones because that's what the VC1 code I looked at did.


More information about the ffmpeg-devel mailing list