summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-03-28 15:05:26 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2014-01-15 13:53:42 +0100
commit751aa05937d736503fce22ba784820f7184f0b40 (patch)
treeb8869f77497792e9c8786c839ee066b9181d94c4
parent467bf95c0906098f848a7aa81416c3a16760dad8 (diff)
downloadgst-vaapi-751aa05937d736503fce22ba784820f7184f0b40.tar.gz
surface: rework render flags.
Pack render flags per category and provide more flags into the color standard category. In particular, cover for SMPTE-240M.
-rw-r--r--gst-libs/gst/vaapi/gstvaapisurface.h31
-rw-r--r--gst-libs/gst/vaapi/gstvaapiutils.c38
-rw-r--r--gst/vaapi/gstvaapipostproc.c6
3 files changed, 52 insertions, 23 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapisurface.h b/gst-libs/gst/vaapi/gstvaapisurface.h
index 639ed2ac..5ddfd011 100644
--- a/gst-libs/gst/vaapi/gstvaapisurface.h
+++ b/gst-libs/gst/vaapi/gstvaapisurface.h
@@ -110,19 +110,32 @@ typedef enum {
* uses ITU-R BT.601 standard for color space conversion
* @GST_VAAPI_COLOR_STANDARD_ITUR_BT_709:
* uses ITU-R BT.709 standard for color space conversion
+ * @GST_VAAPI_COLOR_STANDARD_ITUR_BT_470M:
+ * uses ITU-R BT.470-2 System M standard for color space conversion
+ * @GST_VAAPI_COLOR_STANDARD_ITUR_BT_470BG:
+ * uses ITU-R BT.470-2 System B, G standard for color space conversion
+ * @GST_VAAPI_COLOR_STANDARD_SMPTE_170M:
+ * uses SMPTE-170M standard for color space conversion
+ * @GST_VAAPI_COLOR_STANDARD_SMPTE_240M:
+ * uses SMPTE-240M standard for color space conversion
*
* The set of all render flags for gst_vaapi_window_put_surface().
*/
typedef enum {
- GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD = 1 << 0,
- GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD = 1 << 1,
- GST_VAAPI_PICTURE_STRUCTURE_FRAME =
- (
- GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD |
- GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD
- ),
- GST_VAAPI_COLOR_STANDARD_ITUR_BT_601 = 1 << 2,
- GST_VAAPI_COLOR_STANDARD_ITUR_BT_709 = 1 << 3,
+ /* Picture structure */
+ GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD = 0x01 << 0,
+ GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD = 0x02 << 0,
+ GST_VAAPI_PICTURE_STRUCTURE_FRAME = 0x03 << 0,
+ GST_VAAPI_PICTURE_STRUCTURE_MASK = 0x00000003, /* 2 bits */
+
+ /* Color standard */
+ GST_VAAPI_COLOR_STANDARD_ITUR_BT_601 = 0x01 << 2,
+ GST_VAAPI_COLOR_STANDARD_ITUR_BT_709 = 0x02 << 2,
+ GST_VAAPI_COLOR_STANDARD_ITUR_BT_470M = 0x03 << 2,
+ GST_VAAPI_COLOR_STANDARD_ITUR_BT_470BG = 0x04 << 2,
+ GST_VAAPI_COLOR_STANDARD_SMPTE_170M = 0x05 << 2,
+ GST_VAAPI_COLOR_STANDARD_SMPTE_240M = 0x06 << 2,
+ GST_VAAPI_COLOR_STANDARD_MASK = 0x0000003c, /* 4 bits */
} GstVaapiSurfaceRenderFlags;
#define GST_VAAPI_SURFACE(obj) \
diff --git a/gst-libs/gst/vaapi/gstvaapiutils.c b/gst-libs/gst/vaapi/gstvaapiutils.c
index 90510e51..daa9fc28 100644
--- a/gst-libs/gst/vaapi/gstvaapiutils.c
+++ b/gst-libs/gst/vaapi/gstvaapiutils.c
@@ -366,24 +366,42 @@ to_GstVideoOverlayFormatFlags(guint flags)
guint
from_GstVaapiSurfaceRenderFlags(guint flags)
{
- guint va_fields = 0, va_csc = 0;
+ guint va_fields, va_csc;
- if (flags & GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD)
- va_fields |= VA_TOP_FIELD;
- if (flags & GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD)
- va_fields |= VA_BOTTOM_FIELD;
- if ((va_fields ^ (VA_TOP_FIELD|VA_BOTTOM_FIELD)) == 0)
- va_fields = VA_FRAME_PICTURE;
+ /* Picture structure */
+ switch (flags & GST_VAAPI_PICTURE_STRUCTURE_MASK) {
+ case GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD:
+ va_fields = VA_TOP_FIELD;
+ break;
+ case GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD:
+ va_fields = VA_BOTTOM_FIELD;
+ break;
+ default:
+ va_fields = VA_FRAME_PICTURE;
+ break;
+ }
+ /* Color standard */
+ switch (flags & GST_VAAPI_COLOR_STANDARD_MASK) {
#ifdef VA_SRC_BT601
- if (flags & GST_VAAPI_COLOR_STANDARD_ITUR_BT_601)
+ case GST_VAAPI_COLOR_STANDARD_ITUR_BT_601:
va_csc = VA_SRC_BT601;
+ break;
#endif
#ifdef VA_SRC_BT709
- if (flags & GST_VAAPI_COLOR_STANDARD_ITUR_BT_709)
+ case GST_VAAPI_COLOR_STANDARD_ITUR_BT_709:
va_csc = VA_SRC_BT709;
+ break;
#endif
-
+#ifdef VA_SRC_SMPTE_240
+ case GST_VAAPI_COLOR_STANDARD_SMPTE_240M:
+ va_csc = VA_SRC_SMPTE_240;
+ break;
+#endif
+ default:
+ va_csc = 0;
+ break;
+ }
return va_fields|va_csc;
}
diff --git a/gst/vaapi/gstvaapipostproc.c b/gst/vaapi/gstvaapipostproc.c
index 21942523..6abcfb88 100644
--- a/gst/vaapi/gstvaapipostproc.c
+++ b/gst/vaapi/gstvaapipostproc.c
@@ -489,8 +489,7 @@ gst_vaapipostproc_process_vpp(GstBaseTransform *trans, GstBuffer *inbuf,
ds->tff = tff;
flags = gst_vaapi_video_meta_get_render_flags(inbuf_meta) &
- ~(GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD|
- GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD);
+ ~GST_VAAPI_PICTURE_STRUCTURE_MASK;
/* First field */
deint_method = postproc->deinterlace_method;
@@ -652,8 +651,7 @@ gst_vaapipostproc_process(GstBaseTransform *trans, GstBuffer *inbuf,
deint = is_interlaced_buffer(postproc, inbuf);
flags = gst_vaapi_video_meta_get_render_flags(meta) &
- ~(GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD|
- GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD);
+ ~GST_VAAPI_PICTURE_STRUCTURE_MASK;
/* First field */
fieldbuf = create_output_buffer(postproc);