154 lines
8.4 KiB
ReStructuredText
Executable File
154 lines
8.4 KiB
ReStructuredText
Executable File
多媒体功耗
|
||
=======================
|
||
|
||
:link_to_translation:`en:[English]`
|
||
|
||
1、多媒体功耗概述
|
||
-------------------------
|
||
|
||
基于BK7258的工程,多媒体功能都是在CPU1上实现的,且各个硬件模块,比如PSRAM、LCD、H264、USB等,都有对应的时钟配置、电源管理等。为了达到更低的功耗,开关需要对称使用。
|
||
|
||
2、多媒体应用
|
||
-------------------------
|
||
|
||
多媒体SDK提供功能丰富且齐全的接口,供用户使用,且用户不需要考虑相关投票的接口的应用,是需要保证是对称调用即可,接口参考地址:``./components/multimedia/include/media_app.h``,说明如下。
|
||
|
||
开关摄像头的接口,需要注意填写的形参的内容::
|
||
|
||
bk_err_t media_app_camera_open(media_camera_device_t *device);
|
||
bk_err_t media_app_camera_close(camera_type_t type);
|
||
|
||
使能/关闭获取图像的接口,获取不同类型的图像需要传递不同类型的形参,允许直接在回调函数(形参cb)中处理获取的图像数据,这个接口只能在摄像头打开后才有效::
|
||
|
||
bk_err_t media_app_register_read_frame_callback(pixel_format_t fmt, frame_cb_t cb);
|
||
bk_err_t media_app_unregister_read_frame_callback(void);
|
||
|
||
使能/关闭h264编码功能,这个接口支持将JPEG图像通过解码,将图像转成YUV格式,然后再进行H264编码输出::
|
||
|
||
bk_err_t media_app_h264_pipeline_open(void);
|
||
bk_err_t media_app_h264_pipeline_close(void);
|
||
|
||
使能/关闭图像旋转功能,这个接口支持将JPEG解码后的图像,旋转任意角度,然后显示到对应的LCD屏幕上::
|
||
|
||
bk_err_t media_app_lcd_pipline_rotate_open(media_rotate_t rotate);
|
||
bk_err_t media_app_lcd_pipline_rotate_close(void);
|
||
|
||
除了上面的基本功能外,还支持一些额外的功能,比如当开启的是UVC摄像头时,支持注册回调函数获取UVC的枚举信息和连接状态,获取之后需要调用参数配置接口,让UVC真正启动,
|
||
支持在注册的回调函数中直接设置参数,启动UVC::
|
||
|
||
bk_err_t media_app_uvc_register_info_notify_cb(uvc_device_info_t cb);
|
||
bk_err_t media_app_set_uvc_device_param(bk_uvc_config_t *config);
|
||
|
||
支持在进行H264编码时,调整压缩率,以达到更好的图像效果,具体的调试说明请参考H264编码文档,此接口仅在H264编码功能打开后生效::
|
||
|
||
bk_err_t media_app_set_compression_ratio(compress_ratio_t * ratio);
|
||
|
||
上面的接口都有对应的参考用例,请参考``./components/multimedia/cli/media_cli.c``.
|
||
|
||
3、多媒体投票
|
||
--------------------------
|
||
|
||
多媒体的功能都在CPU1上实现,调用SDK接口,会默认将CPU1投票上电,然后再去处理相应的流程,投票接口为::
|
||
|
||
bk_err_t bk_pm_module_vote_boot_cp1_ctrl(pm_boot_cp1_module_name_e module,pm_power_module_state_e power_state);
|
||
|
||
该接口支持不同模块投票,进行上下电,具体参考结构体::
|
||
|
||
typedef enum
|
||
{
|
||
PM_BOOT_CP1_MODULE_NAME_FFT = 0,
|
||
PM_BOOT_CP1_MODULE_NAME_AUDP_SBC ,// 1
|
||
PM_BOOT_CP1_MODULE_NAME_AUDP_AUDIO ,// 2
|
||
PM_BOOT_CP1_MODULE_NAME_AUDP_I2S ,// 3
|
||
PM_BOOT_CP1_MODULE_NAME_VIDP_JPEG_EN ,// 4
|
||
PM_BOOT_CP1_MODULE_NAME_VIDP_JPEG_DE ,// 5
|
||
PM_BOOT_CP1_MODULE_NAME_VIDP_DMA2D ,// 6
|
||
PM_BOOT_CP1_MODULE_NAME_VIDP_LCD ,// 7
|
||
PM_BOOT_CP1_MODULE_NAME_MULTIMEDIA ,// 8
|
||
PM_BOOT_CP1_MODULE_NAME_APP ,// 9
|
||
PM_BOOT_CP1_MODULE_NAME_VIDP_ROTATE ,// 10
|
||
PM_BOOT_CP1_MODULE_NAME_VIDP_SCALE ,// 11
|
||
PM_BOOT_CP1_MODULE_NAME_GET_MEDIA_MSG ,// 12
|
||
PM_BOOT_CP1_MODULE_NAME_MAX ,// attention: MAX value can not exceed 31.
|
||
}pm_boot_cp1_module_name_e;
|
||
|
||
不同模块其电源也需要投票进行控制,保证共用该电源域的模块,有一个模块需要使用时,该电源需要打开,当全部模块都不需要工作时,才进行掉电处理,这些操作默认已经封装在各个模块内部了,
|
||
客户使用时,不需要关注,但可以注意当进入低功耗模式时,对应模块是否真正已经掉电,投票接口为::
|
||
|
||
bk_err_t bk_pm_module_vote_power_ctrl(pm_power_module_name_e module,pm_power_module_state_e power_state);
|
||
|
||
上面接口可以通过配置不同的形参,达到不同模块的开关功能,第一个形参的类型参考文件:``./bk_idk/include/modules/pm.h``;如下是多媒体模块定义的票::
|
||
|
||
/*----SUB POWER DOMAIN VIDP--------*/
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_DMA2D (POWER_SUB_MODULE_NAME_VIDP_DMA2D)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_YUVBUF (POWER_SUB_MODULE_NAME_VIDP_YUVBUF)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_JPEG_EN (POWER_SUB_MODULE_NAME_VIDP_JPEG_EN)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_JPEG_DE (POWER_SUB_MODULE_NAME_VIDP_JPEG_DE)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_LCD (POWER_SUB_MODULE_NAME_VIDP_LCD)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_ROTT (POWER_SUB_MODULE_NAME_VIDP_ROTT)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_SCAL0 (POWER_SUB_MODULE_NAME_VIDP_SCAL0)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_SCAL1 (POWER_SUB_MODULE_NAME_VIDP_SCAL1)
|
||
#define PM_POWER_SUB_MODULE_NAME_VIDP_H264 (POWER_SUB_MODULE_NAME_VIDP_H264)
|
||
|
||
针对PASRAM不同模块使用时也会对其投票,保证功能正常,且功耗较低,投票接口为::
|
||
|
||
bk_err_t bk_pm_module_vote_psram_ctrl(pm_power_psram_module_name_e module,pm_power_module_state_e power_state);
|
||
|
||
上面接口可以通过配置不同的形参,达到不同模块对PASRAM的控制,不同模块的枚举值参考如下::
|
||
|
||
typedef enum
|
||
{
|
||
PM_POWER_PSRAM_MODULE_NAME_FFT = 0,
|
||
PM_POWER_PSRAM_MODULE_NAME_AUDP_SBC ,// 1
|
||
PM_POWER_PSRAM_MODULE_NAME_AUDP_AUDIO ,// 2
|
||
PM_POWER_PSRAM_MODULE_NAME_AUDP_I2S ,// 3
|
||
PM_POWER_PSRAM_MODULE_NAME_VIDP_JPEG_EN ,// 4
|
||
PM_POWER_PSRAM_MODULE_NAME_VIDP_H264_EN ,// 5
|
||
PM_POWER_PSRAM_MODULE_NAME_VIDP_JPEG_DE ,// 6
|
||
PM_POWER_PSRAM_MODULE_NAME_VIDP_DMA2D ,// 7
|
||
PM_POWER_PSRAM_MODULE_NAME_VIDP_LCD ,// 8
|
||
PM_POWER_PSRAM_MODULE_NAME_APP ,// 9
|
||
PM_POWER_PSRAM_MODULE_NAME_AS_MEM ,// 10
|
||
PM_POWER_PSRAM_MODULE_NAME_CPU1 ,// 11
|
||
PM_POWER_PSRAM_MODULE_NAME_MEDIA ,// 12
|
||
PM_POWER_PSRAM_MODULE_NAME_LVGL_CODE_RUN,// 13
|
||
PM_POWER_PSRAM_MODULE_NAME_MAX ,// attention: MAX value can not exceed 31.
|
||
}pm_power_psram_module_name_e;
|
||
|
||
4、多媒体低功耗检查
|
||
----------------------
|
||
|
||
当需要进入低功耗时,需要将外设全部关掉,包括PSRAM,保证各个模块全部掉电,可以发送下面命令进行检查::
|
||
|
||
pm_debug 8
|
||
|
||
默认情况下,比如上电发送上面命令,输出如下:
|
||
|
||
1、pm video and audio state:0x0 0x0
|
||
|
||
2、pm ahpb and bakp state:0x0 0x10001
|
||
|
||
3、pm low vol[module:0xffbfefff] [need module:0xffffffff]
|
||
|
||
4、pm deepsleep[module:0xc0][need module:0x3c0]
|
||
|
||
5、pm power and pmu state[0x200000c8][0x2f1]
|
||
|
||
6、Attention the bakp not power down[modulue:0x10001]
|
||
|
||
7、pm_psram_ctrl_state:0x0 0x0
|
||
|
||
8、pm_cp1_ctrl_state:0x0
|
||
|
||
9、pm_cp1_boot_ready:0x0 0xffffffff
|
||
|
||
10、pm_module_lv_sleep_state:0x0
|
||
|
||
多媒体模块只需要关注第一行(表示多媒体各个模块内部电源控制,对应的票为pm_power_module_name_e,不使用时,应该都为0)、第七行(表示PSRAM电源控制,因为存在多个模块使用PARAM,
|
||
不适用时,应该都为0)、第八行(表示不同模块投票让CPU1启动,对应的票为pm_boot_cp1_module_name_e,不适用时,应该都为0)。
|
||
|
||
.. note::
|
||
|
||
上面的接口都不需要用户自己去封装调用,使用多媒体功能时,这些功能已经封装到开关内部逻辑了,只需要保证使用时,开关的调用是对称的。另外上面的命令是一种检查方法,依赖于CLI命令功能,
|
||
使用时,CLI功能不一定会使能。
|