本文將安裝 DIGITS 2.0 於 Jetson TX1, 作業環境為 JetPack 2.1.

DIGITS 需要使用 NVIDIA Caffe 分支, 可由 GitHub 下載. Caffe 安裝說明請参考 Caffe 與 cuDNN 一文.

下載 NVIDIA Caffe 分支

$ git clone https://github.com/NVIDIA/caffe.git nvcaffe
$ cd nvcaffe/
$ cp Makefile.config.example Makefile.config

(编譯前請確認 USE_CUDNN := 1 是開啟的)
$ make all -j4

安裝 Python 與所需元件

$ sudo apt-get install python python-pip python-numpy python-pydot

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文介绍 Caffe 在 Jetson TX1 開發平台上安裝與使用深層神經網路函式庫 (cuDNN). 
使用套件如下:

JetPack For L4T 2.1 (L4T 23.2, Ubuntu 14.04 LTS)
CUDA Toolkit 7.0
cuDNN V4 (ARMv7)
Caffe

你可能需要登入 NVIDIA 開發者網站 (https://developer.nvidia.com) 才能下載 CUDA 與 cuDNN 套件. JetPack For L4T 2.1 安裝不在此說明.

Jetson TX1 Ubuntu 14.04 環境設定

$ sudo add-apt-repository universe
$ sudo apt-get update

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文記錄 AOSP 原始碼下載编譯與安裝於 Nexus 9 (flounder/volantis). 步驟請参考 参考 AOSP 網頁 https://source.android.com/source/requirements.html. 分支 (Branch -b) 選取請参考 https://source.android.com/source/build-numbers.html#source-code-tags-and-builds.

原始碼下載

$ mkdir aosp
$ cd aosp/
~/aosp$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r12
~/aosp$ repo sync -j8

编譯

~/aosp$ source build/envsetup.sh 
~/aosp$ lunch

版大 發表在 痞客邦 留言(0) 人氣()

OpenMAX 簡介

AL - Application Layer

IL - Integration Layer

DL - Development Layer

IL-Client - 使用 IL Core API 操作 IL Component (元件) 的應用程式

推荐参考

STMicroelectronics 對 OpenMAX, Bellagio 與 GStreamer plugings for OpenMAX 的介绍.

Texas Instruments 的 OpenMAX IL 開發指導.

OpenMAX IL API 規格書 v.1.12.

安裝 OpenMAX IL 與 Bellagio

文章標籤

版大 發表在 痞客邦 留言(1) 人氣()

攝影機預覽錄影 - 使用 MediaCodec input surface 與 MediaMuxer 中, 錄製的影像來源為攝影機的輸出影像, 無法錄製 OpenGL ES Fragment shader 處理後的影像. 本文建立兩個 EGL Surafce, 一為預覽用, 一為錄製用.

<<修改步驟>>

實作 GLSurfaceView.EGLContextFactory 為了取得 EGL Context.

private class SampleContextFactory implements GLSurfaceView.EGLContextFactory {
private int EGL_CONTEXT_CLIENT_VERSION = 0x3098;

public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig config) {
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, mEGLContextClientVersion,
EGL10.EGL_NONE };

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文實作 V4L2 視訊裝置影像讀取與 JPEG 檔儲存. 作業環境為 Ubuntu 14.04 LTS 與 libjepg-dev 套件.

<< libjepg-dev 套件安裝>>

$ sudo apt-get install libjpeg-dev

<<原始碼下載與編譯>>

$ git clone https://github.com/ArtisteHsu/SampleV4L2.git
$ cd SampleV4L2
$ gcc samplev4l2.c -ljpeg -o samplev4l2

 <<步驟>>

步驟 1. 開啟視訊裝置 /dev/video0

fd = open(dev_name, O_RDWR | O_NONBLOCK, 0);

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

攝影機預覽實作 - android.hardware.camera2  加入錄影功能. 使用 MediaCodec 與 MediaMuxer 實作錄影功能.

MediaCodec 將輸入影像編碼, MediaMuxer 將編碼後資料寫入檔案.

<<建立 MediaCodec 與 MediaMuxer>>

將 MediaCodec 輸入影像格式設定為 COLOR_FormatSurface 並呼叫 MediaCodec.createInputSurface() 建立 Surface.

 
final int COLOR_FORMAT = CodecCapabilities.COLOR_FormatSurface;

public
Surface init() {
// Set up encode format
MediaFormat encodeFormat = MediaFormat.createVideoFormat(MINE_TYPE, WIDTH, HEIGHT);
encodeFormat.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
encodeFormat.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

以 影像播放器實作 - 使用 OpenGL, MediaCodec 與 SurfaceTexture 為基礎, 加入 android.hardware.camera2 實作攝影機預覽功能.

<<預覽建立流程>>

步驟 1: 建立 GLSurfaceView, 這是 camera2 所需的 EGL 環境

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Step 1: Create GLSurfaceView for camera2 required EGL environment
GLSurfaceView glSurfaceView;
glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setEGLContextClientVersion(2);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文以 OpenGL ES 範例 - GLSurfaceView 實作 與 影像播放器實作 - 使用 MediaCodec 類别 為基礎實作影像播放器 (不含聲音). MediaCodc 輸出影像至使用SurfaceTexture 類別建立之 Surface.

<<SurfaceTexture>>

建立 SurfaceTexture, 建構元需要傳入由 glGenTextures() 產生的 texturehandler. 再將 SurfaceTexture 傳入 Surface 建構元.

配置 SurafceTexture.OnFrameAvailableListener(), OnFrameAvailable() 將在 MediaCodec.releaseOutputBuffer() 後觸發.

if (id == R.id.action_play) {
// Create SurfaceTexture and set callback for frame update event triggered by
// MediaCodec releaseOutputBuffer()
if (surfaceTexture == null) {
surfaceTexture = new SurfaceTexture(glRenderer.getTextureHandle());
surfaceTexture.setOnFrameAvailableListener(this);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

使用 MediaPlayer 類别可以快速的開發影音播放器但是缺少了對於底層缓冲區操作的可能. 本文使用 MediaCodec 類别實作簡易的影像播放器, 並不包含聲音與影音同步與大部分的錯誤處理.

對於MediaPlayer 類别的實作請参考 影音播放器實作 - 使用 MediaPlayer 類别  一文.

<<原始碼>>

GitHub SampleMediaCodec  

<<類别介绍 - MediaExtractor>>

用來取得媒體檔案資訊 (MediaFormat) 與原始影像資料 (SampleData).

<<類别介绍 - MediaCodec>>

處理原始影像資料 (SampleData) 並輸出解碼後影像, 原始影像資料來源為可從 MediaExtractor.readSampleData() 取得.

輸入缓冲區由 getInputBuffer() 取得, 但是需要先呼叫 dequeueInputBuffer() 取得可用缓冲區索引值 (index). 將原始影像資料置入輸入缓冲區後, 呼叫 queueInputBuffer() 讓 MediaCodec 解碼.

解碼後的影像 (輸出缓冲區) 可由 getOutputBuffer() 取得並修改, 同樣的, 需要先呼叫 dequeueOutputBuffer() 取得可用缓冲區索引值, 與呼叫 releaseOutputBuffer() 通知 MediaCodec 輸出缓冲區的操作完成.

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文使用 MediaPlayer 類别實作影音播放器. 

<<Commit>>

commit 40967ef47d6df1d13b3dff69e4f4e886d8c7e2d3
Use MediaPlayer.prepareAsync() instead of prepare() to avoid UI no response in buffering

commit 4b757d8cda01b91a44ade5c7c9a615b244050180
Implement video playback
Playback video from internet
Create SurfaceView and SurfaceHolder and set MediaPlayer video surface on it

commit 656bc0b269f32bffe69c0543916d4aa1581c9e99
Implement playback timer

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

Fragment shader 又稱為像素 (Pixel) 着色器.

本文使用像素着色器修改原始圖片 (纹理, Texture), 將圖片分成四個象限缩圖, 第一象限為原色, 其餘為過濾 R, G , B 後的输出.

<<像素着色器原始碼>>

private final String fragmentShaderCode =
"precision mediump float;" +
"uniform sampler2D texture;" +
"varying vec2 texCoordVar;" +
"void main() {" +
" vec4 texColor;" +
" vec2 position = texCoordVar;" +
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

着色器原始碼與程式執行時利用 glCompileShader() 编譯, 本文說明编譯着色器原始碼的除錯方式.

<<步驟>>

使用 glGetShaderiv() 與参數 GL_COMPILE_STATUS 取得着色器编譯结果.

使用 glGetShaderiv() 與参數 GL_INFO_LOG_LENGTH 取得錯誤訊息長度.

使用 glGetShaderInfoLog() 取得錯誤訊息.

<<原始碼>>

private static int loadShader(int type, String shaderCode) {
int shader;

shader = GLES20.glCreateShader(type);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文提供 OpenGL ES 範例, 作業環境為 Ubuntu 14.04 LTS 使用 Android Studio 1.2.1.1. 原始碼可從 GitHub 下載.

 

<<原始碼>>

QR SampleOpenGL  

<<範例一>>

創建 GLSurfaceView 與 SampleGLRenderer 物件並填满绿色背景. SampleGLRenderer 類别為 .Renderer 的實作.

Commit:

https://github.com/ArtisteHsu/SampleOpenGL/commit/5a689950ee8eea33bd67a22ffb191fbf20f926cd

<<範例二>>

使用 OpenGL ES2.0 的 Vexter shader 與 Fragment shader 繪製三角型.

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

偽亂數產生器 (PRNG - Pseudo Random Number Generator)  裝置為 /dev/random 與 /dev/urandom. 當亂度池 (Entropy pool) 為空時, /dev/random 將不回傳, 直到亂度池中有新的亂度以產生亂數.

<<  從 /dev/random 讀取 1024 位元亂數 >>

-N : 位元組

~$ od -N1024 < /dev/random

0000000 055672 116705 110150 106550 033057 156566 023600 035305
0000020 163443 042305 072665 006142 055477 133042 077066 160443
0000040 146173 153433 154157 036017 070055 121233 013776 021024
0000060 054130 024643 051530 002720 044623 015006 130502 031377
0000100 000517 050675 116161 146406 006773 022012 171216 072022

od 輸出將暫停, 直到新的亂度存在亂度池中

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

GCC 原始碼可從 https://gcc.gnu.org/mirrors.html 表列中網站下載. LD 與 AS 在 GNU Binutils 中.

GCC - GNU Compiler Collection
LD - GNU Linker
AS - GNU Assembler

<< 安装必要套件 >>

~$ sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev

<< 下載 GCC 4.9.2 原始碼 >>

~$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.bz2

<< 编譯並安裝 GCC - x86 64 位元 >>

~$ tar vxpf gcc-4.9.2.tar.bz2

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

依照 Yocto Project 快速入門文件的步驟下載 Poky 参考建構系统.

http://www.yoctoproject.org/docs/1.7.1/yocto-project-qs/yocto-project-qs.html

* 作業環境為 x86 64 位元 Ubuntu 14.04

<< 安裝必要套件 >>

~$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm

<< 下載 Poky >>

~$ git clone http://git.yoctoproject.org/git/poky

<< 切換至 dizzy 分支 >>

~$ cd poky
~/poky$ git checkout -b dizzy origin/dizzy

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

使用 hardinfo 應用程式可取得系统資訊並包含 CPU, GPU, FPU Benchmark 工具.

hardinfo 無法辨識 ARM 處理器核心數量與時脈, 因為 hardinfo/modules/devices/arm/processor.c 對 /proc/cpuinfo 解析不完整.

<< 安裝最新發行版本 >>

~$ sudo apt-get install hardinfo
~$ hardinfo

hardinfo.jpg  

<< 原始碼下載與编譯 >>

安裝必要套件.

~$ sudo apt-get install cmake
~$ sudo apt-get install libgtk2.0-dev

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

GStreamer 安裝與使用 一文介紹 GStreamer 工具使用方法, 本文說明 NVIDIA GStreamer NVIDIA GStreamer 模組 (Pluging) 與元件 (Element) 編譯, 安裝與使用. 

NVIDIA GStreamer 模組 (pluging) 原始檔可從 https://developer.nvidia.com/platform-software-development 下載.

* 本文作業環境為 Jetson TK1 R21.2, Ubuntu 14.04, 使用者帳號 Ubuntu.

<< 安裝必要套件 >>

~$ sudo apt-get install autotools-dev
~$ sudo apt-get install autoconf
~$ sudo apt-get install libegl1-mesa-dev
~$ sudo apt-get install xorg-server-source

~$ sudo apt-get install libgstreamer-plugins-base1.0-dev
~$ sudo apt-get install libgstreamer-plugins-base0.10-dev

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

VGA Arbiter 的功能為協調多個 PCI 介面 VGA 裝置對 I/O 或 MEM 的存取. Jetson TK1 並無 PCI 介面 VGA 裝置, 且核心除錯訊息出現 vagarb 相關訊息.

~$ dmesg | grep vgaarb
[ 0.587446] vgaarb: loaded
[ 13.407491] vgaarb: this pci device is not a vga device

<< 移除 VGA Arbiter 支援 >>

--- a/arch/arm/configs/tegra12_defconfig
+++ b/arch/arm/configs/tegra12_defconfig
@@ -419,6 +419,8 @@ CONFIG_VIDEO_CAMERA=y
  CONFIG_SOC_CAMERA=y
  CONFIG_SOC_CAMERA_PLATFORM=m

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

1 2345