Android-x86
Fork
Donation

  • R/O
  • HTTP
  • SSH
  • HTTPS

hardware-libcamera: 提交

hardware/libcamera


Commit MetaInfo

修订版8cf00b64f942376f1bf5e3f5a39c2086c4d51246 (tree)
时间2018-06-11 08:36:17
作者Michael Goffioul <michael.goffioul@gmai...>
CommiterChih-Wei Huang

Log Message

CameraHardware: fix FPS problem

The values reported by Camera.Parameters.getSupportedPreviewFpsRange()
are in actual FPS, while the API expects value to be multiplied by 1000.
This creates a problem in an app that is using Chrome/53 webview,
whereby the webcam is limited to 1fps. The patch fixes it.

更改概述

差异

--- a/CameraHardware.cpp
+++ b/CameraHardware.cpp
@@ -475,7 +475,7 @@ status_t CameraHardware::startPreviewLocked()
475475 mParameters.getPreviewSize(&width, &height);
476476 }
477477
478- int fps = mParameters.getPreviewFrameRate();
478+ int fps = getPreviewFrameRate(mParameters);
479479
480480 ALOGD("CameraHardware::startPreviewLocked: Open, %dx%d", width, height);
481481
@@ -722,7 +722,7 @@ status_t CameraHardware::setParameters(const char* parms)
722722 int w, h;
723723
724724 params.getPreviewSize(&w, &h);
725- ALOGD("CameraHardware::setParameters: PREVIEW: Size %dx%d, %d fps, format: %s", w, h, params.getPreviewFrameRate(), params.getPreviewFormat());
725+ ALOGD("CameraHardware::setParameters: PREVIEW: Size %dx%d, %d fps, format: %s", w, h, getPreviewFrameRate(params), params.getPreviewFormat());
726726
727727 params.getPictureSize(&w, &h);
728728 ALOGD("CameraHardware::setParameters: PICTURE: Size %dx%d, format: %s", w, h, params.getPictureFormat());
@@ -866,8 +866,8 @@ void CameraHardware::initDefaultParameters()
866866 String8 fpsranges("");
867867 for (i = 0; i < avFps.size(); i++) {
868868 char descr[32];
869- int ss = avFps[i];
870- sprintf(descr,"(%d,%d)",ss,ss);
869+ int ss = avFps[i] * 1000;
870+ sprintf(descr, "(%d,%d)", ss, ss);
871871 fpsranges.append(descr);
872872 if (i < avFps.size() - 1) {
873873 fpsranges.append(",");
@@ -1263,7 +1263,7 @@ int CameraHardware::previewThread()
12631263 {
12641264 ALOGV("CameraHardware::previewThread: this=%p",this);
12651265
1266- int previewFrameRate = mParameters.getPreviewFrameRate();
1266+ int previewFrameRate = getPreviewFrameRate(mParameters);
12671267
12681268 // Calculate how long to wait between frames.
12691269 int delay = (int)(1000000 / previewFrameRate);
@@ -1783,6 +1783,18 @@ int CameraHardware::pictureThread()
17831783 return NO_ERROR;
17841784 }
17851785
1786+int CameraHardware::getPreviewFrameRate(const CameraParameters& params)
1787+{
1788+ int min_fps = -1, max_fps = -1;
1789+ params.getPreviewFpsRange(&min_fps, &max_fps);
1790+ if (max_fps == -1) {
1791+ max_fps = params.getPreviewFrameRate();
1792+ } else {
1793+ max_fps /= 1000;
1794+ }
1795+ return max_fps;
1796+}
1797+
17861798 /****************************************************************************
17871799 * Camera API callbacks as defined by camera_device_ops structure.
17881800 *
--- a/CameraHardware.h
+++ b/CameraHardware.h
@@ -244,6 +244,8 @@ private:
244244
245245 void fillPreviewWindow(uint8_t* yuyv, int srcWidth, int srcHeight);
246246
247+ int getPreviewFrameRate(const CameraParameters& params);
248+
247249 mutable Mutex mLock;
248250
249251 preview_stream_ops* mWin;
Show on old repository browser