1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "./ivfenc.h" 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vpx_encoder.h" 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_ports/mem_ops.h" 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan 16233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid ivf_write_file_header(FILE *outfile, 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan const struct vpx_codec_enc_cfg *cfg, 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int fourcc, 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan int frame_cnt) { 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan char header[32]; 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan header[0] = 'D'; 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan header[1] = 'K'; 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan header[2] = 'I'; 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan header[3] = 'F'; 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le16(header + 4, 0); // version 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le16(header + 6, 32); // header size 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 8, fourcc); // fourcc 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le16(header + 12, cfg->g_w); // width 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le16(header + 14, cfg->g_h); // height 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 16, cfg->g_timebase.den); // rate 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 20, cfg->g_timebase.num); // scale 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 24, frame_cnt); // length 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 28, 0); // unused 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan fwrite(header, 1, 32, outfile); 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan 39233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid ivf_write_frame_header(FILE *outfile, int64_t pts, size_t frame_size) { 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan char header[12]; 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header, (int)frame_size); 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 4, (int)(pts & 0xFFFFFFFF)); 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header + 8, (int)(pts >> 32)); 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan fwrite(header, 1, 12, outfile); 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan 48233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid ivf_write_frame_size(FILE *outfile, size_t frame_size) { 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan char header[4]; 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan mem_put_le32(header, (int)frame_size); 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan fwrite(header, 1, 4, outfile); 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 54