谁能直白的解释下overlay_t,native_handle_t的作用

方紫涵 2011-01-27 05:19:08
谁能直白的解释下overlay_t(以及派生出来的overlay_object),native_handle_t的作用
没有做过视频这一块,有点头大

typedef struct overlay_t {
uint32_t w;
uint32_t h;
int32_t format;
uint32_t w_stride;
uint32_t h_stride;
uint32_t reserved[3];
/* returns a reference to this overlay's handle (the caller doesn't
* take ownership) */
overlay_handle_t (*getHandleRef)(struct overlay_t* overlay);
uint32_t reserved_procs[7];
} overlay_t;


// A separate instance of this class is created per overlay
class overlay_object : public overlay_t
{
handle_t mHandle;

overlay_ctrl_t mCtl;
overlay_ctrl_t mCtlStage;
overlay_shared_t *mShared;

static overlay_handle_t getHandleRef(struct overlay_t* overlay) {
/* returns a reference to the handle, caller doesn't take ownership */
return &(static_cast<overlay_object *>(overlay)->mHandle);
}

public:
overlay_object(int ctl_fd, int shared_fd, int shared_size, int w, int h,
int format, int num_buffers) {
this->overlay_t::getHandleRef = getHandleRef;
mHandle.version = sizeof(native_handle);
mHandle.numFds = 2;
mHandle.numInts = 5; // extra ints we have in our handle
mHandle.ctl_fd = ctl_fd;
mHandle.shared_fd = shared_fd;
mHandle.width = w;
mHandle.height = h;
mHandle.format = format;
mHandle.num_buffers = num_buffers;
mHandle.shared_size = shared_size;
this->w = w;
this->h = h;
this->format = format;

memset( &mCtl, 0, sizeof( mCtl ) );
memset( &mCtlStage, 0, sizeof( mCtlStage ) );
}

int ctl_fd() { return mHandle.ctl_fd; }
int shared_fd() { return mHandle.shared_fd; }
overlay_ctrl_t* data() { return &mCtl; }
overlay_ctrl_t* staging() { return &mCtlStage; }
overlay_shared_t* getShared() { return mShared; }
void setShared( overlay_shared_t *p ) { mShared = p; }
};


typedef struct
{
int version; /* sizeof(native_handle_t) */
int numFds; /* number of file-descriptors at &data[0] */
int numInts; /* number of ints at &data[numFds] */
int data[0]; /* numFds + numInts ints */
} native_handle_t;
...全文
657 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
susemm 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xwhbwas2008 的回复:]

to susemm:我下的2.2杂没有freescale的overlay阿?我2.2上面只有ti的



下了个2。3的代码,overlay只有ti和三星的。

三星的也是写的光秃秃的

/* A separate instance is created per overlay data side user*/
struct overlay_data_context_t {
……
[/Quote]

我这个代码是freescael imx51 evk开发板的代码,你那里自然不会有。
susemm 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xwhbwas2008 的回复:]

引用 3 楼 susemm 的回复:

引用 1 楼 xwhbwas2008 的回复:
native_handle_t早期版本中是overlay_handle_t;

struct overlay_data_context_t {
struct overlay_data_device_t device;
/* our private state goes below here */……
[/Quote]

data_shared_fd是从ashmem_create_region("overlay_data", size)创建的,也应该是相同的。
这些都是硬件相关的代码,各个板子会有不同。
方紫涵 2011-01-28
  • 打赏
  • 举报
回复
duoxie
方紫涵 2011-01-28
  • 打赏
  • 举报
回复
to susemm:我下的2.2杂没有freescale的overlay阿?我2.2上面只有ti的



下了个2。3的代码,overlay只有ti和三星的。

三星的也是写的光秃秃的

/* A separate instance is created per overlay data side user*/
struct overlay_data_context_t {
struct overlay_data_device_t device;
/* our private state goes below here */
int ctl_fd;
int shared_fd;
方紫涵 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 susemm 的回复:]

引用 1 楼 xwhbwas2008 的回复:
native_handle_t早期版本中是overlay_handle_t;

struct overlay_data_context_t {
struct overlay_data_device_t device;
/* our private state goes below here */
int ctl_fd;
int sha……

control_shared_fd和data_shared_fd应该对应于lz的那两个fd,
从其注释和代码来看,应该是控制fd和数据 fd。号称所有的overlay实例用滴是相同的控制fd和数据fd。

如有不对的地方,还请多多指教。
[/Quote]
看注释应该是只有control_shared_fd是相同的吧?data_shared_fd可以不同吧

我的理解是这样 你看呢?



susemm 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xwhbwas2008 的回复:]

楼上,我的是Android2.2(froyo)阿,我贴出来的是ti的overlay代码
[/Quote]

我贴的是freescale的代码,哈哈。

完全同意ls滴观点。

另外,偶在看 韩超, 梁泉的《Android系统原理及开发要点详解》,就是书使用的Android版本有些低,先老扫扫盲,有需要的时候再看看代码,必要的时候再来论坛上请教下大虾。
freshui 2011-01-27
  • 打赏
  • 举报
回复
这些都是HAL的数据结构。

HAL是用C写的,但是思想是C++的,熟悉面向对象的方法的话,理解起来还好。
方紫涵 2011-01-27
  • 打赏
  • 举报
回复
楼上,我的是Android2.2(froyo)阿,我贴出来的是ti的overlay代码

susemm 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xwhbwas2008 的回复:]
native_handle_t早期版本中是overlay_handle_t;

struct overlay_data_context_t {
struct overlay_data_device_t device;
/* our private state goes below here */
int ctl_fd;
int shared_fd;
.........……
[/Quote]


lz这个是哪个版本的Android的?

在我这个Android2.2(froyo)里,在overlay_data_context_t定义是这样的:

struct overlay_data_context_t {
struct overlay_data_device_t device;
/* our private state goes below here */
int control_shared_fd;//all overlay instances share the same control
int control_shared_size;
int data_shared_fd;
int data_shared_size;
int width;
int height;
int32_t format;
int num_buffer;//Number of buffers for overlay
int queue_threshold;
int buf_size;
int buf_queued;
OverlayAllocator *allocator;
OVERLAY_BUFFER *overlay_buffer;
overlay_control_shared_t *control_shared;
overlay_data_shared_t *data_shared;
};


control_shared_fd和data_shared_fd应该对应于lz的那两个fd,
从其注释和代码来看,应该是控制fd和数据fd。号称所有的overlay实例用滴是相同的控制fd和数据fd。

如有不对的地方,还请多多指教。
方紫涵 2011-01-27
  • 打赏
  • 举报
回复
native_handle_t早期版本中是overlay_handle_t;

struct overlay_data_context_t {
struct overlay_data_device_t device;
/* our private state goes below here */
int ctl_fd;
int shared_fd;
..........
}
最后面那俩fd是干吗的?google也没有个注释 真叫人费解!
求大虾告知,或者告知哪里有相关资料查阅也可以

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧