annotate libvo/vo_vdpau.c @ 31254:e888e262e3f0

Remove colorspace conversion code from -vo yuv4mpeg, -vf scale should be able to handle this just as well (or better) including interlaced. If not, this needs to be fixed there instead of duplicating code.
author reimar
date Sat, 05 Jun 2010 06:45:01 +0000
parents f8939d5b14b5
children ad274a5b093b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1 /*
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
2 * VDPAU video output driver
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
3 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
4 * Copyright (C) 2008 NVIDIA
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
5 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
6 * This file is part of MPlayer.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
7 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
11 * (at your option) any later version.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
12 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
16 * GNU General Public License for more details.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
17 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License along
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
21 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
22
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
23 /**
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
24 * \defgroup VDPAU_Presentation VDPAU Presentation
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
25 * \ingroup Decoder
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
26 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
27 * Actual decoding and presentation are implemented here.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
28 * All necessary frame information is collected through
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
29 * the "vdpau_render_state" structure after parsing all headers
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
30 * etc. in libavcodec for different codecs.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
31 *
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
32 * @{
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
33 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
34
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
35 #include <stdio.h>
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
36
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
37 #include "config.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
38 #include "mp_msg.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
39 #include "video_out.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
40 #include "video_out_internal.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
41 #include "x11_common.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
42 #include "aspect.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
43 #include "sub.h"
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
44 #include "subopt-helper.h"
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
45
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
46 #include "libavcodec/vdpau.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
47
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
48 #include "gui/interface.h"
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
49
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
50 #include "libavutil/common.h"
28729
bbf7f7100e91 Use M_PI for pi.
cehoyos
parents: 28728
diff changeset
51 #include "libavutil/mathematics.h"
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
52
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
53 #include "libass/ass_mp.h"
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
54
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
55 static vo_info_t info = {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
56 "VDPAU with X11",
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
57 "vdpau",
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
58 "Rajib Mahapatra <rmahapatra@nvidia.com> and others",
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
59 ""
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
60 };
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
61
30925
f8939d5b14b5 Mark some more LIBVO_EXTERN declarations as const where possible.
reimar
parents: 30758
diff changeset
62 const LIBVO_EXTERN(vdpau)
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
63
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
64 #define CHECK_ST_ERROR(message) \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
65 if (vdp_st != VDP_STATUS_OK) { \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
66 mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] %s: %s\n", \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
67 message, vdp_get_error_string(vdp_st)); \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
68 return -1; \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
69 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
70
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
71 #define CHECK_ST_WARNING(message) \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
72 if (vdp_st != VDP_STATUS_OK) \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
73 mp_msg(MSGT_VO, MSGL_WARN, "[vdpau] %s: %s\n", \
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
74 message, vdp_get_error_string(vdp_st));
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
75
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
76 /* number of video and output surfaces */
30006
73d653fd865f Improve VDPAU render performance by increasing number of output surfaces.
cehoyos
parents: 29861
diff changeset
77 #define NUM_OUTPUT_SURFACES 3
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
78 #define MAX_VIDEO_SURFACES 50
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
79
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
80 /* number of palette entries */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
81 #define PALETTE_SIZE 256
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
82
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
83 /* Initial maximum number of EOSD surfaces */
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
84 #define EOSD_SURFACES_INITIAL 512
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
85
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
86 /*
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
87 * Global variable declaration - VDPAU specific
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
88 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
89
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
90 /* Declaration for all variables of win_x11_init_vdpau_procs() and
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
91 * win_x11_init_vdpau_flip_queue() functions
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
92 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
93 static VdpDevice vdp_device;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
94 static VdpGetProcAddress *vdp_get_proc_address;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
95
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
96 static VdpPresentationQueueTarget vdp_flip_target;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
97 static VdpPresentationQueue vdp_flip_queue;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
98
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
99 static VdpDeviceDestroy *vdp_device_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
100 static VdpVideoSurfaceCreate *vdp_video_surface_create;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
101 static VdpVideoSurfaceDestroy *vdp_video_surface_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
102
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
103 static VdpGetErrorString *vdp_get_error_string;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
104
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
105 /* May be used in software filtering/postprocessing options
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
106 * in MPlayer (./mplayer -vf ..) if we copy video_surface data to
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
107 * system memory.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
108 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
109 static VdpVideoSurfacePutBitsYCbCr *vdp_video_surface_put_bits_y_cb_cr;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
110 static VdpOutputSurfacePutBitsNative *vdp_output_surface_put_bits_native;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
111
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
112 static VdpOutputSurfaceCreate *vdp_output_surface_create;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
113 static VdpOutputSurfaceDestroy *vdp_output_surface_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
114
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
115 /* VideoMixer puts video_surface data on displayable output_surface. */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
116 static VdpVideoMixerCreate *vdp_video_mixer_create;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
117 static VdpVideoMixerDestroy *vdp_video_mixer_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
118 static VdpVideoMixerRender *vdp_video_mixer_render;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
119 static VdpVideoMixerSetFeatureEnables *vdp_video_mixer_set_feature_enables;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
120 static VdpVideoMixerSetAttributeValues *vdp_video_mixer_set_attribute_values;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
121
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
122 static VdpPresentationQueueTargetDestroy *vdp_presentation_queue_target_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
123 static VdpPresentationQueueCreate *vdp_presentation_queue_create;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
124 static VdpPresentationQueueDestroy *vdp_presentation_queue_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
125 static VdpPresentationQueueDisplay *vdp_presentation_queue_display;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
126 static VdpPresentationQueueBlockUntilSurfaceIdle *vdp_presentation_queue_block_until_surface_idle;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
127 static VdpPresentationQueueTargetCreateX11 *vdp_presentation_queue_target_create_x11;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
128
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
129 static VdpOutputSurfaceRenderOutputSurface *vdp_output_surface_render_output_surface;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
130 static VdpOutputSurfacePutBitsIndexed *vdp_output_surface_put_bits_indexed;
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
131 static VdpOutputSurfaceRenderBitmapSurface *vdp_output_surface_render_bitmap_surface;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
132
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
133 static VdpBitmapSurfaceCreate *vdp_bitmap_surface_create;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
134 static VdpBitmapSurfaceDestroy *vdp_bitmap_surface_destroy;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
135 static VdpBitmapSurfacePutBitsNative *vdp_bitmap_surface_putbits_native;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
136
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
137 static VdpDecoderCreate *vdp_decoder_create;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
138 static VdpDecoderDestroy *vdp_decoder_destroy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
139 static VdpDecoderRender *vdp_decoder_render;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
140
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
141 static VdpGenerateCSCMatrix *vdp_generate_csc_matrix;
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
142 static VdpPreemptionCallbackRegister *vdp_preemption_callback_register;
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
143
28696
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
144 /* output_surfaces[NUM_OUTPUT_SURFACES] is misused for OSD. */
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
145 #define osd_surface output_surfaces[NUM_OUTPUT_SURFACES]
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
146 static VdpOutputSurface output_surfaces[NUM_OUTPUT_SURFACES + 1];
28933
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
147 static VdpVideoSurface deint_surfaces[3];
29017
c9a2d95c580a New vdpau deinterlacing code needs one reference surface less.
cehoyos
parents: 29016
diff changeset
148 static mp_image_t *deint_mpi[2];
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
149 static int output_surface_width, output_surface_height;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
150
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
151 static VdpVideoMixer video_mixer;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
152 static int deint;
28709
4e89476f8952 Do not forget the chosen deinterlacer for -vo vdpau.
cehoyos
parents: 28708
diff changeset
153 static int deint_type;
28933
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
154 static int deint_counter;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
155 static int pullup;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
156 static float denoise;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
157 static float sharpen;
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
158 static int colorspace;
28944
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
159 static int chroma_deint;
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
160 static int force_mixer;
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
161 static int top_field_first;
29752
a1da895d9947 Implement VFCAP_FLIP for vo_vdpau.
cehoyos
parents: 29751
diff changeset
162 static int flip;
29781
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
163 static int hqscaling;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
164
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
165 static VdpDecoder decoder;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
166 static int decoder_max_refs;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
167
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
168 static VdpRect src_rect_vid;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
169 static VdpRect out_rect_vid;
28598
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
170 static int border_x, border_y;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
171
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
172 static struct vdpau_render_state surface_render[MAX_VIDEO_SURFACES];
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
173 static int surface_num;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
174 static int vid_surface_num;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
175 static uint32_t vid_width, vid_height;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
176 static uint32_t image_format;
29066
ab51a502ebb5 Add support for IMGFMT_YUY2 and IMGFMT_UYVY to vo vdpau.
cehoyos
parents: 29065
diff changeset
177 static VdpChromaType vdp_chroma_type;
ab51a502ebb5 Add support for IMGFMT_YUY2 and IMGFMT_UYVY to vo vdpau.
cehoyos
parents: 29065
diff changeset
178 static VdpYCbCrFormat vdp_pixel_format;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
179
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
180 static volatile int is_preempted;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
181
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
182 /* draw_osd */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
183 static unsigned char *index_data;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
184 static int index_data_size;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
185 static uint32_t palette[PALETTE_SIZE];
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
186
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
187 // EOSD
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
188 // Pool of surfaces
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
189 struct {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
190 VdpBitmapSurface surface;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
191 int w;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
192 int h;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
193 char in_use;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
194 } *eosd_surfaces;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
195
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
196 // List of surfaces to be rendered
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
197 struct {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
198 VdpBitmapSurface surface;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
199 VdpRect source;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
200 VdpRect dest;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
201 VdpColor color;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
202 } *eosd_targets;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
203
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
204 static int eosd_render_count;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
205 static int eosd_surface_count;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
206
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
207 // Video equalizer
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
208 static VdpProcamp procamp;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
209
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
210 /*
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
211 * X11 specific
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
212 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
213 static int visible_buf;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
214 static int int_pause;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
215
28805
b382d065ba53 As for vo_gl, do not rely on draw_osd to render EOSD.
reimar
parents: 28804
diff changeset
216 static void draw_eosd(void);
b382d065ba53 As for vo_gl, do not rely on draw_osd to render EOSD.
reimar
parents: 28804
diff changeset
217
29016
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
218 static void push_deint_surface(VdpVideoSurface surface)
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
219 {
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
220 deint_surfaces[2] = deint_surfaces[1];
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
221 deint_surfaces[1] = deint_surfaces[0];
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
222 deint_surfaces[0] = surface;
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
223 }
8e95cca7c58d Stephen Warren reported that VDPAU deinterlacing did not work correctly.
cehoyos
parents: 29005
diff changeset
224
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
225 static void video_to_output_surface(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
226 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
227 VdpTime dummy;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
228 VdpStatus vdp_st;
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
229 int i;
29026
17e9f67f086b Simplify vdpau deinterlacing code and fix timing for deint=2.
cehoyos
parents: 29018
diff changeset
230 if (vid_surface_num < 0)
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
231 return;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
232
29026
17e9f67f086b Simplify vdpau deinterlacing code and fix timing for deint=2.
cehoyos
parents: 29018
diff changeset
233 if (deint < 2 || deint_surfaces[0] == VDP_INVALID_HANDLE)
17e9f67f086b Simplify vdpau deinterlacing code and fix timing for deint=2.
cehoyos
parents: 29018
diff changeset
234 push_deint_surface(surface_render[vid_surface_num].surface);
17e9f67f086b Simplify vdpau deinterlacing code and fix timing for deint=2.
cehoyos
parents: 29018
diff changeset
235
28708
ebd393e9f567 Add one-field-only output for -vo vdpau.
cehoyos
parents: 28707
diff changeset
236 for (i = 0; i <= !!(deint > 1); i++) {
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
237 int field = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME;
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
238 VdpOutputSurface output_surface;
28724
307da077861c Fix OSD for vo vdpau:deint>1.
cehoyos
parents: 28723
diff changeset
239 if (i) {
28805
b382d065ba53 As for vo_gl, do not rely on draw_osd to render EOSD.
reimar
parents: 28804
diff changeset
240 draw_eosd();
28724
307da077861c Fix OSD for vo vdpau:deint>1.
cehoyos
parents: 28723
diff changeset
241 draw_osd();
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
242 flip_page();
28724
307da077861c Fix OSD for vo vdpau:deint>1.
cehoyos
parents: 28723
diff changeset
243 }
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
244 if (deint)
29026
17e9f67f086b Simplify vdpau deinterlacing code and fix timing for deint=2.
cehoyos
parents: 29018
diff changeset
245 field = (top_field_first == i) ^ (deint > 1) ?
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
246 VDP_VIDEO_MIXER_PICTURE_STRUCTURE_BOTTOM_FIELD:
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
247 VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD;
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
248 output_surface = output_surfaces[surface_num];
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
249 vdp_st = vdp_presentation_queue_block_until_surface_idle(vdp_flip_queue,
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
250 output_surface,
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
251 &dummy);
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
252 CHECK_ST_WARNING("Error when calling vdp_presentation_queue_block_until_surface_idle")
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
253
28689
1189f633ca32 Cosmetics: Fix indentation and line length.
cehoyos
parents: 28684
diff changeset
254 vdp_st = vdp_video_mixer_render(video_mixer, VDP_INVALID_HANDLE, 0,
28933
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
255 field, 2, deint_surfaces + 1,
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
256 deint_surfaces[0],
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
257 1, &surface_render[vid_surface_num].surface,
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
258 &src_rect_vid,
28689
1189f633ca32 Cosmetics: Fix indentation and line length.
cehoyos
parents: 28684
diff changeset
259 output_surface,
1189f633ca32 Cosmetics: Fix indentation and line length.
cehoyos
parents: 28684
diff changeset
260 NULL, &out_rect_vid, 0, NULL);
1189f633ca32 Cosmetics: Fix indentation and line length.
cehoyos
parents: 28684
diff changeset
261 CHECK_ST_WARNING("Error when calling vdp_video_mixer_render")
29026
17e9f67f086b Simplify vdpau deinterlacing code and fix timing for deint=2.
cehoyos
parents: 29018
diff changeset
262 push_deint_surface(surface_render[vid_surface_num].surface);
28684
75aebdf41ee9 Enable Bob de-interlacing for VDPAU.
cehoyos
parents: 28676
diff changeset
263 }
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
264 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
265
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
266 static void resize(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
267 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
268 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
269 int i;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
270 struct vo_rect src_rect;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
271 struct vo_rect dst_rect;
28598
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
272 struct vo_rect borders;
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
273 calc_src_dst_rects(vid_width, vid_height, &src_rect, &dst_rect, &borders, NULL);
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
274 out_rect_vid.x0 = dst_rect.left;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
275 out_rect_vid.x1 = dst_rect.right;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
276 out_rect_vid.y0 = dst_rect.top;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
277 out_rect_vid.y1 = dst_rect.bottom;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
278 src_rect_vid.x0 = src_rect.left;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
279 src_rect_vid.x1 = src_rect.right;
29752
a1da895d9947 Implement VFCAP_FLIP for vo_vdpau.
cehoyos
parents: 29751
diff changeset
280 src_rect_vid.y0 = flip ? src_rect.bottom : src_rect.top;
a1da895d9947 Implement VFCAP_FLIP for vo_vdpau.
cehoyos
parents: 29751
diff changeset
281 src_rect_vid.y1 = flip ? src_rect.top : src_rect.bottom;
28598
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
282 border_x = borders.left;
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
283 border_y = borders.top;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
284 #ifdef CONFIG_FREETYPE
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
285 // adjust font size to display size
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
286 force_load_font = 1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
287 #endif
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
288 vo_osd_changed(OSDTYPE_OSD);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
289
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
290 if (output_surface_width < vo_dwidth || output_surface_height < vo_dheight) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
291 if (output_surface_width < vo_dwidth) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
292 output_surface_width += output_surface_width >> 1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
293 output_surface_width = FFMAX(output_surface_width, vo_dwidth);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
294 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
295 if (output_surface_height < vo_dheight) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
296 output_surface_height += output_surface_height >> 1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
297 output_surface_height = FFMAX(output_surface_height, vo_dheight);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
298 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
299 // Creation of output_surfaces
28696
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
300 for (i = 0; i <= NUM_OUTPUT_SURFACES; i++) {
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
301 if (output_surfaces[i] != VDP_INVALID_HANDLE)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
302 vdp_output_surface_destroy(output_surfaces[i]);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
303 vdp_st = vdp_output_surface_create(vdp_device, VDP_RGBA_FORMAT_B8G8R8A8,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
304 output_surface_width, output_surface_height,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
305 &output_surfaces[i]);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
306 CHECK_ST_WARNING("Error when calling vdp_output_surface_create")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
307 mp_msg(MSGT_VO, MSGL_DBG2, "OUT CREATE: %u\n", output_surfaces[i]);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
308 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
309 }
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
310 if (image_format == IMGFMT_BGRA) {
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
311 vdp_st = vdp_output_surface_render_output_surface(output_surfaces[surface_num],
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
312 NULL, VDP_INVALID_HANDLE,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
313 NULL, NULL, NULL,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
314 VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
315 CHECK_ST_WARNING("Error when calling vdp_output_surface_render_output_surface")
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
316 vdp_st = vdp_output_surface_render_output_surface(output_surfaces[1 - surface_num],
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
317 NULL, VDP_INVALID_HANDLE,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
318 NULL, NULL, NULL,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
319 VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
320 CHECK_ST_WARNING("Error when calling vdp_output_surface_render_output_surface")
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
321 } else
29757
c4982b7d0664 Cosmetics: Reindent after last commit.
cehoyos
parents: 29756
diff changeset
322 video_to_output_surface();
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
323 if (visible_buf)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
324 flip_page();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
325 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
326
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
327 static void preemption_callback(VdpDevice device, void *context)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
328 {
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
329 mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] Display preemption detected\n");
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
330 is_preempted = 1;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
331 }
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
332
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
333 /* Initialize vdp_get_proc_address, called from preinit() */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
334 static int win_x11_init_vdpau_procs(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
335 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
336 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
337
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
338 struct vdp_function {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
339 const int id;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
340 void *pointer;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
341 };
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
342
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
343 const struct vdp_function *dsc;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
344
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
345 static const struct vdp_function vdp_func[] = {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
346 {VDP_FUNC_ID_GET_ERROR_STRING, &vdp_get_error_string},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
347 {VDP_FUNC_ID_DEVICE_DESTROY, &vdp_device_destroy},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
348 {VDP_FUNC_ID_VIDEO_SURFACE_CREATE, &vdp_video_surface_create},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
349 {VDP_FUNC_ID_VIDEO_SURFACE_DESTROY, &vdp_video_surface_destroy},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
350 {VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
351 &vdp_video_surface_put_bits_y_cb_cr},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
352 {VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
353 &vdp_output_surface_put_bits_native},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
354 {VDP_FUNC_ID_OUTPUT_SURFACE_CREATE, &vdp_output_surface_create},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
355 {VDP_FUNC_ID_OUTPUT_SURFACE_DESTROY, &vdp_output_surface_destroy},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
356 {VDP_FUNC_ID_VIDEO_MIXER_CREATE, &vdp_video_mixer_create},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
357 {VDP_FUNC_ID_VIDEO_MIXER_DESTROY, &vdp_video_mixer_destroy},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
358 {VDP_FUNC_ID_VIDEO_MIXER_RENDER, &vdp_video_mixer_render},
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
359 {VDP_FUNC_ID_VIDEO_MIXER_SET_FEATURE_ENABLES,
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
360 &vdp_video_mixer_set_feature_enables},
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
361 {VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES,
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
362 &vdp_video_mixer_set_attribute_values},
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
363 {VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
364 &vdp_presentation_queue_target_destroy},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
365 {VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE, &vdp_presentation_queue_create},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
366 {VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
367 &vdp_presentation_queue_destroy},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
368 {VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
369 &vdp_presentation_queue_display},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
370 {VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
371 &vdp_presentation_queue_block_until_surface_idle},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
372 {VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
373 &vdp_presentation_queue_target_create_x11},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
374 {VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
375 &vdp_output_surface_render_output_surface},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
376 {VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_INDEXED,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
377 &vdp_output_surface_put_bits_indexed},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
378 {VDP_FUNC_ID_DECODER_CREATE, &vdp_decoder_create},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
379 {VDP_FUNC_ID_DECODER_RENDER, &vdp_decoder_render},
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
380 {VDP_FUNC_ID_DECODER_DESTROY, &vdp_decoder_destroy},
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
381 {VDP_FUNC_ID_BITMAP_SURFACE_CREATE, &vdp_bitmap_surface_create},
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
382 {VDP_FUNC_ID_BITMAP_SURFACE_DESTROY, &vdp_bitmap_surface_destroy},
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
383 {VDP_FUNC_ID_BITMAP_SURFACE_PUT_BITS_NATIVE,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
384 &vdp_bitmap_surface_putbits_native},
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
385 {VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_BITMAP_SURFACE,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
386 &vdp_output_surface_render_bitmap_surface},
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
387 {VDP_FUNC_ID_GENERATE_CSC_MATRIX, &vdp_generate_csc_matrix},
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
388 {VDP_FUNC_ID_PREEMPTION_CALLBACK_REGISTER,
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
389 &vdp_preemption_callback_register},
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
390 {0, NULL}
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
391 };
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
392
29861
356c49d60826 Do not dynamically load libvdpau.so.1, but link at compile time.
cehoyos
parents: 29843
diff changeset
393 vdp_st = vdp_device_create_x11(mDisplay, mScreen,
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
394 &vdp_device, &vdp_get_proc_address);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
395 if (vdp_st != VDP_STATUS_OK) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
396 mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] Error when calling vdp_device_create_x11: %i\n", vdp_st);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
397 return -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
398 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
399
29067
a560ab3e03e5 Make sure we do not accidentally use the vdp_get_error_string from the
reimar
parents: 29066
diff changeset
400 vdp_get_error_string = NULL;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
401 for (dsc = vdp_func; dsc->pointer; dsc++) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
402 vdp_st = vdp_get_proc_address(vdp_device, dsc->id, dsc->pointer);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
403 if (vdp_st != VDP_STATUS_OK) {
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
404 mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] Error when calling vdp_get_proc_address(function id %d): %s\n",
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
405 dsc->id, vdp_get_error_string ? vdp_get_error_string(vdp_st) : "?");
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
406 return -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
407 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
408 }
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
409 vdp_st = vdp_preemption_callback_register(vdp_device,
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
410 preemption_callback, NULL);
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
411 CHECK_ST_ERROR("Error when calling vdp_preemption_callback_register")
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
412
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
413 return 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
414 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
415
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
416 /* Initialize vdpau_flip_queue, called from config() */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
417 static int win_x11_init_vdpau_flip_queue(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
418 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
419 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
420
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
421 vdp_st = vdp_presentation_queue_target_create_x11(vdp_device, vo_window,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
422 &vdp_flip_target);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
423 CHECK_ST_ERROR("Error when calling vdp_presentation_queue_target_create_x11")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
424
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
425 vdp_st = vdp_presentation_queue_create(vdp_device, vdp_flip_target,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
426 &vdp_flip_queue);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
427 CHECK_ST_ERROR("Error when calling vdp_presentation_queue_create")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
428
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
429 return 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
430 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
431
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
432 static int update_csc_matrix(void)
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
433 {
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
434 VdpStatus vdp_st;
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
435 VdpCSCMatrix matrix;
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
436 static const VdpVideoMixerAttribute attributes[] = {VDP_VIDEO_MIXER_ATTRIBUTE_CSC_MATRIX};
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
437 const void *attribute_values[] = {&matrix};
29729
42abcc270fb6 Support SMPTE-240M colourspace in vo_vdpau.
cehoyos
parents: 29727
diff changeset
438 static const VdpColorStandard vdp_colors[] = {0, VDP_COLOR_STANDARD_ITUR_BT_601, VDP_COLOR_STANDARD_ITUR_BT_709, VDP_COLOR_STANDARD_SMPTE_240M};
42abcc270fb6 Support SMPTE-240M colourspace in vo_vdpau.
cehoyos
parents: 29727
diff changeset
439 static const char * const vdp_names[] = {NULL, "BT.601", "BT.709", "SMPTE-240M"};
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
440 int csp = colorspace;
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
441
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
442 if (!csp)
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
443 csp = vid_width >= 1280 || vid_height > 576 ? 2 : 1;
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
444
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
445 mp_msg(MSGT_VO, MSGL_V, "[vdpau] Updating CSC matrix for %s\n",
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
446 vdp_names[csp]);
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
447
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
448 vdp_st = vdp_generate_csc_matrix(&procamp, vdp_colors[csp], &matrix);
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
449 CHECK_ST_WARNING("Error when generating CSC matrix")
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
450
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
451 vdp_st = vdp_video_mixer_set_attribute_values(video_mixer, 1, attributes,
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
452 attribute_values);
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
453 CHECK_ST_WARNING("Error when setting CSC matrix")
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
454 return VO_TRUE;
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
455 }
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
456
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
457 static int create_vdp_mixer(VdpChromaType vdp_chroma_type)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
458 {
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
459 #define VDP_NUM_MIXER_PARAMETER 3
29781
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
460 #define MAX_NUM_FEATURES 6
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
461 int i;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
462 VdpStatus vdp_st;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
463 int feature_count = 0;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
464 VdpVideoMixerFeature features[MAX_NUM_FEATURES];
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
465 VdpBool feature_enables[MAX_NUM_FEATURES];
28658
94fcc9e0449b Add forgotten type to variable declaration.
reimar
parents: 28639
diff changeset
466 static const VdpVideoMixerAttribute denoise_attrib[] = {VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL};
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
467 const void * const denoise_value[] = {&denoise};
28658
94fcc9e0449b Add forgotten type to variable declaration.
reimar
parents: 28639
diff changeset
468 static const VdpVideoMixerAttribute sharpen_attrib[] = {VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL};
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
469 const void * const sharpen_value[] = {&sharpen};
28944
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
470 static const VdpVideoMixerAttribute skip_chroma_attrib[] = {VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE};
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
471 const uint8_t skip_chroma_value = 1;
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
472 const void * const skip_chroma_value_ptr[] = {&skip_chroma_value};
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
473 static const VdpVideoMixerParameter parameters[VDP_NUM_MIXER_PARAMETER] = {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
474 VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_WIDTH,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
475 VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_HEIGHT,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
476 VDP_VIDEO_MIXER_PARAMETER_CHROMA_TYPE
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
477 };
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
478 const void *const parameter_values[VDP_NUM_MIXER_PARAMETER] = {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
479 &vid_width,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
480 &vid_height,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
481 &vdp_chroma_type
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
482 };
28934
e8c117f5758a Cosmetics: Fix whitespace.
cehoyos
parents: 28933
diff changeset
483 features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL;
28708
ebd393e9f567 Add one-field-only output for -vo vdpau.
cehoyos
parents: 28707
diff changeset
484 if (deint == 4)
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
485 features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
486 if (pullup)
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
487 features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_INVERSE_TELECINE;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
488 if (denoise)
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
489 features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_NOISE_REDUCTION;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
490 if (sharpen)
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
491 features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_SHARPNESS;
29781
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
492 if (hqscaling)
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
493 features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L1 + (hqscaling - 1);
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
494
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
495 vdp_st = vdp_video_mixer_create(vdp_device, feature_count, features,
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
496 VDP_NUM_MIXER_PARAMETER,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
497 parameters, parameter_values,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
498 &video_mixer);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
499 CHECK_ST_ERROR("Error when calling vdp_video_mixer_create")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
500
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
501 for (i = 0; i < feature_count; i++)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
502 feature_enables[i] = VDP_TRUE;
28933
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
503 if (deint < 3)
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
504 feature_enables[0] = VDP_FALSE;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
505 if (feature_count)
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
506 vdp_video_mixer_set_feature_enables(video_mixer, feature_count, features, feature_enables);
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
507 if (denoise)
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
508 vdp_video_mixer_set_attribute_values(video_mixer, 1, denoise_attrib, denoise_value);
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
509 if (sharpen)
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
510 vdp_video_mixer_set_attribute_values(video_mixer, 1, sharpen_attrib, sharpen_value);
28944
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
511 if (!chroma_deint)
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
512 vdp_video_mixer_set_attribute_values(video_mixer, 1, skip_chroma_attrib, skip_chroma_value_ptr);
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
513
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
514 update_csc_matrix();
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
515 return 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
516 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
517
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
518 // Free everything specific to a certain video file
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
519 static void free_video_specific(void)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
520 {
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
521 int i;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
522 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
523
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
524 if (decoder != VDP_INVALID_HANDLE)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
525 vdp_decoder_destroy(decoder);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
526 decoder = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
527 decoder_max_refs = -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
528
28936
fd9de1e70d47 Move initialisation of deint_surfaces[] to free_video_specific().
cehoyos
parents: 28935
diff changeset
529 for (i = 0; i < 3; i++)
fd9de1e70d47 Move initialisation of deint_surfaces[] to free_video_specific().
cehoyos
parents: 28935
diff changeset
530 deint_surfaces[i] = VDP_INVALID_HANDLE;
fd9de1e70d47 Move initialisation of deint_surfaces[] to free_video_specific().
cehoyos
parents: 28935
diff changeset
531
29017
c9a2d95c580a New vdpau deinterlacing code needs one reference surface less.
cehoyos
parents: 29016
diff changeset
532 for (i = 0; i < 2; i++)
28956
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
533 if (deint_mpi[i]) {
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
534 deint_mpi[i]->usage_count--;
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
535 deint_mpi[i] = NULL;
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
536 }
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
537
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
538 for (i = 0; i < MAX_VIDEO_SURFACES; i++) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
539 if (surface_render[i].surface != VDP_INVALID_HANDLE) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
540 vdp_st = vdp_video_surface_destroy(surface_render[i].surface);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
541 CHECK_ST_WARNING("Error when calling vdp_video_surface_destroy")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
542 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
543 surface_render[i].surface = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
544 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
545
28676
d5c295360163 Only check for vdp_video_mixer_destroy failure when we actually executed that function.
reimar
parents: 28675
diff changeset
546 if (video_mixer != VDP_INVALID_HANDLE) {
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
547 vdp_st = vdp_video_mixer_destroy(video_mixer);
28676
d5c295360163 Only check for vdp_video_mixer_destroy failure when we actually executed that function.
reimar
parents: 28675
diff changeset
548 CHECK_ST_WARNING("Error when calling vdp_video_mixer_destroy")
d5c295360163 Only check for vdp_video_mixer_destroy failure when we actually executed that function.
reimar
parents: 28675
diff changeset
549 }
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
550 video_mixer = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
551 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
552
29828
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
553 static int create_vdp_decoder(uint32_t format, uint32_t width, uint32_t height,
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
554 int max_refs)
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
555 {
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
556 VdpStatus vdp_st;
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
557 VdpDecoderProfile vdp_decoder_profile;
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
558 if (decoder != VDP_INVALID_HANDLE)
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
559 vdp_decoder_destroy(decoder);
29828
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
560 switch (format) {
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
561 case IMGFMT_VDPAU_MPEG1:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
562 vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG1;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
563 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
564 case IMGFMT_VDPAU_MPEG2:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
565 vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG2_MAIN;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
566 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
567 case IMGFMT_VDPAU_H264:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
568 vdp_decoder_profile = VDP_DECODER_PROFILE_H264_HIGH;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
569 mp_msg(MSGT_VO, MSGL_V, "[vdpau] Creating H264 hardware decoder for %d reference frames.\n", max_refs);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
570 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
571 case IMGFMT_VDPAU_WMV3:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
572 vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_MAIN;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
573 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
574 case IMGFMT_VDPAU_VC1:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
575 vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_ADVANCED;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
576 break;
29843
f6d56a15f1d8 Support VDPAU hardware accelerated decoding of MPEG-4 ASP on capable
cehoyos
parents: 29830
diff changeset
577 case IMGFMT_VDPAU_MPEG4:
f6d56a15f1d8 Support VDPAU hardware accelerated decoding of MPEG-4 ASP on capable
cehoyos
parents: 29830
diff changeset
578 vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG4_PART2_ASP;
f6d56a15f1d8 Support VDPAU hardware accelerated decoding of MPEG-4 ASP on capable
cehoyos
parents: 29830
diff changeset
579 break;
29827
d6d8b9d5a4fb Add a default to switch(image_format), suppresses a warning after a future patch.
cehoyos
parents: 29781
diff changeset
580 default:
d6d8b9d5a4fb Add a default to switch(image_format), suppresses a warning after a future patch.
cehoyos
parents: 29781
diff changeset
581 goto err_out;
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
582 }
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
583 vdp_st = vdp_decoder_create(vdp_device, vdp_decoder_profile,
29828
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
584 width, height, max_refs, &decoder);
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
585 CHECK_ST_WARNING("Failed creating VDPAU decoder");
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
586 if (vdp_st != VDP_STATUS_OK) {
29827
d6d8b9d5a4fb Add a default to switch(image_format), suppresses a warning after a future patch.
cehoyos
parents: 29781
diff changeset
587 err_out:
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
588 decoder = VDP_INVALID_HANDLE;
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
589 decoder_max_refs = 0;
28991
8cf16b1d8dde Change return value for create_vdp_decoder().
cehoyos
parents: 28989
diff changeset
590 return 0;
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
591 }
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
592 decoder_max_refs = max_refs;
28991
8cf16b1d8dde Change return value for create_vdp_decoder().
cehoyos
parents: 28989
diff changeset
593 return 1;
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
594 }
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
595
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
596 static void mark_vdpau_objects_uninitialized(void)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
597 {
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
598 int i;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
599
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
600 decoder = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
601 for (i = 0; i < MAX_VIDEO_SURFACES; i++)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
602 surface_render[i].surface = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
603 for (i = 0; i < 3; i++) {
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
604 deint_surfaces[i] = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
605 if (i < 2 && deint_mpi[i])
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
606 deint_mpi[i]->usage_count--;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
607 deint_mpi[i] = NULL;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
608 }
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
609 video_mixer = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
610 vdp_flip_queue = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
611 vdp_flip_target = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
612 for (i = 0; i <= NUM_OUTPUT_SURFACES; i++)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
613 output_surfaces[i] = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
614 vdp_device = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
615 for (i = 0; i < eosd_surface_count; i++)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
616 eosd_surfaces[i].surface = VDP_INVALID_HANDLE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
617 output_surface_width = output_surface_height = -1;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
618 eosd_render_count = 0;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
619 visible_buf = 0;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
620 }
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
621
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
622 static int handle_preemption(void)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
623 {
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
624 if (!is_preempted)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
625 return 0;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
626 is_preempted = 0;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
627 mp_msg(MSGT_VO, MSGL_INFO, "[vdpau] Attempting to recover from preemption.\n");
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
628 mark_vdpau_objects_uninitialized();
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
629 if (win_x11_init_vdpau_procs() < 0 ||
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
630 win_x11_init_vdpau_flip_queue() < 0 ||
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
631 create_vdp_mixer(vdp_chroma_type) < 0) {
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
632 mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] Recovering from preemption failed\n");
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
633 is_preempted = 1;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
634 return -1;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
635 }
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
636 resize();
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
637 mp_msg(MSGT_VO, MSGL_INFO, "[vdpau] Recovered from display preemption.\n");
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
638 return 1;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
639 }
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
640
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
641 /*
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
642 * connect to X server, create and map window, initialize all
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
643 * VDPAU objects, create different surfaces etc.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
644 */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
645 static int config(uint32_t width, uint32_t height, uint32_t d_width,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
646 uint32_t d_height, uint32_t flags, char *title,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
647 uint32_t format)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
648 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
649 XVisualInfo vinfo;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
650 XSetWindowAttributes xswa;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
651 XWindowAttributes attribs;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
652 unsigned long xswamask;
28936
fd9de1e70d47 Move initialisation of deint_surfaces[] to free_video_specific().
cehoyos
parents: 28935
diff changeset
653 int depth;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
654
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
655 #ifdef CONFIG_XF86VM
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
656 int vm = flags & VOFLAG_MODESWITCHING;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
657 #endif
29752
a1da895d9947 Implement VFCAP_FLIP for vo_vdpau.
cehoyos
parents: 29751
diff changeset
658 flip = flags & VOFLAG_FLIPPING;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
659
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
660 image_format = format;
29005
0ce70839c3b5 Change function call order in config().
cehoyos
parents: 28993
diff changeset
661 vid_width = width;
0ce70839c3b5 Change function call order in config().
cehoyos
parents: 28993
diff changeset
662 vid_height = height;
0ce70839c3b5 Change function call order in config().
cehoyos
parents: 28993
diff changeset
663 free_video_specific();
29828
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
664 if (IMGFMT_IS_VDPAU(image_format)
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
665 && !create_vdp_decoder(image_format, vid_width, vid_height, 2))
29005
0ce70839c3b5 Change function call order in config().
cehoyos
parents: 28993
diff changeset
666 return -1;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
667
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
668 int_pause = 0;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
669 visible_buf = 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
670
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
671 #ifdef CONFIG_GUI
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
672 if (use_gui)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
673 guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize our window
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
674 else
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
675 #endif
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
676 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
677 #ifdef CONFIG_XF86VM
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
678 if (vm)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
679 vo_vm_switch();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
680 else
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
681 #endif
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
682 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
683 depth = attribs.depth;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
684 if (depth != 15 && depth != 16 && depth != 24 && depth != 32)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
685 depth = 24;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
686 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
687
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
688 xswa.background_pixel = 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
689 xswa.border_pixel = 0;
29234
6c47111fe28e Do not use flag CWBackPixel when calling vo_x11_create_vo_window():
cehoyos
parents: 29070
diff changeset
690 /* Do not use CWBackPixel: It leads to VDPAU errors after
6c47111fe28e Do not use flag CWBackPixel when calling vo_x11_create_vo_window():
cehoyos
parents: 29070
diff changeset
691 aspect ratio changes. */
6c47111fe28e Do not use flag CWBackPixel when calling vo_x11_create_vo_window():
cehoyos
parents: 29070
diff changeset
692 xswamask = CWBorderPixel;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
693
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
694 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, d_width, d_height,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
695 flags, CopyFromParent, "vdpau", title);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
696 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
697
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
698 #ifdef CONFIG_XF86VM
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
699 if (vm) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
700 /* Grab the mouse pointer in our window */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
701 if (vo_grabpointer)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
702 XGrabPointer(mDisplay, vo_window, True, 0,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
703 GrabModeAsync, GrabModeAsync,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
704 vo_window, None, CurrentTime);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
705 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
706 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
707 #endif
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
708 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
709
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
710 if ((flags & VOFLAG_FULLSCREEN) && WinID <= 0)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
711 vo_fs = 1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
712
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
713 /* -----VDPAU related code here -------- */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
714 if (vdp_flip_queue == VDP_INVALID_HANDLE && win_x11_init_vdpau_flip_queue())
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
715 return -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
716
29066
ab51a502ebb5 Add support for IMGFMT_YUY2 and IMGFMT_UYVY to vo vdpau.
cehoyos
parents: 29065
diff changeset
717 vdp_chroma_type = VDP_CHROMA_TYPE_420;
ab51a502ebb5 Add support for IMGFMT_YUY2 and IMGFMT_UYVY to vo vdpau.
cehoyos
parents: 29065
diff changeset
718 switch (image_format) {
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
719 case IMGFMT_YV12:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
720 case IMGFMT_I420:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
721 case IMGFMT_IYUV:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
722 vdp_pixel_format = VDP_YCBCR_FORMAT_YV12;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
723 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
724 case IMGFMT_NV12:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
725 vdp_pixel_format = VDP_YCBCR_FORMAT_NV12;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
726 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
727 case IMGFMT_YUY2:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
728 vdp_pixel_format = VDP_YCBCR_FORMAT_YUYV;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
729 vdp_chroma_type = VDP_CHROMA_TYPE_422;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
730 break;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
731 case IMGFMT_UYVY:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
732 vdp_pixel_format = VDP_YCBCR_FORMAT_UYVY;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
733 vdp_chroma_type = VDP_CHROMA_TYPE_422;
29066
ab51a502ebb5 Add support for IMGFMT_YUY2 and IMGFMT_UYVY to vo vdpau.
cehoyos
parents: 29065
diff changeset
734 }
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
735 if (create_vdp_mixer(vdp_chroma_type))
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
736 return -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
737
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
738 surface_num = 0;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
739 vid_surface_num = -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
740 resize();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
741
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
742 return 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
743 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
744
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
745 static void check_events(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
746 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
747 int e = vo_x11_check_events(mDisplay);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
748
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
749 if (handle_preemption() < 0)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
750 return;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
751
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
752 if (e & VO_EVENT_RESIZE)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
753 resize();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
754
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
755 if ((e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE) && int_pause) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
756 /* did we already draw a buffer */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
757 if (visible_buf) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
758 /* redraw the last visible buffer */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
759 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
760 vdp_st = vdp_presentation_queue_display(vdp_flip_queue,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
761 output_surfaces[surface_num],
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
762 vo_dwidth, vo_dheight,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
763 0);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
764 CHECK_ST_WARNING("Error when calling vdp_presentation_queue_display")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
765 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
766 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
767 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
768
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
769 static void draw_osd_I8A8(int x0,int y0, int w,int h, unsigned char *src,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
770 unsigned char *srca, int stride)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
771 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
772 VdpOutputSurface output_surface = output_surfaces[surface_num];
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
773 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
774 int i, j;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
775 int pitch;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
776 int index_data_size_required;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
777 VdpRect output_indexed_rect_vid;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
778 VdpOutputSurfaceRenderBlendState blend_state;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
779
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
780 if (!w || !h)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
781 return;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
782
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
783 index_data_size_required = 2*w*h;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
784 if (index_data_size < index_data_size_required) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
785 index_data = realloc(index_data, index_data_size_required);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
786 index_data_size = index_data_size_required;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
787 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
788
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
789 // index_data creation, component order - I, A, I, A, .....
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
790 for (i = 0; i < h; i++)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
791 for (j = 0; j < w; j++) {
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
792 index_data[i*2*w + j*2] = src [i*stride + j];
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
793 index_data[i*2*w + j*2 + 1] = -srca[i*stride + j];
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
794 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
795
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
796 output_indexed_rect_vid.x0 = x0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
797 output_indexed_rect_vid.y0 = y0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
798 output_indexed_rect_vid.x1 = x0 + w;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
799 output_indexed_rect_vid.y1 = y0 + h;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
800
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
801 pitch = w*2;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
802
28696
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
803 // write source_data to osd_surface.
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
804 vdp_st = vdp_output_surface_put_bits_indexed(osd_surface,
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
805 VDP_INDEXED_FORMAT_I8A8,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
806 (const void *const*)&index_data,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
807 &pitch,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
808 &output_indexed_rect_vid,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
809 VDP_COLOR_TABLE_FORMAT_B8G8R8X8,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
810 (void *)palette);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
811 CHECK_ST_WARNING("Error when calling vdp_output_surface_put_bits_indexed")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
812
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
813 blend_state.struct_version = VDP_OUTPUT_SURFACE_RENDER_BLEND_STATE_VERSION;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
814 blend_state.blend_factor_source_color = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
815 blend_state.blend_factor_source_alpha = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
816 blend_state.blend_factor_destination_color = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
817 blend_state.blend_factor_destination_alpha = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
818 blend_state.blend_equation_color = VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
819 blend_state.blend_equation_alpha = VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
820
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
821 vdp_st = vdp_output_surface_render_output_surface(output_surface,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
822 &output_indexed_rect_vid,
28696
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
823 osd_surface,
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
824 &output_indexed_rect_vid,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
825 NULL,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
826 &blend_state,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
827 VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
828 CHECK_ST_WARNING("Error when calling vdp_output_surface_render_output_surface")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
829 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
830
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
831 static void draw_eosd(void)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
832 {
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
833 VdpStatus vdp_st;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
834 VdpOutputSurface output_surface = output_surfaces[surface_num];
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
835 VdpOutputSurfaceRenderBlendState blend_state;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
836 int i;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
837
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
838 blend_state.struct_version = VDP_OUTPUT_SURFACE_RENDER_BLEND_STATE_VERSION;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
839 blend_state.blend_factor_source_color = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_SRC_ALPHA;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
840 blend_state.blend_factor_source_alpha = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
841 blend_state.blend_factor_destination_color = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
842 blend_state.blend_factor_destination_alpha = VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_SRC_ALPHA;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
843 blend_state.blend_equation_color = VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
844 blend_state.blend_equation_alpha = VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_ADD;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
845
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
846 for (i = 0; i < eosd_render_count; i++) {
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
847 vdp_st = vdp_output_surface_render_bitmap_surface(
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
848 output_surface, &eosd_targets[i].dest,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
849 eosd_targets[i].surface, &eosd_targets[i].source,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
850 &eosd_targets[i].color, &blend_state,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
851 VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
852 CHECK_ST_WARNING("EOSD: Error when rendering")
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
853 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
854 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
855
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
856 static void generate_eosd(mp_eosd_images_t *imgs)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
857 {
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
858 VdpStatus vdp_st;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
859 VdpRect destRect;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
860 int j, found;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
861 ass_image_t *img = imgs->imgs;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
862 ass_image_t *i;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
863
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
864 // Nothing changed, no need to redraw
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
865 if (imgs->changed == 0)
28807
338065cac802 Remove duplicate OSD drawing introduced due to a conflict between r28840 and r28839.
reimar
parents: 28805
diff changeset
866 return;
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
867 eosd_render_count = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
868 // There's nothing to render!
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
869 if (!img)
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
870 return;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
871
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
872 if (imgs->changed == 1)
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
873 goto eosd_skip_upload;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
874
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
875 for (j = 0; j < eosd_surface_count; j++)
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
876 eosd_surfaces[j].in_use = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
877
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
878 for (i = img; i; i = i->next) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
879 // Try to reuse a suitable surface
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
880 found = -1;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
881 for (j = 0; j < eosd_surface_count; j++) {
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
882 if (eosd_surfaces[j].surface != VDP_INVALID_HANDLE && !eosd_surfaces[j].in_use &&
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
883 eosd_surfaces[j].w >= i->w && eosd_surfaces[j].h >= i->h) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
884 found = j;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
885 break;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
886 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
887 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
888 // None found, allocate a new surface
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
889 if (found < 0) {
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
890 for (j = 0; j < eosd_surface_count; j++) {
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
891 if (!eosd_surfaces[j].in_use) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
892 if (eosd_surfaces[j].surface != VDP_INVALID_HANDLE)
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
893 vdp_bitmap_surface_destroy(eosd_surfaces[j].surface);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
894 found = j;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
895 break;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
896 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
897 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
898 // Allocate new space for surface/target arrays
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
899 if (found < 0) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
900 j = found = eosd_surface_count;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
901 eosd_surface_count = eosd_surface_count ? eosd_surface_count*2 : EOSD_SURFACES_INITIAL;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
902 eosd_surfaces = realloc(eosd_surfaces, eosd_surface_count * sizeof(*eosd_surfaces));
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
903 eosd_targets = realloc(eosd_targets, eosd_surface_count * sizeof(*eosd_targets));
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
904 for (j = found; j < eosd_surface_count; j++) {
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
905 eosd_surfaces[j].surface = VDP_INVALID_HANDLE;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
906 eosd_surfaces[j].in_use = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
907 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
908 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
909 vdp_st = vdp_bitmap_surface_create(vdp_device, VDP_RGBA_FORMAT_A8,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
910 i->w, i->h, VDP_TRUE, &eosd_surfaces[found].surface);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
911 CHECK_ST_WARNING("EOSD: error when creating surface")
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
912 eosd_surfaces[found].w = i->w;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
913 eosd_surfaces[found].h = i->h;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
914 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
915 eosd_surfaces[found].in_use = 1;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
916 eosd_targets[eosd_render_count].surface = eosd_surfaces[found].surface;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
917 destRect.x0 = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
918 destRect.y0 = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
919 destRect.x1 = i->w;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
920 destRect.y1 = i->h;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
921 vdp_st = vdp_bitmap_surface_putbits_native(eosd_targets[eosd_render_count].surface,
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
922 (const void *) &i->bitmap, &i->stride, &destRect);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
923 CHECK_ST_WARNING("EOSD: putbits failed")
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
924 eosd_render_count++;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
925 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
926
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
927 eosd_skip_upload:
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
928 eosd_render_count = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
929 for (i = img; i; i = i->next) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
930 // Render dest, color, etc.
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
931 eosd_targets[eosd_render_count].color.alpha = 1.0 - ((i->color >> 0) & 0xff) / 255.0;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
932 eosd_targets[eosd_render_count].color.blue = ((i->color >> 8) & 0xff) / 255.0;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
933 eosd_targets[eosd_render_count].color.green = ((i->color >> 16) & 0xff) / 255.0;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
934 eosd_targets[eosd_render_count].color.red = ((i->color >> 24) & 0xff) / 255.0;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
935 eosd_targets[eosd_render_count].dest.x0 = i->dst_x;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
936 eosd_targets[eosd_render_count].dest.y0 = i->dst_y;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
937 eosd_targets[eosd_render_count].dest.x1 = i->w + i->dst_x;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
938 eosd_targets[eosd_render_count].dest.y1 = i->h + i->dst_y;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
939 eosd_targets[eosd_render_count].source.x0 = 0;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
940 eosd_targets[eosd_render_count].source.y0 = 0;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
941 eosd_targets[eosd_render_count].source.x1 = i->w;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
942 eosd_targets[eosd_render_count].source.y1 = i->h;
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
943 eosd_render_count++;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
944 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
945 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
946
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
947 static void draw_osd(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
948 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
949 mp_msg(MSGT_VO, MSGL_DBG2, "DRAW_OSD\n");
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
950
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
951 if (handle_preemption() < 0)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
952 return;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
953
28598
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
954 vo_draw_text_ext(vo_dwidth, vo_dheight, border_x, border_y, border_x, border_y,
4172d83194f2 Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents: 28582
diff changeset
955 vid_width, vid_height, draw_osd_I8A8);
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
956 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
957
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
958 static void flip_page(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
959 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
960 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
961 mp_msg(MSGT_VO, MSGL_DBG2, "\nFLIP_PAGE VID:%u -> OUT:%u\n",
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
962 surface_render[vid_surface_num].surface, output_surfaces[surface_num]);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
963
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
964 if (handle_preemption() < 0)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
965 return;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
966
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
967 vdp_st = vdp_presentation_queue_display(vdp_flip_queue, output_surfaces[surface_num],
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
968 vo_dwidth, vo_dheight,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
969 0);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
970 CHECK_ST_WARNING("Error when calling vdp_presentation_queue_display")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
971
28696
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
972 surface_num = (surface_num + 1) % NUM_OUTPUT_SURFACES;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
973 visible_buf = 1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
974 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
975
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
976 static int draw_slice(uint8_t *image[], int stride[], int w, int h,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
977 int x, int y)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
978 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
979 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
980 struct vdpau_render_state *rndr = (struct vdpau_render_state *)image[0];
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
981 int max_refs = image_format == IMGFMT_VDPAU_H264 ? rndr->info.h264.num_ref_frames : 2;
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
982
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
983 if (handle_preemption() < 0)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
984 return VO_TRUE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
985
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
986 if (!IMGFMT_IS_VDPAU(image_format))
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
987 return VO_FALSE;
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
988 if ((decoder == VDP_INVALID_HANDLE || decoder_max_refs < max_refs)
29828
fe055da6637c Fail in query_format() if a VDPAU decoder is not available.
cehoyos
parents: 29827
diff changeset
989 && !create_vdp_decoder(image_format, vid_width, vid_height, max_refs))
28989
aa1e43639e47 Factorize create_vdp_decoder().
cehoyos
parents: 28956
diff changeset
990 return VO_FALSE;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29234
diff changeset
991
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
992 vdp_st = vdp_decoder_render(decoder, rndr->surface, (void *)&rndr->info, rndr->bitstream_buffers_used, rndr->bitstream_buffers);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
993 CHECK_ST_WARNING("Failed VDPAU decoder rendering");
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
994 return VO_TRUE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
995 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
996
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
997
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
998 static int draw_frame(uint8_t *src[])
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
999 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1000 return VO_ERROR;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1001 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1002
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1003 static struct vdpau_render_state *get_surface(int number)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1004 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1005 if (number > MAX_VIDEO_SURFACES)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1006 return NULL;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1007 if (surface_render[number].surface == VDP_INVALID_HANDLE) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1008 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1009 vdp_st = vdp_video_surface_create(vdp_device, vdp_chroma_type,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1010 vid_width, vid_height,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1011 &surface_render[number].surface);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1012 CHECK_ST_WARNING("Error when calling vdp_video_surface_create")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1013 if (vdp_st != VDP_STATUS_OK)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1014 return NULL;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1015 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1016 mp_msg(MSGT_VO, MSGL_DBG2, "VID CREATE: %u\n", surface_render[number].surface);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1017 return &surface_render[number];
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1018 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1019
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1020 static uint32_t draw_image(mp_image_t *mpi)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1021 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1022 if (IMGFMT_IS_VDPAU(image_format)) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1023 struct vdpau_render_state *rndr = mpi->priv;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1024 vid_surface_num = rndr - surface_render;
30009
88e9eee4089e Cosmetics: Reindent after r30050.
cehoyos
parents: 30008
diff changeset
1025 mpi->usage_count++;
88e9eee4089e Cosmetics: Reindent after r30050.
cehoyos
parents: 30008
diff changeset
1026 if (deint_mpi[1])
88e9eee4089e Cosmetics: Reindent after r30050.
cehoyos
parents: 30008
diff changeset
1027 deint_mpi[1]->usage_count--;
88e9eee4089e Cosmetics: Reindent after r30050.
cehoyos
parents: 30008
diff changeset
1028 deint_mpi[1] = deint_mpi[0];
88e9eee4089e Cosmetics: Reindent after r30050.
cehoyos
parents: 30008
diff changeset
1029 deint_mpi[0] = mpi;
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1030 } else if (image_format == IMGFMT_BGRA) {
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1031 VdpStatus vdp_st;
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1032 VdpRect r = {0, 0, vid_width, vid_height};
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1033 vdp_st = vdp_output_surface_put_bits_native(output_surfaces[2],
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1034 (void const*const*)mpi->planes,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1035 mpi->stride, &r);
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1036 CHECK_ST_ERROR("Error when calling vdp_output_surface_put_bits_native")
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1037 vdp_st = vdp_output_surface_render_output_surface(output_surfaces[surface_num],
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1038 &out_rect_vid,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1039 output_surfaces[2],
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1040 &src_rect_vid, NULL, NULL,
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1041 VDP_OUTPUT_SURFACE_RENDER_ROTATE_0);
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1042 CHECK_ST_ERROR("Error when calling vdp_output_surface_render_output_surface")
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1043 } else if (!(mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1044 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1045 void *destdata[3] = {mpi->planes[0], mpi->planes[2], mpi->planes[1]};
28933
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
1046 struct vdpau_render_state *rndr = get_surface(deint_counter);
29018
b04ff8b244bb New VDPAU deinterlacing code needs one reference surface less for software decoding.
cehoyos
parents: 29017
diff changeset
1047 deint_counter = (deint_counter + 1) % 3;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1048 vid_surface_num = rndr - surface_render;
29070
e64e543ed6b3 Support IMGFMT_NV12 for vo vdpau.
cehoyos
parents: 29067
diff changeset
1049 if (image_format == IMGFMT_NV12)
e64e543ed6b3 Support IMGFMT_NV12 for vo vdpau.
cehoyos
parents: 29067
diff changeset
1050 destdata[1] = destdata[2];
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1051 vdp_st = vdp_video_surface_put_bits_y_cb_cr(rndr->surface,
29066
ab51a502ebb5 Add support for IMGFMT_YUY2 and IMGFMT_UYVY to vo vdpau.
cehoyos
parents: 29065
diff changeset
1052 vdp_pixel_format,
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1053 (const void *const*)destdata,
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1054 mpi->stride); // pitch
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1055 CHECK_ST_ERROR("Error when calling vdp_video_surface_put_bits_y_cb_cr")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1056 }
29054
d865fa57c316 10l: Don't use MP_IMGFIELD_TOP_FIRST if MP_IMGFIELD_ORDERED is not set.
cehoyos
parents: 29026
diff changeset
1057 if (mpi->fields & MP_IMGFIELD_ORDERED)
29055
2a1cd1455121 Cosmetics: Reindent after last commit.
cehoyos
parents: 29054
diff changeset
1058 top_field_first = !!(mpi->fields & MP_IMGFIELD_TOP_FIRST);
29054
d865fa57c316 10l: Don't use MP_IMGFIELD_TOP_FIRST if MP_IMGFIELD_ORDERED is not set.
cehoyos
parents: 29026
diff changeset
1059 else
d865fa57c316 10l: Don't use MP_IMGFIELD_TOP_FIRST if MP_IMGFIELD_ORDERED is not set.
cehoyos
parents: 29026
diff changeset
1060 top_field_first = 1;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1061
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1062 video_to_output_surface();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1063 return VO_TRUE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1064 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1065
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1066 static uint32_t get_image(mp_image_t *mpi)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1067 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1068 struct vdpau_render_state *rndr;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1069
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1070 // no dr for non-decoding for now
29716
6ee9d09a3a2e cosmetics: Break two more lines.
diego
parents: 29713
diff changeset
1071 if (!IMGFMT_IS_VDPAU(image_format))
6ee9d09a3a2e cosmetics: Break two more lines.
diego
parents: 29713
diff changeset
1072 return VO_FALSE;
6ee9d09a3a2e cosmetics: Break two more lines.
diego
parents: 29713
diff changeset
1073 if (mpi->type != MP_IMGTYPE_NUMBERED)
6ee9d09a3a2e cosmetics: Break two more lines.
diego
parents: 29713
diff changeset
1074 return VO_FALSE;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1075
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1076 rndr = get_surface(mpi->number);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1077 if (!rndr) {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1078 mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] no surfaces available in get_image\n");
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1079 // TODO: this probably breaks things forever, provide a dummy buffer?
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1080 return VO_FALSE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1081 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1082 mpi->flags |= MP_IMGFLAG_DIRECT;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1083 mpi->stride[0] = mpi->stride[1] = mpi->stride[2] = 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1084 mpi->planes[0] = mpi->planes[1] = mpi->planes[2] = NULL;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1085 // hack to get around a check and to avoid a special-case in vd_ffmpeg.c
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1086 mpi->planes[0] = (void *)rndr;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1087 mpi->num_planes = 1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1088 mpi->priv = rndr;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1089 return VO_TRUE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1090 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1091
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1092 static int query_format(uint32_t format)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1093 {
29752
a1da895d9947 Implement VFCAP_FLIP for vo_vdpau.
cehoyos
parents: 29751
diff changeset
1094 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;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1095 switch (format) {
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1096 case IMGFMT_BGRA:
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1097 if (force_mixer)
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1098 return 0;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1099 case IMGFMT_YV12:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1100 case IMGFMT_I420:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1101 case IMGFMT_IYUV:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1102 case IMGFMT_NV12:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1103 case IMGFMT_YUY2:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1104 case IMGFMT_UYVY:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1105 return default_flags | VOCAP_NOSLICES;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1106 case IMGFMT_VDPAU_MPEG1:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1107 case IMGFMT_VDPAU_MPEG2:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1108 case IMGFMT_VDPAU_H264:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1109 case IMGFMT_VDPAU_WMV3:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1110 case IMGFMT_VDPAU_VC1:
29843
f6d56a15f1d8 Support VDPAU hardware accelerated decoding of MPEG-4 ASP on capable
cehoyos
parents: 29830
diff changeset
1111 case IMGFMT_VDPAU_MPEG4:
29830
9fcc27d1fe1f 100: Fix function parameters when calling create_vdp_decoder() from query_format().
cehoyos
parents: 29829
diff changeset
1112 if (create_vdp_decoder(format, 48, 48, 2))
29829
762cbcb0e47f Cosmetics: Fix indentation after last commit.
cehoyos
parents: 29828
diff changeset
1113 return default_flags;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1114 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1115 return 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1116 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1117
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1118 static void DestroyVdpauObjects(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1119 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1120 int i;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1121 VdpStatus vdp_st;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1122
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1123 free_video_specific();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1124
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1125 vdp_st = vdp_presentation_queue_destroy(vdp_flip_queue);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1126 CHECK_ST_WARNING("Error when calling vdp_presentation_queue_destroy")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1127
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1128 vdp_st = vdp_presentation_queue_target_destroy(vdp_flip_target);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1129 CHECK_ST_WARNING("Error when calling vdp_presentation_queue_target_destroy")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1130
28696
fdc03572004c Change code to actually work when NUM_OUTPUT_SURFACES is changed.
reimar
parents: 28689
diff changeset
1131 for (i = 0; i <= NUM_OUTPUT_SURFACES; i++) {
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1132 vdp_st = vdp_output_surface_destroy(output_surfaces[i]);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1133 output_surfaces[i] = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1134 CHECK_ST_WARNING("Error when calling vdp_output_surface_destroy")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1135 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1136
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1137 for (i = 0; i<eosd_surface_count; i++) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1138 if (eosd_surfaces[i].surface != VDP_INVALID_HANDLE) {
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1139 vdp_st = vdp_bitmap_surface_destroy(eosd_surfaces[i].surface);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1140 CHECK_ST_WARNING("Error when calling vdp_bitmap_surface_destroy")
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1141 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1142 eosd_surfaces[i].surface = VDP_INVALID_HANDLE;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1143 }
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1144
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1145 vdp_st = vdp_device_destroy(vdp_device);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1146 CHECK_ST_WARNING("Error when calling vdp_device_destroy")
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1147 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1148
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1149 static void uninit(void)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1150 {
29751
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1151 int i;
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1152
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1153 if (!vo_config_count)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1154 return;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1155 visible_buf = 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1156
29751
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1157 for (i = 0; i < MAX_VIDEO_SURFACES; i++) {
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1158 // Allocated in ff_vdpau_add_data_chunk()
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1159 av_freep(&surface_render[i].bitstream_buffers);
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1160 surface_render[i].bitstream_buffers_allocated = 0;
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1161 }
593354e0500d Free memory allocated in ff_vdpau_add_data_chunk() on uninit.
cehoyos
parents: 29735
diff changeset
1162
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1163 /* Destroy all vdpau objects */
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1164 DestroyVdpauObjects();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1165
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1166 free(index_data);
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1167 index_data = NULL;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1168
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1169 free(eosd_surfaces);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1170 eosd_surfaces = NULL;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1171 free(eosd_targets);
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1172 eosd_targets = NULL;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1173
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1174 #ifdef CONFIG_XF86VM
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1175 vo_vm_close();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1176 #endif
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1177 vo_x11_uninit();
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1178 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1179
28828
56eee6ffba9b Make data related to suboption parsing const in libvo
reimar
parents: 28807
diff changeset
1180 static const opt_t subopts[] = {
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1181 {"deint", OPT_ARG_INT, &deint, (opt_test_f)int_non_neg},
28944
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
1182 {"chroma-deint", OPT_ARG_BOOL, &chroma_deint, NULL},
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1183 {"pullup", OPT_ARG_BOOL, &pullup, NULL},
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1184 {"denoise", OPT_ARG_FLOAT, &denoise, NULL},
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1185 {"sharpen", OPT_ARG_FLOAT, &sharpen, NULL},
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1186 {"colorspace", OPT_ARG_INT, &colorspace, NULL},
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1187 {"force-mixer", OPT_ARG_BOOL, &force_mixer, NULL},
29781
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
1188 {"hqscaling", OPT_ARG_INT, &hqscaling, (opt_test_f)int_non_neg},
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1189 {NULL}
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1190 };
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1191
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1192 static const char help_msg[] =
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1193 "\n-vo vdpau command line help:\n"
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1194 "Example: mplayer -vo vdpau:deint=2\n"
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1195 "\nOptions:\n"
28707
a81065b771e7 Document that all vdpau deinterlacers respect -field-dominance.
cehoyos
parents: 28702
diff changeset
1196 " deint (all modes > 0 respect -field-dominance)\n"
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1197 " 0: no deinterlacing\n"
28708
ebd393e9f567 Add one-field-only output for -vo vdpau.
cehoyos
parents: 28707
diff changeset
1198 " 1: only show first field\n"
28956
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
1199 " 2: bob deinterlacing\n"
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
1200 " 3: temporal deinterlacing (resource-hungry)\n"
6d0da4fd4544 Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents: 28944
diff changeset
1201 " 4: temporal-spatial deinterlacing (very resource-hungry)\n"
28944
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
1202 " chroma-deint\n"
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
1203 " Operate on luma and chroma when using temporal deinterlacing (default)\n"
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
1204 " Use nochroma-deint to speed up temporal deinterlacing\n"
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1205 " pullup\n"
30758
33765d7d6e0a Documentation: Add linebreak and try to be less ambiguous.
cehoyos
parents: 30462
diff changeset
1206 " Try to skip deinterlacing for progressive frames\n"
33765d7d6e0a Documentation: Add linebreak and try to be less ambiguous.
cehoyos
parents: 30462
diff changeset
1207 " (needs at least temporal deinterlacing, useful for telecined content)\n"
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1208 " denoise\n"
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1209 " Apply denoising, argument is strength from 0.0 to 1.0\n"
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1210 " sharpen\n"
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1211 " Apply sharpening or softening, argument is strength from -1.0 to 1.0\n"
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1212 " colorspace\n"
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1213 " 0: guess based on video resolution\n"
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1214 " 1: ITU-R BT.601 (default)\n"
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1215 " 2: ITU-R BT.709\n"
29729
42abcc270fb6 Support SMPTE-240M colourspace in vo_vdpau.
cehoyos
parents: 29727
diff changeset
1216 " 3: SMPTE-240M\n"
29781
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
1217 " hqscaling\n"
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
1218 " 0: default VDPAU scaler\n"
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
1219 " 1-9: high quality VDPAU scaler (needs capable hardware)\n"
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1220 " force-mixer\n"
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1221 " Use the VDPAU mixer (default)\n"
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1222 " Use noforce-mixer to allow BGRA output (disables all above options)\n"
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1223 ;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1224
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1225 static int preinit(const char *arg)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1226 {
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1227 int i;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1228
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1229 deint = 0;
28709
4e89476f8952 Do not forget the chosen deinterlacer for -vo vdpau.
cehoyos
parents: 28708
diff changeset
1230 deint_type = 3;
28933
b0badbd680c6 Initial support for advanced VDPAU deinterlacers (software-decoded video
cehoyos
parents: 28892
diff changeset
1231 deint_counter = 0;
29017
c9a2d95c580a New vdpau deinterlacing code needs one reference surface less.
cehoyos
parents: 29016
diff changeset
1232 deint_mpi[0] = deint_mpi[1] = NULL;
28944
cb18135338dd Add chroma-deint option to vo vdpau (nochroma-deint speeds up deinterlacing).
cehoyos
parents: 28936
diff changeset
1233 chroma_deint = 1;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1234 pullup = 0;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1235 denoise = 0;
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1236 sharpen = 0;
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1237 colorspace = 1;
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1238 force_mixer = 1;
29781
508417d485d6 Add new VDPAU feature high-quality-scaling (and require newer library).
cehoyos
parents: 29757
diff changeset
1239 hqscaling = 0;
28638
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1240 if (subopt_parse(arg, subopts) != 0) {
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1241 mp_msg(MSGT_VO, MSGL_FATAL, help_msg);
7b16ccf423b4 Add support for VDPAU deinterlacing, pullup, denoise and sharpening.
reimar
parents: 28611
diff changeset
1242 return -1;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1243 }
28709
4e89476f8952 Do not forget the chosen deinterlacer for -vo vdpau.
cehoyos
parents: 28708
diff changeset
1244 if (deint)
4e89476f8952 Do not forget the chosen deinterlacer for -vo vdpau.
cehoyos
parents: 28708
diff changeset
1245 deint_type = deint;
29729
42abcc270fb6 Support SMPTE-240M colourspace in vo_vdpau.
cehoyos
parents: 29727
diff changeset
1246 if (colorspace < 0 || colorspace > 3) {
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1247 mp_msg(MSGT_VO, MSGL_WARN, "[vdpau] Invalid color space specified, "
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1248 "using BT.601\n");
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1249 colorspace = 1;
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1250 }
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1251
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1252 if (!vo_init() || win_x11_init_vdpau_procs())
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1253 return -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1254
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1255 decoder = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1256 for (i = 0; i < MAX_VIDEO_SURFACES; i++)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1257 surface_render[i].surface = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1258 video_mixer = VDP_INVALID_HANDLE;
28774
95123b577ad0 Make sure all output_surfaces are initialized in preinit.
reimar
parents: 28729
diff changeset
1259 for (i = 0; i <= NUM_OUTPUT_SURFACES; i++)
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1260 output_surfaces[i] = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1261 vdp_flip_queue = VDP_INVALID_HANDLE;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1262 output_surface_width = output_surface_height = -1;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1263
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1264 // full grayscale palette.
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1265 for (i = 0; i < PALETTE_SIZE; ++i)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1266 palette[i] = (i << 16) | (i << 8) | i;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1267 index_data = NULL;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1268 index_data_size = 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1269
28675
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1270 eosd_surface_count = eosd_render_count = 0;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1271 eosd_surfaces = NULL;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1272 eosd_targets = NULL;
5cc6dc932017 EOSD/ASS support for vo_vdpau.c
reimar
parents: 28658
diff changeset
1273
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1274 procamp.struct_version = VDP_PROCAMP_VERSION;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1275 procamp.brightness = 0.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1276 procamp.contrast = 1.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1277 procamp.saturation = 1.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1278 procamp.hue = 0.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1279
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1280 return 0;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1281 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1282
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1283 static int get_equalizer(char *name, int *value)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1284 {
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1285 if (!strcasecmp(name, "brightness"))
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1286 *value = procamp.brightness * 100;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1287 else if (!strcasecmp(name, "contrast"))
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1288 *value = (procamp.contrast-1.0) * 100;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1289 else if (!strcasecmp(name, "saturation"))
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1290 *value = (procamp.saturation-1.0) * 100;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1291 else if (!strcasecmp(name, "hue"))
28729
bbf7f7100e91 Use M_PI for pi.
cehoyos
parents: 28728
diff changeset
1292 *value = procamp.hue * 100 / M_PI;
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1293 else
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1294 return VO_NOTIMPL;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1295 return VO_TRUE;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1296 }
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1297
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1298 static int set_equalizer(char *name, int value)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1299 {
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1300 if (!strcasecmp(name, "brightness"))
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1301 procamp.brightness = value / 100.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1302 else if (!strcasecmp(name, "contrast"))
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1303 procamp.contrast = value / 100.0 + 1.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1304 else if (!strcasecmp(name, "saturation"))
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1305 procamp.saturation = value / 100.0 + 1.0;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1306 else if (!strcasecmp(name, "hue"))
28729
bbf7f7100e91 Use M_PI for pi.
cehoyos
parents: 28728
diff changeset
1307 procamp.hue = value / 100.0 * M_PI;
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1308 else
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1309 return VO_NOTIMPL;
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1310
29727
3c1645511249 Add colorspace option to vo_vdpau.
cehoyos
parents: 29717
diff changeset
1311 return update_csc_matrix();
28725
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1312 }
b9c26620ada7 Support brightness, contrast, hue and saturation adjustments via
cehoyos
parents: 28724
diff changeset
1313
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1314 static int control(uint32_t request, void *data, ...)
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1315 {
29735
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
1316 if (handle_preemption() < 0)
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
1317 return VO_FALSE;
8adf928e517a Try to recover from VDPAU display pre-emptions.
cehoyos
parents: 29729
diff changeset
1318
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1319 switch (request) {
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1320 case VOCTRL_GET_DEINTERLACE:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1321 *(int*)data = deint;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1322 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1323 case VOCTRL_SET_DEINTERLACE:
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1324 if (image_format == IMGFMT_BGRA)
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1325 return VO_NOTIMPL;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1326 deint = *(int*)data;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1327 if (deint)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1328 deint = deint_type;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1329 if (deint_type > 2) {
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1330 VdpStatus vdp_st;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1331 VdpVideoMixerFeature features[1] =
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1332 {deint_type == 3 ?
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1333 VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL :
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1334 VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL};
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1335 VdpBool feature_enables[1] = {deint ? VDP_TRUE : VDP_FALSE};
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1336 vdp_st = vdp_video_mixer_set_feature_enables(video_mixer, 1,
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1337 features,
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1338 feature_enables);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1339 CHECK_ST_WARNING("Error changing deinterlacing settings")
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1340 }
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1341 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1342 case VOCTRL_PAUSE:
29717
afc8b80eb027 cosmetics: Remove some pointless parentheses from return calls.
diego
parents: 29716
diff changeset
1343 return int_pause = 1;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1344 case VOCTRL_RESUME:
29717
afc8b80eb027 cosmetics: Remove some pointless parentheses from return calls.
diego
parents: 29716
diff changeset
1345 return int_pause = 0;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1346 case VOCTRL_QUERY_FORMAT:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1347 return query_format(*(uint32_t *)data);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1348 case VOCTRL_GET_IMAGE:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1349 return get_image(data);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1350 case VOCTRL_DRAW_IMAGE:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1351 return draw_image(data);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1352 case VOCTRL_GUISUPPORT:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1353 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1354 case VOCTRL_BORDER:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1355 vo_x11_border();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1356 resize();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1357 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1358 case VOCTRL_FULLSCREEN:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1359 vo_x11_fullscreen();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1360 resize();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1361 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1362 case VOCTRL_GET_PANSCAN:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1363 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1364 case VOCTRL_SET_PANSCAN:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1365 resize();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1366 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1367 case VOCTRL_SET_EQUALIZER: {
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1368 va_list ap;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1369 int value;
29756
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1370 if (image_format == IMGFMT_BGRA)
f497b70b4066 Allow image format BGRA when using vo vdpau.
cehoyos
parents: 29752
diff changeset
1371 return VO_NOTIMPL;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1372
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1373 va_start(ap, data);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1374 value = va_arg(ap, int);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1375
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1376 va_end(ap);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1377 return set_equalizer(data, value);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1378 }
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1379 case VOCTRL_GET_EQUALIZER: {
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1380 va_list ap;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1381 int *value;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1382
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1383 va_start(ap, data);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1384 value = va_arg(ap, int *);
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1385
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1386 va_end(ap);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1387 return get_equalizer(data, value);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1388 }
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1389 case VOCTRL_ONTOP:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1390 vo_x11_ontop();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1391 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1392 case VOCTRL_UPDATE_SCREENINFO:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1393 update_xinerama_info();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1394 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1395 case VOCTRL_DRAW_EOSD:
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1396 if (!data)
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1397 return VO_FALSE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1398 generate_eosd(data);
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1399 draw_eosd();
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1400 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1401 case VOCTRL_GET_EOSD_RES: {
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1402 mp_eosd_res_t *r = data;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1403 r->mt = r->mb = r->ml = r->mr = 0;
30065
d5d20b8256b7 Some ugly hacks to make compiling against a newer external version of libass work.
reimar
parents: 30063
diff changeset
1404 r->srcw = vid_width; r->srch = vid_height;
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1405 if (vo_fs) {
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1406 r->w = vo_screenwidth;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1407 r->h = vo_screenheight;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1408 r->ml = r->mr = border_x;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1409 r->mt = r->mb = border_y;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1410 } else {
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1411 r->w = vo_dwidth;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1412 r->h = vo_dheight;
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1413 }
29713
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1414 return VO_TRUE;
0b73008149f2 K&R coding style and whitespace cosmetics
diego
parents: 29263
diff changeset
1415 }
28582
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1416 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1417 return VO_NOTIMPL;
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1418 }
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1419
4d64f83e2fac Add support for VDPAU video out, including hardware decoding.
reimar
parents:
diff changeset
1420 /* @} */