Home | History | Annotate | Download | only in android
      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
      3 // found in the LICENSE file.
      4 
      5 #include "media/base/android/media_player_listener.h"
      6 
      7 #include "base/android/jni_android.h"
      8 #include "base/bind.h"
      9 #include "base/logging.h"
     10 #include "base/single_thread_task_runner.h"
     11 #include "media/base/android/media_player_bridge.h"
     12 
     13 // Auto generated jni class from MediaPlayerListener.java.
     14 // Check base/android/jni_generator/golden_sample_for_tests_jni.h for example.
     15 #include "jni/MediaPlayerListener_jni.h"
     16 
     17 using base::android::AttachCurrentThread;
     18 using base::android::CheckException;
     19 using base::android::ScopedJavaLocalRef;
     20 
     21 namespace media {
     22 
     23 MediaPlayerListener::MediaPlayerListener(
     24     const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     25     base::WeakPtr<MediaPlayerBridge> media_player)
     26     : task_runner_(task_runner),
     27       media_player_(media_player) {
     28   DCHECK(task_runner_.get());
     29   DCHECK(media_player_);
     30 }
     31 
     32 MediaPlayerListener::~MediaPlayerListener() {}
     33 
     34 void MediaPlayerListener::CreateMediaPlayerListener(
     35     jobject context, jobject media_player_bridge) {
     36   JNIEnv* env = AttachCurrentThread();
     37   CHECK(env);
     38   j_media_player_listener_.Reset(
     39       Java_MediaPlayerListener_create(
     40           env, reinterpret_cast<intptr_t>(this), context, media_player_bridge));
     41 }
     42 
     43 
     44 void MediaPlayerListener::ReleaseMediaPlayerListenerResources() {
     45   JNIEnv* env = AttachCurrentThread();
     46   CHECK(env);
     47   if (!j_media_player_listener_.is_null()) {
     48     Java_MediaPlayerListener_releaseResources(
     49         env, j_media_player_listener_.obj());
     50   }
     51   j_media_player_listener_.Reset();
     52 }
     53 
     54 void MediaPlayerListener::OnMediaError(
     55     JNIEnv* /* env */, jobject /* obj */, jint error_type) {
     56   task_runner_->PostTask(FROM_HERE, base::Bind(
     57       &MediaPlayerBridge::OnMediaError, media_player_, error_type));
     58 }
     59 
     60 void MediaPlayerListener::OnVideoSizeChanged(
     61     JNIEnv* /* env */, jobject /* obj */, jint width, jint height) {
     62   task_runner_->PostTask(FROM_HERE, base::Bind(
     63       &MediaPlayerBridge::OnVideoSizeChanged, media_player_,
     64       width, height));
     65 }
     66 
     67 void MediaPlayerListener::OnBufferingUpdate(
     68     JNIEnv* /* env */, jobject /* obj */, jint percent) {
     69   task_runner_->PostTask(FROM_HERE, base::Bind(
     70       &MediaPlayerBridge::OnBufferingUpdate, media_player_, percent));
     71 }
     72 
     73 void MediaPlayerListener::OnPlaybackComplete(
     74     JNIEnv* /* env */, jobject /* obj */) {
     75   task_runner_->PostTask(FROM_HERE, base::Bind(
     76       &MediaPlayerBridge::OnPlaybackComplete, media_player_));
     77 }
     78 
     79 void MediaPlayerListener::OnSeekComplete(
     80     JNIEnv* /* env */, jobject /* obj */) {
     81   task_runner_->PostTask(FROM_HERE, base::Bind(
     82       &MediaPlayerBridge::OnSeekComplete, media_player_));
     83 }
     84 
     85 void MediaPlayerListener::OnMediaPrepared(
     86     JNIEnv* /* env */, jobject /* obj */) {
     87   task_runner_->PostTask(FROM_HERE, base::Bind(
     88       &MediaPlayerBridge::OnMediaPrepared, media_player_));
     89 }
     90 
     91 void MediaPlayerListener::OnMediaInterrupted(
     92     JNIEnv* /* env */, jobject /* obj */) {
     93   task_runner_->PostTask(FROM_HERE, base::Bind(
     94       &MediaPlayerBridge::OnMediaInterrupted, media_player_));
     95 }
     96 
     97 bool MediaPlayerListener::RegisterMediaPlayerListener(JNIEnv* env) {
     98   bool ret = RegisterNativesImpl(env);
     99   DCHECK(g_MediaPlayerListener_clazz);
    100   return ret;
    101 }
    102 
    103 }  // namespace media
    104