misc/winutils/include/libavutil/audioconvert.h
changeset 15388 262003f2e19a
parent 15387 90a79670de52
child 15389 7718bdf60d45
equal deleted inserted replaced
15387:90a79670de52 15388:262003f2e19a
     1 /*
       
     2  * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
       
     3  * Copyright (c) 2008 Peter Ross
       
     4  *
       
     5  * This file is part of Libav.
       
     6  *
       
     7  * Libav is free software; you can redistribute it and/or
       
     8  * modify it under the terms of the GNU Lesser General Public
       
     9  * License as published by the Free Software Foundation; either
       
    10  * version 2.1 of the License, or (at your option) any later version.
       
    11  *
       
    12  * Libav is distributed in the hope that it will be useful,
       
    13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    15  * Lesser General Public License for more details.
       
    16  *
       
    17  * You should have received a copy of the GNU Lesser General Public
       
    18  * License along with Libav; if not, write to the Free Software
       
    19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
       
    20  */
       
    21 
       
    22 #ifndef AVUTIL_AUDIOCONVERT_H
       
    23 #define AVUTIL_AUDIOCONVERT_H
       
    24 
       
    25 #include <stdint.h>
       
    26 
       
    27 /**
       
    28  * @file
       
    29  * audio conversion routines
       
    30  */
       
    31 
       
    32 /**
       
    33  * @addtogroup lavu_audio
       
    34  * @{
       
    35  */
       
    36 
       
    37 /**
       
    38  * @defgroup channel_masks Audio channel masks
       
    39  * @{
       
    40  */
       
    41 #define AV_CH_FRONT_LEFT             0x00000001
       
    42 #define AV_CH_FRONT_RIGHT            0x00000002
       
    43 #define AV_CH_FRONT_CENTER           0x00000004
       
    44 #define AV_CH_LOW_FREQUENCY          0x00000008
       
    45 #define AV_CH_BACK_LEFT              0x00000010
       
    46 #define AV_CH_BACK_RIGHT             0x00000020
       
    47 #define AV_CH_FRONT_LEFT_OF_CENTER   0x00000040
       
    48 #define AV_CH_FRONT_RIGHT_OF_CENTER  0x00000080
       
    49 #define AV_CH_BACK_CENTER            0x00000100
       
    50 #define AV_CH_SIDE_LEFT              0x00000200
       
    51 #define AV_CH_SIDE_RIGHT             0x00000400
       
    52 #define AV_CH_TOP_CENTER             0x00000800
       
    53 #define AV_CH_TOP_FRONT_LEFT         0x00001000
       
    54 #define AV_CH_TOP_FRONT_CENTER       0x00002000
       
    55 #define AV_CH_TOP_FRONT_RIGHT        0x00004000
       
    56 #define AV_CH_TOP_BACK_LEFT          0x00008000
       
    57 #define AV_CH_TOP_BACK_CENTER        0x00010000
       
    58 #define AV_CH_TOP_BACK_RIGHT         0x00020000
       
    59 #define AV_CH_STEREO_LEFT            0x20000000  ///< Stereo downmix.
       
    60 #define AV_CH_STEREO_RIGHT           0x40000000  ///< See AV_CH_STEREO_LEFT.
       
    61 #define AV_CH_WIDE_LEFT              0x0000000080000000ULL
       
    62 #define AV_CH_WIDE_RIGHT             0x0000000100000000ULL
       
    63 #define AV_CH_SURROUND_DIRECT_LEFT   0x0000000200000000ULL
       
    64 #define AV_CH_SURROUND_DIRECT_RIGHT  0x0000000400000000ULL
       
    65 #define AV_CH_LOW_FREQUENCY_2        0x0000000800000000ULL
       
    66 
       
    67 /** Channel mask value used for AVCodecContext.request_channel_layout
       
    68     to indicate that the user requests the channel order of the decoder output
       
    69     to be the native codec channel order. */
       
    70 #define AV_CH_LAYOUT_NATIVE          0x8000000000000000ULL
       
    71 
       
    72 /**
       
    73  * @}
       
    74  * @defgroup channel_mask_c Audio channel convenience macros
       
    75  * @{
       
    76  * */
       
    77 #define AV_CH_LAYOUT_MONO              (AV_CH_FRONT_CENTER)
       
    78 #define AV_CH_LAYOUT_STEREO            (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
       
    79 #define AV_CH_LAYOUT_2POINT1           (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
       
    80 #define AV_CH_LAYOUT_2_1               (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
       
    81 #define AV_CH_LAYOUT_SURROUND          (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
       
    82 #define AV_CH_LAYOUT_3POINT1           (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
       
    83 #define AV_CH_LAYOUT_4POINT0           (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
       
    84 #define AV_CH_LAYOUT_4POINT1           (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
       
    85 #define AV_CH_LAYOUT_2_2               (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
       
    86 #define AV_CH_LAYOUT_QUAD              (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
       
    87 #define AV_CH_LAYOUT_5POINT0           (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
       
    88 #define AV_CH_LAYOUT_5POINT1           (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
       
    89 #define AV_CH_LAYOUT_5POINT0_BACK      (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
       
    90 #define AV_CH_LAYOUT_5POINT1_BACK      (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
       
    91 #define AV_CH_LAYOUT_6POINT0           (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
       
    92 #define AV_CH_LAYOUT_6POINT0_FRONT     (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
       
    93 #define AV_CH_LAYOUT_HEXAGONAL         (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
       
    94 #define AV_CH_LAYOUT_6POINT1           (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
       
    95 #define AV_CH_LAYOUT_6POINT1_BACK      (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
       
    96 #define AV_CH_LAYOUT_6POINT1_FRONT     (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY)
       
    97 #define AV_CH_LAYOUT_7POINT0           (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
       
    98 #define AV_CH_LAYOUT_7POINT0_FRONT     (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
       
    99 #define AV_CH_LAYOUT_7POINT1           (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
       
   100 #define AV_CH_LAYOUT_7POINT1_WIDE      (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
       
   101 #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
       
   102 #define AV_CH_LAYOUT_OCTAGONAL         (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
       
   103 #define AV_CH_LAYOUT_STEREO_DOWNMIX    (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
       
   104 
       
   105 enum AVMatrixEncoding {
       
   106     AV_MATRIX_ENCODING_NONE,
       
   107     AV_MATRIX_ENCODING_DOLBY,
       
   108     AV_MATRIX_ENCODING_DPLII,
       
   109     AV_MATRIX_ENCODING_NB
       
   110 };
       
   111 
       
   112 /**
       
   113  * @}
       
   114  */
       
   115 
       
   116 /**
       
   117  * Return a channel layout id that matches name, or 0 if no match is found.
       
   118  *
       
   119  * name can be one or several of the following notations,
       
   120  * separated by '+' or '|':
       
   121  * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0,
       
   122  *   5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix);
       
   123  * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC,
       
   124  *   SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR);
       
   125  * - a number of channels, in decimal, optionally followed by 'c', yielding
       
   126  *   the default channel layout for that number of channels (@see
       
   127  *   av_get_default_channel_layout);
       
   128  * - a channel layout mask, in hexadecimal starting with "0x" (see the
       
   129  *   AV_CH_* macros).
       
   130  *
       
   131  * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7"
       
   132  */
       
   133 uint64_t av_get_channel_layout(const char *name);
       
   134 
       
   135 /**
       
   136  * Return a description of a channel layout.
       
   137  * If nb_channels is <= 0, it is guessed from the channel_layout.
       
   138  *
       
   139  * @param buf put here the string containing the channel layout
       
   140  * @param buf_size size in bytes of the buffer
       
   141  */
       
   142 void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
       
   143 
       
   144 /**
       
   145  * Return the number of channels in the channel layout.
       
   146  */
       
   147 int av_get_channel_layout_nb_channels(uint64_t channel_layout);
       
   148 
       
   149 /**
       
   150  * Return default channel layout for a given number of channels.
       
   151  */
       
   152 uint64_t av_get_default_channel_layout(int nb_channels);
       
   153 
       
   154 /**
       
   155  * Get the index of a channel in channel_layout.
       
   156  *
       
   157  * @param channel a channel layout describing exactly one channel which must be
       
   158  *                present in channel_layout.
       
   159  *
       
   160  * @return index of channel in channel_layout on success, a negative AVERROR
       
   161  *         on error.
       
   162  */
       
   163 int av_get_channel_layout_channel_index(uint64_t channel_layout,
       
   164                                         uint64_t channel);
       
   165 
       
   166 /**
       
   167  * Get the channel with the given index in channel_layout.
       
   168  */
       
   169 uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
       
   170 
       
   171 /**
       
   172  * Get the name of a given channel.
       
   173  *
       
   174  * @return channel name on success, NULL on error.
       
   175  */
       
   176 const char *av_get_channel_name(uint64_t channel);
       
   177 
       
   178 /**
       
   179  * @}
       
   180  */
       
   181 
       
   182 #endif /* AVUTIL_AUDIOCONVERT_H */