From 23da9e68e81ca058e537bcf975b64b20eea595fc Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 14 Apr 2013 23:19:29 +0200 Subject: demux_mkv: introduce new_demux_packet_from() and use it --- demux/demux.c | 9 ++++++++- demux/demux.h | 1 + demux/demux_mkv.c | 15 ++++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index 858078cfac..90e241139f 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -133,7 +133,7 @@ struct demux_packet *new_demux_packet(size_t len) return dp; } -// data must already have suitable padding +// data must already have suitable padding, and does not copy the data struct demux_packet *new_demux_packet_fromdata(void *data, size_t len) { struct demux_packet *dp = create_packet(len); @@ -141,6 +141,13 @@ struct demux_packet *new_demux_packet_fromdata(void *data, size_t len) return dp; } +struct demux_packet *new_demux_packet_from(void *data, size_t len) +{ + struct demux_packet *dp = new_demux_packet(len); + memcpy(dp->buffer, data, len); + return dp; +} + void resize_demux_packet(struct demux_packet *dp, size_t len) { if (len > 1000000000) { diff --git a/demux/demux.h b/demux/demux.h index 5c4e899199..3d66139d69 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -287,6 +287,7 @@ typedef struct { struct demux_packet *new_demux_packet(size_t len); // data must already have suitable padding struct demux_packet *new_demux_packet_fromdata(void *data, size_t len); +struct demux_packet *new_demux_packet_from(void *data, size_t len); void resize_demux_packet(struct demux_packet *dp, size_t len); void free_demux_packet(struct demux_packet *dp); diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 71e029c2bf..03789631dc 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1891,8 +1891,7 @@ static void handle_realvideo(demuxer_t *demuxer, mkv_track_t *track, demux_packet_t *dp; uint32_t timestamp = mkv_d->last_pts * 1000; - dp = new_demux_packet(data.len); - memcpy(dp->buffer, data.start, data.len); + dp = new_demux_packet_from(data.start, data.len); if (mkv_d->v_skip_to_keyframe) { dp->pts = mkv_d->last_pts; @@ -1991,9 +1990,8 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, track->sub_packet_cnt = 0; // Release all the audio packets for (x = 0; x < sph * w / apk_usize; x++) { - dp = new_demux_packet(apk_usize); - memcpy(dp->buffer, track->audio_buf + x * apk_usize, - apk_usize); + dp = new_demux_packet_from(track->audio_buf + x * apk_usize, + apk_usize); /* Put timestamp only on packets that correspond to original * audio packets in file */ dp->pts = (x * apk_usize % w) ? 0 : @@ -2004,8 +2002,7 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, } } } else { // Not a codec that require reordering - dp = new_demux_packet(size); - memcpy(dp->buffer, buffer, size); + dp = new_demux_packet_from(buffer, size); if (track->ra_pts == mkv_d->last_pts && !mkv_d->a_skip_to_keyframe) dp->pts = 0; else @@ -2165,8 +2162,8 @@ static int handle_block(demuxer_t *demuxer, struct block_info *block_info) else { bstr buffer = demux_mkv_decode(track, block, 1); if (buffer.start) { - demux_packet_t *dp = new_demux_packet(buffer.len); - memcpy(dp->buffer, buffer.start, buffer.len); + demux_packet_t *dp = + new_demux_packet_from(buffer.start, buffer.len); if (buffer.start != block.start) talloc_free(buffer.start); dp->keyframe = keyframe; -- cgit v1.2.3