/*
 *  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#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");
}
