{
VdpDevice device;
VdpDecoderProfile profile;
+ VdpYCbCrFormat format;
AVVDPAUContext context;
VdpVideoSurface surfaces[MAX_SURFACES];
uint32_t available;
+ vlc_fourcc_t chroma;
uint16_t width;
uint16_t height;
void *display;
pitches[i] = pic->p[i].i_pitch;
}
- err = sys->VideoSurfaceGetBitsYCbCr (*surface, VDP_YCBCR_FORMAT_YV12,
+ err = sys->VideoSurfaceGetBitsYCbCr (*surface, sys->format,
planes, pitches);
if (err != VDP_STATUS_OK)
{
}
*ctxp = &sys->context;
- *chromap = VLC_CODEC_YV12;
+ *chromap = sys->chroma;
return VLC_SUCCESS;
}
"YUV 4:2:0", width, height);
if (sys->VideoSurfaceQueryGetPutBitsYCbCrCapabilities (device,
- VDP_CHROMA_TYPE_420, VDP_YCBCR_FORMAT_YV12, &support) != VDP_STATUS_OK)
- support = VDP_FALSE;
- if (!support)
+ VDP_CHROMA_TYPE_420, VDP_YCBCR_FORMAT_YV12, &support)
+ == VDP_STATUS_OK && support == VDP_TRUE)
+ {
+ sys->format = VDP_YCBCR_FORMAT_YV12;
+ sys->chroma = VLC_CODEC_YV12;
+ }
+ else
+ if (sys->VideoSurfaceQueryGetPutBitsYCbCrCapabilities (device,
+ VDP_CHROMA_TYPE_420, VDP_YCBCR_FORMAT_NV12, &support)
+ == VDP_STATUS_OK && support == VDP_TRUE)
+ {
+ sys->format = VDP_YCBCR_FORMAT_NV12;
+ sys->chroma = VLC_CODEC_NV12;
+ }
+ else
{
- msg_Err (va, "video surface reading not supported: %s as %s",
- "YUV 4:2:0", "YV12");
+ msg_Err (va, "video surface reading not supported: %s", "YUV 4:2:0");
goto error;
}