最近用自己定出的編碼器介面寫外掛時, 才發現原本定的介面怪怪的。
首先是 hook 的呼叫順序。由於 libav* 是先開完檔再呼叫寫入 header 的函式,因此我也讓 openResource 在 writeHeader 之前先呼叫。但是其他的編碼器並不一定是這個順序,其實有的根本就沒有分 setupEncoder 和 setupMuxer 的步驟。反正我也沒有檢查每個 hook 要做什麼事,也不可能檢查 ... 所以這倒是沒什麼關係。
第二個問題是我在抽象類別上有定義 buffer 機制,原本是希望可以減輕具象類別的負擔,沒想到現在用起來覺得有點累贅,多了不必要的介面操作。這部分需要在 0.3 修正。
最嚴重的問題是,編碼器似乎不太需要動態載入外掛,應該說不需要和操作它的圖形介面分開發佈。原本的用意是希望降低耦合度,並且讓其他的外掛也有機會使用它,但是操作用的外掛不可能不知道它要呼叫哪個編碼器,而且分開發佈導致無法使用編碼器特殊的設定,像是壓縮率等。目前看來唯一的好處是其他人也可以産生這個實體 ... so what? 難道 mp3 設定會呼叫 ogg vorbis 的編碼器嗎?總之這個外掛的介面真的有點多餘。
沒有留言:
張貼留言