1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (C) 2016 foo86 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVCODEC_DCA_EXSS_H 22cabdff1aSopenharmony_ci#define AVCODEC_DCA_EXSS_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#include <stdint.h> 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#include "avcodec.h" 27cabdff1aSopenharmony_ci#include "get_bits.h" 28cabdff1aSopenharmony_ci 29cabdff1aSopenharmony_citypedef struct DCAExssAsset { 30cabdff1aSopenharmony_ci int asset_offset; ///< Offset to asset data from start of substream 31cabdff1aSopenharmony_ci int asset_size; ///< Size of encoded asset data 32cabdff1aSopenharmony_ci int asset_index; ///< Audio asset identifier 33cabdff1aSopenharmony_ci 34cabdff1aSopenharmony_ci int pcm_bit_res; ///< PCM bit resolution 35cabdff1aSopenharmony_ci int max_sample_rate; ///< Maximum sample rate 36cabdff1aSopenharmony_ci int nchannels_total; ///< Total number of channels 37cabdff1aSopenharmony_ci int one_to_one_map_ch_to_spkr; ///< One to one channel to speaker mapping flag 38cabdff1aSopenharmony_ci int embedded_stereo; ///< Embedded stereo flag 39cabdff1aSopenharmony_ci int embedded_6ch; ///< Embedded 6 channels flag 40cabdff1aSopenharmony_ci int spkr_mask_enabled; ///< Speaker mask enabled flag 41cabdff1aSopenharmony_ci int spkr_mask; ///< Loudspeaker activity mask 42cabdff1aSopenharmony_ci int representation_type; ///< Representation type 43cabdff1aSopenharmony_ci 44cabdff1aSopenharmony_ci int coding_mode; ///< Coding mode for the asset 45cabdff1aSopenharmony_ci int extension_mask; ///< Coding components used in asset 46cabdff1aSopenharmony_ci 47cabdff1aSopenharmony_ci int core_offset; ///< Offset to core component from start of substream 48cabdff1aSopenharmony_ci int core_size; ///< Size of core component in extension substream 49cabdff1aSopenharmony_ci 50cabdff1aSopenharmony_ci int xbr_offset; ///< Offset to XBR extension from start of substream 51cabdff1aSopenharmony_ci int xbr_size; ///< Size of XBR extension in extension substream 52cabdff1aSopenharmony_ci 53cabdff1aSopenharmony_ci int xxch_offset; ///< Offset to XXCH extension from start of substream 54cabdff1aSopenharmony_ci int xxch_size; ///< Size of XXCH extension in extension substream 55cabdff1aSopenharmony_ci 56cabdff1aSopenharmony_ci int x96_offset; ///< Offset to X96 extension from start of substream 57cabdff1aSopenharmony_ci int x96_size; ///< Size of X96 extension in extension substream 58cabdff1aSopenharmony_ci 59cabdff1aSopenharmony_ci int lbr_offset; ///< Offset to LBR component from start of substream 60cabdff1aSopenharmony_ci int lbr_size; ///< Size of LBR component in extension substream 61cabdff1aSopenharmony_ci 62cabdff1aSopenharmony_ci int xll_offset; ///< Offset to XLL data from start of substream 63cabdff1aSopenharmony_ci int xll_size; ///< Size of XLL data in extension substream 64cabdff1aSopenharmony_ci int xll_sync_present; ///< XLL sync word present flag 65cabdff1aSopenharmony_ci int xll_delay_nframes; ///< Initial XLL decoding delay in frames 66cabdff1aSopenharmony_ci int xll_sync_offset; ///< Number of bytes offset to XLL sync 67cabdff1aSopenharmony_ci 68cabdff1aSopenharmony_ci int hd_stream_id; ///< DTS-HD stream ID 69cabdff1aSopenharmony_ci} DCAExssAsset; 70cabdff1aSopenharmony_ci 71cabdff1aSopenharmony_citypedef struct DCAExssParser { 72cabdff1aSopenharmony_ci AVCodecContext *avctx; 73cabdff1aSopenharmony_ci GetBitContext gb; 74cabdff1aSopenharmony_ci 75cabdff1aSopenharmony_ci int exss_index; ///< Extension substream index 76cabdff1aSopenharmony_ci int exss_size_nbits; ///< Number of bits for extension substream size 77cabdff1aSopenharmony_ci int exss_size; ///< Number of bytes of extension substream 78cabdff1aSopenharmony_ci 79cabdff1aSopenharmony_ci int static_fields_present; ///< Per stream static fields presence flag 80cabdff1aSopenharmony_ci int npresents; ///< Number of defined audio presentations 81cabdff1aSopenharmony_ci int nassets; ///< Number of audio assets in extension substream 82cabdff1aSopenharmony_ci 83cabdff1aSopenharmony_ci int mix_metadata_enabled; ///< Mixing metadata enable flag 84cabdff1aSopenharmony_ci int nmixoutconfigs; ///< Number of mixing configurations 85cabdff1aSopenharmony_ci int nmixoutchs[4]; ///< Speaker layout mask for mixer output channels 86cabdff1aSopenharmony_ci 87cabdff1aSopenharmony_ci DCAExssAsset assets[1]; ///< Audio asset descriptors 88cabdff1aSopenharmony_ci} DCAExssParser; 89cabdff1aSopenharmony_ci 90cabdff1aSopenharmony_ciint ff_dca_exss_parse(DCAExssParser *s, const uint8_t *data, int size); 91cabdff1aSopenharmony_ci 92cabdff1aSopenharmony_ci#endif 93