谁能直白的解释下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;