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 module ffmpeg.libavutil.downmix_info; 21 22 import ffmpeg.libavutil.frame; 23 24 extern (C) @nogc nothrow: 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 { 46 AV_DOWNMIX_TYPE_UNKNOWN = 0, /**< Not indicated. */ 47 AV_DOWNMIX_TYPE_LORO = 1, /**< Lo/Ro 2-channel downmix (Stereo). */ 48 AV_DOWNMIX_TYPE_LTRT = 2, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ 49 AV_DOWNMIX_TYPE_DPLII = 3, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ 50 AV_DOWNMIX_TYPE_NB = 4 /**< Number of downmix types. Not part of ABI. */ 51 } 52 53 /** 54 * This structure describes optional metadata relevant to a downmix procedure. 55 * 56 * All fields are set by the decoder to the value indicated in the audio 57 * bitstream (if present), or to a "sane" default otherwise. 58 */ 59 struct AVDownmixInfo 60 { 61 /** 62 * Type of downmix preferred by the mastering engineer. 63 */ 64 AVDownmixType preferred_downmix_type; 65 66 /** 67 * Absolute scale factor representing the nominal level of the center 68 * channel during a regular downmix. 69 */ 70 double center_mix_level; 71 72 /** 73 * Absolute scale factor representing the nominal level of the center 74 * channel during an Lt/Rt compatible downmix. 75 */ 76 double center_mix_level_ltrt; 77 78 /** 79 * Absolute scale factor representing the nominal level of the surround 80 * channels during a regular downmix. 81 */ 82 double surround_mix_level; 83 84 /** 85 * Absolute scale factor representing the nominal level of the surround 86 * channels during an Lt/Rt compatible downmix. 87 */ 88 double surround_mix_level_ltrt; 89 90 /** 91 * Absolute scale factor representing the level at which the LFE data is 92 * mixed into L/R channels during downmixing. 93 */ 94 double lfe_mix_level; 95 } 96 97 /** 98 * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. 99 * 100 * If the side data is absent, it is created and added to the frame. 101 * 102 * @param frame the frame for which the side data is to be obtained or created 103 * 104 * @return the AVDownmixInfo structure to be edited by the caller, or NULL if 105 * the structure cannot be allocated. 106 */ 107 AVDownmixInfo* av_downmix_info_update_side_data (AVFrame* frame); 108 109 /** 110 * @} 111 */ 112 113 /** 114 * @} 115 */ 116 117 /* AVUTIL_DOWNMIX_INFO_H */