- format type (PAL, NTSC, etc.) - color primaries (BT709, SMPTE170M, etc.) - transfer characteristics (BT709, SMPTE170M, etc.) - color matrix ((BT709, SMPTE170M, etc.) These modifications allow the client to specify these attributes and, if specified, makes sure they are written to the output file.
Showing the changes to test/encoder/EncUT_ParameterSetStrategy.cpp (1 of 6 files). Show all
Unified · Split
| @@ -120,4 +120,101 @@ TEST_F (ParameterSetStrategyTest, FindExistingSps) { · 119 unmodified lines | |||
| 120 | (void) iRet; // Not using iRet at the moment | 120 | (void) iRet; // Not using iRet at the moment |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | TEST_F (ParameterSetStrategyTest, TestVSTPParameters) { | ||
| 124 | int32_t iRet = 0; | ||
| 125 | bool FalseLocal = false; // EXPECT_EQ does not like "true" or "false" as its first arg | ||
| 126 | bool TrueLocal = true; | ||
| 127 | |||
| 128 | // this test verifies that the client's "video signal type present" parameter values end up in SWelsSPS | ||
| 129 | |||
| 130 | //init client parameters | ||
| 131 | SEncParamExt sParamExt; | ||
| 132 | SWelsSvcCodingParam::FillDefault(sParamExt); | ||
| 133 | sParamExt.iUsageType = CAMERA_VIDEO_REAL_TIME; | ||
| 134 | sParamExt.iPicWidth = 1280; | ||
| 135 | sParamExt.iPicHeight = 720; | ||
| 136 | sParamExt.iTargetBitrate = 1000000; | ||
| 137 | sParamExt.iRCMode = RC_BITRATE_MODE; | ||
| 138 | sParamExt.fMaxFrameRate = 30.0f; | ||
| 139 | |||
| 140 | // VSTP parameters should be their default values (see SWelsSvcCodingParam::FillDefault()) | ||
| 141 | for ( int i = 0; i < MAX_SPATIAL_LAYER_NUM; i++ ) | ||
| 142 | { | ||
| 143 | // expected actual | ||
| 144 | EXPECT_EQ( FalseLocal, sParamExt.sSpatialLayers[i].bVideoSignalTypePresent); | ||
| 145 | EXPECT_EQ( VF_UNDEF, sParamExt.sSpatialLayers[i].uiVideoFormat);//5 | ||
| 146 | EXPECT_EQ( FalseLocal, sParamExt.sSpatialLayers[i].bFullRange); | ||
| 147 | EXPECT_EQ( FalseLocal, sParamExt.sSpatialLayers[i].bColorDescriptionPresent); | ||
| 148 | EXPECT_EQ( CP_UNDEF, sParamExt.sSpatialLayers[i].uiColorPrimaries);//2 | ||
| 149 | EXPECT_EQ( TRC_UNDEF, sParamExt.sSpatialLayers[i].uiTransferCharacteristics);//2 | ||
| 150 | EXPECT_EQ( CM_UNDEF, sParamExt.sSpatialLayers[i].uiColorMatrix);//2 | ||
| 151 | } | ||
| 152 | |||
| 153 | // set non-default VSTP values | ||
| 154 | sParamExt.iSpatialLayerNum = 2; | ||
| 155 | |||
| 156 | sParamExt.sSpatialLayers[0].bVideoSignalTypePresent = true; | ||
| 157 | sParamExt.sSpatialLayers[0].uiVideoFormat = VF_NTSC;//2 | ||
| 158 | sParamExt.sSpatialLayers[0].bFullRange = true; | ||
| 159 | sParamExt.sSpatialLayers[0].bColorDescriptionPresent = true; | ||
| 160 | sParamExt.sSpatialLayers[0].uiColorPrimaries = CP_BT709;//1 | ||
| 161 | sParamExt.sSpatialLayers[0].uiTransferCharacteristics = TRC_BT709;//1 | ||
| 162 | sParamExt.sSpatialLayers[0].uiColorMatrix = CM_BT709;//1 | ||
| 163 | |||
| 164 | sParamExt.sSpatialLayers[1].bVideoSignalTypePresent = true; | ||
| 165 | sParamExt.sSpatialLayers[1].uiVideoFormat = VF_PAL;//1 | ||
| 166 | sParamExt.sSpatialLayers[1].bFullRange = true; | ||
| 167 | sParamExt.sSpatialLayers[1].bColorDescriptionPresent = true; | ||
| 168 | sParamExt.sSpatialLayers[1].uiColorPrimaries = CP_SMPTE170M;//6 | ||
| 169 | sParamExt.sSpatialLayers[1].uiTransferCharacteristics = TRC_SMPTE170M;//6 | ||
| 170 | sParamExt.sSpatialLayers[1].uiColorMatrix = CM_SMPTE170M;//6 | ||
| 171 | |||
| 172 | // transcode parameters from client | ||
| 173 | SWelsSvcCodingParam sSvcCodingParam; | ||
| 174 | iRet = sSvcCodingParam.ParamTranscode(sParamExt); | ||
| 175 | EXPECT_EQ (iRet, 0); | ||
| 176 | |||
| 177 | // transcoded VSTP parameters should match the client values | ||
| 178 | for ( int i = 0; i < sParamExt.iSpatialLayerNum; i++ ) | ||
| 179 | { | ||
| 180 | EXPECT_EQ( sParamExt.sSpatialLayers[i].bVideoSignalTypePresent, sSvcCodingParam.sSpatialLayers[i].bVideoSignalTypePresent); | ||
| 181 | EXPECT_EQ( sParamExt.sSpatialLayers[i].uiVideoFormat, sSvcCodingParam.sSpatialLayers[i].uiVideoFormat); | ||
| 182 | EXPECT_EQ( sParamExt.sSpatialLayers[i].bFullRange, sSvcCodingParam.sSpatialLayers[i].bFullRange); | ||
| 183 | EXPECT_EQ( sParamExt.sSpatialLayers[i].bColorDescriptionPresent, sSvcCodingParam.sSpatialLayers[i].bColorDescriptionPresent); | ||
| 184 | EXPECT_EQ( sParamExt.sSpatialLayers[i].uiColorPrimaries, sSvcCodingParam.sSpatialLayers[i].uiColorPrimaries); | ||
| 185 | EXPECT_EQ( sParamExt.sSpatialLayers[i].uiTransferCharacteristics, sSvcCodingParam.sSpatialLayers[i].uiTransferCharacteristics); | ||
| 186 | EXPECT_EQ( sParamExt.sSpatialLayers[i].uiColorMatrix, sSvcCodingParam.sSpatialLayers[i].uiColorMatrix); | ||
| 187 | } | ||
| 188 | |||
| 189 | // use transcoded parameters to initialize an SWelsSPS | ||
| 190 | m_pSpsArrayPointer = &m_pSpsArray[0]; | ||
| 191 | SSpatialLayerConfig* pDlayerParam = &(sSvcCodingParam.sSpatialLayers[0]); | ||
| 192 | iRet = WelsInitSps ( | ||
| 193 | m_pSpsArrayPointer, | ||
| 194 | pDlayerParam, | ||
| 195 | &sSvcCodingParam.sDependencyLayers[0], | ||
| 196 | sSvcCodingParam.uiIntraPeriod, | ||
| 197 | sSvcCodingParam.iMaxNumRefFrame, | ||
| 198 | 0, //SpsId | ||
| 199 | sSvcCodingParam.bEnableFrameCroppingFlag, | ||
| 200 | sSvcCodingParam.iRCMode != RC_OFF_MODE, | ||
| 201 | 0, //DlayerCount | ||
| 202 | false | ||
| 203 | ); | ||
| 204 | EXPECT_EQ (iRet, 0); | ||
| 205 | |||
| 206 | // SPS VSTP parameters should match the transcoded values | ||
| 207 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].bVideoSignalTypePresent, m_pSpsArrayPointer->bVideoSignalTypePresent); | ||
| 208 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].uiVideoFormat, m_pSpsArrayPointer->uiVideoFormat); | ||
| 209 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].bFullRange, m_pSpsArrayPointer->bFullRange); | ||
| 210 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].bColorDescriptionPresent, m_pSpsArrayPointer->bColorDescriptionPresent); | ||
| 211 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].uiColorPrimaries, m_pSpsArrayPointer->uiColorPrimaries); | ||
| 212 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].uiTransferCharacteristics, m_pSpsArrayPointer->uiTransferCharacteristics); | ||
| 213 | EXPECT_EQ( sSvcCodingParam.sSpatialLayers[0].uiColorMatrix, m_pSpsArrayPointer->uiColorMatrix); | ||
| 214 | |||
| 215 | // TODO: verify that WriteVUI (au_set.cpp) writes the SPS VSTP values to the output file (verified using FFmpeg) | ||
| 216 | |||
| 217 | (void) iRet; // Not using iRet at the moment | ||
| 218 | } | ||
| 219 | |||
| 123 | 220 | ||