问题标签 [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.
compression - 压缩的 JPEG 可以有两个合法的 EOI 标记吗?
我已经解析了比特流以提取每个块。我已经根据我的图像大小 (3440) 计算了正确的块数,它很好地将我带到了 EOI 标记 ([255, 217]),所以我相信我做的很正确。
然而,在这个 EOI 标记之后还有大约 1000 个字节的数据,然后是另一个 EOI。如标题所示,我的图像是灰度图像,仅包含亮度组件。这是什么神秘数据??
它在某种程度上似乎很重要,因为如果图像被删除,它就会变得难以理解......
filter - 可以接受两个输入的FFmpeg比特流过滤器
我尝试查看 FFmpeg 文档,但找不到任何可以接受两个输入的比特流过滤器。
这是设计上不可能的,还是直到现在才出现这样的用例?
node.js - 你如何解码节点中的连续比特流?
我正在尝试使用 TCP实现此协议。其中大部分是作为缓冲区接收的,可以使用 .toString('hex') 很好地读取,但有 AVL 部分提到“使用连续比特流编码。最后一个字节填充以对齐字节边界”,其中数据似乎以我无法正确阅读的不同方式编码。我应该如何阅读连续位蒸汽部分?
提前谢谢了!
video - 如何使用 tee 选项将参数传递给 ffmpeg 中的比特流过滤器?
我实际上在一个学生项目中。该项目的目的是在 ffmpeg 中开发比特流过滤器(bsf)(这没问题)。我需要从命令行访问此比特流过滤器中的参数,这在简单的命令行中实际上可以正常工作:
但我需要用“tee”选项复制我的输出,在这种情况下我不能让它工作..:
ffmpeg 的输出:解析比特流过滤器序列时出错
有什么帮助吗?
video - 我怎样才能解复用/重新复用视频流 h264?
我正在 ffmpeg 中寻找一个命令行来解复用音频和视频,以便在我的比特流过滤器中发送视频并将其重新混合到输出文件中。我在没有音频的比特流过滤器中进行视频处理。我没有找到正确的语法..谢谢
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 发挥作用——至少在我开始与所提出的任务相反之前,即编码和将比特流写入文件。 - 怎么
fold
样ByteString
?我必须引入状态来跟踪消耗的位。这不是很好的take
,takeWhile
,group
, 等语言。
现在我不太确定该去哪里。
更新:
我想出了如何使用streaming
and来做到这一点streaming-bytestring
。我可能做的不对,因为结果非常糟糕。
这将测试您对标准输入几千字节输入之外的任何内容的耐心。分析器说它在 和 中花费了大量时间(输入大小的二次方Streaming.Internal.>>=.loop
)Data.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 time
对longest-seq
可执行文件进行计时。C 可执行文件会-c
附加一个以区分它们。
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,但不明白任何真正的含义,并且认为它不起作用。
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 (假设它可整除)
现在我的问题是:我如何从上面的块中恢复整个图像,换句话说,我必须如何对上面的块进行排序和排列以获取整个解码图像?
algorithm - 比特流中的模式识别
假设一个长比特流。我想在这个比特流中发现一些模式。我所知道的是,这个比特流不是随机比特流,而是包含一些重复的模式。
例如,假设比特流如下:
在这个比特流中有一个已知的模式:一些值设置在0101
s 之间。如果我们将此比特流 4 x 4 比特分开,我们将看到在某些0101
模式之间设置了一些值。
有没有办法找到或识别介于0101
或其他可能模式之间的值的模式?
video - 我怎样才能使视频没有索引位置和总长度,就像原始比特流格式一样,但它可以有音频流?
我怎样才能使视频没有索引位置并且没有总长度,它不能在视频播放器上加速减速并且它可以有音频流,带有 ffmpeg 代码?我已经研究了一段时间,但我只停留在精确原始比特流(附件 B)视频的方式谢谢你的指导。