static void gst_audio_parse_class_init (GstAudioParseClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); GstRawParseClass *rp_class = GST_RAW_PARSE_CLASS (klass); GstCaps *caps; gobject_class->set_property = gst_audio_parse_set_property; gobject_class->get_property = gst_audio_parse_get_property; gobject_class->finalize = gst_audio_parse_finalize; rp_class->get_caps = gst_audio_parse_get_caps; g_object_class_install_property (gobject_class, PROP_FORMAT, g_param_spec_enum ("format", "Format", "Format of audio samples in raw stream", GST_AUDIO_PARSE_FORMAT, GST_AUDIO_PARSE_FORMAT_RAW, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_RAW_FORMAT, g_param_spec_enum ("raw-format", "Raw Format", "Format of audio samples in raw stream", GST_TYPE_AUDIO_FORMAT, GST_AUDIO_FORMAT_S16, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_RATE, g_param_spec_int ("rate", "Rate", "Rate of audio samples in raw stream", 1, INT_MAX, 44100, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CHANNELS, g_param_spec_int ("channels", "Channels", "Number of channels in raw stream", 1, 64, 2, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_INTERLEAVED, g_param_spec_boolean ("interleaved", "Interleaved Layout", "True if audio has interleaved layout", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CHANNEL_POSITIONS, g_param_spec_value_array ("channel-positions", "Channel positions", "Channel positions used on the output", g_param_spec_enum ("channel-position", "Channel position", "Channel position of the n-th input", GST_TYPE_AUDIO_CHANNEL_POSITION, GST_AUDIO_CHANNEL_POSITION_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS), G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_USE_SINK_CAPS, g_param_spec_boolean ("use-sink-caps", "Use sink caps", "Use the sink caps for the format, only performing timestamping", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (gstelement_class, "Audio Parse", "Filter/Audio", "Converts stream into audio frames", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL) ", layout = (string) { interleaved, non-interleaved }; " "audio/x-alaw, rate=(int)[1,MAX], channels=(int)[1,MAX]; " "audio/x-mulaw, rate=(int)[1,MAX], channels=(int)[1,MAX]"); gst_raw_parse_class_set_src_pad_template (rp_class, caps); gst_raw_parse_class_set_multiple_frames_per_buffer (rp_class, TRUE); gst_caps_unref (caps); GST_DEBUG_CATEGORY_INIT (gst_audio_parse_debug, "audioparse", 0, "audioparse element"); }
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <gst/gst.h> #include <gst/audio/audio.h> #include "gstaudiosegmentclip.h" static GstStaticPadTemplate sink_pad_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))); static GstStaticPadTemplate src_pad_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))); static void gst_audio_segment_clip_reset (GstSegmentClip * self); static GstFlowReturn gst_audio_segment_clip_clip_buffer (GstSegmentClip * self, GstBuffer * buffer, GstBuffer ** outbuf); static gboolean gst_audio_segment_clip_set_caps (GstSegmentClip * self, GstCaps * caps); GST_DEBUG_CATEGORY_STATIC (gst_audio_segment_clip_debug); #define GST_CAT_DEFAULT gst_audio_segment_clip_debug G_DEFINE_TYPE (GstAudioSegmentClip, gst_audio_segment_clip,
// Capabilities that Audacity can handle // // This resolves to: (on little endien) // // "audio/x-raw, " // "format = (string) {S16LE, S24_32LE, F32LE}, " // "rate = (int) [ 1, max ]", // "channels = (int) [ 1, max ]" static GstStaticCaps supportedCaps = GST_STATIC_CAPS( GST_AUDIO_CAPS_MAKE( "{" GST_AUDIO_NE(S16) ", " GST_AUDIO_NE(S24_32) ", " GST_AUDIO_NE(F32) "}" ) ); // Context used for private stream data struct GStreamContext { GstElement *mConv; // Audio converter GstElement *mSink; // Application sink bool mUse; // True if this stream should be imported WaveTrack **mChannels; // Array of WaveTrack pointers, one for each channel gint mNumChannels; // Number of channels gdouble mSampleRate; // Sample rate gchar *mType; // Audio type
#include "gstvideoframe-audiolevel.h" #include <math.h> #define GST_CAT_DEFAULT gst_videoframe_audiolevel_debug #if G_BYTE_ORDER == G_LITTLE_ENDIAN # define FORMATS "{ S8, S16LE, S32LE, F32LE, F64LE }" #else # define FORMATS "{ S8, S16BE, S32BE, F32BE, F64BE }" #endif GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); static GstStaticPadTemplate audio_sink_template = GST_STATIC_PAD_TEMPLATE ("asink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (FORMATS)) ); static GstStaticPadTemplate audio_src_template = GST_STATIC_PAD_TEMPLATE ("asrc", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (FORMATS)) ); static GstStaticPadTemplate video_sink_template = GST_STATIC_PAD_TEMPLATE ("vsink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw") );
#include <orc/orc.h> #else #define orc_memcpy memcpy #endif #define gst_droidadec_parent_class parent_class G_DEFINE_TYPE (GstDroidADec, gst_droidadec, GST_TYPE_AUDIO_DECODER); GST_DEBUG_CATEGORY_EXTERN (gst_droid_adec_debug); #define GST_CAT_DEFAULT gst_droid_adec_debug static GstStaticPadTemplate gst_droidadec_src_template_factory = GST_STATIC_PAD_TEMPLATE (GST_AUDIO_DECODER_SRC_NAME, GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_DEF_FORMAT))); static void gst_droidadec_error (void *data, int err); static void gst_droidadec_signal_eos (void *data); static void gst_droidadec_data_available (void *data, DroidMediaCodecData * encoded); static GstFlowReturn gst_droidadec_finish (GstAudioDecoder * decoder); static gboolean gst_droidadec_create_codec (GstDroidADec * dec, GstBuffer * input) { DroidMediaCodecDecoderMetaData md; const gchar *droid = gst_droid_codec_get_droid_type (dec->codec_type); GST_INFO_OBJECT (dec, "create codec of type %s. Channels: %d, Rate: %d", droid, dec->channels, dec->rate);
static GstFlowReturn gst_atdec_handle_frame (GstAudioDecoder * decoder, GstBuffer * buffer); static void gst_atdec_flush (GstAudioDecoder * decoder, gboolean hard); static void gst_atdec_buffer_emptied (void *user_data, AudioQueueRef queue, AudioQueueBufferRef buffer); enum { PROP_0 }; static GstStaticPadTemplate gst_atdec_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("S16LE") ", layout=interleaved;" GST_AUDIO_CAPS_MAKE ("F32LE") ", layout=interleaved") ); static GstStaticPadTemplate gst_atdec_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/mpeg, mpegversion=4, framed=true, channels=[1,max];" "audio/mpeg, mpegversion=1, layer=3") ); G_DEFINE_TYPE_WITH_CODE (GstATDec, gst_atdec, GST_TYPE_AUDIO_DECODER, GST_DEBUG_CATEGORY_INIT (gst_atdec_debug_category, "atdec", 0, "debug category for atdec element"));