1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 01:52:19 +00:00

Allow image format BGRA when using vo vdpau.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29798 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
cehoyos 2009-10-27 08:28:08 +00:00
parent 406c8a2b5b
commit 29c937fe80
2 changed files with 42 additions and 0 deletions

View File

@ -3511,6 +3511,10 @@ Use ITU-R BT.709 color space.
.IPs 3
Use SMPTE-240M color space.
.RE
.IPs force\-mixer
Forces the use of the VDPAU mixer, which implements all above options (default).
Use noforce\-mixer to allow displaying BGRA colorspace.
(Disables all above options if image format BGRA is actually used.)
.RE
.PD 1
.

View File

@ -162,6 +162,7 @@ static float denoise;
static float sharpen;
static int colorspace;
static int chroma_deint;
static int force_mixer;
static int top_field_first;
static int flip;
@ -310,6 +311,18 @@ static void resize(void)
mp_msg(MSGT_VO, MSGL_DBG2, "OUT CREATE: %u\n", output_surfaces[i]);
}
}
if (image_format == IMGFMT_BGRA) {
vdp_st = vdp_output_surface_render_output_surface(output_surfaces[surface_num],
NULL, VDP_INVALID_HANDLE,
NULL, NULL, NULL,
VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
CHECK_ST_WARNING("Error when calling vdp_output_surface_render_output_surface")
vdp_st = vdp_output_surface_render_output_surface(output_surfaces[1 - surface_num],
NULL, VDP_INVALID_HANDLE,
NULL, NULL, NULL,
VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
CHECK_ST_WARNING("Error when calling vdp_output_surface_render_output_surface")
} else
video_to_output_surface();
if (visible_buf)
flip_page();
@ -1010,6 +1023,19 @@ static uint32_t draw_image(mp_image_t *mpi)
deint_mpi[1] = deint_mpi[0];
deint_mpi[0] = mpi;
}
} else if (image_format == IMGFMT_BGRA) {
VdpStatus vdp_st;
VdpRect r = {0, 0, vid_width, vid_height};
vdp_st = vdp_output_surface_put_bits_native(output_surfaces[2],
(void const*const*)mpi->planes,
mpi->stride, &r);
CHECK_ST_ERROR("Error when calling vdp_output_surface_put_bits_native")
vdp_st = vdp_output_surface_render_output_surface(output_surfaces[surface_num],
&out_rect_vid,
output_surfaces[2],
&src_rect_vid, NULL, NULL,
VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
CHECK_ST_ERROR("Error when calling vdp_output_surface_render_output_surface")
} else if (!(mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)) {
VdpStatus vdp_st;
void *destdata[3] = {mpi->planes[0], mpi->planes[2], mpi->planes[1]};
@ -1063,6 +1089,9 @@ static int query_format(uint32_t format)
{
int default_flags = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_OSD | VFCAP_EOSD | VFCAP_EOSD_UNSCALED | VFCAP_FLIP;
switch (format) {
case IMGFMT_BGRA:
if (force_mixer)
return 0;
case IMGFMT_YV12:
case IMGFMT_I420:
case IMGFMT_IYUV:
@ -1151,6 +1180,7 @@ static const opt_t subopts[] = {
{"denoise", OPT_ARG_FLOAT, &denoise, NULL},
{"sharpen", OPT_ARG_FLOAT, &sharpen, NULL},
{"colorspace", OPT_ARG_INT, &colorspace, NULL},
{"force-mixer", OPT_ARG_BOOL, &force_mixer, NULL},
{NULL}
};
@ -1178,6 +1208,9 @@ static const char help_msg[] =
" 1: ITU-R BT.601 (default)\n"
" 2: ITU-R BT.709\n"
" 3: SMPTE-240M\n"
" force-mixer\n"
" Use the VDPAU mixer (default)\n"
" Use noforce-mixer to allow BGRA output (disables all above options)\n"
;
static int preinit(const char *arg)
@ -1196,6 +1229,7 @@ static int preinit(const char *arg)
denoise = 0;
sharpen = 0;
colorspace = 1;
force_mixer = 1;
if (subopt_parse(arg, subopts) != 0) {
mp_msg(MSGT_VO, MSGL_FATAL, help_msg);
return -1;
@ -1294,6 +1328,8 @@ static int control(uint32_t request, void *data, ...)
*(int*)data = deint;
return VO_TRUE;
case VOCTRL_SET_DEINTERLACE:
if (image_format == IMGFMT_BGRA)
return VO_NOTIMPL;
deint = *(int*)data;
if (deint)
deint = deint_type;
@ -1339,6 +1375,8 @@ static int control(uint32_t request, void *data, ...)
case VOCTRL_SET_EQUALIZER: {
va_list ap;
int value;
if (image_format == IMGFMT_BGRA)
return VO_NOTIMPL;
va_start(ap, data);
value = va_arg(ap, int);