annotate loader/dshow/DS_VideoDecoder.c @ 8660:39476cbd1673

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