[FFmpeg-devel] [PATCH 4/5] avcodec/dca: move channel counter utility into dca.h

James Almer jamrial at gmail.com
Fri Apr 29 05:26:40 CEST 2016


On 4/27/2016 2:21 PM, foo86 wrote:
> Also add actual speaker pair definitions.
> ---
>  libavcodec/dca.h      | 28 ++++++++++++++++++++++++++++
>  libavcodec/dca_exss.c |  9 ++-------
>  2 files changed, 30 insertions(+), 7 deletions(-)
> 
> diff --git a/libavcodec/dca.h b/libavcodec/dca.h
> index ccb02af..1b90d40 100644
> --- a/libavcodec/dca.h
> +++ b/libavcodec/dca.h
> @@ -28,6 +28,7 @@
>  
>  #include <stdint.h>
>  
> +#include "libavutil/common.h"
>  #include "libavutil/internal.h"
>  #include "libavutil/intreadwrite.h"
>  
> @@ -90,6 +91,33 @@ enum DCASpeakerMask {
>  #define DCA_HAS_STEREO(mask) \
>      ((mask & DCA_SPEAKER_LAYOUT_STEREO) == DCA_SPEAKER_LAYOUT_STEREO)
>  
> +enum DCASpeakerPair {
> +    DCA_SPEAKER_PAIR_C      = 0x0001,
> +    DCA_SPEAKER_PAIR_LR     = 0x0002,
> +    DCA_SPEAKER_PAIR_LsRs   = 0x0004,
> +    DCA_SPEAKER_PAIR_LFE1   = 0x0008,
> +    DCA_SPEAKER_PAIR_Cs     = 0x0010,
> +    DCA_SPEAKER_PAIR_LhRh   = 0x0020,
> +    DCA_SPEAKER_PAIR_LsrRsr = 0x0040,
> +    DCA_SPEAKER_PAIR_Ch     = 0x0080,
> +    DCA_SPEAKER_PAIR_Oh     = 0x0100,
> +    DCA_SPEAKER_PAIR_LcRc   = 0x0200,
> +    DCA_SPEAKER_PAIR_LwRw   = 0x0400,
> +    DCA_SPEAKER_PAIR_LssRss = 0x0800,
> +    DCA_SPEAKER_PAIR_LFE2   = 0x1000,
> +    DCA_SPEAKER_PAIR_LhsRhs = 0x2000,
> +    DCA_SPEAKER_PAIR_Chr    = 0x4000,
> +    DCA_SPEAKER_PAIR_LhrRhr = 0x8000
> +};
> +
> +/**
> + * Return number of individual channels in DCASpeakerPair mask
> + */
> +static inline int avpriv_dca_count_chs_for_mask(unsigned int mask)

This is an inline function in a header, so no need for an avpriv_ prefix.
Use ff_ instead, but technically not even that is needed. You can safely
use dca_count_chs_for_mask() or similar.

> +{
> +    return av_popcount((mask & 0xffff) | ((mask & 0xae66) << 16));
> +}
> +
>  enum DCARepresentationType {
>      DCA_REPR_TYPE_LtRt = 2,
>      DCA_REPR_TYPE_LhRh = 3
> diff --git a/libavcodec/dca_exss.c b/libavcodec/dca_exss.c
> index 4579f23..d59d0dd 100644
> --- a/libavcodec/dca_exss.c
> +++ b/libavcodec/dca_exss.c
> @@ -21,11 +21,6 @@
>  #include "dcadec.h"
>  #include "dcadata.h"
>  
> -static int count_chs_for_mask(int mask)
> -{
> -    return av_popcount(mask) + av_popcount(mask & 0xae66);
> -}
> -
>  static void parse_xll_parameters(DCAExssParser *s, DCAExssAsset *asset)
>  {
>      // Size of XLL data in extension substream
> @@ -141,7 +136,7 @@ static int parse_descriptor(DCAExssParser *s, DCAExssAsset *asset)
>  
>              // Standard loudspeaker layout mask
>              for (i = 0; i < spkr_remap_nsets; i++)
> -                nspeakers[i] = count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits));
> +                nspeakers[i] = avpriv_dca_count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits));
>  
>              for (i = 0; i < spkr_remap_nsets; i++) {
>                  // Number of channels to be decoded for speaker remapping
> @@ -470,7 +465,7 @@ int ff_dca_exss_parse(DCAExssParser *s, uint8_t *data, int size)
>  
>              // Speaker layout mask for mixer output channels
>              for (i = 0; i < s->nmixoutconfigs; i++)
> -                s->nmixoutchs[i] = count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits));
> +                s->nmixoutchs[i] = avpriv_dca_count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits));
>          }
>      } else {
>          s->npresents = 1;
> 



More information about the ffmpeg-devel mailing list