77 lines
3.3 KiB
Diff
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";
|