| #include "program_command.h" | |
| namespace avif { | |
| ProgramCommand::ProgramCommand(const std::string& name, | |
| const std::string& description) | |
| : argparse_( | |
| argparse::ArgumentParser("avifgainmaputil " + name, description)), | |
| name_(name), | |
| description_(description) {} | |
| // Parses command line arguments. Should be called before Run(). | |
| avifResult ProgramCommand::ParseArgs(int argc, const char* const argv[]) { | |
| argparse_.parse_args(argc, argv); | |
| return AVIF_RESULT_OK; | |
| } | |
| // Prints this command's help on stdout. | |
| void ProgramCommand::PrintUsage() { argparse_.print_help(); } | |
| argparse::ConvertedValue<int> PixelFormatConverter::from_str( | |
| const std::string& str) { | |
| argparse::ConvertedValue<int> converted_value; | |
| if (str == "444") { | |
| converted_value.set_value(AVIF_PIXEL_FORMAT_YUV444); | |
| } else if (str == "422") { | |
| converted_value.set_value(AVIF_PIXEL_FORMAT_YUV422); | |
| } else if (str == "420") { | |
| converted_value.set_value(AVIF_PIXEL_FORMAT_YUV420); | |
| } else if (str == "400") { | |
| converted_value.set_value(AVIF_PIXEL_FORMAT_YUV400); | |
| } else { | |
| converted_value.set_error("Invalid argument value"); | |
| } | |
| return converted_value; | |
| } | |
| std::vector<std::string> PixelFormatConverter::default_choices() { | |
| return {"444", "422", "420", "400"}; | |
| } | |
| argparse::ConvertedValue<CicpValues> CicpConverter::from_str( | |
| const std::string& str) { | |
| argparse::ConvertedValue<CicpValues> converted_value; | |
| std::vector<uint32_t> cicp_values; | |
| if (!ParseList(str, '/', 3, &cicp_values)) { | |
| converted_value.set_error( | |
| "Invalid cicp values, expected format: P/T/M where each " | |
| "value is a positive integer, got: " + | |
| str); | |
| } | |
| CicpValues cicp = {}; | |
| cicp.color_primaries = (avifColorPrimaries)cicp_values[0]; | |
| cicp.transfer_characteristics = (avifTransferCharacteristics)cicp_values[1]; | |
| cicp.matrix_coefficients = (avifMatrixCoefficients)cicp_values[2]; | |
| converted_value.set_value(cicp); | |
| return converted_value; | |
| } | |
| std::vector<std::string> CicpConverter::default_choices() { return {}; } | |
| } // namespace avif |