tag_list_from_vorbiscomment_packet (ogg_packet * packet,
const guint8 * id_data, const guint id_data_length, GstTagList ** tags)
{
- GstBuffer *buf = NULL;
gchar *encoder = NULL;
GstTagList *list;
gboolean ret = TRUE;
g_return_val_if_fail (tags != NULL, FALSE);
- buf = gst_buffer_new ();
- GST_BUFFER_DATA (buf) = (guint8 *) packet->packet;
- GST_BUFFER_SIZE (buf) = packet->bytes;
-
- list = gst_tag_list_from_vorbiscomment_buffer (buf, id_data, id_data_length,
- &encoder);
+ list = gst_tag_list_from_vorbiscomment (packet->packet, packet->bytes,
+ id_data, id_data_length, &encoder);
if (!list) {
GST_WARNING ("failed to decode vorbis comments");
gst_tag_list_free (*tags);
*tags = list;
- gst_buffer_unref (buf);
-
return ret;
}
{
guint8 *data = packet->packet;
guint32 fourcc;
+ gchar *fstr;
pad->granulerate_n = GST_READ_UINT64_LE (data + 25);
pad->granulerate_d = 1;
fourcc = GST_READ_UINT32_LE (data + 9);
- GST_DEBUG ("fourcc: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+ fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+ GST_DEBUG ("fourcc: %s", fstr);
pad->caps = gst_riff_create_audio_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
"rate", G_TYPE_INT, pad->granulerate_n, NULL);
} else {
pad->caps = gst_caps_new_simple ("audio/x-ogm-unknown",
- "fourcc", GST_TYPE_FOURCC, fourcc,
+ "fourcc", G_TYPE_STRING, fstr,
"rate", G_TYPE_INT, pad->granulerate_n, NULL);
}
+ g_free (fstr);
pad->n_header_packets = 1;
pad->is_ogm = TRUE;
guint32 fourcc;
int width, height;
gint64 time_unit;
+ gchar *fstr;
GST_DEBUG ("time unit %d", GST_READ_UINT32_LE (data + 16));
GST_DEBUG ("samples per unit %d", GST_READ_UINT32_LE (data + 24));
fourcc = GST_READ_UINT32_LE (data + 9);
width = GST_READ_UINT32_LE (data + 45);
height = GST_READ_UINT32_LE (data + 49);
- GST_DEBUG ("fourcc: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+ fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+ GST_DEBUG ("fourcc: %s", fstr);
pad->caps = gst_riff_create_video_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
if (pad->caps == NULL) {
pad->caps = gst_caps_new_simple ("video/x-ogm-unknown",
- "fourcc", GST_TYPE_FOURCC, fourcc,
+ "fourcc", G_TYPE_STRING, fstr,
"framerate", GST_TYPE_FRACTION, pad->granulerate_n,
pad->granulerate_d, NULL);
} else {
"width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
}
GST_DEBUG ("caps: %" GST_PTR_FORMAT, pad->caps);
+ g_free (fstr);
pad->n_header_packets = 1;
pad->frame_size = 1;
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, "S16LE", 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, "S16BE", 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, "S24LE", 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, "S24BE", 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, "S32LE", 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, "S32BE", 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, "F32LE", 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, "F32BE", 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, "F64LE", 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, "F64BE", 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_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad,
const GstCaps * caps)
{
+ GstBuffer *buf;
const GstStructure *structure;
- const GstBuffer *buf;
const GValue *streamheader;
const GValue *first_element;
ogg_packet packet;
+ guint8 *data;
+ gsize size;
+ gboolean ret;
GST_INFO ("Checking streamheader on caps %" GST_PTR_FORMAT, caps);
}
buf = gst_value_get_buffer (first_element);
- if (buf == NULL || GST_BUFFER_SIZE (buf) == 0) {
+ if (buf == NULL) {
+ GST_ERROR ("no first streamheader buffer");
+ return FALSE;
+ }
+
+ data = gst_buffer_map (buf, &size, 0, GST_MAP_READ);
+ if (data == NULL || size == 0) {
GST_ERROR ("invalid first streamheader buffer");
return FALSE;
}
- GST_MEMDUMP ("streamheader", GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
+ GST_MEMDUMP ("streamheader", data, size);
- packet.packet = GST_BUFFER_DATA (buf);
- packet.bytes = GST_BUFFER_SIZE (buf);
+ packet.packet = data;
+ packet.bytes = size;
GST_INFO ("Found headers on caps, using those to determine type");
- return gst_ogg_stream_setup_map (pad, &packet);
+ ret = gst_ogg_stream_setup_map (pad, &packet);
+
+ gst_buffer_unmap (buf, data, size);
+
+ return ret;
}