summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_examiner.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-03-01 21:06:01 +0100
committerCarl Hetherington <cth@carlh.net>2021-03-02 15:40:18 +0100
commit2091311fde159ec39126608327eb93b28898bd6c (patch)
tree1396d4e920de7603b402353c00ba5cce765c33e5 /src/lib/ffmpeg_examiner.cc
parent6c092a6abef4bf38fe62112544f7b6247cdb07d0 (diff)
Remove FFmpeg::_packet.
Diffstat (limited to 'src/lib/ffmpeg_examiner.cc')
-rw-r--r--src/lib/ffmpeg_examiner.cc42
1 files changed, 23 insertions, 19 deletions
diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc
index b07ee5d62..a3e78b65f 100644
--- a/src/lib/ffmpeg_examiner.cc
+++ b/src/lib/ffmpeg_examiner.cc
@@ -124,8 +124,11 @@ DCPOMATIC_DISABLE_WARNINGS
*/
string temporal_reference;
while (true) {
- int r = av_read_frame (_format_context, &_packet);
+ auto packet = av_packet_alloc ();
+ DCPOMATIC_ASSERT (packet);
+ int r = av_read_frame (_format_context, packet);
if (r < 0) {
+ av_packet_free (&packet);
break;
}
@@ -137,25 +140,25 @@ DCPOMATIC_DISABLE_WARNINGS
}
}
- auto context = _format_context->streams[_packet.stream_index]->codec;
+ auto context = _format_context->streams[packet->stream_index]->codec;
DCPOMATIC_ENABLE_WARNINGS
- if (_video_stream && _packet.stream_index == _video_stream.get()) {
- video_packet (context, temporal_reference);
+ if (_video_stream && packet->stream_index == _video_stream.get()) {
+ video_packet (context, temporal_reference, packet);
}
bool got_all_audio = true;
for (size_t i = 0; i < _audio_streams.size(); ++i) {
- if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index)) {
- audio_packet (context, _audio_streams[i]);
+ if (_audio_streams[i]->uses_index(_format_context, packet->stream_index)) {
+ audio_packet (context, _audio_streams[i], packet);
}
if (!_audio_streams[i]->first_audio) {
got_all_audio = false;
}
}
- av_packet_unref (&_packet);
+ av_packet_free (&packet);
if (_first_video && got_all_audio && temporal_reference.size() >= (PULLDOWN_CHECK_FRAMES * 2)) {
/* All done */
@@ -163,23 +166,24 @@ DCPOMATIC_ENABLE_WARNINGS
}
}
- _packet.data = nullptr;
- _packet.size = 0;
+ AVPacket packet;
+ packet.data = nullptr;
+ packet.size = 0;
/* XXX: I'm not sure this makes any sense: how does _packet.stream_index get the right value here? */
DCPOMATIC_DISABLE_WARNINGS
- auto context = _format_context->streams[_packet.stream_index]->codec;
+ auto context = _format_context->streams[packet.stream_index]->codec;
DCPOMATIC_ENABLE_WARNINGS
- while (_video_stream && video_packet(context, temporal_reference)) {}
+ while (_video_stream && video_packet(context, temporal_reference, &packet)) {}
for (size_t i = 0; i < _audio_streams.size(); ++i) {
- if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index)) {
- audio_packet (context, _audio_streams[i]);
+ if (_audio_streams[i]->uses_index(_format_context, packet.stream_index)) {
+ audio_packet (context, _audio_streams[i], &packet);
}
}
if (_video_stream) {
/* This code taken from get_rotation() in ffmpeg:cmdutils.c */
- AVStream* stream = _format_context->streams[*_video_stream];
- AVDictionaryEntry* rotate_tag = av_dict_get (stream->metadata, "rotate", 0, 0);
+ auto stream = _format_context->streams[*_video_stream];
+ auto rotate_tag = av_dict_get (stream->metadata, "rotate", 0, 0);
uint8_t* displaymatrix = av_stream_get_side_data (stream, AV_PKT_DATA_DISPLAYMATRIX, 0);
_rotation = 0;
@@ -213,7 +217,7 @@ DCPOMATIC_ENABLE_WARNINGS
* @return true if some video was decoded, otherwise false.
*/
bool
-FFmpegExaminer::video_packet (AVCodecContext* context, string& temporal_reference)
+FFmpegExaminer::video_packet (AVCodecContext* context, string& temporal_reference, AVPacket* packet)
{
DCPOMATIC_ASSERT (_video_stream);
@@ -223,7 +227,7 @@ FFmpegExaminer::video_packet (AVCodecContext* context, string& temporal_referenc
int frame_finished;
DCPOMATIC_DISABLE_WARNINGS
- if (avcodec_decode_video2 (context, _frame, &frame_finished, &_packet) < 0 || !frame_finished) {
+ if (avcodec_decode_video2 (context, _frame, &frame_finished, packet) < 0 || !frame_finished) {
return false;
}
DCPOMATIC_ENABLE_WARNINGS
@@ -246,7 +250,7 @@ DCPOMATIC_ENABLE_WARNINGS
void
-FFmpegExaminer::audio_packet (AVCodecContext* context, shared_ptr<FFmpegAudioStream> stream)
+FFmpegExaminer::audio_packet (AVCodecContext* context, shared_ptr<FFmpegAudioStream> stream, AVPacket* packet)
{
if (stream->first_audio) {
return;
@@ -254,7 +258,7 @@ FFmpegExaminer::audio_packet (AVCodecContext* context, shared_ptr<FFmpegAudioStr
int frame_finished;
DCPOMATIC_DISABLE_WARNINGS
- if (avcodec_decode_audio4 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) {
+ if (avcodec_decode_audio4 (context, _frame, &frame_finished, packet) >= 0 && frame_finished) {
DCPOMATIC_ENABLE_WARNINGS
stream->first_audio = frame_time (stream->stream (_format_context));
}