Mercurial > mplayer.hg
comparison dll_init.c @ 92:92776006958f
ACM code cleanup, nosound at ACM error
author | arpi_esp |
---|---|
date | Mon, 12 Mar 2001 01:09:35 +0000 |
parents | 3b5f5d1c5041 |
children | da98e96499bb |
comparison
equal
deleted
inserted
replaced
91:315979891f2d | 92:92776006958f |
---|---|
1 // ACM audio and VfW video codecs initialization | 1 // ACM audio and VfW video codecs initialization |
2 // based on the avifile library [http://divx.euro.ru] | 2 // based on the avifile library [http://divx.euro.ru] |
3 | |
4 static char* a_in_buffer=NULL; | |
5 static int a_in_buffer_len=0; | |
6 static int a_in_buffer_size=0; | |
3 | 7 |
4 int init_audio_codec(){ | 8 int init_audio_codec(){ |
5 HRESULT ret; | 9 HRESULT ret; |
6 WAVEFORMATEX *in_fmt=(WAVEFORMATEX*)&avi_header.wf_ext; | 10 WAVEFORMATEX *in_fmt=(WAVEFORMATEX*)&avi_header.wf_ext; |
7 unsigned long srcsize=0; | 11 unsigned long srcsize=0; |
43 | 47 |
44 acmStreamSize(avi_header.srcstream, srcsize, &srcsize, ACM_STREAMSIZEF_DESTINATION); | 48 acmStreamSize(avi_header.srcstream, srcsize, &srcsize, ACM_STREAMSIZEF_DESTINATION); |
45 avi_header.audio_in_minsize=srcsize; // audio input min. size | 49 avi_header.audio_in_minsize=srcsize; // audio input min. size |
46 if(verbose) printf("Audio ACM input buffer min. size: %d\n",srcsize); | 50 if(verbose) printf("Audio ACM input buffer min. size: %d\n",srcsize); |
47 | 51 |
52 a_in_buffer_size=avi_header.audio_in_minsize; | |
53 a_in_buffer=malloc(a_in_buffer_size); | |
54 a_in_buffer_len=0; | |
55 | |
48 return 1; | 56 return 1; |
49 } | 57 } |
58 | |
59 int acm_decode_audio(void* a_buffer,int len){ | |
60 ACMSTREAMHEADER ash; | |
61 HRESULT hr; | |
62 DWORD srcsize=0; | |
63 acmStreamSize(avi_header.srcstream,len , &srcsize, ACM_STREAMSIZEF_DESTINATION); | |
64 if(verbose>=3)printf("acm says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,a_in_buffer_size,len); | |
65 // if(srcsize==0) srcsize=((WAVEFORMATEX *)&avi_header.wf_ext)->nBlockAlign; | |
66 if(srcsize>a_in_buffer_size) srcsize=a_in_buffer_size; // !!!!!! | |
67 if(a_in_buffer_len<srcsize){ | |
68 a_in_buffer_len+= | |
69 demux_read_data(d_audio,&a_in_buffer[a_in_buffer_len], | |
70 srcsize-a_in_buffer_len); | |
71 } | |
72 memset(&ash, 0, sizeof(ash)); | |
73 ash.cbStruct=sizeof(ash); | |
74 ash.fdwStatus=0; | |
75 ash.dwUser=0; | |
76 ash.pbSrc=a_in_buffer; | |
77 ash.cbSrcLength=a_in_buffer_len; | |
78 ash.pbDst=a_buffer; | |
79 ash.cbDstLength=len; | |
80 hr=acmStreamPrepareHeader(avi_header.srcstream,&ash,0); | |
81 if(hr){ | |
82 printf("ACM_Decoder: acmStreamPrepareHeader error %d\n",hr); | |
83 return -1; | |
84 } | |
85 hr=acmStreamConvert(avi_header.srcstream,&ash,0); | |
86 if(hr){ | |
87 printf("ACM_Decoder: acmStreamConvert error %d\n",hr); | |
88 return -1; | |
89 } | |
90 //printf("ACM convert %d -> %d (buf=%d)\n",ash.cbSrcLengthUsed,ash.cbDstLengthUsed,a_in_buffer_len); | |
91 if(ash.cbSrcLengthUsed>=a_in_buffer_len){ | |
92 a_in_buffer_len=0; | |
93 } else { | |
94 a_in_buffer_len-=ash.cbSrcLengthUsed; | |
95 memcpy(a_in_buffer,&a_in_buffer[ash.cbSrcLengthUsed],a_in_buffer_len); | |
96 } | |
97 len=ash.cbDstLengthUsed; | |
98 hr=acmStreamUnprepareHeader(avi_header.srcstream,&ash,0); | |
99 if(hr){ | |
100 printf("ACM_Decoder: acmStreamUnprepareHeader error %d\n",hr); | |
101 } | |
102 return len; | |
103 } | |
104 | |
50 | 105 |
51 | 106 |
52 int init_video_codec(int outfmt){ | 107 int init_video_codec(int outfmt){ |
53 HRESULT ret; | 108 HRESULT ret; |
54 | 109 |