2010年12月24日 星期五

inline function

在想要optimize AAC encoder 的速度的時候
想要inline fabs()
卻無法成功

1. inline is for C++, __inline is for C & C++
2.要change compiler option /Ob0 to /Ob1 or /Ob2 ( In C++ --> Optimization --> Inline function expansion )
http://msdn.microsoft.com/en-us/library/47238hez.aspx
3. /Ob1 和 /ZI (Edit and Continue) 選項衝突,改用 /Zi
4. __forceinline 強迫inline 但compiler 不一定會照做,參考
http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx

2010年12月5日 星期日

JSAMPARRAY & jpeg_read_scanlines

JSAMPROW data[1];
data[0] = new JSAMPLE[1920*1080];



while (cinfo.output_scanline < cinfo.output_height) {
num_scanlines = jpeg_read_scanlines(&cinfo, data, maxlines );
        }
      
        jpeg_read_scanlines 的第二個參數 JSAMPARRAY 是一個儲存 pointer to row 的陣列。
如果有一行 就得有一個元素,兩行就要有兩個元素。
也就是 & JSAMPROW 或 & data[n]


libjpeg.txt 的範例


        JSAMPROW row_pointer[1]; /* pointer to a single row */
int row_stride; /* physical row width in buffer */

row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */

while (cinfo.next_scanline < cinfo.image_height) {
   row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
   jpeg_write_scanlines(&cinfo, row_pointer, 1);
}


ycc_rgb_convert() in jdcolor.c

2010年12月1日 星期三

Long Lasted Problem Solved. After OEMInit hang

在db1200 的板子上,之前一開始做新的Image
NK.bin 都會Hang 在 -OEMInit 之後。
因為在 startup.s 中,呼叫完 OEMInit 之後 會reenable interrupt
而因為在公版中 有用到GPIO7 也就是 IC1 interrupt 7
如果這個GPIO7 pin 的狀態為 High 沒問題, 如果為 Low 的話 則會trigger interrupt 導致系統Hang住。 (使用MMPG module 就可以pass, 因為它把GPIO7 pull high

之前粗魯的解決方法就是 Disable 整個 IC1 (在startup.s 中 disable interrupt mask )或者在 intr.c (OEMInterruptInit()  )中 disable 整個 IC1 handler。

但是正確解法應該是,修改 db1200.h 或 pb1200.h
修改 PLATFORM_INTR_IC1_07


// Platform-specific interrupt defintions for kernel/hal/intr.c
#define PLATFORM_INTR_IC1_07 irqLL | INTR_MODE_UNMASK // 39 GPIO7 Board Interrupt Controller

不要定義 PLATFORM_INTR_IC1_07 的話 在intr.c
的  InterruptConfiguration[HWINTR_MAXIMUM ] array 就會定義 PLATFORM_INTR_IC1_07 為 irqNA


#ifndef PLATFORM_INTR_IC1_07
#define PLATFORM_INTR_IC1_07 irqNA
#endif
PLATFORM_INTR_IC1_07,