Similar to the previous patch: pass total_time instead of manipulating
dc->totalTime directly.
---

 src/decoder_api.c                   |    5 ++++-
 src/decoder_api.h                   |    3 ++-
 src/inputPlugins/_flac_common.c     |    2 +-
 src/inputPlugins/_flac_common.h     |    1 +
 src/inputPlugins/aac_plugin.c       |    5 ++---
 src/inputPlugins/audiofile_plugin.c |    8 ++++----
 src/inputPlugins/flac_plugin.c      |    2 +-
 src/inputPlugins/mod_plugin.c       |    3 +--
 src/inputPlugins/mp3_plugin.c       |    4 +---
 src/inputPlugins/mp4_plugin.c       |    7 ++++---
 src/inputPlugins/mpc_plugin.c       |    5 ++---
 src/inputPlugins/oggflac_plugin.c   |    2 +-
 src/inputPlugins/oggvorbis_plugin.c |    9 +++++----
 src/inputPlugins/wavpack_plugin.c   |    4 ++--
 14 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/src/decoder_api.c b/src/decoder_api.c
index 9583c74..3c0e0ea 100644
--- a/src/decoder_api.c
+++ b/src/decoder_api.c
@@ -25,7 +25,8 @@
 #include "gcc.h"
 
 void decoder_initialized(mpd_unused struct decoder * decoder,
-                        const AudioFormat * audio_format)
+                        const AudioFormat * audio_format,
+                        float total_time)
 {
        assert(dc.state == DECODE_STATE_START);
 
@@ -35,6 +36,8 @@ void decoder_initialized(mpd_unused struct decoder * decoder,
                                     &(ob.audioFormat));
        }
 
+       dc.totalTime = total_time;
+
        dc.state = DECODE_STATE_DECODE;
        notify_signal(&pc.notify);
 }
diff --git a/src/decoder_api.h b/src/decoder_api.h
index eb2ca38..ba61af5 100644
--- a/src/decoder_api.h
+++ b/src/decoder_api.h
@@ -41,7 +41,8 @@ struct decoder;
  * that it has read the song's meta data.
  */
 void decoder_initialized(struct decoder * decoder,
-                        const AudioFormat * audio_format);
+                        const AudioFormat * audio_format,
+                        float total_time);
 
 /**
  * This function is called by the decoder plugin when it has
diff --git a/src/inputPlugins/_flac_common.c b/src/inputPlugins/_flac_common.c
index c48f43d..e658d77 100644
--- a/src/inputPlugins/_flac_common.c
+++ b/src/inputPlugins/_flac_common.c
@@ -165,7 +165,7 @@ void flac_metadata_common_cb(const FLAC__StreamMetadata * 
block,
                data->audio_format.bits = (mpd_sint8)si->bits_per_sample;
                data->audio_format.sampleRate = si->sample_rate;
                data->audio_format.channels = (mpd_sint8)si->channels;
-               dc.totalTime = ((float)si->total_samples) / (si->sample_rate);
+               data->total_time = ((float)si->total_samples) / 
(si->sample_rate);
                break;
        case FLAC__METADATA_TYPE_VORBIS_COMMENT:
                flacParseReplayGain(block, data);
diff --git a/src/inputPlugins/_flac_common.h b/src/inputPlugins/_flac_common.h
index e87ae93..21f7106 100644
--- a/src/inputPlugins/_flac_common.h
+++ b/src/inputPlugins/_flac_common.h
@@ -144,6 +144,7 @@ typedef struct {
        float time;
        unsigned int bitRate;
        AudioFormat audio_format;
+       float total_time;
        FLAC__uint64 position;
        struct decoder *decoder;
        InputStream *inStream;
diff --git a/src/inputPlugins/aac_plugin.c b/src/inputPlugins/aac_plugin.c
index 4fa54c6..f2d1510 100644
--- a/src/inputPlugins/aac_plugin.c
+++ b/src/inputPlugins/aac_plugin.c
@@ -338,8 +338,6 @@ static int aac_decode(struct decoder * mpd_decoder, char 
*path)
 
        audio_format.bits = 16;
 
-       dc.totalTime = totalTime;
-
        file_time = 0.0;
 
        advanceAacBuffer(&b, bread);
@@ -372,7 +370,8 @@ static int aac_decode(struct decoder * mpd_decoder, char 
*path)
                if (dc.state != DECODE_STATE_DECODE) {
                        audio_format.channels = frameInfo.channels;
                        audio_format.sampleRate = sampleRate;
-                       decoder_initialized(mpd_decoder, &audio_format);
+                       decoder_initialized(mpd_decoder, &audio_format,
+                                           totalTime);
                }
 
                advanceAacBuffer(&b, frameInfo.bytesconsumed);
diff --git a/src/inputPlugins/audiofile_plugin.c 
b/src/inputPlugins/audiofile_plugin.c
index f96ea2f..a50061d 100644
--- a/src/inputPlugins/audiofile_plugin.c
+++ b/src/inputPlugins/audiofile_plugin.c
@@ -46,6 +46,7 @@ static int audiofile_decode(struct decoder * decoder, char 
*path)
        AFfilehandle af_fp;
        int bits;
        AudioFormat audio_format;
+       float total_time;
        mpd_uint16 bitRate;
        struct stat st;
 
@@ -71,10 +72,9 @@ static int audiofile_decode(struct decoder * decoder, char 
*path)
 
        frame_count = afGetFrameCount(af_fp, AF_DEFAULT_TRACK);
 
-       dc.totalTime =
-           ((float)frame_count / (float)audio_format.sampleRate);
+       total_time = ((float)frame_count / (float)audio_format.sampleRate);
 
-       bitRate = (mpd_uint16)(st.st_size * 8.0 / dc.totalTime / 1000.0 + 0.5);
+       bitRate = (mpd_uint16)(st.st_size * 8.0 / total_time / 1000.0 + 0.5);
 
        if (audio_format.bits != 8 && audio_format.bits != 16) {
                ERROR("Only 8 and 16-bit files are supported. %s is %i-bit\n",
@@ -85,7 +85,7 @@ static int audiofile_decode(struct decoder * decoder, char 
*path)
 
        fs = (int)afGetVirtualFrameSize(af_fp, AF_DEFAULT_TRACK, 1);
 
-       decoder_initialized(decoder, &audio_format);
+       decoder_initialized(decoder, &audio_format, total_time);
 
        {
                int ret, eof = 0, current = 0;
diff --git a/src/inputPlugins/flac_plugin.c b/src/inputPlugins/flac_plugin.c
index f5d5469..f94e39d 100644
--- a/src/inputPlugins/flac_plugin.c
+++ b/src/inputPlugins/flac_plugin.c
@@ -415,7 +415,7 @@ static int flac_decode_internal(struct decoder * decoder,
                }
        }
 
-       decoder_initialized(decoder, &data.audio_format);
+       decoder_initialized(decoder, &data.audio_format, data.total_time);
 
        while (1) {
                if (!flac_process_single(flacDec))
diff --git a/src/inputPlugins/mod_plugin.c b/src/inputPlugins/mod_plugin.c
index 4ab1338..179dc70 100644
--- a/src/inputPlugins/mod_plugin.c
+++ b/src/inputPlugins/mod_plugin.c
@@ -176,7 +176,6 @@ static int mod_decode(struct decoder * decoder, char *path)
                return -1;
        }
 
-       dc.totalTime = 0;
        audio_format.bits = 16;
        audio_format.sampleRate = 44100;
        audio_format.channels = 2;
@@ -185,7 +184,7 @@ static int mod_decode(struct decoder * decoder, char *path)
            1.0 / ((audio_format.bits * audio_format.channels / 8.0) *
                   (float)audio_format.sampleRate);
 
-       decoder_initialized(decoder, &audio_format);
+       decoder_initialized(decoder, &audio_format, 0);
 
        while (1) {
                if (dc.command == DECODE_COMMAND_SEEK) {
diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c
index a7f39a3..27d0fab 100644
--- a/src/inputPlugins/mp3_plugin.c
+++ b/src/inputPlugins/mp3_plugin.c
@@ -1035,8 +1035,6 @@ static int mp3_decode(struct decoder * decoder, 
InputStream * inStream)
 
        initAudioFormatFromMp3DecodeData(&data, &audio_format);
 
-       dc.totalTime = data.totalTime;
-
        if (inStream->metaTitle) {
                if (tag)
                        freeMpdTag(tag);
@@ -1062,7 +1060,7 @@ static int mp3_decode(struct decoder * decoder, 
InputStream * inStream)
                freeMpdTag(tag);
        }
 
-       decoder_initialized(decoder, &audio_format);
+       decoder_initialized(decoder, &audio_format, data.totalTime);
 
        while (mp3Read(&data, decoder, &replayGainInfo) != DECODE_BREAK) ;
        /* send last little bit if not DECODE_COMMAND_STOP */
diff --git a/src/inputPlugins/mp4_plugin.c b/src/inputPlugins/mp4_plugin.c
index d2c0f1b..ac681a0 100644
--- a/src/inputPlugins/mp4_plugin.c
+++ b/src/inputPlugins/mp4_plugin.c
@@ -83,7 +83,7 @@ static int mp4_decode(struct decoder * mpd_decoder, 
InputStream * inStream)
        mp4ff_t *mp4fh;
        mp4ff_callback_t *mp4cb;
        int32_t track;
-       float file_time;
+       float file_time, total_time;
        int32_t scale;
        faacDecHandle decoder;
        faacDecFrameInfo frameInfo;
@@ -170,7 +170,7 @@ static int mp4_decode(struct decoder * mpd_decoder, 
InputStream * inStream)
                free(mp4cb);
                return -1;
        }
-       dc.totalTime = ((float)file_time) / scale;
+       total_time = ((float)file_time) / scale;
 
        numSamples = mp4ff_num_samples(mp4fh, track);
 
@@ -248,7 +248,8 @@ static int mp4_decode(struct decoder * mpd_decoder, 
InputStream * inStream)
 #endif
                        audio_format.sampleRate = scale;
                        audio_format.channels = frameInfo.channels;
-                       decoder_initialized(mpd_decoder, &audio_format);
+                       decoder_initialized(mpd_decoder, &audio_format,
+                                           total_time);
                }
 
                if (channels * (unsigned long)(dur + offset) > 
frameInfo.samples) {
diff --git a/src/inputPlugins/mpc_plugin.c b/src/inputPlugins/mpc_plugin.c
index 5a57ea4..399adf9 100644
--- a/src/inputPlugins/mpc_plugin.c
+++ b/src/inputPlugins/mpc_plugin.c
@@ -160,8 +160,6 @@ static int mpc_decode(struct decoder * mpd_decoder, 
InputStream * inStream)
                return 0;
        }
 
-       dc.totalTime = mpc_streaminfo_get_length(&info);
-
        audio_format.bits = 16;
        audio_format.channels = info.channels;
        audio_format.sampleRate = info.sample_freq;
@@ -172,7 +170,8 @@ static int mpc_decode(struct decoder * mpd_decoder, 
InputStream * inStream)
        replayGainInfo->trackGain = info.gain_title * 0.01;
        replayGainInfo->trackPeak = info.peak_title / 32767.0;
 
-       decoder_initialized(mpd_decoder, &audio_format);
+       decoder_initialized(mpd_decoder, &audio_format,
+                           mpc_streaminfo_get_length(&info));
 
        while (!eof) {
                if (dc.command == DECODE_COMMAND_SEEK) {
diff --git a/src/inputPlugins/oggflac_plugin.c 
b/src/inputPlugins/oggflac_plugin.c
index 5879b70..f8cb4c0 100644
--- a/src/inputPlugins/oggflac_plugin.c
+++ b/src/inputPlugins/oggflac_plugin.c
@@ -345,7 +345,7 @@ static int oggflac_decode(struct decoder * mpd_decoder, 
InputStream * inStream)
                goto fail;
        }
 
-       decoder_initialized(mpd_decoder, &data.audio_format);
+       decoder_initialized(mpd_decoder, &data.audio_format, data.total_time);
 
        while (1) {
                OggFLAC__seekable_stream_decoder_process_single(decoder);
diff --git a/src/inputPlugins/oggvorbis_plugin.c 
b/src/inputPlugins/oggvorbis_plugin.c
index 2fb0a9e..e53e27d 100644
--- a/src/inputPlugins/oggvorbis_plugin.c
+++ b/src/inputPlugins/oggvorbis_plugin.c
@@ -262,9 +262,6 @@ static int oggvorbis_decode(struct decoder * decoder, 
InputStream * inStream)
                }
                return 0;
        }
-       dc.totalTime = ov_time_total(&vf, -1);
-       if (dc.totalTime < 0)
-               dc.totalTime = 0;
        audio_format.bits = 16;
 
        while (1) {
@@ -285,7 +282,11 @@ static int oggvorbis_decode(struct decoder * decoder, 
InputStream * inStream)
                        audio_format.channels = vi->channels;
                        audio_format.sampleRate = vi->rate;
                        if (dc.state == DECODE_STATE_START) {
-                               decoder_initialized(decoder, &audio_format);
+                               float total_time = ov_time_total(&vf, -1);
+                               if (total_time < 0)
+                                       total_time = 0;
+                               decoder_initialized(decoder, &audio_format,
+                                                   total_time);
                        }
                        comments = ov_comment(&vf, -1)->user_comments;
                        putOggCommentsIntoOutputBuffer(inStream->metaName,
diff --git a/src/inputPlugins/wavpack_plugin.c 
b/src/inputPlugins/wavpack_plugin.c
index 167278f..a74da7e 100644
--- a/src/inputPlugins/wavpack_plugin.c
+++ b/src/inputPlugins/wavpack_plugin.c
@@ -164,10 +164,10 @@ static void wavpack_decode(struct decoder * decoder,
 
        samplesreq = sizeof(chunk) / (4 * audio_format.channels);
 
-       dc.totalTime = (float)allsamples / audio_format.sampleRate;
        dc.seekable = canseek;
 
-       decoder_initialized(decoder, &audio_format);
+       decoder_initialized(decoder, &audio_format,
+                           (float)allsamples / audio_format.sampleRate);
 
        position = 0;
 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to