media_player_listener.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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/message_loop/message_loop_proxy.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
17using base::android::AttachCurrentThread;
18using base::android::CheckException;
19using base::android::ScopedJavaLocalRef;
20
21namespace media {
22
23MediaPlayerListener::MediaPlayerListener(
24    const scoped_refptr<base::MessageLoopProxy>& message_loop,
25    base::WeakPtr<MediaPlayerBridge> media_player)
26    : message_loop_(message_loop),
27      media_player_(media_player) {
28  DCHECK(message_loop_.get());
29  DCHECK(media_player_);
30}
31
32MediaPlayerListener::~MediaPlayerListener() {}
33
34void 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
44void 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
54void MediaPlayerListener::OnMediaError(
55    JNIEnv* /* env */, jobject /* obj */, jint error_type) {
56  message_loop_->PostTask(FROM_HERE, base::Bind(
57      &MediaPlayerBridge::OnMediaError, media_player_, error_type));
58}
59
60void MediaPlayerListener::OnVideoSizeChanged(
61    JNIEnv* /* env */, jobject /* obj */, jint width, jint height) {
62  message_loop_->PostTask(FROM_HERE, base::Bind(
63      &MediaPlayerBridge::OnVideoSizeChanged, media_player_,
64      width, height));
65}
66
67void MediaPlayerListener::OnBufferingUpdate(
68    JNIEnv* /* env */, jobject /* obj */, jint percent) {
69  message_loop_->PostTask(FROM_HERE, base::Bind(
70      &MediaPlayerBridge::OnBufferingUpdate, media_player_, percent));
71}
72
73void MediaPlayerListener::OnPlaybackComplete(
74    JNIEnv* /* env */, jobject /* obj */) {
75  message_loop_->PostTask(FROM_HERE, base::Bind(
76      &MediaPlayerBridge::OnPlaybackComplete, media_player_));
77}
78
79void MediaPlayerListener::OnSeekComplete(
80    JNIEnv* /* env */, jobject /* obj */) {
81  message_loop_->PostTask(FROM_HERE, base::Bind(
82      &MediaPlayerBridge::OnSeekComplete, media_player_));
83}
84
85void MediaPlayerListener::OnMediaPrepared(
86    JNIEnv* /* env */, jobject /* obj */) {
87  message_loop_->PostTask(FROM_HERE, base::Bind(
88      &MediaPlayerBridge::OnMediaPrepared, media_player_));
89}
90
91void MediaPlayerListener::OnMediaInterrupted(
92    JNIEnv* /* env */, jobject /* obj */) {
93  message_loop_->PostTask(FROM_HERE, base::Bind(
94      &MediaPlayerBridge::OnMediaInterrupted, media_player_));
95}
96
97bool MediaPlayerListener::RegisterMediaPlayerListener(JNIEnv* env) {
98  bool ret = RegisterNativesImpl(env);
99  DCHECK(g_MediaPlayerListener_clazz);
100  return ret;
101}
102
103}  // namespace media
104