annotate libmpcodecs/ve_vfw.c @ 25357:b265c001e64a

Add new audio filter for encoding multi-channel audio into ac3 at runtime. And if set first parameter of this filter to 1, it will do ac3 passthrough like hwac3 did.
author ulion
date Thu, 13 Dec 2007 12:38:17 +0000
parents f1922d2b1925
children 20a126aaa756
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
1 #include <stdio.h>
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
2 #include <stdlib.h>
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
3 #include <string.h>
7238
6f44ed6c4568 FreeBSD fix
nexus
parents: 7231
diff changeset
4 #include <unistd.h>
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8123
diff changeset
5 #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
6 #include <sys/stat.h>
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
7
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15212
diff changeset
8 #include "config.h"
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
9
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15212
diff changeset
10 #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
11 #include "help_mp.h"
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
12
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
13 #include "codec-cfg.h"
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 22577
diff changeset
14 //#include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
15 //#include "libmpdemux/demuxer.h"
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
16 //#include "libmpdemux/stheader.h"
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
17
22577
a033e5519802 Include loader/ prefix in #include path everywhere.
diego
parents: 22252
diff changeset
18 #include "loader/loader.h"
a033e5519802 Include loader/ prefix in #include path everywhere.
diego
parents: 22252
diff changeset
19 //#include "loader/wine/mmreg.h"
a033e5519802 Include loader/ prefix in #include path everywhere.
diego
parents: 22252
diff changeset
20 #include "loader/wine/vfw.h"
a033e5519802 Include loader/ prefix in #include path everywhere.
diego
parents: 22252
diff changeset
21 #include "loader/wine/avifmt.h"
24770
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
22 #include "loader/wine/winerror.h"
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
23 #include "loader/wine/objbase.h"
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
24
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
25 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
26 #include "mp_image.h"
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
27 #include "vf.h"
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
28
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 22577
diff changeset
29 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
30 #include "libmpdemux/muxer.h"
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8123
diff changeset
31
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
32 //===========================================================================//
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
33
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
34 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
35 static char *vfw_param_compdata = NULL;
24770
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
36 static HRESULT CoInitRes = -1;
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
37
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
38 #include "m_option.h"
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
39
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
40 m_option_t vfwopts_conf[]={
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
41 {"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
42 {"compdata", &vfw_param_compdata, CONF_TYPE_STRING, 0, 0, 0, NULL},
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
43 {NULL, NULL, 0, 0, 0, 0, NULL}
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
44 };
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
45
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
46 struct vf_priv_s {
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8123
diff changeset
47 muxer_stream_t* mux;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
48 BITMAPINFOHEADER* bih;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
49 };
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
50
7557
f296ff05bcd0 warning fixes
arpi
parents: 7390
diff changeset
51 static HIC encoder_hic;
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
52 static void* encoder_buf=NULL;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
53 static int encoder_buf_size=0;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
54 static int encoder_frameno=0;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
55
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
56 //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
57 static BITMAPINFOHEADER* vfw_open_encoder(char *dll_name, char *compdatafile, BITMAPINFOHEADER *input_bih,unsigned int out_fourcc)
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
58 {
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
59 HRESULT ret;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
60 BITMAPINFOHEADER* output_bih=NULL;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
61 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
62 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
63 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
64 struct stat st;
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
65
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
66 //sh_video = malloc(sizeof(sh_video_t));
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
67
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
68 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
69 CoInitRes = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
70 // memset(&sh_video->o_bih, 0, sizeof(BITMAPINFOHEADER));
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
71 // output_bih->biSize = sizeof(BITMAPINFOHEADER);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
72
7390
2357ee501582 fixed to comply with new loader
alex
parents: 7368
diff changeset
73 // encoder_hic = ICOpen( 0x63646976, out_fourcc, ICMODE_COMPRESS);
7557
f296ff05bcd0 warning fixes
arpi
parents: 7390
diff changeset
74 encoder_hic = ICOpen( (long) dll_name, out_fourcc, ICMODE_COMPRESS);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
75 if(!encoder_hic){
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
76 mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n");
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
77 return NULL;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
78 }
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
79 mp_msg(MSGT_WIN32,MSGL_INFO,"HIC: %x\n", encoder_hic);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
80
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
81 #if 1
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
82 {
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
83 ICINFO icinfo;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
84
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
85 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
86 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
87 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
88 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
89 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_CompressorFlags,
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
90 icinfo.dwFlags, icinfo.dwVersion, icinfo.dwVersionICM);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
91 //printf("Compressor name: %s\n", icinfo.szName);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
92 //printf("Compressor description: %s\n", icinfo.szDescription);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
93
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
94 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_Flags);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
95 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
96 mp_msg(MSGT_WIN32,MSGL_INFO,MSGTR_MPCODECS_Quality);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
97 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
98 mp_msg(MSGT_WIN32,MSGL_INFO," fast-decompr");
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
99 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
100 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
101 mp_msg(MSGT_WIN32,MSGL_INFO,"\n");
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
102 }
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
103 #endif
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
104
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
105 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
106 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
107 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
108 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
109 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
110 }
c5a591c4a372 Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents: 21660
diff changeset
111 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
112 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
113 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
114 }
c5a591c4a372 Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents: 21660
diff changeset
115 }
c5a591c4a372 Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents: 21660
diff changeset
116 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
117 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
118 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
119 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
120 }
c5a591c4a372 Controllable quality setting of VFW enconding, through the dumped state of the dialog box. Patch by Gianluigi Tiesi
alex
parents: 21660
diff changeset
121 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
122 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
123 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
124 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
125 }
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 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
127 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
128 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
129 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
130 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
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 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
134 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
135 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
136 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
137 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
138 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
139 }
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 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
141 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
142 }
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
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
145 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
146 mp_msg(MSGT_WIN32,MSGL_INFO,"ICCompressGetFormatSize ret: %d\n", temp_len);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
147
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
148 if (temp_len < sizeof(BITMAPINFOHEADER)) temp_len=sizeof(BITMAPINFOHEADER);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
149
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
150 output_bih = malloc(temp_len+4);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
151 memset(output_bih,0,temp_len);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
152 output_bih->biSize = temp_len; //sizeof(BITMAPINFOHEADER);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
153
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
154 return output_bih;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
155 }
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
156
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
157 static int vfw_start_encoder(BITMAPINFOHEADER *input_bih, BITMAPINFOHEADER *output_bih){
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
158 HRESULT ret;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
159 int temp_len=output_bih->biSize;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
160 int i;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
161
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
162 ret = ICCompressGetFormat(encoder_hic, input_bih, output_bih);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
163 if(ret < 0){
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
164 unsigned char* temp=(unsigned char*)output_bih;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
165 mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressGetFormat failed: Error %d (0x%X)\n", (int)ret, (int)ret);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
166 for (i=0; i < temp_len; i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02x ", temp[i]);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
167 return 0;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
168 }
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
169 mp_msg(MSGT_WIN32,MSGL_V,"ICCompressGetFormat OK\n");
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
170
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
171 if (temp_len > sizeof(BITMAPINFOHEADER))
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
172 {
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
173 unsigned char* temp=(unsigned char*)output_bih;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
174 mp_msg(MSGT_WIN32, MSGL_V, "Extra info in o_bih (%d bytes)!\n",
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
175 temp_len-sizeof(BITMAPINFOHEADER));
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
176 for(i=sizeof(output_bih);i<temp_len;i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02X ",temp[i]);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
177 }
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
178
17969
843e0427b5b9 Change 'if(verbose)' to the more appropriate mp_msg_test.
diego
parents: 17906
diff changeset
179 // if( mp_msg_test(MSGT_WIN32,MSGL_V) ) {
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
180 printf("Starting compression:\n");
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
181 printf(" Input format:\n");
25262
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
182 printf(" biSize %ld\n", input_bih->biSize);
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
183 printf(" biWidth %ld\n", input_bih->biWidth);
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
184 printf(" biHeight %ld\n", input_bih->biHeight);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
185 printf(" biPlanes %d\n", input_bih->biPlanes);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
186 printf(" biBitCount %d\n", input_bih->biBitCount);
25262
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
187 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
188 printf(" biSizeImage %ld\n", input_bih->biSizeImage);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
189 printf(" Output format:\n");
25262
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
190 printf(" biSize %ld\n", output_bih->biSize);
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
191 printf(" biWidth %ld\n", output_bih->biWidth);
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
192 printf(" biHeight %ld\n", output_bih->biHeight);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
193 printf(" biPlanes %d\n", output_bih->biPlanes);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
194 printf(" biBitCount %d\n", output_bih->biBitCount);
25262
f1922d2b1925 Use correct printf length modifiers, fixes the following warnings:
diego
parents: 24770
diff changeset
195 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
196 printf(" biSizeImage %ld\n", output_bih->biSizeImage);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
197 // }
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
198
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
199 output_bih->biWidth=input_bih->biWidth;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
200 output_bih->biHeight=input_bih->biHeight;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
201
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
202 ret = ICCompressQuery(encoder_hic, input_bih, output_bih);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
203 if(ret){
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
204 mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressQuery failed: Error %d\n", (int)ret);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
205 return 0;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
206 } else
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
207 mp_msg(MSGT_WIN32,MSGL_V,"ICCompressQuery OK\n");
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
208
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
209 ret = ICCompressBegin(encoder_hic, input_bih, output_bih);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
210 if(ret){
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
211 mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressBegin failed: Error %d\n", (int)ret);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
212 // return 0;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
213 } 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
214 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
215 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
216 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
217 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
218 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
219 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
220 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
221 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
222 mp_msg(MSGT_WIN32,MSGL_INFO," biSizeImage %ld\n", output_bih->biSizeImage);
7231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
223
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
224 encoder_buf_size=input_bih->biSizeImage;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
225 encoder_buf=malloc(encoder_buf_size);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
226 encoder_frameno=0;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
227
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
228 mp_msg(MSGT_WIN32,MSGL_V,"VIDEO CODEC Init OK!!! ;-)\n");
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
229 return 1;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
230 }
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
231
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
232 static int vfw_encode_frame(BITMAPINFOHEADER* biOutput,void* OutBuf,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
233 BITMAPINFOHEADER* biInput,void* Image,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
234 long* keyframe, int quality){
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
235 HRESULT ret;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
236
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
237 //long VFWAPIV ICCompress(
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
238 // HIC hic,long dwFlags,LPBITMAPINFOHEADER lpbiOutput,void* lpOutputBuf,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
239 // LPBITMAPINFOHEADER lpbiInput,void* lpImage,long* lpckid,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
240 // long* lpdwFlags,long lFrameNum,long dwFrameSize,long dwQuality,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
241 // LPBITMAPINFOHEADER lpbiInputPrev,void* lpImagePrev
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
242 //);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
243
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
244 // printf("vfw_encode_frame(%p,%p, %p,%p, %p,%d)\n",biOutput,OutBuf,biInput,Image,keyframe,quality);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
245
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
246 ret=ICCompress(encoder_hic, 0,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
247 biOutput, OutBuf,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
248 biInput, Image,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
249 NULL, keyframe, encoder_frameno, 0, quality,
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
250 biInput, encoder_buf);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
251
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
252 // printf("ok. size=%d\n",biOutput->biSizeImage);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
253
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
254 memcpy(encoder_buf,Image,encoder_buf_size);
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
255 ++encoder_frameno;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
256
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
257 return (int)ret;
1e84415320d8 merged with dll_init.c
alex
parents: 7127
diff changeset
258 }
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
259 #define mux_v (vf->priv->mux)
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
260 #define vfw_bih (vf->priv->bih)
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
261
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
262 static int config(struct vf_instance_s* vf,
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
263 int width, int height, int d_width, int d_height,
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
264 unsigned int flags, unsigned int outfmt){
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
265
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
266 vfw_bih->biWidth=width;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
267 vfw_bih->biHeight=height;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
268 vfw_bih->biSizeImage=width*height*((vfw_bih->biBitCount+7)/8);
12061
656a1b45b309 Use aspect from encoder for AVI vprp header
ranma
parents: 10594
diff changeset
269 mux_v->aspect = (float)d_width/d_height;
5551
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
270
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
271 if(!vfw_start_encoder(vfw_bih, mux_v->bih)) return 0;
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
272
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
273 // mux_v->bih->biWidth=width;
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
274 // mux_v->bih->biHeight=height;
73978162b6a1 soem fixes
arpi
parents: 5550
diff changeset
275 // mux_v->bih->biSizeImage=width*height*((mux_v->bih->biBitCount+7)/8);
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
276
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
277 return 1;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
278 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
279
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
280 static int control(struct vf_instance_s* vf, int request, void* data){
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
281
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
282 return CONTROL_UNKNOWN;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
283 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
284
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
285 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
286 if(fmt==IMGFMT_BGR24) return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_FLIPPED;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
287 return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
288 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
289
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17487
diff changeset
290 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
291 long flags=0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
292 int ret;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
293 // flip_upside_down(vo_image_ptr,vo_image_ptr,3*vo_w,vo_h); // dirty hack
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
294 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
295 // 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
296 // 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
297 muxer_write_chunk(mux_v,mux_v->bih->biSizeImage,flags, pts, pts);
7368
a894e99c1e51 changing return type of put_image void->int
arpi
parents: 7238
diff changeset
298 return 1;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
299 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
300
24770
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
301 static void uninit(struct vf_instance_s* vf)
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
302 {
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
303 HRESULT ret;
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
304
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
305 if(encoder_hic){
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
306 if(encoder_buf){
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
307 ret=ICCompressEnd(encoder_hic);
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
308 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
309 free(encoder_buf);
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
310 encoder_buf=NULL;
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
311 }
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
312 ret=ICClose(encoder_hic);
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
313 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
314 encoder_hic=0;
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
315 if ((CoInitRes == S_OK) || (CoInitRes == S_FALSE)) CoUninitialize();
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
316 }
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
317 }
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
318
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
319 //===========================================================================//
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
320
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
321 static int vf_open(vf_instance_t *vf, char* args){
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
322 vf->config=config;
14878
5723c4b2a2ea fixes for encoding of multiple files
henry
parents: 14549
diff changeset
323 vf->default_caps=VFCAP_CONSTANT;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
324 vf->control=control;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
325 vf->query_format=query_format;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
326 vf->put_image=put_image;
24770
6a8be4b73d07 Add Coinitialize function to vfw encoder and win32 loader.
compn
parents: 22799
diff changeset
327 vf->uninit=uninit;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
328 vf->priv=malloc(sizeof(struct vf_priv_s));
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
329 memset(vf->priv,0,sizeof(struct vf_priv_s));
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8123
diff changeset
330 vf->priv->mux=(muxer_stream_t*)args;
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
331
14549
acf3241be19b Initialized BITMAPINFOHEADER to 0 to avoid problems, esp. windows has problems
reimar
parents: 12061
diff changeset
332 vfw_bih=calloc(1, sizeof(BITMAPINFOHEADER));
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
333 vfw_bih->biSize=sizeof(BITMAPINFOHEADER);
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
334 vfw_bih->biWidth=0; // FIXME ?
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
335 vfw_bih->biHeight=0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
336 vfw_bih->biPlanes=1;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
337 vfw_bih->biBitCount=24;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
338 vfw_bih->biCompression=0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
339 // vfw_bih->biSizeImage=vo_w*vo_h*((vfw_bih->biBitCount+7)/8);
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
340
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
341 if (!vfw_param_codec)
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
342 {
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
343 mp_msg(MSGT_WIN32,MSGL_WARN, MSGTR_MPCODECS_NoVfwCodecSpecified);
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
344 return 0;
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
345 }
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
346 // mux_v->bih=vfw_open_encoder("divxc32.dll",vfw_bih,mmioFOURCC('D', 'I', 'V', '3'));
6083
6aa4fc282fc7 added support for codec selection
alex
parents: 5607
diff changeset
347 // 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
348 mux_v->bih = vfw_open_encoder(vfw_param_codec, vfw_param_compdata, vfw_bih, 0);
5550
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
349 if(!mux_v->bih) return 0;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
350
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
351 return 1;
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
352 }
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
353
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
354 vf_info_t ve_info_vfw = {
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
355 "Win32/VfW encoders",
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
356 "vfw",
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
357 "A'rpi",
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
358 "for internal use by mencoder",
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
359 vf_open
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
360 };
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
361
7d1dfb59c6c0 encoders
arpi
parents:
diff changeset
362 //===========================================================================//