Skip to content

Commit 26f6c9b

Browse files
committed
Compatible with FFmpeg-7.0.1
1 parent 2e4ae2e commit 26f6c9b

10 files changed

+352
-527
lines changed

src/osgPlugins/OpenCASCADE/ReaderWriterOpenCASCADE.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ osg::ref_ptr<osg::Geometry> ReaderWritterOpenCASCADE::OCCTKReader::_createGeomet
211211
{
212212
// populate vertex list
213213
// Ref: http://www.opencascade.org/org/forum/thread_16694/?forum=3
214-
gp_Pnt pt = (triangulation->Nodes())(j).Transformed(transformation * location.Transformation());
214+
gp_Pnt pt = (triangulation->Node(j)).Transformed(transformation * location.Transformation());
215215
vertexList->push_back(osg::Vec3(pt.X(), pt.Y(), pt.Z()));
216216

217217
// populate color list

src/osgPlugins/ffmpeg/FFmpegDecoder.cpp

Lines changed: 27 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
#include "FFmpegDecoder.hpp"
32
#include "FFmpegParameters.hpp"
43

@@ -36,8 +35,10 @@ static std::string AvStrError(int errnum)
3635
}
3736

3837
FFmpegDecoder::FFmpegDecoder() :
39-
m_audio_stream(0),
40-
m_video_stream(0),
38+
m_audio_stream(nullptr),
39+
m_video_stream(nullptr),
40+
m_audio_index(-1),
41+
m_video_index(-1),
4142
m_audio_queue(100),
4243
m_video_queue(100),
4344
m_audio_decoder(m_audio_queue, m_clocks),
@@ -61,10 +62,10 @@ bool FFmpegDecoder::open(const std::string & filename, FFmpegParameters* paramet
6162
try
6263
{
6364
// Open video file
64-
AVFormatContext * p_format_context = 0;
65-
AVInputFormat *iformat = 0;
65+
AVFormatContext * p_format_context = nullptr;
66+
AVInputFormat *iformat = nullptr;
6667

67-
if (filename.compare(0, 5, "/dev/")==0)
68+
if (filename.compare(0, 5, "/dev/") == 0)
6869
{
6970
#ifdef ANDROID
7071
throw std::runtime_error("Device not supported on Android");
@@ -78,24 +79,24 @@ bool FFmpegDecoder::open(const std::string & filename, FFmpegParameters* paramet
7879
}
7980

8081
std::string format = "video4linux2";
81-
iformat = av_find_input_format(format.c_str());
82+
iformat = const_cast<AVInputFormat*>(av_find_input_format(format.c_str()));
8283

8384
if (iformat)
8485
{
85-
OSG_INFO<<"Found input format: "<<format<<std::endl;
86+
OSG_INFO << "Found input format: " << format << std::endl;
8687
}
8788
else
8889
{
89-
OSG_INFO<<"Failed to find input format: "<<format<<std::endl;
90+
OSG_INFO << "Failed to find input format: " << format << std::endl;
9091
}
9192

9293
#endif
9394
}
9495
else
9596
{
96-
iformat = parameters ? parameters->getFormat() : 0;
97-
AVIOContext* context = parameters ? parameters->getContext() : 0;
98-
if (context != NULL)
97+
iformat = parameters ? const_cast<AVInputFormat*>(parameters->getFormat()) : nullptr;
98+
AVIOContext* context = parameters ? parameters->getContext() : nullptr;
99+
if (context != nullptr)
99100
{
100101
p_format_context = avformat_alloc_context();
101102
p_format_context->pb = context;
@@ -105,38 +106,23 @@ bool FFmpegDecoder::open(const std::string & filename, FFmpegParameters* paramet
105106
int error = avformat_open_input(&p_format_context, filename.c_str(), iformat, parameters->getOptions());
106107
if (error != 0)
107108
{
108-
std::string error_str;
109-
switch (error)
110-
{
111-
//case AVERROR_UNKNOWN: error_str = "AVERROR_UNKNOWN"; break; // same value as AVERROR_INVALIDDATA
112-
case AVERROR_IO: error_str = "AVERROR_IO"; break;
113-
case AVERROR_NUMEXPECTED: error_str = "AVERROR_NUMEXPECTED"; break;
114-
case AVERROR_INVALIDDATA: error_str = "AVERROR_INVALIDDATA"; break;
115-
case AVERROR_NOMEM: error_str = "AVERROR_NOMEM"; break;
116-
case AVERROR_NOFMT: error_str = "AVERROR_NOFMT"; break;
117-
case AVERROR_NOTSUPP: error_str = "AVERROR_NOTSUPP"; break;
118-
case AVERROR_NOENT: error_str = "AVERROR_NOENT"; break;
119-
case AVERROR_PATCHWELCOME: error_str = "AVERROR_PATCHWELCOME"; break;
120-
default: error_str = "Unknown error"; break;
121-
}
122-
123-
throw std::runtime_error("av_open_input_file() failed : " + error_str);
109+
throw std::runtime_error("avformat_open_input() failed: " + AvStrError(error));
124110
}
125111

126112
m_format_context.reset(p_format_context);
127113

128114
// Retrieve stream info
129115
// Only buffer up to one and a half seconds by default
130116
float max_analyze_duration = 1.5;
131-
AVDictionaryEntry *mad = av_dict_get( *parameters->getOptions(), "mad", NULL, 0 );
132-
if ( mad ) {
117+
AVDictionaryEntry *mad = av_dict_get(*parameters->getOptions(), "mad", NULL, 0);
118+
if (mad) {
133119
max_analyze_duration = atof(mad->value);
134120
}
135121
p_format_context->max_analyze_duration = AV_TIME_BASE * max_analyze_duration;
136122
// p_format_context->probesize = 100000;
137123

138124
if (avformat_find_stream_info(p_format_context, NULL) < 0)
139-
throw std::runtime_error("av_find_stream_info() failed");
125+
throw std::runtime_error("avformat_find_stream_info() failed");
140126

141127
m_duration = double(m_format_context->duration) / AV_TIME_BASE;
142128
if (m_format_context->start_time != static_cast<int64_t>(AV_NOPTS_VALUE))
@@ -159,7 +145,7 @@ bool FFmpegDecoder::open(const std::string & filename, FFmpegParameters* paramet
159145
m_audio_stream = m_format_context->streams[m_audio_index];
160146
else
161147
{
162-
m_audio_stream = 0;
148+
m_audio_stream = nullptr;
163149
m_audio_index = std::numeric_limits<unsigned int>::max();
164150
}
165151

@@ -271,18 +257,18 @@ bool FFmpegDecoder::readNextPacketNormal()
271257
{
272258
AVPacket packet;
273259

274-
if (! m_pending_packet)
260+
if (!m_pending_packet)
275261
{
276262
bool end_of_stream = false;
277263

278264
// Read the next frame packet
279265
int error = av_read_frame(m_format_context.get(), &packet);
280266
if (error < 0)
281267
{
282-
if (error == static_cast<int>(AVERROR_EOF) ||
283-
m_format_context.get()->pb->eof_reached)
268+
if (error == static_cast<int>(AVERROR_EOF) || m_format_context.get()->pb->eof_reached)
284269
end_of_stream = true;
285-
else {
270+
else
271+
{
286272
OSG_FATAL << "av_read_frame() returned " << AvStrError(error) << std::endl;
287273
throw std::runtime_error("av_read_frame() failed");
288274
}
@@ -303,12 +289,6 @@ bool FFmpegDecoder::readNextPacketNormal()
303289
}
304290
else
305291
{
306-
// Make the packet data available beyond av_read_frame() logical scope.
307-
if ((error = av_dup_packet(&packet)) < 0) {
308-
OSG_FATAL << "av_dup_packet() returned " << AvStrError(error) << std::endl;
309-
throw std::runtime_error("av_dup_packet() failed");
310-
}
311-
312292
m_pending_packet = FFmpegPacket(packet);
313293
}
314294
}
@@ -340,8 +320,6 @@ bool FFmpegDecoder::readNextPacketNormal()
340320
return false;
341321
}
342322

343-
344-
345323
bool FFmpegDecoder::readNextPacketEndOfStream()
346324
{
347325
const FFmpegPacket packet(FFmpegPacket::PACKET_END_OF_STREAM);
@@ -352,8 +330,6 @@ bool FFmpegDecoder::readNextPacketEndOfStream()
352330
return false;
353331
}
354332

355-
356-
357333
bool FFmpegDecoder::readNextPacketRewinding()
358334
{
359335
const FFmpegPacket packet(FFmpegPacket::PACKET_FLUSH);
@@ -364,8 +340,6 @@ bool FFmpegDecoder::readNextPacketRewinding()
364340
return false;
365341
}
366342

367-
368-
369343
void FFmpegDecoder::rewindButDontFlushQueues()
370344
{
371345
const AVRational AvTimeBaseQ = { 1, AV_TIME_BASE }; // = AV_TIME_BASE_Q
@@ -374,7 +348,8 @@ void FFmpegDecoder::rewindButDontFlushQueues()
374348
const int64_t seek_target = av_rescale_q(pos, AvTimeBaseQ, m_video_stream->time_base);
375349

376350
int error = 0;
377-
if ((error = av_seek_frame(m_format_context.get(), m_video_index, seek_target, 0/*AVSEEK_FLAG_BYTE |*/ /*AVSEEK_FLAG_BACKWARD*/)) < 0) {
351+
if ((error = av_seek_frame(m_format_context.get(), m_video_index, seek_target, 0)) < 0)
352+
{
378353
OSG_FATAL << "av_seek_frame returned " << AvStrError(error) << std::endl;
379354
throw std::runtime_error("av_seek_frame failed()");
380355
}
@@ -397,13 +372,14 @@ void FFmpegDecoder::seekButDontFlushQueues(double time)
397372
{
398373
const AVRational AvTimeBaseQ = { 1, AV_TIME_BASE }; // = AV_TIME_BASE_Q
399374

400-
const int64_t pos = int64_t(m_clocks.getStartTime()+time * double(AV_TIME_BASE));
375+
const int64_t pos = int64_t(m_clocks.getStartTime() + time * double(AV_TIME_BASE));
401376
const int64_t seek_target = av_rescale_q(pos, AvTimeBaseQ, m_video_stream->time_base);
402377

403378
m_clocks.setSeekTime(time);
404379

405380
int error = 0;
406-
if ((error = av_seek_frame(m_format_context.get(), m_video_index, seek_target, 0/*AVSEEK_FLAG_BYTE |*/ /*AVSEEK_FLAG_BACKWARD*/)) < 0) {
381+
if ((error = av_seek_frame(m_format_context.get(), m_video_index, seek_target, 0)) < 0)
382+
{
407383
OSG_FATAL << "av_seek_frame() returned " << AvStrError(error) << std::endl;
408384
throw std::runtime_error("av_seek_frame failed()");
409385
}

0 commit comments

Comments
 (0)