annotate dll_init.c @ 3127:59ac428ae68d

Disable problematic ffmpeg.so support by default and remove die on 2.2.x and older kernel, replacing it with more in depth info. (Kernel SSE check will disable SSE, if needed!)
author atmos4
date Mon, 26 Nov 2001 00:46:44 +0000
parents 283eab7c4c8e
children ae0e2736a5d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2775
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2714
diff changeset
1
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2714
diff changeset
2 #include "config.h"
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
3
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
4 #include <stdio.h>
2775
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2714
diff changeset
5 #ifdef HAVE_MALLOC_H
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2714
diff changeset
6 #include <malloc.h>
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2714
diff changeset
7 #endif
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
8 #include <stdlib.h>
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1407
diff changeset
9 #include <unistd.h>
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
10
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
11 #include "mp_msg.h"
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1653
diff changeset
12 #include "help_mp.h"
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
13
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
14 #include "stream.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
15 #include "demuxer.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
16
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
17 #include "loader.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
18 //#include "wine/mmreg.h"
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 1297
diff changeset
19 #include "wine/vfw.h"
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
20 #include "wine/avifmt.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
21
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
22 #include "codec-cfg.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
23 #include "stheader.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
24
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
25 #include "dll_init.h"
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
26
2897
283eab7c4c8e Added proper #include's for libvo2
mswitch
parents: 2885
diff changeset
27 #ifdef USE_LIBVO2
283eab7c4c8e Added proper #include's for libvo2
mswitch
parents: 2885
diff changeset
28 #include "libvo2/img_format.h"
283eab7c4c8e Added proper #include's for libvo2
mswitch
parents: 2885
diff changeset
29 #else
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
30 #include "libvo/img_format.h"
2897
283eab7c4c8e Added proper #include's for libvo2
mswitch
parents: 2885
diff changeset
31 #endif
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
32 #include "linux/shmem.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 489
diff changeset
33
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
34 extern int divx_quality;
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
35
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 // ACM audio and VfW video codecs initialization
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 // based on the avifile library [http://divx.euro.ru]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
39 int init_acm_audio_codec(sh_audio_t *sh_audio){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 HRESULT ret;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 414
diff changeset
41 WAVEFORMATEX *in_fmt=sh_audio->wf;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 unsigned long srcsize=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
44 mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (ACM) AUDIO Codec init =======\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
46 sh_audio->srcstream=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
48 sh_audio->o_wf.nChannels=in_fmt->nChannels;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
49 sh_audio->o_wf.nSamplesPerSec=in_fmt->nSamplesPerSec;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
50 sh_audio->o_wf.nAvgBytesPerSec=2*sh_audio->o_wf.nSamplesPerSec*sh_audio->o_wf.nChannels;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
51 sh_audio->o_wf.wFormatTag=WAVE_FORMAT_PCM;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
52 sh_audio->o_wf.nBlockAlign=2*in_fmt->nChannels;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
53 sh_audio->o_wf.wBitsPerSample=16;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
54 sh_audio->o_wf.cbSize=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
56 win32_codec_name = sh_audio->codec->dll;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
57 ret=acmStreamOpen(&sh_audio->srcstream,(HACMDRIVER)NULL,
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
58 in_fmt,&sh_audio->o_wf,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 NULL,0,0,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 if(ret){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 if(ret==ACMERR_NOTPOSSIBLE)
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
62 mp_msg(MSGT_WIN32,MSGL_ERR,"ACM_Decoder: Unappropriate audio format\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 else
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1653
diff changeset
64 mp_msg(MSGT_WIN32,MSGL_ERR,"ACM_Decoder: acmStreamOpen error: %d", (int)ret);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
65 sh_audio->srcstream=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
68 mp_msg(MSGT_WIN32,MSGL_V,"Audio codec opened OK! ;-)\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
70 acmStreamSize(sh_audio->srcstream, in_fmt->nBlockAlign, &srcsize, ACM_STREAMSIZEF_SOURCE);
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
71 //if(verbose) printf("Audio ACM output buffer min. size: %ld (reported by codec)\n",srcsize);
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 714
diff changeset
72 srcsize*=2;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
73 //if(srcsize<MAX_OUTBURST) srcsize=MAX_OUTBURST;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
74 if(!srcsize){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
75 mp_msg(MSGT_WIN32,MSGL_WARN,"Warning! ACM codec reports srcsize=0\n");
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
76 srcsize=16384;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
77 }
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
78 // limit srcsize to 4-16kb
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
79 //while(srcsize && srcsize<4096) srcsize*=2;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
80 //while(srcsize>16384) srcsize/=2;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
81 sh_audio->audio_out_minsize=srcsize; // audio output min. size
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
82 mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM output buffer min. size: %ld\n",srcsize);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 714
diff changeset
84 acmStreamSize(sh_audio->srcstream, srcsize, &srcsize, ACM_STREAMSIZEF_DESTINATION);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
85 sh_audio->audio_in_minsize=srcsize; // audio input min. size
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
86 mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM input buffer min. size: %ld\n",srcsize);
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
87
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
88 if(srcsize<in_fmt->nBlockAlign) srcsize=in_fmt->nBlockAlign;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
90 sh_audio->a_in_buffer_size=2*sh_audio->audio_in_minsize;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
91 sh_audio->a_in_buffer=malloc(sh_audio->a_in_buffer_size);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
92 sh_audio->a_in_buffer_len=0;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
93
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
97 int acm_decode_audio(sh_audio_t *sh_audio, void* a_buffer,int minlen,int maxlen){
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
98 ACMSTREAMHEADER ash;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
99 HRESULT hr;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
100 DWORD srcsize=0;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
101 DWORD len=minlen;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
102 acmStreamSize(sh_audio->srcstream,len , &srcsize, ACM_STREAMSIZEF_DESTINATION);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
103 mp_msg(MSGT_WIN32,MSGL_DBG3,"acm says: srcsize=%ld (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,len);
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
104
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
105 if(srcsize<sh_audio->wf->nBlockAlign){
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
106 srcsize=sh_audio->wf->nBlockAlign;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
107 acmStreamSize(sh_audio->srcstream, srcsize, &len, ACM_STREAMSIZEF_SOURCE);
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
108 if(len>maxlen) len=maxlen;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
109 }
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
110
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
111 // if(srcsize==0) srcsize=((WAVEFORMATEX *)&sh_audio->o_wf_ext)->nBlockAlign;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
112 if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!!
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
113 if(sh_audio->a_in_buffer_len<srcsize){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
114 sh_audio->a_in_buffer_len+=
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
115 demux_read_data(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len],
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
116 srcsize-sh_audio->a_in_buffer_len);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
117 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
118 mp_msg(MSGT_WIN32,MSGL_DBG3,"acm convert %d -> %d bytes\n",sh_audio->a_in_buffer_len,len);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
119 memset(&ash, 0, sizeof(ash));
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
120 ash.cbStruct=sizeof(ash);
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
121 ash.fdwStatus=0;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
122 ash.dwUser=0;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
123 ash.pbSrc=sh_audio->a_in_buffer;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
124 ash.cbSrcLength=sh_audio->a_in_buffer_len;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
125 ash.pbDst=a_buffer;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
126 ash.cbDstLength=len;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
127 hr=acmStreamPrepareHeader(sh_audio->srcstream,&ash,0);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
128 if(hr){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
129 mp_msg(MSGT_WIN32,MSGL_V,"ACM_Decoder: acmStreamPrepareHeader error %d\n",(int)hr);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
130 return -1;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
131 }
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
132 hr=acmStreamConvert(sh_audio->srcstream,&ash,0);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
133 if(hr){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
134 mp_msg(MSGT_WIN32,MSGL_DBG2,"ACM_Decoder: acmStreamConvert error %d\n",(int)hr);
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
135
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
136 // return -1;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
137 }
1407
2e23a033d6f8 acm convert message verbose1->2
arpi
parents: 1309
diff changeset
138 if(verbose>1)
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
139 mp_msg(MSGT_WIN32,MSGL_DBG2,"acm converted %d -> %d\n",ash.cbSrcLengthUsed,ash.cbDstLengthUsed);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
140 if(ash.cbSrcLengthUsed>=sh_audio->a_in_buffer_len){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
141 sh_audio->a_in_buffer_len=0;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
142 } else {
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
143 sh_audio->a_in_buffer_len-=ash.cbSrcLengthUsed;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
144 memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[ash.cbSrcLengthUsed],sh_audio->a_in_buffer_len);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
145 }
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
146 len=ash.cbDstLengthUsed;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
147 hr=acmStreamUnprepareHeader(sh_audio->srcstream,&ash,0);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
148 if(hr){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
149 mp_msg(MSGT_WIN32,MSGL_V,"ACM_Decoder: acmStreamUnprepareHeader error %d\n",(int)hr);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
150 }
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
151 return len;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
152 }
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
153
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
154 int init_vfw_video_codec(sh_video_t *sh_video,int ex){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 HRESULT ret;
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
156 int yuv=0;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
157 unsigned int outfmt=sh_video->codec->outfmt[sh_video->outfmtidx];
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
158 char *temp;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
159 int temp_len;
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
160 int i;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
162 mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (VFW) VIDEO Codec init =======\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
164 memset(&sh_video->o_bih, 0, sizeof(BITMAPINFOHEADER));
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
165 sh_video->o_bih.biSize = sizeof(BITMAPINFOHEADER);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
167 win32_codec_name = sh_video->codec->dll;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 714
diff changeset
168 // sh_video->hic = ICOpen( 0x63646976, sh_video->bih->biCompression, ICMODE_FASTDECOMPRESS);
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 714
diff changeset
169 sh_video->hic = ICOpen( 0x63646976, sh_video->bih->biCompression, ICMODE_DECOMPRESS);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
170 if(!sh_video->hic){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
171 mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
175 // sh_video->bih->biBitCount=32;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
176
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
177 temp_len = ICDecompressGetFormatSize(sh_video->hic, sh_video->bih);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
178
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
179 if (temp_len < sh_video->o_bih.biSize)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
180 temp_len = sh_video->o_bih.biSize;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
181
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
182 temp = malloc(temp_len);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
183 printf("ICDecompressGetFormatSize ret: %d\n", temp_len);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
184
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
185 #if 0
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
186 {
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
187 ICINFO icinfo;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
188 ret = ICGetInfo(sh_video->hic, &icinfo, sizeof(ICINFO));
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
189 printf("%d - %d - %d\n", ret, icinfo.dwSize, sizeof(ICINFO));
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
190 printf("Compressor type: %.4x\n", icinfo.fccType);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
191 printf("Compressor subtype: %.4x\n", icinfo.fccHandler);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
192 printf("Compressor flags: %lu, version %lu, ICM version: %lu\n",
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
193 icinfo.dwFlags, icinfo.dwVersion, icinfo.dwVersionICM);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
194 printf("Compressor name: %s\n", icinfo.szName);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
195 printf("Compressor description: %s\n", icinfo.szDescription);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
196
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
197 printf("Flags:");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
198 if (icinfo.dwFlags & VIDCF_QUALITY)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
199 printf(" quality");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
200 if (icinfo.dwFlags & VIDCF_FASTTEMPORALD)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
201 printf(" fast-decompr");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
202 if (icinfo.dwFlags & VIDCF_QUALITYTIME)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
203 printf(" temp-quality");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
204 printf("\n");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
205 }
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
206 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
208 // Note: DivX.DLL overwrites 4 bytes _AFTER_ the o_bih header, so it corrupts
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
209 // the sh_video struct content. We call it with an 1024-byte temp space and
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
210 // then copy out the data we need:
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
211 memset(temp,0x77,temp_len);
2885
7459ddb8b539 for pegasus mjpeg
arpi
parents: 2876
diff changeset
212 // memcpy(temp,sh_video->bih,sizeof(BITMAPINFOHEADER));
7459ddb8b539 for pegasus mjpeg
arpi
parents: 2876
diff changeset
213 // sh_video->o_bih.biSize = temp_len;
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
214
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
215 ret = ICDecompressGetFormat(sh_video->hic, sh_video->bih, temp);
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
216 if(ret < 0){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
217 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressGetFormat failed: Error %d\n", (int)ret);
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
218 for (i=0; i < temp_len; i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02x ", temp[i]);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
221 mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressGetFormat OK\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
223 memcpy(&sh_video->o_bih,temp,sizeof(sh_video->o_bih));
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
224
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
225 if (temp_len > sizeof(sh_video->o_bih))
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
226 {
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
227 mp_msg(MSGT_WIN32, MSGL_V, "Extra info in o_bih (%d bytes)!\n",
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
228 temp_len-sizeof(sh_video->o_bih));
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
229 for(i=sizeof(sh_video->o_bih);i<temp_len;i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02X ",temp[i]);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
230 }
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
231 free(temp);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 // printf("ICM_DECOMPRESS_QUERY=0x%X",ICM_DECOMPRESS_QUERY);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
234 // sh_video->o_bih.biWidth=sh_video->bih.biWidth;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
235 // sh_video->o_bih.biCompression = 0x32315659; // mmioFOURCC('U','Y','V','Y');
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
236 // ret=ICDecompressGetFormatSize(sh_video->hic,&sh_video->o_bih);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
237 // sh_video->o_bih.biCompression = 3; //0x32315659;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
238 // sh_video->o_bih.biCompression = mmioFOURCC('U','Y','V','Y');
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
239 // sh_video->o_bih.biCompression = mmioFOURCC('U','Y','V','Y');
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
240 // sh_video->o_bih.biCompression = mmioFOURCC('Y','U','Y','2');
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
241 // sh_video->o_bih.biPlanes=3;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
242 // sh_video->o_bih.biBitCount=16;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
244 #if 0
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
245 // workaround for pegasus MJPEG:
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
246 if(!sh_video->o_bih.biWidth) sh_video->o_bih.biWidth=sh_video->bih->biWidth;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
247 if(!sh_video->o_bih.biHeight) sh_video->o_bih.biHeight=sh_video->bih->biHeight;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
248 if(!sh_video->o_bih.biPlanes) sh_video->o_bih.biPlanes=sh_video->bih->biPlanes;
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
249 #endif
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
250
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
251 switch (outfmt) {
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
252
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
253 /* planar format */
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
254 case IMGFMT_YV12:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
255 case IMGFMT_I420:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
256 case IMGFMT_IYUV:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
257 sh_video->o_bih.biBitCount=12;
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
258 yuv=1;
467
e53a9edbee98 fixed yuvhack
arpi_esp
parents: 432
diff changeset
259 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
261 /* packed format */
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
262 case IMGFMT_YUY2:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
263 case IMGFMT_UYVY:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
264 case IMGFMT_YVYU:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
265 sh_video->o_bih.biBitCount=16;
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
266 yuv=1;
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
267 break;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
268
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
269 /* rgb/bgr format */
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
270 case IMGFMT_RGB8:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
271 case IMGFMT_BGR8:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
272 sh_video->o_bih.biBitCount=8;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
273 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
275 case IMGFMT_RGB15:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
276 case IMGFMT_RGB16:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
277 case IMGFMT_BGR15:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
278 case IMGFMT_BGR16:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
279 sh_video->o_bih.biBitCount=16;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
280 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
281
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
282 case IMGFMT_RGB24:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
283 case IMGFMT_BGR24:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
284 sh_video->o_bih.biBitCount=24;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
285 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
286
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
287 case IMGFMT_RGB32:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
288 case IMGFMT_BGR32:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
289 sh_video->o_bih.biBitCount=32;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
290 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
292 default:
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
293 mp_msg(MSGT_WIN32,MSGL_ERR,"unsupported image format: 0x%x\n", outfmt);
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
294 return 0;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
295 }
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
296
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
297 sh_video->o_bih.biSizeImage = sh_video->o_bih.biWidth * sh_video->o_bih.biHeight * (sh_video->o_bih.biBitCount/8);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
298
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
299 if(!(sh_video->codec->outflags[sh_video->outfmtidx]&CODECS_FLAG_FLIP)) {
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 414
diff changeset
300 sh_video->o_bih.biHeight=-sh_video->bih->biHeight; // flip image!
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
301 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
302
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
303 if(yuv && !(sh_video->codec->outflags[sh_video->outfmtidx] & CODECS_FLAG_YUVHACK))
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
304 sh_video->o_bih.biCompression = outfmt;
759
34edf774ef73 HuffYUV YUY2->RGB fixed
arpi_esp
parents: 758
diff changeset
305 else
34edf774ef73 HuffYUV YUY2->RGB fixed
arpi_esp
parents: 758
diff changeset
306 sh_video->o_bih.biCompression = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
307
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 if(verbose) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 printf("Starting decompression, format:\n");
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
310 printf(" biSize %ld\n", sh_video->bih->biSize);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
311 printf(" biWidth %ld\n", sh_video->bih->biWidth);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
312 printf(" biHeight %ld\n", sh_video->bih->biHeight);
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 414
diff changeset
313 printf(" biPlanes %d\n", sh_video->bih->biPlanes);
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 414
diff changeset
314 printf(" biBitCount %d\n", sh_video->bih->biBitCount);
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
315 printf(" biCompression 0x%lx ('%.4s')\n", sh_video->bih->biCompression, (char *)&sh_video->bih->biCompression);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
316 printf(" biSizeImage %ld\n", sh_video->bih->biSizeImage);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 printf("Dest fmt:\n");
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
318 printf(" biSize %ld\n", sh_video->o_bih.biSize);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
319 printf(" biWidth %ld\n", sh_video->o_bih.biWidth);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
320 printf(" biHeight %ld\n", sh_video->o_bih.biHeight);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
321 printf(" biPlanes %d\n", sh_video->o_bih.biPlanes);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
322 printf(" biBitCount %d\n", sh_video->o_bih.biBitCount);
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
323 printf(" biCompression 0x%lx ('%.4s')\n", sh_video->o_bih.biCompression, (char *)&sh_video->o_bih.biCompression);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
324 printf(" biSizeImage %ld\n", sh_video->o_bih.biSizeImage);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326
1297
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
327 ret = ex ?
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
328 ICDecompressQueryEx(sh_video->hic, sh_video->bih, &sh_video->o_bih) :
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
329 ICDecompressQuery(sh_video->hic, sh_video->bih, &sh_video->o_bih);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 if(ret){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
331 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressQuery failed: Error %d\n", (int)ret);
2714
3615abd17375 ignoring decompressquery error
arpi
parents: 2679
diff changeset
332 // return 0;
3615abd17375 ignoring decompressquery error
arpi
parents: 2679
diff changeset
333 } else
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
334 mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressQuery OK\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335
1297
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
336 ret = ex ?
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
337 ICDecompressBeginEx(sh_video->hic, sh_video->bih, &sh_video->o_bih) :
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
338 ICDecompressBegin(sh_video->hic, sh_video->bih, &sh_video->o_bih);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 if(ret){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
340 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressBegin failed: Error %d\n", (int)ret);
2876
12a0be665dfd m3jpg support - ignore error
arpi
parents: 2775
diff changeset
341 // return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
344 sh_video->our_out_buffer = (char*)memalign(64,sh_video->o_bih.biSizeImage);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
345 if(!sh_video->our_out_buffer){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1653
diff changeset
346 mp_msg(MSGT_WIN32,MSGL_ERR,MSGTR_NoMemForDecodedImage, sh_video->o_bih.biSizeImage);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
349
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
350 if(yuv && sh_video->codec->outflags[sh_video->outfmtidx] & CODECS_FLAG_YUVHACK)
469
434889ca2340 ehh typo...
arpi_esp
parents: 467
diff changeset
351 sh_video->o_bih.biCompression = outfmt;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
353 // avi_header.our_in_buffer=malloc(avi_header.video.dwSuggestedBufferSize); // FIXME!!!!
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
354
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
355 ICSendMessage(sh_video->hic, ICM_USER+80, (long)(&divx_quality) ,NULL);
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
356
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
357 mp_msg(MSGT_WIN32,MSGL_V,"VIDEO CODEC Init OK!!! ;-)\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359 }
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
360
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
361 int vfw_set_postproc(sh_video_t* sh_video,int quality){
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
362 // Works only with opendivx/divx4 based DLL
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
363 return ICSendMessage(sh_video->hic, ICM_USER+80, (long)(&quality) ,NULL);
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
364 }
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
365
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
366 int vfw_decode_video(sh_video_t* sh_video,void* start,int in_size,int drop_frame,int ex){
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
367 HRESULT ret;
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
368
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
369 sh_video->bih->biSizeImage = in_size;
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
370
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
371 if(ex)
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
372 ret = ICDecompressEx(sh_video->hic,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
373 ( (sh_video->ds->flags&1) ? 0 : ICDECOMPRESS_NOTKEYFRAME ) |
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
374 ( (drop_frame==2 && !(sh_video->ds->flags&1))?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ) ,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
375 sh_video->bih, start,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
376 &sh_video->o_bih,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
377 drop_frame ? 0 : sh_video->our_out_buffer);
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
378 else
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
379 ret = ICDecompress(sh_video->hic,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
380 ( (sh_video->ds->flags&1) ? 0 : ICDECOMPRESS_NOTKEYFRAME ) |
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
381 ( (drop_frame==2 && !(sh_video->ds->flags&1))?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ) ,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
382 sh_video->bih, start,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
383 &sh_video->o_bih,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
384 drop_frame ? 0 : sh_video->our_out_buffer);
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
385
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
386 return (int)ret;
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
387 }
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
388