OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/base/android/media_player_bridge.h" | 5 #include "media/base/android/media_player_bridge.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 MediaPlayerBridge::MediaPlayerBridge( | 28 MediaPlayerBridge::MediaPlayerBridge( |
29 int player_id, | 29 int player_id, |
30 const GURL& url, | 30 const GURL& url, |
31 const GURL& first_party_for_cookies, | 31 const GURL& first_party_for_cookies, |
32 const std::string& user_agent, | 32 const std::string& user_agent, |
33 bool hide_url_log, | 33 bool hide_url_log, |
34 MediaPlayerManager* manager, | 34 MediaPlayerManager* manager, |
35 const RequestMediaResourcesCB& request_media_resources_cb, | 35 const RequestMediaResourcesCB& request_media_resources_cb, |
36 const ReleaseMediaResourcesCB& release_media_resources_cb) | 36 const ReleaseMediaResourcesCB& release_media_resources_cb) |
37 : MediaPlayerAndroid(player_id, manager, request_media_resources_cb, | 37 : MediaPlayerAndroid(player_id, |
| 38 manager, |
| 39 request_media_resources_cb, |
38 release_media_resources_cb), | 40 release_media_resources_cb), |
39 prepared_(false), | 41 prepared_(false), |
40 pending_play_(false), | 42 pending_play_(false), |
41 url_(url), | 43 url_(url), |
42 first_party_for_cookies_(first_party_for_cookies), | 44 first_party_for_cookies_(first_party_for_cookies), |
43 user_agent_(user_agent), | 45 user_agent_(user_agent), |
44 hide_url_log_(hide_url_log), | 46 hide_url_log_(hide_url_log), |
45 width_(0), | 47 width_(0), |
46 height_(0), | 48 height_(0), |
47 can_pause_(true), | 49 can_pause_(true), |
48 can_seek_forward_(true), | 50 can_seek_forward_(true), |
49 can_seek_backward_(true), | 51 can_seek_backward_(true), |
50 weak_this_(this), | 52 is_surface_in_use_(false), |
51 listener_(base::MessageLoopProxy::current(), | 53 weak_factory_(this) { |
52 weak_this_.GetWeakPtr()), | 54 listener_.reset(new MediaPlayerListener(base::MessageLoopProxy::current(), |
53 is_surface_in_use_(false) { | 55 weak_factory_.GetWeakPtr())); |
54 } | 56 } |
55 | 57 |
56 MediaPlayerBridge::~MediaPlayerBridge() { | 58 MediaPlayerBridge::~MediaPlayerBridge() { |
57 if (!j_media_player_bridge_.is_null()) { | 59 if (!j_media_player_bridge_.is_null()) { |
58 JNIEnv* env = base::android::AttachCurrentThread(); | 60 JNIEnv* env = base::android::AttachCurrentThread(); |
59 CHECK(env); | 61 CHECK(env); |
60 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); | 62 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); |
61 } | 63 } |
62 Release(); | 64 Release(); |
63 } | 65 } |
64 | 66 |
65 void MediaPlayerBridge::Initialize() { | 67 void MediaPlayerBridge::Initialize() { |
66 cookies_.clear(); | 68 cookies_.clear(); |
67 if (url_.SchemeIsFile()) { | 69 if (url_.SchemeIsFile()) { |
68 ExtractMediaMetadata(url_.spec()); | 70 ExtractMediaMetadata(url_.spec()); |
69 return; | 71 return; |
70 } | 72 } |
71 | 73 |
72 media::MediaResourceGetter* resource_getter = | 74 media::MediaResourceGetter* resource_getter = |
73 manager()->GetMediaResourceGetter(); | 75 manager()->GetMediaResourceGetter(); |
74 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) { | 76 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) { |
75 resource_getter->GetPlatformPathFromURL(url_, base::Bind( | 77 resource_getter->GetPlatformPathFromURL( |
76 &MediaPlayerBridge::ExtractMediaMetadata, weak_this_.GetWeakPtr())); | 78 url_, |
| 79 base::Bind(&MediaPlayerBridge::ExtractMediaMetadata, |
| 80 weak_factory_.GetWeakPtr())); |
77 return; | 81 return; |
78 } | 82 } |
79 | 83 |
80 resource_getter->GetCookies(url_, first_party_for_cookies_, base::Bind( | 84 resource_getter->GetCookies(url_, |
81 &MediaPlayerBridge::OnCookiesRetrieved, weak_this_.GetWeakPtr())); | 85 first_party_for_cookies_, |
| 86 base::Bind(&MediaPlayerBridge::OnCookiesRetrieved, |
| 87 weak_factory_.GetWeakPtr())); |
82 } | 88 } |
83 | 89 |
84 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { | 90 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { |
85 JNIEnv* env = base::android::AttachCurrentThread(); | 91 JNIEnv* env = base::android::AttachCurrentThread(); |
86 CHECK(env); | 92 CHECK(env); |
87 | 93 |
88 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( | 94 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( |
89 env, reinterpret_cast<intptr_t>(this))); | 95 env, reinterpret_cast<intptr_t>(this))); |
90 | 96 |
91 SetMediaPlayerListener(); | 97 SetMediaPlayerListener(); |
(...skipping 11 matching lines...) Expand all Loading... |
103 GetJavaMediaPlayerBridge() { | 109 GetJavaMediaPlayerBridge() { |
104 base::android::ScopedJavaLocalRef<jobject> j_bridge( | 110 base::android::ScopedJavaLocalRef<jobject> j_bridge( |
105 j_media_player_bridge_); | 111 j_media_player_bridge_); |
106 return j_bridge; | 112 return j_bridge; |
107 } | 113 } |
108 | 114 |
109 void MediaPlayerBridge::SetMediaPlayerListener() { | 115 void MediaPlayerBridge::SetMediaPlayerListener() { |
110 jobject j_context = base::android::GetApplicationContext(); | 116 jobject j_context = base::android::GetApplicationContext(); |
111 DCHECK(j_context); | 117 DCHECK(j_context); |
112 | 118 |
113 listener_.CreateMediaPlayerListener(j_context, j_media_player_bridge_.obj()); | 119 listener_->CreateMediaPlayerListener(j_context, j_media_player_bridge_.obj()); |
114 } | 120 } |
115 | 121 |
116 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { | 122 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { |
117 duration_ = duration; | 123 duration_ = duration; |
118 } | 124 } |
119 | 125 |
120 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { | 126 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { |
121 if (j_media_player_bridge_.is_null()) { | 127 if (j_media_player_bridge_.is_null()) { |
122 if (surface.IsEmpty()) | 128 if (surface.IsEmpty()) |
123 return; | 129 return; |
124 Prepare(); | 130 Prepare(); |
125 } | 131 } |
126 | 132 |
127 JNIEnv* env = base::android::AttachCurrentThread(); | 133 JNIEnv* env = base::android::AttachCurrentThread(); |
128 CHECK(env); | 134 CHECK(env); |
129 is_surface_in_use_ = true; | 135 is_surface_in_use_ = true; |
130 Java_MediaPlayerBridge_setSurface( | 136 Java_MediaPlayerBridge_setSurface( |
131 env, j_media_player_bridge_.obj(), surface.j_surface().obj()); | 137 env, j_media_player_bridge_.obj(), surface.j_surface().obj()); |
132 } | 138 } |
133 | 139 |
134 void MediaPlayerBridge::Prepare() { | 140 void MediaPlayerBridge::Prepare() { |
135 DCHECK(j_media_player_bridge_.is_null()); | 141 DCHECK(j_media_player_bridge_.is_null()); |
136 CreateJavaMediaPlayerBridge(); | 142 CreateJavaMediaPlayerBridge(); |
137 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) { | 143 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) { |
138 manager()->GetMediaResourceGetter()->GetPlatformPathFromURL( | 144 manager()->GetMediaResourceGetter()->GetPlatformPathFromURL( |
139 url_, base::Bind(&MediaPlayerBridge::SetDataSource, | 145 url_, |
140 weak_this_.GetWeakPtr())); | 146 base::Bind(&MediaPlayerBridge::SetDataSource, |
| 147 weak_factory_.GetWeakPtr())); |
141 return; | 148 return; |
142 } | 149 } |
143 | 150 |
144 SetDataSource(url_.spec()); | 151 SetDataSource(url_.spec()); |
145 } | 152 } |
146 | 153 |
147 void MediaPlayerBridge::SetDataSource(const std::string& url) { | 154 void MediaPlayerBridge::SetDataSource(const std::string& url) { |
148 if (j_media_player_bridge_.is_null()) | 155 if (j_media_player_bridge_.is_null()) |
149 return; | 156 return; |
150 | 157 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 OnMediaError(MEDIA_ERROR_FORMAT); | 201 OnMediaError(MEDIA_ERROR_FORMAT); |
195 } | 202 } |
196 | 203 |
197 void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) { | 204 void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) { |
198 cookies_ = cookies; | 205 cookies_ = cookies; |
199 ExtractMediaMetadata(url_.spec()); | 206 ExtractMediaMetadata(url_.spec()); |
200 } | 207 } |
201 | 208 |
202 void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { | 209 void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { |
203 manager()->GetMediaResourceGetter()->ExtractMediaMetadata( | 210 manager()->GetMediaResourceGetter()->ExtractMediaMetadata( |
204 url, cookies_, user_agent_, | 211 url, |
| 212 cookies_, |
| 213 user_agent_, |
205 base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, | 214 base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, |
206 weak_this_.GetWeakPtr())); | 215 weak_factory_.GetWeakPtr())); |
207 } | 216 } |
208 | 217 |
209 void MediaPlayerBridge::OnMediaMetadataExtracted( | 218 void MediaPlayerBridge::OnMediaMetadataExtracted( |
210 base::TimeDelta duration, int width, int height, bool success) { | 219 base::TimeDelta duration, int width, int height, bool success) { |
211 if (success) { | 220 if (success) { |
212 duration_ = duration; | 221 duration_ = duration; |
213 width_ = width; | 222 width_ = width; |
214 height_ = height; | 223 height_ = height; |
215 } | 224 } |
216 manager()->OnMediaMetadataChanged( | 225 manager()->OnMediaMetadataChanged( |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 if (prepared_) | 312 if (prepared_) |
304 pending_seek_ = GetCurrentTime(); | 313 pending_seek_ = GetCurrentTime(); |
305 prepared_ = false; | 314 prepared_ = false; |
306 pending_play_ = false; | 315 pending_play_ = false; |
307 is_surface_in_use_ = false; | 316 is_surface_in_use_ = false; |
308 SetVideoSurface(gfx::ScopedJavaSurface()); | 317 SetVideoSurface(gfx::ScopedJavaSurface()); |
309 JNIEnv* env = base::android::AttachCurrentThread(); | 318 JNIEnv* env = base::android::AttachCurrentThread(); |
310 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); | 319 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); |
311 j_media_player_bridge_.Reset(); | 320 j_media_player_bridge_.Reset(); |
312 release_media_resources_cb_.Run(player_id()); | 321 release_media_resources_cb_.Run(player_id()); |
313 listener_.ReleaseMediaPlayerListenerResources(); | 322 listener_->ReleaseMediaPlayerListenerResources(); |
314 } | 323 } |
315 | 324 |
316 void MediaPlayerBridge::SetVolume(double volume) { | 325 void MediaPlayerBridge::SetVolume(double volume) { |
317 if (j_media_player_bridge_.is_null()) | 326 if (j_media_player_bridge_.is_null()) |
318 return; | 327 return; |
319 | 328 |
320 JNIEnv* env = base::android::AttachCurrentThread(); | 329 JNIEnv* env = base::android::AttachCurrentThread(); |
321 CHECK(env); | 330 CHECK(env); |
322 Java_MediaPlayerBridge_setVolume( | 331 Java_MediaPlayerBridge_setVolume( |
323 env, j_media_player_bridge_.obj(), volume); | 332 env, j_media_player_bridge_.obj(), volume); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 | 473 |
465 GURL MediaPlayerBridge::GetFirstPartyForCookies() { | 474 GURL MediaPlayerBridge::GetFirstPartyForCookies() { |
466 return first_party_for_cookies_; | 475 return first_party_for_cookies_; |
467 } | 476 } |
468 | 477 |
469 bool MediaPlayerBridge::IsSurfaceInUse() const { | 478 bool MediaPlayerBridge::IsSurfaceInUse() const { |
470 return is_surface_in_use_; | 479 return is_surface_in_use_; |
471 } | 480 } |
472 | 481 |
473 } // namespace media | 482 } // namespace media |
OLD | NEW |