You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.9 KiB
C++
90 lines
2.9 KiB
C++
/*
|
|
* DVD-Audio Decoder plugin
|
|
* Copyright (c) 2009-2024 Maxim V.Anisiutkin <maxim.anisiutkin@gmail.com>
|
|
*
|
|
* DVD-Audio Decoder is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* DVD-Audio Decoder is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with FFmpeg; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include "dvda_block.h"
|
|
|
|
enum stream_id_e {UNK_STREAM_ID = 0, PCM_STREAM_ID = 0xa0, MLP_STREAM_ID = 0xa1};
|
|
enum stream_type_e {STREAM_TYPE_TRUEHD = 0xba, STREAM_TYPE_MLP = 0xbb};
|
|
enum chmode_e {CHMODE_BOTH = 0, CHMODE_TWOCH = 1, CHMODE_MULCH = 2};
|
|
|
|
typedef struct {
|
|
const uint32_t group1_channel_id[4];
|
|
const uint32_t group2_channel_id[4];
|
|
const char* group1_channel_name[4];
|
|
const char* group2_channel_name[4];
|
|
const int group1_channels;
|
|
const int group2_channels;
|
|
} MLPPCM_ASSIGNMENT;
|
|
|
|
typedef struct {
|
|
const uint32_t channel_id[2];
|
|
const char* channel_name[2];
|
|
const int channels;
|
|
} TRUEHD_ASSIGNMENT;
|
|
|
|
enum {
|
|
SPEAKER_FRONT_LEFT = 0x1,
|
|
SPEAKER_FRONT_RIGHT = 0x2,
|
|
SPEAKER_FRONT_CENTER = 0x4,
|
|
SPEAKER_LOW_FREQUENCY = 0x8,
|
|
SPEAKER_BACK_LEFT = 0x10,
|
|
SPEAKER_BACK_RIGHT = 0x20,
|
|
SPEAKER_FRONT_LEFT_OF_CENTER = 0x40,
|
|
SPEAKER_FRONT_RIGHT_OF_CENTER = 0x80,
|
|
SPEAKER_BACK_CENTER = 0x100,
|
|
SPEAKER_SIDE_LEFT = 0x200,
|
|
SPEAKER_SIDE_RIGHT = 0x400,
|
|
SPEAKER_TOP_CENTER = 0x800,
|
|
SPEAKER_TOP_FRONT_LEFT = 0x1000,
|
|
SPEAKER_TOP_FRONT_CENTER = 0x2000,
|
|
SPEAKER_TOP_FRONT_RIGHT = 0x4000,
|
|
SPEAKER_TOP_BACK_LEFT = 0x8000,
|
|
SPEAKER_TOP_BACK_CENTER = 0x10000,
|
|
SPEAKER_TOP_BACK_RIGHT = 0x20000
|
|
};
|
|
|
|
class audio_stream_info_t {
|
|
public:
|
|
static const MLPPCM_ASSIGNMENT mlppcm_table[21];
|
|
static const TRUEHD_ASSIGNMENT truehd_table[13];
|
|
stream_id_e stream_id;
|
|
stream_type_e stream_type;
|
|
bool is_atmos;
|
|
int channel_arrangement;
|
|
uint64_t channel_layout;
|
|
int group1_channels;
|
|
int group1_bits;
|
|
int group1_samplerate;
|
|
int group2_channels;
|
|
int group2_bits;
|
|
int group2_samplerate;
|
|
int bitrate;
|
|
bool can_downmix;
|
|
bool is_vbr;
|
|
int sync_offset;
|
|
audio_stream_info_t();
|
|
operator bool();
|
|
const char* get_channel_name(int channel);
|
|
uint32_t get_wfx_channels();
|
|
double estimate_compression();
|
|
};
|