vl: reintroduce PIPE_VIDEO_CAP_PREFERED_FORMAT
Create the video buffers in the format the driver preffers. This temporary creates problems with decoder less VDPAU video playback. Signed-off-by: Christian König <deathsimple@vodafone.de>
This commit is contained in:
@@ -835,6 +835,8 @@ nouveau_screen_get_video_param(struct pipe_screen *pscreen,
|
|||||||
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
||||||
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
||||||
return vl_video_buffer_max_size(pscreen);
|
return vl_video_buffer_max_size(pscreen);
|
||||||
|
case PIPE_VIDEO_CAP_PREFERED_FORMAT:
|
||||||
|
return PIPE_FORMAT_NV12;
|
||||||
default:
|
default:
|
||||||
debug_printf("unknown video param: %d\n", param);
|
debug_printf("unknown video param: %d\n", param);
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -230,6 +230,8 @@ nvfx_screen_get_video_param(struct pipe_screen *screen,
|
|||||||
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
||||||
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
||||||
return vl_video_buffer_max_size(screen);
|
return vl_video_buffer_max_size(screen);
|
||||||
|
case PIPE_VIDEO_CAP_PREFERED_FORMAT:
|
||||||
|
return PIPE_FORMAT_NV12;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -307,6 +307,8 @@ static int r300_get_video_param(struct pipe_screen *screen,
|
|||||||
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
||||||
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
||||||
return vl_video_buffer_max_size(screen);
|
return vl_video_buffer_max_size(screen);
|
||||||
|
case PIPE_VIDEO_CAP_PREFERED_FORMAT:
|
||||||
|
return PIPE_FORMAT_NV12;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -526,6 +526,8 @@ static int r600_get_video_param(struct pipe_screen *screen,
|
|||||||
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
||||||
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
||||||
return vl_video_buffer_max_size(screen);
|
return vl_video_buffer_max_size(screen);
|
||||||
|
case PIPE_VIDEO_CAP_PREFERED_FORMAT:
|
||||||
|
return PIPE_FORMAT_NV12;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -201,6 +201,8 @@ softpipe_get_video_param(struct pipe_screen *screen,
|
|||||||
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
case PIPE_VIDEO_CAP_MAX_WIDTH:
|
||||||
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
case PIPE_VIDEO_CAP_MAX_HEIGHT:
|
||||||
return vl_video_buffer_max_size(screen);
|
return vl_video_buffer_max_size(screen);
|
||||||
|
case PIPE_VIDEO_CAP_PREFERED_FORMAT:
|
||||||
|
return PIPE_FORMAT_NV12;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -50,7 +50,8 @@ enum pipe_video_cap
|
|||||||
PIPE_VIDEO_CAP_SUPPORTED = 0,
|
PIPE_VIDEO_CAP_SUPPORTED = 0,
|
||||||
PIPE_VIDEO_CAP_NPOT_TEXTURES = 1,
|
PIPE_VIDEO_CAP_NPOT_TEXTURES = 1,
|
||||||
PIPE_VIDEO_CAP_MAX_WIDTH = 2,
|
PIPE_VIDEO_CAP_MAX_WIDTH = 2,
|
||||||
PIPE_VIDEO_CAP_MAX_HEIGHT = 3
|
PIPE_VIDEO_CAP_MAX_HEIGHT = 3,
|
||||||
|
PIPE_VIDEO_CAP_PREFERED_FORMAT = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
enum pipe_video_codec
|
enum pipe_video_codec
|
||||||
|
@@ -74,7 +74,12 @@ vlVdpVideoSurfaceCreate(VdpDevice device, VdpChromaType chroma_type,
|
|||||||
|
|
||||||
p_surf->device = dev;
|
p_surf->device = dev;
|
||||||
memset(&tmpl, 0, sizeof(tmpl));
|
memset(&tmpl, 0, sizeof(tmpl));
|
||||||
tmpl.buffer_format = PIPE_FORMAT_YV12;
|
tmpl.buffer_format = dev->context->pipe->screen->get_video_param
|
||||||
|
(
|
||||||
|
dev->context->pipe->screen,
|
||||||
|
PIPE_VIDEO_PROFILE_UNKNOWN,
|
||||||
|
PIPE_VIDEO_CAP_PREFERED_FORMAT
|
||||||
|
);
|
||||||
tmpl.chroma_format = ChromaToPipe(chroma_type);
|
tmpl.chroma_format = ChromaToPipe(chroma_type);
|
||||||
tmpl.width = width;
|
tmpl.width = width;
|
||||||
tmpl.height = height;
|
tmpl.height = height;
|
||||||
|
@@ -175,7 +175,12 @@ Status XvMCCreateSurface(Display *dpy, XvMCContext *context, XvMCSurface *surfac
|
|||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
|
|
||||||
memset(&tmpl, 0, sizeof(tmpl));
|
memset(&tmpl, 0, sizeof(tmpl));
|
||||||
tmpl.buffer_format = PIPE_FORMAT_NV12;
|
tmpl.buffer_format = pipe->screen->get_video_param
|
||||||
|
(
|
||||||
|
pipe->screen,
|
||||||
|
PIPE_VIDEO_PROFILE_MPEG2_MAIN,
|
||||||
|
PIPE_VIDEO_CAP_PREFERED_FORMAT
|
||||||
|
);
|
||||||
tmpl.chroma_format = context_priv->decoder->chroma_format;
|
tmpl.chroma_format = context_priv->decoder->chroma_format;
|
||||||
tmpl.width = context_priv->decoder->width;
|
tmpl.width = context_priv->decoder->width;
|
||||||
tmpl.height = context_priv->decoder->height;
|
tmpl.height = context_priv->decoder->height;
|
||||||
|
Reference in New Issue
Block a user