[リストへもどる]
一括表示
タイトルLinux でうまくエンコードできないようです。
記事No342
投稿日: 2002/04/03(Wed) 20:09
投稿者こいずみ
はじめまして。
OS2 + Duron で同様の問題が出てるようですが、Linux でも発生しました。
書き込み長くてすいません。

エンコードに使ったファイルは
さすがにアップロードできないのですが…
フリーのwavファイルで不具合が再現できるものを
探すべきでしょうか。

[不具合の内容]
ある特定のファイルで、
エンコーディングの終盤で segmentation fault が出る

試してみた結果、

gogo -q 0 => ×(segfault)
gogo -q 1 => ×(segfault)
gogo -q 2 => ×(segfault)
gogo -q 3 => ×(segfault)
gogo -q 4 => ×(segfault)
gogo -q 5 => ×(segfault)
gogo -q 6 => ×(segfault)
gogo -q 7 => ○(正常終了)
gogo -q 8 => ○(正常終了)
gogo -q 9 => ○(正常終了)

[環境]
AMD Duron 1GHz
RedHatLinux-7.2
kernel-2.4.18-rc4
glibc-2.2.4
gcc-3.0.4
nasm-0.98 + うるりさんの patch

petit310pl2.tar.gz をコンパイルしました。

[backtrace]
% gdb gogo
(gdb) run -b 128 -q 0 audio.wav

#0 0x0804ca0b in putbits2 (val=18255, j=16) at engine/bitstream.c:68
#1 0x0804fd19 in flush_bitstream (tl=0x40194010) at engine/bitstream.c:120
#2 0x08052a81 in encodeframe () at engine/gogo.c:553
#3 0x08055025 in MPGE_processTrack () at engine/gogo.c:740
#4 0x0804980c in main (argc=6, argv=0xbffffb94) at main.c:350
#5 0x40075507 in __libc_start_main (main=0x804973c <main>, argc=6,
ubp_av=0xbffffb94, init=0x8048cc8 <_init>, fini=0x8078590 <_fini>,
rtld_fini=0x4000dc14 <_dl_fini>, stack_end=0xbffffb8c)
at ../sysdeps/generic/libc-start.c:129


タイトル Linux でうまくエンコードできないようです。
記事No343
投稿日: 2002/04/03(Wed) 21:06
投稿者
> はじめまして。
> OS2 + Duron で同様の問題が出てるようですが、Linux でも発生しました。
> 書き込み長くてすいません。

すいません,gcc が 3.0.4 だと,ええと,make する時の CFLAGS の最適化オプ
ションを
-O -fomit-frame-pointer -ffast-math -funroll-loops -maccumulate-outgoing-args
にしたらどうなるか試していただけないでしょうか?バージョンごとに gcc が
が微妙に違うので,lame の configure を参考にしながら暗中模索状態だったり
します.ごめんなさい.

あと,gcc 3.0.3 だと
-O -fomit-frame-pointer -ffast-math -maccumulate-outgoing-args
gcc 2.96.* だと
-O -fomit-frame-pointer -ffast-math -funroll-loops
あたりがいいのかもしれません.

ホントはおもいっきり -O9 とかにしたいんですけどね...


タイトル Linux でうまくエンコードできないようです。
記事No344
投稿日: 2002/04/03(Wed) 23:35
投稿者こいずみ
> すいません,gcc が 3.0.4 だと,ええと,make する時の CFLAGS の最適化オプ
> ションを
> -O -fomit-frame-pointer -ffast-math -funroll-loops -maccumulate-outgoing-args
> にしたらどうなるか試していただけないでしょうか?バージョンごとに gcc が
> が微妙に違うので,lame の configure を参考にしながら暗中模索状態だったり
> します.ごめんなさい.

ありがとうございました。

% env CFLAGS="-O -fomit-frame-pointer -ffast-math -funroll-loops -maccumulate-outgoing-arg" ./configure

上記のように configure を走らせて最適化を抑えたらうまくいきました。

ちなみに、bitstream.c での該当箇所での segfault は、
RW.bs がどこかで破壊されているのが原因で発生しているようですが。