小编lpp*_*ier的帖子

如何在C中使用原子变量?

我需要在 C 中使用一个原子变量,因为这个变量是跨不同线程访问的。不想要竞争条件。

我的代码在 CentOS 上运行。我有哪些选择?

c linux atomic

11
推荐指数
2
解决办法
3万
查看次数

录制RemoteIO和VPIO之间的音量降低切换

在我的应用程序中,我需要在这两个不同的AudioUnit之间切换.每当我从VPIO切换到RemoteIO时,我的录音音量就会下降.相当大幅下降.尽管播放音量没有变化.有人经历过这个吗?

这是我进行切换的代码,由路由更改触发.(我不太确定我是否正确改变了,所以我也在这里问.)

如何解决录音音量下降的问题?

谢谢,感谢我能得到的任何帮助.

码头.

- (void)switchInputBoxTo : (OSType) inputBoxSubType
{
OSStatus result;

if (!remoteIONode) return; // NULL check

// Get info about current output node
AudioComponentDescription outputACD;
AudioUnit currentOutputUnit;

AUGraphNodeInfo(theGraph, remoteIONode, &outputACD, &currentOutputUnit);

if (outputACD.componentSubType != inputBoxSubType)
{
    AUGraphStop(theGraph);
    AUGraphUninitialize(theGraph); 
    result = AUGraphDisconnectNodeInput(theGraph, remoteIONode, 0);
    NSCAssert (result == noErr, @"Unable to disconnect the nodes in the audio processing graph. Error code: %d '%.4s'", (int) result, (const char *)&result);
    AUGraphRemoveNode(theGraph, remoteIONode);
    // Re-init as other type

    outputACD.componentSubType = inputBoxSubType;
    // …
Run Code Online (Sandbox Code Playgroud)

core-audio ios remoteio

9
推荐指数
1
解决办法
2153
查看次数

libev c ++ wrapper function_thunk

void set_ (const void *data, void (*cb)(EV_P_ ev_watcher *w, int revents)) throw ()
{
  this->data = (void *)data;
  ev_set_cb (static_cast<ev_watcher *>(this), cb);
}

// function callback
template<void (*function)(watcher &w, int)>
void set (void *data = 0) throw ()
{
  set_ (data, function_thunk<function>);
}

template<void (*function)(watcher &w, int)>
static void function_thunk (EV_P_ ev_watcher *w, int revents)
{
  function
    (*static_cast<watcher *>(w), revents);
}
Run Code Online (Sandbox Code Playgroud)

嗨,

我正在使用libev的C++包装器ev ++.ev ++中有这段代码.我知道如何使用API​​,但不完全理解.我可以在事件循环中设置一个Ctrl-C观察器,如下所示:

ev::sig signal_watcher(evloop); 
signal_watcher.set<sigint_cb>(); 
signal_watcher.start(SIGINT); 
Run Code Online (Sandbox Code Playgroud)

其中sigint_cb的函数签名是:

void sigint_cb(ev::sig &w, int revents)
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么function_thunk可以神奇地将我的sigint_cb函数签名转换为

void (*cb)(EV_P_ …
Run Code Online (Sandbox Code Playgroud)

c++

8
推荐指数
1
解决办法
403
查看次数

在另一个网站上嵌入在Ruby on Rails中编码的网页?

我希望将我使用Ruby on Rails编码的网页作为可嵌入的后端,以便用户能够通过复制和粘贴一些嵌入代码轻松共享它.(很像YouTube嵌入代码,但对于网页而言)有人可以指点我的教程或大致方向如何去做吗?我打算在Joomla CMS中嵌入我的网页.

非常感谢.

码头.

embed ruby-on-rails

6
推荐指数
1
解决办法
4995
查看次数

最简单的方法来添加文件上传进度条(回形针)Apache/Paperclip/Rails

基于paperclip和apache服务器的rails上传有一个简单的上传进度条示例吗?我到目前为止看到的例子要么过时,要么让我感到困惑.

感谢您的帮助!

码头.

ruby-on-rails paperclip

5
推荐指数
1
解决办法
1800
查看次数

使用 GStreamer 使用 GPS 信息逐帧标记视频

我的任务是在录制视频时用 gps 坐标逐帧标记视频。该平台必须在 Linux 上(具体来说是 Ubuntu)。

对视频源编程非常陌生。

一些问题:视频帧甚至有每帧元数据吗?

GStreamer 是用于我的目的的好框架吗?我应该如何开始?

谢谢。

linux video gstreamer

4
推荐指数
1
解决办法
2223
查看次数

堆栈内存未释放

我有以下循环,它弹出一个C++并发队列,来自这里的实现.https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/

while (!interrupted)
{
    pxData data = queue->pop(); 
    if (data.value == -1)
    { 
        break; // exit loop on terminating condition
     }
    usleep(7000); // stub to simulate processing
}
Run Code Online (Sandbox Code Playgroud)

我正在使用CentOS7中的系统监视器查看内存历史记录.我正在尝试从队列中读取值后释放队列占用的内存.但是,随着以下while循环运行,我看不到内存使用率下降.我已经确认队列长度确实下降了.

但是,当遇到-1并且循环退出时,它确实会下降.(程序仍在运行)但是我不能拥有这个,因为在我们睡觉的时候,我想做一些密集的处理.

问题:为什么数据占用的内存不能自由编辑?(根据系统监视器)当变量超出范围时,堆栈分配的内存是不是应该被释放?

结构定义如下,并在程序开头填充.

typedef struct pxData
{
  float value; // -1 value terminates the loop
  float x, y, z;
  std::complex<float> valueData[65536];
} pxData;
Run Code Online (Sandbox Code Playgroud)

它填充了~10000 pxData,大致翻译为5GB.系统只有~8GB.因此,为了在系统中进行其他处理,内存可以自由编辑.

c++ memory memory-management

4
推荐指数
1
解决办法
609
查看次数

C++ 11:新的返回连续内存吗?

float* tempBuf = new float[maxVoices]();
Run Code Online (Sandbox Code Playgroud)

将以上结果

1)16字节对齐的内存?

2)确认连续的内存?

我想要的是以下内容:

float tempBuf[maxVoices] __attribute__ ((aligned));
Run Code Online (Sandbox Code Playgroud)

但作为堆内存,这将对Apple Accelerate框架有效.

谢谢.

c++ c++11

4
推荐指数
2
解决办法
436
查看次数

iOS Core Audio:在kAudioFormatFlagsCanonical和kAudioFormatFlagsAudioUnitCanonical之间转换

我需要在这种格式之间转换:

        format.mSampleRate  = 44100.0; 
        format.mFormatID = kAudioFormatLinearPCM;
        format.mFormatFlags = kAudioFormatFlagsCanonical | kLinearPCMFormatFlagIsNonInterleaved;
        format.mBytesPerPacket = sizeof(AudioUnitSampleType);
        format.mFramesPerPacket = 1;
        format.mBytesPerFrame = sizeof(AudioUnitSampleType);
        format.mChannelsPerFrame = 2 ;
        format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;
Run Code Online (Sandbox Code Playgroud)

和这种格式

format.mSampleRate  = 44100.0; 
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
format.mBytesPerPacket = sizeof(AudioUnitSampleType);
format.mFramesPerPacket = 1;
format.mBytesPerFrame = sizeof(AudioUnitSampleType);
format.mChannelsPerFrame = 2; 
format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;
Run Code Online (Sandbox Code Playgroud)

在音频渲染回调的范围内,其中有以下代码,buffer []是第二种格式,array []需要第一种格式.

for (k = 0; k < channels; k++){
    buffer = (AudioUnitSampleType *) ioData->mBuffers[k].mData;
    for(j=0; j < samples; j++){
        array[j] = buffer[j];
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道你可以使用Apple转换器单元,但我不能在我的情况下使用Apple …

macos core-audio ios

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

Matlab与C++双精度

我正在将一些代码从Matlab移植到C++.

在Matlab中

format long
D = 0.689655172413793 (this is 1.0 / 1.45)
E = 2600 / D
// I get E = 3.770000000000e+03
Run Code Online (Sandbox Code Playgroud)

在C++中

double D = 0.68965517241379315; //(this is 1.0 / 1.45)
double E = 2600 / D;
//I get E = 3769.9999999999995
Run Code Online (Sandbox Code Playgroud)

对我来说这是一个问题,因为在这两种情况下我都必须向下舍入到0(Matlab的修正),在第一种情况下(Matlab)变为3770,而在第二种情况下(C++)它变为3769.

我意识到这是因为C++案例中有两个额外的最低有效数字"15".鉴于Matlab似乎只能在双精度中存储多达15位有效精度数字(如上图所示 - 0.689655172413793),我怎样才能有效地告诉C++忽略后面的"15"?

所有计算都以双精度完成.

c++ floating-point precision matlab ieee-754

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