annotate loader/dshow/DS_VideoDecoder.c @ 15533:ddf15d233d58

Do not switch to audio tracks whose codec private data differs from the main audio track's as this will most likely result in messed up audio output. Patch by Michael Behrisch <list () behrisch ! de>
author mosu
date Sat, 21 May 2005 06:50:08 +0000
parents 11cee15b1a8f
children 3bf0d70b4c7f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
1 /********************************************************
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
2
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
3 DirectShow Video decoder implementation
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
4 Copyright 2000 Eugene Kuznetsov (divx@euro.ru)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
5
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
6 *********************************************************/
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
7 #include "config.h"
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
8 #include "guids.h"
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
9 #include "interfaces.h"
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7316
diff changeset
10 #include "registry.h"
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
11
3946
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
12 #ifndef NOAVIFILE_HEADERS
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
13 #include "videodecoder.h"
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
14 #else
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
15 #include "libwin32.h"
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
16 #endif
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
17 #include "DS_Filter.h"
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
18
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
19 struct _DS_VideoDecoder
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
20 {
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
21 IVideoDecoder iv;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
22
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
23 DS_Filter* m_pDS_Filter;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
24 AM_MEDIA_TYPE m_sOurType, m_sDestType;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
25 VIDEOINFOHEADER* m_sVhdr;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
26 VIDEOINFOHEADER* m_sVhdr2;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
27 int m_Caps;//CAPS m_Caps; // capabilities of DirectShow decoder
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
28 int m_iLastQuality; // remember last quality as integer
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
29 int m_iMinBuffers;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
30 int m_iMaxAuto;
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
31 int m_bIsDivX; // for speed
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
32 int m_bIsDivX4; // for speed
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
33 };
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
34
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
35 #include "DS_VideoDecoder.h"
3946
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
36
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
37 #include "../wine/winerror.h"
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
38 #ifdef WIN32_LOADER
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7472
diff changeset
39 #include "../ldt_keeper.h"
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
40 #endif
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
41
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
42 #ifndef NOAVIFILE_HEADERS
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
43 #define VFW_E_NOT_RUNNING 0x80040226
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
44 #include "fourcc.h"
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
45 #include "except.h"
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
46 #endif
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
47
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
48 #include <unistd.h>
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
49 #include <fcntl.h>
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
50 #include <errno.h>
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
51 #include <sys/types.h>
9978
11cee15b1a8f last mingw32 support patch by Sascha Sommer
alex
parents: 9967
diff changeset
52 #ifndef __MINGW32__
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
53 #include <sys/mman.h>
9978
11cee15b1a8f last mingw32 support patch by Sascha Sommer
alex
parents: 9967
diff changeset
54 #endif
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
55 #include <stdio.h>
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
56 #include <stdlib.h> // labs
2072
4b3f3f850896 killed unneeded dependency on c++ headers
arpi
parents: 2069
diff changeset
57
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
58 // strcmp((const char*)info.dll,...) is used instead of (... == ...)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
59 // so Arpi could use char* pointer in his simplified DS_VideoDecoder class
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
60
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
61 #define __MODULE__ "DirectShow_VideoDecoder"
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
62
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
63 #define false 0
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
64 #define true 1
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
65
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
66 int DS_VideoDecoder_GetCapabilities(DS_VideoDecoder *this)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
67 {return this->m_Caps;}
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
68
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
69 typedef struct _ct ct;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
70
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
71 struct _ct {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
72 unsigned int bits;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
73 fourcc_t fcc;
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7472
diff changeset
74 const GUID *subtype;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
75 int cap;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
76 };
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
77
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
78 static ct check[] = {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
79 {16, fccYUY2, &MEDIASUBTYPE_YUY2, CAP_YUY2},
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
80 {12, fccIYUV, &MEDIASUBTYPE_IYUV, CAP_IYUV},
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
81 {16, fccUYVY, &MEDIASUBTYPE_UYVY, CAP_UYVY},
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
82 {12, fccYV12, &MEDIASUBTYPE_YV12, CAP_YV12},
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
83 //{16, fccYV12, &MEDIASUBTYPE_YV12, CAP_YV12},
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
84 {16, fccYVYU, &MEDIASUBTYPE_YVYU, CAP_YVYU},
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
85 {12, fccI420, &MEDIASUBTYPE_I420, CAP_I420},
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
86 {9, fccYVU9, &MEDIASUBTYPE_YVU9, CAP_YVU9},
9581
0ef45318414a a warning fix and rgb15/16 support by Sascha Sommer
alex
parents: 9503
diff changeset
87 {0, 0, 0, 0},
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
88 };
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
89
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
90
3444
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
91 DS_VideoDecoder * DS_VideoDecoder_Open(char* dllname, GUID* guid, BITMAPINFOHEADER * format, int flip, int maxauto)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
92 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
93 DS_VideoDecoder *this;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
94 HRESULT result;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
95 ct* c;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
96
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
97 this = malloc(sizeof(DS_VideoDecoder));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
98 memset( this, 0, sizeof(DS_VideoDecoder));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
99
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
100 this->m_sVhdr2 = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
101 this->m_iLastQuality = -1;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
102 this->m_iMaxAuto = maxauto;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
103
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
104 #ifdef WIN32_LOADER
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
105 Setup_LDT_Keeper();
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
106 #endif
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
107
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
108 //memset(&m_obh, 0, sizeof(m_obh));
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
109 //m_obh.biSize = sizeof(m_obh);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
110 /*try*/
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
111 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
112 unsigned int bihs;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
113
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
114 bihs = (format->biSize < (int) sizeof(BITMAPINFOHEADER)) ?
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
115 sizeof(BITMAPINFOHEADER) : format->biSize;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
116
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
117 this->iv.m_bh = (BITMAPINFOHEADER*)malloc(bihs);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
118 memcpy(this->iv.m_bh, format, bihs);
4205
c42ab0e5bbbc possible sig11 fixed - noticed by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 3978
diff changeset
119
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
120 this->iv.m_State = STOP;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
121 //this->iv.m_pFrame = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
122 this->iv.m_Mode = DIRECT;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
123 this->iv.m_iDecpos = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
124 this->iv.m_iPlaypos = -1;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
125 this->iv.m_fQuality = 0.0f;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
126 this->iv.m_bCapable16b = true;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
127
4205
c42ab0e5bbbc possible sig11 fixed - noticed by Fredrik Kuivinen <freku045@student.liu.se>
arpi
parents: 3978
diff changeset
128 bihs += sizeof(VIDEOINFOHEADER) - sizeof(BITMAPINFOHEADER);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
129 this->m_sVhdr = (VIDEOINFOHEADER*)malloc(bihs);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
130 memset(this->m_sVhdr, 0, bihs);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
131 memcpy(&this->m_sVhdr->bmiHeader, this->iv.m_bh, this->iv.m_bh->biSize);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
132 this->m_sVhdr->rcSource.left = this->m_sVhdr->rcSource.top = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
133 this->m_sVhdr->rcSource.right = this->m_sVhdr->bmiHeader.biWidth;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
134 this->m_sVhdr->rcSource.bottom = this->m_sVhdr->bmiHeader.biHeight;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
135 //this->m_sVhdr->rcSource.right = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
136 //this->m_sVhdr->rcSource.bottom = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
137 this->m_sVhdr->rcTarget = this->m_sVhdr->rcSource;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
138
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
139 this->m_sOurType.majortype = MEDIATYPE_Video;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
140 this->m_sOurType.subtype = MEDIATYPE_Video;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
141 this->m_sOurType.subtype.f1 = this->m_sVhdr->bmiHeader.biCompression;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
142 this->m_sOurType.formattype = FORMAT_VideoInfo;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
143 this->m_sOurType.bFixedSizeSamples = false;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
144 this->m_sOurType.bTemporalCompression = true;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
145 this->m_sOurType.pUnk = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
146 this->m_sOurType.cbFormat = bihs;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
147 this->m_sOurType.pbFormat = (char*)this->m_sVhdr;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
148
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
149 this->m_sVhdr2 = (VIDEOINFOHEADER*)(malloc(sizeof(VIDEOINFOHEADER)+12));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
150 memcpy(this->m_sVhdr2, this->m_sVhdr, sizeof(VIDEOINFOHEADER));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
151 memset((char*)this->m_sVhdr2 + sizeof(VIDEOINFOHEADER), 0, 12);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
152 this->m_sVhdr2->bmiHeader.biCompression = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
153 this->m_sVhdr2->bmiHeader.biBitCount = 24;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
154
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
155 memset(&this->m_sDestType, 0, sizeof(this->m_sDestType));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
156 this->m_sDestType.majortype = MEDIATYPE_Video;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
157 this->m_sDestType.subtype = MEDIASUBTYPE_RGB24;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
158 this->m_sDestType.formattype = FORMAT_VideoInfo;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
159 this->m_sDestType.bFixedSizeSamples = true;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
160 this->m_sDestType.bTemporalCompression = false;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
161 this->m_sDestType.lSampleSize = labs(this->m_sVhdr2->bmiHeader.biWidth*this->m_sVhdr2->bmiHeader.biHeight
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
162 * ((this->m_sVhdr2->bmiHeader.biBitCount + 7) / 8));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
163 this->m_sVhdr2->bmiHeader.biSizeImage = this->m_sDestType.lSampleSize;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
164 this->m_sDestType.pUnk = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
165 this->m_sDestType.cbFormat = sizeof(VIDEOINFOHEADER);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
166 this->m_sDestType.pbFormat = (char*)this->m_sVhdr2;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
167
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
168 memset(&this->iv.m_obh, 0, sizeof(this->iv.m_obh));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
169 memcpy(&this->iv.m_obh, this->iv.m_bh, sizeof(this->iv.m_obh) < (unsigned) this->iv.m_bh->biSize
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
170 ? sizeof(this->iv.m_obh) : (unsigned) this->iv.m_bh->biSize);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
171 this->iv.m_obh.biBitCount=24;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
172 this->iv.m_obh.biSize = sizeof(BITMAPINFOHEADER);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
173 this->iv.m_obh.biCompression = 0; //BI_RGB
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
174 //this->iv.m_obh.biHeight = labs(this->iv.m_obh.biHeight);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
175 this->iv.m_obh.biSizeImage = labs(this->iv.m_obh.biWidth * this->iv.m_obh.biHeight)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
176 * ((this->iv.m_obh.biBitCount + 7) / 8);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
177
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
178
3444
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
179 this->m_pDS_Filter = DS_FilterCreate(dllname, guid, &this->m_sOurType, &this->m_sDestType);
3456
ebab4801241f do not fault if Filter_Create failed
alex
parents: 3444
diff changeset
180
ebab4801241f do not fault if Filter_Create failed
alex
parents: 3444
diff changeset
181 if (!this->m_pDS_Filter)
ebab4801241f do not fault if Filter_Create failed
alex
parents: 3444
diff changeset
182 {
ebab4801241f do not fault if Filter_Create failed
alex
parents: 3444
diff changeset
183 printf("Failed to create DirectShow filter\n");
ebab4801241f do not fault if Filter_Create failed
alex
parents: 3444
diff changeset
184 return 0;
ebab4801241f do not fault if Filter_Create failed
alex
parents: 3444
diff changeset
185 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
186
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
187 if (!flip)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
188 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
189 this->iv.m_obh.biHeight *= -1;
3466
b6caac381405 avifile merge
arpi
parents: 3456
diff changeset
190 this->m_sVhdr2->bmiHeader.biHeight = this->iv.m_obh.biHeight;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
191 result = this->m_pDS_Filter->m_pOutputPin->vt->QueryAccept(this->m_pDS_Filter->m_pOutputPin, &this->m_sDestType);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
192 if (result)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
193 {
3466
b6caac381405 avifile merge
arpi
parents: 3456
diff changeset
194 printf("Decoder does not support upside-down RGB frames\n");
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
195 this->iv.m_obh.biHeight *= -1;
3466
b6caac381405 avifile merge
arpi
parents: 3456
diff changeset
196 this->m_sVhdr2->bmiHeader.biHeight = this->iv.m_obh.biHeight;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
197 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
198 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
199
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
200 memcpy( &this->iv.m_decoder, &this->iv.m_obh, sizeof(this->iv.m_obh) );
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
201
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
202 switch (this->iv.m_bh->biCompression)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
203 {
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
204 #if 0
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
205 case fccDIV3:
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
206 case fccDIV4:
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
207 case fccDIV5:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
208 case fccDIV6:
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
209 case fccMP42:
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
210 case fccWMV2:
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
211 //YV12 seems to be broken for DivX :-) codec
3060
33989b5b8d02 xine's bugs fixed - YV50 yv12 and setup_fs
arpi
parents: 3059
diff changeset
212 // case fccIV50:
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
213 //produces incorrect picture
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
214 //m_Caps = (CAPS) (m_Caps & ~CAP_YV12);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
215 //m_Caps = CAP_UYVY;//CAP_YUY2; // | CAP_I420;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
216 //m_Caps = CAP_I420;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
217 this->m_Caps = (CAP_YUY2 | CAP_UYVY);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
218 break;
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
219 #endif
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
220 default:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
221
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
222 this->m_Caps = CAP_NONE;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
223
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
224 printf("Decoder supports the following YUV formats: ");
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
225 for (c = check; c->bits; c++)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
226 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
227 this->m_sVhdr2->bmiHeader.biBitCount = c->bits;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
228 this->m_sVhdr2->bmiHeader.biCompression = c->fcc;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
229 this->m_sDestType.subtype = *c->subtype;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
230 result = this->m_pDS_Filter->m_pOutputPin->vt->QueryAccept(this->m_pDS_Filter->m_pOutputPin, &this->m_sDestType);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
231 if (!result)
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
232 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
233 this->m_Caps = (this->m_Caps | c->cap);
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7472
diff changeset
234 printf("%.4s ", (char *)&c->fcc);
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
235 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
236 }
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
237 printf("\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
238 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
239
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
240 if (this->m_Caps != CAP_NONE)
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
241 printf("Decoder is capable of YUV output (flags 0x%x)\n", (int)this->m_Caps);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
242
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
243 this->m_sVhdr2->bmiHeader.biBitCount = 24;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
244 this->m_sVhdr2->bmiHeader.biCompression = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
245 this->m_sDestType.subtype = MEDIASUBTYPE_RGB24;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
246
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
247 this->m_iMinBuffers = this->iv.VBUFSIZE;
3444
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
248 this->m_bIsDivX = (strcmp(dllname, "divxcvki.ax") == 0
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
249 || strcmp(dllname, "divx_c32.ax") == 0
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
250 || strcmp(dllname, "wmvds32.ax") == 0
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
251 || strcmp(dllname, "wmv8ds32.ax") == 0);
0c0042de1f95 API changes - now fully compatible with C++ version
arpi
parents: 3063
diff changeset
252 this->m_bIsDivX4 = (strcmp(dllname, "divxdec.ax") == 0);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
253 if (this->m_bIsDivX)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
254 this->iv.VBUFSIZE += 7;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
255 else if (this->m_bIsDivX4)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
256 this->iv.VBUFSIZE += 9;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
257 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
258 /*catch (FatalError& error)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
259 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
260 delete[] m_sVhdr;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
261 delete[] m_sVhdr2;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
262 delete m_pDS_Filter;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
263 throw;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
264 }*/
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
265 return this;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
266 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
267
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
268 void DS_VideoDecoder_Destroy(DS_VideoDecoder *this)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
269 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
270 DS_VideoDecoder_StopInternal(this);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
271 this->iv.m_State = STOP;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
272 free(this->m_sVhdr);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
273 free(this->m_sVhdr2);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
274 DS_Filter_Destroy(this->m_pDS_Filter);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
275 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
276
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
277 void DS_VideoDecoder_StartInternal(DS_VideoDecoder *this)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
278 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
279 ALLOCATOR_PROPERTIES props, props1;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
280 Debug printf("DS_VideoDecoder_StartInternal\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
281 //cout << "DSSTART" << endl;
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
282 this->m_pDS_Filter->Start(this->m_pDS_Filter);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
283
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
284 props.cBuffers = 1;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
285 props.cbBuffer = this->m_sDestType.lSampleSize;
9503
f47d484d8f28 cbAlign=1 fix for proper Windows support (noticed by Sascha Sommer)
alex
parents: 8451
diff changeset
286 props.cbAlign = 1;
f47d484d8f28 cbAlign=1 fix for proper Windows support (noticed by Sascha Sommer)
alex
parents: 8451
diff changeset
287 props.cbPrefix = 0;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
288 this->m_pDS_Filter->m_pAll->vt->SetProperties(this->m_pDS_Filter->m_pAll, &props, &props1);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
289 this->m_pDS_Filter->m_pAll->vt->Commit(this->m_pDS_Filter->m_pAll);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
290
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
291 this->iv.m_State = START;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
292 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
293
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
294 void DS_VideoDecoder_StopInternal(DS_VideoDecoder *this)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
295 {
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
296 this->m_pDS_Filter->Stop(this->m_pDS_Filter);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
297 //??? why was this here ??? m_pOurOutput->SetFramePointer(0);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
298 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
299
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
300 int DS_VideoDecoder_DecodeInternal(DS_VideoDecoder *this, const void* src, int size, int is_keyframe, char* pImage)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
301 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
302 IMediaSample* sample = 0;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
303 char* ptr;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
304 int result;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
305
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
306 Debug printf("DS_VideoDecoder_DecodeInternal(%p,%p,%d,%d,%p)\n",this,src,size,is_keyframe,pImage);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
307
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
308 this->m_pDS_Filter->m_pAll->vt->GetBuffer(this->m_pDS_Filter->m_pAll, &sample, 0, 0, 0);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
309
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
310 if (!sample)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
311 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
312 Debug printf("ERROR: null sample\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
313 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
314 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
315
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
316 //cout << "DECODE " << (void*) pImage << " d: " << (void*) pImage->Data() << endl;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
317 if (pImage)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
318 {
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
319 this->m_pDS_Filter->m_pOurOutput->SetPointer2(this->m_pDS_Filter->m_pOurOutput,pImage);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
320 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
321
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
322
3466
b6caac381405 avifile merge
arpi
parents: 3456
diff changeset
323 sample->vt->SetActualDataLength(sample, size);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
324 sample->vt->GetPointer(sample, (BYTE **)&ptr);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
325 memcpy(ptr, src, size);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
326 sample->vt->SetSyncPoint(sample, is_keyframe);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
327 sample->vt->SetPreroll(sample, pImage ? 0 : 1);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
328 // sample->vt->SetMediaType(sample, &m_sOurType);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
329
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
330 // FIXME: - crashing with YV12 at this place decoder will crash
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
331 // while doing this call
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
332 // %FS register was not setup for calling into win32 dll. Are all
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
333 // crashes inside ...->Receive() fixed now?
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
334 //
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
335 // nope - but this is surely helpfull - I'll try some more experiments
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
336 #ifdef WIN32_LOADER
3060
33989b5b8d02 xine's bugs fixed - YV50 yv12 and setup_fs
arpi
parents: 3059
diff changeset
337 Setup_FS_Segment();
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 9581
diff changeset
338 #endif
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
339 #if 0
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
340 if (!this->m_pDS_Filter || !this->m_pDS_Filter->m_pImp
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
341 || !this->m_pDS_Filter->m_pImp->vt
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
342 || !this->m_pDS_Filter->m_pImp->vt->Receive)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
343 printf("DecodeInternal ERROR???\n");
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
344 #endif
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
345 result = this->m_pDS_Filter->m_pImp->vt->Receive(this->m_pDS_Filter->m_pImp, sample);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
346 if (result)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
347 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
348 Debug printf("DS_VideoDecoder::DecodeInternal() error putting data into input pin %x\n", result);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
349 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
350
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
351 sample->vt->Release((IUnknown*)sample);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
352
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
353 #if 0
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
354 if (this->m_bIsDivX)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
355 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
356 int q;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
357 IHidden* hidden=(IHidden*)((int)this->m_pDS_Filter->m_pFilter + 0xb8);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
358 // always check for actual value
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
359 // this seems to be the only way to know the actual value
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
360 hidden->vt->GetSmth2(hidden, &this->m_iLastQuality);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
361 if (this->m_iLastQuality > 9)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
362 this->m_iLastQuality -= 10;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
363
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
364 if (this->m_iLastQuality < 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
365 this->m_iLastQuality = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
366 else if (this->m_iLastQuality > this->m_iMaxAuto)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
367 this->m_iLastQuality = this->m_iMaxAuto;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
368
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
369 //cout << " Qual: " << this->m_iLastQuality << endl;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
370 this->iv.m_fQuality = this->m_iLastQuality / 4.0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
371 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
372 else if (this->m_bIsDivX4)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
373 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
374
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
375 // maybe access methods directly to safe some cpu cycles...
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
376 DS_VideoDecoder_GetValue(this, "Postprocessing", this->m_iLastQuality);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
377 if (this->m_iLastQuality < 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
378 this->m_iLastQuality = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
379 else if (this->m_iLastQuality > this->m_iMaxAuto)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
380 this->m_iLastQuality = this->m_iMaxAuto;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
381
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
382 //cout << " Qual: " << m_iLastQuality << endl;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
383 this->iv.m_fQuality = this->m_iLastQuality / 6.0;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
384 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
385
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
386 if (this->iv.m_Mode == -1 ) // ???BUFFERED_QUALITY_AUTO)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
387 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
388 // adjust Quality - depends on how many cached frames we have
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
389 int buffered = this->iv.m_iDecpos - this->iv.m_iPlaypos;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
390
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
391 if (this->m_bIsDivX || this->m_bIsDivX4)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
392 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
393 int to = buffered - this->m_iMinBuffers;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
394 if (to < 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
395 to = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
396 if (to != this->m_iLastQuality)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
397 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
398 if (to > this->m_iMaxAuto)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
399 to = this->m_iMaxAuto;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
400 if (this->m_iLastQuality != to)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
401 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
402 if (this->m_bIsDivX)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
403 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
404 IHidden* hidden=(IHidden*)((int)this->m_pDS_Filter->m_pFilter + 0xb8);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
405 hidden->vt->SetSmth(hidden, to, 0);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
406 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
407 else
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
408 DS_VideoDecoder_SetValue(this, "Postprocessing", to);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
409 #ifndef QUIET
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
410 //printf("Switching quality %d -> %d b:%d\n",m_iLastQuality, to, buffered);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
411 #endif
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
412 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
413 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
414 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
415 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
416 #endif
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
417
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
418 return 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
419 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
420
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
421 /*
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
422 * bits == 0 - leave unchanged
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
423 */
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
424 //int SetDestFmt(DS_VideoDecoder * this, int bits = 24, fourcc_t csp = 0);
3946
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
425 int DS_VideoDecoder_SetDestFmt(DS_VideoDecoder *this, int bits, unsigned int csp)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
426 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
427 HRESULT result;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
428 int should_test=1;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
429 int stoped = 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
430
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
431 Debug printf("DS_VideoDecoder_SetDestFmt (%p, %d, %d)\n",this,bits,(int)csp);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
432
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
433 /* if (!CImage::Supported(csp, bits))
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
434 return -1;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
435 */
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
436 // BitmapInfo temp = m_obh;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
437
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
438 if (!csp) // RGB
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
439 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
440 int ok = true;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
441
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
442 switch (bits)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
443 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
444 case 15:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
445 this->m_sDestType.subtype = MEDIASUBTYPE_RGB555;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
446 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
447 case 16:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
448 this->m_sDestType.subtype = MEDIASUBTYPE_RGB565;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
449 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
450 case 24:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
451 this->m_sDestType.subtype = MEDIASUBTYPE_RGB24;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
452 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
453 case 32:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
454 this->m_sDestType.subtype = MEDIASUBTYPE_RGB32;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
455 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
456 default:
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
457 ok = false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
458 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
459 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
460
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
461 if (ok) {
9581
0ef45318414a a warning fix and rgb15/16 support by Sascha Sommer
alex
parents: 9503
diff changeset
462 if (bits == 15)
0ef45318414a a warning fix and rgb15/16 support by Sascha Sommer
alex
parents: 9503
diff changeset
463 this->iv.m_obh.biBitCount=16;
0ef45318414a a warning fix and rgb15/16 support by Sascha Sommer
alex
parents: 9503
diff changeset
464 else
0ef45318414a a warning fix and rgb15/16 support by Sascha Sommer
alex
parents: 9503
diff changeset
465 this->iv.m_obh.biBitCount=bits;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
466 if( bits == 15 || bits == 16 ) {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
467 this->iv.m_obh.biSize=sizeof(BITMAPINFOHEADER)+12;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
468 this->iv.m_obh.biCompression=3;//BI_BITFIELDS
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
469 this->iv.m_obh.biSizeImage=abs((int)(2*this->iv.m_obh.biWidth*this->iv.m_obh.biHeight));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
470 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
471
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
472 if( bits == 16 ) {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
473 this->iv.m_obh.colors[0]=0xF800;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
474 this->iv.m_obh.colors[1]=0x07E0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
475 this->iv.m_obh.colors[2]=0x001F;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
476 } else if ( bits == 15 ) {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
477 this->iv.m_obh.colors[0]=0x7C00;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
478 this->iv.m_obh.colors[1]=0x03E0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
479 this->iv.m_obh.colors[2]=0x001F;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
480 } else {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
481 this->iv.m_obh.biSize = sizeof(BITMAPINFOHEADER);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
482 this->iv.m_obh.biCompression = 0; //BI_RGB
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
483 //this->iv.m_obh.biHeight = labs(this->iv.m_obh.biHeight);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
484 this->iv.m_obh.biSizeImage = labs(this->iv.m_obh.biWidth * this->iv.m_obh.biHeight)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
485 * ((this->iv.m_obh.biBitCount + 7) / 8);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
486 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
487 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
488 //.biSizeImage=abs(temp.biWidth*temp.biHeight*((temp.biBitCount+7)/8));
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
489 } else
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
490 { // YUV
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
491 int ok = true;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
492 switch (csp)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
493 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
494 case fccYUY2:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
495 this->m_sDestType.subtype = MEDIASUBTYPE_YUY2;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
496 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
497 case fccYV12:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
498 this->m_sDestType.subtype = MEDIASUBTYPE_YV12;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
499 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
500 case fccIYUV:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
501 this->m_sDestType.subtype = MEDIASUBTYPE_IYUV;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
502 break;
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
503 case fccI420:
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
504 this->m_sDestType.subtype = MEDIASUBTYPE_I420;
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
505 break;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
506 case fccUYVY:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
507 this->m_sDestType.subtype = MEDIASUBTYPE_UYVY;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
508 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
509 case fccYVYU:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
510 this->m_sDestType.subtype = MEDIASUBTYPE_YVYU;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
511 break;
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
512 case fccYVU9:
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
513 this->m_sDestType.subtype = MEDIASUBTYPE_YVU9;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
514 default:
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
515 ok = false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
516 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
517 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
518
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
519 if (ok) {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
520 if (csp != 0 && csp != 3 && this->iv.m_obh.biHeight > 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
521 this->iv.m_obh.biHeight *= -1; // YUV formats uses should have height < 0
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
522 this->iv.m_obh.biSize = sizeof(BITMAPINFOHEADER);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
523 this->iv.m_obh.biCompression=csp;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
524 this->iv.m_obh.biBitCount=bits;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
525 this->iv.m_obh.biSizeImage=labs(this->iv.m_obh.biBitCount*
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
526 this->iv.m_obh.biWidth*this->iv.m_obh.biHeight)>>3;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
527 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
528 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
529 this->m_sDestType.lSampleSize = this->iv.m_obh.biSizeImage;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
530 memcpy(&(this->m_sVhdr2->bmiHeader), &this->iv.m_obh, sizeof(this->iv.m_obh));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
531 this->m_sVhdr2->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
532 if (this->m_sVhdr2->bmiHeader.biCompression == 3)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
533 this->m_sDestType.cbFormat = sizeof(VIDEOINFOHEADER) + 12;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
534 else
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
535 this->m_sDestType.cbFormat = sizeof(VIDEOINFOHEADER);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
536
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
537
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
538 switch(csp)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
539 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
540 case fccYUY2:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
541 if(!(this->m_Caps & CAP_YUY2))
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
542 should_test=false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
543 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
544 case fccYV12:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
545 if(!(this->m_Caps & CAP_YV12))
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
546 should_test=false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
547 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
548 case fccIYUV:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
549 if(!(this->m_Caps & CAP_IYUV))
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
550 should_test=false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
551 break;
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
552 case fccI420:
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
553 if(!(this->m_Caps & CAP_I420))
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
554 should_test=false;
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
555 break;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
556 case fccUYVY:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
557 if(!(this->m_Caps & CAP_UYVY))
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
558 should_test=false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
559 break;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
560 case fccYVYU:
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
561 if(!(this->m_Caps & CAP_YVYU))
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
562 should_test=false;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
563 break;
6527
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
564 case fccYVU9:
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
565 if(!(this->m_Caps & CAP_YVU9))
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
566 should_test=false;
1baa35e06053 yvu9 and if09 support. fixed i420,iyuv handling
alex
parents: 4205
diff changeset
567 break;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
568 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
569 if(should_test)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
570 result = this->m_pDS_Filter->m_pOutputPin->vt->QueryAccept(this->m_pDS_Filter->m_pOutputPin, &this->m_sDestType);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
571 else
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
572 result = -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
573
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
574 if (result != 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
575 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
576 if (csp)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
577 printf("Warning: unsupported color space\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
578 else
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
579 printf("Warning: unsupported bit depth\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
580
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
581 this->m_sDestType.lSampleSize = this->iv.m_decoder.biSizeImage;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
582 memcpy(&(this->m_sVhdr2->bmiHeader), &this->iv.m_decoder, sizeof(this->iv.m_decoder));
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
583 this->m_sVhdr2->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
584 if (this->m_sVhdr2->bmiHeader.biCompression == 3)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
585 this->m_sDestType.cbFormat = sizeof(VIDEOINFOHEADER) + 12;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
586 else
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
587 this->m_sDestType.cbFormat = sizeof(VIDEOINFOHEADER);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
588
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
589 return -1;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
590 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
591
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
592 memcpy( &this->iv.m_decoder, &this->iv.m_obh, sizeof(this->iv.m_obh));
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
593
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
594 // m_obh=temp;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
595 // if(csp)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
596 // m_obh.biBitCount=BitmapInfo::BitCount(csp);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
597 this->iv.m_bh->biBitCount = bits;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
598
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
599 //DS_VideoDecoder_Restart(this);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
600
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
601 if (this->iv.m_State == START)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
602 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
603 DS_VideoDecoder_StopInternal(this);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
604 this->iv.m_State = STOP;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
605 stoped = true;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
606 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
607
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
608 this->m_pDS_Filter->m_pInputPin->vt->Disconnect(this->m_pDS_Filter->m_pInputPin);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
609 this->m_pDS_Filter->m_pOutputPin->vt->Disconnect(this->m_pDS_Filter->m_pOutputPin);
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
610 this->m_pDS_Filter->m_pOurOutput->SetNewFormat(this->m_pDS_Filter->m_pOurOutput,&this->m_sDestType);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
611 result = this->m_pDS_Filter->m_pInputPin->vt->ReceiveConnection(this->m_pDS_Filter->m_pInputPin,
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
612 this->m_pDS_Filter->m_pOurInput,
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
613 &this->m_sOurType);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
614 if (result)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
615 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
616 printf("Error reconnecting input pin 0x%x\n", (int)result);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
617 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
618 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
619 result = this->m_pDS_Filter->m_pOutputPin->vt->ReceiveConnection(this->m_pDS_Filter->m_pOutputPin,
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
620 (IPin *)this->m_pDS_Filter->m_pOurOutput,
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
621 &this->m_sDestType);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
622 if (result)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
623 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
624 printf("Error reconnecting output pin 0x%x\n", (int)result);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
625 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
626 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
627
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
628 if (stoped)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
629 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
630 DS_VideoDecoder_StartInternal(this);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
631 this->iv.m_State = START;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
632 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
633
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
634 return 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
635 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
636
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
637
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
638 int DS_VideoDecoder_SetDirection(DS_VideoDecoder *this, int d)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
639 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
640 this->iv.m_obh.biHeight = (d) ? this->iv.m_bh->biHeight : -this->iv.m_bh->biHeight;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
641 this->m_sVhdr2->bmiHeader.biHeight = this->iv.m_obh.biHeight;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
642 return 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
643 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
644
3946
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
645 int DS_VideoDecoder_GetValue(DS_VideoDecoder *this, const char* name, int* value)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
646 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
647 /*
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
648 if (m_bIsDivX4)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
649 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
650 IDivxFilterInterface* pIDivx;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
651 if (m_pDS_Filter->m_pFilter->vt->QueryInterface((IUnknown*)m_pDS_Filter->m_pFilter, &IID_IDivxFilterInterface, (void**)&pIDivx))
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
652 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
653 Debug printf("No such interface\n");
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
654 return -1;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
655 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
656 if (strcmp(name, "Postprocessing") == 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
657 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
658 pIDivx->vt->get_PPLevel(pIDivx, &value);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
659 value /= 10;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
660 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
661 else if (strcmp(name, "Brightness") == 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
662 pIDivx->vt->get_Brightness(pIDivx, &value);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
663 else if (strcmp(name, "Contrast") == 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
664 pIDivx->vt->get_Contrast(pIDivx, &value);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
665 else if (strcmp(name, "Saturation") == 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
666 pIDivx->vt->get_Saturation(pIDivx, &value);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
667 else if (strcmp(name, "MaxAuto") == 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
668 value = m_iMaxAuto;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
669 pIDivx->vt->Release((IUnknown*)pIDivx);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
670 return 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
671 }
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
672 else if (m_bIsDivX)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
673 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
674 if (m_State != START)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
675 return VFW_E_NOT_RUNNING;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
676 // brightness 87
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
677 // contrast 74
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
678 // hue 23
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
679 // saturation 20
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
680 // post process mode 0
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
681 // get1 0x01
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
682 // get2 10
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
683 // get3=set2 86
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
684 // get4=set3 73
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
685 // get5=set4 19
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
686 // get6=set5 23
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
687 IHidden* hidden=(IHidden*)((int)m_pDS_Filter->m_pFilter+0xb8);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
688 if (strcmp(name, "Quality") == 0)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
689 {
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
690 #warning NOT SURE
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
691 int r = hidden->vt->GetSmth2(hidden, &value);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
692 if (value >= 10)
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
693 value -= 10;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
694 return 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
695 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
696 if (strcmp(name, "Brightness") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
697 return hidden->vt->GetSmth3(hidden, &value);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
698 if (strcmp(name, "Contrast") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
699 return hidden->vt->GetSmth4(hidden, &value);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
700 if (strcmp(name, "Hue") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
701 return hidden->vt->GetSmth6(hidden, &value);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
702 if (strcmp(name, "Saturation") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
703 return hidden->vt->GetSmth5(hidden, &value);
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
704 if (strcmp(name, "MaxAuto") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
705 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
706 value = m_iMaxAuto;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
707 return 0;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
708 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
709 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
710 else if (strcmp((const char*)record.dll, "ir50_32.dll") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
711 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
712 IHidden2* hidden = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
713 if (m_pDS_Filter->m_pFilter->vt->QueryInterface((IUnknown*)m_pDS_Filter->m_pFilter, &IID_Iv50Hidden, (void**)&hidden))
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
714 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
715 Debug printf("No such interface\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
716 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
717 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
718 #warning FIXME
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
719 int recordpar[30];
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
720 recordpar[0]=0x7c;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
721 recordpar[1]=fccIV50;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
722 recordpar[2]=0x10005;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
723 recordpar[3]=2;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
724 recordpar[4]=1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
725 recordpar[5]=0x80000000;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
726
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
727 if (strcmp(name, "Brightness") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
728 recordpar[5]|=0x20;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
729 else if (strcmp(name, "Saturation") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
730 recordpar[5]|=0x40;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
731 else if (strcmp(name, "Contrast") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
732 recordpar[5]|=0x80;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
733 if (!recordpar[5])
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
734 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
735 hidden->vt->Release((IUnknown*)hidden);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
736 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
737 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
738 if (hidden->vt->DecodeSet(hidden, recordpar))
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
739 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
740
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
741 if (strcmp(name, "Brightness") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
742 value = recordpar[18];
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
743 else if (strcmp(name, "Saturation") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
744 value = recordpar[19];
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
745 else if (strcmp(name, "Contrast") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
746 value = recordpar[20];
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
747
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
748 hidden->vt->Release((IUnknown*)hidden);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
749 }
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
750 */
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
751 return 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
752 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
753
3946
c00db356082f headers cleanup
arpi
parents: 3466
diff changeset
754 int DS_VideoDecoder_SetValue(DS_VideoDecoder *this, const char* name, int value)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
755 {
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
756 if (this->m_bIsDivX4) {
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
757 IDivxFilterInterface* pIDivx=NULL;
3978
2ba1d0ca9dce debug--
arpi
parents: 3957
diff changeset
758 // printf("DS_SetValue for DIVX4, name=%s value=%d\n",name,value);
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
759 if (this->m_pDS_Filter->m_pFilter->vt->QueryInterface((IUnknown*)this->m_pDS_Filter->m_pFilter, &IID_IDivxFilterInterface, (void**)&pIDivx))
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
760 {
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
761 printf("No such interface\n");
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
762 return -1;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
763 }
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
764 if (strcasecmp(name, "Postprocessing") == 0)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
765 pIDivx->vt->put_PPLevel(pIDivx, value * 10);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
766 else if (strcasecmp(name, "Brightness") == 0)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
767 pIDivx->vt->put_Brightness(pIDivx, value);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
768 else if (strcasecmp(name, "Contrast") == 0)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
769 pIDivx->vt->put_Contrast(pIDivx, value);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
770 else if (strcasecmp(name, "Saturation") == 0)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
771 pIDivx->vt->put_Saturation(pIDivx, value);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
772 else if (strcasecmp(name, "MaxAuto") == 0)
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
773 this->m_iMaxAuto = value;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
774 pIDivx->vt->Release((IUnknown*)pIDivx);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
775 //printf("Set %s %d\n", name, value);
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
776 return 0;
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
777 }
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
778
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
779 if (this->m_bIsDivX) {
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
780 IHidden* hidden;
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
781 if (this->iv.m_State != START)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
782 return VFW_E_NOT_RUNNING;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
783
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
784 //cout << "set value " << name << " " << value << endl;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
785 // brightness 87
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
786 // contrast 74
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
787 // hue 23
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
788 // saturation 20
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
789 // post process mode 0
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
790 // get1 0x01
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
791 // get2 10
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
792 // get3=set2 86
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
793 // get4=set3 73
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
794 // get5=set4 19
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
795 // get6=set5 23
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
796 hidden = (IHidden*)((int)this->m_pDS_Filter->m_pFilter + 0xb8);
7316
e09428ee353f disable annonying debug printf (autoq)
atmos4
parents: 6801
diff changeset
797 //printf("DS_SetValue for DIVX, name=%s value=%d\n",name,value);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
798 if (strcasecmp(name, "Quality") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
799 {
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
800 this->m_iLastQuality = value;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
801 return hidden->vt->SetSmth(hidden, value, 0);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
802 }
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
803 if (strcasecmp(name, "Brightness") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
804 return hidden->vt->SetSmth2(hidden, value, 0);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
805 if (strcasecmp(name, "Contrast") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
806 return hidden->vt->SetSmth3(hidden, value, 0);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
807 if (strcasecmp(name, "Saturation") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
808 return hidden->vt->SetSmth4(hidden, value, 0);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
809 if (strcasecmp(name, "Hue") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
810 return hidden->vt->SetSmth5(hidden, value, 0);
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
811 if (strcasecmp(name, "MaxAuto") == 0)
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
812 {
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
813 this->m_iMaxAuto = value;
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
814 }
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
815 return 0;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
816 }
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
817 #if 0
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
818 if (strcmp((const char*)record.dll, "ir50_32.dll") == 0)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
819 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
820 IHidden2* hidden = 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
821 if (m_pDS_Filter->m_pFilter->vt->QueryInterface((IUnknown*)m_pDS_Filter->m_pFilter, &IID_Iv50Hidden, (void**)&hidden))
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
822 {
3059
24fa494bedb1 imported from xine
arpi
parents: 2875
diff changeset
823 Debug printf("No such interface\n");
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
824 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
825 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
826 int recordpar[30];
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
827 recordpar[0]=0x7c;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
828 recordpar[1]=fccIV50;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
829 recordpar[2]=0x10005;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
830 recordpar[3]=2;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
831 recordpar[4]=1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
832 recordpar[5]=0x80000000;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
833 if (strcmp(name, "Brightness") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
834 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
835 recordpar[5]|=0x20;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
836 recordpar[18]=value;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
837 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
838 else if (strcmp(name, "Saturation") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
839 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
840 recordpar[5]|=0x40;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
841 recordpar[19]=value;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
842 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
843 else if (strcmp(name, "Contrast") == 0)
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
844 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
845 recordpar[5]|=0x80;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
846 recordpar[20]=value;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
847 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
848 if(!recordpar[5])
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
849 {
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
850 hidden->vt->Release((IUnknown*)hidden);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
851 return -1;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
852 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
853 HRESULT result = hidden->vt->DecodeSet(hidden, recordpar);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
854 hidden->vt->Release((IUnknown*)hidden);
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
855
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
856 return result;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
857 }
3957
49290522ab06 SetValue fixed, iv_State=START enabled (silly xine developers disabled for unknown reason)
arpi
parents: 3946
diff changeset
858 #endif
3978
2ba1d0ca9dce debug--
arpi
parents: 3957
diff changeset
859 // printf("DS_SetValue for ????, name=%s value=%d\n",name,value);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
860 return 0;
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
861 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
862 /*
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
863 vim: vi* sux.
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents:
diff changeset
864 */
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
865
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
866 int DS_SetAttr_DivX(char* attribute, int value){
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7316
diff changeset
867 int result, status, newkey;
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
868 if(strcasecmp(attribute, "Quality")==0){
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
869 char* keyname="SOFTWARE\\Microsoft\\Scrunch";
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
870 result=RegCreateKeyExA(HKEY_CURRENT_USER, keyname, 0, 0, 0, 0, 0, &newkey, &status);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
871 if(result!=0)
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
872 {
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
873 printf("VideoDecoder::SetExtAttr: registry failure\n");
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
874 return -1;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
875 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
876 result=RegSetValueExA(newkey, "Current Post Process Mode", 0, REG_DWORD, &value, 4);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
877 if(result!=0)
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
878 {
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
879 printf("VideoDecoder::SetExtAttr: error writing value\n");
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
880 return -1;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
881 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
882 value=-1;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
883 result=RegSetValueExA(newkey, "Force Post Process Mode", 0, REG_DWORD, &value, 4);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
884 if(result!=0)
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
885 {
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
886 printf("VideoDecoder::SetExtAttr: error writing value\n");
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
887 return -1;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
888 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
889 RegCloseKey(newkey);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
890 return 0;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
891 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
892
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
893 if(
6801
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
894 (strcasecmp(attribute, "Saturation")==0) ||
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
895 (strcasecmp(attribute, "Hue")==0) ||
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
896 (strcasecmp(attribute, "Contrast")==0) ||
7847b993acf3 SetValue: ignore case of 'item'
arpi
parents: 6527
diff changeset
897 (strcasecmp(attribute, "Brightness")==0)
3063
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
898 )
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
899 {
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
900 char* keyname="SOFTWARE\\Microsoft\\Scrunch\\Video";
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
901 result=RegCreateKeyExA(HKEY_CURRENT_USER, keyname, 0, 0, 0, 0, 0, &newkey, &status);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
902 if(result!=0)
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
903 {
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
904 printf("VideoDecoder::SetExtAttr: registry failure\n");
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
905 return -1;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
906 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
907 result=RegSetValueExA(newkey, attribute, 0, REG_DWORD, &value, 4);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
908 if(result!=0)
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
909 {
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
910 printf("VideoDecoder::SetExtAttr: error writing value\n");
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
911 return -1;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
912 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
913 RegCloseKey(newkey);
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
914 return 0;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
915 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
916
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
917 printf("Unknown attribute!\n");
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
918 return -200;
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
919 }
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
920
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
921
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
922
004e3199fee0 mplayer integration
arpi
parents: 3060
diff changeset
923