Skip to content

Commit f025922

Browse files
committed
Avoid use of audio stream timebase for thumbnail framerate
Signed-off-by: Maxime Gervais <[email protected]>
1 parent 7da6727 commit f025922

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

Source/Core/FileInformation.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,12 +1603,12 @@ void FileInformation::makeMkvReport(QString exportFileName, QByteArray attachmen
16031603
FFmpegVideoEncoder::Metadata streamMetadata;
16041604
streamMetadata << FFmpegVideoEncoder::MetadataEntry(QString("title"), QString("Frame Thumbnails"));
16051605

1606-
auto timeBase = QString::fromStdString(streamsStats->getStreams().begin()->get()->getTime_base());
1606+
auto timeBase = streamsStats->getReferenceStream() ? QString::fromStdString(streamsStats->getReferenceStream()->getTime_base()) : QString("1/25");
16071607
auto timeBaseSplitted = timeBase.split("/");
16081608
int num = timeBaseSplitted[0].toInt();
16091609
int den = timeBaseSplitted[1].toInt();
16101610

1611-
auto codecTimeBase = QString::fromStdString(streamsStats->getStreams().begin()->get()->getCodec_Time_Base());
1611+
auto codecTimeBase = streamsStats->getReferenceStream() ? QString::fromStdString(streamsStats->getReferenceStream()->getCodec_Time_Base()) : QString("0/1");
16121612
auto codecTimeBaseSplitted = codecTimeBase.split("/");
16131613
int codecNum = codecTimeBaseSplitted[0].toInt();
16141614
int codecDen = codecTimeBaseSplitted[1].toInt();
@@ -1706,12 +1706,12 @@ void FileInformation::makeMkvReport(QString exportFileName, QByteArray attachmen
17061706
panelSource.height = panelSize().height();
17071707

17081708
// 2do: take related stream instead of first one
1709-
auto timeBase = QString::fromStdString(streamsStats->getStreams().begin()->get()->getTime_base());
1709+
auto timeBase = streamsStats->getReferenceStream() ? QString::fromStdString(streamsStats->getReferenceStream()->getTime_base()) : QString("1/25");
17101710
auto timeBaseSplitted = timeBase.split("/");
17111711
int num = timeBaseSplitted[0].toInt();
17121712
int den = timeBaseSplitted[1].toInt();
17131713

1714-
auto codecTimeBase = QString::fromStdString(streamsStats->getStreams().begin()->get()->getCodec_Time_Base());
1714+
auto codecTimeBase = streamsStats->getReferenceStream() ? QString::fromStdString(streamsStats->getReferenceStream()->getCodec_Time_Base()) : QString("0/1");
17151715
auto codecTimeBaseSplitted = codecTimeBase.split("/");
17161716
int codecNum = codecTimeBaseSplitted[0].toInt();
17171717
int codecDen = codecTimeBaseSplitted[1].toInt();

Source/Core/StreamsStats.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ extern "C"
2323

2424
#include "Core/VideoStreamStats.h"
2525
#include "Core/AudioStreamStats.h"
26+
#include "StreamsStats.h"
2627

2728
using namespace tinyxml2;
2829

29-
StreamsStats::StreamsStats(QVector<QAVStream*> qavstreams)
30+
StreamsStats::StreamsStats(QVector<QAVStream*> qavstreams) : nullCommonStreamStatsPtr(nullptr)
3031
{
3132
for (size_t pos = 0; pos < qavstreams.count(); ++pos)
3233
{
@@ -112,3 +113,18 @@ int StreamsStats::avSampleFormat() const
112113

113114
return AV_SAMPLE_FMT_NONE;
114115
}
116+
117+
const StreamsStats::CommonStreamStatsPtr& StreamsStats::getReferenceStream() const
118+
{
119+
for(auto& stream : streams) {
120+
if(stream->getType() == AVMEDIA_TYPE_VIDEO)
121+
return stream;
122+
}
123+
124+
for(auto& stream : streams) {
125+
if(stream->getType() == AVMEDIA_TYPE_AUDIO)
126+
return stream;
127+
}
128+
129+
return nullCommonStreamStatsPtr;
130+
}

Source/Core/StreamsStats.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ class StreamsStats {
3333
int bitsPerRawVideoSample() const;
3434
int avSampleFormat() const;
3535

36+
const CommonStreamStatsPtr& getReferenceStream() const;
3637
const std::list<CommonStreamStatsPtr>& getStreams() const { return streams; }
3738
private:
3839
std::list<CommonStreamStatsPtr> streams;
40+
CommonStreamStatsPtr nullCommonStreamStatsPtr;
3941
};
4042

4143
#endif // StreamsStats_H

0 commit comments

Comments
 (0)