[FFmpeg-soc] [soc]: r5227 - concat/libavformat/concatgen.c
gkovacs
subversion at mplayerhq.hu
Mon Aug 24 04:39:16 CEST 2009
Author: gkovacs
Date: Mon Aug 24 04:39:15 2009
New Revision: 5227
Log:
use static variable to cache result of av_playlist_time_offset to reduce computations in read_packet
Modified:
concat/libavformat/concatgen.c
Modified: concat/libavformat/concatgen.c
==============================================================================
--- concat/libavformat/concatgen.c Mon Aug 24 04:20:33 2009 (r5226)
+++ concat/libavformat/concatgen.c Mon Aug 24 04:39:15 2009 (r5227)
@@ -52,14 +52,21 @@ int ff_concatgen_read_packet(AVFormatCon
}
if (ret >= 0) {
if (pkt) {
+ int streams_offset = av_playlist_streams_offset_from_playidx(ctx, ctx->pe_curidx);
stream_index = av_playlist_localstidx_from_streamidx(ctx, pkt->stream_index);
- pkt->stream_index = stream_index + av_playlist_streams_offset_from_playidx(ctx, ctx->pe_curidx);
+ pkt->stream_index = stream_index + streams_offset;
if (!ic->streams[stream_index]->codec->has_b_frames ||
ic->streams[stream_index]->codec->codec->id == CODEC_ID_MPEG1VIDEO) {
- int time_offset_avbase = av_playlist_time_offset(ctx->durations, ctx->pe_curidx);
- int time_offset_localbase = av_rescale_q(time_offset_avbase,
- AV_TIME_BASE_Q,
- ic->streams[stream_index]->time_base);
+ static int cached_streams_offset = -1;
+ static int64_t time_offset_avbase = 0;
+ int time_offset_localbase;
+ if (cached_streams_offset != streams_offset) { // must recompute timestamp offset
+ cached_streams_offset = streams_offset;
+ time_offset_avbase = av_playlist_time_offset(ctx->durations, streams_offset);
+ }
+ time_offset_localbase = av_rescale_q(time_offset_avbase,
+ AV_TIME_BASE_Q,
+ ic->streams[stream_index]->time_base);
pkt->dts += time_offset_localbase;
if (pkt->pts != AV_NOPTS_VALUE)
pkt->pts += time_offset_localbase;
More information about the FFmpeg-soc
mailing list