You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
avcodec/dca: move channel counter utility into dca.h
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@@ -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 {
|
|||||||
#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 @@
|
|||||||
#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)
|
|||||||
|
|
||||||
// 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)
|
|||||||
|
|
||||||
// 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;
|
||||||
|
Reference in New Issue
Block a user