/*
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. 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 www.aomedia.org/license/patent.
 */

#include <assert.h>
#include "./y4menc.h"

int y4m_write_file_header(char *buf, size_t len, int width, int height,
                          const struct AvxRational *framerate,
                          aom_img_fmt_t fmt, unsigned int bit_depth) {
  const char *color;
  switch (bit_depth) {
    case 8:
      color = fmt == AOM_IMG_FMT_444A
                  ? "C444alpha\n"
                  : fmt == AOM_IMG_FMT_I444
                        ? "C444\n"
                        : fmt == AOM_IMG_FMT_I422 ? "C422\n" : "C420jpeg\n";
      break;
    case 9:
      color = fmt == AOM_IMG_FMT_I44416
                  ? "C444p9 XYSCSS=444P9\n"
                  : fmt == AOM_IMG_FMT_I42216 ? "C422p9 XYSCSS=422P9\n"
                                              : "C420p9 XYSCSS=420P9\n";
      break;
    case 10:
      color = fmt == AOM_IMG_FMT_I44416
                  ? "C444p10 XYSCSS=444P10\n"
                  : fmt == AOM_IMG_FMT_I42216 ? "C422p10 XYSCSS=422P10\n"
                                              : "C420p10 XYSCSS=420P10\n";
      break;
    case 12:
      color = fmt == AOM_IMG_FMT_I44416
                  ? "C444p12 XYSCSS=444P12\n"
                  : fmt == AOM_IMG_FMT_I42216 ? "C422p12 XYSCSS=422P12\n"
                                              : "C420p12 XYSCSS=420P12\n";
      break;
    case 14:
      color = fmt == AOM_IMG_FMT_I44416
                  ? "C444p14 XYSCSS=444P14\n"
                  : fmt == AOM_IMG_FMT_I42216 ? "C422p14 XYSCSS=422P14\n"
                                              : "C420p14 XYSCSS=420P14\n";
      break;
    case 16:
      color = fmt == AOM_IMG_FMT_I44416
                  ? "C444p16 XYSCSS=444P16\n"
                  : fmt == AOM_IMG_FMT_I42216 ? "C422p16 XYSCSS=422P16\n"
                                              : "C420p16 XYSCSS=420P16\n";
      break;
    default: color = NULL; assert(0);
  }
  return snprintf(buf, len, "YUV4MPEG2 W%u H%u F%u:%u I%c %s", width, height,
                  framerate->numerator, framerate->denominator, 'p', color);
}

int y4m_write_frame_header(char *buf, size_t len) {
  return snprintf(buf, len, "FRAME\n");
}
