annotate libmpcodecs/ad_speex.c @ 33766:515a3b5f291e

Rename the mplayer() symbolic constants. Use prefix MPLAYER for these constants, rename them and use upper case characters. Additionally, don't unnecessarily 'float' parameter fparam in mplayer() calls.
author ib
date Fri, 08 Jul 2011 21:41:34 +0000
parents 1ff13ad1bc59
children a93891202051
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
1 /*
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
2 * Speex decoder by Reimar Döffinger <Reimar.Doeffinger@stud.uni-karlsruhe.de>
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
3 *
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
4 * This code may be be relicensed under the terms of the GNU LGPL when it
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
5 * becomes part of the FFmpeg project (ffmpeg.org)
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
6 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
7 * This file is part of MPlayer.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
8 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
9 * MPlayer is free software; you can redistribute it and/or modify
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
10 * it under the terms of the GNU General Public License as published by
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
12 * (at your option) any later version.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
13 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
14 * MPlayer is distributed in the hope that it will be useful,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
17 * GNU General Public License for more details.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
18 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
19 * You should have received a copy of the GNU General Public License along
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
20 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
22 */
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 20962
diff changeset
23
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
24 #include "config.h"
18157
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
25 #include <stdlib.h>
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
26 #include <speex/speex.h>
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
27 #include <speex/speex_stereo.h>
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
28 #include <speex/speex_header.h>
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
29 #include "ad_internal.h"
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
30
30504
cc27da5d7286 Mark all ad_info_t/vd_info_t structure declarations as const.
diego
parents: 30421
diff changeset
31 static const ad_info_t info = {
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
32 "Speex audio decoder",
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
33 "speex",
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
34 "Reimar Döffinger",
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
35 "",
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
36 ""
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
37 };
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
38
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
39 LIBAD_EXTERN(speex)
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
40
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
41 typedef struct {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
42 SpeexBits bits;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
43 void *dec_context;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
44 SpeexStereoState stereo;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
45 SpeexHeader *hdr;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
46 } context_t;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
47
18157
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
48 #define MAX_FRAMES_PER_PACKET 100
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
49
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
50 static int preinit(sh_audio_t *sh) {
18157
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
51 sh->audio_out_minsize = 2 * 320 * MAX_FRAMES_PER_PACKET * 2 * sizeof(short);
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
52 return 1;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
53 }
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
54
30842
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
55 static int read_le32(const uint8_t **src) {
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
56 const uint8_t *p = *src;
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
57 *src += 4;
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
58 return p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] << 24);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
59 }
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
60
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
61 static int init(sh_audio_t *sh) {
18879
cc65a585fdcc rm unnecesary casts from void* - part 3
reynaldo
parents: 18157
diff changeset
62 context_t *ctx = calloc(1, sizeof(context_t));
30842
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
63 const uint8_t *hdr = (const uint8_t *)(sh->wf + 1);
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
64 const SpeexMode *spx_mode;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
65 const SpeexStereoState st_st = SPEEX_STEREO_STATE_INIT; // hack
33240
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
66 if (sh->wf && sh->wf->cbSize >= 80)
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
67 ctx->hdr = speex_packet_to_header((char *)&sh->wf[1], sh->wf->cbSize);
30842
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
68 if (!ctx->hdr && sh->wf->cbSize == 0x72 && hdr[0] == 1 && hdr[1] == 0) {
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
69 // speex.acm format: raw SpeexHeader dump
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
70 ctx->hdr = calloc(1, sizeof(*ctx->hdr));
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
71 hdr += 2;
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
72 hdr += 8; // identifier string
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
73 hdr += 20; // version string
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
74 ctx->hdr->speex_version_id = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
75 ctx->hdr->header_size = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
76 ctx->hdr->rate = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
77 ctx->hdr->mode = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
78 ctx->hdr->mode_bitstream_version = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
79 ctx->hdr->nb_channels = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
80 ctx->hdr->bitrate = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
81 ctx->hdr->frame_size = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
82 ctx->hdr->vbr = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
83 ctx->hdr->frames_per_packet = read_le32(&hdr);
482aa22c785e Support extradata format of the speex.acm windows codec formerly available
reimar
parents: 30841
diff changeset
84 }
30841
a1bf34d75484 Fix crash if speex_packet_to_header fails.
reimar
parents: 30633
diff changeset
85 if (!ctx->hdr) {
33240
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
86 mp_msg(MSGT_DECAUDIO, MSGL_ERR, "Invalid or missing extradata! Assuming defaults.\n");
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
87 ctx->hdr = calloc(1, sizeof(*ctx->hdr));
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
88 ctx->hdr->frames_per_packet = 1;
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
89 ctx->hdr->mode = 0;
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
90 if (sh->wf) {
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
91 ctx->hdr->nb_channels = sh->wf->nChannels;
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
92 ctx->hdr->rate = sh->wf->nSamplesPerSec;
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
93 if (ctx->hdr->rate > 16000)
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
94 ctx->hdr->mode = 2;
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
95 else if (ctx->hdr->rate > 8000)
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
96 ctx->hdr->mode = 1;
1ff13ad1bc59 Setup default speex modes, allows decoding of speex in flv which does not
reimar
parents: 32617
diff changeset
97 }
30841
a1bf34d75484 Fix crash if speex_packet_to_header fails.
reimar
parents: 30633
diff changeset
98 }
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
99 if (ctx->hdr->nb_channels != 1 && ctx->hdr->nb_channels != 2) {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
100 mp_msg(MSGT_DECAUDIO, MSGL_WARN, "Invalid number of channels (%i), "
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
101 "assuming mono\n", ctx->hdr->nb_channels);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
102 ctx->hdr->nb_channels = 1;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
103 }
18157
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
104 if (ctx->hdr->frames_per_packet > MAX_FRAMES_PER_PACKET) {
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
105 mp_msg(MSGT_DECAUDIO, MSGL_WARN, "Invalid number of frames per packet (%i), "
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
106 "assuming 1\n", ctx->hdr->frames_per_packet);
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
107 ctx->hdr->frames_per_packet = 1;
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
108 }
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
109 switch (ctx->hdr->mode) {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
110 case 0:
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
111 spx_mode = &speex_nb_mode; break;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
112 case 1:
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
113 spx_mode = &speex_wb_mode; break;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
114 case 2:
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
115 spx_mode = &speex_uwb_mode; break;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
116 default:
18157
2c7219c38e56 bug fixes: left-over mode variable used uninitialized,
reimar
parents: 17429
diff changeset
117 mp_msg(MSGT_DECAUDIO, MSGL_WARN, "Unknown speex mode (%i)\n", ctx->hdr->mode);
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
118 spx_mode = &speex_nb_mode;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
119 }
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
120 ctx->dec_context = speex_decoder_init(spx_mode);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
121 speex_bits_init(&ctx->bits);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
122 memcpy(&ctx->stereo, &st_st, sizeof(ctx->stereo)); // hack part 2
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
123 sh->channels = ctx->hdr->nb_channels;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
124 sh->samplerate = ctx->hdr->rate;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
125 sh->samplesize = 2;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
126 sh->sample_format = AF_FORMAT_S16_NE;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
127 sh->context = ctx;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
128 return 1;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
129 }
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
130
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
131 static void uninit(sh_audio_t *sh) {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
132 context_t *ctx = sh->context;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
133 if (ctx) {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
134 speex_bits_destroy(&ctx->bits);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
135 speex_decoder_destroy(ctx->dec_context);
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 30842
diff changeset
136 free(ctx->hdr);
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
137 free(ctx);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
138 }
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
139 ctx = NULL;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
140 }
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
141
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
142 static int decode_audio(sh_audio_t *sh, unsigned char *buf,
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
143 int minlen, int maxlen) {
32617
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
144 double pts;
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
145 context_t *ctx = sh->context;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
146 int len, framelen, framesamples;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
147 char *packet;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
148 int i, err;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
149 speex_decoder_ctl(ctx->dec_context, SPEEX_GET_FRAME_SIZE, &framesamples);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
150 framelen = framesamples * ctx->hdr->nb_channels * sizeof(short);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
151 if (maxlen < ctx->hdr->frames_per_packet * framelen) {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
152 mp_msg(MSGT_DECAUDIO, MSGL_V, "maxlen too small in decode_audio\n");
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
153 return -1;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
154 }
32617
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
155 len = ds_get_packet_pts(sh->ds, (unsigned char **)&packet, &pts);
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
156 if (len <= 0) return -1;
32617
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
157 if (sh->pts == MP_NOPTS_VALUE)
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
158 sh->pts = 0;
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
159 if (pts != MP_NOPTS_VALUE) {
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
160 sh->pts = pts;
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
161 sh->pts_bytes = 0;
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
162 }
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
163 speex_bits_read_from(&ctx->bits, packet, len);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
164 i = ctx->hdr->frames_per_packet;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
165 do {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
166 err = speex_decode_int(ctx->dec_context, &ctx->bits, (short *)buf);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
167 if (err == -2)
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
168 mp_msg(MSGT_DECAUDIO, MSGL_ERR, "Error decoding file.\n");
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
169 if (ctx->hdr->nb_channels == 2)
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
170 speex_decode_stereo_int((short *)buf, framesamples, &ctx->stereo);
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
171 buf = &buf[framelen];
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
172 } while (--i > 0);
32617
1baaacf00bbb Improve speex codec pts handling, make audio timestamps work reasonably
reimar
parents: 32602
diff changeset
173 sh->pts_bytes += ctx->hdr->frames_per_packet * framelen;
16916
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
174 return ctx->hdr->frames_per_packet * framelen;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
175 }
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
176
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
177 static int control(sh_audio_t *sh, int cmd, void *arg, ...) {
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
178 return CONTROL_UNKNOWN;
56f3945e2a61 Speex audio decoding
reimar
parents:
diff changeset
179 }