mp3dec: Kill need_bad_data_delay().
authorAndre Noll <maan@systemlinux.org>
Sun, 7 Aug 2011 10:08:39 +0000 (12:08 +0200)
committerAndre Noll <maan@systemlinux.org>
Tue, 9 Aug 2011 21:11:34 +0000 (23:11 +0200)
This added quite some complexity for no real gain.

mp3dec_filter.c

index 7731a37..d262b25 100644 (file)
 #define MAD_TO_SHORT(f) (f) >= MAD_F_ONE? SHRT_MAX :\
        (f) <= -MAD_F_ONE? -SHRT_MAX : (signed short) ((f) >> (MAD_F_FRACBITS - 15))
 
-/** State of the decoding process. */
-enum mp3dec_flags {
-       /** Bad main_data_begin pointer encounterd. */
-       MP3DEC_FLAG_BAD_DATA = 1,
-       /** Some output has already been produced. */
-       MP3DEC_FLAG_DECODE_STARTED = 2,
-       MP3DEC_FLAG_NEED_MORE = 4,
-};
-
 /** Data specific to the mp3dec filter. */
 struct private_mp3dec_data {
        /** Information on the current mp3 stream. */
@@ -41,57 +32,22 @@ struct private_mp3dec_data {
        struct mad_frame frame;
        /** Contains the PCM output. */
        struct mad_synth synth;
-       /** See \ref mp3dec_flags. */
-       unsigned flags;
-       /** Defer decoding until this time. */
-       struct timeval stream_start_barrier;
-       /** Wait until this many input bytes are available. */
-       size_t input_len_barrier;
        /** The number of channels of the current stream. */
        unsigned int channels;
        /** Current sample rate in Hz. */
        unsigned int sample_rate;
 };
 
-static int need_bad_data_delay(struct private_mp3dec_data *pmd,
-               size_t bytes_available)
-{
-       if (!(pmd->flags & MP3DEC_FLAG_BAD_DATA))
-               return 0;
-       if (pmd->flags & MP3DEC_FLAG_DECODE_STARTED)
-               return 0;
-       if (bytes_available >= pmd->input_len_barrier)
-               return 0;
-       if (tv_diff(now, &pmd->stream_start_barrier, NULL) > 0)
-               return 0;
-       return 1;
-}
-
-/*
- * Returns negative on serious errors, zero if the error should be ignored and
- * positive on bad data pointer errors at stream start.
- */
-static int handle_decode_error(struct private_mp3dec_data *pmd, size_t len)
+/* Returns negative on serious errors. */
+static int handle_decode_error(struct private_mp3dec_data *pmd)
 {
-       const struct timeval delay = {0, 60 * 1000};
        if (!MAD_RECOVERABLE(pmd->stream.error)
                        && pmd->stream.error != MAD_ERROR_BUFLEN) {
                PARA_ERROR_LOG("%s\n", mad_stream_errorstr(&pmd->stream));
                return -E_MAD_FRAME_DECODE;
        }
        PARA_DEBUG_LOG("%s\n", mad_stream_errorstr(&pmd->stream));
-       if (pmd->stream.error != MAD_ERROR_BADDATAPTR)
-               return 0;
-       if (pmd->flags & MP3DEC_FLAG_DECODE_STARTED)
-               return 0;
-       /*
-        * Bad data pointer at stream start. Defer decoding until the amount of
-        * data we are about to skip is available again, but wait at most 60ms.
-        */
-       pmd->flags |= MP3DEC_FLAG_BAD_DATA;
-       pmd->input_len_barrier = len;
-       tv_add(now, &delay, &pmd->stream_start_barrier);
-       return 1;
+       return 0;
 }
 
 static size_t used_mad_buffer_bytes(struct mad_stream *s, size_t max)
@@ -134,8 +90,6 @@ next_buffer:
        ret = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL);
        if (ret < 0)
                goto err;
-       if (need_bad_data_delay(pmd, iqs))
-               return;
        if (ret == 0)
                return;
        btr_merge(btrn, fn->min_iqs);
@@ -171,7 +125,7 @@ next_frame:
        if (ret != 0) {
                PARA_INFO_LOG("frame decode: %s\n", mad_stream_errorstr(&pmd->stream));
                used = used_mad_buffer_bytes(&pmd->stream, len);
-               ret = handle_decode_error(pmd, used);
+               ret = handle_decode_error(pmd);
                btr_consume(btrn, used);
                if (ret < 0)
                        goto err;
@@ -180,7 +134,6 @@ next_frame:
                return;
        }
        mad_synth_frame(&pmd->synth, &pmd->frame);
-       pmd->flags |= MP3DEC_FLAG_DECODE_STARTED;
        outbuffer = para_malloc(pmd->synth.pcm.length * 2 * pmd->channels);
        loaded = 0;
        for (i = 0; i < pmd->synth.pcm.length; i++) {