[vlc-devel] [PATCH 1/2] nvdec: add chroma and depth fallback

Steve Lhomme robux4 at ycbcr.xyz
Tue Apr 7 07:52:38 CEST 2020


I don't think this is correct. If we can't tell the video format during 
Open, there is no way to tell if we will be able to decode the stream or 
not. So we may be selected as the decoder but in the end we can't decode 
the video. At this point it's too late to fallback to a more suitable 
decoder (libavcodec).

That's a drawback of the nvdec decoder until we can restart decoders 
without losing data for the next decoder (if that ever happens). That's 
also a reason why nvdec can have a higher priority than libavcodec, 
because it will fallback properly.

On 2020-04-06 15:02, quentin.chateau at deepskycorp.com wrote:
> From: Quentin Chateau <quentin.chateau at deepskycorp.com>
> 
> When the chroma and depth is unknown to the hxxx_helper,
> fallback to the common 4:2:0 8bits format as initial value.
> The decoder may change these values later on.
> ---
>   modules/hw/nvdec/nvdec.c | 20 ++++++++++++--------
>   1 file changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/modules/hw/nvdec/nvdec.c b/modules/hw/nvdec/nvdec.c
> index e3aeff2355..ca28522d32 100644
> --- a/modules/hw/nvdec/nvdec.c
> +++ b/modules/hw/nvdec/nvdec.c
> @@ -923,15 +923,19 @@ static int OpenDecoder(vlc_object_t *p_this)
>       // try different output
>       if (p_sys->b_is_hxxx)
>       {
> -        uint8_t i_chroma_idc, i_depth_chroma;
> -        result = hxxx_helper_get_chroma_chroma(&p_sys->hh, &i_chroma_idc,
> -                                            &i_depth_luma, &i_depth_chroma);
> -        if (result != VLC_SUCCESS) {
> -            if (p_sys->b_is_hxxx)
> -                hxxx_helper_clean(&p_sys->hh);
> -            return VLC_EGENERIC;
> +        uint8_t hxxx_chroma_idc, hxxx_depth_chroma, hxxx_depth_luma;
> +        result = hxxx_helper_get_chroma_chroma(&p_sys->hh, &hxxx_chroma_idc,
> +                                            &hxxx_depth_luma, &hxxx_depth_chroma);
> +        if (result == VLC_SUCCESS)
> +        {
> +            i_depth_luma = hxxx_depth_luma;
> +            cudaChroma = MapChomaIDC(hxxx_chroma_idc);
> +        }
> +        else
> +        {
> +            cudaChroma = cudaVideoChromaFormat_420;
> +            i_depth_luma = 8;
>           }
> -        cudaChroma = MapChomaIDC(i_chroma_idc);
>   
>           unsigned i_w, i_h, i_vw, i_vh;
>           result = hxxx_helper_get_current_picture_size(&p_sys->hh, &i_w, &i_h, &i_vw, &i_vh);
> -- 
> 2.17.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