/* This file is part of GEGL * * GEGL is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * GEGL is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with GEGL; if not, see . * * Copyright 2015 OEyvind Kolaas */ #ifndef __GEGL_AUDIO_FRAGMENT_H__ #define __GEGL_AUDIO_FRAGMENT_H__ #include G_BEGIN_DECLS #define GEGL_TYPE_AUDIO_FRAGMENT (gegl_audio_fragment_get_type ()) #define GEGL_AUDIO_FRAGMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_AUDIO_FRAGMENT, GeglAudioFragment)) #define GEGL_AUDIO_FRAGMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEGL_TYPE_AUDIO_FRAGMENT, GeglAudioFragmentClass)) #define GEGL_IS_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_AUDIO_FRAGMENT)) #define GEGL_IS_AUDIO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEGL_TYPE_AUDIO_FRAGMENT)) #define GEGL_AUDIO_FRAGMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEGL_TYPE_AUDIO_FRAGMENT, GeglAudioFragmentClass)) typedef struct _GeglAudioFragmentClass GeglAudioFragmentClass; typedef struct _GeglAudioFragmentPrivate GeglAudioFragmentPrivate; #define GEGL_MAX_AUDIO_CHANNELS 8 /* the values for channel_layout are designed to match and be compatible with * the ones in ffmpegs libavutil */ #define GEGL_CH_FRONT_LEFT 0x00000001 #define GEGL_CH_FRONT_RIGHT 0x00000002 #define GEGL_CH_FRONT_CENTER 0x00000004 #define GEGL_CH_LOW_FREQUENCY 0x00000008 #define GEGL_CH_BACK_LEFT 0x00000010 #define GEGL_CH_BACK_RIGHT 0x00000020 #define GEGL_CH_FRONT_LEFT_OF_CENTER 0x00000040 #define GEGL_CH_FRONT_RIGHT_OF_CENTER 0x00000080 #define GEGL_CH_BACK_CENTER 0x00000100 #define GEGL_CH_SIDE_LEFT 0x00000200 #define GEGL_CH_SIDE_RIGHT 0x00000400 #define GEGL_CH_TOP_CENTER 0x00000800 #define GEGL_CH_TOP_FRONT_LEFT 0x00001000 #define GEGL_CH_TOP_FRONT_CENTER 0x00002000 #define GEGL_CH_TOP_FRONT_RIGHT 0x00004000 #define GEGL_CH_TOP_BACK_LEFT 0x00008000 #define GEGL_CH_TOP_BACK_CENTER 0x00010000 #define GEGL_CH_TOP_BACK_RIGHT 0x00020000 #define GEGL_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. #define GEGL_CH_STEREO_RIGHT 0x40000000 ///< See GEGL_CH_STEREO_LEFT. #define GEGL_CH_WIDE_LEFT 0x0000000080000000ULL #define GEGL_CH_WIDE_RIGHT 0x0000000100000000ULL #define GEGL_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL #define GEGL_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL #define GEGL_CH_LOW_FREQUENCY_2 0x0000000800000000ULL #define GEGL_CH_LAYOUT_NATIVE 0x8000000000000000ULL #define GEGL_CH_LAYOUT_MONO (GEGL_CH_FRONT_CENTER) #define GEGL_CH_LAYOUT_STEREO (GEGL_CH_FRONT_LEFT|GEGL_CH_FRONT_RIGHT) #define GEGL_CH_LAYOUT_2POINT1 (GEGL_CH_LAYOUT_STEREO|GEGL_CH_LOW_FREQUENCY) #define GEGL_CH_LAYOUT_2_1 (GEGL_CH_LAYOUT_STEREO|GEGL_CH_BACK_CENTER) #define GEGL_CH_LAYOUT_SURROUND (GEGL_CH_LAYOUT_STEREO|GEGL_CH_FRONT_CENTER) #define GEGL_CH_LAYOUT_3POINT1 (GEGL_CH_LAYOUT_SURROUND|GEGL_CH_LOW_FREQUENCY) #define GEGL_CH_LAYOUT_4POINT0 (GEGL_CH_LAYOUT_SURROUND|GEGL_CH_BACK_CENTER) #define GEGL_CH_LAYOUT_4POINT1 (GEGL_CH_LAYOUT_4POINT0|GEGL_CH_LOW_FREQUENCY) #define GEGL_CH_LAYOUT_2_2 (GEGL_CH_LAYOUT_STEREO|GEGL_CH_SIDE_LEFT|GEGL_CH_SIDE_RIGHT) #define GEGL_CH_LAYOUT_QUAD (GEGL_CH_LAYOUT_STEREO|GEGL_CH_BACK_LEFT|GEGL_CH_BACK_RIGHT) #define GEGL_CH_LAYOUT_5POINT0 (GEGL_CH_LAYOUT_SURROUND|GEGL_CH_SIDE_LEFT|GEGL_CH_SIDE_RIGHT) #define GEGL_CH_LAYOUT_5POINT1 (GEGL_CH_LAYOUT_5POINT0|GEGL_CH_LOW_FREQUENCY) #define GEGL_CH_LAYOUT_5POINT0_BACK (GEGL_CH_LAYOUT_SURROUND|GEGL_CH_BACK_LEFT|GEGL_CH_BACK_RIGHT) #define GEGL_CH_LAYOUT_5POINT1_BACK (GEGL_CH_LAYOUT_5POINT0_BACK|GEGL_CH_LOW_FREQUENCY) #define GEGL_CH_LAYOUT_6POINT0 (GEGL_CH_LAYOUT_5POINT0|GEGL_CH_BACK_CENTER) #define GEGL_CH_LAYOUT_6POINT0_FRONT (GEGL_CH_LAYOUT_2_2|GEGL_CH_FRONT_LEFT_OF_CENTER|GEGL_CH_FRONT_RIGHT_OF_CENTER) #define GEGL_CH_LAYOUT_HEXAGONAL (GEGL_CH_LAYOUT_5POINT0_BACK|GEGL_CH_BACK_CENTER) #define GEGL_CH_LAYOUT_6POINT1 (GEGL_CH_LAYOUT_5POINT1|GEGL_CH_BACK_CENTER) #define GEGL_CH_LAYOUT_6POINT1_BACK (GEGL_CH_LAYOUT_5POINT1_BACK|GEGL_CH_BACK_CENTER) #define GEGL_CH_LAYOUT_6POINT1_FRONT (GEGL_CH_LAYOUT_6POINT0_FRONT|GEGL_CH_LOW_FREQUENCY) #define GEGL_CH_LAYOUT_7POINT0 (GEGL_CH_LAYOUT_5POINT0|GEGL_CH_BACK_LEFT|GEGL_CH_BACK_RIGHT) #define GEGL_CH_LAYOUT_7POINT0_FRONT (GEGL_CH_LAYOUT_5POINT0|GEGL_CH_FRONT_LEFT_OF_CENTER|GEGL_CH_FRONT_RIGHT_OF_CENTER) #define GEGL_CH_LAYOUT_7POINT1 (GEGL_CH_LAYOUT_5POINT1|GEGL_CH_BACK_LEFT|GEGL_CH_BACK_RIGHT) #define GEGL_CH_LAYOUT_7POINT1_WIDE (GEGL_CH_LAYOUT_5POINT1|GEGL_CH_FRONT_LEFT_OF_CENTER|GEGL_CH_FRONT_RIGHT_OF_CENTER) #define GEGL_CH_LAYOUT_7POINT1_WIDE_BACK (GEGL_CH_LAYOUT_5POINT1_BACK|GEGL_CH_FRONT_LEFT_OF_CENTER|GEGL_CH_FRONT_RIGHT_OF_CENTER) #define GEGL_CH_LAYOUT_OCTAGONAL (GEGL_CH_LAYOUT_5POINT0|GEGL_CH_BACK_LEFT|GEGL_CH_BACK_CENTER|GEGL_CH_BACK_RIGHT) #define GEGL_CH_LAYOUT_HEXADECAGONAL (GEGL_CH_LAYOUT_OCTAGONAL|GEGL_CH_WIDE_LEFT|GEGL_CH_WIDE_RIGHT|GEGL_CH_TOP_BACK_LEFT|GEGL_CH_TOP_BACK_RIGHT|GEGL_CH_TOP_BACK_CENTER|GEGL_CH_TOP_FRONT_CENTER|GEGL_CH_TOP_FRONT_LEFT|GEGL_CH_TOP_FRONT_RIGHT) #define GEGL_CH_LAYOUT_STEREO_DOWNMIX (GEGL_CH_STEREO_LEFT|GEGL_CH_STEREO_RIGHT) struct _GeglAudioFragment { GObject parent_instance; float *data[GEGL_MAX_AUDIO_CHANNELS]; GeglAudioFragmentPrivate *priv; }; struct _GeglAudioFragmentClass { GObjectClass parent_class; }; GType gegl_audio_fragment_get_type (void) G_GNUC_CONST; GeglAudioFragment * gegl_audio_fragment_new (int sample_rate, int channels, int channel_layout, int max_samples); void gegl_audio_fragment_set_max_samples (GeglAudioFragment *audio, int max_samples); void gegl_audio_fragment_set_sample_rate (GeglAudioFragment *audio, int sample_rate); void gegl_audio_fragment_set_channels (GeglAudioFragment *audio, int channels); void gegl_audio_fragment_set_channel_layout (GeglAudioFragment *audio, int channel_layout); void gegl_audio_fragment_set_sample_count (GeglAudioFragment *audio, int sample_count); void gegl_audio_fragment_set_pos (GeglAudioFragment *audio, int pos); int gegl_audio_fragment_get_max_samples (GeglAudioFragment *audio); int gegl_audio_fragment_get_sample_rate (GeglAudioFragment *audio); int gegl_audio_fragment_get_channels (GeglAudioFragment *audio); int gegl_audio_fragment_get_sample_count (GeglAudioFragment *audio); int gegl_audio_fragment_get_pos (GeglAudioFragment *audio); int gegl_audio_fragment_get_channel_layout (GeglAudioFragment *audio); #define GEGL_TYPE_PARAM_AUDIO_FRAGMENT (gegl_param_audio_fragment_get_type ()) #define GEGL_IS_PARAM_SPEC_AUDIO_FRAGMENT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GEGL_TYPE_PARAM_AUDIO_FRAGMENT)) GType gegl_param_audio_fragment_get_type (void) G_GNUC_CONST; /** * gegl_param_spec_audio_fragment: * @name: canonical name of the property specified * @nick: nick name for the property specified * @blurb: description of the property specified * @flags: flags for the property specified * * Creates a new #GParamSpec instance specifying a #GeglAudioFragment property. * * Returns: (transfer full): a newly created parameter specification */ GParamSpec * gegl_param_spec_audio_fragment (const gchar *name, const gchar *nick, const gchar *blurb, GParamFlags flags); G_END_DECLS #endif /* __GEGL_AUDIO_FRAGMENT_H__ */