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