Commit 1fee770a authored by foo86's avatar foo86 Committed by James Almer

avcodec/dca: move channel counter utility into dca.h

Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
parent 2df7d4fa
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <stdint.h> #include <stdint.h>
#include "libavutil/common.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
...@@ -90,6 +91,33 @@ enum DCASpeakerMask { ...@@ -90,6 +91,33 @@ enum DCASpeakerMask {
#define DCA_HAS_STEREO(mask) \ #define DCA_HAS_STEREO(mask) \
((mask & DCA_SPEAKER_LAYOUT_STEREO) == DCA_SPEAKER_LAYOUT_STEREO) ((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 { enum DCARepresentationType {
DCA_REPR_TYPE_LtRt = 2, DCA_REPR_TYPE_LtRt = 2,
DCA_REPR_TYPE_LhRh = 3 DCA_REPR_TYPE_LhRh = 3
......
...@@ -21,11 +21,6 @@ ...@@ -21,11 +21,6 @@
#include "dcadec.h" #include "dcadec.h"
#include "dcadata.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) static void parse_xll_parameters(DCAExssParser *s, DCAExssAsset *asset)
{ {
// Size of XLL data in extension substream // Size of XLL data in extension substream
...@@ -141,7 +136,7 @@ static int parse_descriptor(DCAExssParser *s, DCAExssAsset *asset) ...@@ -141,7 +136,7 @@ static int parse_descriptor(DCAExssParser *s, DCAExssAsset *asset)
// Standard loudspeaker layout mask // Standard loudspeaker layout mask
for (i = 0; i < spkr_remap_nsets; i++) 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++) { for (i = 0; i < spkr_remap_nsets; i++) {
// Number of channels to be decoded for speaker remapping // 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) ...@@ -470,7 +465,7 @@ int ff_dca_exss_parse(DCAExssParser *s, uint8_t *data, int size)
// Speaker layout mask for mixer output channels // Speaker layout mask for mixer output channels
for (i = 0; i < s->nmixoutconfigs; i++) 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 { } else {
s->npresents = 1; s->npresents = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment