#include "gstalsa.h"
-#include <gst/audio/multichannel.h>
+#include <gst/audio/audio.h>
static GstCaps *
gst_alsa_detect_rates (GstObject * obj, snd_pcm_hw_params_t * hw_params,
for (i = 0; i < gst_caps_get_size (in_caps); ++i) {
GstStructure *scopy;
+ const gchar *str;
+ GstAudioFormat format;
+ const GstAudioFormatInfo *finfo;
gint w, width = 0, depth = 0;
s = gst_caps_get_structure (in_caps, i);
- if (!gst_structure_has_name (s, "audio/x-raw-int")) {
- GST_WARNING_OBJECT (obj, "skipping non-int format");
+ if (!gst_structure_has_name (s, "audio/x-raw")) {
+ GST_WARNING_OBJECT (obj, "skipping non-raw format");
continue;
}
- if (!gst_structure_get_int (s, "width", &width) ||
- !gst_structure_get_int (s, "depth", &depth))
+
+ str = gst_structure_get_string (s, "format");
+ if (str == NULL)
+ continue;
+
+ format = gst_audio_format_from_string (str);
+ if (format == GST_AUDIO_FORMAT_UNKNOWN)
continue;
- if (width == 0 || (width % 8) != 0)
- continue; /* Only full byte widths are valid */
+
+ finfo = gst_audio_format_get_info (format);
+
+ width = GST_AUDIO_FORMAT_INFO_WIDTH (finfo);
+ depth = GST_AUDIO_FORMAT_INFO_DEPTH (finfo);
+
for (w = 0; w < G_N_ELEMENTS (pcmformats); w++)
if (pcmformats[w].width == width && pcmformats[w].depth == depth)
break;
if (snd_pcm_format_mask_test (mask, pcmformats[w].sformat) &&
snd_pcm_format_mask_test (mask, pcmformats[w].uformat)) {
- /* template contains { true, false } or just one, leave it as it is */
scopy = gst_structure_copy (s);
} else if (snd_pcm_format_mask_test (mask, pcmformats[w].sformat)) {
scopy = gst_structure_copy (s);
- gst_structure_set (scopy, "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ /* FIXME, remove unsigned version */
} else if (snd_pcm_format_mask_test (mask, pcmformats[w].uformat)) {
scopy = gst_structure_copy (s);
- gst_structure_set (scopy, "signed", G_TYPE_BOOLEAN, FALSE, NULL);
+ /* FIXME, remove signed version */
} else {
scopy = NULL;
}
if (scopy) {
- if (width > 8) {
- /* TODO: proper endianness detection, for now it's CPU endianness only */
- gst_structure_set (scopy, "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
- }
gst_caps_append_structure (caps, scopy);
}
}
switch (format) {
case OGGPCM_FMT_S8:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 8,
- "width", G_TYPE_INT, 8, "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S8", NULL);
break;
case OGGPCM_FMT_U8:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 8,
- "width", G_TYPE_INT, 8, "signed", G_TYPE_BOOLEAN, FALSE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "U8", NULL);
break;
case OGGPCM_FMT_S16_LE:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 16,
- "width", G_TYPE_INT, 16,
- "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
- "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S16_LE", NULL);
break;
case OGGPCM_FMT_S16_BE:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 16,
- "width", G_TYPE_INT, 16,
- "endianness", G_TYPE_INT, G_BIG_ENDIAN,
- "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S16_BE", NULL);
break;
case OGGPCM_FMT_S24_LE:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 24,
- "width", G_TYPE_INT, 24,
- "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
- "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S24_3LE", NULL);
break;
case OGGPCM_FMT_S24_BE:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 24,
- "width", G_TYPE_INT, 24,
- "endianness", G_TYPE_INT, G_BIG_ENDIAN,
- "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S24_3BE", NULL);
break;
case OGGPCM_FMT_S32_LE:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 32,
- "width", G_TYPE_INT, 32,
- "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
- "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S32_LE", NULL);
break;
case OGGPCM_FMT_S32_BE:
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "depth", G_TYPE_INT, 32,
- "width", G_TYPE_INT, 32,
- "endianness", G_TYPE_INT, G_BIG_ENDIAN,
- "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S32_BE", NULL);
break;
case OGGPCM_FMT_ULAW:
caps = gst_caps_new_simple ("audio/x-mulaw", NULL);
caps = gst_caps_new_simple ("audio/x-alaw", NULL);
break;
case OGGPCM_FMT_FLT32_LE:
- caps = gst_caps_new_simple ("audio/x-raw-float",
- "width", G_TYPE_INT, 32,
- "endianness", G_TYPE_INT, G_LITTLE_ENDIAN, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "F32_LE", NULL);
break;
case OGGPCM_FMT_FLT32_BE:
- caps = gst_caps_new_simple ("audio/x-raw-float",
- "width", G_TYPE_INT, 32,
- "endianness", G_TYPE_INT, G_BIG_ENDIAN, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "F32_BE", NULL);
break;
case OGGPCM_FMT_FLT64_LE:
- caps = gst_caps_new_simple ("audio/x-raw-float",
- "width", G_TYPE_INT, 64,
- "endianness", G_TYPE_INT, G_LITTLE_ENDIAN, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "F64_LE", NULL);
break;
case OGGPCM_FMT_FLT64_BE:
- caps = gst_caps_new_simple ("audio/x-raw-float",
- "width", G_TYPE_INT, 64,
- "endianness", G_TYPE_INT, G_BIG_ENDIAN, NULL);
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "F64_BE", NULL);
break;
default:
return FALSE;
}
- gst_caps_set_simple (caps, "audio/x-raw-int",
+ gst_caps_set_simple (caps,
"rate", G_TYPE_INT, pad->granulerate_n,
"channels", G_TYPE_INT, channels, NULL);
pad->caps = caps;
},
{
"PCM ", 8, 0,
- "audio/x-raw-int",
+ "audio/x-raw",
setup_pcm_mapper,
NULL,
NULL,
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-float, "
- "rate = (int) [ 1, 200000 ], "
- "channels = (int) [ 1, 256 ], " "endianness = (int) BYTE_ORDER, "
- "width = (int) 32")
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (F32) ", "
+ "rate = (int) [ 1, 200000 ], " "channels = (int) [ 1, 256 ]")
);
static GstStaticPadTemplate vorbis_enc_src_factory =
GstCaps *caps = gst_caps_new_empty ();
int i, c;
- gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw-float",
+ gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw",
+ "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
"rate", GST_TYPE_INT_RANGE, 1, 200000,
- "channels", G_TYPE_INT, 1,
- "endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 32,
- NULL));
+ "channels", G_TYPE_INT, 1, NULL));
- gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw-float",
+ gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw",
+ "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
"rate", GST_TYPE_INT_RANGE, 1, 200000,
- "channels", G_TYPE_INT, 2,
- "endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 32,
- NULL));
+ "channels", G_TYPE_INT, 2, NULL));
for (i = 3; i <= 8; i++) {
GValue chanpos = { 0 };
}
g_value_unset (&pos);
- structure = gst_structure_new ("audio/x-raw-float",
- "rate", GST_TYPE_INT_RANGE, 1, 200000,
- "channels", G_TYPE_INT, i,
- "endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 32, NULL);
+ structure = gst_structure_new ("audio/x-raw",
+ "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
+ "rate", GST_TYPE_INT_RANGE, 1, 200000, "channels", G_TYPE_INT, i, NULL);
gst_structure_set_value (structure, "channel-positions", &chanpos);
g_value_unset (&chanpos);
gst_caps_append_structure (caps, structure);
}
- gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw-float",
+ gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw",
+ "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
"rate", GST_TYPE_INT_RANGE, 1, 200000,
- "channels", GST_TYPE_INT_RANGE, 9, 256,
- "endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 32,
- NULL));
+ "channels", GST_TYPE_INT_RANGE, 9, 256, NULL));
return caps;
}
} tests[] = {
/* stereo => mono */
{
- "audio/x-raw-int, channels=2", "audio/x-raw-int, channels=1", { {
+ "audio/x-raw, channels=2", "audio/x-raw, channels=1", { {
0.5,}, {
0.5,},}},
/* mono => stereo */
{
- "audio/x-raw-int, channels=1", "audio/x-raw-int, channels=2", { {
+ "audio/x-raw, channels=1", "audio/x-raw, channels=2", { {
1, 1,},}}
};
#define DEFAULT_RAW_CAPS \
"video/x-raw; " \
- "audio/x-raw-int; " \
- "audio/x-raw-float; " \
+ "audio/x-raw; " \
"text/plain; " \
"text/x-pango-markup; " \
"video/x-dvd-subpicture; " \
GST_RANK_MARGINAL);
encode_bin->raw_video_caps = gst_caps_from_string ("video/x-raw");
- encode_bin->raw_audio_caps =
- gst_caps_from_string ("audio/x-raw-int;audio/x-raw-float");
+ encode_bin->raw_audio_caps = gst_caps_from_string ("audio/x-raw");
/* encode_bin->raw_text_caps = */
/* gst_caps_from_string ("text/plain;text/x-pango-markup"); */
/* FIXME : Once we have properties for specific converters, use those */
if (GST_IS_ENCODING_VIDEO_PROFILE (sprof)) {
const gboolean native_video =
- !!(ebin->flags & GST_ENC_FLAG_NO_VIDEO_CONVERSION);
+ ! !(ebin->flags & GST_ENC_FLAG_NO_VIDEO_CONVERSION);
GstElement *cspace = NULL, *scale, *vrate, *cspace2 = NULL;
GST_LOG ("Adding conversion elements for video stream");