2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved.
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
14 #include "./video_writer.h"
15 #include "vpx/vpx_encoder.h"
17 struct VpxVideoWriterStruct
{
23 static void write_header(FILE *file
, const VpxVideoInfo
*info
,
25 struct vpx_codec_enc_cfg cfg
;
26 cfg
.g_w
= info
->frame_width
;
27 cfg
.g_h
= info
->frame_height
;
28 cfg
.g_timebase
.num
= info
->time_base
.numerator
;
29 cfg
.g_timebase
.den
= info
->time_base
.denominator
;
31 ivf_write_file_header(file
, &cfg
, info
->codec_fourcc
, frame_count
);
34 VpxVideoWriter
*vpx_video_writer_open(const char *filename
,
35 VpxContainer container
,
36 const VpxVideoInfo
*info
) {
37 if (container
== kContainerIVF
) {
38 VpxVideoWriter
*writer
= NULL
;
39 FILE *const file
= fopen(filename
, "wb");
43 writer
= malloc(sizeof(*writer
));
47 writer
->frame_count
= 0;
51 write_header(writer
->file
, info
, 0);
59 void vpx_video_writer_close(VpxVideoWriter
*writer
) {
61 // Rewriting frame header with real frame count
63 write_header(writer
->file
, &writer
->info
, writer
->frame_count
);
70 int vpx_video_writer_write_frame(VpxVideoWriter
*writer
,
71 const uint8_t *buffer
, size_t size
,
73 ivf_write_frame_header(writer
->file
, pts
, size
);
74 if (fwrite(buffer
, 1, size
, writer
->file
) != size
)
77 ++writer
->frame_count
;