[Mesa-dev] [PATCHv2 2/3] nouveau: advertise only supported video entrypoints
Emil Velikov
emil.l.velikov at gmail.com
Sun Feb 16 04:40:02 PST 2014
The nv84 code (vp2)
- bitstream h264
- idct and bitstream mpeg12
Generic video (vpe2)
- mc and idct mpeg12
v2: Drop extra brackets, assert on incorrect video format.
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
src/gallium/drivers/nouveau/nouveau_video.c | 15 ++++++++------
src/gallium/drivers/nouveau/nv50/nv84_video.c | 28 ++++++++++++++++++++-------
2 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/src/gallium/drivers/nouveau/nouveau_video.c b/src/gallium/drivers/nouveau/nouveau_video.c
index 8795c9d..d686d2d 100644
--- a/src/gallium/drivers/nouveau/nouveau_video.c
+++ b/src/gallium/drivers/nouveau/nouveau_video.c
@@ -510,13 +510,11 @@ nouveau_create_decoder(struct pipe_context *context,
int ret;
bool is8274 = screen->device->chipset > 0x80;
- debug_printf("Acceleration level: %s\n", templ->entrypoint <= PIPE_VIDEO_ENTRYPOINT_BITSTREAM ? "bit":
- templ->entrypoint == PIPE_VIDEO_ENTRYPOINT_IDCT ? "IDCT" : "MC");
+ debug_printf("Acceleration level: %s\n", templ->entrypoint == PIPE_VIDEO_ENTRYPOINT_IDCT ? "IDCT" : "MC");
if (getenv("XVMC_VL"))
goto vl;
- if (u_reduce_video_profile(templ->profile) != PIPE_VIDEO_FORMAT_MPEG12)
- goto vl;
+ assert(u_reduce_video_profile(templ->profile) == PIPE_VIDEO_FORMAT_MPEG12);
if (screen->device->chipset >= 0x98 && screen->device->chipset != 0xa0)
goto vl;
if (screen->device->chipset < 0x40)
@@ -838,8 +836,13 @@ nouveau_screen_get_video_param(struct pipe_screen *pscreen,
{
switch (param) {
case PIPE_VIDEO_CAP_SUPPORTED:
- return entrypoint >= PIPE_VIDEO_ENTRYPOINT_IDCT &&
- u_reduce_video_profile(profile) == PIPE_VIDEO_FORMAT_MPEG12;
+ switch (entrypoint) {
+ case PIPE_VIDEO_ENTRYPOINT_IDCT:
+ case PIPE_VIDEO_ENTRYPOINT_MC:
+ return u_reduce_video_profile(profile) == PIPE_VIDEO_FORMAT_MPEG12;
+ default:
+ return 0;
+ }
case PIPE_VIDEO_CAP_NPOT_TEXTURES:
return 1;
case PIPE_VIDEO_CAP_MAX_WIDTH:
diff --git a/src/gallium/drivers/nouveau/nv50/nv84_video.c b/src/gallium/drivers/nouveau/nv50/nv84_video.c
index a39f572..36b0077 100644
--- a/src/gallium/drivers/nouveau/nv50/nv84_video.c
+++ b/src/gallium/drivers/nouveau/nv50/nv84_video.c
@@ -280,10 +280,16 @@ nv84_create_decoder(struct pipe_context *context,
if (getenv("XVMC_VL"))
return vl_create_decoder(context, templ);
- if ((is_h264 && templ->entrypoint != PIPE_VIDEO_ENTRYPOINT_BITSTREAM) ||
- (is_mpeg12 && templ->entrypoint > PIPE_VIDEO_ENTRYPOINT_IDCT)) {
- debug_printf("%x\n", templ->entrypoint);
- return NULL;
+ switch (templ->entrypoint) {
+ case PIPE_VIDEO_ENTRYPOINT_BITSTREAM:
+ assert(is_mpeg12 || is_h264);
+ break;
+ case PIPE_VIDEO_ENTRYPOINT_IDCT:
+ assert(is_mpeg12);
+ break;
+ default:
+ assert(!"Unsupported video entrypoint");
+ break;
}
if (!is_h264 && !is_mpeg12) {
@@ -812,9 +818,17 @@ nv84_screen_get_video_param(struct pipe_screen *pscreen,
switch (param) {
case PIPE_VIDEO_CAP_SUPPORTED:
codec = u_reduce_video_profile(profile);
- return (codec == PIPE_VIDEO_FORMAT_MPEG4_AVC ||
- codec == PIPE_VIDEO_FORMAT_MPEG12) &&
- firmware_present(pscreen, codec);
+ switch (codec) {
+ case PIPE_VIDEO_FORMAT_MPEG12:
+ return (entrypoint == PIPE_VIDEO_ENTRYPOINT_BITSTREAM ||
+ entrypoint == PIPE_VIDEO_ENTRYPOINT_IDCT) &&
+ firmware_present(pscreen, codec);
+ case PIPE_VIDEO_FORMAT_MPEG4_AVC:
+ return (entrypoint == PIPE_VIDEO_ENTRYPOINT_BITSTREAM) &&
+ firmware_present(pscreen, codec);
+ default:
+ return 0;
+ }
case PIPE_VIDEO_CAP_NPOT_TEXTURES:
return 1;
case PIPE_VIDEO_CAP_MAX_WIDTH:
--
1.9.0
More information about the mesa-dev
mailing list