summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/browser/media/android/browser_media_player_manager.cc2
-rw-r--r--content/browser/renderer_host/render_process_host_impl.cc3
-rw-r--r--content/child/runtime_features.cc2
-rw-r--r--content/common/media/media_player_messages_android.h3
-rw-r--r--content/common/media/media_player_messages_enums_android.h3
-rw-r--r--content/content_renderer.gypi8
-rw-r--r--content/content_tests.gypi5
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/DeviceUtils.java26
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/PepperPluginManager.java7
-rw-r--r--content/renderer/media/android/media_source_delegate.cc98
-rw-r--r--content/renderer/media/android/media_source_delegate.h18
-rw-r--r--content/renderer/media/android/renderer_media_player_manager.h4
-rw-r--r--content/renderer/media/android/webmediaplayer_android.cc91
-rw-r--r--content/renderer/media/android/webmediaplayer_android.h24
-rw-r--r--content/renderer/media/crypto/key_systems.cc5
-rw-r--r--content/renderer/media/crypto/ppapi_decryptor.cc11
-rw-r--r--content/renderer/media/media_stream_dependency_factory.cc13
-rw-r--r--content/renderer/media/media_stream_dependency_factory.h14
-rw-r--r--content/renderer/media/rtc_video_decoder_bridge_tv.cc113
-rw-r--r--content/renderer/media/rtc_video_decoder_bridge_tv.h55
-rw-r--r--content/renderer/media/rtc_video_decoder_factory_tv.cc246
-rw-r--r--content/renderer/media/rtc_video_decoder_factory_tv.h80
-rw-r--r--content/renderer/media/rtc_video_decoder_factory_tv_unittest.cc348
-rw-r--r--content/renderer/render_view_impl.cc30
24 files changed, 19 insertions, 1190 deletions
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc
index 77ce9d1..04cde98 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -64,7 +64,6 @@ ContentViewCoreImpl* BrowserMediaPlayerManager::GetContentViewCore() const {
return ContentViewCoreImpl::FromWebContents(web_contents());
}
-#if !defined(GOOGLE_TV)
// static
MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer(
MediaPlayerHostMsg_Initialize_Type type,
@@ -112,7 +111,6 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer(
NOTREACHED();
return NULL;
}
-#endif
BrowserMediaPlayerManager::BrowserMediaPlayerManager(
RenderViewHost* render_view_host)
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index cf63b96..3296794 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1138,9 +1138,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kEnableWebRtcHWVp8Encoding,
switches::kEnableWebRtcTcpServerSocket,
#endif
-#if defined(GOOGLE_TV)
- switches::kUseExternalVideoSurfaceThresholdInPixels,
-#endif
#if defined(OS_ANDROID)
switches::kDisableGestureRequirementForMediaPlayback,
switches::kDisableLowEndDeviceMode,
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 5352e56..b907e90 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -19,14 +19,12 @@ namespace content {
static void SetRuntimeFeatureDefaultsForPlatform() {
#if defined(OS_ANDROID)
-#if !defined(GOOGLE_TV)
// MSE/EME implementation needs Android MediaCodec API.
if (!media::MediaCodecBridge::IsAvailable()) {
WebRuntimeFeatures::enableWebKitMediaSource(false);
WebRuntimeFeatures::enableMediaSource(false);
WebRuntimeFeatures::enablePrefixedEncryptedMedia(false);
}
-#endif // !defined(GOOGLE_TV)
// WebAudio is enabled by default only on ARM and only when the
// MediaCodec API is available.
WebRuntimeFeatures::enableWebAudio(
diff --git a/content/common/media/media_player_messages_android.h b/content/common/media/media_player_messages_android.h
index 8d56526..145fc0b 100644
--- a/content/common/media/media_player_messages_android.h
+++ b/content/common/media/media_player_messages_android.h
@@ -42,9 +42,6 @@ IPC_STRUCT_TRAITS_BEGIN(media::DemuxerConfigs)
IPC_STRUCT_TRAITS_MEMBER(video_extra_data)
IPC_STRUCT_TRAITS_MEMBER(duration_ms)
-#if defined(GOOGLE_TV)
- IPC_STRUCT_TRAITS_MEMBER(key_system)
-#endif // defined(GOOGLE_TV)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(media::DemuxerData)
diff --git a/content/common/media/media_player_messages_enums_android.h b/content/common/media/media_player_messages_enums_android.h
index fe45950..97818ff 100644
--- a/content/common/media/media_player_messages_enums_android.h
+++ b/content/common/media/media_player_messages_enums_android.h
@@ -9,9 +9,6 @@
enum MediaPlayerHostMsg_Initialize_Type {
MEDIA_PLAYER_TYPE_URL,
MEDIA_PLAYER_TYPE_MEDIA_SOURCE,
-#if defined(GOOGLE_TV)
- MEDIA_PLAYER_TYPE_MEDIA_STREAM,
-#endif
};
#endif // CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ENUMS_ANDROID_H_
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index 260ad05..c98e6ed 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -705,14 +705,6 @@
'renderer/media/webrtc_logging.h',
],
}],
- ['enable_webrtc==1 and google_tv==1', {
- 'sources': [
- 'renderer/media/rtc_video_decoder_bridge_tv.cc',
- 'renderer/media/rtc_video_decoder_bridge_tv.h',
- 'renderer/media/rtc_video_decoder_factory_tv.cc',
- 'renderer/media/rtc_video_decoder_factory_tv.h',
- ],
- }],
['enable_plugins==1', {
'dependencies': [
'../ppapi/ppapi_internal.gyp:ppapi_host',
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index b02f7a7..6c4cf22 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -821,11 +821,6 @@
'browser/renderer_host/input/tap_suppression_controller_unittest.cc',
],
}],
- ['enable_webrtc==1 and google_tv==1', {
- 'sources': [
- 'renderer/media/rtc_video_decoder_factory_tv_unittest.cc',
- ],
- }],
['use_dbus==0', {
'sources!': [
'browser/geolocation/wifi_data_provider_linux_unittest.cc',
diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceUtils.java b/content/public/android/java/src/org/chromium/content/browser/DeviceUtils.java
index 17c8235..f472dc9 100644
--- a/content/public/android/java/src/org/chromium/content/browser/DeviceUtils.java
+++ b/content/public/android/java/src/org/chromium/content/browser/DeviceUtils.java
@@ -5,7 +5,6 @@
package org.chromium.content.browser;
import android.content.Context;
-import android.content.pm.PackageManager;
import org.chromium.base.CommandLine;
import org.chromium.content.common.ContentSwitches;
@@ -20,7 +19,6 @@ public class DeviceUtils {
*/
private static final int MINIMUM_TABLET_WIDTH_DP = 600;
- private static Boolean sIsTv = null;
private static Boolean sIsTablet = null;
/**
@@ -29,10 +27,6 @@ public class DeviceUtils {
*/
public static boolean isTablet(Context context) {
if (sIsTablet == null) {
- if (isTv(context)) {
- sIsTablet = true;
- return sIsTablet;
- }
int minimumScreenWidthDp = context.getResources().getConfiguration().
smallestScreenWidthDp;
sIsTablet = minimumScreenWidthDp >= MINIMUM_TABLET_WIDTH_DP;
@@ -41,26 +35,6 @@ public class DeviceUtils {
}
/**
- * Checks if the device should be treated as TV. Note that this should be
- * invoked before {@link #isTablet(Context)} to get the correct result
- * since they are not orthogonal.
- *
- * @param context Android context
- * @return {@code true} if the device should be treated as TV.
- */
- public static boolean isTv(Context context) {
- if (sIsTv == null) {
- PackageManager manager = context.getPackageManager();
- if (manager != null) {
- sIsTv = manager.hasSystemFeature(PackageManager.FEATURE_TELEVISION);
- return sIsTv;
- }
- sIsTv = false;
- }
- return sIsTv;
- }
-
- /**
* Appends the switch specifying which user agent should be used for this device.
* @param context The context for the caller activity.
*/
diff --git a/content/public/android/java/src/org/chromium/content/browser/PepperPluginManager.java b/content/public/android/java/src/org/chromium/content/browser/PepperPluginManager.java
index 6d9271e..4db35fe 100644
--- a/content/public/android/java/src/org/chromium/content/browser/PepperPluginManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/PepperPluginManager.java
@@ -15,8 +15,6 @@ import android.content.pm.ServiceInfo;
import android.os.Bundle;
import android.util.Log;
-import org.chromium.base.ContextTypes;
-
import java.util.List;
/**
@@ -90,11 +88,6 @@ public class PepperPluginManager {
* @return Description string for plugins
*/
public static String getPlugins(final Context context) {
- if (DeviceUtils.isTv(context) &&
- !ContextTypes.isRunningInWebapp(context)) {
- // Chrome-for-tv enables plugins only on webapp mode.
- return null;
- }
StringBuffer ret = new StringBuffer();
PackageManager pm = context.getPackageManager();
List<ResolveInfo> plugins = pm.queryIntentServices(
diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc
index bd4cf1a..0476633 100644
--- a/content/renderer/media/android/media_source_delegate.cc
+++ b/content/renderer/media/android/media_source_delegate.cc
@@ -58,7 +58,6 @@ MediaSourceDelegate::MediaSourceDelegate(
demuxer_client_(demuxer_client),
demuxer_client_id_(demuxer_client_id),
media_log_(media_log),
- demuxer_(NULL),
is_demuxer_ready_(false),
audio_stream_(NULL),
video_stream_(NULL),
@@ -66,9 +65,6 @@ MediaSourceDelegate::MediaSourceDelegate(
doing_browser_seek_(false),
browser_seek_time_(media::kNoTimestamp()),
expecting_regular_seek_(false),
-#if defined(GOOGLE_TV)
- key_added_(false),
-#endif
access_unit_size_(0) {
DCHECK(main_loop_->BelongsToCurrentThread());
}
@@ -77,7 +73,6 @@ MediaSourceDelegate::~MediaSourceDelegate() {
DCHECK(main_loop_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
DCHECK(!chunk_demuxer_);
- DCHECK(!demuxer_);
DCHECK(!demuxer_client_);
DCHECK(!audio_decrypting_demuxer_stream_);
DCHECK(!video_decrypting_demuxer_stream_);
@@ -89,7 +84,7 @@ void MediaSourceDelegate::Destroy() {
DCHECK(main_loop_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
- if (!demuxer_) {
+ if (!chunk_demuxer_) {
DCHECK(!demuxer_client_);
delete this;
return;
@@ -102,8 +97,7 @@ void MediaSourceDelegate::Destroy() {
main_weak_factory_.InvalidateWeakPtrs();
DCHECK(!main_weak_factory_.HasWeakPtrs());
- if (chunk_demuxer_)
- chunk_demuxer_->Shutdown();
+ chunk_demuxer_->Shutdown();
// |this| will be transferred to the callback StopDemuxer() and
// OnDemuxerStopDone(). They own |this| and OnDemuxerStopDone() will delete
@@ -115,7 +109,7 @@ void MediaSourceDelegate::Destroy() {
void MediaSourceDelegate::StopDemuxer() {
DCHECK(media_loop_->BelongsToCurrentThread());
- DCHECK(demuxer_);
+ DCHECK(chunk_demuxer_);
demuxer_client_->RemoveDelegate(demuxer_client_id_);
demuxer_client_ = NULL;
@@ -132,8 +126,8 @@ void MediaSourceDelegate::StopDemuxer() {
// The callback OnDemuxerStopDone() owns |this| and will delete it when
// called. Hence using base::Unretained(this) is safe here.
- demuxer_->Stop(base::Bind(&MediaSourceDelegate::OnDemuxerStopDone,
- base::Unretained(this)));
+ chunk_demuxer_->Stop(base::Bind(&MediaSourceDelegate::OnDemuxerStopDone,
+ base::Unretained(this)));
}
void MediaSourceDelegate::InitializeMediaSource(
@@ -157,7 +151,6 @@ void MediaSourceDelegate::InitializeMediaSource(
media::BindToCurrentLoop(base::Bind(
&MediaSourceDelegate::OnNeedKey, main_weak_this_)),
base::Bind(&LogMediaSourceError, media_log_)));
- demuxer_ = chunk_demuxer_.get();
// |this| will be retained until StopDemuxer() is posted, so Unretained() is
// safe here.
@@ -169,31 +162,12 @@ void MediaSourceDelegate::InitializeMediaSource(
void MediaSourceDelegate::InitializeDemuxer() {
DCHECK(media_loop_->BelongsToCurrentThread());
demuxer_client_->AddDelegate(demuxer_client_id_, this);
- demuxer_->Initialize(this, base::Bind(&MediaSourceDelegate::OnDemuxerInitDone,
+ chunk_demuxer_->Initialize(this,
+ base::Bind(&MediaSourceDelegate::OnDemuxerInitDone,
media_weak_factory_.GetWeakPtr()),
- false);
+ false);
}
-#if defined(GOOGLE_TV)
-void MediaSourceDelegate::InitializeMediaStream(
- media::Demuxer* demuxer,
- const UpdateNetworkStateCB& update_network_state_cb) {
- DCHECK(main_loop_->BelongsToCurrentThread());
- DCHECK(demuxer);
- demuxer_ = demuxer;
- update_network_state_cb_ = media::BindToCurrentLoop(update_network_state_cb);
- // When playing Media Stream, don't wait to accumulate multiple packets per
- // IPC communication.
- access_unit_size_ = 1;
-
- // |this| will be retained until StopDemuxer() is posted, so Unretained() is
- // safe here.
- media_loop_->PostTask(FROM_HERE,
- base::Bind(&MediaSourceDelegate::InitializeDemuxer,
- base::Unretained(this)));
-}
-#endif
-
const blink::WebTimeRanges& MediaSourceDelegate::Buffered() {
buffered_web_time_ranges_ =
ConvertToWebTimeRanges(buffered_time_ranges_);
@@ -313,7 +287,7 @@ void MediaSourceDelegate::Seek(
void MediaSourceDelegate::SeekInternal(const base::TimeDelta& seek_time) {
DCHECK(media_loop_->BelongsToCurrentThread());
DCHECK(IsSeeking());
- demuxer_->Seek(seek_time, base::Bind(
+ chunk_demuxer_->Seek(seek_time, base::Bind(
&MediaSourceDelegate::OnDemuxerSeekDone,
media_weak_factory_.GetWeakPtr()));
}
@@ -388,7 +362,7 @@ void MediaSourceDelegate::OnBufferReady(
<< ((!buffer || buffer->end_of_stream()) ?
-1 : buffer->timestamp().InMilliseconds())
<< ") : " << demuxer_client_id_;
- DCHECK(demuxer_);
+ DCHECK(chunk_demuxer_);
// No new OnReadFromDemuxer() will be called during seeking. So this callback
// must be from previous OnReadFromDemuxer() call and should be ignored.
@@ -451,7 +425,6 @@ void MediaSourceDelegate::OnBufferReady(
data->access_units[index].data.assign(
buffer->data(), buffer->data() + buffer->data_size());
-#if !defined(GOOGLE_TV)
// Vorbis needs 4 extra bytes padding on Android. Check
// NuMediaExtractor.cpp in Android source code.
if (is_audio && media::kCodecVorbis ==
@@ -460,7 +433,6 @@ void MediaSourceDelegate::OnBufferReady(
data->access_units[index].data.end(), kVorbisPadding,
kVorbisPadding + 4);
}
-#endif
if (buffer->decrypt_config()) {
data->access_units[index].key_id = std::vector<char>(
buffer->decrypt_config()->key_id().begin(),
@@ -508,15 +480,15 @@ void MediaSourceDelegate::RemoveTextStream(
void MediaSourceDelegate::OnDemuxerInitDone(media::PipelineStatus status) {
DCHECK(media_loop_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
- DCHECK(demuxer_);
+ DCHECK(chunk_demuxer_);
if (status != media::PIPELINE_OK) {
OnDemuxerError(status);
return;
}
- audio_stream_ = demuxer_->GetStream(DemuxerStream::AUDIO);
- video_stream_ = demuxer_->GetStream(DemuxerStream::VIDEO);
+ audio_stream_ = chunk_demuxer_->GetStream(DemuxerStream::AUDIO);
+ video_stream_ = chunk_demuxer_->GetStream(DemuxerStream::VIDEO);
if (audio_stream_ && audio_stream_->audio_decoder_config().is_encrypted() &&
!set_decryptor_ready_cb_.is_null()) {
@@ -568,7 +540,7 @@ void MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone(
media::PipelineStatus status) {
DCHECK(media_loop_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
- DCHECK(demuxer_);
+ DCHECK(chunk_demuxer_);
if (status != media::PIPELINE_OK)
audio_decrypting_demuxer_stream_.reset();
@@ -591,7 +563,7 @@ void MediaSourceDelegate::OnVideoDecryptingDemuxerStreamInitDone(
media::PipelineStatus status) {
DCHECK(media_loop_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
- DCHECK(demuxer_);
+ DCHECK(chunk_demuxer_);
if (status != media::PIPELINE_OK)
video_decrypting_demuxer_stream_.reset();
@@ -666,7 +638,6 @@ void MediaSourceDelegate::DeleteSelf() {
DCHECK(main_loop_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
chunk_demuxer_.reset();
- demuxer_ = NULL;
delete this;
}
@@ -677,42 +648,9 @@ void MediaSourceDelegate::OnMediaConfigRequest() {
NotifyDemuxerReady();
}
-#if defined(GOOGLE_TV)
-// TODO(kjyoun): Enhance logic to detect when to call NotifyDemuxerReady()
-// For now, we call it when the first key is added. See http://crbug.com/255781
-void MediaSourceDelegate::NotifyKeyAdded(const std::string& key_system) {
- if (!media_loop_->BelongsToCurrentThread()) {
- media_loop_->PostTask(FROM_HERE,
- base::Bind(&MediaSourceDelegate::NotifyKeyAdded,
- base::Unretained(this), key_system));
- return;
- }
- DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
- if (key_added_)
- return;
- key_added_ = true;
- key_system_ = key_system;
- if (!CanNotifyDemuxerReady())
- return;
- if (HasEncryptedStream())
- NotifyDemuxerReady();
-}
-#endif // defined(GOOGLE_TV)
-
bool MediaSourceDelegate::CanNotifyDemuxerReady() {
DCHECK(media_loop_->BelongsToCurrentThread());
- // This can happen when a key is added before the demuxer is initialized.
- // See NotifyKeyAdded().
- // TODO(kjyoun): Remove NotifyDemxuerReady() call from NotifyKeyAdded() so
- // that we can remove all is_demuxer_ready_/key_added_/key_system_ madness.
- // See http://crbug.com/255781
- if (!is_demuxer_ready_)
- return false;
-#if defined(GOOGLE_TV)
- if (HasEncryptedStream() && !key_added_)
- return false;
-#endif // defined(GOOGLE_TV)
- return true;
+ return is_demuxer_ready_;
}
void MediaSourceDelegate::NotifyDemuxerReady() {
@@ -741,10 +679,6 @@ void MediaSourceDelegate::NotifyDemuxerReady() {
}
configs->duration_ms = GetDurationMs();
-#if defined(GOOGLE_TV)
- configs->key_system = HasEncryptedStream() ? key_system_ : "";
-#endif
-
if (demuxer_client_)
demuxer_client_->DemuxerReady(demuxer_client_id_, *configs);
}
diff --git a/content/renderer/media/android/media_source_delegate.h b/content/renderer/media/android/media_source_delegate.h
index e627a1f..c872efb 100644
--- a/content/renderer/media/android/media_source_delegate.h
+++ b/content/renderer/media/android/media_source_delegate.h
@@ -67,12 +67,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
const UpdateNetworkStateCB& update_network_state_cb,
const DurationChangeCB& duration_change_cb);
-#if defined(GOOGLE_TV)
- void InitializeMediaStream(
- media::Demuxer* demuxer,
- const UpdateNetworkStateCB& update_network_state_cb);
-#endif
-
const blink::WebTimeRanges& Buffered();
size_t DecodedFrameCount() const;
size_t DroppedFrameCount() const;
@@ -100,8 +94,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
// cached data since last keyframe. See http://crbug.com/304234.
void Seek(const base::TimeDelta& seek_time, bool is_browser_seek);
- void NotifyKeyAdded(const std::string& key_system);
-
// Called when DemuxerStreamPlayer needs to read data from ChunkDemuxer.
void OnReadFromDemuxer(media::DemuxerStream::Type type);
@@ -211,7 +203,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
DurationChangeCB duration_change_cb_;
scoped_ptr<media::ChunkDemuxer> chunk_demuxer_;
- media::Demuxer* demuxer_;
bool is_demuxer_ready_;
media::SetDecryptorReadyCB set_decryptor_ready_cb_;
@@ -230,10 +221,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
MediaSourceOpenedCB media_source_opened_cb_;
media::Demuxer::NeedKeyCB need_key_cb_;
- // The currently selected key system. Empty string means that no key system
- // has been selected.
- blink::WebString current_key_system_;
-
// Temporary for EME v0.1. In the future the init data type should be passed
// through GenerateKeyRequest() directly from WebKit.
std::string init_data_type_;
@@ -251,11 +238,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
base::TimeDelta browser_seek_time_;
bool expecting_regular_seek_;
-#if defined(GOOGLE_TV)
- bool key_added_;
- std::string key_system_;
-#endif // defined(GOOGLE_TV)
-
size_t access_unit_size_;
DISALLOW_COPY_AND_ASSIGN(MediaSourceDelegate);
diff --git a/content/renderer/media/android/renderer_media_player_manager.h b/content/renderer/media/android/renderer_media_player_manager.h
index 371ab40..b68f394 100644
--- a/content/renderer/media/android/renderer_media_player_manager.h
+++ b/content/renderer/media/android/renderer_media_player_manager.h
@@ -17,10 +17,6 @@
#include "media/base/media_keys.h"
#include "url/gurl.h"
-#if defined(GOOGLE_TV)
-#include "ui/gfx/rect_f.h"
-#endif
-
namespace blink {
class WebFrame;
}
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc
index 6cef1cc..33af4ca 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -41,11 +41,6 @@
#include "ui/gfx/image/image.h"
#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
-#if defined(GOOGLE_TV)
-#include "content/renderer/media/media_stream_audio_renderer.h"
-#include "content/renderer/media/media_stream_client.h"
-#endif
-
static const uint32 kGLTextureExternalOES = 0x8D65;
using blink::WebMediaPlayer;
@@ -111,11 +106,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
stream_texture_factory_(factory),
needs_external_surface_(false),
video_frame_provider_client_(NULL),
-#if defined(GOOGLE_TV)
- external_surface_threshold_(-1),
- demuxer_(NULL),
- media_stream_client_(NULL),
-#endif // defined(GOOGLE_TV)
pending_playback_(false),
player_type_(MEDIA_PLAYER_TYPE_URL),
current_time_(0),
@@ -131,18 +121,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
player_id_ = manager_->RegisterMediaPlayer(this);
-#if defined(GOOGLE_TV)
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kUseExternalVideoSurfaceThresholdInPixels)) {
- if (!base::StringToInt(
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kUseExternalVideoSurfaceThresholdInPixels),
- &external_surface_threshold_)) {
- external_surface_threshold_ = -1;
- }
- }
-#endif // defined(GOOGLE_TV)
-
#if defined(VIDEO_HOLE)
// Defer stream texture creation until we are sure it's necessary.
needs_establish_peer_ = false;
@@ -192,24 +170,6 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() {
if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE && delegate_)
delegate_->PlayerGone(this);
-
-#if defined(GOOGLE_TV)
- if (audio_renderer_) {
- if (audio_renderer_->IsLocalRenderer()) {
- audio_renderer_->Stop();
- } else if (!paused()) {
- // The |audio_renderer_| can be shared by multiple remote streams, and
- // it will be stopped when WebRtcAudioDeviceImpl goes away. So we simply
- // pause the |audio_renderer_| here to avoid re-creating the
- // |audio_renderer_|.
- audio_renderer_->Pause();
- }
- }
- if (demuxer_ && !destroy_demuxer_cb_.is_null()) {
- media_source_delegate_.reset();
- destroy_demuxer_cb_.Run();
- }
-#endif
}
void WebMediaPlayerAndroid::load(LoadType load_type,
@@ -225,14 +185,9 @@ void WebMediaPlayerAndroid::load(LoadType load_type,
break;
case LoadTypeMediaStream:
-#if defined(GOOGLE_TV)
- player_type_ = MEDIA_PLAYER_TYPE_MEDIA_STREAM;
- break;
-#else
CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on "
"this platform";
return;
-#endif
}
has_media_metadata_ = false;
@@ -267,19 +222,6 @@ void WebMediaPlayerAndroid::load(LoadType load_type,
base::Bind(&WebMediaPlayerAndroid::OnDurationChanged,
weak_factory_.GetWeakPtr()));
}
-#if defined(GOOGLE_TV)
- // TODO(xhwang): Pass set_decryptor_ready_cb in InitializeMediaStream() to
- // enable ClearKey support for Google TV.
- if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_STREAM) {
- media_source_delegate_->InitializeMediaStream(
- demuxer_,
- base::Bind(&WebMediaPlayerAndroid::UpdateNetworkState,
- weak_factory_.GetWeakPtr()));
- audio_renderer_ = media_stream_client_->GetAudioRenderer(url);
- if (audio_renderer_)
- audio_renderer_->Start();
- }
-#endif
} else {
info_loader_.reset(
new MediaInfoLoader(
@@ -332,10 +274,6 @@ void WebMediaPlayerAndroid::play() {
manager_->RequestExternalSurface(player_id_, last_computed_rect_);
}
#endif // defined(VIDEO_HOLE)
-#if defined(GOOGLE_TV)
- if (audio_renderer_ && paused())
- audio_renderer_->Play();
-#endif // defined(GOOGLE_TV)
TryCreateStreamTextureProxyIfNeeded();
if (hasVideo() && needs_establish_peer_)
@@ -731,14 +669,9 @@ void WebMediaPlayerAndroid::OnVideoSizeChanged(int width, int height) {
return;
#if defined(VIDEO_HOLE)
- bool has_surface_size_restriction = false;
-#if defined(GOOGLE_TV)
- has_surface_size_restriction = external_surface_threshold_ >= 0 &&
- external_surface_threshold_ <= width * height;
-#endif // defined(GOOGLE_TV)
// Use H/W surface for MSE as the content might be protected.
// TODO(qinmin): Change this so that only EME needs the H/W surface
- if (media_source_delegate_ || has_surface_size_restriction) {
+ if (media_source_delegate_) {
needs_external_surface_ = true;
if (!paused() && !manager_->IsInFullscreen(frame_))
manager_->RequestExternalSurface(player_id_, last_computed_rect_);
@@ -920,10 +853,6 @@ void WebMediaPlayerAndroid::Detach() {
}
void WebMediaPlayerAndroid::Pause(bool is_media_related_action) {
-#if defined(GOOGLE_TV)
- if (audio_renderer_ && !paused())
- audio_renderer_->Pause();
-#endif
manager_->Pause(player_id_, is_media_related_action);
UpdatePlayingState(false);
}
@@ -1366,11 +1295,6 @@ WebMediaPlayerAndroid::CancelKeyRequestInternal(
void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) {
EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1);
-#if defined(GOOGLE_TV)
- if (media_source_delegate_)
- media_source_delegate_->NotifyKeyAdded(current_key_system_.utf8());
-#endif // defined(GOOGLE_TV)
-
client_->keyAdded(current_key_system_, WebString::fromUTF8(session_id));
}
@@ -1429,19 +1353,6 @@ void WebMediaPlayerAndroid::OnNeedKey(const std::string& type,
init_data.size());
}
-#if defined(GOOGLE_TV)
-bool WebMediaPlayerAndroid::InjectMediaStream(
- MediaStreamClient* media_stream_client,
- media::Demuxer* demuxer,
- const base::Closure& destroy_demuxer_cb) {
- DCHECK(!demuxer);
- media_stream_client_ = media_stream_client;
- demuxer_ = demuxer;
- destroy_demuxer_cb_ = destroy_demuxer_cb;
- return true;
-}
-#endif
-
void WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture(uint32 sync_point) {
DCHECK(main_thread_checker_.CalledOnValidThread());
DCHECK(remote_playback_texture_id_);
diff --git a/content/renderer/media/android/webmediaplayer_android.h b/content/renderer/media/android/webmediaplayer_android.h
index d2e9e51..3cdc6ac 100644
--- a/content/renderer/media/android/webmediaplayer_android.h
+++ b/content/renderer/media/android/webmediaplayer_android.h
@@ -32,7 +32,6 @@
#include "ui/gfx/rect_f.h"
namespace media {
-class Demuxer;
class MediaLog;
}
@@ -48,11 +47,6 @@ namespace content {
class WebMediaPlayerDelegate;
class RendererMediaPlayerManager;
-#if defined(GOOGLE_TV)
-class MediaStreamAudioRenderer;
-class MediaStreamClient;
-#endif
-
// This class implements blink::WebMediaPlayer by keeping the android
// media player in the browser process. It listens to all the status changes
// sent from the browser process and sends playback controls to the media
@@ -225,12 +219,6 @@ class WebMediaPlayerAndroid
void OnNeedKey(const std::string& type,
const std::vector<uint8>& init_data);
-#if defined(GOOGLE_TV)
- bool InjectMediaStream(MediaStreamClient* media_stream_client,
- media::Demuxer* demuxer,
- const base::Closure& destroy_demuxer_cb);
-#endif
-
// Can be called on any thread.
static void OnReleaseRemotePlaybackTexture(
const scoped_refptr<base::MessageLoopProxy>& main_loop,
@@ -402,18 +390,6 @@ class WebMediaPlayerAndroid
gfx::RectF last_computed_rect_;
#endif // defined(VIDEO_HOLE)
-#if defined(GOOGLE_TV)
- // Pixel threshold for external surface usage. Negative value means that the
- // threshold is not defined, so that external surface is never used.
- int external_surface_threshold_;
-
- // Media Stream related fields.
- media::Demuxer* demuxer_;
- base::Closure destroy_demuxer_cb_;
- scoped_refptr<MediaStreamAudioRenderer> audio_renderer_;
- MediaStreamClient* media_stream_client_;
-#endif
-
scoped_ptr<MediaSourceDelegate,
MediaSourceDelegate::Destroyer> media_source_delegate_;
diff --git a/content/renderer/media/crypto/key_systems.cc b/content/renderer/media/crypto/key_systems.cc
index 4102533..ac3f4aa 100644
--- a/content/renderer/media/crypto/key_systems.cc
+++ b/content/renderer/media/crypto/key_systems.cc
@@ -36,7 +36,6 @@ const char kMp4a[] = "mp4a";
const char kMp4aAvc1Avc3[] = "mp4a,avc1,avc3";
#endif // defined(USE_PROPRIETARY_CODECS)
-#if !defined(GOOGLE_TV)
inline std::string KeySystemNameForUMAInternal(
const blink::WebString& key_system) {
if (key_system == kClearKeyKeySystem)
@@ -47,10 +46,6 @@ inline std::string KeySystemNameForUMAInternal(
#endif // WIDEVINE_CDM_AVAILABLE
return "Unknown";
}
-#else
-// Declares the function, which is defined in another file.
-std::string KeySystemNameForUMAInternal(const blink::WebString& key_system);
-#endif // !defined(GOOGLE_TV)
// Convert a WebString to ASCII, falling back on an empty string in the case
// of a non-ASCII string.
diff --git a/content/renderer/media/crypto/ppapi_decryptor.cc b/content/renderer/media/crypto/ppapi_decryptor.cc
index b60afaa..cf7808c 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.cc
+++ b/content/renderer/media/crypto/ppapi_decryptor.cc
@@ -143,18 +143,7 @@ void PpapiDecryptor::ReleaseSession(uint32 session_id) {
}
media::Decryptor* PpapiDecryptor::GetDecryptor() {
-#if defined(GOOGLE_TV)
- // Google TV only uses PpapiDecrytor as a MediaKeys and does not need the
- // Decryptor interface of the PpapiDecryptor.
- // Details: If we don't do this GTV will be broken. The reason is that during
- // initialization, MediaSourceDelegate tries to use DecryptingDemuxerStream
- // to decrypt the stream in the renderer process (for ClearKey support).
- // However, for GTV, PpapiDecryptor cannot do decryption at all. By returning
- // NULL, DDS init will fail and we fallback to what GTV used to do.
- return NULL;
-#else
return this;
-#endif // defined(GOOGLE_TV)
}
void PpapiDecryptor::RegisterNewKeyCB(StreamType stream_type,
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/media_stream_dependency_factory.cc
index a55ed36..ab436ee 100644
--- a/content/renderer/media/media_stream_dependency_factory.cc
+++ b/content/renderer/media/media_stream_dependency_factory.cc
@@ -46,10 +46,6 @@
#include "net/socket/nss_ssl_util.h"
#endif
-#if defined(GOOGLE_TV)
-#include "content/renderer/media/rtc_video_decoder_factory_tv.h"
-#endif
-
#if defined(OS_ANDROID)
#include "media/base/android/media_codec_bridge.h"
#endif
@@ -202,9 +198,6 @@ class SourceStateObserver : public webrtc::ObserverInterface,
MediaStreamDependencyFactory::MediaStreamDependencyFactory(
P2PSocketDispatcher* p2p_socket_dispatcher)
: network_manager_(NULL),
-#if defined(GOOGLE_TV)
- decoder_factory_tv_(NULL),
-#endif
p2p_socket_dispatcher_(p2p_socket_dispatcher),
signaling_thread_(NULL),
worker_thread_(NULL),
@@ -585,16 +578,10 @@ bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
scoped_refptr<RendererGpuVideoAcceleratorFactories> gpu_factories =
RenderThreadImpl::current()->GetGpuFactories();
-#if !defined(GOOGLE_TV)
if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) {
if (gpu_factories)
decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories));
}
-#else
- // PeerConnectionFactory will hold the ownership of this
- // VideoDecoderFactory.
- decoder_factory.reset(decoder_factory_tv_ = new RTCVideoDecoderFactoryTv());
-#endif
if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) {
if (gpu_factories)
diff --git a/content/renderer/media/media_stream_dependency_factory.h b/content/renderer/media/media_stream_dependency_factory.h
index 22bbc54..13bfa3f 100644
--- a/content/renderer/media/media_stream_dependency_factory.h
+++ b/content/renderer/media/media_stream_dependency_factory.h
@@ -53,10 +53,6 @@ class WebRtcLoggingHandlerImpl;
class WebRtcLoggingMessageFilter;
struct StreamDeviceInfo;
-#if defined(GOOGLE_TV)
-class RTCVideoDecoderFactoryTv;
-#endif
-
// Object factory for RTC MediaStreams and RTC PeerConnections.
class CONTENT_EXPORT MediaStreamDependencyFactory
: NON_EXPORTED_BASE(public base::NonThreadSafe),
@@ -151,10 +147,6 @@ class CONTENT_EXPORT MediaStreamDependencyFactory
WebRtcAudioDeviceImpl* GetWebRtcAudioDevice();
-#if defined(GOOGLE_TV)
- RTCVideoDecoderFactoryTv* decoder_factory_tv() { return decoder_factory_tv_; }
-#endif
-
static void AddNativeTrackToBlinkTrack(
webrtc::MediaStreamTrackInterface* native_track,
const blink::WebMediaStreamTrack& webkit_track,
@@ -255,12 +247,6 @@ class CONTENT_EXPORT MediaStreamDependencyFactory
scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_;
-#if defined(GOOGLE_TV)
- // |pc_factory_| will hold the ownership of this object, and |pc_factory_|
- // outlives this object. Thus weak pointer is sufficient.
- RTCVideoDecoderFactoryTv* decoder_factory_tv_;
-#endif
-
scoped_refptr<P2PSocketDispatcher> p2p_socket_dispatcher_;
scoped_refptr<WebRtcAudioDeviceImpl> audio_device_;
diff --git a/content/renderer/media/rtc_video_decoder_bridge_tv.cc b/content/renderer/media/rtc_video_decoder_bridge_tv.cc
deleted file mode 100644
index 68a798a..0000000
--- a/content/renderer/media/rtc_video_decoder_bridge_tv.cc
+++ /dev/null
@@ -1,113 +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 "content/renderer/media/rtc_video_decoder_bridge_tv.h"
-
-#include <queue>
-
-#include "base/bind.h"
-#include "base/callback_helpers.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/singleton.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/time/time.h"
-#include "content/renderer/media/rtc_video_decoder_factory_tv.h"
-#include "media/base/bind_to_current_loop.h"
-#include "media/base/decoder_buffer.h"
-#include "third_party/libjingle/source/talk/base/ratetracker.h"
-
-namespace content {
-
-RTCVideoDecoderBridgeTv::RTCVideoDecoderBridgeTv(
- RTCVideoDecoderFactoryTv* factory)
- : factory_(factory),
- is_initialized_(false),
- first_frame_(true) {}
-
-RTCVideoDecoderBridgeTv::~RTCVideoDecoderBridgeTv() {}
-
-int32_t RTCVideoDecoderBridgeTv::InitDecode(
- const webrtc::VideoCodec* codec_settings,
- int32_t number_of_cores) {
- // We don't support non-VP8 codec, feedback mode, nor double-initialization
- if (codec_settings->codecType != webrtc::kVideoCodecVP8 ||
- codec_settings->codecSpecific.VP8.feedbackModeOn || is_initialized_)
- return WEBRTC_VIDEO_CODEC_ERROR;
- size_ = gfx::Size(codec_settings->width, codec_settings->height);
-
- is_initialized_ = true;
- first_frame_ = true;
- factory_->InitializeStream(size_);
-
- return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int32_t RTCVideoDecoderBridgeTv::Decode(
- const webrtc::EncodedImage& input_image,
- bool missing_frames,
- const webrtc::RTPFragmentationHeader* fragmentation,
- const webrtc::CodecSpecificInfo* codec_specific_info,
- int64_t render_time_ms) {
- // Unlike the SW decoder in libvpx, hw decoder can not handle broken frames.
- // Here, we return an error in order to request a key frame.
- if (missing_frames || !input_image._completeFrame)
- return WEBRTC_VIDEO_CODEC_ERROR;
-
- if (!is_initialized_)
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-
- if (first_frame_) {
- // If the first frame is not a key frame, return an error to request a key
- // frame.
- if (input_image._frameType != webrtc::kKeyFrame)
- return WEBRTC_VIDEO_CODEC_ERROR;
-
- // Google TV expects timestamp from 0, so we store the initial timestamp as
- // an offset and subtract the value from every timestamps to meet the
- // expectation.
- timestamp_offset_millis_ = render_time_ms;
- }
- first_frame_ = false;
- gfx::Size new_size;
- if (input_image._frameType == webrtc::kKeyFrame &&
- input_image._encodedWidth != 0 && input_image._encodedHeight != 0) {
- // Only a key frame has a meaningful size.
- new_size.SetSize(input_image._encodedWidth, input_image._encodedHeight);
- if (size_ == new_size)
- new_size = gfx::Size();
- else
- size_ = new_size;
- }
- // |input_image_| may be destroyed after this call, so we make a copy of the
- // buffer so that we can queue the buffer asynchronously.
- scoped_refptr<media::DecoderBuffer> buffer =
- media::DecoderBuffer::CopyFrom(input_image._buffer, input_image._length);
- if (render_time_ms != -1) {
- buffer->set_timestamp(base::TimeDelta::FromMilliseconds(
- render_time_ms - timestamp_offset_millis_));
- }
-
- factory_->QueueBuffer(buffer, new_size);
-
- return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int32_t RTCVideoDecoderBridgeTv::RegisterDecodeCompleteCallback(
- webrtc::DecodedImageCallback* callback) {
- return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int32_t RTCVideoDecoderBridgeTv::Release() {
- is_initialized_ = false;
- return WEBRTC_VIDEO_CODEC_OK;
-}
-
-int32_t RTCVideoDecoderBridgeTv::Reset() {
- first_frame_ = true;
- return WEBRTC_VIDEO_CODEC_OK;
-}
-
-} // namespace content
diff --git a/content/renderer/media/rtc_video_decoder_bridge_tv.h b/content/renderer/media/rtc_video_decoder_bridge_tv.h
deleted file mode 100644
index 2ab6fde..0000000
--- a/content/renderer/media/rtc_video_decoder_bridge_tv.h
+++ /dev/null
@@ -1,55 +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.
-
-#ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_BRIDGE_TV_H_
-#define CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_BRIDGE_TV_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "content/common/content_export.h"
-#include "third_party/webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
-#include "ui/gfx/size.h"
-
-namespace content {
-
-class MediaStreamDependencyFactory;
-class RTCVideoDecoderFactoryTv;
-
-// An object shared between WebMediaPlayerAndroid and WebRTC Video Engine.
-// Note that this class provides the first remote stream.
-class CONTENT_EXPORT RTCVideoDecoderBridgeTv
- : NON_EXPORTED_BASE(public webrtc::VideoDecoder) {
- public:
- explicit RTCVideoDecoderBridgeTv(RTCVideoDecoderFactoryTv* factory);
- virtual ~RTCVideoDecoderBridgeTv();
-
- // webrtc::VideoDecoder implementation.
- virtual int32_t InitDecode(const webrtc::VideoCodec* codec_settings,
- int32_t number_of_cores) OVERRIDE;
- virtual int32_t Decode(
- const webrtc::EncodedImage& input_image,
- bool missing_frames,
- const webrtc::RTPFragmentationHeader* fragmentation,
- const webrtc::CodecSpecificInfo* codec_specific_info,
- int64_t render_time_ms) OVERRIDE;
- virtual int32_t RegisterDecodeCompleteCallback(
- webrtc::DecodedImageCallback* callback) OVERRIDE;
- virtual int32_t Release() OVERRIDE;
- virtual int32_t Reset() OVERRIDE;
-
- private:
- // The factory outlives this object, so weak pointer is fine.
- RTCVideoDecoderFactoryTv* factory_;
-
- gfx::Size size_;
- bool is_initialized_;
- bool first_frame_;
- int64_t timestamp_offset_millis_;
-
- DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderBridgeTv);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_BRIDGE_TV_H_
diff --git a/content/renderer/media/rtc_video_decoder_factory_tv.cc b/content/renderer/media/rtc_video_decoder_factory_tv.cc
deleted file mode 100644
index 5a9df70..0000000
--- a/content/renderer/media/rtc_video_decoder_factory_tv.cc
+++ /dev/null
@@ -1,246 +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 "content/renderer/media/rtc_video_decoder_factory_tv.h"
-
-#include "base/callback_helpers.h"
-#include "content/renderer/media/rtc_video_decoder_bridge_tv.h"
-#include "media/base/audio_decoder_config.h"
-#include "media/base/bind_to_current_loop.h"
-#include "media/base/decoder_buffer.h"
-#include "media/base/video_decoder_config.h"
-#include "third_party/libjingle/source/talk/base/ratetracker.h"
-
-using media::DemuxerStream;
-
-namespace content {
-
-// RTCDemuxerStream ------------------------------------------------------------
-
-class RTCDemuxerStream : public DemuxerStream {
- public:
- explicit RTCDemuxerStream(const gfx::Size& size);
- virtual ~RTCDemuxerStream();
-
- // DemuxerStream implementation.
- virtual void Read(const ReadCB& read_cb) OVERRIDE;
- virtual media::AudioDecoderConfig audio_decoder_config() OVERRIDE;
- virtual media::VideoDecoderConfig video_decoder_config() OVERRIDE;
- virtual Type type() OVERRIDE;
- virtual void EnableBitstreamConverter() OVERRIDE;
-
- void QueueBuffer(scoped_refptr<media::DecoderBuffer> buffer,
- const gfx::Size& new_size);
- void Destroy();
-
- private:
- struct BufferEntry {
- BufferEntry(const scoped_refptr<media::DecoderBuffer>& decoder_buffer_param,
- const gfx::Size& new_size_param)
- : decoder_buffer(decoder_buffer_param),
- new_size(new_size_param) {}
-
- scoped_refptr<media::DecoderBuffer> decoder_buffer;
- // When |!new_size.isEmpty()|, it means that config change with new size
- // |new_size| happened.
- gfx::Size new_size;
- };
-
- void RunReadCallback_Locked();
-
- base::Lock lock_;
- bool is_destroyed_;
- std::queue<BufferEntry> buffer_queue_;
- ReadCB read_cb_;
-
- media::AudioDecoderConfig dummy_audio_decoder_config_;
- media::VideoDecoderConfig video_decoder_config_;
- talk_base::RateTracker frame_rate_tracker_;
-};
-
-RTCDemuxerStream::RTCDemuxerStream(const gfx::Size& size)
- : is_destroyed_(false),
- video_decoder_config_(media::kCodecVP8,
- media::VP8PROFILE_MAIN,
- media::VideoFrame::NATIVE_TEXTURE,
- size,
- gfx::Rect(size),
- size,
- NULL,
- 0,
- false) {}
-
-RTCDemuxerStream::~RTCDemuxerStream() { DCHECK(is_destroyed_); }
-
-media::AudioDecoderConfig RTCDemuxerStream::audio_decoder_config() {
- NOTIMPLEMENTED() << "Does not support audio.";
- return dummy_audio_decoder_config_;
-}
-
-media::VideoDecoderConfig RTCDemuxerStream::video_decoder_config() {
- base::AutoLock lock(lock_);
- return video_decoder_config_;
-}
-
-DemuxerStream::Type RTCDemuxerStream::type() { return DemuxerStream::VIDEO; }
-
-void RTCDemuxerStream::EnableBitstreamConverter() { NOTREACHED(); }
-
-void RTCDemuxerStream::QueueBuffer(scoped_refptr<media::DecoderBuffer> buffer,
- const gfx::Size& new_size) {
- base::AutoLock lock(lock_);
- if (is_destroyed_)
- return;
- buffer_queue_.push(BufferEntry(buffer, new_size));
- if (buffer)
- frame_rate_tracker_.Update(1);
- DVLOG(1) << "frame rate received : " << frame_rate_tracker_.units_second();
- RunReadCallback_Locked();
-}
-
-void RTCDemuxerStream::Read(const ReadCB& read_cb) {
- base::AutoLock lock(lock_);
- DCHECK(read_cb_.is_null());
- if (is_destroyed_) {
- base::MessageLoopProxy::current()->PostTask(FROM_HERE, base::Bind(
- read_cb, DemuxerStream::kAborted, NULL));
- return;
- }
- read_cb_ = media::BindToCurrentLoop(read_cb);
- RunReadCallback_Locked();
-}
-
-void RTCDemuxerStream::Destroy() {
- base::AutoLock lock(lock_);
- DCHECK(!is_destroyed_);
- is_destroyed_ = true;
- if (!read_cb_.is_null())
- base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kAborted, NULL);
- while (!buffer_queue_.empty())
- buffer_queue_.pop();
-}
-
-void RTCDemuxerStream::RunReadCallback_Locked() {
- if (read_cb_.is_null() || buffer_queue_.empty())
- return;
-
- BufferEntry& front = buffer_queue_.front();
- if (!front.new_size.IsEmpty()) {
- // No VideoFrame actually reaches GL renderer in Google TV case. We just
- // make coded_size == visible_rect == natural_size here.
- video_decoder_config_.Initialize(media::kCodecVP8,
- media::VP8PROFILE_MAIN,
- media::VideoFrame::NATIVE_TEXTURE,
- front.new_size,
- gfx::Rect(front.new_size),
- front.new_size,
- NULL,
- 0,
- false,
- false);
- base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kConfigChanged, NULL);
- front.new_size.SetSize(0, 0);
- return;
- }
- base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kOk, front.decoder_buffer);
- buffer_queue_.pop();
-}
-
-// RTCVideoDecoderFactoryTv ----------------------------------------------------
-
-RTCVideoDecoderFactoryTv::RTCVideoDecoderFactoryTv() : is_acquired_(false) {}
-RTCVideoDecoderFactoryTv::~RTCVideoDecoderFactoryTv() {}
-
-webrtc::VideoDecoder* RTCVideoDecoderFactoryTv::CreateVideoDecoder(
- webrtc::VideoCodecType type) {
- base::AutoLock lock(lock_);
- // One decoder at a time!
- if (decoder_)
- return NULL;
- // Only VP8 is supported --- returning NULL will make WebRTC fall back to SW
- // decoder.
- if (type != webrtc::kVideoCodecVP8)
- return NULL;
- decoder_.reset(new RTCVideoDecoderBridgeTv(this));
- return decoder_.get();
-}
-
-void RTCVideoDecoderFactoryTv::DestroyVideoDecoder(
- webrtc::VideoDecoder* decoder) {
- base::AutoLock lock(lock_);
- DCHECK_EQ(decoder_.get(), decoder);
- decoder_.reset();
-}
-
-bool RTCVideoDecoderFactoryTv::AcquireDemuxer() {
- base::AutoLock lock(lock_);
- if (is_acquired_)
- return false;
- is_acquired_ = true;
- return true;
-}
-
-void RTCVideoDecoderFactoryTv::ReleaseDemuxer() {
- base::AutoLock lock(lock_);
- DCHECK(is_acquired_);
- is_acquired_ = false;
- // Clean up internal state as a demuxer.
- init_cb_.Reset();
- if (stream_) {
- stream_->Destroy();
- stream_.reset();
- }
-}
-
-void RTCVideoDecoderFactoryTv::Initialize(media::DemuxerHost* /*host*/,
- const media::PipelineStatusCB& cb,
- bool /*enable_text_tracks*/) {
- base::AutoLock lock(lock_);
- init_cb_ = media::BindToCurrentLoop(cb);
- if (stream_)
- base::ResetAndReturn(&init_cb_).Run(media::PIPELINE_OK);
-}
-
-void RTCVideoDecoderFactoryTv::Seek(base::TimeDelta time,
- const media::PipelineStatusCB& status_cb) {
- DCHECK(!status_cb.is_null());
- status_cb.Run(media::PIPELINE_OK);
-}
-
-void RTCVideoDecoderFactoryTv::Stop(const base::Closure& callback) {
- DCHECK(!callback.is_null());
- callback.Run();
-}
-
-void RTCVideoDecoderFactoryTv::OnAudioRendererDisabled() {
-}
-
-DemuxerStream* RTCVideoDecoderFactoryTv::GetStream(DemuxerStream::Type type) {
- base::AutoLock lock(lock_);
- if (type == DemuxerStream::VIDEO)
- return stream_.get();
- return NULL;
-}
-
-base::TimeDelta RTCVideoDecoderFactoryTv::GetStartTime() const {
- return base::TimeDelta();
-}
-
-void RTCVideoDecoderFactoryTv::InitializeStream(const gfx::Size& size) {
- base::AutoLock lock(lock_);
- DCHECK(!stream_);
- stream_.reset(new RTCDemuxerStream(size));
- if (!init_cb_.is_null())
- base::ResetAndReturn(&init_cb_).Run(media::PIPELINE_OK);
-}
-
-void RTCVideoDecoderFactoryTv::QueueBuffer(
- scoped_refptr<media::DecoderBuffer> buffer,
- const gfx::Size& new_size) {
- base::AutoLock lock(lock_);
- DCHECK(stream_);
- stream_->QueueBuffer(buffer, new_size);
-}
-
-} // namespace content
diff --git a/content/renderer/media/rtc_video_decoder_factory_tv.h b/content/renderer/media/rtc_video_decoder_factory_tv.h
deleted file mode 100644
index cd51cdc..0000000
--- a/content/renderer/media/rtc_video_decoder_factory_tv.h
+++ /dev/null
@@ -1,80 +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.
-
-#ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_FACTORY_TV_H_
-#define CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_FACTORY_TV_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/message_loop/message_loop.h"
-#include "content/common/content_export.h"
-#include "media/base/demuxer.h"
-#include "third_party/libjingle/source/talk/media/webrtc/webrtcvideodecoderfactory.h"
-#include "ui/gfx/size.h"
-
-namespace webrtc {
-class VideoDecoder;
-}
-
-namespace content {
-
-class MediaStreamDependencyFactory;
-class RTCDemuxerStream;
-class RTCVideoDecoderBridgeTv;
-
-// A factory object generating |RTCVideoDecoderBridgeTv| objects. This object
-// also functions as a |media::Demuxer| object to receive encoded streams from
-// the |RTCVideoDecoderBridgeTv| object (which inherits from
-// |webrtc::VideoDecoder|).
-class CONTENT_EXPORT RTCVideoDecoderFactoryTv
- : NON_EXPORTED_BASE(public cricket::WebRtcVideoDecoderFactory),
- public media::Demuxer {
- public:
- RTCVideoDecoderFactoryTv();
- virtual ~RTCVideoDecoderFactoryTv();
-
- // cricket::WebRtcVideoDecoderFactory implementation.
- virtual webrtc::VideoDecoder* CreateVideoDecoder(
- webrtc::VideoCodecType type) OVERRIDE;
- virtual void DestroyVideoDecoder(webrtc::VideoDecoder* decoder) OVERRIDE;
-
- // Acquires and releases the demuxer functionality of this object. Only one
- // client object can access demuxer functionality at a time. No calls to
- // |media::Demuxer| implementations should be made without acquiring it first.
- bool AcquireDemuxer();
- void ReleaseDemuxer();
-
- // media::Demuxer implementation.
- virtual void Initialize(media::DemuxerHost* host,
- const media::PipelineStatusCB& cb,
- bool enable_text_tracks) OVERRIDE;
- virtual void Seek(base::TimeDelta time,
- const media::PipelineStatusCB& status_cb) OVERRIDE;
- virtual void Stop(const base::Closure& callback) OVERRIDE;
- virtual void OnAudioRendererDisabled() OVERRIDE;
- virtual media::DemuxerStream* GetStream(
- media::DemuxerStream::Type type) OVERRIDE;
- virtual base::TimeDelta GetStartTime() const OVERRIDE;
-
- // For RTCVideoDecoderBridgeTv to talk to RTCDemuxerStream.
- void InitializeStream(const gfx::Size& size);
- void QueueBuffer(scoped_refptr<media::DecoderBuffer> buffer,
- const gfx::Size& size);
-
- private:
- // All private variables are lock protected.
- base::Lock lock_;
- scoped_ptr<RTCVideoDecoderBridgeTv> decoder_;
-
- media::PipelineStatusCB init_cb_;
- scoped_ptr<RTCDemuxerStream> stream_;
-
- bool is_acquired_;
-
- DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderFactoryTv);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_FACTORY_TV_H_
diff --git a/content/renderer/media/rtc_video_decoder_factory_tv_unittest.cc b/content/renderer/media/rtc_video_decoder_factory_tv_unittest.cc
deleted file mode 100644
index 31b3143..0000000
--- a/content/renderer/media/rtc_video_decoder_factory_tv_unittest.cc
+++ /dev/null
@@ -1,348 +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 "base/synchronization/waitable_event.h"
-#include "base/task_runner_util.h"
-#include "base/threading/thread.h"
-#include "content/renderer/media/rtc_video_decoder_factory_tv.h"
-#include "media/base/decoder_buffer.h"
-#include "media/base/video_decoder_config.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/webrtc/modules/video_coding/codecs/interface/mock/mock_video_codec_interface.h"
-#include "ui/gfx/rect.h"
-
-using ::testing::_;
-using ::testing::Return;
-
-namespace content {
-
-class RTCVideoDecoderFactoryTvTest : public ::testing::Test {
- public:
- RTCVideoDecoderFactoryTvTest()
- : factory_(new RTCVideoDecoderFactoryTv),
- decoder_(NULL),
- is_demuxer_acquired_(false),
- video_stream_(NULL),
- size_(1280, 720),
- input_image_(&data_, sizeof(data_), sizeof(data_)),
- data_('a'),
- read_event_(false, false),
- decoder_thread_("Test decoder thread"),
- decoder_thread_event_(false, false) {
- memset(&codec_, 0, sizeof(codec_));
- message_loop_proxy_ = base::MessageLoopProxy::current();
- input_image_._frameType = webrtc::kKeyFrame;
- input_image_._encodedWidth = size_.width();
- input_image_._encodedHeight = size_.height();
- input_image_._completeFrame = true;
- decoder_thread_.Start();
- }
-
- virtual ~RTCVideoDecoderFactoryTvTest() {
- if (is_demuxer_acquired_) {
- factory_->ReleaseDemuxer();
- is_demuxer_acquired_ = false;
- }
- if (decoder_) {
- factory_->DestroyVideoDecoder(decoder_);
- decoder_ = NULL;
- }
-
- decoder_thread_.Stop();
- }
-
- void ReadCallback(media::DemuxerStream::Status status,
- const scoped_refptr<media::DecoderBuffer>& decoder_buffer) {
- switch (status) {
- case media::DemuxerStream::kOk:
- EXPECT_TRUE(decoder_buffer);
- break;
- case media::DemuxerStream::kConfigChanged:
- case media::DemuxerStream::kAborted:
- EXPECT_FALSE(decoder_buffer);
- break;
- }
- last_decoder_buffer_ = decoder_buffer;
- read_event_.Signal();
- }
-
- void ExpectEqualsAndSignal(int32_t expected, int32_t actual) {
- EXPECT_EQ(expected, actual);
- decoder_thread_event_.Signal();
- }
-
- void ExpectNotEqualsAndSignal(int32_t unexpected, int32_t actual) {
- EXPECT_NE(unexpected, actual);
- decoder_thread_event_.Signal();
- }
-
- protected:
- base::Callback<void(int32_t)> BindExpectEquals(int32_t expected) {
- return base::Bind(&RTCVideoDecoderFactoryTvTest::ExpectEqualsAndSignal,
- base::Unretained(this),
- expected);
- }
-
- base::Callback<void(int32_t)> BindExpectNotEquals(int32_t unexpected) {
- return base::Bind(&RTCVideoDecoderFactoryTvTest::ExpectNotEqualsAndSignal,
- base::Unretained(this),
- unexpected);
- }
-
- base::Callback<int32_t(void)> BindInitDecode(const webrtc::VideoCodec* codec,
- int32_t num_cores) {
- return base::Bind(&webrtc::VideoDecoder::InitDecode,
- base::Unretained(decoder_),
- codec,
- num_cores);
- }
-
- base::Callback<int32_t(void)> BindDecode(
- const webrtc::EncodedImage& input_image,
- bool missing_frames,
- const webrtc::RTPFragmentationHeader* fragmentation,
- const webrtc::CodecSpecificInfo* info,
- int64_t render_time_ms) {
- return base::Bind(&webrtc::VideoDecoder::Decode,
- base::Unretained(decoder_),
- input_image,
- missing_frames,
- fragmentation,
- info,
- render_time_ms);
- }
-
- void CreateDecoderAndAcquireDemuxer() {
- decoder_ = factory_->CreateVideoDecoder(webrtc::kVideoCodecVP8);
- ASSERT_TRUE(decoder_);
- ASSERT_TRUE(factory_->AcquireDemuxer());
- is_demuxer_acquired_ = true;
- }
-
- void InitDecode() {
- codec_.codecType = webrtc::kVideoCodecVP8;
- codec_.width = size_.width();
- codec_.height = size_.height();
- base::PostTaskAndReplyWithResult(decoder_thread_.message_loop_proxy(),
- FROM_HERE,
- BindInitDecode(&codec_, 1),
- BindExpectEquals(WEBRTC_VIDEO_CODEC_OK));
- decoder_thread_event_.Wait();
- base::PostTaskAndReplyWithResult(
- decoder_thread_.message_loop_proxy(),
- FROM_HERE,
- base::Bind(&webrtc::VideoDecoder::RegisterDecodeCompleteCallback,
- base::Unretained(decoder_),
- &decode_complete_callback_),
- BindExpectEquals(WEBRTC_VIDEO_CODEC_OK));
- decoder_thread_event_.Wait();
- }
-
- void GetVideoStream() {
- video_stream_ = factory_->GetStream(media::DemuxerStream::VIDEO);
- ASSERT_TRUE(video_stream_);
- EXPECT_EQ(media::kCodecVP8, video_stream_->video_decoder_config().codec());
- EXPECT_EQ(size_, video_stream_->video_decoder_config().coded_size());
- EXPECT_EQ(gfx::Rect(size_),
- video_stream_->video_decoder_config().visible_rect());
- EXPECT_EQ(size_, video_stream_->video_decoder_config().natural_size());
- }
-
- void PostDecodeAndWait(int32_t expected,
- const webrtc::EncodedImage& input_image,
- bool missing_frames,
- const webrtc::RTPFragmentationHeader* fragmentation,
- const webrtc::CodecSpecificInfo* info,
- int64_t render_time_ms) {
- base::PostTaskAndReplyWithResult(
- decoder_thread_.message_loop_proxy(),
- FROM_HERE,
- BindDecode(
- input_image, missing_frames, fragmentation, info, render_time_ms),
- BindExpectEquals(expected));
- decoder_thread_event_.Wait();
- }
-
- RTCVideoDecoderFactoryTv* factory_;
- webrtc::VideoDecoder* decoder_;
- bool is_demuxer_acquired_;
- base::MessageLoopProxy* message_loop_proxy_;
- media::DemuxerStream* video_stream_;
- webrtc::VideoCodec codec_;
- gfx::Size size_;
- webrtc::EncodedImage input_image_;
- unsigned char data_;
- webrtc::MockDecodedImageCallback decode_complete_callback_;
- base::WaitableEvent read_event_;
- base::Thread decoder_thread_;
- base::WaitableEvent decoder_thread_event_;
- scoped_refptr<media::DecoderBuffer> last_decoder_buffer_;
-};
-
-TEST_F(RTCVideoDecoderFactoryTvTest, CreateAndDestroyDecoder) {
- // Only VP8 decoder is supported.
- ASSERT_FALSE(factory_->CreateVideoDecoder(webrtc::kVideoCodecI420));
- decoder_ = factory_->CreateVideoDecoder(webrtc::kVideoCodecVP8);
- ASSERT_TRUE(decoder_);
- // Only one decoder at a time will be created.
- ASSERT_FALSE(factory_->CreateVideoDecoder(webrtc::kVideoCodecVP8));
- factory_->DestroyVideoDecoder(decoder_);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, AcquireDemuxerAfterCreateDecoder) {
- decoder_ = factory_->CreateVideoDecoder(webrtc::kVideoCodecVP8);
- ASSERT_TRUE(decoder_);
- ASSERT_TRUE(factory_->AcquireDemuxer());
- is_demuxer_acquired_ = true;
- // Demuxer can be acquired only once.
- ASSERT_FALSE(factory_->AcquireDemuxer());
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, AcquireDemuxerBeforeCreateDecoder) {
- ASSERT_TRUE(factory_->AcquireDemuxer());
- is_demuxer_acquired_ = true;
- decoder_ = factory_->CreateVideoDecoder(webrtc::kVideoCodecVP8);
- ASSERT_TRUE(decoder_);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, InitDecodeReturnsErrorOnNonVP8Codec) {
- CreateDecoderAndAcquireDemuxer();
- codec_.codecType = webrtc::kVideoCodecI420;
- base::PostTaskAndReplyWithResult(decoder_thread_.message_loop_proxy(),
- FROM_HERE,
- BindInitDecode(&codec_, 1),
- BindExpectNotEquals(WEBRTC_VIDEO_CODEC_OK));
- decoder_thread_event_.Wait();
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, InitDecodeReturnsErrorOnFeedbackMode) {
- CreateDecoderAndAcquireDemuxer();
- codec_.codecType = webrtc::kVideoCodecVP8;
- codec_.codecSpecific.VP8.feedbackModeOn = true;
- base::PostTaskAndReplyWithResult(decoder_thread_.message_loop_proxy(),
- FROM_HERE,
- BindInitDecode(&codec_, 1),
- BindExpectNotEquals(WEBRTC_VIDEO_CODEC_OK));
- decoder_thread_event_.Wait();
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodeReturnsErrorBeforeInitDecode) {
- CreateDecoderAndAcquireDemuxer();
- PostDecodeAndWait(
- WEBRTC_VIDEO_CODEC_UNINITIALIZED, input_image_, false, NULL, NULL, 0);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodeReturnsErrorOnDamagedBitstream) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- input_image_._completeFrame = false;
- PostDecodeAndWait(
- WEBRTC_VIDEO_CODEC_ERROR, input_image_, false, NULL, NULL, 0);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodeReturnsErrorOnMissingFrames) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- PostDecodeAndWait(
- WEBRTC_VIDEO_CODEC_ERROR, input_image_, true, NULL, NULL, 0);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, GetNonVideoStreamFails) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- EXPECT_FALSE(factory_->GetStream(media::DemuxerStream::AUDIO));
- EXPECT_FALSE(factory_->GetStream(media::DemuxerStream::UNKNOWN));
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, GetVideoStreamSucceeds) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- GetVideoStream();
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodeReturnsErrorOnNonKeyFrameAtFirst) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- GetVideoStream();
- input_image_._frameType = webrtc::kDeltaFrame;
- PostDecodeAndWait(
- WEBRTC_VIDEO_CODEC_ERROR, input_image_, false, NULL, NULL, 0);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodeUpdatesVideoSizeOnKeyFrame) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- GetVideoStream();
- gfx::Size new_size(320, 240);
- input_image_._encodedWidth = new_size.width();
- input_image_._encodedHeight = new_size.height();
- PostDecodeAndWait(WEBRTC_VIDEO_CODEC_OK, input_image_, false, NULL, NULL, 0);
- EXPECT_EQ(new_size, video_stream_->video_decoder_config().coded_size());
- EXPECT_EQ(gfx::Rect(new_size),
- video_stream_->video_decoder_config().visible_rect());
- EXPECT_EQ(new_size, video_stream_->video_decoder_config().natural_size());
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodeAdjustsTimestampFromZero) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- GetVideoStream();
- PostDecodeAndWait(
- WEBRTC_VIDEO_CODEC_OK, input_image_, false, NULL, NULL, 10000);
- video_stream_->Read(base::Bind(&RTCVideoDecoderFactoryTvTest::ReadCallback,
- base::Unretained(this)));
- read_event_.Wait();
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(0),
- last_decoder_buffer_->GetTimestamp());
- PostDecodeAndWait(
- WEBRTC_VIDEO_CODEC_OK, input_image_, false, NULL, NULL, 10033);
- video_stream_->Read(base::Bind(&RTCVideoDecoderFactoryTvTest::ReadCallback,
- base::Unretained(this)));
- read_event_.Wait();
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(33),
- last_decoder_buffer_->GetTimestamp());
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, DecodePassesDataCorrectly) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- GetVideoStream();
- video_stream_->Read(base::Bind(&RTCVideoDecoderFactoryTvTest::ReadCallback,
- base::Unretained(this)));
- PostDecodeAndWait(WEBRTC_VIDEO_CODEC_OK, input_image_, false, NULL, NULL, 0);
- read_event_.Wait();
- EXPECT_EQ(static_cast<int>(sizeof(data_)),
- last_decoder_buffer_->GetDataSize());
- EXPECT_EQ(data_, last_decoder_buffer_->GetData()[0]);
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, NextReadTriggersDecodeCompleteCallback) {
- EXPECT_CALL(decode_complete_callback_, Decoded(_))
- .WillOnce(Return(WEBRTC_VIDEO_CODEC_OK));
-
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- GetVideoStream();
- video_stream_->Read(base::Bind(&RTCVideoDecoderFactoryTvTest::ReadCallback,
- base::Unretained(this)));
- PostDecodeAndWait(WEBRTC_VIDEO_CODEC_OK, input_image_, false, NULL, NULL, 0);
- read_event_.Wait();
- video_stream_->Read(base::Bind(&RTCVideoDecoderFactoryTvTest::ReadCallback,
- base::Unretained(this)));
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, ResetReturnsOk) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Reset());
-}
-
-TEST_F(RTCVideoDecoderFactoryTvTest, ReleaseReturnsOk) {
- CreateDecoderAndAcquireDemuxer();
- InitDecode();
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Release());
-}
-
-} // content
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 5485e88..bfc7e99a 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -223,11 +223,6 @@
#include "third_party/WebKit/public/web/WebHitTestResult.h"
#include "ui/gfx/rect_f.h"
-#if defined(GOOGLE_TV)
-#include "content/renderer/media/rtc_video_decoder_bridge_tv.h"
-#include "content/renderer/media/rtc_video_decoder_factory_tv.h"
-#endif
-
#elif defined(OS_WIN)
// TODO(port): these files are currently Windows only because they concern:
// * theming
@@ -5889,7 +5884,6 @@ WebMediaPlayer* RenderViewImpl::CreateWebMediaPlayerForMediaStream(
LOG(ERROR) << "Failed to initialize MediaStreamClient";
return NULL;
}
-#if !defined(GOOGLE_TV)
if (media_stream_client_->IsMediaStream(url)) {
#if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
bool found_neon =
@@ -5899,7 +5893,6 @@ WebMediaPlayer* RenderViewImpl::CreateWebMediaPlayerForMediaStream(
return new WebMediaPlayerMS(frame, client, AsWeakPtr(),
media_stream_client_, new RenderMediaLog());
}
-#endif // !defined(GOOGLE_TV)
#endif // defined(ENABLE_WEBRTC)
return NULL;
}
@@ -5997,33 +5990,14 @@ WebMediaPlayer* RenderViewImpl::CreateAndroidWebMediaPlayer(
context_provider, gpu_channel_host, routing_id_));
}
- scoped_ptr<WebMediaPlayerAndroid> web_media_player_android(
- new WebMediaPlayerAndroid(
+ return new WebMediaPlayerAndroid(
frame,
client,
AsWeakPtr(),
media_player_manager_,
stream_texture_factory.release(),
RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(),
- new RenderMediaLog()));
-#if defined(ENABLE_WEBRTC) && defined(GOOGLE_TV)
- if (media_stream_client_ && media_stream_client_->IsMediaStream(url)) {
- RTCVideoDecoderFactoryTv* factory = RenderThreadImpl::current()
- ->GetMediaStreamDependencyFactory()->decoder_factory_tv();
- // |media_stream_client| and |factory| outlives |web_media_player_android|.
- if (!factory->AcquireDemuxer() ||
- !web_media_player_android->InjectMediaStream(
- media_stream_client_,
- factory,
- base::Bind(
- base::IgnoreResult(&RTCVideoDecoderFactoryTv::ReleaseDemuxer),
- base::Unretained(factory)))) {
- LOG(ERROR) << "Failed to inject media stream.";
- return NULL;
- }
- }
-#endif // defined(ENABLE_WEBRTC) && defined(GOOGLE_TV)
- return web_media_player_android.release();
+ new RenderMediaLog());
}
#endif // defined(OS_ANDROID)