diff options
author | foo86 <foobaz86@gmail.com> | 2016-05-01 08:42:14 -0700 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2016-05-01 16:50:32 -0300 |
commit | 1fee770a1cece01f1e31a3127f7039e784a449eb (patch) | |
tree | 46452af20bb49fddebf01b0c67540e1a25d76a5c | |
parent | 2df7d4fa4524b6f83c65428d75192267a2d0c113 (diff) | |
download | ffmpeg-1fee770a1cece01f1e31a3127f7039e784a449eb.tar.gz |
avcodec/dca: move channel counter utility into dca.h
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavcodec/dca.h | 28 | ||||
-rw-r--r-- | libavcodec/dca_exss.c | 9 |
2 files changed, 30 insertions, 7 deletions
diff --git a/libavcodec/dca.h b/libavcodec/dca.h index ccb02af91c..a1ac763105 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 ff_dca_count_chs_for_mask(unsigned int mask) +{ + 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 4579f2350f..36314c210b 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] = ff_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] = ff_dca_count_chs_for_mask(get_bits(&s->gb, spkr_mask_nbits)); } } else { s->npresents = 1; |