3.7.3 Flex – 更好的 Lex
flex 是一個快速的字詞分析產生器。
flex 的參考資料:
*
info flex (tutorial)
*
flex(1)
需要提供你自己的 main() 和 yywrap() ,或者你的 program.l 在不用 library 時應該看起來看像這樣 (yywrap是一個巨集;%option main 隱含地打開了 %option noyywrap):
%option main
%%
.|\n ECHO ;
%%
另外,還可以在 cc 命令列末尾加上 -lfl 連接器的選項來進行編譯 (就像 AT&T-Lex 使用 -ll 一樣),此時就不需要 %option 了。
13.7.4 Bison – 更好的 Yacc
Debian 中有幾個套件提供了與 Yacc 兼容的 LALR 文法分析生成器:
*
bison: GNU LALR 文法分析產生器
*
byacc: The Berkeley LALR 文法分析產生器
*
btyacc: Backtracking parser generator ,以 byacc 為基礎
bison 的參考資料:
*
info bison (tutorial)
*
bison(1)
需要提供自己的 main() 和 yyerror() 。 main() 呼叫 yyparse() ,而 yyparse() 呼叫 yylex() ,通常由 FleX 建立。
%%
%%
13.7.5 Autoconf
autoconf 一個 shell script 生成工具,由它生成的 script 能自動設定軟體的源碼套件,以適用於各種使用完整 GNU build 系統的 UNIX-like 系統。
autoconf 會產生設定 script 的 configure。 configure 使用 Makefile.in 模版來自動建立適合的 Makefile。
13.7.5.1 編譯和安裝程式
Debian 不會改動 /usr/local/ 下的文件 (參閱 多樣性支援, 第 2.5 節)。所以如果是從源碼來編譯程式,並將其安裝到 /usr/local/ 下,就不會影響到 Debian。
$ cd src
$ ./configure --prefix=/usr/local
$ make
$ make install # 這會把檔案放到系統中
Debain
星期三, 4月 12, 2006
星期六, 4月 08, 2006
影像處理篇
Video Renderer (VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter。
VR会优先使用DirectDraw以及Overlay表面;如果这些特性得不到显卡的支持,VR会使用GDI函数进行画图。在上级Filter连接到 VR时,VR总是先要求当前显示器设置的色彩位数的RGB格式,如你的机器设置的是24位彩色,则VR首先要求连接的Media type为RGB24。如果你的显卡支持YUV Overlay表面,那么在Filter Graph运行起来的时候,VR会动态改变已经连接的Media type,要求上级Filter输出一种合适的YUV格式。VR Filter上实现了IVideoWindow接口,Filter Graph Manager主要通过这个接口来控制视频窗口。
大陸仔
Video Mixing Render VRM就是混合的Render
VMR-9 實際上是一個功能強大的即時數位訊號處理器 (DSP)。視訊可以很簡單地轉換至材質上。例如,在旋轉的立方體表面上播放視訊。若您是遊戲開發人員,視訊將不再限於低解析度的過場短片。您可以結合視訊與 3D 圖形,建立像圖形一般動態、互動的視訊短片。
就是說,遊戲畫面的3D空間就是用VMR來讓大家看到的
微軟定義的VMR9
dshow範例
#include
#include
#define FILENAME L"c:\\DXSDK\\Samples\\Media\\butterfly.mpg"
int
main()
{
IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
IMediaEvent *pMediaEvent;
long eventCode;
IVideoWindow *pVideoWindow;
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder,
(LPVOID *)&pGraphBuilder);
pGraphBuilder->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMediaControl);
pGraphBuilder->QueryInterface(IID_IMediaEvent,
(LPVOID *)&pMediaEvent);
pMediaControl->RenderFile(FILENAME);
pGraphBuilder->QueryInterface(IID_IVideoWindow,
(LPVOID *)&pVideoWindow);
pVideoWindow->put_Caption(L"THIS IS A TEST");
pMediaControl->Run();
pMediaEvent->WaitForCompletion(-1, &eventCode);
pMediaEvent->Release();
pMediaControl->Release();
pGraphBuilder->Release();
CoUninitialize();
return 0;
}
一個使用ivideowindow的實例,如果不用的話就會叫一個acitvewindows
注意看上面的"THIS IS A TEST"
VR会优先使用DirectDraw以及Overlay表面;如果这些特性得不到显卡的支持,VR会使用GDI函数进行画图。在上级Filter连接到 VR时,VR总是先要求当前显示器设置的色彩位数的RGB格式,如你的机器设置的是24位彩色,则VR首先要求连接的Media type为RGB24。如果你的显卡支持YUV Overlay表面,那么在Filter Graph运行起来的时候,VR会动态改变已经连接的Media type,要求上级Filter输出一种合适的YUV格式。VR Filter上实现了IVideoWindow接口,Filter Graph Manager主要通过这个接口来控制视频窗口。
大陸仔
Video Mixing Render VRM就是混合的Render
VMR-9 實際上是一個功能強大的即時數位訊號處理器 (DSP)。視訊可以很簡單地轉換至材質上。例如,在旋轉的立方體表面上播放視訊。若您是遊戲開發人員,視訊將不再限於低解析度的過場短片。您可以結合視訊與 3D 圖形,建立像圖形一般動態、互動的視訊短片。
就是說,遊戲畫面的3D空間就是用VMR來讓大家看到的
微軟定義的VMR9
dshow範例
#include
#include
#define FILENAME L"c:\\DXSDK\\Samples\\Media\\butterfly.mpg"
int
main()
{
IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
IMediaEvent *pMediaEvent;
long eventCode;
IVideoWindow *pVideoWindow;
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder,
(LPVOID *)&pGraphBuilder);
pGraphBuilder->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMediaControl);
pGraphBuilder->QueryInterface(IID_IMediaEvent,
(LPVOID *)&pMediaEvent);
pMediaControl->RenderFile(FILENAME);
pGraphBuilder->QueryInterface(IID_IVideoWindow,
(LPVOID *)&pVideoWindow);
pVideoWindow->put_Caption(L"THIS IS A TEST");
pMediaControl->Run();
pMediaEvent->WaitForCompletion(-1, &eventCode);
pMediaEvent->Release();
pMediaControl->Release();
pGraphBuilder->Release();
CoUninitialize();
return 0;
}
一個使用ivideowindow的實例,如果不用的話就會叫一個acitvewindows
注意看上面的"THIS IS A TEST"
訂閱:
文章 (Atom)