nouveau: hook up video decoding with nouveau_context

This doesn't include nvfx since its context struct is not derived
from common nouveau_context (yet).
This commit is contained in:
Christoph Bumiller 2011-07-21 10:39:41 +02:00
parent 76bccaff0c
commit ea316c5e06
8 changed files with 56 additions and 1 deletions

View file

@ -10,6 +10,7 @@ LIBRARY_INCLUDES = \
C_SOURCES = nouveau_screen.c \
nouveau_fence.c \
nouveau_mm.c \
nouveau_buffer.c
nouveau_buffer.c \
nouveau_video.c
include ../../Makefile.template

View file

@ -23,4 +23,7 @@ nouveau_context(struct pipe_context *pipe)
return (struct nouveau_context *)pipe;
}
void
nouveau_context_init_vdec(struct nouveau_context *);
#endif

View file

@ -76,6 +76,7 @@ nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *);
void nouveau_screen_fini(struct nouveau_screen *);
void nouveau_screen_init_vdec(struct nouveau_screen *);
#ifndef NOUVEAU_NVC0

View file

@ -0,0 +1,39 @@
#include "vl/vl_decoder.h"
#include "vl/vl_video_buffer.h"
#include "nouveau/nouveau_screen.h"
#include "nouveau/nouveau_context.h"
static int
nouveau_screen_get_video_param(struct pipe_screen *pscreen,
enum pipe_video_profile profile,
enum pipe_video_cap param)
{
switch (param) {
case PIPE_VIDEO_CAP_SUPPORTED:
return vl_profile_supported(pscreen, profile);
case PIPE_VIDEO_CAP_NPOT_TEXTURES:
return 1;
case PIPE_VIDEO_CAP_MAX_WIDTH:
case PIPE_VIDEO_CAP_MAX_HEIGHT:
return vl_video_buffer_max_size(pscreen);
default:
debug_printf("unknown video param: %d\n", param);
return 0;
}
}
void
nouveau_screen_init_vdec(struct nouveau_screen *screen)
{
screen->base.get_video_param = nouveau_screen_get_video_param;
screen->base.is_video_format_supported = vl_video_buffer_is_format_supported;
}
void
nouveau_context_init_vdec(struct nouveau_context *nv)
{
nv->pipe.create_video_decoder = vl_create_decoder;
nv->pipe.create_video_buffer = vl_video_buffer_create;
}

View file

@ -149,6 +149,8 @@ nv50_create(struct pipe_screen *pscreen, void *priv)
assert(nv50->draw);
draw_set_rasterize_stage(nv50->draw, nv50_draw_render_stage(nv50));
nouveau_context_init_vdec(&nv50->base);
return pipe;
}

View file

@ -315,6 +315,8 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
nv50_screen_init_resource_functions(pscreen);
nouveau_screen_init_vdec(&screen->base);
ret = nouveau_bo_new(dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, 4096,
&screen->fence.bo);
if (ret)

View file

@ -150,6 +150,8 @@ nvc0_create(struct pipe_screen *pscreen, void *priv)
assert(nvc0->draw);
draw_set_rasterize_stage(nvc0->draw, nvc0_draw_render_stage(nvc0));
nouveau_context_init_vdec(&nvc0->base);
return pipe;
}

View file

@ -24,6 +24,9 @@
#include "util/u_format_s3tc.h"
#include "pipe/p_screen.h"
#include "vl/vl_decoder.h"
#include "vl/vl_video_buffer.h"
#include "nvc0_context.h"
#include "nvc0_screen.h"
@ -373,6 +376,8 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
nvc0_screen_init_resource_functions(pscreen);
nouveau_screen_init_vdec(&screen->base);
ret = nouveau_bo_new(dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, 4096,
&screen->fence.bo);
if (ret)