1、简介

本篇文章将对Camera1和Size相关的参数,逐个进行详细解析。在Camera1源码分析文章里、已阐述过相关源码。并提供了读取和更新Parameters的2个方法如下:
读取Parameters

  public static @Nullable Camera.Parameters getCameraParameters(@NonNull Camera camera) {try {return camera.getParameters();}catch (Exception e){return null;}}

更新Parameters

    public static boolean setCameraParameters(@NonNull Camera camera, @NonNull Camera.Parameters parameters) {try {camera.setParameters(parameters);return true;}catch (Exception e){return false;}}

本篇文章涉及的具体参数如下:

Key变量名 Key变量值
KEY_PREVIEW_SIZE preview-size
KEY_PREVIEW_FORMAT preview-format
KEY_PREVIEW_FRAME_RATE preview-frame-rate
KEY_PREVIEW_FPS_RANGE preview-fps-range
KEY_PICTURE_SIZE picture-size
KEY_PICTURE_FORMAT picture-format
KEY_JPEG_THUMBNAIL_SIZE jpeg-thumbnail-size
KEY_JPEG_THUMBNAIL_WIDTH jpeg-thumbnail-width
KEY_JPEG_THUMBNAIL_HEIGHT jpeg-thumbnail-height
KEY_JPEG_THUMBNAIL_QUALITY jpeg-thumbnail-quality
KEY_JPEG_QUALITY jpeg-quality

2.preview-size

说明: 1. 当前相机预览的preview-size:如1280 * 960
2. 通过设置该key不同的value值可以控制camera预览图的分辨率。
3. 相机的输出流和手机竖直成90度夹角,所以width > height
相关KEY KEY_PREVIEW_SIZE + SUPPORTED_VALUES_SUFFIX
preview-size-values
KEY_PICTURE_SIZE
picture-size
KEY_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX
picture-size-values
方法 public Size getPreviewSize()
public List getSupportedPreviewSizes()
public void setPreviewSize(int width, int height)
注意 1. 可以不设置
2. 如果设置一定要设置 getSupportedPreviewSizes()返回的Size,不然会抛错

3.preview-format

说明: 1.当前相机预览的图片格式如YV12 YUY2 NV16 YUV422SP YUV420SP
相关KEY picture-format
方法 public int getPreviewFormat()
public void setPreviewFormat(int pixel_format)
public List getSupportedPreviewFormats()
注意 1. 可以不设置 有默认值
2. 如果设置一定要设置 getSupportedPreviewFormats()返回的结果,不然会抛错

3.1 官方注释

Sets the image format for preview pictures.
If this is never called, the default format will be ImageFormat.NV21, which uses the NV21 encoding format.
Use getSupportedPreviewFormats to get a list of the available preview formats.
It is strongly recommended that either ImageFormat.NV21 or ImageFormat.YV12 is used, since they are supported by all camera devices.
For YV12, the image buffer that is received is not necessarily tightly packed, as there may be padding at the end of each row of pixel data, as described in ImageFormat.YV12. For camera callback data, it can be assumed that the stride of the Y and UV data is the smallest possible that meets the alignment requirements. That is, if the preview size is width x height, then the following equations describe the buffer index for the beginning of row y for the Y plane and row c for the U and V planes:yStride   = (int) ceil(width / 16.0) * 16;uvStride  = (int) ceil( (yStride / 2) / 16.0) * 16;ySize     = yStride * height;uvSize    = uvStride * height / 2;yRowIndex = yStride * y;uRowIndex = ySize + uvSize + uvStride * c;vRowIndex = ySize + uvStride * c;size      = ySize + uvSize * 2;Params:
pixel_format – the desired preview picture format, defined by one of the ImageFormat constants. (E.g., ImageFormat.NV21 (default), or ImageFormat.YV12)
See Also:
ImageFormat, getSupportedPreviewFormats

默认为ImageFormat.NV21

3.2 CameraFormat VS PixelFormat

        // Formats for setPreviewFormat and setPictureFormat.private static final String PIXEL_FORMAT_YUV422SP = "yuv422sp";private static final String PIXEL_FORMAT_YUV420SP = "yuv420sp";private static final String PIXEL_FORMAT_YUV422I = "yuv422i-yuyv";private static final String PIXEL_FORMAT_YUV420P = "yuv420p";private static final String PIXEL_FORMAT_RGB565 = "rgb565";private static final String PIXEL_FORMAT_JPEG = "jpeg";private static final String PIXEL_FORMAT_BAYER_RGGB = "bayer-rggb";private String cameraFormatForPixelFormat(int pixel_format) {switch(pixel_format) {case ImageFormat.NV16:      return PIXEL_FORMAT_YUV422SP;case ImageFormat.NV21:      return PIXEL_FORMAT_YUV420SP;case ImageFormat.YUY2:      return PIXEL_FORMAT_YUV422I;case ImageFormat.YV12:      return PIXEL_FORMAT_YUV420P;case ImageFormat.RGB_565:   return PIXEL_FORMAT_RGB565;case ImageFormat.JPEG:      return PIXEL_FORMAT_JPEG;default:                    return null;}}private int pixelFormatForCameraFormat(String format) {if (format == null)return ImageFormat.UNKNOWN;if (format.equals(PIXEL_FORMAT_YUV422SP))return ImageFormat.NV16;if (format.equals(PIXEL_FORMAT_YUV420SP))return ImageFormat.NV21;if (format.equals(PIXEL_FORMAT_YUV422I))return ImageFormat.YUY2;if (format.equals(PIXEL_FORMAT_YUV420P))return ImageFormat.YV12;if (format.equals(PIXEL_FORMAT_RGB565))return ImageFormat.RGB_565;if (format.equals(PIXEL_FORMAT_JPEG))return ImageFormat.JPEG;return ImageFormat.UNKNOWN;}

这里面出现了很多的格式:
YV12 YUY2 NV16 YUV422SP YUV420SP 等等;详细解释请参看:Camera理论知识和基本原理【7】图像表示方式和存储格式

4. preview-frame-rate

已废弃,参考【5. preview-fps-range】

5. preview-fps-range

说明: preview - fps
相关KEY preview-fps-range
preview-fps-range-values
方法 public List<int[]> getSupportedPreviewFpsRange()
public void getPreviewFpsRange(int[] range)
public void setPreviewFpsRange(int min, int max)

5.1 说明

preview-fps-range通过如下函数设置camera1预览的fps范围:

/*** Sets the minimum and maximum preview fps. This controls the rate of* preview frames received in {@link PreviewCallback}. The minimum and* maximum preview fps must be one of the elements from {@link* #getSupportedPreviewFpsRange}.** @param min the minimum preview fps (scaled by 1000).* @param max the maximum preview fps (scaled by 1000).* @throws RuntimeException if fps range is invalid.* @see #setPreviewCallbackWithBuffer(Camera.PreviewCallback)* @see #getSupportedPreviewFpsRange()*/public void setPreviewFpsRange(int min, int max) {set(KEY_PREVIEW_FPS_RANGE, "" + min + "," + max);}

分析:

  1. 最大,最小,是个范围
  2. scale 1000倍数
  3. 必须是getSupportedPreviewFpsRange 返回的值
  4. 影响Camera.PreviewCallback-> onPreviewFrame的调用频率

5.2 举例

通过如下可获取当前preview-range

int[] previewRange = new int[2];
mCameraParameters.getPreviewFpsRange(previewRange);

相机默认会返回[5000, 30000],注意minValue和maxValue不是一致的。这里给出一个范围,实际相机会自动根据摄像头设备捕捉不同场景去自动调节对应的FPS。如果一直不移动,Camera会降低onPreviewFrame回掉的频率,即fps会降低。

我们可通过如下函数获取当前设备支持的preview-range-values。然后设置不同的值:

public List<int[]> getSupportedPreviewFpsRange() {String str = get(KEY_PREVIEW_FPS_RANGE + SUPPORTED_VALUES_SUFFIX);return splitRange(str);
}

public void setPreviewFpsRange(int min, int max)的参数一定要是相机支持的参数

实际运行调用getSupportedPreviewFpsRange输出具体的值为:

SupportedPreviewFrameRates = [10000, 10000]
SupportedPreviewFrameRates = [15000, 15000]
SupportedPreviewFrameRates = [20000, 20000]
SupportedPreviewFrameRates = [5000, 30000]
SupportedPreviewFrameRates = [30000, 30000]
curPreviewFrameRates = [5000, 30000]

6. picture-size

类比preview-size

说明: 1. 当前相机预览的picture-size:如1440 * 1280
2. 通过设置该key不同的value值可以控制camera capture 拍照结果图的分辨率。
3. 相机的输出流和手机竖直成90度夹角,所以width > height
相关KEY KEY_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX
picture-size-values
KEY_PREVIEW_SIZE
preview-size
KEY_PREVIEW_SIZE + SUPPORTED_VALUES_SUFFIX
preview-size-values
方法 public Size getPictureSize()
public List getSupportedPictureSizes()
public void setPictureSize(int width, int height)
注意 1. 可以不设置
2. 如果设置一定要设置 getSupportedPictureSizes()返回的Size,不然会抛错

基本和preview-size类似,可互相参考共同了解。

7. picture-format

基本和preview-format类似,参看【3】

8. jpeg-thumbnail

说明: 1. 当前相机capture thumb 缩略图到相关参数设置。
2. 通过设置相关key不同的value值可以控制camera capture 缩略图的宽高,图片质量。
3. 相机的输出流和手机竖直成90度夹角,所以width > height
相关KEY KEY_JPEG_THUMBNAIL_SIZE
jpeg-thumbnail-size
KEY_JPEG_THUMBNAIL_WIDTH
jpeg-thumbnail-width
KEY_JPEG_THUMBNAIL_HEIGHT
jpeg-thumbnail-height
KEY_JPEG_THUMBNAIL_QUALITY
jpeg-thumbnail-quality
方法 public Size getJpegThumbnailSize()
public void setJpegThumbnailSize(int width, int height)
public Size getJpegThumbnailSize()
public List getSupportedJpegThumbnailSizes()
public void setJpegThumbnailQuality(int quality)
public int getJpegThumbnailQuality()

9. jpeg-quality

说明: 1. 当前相机capture picture 图片质量。
2. value 范围 1 - 100
方法 public void setJpegQuality(int quality)
public int getJpegQuality()
影响因素 quality越高,图片文件大小越大
quality越高,拍照性能越差
quality越高,图片质量越清楚

说明:
jpeg-quality和最终生成的jpeg图片质量有关系。 值越小,则对原始图压缩的越厉害。在不同的场景下可综合多方面因素设置不同的jpeg-quality。如:

  • 低端机,可适当调低jpeg-quality的值
  • 分辨率较低的图片也可适当调低jpeg-quality的值

10. END

后续将阐述:
【Android Camera1】Camera1 Parameters参数详解(二)—— 3A算法 (AF/AE/AWB)
【Android Camera1】Camera1 Parameters参数详解(三)—— zoom,other

【Android Camera1】Camera1 Parameters参数详解(一)—— Size (preview/picture/thumbnail)相关推荐

  1. 【Kafka】Kafka生产者producer相关参数详解batch.size linger.ms 等参数

    1.概述 生产环境中使用Kafka,参数调优非常重要,而Kafka参数众多,我们的java的Configuration代码中,经常设置的参数如下: Properties props = new Pro ...

  2. Android 系统Dimension和间距参数详解

    Android作为一个开放性的手持装置作业系统,势必面对终端显示器有多种不同规格的情况,这对程式开发者会有一定程度的困扰.  意图成为"云端的微软"的Google自然不会傻到任由开 ...

  3. Android 系统(200)---Android build.prop参数详解

    Android build.prop参数详解 前言 build.prop是Android系统中的一个重要的属性文件,它记录了Android系统运行的很多配置信息,当程序运行时需要某种系统状态时,会到该 ...

  4. Android 系统(95)---Android build.prop参数详解

    Android build.prop参数详解 前言 build.prop是Android系统中的一个重要的属性文件,它记录了Android系统运行的很多配置信息,当程序运行时需要某种系统状态时,会到该 ...

  5. Android build.prop参数详解

    前言 build.prop是Android系统中的一个重要的属性文件,它记录了Android系统运行的很多配置信息,当程序运行时需要某种系统状态时,会到该模块中进行读取,类似Window中的注册表对少 ...

  6. Android Loader 异步加载详解一:基础概念

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70241844 本文出自[赵彦军的博客] Android Loader 异步加载详解 ...

  7. Android 10.0 Activity启动详解(二)

    Android 10.0 Activity启动详解(一) 我们在上一篇博客中已经介绍了关于Activity的一些基础概念.这一篇博客我们以Android 10.0的代码来分析Activity的启动流程 ...

  8. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

  9. Retrofit 注解参数详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121000230 本文出自[赵彦军的博客] 系列文章推荐: Android Flow ...

最新文章

  1. 中国式巨婴,到底有多可怕?
  2. 数学中的span以及线性流形是什么意思
  3. EXCEL自定义的应用
  4. 渗透中寻找突破口的那些事
  5. C++常量指针this
  6. 物理化学 化学 动力学(下)
  7. 译 | 你到底有多精通 C# ?
  8. linux-basic(7)linux文件与目录管理
  9. youtube 播放列表
  10. 如何避免用动态语言的思维写Go代码
  11. mysql41 sphinx_抛弃mysql模糊查询,使用sphinx做专业索引
  12. 高通:蓝牙5.0将可同时连接两个设备
  13. linux rsync配置文件参数详解
  14. C#常见委托のdelegate定义,Func,Action,Predicate总结
  15. android textview设置大小,android – 如何缩放/调整文本大小以适应TextView?
  16. symantec linux版命令,Symantec Backup Exec Agent for Linux详细安装方法
  17. Spark机器学习(一)—Spark相关
  18. MATLAB 计算 确定系数R2
  19. socket本地通信
  20. (轉貼) LCD入門常識

热门文章

  1. C++实现Python变量
  2. 1505_TC275参考手册阅读笔记_调试系统
  3. 【图像识别】基于主成分分析算法实现人脸二维码识别matlab代码
  4. Spring-拦截器与过滤器
  5. Docker镜像讲解,教你如何自制并上传一个镜像
  6. 计算机考试打字题遇到字母怎么办,手把手为你解决win10系统打字时莫名其妙出现字母的解决方法...
  7. 计算机组成原理--存储系统
  8. gamess下载安装
  9. php实训日记200字,做实验日记200字
  10. 腾讯视频url获取方法