[vlc-devel] [PATCH] nvdec: fixed output chroma selection

Thomas Guillem thomas at gllm.fr
Wed Feb 26 11:03:52 CET 2020


Hello,

Are you sure it's not a bug in VLC core ? A failing decoder_UpdateVideoOutput() should not invalidate the video context.
Anyway, it need to be documented in vlc_codec.h

I will wait for steve (that is AFK until Monday) before doing anything.

On Wed, Feb 26, 2020, at 00:05, Quentin Chateau wrote:
> The vlc_video_context needs to be re-created after
> each call to decoder_UpdateVideoOutput.
> ---
>  modules/hw/nvdec/nvdec.c | 30 ++++++++++++++++--------------
>  1 file changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/modules/hw/nvdec/nvdec.c b/modules/hw/nvdec/nvdec.c
> index e5cda56ef3..7720da0201 100644
> --- a/modules/hw/nvdec/nvdec.c
> +++ b/modules/hw/nvdec/nvdec.c
> @@ -912,20 +912,6 @@ static int OpenDecoder(vlc_object_t *p_this)
>          goto error;
>      }
>  
> -    vlc_decoder_device *dec_device = decoder_GetDecoderDevice( p_dec );
> -    if (dec_device == NULL)
> -        goto error;
> -    if (dec_device->type == VLC_DECODER_DEVICE_NVDEC)
> -    {
> -        p_sys->vctx_out = vlc_video_context_Create( dec_device, 
> VLC_VIDEO_CONTEXT_NVDEC, 0, NULL );
> -    }
> -    vlc_decoder_device_Release(dec_device);
> -    if (unlikely(p_sys->vctx_out == NULL))
> -    {
> -        msg_Err(p_dec, "failed to create a video context");
> -        goto error;
> -    }
> -
>      vlc_fourcc_t output_chromas[3];
>      size_t chroma_idx = 0;
>      if (cudaChroma == cudaVideoChromaFormat_420)
> @@ -950,6 +936,20 @@ static int OpenDecoder(vlc_object_t *p_this)
>  
>      for (chroma_idx = 0; output_chromas[chroma_idx] != 0; chroma_idx++)
>      {
> +        vlc_decoder_device *dec_device = 
> decoder_GetDecoderDevice(p_dec);
> +        if (dec_device == NULL)
> +            goto error;
> +        if (dec_device->type == VLC_DECODER_DEVICE_NVDEC)
> +        {
> +            p_sys->vctx_out = vlc_video_context_Create(dec_device, 
> VLC_VIDEO_CONTEXT_NVDEC, 0, NULL);
> +        }
> +        vlc_decoder_device_Release(dec_device);
> +        if (unlikely(p_sys->vctx_out == NULL))
> +        {
> +            msg_Err(p_dec, "failed to create a video context");
> +            goto error;
> +        }
> +
>          p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma = 
> output_chromas[chroma_idx];
>          result = decoder_UpdateVideoOutput(p_dec, p_sys->vctx_out);
>          if (result == VLC_SUCCESS)
> @@ -958,6 +958,8 @@ static int OpenDecoder(vlc_object_t *p_this)
>              break;
>          }
>          msg_Warn(p_dec, "Failed to use output chroma %4.4s", 
> (char*)&p_dec->fmt_out.video.i_chroma);
> +        vlc_video_context_Release(p_sys->vctx_out);
> +        p_sys->vctx_out = NULL;
>      }
>      if (result != VLC_SUCCESS)
>          goto error;
> -- 
> 2.20.1
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list