summaryrefslogtreecommitdiff
path: root/gst/isomp4/gstqtmux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/isomp4/gstqtmux.c')
-rw-r--r--gst/isomp4/gstqtmux.c91
1 files changed, 44 insertions, 47 deletions
diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c
index e1951f7b4..be370bc31 100644
--- a/gst/isomp4/gstqtmux.c
+++ b/gst/isomp4/gstqtmux.c
@@ -524,7 +524,7 @@ gst_qt_mux_prepare_jpc_buffer (GstQTPad * qtpad, GstBuffer * buf,
GstQTMux * qtmux)
{
GstBuffer *newbuf;
- guint8 *data;
+ GstMapInfo map;
gsize size;
GST_LOG_OBJECT (qtmux, "Preparing jpc buffer");
@@ -536,11 +536,11 @@ gst_qt_mux_prepare_jpc_buffer (GstQTPad * qtpad, GstBuffer * buf,
newbuf = gst_buffer_new_and_alloc (size + 8);
gst_buffer_copy_into (newbuf, buf, GST_BUFFER_COPY_ALL, 8, size);
- data = gst_buffer_map (newbuf, &size, NULL, GST_MAP_WRITE);
- GST_WRITE_UINT32_BE (data, size);
- GST_WRITE_UINT32_LE (data + 4, FOURCC_jp2c);
+ gst_buffer_map (newbuf, &map, GST_MAP_WRITE);
+ GST_WRITE_UINT32_BE (map.data, map.size);
+ GST_WRITE_UINT32_LE (map.data + 4, FOURCC_jp2c);
- gst_buffer_unmap (buf, data, size);
+ gst_buffer_unmap (buf, &map);
gst_buffer_unref (buf);
return newbuf;
@@ -651,8 +651,7 @@ gst_qt_mux_add_mp4_cover (GstQTMux * qtmux, const GstTagList * list,
GstCaps *caps;
GstStructure *structure;
gint flags = 0;
- guint8 *data;
- gsize size;
+ GstMapInfo map;
g_return_if_fail (gst_tag_get_type (tag) == GST_TYPE_BUFFER);
@@ -685,11 +684,11 @@ gst_qt_mux_add_mp4_cover (GstQTMux * qtmux, const GstTagList * list,
goto done;
}
- data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+ gst_buffer_map (buf, &map, GST_MAP_READ);
GST_DEBUG_OBJECT (qtmux, "Adding tag %" GST_FOURCC_FORMAT
- " -> image size %" G_GSIZE_FORMAT "", GST_FOURCC_ARGS (fourcc), size);
- atom_moov_add_tag (qtmux->moov, fourcc, flags, data, size);
- gst_buffer_unmap (buf, data, size);
+ " -> image size %" G_GSIZE_FORMAT "", GST_FOURCC_ARGS (fourcc), map.size);
+ atom_moov_add_tag (qtmux->moov, fourcc, flags, map.data, map.size);
+ gst_buffer_unmap (buf, &map);
done:
g_value_unset (&value);
}
@@ -1122,13 +1121,12 @@ gst_qt_mux_add_metadata_tags (GstQTMux * qtmux, const GstTagList * list)
if (buf && (caps = NULL /*gst_buffer_get_caps (buf) */ )) {
GstStructure *s;
const gchar *style = NULL;
- guint8 *data;
- gsize size;
+ GstMapInfo map;
- data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+ gst_buffer_map (buf, &map, GST_MAP_READ);
GST_DEBUG_OBJECT (qtmux,
"Found private tag %d/%d; size %" G_GSIZE_FORMAT ", caps %"
- GST_PTR_FORMAT, i, num_tags, size, caps);
+ GST_PTR_FORMAT, i, num_tags, map.size, caps);
s = gst_caps_get_structure (caps, 0);
if (s && (style = gst_structure_get_string (s, "style"))) {
/* try to prevent some style tag ending up into another variant
@@ -1138,10 +1136,10 @@ gst_qt_mux_add_metadata_tags (GstQTMux * qtmux, const GstTagList * list)
(strcmp (style, "iso") == 0 &&
qtmux_klass->format == GST_QT_MUX_FORMAT_3GP)) {
GST_DEBUG_OBJECT (qtmux, "Adding private tag");
- atom_moov_add_blob_tag (qtmux->moov, data, size);
+ atom_moov_add_blob_tag (qtmux->moov, map.data, map.size);
}
}
- gst_buffer_unmap (buf, data, size);
+ gst_buffer_unmap (buf, &map);
gst_caps_unref (caps);
}
}
@@ -1207,13 +1205,13 @@ gst_qt_mux_send_buffer (GstQTMux * qtmux, GstBuffer * buf, guint64 * offset,
GST_LOG_OBJECT (qtmux, "sending buffer size %" G_GSIZE_FORMAT, size);
if (mind_fast && qtmux->fast_start_file) {
+ GstMapInfo map;
gint ret;
- guint8 *data;
GST_LOG_OBJECT (qtmux, "to temporary file");
- data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
- ret = fwrite (data, sizeof (guint8), size, qtmux->fast_start_file);
- gst_buffer_unmap (buf, data, size);
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ ret = fwrite (map.data, sizeof (guint8), map.size, qtmux->fast_start_file);
+ gst_buffer_unmap (buf, &map);
gst_buffer_unref (buf);
if (ret != size)
goto write_error;
@@ -1272,18 +1270,19 @@ gst_qt_mux_send_buffered_data (GstQTMux * qtmux, guint64 * offset)
GST_DEBUG_OBJECT (qtmux, "Sending buffered data");
while (ret == GST_FLOW_OK) {
const int bufsize = 4096;
- guint8 *data;
+ GstMapInfo map;
gsize size;
buf = gst_buffer_new_and_alloc (bufsize);
- data = gst_buffer_map (buf, &size, NULL, GST_MAP_WRITE);
- size = fread (data, sizeof (guint8), bufsize, qtmux->fast_start_file);
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ size = fread (map.data, sizeof (guint8), bufsize, qtmux->fast_start_file);
if (size == 0) {
- gst_buffer_unmap (buf, data, -1);
+ gst_buffer_unmap (buf, &map);
break;
}
- gst_buffer_unmap (buf, data, size);
- GST_LOG_OBJECT (qtmux, "Pushing buffered buffer of size %d", (gint) size);
+ GST_LOG_OBJECT (qtmux, "Pushing buffered buffer of size %d",
+ (gint) map.size);
+ gst_buffer_unmap (buf, &map);
ret = gst_qt_mux_send_buffer (qtmux, buf, offset, FALSE);
buf = NULL;
}
@@ -1383,8 +1382,7 @@ gst_qt_mux_update_mdat_size (GstQTMux * qtmux, guint64 mdat_pos,
GstBuffer *buf;
gboolean large_file;
GstSegment segment;
- guint8 *data;
- gsize size;
+ GstMapInfo map;
large_file = (mdat_size > MDAT_LARGE_FILE_LIMIT);
@@ -1398,17 +1396,17 @@ gst_qt_mux_update_mdat_size (GstQTMux * qtmux, guint64 mdat_pos,
if (large_file) {
buf = gst_buffer_new_and_alloc (sizeof (guint64));
- data = gst_buffer_map (buf, &size, NULL, GST_MAP_WRITE);
- GST_WRITE_UINT64_BE (data, mdat_size + 16);
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ GST_WRITE_UINT64_BE (map.data, mdat_size + 16);
} else {
buf = gst_buffer_new_and_alloc (16);
- data = gst_buffer_map (buf, &size, NULL, GST_MAP_WRITE);
- GST_WRITE_UINT32_BE (data, 8);
- GST_WRITE_UINT32_LE (data + 4, FOURCC_free);
- GST_WRITE_UINT32_BE (data + 8, mdat_size + 8);
- GST_WRITE_UINT32_LE (data + 12, FOURCC_mdat);
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ GST_WRITE_UINT32_BE (map.data, 8);
+ GST_WRITE_UINT32_LE (map.data + 4, FOURCC_free);
+ GST_WRITE_UINT32_BE (map.data + 8, mdat_size + 8);
+ GST_WRITE_UINT32_LE (map.data + 12, FOURCC_mdat);
}
- gst_buffer_unmap (buf, data, size);
+ gst_buffer_unmap (buf, &map);
return gst_qt_mux_send_buffer (qtmux, buf, offset, FALSE);
}
@@ -2822,25 +2820,24 @@ gst_qt_mux_audio_sink_set_caps (GstPad * pad, GstCaps * caps)
} else if (strcmp (mimetype, "audio/x-alac") == 0) {
GstBuffer *codec_config;
gint len;
- guint8 *data;
- gsize size;
+ GstMapInfo map;
entry.fourcc = FOURCC_alac;
- data = gst_buffer_map ((GstBuffer *) codec_data, &size, NULL, GST_MAP_READ);
+ gst_buffer_map ((GstBuffer *) codec_data, &map, GST_MAP_READ);
/* let's check if codec data already comes with 'alac' atom prefix */
- if (!codec_data || (len = size) < 28) {
+ if (!codec_data || (len = map.size) < 28) {
GST_DEBUG_OBJECT (qtmux, "broken caps, codec data missing");
- gst_buffer_unmap ((GstBuffer *) codec_data, data, size);
+ gst_buffer_unmap ((GstBuffer *) codec_data, &map);
goto refuse_caps;
}
- if (GST_READ_UINT32_LE (data + 4) == FOURCC_alac) {
+ if (GST_READ_UINT32_LE (map.data + 4) == FOURCC_alac) {
len -= 8;
codec_config =
gst_buffer_copy_region ((GstBuffer *) codec_data, 0, 8, len);
} else {
codec_config = gst_buffer_ref ((GstBuffer *) codec_data);
}
- gst_buffer_unmap ((GstBuffer *) codec_data, data, size);
+ gst_buffer_unmap ((GstBuffer *) codec_data, &map);
if (len != 28) {
/* does not look good, but perhaps some trailing unneeded stuff */
GST_WARNING_OBJECT (qtmux, "unexpected codec-data size, possibly broken");
@@ -2850,10 +2847,10 @@ gst_qt_mux_audio_sink_set_caps (GstPad * pad, GstCaps * caps)
else
ext_atom = build_codec_data_extension (FOURCC_alac, codec_config);
/* set some more info */
- data = gst_buffer_map (codec_config, &size, NULL, GST_MAP_READ);
+ gst_buffer_map (codec_config, &map, GST_MAP_READ);
entry.bytes_per_sample = 2;
- entry.samples_per_packet = GST_READ_UINT32_BE (data + 4);
- gst_buffer_unmap (codec_config, data, size);
+ entry.samples_per_packet = GST_READ_UINT32_BE (map.data + 4);
+ gst_buffer_unmap (codec_config, &map);
gst_buffer_unref (codec_config);
}