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:
Nanang Izzuddin 2016-12-19 05:23:12 +00:00
parent f70c966edd
commit a299dc63ac
2 changed files with 0 additions and 320 deletions

View File

@ -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);
}
}
}

View File

@ -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;
}
}