RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【AWTK使用經(jīng)驗】如何播放視頻或攝像頭畫面

ZLG致遠電子 ? 2024-07-04 08:25 ? 次閱讀

AWTK是基于C語言開發(fā)的跨平臺GUI框架?!禔WTK使用經(jīng)驗》系列文章將介紹開發(fā)AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設(shè)計自定義進度條?這些都會在系列文章進行解答。

假設(shè)目前想在ZTP800示教器的AWTK程序中實現(xiàn)播放視頻或者播放攝像頭畫面的效果,可以借助AWTK的mutable_image控件或usb_camera控件來顯示畫面。下圖則是ZTP800示教器使用usb_camera控件Demo顯示攝像頭畫面的效果圖:
e78bbb6a-399b-11ef-a655-92fbcf53809c.png圖1ZTP800示教器顯示攝像頭畫面效果圖

usb_camera控件和mutable_image控件的對比

關(guān)于文章開頭提到的兩個控件對比如下:

1. mutable_image控件

mutable_image控件可以顯示視頻畫面,也可以顯示攝像頭等外接設(shè)備畫面。適用性比較廣泛,但使用起來相對繁瑣一些。它本身是不負責(zé)解析視頻或攝像頭設(shè)備畫面數(shù)據(jù)的,用戶可以通過第三方庫解析并獲取畫面原始RGB數(shù)據(jù),將數(shù)據(jù)拷貝到mutable_image控件特定回調(diào)函數(shù)里面即可顯示畫面。

2. usb_camera控件

usb_camera控件本質(zhì)上是對mutable_image控件的封裝,專門用于顯示攝像頭畫面。在控件內(nèi)部實現(xiàn)了獲取并解析攝像頭畫面數(shù)據(jù)的代碼,用戶只需調(diào)用特定的API即可顯示攝像頭畫面,而不用手動拷貝原始RGB數(shù)據(jù)。與mutable_image相比沒那么廣,但是使用起來相對方便。

使用usb_camera控件顯示攝像頭畫面

使用usb_camera控件顯示攝像頭畫面的流程比較簡單:在AWStudio插件列表可以安裝該插件,之后在自己的AWTK應(yīng)用放置一個usb_camera控件和一個按鈕控件,設(shè)置usb_camera控件的攝像頭設(shè)備、大小等屬性,并且給該按鈕注冊點擊事件用于打開攝像頭。e7b0fbfa-399b-11ef-a655-92fbcf53809c.png圖2使用usb_camera控件頁面布局示例

按鈕點擊事件回調(diào)函數(shù)可以參考以下代碼示例:

static ret_t on_button_click(void* ctx, event_t* e) { ret_t ret = RET_OK; widget_t* win = WIDGET(ctx); widget_t* camera = widget_lookup(win, "usb_camera", TRUE);
if(usb_camera_is_open(camera) && usb_camera_is_play(camera)) { usb_camera_stop(camera); usb_camera_close(camera); } else { ret = usb_camera_open(camera); if (ret != RET_OK) { dialog_toast("open camera fail", 3000); return ret; } return usb_camera_play(camera); } return RET_OK;}


使用mutable_image控件顯示視頻或攝像頭畫面

mutable_image控件主要提供了 mutable_image_set_prepare_image 函數(shù)注冊一個回調(diào)函數(shù),該回調(diào)函數(shù)在每次繪制之前被調(diào)用,用于準備下一幀要顯示的圖片。
由于mutable_image控件本身不帶有獲取視頻或攝像頭畫面的功能,因此獲取畫面數(shù)據(jù)的操作可以借助第三方庫(如:OpenCV)來實現(xiàn)。mutable_image為了以最高性能繪制,會采取和當(dāng)前LCD相同的位圖數(shù)據(jù)格式(調(diào)用lcd_get_desired_bitmap_format 獲?。?strong>。因此為了兼容不同LCD格式,可以在回調(diào)函數(shù)中寫好不同格式的拷貝像素邏輯。

下面則是利用OpenCV接口獲取攝像頭數(shù)據(jù)并顯示到mutable_image控件的部分代碼示例:

static cv::Mat cv_image;static cv::VideoCapture cv_capture;
/* mutable_image_set_prepare_image回調(diào)函數(shù) */ret_t mutable_image_prepare_image(void* ctx, bitmap_t* image) { uint8_t* image_buff = NULL; uint32_t bpp = bitmap_get_bpp(image); widget_t* widget = WIDGET(ctx); bitmap_format_t format = (bitmap_format_t)image->format; cv_capture >> cv_image; image_buff = bitmap_lock_buffer_for_write(image); for (int h = 0; h < image->h; ++h) { uint8_t* p_buff = image_buff + image->w * h * bpp; for (int w = 0; w < image->w; ++w) { /* 調(diào)用OpenCV接口獲取攝像頭當(dāng)前幀的原始RGB數(shù)據(jù) */ cv::Vec3b val = cv_image.at(h, w); if (format == BITMAP_FMT_RGB888 || format == BITMAP_FMT_RGBA8888) { /* RGB888或 RGBA8888示例, 由于該示例上面cv::at數(shù)據(jù)的格式為BGR,需要進行轉(zhuǎn)換, 具體是否需要轉(zhuǎn)換根據(jù)實際格式而決定 */ uint8_t blue = val[0]; uint8_t green = val[1]; uint8_t red = val[2]; p_buff[0] = red; p_buff[1] = green; p_buff[2] = blue; if (format == BITMAP_FMT_RGBA8888) { p_buff[3] = 255; } p_buff += bpp;
} else if (format == BITMAP_FMT_BGR888 || format == BITMAP_FMT_BGRA8888) { ... } else if (format == BITMAP_FMT_BGR565) { } else if (format == BITMAP_FMT_RGB565) { ... } } }
return bitmap_unlock_buffer(image);}
ret_t camera_open(widget_t* win) { widget_t* mutable_image = widget_child(win, "mutable_image");
cv_capture.open(0); mutable_image_set_prepare_image(mutable_image,mutable_image_prepare_image, mutable_image); return RET_OK;}

上面代碼通過設(shè)置mutable_image控件的回調(diào)函數(shù),在回調(diào)函數(shù)里面使用OpenCV的API獲取到攝像頭原始RGB數(shù)據(jù),最后將數(shù)據(jù)寫到mutable_image控件畫面緩沖區(qū)上。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 視頻
    +關(guān)注

    關(guān)注

    6

    文章

    1942

    瀏覽量

    72884
  • 攝像頭
    +關(guān)注

    關(guān)注

    59

    文章

    4836

    瀏覽量

    95597
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136683
  • awtk
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    226
收藏 人收藏

    評論

    相關(guān)推薦

    AWTK使用經(jīng)驗】如何更換AWTK SDK與渲染模式

    AWTK是基于C語言開發(fā)的跨平臺GUI框架。《AWTK使用經(jīng)驗》系列文章將介紹開發(fā)AWTK過程中一些常見問題與解決方案,例如:如何播放
    的頭像 發(fā)表于 08-01 08:25 ?1066次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗</b>】如何更換<b class='flag-5'>AWTK</b> SDK與渲染模式

    android多攝像頭同時預(yù)覽

    程序可以打開,預(yù)覽畫面還算流暢,大概25幀左右。調(diào)試USB攝像頭通過UVC生成了video節(jié)點,接著移植了camera的HAL層庫文件,可以順利打開。當(dāng)要調(diào)用第二個USB攝像頭的時候就會遇到一些麻煩
    發(fā)表于 01-18 14:55

    怎么在在無人機上加攝像頭,將拍攝畫面實時傳回,在電腦屏幕播放

    在無人機上加攝像頭,將拍攝畫面實時傳回,在電腦屏幕播放推薦課程:張飛四旋翼飛行器視頻套件,76小時吃透四軸算法http://t.elecfans.com/topic/40.html?e
    發(fā)表于 10-30 19:27

    關(guān)于網(wǎng)絡(luò)攝像頭本地化的方法

    協(xié)議。所以用ONVIF Device Manager來查看局域網(wǎng)中的攝像頭如圖左邊能看到攝像頭IP。右下角能查看到RTSP視頻流鏈接。復(fù)制這個鏈接接著打開VCam,選擇流媒體在地址欄粘貼上面復(fù)制的rtsp鏈接[img=110,0
    發(fā)表于 05-30 09:21

    OV7670攝像頭模塊是如何實現(xiàn)攝像頭畫面上傳到onenet的

    OV7670攝像頭模塊是如何實現(xiàn)攝像頭畫面上傳到onenet的?
    發(fā)表于 09-30 08:53

    OKMX6Q_C外接ov5640攝像頭視頻畫面會閃爍是什么原因呢

    我用OKMX6Q_C外接一個ov5640攝像頭,使用forlinux qt5 ov5640應(yīng)用打開預(yù)覽時,發(fā)現(xiàn)如果在攝像頭上快速度移動時(如手),視頻畫面會閃爍,像有一條切線一樣。不知
    發(fā)表于 01-10 06:47

    使用Arduino和網(wǎng)絡(luò)攝像頭的基本視頻流?

    我知道很多人說 arduino 不是處理視頻的最佳方式,但我在使用 OctoPi(基于 arduino 的 3D 打印平臺,還具有網(wǎng)絡(luò)攝像頭流)方面經(jīng)驗豐富,所以我知道它能夠做我想做的事情想。 我
    發(fā)表于 05-04 06:51

    mp4文件偽裝攝像頭畫面

    電子小白,在網(wǎng)上苦苦尋求方案,請各位路過大俠指點: 主管交代,要弄一個Android設(shè)備。 能夠用 mp4 視頻文件偽裝成攝像頭畫面,然后循環(huán)播放。 不知道能不能實現(xiàn)呢,請大家提供下思
    發(fā)表于 05-10 18:37

    基于DirectShow的多攝像頭視頻采集

    1.為什么使用DirectShow 筆者使用的是兩個USB攝像頭,單攝像頭視頻采集使用OpenCV的VideoCapture類沒有問題,但是雙攝像頭就有問題,一個正常,另外一個采集不到
    發(fā)表于 02-08 03:24 ?3282次閱讀

    使用Python OpenCV讀取攝像頭視頻文件并播放顯示的詳細說明

    要從攝像頭視頻文件讀取視頻,首先導(dǎo)入opencv 庫cv2. 使用cv2.VideoCapture() 方法創(chuàng)建一個VideoCapture 對象。該方法接收
    發(fā)表于 01-19 16:57 ?5次下載

    特斯拉車內(nèi)攝像頭視頻畫面曝光

    近日,有外媒爆料消息稱:國外圈內(nèi)某位知名的大神留露放出了幾段關(guān)于特斯拉model 3汽車內(nèi)的攝像頭拍攝畫面高清視頻,視頻透露了特斯拉model 3汽車車內(nèi)的后視鏡疑似遮擋部分了
    的頭像 發(fā)表于 04-07 09:20 ?3143次閱讀

    如何選擇視頻會議攝像頭

    企業(yè)通信系統(tǒng)具有多元化的特點。在視頻會議系統(tǒng)的采購中,必須以需求為主,視頻會議攝像頭也是如此。必須根據(jù)視頻會議場地的大小進行選擇,不同的是數(shù)碼變焦
    發(fā)表于 04-26 10:57 ?2118次閱讀

    27系列DGUS智能屏發(fā)布:可實時播放高清模擬信號攝像頭視頻

    針對高清晰度的模擬信號攝像頭視頻畫面的顯示需求,迪文特推出27系列DGUS智能屏。該系列智能屏可適配常見的AHD攝像頭、CVBS攝像頭,支持
    的頭像 發(fā)表于 12-14 08:13 ?520次閱讀
    27系列DGUS智能屏發(fā)布:可實時<b class='flag-5'>播放</b>高清模擬信號<b class='flag-5'>攝像頭</b><b class='flag-5'>視頻</b>

    高清網(wǎng)絡(luò)攝像頭多媒體智能屏

    迪文全新推出的28系列智能屏,是面向屏幕實時顯示高清網(wǎng)絡(luò)攝像頭視頻畫面應(yīng)用的產(chǎn)品。該系列智能屏可通過以太網(wǎng)WiFi連接攝像頭,可接收H.2
    的頭像 發(fā)表于 02-19 13:21 ?583次閱讀
    高清網(wǎng)絡(luò)<b class='flag-5'>攝像頭</b>多媒體智能屏

    AWTK使用經(jīng)驗】如何在AWTK顯示阿拉伯文本

    AWTK是基于C語言開發(fā)的跨平臺GUI框架。AWTK使用經(jīng)驗系列文章將介紹開發(fā)AWTK過程中一些常見問題與解決方案,例如:如何播放
    的頭像 發(fā)表于 09-12 08:07 ?349次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗</b>】如何在<b class='flag-5'>AWTK</b>顯示阿拉伯文本
    RM新时代网站-首页