问题标签 [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 投票
1 回答
93 浏览

compression - 压缩的 JPEG 可以有两个合法的 EOI 标记吗?

我已经解析了比特流以提取每个块。我已经根据我的图像大小 (3440) 计算了正确的块数,它很好地将我带到了 EOI 标记 ([255, 217]),所以我相信我做的很正确。

然而,在这个 EOI 标记之后还有大约 1000 个字节的数据,然后是另一个 EOI。如标题所示,我的图像是灰度图像,仅包含亮度组件。这是什么神秘数据??

它在某种程度上似乎很重要,因为如果图像被删除,它就会变得难以理解......

0 投票
0 回答
140 浏览

filter - 可以接受两个输入的FFmpeg比特流过滤器

我尝试查看 FFmpeg 文档,但找不到任何可以接受两个输入的比特流过滤器。

这是设计上不可能的,还是直到现在才出现这样的用例?

0 投票
1 回答
424 浏览

node.js - 你如何解码节点中的连续比特流?

我正在尝试使用 TCP实现此协议。其中大部分是作为缓冲区接收的,可以使用 .toString('hex') 很好地读取,但有 AVL 部分提到“使用连续比特流编码。最后一个字节填充以对齐字节边界”,其中数据似乎以我无法正确阅读的不同方式编码。我应该如何阅读连续位蒸汽部分?

提前谢谢了!

0 投票
1 回答
885 浏览

video - 如何使用 tee 选项将参数传递给 ffmpeg 中的比特流过滤器?

我实际上在一个学生项目中。该项目的目的是在 ffmpeg 中开发比特流过滤器(bsf)(这没问题)。我需要从命令行访问此比特流过滤器中的参数,这在简单的命令行中实际上可以正常工作:

但我需要用“tee”选项复制我的输出,在这种情况下我不能让它工作..:

ffmpeg 的输出:解析比特流过滤器序列时出错

有什么帮助吗?

0 投票
0 回答
396 浏览

video - 我怎样才能解复用/重新复用视频流 h264?

我正在 ffmpeg 中寻找一个命令行来解复用音频和视频,以便在我的比特流过滤器中发送视频并将其重新混合到输出文件中。我在没有音频的比特流过滤器中进行视频处理。我没有找到正确的语法..谢谢

0 投票
2 回答
491 浏览

haskell - Haskell 中的高效比特流

在不断努力有效地摆弄比特(例如,参见这个SO question)中,最新的挑战是比特的有效流式传输和消耗。

作为第一个简单任务,我选择在由/dev/urandom. 一个典型的咒语是head -c 1000000 </dev/urandom | my-exe。实际目标是流式传输比特并解码Elias 伽马码,例如,即不是字节块或其倍数的代码。

对于这种可变长度的代码,最好使用take, takeWhile,group等语言进行列表操作。由于 aBitStream.take实际上会消耗部分双流,因此某些 monad 可能会发挥作用。

明显的起点是来自Data.ByteString.Lazy.

A. 计数字节

正如预期的那样,这个非常简单的 Haskell 程序的性能与 C 程序相当。

B. 添加字节

一旦我开始使用,unpack事情就会变得更糟。

令人惊讶的是,Haskell 和 C 表现出几乎相同的性能。

C. 最长相同位序列

作为第一个重要任务,可以像这样找到最长的相同位序列:

惰性字节串被转换为一个列表[Word8],然后使用移位将每个Word字节拆分为位,从而产生一个列表[Bool]。这个列表列表然后用concat. 获得 的(惰性)列表后Bool,用于group将列表拆分为相同位的序列,然后length对其进行映射。最后maximum给出了想要的结果。很简单,但不是很快:

这种幼稚的实现确实慢了一个数量级。

分析显示分配了相当多的内存(大约 3GB 用于解析 1MB 的输入)。不过,没有观察到大规模的空间泄漏。

从这里我开始四处寻找:

  • 有一个bitstream承诺“具有半自动流融合的快速、打包、严格的比特流(即布尔列表)。 ”。vector不幸的是,它与当前的软件包不是最新的,请参阅此处了解详细信息。
  • 接下来,我调查streaming. 我不太明白为什么我应该需要“有效”的流来让一些 monad 发挥作用——至少在我开始与所提出的任务相反之前,即编码和将比特流写入文件。
  • 怎么foldByteString?我必须引入状态来跟踪消耗的位。这不是很好的take, takeWhile, group, 等语言。

现在我不太确定该去哪里。

更新

我想出了如何使用streamingand来做到这一点streaming-bytestring。我可能做的不对,因为结果非常糟糕。

这将测试您对标准输入几千字节输入之外的任何内容的耐心。分析器说它在 和 中花费了大量时间(输入大小的二次方Streaming.Internal.>>=.loopData.Functor.Of.fmap。我不太确定第一个是什么,但fmap表明(?)这些杂耍对Of a b我们没有任何好处,而且因为我们在 IO monad 中,它不能被优化掉。

我这里也有相当于字节加法器的流SumBytesStream.hs,它比简单的惰性实现稍慢ByteString,但仍然不错。由于streaming-bytestring宣布为“ bytestring io done right ” 我期望更好。那我可能做得不对。

在任何情况下,所有这些位计算都不应该发生在 IO monad 中。但是BSS.getContents强迫我进入 IO 单子,因为getContents :: MonadIO m => ByteString m ()没有出路。

更新 2

按照@dfeuer 的建议,我streaming在master@HEAD 使用了这个包。这是结果。

的 O(n^2) 问题Streaming.concat已解决,但我们仍然没有接近 C 基准。

更新 3

Cirdec 的解决方案产生了与 C 相当的性能。使用的构造称为“Church 编码列表”,请参阅此SO 答案或 Haskell Wiki on rank-N types

源文件:

所有源文件都可以在github上找到。具有运行实验和分析的Makefile所有各种目标。默认make将只构建所有内容(首先创建一个bin/目录!),然后make timelongest-seq可执行文件进行计时。C 可执行文件会-c附加一个以区分它们。

0 投票
2 回答
1377 浏览

encoding - 如何将整数编码为其他整数?

作为Store 2 4-bit numbers in 1 8 bit number的后续,我想知道是否有一个概括,您可以将 n x 位数字存储到 m y 位数字中。例如,也许您可​​以将 5 个 8 位数字存储为 3 个 15 位数字。或者可能将 2 个 8 位数字转换为 1 个 16 位数字,或者将 3 个 16 位数字转换为 2 个 32 位数字。想知道对执行此操作的过程进行编码和解码的实现是什么,或者是否不可能。

就像是:

根据下面的答案,我尝试将其翻译为 JavaScript,但不明白任何真正的含义,并且认为它不起作用。

0 投票
0 回答
142 浏览

matlab - 在 jpeg 解码器中将 RGB 块转换为图像

我正在尝试在 MATLAB 中设计一个简单的 jpeg 解码器。我拍摄了一张 .jpg 图像,然后对该图像的标题进行解码。然后在 SOS 标头后解码扫描数据并创建 64 像素块

(我解码扫描数据的顺序:霍夫曼解码、去量化、去锯齿形、逆 DCT、电平移位、钳位和从 Ycbcr 转换为 RGB。)

我已经认为上面的解码过程是正确的。我对每个 64 像素的块都做了,还确定了块的子采样效果。现在我有以下 Y 通道以及 Cb 和 Cr 通道的结构:(假设我有 Cb 和 Cr 通道的因子 2 的子采样)

[16*16pixels] , [16*16pixels] , [16*16pixels] , [16*16pixels] , [16*16pixels] ,... ..., [16*16pixels] , [16*16pixels] .

上述块数组的长度为 imageWidth*imageLength/256 (假设它可整除)

现在我的问题是:我如何从上面的块中恢复整个图像,换句话说,我必须如何对上面的块进行排序和排列以获取整个解码图像?

0 投票
0 回答
163 浏览

algorithm - 比特流中的模式识别

假设一个长比特流。我想在这个比特流中发现一些模式。我所知道的是,这个比特流不是随机比特流,而是包含一些重复的模式。

例如,假设比特流如下:

在这个比特流中有一个已知的模式:一些值设置在0101s 之间。如果我们将此比特流 4 x 4 比特分开,我们将看到在某些0101模式之间设置了一些值。

有没有办法找到或识别介于0101或其他可能模式之间的值的模式?

0 投票
0 回答
52 浏览

video - 我怎样才能使视频没有索引位置和总长度,就像原始比特流格式一样,但它可以有音频流?

我怎样才能使视频没有索引位置并且没有总长度,它不能在视频播放器上加速减速并且它可以有音频流,带有 ffmpeg 代码?我已经研究了一段时间,但我只停留在精确原始比特流(附件 B)视频的方式谢谢你的指导。