Một ứng dụng phải link tất cả ba thư viện cần thiết để hoạt động một cách chính xác nhất : 1 từ phần riêng của board như SAA7115 hoặc SAA7105 , một từ phần chung VPORTCAP hoặc VPORTDIS và 1 từ BSL ( board support library ). Ba thư viện dành cho capture và ba thư viện dành cho hiển thị . Một điều quan trọng nữa, các ứng dụng DSP muốn chạy phải sử dụng thư viện CSL ( Chip Support Library ) . Khi bắt đầu chạy ứng dụng trong hàm main phải khai báo như sau:
main()
{
/******************************************************/
/* open CSL DAT module for fast copy */
/******************************************************/ CSL_init(); CACHE_clean(CACHE_L2ALL, 0, 0); CACHE_setL2Mode(CACHE_256KCACHE); CACHE_enableCaching(CACHE_EMIFA_CE00); CACHE_enableCaching(CACHE_EMIFA_CE01);
DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
}
Các hàm trong hàm main() này có chức năng làm sạch bộ nhớ, sau đó khởi tạo một bộ đệm với kích cỡ như ở đây là 256K ,để thực quá trình chuyển,sao chép dữ liệu phục vụ cho quá trình xử lý tín hiệu trong các bộ nhớ này.
Việc thực hiện quá trình khởi tạo kênh thu,kênh hiển thị, các mode dữ liệu thu, các cấu hình cho trình điều khiển capture và display được thực hiện bởi chọn các chức năng trong các thư viện hỗ trợ. Cụ thể ở đây :
/******************************************************/
/******************************************************/
capChan = FVID_create("/VP0CAPTURE/A/0",
IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan,
NULL);
/******************************************************/
/* Khởi tạo trình điều khiển hiển thị */
/******************************************************/
disChan = FVID_create("/VP2DISPLAY", IOM_OUTPUT,
&status, (Ptr)&EVMDM642_vDisParamsChan, NULL);
/******************************************************/
/* Cấu hình bộ mã hóa và giải mã video */
/******************************************************/
FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG,
(Ptr)&EVMDM642_vDisParamsSAA7105);
FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG,
(Ptr)&EVMDM642_vCapParamsTVP51XX);
CACHE_clean(CACHE_L2ALL, 0, 0);
Trong đoạn code trên, chương trình đã sử dụng hai hàm quan trọng trong driver hiển thị và thu dữ liệu đó là FVID_create(), và FVID_control(). Về FVID_create, do cổng video DM642 có khả năng hoạt động thu kênh đôi, và bởi vì phần chung của trình điều khiển có thể được móc nối với bất kỳ thành phần phù hợp EDC nào cho cấu hình codec bên ngoài, đây là cách bắt buộc để đưa thông tin từ ứng dụng tới trình điều khiển. Việc này được thực hiện xong khi gọi FVID_create (). Tham số của hàm này là name, kiểu của name là String. Các quy tắc sau đây được áp dụng cho các định nghĩa của String : Cho driver Capture: String bao gồm tới 3 chuỗi con, cách nhau bằng '/'. Ví dụ, "VP0CAPTURE/A/0". Nói chung chức năng của hàm FVID_create() là phân bố và khởi tạo một đối tượng kênh.
FVID_control : gửi lệnh điều khiển tới mini-driver ( mini-driver phục vụ trực tiếp quá trình chuyển giao dữ liệu giữa các bộ đệm cho quá trình thu và hiển thị dữ liệu)
Cú pháp : status = FVID_control (fvidChan,cmd,args);
động cũng như các cấu hình bộ giải mã, bộ mã hóa ta sẽ thực hiện copy dữ liệu từ bộ đệm capture tới bộ đẹm display để hiển thị.
while(1){/* loop forever */
/* copy data from capture buffer to display buffer */
/***************************************************/
for(i = 0; i < numLines; i++) {
yc2rgb16(coeffs, capFrameBuf->frame.iFrm.y1 + i * (capLinePitch), capFrameBuf->frame.iFrm.cb1 + (capLinePitch >> 1) * i, capFrameBuf->frame.iFrm.cr1 + (capLinePitch >> 1) * i, disFrameBuf->frame.rpFrm.buf + (disLinePitch << 1) * i, numPixels); } FVID_exchange(capChan, &capFrameBuf); frame++; }
Ở đây vòng lặp while là vòng lặp vô hạn để copy dữ liệu thu liên tục từ bộ đệm capture tới bộ đệm display,chính vì sự copy liên tục này mà ta thu được video. Nếu bỏ vòng lặp while này đi ta chỉ thu được một ảnh tĩnh.