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_reader.h" 12c55a96383497a772a307b346368133960b02ad03Eric Laurent 13c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <cassert> 14c55a96383497a772a307b346368133960b02ad03Eric Laurent 15c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "testsupport/fileutils.h" 16c55a96383497a772a307b346368133960b02ad03Eric Laurent 17c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace webrtc { 18c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace test { 19c55a96383497a772a307b346368133960b02ad03Eric Laurent 20c55a96383497a772a307b346368133960b02ad03Eric LaurentFrameReaderImpl::FrameReaderImpl(std::string input_filename, 21c55a96383497a772a307b346368133960b02ad03Eric Laurent int frame_length_in_bytes) 22c55a96383497a772a307b346368133960b02ad03Eric Laurent : input_filename_(input_filename), 23c55a96383497a772a307b346368133960b02ad03Eric Laurent frame_length_in_bytes_(frame_length_in_bytes), 24c55a96383497a772a307b346368133960b02ad03Eric Laurent input_file_(NULL) { 25c55a96383497a772a307b346368133960b02ad03Eric Laurent} 26c55a96383497a772a307b346368133960b02ad03Eric Laurent 27c55a96383497a772a307b346368133960b02ad03Eric LaurentFrameReaderImpl::~FrameReaderImpl() { 28c55a96383497a772a307b346368133960b02ad03Eric Laurent Close(); 29c55a96383497a772a307b346368133960b02ad03Eric Laurent} 30c55a96383497a772a307b346368133960b02ad03Eric Laurent 31c55a96383497a772a307b346368133960b02ad03Eric Laurentbool FrameReaderImpl::Init() { 32c55a96383497a772a307b346368133960b02ad03Eric Laurent if (frame_length_in_bytes_ <= 0) { 33c55a96383497a772a307b346368133960b02ad03Eric Laurent fprintf(stderr, "Frame length must be >0, was %d\n", 34c55a96383497a772a307b346368133960b02ad03Eric Laurent frame_length_in_bytes_); 35c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 36c55a96383497a772a307b346368133960b02ad03Eric Laurent } 37c55a96383497a772a307b346368133960b02ad03Eric Laurent input_file_ = fopen(input_filename_.c_str(), "rb"); 38c55a96383497a772a307b346368133960b02ad03Eric Laurent if (input_file_ == NULL) { 39c55a96383497a772a307b346368133960b02ad03Eric Laurent fprintf(stderr, "Couldn't open input file for reading: %s\n", 40c55a96383497a772a307b346368133960b02ad03Eric Laurent input_filename_.c_str()); 41c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 42c55a96383497a772a307b346368133960b02ad03Eric Laurent } 43c55a96383497a772a307b346368133960b02ad03Eric Laurent // Calculate total number of frames. 44c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t source_file_size = GetFileSize(input_filename_); 45c55a96383497a772a307b346368133960b02ad03Eric Laurent if (source_file_size <= 0u) { 46c55a96383497a772a307b346368133960b02ad03Eric Laurent fprintf(stderr, "Found empty file: %s\n", input_filename_.c_str()); 47c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 48c55a96383497a772a307b346368133960b02ad03Eric Laurent } 49c55a96383497a772a307b346368133960b02ad03Eric Laurent number_of_frames_ = source_file_size / frame_length_in_bytes_; 50c55a96383497a772a307b346368133960b02ad03Eric Laurent return true; 51c55a96383497a772a307b346368133960b02ad03Eric Laurent} 52c55a96383497a772a307b346368133960b02ad03Eric Laurent 53c55a96383497a772a307b346368133960b02ad03Eric Laurentvoid FrameReaderImpl::Close() { 54c55a96383497a772a307b346368133960b02ad03Eric Laurent if (input_file_ != NULL) { 55c55a96383497a772a307b346368133960b02ad03Eric Laurent fclose(input_file_); 56c55a96383497a772a307b346368133960b02ad03Eric Laurent input_file_ = NULL; 57c55a96383497a772a307b346368133960b02ad03Eric Laurent } 58c55a96383497a772a307b346368133960b02ad03Eric Laurent} 59c55a96383497a772a307b346368133960b02ad03Eric Laurent 60c55a96383497a772a307b346368133960b02ad03Eric Laurentbool FrameReaderImpl::ReadFrame(WebRtc_UWord8* source_buffer) { 61c55a96383497a772a307b346368133960b02ad03Eric Laurent assert(source_buffer); 62c55a96383497a772a307b346368133960b02ad03Eric Laurent if (input_file_ == NULL) { 63c55a96383497a772a307b346368133960b02ad03Eric Laurent fprintf(stderr, "FrameReader is not initialized (input file is NULL)\n"); 64c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 65c55a96383497a772a307b346368133960b02ad03Eric Laurent } 66c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t nbr_read = fread(source_buffer, 1, frame_length_in_bytes_, 67c55a96383497a772a307b346368133960b02ad03Eric Laurent input_file_); 68c55a96383497a772a307b346368133960b02ad03Eric Laurent if (nbr_read != static_cast<unsigned int>(frame_length_in_bytes_) && 69c55a96383497a772a307b346368133960b02ad03Eric Laurent ferror(input_file_)) { 70c55a96383497a772a307b346368133960b02ad03Eric Laurent fprintf(stderr, "Error reading from input file: %s\n", 71c55a96383497a772a307b346368133960b02ad03Eric Laurent input_filename_.c_str()); 72c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 73c55a96383497a772a307b346368133960b02ad03Eric Laurent } 74c55a96383497a772a307b346368133960b02ad03Eric Laurent if (feof(input_file_) != 0) { 75c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; // No more frames to process. 76c55a96383497a772a307b346368133960b02ad03Eric Laurent } 77c55a96383497a772a307b346368133960b02ad03Eric Laurent return true; 78c55a96383497a772a307b346368133960b02ad03Eric Laurent} 79c55a96383497a772a307b346368133960b02ad03Eric Laurent 80c55a96383497a772a307b346368133960b02ad03Eric Laurent} // namespace test 81c55a96383497a772a307b346368133960b02ad03Eric Laurent} // namespace webrtc 82