[FFmpeg-soc] [soc]: r4555 - in concat/libavformat: m3u.c playlist.c
gkovacs
subversion at mplayerhq.hu
Wed Jul 1 03:25:57 CEST 2009
Author: gkovacs
Date: Wed Jul 1 03:25:57 2009
New Revision: 4555
Log:
forcing intermediate double for ff_conv_stream_time to yield nonzero result
Modified:
concat/libavformat/m3u.c
concat/libavformat/playlist.c
Modified: concat/libavformat/m3u.c
==============================================================================
--- concat/libavformat/m3u.c Wed Jul 1 02:56:28 2009 (r4554)
+++ concat/libavformat/m3u.c Wed Jul 1 03:25:57 2009 (r4555)
@@ -116,23 +116,27 @@ static int m3u_read_packet(AVFormatConte
}
}
// TODO switch from AVERROR_EOF to AVERROR_EOS
- else if (ret == AVERROR_EOF && playld->pe_curidx < playld->pelist_size - 1) {
+ // -32 AVERROR_EOF for avi, -51 for ogg
+ else if (ret < 0 && playld->pe_curidx < playld->pelist_size - 1) {
// TODO account for out-of-sync audio/video by using per-stream offsets
// using streams[]->duration slightly overestimates offset
// playld->dts_offset += ic->streams[0]->duration;
// using streams[]->cur_dts slightly overestimates offset
// playld->dts_offset += ic->streams[0]->cur_dts;
// playld->dts_offset += playld->dts_prevpacket;
+ printf("switching streams\n");
for (i = 0; i < ic->nb_streams && i < playld->time_offsets_size; ++i) {
playld->time_offsets[i] += ff_get_duration(ic, i);
}
-// playld->dts_offset += ff_get_duration(ic, pkt->stream_index);
++playld->pe_curidx;
// pkt->destruct(pkt);
pkt = av_malloc(sizeof(AVPacket));
ff_playlist_populate_context(playld, s);
goto retr;
}
+ else {
+ printf("avpacket ret is %d\n", ret);
+ }
return ret;
}
Modified: concat/libavformat/playlist.c
==============================================================================
--- concat/libavformat/playlist.c Wed Jul 1 02:56:28 2009 (r4554)
+++ concat/libavformat/playlist.c Wed Jul 1 03:25:57 2009 (r4555)
@@ -247,12 +247,12 @@ int64_t ff_conv_stream_time(AVFormatCont
{
int64_t durn;
durn = (int64_t)(
- avt_duration /
- AV_TIME_BASE *
- ic->streams[stream_index]->time_base.den /
- ic->streams[stream_index]->time_base.num)
- ;
- printf("conv stream time from %ld to %ld/%ld is %ld\n", avt_duration, ic->streams[stream_index]->time_base.num, ic->streams[stream_index]->time_base.den, durn);
+ (double)avt_duration / //double casting may be unnecessary
+ ic->streams[stream_index]->time_base.num /
+ (AV_TIME_BASE / // 10^6
+ ic->streams[stream_index]->time_base.den)
+ );
+ printf("%s conv stream time from %ld to %ld/%ld is %ld\n", ic->iformat->name, avt_duration, ic->streams[stream_index]->time_base.num, ic->streams[stream_index]->time_base.den, durn);
return durn;
}
@@ -271,8 +271,7 @@ int64_t ff_get_duration(AVFormatContext
// h264 and mpeg1: pkt->dts values incorrect
int64_t durn;
durn = ic->duration;
-// durn = (ic->duration / ic->streams[stream_index]->time_base.den) *
-// (ic->streams[stream_index]->time_base.num / AV_TIME_BASE);
+// durn = ic->streams[stream_index]->duration; // ogg gives wrong value
printf("duration is %ld\n", durn);
return durn;
}
More information about the FFmpeg-soc
mailing list