Skip to content

Commit 4150142

Browse files
authored
added argument parsing of color aspects for encoder app (#158)
* added argument parsing of color aspects for encoder app Signed-off-by: [email protected] <[email protected]> * added help message for HLG transfer Signed-off-by: [email protected] <[email protected]> --------- Signed-off-by: [email protected] <[email protected]>
1 parent 1a3b64a commit 4150142

File tree

2 files changed

+104
-9
lines changed

2 files changed

+104
-9
lines changed

app/oapv_app_args.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ typedef struct args_opt {
5757
int val_type; /* value type */
5858
int flag; /* flag to setting or not */
5959
void *val; /* actual value */
60-
char desc[512]; /* description of option */
60+
char desc[1024]; /* description of option */
6161
} args_opt_t;
6262

6363
typedef struct args_parser args_parser_t;

app/oapv_app_enc.c

Lines changed: 103 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)