2018年9月23日 星期日

[Embedded] Buildroot -- 建置 gstreamer 的流程

本篇說明如何編譯gstreamer以及相關檔案。為了簡單,僅記錄使用 buildroot 的編譯步驟,如下:

 1. 安裝 buildroot
a. 安裝 buildroot,安裝過程可參考此篇  。
b. 執行下列指令,試試 buildroot 建立的image是否正確。 
$ cd output/images
$ QEMU_AUDIO_DRV=alsa qemu-system-arm -kernel zImage \ -M vexpress-a9 -m 512 -drive file=rootfs.ext2,if=sd,format=raw \ -dtb ./vexpress-v2p-ca9.dtb \ --append "root=/dev/mmcblk0 console=ttyAMA0,115200" -nographic
2. 編譯 gstreamer
a. 設定 gstreamer 選項,再次編譯
$ cd buildroot/buildroot-2017.11
$ make menuconfig
b. ToolChain 設定修改成 glib 
Toolchain -> C library -> glibc  
c. 選擇 gstreamer 
Target packages -> Audio and video applications -> gstreamer 1.x
為了方便使用,建議開啟 gst1-libav, gst1-rtsp-serve 
 
另外 gst1-plugins-base, gst1-plugins-good 也要選擇自己需要的,例如選擇rtsp, alsa, souphttpsrc, videoconvert
d. 重新編譯
$ make clean;make 
e. Test Gstreamer 
$ QEMU_AUDIO_DRV=alsa qemu-system-arm -kernel zImage \ -M vexpress-a9 -m 512 -drive file=rootfs.ext2,if=sd,format=raw \ -dtb ./vexpress-v2p-ca9.dtb \ --append "root=/dev/mmcblk0 console=ttyAMA0,115200" -nographic
$ gst-launch-1.0 -v fakesrc num_buffers=5 ! fakesink 
輸出結果如下:到達此步驟,表示編譯成功。
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.003942000
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
Setting pipeline to PAUSED ... 
若是剛剛編譯有加入 souphttpsrc則可以試試此命令 
$ gst-launch-1.0 souphttpsrc is-live=true location=http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 ! hlsdemux ! decodebin ! videorate ! videoconvert ! ximagesink
3. 編譯成功後,若要在嵌入式平台上使用,則要注意相關 library 是否都已存在於平台內。
$ arm-linux-gnueabihf-readelf -d ./gst-launch-1.0
Tag                Type                               Name/Value
0x00000001 (NEEDED)                     Shared library: [libgstreamer-1.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libgobject-2.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libgmodule-2.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libglib-2.0.so.0]
0x00000001 (NEEDED)                     Shared library: [librt.so.1]
0x00000001 (NEEDED)                     Shared library: [libdl.so.2]
0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]
參考資料:


2018年8月3日 星期五

coverity 用法

Coverity 是一套靜態程式碼分析工具,現在可以免費提供使用,以下紀錄用法。

a. 連上網站 https://scan.coverity.com/

b. 選擇 "Sign Up For Free"

c. 接著選擇 "Sing in with GitHub"

d. 選擇 "Add a New Project"

e. 選擇 "Register my GitHub project"

f. 選擇 "Reload repository list from GitHub"

g. 選擇設定想要掃描的 project

h. 下載  Coverity Build Tool
$ https://scan.coverity.com/download/cxx/linux64/cov-analysis-linux64-2017.07.tar.gz
$ tar xvf cov-analysis-linux64-2017.07.tar.gz
$ export PATH=~/cov-analysis-linux64-2017.07/bin:$PATH

i. 接著進行 local build,並將編譯結果壓縮成 tar 檔
$ cov-build --dir cov-int make
$ tar czvf myproject.tgz cov-int

j. 選擇 submit build 上傳 tar file,然後等待 Server 分析結果

參考資料:
https://scan.coverity.com/

2018年4月28日 星期六

Audio 開發參考資料

本篇整理開發Audio應用時的一些參考資料。

Digital Audio 原理
数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。
貝(dB)是十分之一貝爾(B):1B = 10dB。1貝爾的兩個功率量的比值是10:1,1貝爾的兩個場量的比值是功率之比是10,則其分貝數湊巧也是10。功率之比是2,則約為3分貝,更精確地說是103/10或1.9953,與2相比較有0.24%的誤差。類似地,3分貝意味著電壓之比約是或1.414。6分貝對應功率增加了4倍,電壓增加了2倍。6分貝的功率之比確切值是106/10或3.9811,與4的誤差為0.5%.

TinyALSA
tinyalsa是Google在Android 4.0之後推的基於alsa內核的用戶層音頻接口。在Android 4.0之前還一直是使用這alsa-lib接口。
1 frame of a Stereo 48khz 16bit PCM stream is 4 bytes.
1 frame of a 5.1 48khz 16bit PCM stream is 12 bytes.

ALSA

Audio Sample

Echo Cancellation

Source Code Example
  • Read Wave File
  • TBD

其他


2018年4月8日 星期日

iMAC 2010 拆機

2010年買的 iMAC,上個月螢幕出現花屏了,問一下店家,修理要8000元,心想乾脆直接買一台新的算了。但是舊的機器還是得要先拆出硬碟,再送回收,下面將此過程作一紀錄。

1. 原本遇到的問題是開機會白屏,怎麼等都無法正常開機。按下 Shift 以安全模式開機,可以開機,但是會花屏,如下,8年前的東西還要花8000元修理,怎麼想都不划算。把堪用的東西拆一拆,然後送回收吧。


2. 拆開過程主要是參考 iFixit 的此篇文章,其實是滿簡單的,只是 iMAC2010 拆開前面板時,有幾條線會連著主板,要小心點拆。圖片整理如下,作個紀錄

第一條要拆的線,先拉一下小黑片,就拆下來了


第二條要拆的線


第三條要拆的線

第四條要拆的線


拆完後的面板背面


 3. 後續拆硬碟、光碟,就不需要什麼技巧了。略。


參考資料:
治療iMac老年癡呆症——更換硬碟(20", Mid 2007) 
[蘋果急診室] 拆螢幕一點都不可怕!簡單三樣工具,讓你輕鬆拆開 iMac 換硬碟並清理灰塵~
【開機技巧】15 個新手必學 Mac 開機組合鍵!
關於 Mac 電腦的啟動音
送修前請試試!Mac 萬用自救兩招:清 NVRAM(PRAM)與重置 SMC

2018年3月10日 星期六

2018年3月4日 星期日

2018年2月18日 星期日

MAC OS 避免 USB NTFS 唯讀的方法

步驟記錄如下:

1. $ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            499.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3 
/dev/disk1 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk1
   1:               Windows_NTFS KINGSTON                15.6 GB    disk1s1
此時可以得知 USB 碟的標籤是 KINGSTON

2. $ sudo vi /etc/fstab
LABEL=KINGSTON none ntfs rw,auto,nobrowse
注意:因為設定為 nobrowse,所以以後插入此 USB碟的時候,在 finder 內不會顯示此 USB 碟。
3. 移除 USB, 重新插入一次

4. $ sudo ln -s /Volumes ~/Desktop/Volumes


參考資料: