ref: 1b0576f9150baa5b58f176eb0769db45e92c3681
parent: a2158aca4d5a08843e8ce3cda091b7348a384535
parent: 59f91bebdde69396a59aaab1c4544629209f7053
author: huili2 <[email protected]>
date: Tue Mar 19 10:12:23 EDT 2019
Merge pull request #3112 from centricular/misc-fixes Misc fixes
--- a/codec/decoder/core/inc/deblocking.h
+++ b/codec/decoder/core/inc/deblocking.h
@@ -82,9 +82,6 @@
int32_t DeblockingAvailableNoInterlayer (PDqLayer pCurDqLayer, int32_t iFilterIdc);
-void DeblockingIntraMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t iBoundryFlag);
-void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_t nBS[2][4][4], int32_t iBoundryFlag);
-
void WelsDeblockingMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t iBoundryFlag);
} // namespace WelsDec
--- a/codec/decoder/core/inc/decode_slice.h
+++ b/codec/decoder/core/inc/decode_slice.h
@@ -68,7 +68,7 @@
void WelsLumaDcDequantIdct (int16_t* pBlock, int32_t iQp, PWelsDecoderContext pCtx);
int32_t WelsMbInterPrediction (PWelsDecoderContext pCtx, PDqLayer pCurLayer);
void WelsChromaDcIdct (int16_t* pBlock);
-bool ComputeColocated (PWelsDecoderContext pCtx);
+bool ComputeColocatedTemporalScaling (PWelsDecoderContext pCtx);
#ifdef __cplusplus
extern "C" {
--- a/codec/decoder/core/src/deblocking.cpp
+++ b/codec/decoder/core/src/deblocking.cpp
@@ -971,7 +971,7 @@
}
-void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_t nBS[2][4][4],
+static void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_t nBS[2][4][4],
int32_t iBoundryFlag) {
int32_t iMbXyIndex = pCurDqLayer->iMbXyIndex;
int32_t iMbX = pCurDqLayer->iMbX;
@@ -1215,7 +1215,7 @@
}
// merge h&v lookup table operation to save performance
-void DeblockingIntraMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t iBoundryFlag) {
+static void DeblockingIntraMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, int32_t iBoundryFlag) {
FilteringEdgeLumaHV (pCurDqLayer, pFilter, iBoundryFlag);
FilteringEdgeChromaHV (pCurDqLayer, pFilter, iBoundryFlag);
}
--- a/codec/decoder/core/src/decode_slice.cpp
+++ b/codec/decoder/core/src/decode_slice.cpp
@@ -1130,7 +1130,7 @@
return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
if (25 == uiMbType) { //I_PCM
- WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in P slice!");
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in B slice!");
WELS_READ_VERIFY (ParseIPCMInfoCabac (pCtx));
pSlice->iLastDeltaQp = 0;
WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
@@ -2532,7 +2532,7 @@
return GENERATE_ERROR_NO (ERR_LEVEL_MB_DATA, ERR_INFO_INVALID_MB_TYPE);
if (25 == uiMbType) {
- WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in P slice!");
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_DEBUG, "I_PCM mode exists in B slice!");
int32_t iDecStrideL = pCurLayer->pDec->iLinesize[0];
int32_t iDecStrideC = pCurLayer->pDec->iLinesize[1];
@@ -2855,7 +2855,11 @@
void WelsBlockZero8x8_c (int16_t* pBlock, int32_t iStride) {
WelsBlockInit (pBlock, 8, 8, iStride, 0);
}
-bool ComputeColocated (PWelsDecoderContext pCtx) {
+
+// Compute the temporal-direct scaling factor that's common
+// to all direct MBs in this slice, as per clause 8.4.1.2.3
+// of T-REC H.264 201704
+bool ComputeColocatedTemporalScaling (PWelsDecoderContext pCtx) {
PDqLayer pCurLayer = pCtx->pCurDqLayer;
PSlice pCurSlice = &pCurLayer->sLayerInfo.sSliceInLayer;
PSliceHeader pSliceHeader = &pCurSlice->sSliceHeaderExt.sSliceHeader;
@@ -2879,11 +2883,6 @@
}
}
}
- //Implement the following
- //get Mv_colocated_L1
- //and do calculation
- //iMvp[LIST_0] = Mv_colocated_L1 * (POC(cur) - POC(L0))/POC(L1) - POC(L0))
- //iMvp[LIST_1] = Mv_colocated_L1 * (POC(cur) - POC(L1))/POC(L1) - POC(L0))
return true;
}
} // namespace WelsDec
--- a/codec/decoder/core/src/decoder_core.cpp
+++ b/codec/decoder/core/src/decoder_core.cpp
@@ -2550,9 +2550,9 @@
}
}
}
- //calculate Colocated mv scaler factor for temporal direct prediction
+ //calculate Colocated mv scaling factor for temporal direct prediction
if (pSh->eSliceType == B_SLICE && !pSh->iDirectSpatialMvPredFlag)
- ComputeColocated (pCtx);
+ ComputeColocatedTemporalScaling (pCtx);
iRet = WelsDecodeSlice (pCtx, bFreshSliceAvailable, pNalCur);
--- a/codec/decoder/core/src/parse_mb_syn_cavlc.cpp
+++ b/codec/decoder/core/src/parse_mb_syn_cavlc.cpp
@@ -1448,7 +1448,9 @@
}
}
}
+ // Read mvd_L0 then mvd_L1
for (int32_t listIdx = LIST_0; listIdx < LIST_A; ++listIdx) {
+ // Partitions
for (int32_t i = 0; i < 2; i++) {
int iPartIdx = i << 3;
int32_t iRefIdx = ref_idx_list[listIdx][i];
@@ -1455,9 +1457,9 @@
if (IS_DIR (mbType, i, listIdx)) {
PredInter16x8Mv (iMvArray, iRefIdxArray, listIdx, iPartIdx, iRefIdx, iMv);
- WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //mvd_l0[ mbPartIdx ][ 0 ][ compIdx ]
+ WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //mvd_l{0,1}[ mbPartIdx ][ listIdx ][x]
iMv[0] += iCode;
- WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //mvd_l1[ mbPartIdx ][ 0 ][ compIdx ]
+ WELS_READ_VERIFY (BsGetSe (pBs, &iCode)); //mvd_l{0,1}[ mbPartIdx ][ listIdx ][y]
iMv[1] += iCode;
WELS_CHECK_SE_BOTH_WARNING (iMv[1], iMinVmv, iMaxVmv, "vertical mv");
--- a/test/api/decoder_test.cpp
+++ b/test/api/decoder_test.cpp
@@ -96,7 +96,6 @@
{"res/BA_MW_D.264", "afd7a9765961ca241bb4bdf344b31397bec7465a"},
{"res/BANM_MW_D.264", "92d924a857a1a7d7d9b224eaa3887830f15dee7f"},
{"res/BASQP1_Sony_C.jsv", "3986c8c9d2876d2f0748b925101b152c6ec8b811"},
- {"res/Cisco_Men_whisper_640x320_CABAC_Bframe_9.264", "88b8864a69cee7656202bc54d2ffa8b7b6f1f6c5"},
{"res/CI1_FT_B.264", "cbfec15e17a504678b19a1191992131c92a1ac26"},
{"res/CI_MW_D.264", "289f29a103c8d95adf2909c646466904be8b06d7"},
{"res/CVFC1_Sony_C.jsv", "4641abd7419a5580b97f16e83fd1d566339229d0"},