草庐IT

c++ - AudioUnit 中的输入缓冲区结构

我编写了一个简单的audiounit,它应该交换立体声源的左右声道。对于使用BASS库的命令行程序,此代码的移植版本在C中运行良好,但我无法让相同的代码在Xcode中为audiounit工作。例如,对于{1,2,3,4,5,6}的缓冲区输入,我希望立体声反转为{2,1,4,3,6,5}。我的代码以这种方式正确地反转了样本,但我听到的只是某种低通滤波,而不是样本的立体声反转。我的输入缓冲区中的前4个值是:0.0001040.0001010.0000800.000113输出是:0.0001010.0001040.0001130.000080我是否误解了输入/输出缓冲区的结构方式?voidF

c++ - 如何对齐堆栈上的缓冲区?

我正在尝试实现一个按大小对齐的内存缓冲区,以便我可以使用DMAController的模数功能来实现环形缓冲区。我知道我可以用memalign做到这一点,但我想知道是否可以在堆栈上这样做,因为到目前为止我已经能够避免动态内存。我正在使用GCC4.4.1,我不关心可移植性(嵌入式系统)。我想做这样的事情:templateclasssampler{__attribute__((aligned(buffer_size*num_channels*2)))uint16_tbuffer[buffer_size][num_channels];};但是GCC当然不会接受非常量对齐(并且似乎表明对齐>8可

c++ - FFmpeg 使用 avcodec_decode_video2 解码原始缓冲区

我正在接收一个h264流,其中我至少知道一帧的大小。流正在进入,因为我可以将它存储在一个文件中并使用vlc播放。回放文件对我来说没有问题,因为我包含了libavformat。但是libavformat给了我一个AVPacket,我可以直接给avcodec_decode_video2。在这种情况下,我得到了一个字节流。如何将原始h264流提供给avcodec_decode_video2?如何将我的数据包装到AVPacket中。VLC不需要猜测任何数据。 最佳答案 解码流或多或少容易。这段代码非常适合我:classffmpegstrea

c++ - 使用 libpng 将位图缓冲区快速编码为 png

我的目标是使用C/C++将32位位图(BGRA)缓冲区实时转换为png图像。为了实现它,我使用了libpng库来转换位图缓冲区,然后写入一个png文件。然而,在单线程目标arm板(四核处理器)上执行似乎需要很长时间(~5秒)。在分析时,我发现libpng压缩过程(放气算法)占用了90%以上的时间。所以我试图通过以某种方式使用并行化来减少它。这里的最终目标是至少在0.5秒内完成。既然png可以有多个IDATblock,我想到了用多个IDAT并行编写png。采用以下方法编写具有多个IDAT的自定义png文件1.WritePNGIHDRchunk2.WriteIDATchunksinpara

c++ - 在 Boost Asio 缓冲区中打包结构

我正在寻找一种通过带有BoostAsio的套接字发送由自定义数据结构组成的数据包的方法。目前我知道你可以发送一个带有标准boostasio缓冲区的字符串(在boost::asio::write(..)方法中)。例如,是否可以将数据从填充的结构发送到服务器或客户端?如果是,我需要怎么做,因为我找不到关于此的文档。 最佳答案 您可以按位复制POD对象。事实上,只要T是POD结构,Asio就接受boost/stdarray、T[]或vector缓冲区。http://www.boost.org/doc/libs/1_55_0/doc/htm

c++ - 使用 secure _vsnprintf_s 获取所需的缓冲区长度

我正在尝试更新一些“遗留”代码以符合MSVC的最新安全更新,并且在从_vsnprintf迁移到_vsnprintf_s时遇到了一些问题。特别是,我在调用_vsnprintf时使用空缓冲区和零计数/长度,获取结果,分配所需大小的缓冲区(返回值+1),然后使用新分配的缓冲区和已知正确的大小再次调用_vsnprintf:size_tlength=_vsntprintf(nullptr,0,mask,params);TCHAR*final=newTCHAR[length+1];_vsntprintf(final,length+1,mask,params);此行为是documentedonMSD

c++ - 相当于缓冲区上的 fgets?

我最初使用fgets()逐行解析文件。现在我改变了一些东西,所以我已经把我的整个文件放在一个缓冲区里了。我仍然喜欢逐行读取该缓冲区以进行解析。是否有为此设计的东西,或者我是否需要制作一个循环来检查此时的0x0Achar? 最佳答案 memchr(有一点你自己的包装代码,以memcpy结尾)是完全等价的-像fgets它需要一个它将处理的最大长度(应该是剩余输入缓冲区大小和输出缓冲区大小的最小值)并扫描直到它找到所需的字符(将是'\n')或运行输入/输出空间不足。请注意,对于已经在内存缓冲区中的数据,您可能希望跳过复制到单独输出缓冲区的

c++ - 将 FBO 混合到默认帧缓冲区

澄清一下,当我说“默认帧缓冲区”时,我指的是窗口系统提供的那个,它最终出现在你的显示器上。为了提高CAD应用程序的渲染速度,我设法将3D元素与Qt处理的2D元素分开,现在它们各自渲染到自己的FBO中。当需要将它们放到屏幕上时,我将3DFBO位block传输到默认FB上,然后我想在其上混合我的2DFBO。我已经很好地完成了blitting部分,但我看不出如何将我的2DFBO混合到它上面?两个FBO的大小和格式完全相同,并且都与默认FB相同。我确信这是一个简单的操作,但我在网上找不到任何东西-大概是我错过了我正在尝试做的事情的正确术语。虽然我使用的是Qt,但我可以毫无问题地使用native

c++ - 在 emacs 中运行命令,在可点击缓冲区中获取输出

我想运行一个shell命令并在emacs的可点击缓冲区中获取它的输出。该命令是一个shell脚本,最终会在一堆源文件上运行glimpse。它的输出看起来像grep的输出。它包括文件名和行号。我希望能够单击文件或站在文件上输入,然后让emacs将我带到文件中的那一行。我想我需要一些自定义函数来执行此操作,但我是emacs的新手,所以我还不知道如何对其进行编程。 最佳答案 M-xgrep输入您的命令而不是默认命令。M-xapropos"grep.*null"找到grep-use-null-device如果你不需要发送"/dev/null

c++ - 着色器存储缓冲区中的 OpenGL 顶点

我现在正在使用计算着色器开发粒子系统。我将所有粒子都放在着色器存储缓冲区中。一个粒子包含两个顶点,当前位置和先前位置。structParticle{glm::vec4_currPosition;glm::vec4_prevPosition;};在我调度我的计算着色器后,我想直接从着色器存储缓冲区中绘制所有粒子。所以这就是我所做的:glBindBufferBase(GL_SHADER_STORAGE_BUFFER,0,shaderStorageBufferID);_shaderManager->useProgram("computeProg");glDispatchCompute((_n