@@ -197,6 +197,80 @@ static const args_opt_t enc_args_opts[] = {
197197 ARGS_NO_KEY , "q-matrix-c3" , ARGS_VAL_TYPE_STRING , 0 , NULL ,
198198 "custom quantization matrix for component 3 \"q1 q2 ... q63 q64\""
199199 },
200+ {
201+ ARGS_NO_KEY , "color-primaries" , ARGS_VAL_TYPE_INTEGER , 0 , NULL ,
202+ "ColourPrimaries value defined in ITU-T H.273\n"
203+ " - 1: bt709\n"
204+ " - 2: unspecified\n"
205+ " - 3: reserved\n"
206+ " - 4: bt470m\n"
207+ " - 5: bt470bg\n"
208+ " - 6: smpte170m\n"
209+ " - 7: smpte240m\n"
210+ " - 8: film\n"
211+ " - 9: bt2020\n"
212+ " - 10: smpte4280\n"
213+ " - 11: smpte4311\n"
214+ " - 12: smpte4322\n"
215+ " Note: This value should be set along with all other color aspects.\n"
216+ " i.e. 'color-primaries', 'color-transfer', 'color-matrix', \n"
217+ " and 'color-range' should all be set."
218+ },
219+ {
220+ ARGS_NO_KEY , "color-transfer" , ARGS_VAL_TYPE_INTEGER , 0 , NULL ,
221+ "TransferCharacteristics value defined in ITU-T H.273\n"
222+ " - 1: bt709\n"
223+ " - 2: unspecified\n"
224+ " - 4: bt470m\n"
225+ " - 5: bt470bg\n"
226+ " - 6: smpte170m\n"
227+ " - 7: smpte240m\n"
228+ " - 8: linear\n"
229+ " - 9: log100\n"
230+ " - 10: log316\n"
231+ " - 11: iec61966-2-4\n"
232+ " - 12: bt1361e\n"
233+ " - 13: iec61966-2-1\n"
234+ " - 14: bt2020-10\n"
235+ " - 15: bt2020-12\n"
236+ " - 16: smpte2084\n"
237+ " - 17: smpte428\n"
238+ " - 18: hybrid log-gamma (HLG), arib-std-b67\n"
239+ " Note: This value should be set along with all other color aspects.\n"
240+ " i.e. 'color-primaries', 'color-transfer', 'color-matrix', \n"
241+ " and 'color-range' should all be set."
242+
243+ },
244+ {
245+ ARGS_NO_KEY , "color-matrix" , ARGS_VAL_TYPE_INTEGER , 0 , NULL ,
246+ "MatrixCoefficients value defined in ITU-T H.273\n"
247+ " - 0: gbr\n"
248+ " - 1: bt709\n"
249+ " - 2: unspecified\n"
250+ " - 4: fcc\n"
251+ " - 5: bt470bg\n"
252+ " - 6: smpte170m\n"
253+ " - 7: smpte240m\n"
254+ " - 8: ycgco\n"
255+ " - 9: bt2020nc\n"
256+ " - 10: bt2020c\n"
257+ " - 11: smpte2085\n"
258+ " - 12: chroma-derived-nc\n"
259+ " - 13: chroma-derived-c\n"
260+ " - 14: ictcp\n"
261+ " Note: This value should be set along with all other color aspects.\n"
262+ " i.e. 'color-primaries', 'color-transfer', 'color-matrix', \n"
263+ " and 'color-range' should all be set."
264+ },
265+ {
266+ ARGS_NO_KEY , "color-range" , ARGS_VAL_TYPE_INTEGER , 0 , NULL ,
267+ "Color range\n"
268+ " - 0: limited color range ('tv' color range) \n"
269+ " - 1: full color range ('pc' color range)\n"
270+ " Note: This value should be set along with all other color aspects.\n"
271+ " i.e. 'color-primaries', 'color-transfer', 'color-matrix', \n"
272+ " and 'color-range' should all be set."
273+ },
200274 {
201275 ARGS_NO_KEY , "hash" , ARGS_VAL_TYPE_NONE , 0 , NULL ,
202276 "embed frame hash value for conformance checking in decoding"
@@ -244,10 +318,10 @@ typedef struct args_var {
244318 char tile_w [16 ];
245319 char tile_h [16 ];
246320
247- char color_primaries [ 16 ] ;
248- char color_transfer [ 16 ] ;
249- char color_matrix [ 16 ] ;
250- char color_range [ 16 ] ;
321+ int color_primaries ;
322+ int color_transfer ;
323+ int color_matrix ;
324+ int color_range ;
251325
252326 oapve_param_t * param ;
253327} args_var_t ;
@@ -309,6 +383,16 @@ static args_var_t *args_init_vars(args_parser_t *args, oapve_param_t *param)
309383 args_set_variable_by_key_long (opts , "tile-h" , vars -> tile_h );
310384
311385 args_set_variable_by_key_long (opts , "preset" , vars -> preset );
386+
387+ args_set_variable_by_key_long (opts , "color-primaries" , & vars -> color_primaries );
388+ vars -> color_primaries = -1 ; /* unset */
389+ args_set_variable_by_key_long (opts , "color-transfer" , & vars -> color_transfer );
390+ vars -> color_transfer = -1 ; /* unset */
391+ args_set_variable_by_key_long (opts , "color-matrix" , & vars -> color_matrix );
392+ vars -> color_matrix = -1 ; /* unset */
393+ args_set_variable_by_key_long (opts , "color-range" , & vars -> color_range );
394+ vars -> color_range = -1 ; /* unset */
395+
312396 return vars ;
313397}
314398
@@ -648,10 +732,21 @@ static int update_param(args_var_t *vars, oapve_param_t *param)
648732 UPDATE_A_PARAM_W_KEY_VAL (param , "q-matrix-c2" , vars -> q_matrix_c2 );
649733 UPDATE_A_PARAM_W_KEY_VAL (param , "q-matrix-c3" , vars -> q_matrix_c3 );
650734
651- UPDATE_A_PARAM_W_KEY_VAL (param , "color-primaries" , vars -> color_primaries );
652- UPDATE_A_PARAM_W_KEY_VAL (param , "color-transfer" , vars -> color_transfer );
653- UPDATE_A_PARAM_W_KEY_VAL (param , "color-matrix" , vars -> color_matrix );
654- UPDATE_A_PARAM_W_KEY_VAL (param , "color-range" , vars -> color_range );
735+ // check color aspects
736+ if (vars -> color_primaries >= 0 || vars -> color_transfer >= 0 ||
737+ vars -> color_matrix >= 0 || vars -> color_range >= 0 ) {
738+ // need to check all values are set
739+ if (vars -> color_primaries < 0 || vars -> color_transfer < 0 ||
740+ vars -> color_matrix < 0 || vars -> color_range < 0 ) {
741+ logerr ("ERR: 'color-primaries', 'color-transfer', 'color-matrix', and 'color-range' should all be set.\n" );
742+ return -1 ;
743+ }
744+ param -> color_primaries = vars -> color_primaries ;
745+ param -> transfer_characteristics = vars -> color_transfer ;
746+ param -> matrix_coefficients = vars -> color_matrix ;
747+ param -> full_range_flag = vars -> color_range ;
748+ param -> color_description_present_flag = 1 ;
749+ }
655750
656751 UPDATE_A_PARAM_W_KEY_VAL (param , "tile-w" , vars -> tile_w );
657752 UPDATE_A_PARAM_W_KEY_VAL (param , "tile-h" , vars -> tile_h );
0 commit comments