记录MTK_Cam的Log

1.MtkCam/devicemgr
vendor\mediatek\proprietary\hardware\mtkcam\module_hal\devicemgr\CamDeviceManagerBase.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\devicemgr\CamDeviceManagerImp.cpp
1.1-CamDeviceManagerBase.cpp 
1.2-CamDeviceManagerBase.enumDevice.cpp 
1.3-CamDeviceManagerBase.openDevice.cpp
1.4-CamDeviceManagerBase.platform.cpp 
1.5-CamDeviceManagerImp.cpp
1.A  
Log分析:
MtkCam/devicemgr: [getDeviceInfo] deviceId:0 device_version:0x100 facing:0 orientation:90

源码:
1.A1  Log对应代码
CamDeviceManagerBase.cpp  getDeviceInfo(int const deviceId, camera_info& rInfo)
{
sp<EnumInfo> pEnumInfo = mEnumMap.valueFor(deviceId); // 通过deviceId(0 或者 1)传给mEnumMap 得到 EnumInfo ,这个对象含有Camera数据
rInfo.device_version= pEnumInfo->uDeviceVersion;
rInfo.facing        = pEnumInfo->iFacing;
rInfo.orientation   = pEnumInfo->iWantedOrientation;
rInfo.static_camera_characteristics = pEnumInfo->pMetadata;
MY_LOGD("deviceId:%d device_version:0x%x facing:%d orientation:%d", deviceId, rInfo.device_version, rInfo.facing, rInfo.orientation);
}

typedef android::DefaultKeyedVector<int32_t, android::sp<EnumInfo> > EnumInfoMap_t;
EnumInfoMap_t   mEnumMap【DefaultKeyedVector<int32_t, android::sp<EnumInfo> >】;

    class EnumInfo : public android::RefBase
    {
    public:    
        uint32_t                        uDeviceVersion;         //  Device Version 设备号(CAMERA_DEVICE_API_VERSION_X_X) 
        camera_metadata const*          pMetadata;              //  Device Metadata.设备信息
        int32_t                         iFacing;                //  Device Facing Direction. 0后置摄像头  1前置摄像头
        int32_t                         iWantedOrientation;     //  Device Wanted Orientation.预览界面的朝向 0 90 180 270
        int32_t                         iSetupOrientation;      //  Device Setup Orientation. 初始化朝向
    public:    ~EnumInfo();  EnumInfo();
    };

typedef uint32_t metadata_uptrdiff_t;
typedef uint32_t metadata_size_t;

struct camera_metadata { // 里面的数据 全都是 uint32_t类型
    metadata_size_t          size;
    uint32_t                 version;
    uint32_t                 flags;
    metadata_size_t          entry_count;
    metadata_size_t          entry_capacity;
    metadata_uptrdiff_t      entries_start; // Offset from camera_metadata
    metadata_size_t          data_count;
    metadata_size_t          data_capacity;
    metadata_uptrdiff_t      data_start; // Offset from camera_metadata
    uint8_t                  reserved[];
};


1.A2  mEnumMap里面的 EnumInfo 数据来源
int32_t CamDeviceManagerImp:: enumDeviceLocked()  // 为 EnumInfoMap_t   mEnumMap 添加了数据
{
    status_t status = OK;
    int32_t i4DeviceNum = 0;
    mEnumMap.clear();
	
	IHalSensorList*const pHalSensorList = IHalSensorList::get(); //  获得 IHalSensorList 对象
    size_t const sensorNum = pHalSensorList->searchSensors();  // 从 IHalSensorList 获得 Sensor传感器的数量
	
    mEnumMap.setCapacity(sensorNum+1); // 设置Map能填充 sensorNum+1 个数据Item 因为传感器编号从0开始?
	
    for (size_t i = 0; i < sensorNum; i++)   // 遍历 填充 mEnumMap
    {
        int32_t const deviceId = i;
        sp<EnumInfo> pInfo = new EnumInfo;
        mEnumMap.add(deviceId, pInfo); // 填充mEnumMap 接下来填充 pInfo 对应的数据
		
        sp<IMetadataProvider> pMetadataProvider = IMetadataProvider::create(deviceId);
        NSMetadataProviderManager::add(deviceId, pMetadataProvider.get());// 获得对应deviceid的元数据信息 用于填充EnumInfo
		
		pInfo->uDeviceVersion       = pMetadataProvider->getDeviceVersion(); // 填充DeviceVersion
		pInfo->iFacing  = (pMetadataProvider->getDeviceFacing() == MTK_LENS_FACING_FRONT) ? CAMERA_FACING_FRONT: CAMERA_FACING_BACK;
		pInfo->iWantedOrientation   = pMetadataProvider->getDeviceWantedOrientation();
        pInfo->iSetupOrientation    = pMetadataProvider->getDeviceSetupOrientation();
		i4DeviceNum++;
	}
}

1.A3  IMetadataProvider 里面 MetadataProvider 的数据来源
        sp<IMetadataProvider> pMetadataProvider = IMetadataProvider::create(deviceId);
        NSMetadataProviderManager::add(deviceId, pMetadataProvider.get()); 对应
		
camera_metadata*                mpStaticCharacteristics;
IMetadata                       mpHALMetadata;
IMetadataProvider*  IMetadataProvider::create(int32_t const   i4OpenId)
{
MetadataProvider* p = new MetadataProvider(i4OpenId);
p->onCreate();

    IMetadataTagSet mtagInfo;
    setTagInfo(mtagInfo); // 根据 IMetadataTagSet 获得 IMetadataConverter 用于解析? 定义了宏 _IMP_TAGCONVERT_  使用宏填充数据 
    sp<IMetadataConverter> pMetadataConverter = IMetadataConverter::createInstance(mtagInfo);
	// 使用 IMetadataConverter 初始化 camera_metadata 和 IMetadata
    status = constructStaticMetadata(pMetadataConverter, mpStaticCharacteristics, mpHALMetadata);
}

//entryFor 传递了一个 MTK_SENSOR_INFO_FACING 返回了一个集合  获得它的第一个值,并明确了这个值的类型
// 其中  D:\Coding\vendor\mediatek\proprietary\hardware\include\mtkcam\metadata\client\TagMap.h 定义了 MTK_SENSOR_INFO_FACING 使用了宏

 #define ADD_ALL_MEMBERS \    ## 在   setTagInfo 使用了这个宏 添加数据到 IMetadataTagSet
   _IMP_TAGCONVERT_(    ANDROID_LENS_FACING,    MTK_SENSOR_INFO_FACING)\

static
bool MetadataProvider::setTagInfo(IMetadataTagSet &rtagInfo)
{
    #define _IMP_SECTION_INFO_(...)
    #undef  _IMP_TAG_INFO_
    #define _IMP_TAG_INFO_(_tag_, _type_, _name_) \
        rtagInfo.addTag(_tag_, _name_, Type2TypeEnum<_type_>::typeEnum);  // 定义了宏 那么在mtk_metadata_tag_info.inl一定引用了宏
    #include <mtkcam/metadata/client/mtk_metadata_tag_info.inl>
    #undef  _IMP_TAG_INFO_


    #undef _IMP_TAGCONVERT_
    #define _IMP_TAGCONVERT_(_android_tag_, _mtk_tag_) \
        rtagInfo.addTagMap(_android_tag_, _mtk_tag_);
    #if (PLATFORM_SDK_VERSION >= 21)
    ADD_ALL_MEMBERS;  // 调用 TagMap.h 定义的宏  由于已经定义了 _IMP_TAGCONVERT_ 所以执行  rtagInfo.addTagMap 方法
    #endif

    #undef _IMP_TAGCONVERT_

    return MTRUE;
}


int MetadataProvider::getDeviceFacing() const
{
    return mpHALMetadata.entryFor(MTK_SENSOR_INFO_FACING).itemAt(0, Type2Type< MUINT8 >());
}
		
uint32_t MetadataProvider::getDeviceVersion() const
{
    return mpHALMetadata.entryFor(MTK_HAL_VERSION).itemAt(0, Type2Type< MINT32 >()); 
}

1.A4  <mtkcam/metadata/client/mtk_metadata_tag_info.inl> 文件包含的东西
定义了宏  _IMP_SECTION_INFO_
    #define _IMP_SECTION_INFO_(_section_, _name_) \
        template <> struct MetadataSectionInfo<_section_> { \
            enum \
            { \
                SECTION_START = _section_##_START, \
                SECTION_END   = _section_##_END, \
            }; \
        };
使用了宏 _IMP_SECTION_INFO_
_IMP_SECTION_INFO_(MTK_SENSOR,              "mtk.sensor")
_IMP_SECTION_INFO_(MTK_SENSOR_INFO,         "mtk.sensor.info")
_IMP_SECTION_INFO_(MTK_HAL_INFO,            "mtk.hal.info")
就是定义了对于各个 MetadataSectionInfo<?>的结构体 比如第一个  _IMP_SECTION_INFO_(MTK_SENSOR,              "mtk.sensor") 得到
struct MetadataSectionInfo<MTK_SENSOR> { 
enum {  SECTION_START = MTK_SENSOR_START, SECTION_END   = MTK_SENSOR_END, }; 
};


_IMP_TAG_INFO_( MTK_SENSOR_INFO_ORIENTATION, MINT32,     "orientation")
_IMP_TAG_INFO_( MTK_SENSOR_INFO_FACING, MUINT8,     "facing")
_IMP_TAG_INFO_( MTK_SENSOR_INFO_FRAME_RATE, MINT32,     "frameRate")

在  MetadataProvider::setTagInfo方法中使用了宏
    #define _IMP_TAG_INFO_(_tag_, _type_, _name_) rtagInfo.addTag(_tag_, _name_, Type2TypeEnum<_type_>::typeEnum);
那么 _IMP_TAG_INFO_( MTK_SENSOR_INFO_ORIENTATION, MINT32,     "orientation") 
就是 IMetadataTagSet rtagInfo.addTag(MTK_SENSOR_INFO_ORIENTATION,MINT32,"orientation");

DefaultKeyedVector<MUINT32, sp<TagInfo> > mTagInfoMap;
IMetadataTagSet::addTag(MUINT32 tag, char const* name, MINT32 typeEnum)
{
mTagInfoMap.add(tag, new TagInfo(tag, name, typeEnum));
}

class TagInfo : public virtual RefBase
{
public:
    MUINT32  mTag; String8 mName; MINT32  mTypeEnum;
    TagInfo(MUINT32 const tag,char const* name,MINT32 const typeEnum): mTag(tag), mName(name), mTypeEnum(typeEnum){}
    MUINT32                 tag() const         { return mTag; }
    char const*             name() const        { return mName.string(); }
    MINT32                  typeEnum() const    { return mTypeEnum; }
};


1.A5 方法 IMetadataProvider::constructStaticMetadata 解析
status_t MetadataProvider::
constructStaticMetadata(sp<IMetadataConverter> pConverter, camera_metadata*& rpDstMetadata, IMetadata& mtkMetadata)
{
IMetadata sensorMetadata = IHalSensorList::get()->queryStaticInfo(mInfo.getDeviceId()); // 从IHalSensorList 获得 IMetadata
    for (size_t i = 0; i < sensorMetadata.count(); i++)
    {
        IMetadata::Tag_t mTag = sensorMetadata.entryAt(i).tag();
        mtkMetadata.update(mTag, sensorMetadata.entryAt(i)); // 往参数 IMetadata mtkMetadata 添加数据
    }
	pConverter->convert(mtkMetadata, rpDstMetadata); 调用参数pConverter 的方法继续对 IMetadata 和 camera_metadata 处理
}

 NSCam::ICamDeviceManager*       mpDeviceManager;    // 【"MtkCam/devicemgr"】 device manager

与CameraService往下调用的顺序

DefaultCam1Device 应该是通过 Cam1Device 的形式提供给外部使用
Cam1DeviceBase.h   { 与上层的关系
 NSCam::ICamDeviceManager*       mpDeviceManager;    // 【"MtkCam/devicemgr"】 device manager.
}

 
 
【1】 CameraService.cpp
{
camera_module_t *mModule = NULL;
//camera_device_t *mDevice = NULL;  不包含 camera_device_t

class Client : public BnCamera, public BasicClient   // Client内部类接口 是具体的做事的类 它的实现类是CameraClirnt 
{
	virtual status_t      startPreview() = 0;
	virtual status_t      startRecording() = 0;
}

void CameraService::onFirstRef()
{       // CameraHardwareInterface 包含  camera_device_t
        CameraHardwareInterface* mHardware = new CameraHardwareInterface(camera_device_name);
        mHardware->initialize(&mModule->common);	
}
}


【2】CameraClient
class CameraClient : public CameraService::Client  
// CameraClient 是 CameraService内部类 Client的实现 他能调用到CameraService的资源
{
sp<CameraHardwareInterface>     mHardware;   // 含有CameraHardwareInterface的实现类
CameraClient(){  // 构造器中就 创建了 CameraHardwareInterface 的实例
    char camera_device_name[10];
    mHardware = new CameraHardwareInterface(camera_device_name); // 对应  CameraHal.cpp
    res = mHardware->initialize(&module->common);
}
mHardware->getParameters();
mHardware->takePicture();
mHardware->sendCommand();
mHardware->setParameters(p);
}


【3】 CameraHardwareInterface.h
class CameraHardwareInterface : public virtual RefBase {
camera_device_t *mDevice;
    status_t initialize(hw_module_t *module)
    { // 调用了 CameraService传来的camera_module_t 初始化了 camera_device_t
	// 然后都是对外提供 mDevice->ops->methodXXX 例如:mDevice->ops->auto_focus  mDevice->ops->take_picture
cameraModule->open_legacy(module, mName.string(),CAMERA_DEVICE_API_VERSION_1_0,(hw_device_t **)&mDevice);
	}
	
    status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) // 通过mDevice 执行具体操作
    {
        if (mDevice->ops->send_command)  return mDevice->ops->send_command(mDevice, cmd, arg1, arg2);
        return INVALID_OPERATION;
    }
}


【4】CameraHal_Module.cpp   Hal层为上层提供的接口    CameraHardwareInterface 中的 
mDevice->ops->auto_focus     mDevice->ops->take_picture .... 都调用到这里

static struct hw_module_methods_t camera_module_methods = {
        .open = camera_device_open
};

int camera_device_open(const hw_module_t* module, const char* name,hw_device_t** device)
{
		ti_camera_device_t* camera_device = NULL;
		camera_device_ops_t* camera_ops = NULL;
		
		// 定义了结构体 ti_camera_device_t 里面的 camera_device_ops_t 方法集合 和当前的方法一一映射
        camera_ops->auto_focus = camera_auto_focus; 
        camera_ops->cancel_auto_focus = camera_cancel_auto_focus;
		
// 定义了 CameraHardwareInterface 对应的mDevice->ops->take_picture  对应的本地方法
        camera_ops->take_picture = camera_take_picture;  
        camera_ops->cancel_picture = camera_cancel_picture;
        camera_ops->start_preview = camera_start_preview;
        camera_ops->stop_preview = camera_stop_preview;
        camera_ops->start_recording = camera_start_recording;
        camera_ops->stop_recording = camera_stop_recording;
		camera = new android::CameraHal(cameraid); // 创建CameraHal
        gCameraHals[cameraid] = camera;
}

static android::CameraHal* gCameraHals[MAX_CAMERAS_SUPPORTED];



int camera_take_picture(struct camera_device * device)
{
    int rv = -EINVAL;
    ti_camera_device_t* ti_dev = NULL;
    if(!device)  return rv;
    ti_dev = (ti_camera_device_t*) device;
    rv = gCameraHals[ti_dev->cameraid]->takePicture(); // gCameraHals[ti_dev->cameraid] 返回的是一个CameraHal
    return rv;
}





【5】 
CameraHal.h  (hardware\ti\omap4xxx\camera\inc):    
//This class implements the interface methods defined in CameraHardwareInterface
// 这个类 实现了在  CameraHardwareInterface.h 文件中定义的方法接口
//  CameraHal.cpp  This file maps the Camera Hardware Interface to V4L2.
class CameraHal{ // CameraHal实现了CameraHardwareInterface接口被CameraClient 使用到 它是通过实现V4L2接口方式与驱动交互
    CameraAdapter *mCameraAdapter;  //主要通过 CameraAdapter的sendCommand方法与驱动交互?
    sp<AppCallbackNotifier> mAppCallbackNotifier;
    sp<DisplayAdapter> mDisplayAdapter;
    sp<MemoryManager> mMemoryManager;
    sp<IMemoryHeap> mPictureHeap;
    void* mCameraAdapterHandle;
    CameraParameters mParameters;
	Camera **mCameras; // 一个Camera数组?
	
// 同硬件打交道 使用 mCameraAdapter 方法
ret = mCameraAdapter->sendCommand(CameraAdapter::CAMERA_START_IMAGE_CAPTURE);
mCameraAdapter->sendCommand(CameraAdapter::CAMERA_STOP_IMAGE_CAPTURE);
mCameraAdapter->sendCommand(CameraAdapter::CAMERA_START_VIDEO);
}


搜索日志:
CameraHal.h (omap4-aah\camera\inc):This class implements the interface methods defined in CameraHardwareInterface
CameraHal.h (omap4xxx\camera\inc):This class implements the interface methods defined in CameraHardwareInterface
CameraHal.cpp (hardware\ti\omap4-aah\camera):* This file maps the Camera Hardware Interface to V4L2.
CameraHal.cpp (hardware\ti\omap4xxx\camera):* This file maps the Camera Hardware Interface to V4L2.
CameraHal_Module.cpp (hardware\ti\omap4-aah\camera):* This file maps the Camera Hardware Interface to V4L2.
CameraHal_Module.cpp (hardware\ti\omap4xxx\camera):* This file maps the Camera Hardware Interface to V4L2.
General3A_Settings.h (hardware\ti\omap4-aah\camera\inc):* This file maps the Camera Hardware Interface to OMX.
General3A_Settings.h (hardware\ti\omap4xxx\camera\inc):* This file maps the Camera Hardware Interface to OMX.
OMXCameraAdapter.cpp (hardware\ti\omap4-aah\camera\OMXCameraAdapter):This file maps the Camera Hardware Interface to OMX.
OMXCameraAdapter.cpp (hardware\ti\omap4xxx\camera\OMXCameraAdapter):This file maps the Camera Hardware Interface to OMX.


【6】CameraAdapter (CameraHal.h)
class CameraAdapter: public FrameNotifier, public virtual RefBase
{
enum AdapterActiveStates {INTIALIZED_ACTIVE =1<<0,PREVIEW_ACTIVE=1<< 2,CAPTURE_ACTIVE =1<<4,VIDEO_ACTIVE =1<<8}
enum CameraCommands{CAMERA_START_PREVIEW=0,CAMERA_START_VIDEO=2,CAMERA_START_IMAGE_CAPTURE=4}
enum AdapterState {VIDEO_STATE = VIDEO_ACTIVE | PREVIEW_ACTIVE | INTIALIZED_ACTIVE,} // 各个位AdapterActiveStates的集合

CameraAdapter* mCameraAdapter = CameraAdapter_Factory(sensor_index); // 创建CameraAdapter
}

CameraAdapter 有两个实现 一个通过 V4L2 方式 一种通过 OMX 方式 与驱动交互  // 因为有参数 所以这里是 OMXCameraAdapter
搜索日志:
OMXCameraAdapter.cpp (OMXCameraAdapter):extern "C" CameraAdapter* CameraAdapter_Factory(size_t sensor_index)
V4LCameraAdapter.cpp (V4LCameraAdapter):extern "C" CameraAdapter* CameraAdapter_Factory()



class BaseCameraAdapter.cpp : public CameraAdapter // BaseCameraAdapter 实现了大多数 CameraAdapter中定义的虚函数 
{
//BaseCameraAdapter.cpp中存在空的方法 需要子类去实现这些方法
//-----------------Stub implementation of the interface ------------------------------
status_t BaseCameraAdapter::takePicture()
{ status_t ret = NO_ERROR;LOG_FUNCTION_NAME;LOG_FUNCTION_NAME_EXIT;return ret; } // 空函数

status_t BaseCameraAdapter::stopImageCapture()
{status_t ret = NO_ERROR;LOG_FUNCTION_NAME;LOG_FUNCTION_NAME_EXIT;return ret;}  // 空函数


status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, int value2, int value3)
{ //▲ 此函数在BaseCameraAdapter.cpp 实现了 子类OMXCameraAdapter不会去实现  在这个方法中 回去根据CameraCommands }
 //▲ 去调用在 BaseCameraAdapter 为空 而在子类OMXCameraAdapter 实现的方法 
}

class OMXCameraAdapter : public BaseCameraAdapter // OMXCameraAdapter 继承 BaseCameraAdapter 
{  // 定义了很多接口相关的成员
#define MIN_JPEG_QUALITY            1
#define MAX_JPEG_QUALITY            100
#define EXP_BRACKET_RANGE           10
#define FOCUS_DIST_SIZE             100
#define FOCUS_DIST_BUFFER_SIZE      500


    //Parent class method implementation   //OMXCameraAdapter.h 需要实现覆盖父类的对应方法
    virtual status_t takePicture();
    virtual status_t stopImageCapture();
    virtual status_t startBracketing(int range);
    virtual status_t stopBracketing();
    virtual status_t autoFocus();
    virtual status_t cancelAutoFocus();
    virtual status_t startSmoothZoom(int targetIdx);
    virtual status_t stopSmoothZoom();
    virtual status_t startVideoCapture();
    virtual status_t stopVideoCapture();
    virtual status_t startPreview();
    virtual status_t stopPreview();
    virtual status_t useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable);
    virtual status_t fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType);
    virtual status_t getFrameSize(size_t &width, size_t &height);
    virtual status_t getPictureBufferSize(size_t &length, size_t bufferCount);
    virtual status_t getFrameDataSize(size_t &dataFrameSize, size_t bufferCount);
    virtual status_t startFaceDetection();
    virtual status_t stopFaceDetection();
    virtual status_t switchToExecuting();
    virtual void onOrientationEvent(uint32_t orientation, uint32_t tilt);
	
	//OMXCameraAdapter 含有一个继承Thread的处理消息的线程类
	class CommandHandler : public Thread {CommandHandler(OMXCameraAdapter* ca){}}
	
	//OMXCameraAdapter 含有一个继承Thread的处理回调的线程类
	class OMXCallbackHandler : public Thread {OMXCallbackHandler(OMXCameraAdapter* ca){}}
	
	 CameraParameters mParameters;
}

OMXCameraAdapter.cpp
status_t OMXCameraAdapter::takePicture()
{
    msg.command = CommandHandler::CAMERA_START_IMAGE_CAPTURE; // 发CAMERA_START_IMAGE_CAPTURE消息给消息线程
    msg.arg1 = mErrorNotifier;
    ret = mCommandHandler->put(&msg);
}



bool OMXCameraAdapter::CommandHandler::Handler()
{
volatile int forever = 1;
 while ( forever ){
         switch ( msg.command ) {
            case CommandHandler::CAMERA_START_IMAGE_CAPTURE:
            {
			// 分文件OMXCapture.cpp的 OMXCameraAdapter 的startImageCapture 本地mCameraAdapter没有实现
                stat = mCameraAdapter【OMXCameraAdapter】->startImageCapture(); 
                break;
            }
 }
}

OMXCapture.cpp    // 调用OMX 含有的专有的函数
status_t OMXCameraAdapter::startImageCapture()
{
ret = RegisterForEvent(mCameraAdapterParameters.mHandleComp,(OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
                                        OMX_ALL,OMX_TI_IndexConfigShutterCallback,mStartCaptureSem);
										
eError = OMX_FillThisBuffer(mCameraAdapterParameters.mHandleComp,(OMX_BUFFERHEADERTYPE*)capData->mBufferHeader[index]);
eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,OMX_IndexConfigCapturing,&bOMX);
setExtraData(false, mCameraAdapterParameters.mPrevPortIndex, OMX_WhiteBalance);
}

--------------------------------------------------------------------------------------

【7】CameraHardwareInterface.h 中的cameraModule 对应不同的模块

D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
【4】D:\Coding\hardware\ti\omap4xxx\camera\CameraHal_Module.cpp

 CameraHAL.cpp  CameraHAL.h (hardware\libhardware\modules\camera):  
注意这里与上面的 【5】CameraHal.h (hardware\ti\omap4xxx\camera\inc):  不是同一个文件



如果【3】CameraHardwareInterface.h 中函数  cameraModule 对应的成员是  
 camera_module_t *cameraModule = reinterpret_cast<camera_module_t *>(module);
 该cameraModule 
 cameraModule->open_legacy(module, mName.string(),CAMERA_DEVICE_API_VERSION_1_0,(hw_device_t **)&mDevice);
 执行的open_legacy 将会是不一样的结果
 ▲1如果指向  D:\Coding\hardware\ti\omap4xxx\camera\CameraHal_Module.cpp 那么就从【4】往下
 CameraHal_Module.cpp::open_legacy
 ▲2如果指向 D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
module.h::open_legacy

那么就可以从新在这里往下走了   最终在  CamDeviceManagerBase的  sp<ICamDevice> pDevice = NULL; 就被初始化了


D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
static hw_module_methods_t* get_module_methods()
{
    static hw_module_methods_t _methods ={open: open_device}; // 指定了open方法为本地的open_device 方法
    return  &_methods;
}

// 指定了 模块open_legacy 方法对应本地的 open_legacy 方法
static camera_module get_camera_module()  {camera_module module = {open_legacy : open_legacy,};
	

▲ module.h 中  open_device 和 open_legacy 都是调用 NSCam::getCamDeviceManager()->open
D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
static int open_device(hw_module_t const* module, const char* name, hw_device_t** device)
{
    return  NSCam::getCamDeviceManager()->open(device, module, name);
}

D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
static int
open_legacy(const struct hw_module_t* module,const char* id,uint32_t halVersion,struct hw_device_t** device)
{
    return  NSCam::getCamDeviceManager()->open(device, module, id, halVersion);
}



status_t
CamDeviceManagerBase::open(hw_device_t** device,hw_module_t const* module,char const* name,uint32_t device_version){
openDeviceLocked(device, module, i4OpenId, device_version);
}

status_t
CamDeviceManagerBase::openDeviceLocked(hw_device_t** device,hw_module_t const* module,
int32_t const i4OpenId,uint32_t device_version){
 sp<ICamDevice> pDevice = NULL; //在
 pDevice = pPlatform->createCam1Device(s8ClientAppMode.string(), i4DebugOpenID);
}


 
IPlatform.cpp
virtual ICamDevice*  createCam1Device(char const*szClientAppMode, int32_t consti4OpenId) = 0;


PlatformEntry.Cam1Device.cpp
ICamDevice* PlatformEntry:: createCam1Device(char const*zClientAppMode, int32_t const i4OpenId)
{return  ::createCam1Device(String8(szClientAppMode), i4OpenId);}

	

Cam1DeviceFactory.cpp 
NSCam::Cam1Device* createCam1Device(String8 const   s8ClientAppMode, int32_t const   i4OpenId){
String8 const s8LibPath = String8::format("libcam.device1.so");
void *handle = ::dlopen(s8LibPath.string(), RTLD_GLOBAL);
NSCam::Cam1Device* pdev = NULL;
String8 const s8CamDeviceInstFactory = String8::format("createCam1Device_Default"); // 在DefaultCam1Device.cpp 实现
void* pCreateInstance = ::dlsym(handle, s8CamDeviceInstFactory.string());

pdev = reinterpret_cast<NSCam::Cam1Device* (*)
(String8 const&, int32_t const)>(pCreateInstance)(s8ClientAppMode, i4OpenId); // 通过dlsym拿到函数句柄 然后调用

}


【8】CameraHardwareInterface.h 中的cameraModule 对应 D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
那么 怎么调用
camera_device_t *mDevice;
mDevice->ops->start_preview(mDevice);
mDevice->ops->start_recording(mDevice);
mDevice->ops->send_command(mDevice, cmd, arg1, arg2);
mDevice->ops->set_parameters(mDevice,params.flatten().string());


在  Cam1Device.cpp 中存在一个用宏定义的camera_device_ops  
猜测在CameraHardwareInterface中调用的mDevice->ops->start_preview send_command  set_parameters 就是调用到这里
Cam1Device.cpp static mtk_camera_device_ops const
gCameraDevOps = 
{
    #define OPS(name) name: camera_##name

    {
        OPS(set_preview_window),    = set_preview_window: camera_set_preview_window
        OPS(set_callbacks), 
        OPS(enable_msg_type), 
        OPS(disable_msg_type), 
        OPS(msg_type_enabled), 
        OPS(start_preview), 
        OPS(stop_preview), 
        OPS(preview_enabled), 
        OPS(store_meta_data_in_buffers), 
        OPS(start_recording), 
        OPS(stop_recording), 
        OPS(recording_enabled), 
        OPS(release_recording_frame), 
        OPS(auto_focus), 
        OPS(cancel_auto_focus), 
        OPS(take_picture), 
        OPS(cancel_picture), 
        OPS(set_parameters), 
        OPS(get_parameters), 
        OPS(put_parameters), 
        OPS(send_command), 
        OPS(release), 
        OPS(dump)
    }, 
    OPS(mtk_set_callbacks),
    #undef  OPS
}; 		


Cam1Device.cpp static int camera_take_picture(struct camera_device * device)
{
    int err = -EINVAL;
	// 这个Cam1Device 对应的是 DefaultCam1Device Cam1DeviceBase 真正完成功能的类 
    Cam1Device*const pDev = Cam1Device::getDevice(device); 
    if  ( pDev )
    { err = pDev->takePicture();}
    return  err;
}

status_t Cam1DeviceBase::takePicture()
{
mpCamClient->takePicture();
mpCamAdapter->sendCommand(CAMERA_CMD_ENABLE_RAW16_CALLBACK, 1, 0);
status = mpCamAdapter->takePicture();
}

Cam1DeviceBase.h   // 对应CameraHal 也存在这里个类
 NSCam::ICamDeviceManager*       mpDeviceManager;    // 【"MtkCam/devicemgr"】 device manager.
    sp<IParamsManager>              mpParamsMgr;
    sp<ICamAdapter>                 mpCamAdapter;
    sp<ICamClient>                  mpCamClient;
    sp<IDisplayClient>              mpDisplayClient;
    Vector<sp<ICamClient> >         vmpCamClient;
	
在 Cam1DeviceBase.cpp 的构造器中
mpCamAdapter = ICamAdapter::createInstance(mDevName, mi4OpenId, mpParamsMgr);
mpDisplayClient = IDisplayClient::createInstance();
mpCamClient = ICamClient::createInstance(mpParamsMgr);
mpParamsMgr(IParamsManager::createInstance(rDevName, i4OpenId)) 
// 只有 mpDeviceManager 是通过外部设置进来的
void Cam1DeviceBase::setDeviceManager(ICamDeviceManager* manager){mpDeviceManager = manager;}


status_tCamDeviceManagerBase::openDeviceLocked(
    hw_device_t** device,hw_module_t const* module,
    int32_t const i4OpenId,uint32_t device_version
){
 pDevice【sp<ICamDevice>】->setDeviceManager(this);   // 在 open方法中设置了这个值ICamDeviceManager 到Cam1DeviceBase
}

===========================================================================



									
class Cam1DeviceBase.h{
    NSCam::ICamDeviceManager*       mpDeviceManager;  // 【"MtkCam/devicemgr"】
}

	
DefaultCam1Device 继承方法梳理
【实现】-----标识该方法在该文件被具体化实现出来
【#-】 标识的是该文件被实例具体化的文件位置 一般出现在.h 文件中


//DefaultCam1Device 继承 Cam1DeviceBase 又定义了虚函数 

class DefaultCam1Device.h【4】 : public Cam1DeviceBase  
{
CamManager* pCamMgr;
    【3】sp<IParamsManager>              mpParamsMgr; //这几个类被用来与Hal_Sensor交互?
    【3】sp<ICamAdapter>                 mpCamAdapter;
    【3】sp<ICamClient>                  mpCamClient;
    【3】sp<IDisplayClient>              mpDisplayClient;
    【3】NSCam::ICamDeviceManager*       mpDeviceManager; 
	
	
	
 【4.1#-DefaultCam1Device.cpp】virtual bool                    onUninit();
 【4.2#-DefaultCam1Device.cpp】virtual bool                    onStartPreview();
 【4.3#-DefaultCam1Device.cpp】virtual void                    onStopPreview();
 【4.4#-DefaultCam1Device.cpp】virtual bool                    powerOnSensor();
 【4.5#-DefaultCam1Device.cpp】static void*                    doThreadInit(void* arg);
 【4.6#-DefaultCam1Device.cpp】virtual bool                    waitThreadInitDone();
 【2.18#-Cam1DeviceBase.cpp #-DefaultCam1Device.cpp 】virtual status_t  setParameters(const char* params);
 【3.1#-Cam1DeviceBase.h #-DefaultCam1Device.h  】virtual int32_t   queryDisplayBufCount() const    { return 6; } 
}


class DefaultCam1Device.cpp【4】 : public Cam1DeviceBase  
{
【4.1实现】virtual bool                    onUninit();
【4.2实现】virtual bool                    onStartPreview();
【4.3实现】virtual void                    onStopPreview();
【4.4实现】virtual bool   powerOnSensor(){pHalSensorList->createSensor(USER_NAME,getOpenId()).powerOn();}
【4.5实现】static void*                    doThreadInit(void* arg);
【4.6实现】virtual bool                    waitThreadInitDone();
【2.18#-Cam1DeviceBase.cpp 实现】virtual status_t  setParameters(const char* params);
}


//Cam1DeviceBase 继承了Cam1Device的接口 实现了一部分 自己又定义了一些虚函数
class Cam1DeviceBase.h【3】 : public NSCam::Cam1Device, protected ICam1DeviceCallback 
{
    NSCam::ICamDeviceManager*       mpDeviceManager;  // 【"MtkCam/devicemgr"】

void Cam1DeviceBase::setDeviceManager(ICamDeviceManager* manager)
{
    mpDeviceManager = manager;
}

    
【3.1#-Cam1DeviceBase.h】
       virtual int32_t  queryDisplayBufCount() const    { return 3; } // 如果没有在cpp实现那么就用这里的实现
【3.2#-Cam1DeviceBase.cpp】virtual bool     queryPreviewSize(int32_t& ri4Width, int32_t& ri4Height);    
【3.3#-Cam1DeviceBase.cpp】virtual bool                    initCameraAdapter();
【3.4#-Cam1DeviceBase.cpp】virtual status_t                initDisplayClient(preview_stream_ops* window);
【3.5#-Cam1DeviceBase.cpp】virtual status_t                enableDisplayClient();
【3.6#-Cam1DeviceBase.cpp】virtual void                    disableDisplayClient();
【3.7#-Cam1DeviceBase.cpp】virtual bool                    onInit();
【3.8#-Cam1DeviceBase.cpp】virtual bool                    onUninit();
【3.9#-Cam1DeviceBase.h 实现】virtual bool                    onStartPreview()    { return true; }
【3.10#-Cam1DeviceBase.h 实现】virtual void                    onStopPreview()     {}
【3.11#-Cam1DeviceBase.cpp】virtual void  onCam1Device_NotifyCb(int32_t const   msgType,intptr_t const  ext1);

【2.2#-Cam1DeviceBase.cpp】virtual status_t                closeDevice();
【2.3#-Cam1DeviceBase.cpp】virtual status_t                initialize();
【2.4#-Cam1DeviceBase.cpp】virtual void                    uninitialize();
【2.5#-Cam1DeviceBase.cpp】virtual void                    setCallbacks(
                                        camera_notify_callback notify_cb,
                                        camera_data_callback data_cb,
                                        camera_data_timestamp_callback data_cb_timestamp,
                                        camera_request_memory get_memory,
                                        void *user
                                    );
【2.6#-Cam1DeviceBase.cpp】virtual void                    setCallbacks(
                                        mtk_camera_metadata_callback metadata_cb,
                                        void *user);
【2.7#-Cam1DeviceBase.cpp】virtual void                    enableMsgType(int32_t msgType);
【2.8#-Cam1DeviceBase.cpp】virtual void                    disableMsgType(int32_t msgType);
【2.9#-Cam1DeviceBase.cpp】virtual bool                    msgTypeEnabled(int32_t msgType);
【2.10#-Cam1DeviceBase.cpp】virtual status_t                setPreviewWindow(preview_stream_ops* window);
【2.11#-Cam1DeviceBase.cpp】virtual status_t                startPreview();
【2.12#-Cam1DeviceBase.cpp】 virtual void                    stopPreview();
【2.13#-Cam1DeviceBase.cpp】virtual bool                    previewEnabled();
【2.14#-Cam1DeviceBase.cpp】virtual status_t                startRecording();
【2.15#-Cam1DeviceBase.cpp】virtual void                    stopRecording();
【2.16#-Cam1DeviceBase.cpp】virtual status_t                takePicture();
【2.17#-Cam1DeviceBase.cpp】virtual status_t                cancelPicture();
【2.18#-Cam1DeviceBase.cpp】virtual status_t                setParameters(const char* params);
【2.19#-Cam1DeviceBase.cpp】virtual char*                   getParameters();
【2.20#-Cam1DeviceBase.cpp】virtual status_t                sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);

【1.6实现】virtual char const*             getDevName() const  { return mDevName.string(); }
【1.1实现】virtual int32_t                 getOpenId() const   { return mi4OpenId; }
【1.5实现】virtual void                    setDeviceManager(NSCam::ICamDeviceManager* manager);
	
}

class Cam1DeviceBase.cpp【3】 : public NSCam::Cam1Device, protected ICam1DeviceCallback 
{
【3.2#实现】virtual bool  queryPreviewSize(int32_t& ri4Width, int32_t& ri4Height);  
【3.3#实现】virtual bool                    initCameraAdapter();
【3.4#实现】virtual status_t                initDisplayClient(preview_stream_ops* window);
【3.5#实现】virtual status_t                enableDisplayClient();
【3.6#实现】virtual void                    disableDisplayClient();
【3.7#-实现】virtual bool                    onInit();
【3.8#-实现】virtual bool                    onUninit();
【3.9#-实现 Cam1DeviceBase.h】virtual bool                    onStartPreview()    { return true; }
【3.10#-实现 Cam1DeviceBase.h】virtual void                    onStopPreview()     {}
【3.11#-实现】virtual void  onCam1Device_NotifyCb(int32_t const   msgType,intptr_t const  ext1);

【2.2#-实现】virtual status_t                closeDevice();
【2.3#-实现】virtual status_t                initialize();
【2.4#-实现】virtual void                    uninitialize();
【2.5#-实现】virtual void                    setCallbacks(
                                        camera_notify_callback notify_cb,
                                        camera_data_callback data_cb,
                                        camera_data_timestamp_callback data_cb_timestamp,
                                        camera_request_memory get_memory,
                                        void *user
                                    );
【2.6#-实现】virtual void                    setCallbacks(
                                        mtk_camera_metadata_callback metadata_cb,
                                        void *user);
【2.7#-实现】virtual void                    enableMsgType(int32_t msgType);
【2.8#-实现】virtual void                    disableMsgType(int32_t msgType);
【2.9#-实现】virtual bool                    msgTypeEnabled(int32_t msgType);
【2.10#-实现】virtual status_t                setPreviewWindow(preview_stream_ops* window);
【2.11#-实现】virtual status_t                startPreview();
【2.12#-实现】 virtual void                    stopPreview();
【2.13#-实现】virtual bool                    previewEnabled();
【2.14#-实现】virtual status_t                startRecording();
【2.15#-实现】virtual void                    stopRecording();
【2.16#-实现】virtual status_t                takePicture();
【2.17#-实现】virtual status_t                cancelPicture();
【2.18#-实现】virtual status_t                setParameters(const char* params);
【2.19#-实现】virtual char*                   getParameters();
【2.20#-实现】virtual status_t                sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
}



class Cam1Device.h【2】 : public ICamDevice // Cam1Device 继承 ICamDevice虚函数 自己又添加了一些 纯虚函数
{

    static  inline Cam1Device*      getDevice(camera_device* device) // 对外通过 camera_device 得到实现功能的 Cam1Device
                                    {return (NULL == device)? NULL: (Cam1Device*)((device)->priv);}

    static  inline Cam1Device*      getDevice(hw_device_t* device)
                                    {return  getDevice((camera_device*)device);}
									
    virtual                         ~Cam1Device() {}
                                    Cam1Device();
【2.1#-Cam1Device.h】virtual void                    onLastStrongRef(const void* id);
	
【2.2#-Cam1DeviceBase.cpp】virtual status_t                closeDevice();
【2.3#-Cam1DeviceBase.cpp】virtual status_t                initialize();
【2.4#-Cam1DeviceBase.cpp】virtual void                    uninitialize();
【2.5#-Cam1DeviceBase.cpp】virtual void                    setCallbacks(
                                        camera_notify_callback notify_cb,
                                        camera_data_callback data_cb,
                                        camera_data_timestamp_callback data_cb_timestamp,
                                        camera_request_memory get_memory,
                                        void *user
                                    );
【2.6#-Cam1DeviceBase.cpp】virtual void                    setCallbacks(
                                        mtk_camera_metadata_callback metadata_cb,
                                        void *user);
【2.7#-Cam1DeviceBase.cpp】virtual void                    enableMsgType(int32_t msgType);
【2.8#-Cam1DeviceBase.cpp】virtual void                    disableMsgType(int32_t msgType);
【2.9#-Cam1DeviceBase.cpp】virtual bool                    msgTypeEnabled(int32_t msgType);
【2.10#-Cam1DeviceBase.cpp】virtual status_t                setPreviewWindow(preview_stream_ops* window);
【2.11#-Cam1DeviceBase.cpp】virtual status_t                startPreview();
【2.12#-Cam1DeviceBase.cpp】 virtual void                    stopPreview();
【2.13#-Cam1DeviceBase.cpp】virtual bool                    previewEnabled();
【2.14#-Cam1DeviceBase.cpp】virtual status_t                startRecording();
【2.15#-Cam1DeviceBase.cpp】virtual void                    stopRecording();
【2.16#-Cam1DeviceBase.cpp】virtual status_t                takePicture();
【2.17#-Cam1DeviceBase.cpp】virtual status_t                cancelPicture();
【2.18#-Cam1DeviceBase.cpp】virtual status_t                setParameters(const char* params);
【2.19#-Cam1DeviceBase.cpp】virtual char*                   getParameters();
【2.20#-Cam1DeviceBase.cpp】virtual status_t                sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
▲ 在 Cam1Device.cpp 中定义了 一些静态方法 调用通过静态方法调用实现功能的那个类的对应方法

【1.2实现】virtual hw_device_t const* get_hw_device() const { return &mDevice.common; }
【1.3实现】virtual void                    set_hw_module(hw_module_t const* module)
                                    {   mDevice.common.module = const_cast<hw_module_t*>(module);}
【1.4实现】virtual void                    set_module_callbacks(camera_module_callbacks_t const* callbacks)
                                    {mpModuleCallbacks = callbacks;}
									
}

class Cam1Device.cpp【2】 : public ICamDevice 
{
【2.1实现】 void                    onLastStrongRef(const void* id);
▲ 在 Cam1Device.cpp 中定义了 一些静态方法 通过静态 static 方法调用实现功能的那个类的对应方法

static int camera_send_command(struct camera_device * device,int32_t cmd, int32_t arg1, int32_t arg2)
{
    int err = -EINVAL;
    Cam1Device*const pDev = Cam1Device::getDevice(device);
    if  ( pDev ){err = pDev->sendCommand(cmd, arg1, arg2); }
    return  err;
}
对应调用  virtual status_t    sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) = 0;

static int camera_set_parameters(struct camera_device * device, const char *params)
{
    int err = -EINVAL;
    Cam1Device*const pDev = Cam1Device::getDevice(device);
    if  ( pDev ) {err = pDev->setParameters(params);}
    return  err;
}
对应调用  virtual status_t                setParameters(const char* params)       = 0;
}




class ICamDevice.h【1】 : public virtual android::RefBase   // 定义了一些纯虚函数
{
    【1.1#-Cam1DeviceBase.h】virtual int32_t                 getOpenId() const                       = 0;
    【1.2#-Cam1Device.h】virtual hw_device_t const*      get_hw_device() const                   = 0;
    【1.3#-Cam1Device.h】virtual void                    set_hw_module(hw_module_t const* module)= 0;
    【1.4#-Cam1Device.h】virtual void  set_module_callbacks(camera_module_callbacks_t const*callbacks)  = 0;	
    【1.5#-Cam1DeviceBase.h】virtual void                    setDeviceManager(ICamDeviceManager* manager) = 0;
    【1.6#-Cam1DeviceBase.h】virtual char const*             getDevName() const = 0;
}

CamDeviceManagerBase.cpp 中的Cam1Device pDevice 方法 和 HardwareInterface 一一映射

一.CameraHardwareInterface.h
cameraModule->open_legacy(module, mName.string(),CAMERA_DEVICE_API_VERSION_1_0,(hw_device_t **)&mDevice);

二.D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\module_hal\module\module.h
open_legacy(const struct hw_module_t* module,const char* id,uint32_t halVersion,struct hw_device_t** device)  
{  
    return  NSCam::getCamDeviceManager()【ICamDeviceManager CamDeviceManagerBase】
	->open(device, module, id, halVersion);  
}  
三.CamDeviceManagerImp.cpp
namespace{
CamDeviceManagerImp gCamDeviceManager; // 在CamDeviceManagerImp 构造器空完成了初始化
} 

namespace NSCam {
ICamDeviceManager* getCamDeviceManager()
{
    return  &gCamDeviceManager;
}
}

四.CamDeviceManagerBase.cpp
status_t
CamDeviceManagerBase::open(hw_device_t** device,hw_module_t const* module,char const* name,uint32_t device_version){
openDeviceLocked(device, module, i4OpenId, device_version);
}

CamDeviceManagerBase.cpp 中的pDevice 方法 和 HardwareInterface 一一映射
status_t CamDeviceManagerBase.openDevice.cpp::
openDeviceLocked(hw_device_t** device,hw_module_t const* module,int32_t const i4OpenId,uint32_t device_version)
{
IPlatform*const pPlatform = getPlatform();
pDevice = pPlatform->createCam1Device(s8ClientAppMode.string(), i4DebugOpenID);
pDevice->setDeviceManager(this)【CamDeviceManagerImp】;
}

五.IPlatform.cpp
virtual ICamDevice*  createCam1Device(char const*szClientAppMode, int32_t consti4OpenId) = 0;
PlatformEntry.Cam1Device.cpp
ICamDevice* PlatformEntry:: createCam1Device(char const*zClientAppMode, int32_t const i4OpenId)
{return  ::createCam1Device(String8(szClientAppMode), i4OpenId);}

	
六.
Cam1DeviceFactory.cpp 
NSCam::Cam1Device* createCam1Device(String8 const   s8ClientAppMode, int32_t const   i4OpenId){
String8 const s8LibPath = String8::format("libcam.device1.so");
void *handle = ::dlopen(s8LibPath.string(), RTLD_GLOBAL);
NSCam::Cam1Device* pdev = NULL;
String8 const s8CamDeviceInstFactory = String8::format("createCam1Device_Default"); // 在DefaultCam1Device.cpp 实现
void* pCreateInstance = ::dlsym(handle, s8CamDeviceInstFactory.string());

pdev = reinterpret_cast<NSCam::Cam1Device* (*)
(String8 const&, int32_t const)>(pCreateInstance)(s8ClientAppMode, i4OpenId); // 通过dlsym拿到函数句柄 然后调用

}





2.MtkCam/Cam1DeviceFactory
vendor\mediatek\proprietary\hardware\mtkcam\v1\device\Cam1DeviceFactory.cpp
2.1-Cam1DeviceFactory.cpp

3.MtkCam/Cam1Device
vendor\mediatek\proprietary\hardware\mtkcam\v1\device\Cam1Device.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\device\DefaultCam1Device.cpp StereoCam1Device.cpp
3.1-Cam1Device.cpp
3.2-Cam1DeviceBase.cpp
3.3-Cam1DeviceBase.dump.cpp
3.4-DefaultCam1Device.cpp
3.5-StereoCam1Device.cpp


4.MtkCam/HalSensorList
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\hal\sensor\custom\custom.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\hal\sensor\HalSensorList.cpp
4.1-custom.cpp
4.2-HalSensorList.buildStaticInfo.cpp
4.3-HalSensorList.cpp
4.4-HalSensorList.enumList.cpp
4.5-HalSensorList.getInfo.cpp
4.6-HalSensorList.openList.cpp

5.MtkCam/HalSensor
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\hal\sensor\HalSensor.control.cpp
5.1-HalSensor.cpp
5.2-HalSensor.control.cpp

6.MtkCam/Utils/Profile  |  MtkCam/Utils/Property |    MtkCam/Utils   | MtkCam/Utils/CamMgr
vendor\mediatek\proprietary\hardware\mtkcam\utils\Profile.cpp
vendor\mediatek\proprietary\hardware\mtkcam\utils\Property.cpp
vendor\mediatek\proprietary\hardware\mtkcam\utils\Format.cpp
vendor\mediatek\proprietary\hardware\mtkcam\utils\Misc.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\hwutils\CamManager.cpp
6.1-Profile.cpp
6.2-Property.cpp 
6.3-Format.cpp
6.4-Misc.cpp
6.5-CamManager.cpp

7.MtkCam/ParamsManager
vendor\mediatek\proprietary\hardware\mtkcam\v1\common\paramsmgr\feature\custom\custom.cpp
vendor\mediatek\proprietary\hardware\mtkcam\v1\common\paramsmgr\inc\Local.h
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\common\paramsmgr\params\MyUtils.h
7.1-custom.cpp
7.2-Local.h
7.3-MyUtils.h

8.MtkCam/CamClient
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\CamClient.cpp
8.1-CamClient.cpp

9.MtkCam/CamClient/FDClient
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\client\CamClient\FD\FDBufMgr.cpp FDClient.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\client\CamClient\FD
9.1-FDBufMgr.cpp
9.2-FDClient.cpp
9.3-FDClient.BufOps.cpp
9.4-FDClient.Scenario.cpp
9.5-FDClient.Thread.cpp

10.MtkCam/CamClient/OTClient
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\client\CamClient\OT\OTBufMgr.cpp OTClient.cpp
10.1-OTBufMgr.cpp
10.2-OTClient.cpp
10.3-OTClient.BufOps.cpp
10.4-OTClient.Scenario.cpp 
10.5-OTClient.Thread.cpp 

11.MtkCam/CamClient/PREFEATUREBASE
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\PreviewFeature\PreviewFeatureBase.cpp
11.1-PreviewFeature.Thread.cpp 
11.2-PreviewFeatureBase.cpp
11.3-PreviewFeatureClient.BufOps.cpp 


12.MtkCam/CamClient/PanoramaClient
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\PreviewFeature\Panorama\PanoramaClient.cpp 
12.1-PanoramaClient.cpp
12.2-PanoramaClient.Scenario.cpp 

13.MtkCam/CamClient/MotionTrackClient
13.1-vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\PreviewFeature\MotionTrack\MotionTrackClient13.2-MotionTrackClient.Scenario.cpp 

14.MtkCam/CamClient/MAVClient
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\PreviewFeature\MAV\MAVClient.cpp
14.1-MotionTrackClient.cpp 
14.2-MotionTrackClient.Scenario.cpp 

15.MtkCam/DisplayClient
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\DisplayClient\DisplayClient.cpp
15.1-DisplayClient.cpp
15.2-DisplayClient.BufOps.cpp
15.3-DisplayClient.dump.cpp
15.4-DisplayClient.Stream.cpp
15.5-DisplayThread.cpp
15.6-StreamImgBuf.cpp

16.MtkCam/ExtImgProc
vendor\mediatek\proprietary\hardware\mtkcam\v1\common\ExtImgProc\ExtImgProcImp.cpp
16.1-ExtImgProcImp.cpp 

17.MtkCam/CamAdapter
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\BaseCamAdapter.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\MtkDefault\CaptureCmdQueThread.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\MtkEng\CaptureCmdQueThread.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\MtkStereo\CaptureCmdQueThread.cpp
17.1-BaseCamAdapter.cpp
17.2-BaseCamAdapter.Instance.cpp
17.3-CaptureCmdQueThread.cpp(MtkDefault)
17.4-CaptureCmdQueThread.cpp(MtkEng)
17.5-CaptureCmdQueThread.cpp(MtkStereo)
17.6-MtkDefaultCamAdapter.cpp
17.7-MtkDefaultCamAdapter.3A.cpp(MtkDefault)
17.8-MtkDefaultCamAdapter.Capture.cpp(MtkDefault)
17.9-MtkDefaultCamAdapter.CaptureCallback.cpp(MtkDefault)
17.10-MtkDefaultCamAdapter.Preview.cpp
17.11-MtkDefaultCamAdapter.Record.cpp 
17.12-MtkDefaultCamParameter.cpp
17.13-MtkEngCamAdapter.3A.cpp (MtkEng)
17.14-MtkEngCamAdapter.Capture.cpp (MtkEng)
17.15-MtkEngCamAdapter.CaptureCallback.cpp (MtkEng)
17.16-MtkEngCamAdapter.cpp (MtkEng)
17.17-MtkEngCamAdapter.dump.cpp (MtkEng)
17.18-MtkEngCamAdapter.Preview.cpp (MtkEng)
17.19-MtkEngCamAdapter.Record.cpp (MtkEng)
17.20-MtkEngCamParameter.cpp (MtkEng)
17.21-MtkStereoCamAdapter.3A.cpp(Stereo)
17.22-MtkStereoCamAdapter.Capture.cpp 
17.23-MtkStereoCamAdapter.CaptureCallback.cpp
17.24-MtkStereoCamAdapter.cpp 
17.25-MtkStereoCamAdapter.Preview.cpp 
17.26-MtkStereoCamAdapter.Record.cpp 
17.27-MtkStereoCamParameter.cpp 
17.28-State.cpp (MtkDefault)
17.29-State.cpp (MtkEng)
17.30-State.cpp (MtkStereo)
17.31-StateManager.cpp (MtkDefault)
17.32-StateManager.cpp (MtkEng)
17.33-StateManager.cpp (MtkStereo)
17.33-ZipImageCallbackThread.cpp (MtkDefault)
17.34-ZipImageCallbackThread.cpp (MtkEng)
17.35-ZipImageCallbackThread.cpp (MtkStereo)

拍照模式 (全景 全焦 美肤 水印 等等的功能位置)

CameraService.onFirstRef---->CameraHardwareInterface.initialize------>CameraDeviceBase.cpp(ICamAdapter)
----> 1.CameraAdapter(BaseCamAdapter)【 CamAdapter.IShot ▲】 --->

class BaseCamAdapter : public ICamAdapter{}

NSMtkDefaultCamAdapter.h
class CamAdapter : public BaseCamAdapter, public IStateHandler
                  , public ICaptureCmdQueThreadHandler, public IShotCallback{}

-------------------------------------------------------------------------------------
namespace NSMtkDefaultCamAdapter {  // 命名空间为 NSMtkDefaultCamAdapter 的 CamAdapter
class CamAdapter : public BaseCamAdapter
                 , public IStateHandler
                 , public ICaptureCmdQueThreadHandler
                 , public IShotCallback
{}

    /** Send command to camera driver.*/  该函数是和驱动交互的?
    virtual status_t                sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
	
	sp<IShot>                       mpShot;  // 含有一个拍照模式的接口
}

IShot::
IShot(sp<ImpShot> pImpShot): mpImpShot(pImpShot)  // 构造参数 sp<ImpShot> 是实际实现功能的类 这是代理模式
{
}
-------------------------------------------------------------------------------------


1.
bool
CamAdapter::
updateShotInstance()
{
    uint32_t const u4ShotMode = mpDefaultCtrlNode->getShotMode();
    MY_LOGD("ShotMode(%d)",u4ShotMode);
    return  createShotInstance(mpShot, u4ShotMode, getOpenId(), getParamsManager());
}


2.
ShotFactory.cpp
//createShotInstance 由继承 NSMtkDefaultCamAdapter.CamAdapter 的类去实现
bool
createShotInstance(sp<IShot>&rpShot,uint32_t const u4ShotMode,int32_t const i4OpenId,sp<IParamsManager>pParamsMgr);
{
rpShot = createInstance_FrontPanoramaShot("FrontPanoramaShot", u4ShotMode, i4OpenId, pParamsMgr);
}

3.
FrontPanoramaShot.cpp
sp<IShot>  createInstance_FrontPanoramaShot(char const*const pszShotName,
    uint32_t const      u4ShotMode,int32_t const  i4OpenId,sp<IParamsManager>  pParamsMgr
){
pImpShot = new FrontPanoramaShot(pszShotName, u4ShotMode, i4OpenId, pParamsMgr);
pImpShot->onCreate();
return new IShot(pImpShot);
}


4.
FrontPanoramaShot::
FrontPanoramaShot(char const*const pszShotName,
    uint32_t const u4ShotMode,int32_t const i4OpenId,
    sp<IParamsManager>  pParamsMgr)
    : ImpShot(pszShotName, u4ShotMode, i4OpenId)   //ImpShot 是IShot的实现类, FrontPanoramaShot 继承 ImpShot
{
    mParamsMgr = pParamsMgr;
    mHalDocSFaceBeauty = HALDocSFaceBeauty_COOP::getInstance()->getHalDocSFaceBeautyInterface();
	
	//mHalFrontPanorama  【sp<HALFrontPanoramaInterface>▲】  它能调用到第三方库的方法   释放通过 mHalFrontPanorama = 0;
    mHalFrontPanorama = HALFrontPanorama_COOP::getInstance()->getHalFrontPanoramaInterface();
    m_bDocSFBeautyPrcInit = false;
}


#include "HALFrontPanoramaInterface.h"
#include "HALFrontPanoramaInterface.cpp"
D:\Coding\vendor\mediatek\proprietary\hardware\mtkcam\v1\common\xxxx\hal_xxcoop_stub\HALFrontPanorama_COOP.cpp


class HALFrontPanorama_COOP : public virtual RefBase
{
private:
    static   HALFrontPanorama_COOP*  mInstance;  // C语言静态属性
    void*    g_libcamera_front_panorama;  // 用于拿到so文件的句柄
	sp<HALFrontPanoramaInterface> gHALFrontPanoramaInstance;
	
public:
    static HALFrontPanorama_COOP* getInstance() // C语言静态方法
    {
        if(!mInstance){mInstance = new HALFrontPanorama_COOP(); // 创建成员  }
        return mInstance;
    }
 sp<HALFrontPanoramaInterface> getHalFrontPanoramaInterface(){return gHALFrontPanoramaInstance;}; // 成员方法
}



HALFrontPanorama_COOP::HALFrontPanorama_COOP()
{
    ALOGD("%s E",__func__);  // 在构造器中拿到了文件句柄 
    g_libcamera_front_panorama = ::dlopen("libcamera_xxa_front_panorama.so", RTLD_NOW); 
spHALFrontPanoramaInterface fp = (spHALFrontPanoramaInterface) // 调用这个函数的openFrontPanaramaUtil 得到一个函数句柄
              ::dlsym(g_libcamera_front_panorama, "openFrontPanaramaUtil");	
			  
// 调用函数句柄  返回了一个sp<HALFrontPanoramaInterface> 到此  FrontPanorama 前置全景 创建完成 还需初始化
    gHALFrontPanoramaInstance = (*fp)(); 
}


-------------------------------------------------------------------------------------


bool
FrontPanoramaShot::
onCreate()
{
//  IImageBufferAllocator* mpIImageBufAllocator;
    mpIImageBufAllocator =  IImageBufferAllocator::getInstance(); // 获得图片缓存管理 能创建 能释放
}


mHalFrontPanorama 调用的地方

	
MBOOL FrontPanoramaShot:: handleYUVData(IImageBuffer* puBuf, MUINT32 const u4Size){

// 调用第三方 so库中的 processyuvframe 完成对 IImageBuffer 这个图像数据的缓存 返回值为NV21排列的特殊字符数组
   unsigned char* pNV12 = mHalFrontPanorama->processyuvframe((char*)puBuf->getBufVA(0), mShotParam.mi4PictureWidth, mShotParam.mi4PictureHeight); 
    mpShotCallback->onCB_RawImage(
	0,mShotParam.mi4PictureWidth*mShotParam.mi4PictureHeight*3/2,
        reinterpret_cast<uint8_t const*>(pNV12));  // 传递出去 处理好的数据
    free(pNV12); // 把当前已经传递完成的临时 字符串char*数组  释放   就此完成了数据的第三方处理
    return MTRUE;
   
}

问题1:  IImageBuffer* puBuf 中的数据到底从哪来
问题2:  mpShotCallback->onCB_RawImage 回调把数据传到哪里
问题3:  哪里调用到该函数 FrontPanoramaShot::handleYUVData    猜测应该是CamAdapter的IShot会到调用到


问题3:
3.1 调用 handleYUVData 的地方
MBOOL FrontPanoramaShot :: fgCamShotDataCb(MVOID* user, NSCamShot::CamShotDataInfo const msg)
{
pFrontPanoramaShot->handleYUVData((
IImageBuffer*)msg.pBuffer,(msg.pBuffer->getBufSizeInBytes(0)+msg.pBuffer->getBufSizeInBytes(1))
);
}

3.2 设置 fgCamShotDataCb 回调的地方
bool FrontPanoramaShot::onCmd_capture()
{

    NSCamShot::ICamShot *pSingleShot = NSCamShot::ISmartShot::createInstance(
	static_cast<EShotMode>(mu4ShotMode), "FrontPanoramaShot", getOpenId(), 
	mShotParam.mu4MultiFrameBlending, &isMfbShot);
																			
【NSCamShot::ICamShot *】 pSingleShot->setCallbacks(fgCamShotNotifyCb, fgCamShotDataCb, this);

pSingleShot->sendCommand( NSCamShot::ECamShot_CMD_SET_NRTYPE, nrtype, 0, 0 ); // 把nrtype 设置到  SingleShot

pSingleShot->startOne(rSensorParam);
pSingleShot->uninit();
pSingleShot->destroyInstance();
}


↑
|
MVOID
CamShotImp::
setCallbacks(CamShotNotifyCallback_t notify_cb, CamShotDataCallback_t data_cb, MVOID* user)
{
    mpCbUser = user;
    mNotifyCb = notify_cb;
【CamShotDataCallback_t】 mDataCb = data_cb;
}

↑
|
MBOOL
CamShotImp::
onDataCallback(CamShotDataInfo const& msg) const
{
    MBOOL   ret = MTRUE;
    if  ( mDataCb )
    {
        mDataCb(mpCbUser, msg);  // 回调函数 调用到  FrontPanoramaShot.fgCamShotDataCb
        ret = MTRUE;
    }
    return  ret;
}

↑
|
MBOOL      
CamShotImp::
handleDataCallback(MINT32 const i4Msg, MUINTPTR const ext1, MUINTPTR const ext2, IImageBuffer* pImgBuf)
{
    MBOOL ret = MTRUE; 
    if (isDataMsgEnabled(i4Msg)) 
    {
        CamShotDataInfo rCbDataInfo(i4Msg, ext1, ext2, pImgBuf ); 
        ret = onDataCallback(rCbDataInfo); 
    }
    return ret; 
}

↑
|
MBOOL
SingleShot::fgNodeDataCallback(MVOID* user, NodeDataInfo const msg)
{
 pSingleShot->handleDataCallback(data,msg.ext1,msg.ext2,msg.pBuffer);
}

↑
|
MBOOL
SingleShot::createNodes(MUINT32 const NodeDataSet, MUINT32 const NodeCbSet, IImageBuffer const *pImgBuffer)
{
mpCallback = ShotCallbackNode::createInstance(MFALSE);
mpCallback【ShotCallbackNode*】->setCallbacks(fgNodeNotifyCallback, fgNodeDataCallback, this);
}

↑
|
MVOID
ShotCallbackNodeImpl::
setCallbacks(NodeNotifyCallback_t notify_cb, NodeDataCallback_t data_cb, MVOID* user)
{
    mpUser    = user;
    mNotifyCb = notify_cb;
    mDataCb   = data_cb;
}

↑
|

MVOID
ShotCallbackNodeImpl::
handleDataCallback(MUINT32 const msg, MUINTPTR const ext1, MUINTPTR const ext2, IImageBuffer* const pImgBuf) const
{
        NodeDataInfo datainfo(msg, ext1, ext2, pImgBuf);
        mDataCb(mpUser, datainfo);
}
↑
|

MBOOL 
ShotCallbackNodeImpl::
processCallback(){
handleDataCallback( ENode_DATA_MSG_JPS, 0, 0, (IImageBuffer*)(todo.buf));
list<pictureCallback>::iterator pPicCB = mlPending.begin();

    do{                             \
        if(item->muFlag == 0){      \
            cblist.erase(item);     \
        }                           \
    }while(0)
	
}
		
↑
|
						
MBOOL
ShotCallbackNodeImpl::
threadLoopUpdate()
{
    FUNC_START;
    while( processCallback() )
    {  MY_LOGD("process another"); };
    FUNC_END;
    return MTRUE;
}


MBOOL
SingleShot::
createNodes(MUINT32 const NodeDataSet, MUINT32 const NodeCbSet, IImageBuffer const *pImgBuffer)
{
    mpCallback->setCallbacks(fgNodeNotifyCallback, fgNodeDataCallback, this);
}



	


18.MtkCam/PrvCB
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\PreviewCallback\ImgBufManager.cpp
18.1-ImgBufManager.cpp
18.2-PreviewClient.BufOps.cpp 
18.3-PreviewClient.cpp 
18.4-PreviewClient.dump.cpp  
18.5-PreviewClient.Thread.cpp  

19.MtkCam/RecordClient
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\CamClient\Record\RecordClient.cpp
19.1-RecBufManager.cpp
19.2-RecordClient.BufOps.cpp
19.3-RecordClient.cpp
19.4-RecordClient.Platform.cpp 
19.5-RecordClient.Thread.cpp 


20.MtkCam/DisplayClient
vendor\mediatek\proprietary\hardware\mtkcam\v1\client\DisplayClient\DisplayClient.cpp
20.1-DisplayClient.cpp
20.2-DisplayClient.BufOps.cpp
20.3-DisplayClient.dump.cpp
20.4-DisplayClient.Stream.cpp
20.5-DisplayThread.cpp
20.6-StreamImgBuf.cpp

21.MtkCam/CBMgr
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camshot\CapBuf\CapBufMgr.cpp
21.1-CapBufMgr.cpp

22.MtkCam/DBHdl
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\CamNode\DefaultBufHandler.cpp EngBufHandler.cpp
22.1-DefaultBufHandler.cpp
22.2-EngBufHandler.cpp



23.MtkCam/DCNode
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\CamNode\DefaultCtrlNode.cpp 
23.1-DefaultCtrlNode.cpp
23.2-DefaultCtrlNode.Eng.cpp 


24.MtkCam/TM
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\ThermalMonitor
24.1-ThermalMonitor.cpp 

25.MtkCam/CpuCtrl
vendor\mediatek\proprietary\hardware\mtkcam\utils\CpuCtrl
25.1-CpuCtrl.cpp 


26.MtkCam/P2Node
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v3\hwnode\P2Node.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\pass2node.capture.cpp
26.1-P2Node.cpp
26.2-pass2node.capture.cpp
26.3-pass2node.common.cpp
26.4-pass2node.feature.cpp
26.5-pass2node.preview.cpp

27.MtkCam/CamNG
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\ICamGraphNode.cpp
27.1-ICamGraphNode.cpp 

28.MtkCam/P1Node
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\pass1node.cpp
28.1-pass1node.cpp
pass1node.cpp 

29.MtkCam/ISC
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\IspSyncControl.cpp
29.1-IspSyncControl.cpp

30.MtkCam/FeaturePipe
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\FeaturePipe\FeaturePipe.cpp
30.1-FeaturePipe.cpp
30.2-FeaturePipe.Nodes.cpp 

31.MtkCam/RBSSNode
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\CamNode\RecBufSnapshotlNode.cpp
31.1-RecBufSnapshotlNode.cpp 


32.MtkCam/BaseHeap
vendor\mediatek\proprietary\hardware\mtkcam\utils\ImageBuffer\BaseImageBufferHeap.cpp
32.1-BaseImageBufferHeap.cpp


33.MtkCam/IonHeap
vendor\mediatek\proprietary\hardware\mtkcam\utils\ImageBuffer\IonImageBufferHeap.cpp
33.1-IonImageBufferHeap.cpp

34.MtkCam/ImgBuf
vendor\mediatek\proprietary\hardware\mtkcam\utils\ImageBuffer\BaseImageBuffer.cpp
34.1-BaseImageBuffer.cpp 

35.MtkCam/Cam1Heap
vendor\mediatek\proprietary\hardware\mtkcam\utils\ImageBuffer\ImageBufferHeap.cpp
35.1-ImageBufferHeap.cpp


36.MtkCam/FeaturePipeDataHdl
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\FeaturePipe
36.1-FeaturePipe.DataHandler.cpp 

37.MtkCam/AllocBufHdl
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\AllocBufHandler.cpp 
37.1-AllocBufHandler.cpp 

38.MtkCam/AsdClient
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\client\CamClient\FD\Asd\AsdClient.cpp
38.1-AsdClient.cpp 

39.MtkCam/Shot
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\adapter\Scenario\Shot\BestContinuousShot
39.1-BestContinuousShot.cpp 


40.MtkCam/BSS
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camshot\MfllShot\BestShotSelection.cpp
40.1-BestShotSelection.cpp

41.MtkCam/BShotCtrl
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camshot\BurstShot\BShotCtrlNode.cpp
41.1-BShotCtrlNode.cpp

42.MtkCam/BShot
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camshot\BurstShot\BurstShot.cpp
42.1-BurstShot.cpp

43.MtkCam/MtkCamUtils  |  MtkCam/CamShotUtils
vendor\mediatek\proprietary\hardware\mtkcam\v1\common\camutils\CamDevMetaInfo.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\v1\common\camutils\platform\CamFormat.cpp
vendor\mediatek\proprietary\hardware\mtkcam\v1\common\camutils\CamFormatTransform.cpp
vendor\mediatek\proprietary\hardware\mtkcam\v1\common\camutils\CamMisc.cpp CamProfile.cpp  CamProperty.cpp
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camshot\CamShotUtils.cpp (MtkCam/CamShotUtils)
43.1-CamDevMetaInfo.cpp
43.2-CamFormat.cpp
43.3-CamFormatTransform.cpp
43.4-CamMisc.cpp 
43.5-CamProfile.cpp
43.6-CamProperty.cpp
43.7-CamShotUtils.cpp(MtkCam/CamShotUtils)

44.MtkCam/ITNode
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\ImgTransformNode.cpp 
44.1-ImgTransformNode.cpp


45.MtkCam/JpegCodec
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\iopipe\SImager\JpegCodec\odec.cpp 
45.1-odec.cpp



46.MtkCam/EncNode
vendor\mediatek\proprietary\platform\mt6735\hardware\mtkcam\D1\core\camnode\JpegEncNode.cpp
46.1-JpegEncNode.cpp



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值