1 /* 2 * Copyright (c) 2014 Tim Walker <tdskywalker@gmail.com> 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVUTIL_DOWNMIX_INFO_H 22 #define AVUTIL_DOWNMIX_INFO_H 23 24 #include "frame.h" 25 26 /** 27 * @file 28 * audio downmix medatata 29 */ 30 31 /** 32 * @addtogroup lavu_audio 33 * @{ 34 */ 35 36 /** 37 * @defgroup downmix_info Audio downmix metadata 38 * @{ 39 */ 40 41 /** 42 * Possible downmix types. 43 */ 44 enum AVDownmixType { 45 AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ 46 AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ 47 AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ 48 AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ 49 AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ 50 }; 51 52 /** 53 * This structure describes optional metadata relevant to a downmix procedure. 54 * 55 * All fields are set by the decoder to the value indicated in the audio 56 * bitstream (if present), or to a "sane" default otherwise. 57 */ 58 typedef struct AVDownmixInfo { 59 /** 60 * Type of downmix preferred by the mastering engineer. 61 */ 62 enum AVDownmixType preferred_downmix_type; 63 64 /** 65 * Absolute scale factor representing the nominal level of the center 66 * channel during a regular downmix. 67 */ 68 double center_mix_level; 69 70 /** 71 * Absolute scale factor representing the nominal level of the center 72 * channel during an Lt/Rt compatible downmix. 73 */ 74 double center_mix_level_ltrt; 75 76 /** 77 * Absolute scale factor representing the nominal level of the surround 78 * channels during a regular downmix. 79 */ 80 double surround_mix_level; 81 82 /** 83 * Absolute scale factor representing the nominal level of the surround 84 * channels during an Lt/Rt compatible downmix. 85 */ 86 double surround_mix_level_ltrt; 87 88 /** 89 * Absolute scale factor representing the level at which the LFE data is 90 * mixed into L/R channels during downmixing. 91 */ 92 double lfe_mix_level; 93 } AVDownmixInfo; 94 95 /** 96 * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. 97 * 98 * If the side data is absent, it is created and added to the frame. 99 * 100 * @param frame the frame for which the side data is to be obtained or created 101 * 102 * @return the AVDownmixInfo structure to be edited by the caller, or NULL if 103 * the structure cannot be allocated. 104 */ 105 AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); 106 107 /** 108 * @} 109 */ 110 111 /** 112 * @} 113 */ 114 115 #endif /* AVUTIL_DOWNMIX_INFO_H */ 116