[vlc-devel] [vlc-commits] va: mostly remove the setup callback

Steve Lhomme robux4 at gmail.com
Mon Feb 29 17:38:14 CET 2016


On Sun, Sep 27, 2015 at 9:57 PM, Rémi Denis-Courmont <git at videolan.org> wrote:
> vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Sep 27 16:01:52 2015 +0300| [0ce8fcaeb1050c323ecaeef3b25c548698597799] | committer: Rémi Denis-Courmont
>
> va: mostly remove the setup callback
>
> The coded video size is already fixed by the decoder when creating the
> vidoe acceleration plugin, while the chroma is fixed by
> vlc_va_GetChroma(). This callback is useless.
>
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0ce8fcaeb1050c323ecaeef3b25c548698597799
> ---
>
>  modules/codec/avcodec/va.c    |   10 ++++++++++
>  modules/codec/avcodec/va.h    |   12 +++---------
>  modules/codec/avcodec/vaapi.c |    6 ------
>  modules/codec/avcodec/vda.c   |    7 -------
>  modules/codec/avcodec/video.c |    2 --
>  modules/hw/vdpau/avcodec.c    |   21 ---------------------
>  6 files changed, 13 insertions(+), 45 deletions(-)
>
> diff --git a/modules/codec/avcodec/va.c b/modules/codec/avcodec/va.c
> index 8c13e55..f534f89 100644
> --- a/modules/codec/avcodec/va.c
> +++ b/modules/codec/avcodec/va.c
> @@ -109,6 +109,16 @@ vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *avctx,
>      if (va->module == NULL)
>      {
>          vlc_object_release(va);
> +#ifdef _WIN32
> +        return NULL;
> +    }
> +
> +    vlc_fourcc_t chroma;
> +    va->setup(va, &chroma);
> +    if (chroma != vlc_va_GetChroma(pix_fmt, AV_PIX_FMT_YUV420P))
> +    {   /* Mismatch, cannot work, fail */
> +        vlc_va_Delete(va, avctx);
> +#endif

This broke the case of DXVA2 not outputting an opaque format when the
vout cannot handle it. In that case it silently outputs VLC_CODEC_YV12
and do the conversion on each frame coming out.

vlc_va_GetChroma() has no way of knowing this is happening.

>          va = NULL;
>      }
>      return va;
> diff --git a/modules/codec/avcodec/va.h b/modules/codec/avcodec/va.h
> index 5dc8b0a..e697118 100644
> --- a/modules/codec/avcodec/va.h
> +++ b/modules/codec/avcodec/va.h
> @@ -36,7 +36,10 @@ struct vlc_va_t {
>      module_t *module;
>      const char *description;
>
> +#ifdef _WIN32
> +    VLC_DEPRECATED
>      void (*setup)(vlc_va_t *, vlc_fourcc_t *output);
> +#endif
>      int  (*get)(vlc_va_t *, picture_t *pic, uint8_t **data);
>      void (*release)(void *pic, uint8_t *surface);
>      int  (*extract)(vlc_va_t *, picture_t *pic, uint8_t *data);
> @@ -62,15 +65,6 @@ vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *,
>                       picture_sys_t *p_sys);
>
>  /**
> - * Initializes the acceleration video decoding back-end for libavcodec.
> - * @param output pointer to video chroma output by the back-end [OUT]
> - */
> -static inline void vlc_va_Setup(vlc_va_t *va, vlc_fourcc_t *output)
> -{
> -    va->setup(va, output);
> -}
> -
> -/**
>   * Allocates a hardware video surface for a libavcodec frame.
>   * The surface will be used as output for the hardware decoder, and possibly
>   * also as a reference frame to decode other surfaces.
> diff --git a/modules/codec/avcodec/vaapi.c b/modules/codec/avcodec/vaapi.c
> index 24ddda4..c4dc52a 100644
> --- a/modules/codec/avcodec/vaapi.c
> +++ b/modules/codec/avcodec/vaapi.c
> @@ -187,11 +187,6 @@ static void Release( void *opaque, uint8_t *data )
>      (void) data;
>  }
>
> -static void Setup( vlc_va_t *va, vlc_fourcc_t *pi_chroma )
> -{
> -    *pi_chroma = VLC_CODEC_YV12;
> -}
> -
>  static void Delete( vlc_va_t *va, AVCodecContext *avctx )
>  {
>      vlc_va_sys_t *sys = va->sys;
> @@ -462,7 +457,6 @@ static int Create( vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
>      ctx->hwaccel_context = &sys->hw_ctx;
>      va->sys = sys;
>      va->description = vaQueryVendorString(sys->hw_ctx.display);
> -    va->setup = Setup;
>      va->get = Get;
>      va->release = Release;
>      va->extract = Extract;
> diff --git a/modules/codec/avcodec/vda.c b/modules/codec/avcodec/vda.c
> index 979b882..2f248d2 100644
> --- a/modules/codec/avcodec/vda.c
> +++ b/modules/codec/avcodec/vda.c
> @@ -48,7 +48,6 @@
>  static int Open( vlc_va_t *, AVCodecContext *, enum PixelFormat,
>                   const es_format_t *, picture_sys_t * );
>  static void Close( vlc_va_t * , AVCodecContext *);
> -static void Setup( vlc_va_t *, vlc_fourcc_t *);
>  static int Get( vlc_va_t *, picture_t *, uint8_t ** );
>  static int Extract( vlc_va_t *, picture_t *, uint8_t * );
>  static void Release( void *opaque, uint8_t *data );
> @@ -160,7 +159,6 @@ static int Open(vlc_va_t *va,
>
>      va->sys = sys;
>      va->description = (char *)"VDA";
> -    va->setup = Setup;
>      va->get = Get;
>      va->release = Release;
>      va->extract = Extract;
> @@ -174,11 +172,6 @@ static void Close( vlc_va_t *va, AVCodecContext *avctx )
>      (void) va;
>  }
>
> -static void Setup( vlc_va_t *va, vlc_fourcc_t *pi_chroma )
> -{
> -    *pi_chroma = VLC_CODEC_I420;
> -}
> -
>  // Never called
>  static int Get( vlc_va_t *va, picture_t *p_picture, uint8_t **data )
>  {
> diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
> index 4f6a0e2..c8841e4 100644
> --- a/modules/codec/avcodec/video.c
> +++ b/modules/codec/avcodec/video.c
> @@ -1133,8 +1133,6 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
>              picture_Release(test_pic);
>          if (va == NULL)
>              continue; /* Unsupported codec profile or such */
> -
> -        vlc_va_Setup(va, &p_dec->fmt_out.video.i_chroma);
>          post_mt(p_sys);
>
>          if (va->description != NULL)
> diff --git a/modules/hw/vdpau/avcodec.c b/modules/hw/vdpau/avcodec.c
> index 0db483f..71c17dd 100644
> --- a/modules/hw/vdpau/avcodec.c
> +++ b/modules/hw/vdpau/avcodec.c
> @@ -140,26 +140,6 @@ static int Copy(vlc_va_t *va, picture_t *pic, uint8_t *data)
>      return VLC_SUCCESS;
>  }
>
> -static void Setup(vlc_va_t *va, vlc_fourcc_t *chromap)
> -{
> -    vlc_va_sys_t *sys = va->sys;
> -
> -    switch (sys->type)
> -    {
> -        case VDP_CHROMA_TYPE_420:
> -            *chromap = VLC_CODEC_VDPAU_VIDEO_420;
> -            break;
> -        case VDP_CHROMA_TYPE_422:
> -            *chromap = VLC_CODEC_VDPAU_VIDEO_422;
> -            break;
> -        case VDP_CHROMA_TYPE_444:
> -            *chromap = VLC_CODEC_VDPAU_VIDEO_444;
> -            break;
> -        default:
> -            vlc_assert_unreachable();
> -    }
> -}
> -
>  static int Open(vlc_va_t *va, AVCodecContext *avctx, enum PixelFormat pix_fmt,
>                  const es_format_t *fmt, picture_sys_t *p_sys)
>  {
> @@ -336,7 +316,6 @@ static int Open(vlc_va_t *va, AVCodecContext *avctx, enum PixelFormat pix_fmt,
>          infos = "VDPAU";
>
>      va->description = infos;
> -    va->setup = Setup;
>      va->get = Lock;
>      va->release = NULL;
>      va->extract = Copy;
>
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits


More information about the vlc-devel mailing list