目前分類:IP CAM (7)

瀏覽方式: 標題列表 簡短摘要

ISP是Image Signal Processor的縮寫,ISP圖像信號處理器的主要作用是對前端圖像傳感器輸出的信號做後期的處理。不同的ISP用來匹配不同廠商的圖像傳感器。 ISP的優異在整個攝像機產品中很重要,應當說它直接影響呈現給用戶的影響畫質的優劣。圖像經過圖像經過CCD或者CMOS的採集後,需要經過後期的處理才可以較好的適應不同的環境,在不同的光學條件下都能較好的還原出現場細節。在ISP中它會完成我們常常提及的2A(AWB/AE,自動白平衡/自動曝光)或者3A(AWB/AE/AF,自動白平衡/自動曝光/自動聚焦)。傳統模式下一般採用一顆DSP或者一顆FPGA來完成對圖像的後期處理。有些攝像機產品支持的3D降噪功能、寬動態、慢快門、幀累積、強光抑制等功能也都是ISP來完成的。

ISP-Technology

目前應用在高清攝像機產品中的ISP一般有以下幾個來源:
 
1. 廠商自行研發: 高清攝像機設備廠商為了更好的配合後端壓縮、功能開發,自行研發ISP處理算法,將算法集成至FPGA或DSP芯片中,接駁前端圖像傳感器。
 
2. 第三方研發: 2010年已經逐漸誕生了一批由非高清攝像機製造廠商推出的一些ISP解決方案,他們直接出售不同的ISP芯片給攝像機廠商配合不同廠商的Sensor。
 
3. 套片模式: 由Sensor廠商將自主開發的ISP結合自家Sensor形成圖像採集處理解決方案推向客戶,其中的圖像處理算法及各種調試工作已經完成,攝像機廠商只需要做接口對接併後端壓縮或轉換成數字視頻(HD-SDI)即可。這種模式我們稱為Stand-Alone Devices或者Camera System Onchip。
 

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

[此篇文章並非原創若有冒犯敬請來信告知]

360度全景攝影機掀話題

作 者: 林曉薇 

2009年, 德國網路攝影機製造商MOBOTIX在德國漢諾威電腦展(CeBIT),展出吸頂式360度全景網路攝影機,其特殊的環場效果,引發參觀者的高度注目。

有些業者為360度全景攝影機取了一個很可愛的名字,叫做「Halo cam」。據業者表示,這種技術其實在4年前就已經有了,不過直到去年初,才有製造商真正推出產品。它的外型就像一個吸頂的空調出風口、廣播喇叭,或是煙霧偵測器,可充分與環境設計融合,隱於無形,讓民眾不容易產生被監視的不舒服感覺。

所謂「360度全景」,顧名思義,就是監看範圍能夠包覆到360度的攝影機,目前市面上看到的360度全景攝影機,為了滿足監看廣大範圍的需求,多半採用CMOS感光元件,達到百萬畫素的解析度,尤以300萬畫素最為普遍,在VGA的解析度下,通常可達到25fps,至於百萬畫素解析度下,則多半可達到4~6fps。

只用單顆鏡頭一次盡看360度

一般來說,快速球形攝影機雖然能夠360度監看,但卻是由單支鏡頭、透過機械結構巡邏一周而完成360度監看,背對鏡頭之處往往是監看的死角。如果要達到「同時」監看四面八方的效果,則必須把多支PTZ 攝影機合一。

然而,Halo cam卻只需要一顆專用的魚眼鏡頭,便能直接瀏覽整個空間,就像從一個制高點往下俯瞰,呈現一個圓形的全景畫面,來自四面八方的影像一次盡收眼底,皆無死角。

畫面自由設定與ePTZ

利用攝影機的操作軟體,使用者可以自行選擇影像要呈現的方式,像是圓形全景,還是分割為2個前後180度的長型畫面,亦或是4個方向的4分割畫面。

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

NORNAND是現在市場上兩種主要的非揮發性快閃記憶體(Non-volatile memory)技術。Intel1988年首先開發出NOR Flash技術,徹底改變了原先由EPROMEEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結構,強調降低每bit的成本,更高的性能,並且像磁片一樣可以通過介面輕鬆升級。但是經過了十多年之後,仍然有相當多的硬體工程師分不清NORNAND快閃記憶體。

“NAND flash”經常可以與相“NOR Flash”互換使用。許多業內人士也搞不清楚NAND快閃記憶體技術相對於NOR技術的優越之處,因為大多數情況下快閃記憶體只是用來存儲少量的程式碼,這時NOR快閃記憶體更適合一些。而NAND則是高資料存儲密度的理想解決方案。

NOR的特點是晶片內執行(XIP, eXecute In Place),這樣應用程式可以直接在flash快閃記憶體內運行,不必再把程式碼讀到系統RAM中。NOR的傳輸效率很高,在14MB的小容量時具有很高的成本效益,但是很低的寫入(Write)和清除(Erase)速度大大影響了它的性能。

NAND結構能提供極高的單元密度,可以達到高存儲密度,並且寫入(Write)和清除(Erase)的速度也很快。應用NAND的困難在於flash的管理和需要特殊的系統介面。

性能比較

flash快閃記憶體是非揮發性(Nonvolatile)憶體,可以對稱為塊(Block)的記憶體單元塊進行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內進行,所以大多數情況下,在進行寫入操作之前必須先執行擦除。NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位元都寫為0

由於擦除NOR器件時是以64128KB的塊進行的,執行一個寫入/擦除操作的時間為5s,與此相反,擦除NAND器件是以832KB的塊進行的,執行相同的操作最多只需要4ms

執行擦除時塊尺寸的不同進一步拉大了NORNADN之間的性能差距,統計表明,對於給定的一套寫入操作(尤其是更新小檔時),更多的擦除操作必須在基於NOR的單元中進行。這樣,當選擇存儲解決方案時,設計師必須權衡以下的各項因素。

     NOR的讀速度比NAND稍快一些。

  ● NAND的寫入速度比NOR快很多。

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

1.根據TI的databook描述,可以選擇從AEMIF(NOR Flash)開機,就可以直接跳到0x02000000去執行放在NOR flash中的u-boot,但旺陽電的VanHelsing並沒有實作NOR flash到EVM board上。
2.因為有NFS/TFTP server,RD在開發期間似乎不需要額外的updater,不管是kernel image/device driver或gui application都可以在u-boot執行期間透過NFS或TFTP server將update file載入target,下command或使用script file都可以輕鬆完成update的動作。
3.u-boot本身兼具bootloader與monitor的功能,將monitor予以disable之後就成為正常的bootloader,如果安排short-cut key讓系統在boot期間(甚至OS在跑的期間也可以跳)跳到它的command handle routine,它就成為一個簡單的on-line debug tool,可以read/write flash、update image、update file system,如果可以加上dump CPU register、dump OS information等功能,或許透過serial port的console就可以滿足大多數的debug需求(它本身有一個exception handler可以做這些事,不過做完就當機,很麻煩)。

Tool Chain

Tool Path Description
GCC /opt/mv_pro_4.0/monstavista/ compiler and linker.
GDB pro/devkit/arm/v5t_le/bin/ software debug tool.
bmp_logo /u-boot/tools/ u-boot logo maker.

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

DM6441的開機選項

Power on,根據BOOTCFG register,共有四種開機選項:
1.BOOTCFG=0x01, EMIFA boot mode, 直接從NOR flash(0x02000000)開始執行。
2.BOOTCFG=0x00, NAND boot mode, 從internal ROM執行RBL,RBL將UBL從NAND載入internal RAM, UBL將u-boot從NAND載入DDR,u-boot將uImage載入DDR,執行權交給OS。
3.BOOTCFG=0x02, HPI boot mode, External CPU透過HPI(I2C, SPI, USB2.0, VLYNQ) 將UBL載入,餘同 上。
4.BOOTCFG=0x03, UART boot mode, Host透過serial port將UBL載入,餘同上。


DM6441的開機流程


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

偶然逛到別人的網站找到的

 

该实现中创建了两个队列,一个empty队列,用于存放预分配的缓冲区,也就是一个缓存池,另外一个是full队列。实际使用中,写者从empty队列中获取一个队列项,并将数据写入该队列项指定的地址,然后将该队列项放入full队列。读者从full队列中获得一个队列项,然后对这个队列项进行处理,处理完后将这个队列项重新放入empty队列中。

#include <osa_buf.h>
#include <string.h>

int OSA_bufDelete(OSA_BufHndl *hndl)
{
    int status = OSA_SOK;

    if(hndl == NULL)
        return OSA_EFAIL;

    status = OSA_queDelete(&hndl->emptyQue);
    status |= OSA_queDelete(&hndl->fullQue);

    return status;
}

int OSA_bufCreate(OSA_BufHndl *hndl, OSA_BufCreate *bufInit)
{
    int status = OSA_SOK;
    int i;

    if(hndl == NULL || bufInit == NULL)
        return OSA_EFAIL;

    if(bufInit->numBuf > OSA_BUF_NUM_MAX)
        return OSA_EFAIL;

    memset(hndl, 0, sizeof(OSA_BufHndl));

    status = OSA_queCreate(&hndl->emptyQue, bufInit->numBuf);

    if(status != OSA_SOK) {
        OSA_ERROR("OSA_bufCreate() = %d \r\n", status);
        return status;
    }

    status = OSA_queCreate(&hndl->fullQue, bufInit->numBuf);

    if(status != OSA_SOK) {
        OSA_queDelete(&hndl->emptyQue);
        OSA_ERROR("OSA_bufCreate() = %d \r\n", status);
        return status;
    }

    hndl->numBuf = bufInit->numBuf;

    for(i = 0; i < hndl->numBuf; i++) {
        hndl->bufInfo[i].size = 0;
        hndl->bufInfo[i].flags = 0;
        hndl->bufInfo[i].timestamp = 0;
        hndl->bufInfo[i].physAddr = bufInit->bufPhysAddr[i];
        hndl->bufInfo[i].virtAddr = bufInit->bufVirtAddr[i];
        OSA_quePut(&hndl->emptyQue, i, OSA_TIMEOUT_FOREVER);
    }

    return status;
}

int OSA_bufSwitchFull(OSA_BufHndl *hndl, int *bufId)
{
    int status;
    int newBufId;

    status = OSA_bufGetEmpty(hndl, &newBufId, OSA_TIMEOUT_NONE);

    if(status == OSA_SOK) {

        if(*bufId != OSA_BUF_ID_INVALID)
            OSA_bufPutFull(hndl, *bufId);

        *bufId = newBufId;
    }

    return status;
}

int OSA_bufSwitchEmpty(OSA_BufHndl *hndl, int *bufId)
{
    int status;
    int newBufId;

    status = OSA_bufGetFull(hndl, &newBufId, OSA_TIMEOUT_NONE);

    if(status == OSA_SOK) {

        if(*bufId != OSA_BUF_ID_INVALID)
            OSA_bufPutEmpty(hndl, *bufId);

        *bufId = newBufId;
    }

    return status;
}

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

mt9d131 效果一般, 因为海思带它的驱动, 所以用的人还挺多, 呵呵.

很多芯片的驱动比较简单, 就是直接给某个寄存器赋某个值, 就ok, 具体这个寄存器是什么意思, 值是什么意思, 看datasheet就可以了.

mt9d131 要略微复杂一点

因为 mt9d131 里面可以配置的东西很多, 所以 mt9d131 把可以设置的东西分成3类

1. 硬件寄存器

2. driver变量

3. MCU内存

1.硬件寄存器

硬件寄存器和普通芯片的寄存器没有区别, 只是因为mt9d131的寄存器比较多, 所以, 一共分成了3页, page0,page1,page2

page0包含sensor的一些核心功能

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

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼