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
120 (void) iRet; // Not using iRet at the moment120 (void) iRet; // Not using iRet at the moment
121}121}
122 122
123TEST_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

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