mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 23:48:53 +00:00
avi: Check return value of GstByteWriter
This commit is contained in:
parent
ba7569028c
commit
4bd694d2cd
1 changed files with 99 additions and 91 deletions
|
@ -1056,15 +1056,16 @@ static inline guint
|
||||||
gst_avi_mux_start_chunk (GstByteWriter * bw, const gchar * tag, guint32 fourcc)
|
gst_avi_mux_start_chunk (GstByteWriter * bw, const gchar * tag, guint32 fourcc)
|
||||||
{
|
{
|
||||||
guint chunk_offset;
|
guint chunk_offset;
|
||||||
|
gboolean hdl = TRUE;
|
||||||
|
|
||||||
if (tag)
|
if (tag)
|
||||||
gst_byte_writer_put_data (bw, (const guint8 *) tag, 4);
|
hdl &= gst_byte_writer_put_data (bw, (const guint8 *) tag, 4);
|
||||||
else
|
else
|
||||||
gst_byte_writer_put_uint32_le (bw, fourcc);
|
hdl &= gst_byte_writer_put_uint32_le (bw, fourcc);
|
||||||
|
|
||||||
chunk_offset = gst_byte_writer_get_pos (bw);
|
chunk_offset = gst_byte_writer_get_pos (bw);
|
||||||
/* real chunk size comes later */
|
/* real chunk size comes later */
|
||||||
gst_byte_writer_put_uint32_le (bw, 0);
|
hdl &= gst_byte_writer_put_uint32_le (bw, 0);
|
||||||
|
|
||||||
return chunk_offset;
|
return chunk_offset;
|
||||||
}
|
}
|
||||||
|
@ -1073,16 +1074,17 @@ static inline void
|
||||||
gst_avi_mux_end_chunk (GstByteWriter * bw, guint chunk_offset)
|
gst_avi_mux_end_chunk (GstByteWriter * bw, guint chunk_offset)
|
||||||
{
|
{
|
||||||
guint size;
|
guint size;
|
||||||
|
gboolean hdl = TRUE;
|
||||||
|
|
||||||
size = gst_byte_writer_get_pos (bw);
|
size = gst_byte_writer_get_pos (bw);
|
||||||
|
|
||||||
gst_byte_writer_set_pos (bw, chunk_offset);
|
gst_byte_writer_set_pos (bw, chunk_offset);
|
||||||
gst_byte_writer_put_uint32_le (bw, size - chunk_offset - 4);
|
hdl &= gst_byte_writer_put_uint32_le (bw, size - chunk_offset - 4);
|
||||||
gst_byte_writer_set_pos (bw, size);
|
gst_byte_writer_set_pos (bw, size);
|
||||||
|
|
||||||
/* arrange for even padding */
|
/* arrange for even padding */
|
||||||
if (size & 1)
|
if (size & 1)
|
||||||
gst_byte_writer_put_uint8 (bw, 0);
|
hdl &= gst_byte_writer_put_uint8 (bw, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* maybe some of these functions should be moved to riff.h? */
|
/* maybe some of these functions should be moved to riff.h? */
|
||||||
|
@ -1130,12 +1132,13 @@ static GstBuffer *
|
||||||
gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
{
|
{
|
||||||
const GstTagList *tags;
|
const GstTagList *tags;
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer = NULL;
|
||||||
gint size = 0;
|
gint size = 0;
|
||||||
GstByteWriter bw;
|
GstByteWriter bw;
|
||||||
GSList *node;
|
GSList *node;
|
||||||
guint avih, riff, hdrl;
|
guint avih, riff, hdrl;
|
||||||
GstMapInfo map;
|
GstMapInfo map;
|
||||||
|
gboolean hdl = TRUE;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (avimux, "creating avi header, data_size %u, idx_size %u",
|
GST_DEBUG_OBJECT (avimux, "creating avi header, data_size %u, idx_size %u",
|
||||||
avimux->data_size, avimux->idx_size);
|
avimux->data_size, avimux->idx_size);
|
||||||
|
@ -1154,26 +1157,26 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
|
|
||||||
/* avi header metadata */
|
/* avi header metadata */
|
||||||
riff = gst_avi_mux_start_chunk (&bw, "RIFF", 0);
|
riff = gst_avi_mux_start_chunk (&bw, "RIFF", 0);
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "AVI ", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "AVI ", 4);
|
||||||
hdrl = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
hdrl = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "hdrl", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "hdrl", 4);
|
||||||
|
|
||||||
avih = gst_avi_mux_start_chunk (&bw, "avih", 0);
|
avih = gst_avi_mux_start_chunk (&bw, "avih", 0);
|
||||||
/* the AVI header itself */
|
/* the AVI header itself */
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.us_frame);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.us_frame);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.max_bps);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.max_bps);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.pad_gran);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.pad_gran);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.flags);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.flags);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.tot_frames);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.tot_frames);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.init_frames);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.init_frames);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.streams);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.streams);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.bufsize);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.bufsize);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.width);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.width);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.height);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.height);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.scale);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.scale);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.rate);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.rate);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.start);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.start);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.length);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->avi_hdr.length);
|
||||||
gst_avi_mux_end_chunk (&bw, avih);
|
gst_avi_mux_end_chunk (&bw, avih);
|
||||||
|
|
||||||
/* stream data */
|
/* stream data */
|
||||||
|
@ -1187,26 +1190,26 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
|
|
||||||
/* stream list metadata */
|
/* stream list metadata */
|
||||||
strl = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
strl = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "strl", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "strl", 4);
|
||||||
|
|
||||||
/* generic header */
|
/* generic header */
|
||||||
strh = gst_avi_mux_start_chunk (&bw, "strh", 0);
|
strh = gst_avi_mux_start_chunk (&bw, "strh", 0);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.type);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.type);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.fcc_handler);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.fcc_handler);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.flags);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.flags);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.priority);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.priority);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.init_frames);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.init_frames);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.scale);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.scale);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.rate);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.rate);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.start);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.start);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.length);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.length);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.bufsize);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.bufsize);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.quality);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.quality);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->hdr.samplesize);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->hdr.samplesize);
|
||||||
gst_byte_writer_put_uint16_le (&bw, 0);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, 0);
|
||||||
gst_byte_writer_put_uint16_le (&bw, 0);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, 0);
|
||||||
gst_byte_writer_put_uint16_le (&bw, 0);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, 0);
|
||||||
gst_byte_writer_put_uint16_le (&bw, 0);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, 0);
|
||||||
gst_avi_mux_end_chunk (&bw, strh);
|
gst_avi_mux_end_chunk (&bw, strh);
|
||||||
|
|
||||||
if (avipad->is_video) {
|
if (avipad->is_video) {
|
||||||
|
@ -1215,20 +1218,21 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
/* the video header */
|
/* the video header */
|
||||||
strf = gst_avi_mux_start_chunk (&bw, "strf", 0);
|
strf = gst_avi_mux_start_chunk (&bw, "strf", 0);
|
||||||
/* the actual header */
|
/* the actual header */
|
||||||
|
hdl &=
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.size + codec_size);
|
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.size + codec_size);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.width);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.width);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.height);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.height);
|
||||||
gst_byte_writer_put_uint16_le (&bw, vidpad->vids.planes);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, vidpad->vids.planes);
|
||||||
gst_byte_writer_put_uint16_le (&bw, vidpad->vids.bit_cnt);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, vidpad->vids.bit_cnt);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.compression);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.compression);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.image_size);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.image_size);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.xpels_meter);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.xpels_meter);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.ypels_meter);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.ypels_meter);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.num_colors);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.num_colors);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vids.imp_colors);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vids.imp_colors);
|
||||||
if (vidpad->vids_codec_data) {
|
if (vidpad->vids_codec_data) {
|
||||||
gst_buffer_map (vidpad->vids_codec_data, &map, GST_MAP_READ);
|
gst_buffer_map (vidpad->vids_codec_data, &map, GST_MAP_READ);
|
||||||
gst_byte_writer_put_data (&bw, map.data, map.size);
|
hdl &= gst_byte_writer_put_data (&bw, map.data, map.size);
|
||||||
gst_buffer_unmap (vidpad->vids_codec_data, &map);
|
gst_buffer_unmap (vidpad->vids_codec_data, &map);
|
||||||
}
|
}
|
||||||
gst_avi_mux_end_chunk (&bw, strf);
|
gst_avi_mux_end_chunk (&bw, strf);
|
||||||
|
@ -1244,28 +1248,28 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
/* the vprp header */
|
/* the vprp header */
|
||||||
vprp = gst_avi_mux_start_chunk (&bw, "vprp", 0);
|
vprp = gst_avi_mux_start_chunk (&bw, "vprp", 0);
|
||||||
/* the actual data */
|
/* the actual data */
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.format_token);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.format_token);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.standard);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.standard);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.vert_rate);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.vert_rate);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.hor_t_total);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.hor_t_total);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.vert_lines);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.vert_lines);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.aspect);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.aspect);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.width);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.width);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.height);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.height);
|
||||||
gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.fields);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, vidpad->vprp.fields);
|
||||||
|
|
||||||
for (f = 0; f < vidpad->vprp.fields; ++f) {
|
for (f = 0; f < vidpad->vprp.fields; ++f) {
|
||||||
gst_riff_vprp_video_field_desc *fd;
|
gst_riff_vprp_video_field_desc *fd;
|
||||||
|
|
||||||
fd = &(vidpad->vprp.field_info[f]);
|
fd = &(vidpad->vprp.field_info[f]);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->compressed_bm_height);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->compressed_bm_height);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->compressed_bm_width);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->compressed_bm_width);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_height);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_height);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_width);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_width);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_x_offset);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_x_offset);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_y_offset);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->valid_bm_y_offset);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->video_x_t_offset);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->video_x_t_offset);
|
||||||
gst_byte_writer_put_uint32_le (&bw, fd->video_y_start);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, fd->video_y_start);
|
||||||
}
|
}
|
||||||
gst_avi_mux_end_chunk (&bw, vprp);
|
gst_avi_mux_end_chunk (&bw, vprp);
|
||||||
}
|
}
|
||||||
|
@ -1275,16 +1279,16 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
/* the audio header */
|
/* the audio header */
|
||||||
strf = gst_avi_mux_start_chunk (&bw, "strf", 0);
|
strf = gst_avi_mux_start_chunk (&bw, "strf", 0);
|
||||||
/* the actual header */
|
/* the actual header */
|
||||||
gst_byte_writer_put_uint16_le (&bw, audpad->auds.format);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.format);
|
||||||
gst_byte_writer_put_uint16_le (&bw, audpad->auds.channels);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.channels);
|
||||||
gst_byte_writer_put_uint32_le (&bw, audpad->auds.rate);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, audpad->auds.rate);
|
||||||
gst_byte_writer_put_uint32_le (&bw, audpad->auds.av_bps);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, audpad->auds.av_bps);
|
||||||
gst_byte_writer_put_uint16_le (&bw, audpad->auds.blockalign);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.blockalign);
|
||||||
gst_byte_writer_put_uint16_le (&bw, audpad->auds.size);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.size);
|
||||||
gst_byte_writer_put_uint16_le (&bw, codec_size);
|
hdl &= gst_byte_writer_put_uint16_le (&bw, codec_size);
|
||||||
if (audpad->auds_codec_data) {
|
if (audpad->auds_codec_data) {
|
||||||
gst_buffer_map (audpad->auds_codec_data, &map, GST_MAP_READ);
|
gst_buffer_map (audpad->auds_codec_data, &map, GST_MAP_READ);
|
||||||
gst_byte_writer_put_data (&bw, map.data, map.size);
|
hdl &= gst_byte_writer_put_data (&bw, map.data, map.size);
|
||||||
gst_buffer_unmap (vidpad->vids_codec_data, &map);
|
gst_buffer_unmap (vidpad->vids_codec_data, &map);
|
||||||
}
|
}
|
||||||
gst_avi_mux_end_chunk (&bw, strf);
|
gst_avi_mux_end_chunk (&bw, strf);
|
||||||
|
@ -1295,15 +1299,15 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
indx = gst_avi_mux_start_chunk (&bw, "indx", 0);
|
indx = gst_avi_mux_start_chunk (&bw, "indx", 0);
|
||||||
else
|
else
|
||||||
indx = gst_avi_mux_start_chunk (&bw, "JUNK", 0);
|
indx = gst_avi_mux_start_chunk (&bw, "JUNK", 0);
|
||||||
gst_byte_writer_put_uint16_le (&bw, 4); /* bytes per entry */
|
hdl &= gst_byte_writer_put_uint16_le (&bw, 4); /* bytes per entry */
|
||||||
gst_byte_writer_put_uint8 (&bw, 0); /* index subtype */
|
hdl &= gst_byte_writer_put_uint8 (&bw, 0); /* index subtype */
|
||||||
gst_byte_writer_put_uint8 (&bw, GST_AVI_INDEX_OF_INDEXES); /* index type */
|
hdl &= gst_byte_writer_put_uint8 (&bw, GST_AVI_INDEX_OF_INDEXES); /* index type */
|
||||||
gst_byte_writer_put_uint32_le (&bw, avipad->idx_index); /* entries in use */
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avipad->idx_index); /* entries in use */
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) avipad->tag, 4); /* stream id */
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) avipad->tag, 4); /* stream id */
|
||||||
gst_byte_writer_put_uint32_le (&bw, 0); /* reserved */
|
hdl &= gst_byte_writer_put_uint32_le (&bw, 0); /* reserved */
|
||||||
gst_byte_writer_put_uint32_le (&bw, 0); /* reserved */
|
hdl &= gst_byte_writer_put_uint32_le (&bw, 0); /* reserved */
|
||||||
gst_byte_writer_put_uint32_le (&bw, 0); /* reserved */
|
hdl &= gst_byte_writer_put_uint32_le (&bw, 0); /* reserved */
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) avipad->idx,
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) avipad->idx,
|
||||||
GST_AVI_SUPERINDEX_COUNT * sizeof (gst_avi_superindex_entry));
|
GST_AVI_SUPERINDEX_COUNT * sizeof (gst_avi_superindex_entry));
|
||||||
gst_avi_mux_end_chunk (&bw, indx);
|
gst_avi_mux_end_chunk (&bw, indx);
|
||||||
|
|
||||||
|
@ -1317,9 +1321,9 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
guint odml, dmlh;
|
guint odml, dmlh;
|
||||||
/* odml header */
|
/* odml header */
|
||||||
odml = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
odml = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "odml", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "odml", 4);
|
||||||
dmlh = gst_avi_mux_start_chunk (&bw, "dmlh", 0);
|
dmlh = gst_avi_mux_start_chunk (&bw, "dmlh", 0);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->total_frames);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->total_frames);
|
||||||
gst_avi_mux_end_chunk (&bw, dmlh);
|
gst_avi_mux_end_chunk (&bw, dmlh);
|
||||||
gst_avi_mux_end_chunk (&bw, odml);
|
gst_avi_mux_end_chunk (&bw, odml);
|
||||||
}
|
}
|
||||||
|
@ -1332,7 +1336,7 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
guint info;
|
guint info;
|
||||||
|
|
||||||
info = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
info = gst_avi_mux_start_chunk (&bw, "LIST", 0);
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "INFO", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "INFO", 4);
|
||||||
|
|
||||||
gst_tag_list_foreach (tags, gst_avi_mux_write_tag, &bw);
|
gst_tag_list_foreach (tags, gst_avi_mux_write_tag, &bw);
|
||||||
if (info + 8 == gst_byte_writer_get_pos (&bw)) {
|
if (info + 8 == gst_byte_writer_get_pos (&bw)) {
|
||||||
|
@ -1348,9 +1352,12 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
gst_avi_mux_end_chunk (&bw, riff);
|
gst_avi_mux_end_chunk (&bw, riff);
|
||||||
|
|
||||||
/* avi data header */
|
/* avi data header */
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "LIST", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "LIST", 4);
|
||||||
gst_byte_writer_put_uint32_le (&bw, avimux->data_size);
|
hdl &= gst_byte_writer_put_uint32_le (&bw, avimux->data_size);
|
||||||
gst_byte_writer_put_data (&bw, (guint8 *) "movi", 4);
|
hdl &= gst_byte_writer_put_data (&bw, (guint8 *) "movi", 4);
|
||||||
|
|
||||||
|
if (!hdl)
|
||||||
|
goto beach;
|
||||||
|
|
||||||
/* now get the data */
|
/* now get the data */
|
||||||
buffer = gst_byte_writer_reset_and_get_buffer (&bw);
|
buffer = gst_byte_writer_reset_and_get_buffer (&bw);
|
||||||
|
@ -1364,6 +1371,7 @@ gst_avi_mux_riff_get_avi_header (GstAviMux * avimux)
|
||||||
GST_MEMDUMP_OBJECT (avimux, "avi header", map.data, map.size);
|
GST_MEMDUMP_OBJECT (avimux, "avi header", map.data, map.size);
|
||||||
gst_buffer_unmap (buffer, &map);
|
gst_buffer_unmap (buffer, &map);
|
||||||
|
|
||||||
|
beach:
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue