問題タブ [bitstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
9594 参照

python - Python ビットストリームの実装

学習課題として Python でハフマンの実装を書いています。可変長のハフマン コードをバッファ (またはファイル) に書き出すところまで来ました。Python によって実装されたビットストリーム クラスがないように見えるだけです。配列モジュールと構造体モジュールを見てきましたが、追加の作業なしでは必要なことをしていないようです。

少しゴーグルすると、このビットストリームの実装が見つかりました。これは、私が望んでいるものに似ています。Python 標準ライブラリに相当するビットストリーム クラスは本当にないのでしょうか?

0 投票する
1 に答える
5258 参照

video - h264 アイデア ビットストリームはどのように構成されていますか? / ヘッダー開始コード

16 進エディターでビデオ ファイルのビットストリームを見て、h264 について少し学ぼうとしていました。ここで、ビデオ オブジェクト プレーン (0x000001b6) と i フレーム (0x000001b600) の開始コードを見つけました。

しかし、これらのバイトの多くはビデオ ファイルでは見つかりません。ほとんどの場合、これらの開始コードはファイルの先頭に表示され、間に数バイトしかありません。私はそれらが非常に定期的に、ファイル全体に等距離で現れると思っていました!?

このように16進エディタでファイルを見ても大丈夫ですか? 他にどのような開始コードが存在し、h264 ファイルはどのように構成されていますか?

0 投票する
1 に答える
181 参照

language-agnostic - バイトストリーム内のビットのストリームを表す

私は、アルゴリズムが情報の最小単位としてビットを処理しなければならないといういくつかのアイデアを実験しています。これは、ユーザーがUNIXシェルパイプラインのように「パイプライン」の一部を再配置できるモジュラーアプリケーションです。これらのアルゴリズムは、フレーミング、圧縮、解凍、エラーチェック、修正などのさまざまなことを行います。ノイズの導入、検出、除去など。

それらはビットレベルで機能するため、アルゴリズムは、たとえば、5ビットの入力を受け取り、19ビットの出力を生成する場合があります。入力と出力がバイトの倍数になることはめったにありません。

メモリ内およびスレッド間のビットストリームの操作は、の助けを借りて問題ありstd::vector<bool>ませんが、このビットストリームをどこかから取得して保存する必要があり、できれば次のような実際のコマンドラインパイプラインを実行できるはずです。

あるいは:

問題は、標準ストリーム(stdinおよびstdout)がバイト指向であるため、これらのビットを効率的にシリアル化する方法です。入力と出力のビット数がバイトの倍数でない状況を処理する必要があります。

現在、各ビットを0x30または0x31("0"または"1")のいずれかのバイトに拡張することによってそれを行う概念実証が機能しています。明らかに、これによりデータのサイズが8倍になり、必要なスペースと帯域幅の8倍のスペースと帯域幅が消費されます。これらのビットをより効率的にパックしたいと思います。

私が検討している代替案の1つは、出力のビットをバッファリングし、Lengthヘッダーとそれに続くceiling(Length / 8)バイトのデータで構成されるブロックを生成し、必要に応じて出力をフラッシュするプロトコルです。

しかし、作成されたプロトコルを作成する代わりに、誰かがすでにこれらの要件を持っているかどうか、あなたの経験は何ですか、そしてこれのための標準プロトコル(任意のビット数のシリアル化)がすでにあるかどうかを知りたいです使用する。おそらく誰かがすでにこの問題を抱えており、互換性のないフォーマットの急増を避けるために、このアプリケーションでも使用できる何らかの形式のエンコーディングをすでに使用しています。

0 投票する
1 に答える
1012 参照

scala - Scala のビットストリーム ライブラリ

社内で開発された古いアルゴリズムを使用して一部のデータを圧縮/解凍する必要があります。そこには次のような多くの操作があります:

Scala の「Bitstrem」クラスのようなものを誰か知っていますか? (何も見つからなかったので、自分で実装する必要がなかったことを願っています。)

ありがとう

編集:答えをhttp://www.scala-lang.org/node/8413 (「Scala コレクションのアーキテクチャ」) と組み合わせました。誰かが同じものを必要とする場合:

0 投票する
1 に答える
1069 参照

java - ビットストリームのビット順序

ビットストリームのビットに優先順位はありますか(ビットストリームはJavaのInput / OutputStreamにいくらか類似していますが、ビットレベルの粒度を提供します)?

DEFLATEアルゴリズムのハフマンステージの出力では、非バイトをエンコードする目的で、バイトの最下位ビット(lsb)が最上位ビット(msb)の「前」にあると見なされることを読みました。整列された値。msbからlsbの順序ではなく、lsbからmsbの順序を選択する理由はありますか?たとえば、これはどういうわけか、わずかに単純で高速なデコード(またはエンコード)コードを可能にしますか?

Javaの「InputBitStream」クラスがいくつかの基本的な操作を提供すると思います。

DEFLATEビットパッキング: http ://www.gzip.org/zlib/rfc-deflate.html#packing

0 投票する
0 に答える
345 参照

h.264 - バイナリ H.264 ビットストリームに「穴」を作成する

H.264 ビットストリーム データを選択的に削除して、ビデオのデータ損失をシミュレートしようとしています。データは、本質的にバイナリ ファイルである生の H.264 ファイルです。私の計画は、2% の損失を達成するために、100 バイトごとに 2 バイトを削除することです。最終的には、いくつかのモーション ベクトル エラー隠蔽アルゴリズムの有効性をテストする予定です。

Unix環境でこれができるといいですね。これまでのところ、コマンド xxd を少し調べたところ、バイナリ ファイルから 16 進ダンプの特定の部分を保存できました。たとえば、バイナリ ビットストリームの最初の 50 バイトをスキップして、後続の 100 バイトを保存するには、次のようにします。

xxd -s 50 -l 100 inputBinaryFile | xxd -r > outputBinaryFile

100 バイトごとに最後の 2 バイトを自動的に削除するようなものを bash スクリプトに組み込むことを望んでいます。さらに、シーケンスが 2 回目に発生する前00 00 01 06 05(最初の P フレーム SEI 開始コード) のすべてをスクリプトでスキップするようにしたいと考えています。

これが C ベースの言語でどれほど簡単かはわかりませんが、私のプログラミング スキルは非常に限られているので、できれば今のところ Linux プログラミングだけを扱いたいと思っています。

ありがとう。

0 投票する
2 に答える
4209 参照

c++ - 指定されたビットオフセットでの値の読み取り/書き込み

メモリバッファの指定されたビットオフセットで、指定されたビット長(必ずしも8の倍数である必要はありません)の数値を読み書きする必要があります。最上位ビットが最初です。

たとえば、オフセット6とビット長4に値5を書き込みます。

したがって、私が探している関数は次のように定義できます。

そして使用例:

この関数は、比較的大きなバッファ内の少数の値の読み取り/書き込み(大量のネットワークトラフィックのフィルタリング)に使用されるため、を使用して(おそらく間違って)破棄しstd::bitsetました。

このタスクを達成/簡素化するために使用できる既存のライブラリはありますか?それを実装することに関する提案はありますか?

0 投票する
2 に答える
1644 参照

python - ビット文字列で完全なファイルを読み取る方法

ファイルからできるだけ多くの 24 ビット チャンクを読み取りたい。 チャンクの数がわからない場合、ビット文字列のConstBitStreamを使用してこれを行うにはどうすればよいですか?

現在、私はこれを行います:

(ここでは、事前にイベントの数を計算する必要があります)

0 投票する
1 に答える
309 参照

perl - Perl を使用してビットストリームを変更する

Perl でビットを変更した後、ビットをビットストリームに再パックするにはどうすればよいですか?

私は現在、以下を使用して解凍しています。

たとえば、出力は 16 になる場合があります。

編集:

この質問は、GIF 画像のデータ ブロックに関するものです。

私がやろうとしているのは、LZW コードをパディングして、PDF のLZWDecode方法で必要な長さに合わせることです。

LZWDecode<Clear>は、コードが 256 で<End>コードが 257の8 ビット イメージを予期します ( PDF リファレンス、44 ページ)。

5 ビット イメージの場合、コード 0 ~ 31 はイメージのグローバル カラー テーブルの色にマップされ、<Clear>32 と<End>33 です。

したがって、コード 0 ~ 31 は同じままで、32+ は 256 ~ 32 だけオフセットされるように、ビットストリームを再パックする必要があります。

Windows 用の ActiveState Perl を使用しています。