Mercurial > mplayer.hg
annotate libmpcodecs/ve_vfw.c @ 30537:7bebe34b6ad2
Move movie_aspect extern declaration to libmpcodecs/vd.h.
This is the appropriate place for the declaration; the variable is
declared in libmpcodecs/vd.c.
author | diego |
---|---|
date | Sun, 14 Feb 2010 14:47:22 +0000 |
parents | bbb6ebec87a0 |
children | ac4bcd2064ce |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
18 |
5550 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
7238 | 22 #include <unistd.h> |
8585 | 23 #include <inttypes.h> |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
24 #include <sys/stat.h> |
5550 | 25 |
17012 | 26 #include "config.h" |
5550 | 27 |
17012 | 28 #include "mp_msg.h" |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
29 #include "help_mp.h" |
5550 | 30 |
31 #include "codec-cfg.h" | |
22600
3c2b4a866c6a
Add explicit location for headers from the stream/ directory.
diego
parents:
22577
diff
changeset
|
32 //#include "stream/stream.h" |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22600
diff
changeset
|
33 //#include "libmpdemux/demuxer.h" |
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22600
diff
changeset
|
34 //#include "libmpdemux/stheader.h" |
7231 | 35 |
22577
a033e5519802
Include loader/ prefix in #include path everywhere.
diego
parents:
22252
diff
changeset
|
36 #include "loader/loader.h" |
a033e5519802
Include loader/ prefix in #include path everywhere.
diego
parents:
22252
diff
changeset
|
37 //#include "loader/wine/mmreg.h" |
a033e5519802
Include loader/ prefix in #include path everywhere.
diego
parents:
22252
diff
changeset
|
38 #include "loader/wine/vfw.h" |
26146
20a126aaa756
ve_vfw.c: #include aviheader.h instead of wine avifmt.h
uau
parents:
25262
diff
changeset
|
39 #include "libmpdemux/aviheader.h" |
24770
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
40 #include "loader/wine/winerror.h" |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
41 #include "loader/wine/objbase.h" |
5550 | 42 |
5607 | 43 #include "img_format.h" |
44 #include "mp_image.h" | |
5550 | 45 #include "vf.h" |
46 | |
22600
3c2b4a866c6a
Add explicit location for headers from the stream/ directory.
diego
parents:
22577
diff
changeset
|
47 #include "stream/stream.h" |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22600
diff
changeset
|
48 #include "libmpdemux/muxer.h" |
8585 | 49 |
5550 | 50 //===========================================================================// |
51 | |
6083 | 52 static char *vfw_param_codec = NULL; |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
53 static char *vfw_param_compdata = NULL; |
24770
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
54 static HRESULT CoInitRes = -1; |
6083 | 55 |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
9014
diff
changeset
|
56 #include "m_option.h" |
6083 | 57 |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
9014
diff
changeset
|
58 m_option_t vfwopts_conf[]={ |
6083 | 59 {"codec", &vfw_param_codec, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
60 {"compdata", &vfw_param_compdata, CONF_TYPE_STRING, 0, 0, 0, NULL}, |
6083 | 61 {NULL, NULL, 0, 0, 0, 0, NULL} |
62 }; | |
63 | |
5550 | 64 struct vf_priv_s { |
8585 | 65 muxer_stream_t* mux; |
5550 | 66 BITMAPINFOHEADER* bih; |
67 }; | |
68 | |
7557 | 69 static HIC encoder_hic; |
7231 | 70 static void* encoder_buf=NULL; |
71 static int encoder_buf_size=0; | |
72 static int encoder_frameno=0; | |
73 | |
74 //int init_vfw_encoder(char *dll_name, BITMAPINFOHEADER *input_bih, BITMAPINFOHEADER *output_bih) | |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
75 static BITMAPINFOHEADER* vfw_open_encoder(char *dll_name, char *compdatafile, BITMAPINFOHEADER *input_bih,unsigned int out_fourcc) |
7231 | 76 { |
77 HRESULT ret; | |
78 BITMAPINFOHEADER* output_bih=NULL; | |
79 int temp_len; | |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
80 FILE *fd=NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
81 char *drvdata=NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
82 struct stat st; |
7231 | 83 |
84 //sh_video = malloc(sizeof(sh_video_t)); | |
85 | |
86 mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (VFW) VIDEO Encoder init =======\n"); | |
24770
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
87 CoInitRes = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); |
7231 | 88 // memset(&sh_video->o_bih, 0, sizeof(BITMAPINFOHEADER)); |
89 // output_bih->biSize = sizeof(BITMAPINFOHEADER); | |
90 | |
7390 | 91 // encoder_hic = ICOpen( 0x63646976, out_fourcc, ICMODE_COMPRESS); |
7557 | 92 encoder_hic = ICOpen( (long) dll_name, out_fourcc, ICMODE_COMPRESS); |
7231 | 93 if(!encoder_hic){ |
94 mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n"); | |
95 return NULL; | |
96 } | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
97 mp_msg(MSGT_WIN32,MSGL_INFO,"HIC: %x\n", encoder_hic); |
7231 | 98 |
99 #if 1 | |
100 { | |
101 ICINFO icinfo; | |
102 | |
103 ret = ICGetInfo(encoder_hic, &icinfo, sizeof(ICINFO)); | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
104 mp_msg(MSGT_WIN32,MSGL_INFO,"%ld - %ld - %d\n", ret, icinfo.dwSize, sizeof(ICINFO)); |
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
105 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_CompressorType, icinfo.fccType); |
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
106 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_CompressorSubtype, icinfo.fccHandler); |
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
107 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_CompressorFlags, |
7231 | 108 icinfo.dwFlags, icinfo.dwVersion, icinfo.dwVersionICM); |
109 //printf("Compressor name: %s\n", icinfo.szName); | |
110 //printf("Compressor description: %s\n", icinfo.szDescription); | |
111 | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
112 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_Flags); |
7231 | 113 if (icinfo.dwFlags & VIDCF_QUALITY) |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
114 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_Quality); |
7231 | 115 if (icinfo.dwFlags & VIDCF_FASTTEMPORALD) |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
116 mp_msg(MSGT_WIN32,MSGL_INFO," fast-decompr"); |
7231 | 117 if (icinfo.dwFlags & VIDCF_QUALITYTIME) |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
118 mp_msg(MSGT_WIN32,MSGL_INFO," temp-quality"); |
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
119 mp_msg(MSGT_WIN32,MSGL_INFO,"\n"); |
7231 | 120 } |
121 #endif | |
122 | |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
123 if(compdatafile){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
124 if (!strncmp(compdatafile, "dialog", 6)){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
125 if (ICSendMessage(encoder_hic, ICM_CONFIGURE, -1, 0) != ICERR_OK){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
126 mp_msg(MSGT_WIN32,MSGL_ERR,"Compressor doesn't have a configure dialog!\n"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
127 return NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
128 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
129 if (ICSendMessage(encoder_hic, ICM_CONFIGURE, 0, 0) != ICERR_OK){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
130 mp_msg(MSGT_WIN32,MSGL_ERR,"Compressor configure dialog failed!\n"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
131 return NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
132 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
133 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
134 else { |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
135 if (stat(compdatafile, &st) < 0){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
136 mp_msg(MSGT_WIN32,MSGL_ERR,"Compressor data file not found!\n"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
137 return NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
138 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
139 fd = fopen(compdatafile, "rb"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
140 if (!fd){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
141 mp_msg(MSGT_WIN32,MSGL_ERR,"Cannot open Compressor data file!\n"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
142 return NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
143 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
144 drvdata = (char *) malloc(st.st_size); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
145 if (fread(drvdata, st.st_size, 1, fd) != 1) { |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
146 mp_msg(MSGT_WIN32,MSGL_ERR,"Cannot read Compressor data file!\n"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
147 fclose(fd); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
148 free(drvdata); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
149 return NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
150 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
151 fclose(fd); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
152 mp_msg(MSGT_WIN32,MSGL_ERR,"Compressor data %d bytes\n", st.st_size); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
153 if (!(temp_len = (unsigned int) ICSendMessage(encoder_hic, ICM_SETSTATE, (LPARAM) drvdata, (int) st.st_size))){ |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
154 mp_msg(MSGT_WIN32,MSGL_ERR,"ICSetState failed!\n"); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
155 free(drvdata); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
156 return NULL; |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
157 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
158 free(drvdata); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
159 mp_msg(MSGT_WIN32,MSGL_INFO,"ICSetState ret: %d\n", temp_len); |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
160 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
161 } |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
162 |
7231 | 163 temp_len = ICCompressGetFormatSize(encoder_hic, input_bih); |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
164 mp_msg(MSGT_WIN32,MSGL_INFO,"ICCompressGetFormatSize ret: %d\n", temp_len); |
7231 | 165 |
166 if (temp_len < sizeof(BITMAPINFOHEADER)) temp_len=sizeof(BITMAPINFOHEADER); | |
167 | |
168 output_bih = malloc(temp_len+4); | |
169 memset(output_bih,0,temp_len); | |
170 output_bih->biSize = temp_len; //sizeof(BITMAPINFOHEADER); | |
171 | |
172 return output_bih; | |
173 } | |
174 | |
175 static int vfw_start_encoder(BITMAPINFOHEADER *input_bih, BITMAPINFOHEADER *output_bih){ | |
176 HRESULT ret; | |
177 int temp_len=output_bih->biSize; | |
178 int i; | |
179 | |
180 ret = ICCompressGetFormat(encoder_hic, input_bih, output_bih); | |
181 if(ret < 0){ | |
182 unsigned char* temp=(unsigned char*)output_bih; | |
183 mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressGetFormat failed: Error %d (0x%X)\n", (int)ret, (int)ret); | |
184 for (i=0; i < temp_len; i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02x ", temp[i]); | |
185 return 0; | |
186 } | |
187 mp_msg(MSGT_WIN32,MSGL_V,"ICCompressGetFormat OK\n"); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26148
diff
changeset
|
188 |
7231 | 189 if (temp_len > sizeof(BITMAPINFOHEADER)) |
190 { | |
191 unsigned char* temp=(unsigned char*)output_bih; | |
192 mp_msg(MSGT_WIN32, MSGL_V, "Extra info in o_bih (%d bytes)!\n", | |
193 temp_len-sizeof(BITMAPINFOHEADER)); | |
194 for(i=sizeof(output_bih);i<temp_len;i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02X ",temp[i]); | |
195 } | |
196 | |
17969
843e0427b5b9
Change 'if(verbose)' to the more appropriate mp_msg_test.
diego
parents:
17906
diff
changeset
|
197 // if( mp_msg_test(MSGT_WIN32,MSGL_V) ) { |
7231 | 198 printf("Starting compression:\n"); |
199 printf(" Input format:\n"); | |
25262
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
200 printf(" biSize %ld\n", input_bih->biSize); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
201 printf(" biWidth %ld\n", input_bih->biWidth); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
202 printf(" biHeight %ld\n", input_bih->biHeight); |
7231 | 203 printf(" biPlanes %d\n", input_bih->biPlanes); |
204 printf(" biBitCount %d\n", input_bih->biBitCount); | |
25262
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
205 printf(" biCompression 0x%lx ('%.4s')\n", input_bih->biCompression, (char *)&input_bih->biCompression); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
206 printf(" biSizeImage %ld\n", input_bih->biSizeImage); |
7231 | 207 printf(" Output format:\n"); |
25262
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
208 printf(" biSize %ld\n", output_bih->biSize); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
209 printf(" biWidth %ld\n", output_bih->biWidth); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
210 printf(" biHeight %ld\n", output_bih->biHeight); |
7231 | 211 printf(" biPlanes %d\n", output_bih->biPlanes); |
212 printf(" biBitCount %d\n", output_bih->biBitCount); | |
25262
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
213 printf(" biCompression 0x%lx ('%.4s')\n", output_bih->biCompression, (char *)&output_bih->biCompression); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
214 printf(" biSizeImage %ld\n", output_bih->biSizeImage); |
7231 | 215 // } |
216 | |
217 output_bih->biWidth=input_bih->biWidth; | |
218 output_bih->biHeight=input_bih->biHeight; | |
219 | |
220 ret = ICCompressQuery(encoder_hic, input_bih, output_bih); | |
221 if(ret){ | |
222 mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressQuery failed: Error %d\n", (int)ret); | |
223 return 0; | |
224 } else | |
225 mp_msg(MSGT_WIN32,MSGL_V,"ICCompressQuery OK\n"); | |
226 | |
227 ret = ICCompressBegin(encoder_hic, input_bih, output_bih); | |
228 if(ret){ | |
229 mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressBegin failed: Error %d\n", (int)ret); | |
230 // return 0; | |
231 } else | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
232 mp_msg(MSGT_WIN32,MSGL_V,"ICCompressBegin OK\n"); |
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
233 mp_msg(MSGT_WIN32,MSGL_INFO," Output format after query/begin:\n"); |
25262
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
234 mp_msg(MSGT_WIN32,MSGL_INFO," biSize %ld\n", output_bih->biSize); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
235 mp_msg(MSGT_WIN32,MSGL_INFO," biWidth %ld\n", output_bih->biWidth); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
236 mp_msg(MSGT_WIN32,MSGL_INFO," biHeight %ld\n", output_bih->biHeight); |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
237 mp_msg(MSGT_WIN32,MSGL_INFO," biPlanes %d\n", output_bih->biPlanes); |
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
238 mp_msg(MSGT_WIN32,MSGL_INFO," biBitCount %d\n", output_bih->biBitCount); |
25262
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
239 mp_msg(MSGT_WIN32,MSGL_INFO," biCompression 0x%lx ('%.4s')\n", output_bih->biCompression, (char *)&output_bih->biCompression); |
f1922d2b1925
Use correct printf length modifiers, fixes the following warnings:
diego
parents:
24770
diff
changeset
|
240 mp_msg(MSGT_WIN32,MSGL_INFO," biSizeImage %ld\n", output_bih->biSizeImage); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
26148
diff
changeset
|
241 |
7231 | 242 encoder_buf_size=input_bih->biSizeImage; |
243 encoder_buf=malloc(encoder_buf_size); | |
244 encoder_frameno=0; | |
245 | |
246 mp_msg(MSGT_WIN32,MSGL_V,"VIDEO CODEC Init OK!!! ;-)\n"); | |
247 return 1; | |
248 } | |
249 | |
250 static int vfw_encode_frame(BITMAPINFOHEADER* biOutput,void* OutBuf, | |
251 BITMAPINFOHEADER* biInput,void* Image, | |
252 long* keyframe, int quality){ | |
253 HRESULT ret; | |
254 | |
255 //long VFWAPIV ICCompress( | |
256 // HIC hic,long dwFlags,LPBITMAPINFOHEADER lpbiOutput,void* lpOutputBuf, | |
257 // LPBITMAPINFOHEADER lpbiInput,void* lpImage,long* lpckid, | |
258 // long* lpdwFlags,long lFrameNum,long dwFrameSize,long dwQuality, | |
259 // LPBITMAPINFOHEADER lpbiInputPrev,void* lpImagePrev | |
260 //); | |
261 | |
262 // printf("vfw_encode_frame(%p,%p, %p,%p, %p,%d)\n",biOutput,OutBuf,biInput,Image,keyframe,quality); | |
263 | |
264 ret=ICCompress(encoder_hic, 0, | |
265 biOutput, OutBuf, | |
266 biInput, Image, | |
267 NULL, keyframe, encoder_frameno, 0, quality, | |
268 biInput, encoder_buf); | |
269 | |
26148
d3b951d9b4d3
Fix printf format string mismatch, eliminates the warning:
diego
parents:
26146
diff
changeset
|
270 // printf("ok. size=%ld\n",biOutput->biSizeImage); |
7231 | 271 |
272 memcpy(encoder_buf,Image,encoder_buf_size); | |
273 ++encoder_frameno; | |
274 | |
275 return (int)ret; | |
276 } | |
5550 | 277 #define mux_v (vf->priv->mux) |
278 #define vfw_bih (vf->priv->bih) | |
279 | |
280 static int config(struct vf_instance_s* vf, | |
281 int width, int height, int d_width, int d_height, | |
282 unsigned int flags, unsigned int outfmt){ | |
283 | |
284 vfw_bih->biWidth=width; | |
285 vfw_bih->biHeight=height; | |
286 vfw_bih->biSizeImage=width*height*((vfw_bih->biBitCount+7)/8); | |
12061 | 287 mux_v->aspect = (float)d_width/d_height; |
5551 | 288 |
289 if(!vfw_start_encoder(vfw_bih, mux_v->bih)) return 0; | |
290 | |
291 // mux_v->bih->biWidth=width; | |
292 // mux_v->bih->biHeight=height; | |
293 // mux_v->bih->biSizeImage=width*height*((mux_v->bih->biBitCount+7)/8); | |
5550 | 294 |
295 return 1; | |
296 } | |
297 | |
298 static int control(struct vf_instance_s* vf, int request, void* data){ | |
299 | |
300 return CONTROL_UNKNOWN; | |
301 } | |
302 | |
303 static int query_format(struct vf_instance_s* vf, unsigned int fmt){ | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
304 if(fmt==IMGFMT_BGR24) return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_FLIPPED; |
5550 | 305 return 0; |
306 } | |
307 | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17487
diff
changeset
|
308 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){ |
5550 | 309 long flags=0; |
310 int ret; | |
311 // flip_upside_down(vo_image_ptr,vo_image_ptr,3*vo_w,vo_h); // dirty hack | |
312 ret=vfw_encode_frame(mux_v->bih, mux_v->buffer, vfw_bih, mpi->planes[0], &flags, 10000); | |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
313 // if (ret != ICERR_OK) |
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
314 // return 0; |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17487
diff
changeset
|
315 muxer_write_chunk(mux_v,mux_v->bih->biSizeImage,flags, pts, pts); |
7368 | 316 return 1; |
5550 | 317 } |
318 | |
24770
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
319 static void uninit(struct vf_instance_s* vf) |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
320 { |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
321 HRESULT ret; |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
322 |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
323 if(encoder_hic){ |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
324 if(encoder_buf){ |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
325 ret=ICCompressEnd(encoder_hic); |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
326 if(ret) mp_msg(MSGT_WIN32, MSGL_WARN, "ICCompressEnd failed: %ld\n", ret); |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
327 free(encoder_buf); |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
328 encoder_buf=NULL; |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
329 } |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
330 ret=ICClose(encoder_hic); |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
331 if(ret) mp_msg(MSGT_WIN32, MSGL_WARN, "ICClose failed: %ld\n", ret); |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
332 encoder_hic=0; |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
333 if ((CoInitRes == S_OK) || (CoInitRes == S_FALSE)) CoUninitialize(); |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
334 } |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
335 } |
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
336 |
5550 | 337 //===========================================================================// |
338 | |
339 static int vf_open(vf_instance_t *vf, char* args){ | |
340 vf->config=config; | |
14878 | 341 vf->default_caps=VFCAP_CONSTANT; |
5550 | 342 vf->control=control; |
343 vf->query_format=query_format; | |
344 vf->put_image=put_image; | |
24770
6a8be4b73d07
Add Coinitialize function to vfw encoder and win32 loader.
compn
parents:
22799
diff
changeset
|
345 vf->uninit=uninit; |
5550 | 346 vf->priv=malloc(sizeof(struct vf_priv_s)); |
347 memset(vf->priv,0,sizeof(struct vf_priv_s)); | |
8585 | 348 vf->priv->mux=(muxer_stream_t*)args; |
5550 | 349 |
14549
acf3241be19b
Initialized BITMAPINFOHEADER to 0 to avoid problems, esp. windows has problems
reimar
parents:
12061
diff
changeset
|
350 vfw_bih=calloc(1, sizeof(BITMAPINFOHEADER)); |
5550 | 351 vfw_bih->biSize=sizeof(BITMAPINFOHEADER); |
352 vfw_bih->biWidth=0; // FIXME ? | |
353 vfw_bih->biHeight=0; | |
354 vfw_bih->biPlanes=1; | |
355 vfw_bih->biBitCount=24; | |
356 vfw_bih->biCompression=0; | |
357 // vfw_bih->biSizeImage=vo_w*vo_h*((vfw_bih->biBitCount+7)/8); | |
6083 | 358 |
359 if (!vfw_param_codec) | |
360 { | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17969
diff
changeset
|
361 mp_msg(MSGT_WIN32,MSGL_WARN, MSGTR_MPCODECS_NoVfwCodecSpecified); |
6083 | 362 return 0; |
363 } | |
5550 | 364 // mux_v->bih=vfw_open_encoder("divxc32.dll",vfw_bih,mmioFOURCC('D', 'I', 'V', '3')); |
6083 | 365 // mux_v->bih=vfw_open_encoder("AvidAVICodec.dll",vfw_bih, 0); |
22252
c5a591c4a372
Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents:
21660
diff
changeset
|
366 mux_v->bih = vfw_open_encoder(vfw_param_codec, vfw_param_compdata, vfw_bih, 0); |
5550 | 367 if(!mux_v->bih) return 0; |
368 | |
369 return 1; | |
370 } | |
371 | |
372 vf_info_t ve_info_vfw = { | |
373 "Win32/VfW encoders", | |
374 "vfw", | |
375 "A'rpi", | |
376 "for internal use by mencoder", | |
377 vf_open | |
378 }; | |
379 | |
380 //===========================================================================// |