[FFmpeg-devel] [PATCH 2/5] truehd: break out part of rematrix_channels into platform-specific callback.

Michael Niedermayer michaelni at gmx.at
Thu Mar 20 02:43:36 CET 2014


On Thu, Mar 20, 2014 at 12:47:20AM +0000, Ben Avison wrote:
> Verified with profiling that this doesn't have a measurable effect upon
> overall performance.
> ---
>  libavcodec/mlpdec.c |   37 ++++++++++++-------------------------
>  libavcodec/mlpdsp.c |   33 +++++++++++++++++++++++++++++++++
>  libavcodec/mlpdsp.h |   23 +++++++++++++++++++++++
>  3 files changed, 68 insertions(+), 25 deletions(-)
> 
> diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
> index 93ed552..90f04e5 100644
> --- a/libavcodec/mlpdec.c
> +++ b/libavcodec/mlpdec.c
> @@ -1017,7 +1017,7 @@ static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr)
>  static void rematrix_channels(MLPDecodeContext *m, unsigned int substr)
>  {
>      SubStream *s = &m->substream[substr];
> -    unsigned int mat, src_ch, i;
> +    unsigned int mat;
>      unsigned int maxchan;
>  
>      maxchan = s->max_matrix_channel;
> @@ -1029,31 +1029,18 @@ static void rematrix_channels(MLPDecodeContext *m, unsigned int substr)
>      }
>  
>      for (mat = 0; mat < s->num_primitive_matrices; mat++) {
> -        int matrix_noise_shift = s->matrix_noise_shift[mat];
>          unsigned int dest_ch = s->matrix_out_ch[mat];
> -        int32_t mask = MSB_MASK(s->quant_step_size[dest_ch]);
> -        int32_t *coeffs = s->matrix_coeff[mat];
> -        int index  = s->num_primitive_matrices - mat;
> -        int index2 = 2 * index + 1;
> -
> -        /* TODO: DSPContext? */
> -
> -        for (i = 0; i < s->blockpos; i++) {
> -            int32_t bypassed_lsb = m->bypassed_lsbs[i][mat];
> -            int32_t *samples = m->sample_buffer[i];
> -            int64_t accum = 0;
> -
> -            for (src_ch = 0; src_ch <= maxchan; src_ch++)
> -                accum += (int64_t) samples[src_ch] * coeffs[src_ch];
> -
> -            if (matrix_noise_shift) {
> -                index &= m->access_unit_size_pow2 - 1;
> -                accum += m->noise_buffer[index] << (matrix_noise_shift + 7);
> -                index += index2;
> -            }
> -
> -            samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
> -        }
> +        m->dsp.mlp_rematrix_channel(&m->sample_buffer[0][0],
> +                                    s->matrix_coeff[mat],

i think matrix_coeff is guranteed to fit in int16_t, this would allow
simplifying the code

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Its not that you shouldnt use gotos but rather that you should write
readable code and code with gotos often but not always is less readable
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140320/b7c1d292/attachment.asc>


More information about the ffmpeg-devel mailing list