mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-27 01:42:20 +00:00
lavf/ogg: Support for end trimming Opus
Adding support for end trimming Opus embedded in Ogg container. Signed-Off By: Vignesh Venkatasubramanian <vigneshv@google.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
b7dd459863
commit
23637f98f4
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "oggdec.h"
|
#include "oggdec.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
@ -773,6 +774,18 @@ retry:
|
|||||||
pkt->duration = os->pduration;
|
pkt->duration = os->pduration;
|
||||||
pkt->pos = fpos;
|
pkt->pos = fpos;
|
||||||
|
|
||||||
|
if (os->end_trimming) {
|
||||||
|
uint8_t *side_data = av_packet_new_side_data(pkt,
|
||||||
|
AV_PKT_DATA_SKIP_SAMPLES,
|
||||||
|
10);
|
||||||
|
if(side_data == NULL) {
|
||||||
|
av_free_packet(pkt);
|
||||||
|
av_free(pkt);
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
}
|
||||||
|
AV_WL32(side_data + 4, os->end_trimming);
|
||||||
|
}
|
||||||
|
|
||||||
return psize;
|
return psize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +84,7 @@ struct ogg_stream {
|
|||||||
int got_start;
|
int got_start;
|
||||||
int got_data; ///< 1 if the stream got some data (non-initial packets), 0 otherwise
|
int got_data; ///< 1 if the stream got some data (non-initial packets), 0 otherwise
|
||||||
int nb_header; ///< set to the number of parsed headers
|
int nb_header; ///< set to the number of parsed headers
|
||||||
|
int end_trimming; ///< set the number of packets to drop from the end
|
||||||
void *private;
|
void *private;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ static int opus_packet(AVFormatContext *avf, int idx)
|
|||||||
skip = FFMIN(skip, os->pduration);
|
skip = FFMIN(skip, os->pduration);
|
||||||
if (skip > 0) {
|
if (skip > 0) {
|
||||||
os->pduration = skip < os->pduration ? os->pduration - skip : 1;
|
os->pduration = skip < os->pduration ? os->pduration - skip : 1;
|
||||||
|
os->end_trimming = skip;
|
||||||
av_log(avf, AV_LOG_WARNING,
|
av_log(avf, AV_LOG_WARNING,
|
||||||
"Last packet must be truncated to %d (unimplemented).\n",
|
"Last packet must be truncated to %d (unimplemented).\n",
|
||||||
os->pduration);
|
os->pduration);
|
||||||
|
Loading…
Reference in New Issue
Block a user