Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.