标签: buffer

如何知道缓冲位置对应的行号?

当Emacs报告错误时,它总是显示具有缓冲区位置的代码,使用它很难找到确切单词所在的位置.

有没有办法知道缓冲区位置的确切行数?

emacs buffer

10
推荐指数
1
解决办法
3031
查看次数

AudioTrack lag:obtainBuffer超时

我通过加载文件并通过FileInputStream> BufferedInputStream> DataInputStream方法将字节输入AudioTrack.write()来在我的Android手机上播放WAV.音频播放效果很好,如果是,我可以轻松调整采样率,音量等,性能良好.然而,一首曲目开始播放大约需要两秒钟.我知道AudioTrack有一个不可避免的延迟,但这太荒谬了.我每次播放曲目都会得到:

03-13 14:55:57.100: WARN/AudioTrack(3454): obtainBuffer timed out (is the CPU pegged?) 0x2e9348 user=00000960,     server=00000000
03-13 14:55:57.340: WARN/AudioFlinger(72): write blocked for 233 msecs, 9 delayed writes, thread 0xba28
Run Code Online (Sandbox Code Playgroud)

我注意到,每次播放曲目时,延迟的写入次数会增加一次 - 即使是在多个会话中 - 从手机开机之时起.块时间始终为230 - 240ms,考虑到此设备上的最小缓冲区大小为9600(9600/44100),这是有意义的.我在互联网上的无数次搜索中看到了这个消息,但它通常似乎与不播放音频或跳过音频有关.就我而言,这只是一个延迟的开始.

我正在高优先级的线程中运行我的所有代码.这是我正在做的截断但功能正常的版本.这是我的播放类中的线程回调.再次,这是有效的(现在只播放16位,44.1kHz,立体声文件),它只需要永远启动并且每次都有获取缓冲/延迟写入消息.

public void run() {

    // Load file
    FileInputStream mFileInputStream;
    try {
        // mFile is instance of custom file class -- this is correct, 
        // so don't sweat this line
        mFileInputStream = new FileInputStream(mFile.path());
    } catch (FileNotFoundException e) {
        // log
    }

    BufferedInputStream mBufferedInputStream …
Run Code Online (Sandbox Code Playgroud)

audio android buffer delay lag

10
推荐指数
1
解决办法
8374
查看次数

在.Net/C#中播放音频

我是一位多年经验丰富的MFC程序员,近年来他一直在使用Objective C for Mac和iOS开发商业应用程序 - 我正在努力加快.Net和C#的速度(我很快就会这样做)需要将我的一个商业应用程序从Mac转换为PC).

我现在已经完成了几本书的练习,并且为了更熟悉.Net(和C#),我决定将我的一个非商业应用程序转换为.Net作为学习练习一切顺利(界面正常,数据结构都很好)但我需要能够播放音频.

我的Mac应用程序从一系列数学公式生成音频 - 想象一个波浪发生器 - 不完全相同但相似.在Mac上,我将音频生成为16位带符号的原始音频,使用Core Audio设置音频输出路由,然后在音频路由需要新的音频缓冲区时进行回调(这样我就可以动态生成音频) .

我需要在PC上做同样的事情.不幸的是,我发现MSDN文档是"无法看到树木"的案例,因为有大量的文档.我可以找到能让我加载和播放mp3/wav等文件的类,但我需要实时生成音频.任何人都可以指出我正确的方向找到一些东西,可以让我在播放时动态填充缓冲区吗?

谢谢

c# audio buffer playback

10
推荐指数
1
解决办法
2万
查看次数

如何解析通过/ proc文件传递给内核模块的大量数据?

编辑:我发现seq_file很容易从内核向用户空间写入大量数据.我正在寻找的是相反的; 一个API,便于从用户空间读取大量数据(多个页面).

编辑2:我正在实现一个<stdio.h>作为内核模块的端口,它能够打开/proc(以及后来的其他虚拟文件系统),类似于FILEs并处理类似的输入和输出<stdio.h>.你可以在这里找到这个项目.


我发现了很多关于内核如何将大量数据写入/ proc(用于用户空间程序)的问题,但没有其他方面.让我详细说明:

这个问题基本上是关于输入被标记化的算法(例如ints或混合int和字符串等),假设数据可能在多个缓冲区之间被打破.

例如,假设以下数据被发送到内核模块:

12345678 81234567 78123456 67812345 5678 1234 45678123 3456 7812 23456781
Run Code Online (Sandbox Code Playgroud)

并且为了这个例子,假设Linux提供/ proc处理程序的页面大小是20字节(相对于真正的4KB).

从/ proc(在内核模块中)读取数据的函数然后查看数据:

call 1:
"12345678 81234567 78"
call 2:
"123456 67812345 5678"
call 3:
" 1234 45678123 3456 "
call 4:
"7812 23456781"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当78在第一次调用中读取时,它应该在下一帧之前处理,以便它决定78帧之间是整数还是一帧.

现在我发现seq_files显然只是在内核想要数据写入用户而不是读取时(或者可能是HOWTO写得非常糟糕).

我做了什么

到目前为止,我已经提出了以下解决方案(我是从记忆中写的,所以我可能会错过几次错误检查,但请耐心等待):

在初始化阶段(比如说init_module …

c linux buffer kernel procfs

10
推荐指数
1
解决办法
2074
查看次数

如何确定分配的C缓冲区的大小?

我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量.

char *buffer = (char *)malloc(sizeof(char) * 10);
Run Code Online (Sandbox Code Playgroud)

做一个

int numElements = sizeof(buffer); 
Run Code Online (Sandbox Code Playgroud)

不回10,有关如何实现这一点的任何想法?

c malloc buffer buffer-overflow

10
推荐指数
4
解决办法
5万
查看次数

如何在不复制和保留std :: string对象的情况下获取C++ std :: string char数据的所有权?

如何在不复制和保留源std :: string对象的情况下获取std :: string char数据的所有权?(我想使用移动语义但在不同类型之间.)

我使用C++ 11 Clang编译器和Boost.

基本上我想做一些与此相当的事情:

{
    std::string s(“Possibly very long user string”);
    const char* mine = s.c_str();

    // 'mine' will be passed along,
    pass(mine);

    //Made-up call
    s.release_data();

    // 's' should not release data, but it should properly destroy itself otherwise.
}
Run Code Online (Sandbox Code Playgroud)

为了澄清,我确实需要摆脱std :: string:继续前进.该代码处理字符串和二进制数据,并应以相同的格式处理它.我确实想要来自std :: string的数据,因为它来自另一个与std :: string一起使用的代码层.

为了给出更多透视图,我想要这样做:例如,我有一个异步套接字包装器,它应该能够从用户那里获取std :: string和二进制数据进行写入.两个"API"写入版本(将std :: string或行二进制数据)内部解析为相同(二进制)写入.我需要避免任何复制,因为字符串可能很长.

WriteId     write( std::unique_ptr< std::string > strToWrite )
{

    // Convert std::string data to contiguous byte storage
    // that will …
Run Code Online (Sandbox Code Playgroud)

c++ string buffer iostream c++11

10
推荐指数
1
解决办法
3578
查看次数

getline()甚至在clear()之后跳过

所以我有一个功能,一直跳过第一个getline,直接跳到第二个getline.我试图清除缓冲区,但仍然没有运气,发生了什么?

void getData(char* strA, char* strB)
{
    cout << "Enter String 1: ";               // Shows this line
    cin.clear();
    cin.getline(strA, 50);                    // 50 is the character limit, Skipping Input

    cout << endl << "Enter String 2: ";       // Showing This Line
    cin.clear();
    cin.getline(strB, 50);                   // Jumps Straight to this line
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays buffer char getline

10
推荐指数
1
解决办法
3万
查看次数

base64中的base64 JSON编码字符串

如何在nodejs中创建base64 JSON编码的字符串?

我尝试过这个并没有用.

var buff = new Buffer({"hello":"world"}).toString("base64");
Run Code Online (Sandbox Code Playgroud)

是这个吗?

var buff = new Buffer(JSON.stringify({"hello":"world"})).toString("base64");
Run Code Online (Sandbox Code Playgroud)

javascript base64 buffer json node.js

10
推荐指数
2
解决办法
1万
查看次数

FFmpeg挂起缓冲区填充c ++

我正在使用ffmpeg从RTSP流处理一堆帧.我最终对这些帧进行了大量处理,这意味着我并不总是实时提取.如果缓冲区已满,则进程挂起.我想知道以下解决方案之一是否可行/解决问题,如果是,我将如何使用ffmpeg库实现它:

1)如果我到达悬挂点,有没有办法清除缓冲区?(我可以确定它何时挂起,我只是不知道该怎么做).

2)有没有办法让缓冲区覆盖旧数据,只是总是读取最新的数据?如果我丢帧,对我来说无关紧要.

3)我已经发现,我可以让缓冲区arbtrarily大:av_dict_set(&avd, "buffer_size", "655360", 0);.这可能是一个解决方案,但我不知道它需要多大/多小,因为我不知道流将发布视频的时间有多长?

4)这只是我需要提出的ffmpeg人员的错误吗?

5)我没有考虑过的其他事情?

while(av_read_frame(context, &(packet)) >= 0 && fcount < fps*SECONDS) {
    clock_t start, end;
    int ret = avcodec_send_packet(codec_context, packet);
    if(!(packet->stream_index == video_stream_index)) {
      continue;
    }

    if (ret == AVERROR(EAGAIN) || ret == AVERROR(EINVAL)) {
      continue;
    } else if (ret < 0) {
      cerr << "Error while decoding frame " << fcount << endl;
      exit(1);
    }

    ret = avcodec_receive_frame(codec_context, frame);
    if (ret == AVERROR(EAGAIN) || ret == AVERROR(EINVAL)) {
      continue;
    } else …
Run Code Online (Sandbox Code Playgroud)

c++ buffer ffmpeg

10
推荐指数
1
解决办法
629
查看次数

stream :: seekoff会更新输入序列吗?

[filebuf.virtuals]中:

pos_type seekoff(off_type off, ios_base::seekdir way,
                 ios_base::openmode which
                   = ios_base::in | ios_base::out) override;
Run Code Online (Sandbox Code Playgroud)

效果:让我们来width表示a_­codecvt.encoding().如果is_­open() == false,或者off != 0 && width <= 0,则定位操作失败.否则,如果way != basic_­ios?::?cur还是off != 0,如果最后的操作是输出,然后更新输出序列和写任何不印字序列.接下来,寻找新的位置:如果width > 0,打电话fseek(file, width * off, whence),否则打电话fseek(file, 0, whence).

它没有提到此函数更新输入序列.作为对比,seekpos确实更新输入序列:

pos_type seekpos(pos_type sp,
                 ios_base::openmode which
                   = ios_base::in | ios_base::out) override;
Run Code Online (Sandbox Code Playgroud)

如果可能,改变文件位置以对应存储的位置sp(如下所述).更改文件位置执行如下:

  1. if (om & ios_­base?::?out) != 0,然后更新输出序列并写入任何非移位序列;

  2. 将文件位置设置sp …

c++ buffer stream language-lawyer

10
推荐指数
1
解决办法
168
查看次数