[meta-intel] [PATCH v2] libyami: fix build error with gcc9

Naveen Saini naveen.kumar.saini at intel.com
Thu Jun 13 00:36:38 PDT 2019


GCC9 causing multiple build failures:

| ../../git/codecparsers/h264Parser.cpp: In constructor 'YamiParser::H264::PPS::PPS()':
| ../../git/codecparsers/h264Parser.cpp:140:41: error: 'void* memset(void*, int, size_t)' clearing an object of type 'struct YamiParser::H264::PPS' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
|   140 |     memset(this, 0, offsetof(PPS, m_sps));
...

Signed-off-by: Naveen Saini <naveen.kumar.saini at intel.com>
---
 ...h26xparser-Fix-build-error-with-GCC9.patch | 157 ++++++++++++++++++
 recipes-multimedia/libyami/libyami_1.3.1.bb   |   1 +
 2 files changed, 158 insertions(+)
 create mode 100644 recipes-multimedia/libyami/libyami/0010-h26xparser-Fix-build-error-with-GCC9.patch

diff --git a/recipes-multimedia/libyami/libyami/0010-h26xparser-Fix-build-error-with-GCC9.patch b/recipes-multimedia/libyami/libyami/0010-h26xparser-Fix-build-error-with-GCC9.patch
new file mode 100644
index 00000000..be69ab71
--- /dev/null
+++ b/recipes-multimedia/libyami/libyami/0010-h26xparser-Fix-build-error-with-GCC9.patch
@@ -0,0 +1,157 @@
+From fdb8185749098eaf55050c4ec5c0f21c5be1e326 Mon Sep 17 00:00:00 2001
+From: Naveen Saini <naveen.kumar.saini at intel.com>
+Date: Tue, 4 Jun 2019 16:53:16 +0800
+Subject: [PATCH] h26xparser: Fix build error with GCC9
+
+GCC9 causing build failure:
+
+| ../../git/codecparsers/h264Parser.cpp: In constructor 'YamiParser::H264::PPS::PPS()':
+| ../../git/codecparsers/h264Parser.cpp:140:41: error: 'void* memset(void*, int, size_t)' clearing an object of type 'struct YamiParser::H264::PPS' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   140 |     memset(this, 0, offsetof(PPS, m_sps));
+|       |                                         ^
+| In file included from ../../git/codecparsers/h264Parser.cpp:21:
+| ../../git/codecparsers/h264Parser.h:292:8: note: 'struct YamiParser::H264::PPS' declared here
+|   292 | struct PPS {
+|       |        ^~~
+| ../../git/codecparsers/h264Parser.cpp: In constructor 'YamiParser::H264::SliceHeader::SliceHeader()':
+| ../../git/codecparsers/h264Parser.cpp:686:49: error: 'void* memset(void*, int, size_t)' clearing an object of type 'class YamiParser::H264::SliceHeader' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   686 |     memset(this, 0, offsetof(SliceHeader, m_pps));
+|       |                                                 ^
+| In file included from ../../git/codecparsers/h264Parser.cpp:21:
+| ../../git/codecparsers/h264Parser.h:371:7: note: 'class YamiParser::H264::SliceHeader' declared here
+|   371 | class SliceHeader {
+|       |       ^~~~~~~~~~~
+| ../../git/codecparsers/h265Parser.cpp: In constructor 'YamiParser::H265::VPS::VPS()':
+| ../../git/codecparsers/h265Parser.cpp:165:53: error: 'void* memset(void*, int, size_t)' clearing an object of type 'struct YamiParser::H265::VPS' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   165 |     memset(this, 0, offsetof(VPS, hrd_layer_set_idx));
+|       |                                                     ^
+| In file included from ../../git/codecparsers/h265Parser.cpp:21:
+| ../../git/codecparsers/h265Parser.h:256:12: note: 'struct YamiParser::H265::VPS' declared here
+|   256 |     struct VPS {
+|       |            ^~~
+| ../../git/codecparsers/h265Parser.cpp: In constructor 'YamiParser::H265::SPS::SPS()':
+| ../../git/codecparsers/h265Parser.cpp:174:39: error: 'void* memset(void*, int, size_t)' clearing an object of type 'struct YamiParser::H265::SPS' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   174 |     memset(this, 0, offsetof(SPS, vps));
+|       |                                       ^
+| In file included from ../../git/codecparsers/h265Parser.cpp:21:
+| ../../git/codecparsers/h265Parser.h:290:12: note: 'struct YamiParser::H265::SPS' declared here
+|   290 |     struct SPS {
+|       |            ^~~
+| ../../git/codecparsers/h265Parser.cpp: In constructor 'YamiParser::H265::PPS::PPS()':
+| ../../git/codecparsers/h265Parser.cpp:179:39: error: 'void* memset(void*, int, size_t)' clearing an object of type 'struct YamiParser::H265::PPS' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   179 |     memset(this, 0, offsetof(PPS, sps));
+|       |                                       ^
+| In file included from ../../git/codecparsers/h265Parser.cpp:21:
+| ../../git/codecparsers/h265Parser.h:362:12: note: 'struct YamiParser::H265::PPS' declared here
+|   362 |     struct PPS {
+|       |            ^~~
+| ../../git/codecparsers/h265Parser.cpp: In constructor 'YamiParser::H265::SliceHeader::SliceHeader()':
+| ../../git/codecparsers/h265Parser.cpp:184:47: error: 'void* memset(void*, int, size_t)' clearing an object of type 'struct YamiParser::H265::SliceHeader' with no trivial copy-assignment; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   184 |     memset(this, 0, offsetof(SliceHeader, pps));
+|       |                                               ^
+| In file included from ../../git/codecparsers/h265Parser.cpp:21:
+| ../../git/codecparsers/h265Parser.h:499:12: note: 'struct YamiParser::H265::SliceHeader' declared here
+|   499 |     struct SliceHeader {
+|       |            ^~~~~~~~~~~
+| ../../git/codecparsers/mpeg2_parser.cpp: In constructor 'YamiParser::MPEG2::SeqHeader::SeqHeader()':
+| ../../git/codecparsers/mpeg2_parser.cpp:163:59: error: 'void* memset(void*, int, size_t)' clearing an object of non-trivial type 'struct YamiParser::MPEG2::SeqHeader'; use assignment or value-initialization instead [-Werror=class-memaccess]
+|   163 |     SeqHeader::SeqHeader() { memset(this, 0, sizeof(*this)); }
+|       |                                                           ^
+| In file included from ../../git/codecparsers/mpeg2_parser.cpp:34:
+| ../../git/codecparsers/mpeg2_parser.h:153:12: note: 'struct YamiParser::MPEG2::SeqHeader' declared here
+|   153 |     struct SeqHeader {
+|       |            ^~~~~~~~~
+| cc1plus: all warnings being treated as errors
+
+By typecasting structure pointer to void pointer, GCC9 does normal memset operation where offsetof() give correct
+number of bytes to set.
+
+Status: Submitted [https://github.com/intel/libyami/pull/876]
+
+Signed-off-by: Naveen Saini <naveen.kumar.saini at intel.com>
+---
+ codecparsers/h264Parser.cpp   | 4 ++--
+ codecparsers/h265Parser.cpp   | 8 ++++----
+ codecparsers/mpeg2_parser.cpp | 3 ++-
+ 3 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/codecparsers/h264Parser.cpp b/codecparsers/h264Parser.cpp
+index 22117a1..6f7959e 100644
+--- a/codecparsers/h264Parser.cpp
++++ b/codecparsers/h264Parser.cpp
+@@ -137,7 +137,7 @@ static bool scalingList(NalReader& br, uint8_t* sl, uint32_t size, uint32_t inde
+ 
+ PPS::PPS()
+ {
+-    memset(this, 0, offsetof(PPS, m_sps));
++    memset((void*)this, 0, offsetof(PPS, m_sps));
+ }
+ 
+ PPS::~PPS()
+@@ -683,7 +683,7 @@ Parser::searchSps(uint8_t id) const
+ 
+ SliceHeader::SliceHeader()
+ {
+-    memset(this, 0, offsetof(SliceHeader, m_pps));
++    memset((void*)this, 0, offsetof(SliceHeader, m_pps));
+ }
+ 
+ bool SliceHeader::refPicListModification(NalReader& br, RefPicListModification* pm0,
+diff --git a/codecparsers/h265Parser.cpp b/codecparsers/h265Parser.cpp
+index 0dea3a6..d7e6740 100644
+--- a/codecparsers/h265Parser.cpp
++++ b/codecparsers/h265Parser.cpp
+@@ -162,7 +162,7 @@ static const uint8_t DefaultScalingList2[64] = {
+ 
+ VPS::VPS()
+ {
+-    memset(this, 0, offsetof(VPS, hrd_layer_set_idx));
++    memset((void*)this, 0, offsetof(VPS, hrd_layer_set_idx));
+ }
+ 
+ VPS::~VPS()
+@@ -171,17 +171,17 @@ VPS::~VPS()
+ 
+ SPS::SPS()
+ {
+-    memset(this, 0, offsetof(SPS, vps));
++    memset((void*)this, 0, offsetof(SPS, vps));
+ }
+ 
+ PPS::PPS()
+ {
+-    memset(this, 0, offsetof(PPS, sps));
++    memset((void*)this, 0, offsetof(PPS, sps));
+ }
+ 
+ SliceHeader::SliceHeader()
+ {
+-    memset(this, 0, offsetof(SliceHeader, pps));
++    memset((void*)this, 0, offsetof(SliceHeader, pps));
+ }
+ 
+ SliceHeader::~SliceHeader()
+diff --git a/codecparsers/mpeg2_parser.cpp b/codecparsers/mpeg2_parser.cpp
+index 21032b1..173da39 100644
+--- a/codecparsers/mpeg2_parser.cpp
++++ b/codecparsers/mpeg2_parser.cpp
+@@ -33,6 +33,7 @@
+ #include "common/log.h"
+ #include "mpeg2_parser.h"
+ #include <inttypes.h>
++#include <cstddef>
+ 
+ namespace YamiParser {
+ namespace MPEG2 {
+@@ -160,7 +161,7 @@ namespace MPEG2 {
+ 
+     SeqExtension::SeqExtension() { memset(this, 0, sizeof(*this)); }
+ 
+-    SeqHeader::SeqHeader() { memset(this, 0, sizeof(*this)); }
++    SeqHeader::SeqHeader() { memset((void*)this, 0, offsetof(SeqHeader, quantizationMatrices)); }
+ 
+     StreamHeader::StreamHeader() { memset(this, 0, sizeof(*this)); }
+ 
+-- 
+2.17.0
+
diff --git a/recipes-multimedia/libyami/libyami_1.3.1.bb b/recipes-multimedia/libyami/libyami_1.3.1.bb
index 58895c81..83845935 100644
--- a/recipes-multimedia/libyami/libyami_1.3.1.bb
+++ b/recipes-multimedia/libyami/libyami_1.3.1.bb
@@ -17,6 +17,7 @@ SRC_URI = "git://github.com/intel/libyami.git;branch=apache \
            file://0007-Delete-unused-variables.patch \
            file://0008-NalUnit-is-declared-in-different-namespace.patch \
            file://0009-Fix-clang-warnings.patch \
+           file://0010-h26xparser-Fix-build-error-with-GCC9.patch \
 "
 SRCREV = "fb48083de91f837ddbf599dd4b5ad1eb1239e1cf"
 S = "${WORKDIR}/git"
-- 
2.17.0



More information about the meta-intel mailing list