2007年10月24日 星期三

Nokia N95 not support "CameraControl"

沒想到Nokia N95竟然不支援CameraControl,都已經支援AMMS了,沒想到只有部份的packages可以正常使用,看來真的要朝Symbain C++邁進了!

AMMS中不支援的packages有:
  • javax.microedition.amms.control.camera

  • javax.microedition.amms.control.imageeffect

  • javax.microedition.amms.control.tuner

詳細資訊

Java ME Developer's Library 1.4

因為無法使用AMMS中camera的packages,導致無法調整J2ME在錄影時的畫質,看來只能使用176x144 15 fps的畫質來進行截取了.....

另外,在撰寫程式時發現,如果直接使用"capture://video"是可行的~
player = Manager.createPlayer("capture://video");
但要調整其編碼方式,如果直接將參數加在後面,在執行程式時會出現exception。例:
player = Manager.createPlayer("capture://video?encoding=3gpp");
or
player = Manager.createPlayer("capture://video?encoding=mp4");
但如果不要使用"capture://video",改為"capture://devcam0"的話就可以更改編碼方式,如下例:
player = Manager.createPlayer("capture://devcam0?encoding=video/mp4");


2007年10月12日 星期五

Samsung and Sun → Java Phone

  10/10時,Samsung和Sun宣怖要合作開發Java Phone與iPhone競爭手機的市場,而且將會比iPhone來的便宜,甚至功能會超越熱賣的iPhone。好奇的是為什麼會與Samsung合作呢?或許是因為Samsung在近幾年在3C產品的技術及創新,不斷的提升的關係吧;不過,根據報導Samsung將提供硬體上的支援,而Sun提供軟體上的技術,期待此合作的產品推出。

  其實Java Phone很早前就提出了(1998年時有提出Java OS與Java CPU),在2006年的JavaOne時,SavaJe這家公司提出了這項產品,或許大家會認為所謂的Java Phone與現在的Java手機game或是軟體有何差異?事實上,差異是很大的,普遍我們看到的Java手機都是在各家公司所研發的OS(Symbian, WinCE等)之上放置所謂的虛擬機器(JVM,手機上也有稱為KVM),而下載的Java遊戲則在此KVM上運行;而SavaJe所提出的Java Phone則擺脫其它的OS,直接將Java VM運行在硬體之上。
(註:SavaJe OS的廣義稱法是SavaJe Mobile Platform,過去手機用的SavaJe OS稱為SavaJe OS Smartphone Edition。)
2006年時JavaOne展示的Java Phone

2007年10月11日 星期四

Ubuntu Mouse "上一頁"功能設定

  最近買了一隻新的滑鼠,發現在Linux上無法像Windows直接可以使用上一頁的功能,造成瀏覽敗家相關網頁的不便。上網找了相關的資料,發現還蠻多資料可以參考,但是網路上大部份都是討論七鍵滑鼠的問題,而我使用的是Microsoft迷你鯊,只有提供六鍵沒有第七鍵。

  如果使用六鍵滑鼠的人,可以將/etc/X11/xorg.conf裡mouse相關設定改為(粗體部份):
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ExplorerPS/2"
Option "ButtonMapping" "1 2 3 7 6"
Option "ZAxisMapping" "4 5"
Option "Buttons" "7"
Option "Emulate3Buttons" "true"
EndSection
  上述設定中,ButtonMapping主要是將滑鼠的按鍵mapping到對應數值"1 2 3"分別對應"左 中 右"鍵,"6 7"對應的是滑鼠的"下一頁 上一頁",但是問題來了,因為我的滑鼠並沒有第七鍵的關係,所以必須要將"6 7"對調,變成如上述設定,這樣一來可以第六鍵才可以mapping到上一頁。另外"XAxisMapping"是設定滑鼠滾輪的按鍵。
PS. 如果將Option "Buttons" "7"中的數值改為6的話,滑鼠的上一頁鍵就會變成Button 9,所以才將數值設為7。

  另外如果要測試對應按鍵的數值,可以在使用"xev"指令進行滑鼠按鍵的監測。

2007年10月10日 星期三

Eclipse HotKey

把Eclipse覺得好用的HotKey列出來:

程式碼自動排版:Ctrl+Shift+F
└如果從另一地方複製的程式排版有問題時,可以透過此熱鍵進行自動排板。

編譯程式:Ctrl+B
└快速編譯目前project的程式

快速執行程式:Ctrl + F11
└快速執行目前project的程式

將選取的文字註解:Ctrl+/
└當用滑鼠選起的文字加上此熱鍵可以快速註解,很適合debug。

Template:Alt + /
└加快撰寫程式的速度,如當使用for+Alt + /時,會馬上將for迴圈的程式結構自動填上。如需要增加Template可以從Windows→Preferences...→Java→Editor→Template進行設定。

2007年10月7日 星期日

Serial Port Monitor相關軟體

最近又要開始接觸RFID相關的研究,發現Windows內建的超級終端機不大方便,用來解析16進位的資料並不好用,所以就搜尋網路上可以用的serial port軟體。

以下列了幾個不錯的監控軟體:

Free Serial Port Monitor
└ 提供免費版,但要全功能需要花錢註冊。

Advanced Serial Port Monitor

Advanced Serial Port

Access Port
└ 提供免費版,也有支援繁體中文喔。(推薦)
Access Port

Hinet hiChannel 無畫面問題

  因為新住的地方沒有電視的關係,所以都必需要透過網路的方式收看電視新聞,因為使用Hinet的ADSL也有免費的電視可看,所以就選擇使用hiChannel來收看,發現竟然無畫面有聲音,更新了Flash、Media Player也都沒有用,後來發現必需要設定Media Player裡面的設定,才可以正常收看。

進入Media Player→選項→效能→視訊加速(進階)

勾選"使用重疊"(藍框部份)
確定後,再重開一次就可以正常收看嘍。

2007年10月3日 星期三

J2ME開發相關資源

Forum Nokia Java Code and Exmple
└Nokia所提供的J2ME上開發的一些範例

MMAPI Support
└MMAPI在Nokia各手機支援多媒體的程度

Java ME Device Table
└查詢目前支援J2ME的手機所提供哪些profile

Eclipse
└開發Java的好工具

EclipseME
└開發J2ME的工具(plugin)

2007年10月1日 星期一

有關J2ME與Camera

最近在整理與評估J2ME與Symbian C++對於camera的支援程度,感覺還蠻多東西要survey的。

最近幾年新增的J2ME JSR,並找了之後camera會使用到的JSR

JSR-135 MMAPI (Mobile Media API)

JSR-234 高階多媒體補充AMMS (Advanced Multimedia Supplements)

JSR 226 延展性2D 向量圖應用程式 (Scalable 2D Vector Graphics API for J2ME)

目前確定的在MMAPI上N95目前可順利執行,且抓圖也正常。

JSR-234與JSR-226在N95上確定支援,似乎只有S60 3nd FP1的手機才支援(N80不支援)。不過也發現Sun也有提供J2ME Device Table讓使用者查詢手機支援JSR的程度。

Nokia N95支援的JSR Profile
CLDC 1.1 (basic)
MIDP 2.0
(basic)
M3DAPI 1.0
Scalable 2D Vector Graphics
MMAPI / JSR 135
Web Services
Bluetooth
Adv Multimedia Supp / JSR 234
Nokia UI API
SATSA
Location API
PDA Optional
WMA 2.0 / JSR 205
SIP API
JTWI
Nokia官方網站也有詳細N95的規格

MMAPI抓取內置相機的方式
//利用Player去抓取內置相機路徑
Player player = Manager.createPlayer( "capture://video" );
※注意:如果要進行拍照, 且要輸出為jpeg格式時, 必需要將"capture://video"改為"capture://devcam0"才可正常在MIDlet上正確顯示
//初始化
player.realize();
//抓取Video control
VideoControl videoControl = (VideoControl) ( player.getControl("VideoControl") );
//設定Display mode
videoControl.initDisplayMode( VideoControl.USE_DIRECT_VIDEO, this );
//設定video顯示位置
videoControl.setDisplayLocation(x, y);
//設定video顯示大小
videoControl.setDisplaySize( Width, Height );

使用MMAPI錄音
//建立手機內置錄音的資料來源(DataSource)
Player p = Manager.createPlayer("capture://audio");
p.realize();
RecordControl rc = (RecordControl)p.getControl("RecordControl");
//設定儲存位置
rc.setRecordLocation("file:/tmp/audio.wav");
rc.startRecord(); //開始紀錄
p.start(); //錄音五秒
Thread.currentThread().sleep(5000);
p.stop(); //停止
rc.stopRecord(); //停止紀錄
rc.commit(); //完成
使用MMAPI拍一張照片
//從camera抓取一張照片, 如果傳入值設定為null時, 抓取格式為系統預設值.
byte[] pngImage = videoControl.getSnapshot( null );

也可以把null替換成下列格式,抓取所想要的圖片格式
encoding=gray8&width=160&height=120
encoding=jpeg&quality=80&progressive=true&type=jfif
(progressive JPEG with quality 80 in jfif format)
encoding=jpeg&type=exif
(JPEG in exif format)
encoding=png&colors=rgb888
(24 bits/pixel PNG)
encoding=rgb888
(raw 24-bit rgb image)
encoding=rgb&colors=rgb888
(raw 24-bit rgb image)

//example
byte[] pngImage = videoControl.getSnapshot( "encoding=png&colors=rgb888 " );

//最後再將取得的data建立成image, 並draw出來
Image image = Image.createImage(pngImage, 0, pngImage.length);
g.drawImage(image, 0 , 0 , 0);
以上階為程式片段。