You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jianglk.darker
7ee447c011
|
4 months ago | |
---|---|---|
.. | ||
common/support | 4 months ago | |
custom | 4 months ago | |
include | 4 months ago | |
scripts | 4 months ago | |
Android.bp | 4 months ago | |
readme.txt | 4 months ago |
readme.txt
1. TVMW目录为TV中间件实现代码,代码目录: vendor/mwvendor/modules/tvmw ├── adapter │ ├── tv_instruct.h │ └── tv_cus_instruct.h //编译客制化目录时会将custom/customer_reference/instruct/tv_cus_instruct.h复制至此 ├── api │ ├── cplusplus //C++ API 编译客制化目录时会将custom/customer_reference/cppapi复制至此 │ └── java //Java API 编译客制化目录时会将custom/customer_reference/java复制至此 ├── common ├── custom //客制化相关代码、 公版mwvendor ini文件和客户ini文件 │ ├── customer_reference // 客户项目定制化代码参考; │ ├── mwvendor // huanglong公版定制化代码; │ └── xxx // 客户参考customer_reference添加客户自己的项目定制化目录和代码; ├── debug │ ├── aqdebug │ └── tvdebug ├── external //git库不track此目录,此目录编译时创建,将custom目录下的mwvendor或custom_reference目录下的差异化实现的代码 │ (即不包括客制化的C++或Java接口)复制到本目录,编译入libimtvservice.so动态库 ├── framework //framework层,主要用于封装或集成各驱动模块的UAPI接口和数据结构,供logic层调用 ├── include ├── logic //logic层,主要包含了module_api、player、picture、audio、system等业务逻辑, │ module_api目录为logic层封装给C++、Java API调用的模块接口封装层 ├── scripts └── tvservice │ └── cfg.mak // 定义TVMW_CUSTOM选择客户机型编译目录. 注: tvmw/cfg.mak中TVMW_CUSTOM选择客户机型编译目录,如: TVMW_CUSTOM := custom/mwvendor //编译 公版代码 + custom/mwvendor 目录代码; TVMW_CUSTOM := custom/customer_reference //编译 公版代码 + custom/customer_reference 目录代码; TVMW_CUSTOM := custom/xxxx //编译 公版代码 + custom/xxxx 目录代码. 2.客户修适配TV中间件规则: 1>. 客户客制化代码全部放在custom/customer_reference目录下,客户不要直接修改huanglong公版的所有文件; 2>. 客户所有实现代码可都在客制化目录custom/customer_reference下实现,编译时会将客制化目录下对应代码文件复制至公版相应目录下,并编译进行相应动态库; 3>. 客户版本升级,可直接拷贝项目定制化目录,而不用关心huanglong发布版本修改具体内容,方便维护和升级; 4>. 如果客户确实存在客制化目录下无法实现的功能,请反馈给huanglong TVMW部门; 5>. 客制化详细可参考发布包中"TVMW3.0 客制化 开发指南 .pdf"文档. 2. 定制化参考customer_reference目录介绍: customer_reference: ├── source : 客户功能实现目录,可多个cpp和h文件,可多个目录,文件名无要求; ├── include : 客户功能实现头文件,也可为空,直接放在source目录中; ├── cppapi : C++接口客户功能添加,文件名为CusEx.cpp/CusEx.h/ICusEx.h,文件名不要修改,如客户使用JAVA接口,不需要C++接口,可不需要此目录; ├── java : 客户功能JAVA接口实现,文件名为CusExImpl.java/CusEx.java,不要修改; ├── instruct : 客户功能invoke指令ID定义,文件为tv_cus_intruct.h,不要修改; └── ini : 客户项目ini文件,可参考huanglong公版tvmw\custom\mwvendor\ini下对应ini文件再修改与硬件或数据库默认值相关的定制化配置. 注: 1>. 如客户扩展功能使用JAVA接口,不需要C++接口,可不需要cppapi目录, java代码直接invoke方式调用实现; 参考CusExImpl.java中cus_set_xxx实现"MwtvManager.getInstance().excuteCommandSet(CMD_ID_EX_CUS_SET_XXX, val)". 2>. 如客户扩展功能需C++接口,cppapi、instruct目录下文件名不要修改,可在对应TODO部分添加客户功能实现代码; 3>. 每次版本升级,注意对比huanglong公版tvmw\custom\mwvendor\ini下对应ini文件同步升级. 2. 客户中间件功能实现参考customer_reference/source/tv_cus_set.cpp中init代码部分: static td_s32 init(IDispatch * dispatch) { LOGI("customer cus module init"); #if 1 //数据库客制化,创建新数据库,添加数据节点,参考tv_cus_dat.cpp中实现 cus_db_init(); #endif #if 1 //公版已存在数据库数据定义,但格式与客户不一样,客户定制私有数据查询和更新 MW_DBO_CB_S sDboCallBack; sDboCallBack.pfnDbUpdateCb = cus_db_update_cb; sDboCallBack.pfnDbQueryCb = cus_db_query_cb; sDboCallBack.pfnDbQueryManyCb = cus_db_query_many_cb; MwDBOFact::getDBO()->registerOpCb(&sDboCallBack); #endif #if 1 //图像模式设置,除公版已经定义的图像模式中各项设置外,客户有私有数据设置 MW_CUS_PICMODE_CB pfnCusPicModeCb = cus_picturemode_additional; MwPicture::instance()->registerCusPicModeCB(pfnCusPicModeCb); #endif #if 1 //声音模式设置,除公版已经定义的声音模式中各项设置外,客户有私有数据设置 MW_CUS_SOUNDMODE_CB pfnCusSoundModeCb = cus_soundmode_additional; MwAudio::instance()->registerCusSoundModeCB(pfnCusSoundModeCb); #endif td_u32 i; #if 1 //定制添加invoke指令调用功能实现,客户需封装C++或JAVA接口 for (i = 0; i < sizeof(g_astCusAddModuleLocalAtomicInfo)/sizeof(LocalAtomicInfo); i++) { dispatch->insertInterface(g_astCusAddModuleLocalAtomicInfo[i].id, g_astCusAddModuleLocalAtomicInfo[i].pfn); } #endif #if 1 //定制替换公版已经定义的invoke指令调用功能实现 for (i = 0; i < sizeof(g_astCusRepalceModuleLocalAtomicInfo)/sizeof(LocalAtomicInfo); i++) { dispatch->replaceInterface(g_astCusRepalceModuleLocalAtomicInfo[i].id, g_astCusRepalceModuleLocalAtomicInfo[i].pfn); } #endif #if 1 //控制驱动pq模块客户化功能回调,例如替换invoke指令功能SetBackLight,此处替换MW内部所有非invoke调用背光设置实现 MW_PQCTRL_CB_S stPqCtrlCb; memset(&stPqCtrlCb, 0, sizeof(MW_PQCTRL_CB_S)); stPqCtrlCb.pfnSetBackLightCb = cus_SetBackLight; stPqCtrlCb.pfnSetDemoCb = cus_SetDemo; //stPqCtrlCb.pfnGetBackLightCb = cus_GetBackLight; MwPQCtrl::instance()->registerOpCb(&stPqCtrlCb); #endif #if 1 //客户定制EDID和HDCP KEY cus_get_hdcp_key(&g_stCusHdcpEdid); cus_get_edid(&g_stCusHdcpEdid); MwVideoPlay::updateHdcpEdid(&g_stCusHdcpEdid); #endif #if 1 //客户定制比例模式的overscan裁剪和输出窗口计算算法 MW_CONFIG_CALLBACK_S stAspectCb; stAspectCb.enConfigType = MW_DISPLAY_CONFIG_ASPECT; stAspectCb.unCfgCallback.stAspectCb.pfnAspectCropCb = cus_aspect_crop_cb; stAspectCb.unCfgCallback.stAspectCb.pfnAspectDispCb = cus_aspect_disp_cb; MwVideoPlay::registerCfgCb(&stAspectCb); #endif #if 1 //保存TVMW音频参数到EMMC裸分区/EEPROM/文件系统中文件,用于不能从MW数据库设置音频参数场景 MW_CONFIG_SND_CALLBACK_S stConfigCb; stConfigCb.enConfigType = MW_SOUND_CONFIG_PRECIVOL; stConfigCb.unCfgCallback.stPreciVolCb.pfnPreciVolCb = cus_precivol_cb; MwAudioPlay::registerCfgCb(&stConfigCb); stConfigCb.enConfigType = MW_SOUND_CONFIG_PRESCALE; stConfigCb.unCfgCallback.stPrescaleCb.pfnPrescaleCb = cus_prescale_cb; MwAudioPlay::registerCfgCb(&stConfigCb); #endif #if 1 //注册回调在端子各种播放场景下(creat/destroy/start/stop/设置音频和PQ参数)定制客户设置 MwSourceManager::instance()->registerListener(new cusTvListener); #endif //TODO: 其它客户化设置 start // 例如 1. 客户重新刷新数据库数据为客户私有数据; // 2. 客户新功放初始化控制; // ...... // // 其它客户化设置 end return TD_SUCCESS; } 注 : 客户需要定制化某部分功能,可打开"#if 1",并修改对应功能实现(参考TODO:部分),如不需要,请 "#if 0"屏蔽此扩展功能.