| #!/usr/bin/env python3 | |
| ## Copyright (c) 2023, Alliance for Open Media. All rights reserved | |
| ## | |
| ## This source code is subject to the terms of the BSD 3-Clause Clear License and the | |
| ## Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear License was | |
| ## not distributed with this source code in the LICENSE file, you can obtain it | |
| ## at aomedia.org/license/software-license/bsd-3-c-c/. If the Alliance for Open Media Patent | |
| ## License 1.0 was not distributed with this source code in the PATENTS file, you | |
| ## can obtain it at aomedia.org/license/patent-license/. | |
| ## | |
| """Helper tool to dump an AVM frame proto to a JSON file.""" | |
| from collections.abc import Sequence | |
| import pathlib | |
| from absl import app | |
| from absl import flags | |
| from absl import logging | |
| from avm_stats import avm_frame_pb2 | |
| from google.protobuf import json_format | |
| _PROTO = flags.DEFINE_string("proto", None, "Path to AVM frame protobuf.") | |
| flags.mark_flag_as_required("proto") | |
| _OUTPUT_JSON = flags.DEFINE_string( | |
| "output_json", None, "Path to output JSON file." | |
| ) | |
| flags.mark_flag_as_required("output_json") | |
| def dump_json(proto: avm_frame_pb2.Frame, output_json: pathlib.Path): | |
| """Dumps an AVM frame proto to a JSON file. | |
| Args: | |
| frame: AVM frame proto object. | |
| output_json: Path to write JSON to. | |
| """ | |
| with output_json.open("w") as f: | |
| json = json_format.MessageToJson(proto) | |
| f.write(json) | |
| logging.info("Wrote %s.", output_json) | |
| def main(argv: Sequence[str]) -> None: | |
| if len(argv) > 1: | |
| raise app.UsageError("Too many command-line arguments.") | |
| proto_path = pathlib.Path(_PROTO.value) | |
| output_json = pathlib.Path(_OUTPUT_JSON.value) | |
| with proto_path.open("rb") as f: | |
| proto = avm_frame_pb2.Frame.FromString(f.read()) | |
| dump_json(proto, output_json) | |
| if __name__ == "__main__": | |
| app.run(main) |