annotate libmpcodecs/vd_xvid4.c @ 36316:139f2b064ef9

Don't subsequently calculate original_aspect from last movie_aspect. Instead, differentiate between the original aspect ratio stored in or determined from the video file and the forced, i.e. current, aspect ratio (e.g. forced by command line override). This enables multiple independent instances of vd.c again which has been broken by introducing a static variable in r36401. Without the subsequent calculation of original_aspect it now contains nothing but the pure video file aspect ratio which makes it possible to use movie_aspect -1 to set the original aspect ratio which explains the changes in command.c and gui/dialog/menu.c. The changes in vd_mpegpes due to the impact of original_aspect will fix a bug there at the same time where the condition in order to call mpcodecs_config_vo() should only trigger once when the encoded aspect changes. So far, the forced, i.e. current, aspect has been checked. The whole is related to enabling special argument -1 to switch_ratio started in r36391.
author ib
date Wed, 07 Aug 2013 20:41:34 +0000
parents cc27da5d7286
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
1 /*
26883
a365271c97a5 Revert commit r26897.
iive
parents: 26865
diff changeset
2 * - XviD 1.x decoder module for mplayer/mencoder -
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
3 *
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
4 * Copyright(C) 2003 Marco Belli <elcabesa@inwind.it>
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
5 * 2003-2004 Edouard Gomez <ed.gomez@free.fr>
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
6 *
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
7 * This file is part of MPlayer.
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
8 *
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
9 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
10 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
12 * (at your option) any later version.
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
13 *
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
14 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
17 * GNU General Public License for more details.
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
18 *
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
19 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
20 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 25241
diff changeset
22 */
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
23
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
24 /*****************************************************************************
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
25 * Includes
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
26 ****************************************************************************/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
27
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
28 #include <stdio.h>
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
29 #include <stdlib.h>
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
30
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
31 #include "config.h"
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
32 #include "mp_msg.h"
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
33
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
34 #include "vd_internal.h"
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
35 #include "m_option.h"
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
36
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
37 #include <xvid.h>
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
38
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
39 /*****************************************************************************
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
40 * Configuration options
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
41 ****************************************************************************/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
42
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
43 static int do_dr2 = 1;
11967
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
44 static int filmeffect = 0;
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
45 static int lumadeblock = 0;
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
46 static int chromadeblock = 0;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
47 static int lumadering = 0;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
48 static int chromadering = 0;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
49
25241
bb7c65f2a289 Make m_option_t arrays referenced by cfg-common.h const
reimar
parents: 19614
diff changeset
50 const m_option_t xvid_dec_opts[] = {
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
51 { "dr2", &do_dr2, CONF_TYPE_FLAG, 0, 0, 1, NULL},
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
52 { "nodr2", &do_dr2, CONF_TYPE_FLAG, 0, 1, 0, NULL},
11967
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
53 { "filmeffect", &filmeffect, CONF_TYPE_FLAG, 0, 0, 1, NULL},
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
54 { "deblock-luma", &lumadeblock, CONF_TYPE_FLAG, 0, 0, 1, NULL},
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
55 { "deblock-chroma", &chromadeblock, CONF_TYPE_FLAG, 0, 0, 1, NULL},
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
56 { "dering-luma", &lumadering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
57 { "dering-chroma", &chromadering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
58 {NULL, NULL, 0, 0, 0, 0, NULL}
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
59 };
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
60
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
61 /*****************************************************************************
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
62 * Module private data
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
63 ****************************************************************************/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
64
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
65 typedef struct {
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
66 int cs;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
67 unsigned char img_type;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
68 void* hdl;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
69 mp_image_t* mpi;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
70 int vo_initialized;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
71 } priv_t;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
72
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
73 /*****************************************************************************
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
74 * Module function helpers
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
75 ****************************************************************************/
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
76
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
77 static float stats2aspect(xvid_dec_stats_t *stats);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
78
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
79 /*****************************************************************************
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
80 * Video decoder API function definitions
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
81 ****************************************************************************/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
82
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
83 /*============================================================================
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
84 * control - to set/get/query special features/parameters
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
85 *==========================================================================*/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
86
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
87 static int control(sh_video_t *sh,int cmd,void* arg,...)
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
88 {
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
89 return CONTROL_UNKNOWN;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
90 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
91
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
92 /*============================================================================
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
93 * init - initialize the codec
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
94 *==========================================================================*/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
95
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
96 static int init(sh_video_t *sh)
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
97 {
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
98 xvid_gbl_info_t xvid_gbl_info;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
99 xvid_gbl_init_t xvid_ini;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
100 xvid_dec_create_t dec_p;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
101 priv_t* p;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
102 int cs;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
103
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
104 memset(&xvid_gbl_info, 0, sizeof(xvid_gbl_info_t));
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
105 xvid_gbl_info.version = XVID_VERSION;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
106
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
107 memset(&xvid_ini, 0, sizeof(xvid_gbl_init_t));
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
108 xvid_ini.version = XVID_VERSION;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
109
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
110 memset(&dec_p, 0, sizeof(xvid_dec_create_t));
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
111 dec_p.version = XVID_VERSION;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
112
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
113
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
114 switch(sh->codec->outfmt[sh->outfmtidx]){
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
115 case IMGFMT_YV12:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
116 /* We will use our own buffers, this speeds decoding avoiding
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
117 * frame memcpy's overhead */
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
118 cs = (do_dr2)?XVID_CSP_INTERNAL:XVID_CSP_USER;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
119 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
120 case IMGFMT_YUY2:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
121 cs = XVID_CSP_YUY2;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
122 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
123 case IMGFMT_UYVY:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
124 cs = XVID_CSP_UYVY;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
125 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
126 case IMGFMT_I420:
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
127 case IMGFMT_IYUV:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
128 /* We will use our own buffers, this speeds decoding avoiding
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
129 * frame memcpy's overhead */
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
130 cs = (do_dr2)?XVID_CSP_INTERNAL:XVID_CSP_USER;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
131 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
132 case IMGFMT_BGR15:
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
133 cs = XVID_CSP_RGB555;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
134 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
135 case IMGFMT_BGR16:
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
136 cs = XVID_CSP_RGB565;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
137 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
138 case IMGFMT_BGR32:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
139 cs = XVID_CSP_BGRA;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
140 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
141 case IMGFMT_YVYU:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
142 cs = XVID_CSP_YVYU;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
143 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
144 default:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
145 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Unsupported out_fmt: 0x%X\n",
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
146 sh->codec->outfmt[sh->outfmtidx]);
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
147 return 0;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
148 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
149
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
150 /* Gather some information about the host library */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
151 if(xvid_global(NULL, XVID_GBL_INFO, &xvid_gbl_info, NULL) < 0) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
152 mp_msg(MSGT_MENCODER,MSGL_INFO, "xvid: could not get information about the library\n");
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
153 } else {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
154 mp_msg(MSGT_MENCODER,MSGL_INFO, "xvid: using library version %d.%d.%d (build %s)\n",
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
155 XVID_VERSION_MAJOR(xvid_gbl_info.actual_version),
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
156 XVID_VERSION_MINOR(xvid_gbl_info.actual_version),
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
157 XVID_VERSION_PATCH(xvid_gbl_info.actual_version),
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
158 xvid_gbl_info.build);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
159 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
160
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
161 /* Initialize the xvidcore library */
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
162 if(xvid_global(NULL, XVID_GBL_INIT, &xvid_ini, NULL))
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
163 return 0;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
164
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
165 /* We use 0 width and height so xvidcore will resize its buffers
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
166 * if required. That allows this vd plugin to do resize on first
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
167 * VOL encountered (don't trust containers' width and height) */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
168 dec_p.width = 0;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
169 dec_p.height = 0;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
170
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
171 /* Get a decoder instance */
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
172 if(xvid_decore(0, XVID_DEC_CREATE, &dec_p, NULL)<0) {
26883
a365271c97a5 Revert commit r26897.
iive
parents: 26865
diff changeset
173 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "XviD init failed\n");
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
174 return 0;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
175 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
176
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18771
diff changeset
177 p = malloc(sizeof(priv_t));
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
178 p->cs = cs;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
179 p->hdl = dec_p.handle;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
180 p->vo_initialized = 0;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
181 sh->context = p;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
182
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
183 switch(cs) {
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
184 case XVID_CSP_INTERNAL:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
185 p->img_type = MP_IMGTYPE_EXPORT;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
186 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
187 case XVID_CSP_USER:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
188 p->img_type = MP_IMGTYPE_STATIC;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
189 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
190 default:
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
191 p->img_type = MP_IMGTYPE_TEMP;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
192 break;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
193 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
194
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
195 return 1;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
196 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
197
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
198 /*============================================================================
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
199 * uninit - close the codec
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
200 *==========================================================================*/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
201
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
202 static void uninit(sh_video_t *sh){
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
203 priv_t* p = sh->context;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
204 if(!p)
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
205 return;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
206 xvid_decore(p->hdl,XVID_DEC_DESTROY, NULL, NULL);
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
207 free(p);
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
208 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
209
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
210 /*============================================================================
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
211 * decode - decode a frame from stream
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
212 *==========================================================================*/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
213
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
214 static mp_image_t* decode(sh_video_t *sh, void* data, int len, int flags)
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
215 {
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
216 xvid_dec_frame_t dec;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
217 xvid_dec_stats_t stats;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
218 mp_image_t* mpi = NULL;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
219
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
220 priv_t* p = sh->context;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
221
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
222
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
223 if(!data || len <= 0)
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
224 return NULL;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
225
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
226 memset(&dec,0,sizeof(xvid_dec_frame_t));
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
227 memset(&stats, 0, sizeof(xvid_dec_stats_t));
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
228 dec.version = XVID_VERSION;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
229 stats.version = XVID_VERSION;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
230
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
231 dec.bitstream = data;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
232 dec.length = len;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
233
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
234 dec.general |= XVID_LOWDELAY
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
235 /* XXX: if lowdelay is unset, and xvidcore internal buffers are
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
236 * used => crash. MUST FIX */
11967
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
237 | (filmeffect ? XVID_FILMEFFECT : 0 )
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
238 | (lumadeblock ? XVID_DEBLOCKY : 0 )
4f4b81257d19 Adds support for the film grain effect and deblocking filters in xvid
attila
parents: 11437
diff changeset
239 | (chromadeblock ? XVID_DEBLOCKUV : 0 );
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
240 #if XVID_API >= XVID_MAKE_API(4,1)
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
241 dec.general |= (lumadering ? XVID_DEBLOCKY|XVID_DERINGY : 0 );
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
242 dec.general |= (chromadering ? XVID_DEBLOCKUV|XVID_DERINGUV : 0 );
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
243 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
244 dec.output.csp = p->cs;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
245
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
246 /* Decoding loop because xvidcore may return VOL information for
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
247 * on the fly buffer resizing. In that case we must decode VOL,
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
248 * init VO, then decode the frame */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
249 do {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
250 int consumed;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
251
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
252 /* If we don't know frame size yet, don't even try to request
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
253 * a buffer, we must loop until we find a VOL, so VO plugin
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
254 * is initialized and we can obviously output something */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
255 if (p->vo_initialized) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
256 mpi = mpcodecs_get_image(sh, p->img_type,
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
257 MP_IMGFLAG_ACCEPT_STRIDE,
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
258 sh->disp_w, sh->disp_h);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
259
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
260 if(p->cs != XVID_CSP_INTERNAL) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
261 dec.output.plane[0] = mpi->planes[0];
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
262 dec.output.plane[1] = mpi->planes[1];
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
263 dec.output.plane[2] = mpi->planes[2];
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
264
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
265 dec.output.stride[0] = mpi->stride[0];
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
266 dec.output.stride[1] = mpi->stride[1];
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
267 dec.output.stride[2] = mpi->stride[2];
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
268 }
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
269 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
270
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
271 /* Decode data */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
272 consumed = xvid_decore(p->hdl, XVID_DEC_DECODE, &dec, &stats);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
273 if (consumed < 0) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
274 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Decoding error\n");
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
275 return NULL;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
276 }
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
277
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
278 /* Found a VOL information stats, if VO plugin is not initialized
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
279 * yet then do it now */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
280 if (stats.type == XVID_TYPE_VOL && !p->vo_initialized) {
36316
139f2b064ef9 Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents: 30504
diff changeset
281 sh->original_aspect = stats2aspect(&stats);
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
282 if(!mpcodecs_config_vo(sh, stats.data.vol.width, stats.data.vol.height, IMGFMT_YV12))
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
283 return NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
284
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
285 /* Don't take this path twice */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
286 p->vo_initialized = !p->vo_initialized;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
287 }
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
288
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
289 /* Don't forget to update buffer position and buffer length */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
290 dec.bitstream += consumed;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
291 dec.length -= consumed;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
292 } while ((stats.type == XVID_TYPE_VOL || stats.type == XVID_TYPE_NOTHING) && dec.length > 0);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
293
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
294 /* There are two ways to get out of the decoding loop:
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
295 * - a frame has been returned
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
296 * - no more data in buffer and no frames returned */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
297
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
298 /* If mpi is NULL, it proves nothing has been returned by the decoder
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
299 * so don't try to display internal buffers. */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
300 if (mpi != NULL && p->cs == XVID_CSP_INTERNAL) {
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
301 mpi->planes[0] = dec.output.plane[0];
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
302 mpi->planes[1] = dec.output.plane[1];
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
303 mpi->planes[2] = dec.output.plane[2];
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
304
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
305 mpi->stride[0] = dec.output.stride[0];
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
306 mpi->stride[1] = dec.output.stride[1];
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
307 mpi->stride[2] = dec.output.stride[2];
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
308 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
309
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
310 /* If we got out the decoding loop because the buffer was empty and there was nothing
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
311 * to output yet, then just return NULL */
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
312 return (stats.type == XVID_TYPE_NOTHING) ? NULL : mpi;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
313 }
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
314
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
315 /*****************************************************************************
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
316 * Helper functions
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
317 ****************************************************************************/
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
318
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
319 /* Returns DAR value according to VOL's informations contained in stats
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
320 * param */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
321 static float stats2aspect(xvid_dec_stats_t *stats)
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
322 {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
323 if (stats->type == XVID_TYPE_VOL) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
324 float wpar;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
325 float hpar;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
326 float dar;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
327
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
328 /* MPEG4 strem stores PAR (Pixel Aspect Ratio), mplayer uses
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
329 * DAR (Display Aspect Ratio)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
330 *
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
331 * Both are related thanks to the equation:
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26883
diff changeset
332 * width
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
333 * DAR = ----- x PAR
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
334 * height
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
335 *
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
336 * As MPEG4 is so well designed (*cough*), VOL header carries
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
337 * both informations together -- lucky eh ? */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
338
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
339 switch (stats->data.vol.par) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
340 case XVID_PAR_11_VGA: /* 1:1 vga (square), default if supplied PAR is not a valid value */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
341 wpar = hpar = 1.0f;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
342 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
343 case XVID_PAR_43_PAL: /* 4:3 pal (12:11 625-line) */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
344 wpar = 12;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
345 hpar = 11;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
346 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
347 case XVID_PAR_43_NTSC: /* 4:3 ntsc (10:11 525-line) */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
348 wpar = 10;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
349 hpar = 11;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
350 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
351 case XVID_PAR_169_PAL: /* 16:9 pal (16:11 625-line) */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
352 wpar = 16;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
353 hpar = 11;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
354 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
355 case XVID_PAR_169_NTSC: /* 16:9 ntsc (40:33 525-line) */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
356 wpar = 40;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
357 hpar = 33;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
358 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
359 case XVID_PAR_EXT: /* extended par; use par_width, par_height */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
360 wpar = stats->data.vol.par_width;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
361 hpar = stats->data.vol.par_height;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
362 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
363 default:
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
364 wpar = hpar = 1.0f;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
365 break;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
366 }
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
367
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
368 dar = ((float)stats->data.vol.width*wpar);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
369 dar /= ((float)stats->data.vol.height*hpar);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
370
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
371 return dar;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
372 }
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
373
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26727
diff changeset
374 return 0.0f;
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
375 }
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
376
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
377 /*****************************************************************************
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
378 * Module structure definition
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
379 ****************************************************************************/
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
380
30504
cc27da5d7286 Mark all ad_info_t/vd_info_t structure declarations as const.
diego
parents: 29263
diff changeset
381 static const vd_info_t info =
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
382 {
26883
a365271c97a5 Revert commit r26897.
iive
parents: 26865
diff changeset
383 "XviD 1.0 decoder",
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
384 "xvid",
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
385 "Marco Belli <elcabesa@inwind.it>, Edouard Gomez <ed.gomez@free.fr>",
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
386 "Marco Belli <elcabesa@inwind.it>, Edouard Gomez <ed.gomez@free.fr>",
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
387 "No Comment"
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
388 };
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
389
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
390 LIBVD_EXTERN(xvid)
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
391
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
392 /* Please do not change that tag comment.
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
393 * arch-tag: b7d654a5-76ea-4768-9713-2c791567fe7d mplayer xvid decoder module */