From 3e7aa4a9372393369a60b012305e19cbd7bb533f Mon Sep 17 00:00:00 2001 From: Zhong Cong Date: Mon, 24 Jun 2013 17:26:17 +0800 Subject: [PATCH] download: support RGBx in vaapidownload Signed-off-by: Zhong Cong --- gst-libs/gst/vaapi/gstvaapiimage.c | 3 +++ gst-libs/gst/vaapi/gstvaapiimageformat.c | 2 ++ gst-libs/gst/vaapi/gstvaapiimageformat.h | 1 + gst/vaapi/gstvaapidownload.c | 6 ++++-- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapiimage.c b/gst-libs/gst/vaapi/gstvaapiimage.c index ffe11bd..edefa48 100644 --- a/gst-libs/gst/vaapi/gstvaapiimage.c +++ b/gst-libs/gst/vaapi/gstvaapiimage.c @@ -142,6 +142,7 @@ vaapi_image_is_linear(const VAImage *va_image) case VA_FOURCC('R','G','B','A'): case VA_FOURCC('A','B','G','R'): case VA_FOURCC('B','G','R','A'): + case VA_FOURCC('R','G','B','X'): data_size = 4 * width * height; break; default: @@ -983,6 +984,7 @@ init_image_from_buffer(GstVaapiImageRaw *raw_image, GstBuffer *buffer) case GST_VAAPI_IMAGE_RGBA: case GST_VAAPI_IMAGE_ABGR: case GST_VAAPI_IMAGE_BGRA: + case GST_VAAPI_IMAGE_RGBx: raw_image->num_planes = 1; raw_image->pixels[0] = data; raw_image->stride[0] = width * 4; @@ -1163,6 +1165,7 @@ copy_image( case GST_VAAPI_IMAGE_RGBA: case GST_VAAPI_IMAGE_ABGR: case GST_VAAPI_IMAGE_BGRA: + case GST_VAAPI_IMAGE_RGBx: copy_image_RGBA(dst_image, src_image, rect); break; default: diff --git a/gst-libs/gst/vaapi/gstvaapiimageformat.c b/gst-libs/gst/vaapi/gstvaapiimageformat.c index 6768bf9..7df411e 100644 --- a/gst-libs/gst/vaapi/gstvaapiimageformat.c +++ b/gst-libs/gst/vaapi/gstvaapiimageformat.c @@ -74,6 +74,8 @@ static const GstVaapiImageFormatMap gst_vaapi_image_formats[] = { 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000), DEF_RGB(RGBA, ('R','G','B','A'), LSB, 32, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000), + DEF_RGB(RGBx, ('R','G','B','X'), LSB, 32, + 24, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000), #endif { 0, } }; diff --git a/gst-libs/gst/vaapi/gstvaapiimageformat.h b/gst-libs/gst/vaapi/gstvaapiimageformat.h index 4db105b..5d65ba5 100644 --- a/gst-libs/gst/vaapi/gstvaapiimageformat.h +++ b/gst-libs/gst/vaapi/gstvaapiimageformat.h @@ -60,6 +60,7 @@ typedef enum { GST_VAAPI_IMAGE_RGBA = GST_MAKE_FOURCC('R','G','B','A'), GST_VAAPI_IMAGE_ABGR = GST_MAKE_FOURCC('A','B','G','R'), GST_VAAPI_IMAGE_BGRA = GST_MAKE_FOURCC('B','G','R','A'), + GST_VAAPI_IMAGE_RGBx = GST_MAKE_FOURCC('R','G','B','X'), } GstVaapiImageFormat; gboolean diff --git a/gst/vaapi/gstvaapidownload.c b/gst/vaapi/gstvaapidownload.c index e0a8bda..d2f7138 100644 --- a/gst/vaapi/gstvaapidownload.c +++ b/gst/vaapi/gstvaapidownload.c @@ -55,7 +55,8 @@ static const GstElementDetails gst_vaapidownload_details = static const char gst_vaapidownload_yuv_caps_str[] = "video/x-raw-yuv, " "width = (int) [ 1, MAX ], " - "height = (int) [ 1, MAX ]; "; + "height = (int) [ 1, MAX ]; " + GST_VIDEO_CAPS_RGBx";"; static const char gst_vaapidownload_vaapi_caps_str[] = GST_VAAPI_SURFACE_CAPS; @@ -590,7 +591,8 @@ gst_vaapidownload_transform_caps( } } else { - if (!gst_structure_has_name(structure, "video/x-raw-yuv")) + if (!gst_structure_has_name(structure, "video/x-raw-yuv") && + !gst_structure_has_name(structure, "video/x-raw-rgb")) return NULL; out_caps = gst_caps_from_string(gst_vaapidownload_vaapi_caps_str); -- 1.7.9.5