vdpau: add support for UYVY
This commit is contained in:
parent
da05417b13
commit
0a423e1de0
@ -55,7 +55,8 @@ static GstStaticPadTemplate src_template =
|
|||||||
GST_PAD_SRC,
|
GST_PAD_SRC,
|
||||||
GST_PAD_ALWAYS,
|
GST_PAD_ALWAYS,
|
||||||
GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420") ";"
|
GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420") ";"
|
||||||
GST_VIDEO_CAPS_YUV ("YV12") ";" GST_VIDEO_CAPS_YUV ("NV12")));
|
GST_VIDEO_CAPS_YUV ("YV12") ";" GST_VIDEO_CAPS_YUV ("NV12") ";"
|
||||||
|
GST_VIDEO_CAPS_YUV ("UYVY")));
|
||||||
|
|
||||||
#define DEBUG_INIT(bla) \
|
#define DEBUG_INIT(bla) \
|
||||||
GST_DEBUG_CATEGORY_INIT (gst_vdp_video_yuv_debug, "vdpauvideoyuv", 0, "VDPAU VdpSurface to YUV");
|
GST_DEBUG_CATEGORY_INIT (gst_vdp_video_yuv_debug, "vdpauvideoyuv", 0, "VDPAU VdpSurface to YUV");
|
||||||
@ -178,6 +179,32 @@ gst_vdp_video_yuv_transform (GstBaseTransform * trans, GstBuffer * inbuf,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
|
||||||
|
{
|
||||||
|
VdpStatus status;
|
||||||
|
guint8 *data[1];
|
||||||
|
guint32 stride[1];
|
||||||
|
|
||||||
|
data[0] = GST_BUFFER_DATA (outbuf);
|
||||||
|
|
||||||
|
stride[0] = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_UYVY,
|
||||||
|
0, video_yuv->width);
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (video_yuv, "Entering vdp_video_surface_get_bits_ycbcr");
|
||||||
|
status =
|
||||||
|
device->vdp_video_surface_get_bits_ycbcr (surface,
|
||||||
|
VDP_YCBCR_FORMAT_UYVY, (void *) data, stride);
|
||||||
|
GST_LOG_OBJECT (video_yuv,
|
||||||
|
"Got status %d from vdp_video_surface_get_bits_ycbcr", status);
|
||||||
|
if (G_UNLIKELY (status != VDP_STATUS_OK)) {
|
||||||
|
GST_ELEMENT_ERROR (video_yuv, RESOURCE, READ,
|
||||||
|
("Couldn't get data from vdpau"),
|
||||||
|
("Error returned from vdpau was: %s",
|
||||||
|
device->vdp_get_error_string (status)));
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -219,6 +246,13 @@ gst_vdp_video_transform_size (GstBaseTransform * trans,
|
|||||||
video_yuv->width * video_yuv->height / 2;
|
video_yuv->width * video_yuv->height / 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
|
||||||
|
{
|
||||||
|
*othersize =
|
||||||
|
gst_video_format_get_size (GST_VIDEO_FORMAT_UYVY, video_yuv->width,
|
||||||
|
video_yuv->height);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,8 @@ static GstStaticPadTemplate sink_template =
|
|||||||
GST_PAD_SINK,
|
GST_PAD_SINK,
|
||||||
GST_PAD_ALWAYS,
|
GST_PAD_ALWAYS,
|
||||||
GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420") ";"
|
GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420") ";"
|
||||||
GST_VIDEO_CAPS_YUV ("YV12") ";" GST_VIDEO_CAPS_YUV ("NV12")));
|
GST_VIDEO_CAPS_YUV ("YV12") ";" GST_VIDEO_CAPS_YUV ("NV12") ";"
|
||||||
|
GST_VIDEO_CAPS_YUV ("UYVY")));
|
||||||
|
|
||||||
static GstStaticPadTemplate src_template =
|
static GstStaticPadTemplate src_template =
|
||||||
GST_STATIC_PAD_TEMPLATE (GST_BASE_TRANSFORM_SRC_NAME,
|
GST_STATIC_PAD_TEMPLATE (GST_BASE_TRANSFORM_SRC_NAME,
|
||||||
@ -197,6 +198,29 @@ gst_vdp_yuv_video_transform (GstBaseTransform * trans, GstBuffer * inbuf,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
|
||||||
|
{
|
||||||
|
VdpStatus status;
|
||||||
|
guint8 *data[1];
|
||||||
|
guint32 stride[1];
|
||||||
|
|
||||||
|
data[0] = GST_BUFFER_DATA (inbuf);
|
||||||
|
|
||||||
|
stride[0] = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_UYVY,
|
||||||
|
0, yuv_video->width);
|
||||||
|
|
||||||
|
status =
|
||||||
|
device->vdp_video_surface_put_bits_ycbcr (surface,
|
||||||
|
VDP_YCBCR_FORMAT_UYVY, (void *) data, stride);
|
||||||
|
if (G_UNLIKELY (status != VDP_STATUS_OK)) {
|
||||||
|
GST_ELEMENT_ERROR (yuv_video, RESOURCE, READ,
|
||||||
|
("Couldn't get data from vdpau"),
|
||||||
|
("Error returned from vdpau was: %s",
|
||||||
|
device->vdp_get_error_string (status)));
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user