相关疑难解决方法(0)

如何限制Android相机的预览fps范围?

是否有可能限制Android相机中的fps范围..试图更改.setPreviewFpsRange()中的值...但帧速率不会改变..它连续每秒30帧

android frame-rate android-camera

5
推荐指数
1
解决办法
7294
查看次数

Camera.open() blocking UI thread

I've looked at all the SO articles I could find on this but none of the solutions work for me.

When called Camera.open(), there is a 3 second (give or take) delay where the UI thread is blocked. I have attempted to put that in a background thread. I'm currently using the solution found here (pasted below) but the 'wait' method is synchronous so it blocks the UI thread too.

What I'm looking to do is load this fragment, show …

android android-camera

5
推荐指数
1
解决办法
3802
查看次数

为什么带处理器的连续自动对焦相机不允许切换相机闪光灯?

到目前为止我做了什么:

我已经实现了自定义相机来读取qr代码,需要继续对焦相机以便更好地阅读.

我的问题是,当我使用处理器时,每隔一秒聚焦一次,相机闪光灯开关\关闭按钮不起作用,或者打开和关闭相机闪光灯需要太多时间.当我每秒移除自动聚焦相机的代码(可运行和处理程序)时,每件事情都能正常工作.

我想要的是在相机移动时自动快速聚焦,并且能够快速打开和关闭闪光灯而不使用,Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE因为它不可用API<14.

我曾经使用过,Camera.Parameters.FOCUS_MODE_AUTO但它只是在启动时将相机聚焦一次,这就是为什么我每天使用处理器聚焦相机.

Min SDK版本的项目是9.

我的相机活动是

public class CameraActivityNew extends Activity implements OnClickListener,
        Camera.PreviewCallback {

    CameraPreviewNew mPreview;
    FrameLayout flCameraPreview;
    ImageButton ibFlashButton;
    Boolean isFlashOn = false;

    Camera mCamera;

    private Handler mAutoFocusHandler;
    private boolean mPreviewing = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mAutoFocusHandler = new Handler();
        setContentView(R.layout.activity_camera);
        findSetupViews();
        mPreview = new CameraPreviewNew(getApplicationContext(), this,
                autoFocusCB);
        flCameraPreview.addView(mPreview);
    }

    private Runnable doAutoFocus = new Runnable() {
        public void run() { …
Run Code Online (Sandbox Code Playgroud)

android android-camera

5
推荐指数
2
解决办法
1243
查看次数

Android Camera.PreviewCallback调度(使用OpenGL和OpenCV)

我正在开发一个应用程序,需要使用相机输入和实时结果显示进行大量图像处理.我决定使用OpenGL和OpenCV以及Android的普通相机API.到目前为止,它已经成为一个多线程的噩梦,不幸的是,由于缺少onPreviewFrame()回调的文档,我感到非常有限.

我从文档中了解到,在使用Camera.open()获取摄像头的线程上调用onPreviewFrame().令我困惑的是这个回调是如何安排的 - 它似乎是固定的帧率.我当前的体系结构依赖于onPreviewFrame()回调来启动图像处理/显示周期,当我阻止相机回调线程太长时间似乎陷入死锁,所以我怀疑回调在调度方面是不灵活的.我想减慢帧速率以测试它,但我的设备不支持这个.

我开始使用http://maninara.blogspot.ca/2012/09/render-camera-preview-using-opengl-es.html上的代码.此代码不是很平行,它只是为了准确显示相机返回的数据.根据我的需要,我调整了代码来绘制位图,并使用专用线程将相机数据缓冲到另一个专用的重型图像处理线程(所有OpenGL线程之外).

这是我的代码(简化):

CameraSurfaceRenderer.java

class CameraSurfaceRenderer implements GLSurfaceView.Renderer, SurfaceTexture.OnFrameAvailableListener,
    Camera.PreviewCallback
{

static int[]                surfaceTexPtr;

static CameraSurfaceView    cameraSurfaceView;
static FloatBuffer          pVertex;
static FloatBuffer          pTexCoord;
static int                  hProgramPointer;

static Camera               camera;
static SurfaceTexture       surfaceTexture;

static Bitmap               procBitmap;
static int[]                procBitmapPtr;

static boolean              updateSurfaceTex = false;

static ConditionVariable    previewFrameLock;
static ConditionVariable    bitmapDrawLock;

// MarkerFinder extends CameraImgProc
static MarkerFinder         markerFinder = new MarkerFinder();
static Thread               previewCallbackThread;

static
{
    previewFrameLock = new ConditionVariable();
    previewFrameLock.open();

    bitmapDrawLock = new ConditionVariable();
    bitmapDrawLock.open();
} …
Run Code Online (Sandbox Code Playgroud)

multithreading android opencv opengl-es android-camera

4
推荐指数
1
解决办法
4457
查看次数

单独螺纹中的Acclerometer传感器

我将数据从Accelerometer Sensor保存到数据库,但我想在一个单独的线程中进行.我试图在互联网上搜索它,但大多数使用相同的线程.请帮忙.我试过的事情:1)

SenSorEventListener sel;
    Thread A=new Thread(){
                public void run()
                {
                    sel=new SensorEventListener() {

                        @Override
                        public void onSensorChanged(SensorEvent event) {
                            // TODO Auto-generated method stub
                            double Acceleration,x,y,z;
                            x=event.values[0];
                            y=event.values[2];
                            z=event.values[2];
                            Acceleration=Math.sqrt(x*x+y*y+z*z);
                            db.addAccel(Acceleration);
                            Log.d("MESSAGE","SAVED");
                        }

                        @Override
                        public void onAccuracyChanged(Sensor sensor, int accuracy) {
                            // TODO Auto-generated method stub

                        }
                    };
                }
            };
            A.start();
            try {
                A.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            sm.registerListener(sel,s,1000000);
}
Run Code Online (Sandbox Code Playgroud)

我拿了一个SensorEventListener,在一个新的Thread中初始化它,然后用寄存器监听器注册它.

另一种方法:我使用Runnable接口实现了Accelerometer类,在Constructor中初始化了所有内容,因此我的run()方法是空白的,但这种方法不会创建新的Thread.

    Accelerometer(Context con,Database d)
        {   
            sm=(SensorManager)con.getSystemService(Context.SENSOR_SERVICE);
            s=sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
            sm.registerListener(this,s,1000000);
            db=d;
        } …
Run Code Online (Sandbox Code Playgroud)

java android android-sensors

3
推荐指数
1
解决办法
6292
查看次数

释放相机:"释放后调用的方法()"异常

我正在尝试在我的应用中加入一些与相机相关的功能.我手动打开摄像头,并获得与预览流setPreviewCallbackstartPreview.我使用曲面来显示预览,但我确实将其设置为符合Camera API文档.这是我打开相机的方式:

public Camera openCamera(int id)
{
    m_openedCamera = Camera.open(id);
    m_surfaceHolder = new SurfaceView(MyApplication.instance().getApplicationContext()).getHolder();
    Assert.assertNotNull(m_openedCamera);
    m_openedCamera.setPreviewDisplay(m_surfaceHolder);
    m_openedCameraFacing = facing;
    if (m_openedCamera != null)
        m_openedCamera.setPreviewCallback(this);
    m_openedCamera.startPreview();
}
Run Code Online (Sandbox Code Playgroud)

这就是我发布它的方式,这里没什么好看的:

public void releaseCamera()
{
    if (m_openedCamera != null)
    {
        m_openedCamera.stopPreview();
        m_openedCamera.release();
        m_openedCamera = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

它有点起作用,但是当我释放相机时,我得到一个异常"在释放后调用的方法()".澄清一下:相机发布后我不会调用任何相机方法.在调试器下进行双重和三重检查,我没有.我认为这里有混合的同步和异步调用会导致问题.

camera android android-camera

1
推荐指数
1
解决办法
713
查看次数