[トップ][ノート][編集履歴][一覧][最近の更新][->English]

Audio/2005/11/06/aotuv-beta4.5

Category of Audio

Beta4から更新されたので、早速入れ替えてみたのだが、oggencのオプション-qを0より小さくするとセグる。

lib/psy.c:_vp_offset_and_mix()の

for(i=0;i<n;i++){
...
                if((logmdct[i]-lastmdct[i]) > 20){

で-q=-1等のときnが256になって、 lastmdct[i]がオーバーランしているようだ。

lastmdctはlib/mapping0.cにて、

 b->nblock+i*128;

となっていて(iはchannel数)、 nblockのサイズはlib/block.cにて128*channel数と決め打ちになっている。

しかたがないから、むりやりバッファを増やしてみた。

--- lib/block.c.orig    Sun Nov  6 10:28:03 2005
+++ lib/block.c Sun Nov  6 10:28:16 2005
@@ -288,8 +288,8 @@
   b->psy_g_look=_vp_global_look(vi);

   /* added by aoyumi */
-  b->nblock = _ogg_calloc((128*vi->channels), sizeof(*b->nblock));
-  b->tblock = _ogg_calloc((128*vi->channels), sizeof(*b->tblock));
+  b->nblock = _ogg_calloc((128*vi->channels)*2, sizeof(*b->nblock));
+  b->tblock = _ogg_calloc((128*vi->channels)*2, sizeof(*b->tblock));
   b->lownoise_compand_level = _ogg_calloc(vi->channels, sizeof(*b->lownoise_compand_level));

   /* Initialize the envelope state storage */

これが期待されたエンコード結果を生成しているのかまったく自信がない(糞耳)。


とかなんとかいいながら、 -q=-2などとやって遊んでいるのだが(平均ビットレートは30〜40kb/sくらい)、 変な歪みもなくてよい。

blog comments powered by Disqus