annotate libmpcodecs/vd_xvid4.c @ 22616:09dc129234a0

Matroska seeking fixes If a relative seek forward went past the last index position the Matroska demuxer did not seek to any index position. It did however set the mkv_d->skip_to_timecode variable which meant that the next fill_buffer() call would read from the current position until the target position (probably the end of the file). Fix this by changing the code to seek to the last index position if that is between the current and target positions. Also change backwards relative seek to accept an exactly matching index position (<= vs <) and reorganize the seeking conditionals to allow making the above change without turning the code into a complete mess.
author uau
date Fri, 16 Mar 2007 14:55:41 +0000
parents 36589811e5d0
children bb7c65f2a289
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
1 /*****************************************************************************
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
2 *
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
3 * - XviD 1.x decoder module for mplayer/mencoder -
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
4 *
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
5 * Copyright(C) 2003 Marco Belli <elcabesa@inwind.it>
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
6 * 2003-2004 Edouard Gomez <ed.gomez@free.fr>
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
7 *
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
11 * (at your option) any later version.
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
12 *
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
16 * GNU General Public License for more details.
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
17 *
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19614
36589811e5d0 The FSF changed postal address.
diego
parents: 18879
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
21 *
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
22 *****************************************************************************/
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
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
50 m_option_t xvid_dec_opts[] = {
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 {
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
89 return(CONTROL_UNKNOWN);
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;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
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;
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
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;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
126 case IMGFMT_I420:
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;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
132 case IMGFMT_BGR15:
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;
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
135 case IMGFMT_BGR16:
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]);
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
147 return(0);
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 }
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
160
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))
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
163 return(0);
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) {
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
173 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "XviD init failed\n");
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
174 return(0);
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
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
195 return(1);
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)
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
224 return(NULL);
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
11437
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
244 dec.output.csp = p->cs;
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);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
259
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
13652
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
265 dec.output.stride[0] = mpi->stride[0];
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
266 dec.output.stride[1] = mpi->stride[1];
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 }
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
270
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");
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
275 return(NULL);
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) {
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
281 sh->aspect = stats2aspect(&stats);
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))
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
283 return(NULL);
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
284
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 */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
297
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 */
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
312 return((stats.type == XVID_TYPE_NOTHING)? NULL: mpi);
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;
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
327
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)
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
330 *
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
331 * Both are related thanks to the equation:
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
332 * width
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
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
diff changeset
371 return(dar);
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
3427a9f4b6e3 Sync with GomGom's patch-12 version.
iive
parents: 11967
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
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
381 static vd_info_t info =
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
382 {
7826e4e376c7 XviD Api4 driver from http://ed.gomez.free.fr/
iive
parents:
diff changeset
383 "XviD 1.0 decoder",
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 */