2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
11 #include "common/video_writer.h"
15 #include "aom/aom_encoder.h"
16 #include "common/ivfenc.h"
18 struct AvxVideoWriterStruct
{
24 static void write_header(FILE *file
, const AvxVideoInfo
*info
,
26 struct aom_codec_enc_cfg cfg
;
27 cfg
.g_w
= info
->frame_width
;
28 cfg
.g_h
= info
->frame_height
;
29 cfg
.g_timebase
.num
= info
->time_base
.numerator
;
30 cfg
.g_timebase
.den
= info
->time_base
.denominator
;
32 ivf_write_file_header(file
, &cfg
, info
->codec_fourcc
, frame_count
);
35 AvxVideoWriter
*aom_video_writer_open(const char *filename
,
36 AvxContainer container
,
37 const AvxVideoInfo
*info
) {
38 if (container
== kContainerIVF
) {
39 AvxVideoWriter
*writer
= NULL
;
40 FILE *const file
= fopen(filename
, "wb");
41 if (!file
) return NULL
;
43 writer
= malloc(sizeof(*writer
));
48 writer
->frame_count
= 0;
52 write_header(writer
->file
, info
, 0);
60 void aom_video_writer_close(AvxVideoWriter
*writer
) {
62 // Rewriting frame header with real frame count
64 write_header(writer
->file
, &writer
->info
, writer
->frame_count
);
71 int aom_video_writer_write_frame(AvxVideoWriter
*writer
, const uint8_t *buffer
,
72 size_t size
, int64_t pts
) {
73 ivf_write_frame_header(writer
->file
, pts
, size
);
74 if (fwrite(buffer
, 1, size
, writer
->file
) != size
) return 0;
76 ++writer
->frame_count
;
81 void aom_video_writer_set_fourcc(AvxVideoWriter
*writer
, uint32_t fourcc
) {
82 writer
->info
.codec_fourcc
= fourcc
;