/* AndroidCameraConf.java Copyright (C) 2010 Belledonne Communications, Grenoble, France 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.linphone.core.video; import android.hardware.Camera; import org.linphone.core.Hacks; import org.linphone.core.Log; import org.linphone.core.VideoSize; import java.util.List; class AndroidCameraConf5 implements AndroidCameraConf { private AndroidCameras foundCameras; public AndroidCameras getFoundCameras() {return foundCameras;} public AndroidCameraConf5() { // Defaults foundCameras = new AndroidCameras(); if (Hacks.isGalaxySOrTab()) { Log.d("Hack Galaxy S : has one or more cameras"); if (Hacks.isGalaxySOrTabWithFrontCamera()) { Log.d("Hack Galaxy S : HAS a front camera with id=2"); foundCameras.front = 2; } else { Log.d("Hack Galaxy S : NO front camera"); } Log.d("Hack Galaxy S : HAS a rear camera with id=1"); foundCameras.rear = 1; foundCameras.defaultC = foundCameras.rear; } else if (Hacks.hasTwoCamerasRear0Front1()) { Log.d("Hack SPHD700 has 2 cameras a rear with id=0 and a front with id=1"); foundCameras.front = 1; } } public int getNumberOfCameras() { Log.i("Detecting the number of cameras"); if (Hacks.hasTwoCamerasRear0Front1() || Hacks.isGalaxySOrTabWithFrontCamera()) { Log.d("Hack: we know this model has 2 cameras"); return 2; } else return 1; } public int getCameraOrientation(int cameraId) { // Use hacks to guess orientation of the camera if (Hacks.isGalaxySOrTab() && isFrontCamera(cameraId)) { Log.d("Hack Galaxy S : front camera mounted landscape"); // mounted in landscape for a portrait phone orientation // |^^^^^^^^| // | ____ | // | |____| | // | | // | | // | Phone | // |________| return 180; } return 90; } public boolean isFrontCamera(int cameraId) { // Use hacks to guess facing of the camera if (cameraId == 2 && Hacks.isGalaxySOrTab()) { Log.d("Hack Galaxy S : front camera has id=2"); return true; } else if (cameraId == 1 && Hacks.hasTwoCamerasRear0Front1()) { Log.d("Hack SPHD700 : front camera has id=1"); return true; } return false; } public List<VideoSize> getSupportedPreviewSizes(int cameraId) { if (getNumberOfCameras() >1) { Log.w("Hack: on older devices, using video formats supported by default camera"); } Log.i("Opening camera to retrieve supported video sizes"); Camera c = Camera.open(); List<VideoSize> sizes=VideoUtil.createList(c.getParameters().getSupportedPreviewSizes()); c.release(); Log.i("Camera opened to retrieve supported video sizes released"); return sizes; } }