| Index: media/base/android/video_decoder_job.cc
|
| diff --git a/media/base/android/video_decoder_job.cc b/media/base/android/video_decoder_job.cc
|
| deleted file mode 100644
|
| index bca7fa4afb4be1cdd9237fe33ff8ff412092cbda..0000000000000000000000000000000000000000
|
| --- a/media/base/android/video_decoder_job.cc
|
| +++ /dev/null
|
| @@ -1,169 +0,0 @@
|
| -// Copyright 2013 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/base/android/video_decoder_job.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/threading/thread.h"
|
| -#include "media/base/android/media_drm_bridge.h"
|
| -#include "media/base/android/sdk_media_codec_bridge.h"
|
| -
|
| -namespace media {
|
| -
|
| -class VideoDecoderThread : public base::Thread {
|
| - public:
|
| - VideoDecoderThread() : base::Thread("MediaSource_VideoDecoderThread") {
|
| - Start();
|
| - }
|
| -};
|
| -
|
| -// TODO(qinmin): Check if it is tolerable to use worker pool to handle all the
|
| -// decoding tasks so that we don't need a global thread here.
|
| -// http://crbug.com/245750
|
| -base::LazyInstance<VideoDecoderThread>::Leaky
|
| - g_video_decoder_thread = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -VideoDecoderJob::VideoDecoderJob(
|
| - const base::Closure& request_data_cb,
|
| - const base::Closure& on_demuxer_config_changed_cb)
|
| - : MediaDecoderJob(g_video_decoder_thread.Pointer()->task_runner(),
|
| - request_data_cb,
|
| - on_demuxer_config_changed_cb),
|
| - video_codec_(kUnknownVideoCodec),
|
| - config_width_(0),
|
| - config_height_(0),
|
| - output_width_(0),
|
| - output_height_(0) {
|
| -}
|
| -
|
| -VideoDecoderJob::~VideoDecoderJob() {}
|
| -
|
| -bool VideoDecoderJob::SetVideoSurface(gl::ScopedJavaSurface surface) {
|
| - // For an empty surface, always pass it to the |media_codec_bridge_| job so
|
| - // that it can detach from the current one. Otherwise, don't pass an
|
| - // unprotected surface if the video content requires a protected one.
|
| - if (!surface.IsEmpty() && IsProtectedSurfaceRequired() &&
|
| - !surface.is_protected()) {
|
| - return false;
|
| - }
|
| -
|
| - surface_ = std::move(surface);
|
| - need_to_reconfig_decoder_job_ = true;
|
| - return true;
|
| -}
|
| -
|
| -bool VideoDecoderJob::HasStream() const {
|
| - return video_codec_ != kUnknownVideoCodec;
|
| -}
|
| -
|
| -void VideoDecoderJob::ReleaseDecoderResources() {
|
| - MediaDecoderJob::ReleaseDecoderResources();
|
| - surface_ = gl::ScopedJavaSurface();
|
| -}
|
| -
|
| -void VideoDecoderJob::SetDemuxerConfigs(const DemuxerConfigs& configs) {
|
| - video_codec_ = configs.video_codec;
|
| - config_width_ = configs.video_size.width();
|
| - config_height_ = configs.video_size.height();
|
| - set_is_content_encrypted(configs.is_video_encrypted);
|
| - if (!media_codec_bridge_) {
|
| - output_width_ = config_width_;
|
| - output_height_ = config_height_;
|
| - }
|
| -}
|
| -
|
| -void VideoDecoderJob::ReleaseOutputBuffer(
|
| - int output_buffer_index,
|
| - size_t offset,
|
| - size_t size,
|
| - bool render_output,
|
| - bool is_late_frame,
|
| - base::TimeDelta current_presentation_timestamp,
|
| - MediaCodecStatus status,
|
| - const DecoderCallback& callback) {
|
| - media_codec_bridge_->ReleaseOutputBuffer(output_buffer_index, render_output);
|
| - callback.Run(status, is_late_frame, current_presentation_timestamp,
|
| - current_presentation_timestamp);
|
| -}
|
| -
|
| -bool VideoDecoderJob::ComputeTimeToRender() const {
|
| - return true;
|
| -}
|
| -
|
| -bool VideoDecoderJob::IsCodecReconfigureNeeded(
|
| - const DemuxerConfigs& configs) const {
|
| - if (!media_codec_bridge_)
|
| - return true;
|
| -
|
| - if (!AreDemuxerConfigsChanged(configs))
|
| - return false;
|
| -
|
| - bool only_size_changed = false;
|
| - if (video_codec_ == configs.video_codec &&
|
| - is_content_encrypted() == configs.is_video_encrypted) {
|
| - only_size_changed = true;
|
| - }
|
| -
|
| - return !only_size_changed ||
|
| - !static_cast<VideoCodecBridge*>(media_codec_bridge_.get())->
|
| - IsAdaptivePlaybackSupported(configs.video_size.width(),
|
| - configs.video_size.height());
|
| -}
|
| -
|
| -bool VideoDecoderJob::AreDemuxerConfigsChanged(
|
| - const DemuxerConfigs& configs) const {
|
| - return video_codec_ != configs.video_codec ||
|
| - is_content_encrypted() != configs.is_video_encrypted ||
|
| - config_width_ != configs.video_size.width() ||
|
| - config_height_ != configs.video_size.height();
|
| -}
|
| -
|
| -MediaDecoderJob::MediaDecoderJobStatus
|
| - VideoDecoderJob::CreateMediaCodecBridgeInternal() {
|
| - if (surface_.IsEmpty()) {
|
| - ReleaseMediaCodecBridge();
|
| - return STATUS_FAILURE;
|
| - }
|
| -
|
| - // If we cannot find a key frame in cache, browser seek is needed.
|
| - bool next_video_data_is_iframe = SetCurrentFrameToPreviouslyCachedKeyFrame();
|
| - if (!next_video_data_is_iframe)
|
| - return STATUS_KEY_FRAME_REQUIRED;
|
| -
|
| - bool is_secure = is_content_encrypted() && drm_bridge() &&
|
| - drm_bridge()->IsProtectedSurfaceRequired();
|
| -
|
| - media_codec_bridge_.reset(VideoCodecBridge::CreateDecoder(
|
| - video_codec_, is_secure, gfx::Size(config_width_, config_height_),
|
| - surface_.j_surface().obj(), GetMediaCrypto()));
|
| -
|
| - if (!media_codec_bridge_)
|
| - return STATUS_FAILURE;
|
| -
|
| - return STATUS_SUCCESS;
|
| -}
|
| -
|
| -bool VideoDecoderJob::UpdateOutputFormat() {
|
| - if (!media_codec_bridge_)
|
| - return false;
|
| - int prev_output_width = output_width_;
|
| - int prev_output_height = output_height_;
|
| - // See b/18224769. The values reported from MediaCodecBridge::GetOutputSize
|
| - // correspond to the actual video frame size, but this is not necessarily the
|
| - // size that should be output.
|
| - output_width_ = config_width_;
|
| - output_height_ = config_height_;
|
| - return (output_width_ != prev_output_width) ||
|
| - (output_height_ != prev_output_height);
|
| -}
|
| -
|
| -bool VideoDecoderJob::IsProtectedSurfaceRequired() {
|
| - return is_content_encrypted() && drm_bridge() &&
|
| - drm_bridge()->IsProtectedSurfaceRequired();
|
| -}
|
| -
|
| -} // namespace media
|
|
|