annotate libmpcodecs/vd_vfwex.c @ 7241:283561e2bef5

better subfont description, moved to the write place
author jonas
date Mon, 02 Sep 2002 00:34:20 +0000
parents 08feeb543402
children 5f1f724f7046
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
1 #include <stdio.h>
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
2 #include <stdlib.h>
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
3
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
4 #include "config.h"
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
5 #include "mp_msg.h"
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
6 #include "help_mp.h"
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
7
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
8 #ifdef USE_WIN32DLL
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
9
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
10 #include "loader.h"
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
11 //#include "wine/mmreg.h"
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
12 #include "wine/vfw.h"
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
13 #include "wine/avifmt.h"
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
14
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
15 #include "vd_internal.h"
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
16
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
17 #include "libvo/img_format.h"
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
18
7176
42222161de9b 2*10l to me
arpi
parents: 7175
diff changeset
19 static vd_info_t info = {
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
20 "Win32/VfWex video codecs",
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
21 "vfwex",
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
22 "A'rpi",
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
23 "A'rpi & Alex",
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
24 "win32 codecs"
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
25 };
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
26
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
27 LIBVD_EXTERN(vfwex)
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
28
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
29 typedef struct {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
30 BITMAPINFOHEADER *o_bih;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
31 HIC handle;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
32 } vd_vfw_ctx;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
33
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
34 extern int divx_quality;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
35
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
36 static int vfw_set_postproc(sh_video_t* sh, int quality)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
37 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
38 vd_vfw_ctx *priv = sh->context;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
39 // Works only with opendivx/divx4 based DLL
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
40 return ICSendMessage(priv->handle, ICM_USER+80, (long)(&quality) ,NULL);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
41 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
42
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
43 // to set/get/query special features/parameters
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
44 static int control(sh_video_t *sh,int cmd,void* arg,...){
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
45 switch(cmd){
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
46 case VDCTRL_QUERY_MAX_PP_LEVEL:
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
47 return 9;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
48 case VDCTRL_SET_PP_LEVEL:
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
49 vfw_set_postproc(sh,10*(*((int*)arg)));
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
50 return CONTROL_OK;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
51 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
52 return CONTROL_UNKNOWN;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
53 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
54
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
55 // init driver
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
56 static int init(sh_video_t *sh){
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
57 HRESULT ret;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
58 int yuv=0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
59 unsigned int outfmt=sh->codec->outfmt[sh->outfmtidx];
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
60 int i, o_bih_len;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
61 vd_vfw_ctx *priv;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
62
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
63 priv = malloc(sizeof(vd_vfw_ctx));
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
64 if (!priv)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
65 return 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
66 memset(priv, 0, sizeof(vd_vfw_ctx));
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
67 sh->context = priv;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
68
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
69 mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (VFW) VIDEO Codec init =======\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
70
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
71 win32_codec_name = sh->codec->dll;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
72 // sh->hic = ICOpen( 0x63646976, sh->bih->biCompression, ICMODE_FASTDECOMPRESS);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
73 priv->handle = ICOpen( 0x63646976, sh->bih->biCompression, ICMODE_DECOMPRESS);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
74 if(!priv->handle){
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
75 mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
76 return 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
77 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
78
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
79 // sh->bih->biBitCount=32;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
80
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
81 o_bih_len = ICDecompressGetFormatSize(priv->handle, sh->bih);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
82
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
83 priv->o_bih = malloc(o_bih_len);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
84 memset(priv->o_bih, 0, o_bih_len);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
85 // priv->o_bih->biSize = o_bih_len;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
86
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
87 printf("ICDecompressGetFormatSize ret: %d\n", o_bih_len);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
88
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
89 ret = ICDecompressGetFormat(priv->handle, sh->bih, priv->o_bih);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
90 if(ret < 0){
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
91 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressGetFormat failed: Error %d\n", (int)ret);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
92 for (i=0; i < o_bih_len; i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02x ", priv->o_bih[i]);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
93 return 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
94 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
95 mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressGetFormat OK\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
96
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
97 // QPEG fsck !?!
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
98 // priv->o_bih->biSize = o_bih_len;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
99
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
100 // printf("ICM_DECOMPRESS_QUERY=0x%X",ICM_DECOMPRESS_QUERY);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
101
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
102 // sh->o_bih.biWidth=sh_video->bih.biWidth;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
103 // sh->o_bih.biCompression = 0x32315659; // mmioFOURCC('U','Y','V','Y');
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
104 // ret=ICDecompressGetFormatSize(sh_video->hic,&sh_video->o_bih);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
105 // sh->o_bih.biCompression = 3; //0x32315659;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
106 // sh->o_bih.biCompression = mmioFOURCC('U','Y','V','Y');
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
107 // sh->o_bih.biCompression = mmioFOURCC('U','Y','V','Y');
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
108 // sh->o_bih.biCompression = mmioFOURCC('Y','U','Y','2');
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
109 // sh->o_bih.biPlanes=3;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
110 // sh->o_bih.biBitCount=16;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
111
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
112 #if 0
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
113 // workaround for pegasus MJPEG:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
114 if(!sh_video->o_bih.biWidth) sh_video->o_bih.biWidth=sh_video->bih->biWidth;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
115 if(!sh_video->o_bih.biHeight) sh_video->o_bih.biHeight=sh_video->bih->biHeight;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
116 if(!sh_video->o_bih.biPlanes) sh_video->o_bih.biPlanes=sh_video->bih->biPlanes;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
117 #endif
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
118
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
119 switch (outfmt)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
120 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
121 /* planar format */
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
122 case IMGFMT_YV12:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
123 case IMGFMT_I420:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
124 case IMGFMT_IYUV:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
125 priv->o_bih->biBitCount=12;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
126 yuv=1;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
127 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
128 case IMGFMT_YVU9:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
129 case IMGFMT_IF09:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
130 priv->o_bih->biBitCount=9;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
131 yuv=1;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
132 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
133 /* packed format */
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
134 case IMGFMT_YUY2:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
135 case IMGFMT_UYVY:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
136 case IMGFMT_YVYU:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
137 priv->o_bih->biBitCount=16;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
138 yuv=1;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
139 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
140 /* rgb/bgr format */
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
141 case IMGFMT_RGB8:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
142 case IMGFMT_BGR8:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
143 priv->o_bih->biBitCount=8;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
144 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
145 case IMGFMT_RGB15:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
146 case IMGFMT_RGB16:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
147 case IMGFMT_BGR15:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
148 case IMGFMT_BGR16:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
149 priv->o_bih->biBitCount=16;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
150 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
151 case IMGFMT_RGB24:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
152 case IMGFMT_BGR24:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
153 priv->o_bih->biBitCount=24;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
154 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
155 case IMGFMT_RGB32:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
156 case IMGFMT_BGR32:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
157 priv->o_bih->biBitCount=32;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
158 break;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
159 default:
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
160 mp_msg(MSGT_WIN32,MSGL_ERR,"unsupported image format: 0x%x\n", outfmt);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
161 return 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
162 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
163
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
164 priv->o_bih->biSizeImage = priv->o_bih->biWidth * priv->o_bih->biHeight * (priv->o_bih->biBitCount/8);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
165
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
166 if (!(sh->codec->outflags[sh->outfmtidx]&CODECS_FLAG_FLIP)) {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
167 priv->o_bih->biHeight=-sh->bih->biHeight; // flip image!
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
168 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
169
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
170 if (yuv && !(sh->codec->outflags[sh->outfmtidx] & CODECS_FLAG_YUVHACK))
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
171 priv->o_bih->biCompression = outfmt;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
172 else
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
173 priv->o_bih->biCompression = 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
174
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
175 if(verbose)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
176 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
177 printf("Input format:\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
178 printf(" biSize %ld\n", sh->bih->biSize);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
179 printf(" biWidth %ld\n", sh->bih->biWidth);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
180 printf(" biHeight %ld\n", sh->bih->biHeight);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
181 printf(" biPlanes %d\n", sh->bih->biPlanes);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
182 printf(" biBitCount %d\n", sh->bih->biBitCount);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
183 printf(" biCompression 0x%lx ('%.4s')\n", sh->bih->biCompression, (char *)&sh->bih->biCompression);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
184 printf(" biSizeImage %ld\n", sh->bih->biSizeImage);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
185 printf("Output format:\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
186 printf(" biSize %ld\n", priv->o_bih->biSize);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
187 printf(" biWidth %ld\n", priv->o_bih->biWidth);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
188 printf(" biHeight %ld\n", priv->o_bih->biHeight);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
189 printf(" biPlanes %d\n", priv->o_bih->biPlanes);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
190 printf(" biBitCount %d\n", priv->o_bih->biBitCount);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
191 printf(" biCompression 0x%lx ('%.4s')\n", priv->o_bih->biCompression, (char *)&priv->o_bih->biCompression);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
192 printf(" biSizeImage %ld\n", priv->o_bih->biSizeImage);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
193 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
194
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
195 if (ICDecompressQueryEx(priv->handle, sh->bih, priv->o_bih))
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
196 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
197 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressQuery failed: Error %d\n", (int)ret);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
198 // return 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
199 } else
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
200 mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressQuery OK\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
201
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
202 if (ICDecompressBeginEx(priv->handle, sh->bih, priv->o_bih))
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
203 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
204 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressBegin failed: Error %d\n", (int)ret);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
205 // return 0;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
206 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
207
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
208 if (yuv && sh->codec->outflags[sh->outfmtidx] & CODECS_FLAG_YUVHACK)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
209 priv->o_bih->biCompression = outfmt;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
210
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
211 ICSendMessage(priv->handle, ICM_USER+80, (long)(&divx_quality) ,NULL);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
212
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
213 if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YUY2)) return 0;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
214 mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: Win32 video codec init OK!\n");
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
215 return 1;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
216 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
217
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
218 // uninit driver
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
219 static void uninit(sh_video_t *sh){
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
220 HRESULT ret;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
221 vd_vfw_ctx *priv = sh->context;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
222
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
223 ret = ICDecompressEnd(priv->handle);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
224 if (ret)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
225 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
226 mp_msg(MSGT_WIN32, MSGL_WARN, "ICDecompressEnd failed: %d\n", ret);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
227 return(0);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
228 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
230 ret = ICClose(priv->handle);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
231 if (ret)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
232 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
233 mp_msg(MSGT_WIN32, MSGL_WARN, "ICClose failed: %d\n", ret);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
234 return(0);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
235 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
236
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
237 free(priv->o_bih);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
238 free(priv);
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
239 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
240
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
241 // decode a frame
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
242 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
243 vd_vfw_ctx *priv = sh->context;
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
244 mp_image_t* mpi;
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
245 HRESULT ret;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
246
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
247 if(len<=0) return NULL; // skipped frame
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
248
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
249 mpi=mpcodecs_get_image(sh,
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
250 (sh->codec->outflags[sh->outfmtidx] & CODECS_FLAG_STATIC) ?
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
251 MP_IMGTYPE_STATIC : MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_WIDTH,
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
252 sh->disp_w, sh->disp_h);
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
253 if(!mpi){ // temporary!
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
254 printf("couldn't allocate image for cinepak codec\n");
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
255 return NULL;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
256 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
257
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
258 // set stride: (trick discovered by Andreas Ackermann - thanx!)
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
259 sh->bih->biWidth=mpi->width; //mpi->stride[0]/(mpi->bpp/8);
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
260 priv->o_bih->biWidth=mpi->width; //mpi->stride[0]/(mpi->bpp/8);
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
261
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
262 sh->bih->biSizeImage = len;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
263
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
264 ret = ICDecompressEx(priv->handle,
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
265 ( (sh->ds->flags&1) ? 0 : ICDECOMPRESS_NOTKEYFRAME ) |
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
266 ( ((flags&3)==2 && !(sh->ds->flags&1))?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ),
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
267 sh->bih, data, priv->o_bih, (flags&3) ? 0 : mpi->planes[0]);
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
268
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
269 if ((int)ret){
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
270 mp_msg(MSGT_DECVIDEO,MSGL_WARN,"Error decompressing frame, err=%d\n",ret);
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
271 return NULL;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
272 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
273
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
274 // export palette:
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
275 if(mpi->imgfmt==IMGFMT_RGB8 || mpi->imgfmt==IMGFMT_BGR8){
7229
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
276 if(priv->o_bih->biSize>40)
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
277 {
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
278 mpi->planes[1]=((unsigned char*)priv->o_bih)+40;
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
279 mp_dbg(MSGT_DECVIDEO, MSGL_DBG2, "Found and copied palette\n");
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
280 }
b4d025d64eb3 merged with dll_init
alex
parents: 7180
diff changeset
281 else
7175
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
282 mpi->planes[1]=NULL;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
283 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
284
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
285 return mpi;
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
286 }
f8b147aab1a5 vfwex separated from vfw, to work with new vfm system and dlopen
arpi
parents:
diff changeset
287 #endif