Overlay功能需求简单分析和一些疑问
Overlay 相关的功能主要有:
1. Video 播放通过overlay实现
2. Camera preview通过overlay 实现
需要做的工作有overlay hal层,以及video player正确使用overlay来播放,
Camera hal层中正确使用overlay 来实现preview。
Overlay hal层需要实现两部分接口,一个是overlay_control_device_t,一部分是overlay_data_device_t,前者是overlay的一些控制接口,后者是数据传输接口。
overlay_control_device_t结构的子函数:
overlay_t* (*createOverlay)(struct overlay_control_device_t *dev, uint32_t w, uint32_t h, int32_t format);
void (*destroyOverlay)(struct overlay_control_device_t *dev,overlay_t* overlay);
int (*setPosition)(struct overlay_control_device_t *dev, overlay_t* overlay,int x, int y, uint32_t w, uint32_t h);
int (*getPosition)(struct overlay_control_device_t *dev, overlay_t* overlay,int* x, int* y, uint32_t* w, uint32_t* h);
int (*setParameter)(struct overlay_control_device_t *dev,overlay_t* overlay, int param, int value);
上面的接口实现了建立设备,删除设备,设置位置,获取位置还有就是设置一些参数比如旋转等功能。
Overlay_data_device_t结构的子函数:
int (*dequeueBuffer)(struct overlay_data_device_t *dev,overlay_buffer_t *buf);
int (*queueBuffer)(struct overlay_data_device_t *dev,overlay_buffer_t buffer);
void* (*getBufferAddress)(struct overlay_data_device_t *dev, overlay_buffer_t buffer);
int (*getBufferCount)(struct overlay_data_device_t *dev);
上面的接口实现了等待队列内存返回,内存放回队列,获取内存指针,获取内存数目等功能。
关于Camera和Overaly的关系
在video player hal层中还有camera hal层中需要实现的就是调用上面的接口。
与overlay相关的系统框架:
有可能与海思那边打交道的就是在实现上面overlay hal层各个接口时,需要的时候会询问底层的
Vou driver实现以及android_driver目录下的vou.c封装层实现。
具体的还有这两个接口有些疑问:
Overlay_setPosition()
Overlay_setParameter()
第一个现在已经知道调用的是android_driver vou.c中的vou_setoutput(),之前是使用不当会导致后来播放出问题,只要在overlay 的中间层改动参数,就没有问题,可以去设置显示在任意区域。
第二个就是setparameter实现,包括rotate等,在android_driver vou.c中没有找到类似的实现,需要问问到底有没有这样的功能。
关于Overlay Hal的实现,需要考虑将来所有不同camera的通用性问题。
Overlay 相关的功能主要有:
1. Video 播放通过overlay实现
2. Camera preview通过overlay 实现
需要做的工作有overlay hal层,以及video player正确使用overlay来播放,
Camera hal层中正确使用overlay 来实现preview。
Overlay hal层需要实现两部分接口,一个是overlay_control_device_t,一部分是overlay_data_device_t,前者是overlay的一些控制接口,后者是数据传输接口。
overlay_control_device_t结构的子函数:
overlay_t* (*createOverlay)(struct overlay_control_device_t *dev, uint32_t w, uint32_t h, int32_t format);
void (*destroyOverlay)(struct overlay_control_device_t *dev,overlay_t* overlay);
int (*setPosition)(struct overlay_control_device_t *dev, overlay_t* overlay,int x, int y, uint32_t w, uint32_t h);
int (*getPosition)(struct overlay_control_device_t *dev, overlay_t* overlay,int* x, int* y, uint32_t* w, uint32_t* h);
int (*setParameter)(struct overlay_control_device_t *dev,overlay_t* overlay, int param, int value);
上面的接口实现了建立设备,删除设备,设置位置,获取位置还有就是设置一些参数比如旋转等功能。
Overlay_data_device_t结构的子函数:
int (*dequeueBuffer)(struct overlay_data_device_t *dev,overlay_buffer_t *buf);
int (*queueBuffer)(struct overlay_data_device_t *dev,overlay_buffer_t buffer);
void* (*getBufferAddress)(struct overlay_data_device_t *dev, overlay_buffer_t buffer);
int (*getBufferCount)(struct overlay_data_device_t *dev);
上面的接口实现了等待队列内存返回,内存放回队列,获取内存指针,获取内存数目等功能。
关于Camera和Overaly的关系
在video player hal层中还有camera hal层中需要实现的就是调用上面的接口。
与overlay相关的系统框架:
有可能与海思那边打交道的就是在实现上面overlay hal层各个接口时,需要的时候会询问底层的
Vou driver实现以及android_driver目录下的vou.c封装层实现。
具体的还有这两个接口有些疑问:
Overlay_setPosition()
Overlay_setParameter()
第一个现在已经知道调用的是android_driver vou.c中的vou_setoutput(),之前是使用不当会导致后来播放出问题,只要在overlay 的中间层改动参数,就没有问题,可以去设置显示在任意区域。
第二个就是setparameter实现,包括rotate等,在android_driver vou.c中没有找到类似的实现,需要问问到底有没有这样的功能。
关于Overlay Hal的实现,需要考虑将来所有不同camera的通用性问题。