Blame gst-libs/gst/audio/audio-channels.h

Packit 971217
/* GStreamer
Packit 971217
 * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
Packit 971217
 * Library       <2001> Thomas Vander Stichele <thomas@apestaart.org>
Packit 971217
 *               <2011> Wim Taymans <wim.taymans@gmail.com>
Packit 971217
 *
Packit 971217
 * This library is free software; you can redistribute it and/or
Packit 971217
 * modify it under the terms of the GNU Library General Public
Packit 971217
 * License as published by the Free Software Foundation; either
Packit 971217
 * version 2 of the License, or (at your option) any later version.
Packit 971217
 *
Packit 971217
 * This library is distributed in the hope that it will be useful,
Packit 971217
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 971217
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 971217
 * Library General Public License for more details.
Packit 971217
 *
Packit 971217
 * You should have received a copy of the GNU Library General Public
Packit 971217
 * License along with this library; if not, write to the
Packit 971217
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit 971217
 * Boston, MA 02110-1301, USA.
Packit 971217
 */
Packit 971217
Packit 971217
#ifndef __GST_AUDIO_AUDIO_H__
Packit 971217
#include <gst/audio/audio.h>
Packit 971217
#endif
Packit 971217
Packit 971217
#ifndef __GST_AUDIO_CHANNELS_H__
Packit 971217
#define __GST_AUDIO_CHANNELS_H__
Packit 971217
Packit 971217
G_BEGIN_DECLS
Packit 971217
Packit 971217
/**
Packit 971217
 * GstAudioChannelPosition:
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_MONO: Mono without direction;
Packit 971217
 *     can only be used with 1 channel
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT: Front left
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT: Front right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER: Front center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_LFE1: Low-frequency effects 1 (subwoofer)
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_REAR_LEFT: Rear left
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT: Rear right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: Front left of center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: Front right of center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_REAR_CENTER: Rear center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_LFE2: Low-frequency effects 2 (subwoofer)
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT: Side left
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT: Side right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT: Top front left
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT: Top front right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER: Top front center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_CENTER: Top center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT: Top rear left
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT: Top rear right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT: Top side right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT: Top rear right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER: Top rear center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER: Bottom front center
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT: Bottom front left
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT: Bottom front right
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT: Wide left (between front left and side left)
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT: Wide right (between front right and side right)
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT: Surround left (between rear left and side left)
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT: Surround right (between rear right and side right)
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_NONE: used for position-less channels, e.g.
Packit 971217
 *     from a sound card that records 1024 channels; mutually exclusive with
Packit 971217
 *     any other channel position
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_INVALID: invalid position
Packit 971217
 *
Packit 971217
 * Audio channel positions.
Packit 971217
 *
Packit 971217
 * These are the channels defined in SMPTE 2036-2-2008
Packit 971217
 * Table 1 for 22.2 audio systems with the Surround and Wide channels from
Packit 971217
 * DTS Coherent Acoustics (v.1.3.1) and 10.2 and 7.1 layouts. In the caps the
Packit 971217
 * actual channel layout is expressed with a channel count and a channel mask,
Packit 971217
 * which describes the existing channels. The positions in the bit mask correspond
Packit 971217
 * to the enum values.
Packit 971217
 * For negotiation it is allowed to have more bits set in the channel mask than
Packit 971217
 * the number of channels to specify the allowed channel positions but this is
Packit 971217
 * not allowed in negotiated caps. It is not allowed in any situation other
Packit 971217
 * than the one mentioned below to have less bits set in the channel mask than
Packit 971217
 * the number of channels.
Packit 971217
 *
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_MONO can only be used with a single mono channel that
Packit 971217
 * has no direction information and would be mixed into all directional channels.
Packit 971217
 * This is expressed in caps by having a single channel and no channel mask.
Packit 971217
 *
Packit 971217
 * @GST_AUDIO_CHANNEL_POSITION_NONE can only be used if all channels have this position.
Packit 971217
 * This is expressed in caps by having a channel mask with no bits set.
Packit 971217
 *
Packit 971217
 * As another special case it is allowed to have two channels without a channel mask.
Packit 971217
 * This implicitely means that this is a stereo stream with a front left and front right
Packit 971217
 * channel.
Packit 971217
 */
Packit 971217
typedef enum {
Packit 971217
  /* These get negative indices to allow to use
Packit 971217
   * the enum values of the normal cases for the
Packit 971217
   * bit-mask position */
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_NONE = -3,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_MONO = -2,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_INVALID = -1,
Packit 971217
Packit 971217
  /* Normal cases */
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT = 0,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_LFE1,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_LFE2,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT,
Packit 971217
  GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT
Packit 971217
} GstAudioChannelPosition;
Packit 971217
Packit 971217
#define GST_AUDIO_CHANNEL_POSITION_MASK(pos) (G_GUINT64_CONSTANT(1)<< GST_AUDIO_CHANNEL_POSITION_ ## pos)
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_buffer_reorder_channels (GstBuffer * buffer,
Packit 971217
                                                  GstAudioFormat format,
Packit 971217
                                                  gint channels,
Packit 971217
                                                  const GstAudioChannelPosition * from,
Packit 971217
                                                  const GstAudioChannelPosition * to);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_reorder_channels        (gpointer data, gsize size,
Packit 971217
                                                  GstAudioFormat format,
Packit 971217
                                                  gint channels,
Packit 971217
                                                  const GstAudioChannelPosition * from,
Packit 971217
                                                  const GstAudioChannelPosition * to);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_channel_positions_to_valid_order (GstAudioChannelPosition *position,
Packit 971217
                                                           gint channels);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_check_valid_channel_positions (const GstAudioChannelPosition *position,
Packit 971217
                                                        gint channels, gboolean force_order);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_channel_positions_to_mask  (const GstAudioChannelPosition *position,
Packit 971217
                                                     gint channels, gboolean force_order,
Packit 971217
                                                     guint64 *channel_mask);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_channel_positions_from_mask (gint channels, guint64 channel_mask,
Packit 971217
                                                      GstAudioChannelPosition * position);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gboolean       gst_audio_get_channel_reorder_map (gint channels,
Packit 971217
                                                  const GstAudioChannelPosition * from,
Packit 971217
                                                  const GstAudioChannelPosition * to,
Packit 971217
                                                  gint *reorder_map);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
guint64        gst_audio_channel_get_fallback_mask (gint channels);
Packit 971217
Packit 971217
GST_AUDIO_API
Packit 971217
gchar*         gst_audio_channel_positions_to_string (const GstAudioChannelPosition * position,
Packit 971217
                                                      gint channels);
Packit 971217
Packit 971217
G_END_DECLS
Packit 971217
Packit 971217
#endif /* __GST_AUDIO_CHANNELS_H__ */