avcodec: add duration field to AVCodecParserContext
This will allow parsers to export the duration of the current frame being output, if known, instead of using AVCodecContext.frame_size.
This commit is contained in:
parent
0b42a9388c
commit
e9cda85351
@ -13,6 +13,9 @@ libavutil: 2011-04-18
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2012-xx-xx - xxxxxxx - lavc 54.x.x
|
||||
Add duration field to AVCodecParserContext
|
||||
|
||||
2012-02-xx - xxxxxxx - lavu 51.23.1 - mathematics.h
|
||||
Add av_rescale_q_rnd()
|
||||
|
||||
|
@ -3994,6 +3994,13 @@ typedef struct AVCodecParserContext {
|
||||
* Previous frame byte position.
|
||||
*/
|
||||
int64_t last_pos;
|
||||
|
||||
/**
|
||||
* Duration of the current frame.
|
||||
* For audio, this is in units of 1 / AVCodecContext.sample_rate.
|
||||
* For all other types, this is in units of AVCodecContext.time_base.
|
||||
*/
|
||||
int duration;
|
||||
} AVCodecParserContext;
|
||||
|
||||
typedef struct AVCodecParser {
|
||||
|
@ -1039,6 +1039,20 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
||||
if (pkt->size) {
|
||||
got_packet:
|
||||
pkt->duration = 0;
|
||||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if (st->codec->sample_rate > 0) {
|
||||
pkt->duration = av_rescale_q_rnd(st->parser->duration,
|
||||
(AVRational){ 1, st->codec->sample_rate },
|
||||
st->time_base,
|
||||
AV_ROUND_DOWN);
|
||||
}
|
||||
} else if (st->codec->time_base.num != 0 &&
|
||||
st->codec->time_base.den != 0) {
|
||||
pkt->duration = av_rescale_q_rnd(st->parser->duration,
|
||||
st->codec->time_base,
|
||||
st->time_base,
|
||||
AV_ROUND_DOWN);
|
||||
}
|
||||
pkt->stream_index = st->index;
|
||||
pkt->pts = st->parser->pts;
|
||||
pkt->dts = st->parser->dts;
|
||||
|
Loading…
Reference in New Issue
Block a user