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

Maarten Lankhorst m.b.lankhorst at gmail.com
Sun Aug 28 09:56:45 PDT 2011


On 08/28/2011 06:23 PM, Younes Manton wrote:
> 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?
I felt it to be cleaner to just skip in that case, I think it might make more
sense to just remove those calls entirely, since the decoder should
handle it internally. Since all those set_decode_buffer and set_decode_targets
are always paired, is there any reason why the decoder shouldn't?

Cheers,
Maarten


More information about the mesa-dev mailing list