int frame_finished;
avcodec_get_frame_defaults (_frame);
- cout << "got packet " << _packet.stream_index << "\n";
-
AVCodecContext* context = _format_context->streams[_packet.stream_index]->codec;
if (_packet.stream_index == _video_stream && !_first_video) {
}
} else {
for (size_t i = 0; i < _audio_streams.size(); ++i) {
- if (_packet.stream_index == _audio_streams[i]->id && !_audio_streams[i]->start) {
+ if (_packet.stream_index == _audio_streams[i]->id && !_audio_streams[i]->first_audio) {
if (avcodec_decode_audio4 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) {
- _audio_streams[i]->start = frame_time (_audio_streams[i]->id);
+ _audio_streams[i]->first_audio = frame_time (_audio_streams[i]->id);
}
}
}
bool have_all_audio = true;
size_t i = 0;
while (i < _audio_streams.size() && have_all_audio) {
- have_all_audio = _audio_streams[i]->start;
+ have_all_audio = _audio_streams[i]->first_audio;
++i;
}
+ av_free_packet (&_packet);
+
if (_first_video && have_all_audio) {
break;
}
-
- av_free_packet (&_packet);
}
}
-optional<Time>
+optional<double>
FFmpegExaminer::frame_time (int stream) const
{
- optional<Time> t;
+ optional<double> t;
int64_t const bet = av_frame_get_best_effort_timestamp (_frame);
if (bet != AV_NOPTS_VALUE) {
- t = bet * av_q2d (_format_context->streams[stream]->time_base) * TIME_HZ;
+ t = bet * av_q2d (_format_context->streams[stream]->time_base);
}
return t;