contrib/kodi-addon-inputstream-adaptive/a82e3eb8333187d8bb346bf5eca384524a553e57.patch

77 lines
3.3 KiB
Diff

From f3ab0a645599171ed2f1fca92bbebdc05bac254d Mon Sep 17 00:00:00 2001
From: CastagnaIT <gottardo.stefano.83@gmail.com>
Date: Sat, 30 Mar 2024 09:22:54 +0100
Subject: [PATCH] [CodecHandler] Set fourcc for h264 codec
---
src/Session.cpp | 11 +++++++++++
src/codechandler/AVCCodecHandler.cpp | 16 ++++++++++++++++
src/utils/Utils.h | 4 ++++
3 files changed, 31 insertions(+)
diff --git a/src/Session.cpp b/src/Session.cpp
index 0e12ec0ab..3dd6cab78 100644
--- a/src/Session.cpp
+++ b/src/Session.cpp
@@ -792,7 +792,18 @@ void CSession::UpdateStream(CStream& stream)
if (CODEC::Contains(codecs, CODEC::FOURCC_AVC_, codecStr) ||
CODEC::Contains(codecs, CODEC::FOURCC_H264, codecStr))
+ {
stream.m_info.SetCodecName(CODEC::NAME_H264);
+
+ if (STRING::Contains(codecStr, CODEC::FOURCC_AVC1))
+ stream.m_info.SetCodecFourCC(CODEC::MakeFourCC(CODEC::FOURCC_AVC1));
+ else if (STRING::Contains(codecStr, CODEC::FOURCC_AVC2))
+ stream.m_info.SetCodecFourCC(CODEC::MakeFourCC(CODEC::FOURCC_AVC2));
+ else if (STRING::Contains(codecStr, CODEC::FOURCC_AVC3))
+ stream.m_info.SetCodecFourCC(CODEC::MakeFourCC(CODEC::FOURCC_AVC3));
+ else if (STRING::Contains(codecStr, CODEC::FOURCC_AVC4))
+ stream.m_info.SetCodecFourCC(CODEC::MakeFourCC(CODEC::FOURCC_AVC4));
+ }
else if (CODEC::Contains(codecs, CODEC::FOURCC_HEVC, codecStr))
stream.m_info.SetCodecName(CODEC::NAME_HEVC);
else if (CODEC::Contains(codecs, CODEC::FOURCC_HVC1, codecStr))
diff --git a/src/codechandler/AVCCodecHandler.cpp b/src/codechandler/AVCCodecHandler.cpp
index edc15c5cc..7f7ef7398 100644
--- a/src/codechandler/AVCCodecHandler.cpp
+++ b/src/codechandler/AVCCodecHandler.cpp
@@ -179,6 +179,22 @@ bool AVCCodecHandler::GetInformation(kodi::addon::InputstreamInfo& info)
bool isChanged = UpdateInfoCodecName(info, CODEC::NAME_H264);
+ uint32_t fourcc = 0;
+ if (m_sampleDescription->GetFormat() == AP4_SAMPLE_FORMAT_AVC1)
+ fourcc = CODEC::MakeFourCC(CODEC::FOURCC_AVC1);
+ else if (m_sampleDescription->GetFormat() == AP4_SAMPLE_FORMAT_AVC2)
+ fourcc = CODEC::MakeFourCC(CODEC::FOURCC_AVC2);
+ else if (m_sampleDescription->GetFormat() == AP4_SAMPLE_FORMAT_AVC3)
+ fourcc = CODEC::MakeFourCC(CODEC::FOURCC_AVC3);
+ else if (m_sampleDescription->GetFormat() == AP4_SAMPLE_FORMAT_AVC4)
+ fourcc = CODEC::MakeFourCC(CODEC::FOURCC_AVC4);
+
+ if (fourcc != 0 && info.GetCodecFourCC() != fourcc)
+ {
+ info.SetCodecFourCC(fourcc);
+ isChanged = true;
+ }
+
if (AP4_AvcSampleDescription* avcSampleDescription =
AP4_DYNAMIC_CAST(AP4_AvcSampleDescription, m_sampleDescription))
{
diff --git a/src/utils/Utils.h b/src/utils/Utils.h
index f008c3fdf..3b1d5d108 100644
--- a/src/utils/Utils.h
+++ b/src/utils/Utils.h
@@ -98,6 +98,10 @@ constexpr const char* NAME_TTML = "ttml";
constexpr const char* FOURCC_H264 = "h264"; // MPEG-4 AVC
constexpr const char* FOURCC_AVC_ = "avc"; // Generic prefix for all avc* fourcc, e.g. avc1, avcb
+constexpr const char* FOURCC_AVC1 = "avc1";
+constexpr const char* FOURCC_AVC2 = "avc2";
+constexpr const char* FOURCC_AVC3 = "avc3";
+constexpr const char* FOURCC_AVC4 = "avc4";
constexpr const char* FOURCC_VP09 = "vp09"; // VP9
constexpr const char* FOURCC_AV01 = "av01"; // AV1
constexpr const char* FOURCC_HEVC = "hevc";