History

Added support for "video signal type present" information. The "Video signal type present" information is written to the output video file when it is created, and later is used by the decoder to properly decode the compressed video data. The saved attributes are:

- 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.

Gregory J. Wolfe committed 10 years ago

Commit c7fcba01 parent f35a0da6 files · +113 −31Browse files

Showing the changes to test/encoder/EncUT_ParameterSetStrategy.cpp (1 of 6 files). Show all

Unified · Split

test/encoder/EncUT_ParameterSetStrategy.cpp+97−0
@@ -120,4 +120,101 @@ TEST_F (ParameterSetStrategyTest, FindExistingSps) { · 119 unmodified lines
120120 (void) iRet; // Not using iRet at the moment
121121 }
122122
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+
123220

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t