首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测量Android Camera2的fps

测量Android Camera2的fps
EN

Stack Overflow用户
提问于 2017-03-15 18:16:32
回答 1查看 1.6K关注 0票数 0

ImageReader.OnImageAvailableListener回调中,我只是使用SystemClock.elapsedRealtime()来计算帧间隔以获得fps,并输出如下内容:

代码语言:javascript
复制
fps = 27.777779
fps = 34.482758
fps = 27.777779
fps = 32.258064
fps = 14.285714
fps = 35.714287
fps = 30.30303
fps = 17.54386
fps = 125.0

所以我的问题是,实际的fps真的会像这样波动吗?如果是这样,有没有任何可靠的方法来固定帧速率,比方说我只需要它以15或20fps的速度传输。它能实现还是不能实现?

附言:我试着使用

代码语言:javascript
复制
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);

使用bestFPSRange = [30,30],但它似乎不起作用。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 19:58:15

尝试使用YUV420从图像阅读器获取数据:-

代码语言:javascript
复制
ImageReader.newInstance(mWidth,mHeight ,ImageFormat.YUV_420_888, maxImages);

另外,检查你的mWidth和mHeight。

您可以尝试以下方法来测量fps:-

代码语言:javascript
复制
int frameCount=0;
    long frameTime=0;
    ImageReader.OnImageAvailableListener mImageAvailableRight=new ImageReader.OnImageAvailableListener() {
        @Override
        public void onImageAvailable(ImageReader imageReader) {
            try{


                Object[] objects=initFPSNew("Measure fps is-->",frameTime,frameCount);
                frameTime=(long)objects[0];
                frameCount=(int)objects[1];

                Image mImage=imageReader.acquireNextImage();
                if(mImage!=null){
                    mImage.close();
                }

            }catch (Exception exc)
            {
                exc.printStackTrace();
                Log.v(TAG,"Exception Camera2"+ exc.getMessage());
            }

        }
    };





public static Object[] initFPSNew(String message,long startTime,int counter){

        Object[] mObjectTime=new Object[2];
        if(startTime==0){

            startTime=System.currentTimeMillis();
            mObjectTime[0]=startTime;
            counter+=1;
            mObjectTime[1]=counter;
        }else{
            long difference=System.currentTimeMillis()-startTime;
            //We wil check count only after 1 second laps 
            double seconds = difference / 1000.0;

            if(seconds>=1)
            {
                Log.v(TAGFPS,message+ counter);
                counter=0;
                mObjectTime[0]=System.currentTimeMillis();
                mObjectTime[1]=counter;

            }else{
                counter++;
                mObjectTime[0]=startTime;
                mObjectTime[1]=counter;
            }

        }
        return mObjectTime;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42806760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档