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

Unified Diff: media/cast/video_receiver/codecs/vp8/vp8_decoder.cc

Issue 225023010: [Cast] Refactor/clean-up VideoReceiver to match AudioReceiver as closely as possible. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 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
Index: media/cast/video_receiver/codecs/vp8/vp8_decoder.cc
diff --git a/media/cast/video_receiver/codecs/vp8/vp8_decoder.cc b/media/cast/video_receiver/codecs/vp8/vp8_decoder.cc
deleted file mode 100644
index f25a5186e47d96f6d765ce72e70838689533ab87..0000000000000000000000000000000000000000
--- a/media/cast/video_receiver/codecs/vp8/vp8_decoder.cc
+++ /dev/null
@@ -1,152 +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/cast/video_receiver/codecs/vp8/vp8_decoder.h"
-
-#include "base/bind.h"
-#include "base/debug/trace_event.h"
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-#include "media/base/video_frame.h"
-#include "media/base/video_util.h"
-#include "media/cast/logging/logging_defines.h"
-#include "third_party/libvpx/source/libvpx/vpx/vp8dx.h"
-#include "ui/gfx/size.h"
-
-namespace {
-
-void LogFrameDecodedEvent(
- const scoped_refptr<media::cast::CastEnvironment>& cast_environment,
- base::TimeTicks event_time,
- media::cast::RtpTimestamp rtp_timestamp,
- uint32 frame_id) {
- cast_environment->Logging()->InsertFrameEvent(
- event_time, media::cast::kVideoFrameDecoded, rtp_timestamp, frame_id);
-}
-
-} // namespace
-
-namespace media {
-namespace cast {
-
-Vp8Decoder::Vp8Decoder(scoped_refptr<CastEnvironment> cast_environment)
- : cast_environment_(cast_environment) {
- // Make sure that we initialize the decoder from the correct thread.
- cast_environment_->PostTask(
- CastEnvironment::VIDEO,
- FROM_HERE,
- base::Bind(&Vp8Decoder::InitDecoder, base::Unretained(this)));
-}
-
-Vp8Decoder::~Vp8Decoder() {
- if (decoder_) {
- vpx_codec_err_t ret = vpx_codec_destroy(decoder_.get());
- CHECK_EQ(VPX_CODEC_OK, ret) << "vpx_codec_destroy() failed.";
- }
-}
-
-void Vp8Decoder::InitDecoder() {
- vpx_codec_dec_cfg_t cfg;
- // Initializing to use one core.
- cfg.threads = 1;
- vpx_codec_flags_t flags = VPX_CODEC_USE_POSTPROC;
-
- DCHECK(!decoder_);
- decoder_.reset(new vpx_dec_ctx_t());
- vpx_codec_err_t ret =
- vpx_codec_dec_init(decoder_.get(), vpx_codec_vp8_dx(), &cfg, flags);
- if (ret != VPX_CODEC_OK) {
- DCHECK(false) << "vpx_codec_dec_init() failed.";
- decoder_.reset();
- }
-}
-
-bool Vp8Decoder::Decode(const transport::EncodedVideoFrame* encoded_frame,
- const base::TimeTicks render_time,
- const VideoFrameDecodedCallback& frame_decoded_cb) {
- DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::VIDEO));
- const int frame_id_int = static_cast<int>(encoded_frame->frame_id);
- VLOG(2) << "VP8 decode frame:" << frame_id_int
- << " sized:" << encoded_frame->data.size();
-
- if (encoded_frame->data.empty())
- return false;
-
- vpx_codec_iter_t iter = NULL;
- vpx_image_t* img;
- const int real_time_decoding = 1;
- if (vpx_codec_decode(
- decoder_.get(),
- reinterpret_cast<const uint8*>(encoded_frame->data.data()),
- static_cast<unsigned int>(encoded_frame->data.size()),
- 0,
- real_time_decoding)) {
- VLOG(1) << "Failed to decode VP8 frame:" << frame_id_int;
- return false;
- }
-
- img = vpx_codec_get_frame(decoder_.get(), &iter);
- if (img == NULL) {
- VLOG(1) << "Skip rendering VP8 frame:" << frame_id_int;
- return false;
- }
-
- gfx::Size visible_size(img->d_w, img->d_h);
- gfx::Size full_size(img->stride[VPX_PLANE_Y], img->d_h);
- DCHECK(VideoFrame::IsValidConfig(
- VideoFrame::I420, visible_size, gfx::Rect(visible_size), full_size));
- // Temp timing setting - will sort out timing in a follow up cl.
- scoped_refptr<VideoFrame> decoded_frame =
- VideoFrame::CreateFrame(VideoFrame::I420,
- visible_size,
- gfx::Rect(visible_size),
- full_size,
- base::TimeDelta());
-
- // Copy each plane individually (need to account for stride).
- // TODO(mikhal): Eliminate copy once http://crbug.com/321856 is resolved.
- CopyPlane(VideoFrame::kYPlane,
- img->planes[VPX_PLANE_Y],
- img->stride[VPX_PLANE_Y],
- img->d_h,
- decoded_frame.get());
- CopyPlane(VideoFrame::kUPlane,
- img->planes[VPX_PLANE_U],
- img->stride[VPX_PLANE_U],
- (img->d_h + 1) / 2,
- decoded_frame.get());
- CopyPlane(VideoFrame::kVPlane,
- img->planes[VPX_PLANE_V],
- img->stride[VPX_PLANE_V],
- (img->d_h + 1) / 2,
- decoded_frame.get());
-
- VLOG(2) << "Decoded frame " << frame_id_int;
-
- // Update logging from the main thread.
- cast_environment_->PostTask(CastEnvironment::MAIN,
- FROM_HERE,
- base::Bind(&LogFrameDecodedEvent,
- cast_environment_,
- cast_environment_->Clock()->NowTicks(),
- encoded_frame->rtp_timestamp,
- encoded_frame->frame_id));
-
- // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc
- TRACE_EVENT_INSTANT1(
- "cast_perf_test", "FrameDecoded",
- TRACE_EVENT_SCOPE_THREAD,
- "rtp_timestamp", encoded_frame->rtp_timestamp);
-
- // Frame decoded - return frame to the user via callback.
- cast_environment_->PostTask(
- CastEnvironment::MAIN,
- FROM_HERE,
- base::Bind(frame_decoded_cb, decoded_frame, render_time));
-
- return true;
-}
-
-} // namespace cast
-} // namespace media
« no previous file with comments | « media/cast/video_receiver/codecs/vp8/vp8_decoder.h ('k') | media/cast/video_receiver/codecs/vp8/vp8_decoder.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698