1/*
2 *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
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.
9 */
10
11#ifndef WEBRTC_TEST_TESTSUPPORT_FRAME_WRITER_H_
12#define WEBRTC_TEST_TESTSUPPORT_FRAME_WRITER_H_
13
14#include <stdio.h>
15
16#include <string>
17
18#include "webrtc/typedefs.h"
19
20namespace webrtc {
21namespace test {
22
23// Handles writing of video files.
24class FrameWriter {
25 public:
26  virtual ~FrameWriter() {}
27
28  // Initializes the file handler, i.e. opens the input and output files etc.
29  // This must be called before reading or writing frames has started.
30  // Returns false if an error has occurred, in addition to printing to stderr.
31  virtual bool Init() = 0;
32
33  // Writes a frame of the configured frame length to the output file.
34  // Returns true if the write was successful, false otherwise.
35  virtual bool WriteFrame(uint8_t* frame_buffer) = 0;
36
37  // Closes the output file if open. Essentially makes this class impossible
38  // to use anymore. Will also be invoked by the destructor.
39  virtual void Close() = 0;
40
41  // Frame length in bytes of a single frame image.
42  virtual size_t FrameLength() = 0;
43};
44
45class FrameWriterImpl : public FrameWriter {
46 public:
47  // Creates a file handler. The input file is assumed to exist and be readable
48  // and the output file must be writable.
49  // Parameters:
50  //   output_filename         The file to write. Will be overwritten if already
51  //                           existing.
52  //   frame_length_in_bytes   The size of each frame.
53  //                           For YUV: 3*width*height/2
54  FrameWriterImpl(std::string output_filename, size_t frame_length_in_bytes);
55  virtual ~FrameWriterImpl();
56  virtual bool Init() OVERRIDE;
57  virtual bool WriteFrame(uint8_t* frame_buffer) OVERRIDE;
58  virtual void Close() OVERRIDE;
59  virtual size_t FrameLength() OVERRIDE;
60
61 private:
62  std::string output_filename_;
63  size_t frame_length_in_bytes_;
64  FILE* output_file_;
65};
66
67}  // namespace test
68}  // namespace webrtc
69
70#endif  // WEBRTC_TEST_TESTSUPPORT_FRAME_WRITER_H_
71