annotate src/madplug/decoder.c @ 2545:585f2fc4134e

MIDI files were never properly supported (and probably shouldn't be, because we have separate and working plugins for handling MIDI files), thus references to MIDI are removed.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 30 Apr 2008 05:01:37 +0300
parents bad05467e8e0
children f1b6f1b2cdb3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
1 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
2 * mad plugin for audacious
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
3 * Copyright (C) 2005-2007 William Pitcock, Yoshiki Yazawa
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
4 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
5 * Portions derived from xmms-mad:
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
6 * Copyright (C) 2001-2002 Sam Clegg - See COPYING
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
7 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
10 * the Free Software Foundation; under version 2 of the License.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
11 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
15 * GNU General Public License for more details.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
16 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
20 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
21
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
22 /* #define AUD_DEBUG 1 */
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
23
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
24 #include <math.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
25 #include <assert.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
26
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
27 #include <audacious/plugin.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
28 #include "plugin.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
29 #include "input.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
30
2514
bad05467e8e0 A numeric #define with an expression not enclosed in parentheses is dangerous.
Matti Hamalainen <ccr@tnsp.org>
parents: 2491
diff changeset
31 #define BUFFER_SIZE (16*1024)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
32 #define N_AVERAGE_FRAMES 10
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
33
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
34 void
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
35 write_output(struct mad_info_t *info, struct mad_pcm *pcm,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
36 struct mad_header *header)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
37 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
38 unsigned int nsamples;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
39 mad_fixed_t const *left_ch, *right_ch;
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
40 mad_fixed_t *output;
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
41 int outlen = 0;
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
42 int outbyte = 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
43 int pos = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
44
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
45 nsamples = pcm->length;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
46 left_ch = pcm->samples[0];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
47 right_ch = pcm->samples[1];
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
48 outlen = nsamples * MAD_NCHANNELS(header);
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
49 outbyte = outlen * sizeof(mad_fixed_t);
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
50
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
51 output = (mad_fixed_t *) g_malloc(outbyte);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
52
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
53 while (nsamples--) {
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
54 output[pos++] = *left_ch++;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
55
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
56 if (MAD_NCHANNELS(header) == 2) {
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
57 output[pos++] = *right_ch++;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
58 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
59 }
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
60
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
61 assert(pos == outlen);
2287
2421c87fb855 Fix memory leak in mad plugin when changing songs and writing output. (Bugzilla #82)
Jussi Judin <jjudin+audacious@iki.fi>
parents: 2276
diff changeset
62 if (!info->playback->playing) {
2421c87fb855 Fix memory leak in mad plugin when changing songs and writing output. (Bugzilla #82)
Jussi Judin <jjudin+audacious@iki.fi>
parents: 2276
diff changeset
63 g_free(output);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
64 return;
2287
2421c87fb855 Fix memory leak in mad plugin when changing songs and writing output. (Bugzilla #82)
Jussi Judin <jjudin+audacious@iki.fi>
parents: 2276
diff changeset
65 }
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
66
1998
8f3188746b64 chase last changeset in aud
William Pitcock <nenolod@atheme.org>
parents: 1985
diff changeset
67 info->playback->pass_audio(info->playback,
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
68 info->fmt, MAD_NCHANNELS(header), outbyte, output,
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
69 &(info->playback->playing));
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
70 g_free(output);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
71 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
72
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
73 /**
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
74 * Decode all headers in the file and fill in stats
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
75 * @return FALSE if scan failed.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
76 */
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
77 gboolean
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
78 scan_file(struct mad_info_t * info, gboolean fast)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
79 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
80 struct mad_stream stream;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
81 struct mad_header header;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
82 int remainder = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
83 int data_used = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
84 int len = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
85 int tagsize = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
86 unsigned char buffer[BUFFER_SIZE];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
87 struct mad_frame frame; /* to read xing data */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
88 gboolean has_xing = FALSE;
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
89 guint bitrate_frames = 0;
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
90 double xing_bitrate = 0.0;
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
91 double accum_bitrate = 0.0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
92
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
93 mad_stream_init(&stream);
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
94 mad_stream_options(&stream, 0); // check CRC
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
95 mad_header_init(&header);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
96 mad_frame_init(&frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
97 xing_init(&info->xing);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
98
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
99 info->bitrate = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
100 info->pos = mad_timer_zero;
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
101 info->duration = mad_timer_zero; // should be cleared before loop, if we use it as break condition.
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
102
997
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
103 if(info->fileinfo_request == TRUE) {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1687
diff changeset
104 aud_tuple_associate_int(info->tuple, FIELD_LENGTH, NULL, -1);
997
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
105 info->fileinfo_request = FALSE;
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
106 }
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
107
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
108 AUDDBG("f: scan_file\n");
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
109 AUDDBG("scan_file frames = %d\n", info->frames);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
110
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
111 while (1) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
112 remainder = stream.bufend - stream.next_frame;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
113
2415
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
114 if(buffer != stream.this_frame && remainder)
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
115 memmove(buffer, stream.this_frame, remainder);
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
116
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
117 len = input_get_data(info, buffer + remainder,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
118 BUFFER_SIZE - remainder);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
119
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
120 if (len <= 0) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
121 AUDDBG("scan_file: len <= 0 len = %d\n", len);
792
2b2313fc1ddc [svn] - I was noticed vfs_fread check still causes problem. disable for now.
yaz
parents: 789
diff changeset
122 break;
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
123 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
124
2415
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
125 mad_stream_buffer(&stream, buffer, remainder + len);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
126
674
fadf4c18a1cf [svn] madplug bug fix:
yaz
parents: 673
diff changeset
127 while (!fast || (fast && info->frames < N_AVERAGE_FRAMES)) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
128 if (mad_header_decode(&header, &stream) == -1) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
129 if (stream.error == MAD_ERROR_BUFLEN) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
130 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
131 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
132 if (!MAD_RECOVERABLE(stream.error)) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
133 AUDDBG("(fatal) error decoding header %d: %s\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
134 info->frames, mad_stream_errorstr(&stream));
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
135 AUDDBG("remainder = %d\n", remainder);
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
136 AUDDBG("len = %d\n", len);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
137 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
138 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
139 if (stream.error == MAD_ERROR_LOSTSYNC) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
140 /* ignore LOSTSYNC due to ID3 tags */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
141 tagsize = id3_tag_query(stream.this_frame,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
142 stream.bufend -
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
143 stream.this_frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
144 if (tagsize > 0) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
145 AUDDBG("skipping id3_tag: %d\n", tagsize);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
146 mad_stream_skip(&stream, tagsize);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
147 continue;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
148 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
149 }
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
150
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
151 AUDDBG("(recovered) error decoding header %d: %s\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
152 info->frames, mad_stream_errorstr(&stream));
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
153 AUDDBG("remainder = %d\n", remainder);
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
154 AUDDBG("len = %d\n", len);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
155
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
156 continue;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
157 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
158 info->frames++;
674
fadf4c18a1cf [svn] madplug bug fix:
yaz
parents: 673
diff changeset
159
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
160 #ifdef DEBUG_INTENSIVELY
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
161 AUDDBG("header bitrate = %ld\n", header.bitrate);
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
162 AUDDBG("duration = %ul\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
163 mad_timer_count(header.duration,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
164 MAD_UNITS_MILLISECONDS));
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
165 AUDDBG("size = %d\n", stream.next_frame - stream.this_frame);
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
166 #endif
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1687
diff changeset
167 if(aud_tuple_get_int(info->tuple, FIELD_LENGTH, NULL) == -1)
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
168 mad_timer_add(&info->duration, header.duration);
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
169 else {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1687
diff changeset
170 gint length = aud_tuple_get_int(info->tuple, FIELD_LENGTH, NULL);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
171
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
172 info->duration.seconds = length / 1000;
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
173 info->duration.fraction = length % 1000;
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
174 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
175 data_used += stream.next_frame - stream.this_frame;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
176 if (info->frames == 1) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
177 /* most of these *should* remain constant */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
178 info->bitrate = header.bitrate;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
179 info->freq = header.samplerate;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
180 info->channels = MAD_NCHANNELS(&header);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
181 info->mpeg_layer = header.layer;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
182 info->mode = header.mode;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
183
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
184 if (audmad_config->use_xing) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
185 frame.header = header;
674
fadf4c18a1cf [svn] madplug bug fix:
yaz
parents: 673
diff changeset
186 if (mad_frame_decode(&frame, &stream) == -1) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
187 AUDDBG("xing frame decode failed\n");
674
fadf4c18a1cf [svn] madplug bug fix:
yaz
parents: 673
diff changeset
188 goto no_xing;
fadf4c18a1cf [svn] madplug bug fix:
yaz
parents: 673
diff changeset
189 }
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
190 if (xing_parse(&info->xing, stream.anc_ptr, stream.anc_bitlen) == 0) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
191 AUDDBG("xing header found\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
192 has_xing = TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
193 info->vbr = TRUE; /* otherwise xing header would have been 'Info' */
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
194
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
195 AUDDBG("xing: bytes = %ld frames = %ld\n", info->xing.bytes, info->xing.frames);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
196
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
197 /* we have enough info to calculate bitrate and duration */
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
198 if(info->xing.bytes && info->xing.frames) {
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
199 xing_bitrate = 8 * (double)info->xing.bytes * 38 / (double)info->xing.frames; //38fps in MPEG1.
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
200 #ifdef AUD_DEBUG
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
201 {
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
202 gint tmp = (gint)(info->xing.bytes * 8 / xing_bitrate);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
203 AUDDBG("xing: bitrate = %4.1f kbps\n", xing_bitrate / 1000);
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
204 AUDDBG("xing: duration = %d:%02d\n", tmp / 60, tmp % 60);
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
205 }
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
206 #endif
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
207 }
959
b2fbf53360cf [svn] bug fix for #897
yaz
parents: 925
diff changeset
208 continue;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
209 }
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
210 #ifdef AUD_DEBUG
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
211 else {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
212 AUDDBG("no usable xing header\n");
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
213 continue;
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
214 }
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
215 #endif
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
216 } /* xing */
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
217
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
218 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
219 else {
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
220 /* perhaps we have a VBR file */
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
221 if (info->bitrate != header.bitrate)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
222 info->vbr = TRUE;
673
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
223 if (info->vbr) {
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
224 accum_bitrate += (double)header.bitrate;
673
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
225 bitrate_frames++;
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
226 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
227 /* check for changin layer/samplerate/channels */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
228 if (info->mpeg_layer != header.layer)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
229 g_warning("layer varies!!");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
230 if (info->freq != header.samplerate)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
231 g_warning("samplerate varies!!");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
232 if (info->channels != MAD_NCHANNELS(&header))
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
233 g_warning("number of channels varies!!");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
234 }
674
fadf4c18a1cf [svn] madplug bug fix:
yaz
parents: 673
diff changeset
235 no_xing:
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
236 if (fast && info->frames >= N_AVERAGE_FRAMES) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
237 float frame_size = ((double) data_used) / N_AVERAGE_FRAMES;
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
238
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
239 AUDDBG("bitrate = %ld samplerate = %d\n", header.bitrate, header.samplerate);
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
240 AUDDBG("data_used = %d info->frames = %d info->size = %d tagsize = %d frame_size = %lf\n",
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
241 data_used, info->frames, info->size, tagsize, frame_size);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
242
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
243 if(info->size != 0)
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
244 info->frames = (info->size - tagsize) / frame_size;
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
245
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
246 AUDDBG("info->frames = %d\n", info->frames);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
247
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1687
diff changeset
248 if(aud_tuple_get_int(info->tuple, FIELD_LENGTH, NULL) == -1) {
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
249 if(xing_bitrate > 0.0) {
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
250 /* calc duration with xing info */
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
251 double tmp = 8 * (double)info->xing.bytes * 1000 / xing_bitrate;
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
252 info->duration.seconds = (guint)(tmp / 1000);
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
253 info->duration.fraction = (guint)(tmp - info->duration.seconds * 1000);
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
254 }
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
255 else {
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
256 info->duration.seconds /= N_AVERAGE_FRAMES;
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
257 info->duration.fraction /= N_AVERAGE_FRAMES;
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
258 mad_timer_multiply(&info->duration, info->frames);
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
259 }
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
260 }
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
261 else {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1687
diff changeset
262 gint length = aud_tuple_get_int(info->tuple, FIELD_LENGTH, NULL);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
263
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
264 info->duration.seconds = length / 1000;
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
265 info->duration.fraction = length % 1000;
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
266 }
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
267 #ifdef AUD_DEBUG
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
268 AUDDBG("using fast playtime calculation\n");
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
269 AUDDBG("data used = %d [tagsize=%d framesize=%f]\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
270 data_used, tagsize, frame_size);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
271 AUDDBG("frames = %d, frequency = %d, channels = %d\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
272 info->frames, info->freq, info->channels);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
273 long millis = mad_timer_count(info->duration,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
274 MAD_UNITS_MILLISECONDS);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
275 AUDDBG("duration = %ld:%02ld\n", millis / 1000 / 60, (millis / 1000) % 60);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
276 #endif /* DEBUG */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
277 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
278 }
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
279 } /* while */
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
280 if (stream.error != MAD_ERROR_BUFLEN)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
281 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
282 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
283
997
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
284 if (info->xing.frames)
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
285 info->frames = info->xing.frames;
e46b98155d5d [svn] - fix a bug which counts number of frames twice in handling xing header.
yaz
parents: 980
diff changeset
286
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
287 if (info->vbr && xing_bitrate != 0) {
1162
29519d604e8c [svn] - revise bitrate calculation with xing header. if number of bytes and number of frames are available in xing header, fast play time calculation yields almost appropriate duration upon a vbr file.
yaz
parents: 997
diff changeset
288 info->bitrate = (guint)xing_bitrate;
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
289 }
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
290 else if (info->vbr && xing_bitrate == 0 && bitrate_frames != 0) {
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
291 info->bitrate = accum_bitrate / bitrate_frames;
959
b2fbf53360cf [svn] bug fix for #897
yaz
parents: 925
diff changeset
292 }
2340
47d7a45b26a0 fixed ${bitrate} in title string
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2287
diff changeset
293
47d7a45b26a0 fixed ${bitrate} in title string
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2287
diff changeset
294 aud_tuple_associate_int(info->tuple, FIELD_BITRATE, NULL, info->bitrate / 1000);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
295
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
296 mad_frame_finish(&frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
297 mad_header_finish(&header);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
298 mad_stream_finish(&stream);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
299 xing_finish(&info->xing);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
300
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
301 AUDDBG("scan_file: info->frames = %d\n", info->frames);
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
302 AUDDBG("e: scan_file\n");
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
303
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
304 return (info->frames != 0 || info->remote == TRUE);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
305 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
306
980
6ba4a4bfd127 [svn] - fix overflow when calculates bitrate with non-fast scan on a huge sized file.
yaz
parents: 959
diff changeset
307 /* sanity check for audio open parameters */
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
308 static gboolean
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
309 check_audio_param(struct mad_info_t *info)
896
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
310 {
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
311 if(info->fmt != FMT_FIXED32 && (info->fmt < FMT_U8 || info->fmt > FMT_S16_NE))
896
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
312 return FALSE;
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
313 if(info->freq < 0) // not sure about maximum frequency. --yaz
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
314 return FALSE;
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
315 if(info->channels < 1 || info->channels > 2)
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
316 return FALSE;
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
317
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
318 return TRUE;
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
319 }
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
320
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
321 gpointer
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
322 decode_loop(gpointer arg)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
323 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
324 unsigned char buffer[BUFFER_SIZE];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
325 int len;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
326 gboolean seek_skip = FALSE;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
327 int remainder = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
328 gint tlen;
673
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
329 unsigned int iteration = 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
330
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
331 /* mad structs */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
332 struct mad_stream stream;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
333 struct mad_frame frame;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
334 struct mad_synth synth;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
335
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
336 /* track info is passed in as thread argument */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
337 struct mad_info_t *info = (struct mad_info_t *) arg;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
338
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
339 AUDDBG("f: decode\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
340
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
341 /* init mad stuff */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
342 mad_frame_init(&frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
343 mad_stream_init(&stream);
925
3673bbab7372 [svn] - make madplug ignore crc error. closes #884.
yaz
parents: 924
diff changeset
344 mad_stream_options(&stream, MAD_OPTION_IGNORECRC);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
345 mad_synth_init(&synth);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
346
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
347 if(!info->playback){
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
348 AUDDBG("decode: playback == NULL\n");
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
349 return NULL;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
350 }
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
351
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
352 AUDDBG("decode: fmt = %d freq = %d channels = %d\n", info->fmt, info->freq, info->channels);
896
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
353
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
354 if(check_audio_param(info) == FALSE)
793
98cdc39031f9 [svn] - add sanity check for open audio parameters.
yaz
parents: 792
diff changeset
355 return NULL;
896
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
356
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
357 if (!info->playback->output->open_audio(info->fmt, info->freq, info->channels)) {
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
358 g_mutex_lock(pb_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
359 info->playback->error = TRUE;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
360 info->playback->eof = 1;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
361 g_mutex_unlock(pb_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
362 g_message("failed to open audio output: %s",
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
363 info->playback->output->description);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
364 return NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
365 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
366
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
367 /* set mainwin title */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
368 if (info->title)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
369 g_free(info->title);
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
370 info->title = aud_tuple_formatter_make_title_string(info->tuple, audmad_config->title_override == TRUE ?
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
371 audmad_config->id3_format : aud_get_gentitle_format());
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1344
diff changeset
372
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
373 tlen = (gint) mad_timer_count(info->duration, MAD_UNITS_MILLISECONDS),
1985
a260bd1beef0 use set_params() in madplug
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
374 info->playback->set_params(info->playback, info->title,
778
209b08a3eff6 [svn] - hide seek bar for unseekable (info->size = 0) stream.
yaz
parents: 773
diff changeset
375 (tlen == 0 || info->size <= 0) ? -1 : tlen,
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
376 info->bitrate, info->freq, info->channels);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
377
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
378 AUDDBG("decode: tlen = %d\n", tlen);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
379
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
380 /* main loop */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
381 do {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
382 if (!info->playback->playing) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
383 AUDDBG("decode: stop signaled\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
384 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
385 }
2415
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
386
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
387 if (seek_skip)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
388 remainder = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
389 else {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
390 remainder = stream.bufend - stream.next_frame;
2415
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
391 if(buffer != stream.this_frame && remainder)
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
392 memmove(buffer, stream.this_frame, remainder);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
393 }
2415
4fb714073ae4 fix for bug #150:
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2390
diff changeset
394
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
395 len = input_get_data(info, buffer + remainder,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
396 BUFFER_SIZE - remainder);
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
397
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
398 input_process_remote_metadata(info);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
399
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
400 if (len <= 0) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
401 AUDDBG("finished decoding\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
402 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
403 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
404 len += remainder;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
405 if (len < MAD_BUFFER_GUARD) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
406 int i;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
407 for (i = len; i < MAD_BUFFER_GUARD; i++)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
408 buffer[i] = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
409 len = MAD_BUFFER_GUARD;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
410 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
411
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
412 mad_stream_buffer(&stream, buffer, len);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
413
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
414 if (seek_skip) {
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
415
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
416 AUDDBG("skipping: %d\n", seek_skip);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
417
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
418 int skip = 2;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
419 do {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
420 if (mad_frame_decode(&frame, &stream) == 0) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
421 mad_timer_add(&info->pos, frame.header.duration);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
422 if (--skip == 0)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
423 mad_synth_frame(&synth, &frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
424 }
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
425 else if (!MAD_RECOVERABLE(stream.error)) {
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
426 g_mutex_lock(pb_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
427 info->playback->error = TRUE;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
428 info->playback->eof = 1;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
429 g_mutex_unlock(pb_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
430 break;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
431 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
432 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
433 while (skip);
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
434 seek_skip = FALSE;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
435 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
436
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
437 while (info->playback->playing) {
778
209b08a3eff6 [svn] - hide seek bar for unseekable (info->size = 0) stream.
yaz
parents: 773
diff changeset
438 if (info->seek != -1 && info->size > 0) {
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
439
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
440 AUDDBG("seeking: %ld\n", info->seek);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
441
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
442 int new_position;
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
443 gulong milliseconds =
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
444 mad_timer_count(info->duration, MAD_UNITS_MILLISECONDS);
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
445 if (info->seek >= milliseconds)
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
446 info->seek = milliseconds;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
447
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
448 mad_timer_set(&info->pos, 0, info->seek, 1000); // in millisecond
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
449 new_position =
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
450 ((double) info->seek / (double) milliseconds) * info->size;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
451
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
452 if(new_position < 0)
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
453 new_position = 0;
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
454
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
455 AUDDBG("seeking to: %d bytes\n", new_position);
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
456
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
457 if (aud_vfs_fseek(info->infile, new_position, SEEK_SET) == -1)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
458 audmad_error("failed to seek to: %d", new_position);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
459 mad_frame_mute(&frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
460 mad_synth_mute(&synth);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
461 stream.error = MAD_ERROR_BUFLEN;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
462 info->playback->output->flush(mad_timer_count(info->pos, MAD_UNITS_MILLISECONDS));
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
463 stream.sync = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
464 info->seek = -1;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
465 seek_skip = TRUE;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
466 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
467 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
468
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
469 if (mad_header_decode(&frame.header, &stream) == -1) {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
470 if (!MAD_RECOVERABLE(stream.error)) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
471 break;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
472 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
473 if (stream.error == MAD_ERROR_LOSTSYNC) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
474 /* ignore LOSTSYNC due to ID3 tags */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
475 int tagsize = id3_tag_query(stream.this_frame,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
476 stream.bufend -
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
477 stream.this_frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
478 if (tagsize > 0) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
479 mad_stream_skip(&stream, tagsize);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
480 continue;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
481 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
482 }
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
483
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
484 AUDDBG("(recovered) error decoding header %d: %s\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
485 info->current_frame,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
486 mad_stream_errorstr(&stream));
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
487
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
488 continue;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
489 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
490
673
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
491 info->bitrate = frame.header.bitrate;
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
492
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
493 if (!audmad_config->show_avg_vbr_bitrate && info->vbr && (iteration % 40 == 0)) {
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
494
784
5ddfe9eac8ee [svn] - fix read_replaygain(). necessary fseek was missing in reuse fd code. closes #843.
yaz
parents: 783
diff changeset
495 #ifdef DEBUG_INTENSIVELY
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
496 AUDDBG("decode vbr tlen = %d\n", tlen);
784
5ddfe9eac8ee [svn] - fix read_replaygain(). necessary fseek was missing in reuse fd code. closes #843.
yaz
parents: 783
diff changeset
497 #endif
1985
a260bd1beef0 use set_params() in madplug
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
498 info->playback->set_params(info->playback, info->title,
778
209b08a3eff6 [svn] - hide seek bar for unseekable (info->size = 0) stream.
yaz
parents: 773
diff changeset
499 (tlen == 0 || info->size <= 0) ? -1 : tlen,
673
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
500 info->bitrate, info->freq, info->channels);
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
501 }
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
502 iteration++;
8ed0af226d0e [svn] - calculate vbr bitrate properly.
yaz
parents: 627
diff changeset
503
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
504 if (mad_frame_decode(&frame, &stream) == -1) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
505 if (!MAD_RECOVERABLE(stream.error))
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
506 break;
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
507
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
508 AUDDBG("(recovered) error decoding frame %d: %s\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
509 info->current_frame,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
510 mad_stream_errorstr(&stream));
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
511
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
512 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
513
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
514 info->current_frame++;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
515
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
516 if (info->freq != frame.header.samplerate
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
517 || info->channels !=
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
518 (guint) MAD_NCHANNELS(&frame.header)) {
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
519
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
520 AUDDBG("change in audio type detected\n");
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
521 AUDDBG("old: frequency = %d, channels = %d\n", info->freq,
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
522 info->channels);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
523 AUDDBG("new: frequency = %d, channels = %d\n",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
524 frame.header.samplerate,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
525 (guint) MAD_NCHANNELS(&frame.header));
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
526
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
527 info->freq = frame.header.samplerate;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
528 info->channels = MAD_NCHANNELS(&frame.header);
794
93dbfe1f0cd0 [svn] - same sanity check on rarely executed part.
yaz
parents: 793
diff changeset
529
2341
59addab003d7 - reworked replaygain to use individual pre-gain for the files with RG info and the rest.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2340
diff changeset
530 if(audmad_config->force_reopen_audio && check_audio_param(info)) {
916
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
531 gint current_time = info->playback->output->output_time();
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
532
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
533 AUDDBG("re-opening audio due to change in audio type\n");
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
534
916
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
535 info->playback->output->close_audio();
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
536 if (!info->playback->output->open_audio(info->fmt, info->freq,
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
537 info->channels)) {
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
538 g_mutex_lock(pb_mutex);
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
539 info->playback->error = TRUE;
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
540 info->playback->eof = 1;
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
541 g_mutex_unlock(pb_mutex);
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
542 g_message("failed to re-open audio output: %s",
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
543 info->playback->output->description);
916
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
544 return NULL;
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
545 }
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
546 // restore time and advance 0.5sec
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
547 info->seek = current_time + 500;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
548 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
549 }
916
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 896
diff changeset
550
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
551 if (!info->playback->playing)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
552 break;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
553 mad_synth_frame(&synth, &frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
554 mad_stream_sync(&stream);
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
555
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
556 write_output(info, &synth.pcm, &frame.header);
2390
bd9673d8b7d5 converted to new sound engine scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2344
diff changeset
557
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
558 mad_timer_add(&info->pos, frame.header.duration);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
559 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
560 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
561 while (stream.error == MAD_ERROR_BUFLEN);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
562
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
563 /* free mad stuff */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
564 mad_frame_finish(&frame);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
565 mad_stream_finish(&stream);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
566 mad_synth_finish(&synth);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
567
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
568 if (info->playback->playing) {
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
569 GTimeVal sleeptime;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
570
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
571 info->playback->output->buffer_free();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
572 info->playback->output->buffer_free();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
573 while (info->playback->output->buffer_playing()) {
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
574
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
575 AUDDBG("f: buffer_playing=%d\n", info->playback->output->buffer_playing());
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
576
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
577 g_get_current_time(&sleeptime);
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
578 g_time_val_add(&sleeptime, 500000);
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 794
diff changeset
579
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
580 g_mutex_lock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
581 g_cond_timed_wait(mad_cond, mad_mutex, &sleeptime);
896
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
582 g_mutex_unlock(mad_mutex);
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
583 if (!info->playback->playing) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
584 break;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
585 }
896
f0846bdd9de6 [svn] - small cleanups.
yaz
parents: 807
diff changeset
586
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
587 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
588 }
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2055
diff changeset
589
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
590 AUDDBG("e: decode\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
591
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1687
diff changeset
592 aud_tuple_free(info->tuple);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
593 info->tuple = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
594
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
595 info->playback->output->close_audio();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
596 g_mutex_lock(mad_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
597 info->playback->playing = 0;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
598 g_mutex_unlock(mad_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
599 return NULL; /* dummy */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
600 }