1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Use of this source code is governed by a BSD-style license
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  that can be found in the LICENSE file in the root of the source
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  tree. An additional intellectual property rights grant can be found
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  in the file PATENTS.  All contributing project authors may
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  be found in the AUTHORS file in the root of the source tree.
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "./ivfenc.h"
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "vpx/vpx_encoder.h"
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "vpx_ports/mem_ops.h"
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesvoid ivf_write_file_header(FILE *outfile,
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                           const struct vpx_codec_enc_cfg *cfg,
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                           unsigned int fourcc,
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                           int frame_cnt) {
208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath  char header[32];
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  header[0] = 'D';
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  header[1] = 'K';
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  header[2] = 'I';
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  header[3] = 'F';
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le16(header + 4, 0);                     // version
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le16(header + 6, 32);                    // header size
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 8, fourcc);                // fourcc
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le16(header + 12, cfg->g_w);             // width
30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes  mem_put_le16(header + 14, cfg->g_h);             // height
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 16, cfg->g_timebase.den);  // rate
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 20, cfg->g_timebase.num);  // scale
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 24, frame_cnt);            // length
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 28, 0);                    // unused
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  fwrite(header, 1, 32, outfile);
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesvoid ivf_write_frame_header(FILE *outfile, int64_t pts, size_t frame_size) {
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  char header[12];
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header, (int)frame_size);
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 4, (int)(pts & 0xFFFFFFFF));
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  mem_put_le32(header + 8, (int)(pts >> 32));
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  fwrite(header, 1, 12, outfile);
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesvoid ivf_write_frame_size(FILE *outfile, size_t frame_size) {
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes  char header[4];
50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
51  mem_put_le32(header, (int)frame_size);
52  fwrite(header, 1, 4, outfile);
53}
54