Browse Source

avcodec/mlp_parse: move TrueHD channel layout and sample rate related code to the header

It will be needed by the next commit.

Signed-off-by: James Almer <jamrial@gmail.com>
tags/n4.3
James Almer 6 years ago
parent
commit
21d7eeafc1
2 changed files with 49 additions and 50 deletions
  1. +0
    -50
      libavcodec/mlp_parse.c
  2. +49
    -0
      libavcodec/mlp_parse.h

+ 0
- 50
libavcodec/mlp_parse.c View File

@@ -60,56 +60,6 @@ static const uint64_t mlp_layout[32] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

static const uint8_t thd_chancount[13] = {
// LR C LFE LRs LRvh LRc LRrs Cs Ts LRsd LRw Cvh LFE2
2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1
};

static const uint64_t thd_layout[13] = {
AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT, // LR
AV_CH_FRONT_CENTER, // C
AV_CH_LOW_FREQUENCY, // LFE
AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRs
AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT, // LRvh
AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, // LRc
AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, // LRrs
AV_CH_BACK_CENTER, // Cs
AV_CH_TOP_CENTER, // Ts
AV_CH_SURROUND_DIRECT_LEFT|AV_CH_SURROUND_DIRECT_RIGHT, // LRsd
AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT, // LRw
AV_CH_TOP_FRONT_CENTER, // Cvh
AV_CH_LOW_FREQUENCY_2, // LFE2
};

static int mlp_samplerate(int in)
{
if (in == 0xF)
return 0;

return (in & 8 ? 44100 : 48000) << (in & 7) ;
}

static int truehd_channels(int chanmap)
{
int channels = 0, i;

for (i = 0; i < 13; i++)
channels += thd_chancount[i] * ((chanmap >> i) & 1);

return channels;
}

static uint64_t truehd_layout(int chanmap)
{
int i;
uint64_t layout = 0;

for (i = 0; i < 13; i++)
layout |= thd_layout[i] * ((chanmap >> i) & 1);

return layout;
}

static int mlp_get_major_sync_size(const uint8_t * buf, int bufsize)
{
int has_extension, extensions = 0;


+ 49
- 0
libavcodec/mlp_parse.h View File

@@ -56,6 +56,55 @@ typedef struct MLPHeaderInfo
int num_substreams; ///< Number of substreams within stream
} MLPHeaderInfo;

static const uint8_t thd_chancount[13] = {
// LR C LFE LRs LRvh LRc LRrs Cs Ts LRsd LRw Cvh LFE2
2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1
};

static const uint64_t thd_layout[13] = {
AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT, // LR
AV_CH_FRONT_CENTER, // C
AV_CH_LOW_FREQUENCY, // LFE
AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRs
AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT, // LRvh
AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, // LRc
AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, // LRrs
AV_CH_BACK_CENTER, // Cs
AV_CH_TOP_CENTER, // Ts
AV_CH_SURROUND_DIRECT_LEFT|AV_CH_SURROUND_DIRECT_RIGHT, // LRsd
AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT, // LRw
AV_CH_TOP_FRONT_CENTER, // Cvh
AV_CH_LOW_FREQUENCY_2, // LFE2
};

static inline int mlp_samplerate(int in)
{
if (in == 0xF)
return 0;

return (in & 8 ? 44100 : 48000) << (in & 7) ;
}

static inline int truehd_channels(int chanmap)
{
int channels = 0, i;

for (i = 0; i < 13; i++)
channels += thd_chancount[i] * ((chanmap >> i) & 1);

return channels;
}

static inline uint64_t truehd_layout(int chanmap)
{
int i;
uint64_t layout = 0;

for (i = 0; i < 13; i++)
layout |= thd_layout[i] * ((chanmap >> i) & 1);

return layout;
}

int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb);



Loading…
Cancel
Save