說起行車記錄儀,大首先想到的就是汽車駕駛途中,被開啟用於記錄道路情況的拍攝儀器。其實手機上現在也有客戶要求做這個功能,我不知道客戶是本著大功能小裝置的理念還是真的是手機市場真有這種巨大需求,自身就遇到這個特殊的需求。
平台:mt6261
要求:實現行車記錄儀功能,並分為可設定的一分鐘、五分鐘、三十分鐘儲存一次的選單選項。
1、巨集定義,做任何新的功能,肯定至少都應該有乙個相關的巨集控制這個功能的開關,便於後期維護。
2、選單,既然客戶需要有選單可供選擇,很明顯他本身也應該是乙個選單形式的功能。那麼我們就採用mt6261上建立選單的方式來建立乙個選單:
void entrycarcorderscreen(void) //行車記錄儀上層選單入口
menu_item_id = organizer_carcorder_menu;
menu_text_id =str_menu_carcorder;
guibuffer = mmi_frm_scrn_get_active_gui_buf();
nitems =getnumofchild_ext(menu_item_id);
getsequencestringids_ext(menu_item_id, itemlist);
getsequenceimageids_ext(menu_item_id, itemicons);
setparenthandler(menu_item_id);
registerhighlighthandler(executecurrhilitehandler);
showcategory52screen(
menu_text_id,
getroottitleicon(menu_item_id),
str_global_ok,
img_global_ok,
str_global_back,
img_global_back,
nitems,
itemlist,
itemicons,
0,0,
0,guibuffer);
setcentersoftkeyfunction(mmicarcordercscreen, key_event_up);
setleftsoftkeyfunction(mmicarcordercscreen, key_event_up);
setrightsoftkeyfunction(mmi_frm_scrn_close_active_id, key_event_up);
}
對應這個選單的高亮函式:
void highlightcarcorder(void)
這樣就建立好了乙個選單,知道這個選單放到那個位置,隨客戶的意思就行。
setcentersoftkeyfunction、setleftsoftkeyfunction、setrightsoftkeyfunction分別代表中間鍵、左鍵、右鍵設定的相應事件。
3、功能,這個功能需要用到的就是照相機功能,所以很多部分都是可以參照照相機裡的原理來做,只是需要注意做一些互斥的判斷。慵懶的做法就是搞嫁接,就是直接在攝像頭**裡面進行嫁接修改。這樣的好處就是快,但是後期難以維護。好點的做法就是剝離出來,除非是相同的函式,其他的都單獨自己寫。這裡關於進入的預覽介面這些都直接省略,跟攝像頭一樣一樣的。
需要注意的地方:就是預覽後手動進入錄影模式的時候,在時間到達設定點之前,需直接儲存並重新自動開始,這裡需要處理好邏輯關係,不然很容易宕機,或者根本停止不了。
預覽狀態下需要清空一切按鍵上此前的訊息資訊,所以在 clearkeyevents();的同時,需要把自身在這個功能需要的按鍵均清理。
if(g_vdorec_cntx.setting.video_format == vdorec_setting_video_format_mjpeg)
else
然後就是開啟存粗位置的預設的位置,判斷是否已經具有資料夾,如果沒有就重新建立,如果有則就在該目錄下,增加條目,並且寫入nv確保不會丟失。
file_handle = fs_open((wchar*) file_buf_p, fs_read_only);
if (file_handle >= 0)
else
基礎框架完成後,就需要進一步對時間的控制處理:
static const u16 g_vdorec_il_time_select_str =
;static const cui_inline_itestarttimer_select_struct g_vdorec_il_time_select =
; static const cui_inline_set_item_struct g_mmi_vdorec_setting_time_inline_item =,,
};
5、將上述選單的時間控制新增到執行函式中,採用starttimer是個很好的辦法,時間一到,就做出來相應的處理。當下也有幾種情況的判斷,既是在預覽狀態、錄製狀態、還是暫停狀態。
如果是在預覽狀態,再次觸發中間鍵,應該進入的是錄製狀態,如果是在錄製狀態,應該是停止且儲存,如果是在暫停狀態,則應該是錄製狀態。
因此:case vdorec_state_preview: --------------> mmi_carcorder_enter_state(vdorec_state_record);
case vdorec_state_pause:--------------------->mmi_carcorder_rsk_release_hdlr()
case vdorec_state_record:---------------------->mdi_video_rec_record_stop();
同時兼顧timer的時間節點的控制配合,就基本能完成此種功能。
(寫的不好,請勿見外,一方面不太熟悉這個部落格的使用方式,另一方面自己也沒太多寫部落格的經驗)
CCF 201712 4 行車路線
思路 用兩個陣列維護到達某個點的最小大路距離和最小小路距離,注意結果中間過程可能爆int,不加long long 只有70分。有一種特殊情況就是通過走兩次大路,消除連續的小路值,這裡就是用兩個陣列維護的原因。include using namespace std const int maxn 100...
CCF201712 4 行車路線
一 題目大意 問題描述 小明和小芳出去鄉村玩,小明負責開車,小芳來導航。小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走 s公里小明會增加 s2的疲勞度。例如 有5個路口,1號路口到2號路口為小道,2號路口到3號...
CCF認證 2017 12 行車路線
小明和小芳出去鄉村玩,小明負責開車,小芳來導航。小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走 s公里小明會增加 s2的疲勞度。例如 有5個路口,1號路口到2號路口為小道,2號路口到3號路口為小道,3號路口到4...