97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠見教育科技集團 >> 新聞動態(tài) >> Android資料 >> Android Camera原生服務架構  
 
Android Camera原生服務架構
分享到:

Android的圖像編碼,涉及的主要是Camera服務,其架構主要涉及驅動和HAL模塊、Camera原生服務,以及上層對服務的封裝和應用等3個層次的內容。下圖顯示的是Camera的軟件架構。


Camera軟件架構

1)Camera驅動和HAL模塊
    這一層次內容主要包括運行在內核空間的Camera驅動和運行在用戶空間的Camera 的HAL實現(xiàn)及接口等。開發(fā)中涉及I2C、GPIO、PMIC、VFE aDSP等。其元數(shù)據(jù)一般為YUV數(shù)據(jù)或者Bayer數(shù)據(jù)。
    2)Camera原生服務
    Camera的原生服務主要是提供Camera服務的原生服務,以及提供給上層Java部分的原生接口等。
    3)上層應用和接口
    這一層次的內容主要包括調用原生服務的Java JNI的Java接口和與用戶直接交互的UI部分。

本文主要闡述的是Camera原生服務。

Camera原生服務代碼位于frameworks\base\camera\libcameraservice和frameworks\base\ include\ui目錄下。在Android中,Camera的原生服務是基于C/S架構的。

Camera原生服務主要的文件包括:Camera.h、ICamera.h、ICameraClient.h、ICameraService.h、CameraService.cpp、CameraHardwareStub.cpp、FakeCamera.cpp等。其中FakeCamera.cpp提供了在模擬器上的Camera仿真功能。下圖顯示了Camera原生服務框架的類圖。


Camera原生服務框架類圖

其中在ICamera接口內部有兩個內部類:BpCamera和BnCamera,BnCamera為本地ICamera對象,BpCamera為遠程ICamera對象在本地進程的代理。ICameraClient為Camera原生服務的客戶端,ICameraClient定義了若干個回調函數(shù),接收服務器端傳來的拍照音、預覽、拍照、錄像的回調數(shù)據(jù)。ICameraService為Camera原生服務的服務器端接口。

在C++層,Camera原生服務和其他服務一樣,客戶端和服務器端的通信都是基于IBinder進行的。

為了使上層應用能夠利用Camera原生服務,首先需要將Camera原生服務在服務管理器中注冊。下面是Camera原生服務的注冊過程:

void CameraService::instantiate()
    {
      defaultServiceManager()->addService(String16("media.camera"), new CameraService());
    }

為了使用Camera原生服務,首先需要從服務管理器中獲得Camera原生服務的句柄。具體如下:

代碼:獲得Camera原生服務的句柄

const sp< ICameraService>& Camera::getCameraService()
    {
      Mutex::Autolock _l(mLock);
      if (mCameraService.get()==0) {
      sp< IServiceManager> sm=defaultServiceManager(); //服務管理器
      sp< IBinder> binder;
      do {
      binder=sm->getService(String16("media.camera")); //Camera原生服務
      if (binder != 0)
      break;
      LOGW("CameraService not published, waiting...");
      usleep(500000); // 0.5s
      } while(true);
      if (mDeathNotifier==NULL) {
        mDeathNotifier=new DeathNotifier();
        }
      binder->linkToDeath(mDeathNotifier);
      mCameraService=interface_cast< ICameraService>(binder);
      }
    LOGE_IF(mCameraService==0, "no CameraService!?");
    return mCameraService;
    }

另外,Camera的原生服務和Java層的原生接口實現(xiàn)位于android_hardware_Camera.cpp文件中。在Camera中,原生接口包括native_setup、native_release、setPreviewDisplay、startPreview、stopPreview、previewEnabled、setHasPreviewCallback、native_autoFocus、native_takePicture、native_setParameters、native_getParameters、reconnect、lock、unlock等。

 更多相關文章

·Android Camera錄像過程分析
·Android 原生層媒體播放過程
·Android 視頻解碼過程詳解
·Android 視頻編碼源碼分享
·Android 雙緩沖局部渲染