Bug 1109248: Merge with webrtc.org update (android compile/merge fixes) r=jesup

ON A CLOSED TREE
This commit is contained in:
Gian-Carlo Pascutto 2015-01-29 18:34:16 -05:00
parent f82b381b47
commit adfc170313
3 changed files with 33 additions and 95 deletions

View File

@ -11,6 +11,7 @@
package org.webrtc.videoengine;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Exchanger;
@ -367,7 +368,7 @@ public class VideoCaptureAndroid implements PreviewCallback, Callback, AppStateL
// We already got onPause, but now the native code wants us to stop.
// Do not resume capturing when resuming the app.
mResumeCapture = false;
return true;
return;
}
throw new RuntimeException("Camera is already stopped!");
}
@ -476,7 +477,7 @@ public class VideoCaptureAndroid implements PreviewCallback, Callback, AppStateL
rotation = (info.orientation + rotation) % 360;
if (data != null) {
ProvideCameraFrame(data, data.length, native_capturer, mCaptureRotation);
ProvideCameraFrame(data, data.length, mCaptureRotation, lastCaptureTimeMs, native_capturer);
camera.addCallbackBuffer(data);
}
}

View File

@ -10,6 +10,7 @@
package org.webrtc.videoengine;
import java.util.ArrayList;
import java.util.List;
import android.hardware.Camera.CameraInfo;
@ -83,11 +84,11 @@ public class VideoCaptureDeviceInfoAndroid {
supportedFpsRanges.add(range);
}
} else {
Log.e(TAG, "Camera doesn't know its own framerate, guessing 25fps.");
Log.e(TAG, "Camera doesn't know its own framerate, guessing 30fps.");
int[] range = new int[2];
// Your guess is as good as mine
range[0] = 25 * 1000;
range[1] = 25 * 1000;
range[0] = 30 * 1000;
range[1] = 30 * 1000;
supportedFpsRanges.add(range);
}
}
@ -99,6 +100,29 @@ public class VideoCaptureDeviceInfoAndroid {
continue;
}
boolean is30fpsRange = false;
boolean is15fpsRange = false;
// If there is constant 30 fps mode, but no 15 fps - add 15 fps
// mode to the list of supported ranges. Frame drop will be done
// in software.
for (int[] range : supportedFpsRanges) {
if (range[0] == 30000 &&
range[1] == 30000) {
is30fpsRange = true;
}
if (range[0] == 15000 &&
range[1] == 15000) {
is15fpsRange = true;
}
}
if (is30fpsRange && !is15fpsRange) {
Log.d(TAG, "Adding 15 fps support");
int[] range = new int[2];
range[0] = 15 * 1000;
range[1] = 15 * 1000;
supportedFpsRanges.add(range);
}
CaptureCapabilityAndroid device = new CaptureCapabilityAndroid();
int sizeLen = supportedSizes.size();
@ -132,95 +156,5 @@ public class VideoCaptureDeviceInfoAndroid {
}
return allDevices.toArray(new CaptureCapabilityAndroid[0]);
}
/*
private static String getDeviceInfo() {
try {
JSONArray devices = new JSONArray();
for (int i = 0; i < Camera.getNumberOfCameras(); ++i) {
CameraInfo info = new CameraInfo();
Camera.getCameraInfo(i, info);
String uniqueName = deviceUniqueName(i, info);
JSONObject cameraDict = new JSONObject();
devices.put(cameraDict);
List<Size> supportedSizes;
List<int[]> supportedFpsRanges;
Camera camera = null;
try {
camera = Camera.open(i);
Parameters parameters = camera.getParameters();
supportedSizes = parameters.getSupportedPreviewSizes();
supportedFpsRanges = parameters.getSupportedPreviewFpsRange();
Log.d(TAG, uniqueName);
} catch (RuntimeException e) {
Log.e(TAG, "Failed to open " + uniqueName + ", skipping", e);
continue;
} finally {
if (camera != null) {
camera.release();
}
}
JSONArray sizes = new JSONArray();
for (Size supportedSize : supportedSizes) {
JSONObject size = new JSONObject();
size.put("width", supportedSize.width);
size.put("height", supportedSize.height);
sizes.put(size);
}
boolean is30fpsRange = false;
boolean is15fpsRange = false;
// If there is constant 30 fps mode, but no 15 fps - add 15 fps
// mode to the list of supported ranges. Frame drop will be done
// in software.
for (int[] range : supportedFpsRanges) {
if (range[Parameters.PREVIEW_FPS_MIN_INDEX] == 30000 &&
range[Parameters.PREVIEW_FPS_MAX_INDEX] == 30000) {
is30fpsRange = true;
}
if (range[Parameters.PREVIEW_FPS_MIN_INDEX] == 15000 &&
range[Parameters.PREVIEW_FPS_MAX_INDEX] == 15000) {
is15fpsRange = true;
}
}
if (is30fpsRange && !is15fpsRange) {
Log.d(TAG, "Adding 15 fps support");
int[] newRange = new int [Parameters.PREVIEW_FPS_MAX_INDEX + 1];
newRange[Parameters.PREVIEW_FPS_MIN_INDEX] = 15000;
newRange[Parameters.PREVIEW_FPS_MAX_INDEX] = 15000;
for (int j = 0; j < supportedFpsRanges.size(); j++ ) {
int[] range = supportedFpsRanges.get(j);
if (range[Parameters.PREVIEW_FPS_MAX_INDEX] >
newRange[Parameters.PREVIEW_FPS_MAX_INDEX]) {
supportedFpsRanges.add(j, newRange);
break;
}
}
}
JSONArray mfpsRanges = new JSONArray();
for (int[] range : supportedFpsRanges) {
JSONObject mfpsRange = new JSONObject();
// Android SDK deals in integral "milliframes per second"
// (i.e. fps*1000, instead of floating-point frames-per-second) so we
// preserve that through the Java->C++->Java round-trip.
mfpsRange.put("min_mfps", range[Parameters.PREVIEW_FPS_MIN_INDEX]);
mfpsRange.put("max_mfps", range[Parameters.PREVIEW_FPS_MAX_INDEX]);
mfpsRanges.put(mfpsRange);
}
cameraDict.put("name", uniqueName);
cameraDict.put("front_facing", isFrontFacing(info))
.put("orientation", info.orientation)
.put("sizes", sizes)
.put("mfpsRanges", mfpsRanges);
}
String ret = devices.toString(2);
Log.d(TAG, ret);
return ret;
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
*/
}

View File

@ -24,6 +24,9 @@ import org.mozilla.gecko.util.ThreadUtils;
public class ViERenderer {
private final static String TAG = "WEBRTC-ViEREnderer";
// View used for local rendering that Cameras can use for Video Overlay.
private static SurfaceHolder g_localRenderer;
public static SurfaceView CreateRenderer(Context context) {
return CreateRenderer(context, false);
}