[Mesa-dev] [PATCH 2/2] radeon/uvd: fix VC-1 simple/main profile decode

Christian König deathsimple at vodafone.de
Wed Sep 23 12:05:46 PDT 2015


Hi Grigori,

On 23.09.2015 19:46, Grigori Goronzy wrote:
> Hi,
>
> On 23.09.2015 10:11, Christian König wrote:
>> From: Boyuan Zhang <boyuan.zhang at amd.com>
>>
>> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
>> Reviewed-by: Christian König <christian.koenig at amd.com>
>> ---
> Thanks, nice to see this finally getting fixed, and it was a pretty
> simple thing after all... well, not quite yet apparently. Sometimes
> playback works correctly, sometimes it doesn't and glitches around, on
> my CIK (Bonaire) GPU. It seems random, but isn't as bad and
> hang-inducing compared to before this was disabled in Mesa. Maybe some
> state isn't being set all the time?
>
> I tested these two samples:
>
>> http://samples.ffmpeg.org/asf-wmv/asf_with_chapters.wmv
>> http://samples.ffmpeg.org/V-codecs/WVC1/Test_1440x576_WVC1_6Mbps.wmv
> I used "mpv --hwdec=vdpau --vo=vdpau" to test this.

interesting results, thanks for testing.

Just a shoot into the dark: Do the corruptions go away if you double the 
DPB size?

Regards,
Christian.

>
> Best regards
> Grigori
>
>>   src/gallium/drivers/radeon/radeon_uvd.c   | 6 ++++++
>>   src/gallium/drivers/radeon/radeon_video.c | 5 +----
>>   2 files changed, 7 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
>> index 81f3f45..9edb511 100644
>> --- a/src/gallium/drivers/radeon/radeon_uvd.c
>> +++ b/src/gallium/drivers/radeon/radeon_uvd.c
>> @@ -940,6 +940,12 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder,
>>   	dec->msg->body.decode.width_in_samples = dec->base.width;
>>   	dec->msg->body.decode.height_in_samples = dec->base.height;
>>   
>> +	if ((picture->profile == PIPE_VIDEO_PROFILE_VC1_SIMPLE)
>> +        || (picture->profile == PIPE_VIDEO_PROFILE_VC1_MAIN)) {
>> +		dec->msg->body.decode.width_in_samples = align(dec->msg->body.decode.width_in_samples, 16) / 16;
>> +		dec->msg->body.decode.height_in_samples = align(dec->msg->body.decode.height_in_samples, 16) / 16;
>> +	}
>> +
>>   	dec->msg->body.decode.dpb_size = dec->dpb.res->buf->size;
>>   	dec->msg->body.decode.bsd_size = bs_size;
>>   	dec->msg->body.decode.db_pitch = dec->base.width;
>> diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c
>> index 3a1834b..e6cfdf6 100644
>> --- a/src/gallium/drivers/radeon/radeon_video.c
>> +++ b/src/gallium/drivers/radeon/radeon_video.c
>> @@ -259,11 +259,8 @@ int rvid_get_video_param(struct pipe_screen *screen,
>>   		case PIPE_VIDEO_FORMAT_MPEG12:
>>   		case PIPE_VIDEO_FORMAT_MPEG4:
>>   		case PIPE_VIDEO_FORMAT_MPEG4_AVC:
>> -			return entrypoint != PIPE_VIDEO_ENTRYPOINT_ENCODE;
>>   		case PIPE_VIDEO_FORMAT_VC1:
>> -			/* FIXME: VC-1 simple/main profile is broken */
>> -			return profile == PIPE_VIDEO_PROFILE_VC1_ADVANCED &&
>> -			       entrypoint != PIPE_VIDEO_ENTRYPOINT_ENCODE;
>> +			return entrypoint != PIPE_VIDEO_ENTRYPOINT_ENCODE;
>>   		case PIPE_VIDEO_FORMAT_HEVC:
>>   			/* Carrizo only supports HEVC Main */
>>   			return rscreen->family >= CHIP_CARRIZO &&
>>
>



More information about the mesa-dev mailing list