2012-04-13 18 views
4

私は現在、jpeglib-turboライブラリを使ってC++でjpegリサイザを実装しています。高性能jpeglib-turboインプリメンテーションは<100msで圧縮解除/圧縮できますか?

ライブラリを使用してJPEG圧縮解除と再圧縮の対象を100ミリ秒に設定しました。私が推奨する最適化設定(jpeglib-turbo usage.txtに記載されています)を使用することで最高の結果を得ることができるのは約320msなので、100msでも/現実的かと疑問に思っていますか?これは3000x4000pxのイメージを約6Mbから130Kbに解凍/再圧縮することです。

私は速い展開のために使用しているコードは次のとおりです。答えを

dinfo.dct_method = JDCT_IFAST; 
    dinfo.do_fancy_upsampling = FALSE; 
    dinfo.two_pass_quantize = FALSE; 
    dinfo.dither_mode = JDITHER_ORDERED; 
    dinfo.scale_num = 1/8; 
+0

好奇心の理由から、なぜそんなに速くする必要がありますか? 6MBのJPEGの320msはかなり高速です。 – Bojangles

+1

あなたはプラットフォームについて言及していません。これは携帯用ですか?デスクトップ?シングルまたはマルチスレッド?私はいくつかの速い「DCTサムネイル」コードを手に入れています。私の2GHz Core i7(シングルスレッドを使用)では、約120msで6メガバイトのJPEGデータ(4000x4000画像)から1/8サイズのRGB32画像を抽出することができます。その500x500イメージを130KBに再圧縮するには、おそらく40-100msかかるでしょう(私はまだコンプレッサーの極端な最適化を行っていません)。サムネイル抽出コードの時間が重要な部分は、64ビットのアセンブリ言語で記述されています。詳細は私に連絡してください([email protected])。 – BitBank

+2

は万が一このプロジェクトのオープンソースですか?リンクを投稿してください:) – kritzikratzi

答えて

4

感謝。

実際に約100msで圧縮解除して再圧縮することができます。 libjpeg-turboの作者に連絡した後、彼は私が使っていたdinfo.scale_numプロパティが間違っていると言った。このプロパティは、スケールの分子です。また、scale_denom(分母)プロパティを設定する必要がありました。

だから、良いコードは次のようになります。

dinfo.dct_method = JDCT_IFAST; 
dinfo.do_fancy_upsampling = FALSE; 
dinfo.two_pass_quantize = FALSE; 
dinfo.dither_mode = JDITHER_ORDERED; 
dinfo.scale_num = 1; 
dinfo.scale_denom = 8; 

私は、コードはそれがスピード/ユーザー経験があるクライアントアプリケーションでありますように、画像スケーリングは、ユーザーのために感知できなければなりませんように高速になりたいです最も重要なこと。

+0

'scale_num'を2回設定していますが、どちらかの呼び出しで' scale_denom'を設定する必要がありますか? –

関連する問題