1c55a96383497a772a307b346368133960b02ad03Eric Laurent/*
2c55a96383497a772a307b346368133960b02ad03Eric Laurent *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3c55a96383497a772a307b346368133960b02ad03Eric Laurent *
4c55a96383497a772a307b346368133960b02ad03Eric Laurent *  Use of this source code is governed by a BSD-style license
5c55a96383497a772a307b346368133960b02ad03Eric Laurent *  that can be found in the LICENSE file in the root of the source
6c55a96383497a772a307b346368133960b02ad03Eric Laurent *  tree. An additional intellectual property rights grant can be found
7c55a96383497a772a307b346368133960b02ad03Eric Laurent *  in the file PATENTS.  All contributing project authors may
8c55a96383497a772a307b346368133960b02ad03Eric Laurent *  be found in the AUTHORS file in the root of the source tree.
9c55a96383497a772a307b346368133960b02ad03Eric Laurent */
10c55a96383497a772a307b346368133960b02ad03Eric Laurent
11c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "testsupport/frame_writer.h"
12c55a96383497a772a307b346368133960b02ad03Eric Laurent
13c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <cassert>
14c55a96383497a772a307b346368133960b02ad03Eric Laurent
15c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace webrtc {
16c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace test {
17c55a96383497a772a307b346368133960b02ad03Eric Laurent
18c55a96383497a772a307b346368133960b02ad03Eric LaurentFrameWriterImpl::FrameWriterImpl(std::string output_filename,
19c55a96383497a772a307b346368133960b02ad03Eric Laurent                                 int frame_length_in_bytes)
20c55a96383497a772a307b346368133960b02ad03Eric Laurent    : output_filename_(output_filename),
21c55a96383497a772a307b346368133960b02ad03Eric Laurent      frame_length_in_bytes_(frame_length_in_bytes),
22c55a96383497a772a307b346368133960b02ad03Eric Laurent      output_file_(NULL) {
23c55a96383497a772a307b346368133960b02ad03Eric Laurent}
24c55a96383497a772a307b346368133960b02ad03Eric Laurent
25c55a96383497a772a307b346368133960b02ad03Eric LaurentFrameWriterImpl::~FrameWriterImpl() {
26c55a96383497a772a307b346368133960b02ad03Eric Laurent  Close();
27c55a96383497a772a307b346368133960b02ad03Eric Laurent}
28c55a96383497a772a307b346368133960b02ad03Eric Laurent
29c55a96383497a772a307b346368133960b02ad03Eric Laurentbool FrameWriterImpl::Init() {
30c55a96383497a772a307b346368133960b02ad03Eric Laurent  if (frame_length_in_bytes_ <= 0) {
31c55a96383497a772a307b346368133960b02ad03Eric Laurent    fprintf(stderr, "Frame length must be >0, was %d\n",
32c55a96383497a772a307b346368133960b02ad03Eric Laurent            frame_length_in_bytes_);
33c55a96383497a772a307b346368133960b02ad03Eric Laurent    return false;
34c55a96383497a772a307b346368133960b02ad03Eric Laurent  }
35c55a96383497a772a307b346368133960b02ad03Eric Laurent  output_file_ = fopen(output_filename_.c_str(), "wb");
36c55a96383497a772a307b346368133960b02ad03Eric Laurent  if (output_file_ == NULL) {
37c55a96383497a772a307b346368133960b02ad03Eric Laurent    fprintf(stderr, "Couldn't open output file for writing: %s\n",
38c55a96383497a772a307b346368133960b02ad03Eric Laurent            output_filename_.c_str());
39c55a96383497a772a307b346368133960b02ad03Eric Laurent    return false;
40c55a96383497a772a307b346368133960b02ad03Eric Laurent  }
41c55a96383497a772a307b346368133960b02ad03Eric Laurent  return true;
42c55a96383497a772a307b346368133960b02ad03Eric Laurent}
43c55a96383497a772a307b346368133960b02ad03Eric Laurent
44c55a96383497a772a307b346368133960b02ad03Eric Laurentvoid FrameWriterImpl::Close() {
45c55a96383497a772a307b346368133960b02ad03Eric Laurent  if (output_file_ != NULL) {
46c55a96383497a772a307b346368133960b02ad03Eric Laurent    fclose(output_file_);
47c55a96383497a772a307b346368133960b02ad03Eric Laurent    output_file_ = NULL;
48c55a96383497a772a307b346368133960b02ad03Eric Laurent  }
49c55a96383497a772a307b346368133960b02ad03Eric Laurent}
50c55a96383497a772a307b346368133960b02ad03Eric Laurent
51c55a96383497a772a307b346368133960b02ad03Eric Laurentbool FrameWriterImpl::WriteFrame(WebRtc_UWord8* frame_buffer) {
52c55a96383497a772a307b346368133960b02ad03Eric Laurent  assert(frame_buffer);
53c55a96383497a772a307b346368133960b02ad03Eric Laurent  if (output_file_ == NULL) {
54c55a96383497a772a307b346368133960b02ad03Eric Laurent    fprintf(stderr, "FrameWriter is not initialized (output file is NULL)\n");
55c55a96383497a772a307b346368133960b02ad03Eric Laurent    return false;
56c55a96383497a772a307b346368133960b02ad03Eric Laurent  }
57c55a96383497a772a307b346368133960b02ad03Eric Laurent  int bytes_written = fwrite(frame_buffer, 1, frame_length_in_bytes_,
58c55a96383497a772a307b346368133960b02ad03Eric Laurent                             output_file_);
59c55a96383497a772a307b346368133960b02ad03Eric Laurent  if (bytes_written != frame_length_in_bytes_) {
60c55a96383497a772a307b346368133960b02ad03Eric Laurent    fprintf(stderr, "Failed to write %d bytes to file %s\n",
61c55a96383497a772a307b346368133960b02ad03Eric Laurent            frame_length_in_bytes_, output_filename_.c_str());
62c55a96383497a772a307b346368133960b02ad03Eric Laurent    return false;
63c55a96383497a772a307b346368133960b02ad03Eric Laurent  }
64c55a96383497a772a307b346368133960b02ad03Eric Laurent  return true;
65c55a96383497a772a307b346368133960b02ad03Eric Laurent}
66c55a96383497a772a307b346368133960b02ad03Eric Laurent
67c55a96383497a772a307b346368133960b02ad03Eric Laurent}  // namespace test
68c55a96383497a772a307b346368133960b02ad03Eric Laurent}  // namespace webrtc
69