content_video_view.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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#ifndef CONTENT_BROWSER_ANDROID_CONTENT_VIDEO_VIEW_H_
6#define CONTENT_BROWSER_ANDROID_CONTENT_VIDEO_VIEW_H_
7
8#include <jni.h>
9
10#include "base/android/scoped_java_ref.h"
11#include "base/basictypes.h"
12#include "base/memory/ref_counted.h"
13#include "base/memory/scoped_ptr.h"
14#include "base/timer.h"
15
16namespace content {
17
18class MediaPlayerManagerImpl;
19
20// Native mirror of ContentVideoView.java. This class is responsible for
21// creating the Java video view and pass all the player status change to
22// it. It accepts media control from Java class, and forwards it to
23// MediaPlayerManagerImpl.
24class ContentVideoView {
25 public:
26  // Construct a ContentVideoView object. The |manager| will handle all the
27  // playback controls from the Java class.
28  explicit ContentVideoView(MediaPlayerManagerImpl* manager);
29  ~ContentVideoView();
30
31  static bool RegisterContentVideoView(JNIEnv* env);
32
33  // Getter method called by the Java class to get the media information.
34  int GetVideoWidth(JNIEnv*, jobject obj) const;
35  int GetVideoHeight(JNIEnv*, jobject obj) const;
36  int GetDurationInMilliSeconds(JNIEnv*, jobject obj) const;
37  int GetCurrentPosition(JNIEnv*, jobject obj) const;
38  bool IsPlaying(JNIEnv*, jobject obj);
39  void UpdateMediaMetadata(JNIEnv*, jobject obj);
40
41  // Method to create and destroy the Java view.
42  void DestroyContentVideoView();
43  void CreateContentVideoView();
44
45  // Called when the Java fullscreen view is destroyed. If
46  // |release_media_player| is true, |manager_| needs to release the player
47  // as we are quitting the app.
48  void ExitFullscreen(JNIEnv*, jobject, jboolean release_media_player);
49
50  // Media control method called by the Java class.
51  void SeekTo(JNIEnv*, jobject obj, jint msec);
52  void Play(JNIEnv*, jobject obj);
53  void Pause(JNIEnv*, jobject obj);
54
55  // Called by the Java class to pass the surface object to the player.
56  void SetSurface(JNIEnv*, jobject obj, jobject surface);
57
58  // Method called by |manager_| to inform the Java class about player status
59  // change.
60  void UpdateMediaMetadata();
61  void OnMediaPlayerError(int errorType);
62  void OnVideoSizeChanged(int width, int height);
63  void OnBufferingUpdate(int percent);
64  void OnPlaybackComplete();
65
66 private:
67  // Object that manages the fullscreen media player. It is responsible for
68  // handling all the playback controls.
69  MediaPlayerManagerImpl* manager_;
70
71  // Reference to the Java object.
72  base::android::ScopedJavaGlobalRef<jobject> j_content_video_view_;
73
74  DISALLOW_COPY_AND_ASSIGN(ContentVideoView);
75};
76
77} // namespace content
78
79#endif  // CONTENT_BROWSER_ANDROID_CONTENT_VIDEO_VIEW_H_
80