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