annotate dll_init.c @ 4218:3931c41f740a

Added new syncengine thanks to a new previously undocumented feature of the em8300, this might fix playback on both slow and fast machines (more testing needed). This also requires users to get the em8300 driver from cvs until the next version is released (will probably happen this weekend) Added lots of comments, should be pretty easy to understand most of the internals now Added lots of brackets to if's for's while's etc, this is not a cosmetical thing but rather due to the fact I got some very odd bugs with else's since I didn't properly use brackets (and it's the K&R standard to have brackets everywhere) Fixed some bugs that would occur when disabling libmp1e Switched to default to the new naming scheme of device nodes, the driver will slowly switch over to this state, if it can't find devices under the new name it will try the old naming scheme I stopped opening devices in non-blocking mode, it would break the new syncengine which tries to burst data to the device (alot of times meaning it will fill the fifo pretty fast which would previously result in jerkyness on fast machines) The device now sets the initial state of the pts and speed (probably not needed, but assumption is the mother of all fuckups =) Keep the control interface open during the entire duration of the libvo device, we might need this to flush video buffers on seeking (currently not implemented, therefore seeking is broken) This is beta stuff to the driver, I will get some users to test it for me and do my best to fix seeking as soon as possible...
author mswitch
date Thu, 17 Jan 2002 10:33:47 +0000
parents ba98028ddc27
children 683a0585420c
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;
3725
ba98028ddc27 fixes warnings
pl
parents: 3437
diff changeset
42 unsigned int srcsize=0;
1
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;
3437
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
54 // sh_audio->o_wf.wBitsPerSample=in_fmt->wBitsPerSample;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
55 sh_audio->o_wf.cbSize=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56
3437
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
57 if(verbose) {
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
58 printf("Input format:\n");
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
59 printf(" wFormatTag %d\n", in_fmt->wFormatTag);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
60 printf(" nChannels %d\n", in_fmt->nChannels);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
61 printf(" nSamplesPerSec %ld\n", in_fmt->nSamplesPerSec);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
62 printf(" nAvgBytesPerSec %d\n", in_fmt->nAvgBytesPerSec);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
63 printf(" nBlockAlign %d\n", in_fmt->nBlockAlign);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
64 printf(" wBitsPerSample %d\n", in_fmt->wBitsPerSample);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
65 printf(" cbSize %d\n", in_fmt->cbSize);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
66 printf("Output fmt:\n");
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
67 printf(" wFormatTag %d\n", sh_audio->o_wf.wFormatTag);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
68 printf(" nChannels %d\n", sh_audio->o_wf.nChannels);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
69 printf(" nSamplesPerSec %ld\n", sh_audio->o_wf.nSamplesPerSec);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
70 printf(" nAvgBytesPerSec %d\n", sh_audio->o_wf.nAvgBytesPerSec);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
71 printf(" nBlockAlign %d\n", sh_audio->o_wf.nBlockAlign);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
72 printf(" wBitsPerSample %d\n", sh_audio->o_wf.wBitsPerSample);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
73 printf(" cbSize %d\n", sh_audio->o_wf.cbSize);
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
74 }
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
75
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
76
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
77 win32_codec_name = sh_audio->codec->dll;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
78 ret=acmStreamOpen(&sh_audio->srcstream,(HACMDRIVER)NULL,
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
79 in_fmt,&sh_audio->o_wf,
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 NULL,0,0,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 if(ret){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 if(ret==ACMERR_NOTPOSSIBLE)
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
83 mp_msg(MSGT_WIN32,MSGL_ERR,"ACM_Decoder: Unappropriate audio format\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 else
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1653
diff changeset
85 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
86 sh_audio->srcstream=NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
89 mp_msg(MSGT_WIN32,MSGL_V,"Audio codec opened OK! ;-)\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
91 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
92 //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
93 srcsize*=2;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
94 //if(srcsize<MAX_OUTBURST) srcsize=MAX_OUTBURST;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
95 if(!srcsize){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
96 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
97 srcsize=16384;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
98 }
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
99 // limit srcsize to 4-16kb
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
100 //while(srcsize && srcsize<4096) srcsize*=2;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
101 //while(srcsize>16384) srcsize/=2;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
102 sh_audio->audio_out_minsize=srcsize; // audio output min. size
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
103 mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM output buffer min. size: %ld\n",srcsize);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 714
diff changeset
105 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
106 sh_audio->audio_in_minsize=srcsize; // audio input min. size
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
107 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
108
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
109 if(srcsize<in_fmt->nBlockAlign) srcsize=in_fmt->nBlockAlign;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
111 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
112 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
113 sh_audio->a_in_buffer_len=0;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
114
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
118 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
119 ACMSTREAMHEADER ash;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
120 HRESULT hr;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
121 DWORD srcsize=0;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
122 DWORD len=minlen;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
123 acmStreamSize(sh_audio->srcstream,len , &srcsize, ACM_STREAMSIZEF_DESTINATION);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
124 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
125
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
126 if(srcsize<sh_audio->wf->nBlockAlign){
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
127 srcsize=sh_audio->wf->nBlockAlign;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
128 acmStreamSize(sh_audio->srcstream, srcsize, &len, ACM_STREAMSIZEF_SOURCE);
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
129 if(len>maxlen) len=maxlen;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
130 }
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
131
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
132 // 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
133 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
134 if(sh_audio->a_in_buffer_len<srcsize){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
135 sh_audio->a_in_buffer_len+=
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
136 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
137 srcsize-sh_audio->a_in_buffer_len);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
138 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
139 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
140 memset(&ash, 0, sizeof(ash));
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
141 ash.cbStruct=sizeof(ash);
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
142 ash.fdwStatus=0;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
143 ash.dwUser=0;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
144 ash.pbSrc=sh_audio->a_in_buffer;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
145 ash.cbSrcLength=sh_audio->a_in_buffer_len;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
146 ash.pbDst=a_buffer;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
147 ash.cbDstLength=len;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
148 hr=acmStreamPrepareHeader(sh_audio->srcstream,&ash,0);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
149 if(hr){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
150 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
151 return -1;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
152 }
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
153 hr=acmStreamConvert(sh_audio->srcstream,&ash,0);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
154 if(hr){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
155 mp_msg(MSGT_WIN32,MSGL_DBG2,"ACM_Decoder: acmStreamConvert error %d\n",(int)hr);
3437
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
156 switch(hr)
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
157 {
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
158 case ACMERR_NOTPOSSIBLE:
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
159 case ACMERR_UNPREPARED:
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
160 mp_msg(MSGT_WIN32, MSGL_DBG2, "ACM_Decoder: acmStreamConvert error: probarly not initialized!\n");
ae0e2736a5d4 added in/out format debug to acm init like in vfw init (for testing vivo decoder dll :)
alex
parents: 2897
diff changeset
161 }
631
1e6e08593762 ACM fixes - now plays april_25.asf too
arpi_esp
parents: 603
diff changeset
162 // return -1;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
163 }
1407
2e23a033d6f8 acm convert message verbose1->2
arpi
parents: 1309
diff changeset
164 if(verbose>1)
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
165 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
166 if(ash.cbSrcLengthUsed>=sh_audio->a_in_buffer_len){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
167 sh_audio->a_in_buffer_len=0;
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
168 } else {
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
169 sh_audio->a_in_buffer_len-=ash.cbSrcLengthUsed;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
170 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
171 }
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
172 len=ash.cbDstLengthUsed;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
173 hr=acmStreamUnprepareHeader(sh_audio->srcstream,&ash,0);
92
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
174 if(hr){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
175 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
176 }
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
177 return len;
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
178 }
92776006958f ACM code cleanup, nosound at ACM error
arpi_esp
parents: 1
diff changeset
179
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
180 int init_vfw_video_codec(sh_video_t *sh_video,int ex){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 HRESULT ret;
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
182 int yuv=0;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
183 unsigned int outfmt=sh_video->codec->outfmt[sh_video->outfmtidx];
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
184 char *temp;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
185 int temp_len;
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
186 int i;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
188 mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (VFW) VIDEO Codec init =======\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
190 memset(&sh_video->o_bih, 0, sizeof(BITMAPINFOHEADER));
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
191 sh_video->o_bih.biSize = sizeof(BITMAPINFOHEADER);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
193 win32_codec_name = sh_video->codec->dll;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 714
diff changeset
194 // 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
195 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
196 if(!sh_video->hic){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
197 mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
201 // sh_video->bih->biBitCount=32;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
202
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
203 temp_len = ICDecompressGetFormatSize(sh_video->hic, sh_video->bih);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
204
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
205 if (temp_len < sh_video->o_bih.biSize)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
206 temp_len = sh_video->o_bih.biSize;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
207
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
208 temp = malloc(temp_len);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
209 printf("ICDecompressGetFormatSize ret: %d\n", temp_len);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
210
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
211 #if 0
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
212 {
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
213 ICINFO icinfo;
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
214 ret = ICGetInfo(sh_video->hic, &icinfo, sizeof(ICINFO));
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
215 printf("%d - %d - %d\n", ret, icinfo.dwSize, sizeof(ICINFO));
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
216 printf("Compressor type: %.4x\n", icinfo.fccType);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
217 printf("Compressor subtype: %.4x\n", icinfo.fccHandler);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
218 printf("Compressor flags: %lu, version %lu, ICM version: %lu\n",
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
219 icinfo.dwFlags, icinfo.dwVersion, icinfo.dwVersionICM);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
220 printf("Compressor name: %s\n", icinfo.szName);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
221 printf("Compressor description: %s\n", icinfo.szDescription);
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
222
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
223 printf("Flags:");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
224 if (icinfo.dwFlags & VIDCF_QUALITY)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
225 printf(" quality");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
226 if (icinfo.dwFlags & VIDCF_FASTTEMPORALD)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
227 printf(" fast-decompr");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
228 if (icinfo.dwFlags & VIDCF_QUALITYTIME)
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
229 printf(" temp-quality");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
230 printf("\n");
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
231 }
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
232 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
234 // 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
235 // 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
236 // then copy out the data we need:
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
237 memset(temp,0x77,temp_len);
2885
7459ddb8b539 for pegasus mjpeg
arpi
parents: 2876
diff changeset
238 // memcpy(temp,sh_video->bih,sizeof(BITMAPINFOHEADER));
7459ddb8b539 for pegasus mjpeg
arpi
parents: 2876
diff changeset
239 // sh_video->o_bih.biSize = temp_len;
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
240
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
241 ret = ICDecompressGetFormat(sh_video->hic, sh_video->bih, temp);
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
242 if(ret < 0){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
243 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressGetFormat failed: Error %d\n", (int)ret);
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
244 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
245 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
247 mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressGetFormat OK\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
249 memcpy(&sh_video->o_bih,temp,sizeof(sh_video->o_bih));
2679
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
250
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
251 if (temp_len > sizeof(sh_video->o_bih))
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
252 {
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
253 mp_msg(MSGT_WIN32, MSGL_V, "Extra info in o_bih (%d bytes)!\n",
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
254 temp_len-sizeof(sh_video->o_bih));
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
255 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
256 }
ae59ad941b42 supporting GetFormatSize
alex
parents: 2087
diff changeset
257 free(temp);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 // printf("ICM_DECOMPRESS_QUERY=0x%X",ICM_DECOMPRESS_QUERY);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
260 // sh_video->o_bih.biWidth=sh_video->bih.biWidth;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
261 // 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
262 // ret=ICDecompressGetFormatSize(sh_video->hic,&sh_video->o_bih);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
263 // sh_video->o_bih.biCompression = 3; //0x32315659;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
264 // 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
265 // 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
266 // 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
267 // sh_video->o_bih.biPlanes=3;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
268 // sh_video->o_bih.biBitCount=16;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
270 #if 0
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
271 // workaround for pegasus MJPEG:
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 631
diff changeset
272 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
273 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
274 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
275 #endif
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
276
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
277 switch (outfmt) {
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
278
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
279 /* planar format */
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
280 case IMGFMT_YV12:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
281 case IMGFMT_I420:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
282 case IMGFMT_IYUV:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
283 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
284 yuv=1;
467
e53a9edbee98 fixed yuvhack
arpi_esp
parents: 432
diff changeset
285 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
287 /* packed format */
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
288 case IMGFMT_YUY2:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
289 case IMGFMT_UYVY:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
290 case IMGFMT_YVYU:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
291 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
292 yuv=1;
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
293 break;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
294
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
295 /* rgb/bgr format */
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
296 case IMGFMT_RGB8:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
297 case IMGFMT_BGR8:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
298 sh_video->o_bih.biBitCount=8;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
299 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
301 case IMGFMT_RGB15:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
302 case IMGFMT_RGB16:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
303 case IMGFMT_BGR15:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
304 case IMGFMT_BGR16:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
305 sh_video->o_bih.biBitCount=16;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
306 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
307
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
308 case IMGFMT_RGB24:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
309 case IMGFMT_BGR24:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
310 sh_video->o_bih.biBitCount=24;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
311 break;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
312
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
313 case IMGFMT_RGB32:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
314 case IMGFMT_BGR32:
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
315 sh_video->o_bih.biBitCount=32;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
316 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
318 default:
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
319 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
320 return 0;
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
321 }
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
322
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
323 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
324
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
325 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
326 sh_video->o_bih.biHeight=-sh_video->bih->biHeight; // flip image!
408
b61c5c4484f8 - applied overlay patch by Jens H
atmosfear
parents: 303
diff changeset
327 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
329 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
330 sh_video->o_bih.biCompression = outfmt;
759
34edf774ef73 HuffYUV YUY2->RGB fixed
arpi_esp
parents: 758
diff changeset
331 else
34edf774ef73 HuffYUV YUY2->RGB fixed
arpi_esp
parents: 758
diff changeset
332 sh_video->o_bih.biCompression = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 if(verbose) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 printf("Starting decompression, format:\n");
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
336 printf(" biSize %ld\n", sh_video->bih->biSize);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
337 printf(" biWidth %ld\n", sh_video->bih->biWidth);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
338 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
339 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
340 printf(" biBitCount %d\n", sh_video->bih->biBitCount);
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
341 printf(" biCompression 0x%lx ('%.4s')\n", sh_video->bih->biCompression, (char *)&sh_video->bih->biCompression);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
342 printf(" biSizeImage %ld\n", sh_video->bih->biSizeImage);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 printf("Dest fmt:\n");
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
344 printf(" biSize %ld\n", sh_video->o_bih.biSize);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
345 printf(" biWidth %ld\n", sh_video->o_bih.biWidth);
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
346 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
347 printf(" biPlanes %d\n", sh_video->o_bih.biPlanes);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 92
diff changeset
348 printf(" biBitCount %d\n", sh_video->o_bih.biBitCount);
603
eda2df9f985d warnings killed
szabii
parents: 587
diff changeset
349 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
350 printf(" biSizeImage %ld\n", sh_video->o_bih.biSizeImage);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352
1297
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
353 ret = ex ?
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
354 ICDecompressQueryEx(sh_video->hic, sh_video->bih, &sh_video->o_bih) :
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
355 ICDecompressQuery(sh_video->hic, sh_video->bih, &sh_video->o_bih);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 if(ret){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
357 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressQuery failed: Error %d\n", (int)ret);
2714
3615abd17375 ignoring decompressquery error
arpi
parents: 2679
diff changeset
358 // return 0;
3615abd17375 ignoring decompressquery error
arpi
parents: 2679
diff changeset
359 } else
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
360 mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressQuery OK\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361
1297
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
362 ret = ex ?
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
363 ICDecompressBeginEx(sh_video->hic, sh_video->bih, &sh_video->o_bih) :
200c03672178 VfwEx support
arpi
parents: 759
diff changeset
364 ICDecompressBegin(sh_video->hic, sh_video->bih, &sh_video->o_bih);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
365 if(ret){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
366 mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressBegin failed: Error %d\n", (int)ret);
2876
12a0be665dfd m3jpg support - ignore error
arpi
parents: 2775
diff changeset
367 // return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
370 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
371 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
372 mp_msg(MSGT_WIN32,MSGL_ERR,MSGTR_NoMemForDecodedImage, sh_video->o_bih.biSizeImage);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375
489
2bb59b7c748a BGR modes with VfW codecs fixed - biCompression must be 0 for BGR...
arpi_esp
parents: 469
diff changeset
376 if(yuv && sh_video->codec->outflags[sh_video->outfmtidx] & CODECS_FLAG_YUVHACK)
469
434889ca2340 ehh typo...
arpi_esp
parents: 467
diff changeset
377 sh_video->o_bih.biCompression = outfmt;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 // 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
380
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
381 ICSendMessage(sh_video->hic, ICM_USER+80, (long)(&divx_quality) ,NULL);
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
382
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1430
diff changeset
383 mp_msg(MSGT_WIN32,MSGL_V,"VIDEO CODEC Init OK!!! ;-)\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 }
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
386
2087
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
387 int vfw_set_postproc(sh_video_t* sh_video,int quality){
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
388 // Works only with opendivx/divx4 based DLL
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
389 return ICSendMessage(sh_video->hic, ICM_USER+80, (long)(&quality) ,NULL);
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
390 }
fbf7ce9401ff divx.dll o_bih workaround, postprocessing support
arpi
parents: 2049
diff changeset
391
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
392 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
393 HRESULT ret;
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
394
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
395 sh_video->bih->biSizeImage = in_size;
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
396
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
397 if(ex)
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
398 ret = ICDecompressEx(sh_video->hic,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
399 ( (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
400 ( (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
401 sh_video->bih, start,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
402 &sh_video->o_bih,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
403 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
404 else
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
405 ret = ICDecompress(sh_video->hic,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
406 ( (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
407 ( (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
408 sh_video->bih, start,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
409 &sh_video->o_bih,
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
410 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
411
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
412 return (int)ret;
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
413 }
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
414