Compare commits
16 Commits
main
...
v1.3-Firef
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4dc09a83b3 | ||
![]() |
05b3d62a4c | ||
![]() |
1d32e96ab7 | ||
![]() |
023052b159 | ||
![]() |
4815bb78e0 | ||
![]() |
3a182d489d | ||
![]() |
1f887a0e95 | ||
![]() |
7180adf1a2 | ||
![]() |
8c3db53fca | ||
![]() |
14294b64b3 | ||
![]() |
f08d73553f | ||
![]() |
917d683bb2 | ||
![]() |
5c114c3ebb | ||
![]() |
8e89736711 | ||
![]() |
08367c5cbf | ||
![]() |
1ed519b5bb |
2
Makefile
2
Makefile
@ -27,7 +27,7 @@ PROJECT_NAME=openh264
|
||||
MODULE_NAME=gmpopenh264
|
||||
GMP_API_BRANCH=Firefox36
|
||||
CCASFLAGS=$(CFLAGS)
|
||||
VERSION=1.2
|
||||
VERSION=1.3
|
||||
|
||||
ifeq (,$(wildcard $(SRC_PATH)gmp-api))
|
||||
HAVE_GMP_API=No
|
||||
|
8
RELEASES
8
RELEASES
@ -47,7 +47,13 @@ http://www.openh264.org/BINARY_LICENSE.txt
|
||||
|
||||
v1.3.0
|
||||
------
|
||||
// to be added
|
||||
http://ciscobinary.openh264.org/libopenh264-1.3.0-android19.so.bz2
|
||||
http://ciscobinary.openh264.org/libopenh264-1.3.0-linux32.so.bz2
|
||||
http://ciscobinary.openh264.org/libopenh264-1.3.0-linux64.so.bz2
|
||||
http://ciscobinary.openh264.org/libopenh264-1.3.0-osx32.dylib.bz2
|
||||
http://ciscobinary.openh264.org/libopenh264-1.3.0-osx64.dylib.bz2
|
||||
http://ciscobinary.openh264.org/openh264-1.3.0-win32msvc.dll.bz2
|
||||
http://ciscobinary.openh264.org/openh264-1.3.0-win64msvc.dll.bz2
|
||||
|
||||
v1.2.0
|
||||
------
|
||||
|
@ -1,6 +1,6 @@
|
||||
#ifndef VERSION_H
|
||||
#define VERSION_H
|
||||
|
||||
#define VERSION_NUMBER "openh264 default: 1.2"
|
||||
#define VERSION_NUMBER "openh264 default: 1.3"
|
||||
|
||||
#endif // VERSION_H
|
||||
|
@ -200,7 +200,7 @@ void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, cons
|
||||
pDecoder->GetOption (DECODER_OPTION_VCL_NAL, &iFeedbackVclNalInAu);
|
||||
int32_t iFeedbackTidInAu;
|
||||
pDecoder->GetOption (DECODER_OPTION_TEMPORAL_ID, &iFeedbackTidInAu);
|
||||
int32_t iErrorConMethod = (int32_t) ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE;
|
||||
int32_t iErrorConMethod = (int32_t) ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE;
|
||||
pDecoder->SetOption (DECODER_OPTION_ERROR_CON_IDC, &iErrorConMethod);
|
||||
//~end for
|
||||
|
||||
|
@ -134,7 +134,8 @@ int32_t WelsTargetSliceConstruction (PWelsDecoderContext pCtx) {
|
||||
|
||||
pDeblockMb = WelsDeblockingMb;
|
||||
|
||||
if (1 == pSliceHeader->uiDisableDeblockingFilterIdc) {
|
||||
if (1 == pSliceHeader->uiDisableDeblockingFilterIdc
|
||||
|| pCtx->pCurDqLayer->sLayerInfo.sSliceInLayer.iTotalMbInCurSlice <= 0) {
|
||||
return 0;//NO_SUPPORTED_FILTER_IDX
|
||||
} else {
|
||||
WelsDeblockingFilterSlice (pCtx, pDeblockMb);
|
||||
|
@ -306,7 +306,7 @@ void WelsDecoderDefaults (PWelsDecoderContext pCtx, SLogContext* pLogCtx) {
|
||||
pCtx->pPicBuff[LIST_1] = NULL;
|
||||
|
||||
pCtx->bAvcBasedFlag = true;
|
||||
pCtx->eErrorConMethod = ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE;
|
||||
pCtx->eErrorConMethod = ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE;
|
||||
pCtx->pPreviousDecodedPictureInDpb = NULL;
|
||||
pCtx->sDecoderStatistics.iAvgLumaQp = -1;
|
||||
|
||||
|
@ -562,10 +562,17 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co
|
||||
return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_PPS_ID);
|
||||
}
|
||||
|
||||
if (pCtx->iOverwriteFlags & OVERWRITE_PPS)
|
||||
pPps = &pCtx->sPpsBuffer[MAX_PPS_COUNT];
|
||||
else
|
||||
if (pCtx->iOverwriteFlags & OVERWRITE_PPS) {
|
||||
if (pCtx->pAccessUnitList->uiAvailUnitsNum > 1 || pCtx->iTotalNumMbRec > 0) {
|
||||
pPps = &pCtx->sPpsBuffer[MAX_PPS_COUNT];
|
||||
} else {
|
||||
memcpy (&pCtx->sPpsBuffer[pCtx->sPpsBuffer[MAX_PPS_COUNT].iPpsId], &pCtx->sPpsBuffer[MAX_PPS_COUNT], sizeof (SPps));
|
||||
pCtx->iOverwriteFlags ^= OVERWRITE_PPS;
|
||||
pPps = &pCtx->sPpsBuffer[iPpsId];
|
||||
}
|
||||
} else {
|
||||
pPps = &pCtx->sPpsBuffer[iPpsId];
|
||||
}
|
||||
|
||||
if (pPps->uiNumSliceGroups == 0) {
|
||||
WelsLog (pLogCtx, WELS_LOG_WARNING, "Invalid PPS referenced");
|
||||
@ -574,10 +581,19 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co
|
||||
}
|
||||
|
||||
if (kbExtensionFlag) {
|
||||
if (pCtx->iOverwriteFlags & OVERWRITE_SUBSETSPS)
|
||||
pSubsetSps = &pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT];
|
||||
else
|
||||
pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId];
|
||||
if (pCtx->iOverwriteFlags & OVERWRITE_SUBSETSPS) {
|
||||
if (pCtx->pAccessUnitList->uiAvailUnitsNum > 1 || pCtx->iTotalNumMbRec > 0) {
|
||||
pSubsetSps = &pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT];
|
||||
} else {
|
||||
memcpy (&pCtx->sSubsetSpsBuffer[pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT].sSps.iSpsId],
|
||||
&pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT], sizeof (SSubsetSps));
|
||||
pCtx->iOverwriteFlags ^= OVERWRITE_SUBSETSPS;
|
||||
pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId];
|
||||
ResetActiveSPSForEachLayer (pCtx);
|
||||
}
|
||||
} else {
|
||||
pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId];
|
||||
}
|
||||
pSps = &pSubsetSps->sSps;
|
||||
if (pCtx->bSubspsAvailFlags[pPps->iSpsId] == false) {
|
||||
WelsLog (pLogCtx, WELS_LOG_ERROR, "SPS id is invalid!");
|
||||
@ -590,10 +606,18 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co
|
||||
pCtx->iErrorCode |= dsNoParamSets;
|
||||
return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID);
|
||||
}
|
||||
if (pCtx->iOverwriteFlags & OVERWRITE_SPS)
|
||||
pSps = &pCtx->sSpsBuffer[MAX_SPS_COUNT];
|
||||
else
|
||||
if (pCtx->iOverwriteFlags & OVERWRITE_SPS) {
|
||||
if (pCtx->pAccessUnitList->uiAvailUnitsNum > 1 || pCtx->iTotalNumMbRec > 0) {
|
||||
pSps = &pCtx->sSpsBuffer[MAX_SPS_COUNT];
|
||||
} else {
|
||||
memcpy (&pCtx->sSpsBuffer[pCtx->sSpsBuffer[MAX_SPS_COUNT].iSpsId], &pCtx->sSpsBuffer[MAX_SPS_COUNT], sizeof (SSps));
|
||||
pCtx->iOverwriteFlags ^= OVERWRITE_SPS;
|
||||
pSps = &pCtx->sSpsBuffer[pPps->iSpsId];
|
||||
ResetActiveSPSForEachLayer (pCtx);
|
||||
}
|
||||
} else {
|
||||
pSps = &pCtx->sSpsBuffer[pPps->iSpsId];
|
||||
}
|
||||
}
|
||||
pSliceHead->iPpsId = iPpsId;
|
||||
pSliceHead->iSpsId = pPps->iSpsId;
|
||||
@ -1266,7 +1290,7 @@ void UninitialDqLayersContext (PWelsDecoderContext pCtx) {
|
||||
|
||||
void ResetCurrentAccessUnit (PWelsDecoderContext pCtx) {
|
||||
PAccessUnit pCurAu = pCtx->pAccessUnitList;
|
||||
|
||||
pCurAu->uiStartPos = 0;
|
||||
pCurAu->uiEndPos = 0;
|
||||
pCurAu->bCompletedAuFlag = false;
|
||||
if (pCurAu->uiActualUnitsNum > 0) {
|
||||
@ -1311,6 +1335,7 @@ void ForceResetCurrentAccessUnit (PAccessUnit pAu) {
|
||||
else
|
||||
pAu->uiAvailUnitsNum = 0;
|
||||
pAu->uiActualUnitsNum = 0;
|
||||
pAu->uiStartPos = 0;
|
||||
pAu->uiEndPos = 0;
|
||||
pAu->bCompletedAuFlag = false;
|
||||
}
|
||||
|
@ -75,7 +75,8 @@ int32_t MemInitNalList (PAccessUnit* ppAu, const uint32_t kuiSize) {
|
||||
(*ppAu)->uiCountUnitsNum = kuiSize;
|
||||
(*ppAu)->uiAvailUnitsNum = 0;
|
||||
(*ppAu)->uiActualUnitsNum = 0;
|
||||
(*ppAu)->uiEndPos = 0;
|
||||
(*ppAu)->uiStartPos = 0;
|
||||
(*ppAu)->uiEndPos = 0;
|
||||
(*ppAu)->bCompletedAuFlag = false;
|
||||
|
||||
return 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
Name: gmpopenh264
|
||||
Description: GMP Plugin for OpenH264.
|
||||
Version: 1.0
|
||||
Version: 1.3
|
||||
APIs: encode-video[h264], decode-video[h264]
|
||||
|
@ -589,7 +589,7 @@ class OpenH264VideoDecoder : public GMPVideoDecoder {
|
||||
memset (¶m, 0, sizeof (param));
|
||||
param.eOutputColorFormat = videoFormatI420;
|
||||
param.uiTargetDqLayer = UCHAR_MAX; // Default value
|
||||
param.eEcActiveIdc = ERROR_CON_SLICE_COPY; // Error concealment on.
|
||||
param.eEcActiveIdc = ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE; // Error concealment on.
|
||||
param.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;
|
||||
|
||||
if (decoder_->Initialize (¶m)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user