Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Unified Diff: media/tools/omx_test/file_reader_util.cc

Issue 7066071: Removing defunct OpenMAX code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: removed tab Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/tools/omx_test/file_reader_util.h ('k') | media/tools/omx_test/file_sink.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/tools/omx_test/file_reader_util.cc
diff --git a/media/tools/omx_test/file_reader_util.cc b/media/tools/omx_test/file_reader_util.cc
deleted file mode 100644
index a599d2f1e88845e0712216deb6d8dde1243f2749..0000000000000000000000000000000000000000
--- a/media/tools/omx_test/file_reader_util.cc
+++ /dev/null
@@ -1,296 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "media/tools/omx_test/file_reader_util.h"
-
-#include <stdio.h>
-#include <string>
-
-#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/string_util.h"
-#include "media/ffmpeg/ffmpeg_common.h"
-#include "media/ffmpeg/file_protocol.h"
-#include "media/filters/bitstream_converter.h"
-#include "media/tools/omx_test/color_space_util.h"
-
-namespace media {
-
-//////////////////////////////////////////////////////////////////////////////
-// BasicFileReader
-BasicFileReader::BasicFileReader(const FilePath& path)
- : path_(path),
- file_(NULL) {
-}
-
-bool BasicFileReader::Initialize() {
- file_.Set(file_util::OpenFile(path_, "rb"));
- if (!file_.get()) {
- LOG(ERROR) << "unable to open " << path_.value();
- }
- return file_.get() != NULL;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// YuvFileReader
-YuvFileReader::YuvFileReader(const FilePath& path,
- int width,
- int height,
- int loop_count,
- bool enable_csc)
- : BasicFileReader(path),
- width_(width),
- height_(height),
- loop_count_(loop_count),
- output_nv21_(enable_csc) {
-}
-
-YuvFileReader::~YuvFileReader() {}
-
-void YuvFileReader::Read(uint8** output, int* size) {
- if (!file()) {
- *size = 0;
- *output = NULL;
- return;
- }
-
- while (true) {
- scoped_array<uint8> data;
- int bytes_read = 0;
-
- // OMX require encoder input are delivered in frames (or planes).
- // Assume the input file is I420 YUV file.
- const int kFrameSize = width_ * height_ * 3 / 2;
- data.reset(new uint8[kFrameSize]);
-
- if (output_nv21_) {
- if (!csc_buf_.get())
- csc_buf_.reset(new uint8[kFrameSize]);
- bytes_read = fread(csc_buf_.get(), 1, kFrameSize, file());
-
- // We do not convert partial frames.
- if (bytes_read == kFrameSize)
- IYUVtoNV21(csc_buf_.get(), data.get(), width_, height_);
- else
- bytes_read = 0; // force cleanup or loop around.
- } else {
- bytes_read = fread(data.get(), 1, kFrameSize, file());
- }
-
- if (bytes_read) {
- *size = bytes_read;
- *output = data.release();
- break;
- }
-
- // Encounter the end of file.
- if (loop_count_ == 1) {
- // Signal end of stream.
- *size = 0;
- *output = data.release();
- }
-
- --loop_count_;
- fseek(file(), 0, SEEK_SET);
- }
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// BlockFileReader
-BlockFileReader::BlockFileReader(const FilePath& path,
- int block_size)
- : BasicFileReader(path),
- block_size_(block_size) {
-}
-
-void BlockFileReader::Read(uint8** output, int* size) {
- CHECK(file());
- *output = new uint8[block_size_];
- *size = fread(*output, 1, block_size_, file());
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// FFmpegFileReader
-FFmpegFileReader::FFmpegFileReader(const FilePath& path)
- : path_(path),
- format_context_(NULL),
- codec_context_(NULL),
- target_stream_(-1),
- converter_(NULL) {
-}
-
-FFmpegFileReader::~FFmpegFileReader() {
- if (format_context_)
- av_close_input_file(format_context_);
-}
-
-bool FFmpegFileReader::Initialize() {
- // av_open_input_file wants a char*, which can't work with wide paths.
- // So we assume ASCII on Windows. On other platforms we can pass the
- // path bytes through verbatim.
-#if defined(OS_WIN)
- std::string string_path = WideToASCII(path_.value());
-#else
- const std::string& string_path = path_.value();
-#endif
- int result = av_open_input_file(&format_context_, string_path.c_str(),
- NULL, 0, NULL);
- if (result < 0) {
- switch (result) {
- case AVERROR_NOFMT:
- LOG(ERROR) << "Error: File format not supported "
- << path_.value() << std::endl;
- break;
- default:
- LOG(ERROR) << "Error: Could not open input for "
- << path_.value() << std::endl;
- break;
- }
- return false;
- }
- if (av_find_stream_info(format_context_) < 0) {
- LOG(ERROR) << "can't use FFmpeg to parse stream info";
- return false;
- }
-
- for (size_t i = 0; i < format_context_->nb_streams; ++i) {
- codec_context_ = format_context_->streams[i]->codec;
-
- // Find the video stream.
- if (codec_context_->codec_type == CODEC_TYPE_VIDEO) {
- target_stream_ = i;
- break;
- }
- }
- if (target_stream_ == -1) {
- LOG(ERROR) << "no video in the stream";
- return false;
- }
-
- // Initialize the bitstream filter if needed.
- // TODO(hclam): find a better way to identify mp4 container.
- if (codec_context_->codec_id == CODEC_ID_H264) {
- converter_.reset(new media::FFmpegBitstreamConverter(
- "h264_mp4toannexb", codec_context_));
- } else if (codec_context_->codec_id == CODEC_ID_MPEG4) {
- converter_.reset(new media::FFmpegBitstreamConverter(
- "mpeg4video_es", codec_context_));
- } else if (codec_context_->codec_id == CODEC_ID_WMV3) {
- converter_.reset(new media::FFmpegBitstreamConverter(
- "vc1_asftorcv", codec_context_));
- } else if (codec_context_->codec_id == CODEC_ID_VC1) {
- converter_.reset(new media::FFmpegBitstreamConverter(
- "vc1_asftoannexg", codec_context_));
- }
-
- if (converter_.get() && !converter_->Initialize()) {
- converter_.reset();
- LOG(ERROR) << "failed to initialize h264_mp4toannexb filter";
- return false;
- }
- return true;
-}
-
-void FFmpegFileReader::Read(uint8** output, int* size) {
- if (!format_context_ || !codec_context_ || target_stream_ == -1) {
- *size = 0;
- *output = NULL;
- return;
- }
-
- AVPacket packet;
- bool found = false;
- while (!found) {
- int result = av_read_frame(format_context_, &packet);
- if (result < 0) {
- *output = NULL;
- *size = 0;
- return;
- }
- if (packet.stream_index == target_stream_) {
- if (converter_.get() && !converter_->ConvertPacket(&packet)) {
- LOG(ERROR) << "failed to convert AVPacket";
- }
- *output = new uint8[packet.size];
- *size = packet.size;
- memcpy(*output, packet.data, packet.size);
- found = true;
- }
- av_free_packet(&packet);
- }
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// H264FileReader
-const int kH264ReadSize = 1024 * 1024;
-
-H264FileReader::H264FileReader(const FilePath& path)
- : BasicFileReader(path),
- read_buf_(new uint8[kH264ReadSize]),
- current_(0),
- used_(0) {
-}
-
-H264FileReader::~H264FileReader() {}
-
-void H264FileReader::Read(uint8** output, int *size) {
- // Fill the buffer when it's less than half full.
- int read = 0;
- if (used_ < kH264ReadSize / 2) {
- read = fread(read_buf_.get(), 1, kH264ReadSize - used_, file());
- CHECK(read >= 0);
- used_ += read;
- }
-
- // If we failed to read.
- if (current_ == used_) {
- *output = NULL;
- *size = 0;
- return;
- }
-
- // Try to find start code of 0x00, 0x00, 0x01.
- bool found = false;
- int pos = current_ + 3;
- for (; pos < used_ - 2; ++pos) {
- if (read_buf_[pos] == 0 &&
- read_buf_[pos+1] == 0 &&
- read_buf_[pos+2] == 1) {
- found = true;
- break;
- }
- }
-
- // If next NALU is found.
- if (found) {
- CHECK(pos > current_);
- *size = pos - current_;
- *output = new uint8[*size];
- memcpy(*output, read_buf_.get() + current_, *size);
- current_ = pos;
-
- // If we have used_ more than half of the available buffer.
- // Then move the unused_ buffer to the front to give space
- // for more incoming output.
- if (current_ > used_ / 2) {
- CHECK(used_ > current_);
- memcpy(read_buf_.get(),
- read_buf_.get() + current_,
- used_ - current_);
- used_ = used_ - current_;
- current_ = 0;
- }
- return;
- }
-
- // If next NALU is not found, assume the remaining data is a NALU
- // and return the data.
- CHECK(used_ > current_);
- *size = used_ - current_;
- *output = new uint8[*size];
- memcpy(*output, read_buf_.get() + current_, *size);
- current_ = used_;
-}
-
-} // namespace media
« no previous file with comments | « media/tools/omx_test/file_reader_util.h ('k') | media/tools/omx_test/file_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698