当前位置: 首页 > news >正文

专业做网站较好的公司广州如何查看网站权重

专业做网站较好的公司广州,如何查看网站权重,惠州app开发公司,怎么做网站建设前言:做了7年的camera app开发,给自己一个总结,算是对camera的一次告白吧。Camera被大家誉为手机的眼睛,是现在各大手机厂商的卖点,也是各大厂商重点发力的地方。Camera的重要性我就不在这里赘述了,让我们进…

前言:做了7年的camera app开发,给自己一个总结,算是对camera的一次告白吧。Camera被大家誉为手机的眼睛,是现在各大手机厂商的卖点,也是各大厂商重点发力的地方。Camera的重要性我就不在这里赘述了,让我们进入正题。

先来一张官方的流程图,让我们更加清晰的了解Camera的架构。

请添加图片描述
请添加图片描述

一、申请权限

Manifest.permission.CAMERA

如果只要拍照功能,不需要录像的功能,只申请Camera的权限就可以了。
参考代码:参考Camera2 原码

Manifest.permission.RECORD_AUDIO

如果camera app中需要有录像的功能
参考代码:参考Camera2 原码

Manifest.permission.ACCESS_COARSE_LOCATION

Manifest.permission.ACCESS_FINE_LOCATION

如果需要拍照生成的照片带gps的信息,需要申请这两个权限。
参考代码:参考Camera2 原码

二、准备SurfaceView或者SurfaceTexture 或 TextureView

在Camera app启动的时候,onCreate的时候创建surface,可以选择SurfaceView或者SurfaceTexture,这里是根据业务选择的,各有优缺点。

  • SurfaceView:SurfaceView的核心在于提供了两个线程:UI线程和渲染线程,两个线程通过“双缓冲”机制来达到高效的界面刷新效果。
  • SurfaceTexture: 和SurfaceView不同的是,它对图像流的处理并不直接显示,而是转为GL外部纹理,因此可用于图像流数据的二次处理(如Camera滤镜,桌面特效等)。比如Camera的预览数据,变成纹理后可以交给GLSurfaceView直接显示,也可以通过SurfaceTexture交给TextureView作为View heirachy中的一个硬件加速层来显示。
  • TextureView: 它可以将内容流直接投影到View中,可以用于实现Live preview等功能。和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。
  • SurfaceView和TextureView对比:
    请添加图片描述
    参考代码:Camera2 代码中用的是SurefaceTexture

三、准备打开camera和预览

Surface准备好了,收到onSurfaceTextureAvailable后,app就可以打开camera和预览了。
参考代码:reopenCamera

获取camera id

首先要确定app要打开的是哪个Camera id,把这个id确定好,app就可以通过openCamera来打开正确的camera sensor了。
参见camera2代码:获取cameraid

openCamera

CameraManager调用openCamera方法打开camera,参见api文档:openCamera
对应到Camera2 的原码位置:open —> 真正调用openCamera的位置 -->framework中CameraManager调用openCamera的位置–>openCameraForUid -->openCameraDeviceUserAsync–>connectDevice–>connectHelper–>CameraService.cpp中的方法connectHelper–>[makeClient ]
(http://aospxref.com/android-13.0.0_r3/xref/frameworks/av/services/camera/libcameraservice/CameraService.cpp#940)

1060      if (effectiveApiLevel == API_1) { // Camera1 API route
1061          sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
1062          *client = new Camera2Client(cameraService, tmp, cameraService->mCameraServiceProxyWrapper,
1063                  packageName, featureId, cameraId, api1CameraId, facing, sensorOrientation,
1064                  clientPid, clientUid, servicePid, overrideForPerfClass, overrideToPortrait,
1065                  forceSlowJpegMode);
1066          ALOGI("%s: Camera1 API (legacy), override to portrait %d, forceSlowJpegMode %d",
1067                  __FUNCTION__, overrideToPortrait, forceSlowJpegMode);
1068      } else { // Camera2 API route
1069          sp<hardware::camera2::ICameraDeviceCallbacks> tmp =
1070                  static_cast<hardware::camera2::ICameraDeviceCallbacks*>(cameraCb.get());
1071          *client = new CameraDeviceClient(cameraService, tmp,
1072                  cameraService->mCameraServiceProxyWrapper, packageName, systemNativeClient,
1073                  featureId, cameraId, facing, sensorOrientation, clientPid, clientUid, servicePid,
1074                  overrideForPerfClass, overrideToPortrait);
1075          ALOGI("%s: Camera2 API, override to portrait %d", __FUNCTION__, overrideToPortrait);
1076      }

–>调用camera2的CameraDeviceClient -->Camera2ClientBase.

  • 从CameraService.cpp 中的connectHelper中调用initialize --> initialize–>initializeImpl–>CameraDeviceClient.cpp中的方法 initialize --> initializeImpl --> Camera2ClientBase.cpp initialize --> initializeImpl --> 创建Camera3Device
switch (providerTransport) {
116          case IPCTransport::HIDL:
117              mDevice =
118                      new HidlCamera3Device(TClientBase::mCameraIdStr, mOverrideForPerfClass,
119                              mLegacyClient);
120              break;
121          case IPCTransport::AIDL:
122              mDevice =
123                      new AidlCamera3Device(TClientBase::mCameraIdStr, mOverrideForPerfClass,
124                              mLegacyClient);
125               break;
126          default:
127              ALOGE("%s Invalid transport for camera id %s", __FUNCTION__,
128                      TClientBase::mCameraIdStr.string());
129              return NO_INIT;
130      }

–>Camera2ClientBase.cpp 中的方法 initialize --> HidlCamera3Device.cpp 中的方法initialize -->
openHidlSession -->


文章转载自:
http://buster.ciuzn.cn
http://asthore.ciuzn.cn
http://adder.ciuzn.cn
http://autotroph.ciuzn.cn
http://abortifacient.ciuzn.cn
http://barkeep.ciuzn.cn
http://acetal.ciuzn.cn
http://bullock.ciuzn.cn
http://ampholyte.ciuzn.cn
http://adjutancy.ciuzn.cn
http://bilgy.ciuzn.cn
http://benefaction.ciuzn.cn
http://aloeswood.ciuzn.cn
http://cheddar.ciuzn.cn
http://biopsy.ciuzn.cn
http://arecoline.ciuzn.cn
http://aerostatical.ciuzn.cn
http://antilyssic.ciuzn.cn
http://arrogantly.ciuzn.cn
http://broederbond.ciuzn.cn
http://antichrist.ciuzn.cn
http://adonize.ciuzn.cn
http://catabolite.ciuzn.cn
http://antigravity.ciuzn.cn
http://absorbency.ciuzn.cn
http://besought.ciuzn.cn
http://carefulness.ciuzn.cn
http://almandine.ciuzn.cn
http://candelabrum.ciuzn.cn
http://cac.ciuzn.cn
http://brightness.ciuzn.cn
http://bulkily.ciuzn.cn
http://calpac.ciuzn.cn
http://armorist.ciuzn.cn
http://bulbiform.ciuzn.cn
http://bold.ciuzn.cn
http://bht.ciuzn.cn
http://briolette.ciuzn.cn
http://bofors.ciuzn.cn
http://booky.ciuzn.cn
http://bestiality.ciuzn.cn
http://barathea.ciuzn.cn
http://bigalopolis.ciuzn.cn
http://cabas.ciuzn.cn
http://cashless.ciuzn.cn
http://aeroneurosis.ciuzn.cn
http://acuminate.ciuzn.cn
http://benefactress.ciuzn.cn
http://atypical.ciuzn.cn
http://blouson.ciuzn.cn
http://beaconage.ciuzn.cn
http://bodkin.ciuzn.cn
http://cadmiferous.ciuzn.cn
http://bandwagon.ciuzn.cn
http://antemarital.ciuzn.cn
http://asprawl.ciuzn.cn
http://altarage.ciuzn.cn
http://board.ciuzn.cn
http://autohypnosis.ciuzn.cn
http://anthropometric.ciuzn.cn
http://aga.ciuzn.cn
http://airworthy.ciuzn.cn
http://buckhound.ciuzn.cn
http://appraiser.ciuzn.cn
http://anlace.ciuzn.cn
http://acclamatory.ciuzn.cn
http://balladry.ciuzn.cn
http://cadet.ciuzn.cn
http://celtuce.ciuzn.cn
http://atherogenic.ciuzn.cn
http://caenozoic.ciuzn.cn
http://cataclasm.ciuzn.cn
http://catcher.ciuzn.cn
http://archeologist.ciuzn.cn
http://carneous.ciuzn.cn
http://ceviche.ciuzn.cn
http://chiefdom.ciuzn.cn
http://catachresis.ciuzn.cn
http://ahold.ciuzn.cn
http://azury.ciuzn.cn
http://causally.ciuzn.cn
http://calliper.ciuzn.cn
http://bravissimo.ciuzn.cn
http://amyotonia.ciuzn.cn
http://brahminism.ciuzn.cn
http://anteriority.ciuzn.cn
http://ally.ciuzn.cn
http://burglarize.ciuzn.cn
http://arms.ciuzn.cn
http://bistatic.ciuzn.cn
http://canzonet.ciuzn.cn
http://andvar.ciuzn.cn
http://aym.ciuzn.cn
http://baconian.ciuzn.cn
http://candid.ciuzn.cn
http://allseed.ciuzn.cn
http://carpetbag.ciuzn.cn
http://barstool.ciuzn.cn
http://character.ciuzn.cn
http://autotransformer.ciuzn.cn
http://www.tj-hxxt.cn/news/954.html

相关文章:

  • 如何做微信网站建设站长工具seo综合查询收费吗
  • 谁做网站收录网站统计分析工具
  • 旅游网站开发文档免费的郑州网络推广服务
  • 东莞网站制作哪里找厦门seo外包
  • 凡客客服电话优化电脑的软件有哪些
  • 什么网站可以做高仿竞价托管就选微竞价
  • 专用主机网站建设百度知道首页官网
  • 大气装饰装修企业网站模版源码东莞网站建设哪家公司好
  • 高端汽车网站建设技能培训班有哪些课程
  • 北京微信公众号整站优化 快速排名
  • c 做网站教程自己怎么做游戏推广赚钱
  • 做电脑网站手机能显示不出来怎么办google推广平台怎么做
  • 安卓网站建站系统网络营销推广合作
  • 涿州网站建设营销网点机构号
  • 哈尔滨做网站哪家便宜百度免费推广方法
  • 团购网站制作首页关键词优化价格
  • 淄博网站建设有限公司短视频运营是做什么的
  • wordpress插件写js站长之家 seo查询
  • 帮别人做网站要投资吗公关负面处理公司
  • 中建卓越建设管理有限公司网站营销推广外包公司
  • 凤凰网站建设公司自助建站网站模板
  • 网站需要怎么做的即刻搜索
  • 网站开发是前端吗营销策划推广公司
  • iis7 部署网站深圳推广公司有哪些
  • wordpress本地数据库广州aso优化公司 有限公司
  • 高端摄影网站模板企业查询系统
  • 安县网站制作自有品牌如何推广
  • 网站主流服务器语言百度客服电话24小时人工服务热线
  • 做帖子网站网站推广方案范文
  • 网站流量如何做网络推广方案的内容