2013-11-28 32 views
2

我有一個解碼器代碼。我正試圖將它整合到ffmpeg frameworkFFMPEG:是爲編解碼器強制定義上下文嗎?

我指的是該怎麼這裏給出:http://wiki.multimedia.cx/index.php?title=FFmpeg_codec_howto

據該文章中,我需要在我decoder_name.c文件中定義的結構。

示例結構如下所示:

AVCodec sample_decoder = 
{ 
    .name   = "sample", 
    .type   = AVCODEC_TYPE_VIDEO, 
    .id    = AVCODEC_ID_SAMPLE, 
    // .priv_data_size = sizeof(COOKContext), 
    .init   = sample_decode_init, 
    .close   = sample_decode_close, 
    .decode   = sample_decode_frame, 
}; 

.name -> specifies the short name of my decoder. 

.type -> is used to specify that it is a video decoder. 

.id -> is an unique id that i'm assigning to my video decoder. 

.init -> is a function pointer to the function in my decoder code that performs decoder related initializations 

.decode -> is a function pointer to the function in my decoder code that decodes a single frame, given the input data (elementary stream). 

.close -> is a function pointer to the function in my decoder that frees all allocated memory i.e. the memory allocated in init. 

然而,我的疑問是根據上述文章,還有一個字段稱爲.priv_data_size持有的大小一些背景。

是否必須擁有此字段.priv_data_size,因爲根據上面的文章,我不需要定義結構AVCodec的所有參數。此外,我沒有任何這樣的上下文爲我的解碼器。但是,當我通過ffmpeg的libavcodec中的其他可用解碼器的代碼時,我發現每個解碼器都定義了這個。如果我沒有指定這個,我的解碼器能工作嗎?因爲這個,我無法繼續。請提供一些相同的指導。

- 提前感謝。

回答

3

我維護您鏈接到的MultimediaWiki,並且我可以證明編解碼器HOWTO已過時,尤其是因爲FFmpeg總是在不斷髮展其內部接口。最好是通過獲取最新的FFmpeg源代碼並研究一些最簡單的編解碼器來了解接口(聽起來像你已經這樣做了),開始你的旅程。

關於priv_data_size:是否設置此取決於您的編解碼器是否在維護呼叫之間的任何狀態。大多數編解碼器關心這一點,並在其主要源文件中定義一個名爲MyCodecContext的結構。然後sizeof()這個結構作爲priv_data_size傳遞。在你發佈的例子中,它是sizeof(COOKContext),因爲這個例子顯然是從RealAudio COOK編解碼器文件中複製的。大多數編解碼器需要維護某種狀態(如指向先前幀或各種表的指針)。 priv_data_size成員告訴核心引擎需要爲此結構分配多少空間,然後核心將該結構傳遞給所有編解碼器調用。

+0

很高興聽到您是維護該帖子的人。它真的幫助像我這樣的人開始使用編解碼器集成。首先感謝這篇文章和你的回答。其次,如果您確實有任何此類相關帖子,請在本節中提供您的寶貴帖子鏈接。這對每個人都有幫助。謝謝:) – sam

+0

這裏是我寫的另一篇文章,以迴應一系列與多媒體有關的問題,可能會感興趣:http://stackoverflow.com/a/9958424/475067 –