Copybit HAL模組分析報告–轉載

來源:互聯網
上載者:User

Copybit HAL模組分析報告

Rockie Cheng

aokikyon@gmail.com

1、copybit模組的繼承關係圖

2、copybit模組支援的映像格式


  注意,並不是所有硬體都支援這麼多格式
    COPYBIT_FORMAT_RGBA_8888    = HAL_PIXEL_FORMAT_RGBA_8888,
    COPYBIT_FORMAT_RGBX_8888    = HAL_PIXEL_FORMAT_RGBX_8888,
    COPYBIT_FORMAT_RGB_888      = HAL_PIXEL_FORMAT_RGB_888,
    COPYBIT_FORMAT_RGB_565      = HAL_PIXEL_FORMAT_RGB_565,
    COPYBIT_FORMAT_BGRA_8888    = HAL_PIXEL_FORMAT_BGRA_8888,
    COPYBIT_FORMAT_RGBA_5551    = HAL_PIXEL_FORMAT_RGBA_5551,
    COPYBIT_FORMAT_RGBA_4444    = HAL_PIXEL_FORMAT_RGBA_4444,
    COPYBIT_FORMAT_YCbCr_422_SP = HAL_PIXEL_FORMAT_YCbCr_422_SP,
  COPYBIT_FORMAT_YCbCr_420_SP = HAL_PIXEL_FORMAT_YCbCr_420_SP,
3、copybit支援的功能

* 映像旋轉
> 90°、180°、270°、水平翻轉、垂直翻轉
* Alpha Blending
> 數值範圍0-255
* 抖動
* 透明
* 模糊
* 剪裁

* Stretch(縮放)
* Bit Blit(塊拷貝,支援xy座標)



4、映像結構體

struct copybit_image_t {
    /* width 寬度*/
    uint32_t    w;
    /* height 高度 */
    uint32_t    h;
    /* format COPYBIT_FORMAT_xxx格式 */
    int32_t     format;
    /* base of buffer with image 基址*/
    void        *base;
    /* handle to the image 映像控制代碼,Native_handle.h (system/core/include/cutils)中定義*/
    native_handle_t* handle;
};
5、copybit模組支援的函數介面

(1)設定參數
int (*set_parameter)(struct copybit_device_t *dev, int name, int value);
(2)擷取資訊
int (*get)(struct copybit_device_t *dev, int name);
(3)Blit操作
int (*blit)(struct copybit_device_t *dev,
struct copybit_image_t const *dst,
struct copybit_image_t const *src,
struct copybit_region_t const *region);
(4)Stretch操作
int (*stretch)(struct copybit_device_t *dev,
struct copybit_image_t const *dst,
struct copybit_image_t const *src,
struct copybit_rect_t const *dst_rect,
struct copybit_rect_t const *src_rect,
struct copybit_region_t const *region);

高通Copybit 模組 HAL分析


1、Copybit Module寫法

struct copybit_module_t HAL_MODULE_INFO_SYM = {
    common: {
        tag: HARDWARE_MODULE_TAG,
        version_major: 1,
        version_minor: 0,
        id: COPYBIT_HARDWARE_MODULE_ID,
        name: "QCT MSM7K COPYBIT Module",
        author: "Google, Inc.",
        methods: &copybit_module_methods
    }
};
2、私人函數

(1)min(int a, int b)
(2)max(int a, int b)
(3)void MULDIV(uint32_t *a, uint32_t *b, int mul, int div)
(4)void intersect(struct copybit_rect_t *out,
                      const struct copybit_rect_t *lhs,
                      const struct copybit_rect_t *rhs)
  作用:Clip函數
(5)get_format(int format)
  作用:擷取圖形格式
(6)void set_image(struct mdp_img *img, const struct copybit_image_t *rhs)
作用:將Copybitimage結構體轉換為mdp image結構
(7)void set_rects(struct copybit_context_t *dev,
                      struct mdp_blit_req *e,
                      const struct copybit_rect_t *dst,
                      const struct copybit_rect_t *src,
                      const struct copybit_rect_t *scissor)
作用:設定矩形框
(8)void set_infos(struct copybit_context_t *dev, struct mdp_blit_req *req)
作用:設定mdp請求
(9)int msm_copybit(struct copybit_context_t *dev, void const *list)
作用:執行copybit操作
3、共有函數

(1)int set_parameter_copybit(
        struct copybit_device_t *dev,
        int name,
        int value)
作用:設定參數
參數類型:
   旋轉 0 90 180 270
   Alpha 0-255
   抖動 使能/禁止
   模糊 使能/禁止
   透明 0-7

(2) int get(struct copybit_device_t *dev, int name)
作用:擷取固定參數
參數:
  最小縮放小數位4-msm7k 8-msm8k
  最大縮放小數位4-msm7k 8-msm8k
  Copybit縮放小數位32
  Copybit旋轉步進角度(90°)
  
(3)int stretch_copybit(
        struct copybit_device_t *dev,
        struct copybit_image_t const *dst,
        struct copybit_image_t const *src,
        struct copybit_rect_t const *dst_rect,
        struct copybit_rect_t const *src_rect,
        struct copybit_region_t const *region)
作用,做stretch 和blit操作
通過一個while迴圈,積攢12個region,一次調用硬體驅動ioctl函數,將資料傳入驅動,進行stretch操作。
(4)int blit_copybit(
        struct copybit_device_t *dev,
        struct copybit_image_t const *dst,
        struct copybit_image_t const *src,
        struct copybit_region_t const *region)
作用:該操作沒有stretch操作
4、高通驅動中的不足之處:

查看核心2D驅動可知,MSM7k的做法是將buffer資料通過copy from
user函數複製到核心態,再由硬體驅動進行搬運。這樣在一定程度上會導致硬體加速效率降低。不過MSM7K使用了一個折中的做法,搬運的資料積攢到一定
程度(12個),在一次調用硬體驅動,統一傳輸,可以起到一定的緩衝作用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.