Re #1986: Removed PjCamera.java and PjCameraInfo.java from pjsua2 sample app dir structure (it will be copied by build script from PJMEDIA).
git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@5503 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
parent
f70c966edd
commit
a299dc63ac
|
@ -1,210 +0,0 @@
|
|||
/* $Id: PjCamera.java 5019 2015-03-23 06:35:45Z nanang $ */
|
||||
/*
|
||||
* Copyright (C) 2015 Teluu Inc. (http://www.teluu.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
package org.pjsip;
|
||||
|
||||
import android.graphics.SurfaceTexture;
|
||||
import android.hardware.Camera;
|
||||
import android.util.Log;
|
||||
import android.view.SurfaceView;
|
||||
import android.view.SurfaceHolder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class PjCamera implements Camera.PreviewCallback, SurfaceHolder.Callback
|
||||
{
|
||||
private final String TAG = "PjCamera";
|
||||
|
||||
public class Param {
|
||||
public int width;
|
||||
public int height;
|
||||
public int format;
|
||||
public int fps1000;
|
||||
}
|
||||
|
||||
private Camera camera = null;
|
||||
private boolean isRunning = false;
|
||||
private int camIdx;
|
||||
private long userData;
|
||||
|
||||
private Param param = null;
|
||||
|
||||
private SurfaceView surfaceView = null;
|
||||
private SurfaceHolder surfaceHolder = null;
|
||||
private SurfaceTexture surfaceTexture = null;
|
||||
|
||||
public PjCamera(int idx, int w, int h, int fmt, int fps,
|
||||
long userData_, SurfaceView surface)
|
||||
{
|
||||
camIdx = idx;
|
||||
userData = userData_;
|
||||
|
||||
param = new Param();
|
||||
param.width = w;
|
||||
param.height = h;
|
||||
param.format = fmt;
|
||||
param.fps1000 = fps;
|
||||
|
||||
SetSurfaceView(surface);
|
||||
}
|
||||
|
||||
public void SetSurfaceView(SurfaceView surface)
|
||||
{
|
||||
boolean isCaptureRunning = isRunning;
|
||||
|
||||
if (isCaptureRunning)
|
||||
Stop();
|
||||
|
||||
if (surface != null) {
|
||||
surfaceView = surface;
|
||||
surfaceHolder = surfaceView.getHolder();
|
||||
} else {
|
||||
// Create dummy texture
|
||||
surfaceHolder = null;
|
||||
surfaceView = null;
|
||||
if (surfaceTexture == null) {
|
||||
surfaceTexture = new SurfaceTexture(10);
|
||||
}
|
||||
}
|
||||
|
||||
if (isCaptureRunning)
|
||||
Start();
|
||||
}
|
||||
|
||||
public int SwitchDevice(int idx)
|
||||
{
|
||||
boolean isCaptureRunning = isRunning;
|
||||
int oldIdx = camIdx;
|
||||
|
||||
if (isCaptureRunning)
|
||||
Stop();
|
||||
|
||||
camIdx = idx;
|
||||
|
||||
if (isCaptureRunning) {
|
||||
int ret = Start();
|
||||
if (ret != 0) {
|
||||
/* Try to revert back */
|
||||
camIdx = oldIdx;
|
||||
Start();
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int Start()
|
||||
{
|
||||
try {
|
||||
camera = Camera.open(camIdx);
|
||||
} catch (Exception e) {
|
||||
Log.d("IOException", e.getMessage());
|
||||
return -10;
|
||||
}
|
||||
|
||||
try {
|
||||
if (surfaceHolder != null) {
|
||||
camera.setPreviewDisplay(surfaceHolder);
|
||||
surfaceHolder.addCallback(this);
|
||||
} else {
|
||||
camera.setPreviewTexture(surfaceTexture);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.d("IOException", e.getMessage());
|
||||
return -20;
|
||||
}
|
||||
|
||||
Camera.Parameters cp = camera.getParameters();
|
||||
cp.setPreviewSize(param.width, param.height);
|
||||
cp.setPreviewFormat(param.format);
|
||||
// Some devices such as Nexus require an exact FPS range from the
|
||||
// supported FPS ranges, specifying a subset range will raise
|
||||
// exception.
|
||||
//cp.setPreviewFpsRange(param.fps1000, param.fps1000);
|
||||
try {
|
||||
camera.setParameters(cp);
|
||||
} catch (RuntimeException e) {
|
||||
Log.d("RuntimeException", e.getMessage());
|
||||
return -30;
|
||||
}
|
||||
|
||||
camera.setPreviewCallback(this);
|
||||
camera.startPreview();
|
||||
isRunning = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
isRunning = false;
|
||||
if (camera == null)
|
||||
return;
|
||||
|
||||
if (surfaceHolder != null)
|
||||
surfaceHolder.removeCallback(this);
|
||||
|
||||
camera.setPreviewCallback(null);
|
||||
camera.stopPreview();
|
||||
camera.release();
|
||||
camera = null;
|
||||
}
|
||||
|
||||
native void PushFrame(byte[] data, int length, long userData_);
|
||||
|
||||
public void onPreviewFrame(byte[] data, Camera camera)
|
||||
{
|
||||
if (isRunning) {
|
||||
PushFrame(data, data.length, userData);
|
||||
}
|
||||
}
|
||||
|
||||
public void surfaceChanged(SurfaceHolder holder,
|
||||
int format, int width, int height)
|
||||
{
|
||||
Log.d(TAG, "VideoCaptureAndroid::surfaceChanged");
|
||||
}
|
||||
|
||||
public void surfaceCreated(SurfaceHolder holder)
|
||||
{
|
||||
Log.d(TAG, "VideoCaptureAndroid::surfaceCreated");
|
||||
try {
|
||||
if(camera != null) {
|
||||
camera.setPreviewDisplay(holder);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to set preview surface!", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void surfaceDestroyed(SurfaceHolder holder)
|
||||
{
|
||||
Log.d(TAG, "VideoCaptureAndroid::surfaceDestroyed");
|
||||
try {
|
||||
if(camera != null) {
|
||||
camera.setPreviewDisplay(null);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to clear preview surface!", e);
|
||||
} catch (RuntimeException e) {
|
||||
Log.w(TAG, "Clear preview surface useless", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,110 +0,0 @@
|
|||
/* $Id: PjCameraInfo.java 5019 2015-03-23 06:35:45Z nanang $ */
|
||||
/*
|
||||
* Copyright (C) 2015 Teluu Inc. (http://www.teluu.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
package org.pjsip;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.hardware.Camera;
|
||||
import android.util.Log;
|
||||
|
||||
public class PjCameraInfo {
|
||||
public int facing;
|
||||
public int orient;
|
||||
public int[] supportedSize; // [w1, h1, w2, h2, ...]
|
||||
public int[] supportedFps1000; // [min1, max1, min2, max2, ...]
|
||||
public int[] supportedFormat; // [fmt1, fmt2, ...]
|
||||
|
||||
// convert Format list {fmt1, fmt2, ...} to [fmt1, fmt2, ...]
|
||||
private static int[] IntegerListToIntArray(List<Integer> list)
|
||||
{
|
||||
int[] li = new int[list.size()];
|
||||
int i = 0;
|
||||
for (Integer e : list) {
|
||||
li[i++] = e.intValue();
|
||||
}
|
||||
return li;
|
||||
}
|
||||
|
||||
// convert Fps list {[min1, max1], [min2, max2], ...} to
|
||||
// [min1, max1, min2, max2, ...]
|
||||
private static int[] IntArrayListToIntArray(List<int[]> list)
|
||||
{
|
||||
int[] li = new int[list.size() * 2];
|
||||
int i = 0;
|
||||
for (int[] e : list) {
|
||||
li[i++] = e[0];
|
||||
li[i++] = e[1];
|
||||
}
|
||||
return li;
|
||||
}
|
||||
|
||||
// convert Size list {{w1, h1}, {w2, h2}, ...} to [w1, h1, w2, h2, ...]
|
||||
private static int[] CameraSizeListToIntArray(List<Camera.Size> list)
|
||||
{
|
||||
int[] li = new int[list.size() * 2];
|
||||
int i = 0;
|
||||
for (Camera.Size e : list) {
|
||||
li[i++] = e.width;
|
||||
li[i++] = e.height;
|
||||
}
|
||||
return li;
|
||||
}
|
||||
|
||||
public static int GetCameraCount()
|
||||
{
|
||||
return Camera.getNumberOfCameras();
|
||||
}
|
||||
|
||||
// Get camera info: facing, orientation, supported size/fps/format.
|
||||
// Camera must not be opened.
|
||||
public static PjCameraInfo GetCameraInfo(int idx)
|
||||
{
|
||||
if (idx < 0 || idx >= GetCameraCount())
|
||||
return null;
|
||||
|
||||
Camera cam;
|
||||
try {
|
||||
cam = Camera.open(idx);
|
||||
} catch (Exception e) {
|
||||
Log.d("IOException", e.getMessage());
|
||||
return null;
|
||||
}
|
||||
|
||||
PjCameraInfo pjci = new PjCameraInfo();
|
||||
|
||||
Camera.CameraInfo ci = new Camera.CameraInfo();
|
||||
Camera.getCameraInfo(idx, ci);
|
||||
|
||||
pjci.facing = ci.facing;
|
||||
pjci.orient = ci.orientation;
|
||||
|
||||
Camera.Parameters param = cam.getParameters();
|
||||
cam.release();
|
||||
cam = null;
|
||||
|
||||
pjci.supportedFormat = IntegerListToIntArray(
|
||||
param.getSupportedPreviewFormats());
|
||||
pjci.supportedFps1000 = IntArrayListToIntArray(
|
||||
param.getSupportedPreviewFpsRange());
|
||||
pjci.supportedSize = CameraSizeListToIntArray(
|
||||
param.getSupportedPreviewSizes());
|
||||
|
||||
return pjci;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue