mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-05-14 12:18:57 +00:00
libs: utils: treat va_rt_format as bitwise flag
The return value of vaGetConfigAttributes() of VAConfigAttribRTFormat is a bitwise flag with *all* the supported chroma types. Previously it was assumed that the return value was a single value, thus when returning the GST_VAAPI_CHROMA_TYPE_XXX the code was a simple case. But it is wrong. This patch changes the case block with a sequence of ifs testing the bitwise. For now we assume a "priority" list in the testing sequence.
This commit is contained in:
parent
1c73dc969c
commit
ab4ba47bbf
1 changed files with 31 additions and 53 deletions
|
@ -383,61 +383,39 @@ string_of_VARateControl (guint rate_control)
|
|||
guint
|
||||
to_GstVaapiChromaType (guint va_rt_format)
|
||||
{
|
||||
guint chroma_type;
|
||||
|
||||
switch (va_rt_format) {
|
||||
case VA_RT_FORMAT_YUV420:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV422:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV444:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV444;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV411:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV411;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV400:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV400;
|
||||
break;
|
||||
case VA_RT_FORMAT_RGB32:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_RGB32;
|
||||
break;
|
||||
case VA_RT_FORMAT_RGB16:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_RGB16;
|
||||
break;
|
||||
case VA_RT_FORMAT_RGBP:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_RGBP;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV420_10BPP:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420_10BPP;
|
||||
break;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV420)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV420;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV422)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV422;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV444)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV444;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV411)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV411;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV400)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV400;
|
||||
if (va_rt_format & VA_RT_FORMAT_RGB32)
|
||||
return GST_VAAPI_CHROMA_TYPE_RGB32;
|
||||
if (va_rt_format & VA_RT_FORMAT_RGB16)
|
||||
return GST_VAAPI_CHROMA_TYPE_RGB16;
|
||||
if (va_rt_format & VA_RT_FORMAT_RGBP)
|
||||
return GST_VAAPI_CHROMA_TYPE_RGBP;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV420_10BPP)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV420_10BPP;
|
||||
#if VA_CHECK_VERSION(1,2,0)
|
||||
case VA_RT_FORMAT_YUV422_10:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_10BPP;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV444_10:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV444_10BPP;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV420_12:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420_12BPP;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV422_12:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_12BPP;
|
||||
break;
|
||||
case VA_RT_FORMAT_YUV444_12:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV444_12BPP;
|
||||
break;
|
||||
case VA_RT_FORMAT_RGB32_10:
|
||||
chroma_type = GST_VAAPI_CHROMA_TYPE_RGB32_10BPP;
|
||||
break;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV422_10)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV422_10BPP;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV444_10)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV444_10BPP;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV420_12)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV420_12BPP;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV422_12)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV422_12BPP;
|
||||
if (va_rt_format & VA_RT_FORMAT_YUV444_12)
|
||||
return GST_VAAPI_CHROMA_TYPE_YUV444_12BPP;
|
||||
if (va_rt_format & VA_RT_FORMAT_RGB32_10)
|
||||
return GST_VAAPI_CHROMA_TYPE_RGB32_10BPP;
|
||||
#endif
|
||||
default:
|
||||
chroma_type = 0;
|
||||
break;
|
||||
}
|
||||
return chroma_type;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue