vlVdpResolveDelayedRendering(vlsurface->device, NULL, NULL);
memset(&vtmpl, 0, sizeof(vtmpl));
vtmpl.buffer_format = format;
- vtmpl.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
+ vtmpl.chroma_format = FormatYCBCRToPipeChroma(source_ycbcr_format);
if (destination_rect) {
vtmpl.width = abs(destination_rect->x0-destination_rect->x1);
return -1;
}
+static inline enum pipe_video_chroma_format
+FormatYCBCRToPipeChroma(VdpYCbCrFormat vdpau_format)
+{
+ switch (vdpau_format) {
+ case VDP_YCBCR_FORMAT_NV12:
+ return PIPE_VIDEO_CHROMA_FORMAT_420;
+ case VDP_YCBCR_FORMAT_YV12:
+ return PIPE_VIDEO_CHROMA_FORMAT_420;
+ case VDP_YCBCR_FORMAT_UYVY:
+ return PIPE_VIDEO_CHROMA_FORMAT_422;
+ case VDP_YCBCR_FORMAT_YUYV:
+ return PIPE_VIDEO_CHROMA_FORMAT_422;
+ case VDP_YCBCR_FORMAT_Y8U8V8A8:
+ return PIPE_VIDEO_CHROMA_FORMAT_444;
+ case VDP_YCBCR_FORMAT_V8U8Y8A8:
+ return PIPE_VIDEO_CHROMA_FORMAT_444;
+ default:
+ assert(0);
+ }
+
+ return PIPE_FORMAT_NONE;
+}
+
static inline enum pipe_format
FormatYCBCRToPipe(VdpYCbCrFormat vdpau_format)
{