From a7748e0cadf67918aee1f4910e2763de43284356 Mon Sep 17 00:00:00 2001 From: Naveen Saini Date: Thu, 13 Jun 2019 15:36:38 +0800 Subject: libyami: fix build error with gcc9 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 Signed-off-by: Anuj Mittal --- ...0010-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 +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 +--- + 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 ++#include + + 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" -- cgit v1.2.3-54-g00ecf