1 /*
2  *  Copyright (c) 2011 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 #include "webrtc/test/testsupport/frame_writer.h"
12 
13 #include <assert.h>
14 
15 namespace webrtc {
16 namespace test {
17 
FrameWriterImpl(std::string output_filename,size_t frame_length_in_bytes)18 FrameWriterImpl::FrameWriterImpl(std::string output_filename,
19                                  size_t frame_length_in_bytes)
20     : output_filename_(output_filename),
21       frame_length_in_bytes_(frame_length_in_bytes),
22       output_file_(NULL) {
23 }
24 
~FrameWriterImpl()25 FrameWriterImpl::~FrameWriterImpl() {
26   Close();
27 }
28 
Init()29 bool FrameWriterImpl::Init() {
30   if (frame_length_in_bytes_ <= 0) {
31     fprintf(stderr, "Frame length must be >0, was %zu\n",
32             frame_length_in_bytes_);
33     return false;
34   }
35   output_file_ = fopen(output_filename_.c_str(), "wb");
36   if (output_file_ == NULL) {
37     fprintf(stderr, "Couldn't open output file for writing: %s\n",
38             output_filename_.c_str());
39     return false;
40   }
41   return true;
42 }
43 
Close()44 void FrameWriterImpl::Close() {
45   if (output_file_ != NULL) {
46     fclose(output_file_);
47     output_file_ = NULL;
48   }
49 }
50 
FrameLength()51 size_t FrameWriterImpl::FrameLength() { return frame_length_in_bytes_; }
52 
WriteFrame(uint8_t * frame_buffer)53 bool FrameWriterImpl::WriteFrame(uint8_t* frame_buffer) {
54   assert(frame_buffer);
55   if (output_file_ == NULL) {
56     fprintf(stderr, "FrameWriter is not initialized (output file is NULL)\n");
57     return false;
58   }
59   size_t bytes_written = fwrite(frame_buffer, 1, frame_length_in_bytes_,
60                                 output_file_);
61   if (bytes_written != frame_length_in_bytes_) {
62     fprintf(stderr, "Failed to write %zu bytes to file %s\n",
63             frame_length_in_bytes_, output_filename_.c_str());
64     return false;
65   }
66   return true;
67 }
68 
69 }  // namespace test
70 }  // namespace webrtc
71