9.24.2010

latest ffmpeg rev can play logged 1seg TS

使用 v0.6 以後 (2010 09 23) 的 ffmpeg
ffplay 可以播放 1seg log stream..

9.17.2010

write code to parse logged 1SEG TS Data. with ISO/IEC 13818-1

所包含的 PID 有:
  • 0x0010
  • 0x0011
  • 0x0014
  • 0x0024
  • 0x0301
  • 0x0400
  • 0x0500
  • 0x0600
  • 0x1FC8
  • 0x1FFF
下面是兩個同樣 log 10M 的 STREAM。
COLORBAR:
0010: 202
0011: 101
0014: 40
0024: 202
0301: 3486
0400:21145
0500: 9451
1FC8: 1008
1FFF:20144

TESTVIDEO
0010: 202
0011: 101
0014: 40
0024: 202
0400:35010
0500: 9450
0600: 3486
1FC8: 1009
1FFF: 6276

下面是 log 1M 的 TESTVIDEO
0010: 20
0011: 10
0014: 4
0024: 20
0400: 3499
0500: 946
0600: 349
1FC8: 101
1FFF: 635

當 CN 低時,會有 error,這時候 bit : transport_error_indicator 就會是 1. 有時候,該 packet 的 pid 就不在上述範圍內。

Color Bar TEST STREAM 有很多 priority packet (priority bit = 1)。
一般影片的 TEST STREAM 就沒有 priority packet。
priority packet 的 pid 是 0x0301 和 0x0010。0x0010 同時是 start packet.

9.16.2010

use VLC to play 1SEG TS file

用 VLC 1.0.2:

vlc --ts-extra-pmt=15=0x400:27 log.trp

可以撥 save 起來的 1SEG TS file.

9.15.2010

Serial TS (Transport Stream) bus signal definition

Serial Type Transport Stream 的信號 pin 有:
  • TSCLK : clock
  • TSO : Data
  • TSEN : TS valid (有點類似 chip select)
  • TSPAC : Syn Byte (在送出 sync byte 的data 時會有動作)
  • TSER : TS Packet Error flag (packet 有 error 時會有動作)
Transport Stream 分為 3 部份:

Sync --- Stream Data -- Pariry

其中 Sync + Stream Data == 188 byte
Parity 有 16 byte

一般的 chip 可以指定 TSEN 要不要把 parity 的data 也算進去。
另外,除了 stream packet 外,在沒有信號,或是有 error 時,會有 NULL packet。
也可以決定在送 null packet 時,clock 要不要動作。

9.14.2010

奇怪mcu的I2C奇怪波形

悲哀的cheap mcu,送出的 I2C 撥波行徑然是..
poormcubadi2cwave
可以看到在 START command 前,會送出一個 CLK, SDA 都是 Low 的 plus,然後 start condition 後, SDA 竟然會有一個 high-puls。
雖然這樣沒有違反 I2C wave form standard(?)
ref : wiki

但是有些 chip 就是不吃這樣的波形呀。

能偷就偷,不知道這種 chip design house 的品質是怎樣做出來的...

9.09.2010

ULPI -- USB interface standard

USB Controller 與 PHY 的介面原為 22 pin 以上的 UTMI 介面。
後來為了減少 pin count,重新定義了12 pin 的 ULPI (UTMP+ Low Pin Interface)介面。

從此,USB controller 與 PHY 只要是標準 ULPI 介面的,都可以互換。

ULPI 的標準竟然含一個 由 PHY 輸出的 CLKOUT(60MHz)。
也就是說,ULPI 標準,規定了 crystal 要裝在 PHY 那一端。(?)

ULPI 也規定了內部的 register map,所以才能達到 chip 可以互換的要求。
規定了四類 register:
  • ID
  • Mode
  • Interrupt
  • Extra

9.07.2010

接上 USB ActiveSync 後,一連線上就中斷,然後反覆。

這是因為由 KITL image 換成 NOKITL後,沒有重新sysgen 的關係。
>blddemo clean -q後,就可以了。

9.03.2010

OpenGL ES 筆記 - III

from : http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es


原來的OpenGL 包涵很多none-effecicent api,OpenGL ES 把所有none-effiicienct api 都拿掉了。

Config

EGLConfig 是要告訴 OpenGL 目前這個hardware platform surface 的 rendering format。
使用 eglGetConfigs( ) 可以取出目前這個platform 所有 support 的 rendering format。

要決定 config 有很多複雜的動作:

詢問目前 platform support 的 config 有哪些。
設定目前要用的config

config 是由一堆 attrib 組成,EGL 用一維 array 來代表:分別是
{attrib1,value1,attrib2,value2...EGL_NONE};

Attrib

EGL_BUFFER_SIZE
Color buffer depth (bit 數)
= RED_SIZE + GREEN_SIZE + BLUE_SIZE + ALPHA_SIZE



輸入Vertex array 與 繪圖

畫圖的動作分成兩部份:
  • 將 定義 Vertext Point 的 Array 丟進 OpenGL
  • 要 OpenGL 以 XXX 的順序畫圖
所以需要提供兩種資料:
  • Vertex point array
  • Vertex Draw Sequence
第一個資料用 glVertexPointers( ) function 來送入 OpenGL。
第二個資料用 glDrawElements( ) 時傳入。
void glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);其中 size 是每一個 vertex 的 coordinate number -- 就是一個Vertex 需要幾筆資料來表示。因為是3維座標,所以寫 3 (default 是 4).

void glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);其中 indices 就是繪出的順序。
indices 的內容通常是:{0,4,1,0,9,4,9,5,4}這是說,先由點 0,4,1 畫出一個三角形,再用點 0,9,4 話一個,然後是點 9,5,4 的三角形。

OpenGL ES 筆記 - II

一樣,ref http://blog.jayway.com


OpenGL ES 採用 右手直角座標 -- 也就是說
右手方向是 X
上方是Y
背後是 Z

而初始的 view 位置就是在 0.0.0
Transformation 就是把要描繪的物體在座標軸上轉換,有以下的轉換動作:
  1. Translate 平移
  2. Rotate 旋轉
  3. Scale 放大/縮小
以上的動作都有一function 可以作,參數分別是對 x, y ,z 軸的參數,其中 Rotate 的參數單位是 degree。


OpenGL ES 筆記

一堆opengl 的筆記。
ref:
http://wiki.forum.nokia.com/
http://blog.jayway.com/


OpenGL 的繪圖步驟:
  1. 取得 display --- 就是 pc monitor,或是手機的 lcd panel.
  2. initialize EGL
  3. 選一個 config/mode
  4. create一個 context
  5. create一個 用來繪圖的 surface
  6. enable 剛剛create的 context
OpenGL ES 繪圖基本元素(Primitives)
  1. Vertex ( Vertices) : 最小的基本繪圖單位,就是兩線交會的點。(point)
    Vertex 在 OpenGL ES 中被用作描繪3D model 的元素,也被用來指定 camera , light 的位置。
  2. Edge : 連接兩個 Vertex 的直線
  3. Face : 由三個 Vertex 包成的三角形區域。
    當要定義一個face 時,他的三個vertex 的順序是很重要的,vertex 順序被用來判定face 的正面和背面(右手定則?)。有時候,可以指定只 render 正面,好節省時間。
定義一個多邊形 (Polygon)
多邊型的每個面要被拆解成一個一個的三角型,然後把每個三角形的端點(vertex) 寫出來就可以。

所以寫出來,會是一個array:
{
-1.0f, 1.0f, 0.0f, // 0 Top Left
-1.0f, -1.0f, 0.0f, // 1 Bottom Left
1.0f, -1.0f, 0.0f, // 2 Bottom Right
1.0f, 1.0f, 0.0f // 3. Top Right
}


把 vortex 訂出來後,還需要一個資料,告訴OpenGL 哪幾點構成一個 triangle,這個資料叫 indices:
{
0,1,2, // 第一個triangle 由 vertex 0.1.2 構成
0,2,3
};
OpenGL ES 描繪的方式 (render primitive)
剛剛 OpenGL ES 的 primitives 定義 "描述物體的基本元素",現在要講得是如何把這些 "描述" 畫出來。
  1. GL_POINTS : 只描出 定義的點
  2. GL_LINE_STRIP : 依順序描出點之間的線
  3. GL_LINE_LOOP : 和 GL_LINE_STRIP 一樣,但是再加一條 : 最後一點到第一點的線
  4. GL_LINES : 兩兩描出一線
  5. GL_TRIANGLES : 每三點描出一triangle
  6. GL_TRIANGLE_STRIP :有點難,就是每三點描出一triangle外,再包圍起來。
  7. GL_TRIANGLE_FAN : 一樣,有點難,每三點描出一 triangle外,再用扇形圍起來。
所以一般常用的rendering primitives 是 GL_TRIANGLES