From 4e87ac823108a670a1a0c5f67ab9bcd6980bac33 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 3 Nov 2014 20:00:34 +0100 Subject: demux_mkv: implement audio skipping/trimming This mechanism was introduced for Opus, and allows correct skipping of "preroll" data, as well as discarding trailing audio if the file's length isn't a multiple of the audio frame size. Not sure how to handle seeking. I don't understand the purpose of the SeekPreRoll element. This was tested with correctness_trimming_nobeeps.opus, remuxed to mka with mkvmerge v7.2.0. It seems to be correct, although the reported file duration is incorrect (maybe a mkvmerge issue). --- demux/packet.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'demux/packet.c') diff --git a/demux/packet.c b/demux/packet.c index 959c707732..968427dee5 100644 --- a/demux/packet.c +++ b/demux/packet.c @@ -20,6 +20,7 @@ #include #include +#include #include "common/av_common.h" #include "common/common.h" @@ -113,3 +114,18 @@ struct demux_packet *demux_copy_packet(struct demux_packet *dp) new->duration = dp->duration; return new; } + +int demux_packet_set_padding(struct demux_packet *dp, int start, int end) +{ + if (!start && !end) + return 0; + if (!dp->avpacket) + return -1; + uint8_t *p = av_packet_new_side_data(dp->avpacket, AV_PKT_DATA_SKIP_SAMPLES, 10); + if (!p) + return -1; + + AV_WL32(p + 0, start); + AV_WL32(p + 4, end); + return 0; +} -- cgit v1.2.3