avcodec/dca: move channel counter utility into dca.h
authorfoo86 <foobaz86@gmail.com>
Sun, 1 May 2016 15:42:14 +0000 (08:42 -0700)
committerJames Almer <jamrial@gmail.com>
Sun, 1 May 2016 19:50:32 +0000 (16:50 -0300)
Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/dca.h
libavcodec/dca_exss.c

index ccb02af..a1ac763 100644 (file)
@@ -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
index 4579f23..36314c2 100644 (file)
 #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;