mtk平台Camera应用的全屏分析

     将摄像头的配置文件vendor/mediatek/proprietary/custom/mt6735/hal/D1/sendepfeature/xxxx_mipi_raw/config.ftbl.xxxx_mipi_raw.h

编译进系统后,选择预览大小为全屏,图片大小显示一个100万像素,拍出图片只有1280x768,

但真实的摄像头有500万像素,拍出的图片大小不应该这么小,当预览大小为4:3是,有多中图片

大小可供选择,照片大小正常.该应用的全屏为什么不对呢.

vendor/mediatek/proprietary/packages/apps/Camera/

CameraDeviceExt.java

// TODO
    @Override
    public void setPreviewSize() {
        String pictureRatio = mPreferences.getString(SettingConstants.KEY_PICTURE_RATIO, null); 
        if (pictureRatio == null) {  //刷机第一次跑
            List<String> supportedRatios = SettingUtils.buildPreviewRatios(mActivity,
                    mParametersExt);
            if (supportedRatios != null && supportedRatios.size() > 0) {
                SharedPreferences.Editor editor = mPreferences.edit();
                String ratioString = supportedRatios.get(supportedRatios.size() - 1);
      		  editor.putString(SettingConstants.KEY_PICTURE_RATIO, ratioString);
                editor.apply();
                pictureRatio = ratioString;
            }
        }
        SettingUtils.setPreviewSize(mActivity, mParametersExt, pictureRatio);

        String pictureSize = mPreferences.getString(SettingConstants.KEY_PICTURE_SIZE, null);
        int limitedResolution = SettingUtils.getLimitResolution();
        if (limitedResolution > 0) {
            int index = pictureSize.indexOf('x');
            int width = Integer.parseInt(pictureSize.substring(0, index));
            int height = Integer.parseInt(pictureSize.substring(index + 1));
            if (width * height > limitedResolution) {
                pictureSize = null;
            }
        }
        if (pictureSize == null) {
            List<String> supportedSizes = SettingUtils
                    .buildSupportedPictureSizeByRatio(mParametersExt, pictureRatio);
            SettingUtils.sortSizesInAscending(supportedSizes);
            Log.i(TAG, "limitedResolution:" + limitedResolution);
            if (limitedResolution > 0) {
                SettingUtils.filterLimitResolution(supportedSizes);
            }

            if (supportedSizes != null && supportedSizes.size() > 0) {
                pictureSize = supportedSizes.get(supportedSizes.size() - 1);
                SharedPreferences.Editor editor = mPreferences.edit();
                editor.putString(SettingConstants.KEY_PICTURE_SIZE, pictureSize);
                editor.apply();

            }
        }
        Point ps = SettingUtils.getSize(pictureSize);
        mParametersExt.setPictureSize(ps.x, ps.y);
    }

String pictureRatio = mPreferences.getString(SettingConstants.KEY_PICTURE_RATIO, null);

这里读上次的值,所有调试的时候要将/data/data/com.mediatek.camera/shared_prefs删掉,否则看不到打印信息

SettingUtils.java

    public static List<String> buildPreviewRatios(Context context, Parameters parameters) {
        List<String> supportedRatios = new ArrayList<String>();
        String findString = null;
        if (context != null && parameters != null) {
            // Add standard preview ratio.
            supportedRatios.add(getRatioString(4d / 3));

            mCurrentFullScreenRatio = findFullscreenRatio(context);
            List<String> fullScreenPictureSizes = buildSupportedPictureSizeByRatio(parameters,
                    getRatioString(mCurrentFullScreenRatio));
            // Add full screen ratio if platform has full screen ratio picture sizes.
            if (fullScreenPictureSizes.size() > 0) {
                findString = getRatioString(mCurrentFullScreenRatio);
                if (!supportedRatios.contains(findString)) {
                    supportedRatios.add(findString);
                }
            }
        }
        Log.d(TAG, "buildPreviewRatios(" + parameters + ") add supportedRatio " + findString);
        return supportedRatios;
    }


public static final double[] RATIOS = new double[] { 1.3333, 1.5, 1.6667, 1.7778 };    
public static double findFullscreenRatio(Context context) {
        double find = 4d / 3;
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        Point point = new Point();
        display.getRealSize(point);
        mFullScreenWidth = point.x;
        mFullScreenHeight = point.y;

        double fullscreen;
        if (point.x > point.y) {
            fullscreen = (double) point.x / point.y;
        } else {
            fullscreen = (double) point.y / point.x;
        }
        Log.i(TAG, "fullscreen = " + fullscreen + " x = " + point.x + " y = " + point.y);
        for (int i = 0; i < RATIOS.length; i++) {
            if (Math.abs(RATIOS[i] - fullscreen) < Math.abs(fullscreen - find)) {
                find = RATIOS[i];
            }
        }
        Log.d(TAG, "findFullscreenRatiom, return ratio:" + find);
        return find;
    }

从源码看就是从4:3,5:3,3:2,16:9中找出最接近屏幕的屏比,那么在摄像头的配置文件中添加相应比例

的图片大小即可,注意不要超过摄像头像素,否则第三方应用获取到的摄像头分辨率(所有图片大小

中最大的一个对应的像素)不对.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MTK平台上的camera驱动教学课程旨在教授学员有关MTK平台上如何编写、安装和调试camera驱动程序的知识和技能。在这门课程中,学员将学习如何使用MTK平台提供的相应工具和接口来开发和优化camera驱动,以实现更好的图像质量和性能。 课程的内容包括以下几个方面: 1. 理论知识:学员将了解摄像头驱动的基本原理和工作原理,包括硬件架构、设备驱动接口和底层算法等。 2. 驱动开发环境搭建:学员将学习如何在MTK平台上搭建合适的开发环境,包括操作系统、编译器和调试工具等。 3. 驱动编写:学员将学习如何编写MTK平台上的camera驱动程序,包括设备初始化、图像采集和处理等功能的实现。 4. 驱动安装与调试:学员将学习如何将开发好的驱动程序安装到MTK平台上,并进行调试和优化,以确保驱动的稳定性和性能。 5. 实践项目:学员将完成一个实际的项目,如编写一个简单的camera应用程序或实现某种特定的图像处理算法,以应用所学知识并提升实践能力。 通过这门课程,学员将掌握MTK平台camera驱动开发的基本技能,能够独立完成camera驱动的编写、安装和调试工作,并具备进一步深入研究和优化的能力。这对于从事手机软件开发、图像处理等领域的工程师和研究人员来说,将是一门非常实用和重要的课程。 ### 回答2: MTK平台Camera驱动教学课程是针对使用MTK芯片的开发人员设计的一门课程。该课程旨在教授学员有关MTK平台Camera驱动的基础知识、开发技巧和调试方法。 首先,课程将介绍MTK平台和其特点,帮助学员了解MTK芯片及其应用领域。接下来,课程将重点讲解Camera驱动的原理和工作机制,涵盖Camera传感器的工作原理、图像采集和处理流程等方面的知识。 课程还将介绍Camera驱动的开发环境和工具,如MTK平台上的Camera HAL层和相应的调试工具。学员将学会如何配置和编译Camera驱动,以及如何使用调试工具进行驱动的调试和性能优化。 除了理论知识的讲解,课程还将通过实例演示和实践操作帮助学员掌握Camera驱动的开发技巧。学员将有机会参与实际的Camera驱动开发项目,通过实践来加深对课程知识的理解和应用能力。 总结起来,MTK平台Camera驱动教学课程旨在提供一套系统化的学习资源,帮助学员全面了解和掌握MTK平台上的Camera驱动开发。通过学习这门课程,学员将能够独立进行MTK平台Camera驱动的开发和调试工作,从而为MTK芯片应用的开发和优化提供支持。 ### 回答3: MTK平台CMOS摄像头驱动开发是一门与软硬件结合紧密的技术课程。首先,学习者需要熟悉MTK平台的基本知识,包括芯片结构、嵌入式系统以及Linux操作系统的基本原理。其次,学习者需要了解摄像头工作原理和常用的摄像头传感器类型,例如CMOS和CCD传感器。在掌握这些基础知识后,学习者可以开始学习MTK平台上的摄像头驱动开发。 在开发摄像头驱动时,学习者需要掌握如何通过MTK平台提供的驱动接口与摄像头硬件进行通信。这包括配置摄像头的分辨率、帧率、曝光时间以及白平衡等参数。此外,还需要了解如何处理摄像头的数据传输和处理,例如图像的压缩、旋转、镜像等操作。 在学习过程中,学习者可以通过阅读相关的文档和资料,参考MTK平台提供的示例代码来加深理解。同时,实际动手开发和调试也是非常重要的,可以通过连接MTK平台开发板和摄像头来调试和验证自己的驱动代码。学习者还可以通过与其他开发者交流和分享经验,提升自己的开发能力。 总之,MTK平台摄像头驱动开发是一门需要结合软硬件知识的综合性课程,通过学习掌握相关的理论知识和实践经验,可以帮助学习者深入了解摄像头驱动的工作原理和开发流程,提高自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值