[Mesa-dev] [PATCH 2/3] xorg/xvmc: Only set decode buffer when available

Younes Manton younes.m at gmail.com
Sun Aug 28 09:23:18 PDT 2011


On Sun, Aug 28, 2011 at 12:13 PM, Younes Manton <younes.m at gmail.com> wrote:
> On Sat, Aug 27, 2011 at 7:58 PM, Maarten Lankhorst
> <m.b.lankhorst at gmail.com> wrote:
>> The nouveau xvmc decoder doesn't need it.
>>
>> Signed-off-by: Maarten Lankhorst <m.b.lankhorst at gmail.com>
>> ---
>>  src/gallium/state_trackers/xorg/xvmc/surface.c |    9 ++++++---
>>  1 files changed, 6 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/gallium/state_trackers/xorg/xvmc/surface.c b/src/gallium/state_trackers/xorg/xvmc/surface.c
>> index 79bd9c6..9cfec94 100644
>> --- a/src/gallium/state_trackers/xorg/xvmc/surface.c
>> +++ b/src/gallium/state_trackers/xorg/xvmc/surface.c
>> @@ -111,7 +111,8 @@ SetDecoderStatus(XvMCSurfacePrivate *surface)
>>    context_priv = surface->context->privData;
>>    decoder = context_priv->decoder;
>>
>> -   decoder->set_decode_buffer(decoder, surface->decode_buffer);
>> +   if (surface->decode_buffer)
>> +      decoder->set_decode_buffer(decoder, surface->decode_buffer);
>>    decoder->set_decode_target(decoder, surface->video_buffer);
>>
>>    for (i = 0; i < 2; ++i) {
>> @@ -181,7 +182,8 @@ Status XvMCCreateSurface(Display *dpy, XvMCContext *context, XvMCSurface *surfac
>>    if (!surface_priv)
>>       return BadAlloc;
>>
>> -   surface_priv->decode_buffer = context_priv->decoder->create_buffer(context_priv->decoder);
>> +   if (context_priv->decoder->create_buffer)
>> +      surface_priv->decode_buffer = context_priv->decoder->create_buffer(context_priv->decoder);
>>    surface_priv->video_buffer = pipe->create_video_buffer
>>    (
>>       pipe, PIPE_FORMAT_NV12, context_priv->decoder->chroma_format,
>> @@ -496,7 +498,8 @@ Status XvMCDestroySurface(Display *dpy, XvMCSurface *surface)
>>       SetDecoderStatus(surface_priv);
>>       context_priv->decoder->end_frame(context_priv->decoder);
>>    }
>> -   context_priv->decoder->destroy_buffer(context_priv->decoder, surface_priv->decode_buffer);
>> +   if (surface_priv->decode_buffer)
>> +      context_priv->decoder->destroy_buffer(context_priv->decoder, surface_priv->decode_buffer);
>>    surface_priv->video_buffer->destroy(surface_priv->video_buffer);
>>    FREE(surface_priv);
>>    surface->privData = NULL;
>> --
>> 1.7.6
>>
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
> Pushed. Thanks.
>

Oops, sorry, the above was referring to the xvmc test one. For this
one maybe it's better if you implement create_buffer by just returning
something non-null (like your decoder object), and ignoring it in
set/destroy that way we don't have to have to repeat these checks in
every state tracker. I don't feel strongly either way though. What do
you think?


More information about the mesa-dev mailing list