[Mesa-dev] [PATCH] st/va: add mpeg4 startcode workaround
Liu, Leo
Leo.Liu at amd.com
Thu Nov 5 19:15:25 PST 2015
+Boyuan, forgot to Cc him when I sent.
Regards,
Leo
>-----Original Message-----
>From: Emil Velikov [mailto:emil.l.velikov at gmail.com]
>Sent: Thursday, November 05, 2015 7:00 PM
>To: Liu, Leo
>Cc: ML mesa-dev
>Subject: Re: [Mesa-dev] [PATCH] st/va: add mpeg4 startcode workaround
>
>On 5 November 2015 at 21:00, Leo Liu <leo.liu at amd.com> 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>
>> ---
>> src/gallium/state_trackers/va/buffer.c | 24 +++++-
>> src/gallium/state_trackers/va/context.c | 7 ++
>> src/gallium/state_trackers/va/picture.c | 117 +++++++++++++++++------------
>> src/gallium/state_trackers/va/va_private.h | 3 +
>> 4 files changed, 102 insertions(+), 49 deletions(-)
>>
>Guys can get some commit message please ? What is the workaround why is it
>needed ?
>
>It's a bit sad that one has to ask for such a thing.
>
>
>> @@ -59,8 +70,17 @@ vlVaCreateBuffer(VADriverContextP ctx, VAContextID
>context, VABufferType type,
>> return VA_STATUS_ERROR_ALLOCATION_FAILED;
>> }
>>
>> - if (data)
>> - memcpy(buf->data, data, size * num_elements);
>> + uint8_t* pExternalData = (uint8_t*) data;
>> + if (data) {
>> + if ((u_reduce_video_profile(pContext->desc.base.profile) ==
>PIPE_VIDEO_FORMAT_MPEG4)
>> + && (pContext->mpeg4.vaapi_mpeg4_workaround == true)
>> + && (buf->type == VASliceDataBufferType)) {
>Please follow st/va coding style - drop the explicit comparison against true, &&
>should be at the end of the line.
>
>
>> --- a/src/gallium/state_trackers/va/context.c
>> +++ b/src/gallium/state_trackers/va/context.c
>> @@ -35,6 +35,8 @@
>>
>> #include "va_private.h"
>>
>> +DEBUG_GET_ONCE_BOOL_OPTION(mpeg4, "VAAPI_MPEG4_WORKAROUND",
>FALSE);
>> +
>You do realise that defined as it, one can only use VAAPI_MPEG4_WORKAROUND
>on debug mesa builds ?
>
>
>> @@ -275,6 +277,11 @@ vlVaCreateContext(VADriverContextP ctx, VAConfigID
>config_id, int picture_width,
>> return VA_STATUS_ERROR_ALLOCATION_FAILED;
>> }
>> }
>> +
>> + if (u_reduce_video_profile(context->decoder->profile) ==
>> + PIPE_VIDEO_FORMAT_MPEG4) {
>u_reduce_video_profile() is called three times already. Stash it into a local
>variable and keep the comparison on a single line ?
>
>
>> --- a/src/gallium/state_trackers/va/picture.c
>> +++ b/src/gallium/state_trackers/va/picture.c
>> @@ -584,60 +584,83 @@ vlVaDecoderFixMPEG4Startcode(vlVaContext
>> *context)
>
>> + for (int i = 0 ; i < VL_VA_MPEG4_BYTES_FOR_LOOKUP ; i++) {
>> + if (memcmp (p, start_code, sizeof(start_code)) == 0) {
>> + found = true;
>Just use startcode_available directly ?
>
>> + break;
>> + }
>> + p += 1;
>> + extraSize += 1;
>> + }
>> + if (found) {
>> + startcode_available = true;
>
>
>-Emil
More information about the mesa-dev
mailing list