diff -Nru openh264-2.4.0+dfsg/Makefile openh264-2.4.1+dfsg/Makefile --- openh264-2.4.0+dfsg/Makefile 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/Makefile 2024-01-30 05:56:32.000000000 +0000 @@ -39,7 +39,7 @@ USE_ANT=No SHAREDLIB_MAJORVERSION=7 -FULL_VERSION := 2.4.0 +FULL_VERSION := 2.4.1 ifeq (,$(wildcard $(SRC_PATH)gmp-api)) HAVE_GMP_API=No diff -Nru openh264-2.4.0+dfsg/RELEASES openh264-2.4.1+dfsg/RELEASES --- openh264-2.4.0+dfsg/RELEASES 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/RELEASES 2024-01-30 05:56:32.000000000 +0000 @@ -1,6 +1,12 @@ Releases ----------- +v2.4.1 +------ +- Fix off by one regression in decoder +- Add security policy +- Fix glitches that sometimes happen near the scene changes + v2.4.0 ------ - Add LoongArch SIMD diff -Nru openh264-2.4.0+dfsg/SECURITY.md openh264-2.4.1+dfsg/SECURITY.md --- openh264-2.4.0+dfsg/SECURITY.md 1970-01-01 00:00:00.000000000 +0000 +++ openh264-2.4.1+dfsg/SECURITY.md 2024-01-30 05:56:32.000000000 +0000 @@ -0,0 +1,16 @@ +# Security Policy + +If you have discovered a security vulnerability in this project, please report it +privately. **Do not disclose it as a public issue.** This gives us time to work with you +to fix the issue before public exposure, reducing the chance that the exploit will be +used before a patch is released. + +You may submit the report as an email to benzzhan@cisco.com. + +Please provide the following information in your report: + +- A description of the vulnerability and its impact +- How to reproduce the issue + +This project is maintained on a reasonable-effort basis. As such, please give us 90 days to +work on a fix before public exposure. diff -Nru openh264-2.4.0+dfsg/build/platform-darwin.mk openh264-2.4.1+dfsg/build/platform-darwin.mk --- openh264-2.4.0+dfsg/build/platform-darwin.mk 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/build/platform-darwin.mk 2024-01-30 05:56:32.000000000 +0000 @@ -3,7 +3,7 @@ SHAREDLIBSUFFIX = dylib SHAREDLIBSUFFIXFULLVER=$(FULL_VERSION).$(SHAREDLIBSUFFIX) SHAREDLIBSUFFIXMAJORVER=$(SHAREDLIB_MAJORVERSION).$(SHAREDLIBSUFFIX) -CURRENT_VERSION := 2.4.0 +CURRENT_VERSION := 2.4.1 COMPATIBILITY_VERSION := 2.4.0 SHLDFLAGS = -dynamiclib -twolevel_namespace -undefined dynamic_lookup \ -fno-common -headerpad_max_install_names -install_name \ diff -Nru openh264-2.4.0+dfsg/codec/api/wels/codec_ver.h openh264-2.4.1+dfsg/codec/api/wels/codec_ver.h --- openh264-2.4.0+dfsg/codec/api/wels/codec_ver.h 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/api/wels/codec_ver.h 2024-01-30 05:56:32.000000000 +0000 @@ -4,12 +4,12 @@ #include "codec_app_def.h" -static const OpenH264Version g_stCodecVersion = {2, 4, 0, 2310}; -static const char* const g_strCodecVer = "OpenH264 version:2.4.0.2310"; +static const OpenH264Version g_stCodecVersion = {2, 4, 1, 2401}; +static const char* const g_strCodecVer = "OpenH264 version:2.4.1.2401"; #define OPENH264_MAJOR (2) #define OPENH264_MINOR (4) -#define OPENH264_REVISION (0) -#define OPENH264_RESERVED (2310) +#define OPENH264_REVISION (1) +#define OPENH264_RESERVED (2401) #endif // CODEC_VER_H diff -Nru openh264-2.4.0+dfsg/codec/decoder/core/inc/decoder_context.h openh264-2.4.1+dfsg/codec/decoder/core/inc/decoder_context.h --- openh264-2.4.0+dfsg/codec/decoder/core/inc/decoder_context.h 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/core/inc/decoder_context.h 2024-01-30 05:56:32.000000000 +0000 @@ -285,14 +285,15 @@ int32_t iPOC; int32_t iPicBuffIdx; uint32_t uiDecodingTimeStamp; - bool bLastGOP; + int32_t iSeqNum; } SPictInfo, *PPictInfo; typedef struct tagPictReoderingStatus { int32_t iPictInfoIndex; + int32_t iMinSeqNum; int32_t iMinPOC; int32_t iNumOfPicts; - int32_t iLastGOPRemainPicts; + int32_t iLastWrittenSeqNum; int32_t iLastWrittenPOC; int32_t iLargestBufferedPicIndex; bool bHasBSlice; @@ -431,6 +432,7 @@ #endif bool bNewSeqBegin; bool bNextNewSeqBegin; + int32_t iSeqNum; //for Parse only bool bFramePending; diff -Nru openh264-2.4.0+dfsg/codec/decoder/core/inc/picture.h openh264-2.4.1+dfsg/codec/decoder/core/inc/picture.h --- openh264-2.4.0+dfsg/codec/decoder/core/inc/picture.h 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/core/inc/picture.h 2024-01-30 05:56:32.000000000 +0000 @@ -70,6 +70,7 @@ bool bUsedAsRef; //for ref pic management bool bIsLongRef; // long term reference frame flag //for ref pic management int8_t iRefCount; + void (*pSetUnRef)(WelsDec::SPicture*); bool bIsComplete; // indicate whether current picture is complete, not from EC /*******************************for future use****************************/ diff -Nru openh264-2.4.0+dfsg/codec/decoder/core/src/decoder.cpp openh264-2.4.1+dfsg/codec/decoder/core/src/decoder.cpp --- openh264-2.4.0+dfsg/codec/decoder/core/src/decoder.cpp 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/core/src/decoder.cpp 2024-01-30 05:56:32.000000000 +0000 @@ -152,6 +152,7 @@ pPicNewBuf->ppPic[i]->bUsedAsRef = false; pPicNewBuf->ppPic[i]->bIsLongRef = false; pPicNewBuf->ppPic[i]->iRefCount = 0; + pPicNewBuf->ppPic[i]->pSetUnRef = NULL; pPicNewBuf->ppPic[i]->bIsComplete = false; } // remove old PicBuf @@ -240,6 +241,7 @@ pPicNewBuf->ppPic[i]->bUsedAsRef = false; pPicNewBuf->ppPic[i]->bIsLongRef = false; pPicNewBuf->ppPic[i]->iRefCount = 0; + pPicNewBuf->ppPic[i]->pSetUnRef = NULL; pPicNewBuf->ppPic[i]->bIsComplete = false; } // remove old PicBuf @@ -296,11 +298,9 @@ pPictReoderingStatus->iPictInfoIndex = 0; pPictReoderingStatus->iMinPOC = IMinInt32; pPictReoderingStatus->iNumOfPicts = 0; - pPictReoderingStatus->iLastGOPRemainPicts = 0; pPictReoderingStatus->iLastWrittenPOC = IMinInt32; pPictReoderingStatus->iLargestBufferedPicIndex = 0; for (int32_t i = 0; i < pictInfoListCount; ++i) { - pPictInfo[i].bLastGOP = false; pPictInfo[i].iPOC = IMinInt32; } pPictInfo->sBufferInfo.iBufferStatus = 0; @@ -621,6 +621,7 @@ pCtx->bPrintFrameErrorTraceFlag = true; pCtx->iIgnoredErrorInfoPacketCount = 0; pCtx->bFrameFinish = true; + pCtx->iSeqNum = 0; return iRet; } diff -Nru openh264-2.4.0+dfsg/codec/decoder/core/src/decoder_core.cpp openh264-2.4.1+dfsg/codec/decoder/core/src/decoder_core.cpp --- openh264-2.4.0+dfsg/codec/decoder/core/src/decoder_core.cpp 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/core/src/decoder_core.cpp 2024-01-30 05:56:32.000000000 +0000 @@ -2261,6 +2261,8 @@ pCtx->bAuReadyFlag = false; pCtx->pLastDecPicInfo->bLastHasMmco5 = false; bool bTmpNewSeqBegin = CheckNewSeqBeginAndUpdateActiveLayerSps (pCtx); + if (bTmpNewSeqBegin) + pCtx->iSeqNum++; pCtx->bNewSeqBegin = pCtx->bNewSeqBegin || bTmpNewSeqBegin; iErr = WelsDecodeAccessUnitStart (pCtx); GetVclNalTemporalId (pCtx); diff -Nru openh264-2.4.0+dfsg/codec/decoder/core/src/manage_dec_ref.cpp openh264-2.4.1+dfsg/codec/decoder/core/src/manage_dec_ref.cpp --- openh264-2.4.0+dfsg/codec/decoder/core/src/manage_dec_ref.cpp 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/core/src/manage_dec_ref.cpp 2024-01-30 05:56:32.000000000 +0000 @@ -67,7 +67,9 @@ static int32_t RemainOneBufferInDpbForEC (PWelsDecoderContext pCtx, PRefPic pRefPic); static void SetUnRef (PPicture pRef) { - if (NULL != pRef) { + if (pRef == NULL) return; + + if (pRef->iRefCount <= 0) { pRef->bUsedAsRef = false; pRef->bIsLongRef = false; pRef->iFrameNum = -1; @@ -81,6 +83,7 @@ pRef->iSpsId = -1; pRef->bIsComplete = false; pRef->iRefCount = 0; + pRef->pSetUnRef = NULL; if (pRef->eSliceType == I_SLICE) { return; @@ -88,12 +91,11 @@ int32_t lists = pRef->eSliceType == P_SLICE ? 1 : 2; for (int32_t i = 0; i < MAX_DPB_COUNT; ++i) { for (int32_t list = 0; list < lists; ++list) { - if (pRef->pRefPic[list][i] != NULL) { - pRef->pRefPic[list][i]->iRefCount = 0; - pRef->pRefPic[list][i] = NULL; - } + pRef->pRefPic[list][i] = NULL; } } + } else { + pRef->pSetUnRef = SetUnRef; } } diff -Nru openh264-2.4.0+dfsg/codec/decoder/core/src/pic_queue.cpp openh264-2.4.1+dfsg/codec/decoder/core/src/pic_queue.cpp --- openh264-2.4.0+dfsg/codec/decoder/core/src/pic_queue.cpp 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/core/src/pic_queue.cpp 2024-01-30 05:56:32.000000000 +0000 @@ -107,6 +107,7 @@ pPic->iHeightInPixel = kiPicHeight; pPic->iFrameNum = -1; pPic->iRefCount = 0; + pPic->pSetUnRef = NULL; uint32_t uiMbWidth = (kiPicWidth + 15) >> 4; uint32_t uiMbHeight = (kiPicHeight + 15) >> 4; diff -Nru openh264-2.4.0+dfsg/codec/decoder/plus/src/welsDecoderExt.cpp openh264-2.4.1+dfsg/codec/decoder/plus/src/welsDecoderExt.cpp --- openh264-2.4.0+dfsg/codec/decoder/plus/src/welsDecoderExt.cpp 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/codec/decoder/plus/src/welsDecoderExt.cpp 2024-01-30 05:56:32.000000000 +0000 @@ -993,46 +993,17 @@ if (pCtx->pSliceHeader->eSliceType == B_SLICE) { m_sReoderingStatus.bHasBSlice = true; } - if (m_sReoderingStatus.iNumOfPicts && pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb - && pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb->bNewSeqBegin) { - m_sReoderingStatus.iLastGOPRemainPicts = m_sReoderingStatus.iNumOfPicts; - - for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { - if (m_sPictInfoList[i].iPOC > IMinInt32) { - m_sPictInfoList[i].bLastGOP = true; - } - } - } else { - if (m_sReoderingStatus.iNumOfPicts > 0) { - //This can happen when decoder moves to next GOP without being able to decoder first picture PicOrderCntLsb = 0 - bool hasGOPChanged = false; - for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { - if (m_sPictInfoList[i].iPOC == pCtx->pSliceHeader->iPicOrderCntLsb) { - hasGOPChanged = true; - break; - } - } - if (hasGOPChanged) { - m_sReoderingStatus.iLastGOPRemainPicts = m_sReoderingStatus.iNumOfPicts; - for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { - if (m_sPictInfoList[i].iPOC > IMinInt32) { - m_sPictInfoList[i].bLastGOP = true; - } - } - } - } - } } for (int32_t i = 0; i < 16; ++i) { if (m_sPictInfoList[i].iPOC == IMinInt32) { memcpy (&m_sPictInfoList[i].sBufferInfo, pDstInfo, sizeof (SBufferInfo)); m_sPictInfoList[i].iPOC = pCtx->pSliceHeader->iPicOrderCntLsb; + m_sPictInfoList[i].iSeqNum = pCtx->iSeqNum; m_sPictInfoList[i].uiDecodingTimeStamp = pCtx->uiDecodingTimeStamp; if (pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb != NULL) { m_sPictInfoList[i].iPicBuffIdx = pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb->iPicBuffIdx; if (GetThreadCount (pCtx) <= 1) ++pCtx->pLastDecPicInfo->pPreviousDecodedPictureInDpb->iRefCount; } - m_sPictInfoList[i].bLastGOP = false; m_iLastBufferedIdx = i; pDstInfo->iBufferStatus = 0; ++m_sReoderingStatus.iNumOfPicts; @@ -1050,56 +1021,13 @@ if (pCtx == NULL && m_iThreadCount <= 1) { pCtx = m_pDecThrCtx[0].pCtx; } - if (m_sReoderingStatus.iLastGOPRemainPicts > 0) { - m_sReoderingStatus.iMinPOC = IMinInt32; - int32_t firstValidIdx = -1; - for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { - if (m_sReoderingStatus.iMinPOC == IMinInt32 && m_sPictInfoList[i].iPOC > IMinInt32 && m_sPictInfoList[i].bLastGOP) { - m_sReoderingStatus.iMinPOC = m_sPictInfoList[i].iPOC; - m_sReoderingStatus.iPictInfoIndex = i; - firstValidIdx = i; - break; - } - } - for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { - if (i == firstValidIdx) continue; - if (m_sPictInfoList[i].iPOC > IMinInt32 && m_sPictInfoList[i].iPOC < m_sReoderingStatus.iMinPOC - && m_sPictInfoList[i].bLastGOP) { - m_sReoderingStatus.iMinPOC = m_sPictInfoList[i].iPOC; - m_sReoderingStatus.iPictInfoIndex = i; - } - } - m_sReoderingStatus.iLastWrittenPOC = m_sReoderingStatus.iMinPOC; -#if defined (_DEBUG) -#ifdef _MOTION_VECTOR_DUMP_ - fprintf (stderr, "Output POC: #%d uiDecodingTimeStamp=%d\n", m_sReoderingStatus.iLastWrittenPOC, - m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].uiDecodingTimeStamp); -#endif -#endif - memcpy (pDstInfo, &m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].sBufferInfo, sizeof (SBufferInfo)); - ppDst[0] = pDstInfo->pDst[0]; - ppDst[1] = pDstInfo->pDst[1]; - ppDst[2] = pDstInfo->pDst[2]; - m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iPOC = IMinInt32; - if (pPicBuff != NULL) { - PPicture pPic = pPicBuff->ppPic[m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iPicBuffIdx]; - --pPic->iRefCount; - } - m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].bLastGOP = false; - m_sReoderingStatus.iMinPOC = IMinInt32; - --m_sReoderingStatus.iNumOfPicts; - --m_sReoderingStatus.iLastGOPRemainPicts; - if (m_sReoderingStatus.iLastGOPRemainPicts == 0) { - m_sReoderingStatus.iLastWrittenPOC = IMinInt32; - } - return; - } if (m_sReoderingStatus.iNumOfPicts > 0) { m_sReoderingStatus.iMinPOC = IMinInt32; int32_t firstValidIdx = -1; for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { if (m_sReoderingStatus.iMinPOC == IMinInt32 && m_sPictInfoList[i].iPOC > IMinInt32) { m_sReoderingStatus.iMinPOC = m_sPictInfoList[i].iPOC; + m_sReoderingStatus.iMinSeqNum = m_sPictInfoList[i].iSeqNum; m_sReoderingStatus.iPictInfoIndex = i; firstValidIdx = i; break; @@ -1107,8 +1035,10 @@ } for (int32_t i = 0; i <= m_sReoderingStatus.iLargestBufferedPicIndex; ++i) { if (i == firstValidIdx) continue; - if (m_sPictInfoList[i].iPOC > IMinInt32 && m_sPictInfoList[i].iPOC < m_sReoderingStatus.iMinPOC) { + if (m_sPictInfoList[i].iPOC > IMinInt32 + && ((m_sPictInfoList[i].iSeqNum == m_sReoderingStatus.iMinSeqNum) ? (m_sPictInfoList[i].iPOC < m_sReoderingStatus.iMinPOC) : (m_sPictInfoList[i].iSeqNum - m_sReoderingStatus.iMinSeqNum < 0))) { m_sReoderingStatus.iMinPOC = m_sPictInfoList[i].iPOC; + m_sReoderingStatus.iMinSeqNum = m_sPictInfoList[i].iSeqNum; m_sReoderingStatus.iPictInfoIndex = i; } } @@ -1117,12 +1047,15 @@ bool isReady = true; if (!isFlush) { int32_t iLastPOC = pCtx != NULL ? pCtx->pSliceHeader->iPicOrderCntLsb : m_sPictInfoList[m_iLastBufferedIdx].iPOC; + int32_t iLastSeqNum = pCtx != NULL ? pCtx->iSeqNum : m_sPictInfoList[m_iLastBufferedIdx].iSeqNum; isReady = (m_sReoderingStatus.iLastWrittenPOC > IMinInt32 && m_sReoderingStatus.iMinPOC - m_sReoderingStatus.iLastWrittenPOC <= 1) - || m_sReoderingStatus.iMinPOC < iLastPOC; + || m_sReoderingStatus.iMinPOC < iLastPOC + || m_sReoderingStatus.iMinSeqNum - iLastSeqNum < 0; } if (isReady) { m_sReoderingStatus.iLastWrittenPOC = m_sReoderingStatus.iMinPOC; + m_sReoderingStatus.iLastWrittenSeqNum = m_sReoderingStatus.iMinSeqNum; #if defined (_DEBUG) #ifdef _MOTION_VECTOR_DUMP_ fprintf (stderr, "Output POC: #%d uiDecodingTimeStamp=%d\n", m_sReoderingStatus.iLastWrittenPOC, @@ -1136,13 +1069,14 @@ m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iPOC = IMinInt32; int32_t iPicBuffIdx = m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iPicBuffIdx; if (pPicBuff != NULL) { - if (iPicBuffIdx > 0 && iPicBuffIdx < pPicBuff->iCapacity) + if (iPicBuffIdx >= 0 && iPicBuffIdx < pPicBuff->iCapacity) { PPicture pPic = pPicBuff->ppPic[iPicBuffIdx]; --pPic->iRefCount; + if (pPic->iRefCount <= 0 && pPic->pSetUnRef) + pPic->pSetUnRef(pPic); } } - m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].bLastGOP = false; m_sReoderingStatus.iMinPOC = IMinInt32; --m_sReoderingStatus.iNumOfPicts; } @@ -1178,6 +1112,7 @@ #endif #endif m_sReoderingStatus.iLastWrittenPOC = m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iPOC; + m_sReoderingStatus.iLastWrittenSeqNum = m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iSeqNum; memcpy(pDstInfo, &m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].sBufferInfo, sizeof(SBufferInfo)); ppDst[0] = pDstInfo->pDst[0]; ppDst[1] = pDstInfo->pDst[1]; @@ -1187,10 +1122,8 @@ PPicBuff pPicBuff = pCtx ? pCtx->pPicBuff : m_pPicBuff; PPicture pPic = pPicBuff->ppPic[m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].iPicBuffIdx]; --pPic->iRefCount; - } - if (m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].bLastGOP) { - --m_sReoderingStatus.iLastGOPRemainPicts; - m_sPictInfoList[m_sReoderingStatus.iPictInfoIndex].bLastGOP = false; + if (pPic->iRefCount <= 0 && pPic->pSetUnRef) + pPic->pSetUnRef(pPic); } --m_sReoderingStatus.iNumOfPicts; } @@ -1204,8 +1137,12 @@ m_bIsBaseline = pDecContext->pSps->uiProfileIdc == 66 || pDecContext->pSps->uiProfileIdc == 83; if (!m_bIsBaseline) { if (pDstInfo->iBufferStatus == 1) { - if (m_sReoderingStatus.iLastGOPRemainPicts == 0 && pDecContext->pSliceHeader->eSliceType == B_SLICE && - pDecContext->pSliceHeader->iPicOrderCntLsb <= m_sReoderingStatus.iLastWrittenPOC + 2) { + if (pDecContext->pSliceHeader->eSliceType == B_SLICE && + ((pDecContext->iSeqNum == m_sReoderingStatus.iLastWrittenSeqNum) ? + (pDecContext->pSliceHeader->iPicOrderCntLsb <= m_sReoderingStatus.iLastWrittenPOC + 2) : + (pDecContext->iSeqNum - m_sReoderingStatus.iLastWrittenSeqNum == 1 && pDecContext->pSliceHeader->iPicOrderCntLsb == 0))) { + m_sReoderingStatus.iLastWrittenPOC = pDecContext->pSliceHeader->iPicOrderCntLsb; + m_sReoderingStatus.iLastWrittenSeqNum = pDecContext->iSeqNum; //issue #3478, use b-slice type to determine correct picture order as the first priority as POC order is not as reliable as based on b-slice ppDst[0] = pDstInfo->pDst[0]; ppDst[1] = pDstInfo->pDst[1]; diff -Nru openh264-2.4.0+dfsg/debian/changelog openh264-2.4.1+dfsg/debian/changelog --- openh264-2.4.0+dfsg/debian/changelog 2023-11-29 16:02:28.000000000 +0000 +++ openh264-2.4.1+dfsg/debian/changelog 2024-02-15 20:40:04.000000000 +0000 @@ -1,3 +1,11 @@ +openh264 (2.4.1+dfsg-1) unstable; urgency=medium + + * New upstream version 2.4.1+dfsg + * Replace wget and bzip2 with apt-helper + * Fix SHA256 checksums for 2.4.1 + + -- Bastian Germann Thu, 15 Feb 2024 20:40:04 +0000 + openh264 (2.4.0+dfsg-1) unstable; urgency=medium * New upstream version 2.4.0+dfsg diff -Nru openh264-2.4.0+dfsg/debian/control openh264-2.4.1+dfsg/debian/control --- openh264-2.4.0+dfsg/debian/control 2023-11-29 16:02:28.000000000 +0000 +++ openh264-2.4.1+dfsg/debian/control 2024-02-15 20:32:56.000000000 +0000 @@ -36,7 +36,7 @@ Conflicts: libopenh264-7 Architecture: i386 amd64 arm64 armhf Multi-Arch: same -Depends: ${misc:Depends}, bzip2, libstdc++6, wget +Depends: ${misc:Depends}, libstdc++6 # Please note that the short Description reflects a license requirement Description: OpenH264 Video Codec provided by Cisco Systems, Inc. OpenH264 is a codec library which supports H.264 encoding and decoding. diff -Nru openh264-2.4.0+dfsg/debian/libopenh264-cisco7.postinst openh264-2.4.1+dfsg/debian/libopenh264-cisco7.postinst --- openh264-2.4.0+dfsg/debian/libopenh264-cisco7.postinst 2023-11-29 16:02:28.000000000 +0000 +++ openh264-2.4.1+dfsg/debian/libopenh264-cisco7.postinst 2024-02-15 20:38:25.000000000 +0000 @@ -10,19 +10,19 @@ ### CHANGE SHA256SUMs FOR EACH NEW VER ### i386) ARCH="32" MULTIARCH="i386-linux-gnu" - SHA256SUM="31b6e0127bb9e63193f65fae3ed4fbbc60a8baa26e9672bf984d84fb5e7478c3" + SHA256SUM="0d3343adf41136e41c397baa7dbaf6e37d0c01e0d5e288f3f6e6b42e56a0cc1c" ;; amd64) ARCH="64" MULTIARCH="x86_64-linux-gnu" - SHA256SUM="c84e874563f228eb61c172deea0d4ce8fac5fa56942ff23b7b5a8dedf5308b01" + SHA256SUM="ca413853d99d960ebcd5ae5b4c65a85bb2b5598e9042e64700a9f4b737ca3a3f" ;; armhf) ARCH="-arm" MULTIARCH="arm-linux-gnueabihf" - SHA256SUM="f0b946ceb6b434570ad63ddfb8a92154a6322b3779acbebea5df0a895baeea7f" + SHA256SUM="2186f0f19f66cbf27a7dcb76aab0c31459544055a7132806e1216389b9d51ea0" ;; *) ARCH="-$DPKG_MAINTSCRIPT_ARCH" MULTIARCH="aarch64-linux-gnu" - SHA256SUM="ebcafd6cd42a31b1732609e34e907c3e0f7162c8810f826710a2dab3e3463c2b" + SHA256SUM="cf37063a9f77cf343153e41ef73d3ac05d4825ac6099cd862b1b7799eabf74f2" esac URL="http://ciscobinary.openh264.org/libopenh264-${VER}-linux${ARCH}.7.so.bz2" @@ -30,12 +30,7 @@ { TMPFL="$(mktemp).bz2" -PROXY=$(apt-config shell http_proxy Acquire::http::Proxy) -if [ -n "$PROXY" ]; then - eval export $PROXY -fi - -if ! wget -T 60 -O "$TMPFL" "$URL"; then +if ! /usr/lib/apt/apt-helper download-file "$URL" "$TMPFL"; then echo "$0: Some problem occurred during the download." >&2 exit 1 fi @@ -45,7 +40,7 @@ exit 1 fi -if ! bzcat $TMPFL > /usr/lib/$MULTIARCH/libopenh264.so.7 ; then +if ! /usr/lib/apt/apt-helper cat-file $TMPFL > /usr/lib/$MULTIARCH/libopenh264.so.7 ; then echo "$0: Error on unpacking." >&2 exit 1 fi diff -Nru openh264-2.4.0+dfsg/gmpopenh264.info openh264-2.4.1+dfsg/gmpopenh264.info --- openh264-2.4.0+dfsg/gmpopenh264.info 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/gmpopenh264.info 2024-01-30 05:56:32.000000000 +0000 @@ -1,4 +1,4 @@ Name: gmpopenh264 Description: GMP Plugin for OpenH264. -Version: 2.4.0 +Version: 2.4.1 APIs: encode-video[h264], decode-video[h264] diff -Nru openh264-2.4.0+dfsg/meson.build openh264-2.4.1+dfsg/meson.build --- openh264-2.4.0+dfsg/meson.build 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/meson.build 2024-01-30 05:56:32.000000000 +0000 @@ -1,5 +1,5 @@ project('openh264', ['c', 'cpp'], - version : '2.4.0', + version : '2.4.1', meson_version : '>= 0.52', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff -Nru openh264-2.4.0+dfsg/openh264.rc openh264-2.4.1+dfsg/openh264.rc --- openh264-2.4.0+dfsg/openh264.rc 2023-11-24 08:11:10.000000000 +0000 +++ openh264-2.4.1+dfsg/openh264.rc 2024-01-30 05:56:32.000000000 +0000 @@ -24,8 +24,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,0,2310 - PRODUCTVERSION 2,4,0,2310 + FILEVERSION 2,4,1,2401 + PRODUCTVERSION 2,4,1,2401 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ VALUE "Comments", "Cisco OpenH264 codec" VALUE "CompanyName", "Cisco Systems Inc." VALUE "FileDescription", "Cisco OpenH264 codec" - VALUE "FileVersion", "2.4.0.2310" + VALUE "FileVersion", "2.4.1.2401" VALUE "InternalName", "openh264.dll" VALUE "LegalCopyright", "© 2011-2015 Cisco and/or its affiliates. All rights reserved." VALUE "OriginalFilename", "openh264.dll" VALUE "ProductName", "Cisco OpenH264 codec" - VALUE "ProductVersion", "2.4.0.2310" + VALUE "ProductVersion", "2.4.1.2401" END END BLOCK "VarFileInfo"