annotate libmpcodecs/ad_acm.c @ 10579:f25d93203a71

From: Kir Kostuchenko <kir@users.sourceforge.net> Hi, I found that command line options brightness, hue, contrast and saturation does not works, becouse mplayer apply it, before open tv (kernel says invalid ioctl). Here are simple fix. Please apply.
author gabucino
date Tue, 12 Aug 2003 11:32:51 +0000
parents 9fc45fe0d444
children 972d1998bde9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
1 #include <stdio.h>
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
2 #include <stdlib.h>
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
3 #include <unistd.h>
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
4
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
5 #include "config.h"
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
6 #include "mp_msg.h"
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
7 #include "help_mp.h"
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
8
5343
3dd532400d44 argh... Nick messed up driver names too
arpi
parents: 5340
diff changeset
9 #ifdef USE_WIN32DLL
3dd532400d44 argh... Nick messed up driver names too
arpi
parents: 5340
diff changeset
10
7471
5e56ce70b551 wine headers cleanup
arpi
parents: 7390
diff changeset
11 #include "wineacm.h"
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
12
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
13 #include "ad_internal.h"
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
14
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
15 static ad_info_t info =
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
16 {
7191
1eadce15446c -afm/-vfm help implemenetd, some cosmetics of ad/vd codec names/comments
arpi
parents: 7180
diff changeset
17 "Win32/ACM decoders",
5343
3dd532400d44 argh... Nick messed up driver names too
arpi
parents: 5340
diff changeset
18 "acm",
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
19 "A'rpi",
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
20 "A'rpi & Alex",
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
21 ""
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
22 };
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
23
5343
3dd532400d44 argh... Nick messed up driver names too
arpi
parents: 5340
diff changeset
24 LIBAD_EXTERN(acm)
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
25
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
26 typedef struct {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
27 WAVEFORMATEX *o_wf;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
28 HACMSTREAM handle;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
29 } acm_context_t;
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
30
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
31 static int init(sh_audio_t *sh_audio)
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
32 {
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
33 int ret=decode_audio(sh_audio,sh_audio->a_buffer,4096,sh_audio->a_buffer_size);
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
34 if(ret<0){
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
35 mp_msg(MSGT_DECAUDIO,MSGL_INFO,"ACM decoding error: %d\n",ret);
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
36 return 0;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
37 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
38 sh_audio->a_buffer_len=ret;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
39 return 1;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
40 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
41
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8027
diff changeset
42 extern void print_wave_header(WAVEFORMATEX *h);
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8027
diff changeset
43
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
44 static int preinit(sh_audio_t *sh_audio)
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
45 {
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
46 HRESULT ret;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
47 WAVEFORMATEX *in_fmt = sh_audio->wf;
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8027
diff changeset
48 DWORD srcsize = 0;
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
49 acm_context_t *priv;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
50
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
51 priv = malloc(sizeof(acm_context_t));
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
52 if (!priv)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
53 return 0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
54 sh_audio->context = priv;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
55
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
56 mp_msg(MSGT_WIN32, MSGL_V, "======= Win32 (ACM) AUDIO Codec init =======\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
57
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
58 // priv->handle = NULL;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
59
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
60 priv->o_wf = malloc(sizeof(WAVEFORMATEX));
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
61 if (!priv->o_wf)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
62 {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
63 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_ACMiniterror);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
64 return 0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
65 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
66
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
67 priv->o_wf->nChannels = in_fmt->nChannels;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
68 priv->o_wf->nSamplesPerSec = in_fmt->nSamplesPerSec;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
69 priv->o_wf->nAvgBytesPerSec = 2*in_fmt->nSamplesPerSec*in_fmt->nChannels;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
70 priv->o_wf->wFormatTag = WAVE_FORMAT_PCM;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
71 priv->o_wf->nBlockAlign = 2*in_fmt->nChannels;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
72 priv->o_wf->wBitsPerSample = 16;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
73 // priv->o_wf->wBitsPerSample = inf_fmt->wBitsPerSample;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
74 priv->o_wf->cbSize = 0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
75
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7471
diff changeset
76 if (verbose>0)
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
77 {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
78 mp_msg(MSGT_DECAUDIO, MSGL_V, "Input format:\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
79 print_wave_header(in_fmt);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
80 mp_msg(MSGT_DECAUDIO, MSGL_V, "Output format:\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
81 print_wave_header(priv->o_wf);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
82 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
83
7390
2357ee501582 fixed to comply with new loader
alex
parents: 7228
diff changeset
84 MSACM_RegisterDriver((const char *)sh_audio->codec->dll, in_fmt->wFormatTag, 0);
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
85 ret = acmStreamOpen(&priv->handle, (HACMDRIVER)NULL, in_fmt,
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
86 priv->o_wf, NULL, 0, 0, 0);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
87 if (ret)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
88 {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
89 if (ret == ACMERR_NOTPOSSIBLE)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
90 mp_msg(MSGT_WIN32, MSGL_ERR, "ACM_Decoder: Unappropriate audio format\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
91 else
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
92 mp_msg(MSGT_WIN32, MSGL_ERR, "ACM_Decoder: acmStreamOpen error: %d\n",
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
93 (int)ret);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
94 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_ACMiniterror);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
95 return 0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
96 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
97 mp_msg(MSGT_WIN32, MSGL_V, "Audio codec opened OK! ;-)\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
98
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
99 acmStreamSize(priv->handle, in_fmt->nBlockAlign, &srcsize, ACM_STREAMSIZEF_SOURCE);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
100 //if (verbose) printf("Audio ACM output buffer min. size: %ld (reported by codec)\n", srcsize);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
101 srcsize *= 2;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
102 //if (srcsize < MAX_OUTBURST) srcsize = MAX_OUTBURST;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
103 if (!srcsize)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
104 {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
105 mp_msg(MSGT_WIN32, MSGL_WARN, "Warning! ACM codec reports srcsize=0\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
106 srcsize = 16384;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
107 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
108 // limit srcsize to 4-16kb
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
109 //while(srcsize && srcsize<4096) srcsize*=2;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
110 //while(srcsize>16384) srcsize/=2;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
111 sh_audio->audio_out_minsize=srcsize; // audio output min. size
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
112 mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM output buffer min. size: %ld\n",srcsize);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
113
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
114 acmStreamSize(priv->handle, srcsize, &srcsize, ACM_STREAMSIZEF_DESTINATION);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
115 // if(srcsize<in_fmt->nBlockAlign) srcsize=in_fmt->nBlockAlign;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
116
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
117 mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM input buffer min. size: %ld\n",srcsize);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
118
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
119 sh_audio->audio_in_minsize=2*srcsize; // audio input min. size
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
120
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
121 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec;
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
122 sh_audio->channels=priv->o_wf->nChannels;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
123 sh_audio->samplerate=priv->o_wf->nSamplesPerSec;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
124
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
125 mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: Win32/ACM audio codec init OK!\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
126 return 1;
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
127 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
128
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
129 static void uninit(sh_audio_t *sh)
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
130 {
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
131 HRESULT ret;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
132 acm_context_t *priv = sh->context;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
133
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
134 ret = acmStreamClose(priv->handle, 0);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
135
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
136 if (ret)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
137 switch(ret)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
138 {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
139 case ACMERR_BUSY:
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
140 case ACMERR_CANCELED:
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
141 mp_msg(MSGT_WIN32, MSGL_DBG2, "ACM_Decoder: stream busy, waiting..\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
142 sleep(100);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
143 return(uninit(sh));
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
144 case ACMERR_UNPREPARED:
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
145 case ACMERR_NOTPOSSIBLE:
7471
5e56ce70b551 wine headers cleanup
arpi
parents: 7390
diff changeset
146 return;
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
147 default:
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
148 mp_msg(MSGT_WIN32, MSGL_WARN, "ACM_Decoder: unknown error occured: %d\n", ret);
7471
5e56ce70b551 wine headers cleanup
arpi
parents: 7390
diff changeset
149 return;
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
150 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
151
7390
2357ee501582 fixed to comply with new loader
alex
parents: 7228
diff changeset
152 MSACM_UnregisterAllDrivers();
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
153
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
154 free(priv->o_wf);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
155 free(priv);
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
156 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
157
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
158 static int control(sh_audio_t *sh_audio,int cmd,void* arg, ...)
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
159 {
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
160 int skip;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
161 switch(cmd)
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
162 {
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
163 case ADCTRL_SKIP_FRAME:
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
164 skip=sh_audio->wf->nBlockAlign;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
165 if(skip<16){
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
166 skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7);
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
167 if(skip<16) skip=16;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
168 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
169 demux_read_data(sh_audio->ds,NULL,skip);
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
170 return CONTROL_TRUE;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
171 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
172 return CONTROL_UNKNOWN;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
173 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
174
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
175 static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
176 {
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
177 ACMSTREAMHEADER ash;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
178 HRESULT hr;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
179 DWORD srcsize=0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
180 DWORD len=minlen;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
181 acm_context_t *priv = sh_audio->context;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
182
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
183 acmStreamSize(priv->handle, len, &srcsize, ACM_STREAMSIZEF_DESTINATION);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
184 mp_msg(MSGT_WIN32,MSGL_DBG3,"acm says: srcsize=%ld (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,len);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
185
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
186 if(srcsize<sh_audio->wf->nBlockAlign){
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
187 srcsize=sh_audio->wf->nBlockAlign;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
188 acmStreamSize(priv->handle, srcsize, &len, ACM_STREAMSIZEF_SOURCE);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
189 if(len>maxlen) len=maxlen;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
190 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
191
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
192 // if(srcsize==0) srcsize=((WAVEFORMATEX *)&sh_audio->o_wf_ext)->nBlockAlign;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
193 if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!!
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
194 if(sh_audio->a_in_buffer_len<srcsize){
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
195 sh_audio->a_in_buffer_len+=
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
196 demux_read_data(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len],
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
197 srcsize-sh_audio->a_in_buffer_len);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
198 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
199 mp_msg(MSGT_WIN32,MSGL_DBG3,"acm convert %d -> %d bytes\n",sh_audio->a_in_buffer_len,len);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
200 memset(&ash, 0, sizeof(ash));
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
201 ash.cbStruct=sizeof(ash);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
202 ash.fdwStatus=0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
203 ash.dwUser=0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
204 ash.pbSrc=sh_audio->a_in_buffer;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
205 ash.cbSrcLength=sh_audio->a_in_buffer_len;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
206 ash.pbDst=buf;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
207 ash.cbDstLength=len;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
208 hr=acmStreamPrepareHeader(priv->handle,&ash,0);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
209 if(hr){
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
210 mp_msg(MSGT_WIN32,MSGL_V,"ACM_Decoder: acmStreamPrepareHeader error %d\n",(int)hr);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
211 return -1;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
212 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
213 hr=acmStreamConvert(priv->handle,&ash,0);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
214 if(hr){
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
215 mp_msg(MSGT_WIN32,MSGL_DBG2,"ACM_Decoder: acmStreamConvert error %d\n",(int)hr);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
216 switch(hr)
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
217 {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
218 case ACMERR_NOTPOSSIBLE:
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
219 case ACMERR_UNPREPARED:
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
220 mp_msg(MSGT_WIN32, MSGL_DBG2, "ACM_Decoder: acmStreamConvert error: probarly not initialized!\n");
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
221 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
222 // return -1;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
223 }
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7471
diff changeset
224 mp_msg(MSGT_WIN32,MSGL_DBG2,"acm converted %d -> %d\n",ash.cbSrcLengthUsed,ash.cbDstLengthUsed);
7228
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
225 if(ash.cbSrcLengthUsed>=sh_audio->a_in_buffer_len){
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
226 sh_audio->a_in_buffer_len=0;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
227 } else {
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
228 sh_audio->a_in_buffer_len-=ash.cbSrcLengthUsed;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
229 memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[ash.cbSrcLengthUsed],sh_audio->a_in_buffer_len);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
230 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
231 len=ash.cbDstLengthUsed;
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
232 hr=acmStreamUnprepareHeader(priv->handle,&ash,0);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
233 if(hr){
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
234 mp_msg(MSGT_WIN32,MSGL_V,"ACM_Decoder: acmStreamUnprepareHeader error %d\n",(int)hr);
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
235 }
0a21be7df603 merged with dll_init.c, moved some variables from sh_audio to private struct
alex
parents: 7191
diff changeset
236 return len;
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
237 }
5343
3dd532400d44 argh... Nick messed up driver names too
arpi
parents: 5340
diff changeset
238 #endif