USB攝像頭驅動之設定屬性

2021-10-06 05:18:50 字數 2063 閱讀 6008

對於攝像頭的屬性有亮度,**度等等…,那怎麼去獲得/設定這些屬性呢,在應用層使用ioctl命令:vidioc_queryctrl,vidioc_g_ctrl

,vidioc_s_ctrl來查詢,獲取,設定當前攝像頭的屬性,所以在底層驅動中中我們必須來實現這些函式的定義,該函式原型如下

我們之前說過usb攝像頭一般會分為兩個介面,乙個是vc用於控制,乙個是vs用於傳輸,在之前我們已經把攝像頭影象顯示出來了,所以對於vs這部分是完成,現在我們看到vc控制部分,對於vc中的unit和terminal在**中稱為實體entity,在uvc_ctrl.c裡陣列static struct uvc_control_info uvc_ctrls,這個陣列裡每一項都對應乙個屬性,這個陣列裡就定義了uvc規範所支援的所有屬性,我們拿出乙個屬性定義來說明下:

,

我們設定亮度需要把資料發給硬體,發給vc中的哪個介面就由entity值來決定,顯然上面該屬性就是發給pu介面,pu介面就根據selector的值知道該屬性是用來設定亮度的,index對應process unit descriptor的bmcontrols[0],說明該屬性是來設定亮度的,size表示傳送的資料的大小,對於我們的設定支援哪些屬性,這需要我們去看videocontrol inte***ce的自定義描述符(通過ls usb命令列印出),那在**中我們怎麼去設定這些屬性呢,我們看到uvc_driver.c

uvc_drvier.c

uvc_ctrl_init_device

// 對於每乙個entity(it,pu,su,ot等)

list_for_each_entry

(entity,

&dev->entities, list)

// 把uvc_control和uvc_control_info掛構

uvc_ctrl_add_ctrl

(dev, info)

; ctrl->info = 某個uvc_control_info陣列項(同屬於乙個entity, index相同)

,

查詢當前攝像頭設定屬性,這裡我們手工設定為查詢亮度

/* 參考:uvc_query_v4l2_ctrl */

int myuvc_vidioc_queryctrl (

struct file *file,

void

*fh,

struct v4l2_queryctrl *ctrl)

/* 參考 : uvc_ctrl_get */

int myuvc_vidioc_g_ctrl (

struct file *file,

void

*fh,

struct v4l2_control *ctrl)

/* 參考: uvc_ctrl_set/uvc_ctrl_commit */

int myuvc_vidioc_s_ctrl (

struct file *file,

void

*fh,

struct v4l2_control *ctrl)

Android驅動USB攝像頭

先來個整體規劃 剛搜尋了一圈,在有乙個不錯的帖子,android系統原理及開發要點詳解 中也講 camera 硬體抽象層的,不過我是只做驅動,不能越界,先弄乙個 中星微 的z03 先 驅動 起來,讓做應用的先做,我在tiny6410上已經驗證可行 linux qt 不過沒有進行android的驗證,...

USB攝像頭ROS驅動

在ros下常用的主要有兩種驅動包 usb cam和uvc cam 我這裡用的是usb cam包 第一次使用首先要安裝這個包,安裝完了之後就可以很方便的執行攝像頭節點了 1.在ros工作空間安裝ros cd catkin ws src git clone usb cam cd catkin make ...

攝像頭驅動之設定屬性 學習筆記

1 引言 1 之前的程式只實現了資料的傳輸,在pc linux環境下智慧型看到攝像 頭捕抓的資料,不能調節亮度等屬性。解除安裝自己寫的驅動程式,安裝系統自帶的驅動,執行xawtv,可以檢視可以調節的屬性 2 設定屬性 1 應用程式xawtv部分分析 xawtv.c grabber scan ng v...