Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: media/capture/content/android/java/src/org/chromium/media/ScreenCapture.java

Issue 2847523002: Android: Remove GetApplicationContext part 4 (Closed)
Patch Set: Rebase and fix build Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 package org.chromium.media; 5 package org.chromium.media;
6 6
7 import android.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.app.Fragment; 9 import android.app.Fragment;
10 import android.app.FragmentManager; 10 import android.app.FragmentManager;
(...skipping 10 matching lines...) Expand all
21 import android.media.projection.MediaProjectionManager; 21 import android.media.projection.MediaProjectionManager;
22 import android.os.Build; 22 import android.os.Build;
23 import android.os.Handler; 23 import android.os.Handler;
24 import android.os.HandlerThread; 24 import android.os.HandlerThread;
25 import android.util.DisplayMetrics; 25 import android.util.DisplayMetrics;
26 import android.view.Display; 26 import android.view.Display;
27 import android.view.Surface; 27 import android.view.Surface;
28 import android.view.WindowManager; 28 import android.view.WindowManager;
29 29
30 import org.chromium.base.ApplicationStatus; 30 import org.chromium.base.ApplicationStatus;
31 import org.chromium.base.ContextUtils;
31 import org.chromium.base.Log; 32 import org.chromium.base.Log;
32 import org.chromium.base.annotations.CalledByNative; 33 import org.chromium.base.annotations.CalledByNative;
33 import org.chromium.base.annotations.JNINamespace; 34 import org.chromium.base.annotations.JNINamespace;
34 35
35 import java.nio.ByteBuffer; 36 import java.nio.ByteBuffer;
36 37
37 /** 38 /**
38 * This class implements Screen Capture using projection API, introduced in Andr oid 39 * This class implements Screen Capture using projection API, introduced in Andr oid
39 * API 21 (L Release). Capture takes place in the current Looper, while pixel 40 * API 21 (L Release). Capture takes place in the current Looper, while pixel
40 * download takes place in another thread used by ImageReader. 41 * download takes place in another thread used by ImageReader.
41 **/ 42 **/
42 @JNINamespace("media") 43 @JNINamespace("media")
43 @TargetApi(Build.VERSION_CODES.LOLLIPOP) 44 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
44 public class ScreenCapture extends Fragment { 45 public class ScreenCapture extends Fragment {
45 private static final String TAG = "cr_ScreenCapture"; 46 private static final String TAG = "cr_ScreenCapture";
46 47
47 private static final int REQUEST_MEDIA_PROJECTION = 1; 48 private static final int REQUEST_MEDIA_PROJECTION = 1;
48 49
49 // Native callback context variable. 50 // Native callback context variable.
50 private final long mNativeScreenCaptureMachineAndroid; 51 private final long mNativeScreenCaptureMachineAndroid;
51 private final Context mContext;
52 52
53 private static enum CaptureState { ATTACHED, ALLOWED, STARTED, STOPPING, STO PPED } 53 private static enum CaptureState { ATTACHED, ALLOWED, STARTED, STOPPING, STO PPED }
54 private static enum DeviceOrientation { PORTRAIT, LANDSCAPE } 54 private static enum DeviceOrientation { PORTRAIT, LANDSCAPE }
55 private final Object mCaptureStateLock = new Object(); 55 private final Object mCaptureStateLock = new Object();
56 private CaptureState mCaptureState = CaptureState.STOPPED; 56 private CaptureState mCaptureState = CaptureState.STOPPED;
57 57
58 private MediaProjection mMediaProjection; 58 private MediaProjection mMediaProjection;
59 private MediaProjectionManager mMediaProjectionManager; 59 private MediaProjectionManager mMediaProjectionManager;
60 private VirtualDisplay mVirtualDisplay; 60 private VirtualDisplay mVirtualDisplay;
61 private Surface mSurface; 61 private Surface mSurface;
62 private ImageReader mImageReader; 62 private ImageReader mImageReader;
63 private HandlerThread mThread; 63 private HandlerThread mThread;
64 private Handler mBackgroundHandler; 64 private Handler mBackgroundHandler;
65 private Display mDisplay; 65 private Display mDisplay;
66 private DeviceOrientation mCurrentOrientation; 66 private DeviceOrientation mCurrentOrientation;
67 private Intent mResultData; 67 private Intent mResultData;
68 68
69 private int mScreenDensity; 69 private int mScreenDensity;
70 private int mWidth; 70 private int mWidth;
71 private int mHeight; 71 private int mHeight;
72 private int mFormat; 72 private int mFormat;
73 private int mResultCode; 73 private int mResultCode;
74 74
75 ScreenCapture(Context context, long nativeScreenCaptureMachineAndroid) { 75 ScreenCapture(long nativeScreenCaptureMachineAndroid) {
76 mContext = context;
77 mNativeScreenCaptureMachineAndroid = nativeScreenCaptureMachineAndroid; 76 mNativeScreenCaptureMachineAndroid = nativeScreenCaptureMachineAndroid;
78 } 77 }
79 78
80 // Factory method. 79 // Factory method.
81 @CalledByNative 80 @CalledByNative
82 static ScreenCapture createScreenCaptureMachine( 81 static ScreenCapture createScreenCaptureMachine(long nativeScreenCaptureMach ineAndroid) {
83 Context context, long nativeScreenCaptureMachineAndroid) {
84 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 82 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
85 return new ScreenCapture(context, nativeScreenCaptureMachineAndroid) ; 83 return new ScreenCapture(nativeScreenCaptureMachineAndroid);
86 } 84 }
87 return null; 85 return null;
88 } 86 }
89 87
90 // Internal class implementing the ImageReader listener. Gets pinged when a 88 // Internal class implementing the ImageReader listener. Gets pinged when a
91 // new frame is been captured and downloaded to memory-backed buffers. 89 // new frame is been captured and downloaded to memory-backed buffers.
92 private class CrImageReaderListener implements ImageReader.OnImageAvailableL istener { 90 private class CrImageReaderListener implements ImageReader.OnImageAvailableL istener {
93 @Override 91 @Override
94 public void onImageAvailable(ImageReader reader) { 92 public void onImageAvailable(ImageReader reader) {
95 synchronized (mCaptureStateLock) { 93 synchronized (mCaptureStateLock) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 super.onDetach(); 200 super.onDetach();
203 Log.d(TAG, "onDetach"); 201 Log.d(TAG, "onDetach");
204 stopCapture(); 202 stopCapture();
205 } 203 }
206 204
207 @CalledByNative 205 @CalledByNative
208 public boolean allocate(int width, int height) { 206 public boolean allocate(int width, int height) {
209 mWidth = width; 207 mWidth = width;
210 mHeight = height; 208 mHeight = height;
211 209
212 mMediaProjectionManager = (MediaProjectionManager) mContext.getSystemSer vice( 210 mMediaProjectionManager =
213 Context.MEDIA_PROJECTION_SERVICE); 211 (MediaProjectionManager) ContextUtils.getApplicationContext().ge tSystemService(
212 Context.MEDIA_PROJECTION_SERVICE);
214 if (mMediaProjectionManager == null) { 213 if (mMediaProjectionManager == null) {
215 Log.e(TAG, "mMediaProjectionManager is null"); 214 Log.e(TAG, "mMediaProjectionManager is null");
216 return false; 215 return false;
217 } 216 }
218 217
219 WindowManager windowManager = 218 WindowManager windowManager =
220 (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE ); 219 (WindowManager) ContextUtils.getApplicationContext().getSystemSe rvice(
220 Context.WINDOW_SERVICE);
221 mDisplay = windowManager.getDefaultDisplay(); 221 mDisplay = windowManager.getDefaultDisplay();
222 222
223 DisplayMetrics metrics = new DisplayMetrics(); 223 DisplayMetrics metrics = new DisplayMetrics();
224 mDisplay.getMetrics(metrics); 224 mDisplay.getMetrics(metrics);
225 mScreenDensity = metrics.densityDpi; 225 mScreenDensity = metrics.densityDpi;
226 226
227 return true; 227 return true;
228 } 228 }
229 229
230 @CalledByNative 230 @CalledByNative
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 long timestamp); 425 long timestamp);
426 426
427 // Method for ScreenCapture implementations to notify activity result. 427 // Method for ScreenCapture implementations to notify activity result.
428 private native void nativeOnActivityResult( 428 private native void nativeOnActivityResult(
429 long nativeScreenCaptureMachineAndroid, boolean result); 429 long nativeScreenCaptureMachineAndroid, boolean result);
430 430
431 // Method for ScreenCapture implementations to notify orientation change. 431 // Method for ScreenCapture implementations to notify orientation change.
432 private native void nativeOnOrientationChange( 432 private native void nativeOnOrientationChange(
433 long nativeScreenCaptureMachineAndroid, int rotation); 433 long nativeScreenCaptureMachineAndroid, int rotation);
434 } 434 }
OLDNEW
« no previous file with comments | « media/base/android/media_server_crash_listener.cc ('k') | media/capture/content/android/screen_capture_machine_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698