Mercurial > mplayer.hg
annotate libmpcodecs/ad_hwmpa.c @ 26625:5b89b42f6d50
Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
AltiVec code needs -maltivec to compile, but then AltiVec instructions
appear in other places of the code causing MPlayer to sigill.
Somehow upstream libmpeg2 manages not to sigill under what appear to be
the same circumstances. Enlightenment welcome.
author | diego |
---|---|
date | Sat, 03 May 2008 15:23:22 +0000 |
parents | a90aa203186c |
children | 0f1b5b68af32 |
rev | line source |
---|---|
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
1 #include <stdio.h> |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
2 #include <stdlib.h> |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
3 #include <string.h> |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
4 #include <unistd.h> |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
5 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
6 #include "config.h" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
7 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
8 #include "mp_msg.h" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
9 #include "help_mp.h" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
10 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
11 #include "libaf/af_format.h" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
12 #include "ad_internal.h" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
13 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
14 #include "libmpdemux/mp3_hdr.h" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
15 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
16 //based on ad_hwac3.c and ad_libmad.c |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
17 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
18 static ad_info_t info = |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
19 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
20 "MPEG audio pass-through (fake decoder)", |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
21 "hwmpa", |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
22 "NicoDVB", |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
23 "NicoDVB", |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
24 "For hardware decoders" |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
25 }; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
26 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
27 LIBAD_EXTERN(hwmpa) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
28 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
29 static int mpa_sync(sh_audio_t *sh, int no_frames, int *n, int *chans, int *srate, int *spf, int *mpa_layer, int *br) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
30 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
31 int cnt = 0, x = 0, len, frames_count; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
32 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
33 frames_count = 0; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
34 do |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
35 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
36 while(cnt + 4 < sh->a_in_buffer_len) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
37 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
38 x = mp_get_mp3_header(&(sh->a_in_buffer[cnt]), chans, srate, spf, mpa_layer, br); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
39 if(x > 0) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
40 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
41 frames_count++; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
42 if(frames_count == no_frames) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
43 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
44 *n = x; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
45 return cnt; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
46 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
47 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
48 cnt++; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
49 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
50 len = demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len],sh->a_in_buffer_size-sh->a_in_buffer_len); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
51 if(len > 0) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
52 sh->a_in_buffer_len += len; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
53 } while(len > 0); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
54 mp_msg(MSGT_DECAUDIO,MSGL_INFO,"Cannot sync MPA frame: %d\r\n", len); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
55 return -1; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
56 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
57 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
58 static int preinit(sh_audio_t *sh) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
59 { |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
60 sh->audio_out_minsize = 4608;//check |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
61 sh->audio_in_minsize = 4608;//check |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
62 sh->sample_format = AF_FORMAT_MPEG2; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
63 return 1; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
64 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
65 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
66 static int init(sh_audio_t *sh) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
67 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
68 int cnt, chans, srate, spf, mpa_layer, br, len; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
69 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
70 if((cnt = mpa_sync(sh, 1, &len, &chans, &srate, &spf, &mpa_layer, &br)) < 0) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
71 return 0; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
72 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
73 sh->channels = chans; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
74 sh->samplerate = srate; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
75 sh->i_bps = br * 125; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
76 sh->samplesize = 2; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
77 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
78 mp_msg(MSGT_DECAUDIO,MSGL_V,"AC_HWMPA initialized, bitrate: %d kb/s\r\n", len); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
79 return 1; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
80 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
81 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
82 static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
83 { |
19120
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
84 int len, start, tot; |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
85 int chans, srate, spf, mpa_layer, br; |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
86 int tot2; |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
87 |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
88 tot = tot2 = 0; |
19120
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
89 |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
90 while(tot2 < maxlen) |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
91 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
92 start = mpa_sync(sh, 1, &len, &chans, &srate, &spf, &mpa_layer, &br); |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
93 if(start < 0 || tot2 + spf * 2 * chans > maxlen) |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
94 break; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
95 |
19120
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
96 if(start + len > sh->a_in_buffer_len) |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
97 { |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
98 int l; |
21531
a90aa203186c
Get rid of min/max macros from aviheader.h, they do not belong here.
reimar
parents:
19286
diff
changeset
|
99 l = FFMIN(sh->a_in_buffer_size - sh->a_in_buffer_len, start + len); |
19120
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
100 l = demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len], l); |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
101 if(! l) |
19159
7945609397b0
in decode_audio() memset(0) unused memory in buf before returning
nicodvb
parents:
19158
diff
changeset
|
102 break; |
19120
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
103 sh->a_in_buffer_len += l; |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
104 continue; |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
105 } |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
106 |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
107 memcpy(&buf[tot], &(sh->a_in_buffer[start]), len); |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
108 tot += len; |
017a563d8d93
prevent buffer underflow; the code is still incorrect and leads to desync but at least it doesn't crash
nicodvb
parents:
18958
diff
changeset
|
109 |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
110 sh->a_in_buffer_len -= start + len; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
111 memmove(sh->a_in_buffer, &(sh->a_in_buffer[start + len]), sh->a_in_buffer_len); |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
112 tot2 += spf * 2 * chans; |
19286 | 113 |
114 /* HACK: seems to fix most A/V sync issues */ | |
115 break; | |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
116 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
117 |
19159
7945609397b0
in decode_audio() memset(0) unused memory in buf before returning
nicodvb
parents:
19158
diff
changeset
|
118 memset(&buf[tot], 0, tot2-tot); |
19157
597866a6793d
the value returned by decode_audio() must be the amount of _decoded_ bytes (finally it's beginning t work: no more toomanypackets... message)
nicodvb
parents:
19120
diff
changeset
|
119 return tot2; |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
120 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
121 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
122 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
123 static int control(sh_audio_t *sh,int cmd,void* arg, ...) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
124 { |
18958
a8e681ad7c90
Remove unused variables, patch by Stefan Huehner stefan at huehner org.
diego
parents:
17397
diff
changeset
|
125 int start, len; |
17397
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
126 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
127 switch(cmd) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
128 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
129 case ADCTRL_RESYNC_STREAM: |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
130 if(mpa_sync(sh, 1, &len, NULL, NULL, NULL, NULL, NULL) >= 0) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
131 return CONTROL_TRUE; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
132 else |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
133 return CONTROL_FALSE; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
134 case ADCTRL_SKIP_FRAME: |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
135 start = mpa_sync(sh, 2, &len, NULL, NULL, NULL, NULL, NULL); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
136 if(len < 0) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
137 return CONTROL_FALSE; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
138 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
139 sh->a_in_buffer_len -= start; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
140 memmove(sh->a_in_buffer, &(sh->a_in_buffer[start]), sh->a_in_buffer_len); |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
141 return CONTROL_TRUE; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
142 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
143 return CONTROL_UNKNOWN; |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
144 } |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
145 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
146 |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
147 static void uninit(sh_audio_t *sh) |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
148 { |
2e20dd653147
ad_hwmpa: pass-through fake audio codec for hardware mpeg decoders
nicodvb
parents:
diff
changeset
|
149 } |