annotate libvo/vo_vdpau.c @ 35418:cedb0ba2b5c6

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