{
struct r600_screen *rscreen = (struct r600_screen *)screen;
- /* No support for MPEG4 on UVD 2.x */
- if (param == PIPE_VIDEO_CAP_SUPPORTED && rscreen->family < CHIP_PALM &&
- u_reduce_video_profile(profile) == PIPE_VIDEO_CODEC_MPEG4)
- return false;
+ /* UVD 2.x limits */
+ if (rscreen->family < CHIP_PALM) {
+ enum pipe_video_codec codec = u_reduce_video_profile(profile);
+ switch (param) {
+ case PIPE_VIDEO_CAP_SUPPORTED:
+ /* no support for MPEG4 */
+ return codec != PIPE_VIDEO_CODEC_MPEG4;
+ case PIPE_VIDEO_CAP_PREFERS_INTERLACED:
+ case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED:
+ /* and MPEG2 only with shaders */
+ return codec != PIPE_VIDEO_CODEC_MPEG12;
+ default:
+ break;
+ }
+ }
return ruvd_get_video_param(screen, profile, param);
}
ruvd_set_dtb set_dtb)
{
unsigned dpb_size = calc_dpb_size(profile, width, height, max_references);
+ struct radeon_info info;
struct ruvd_decoder *dec;
struct ruvd_msg msg;
int i;
+ ws->query_info(ws, &info);
+
switch(u_reduce_video_profile(profile)) {
case PIPE_VIDEO_CODEC_MPEG12:
- if (entrypoint > PIPE_VIDEO_ENTRYPOINT_BITSTREAM)
+ if (entrypoint > PIPE_VIDEO_ENTRYPOINT_BITSTREAM || info.family < CHIP_PALM)
return vl_create_mpeg12_decoder(context, profile, entrypoint,
chroma_format, width,
height, max_references, expect_chunked_decode);