kumquat-buildroot/package/bento4/0005-AVC-extract-VUI-values-from-SPS.patch
Bernd Kuhls 6dbb40955f package/bento4: new package
Needed for the upcoming Nexus version of kodi-inputstream-adaptive,
the bundled version of bento4 was removed upstream:
70625e7670

Backported upstream commit to fix cmake install as patch 0001.

Added feature- and bugfix-patches from kodi, they were sent upstream:
https://github.com/axiomatic-systems/Bento4/issues/648

Build-tested using this defconfig:

BR2_PACKAGE_BENTO4=y

                             andes-nds32 [ 1/45]: SKIPPED
                             arm-aarch64 [ 2/45]: OK
                   bootlin-aarch64-glibc [ 3/45]: OK
               bootlin-arcle-hs38-uclibc [ 4/45]: OK
                    bootlin-armv5-uclibc [ 5/45]: OK
                     bootlin-armv7-glibc [ 6/45]: OK
                   bootlin-armv7m-uclibc [ 7/45]: OK
                      bootlin-armv7-musl [ 8/45]: OK
                bootlin-m68k-5208-uclibc [ 9/45]: OK
               bootlin-m68k-68040-uclibc [10/45]: OK
             bootlin-microblazeel-uclibc [11/45]: OK
                bootlin-mipsel32r6-glibc [12/45]: OK
                   bootlin-mipsel-uclibc [13/45]: OK
                     bootlin-nios2-glibc [14/45]: OK
                 bootlin-openrisc-uclibc [15/45]: OK
        bootlin-powerpc64le-power8-glibc [16/45]: OK
           bootlin-powerpc-e500mc-uclibc [17/45]: OK
                   bootlin-riscv32-glibc [18/45]: OK
                   bootlin-riscv64-glibc [19/45]: OK
                    bootlin-riscv64-musl [20/45]: OK
                      bootlin-sh4-uclibc [21/45]: OK
                   bootlin-sparc64-glibc [22/45]: OK
                    bootlin-sparc-uclibc [23/45]: OK
                    bootlin-x86-64-glibc [24/45]: OK
                     bootlin-x86-64-musl [25/45]: OK
                   bootlin-x86-64-uclibc [26/45]: OK
                   bootlin-xtensa-uclibc [27/45]: OK
                            br-arm-basic [28/45]: SKIPPED
                    br-arm-full-nothread [29/45]: OK
                      br-arm-full-static [30/45]: OK
                   br-i386-pentium4-full [31/45]: OK
                br-i386-pentium-mmx-musl [32/45]: OK
                      br-mips64-n64-full [33/45]: OK
                 br-mips64r6-el-hf-glibc [34/45]: OK
               br-powerpc-603e-basic-cpp [35/45]: OK
               br-powerpc64-power7-glibc [36/45]: OK
                       linaro-aarch64-be [37/45]: OK
                          linaro-aarch64 [38/45]: OK
                              linaro-arm [39/45]: OK
                     sourcery-arm-armv4t [40/45]: OK
                            sourcery-arm [41/45]: OK
                     sourcery-arm-thumb2 [42/45]: OK
                         sourcery-mips64 [43/45]: OK
                           sourcery-mips [44/45]: OK
                          sourcery-nios2 [45/45]: OK
45 builds, 2 skipped, 0 build failed, 0 legal-info failed

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2021-12-27 11:32:00 +01:00

97 lines
3.4 KiB
Diff

From 56e0acde44adbc5503da20dd96c31db33f744bd7 Mon Sep 17 00:00:00 2001
From: peak3d <pfau@peak3d.de>
Date: Thu, 22 Jul 2021 10:27:50 +0200
Subject: [PATCH] AVC extract VUI values from SPS
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
Source/C++/Codecs/Ap4AvcParser.cpp | 54 +++++++++++++++++++++++++-----
Source/C++/Codecs/Ap4AvcParser.h | 3 +-
2 files changed, 47 insertions(+), 10 deletions(-)
diff --git a/Source/C++/Codecs/Ap4AvcParser.cpp b/Source/C++/Codecs/Ap4AvcParser.cpp
index 7efb5c9..7f4fc34 100644
--- a/Source/C++/Codecs/Ap4AvcParser.cpp
+++ b/Source/C++/Codecs/Ap4AvcParser.cpp
@@ -287,18 +287,54 @@ AP4_AvcSequenceParameterSet::AP4_AvcSequenceParameterSet() :
/*----------------------------------------------------------------------
| AP4_AvcSequenceParameterSet::GetInfo
+---------------------------------------------------------------------*/
-void
+bool
AP4_AvcSequenceParameterSet::GetInfo(unsigned int& width, unsigned int& height)
{
- width = (pic_width_in_mbs_minus1+1) * 16;
- height = (2-frame_mbs_only_flag) * (pic_height_in_map_units_minus1+1) * 16;
+ unsigned int nwidth = (pic_width_in_mbs_minus1+1) * 16;
+ unsigned int nheight = (2-frame_mbs_only_flag) * (pic_height_in_map_units_minus1+1) * 16;
- if (frame_cropping_flag) {
- unsigned int crop_h = 2*(frame_crop_left_offset+frame_crop_right_offset);
- unsigned int crop_v = 2*(frame_crop_top_offset+frame_crop_bottom_offset)*(2-frame_mbs_only_flag);
- if (crop_h < width) width -= crop_h;
- if (crop_v < height) height -= crop_v;
- }
+ if (frame_cropping_flag) {
+ unsigned int crop_h = 2*(frame_crop_left_offset+frame_crop_right_offset);
+ unsigned int crop_v = 2*(frame_crop_top_offset+frame_crop_bottom_offset)*(2-frame_mbs_only_flag);
+ if (crop_h < nwidth) nwidth -= crop_h;
+ if (crop_v < nheight) nheight -= crop_v;
+ }
+ if (nwidth != width || nheight != height)
+ {
+ width = nwidth;
+ height = nheight;
+ return true;
+ }
+ return false;
+}
+
+/*----------------------------------------------------------------------
+| AP4_AvcSequenceParameterSet::GetVUIInfo
++---------------------------------------------------------------------*/
+bool
+AP4_AvcSequenceParameterSet::GetVUIInfo(unsigned int& fps_ticks, unsigned int& fps_scale, float &aspect)
+{
+ bool ret(false);
+ if (timing_info_present_flag && fixed_frame_rate_flag)
+ {
+ if (fps_scale != (num_units_in_tick << 1) || fps_ticks != time_scale)
+ {
+ fps_scale = num_units_in_tick << 1;
+ fps_ticks = time_scale;
+ ret = true;
+ }
+ }
+ unsigned int w, h;
+ if (aspect_ratio_info_present_flag && GetInfo(w, h))
+ {
+ float a((float)(sar_width * w) / (sar_height * h));
+ if (a != aspect)
+ {
+ aspect = a;
+ ret = true;
+ }
+ }
+ return ret;
}
/*----------------------------------------------------------------------
diff --git a/Source/C++/Codecs/Ap4AvcParser.h b/Source/C++/Codecs/Ap4AvcParser.h
index 9f97892..431a294 100644
--- a/Source/C++/Codecs/Ap4AvcParser.h
+++ b/Source/C++/Codecs/Ap4AvcParser.h
@@ -91,7 +91,8 @@ typedef struct {
struct AP4_AvcSequenceParameterSet {
AP4_AvcSequenceParameterSet();
- void GetInfo(unsigned int& width, unsigned int& height);
+ bool GetInfo(unsigned int& width, unsigned int& height);
+ bool GetVUIInfo(unsigned int& fps_ticks, unsigned int& fps_scale, float &aspect);
AP4_DataBuffer raw_bytes;
--
2.30.2