最近我有机会使用两台通过RTSP流式传输H264的设备.我尝试使用FFmpeg库解压缩此流时遇到了一些问题.
每次调用" avcodec_decode_video2 "时 - FFmpeg只是说:
[h264 @ 00339220]没有框架!
我的原始H264流I帧数据开始如下:" 65 88 84 21 3F F8 F8 0D ......"(据我所知,这个0x65表示它是一个IDR帧?)
一台设备的其他框架开始如下:" 41 9A 22 07 F3 4E 48 CC ...."
和其他设备 - 像这样:" 61 9A 25 C1 1C 45 62 39 ...."
我期待帧数据开始时至少有" 00 00 00 01 "字节......但这就是我所拥有的......
有没有办法在使用"nmake"编译时使用v110_xp工具集(而不是默认的"v110")?
我正在尝试为VisualStudio2012编译Qt5库,我也需要它在Windows XP机器上运行.我已经设法使用带有nmake的VS2012编译所有Qt5库,但即使是简单的测试应用程序也无法在XP机器上运行,因为" 程序入口点_except_handler4_common无法位于动态链接库msvcrt.dll中 ".(在Windows 7计算机上,我的测试应用程序正常工作)
在我们的软件开发公司中,我们主要使用VisualStudio 2010(平台工具集v100).我们遇到了一种情况,我们需要使用VisualStudio 2008(V90)编译的一些组织不良的第三方SDK,并且在使用"v100"平台工具集时,此SDK无法正常运行.
我的意思是"组织不良"是......想象一下例如SDK导出函数,其中包含类似"std :: string"的东西.
解决方案是创建一个使用VS2010编译的"包装"dll,但使用"Platform Toolset v90"选项.但是要使"Platform Toolset v90"正常工作,我们需要安装一个VisualStudio 2008.
我的问题是:在没有购买VisualStudio 2008的情况下,有没有合法的方法在VS2010中使用v90平台工具集?也许有某种v90"工具包"或者我们可以使用的东西?
谢谢.
这可能是一个愚蠢的问题,但我仍然有点好奇......最近我正在研究我以前的一个同事项目,我注意到他真的喜欢使用这样的东西:
int foo(7);
Run Code Online (Sandbox Code Playgroud)
代替:
int foo = 7;
Run Code Online (Sandbox Code Playgroud)
这是用C++语言做的正常/好的方法吗?它有什么好处吗?(或者这只是他进入的一些愚蠢的编程风格..?)
这真的让我想起了如何在类构造函数中分配类成员变量的好方法...像这样:
class MyClass
{
public:
MyClass(int foo) : mFoo(foo)
{ }
private:
int mFoo;
};
Run Code Online (Sandbox Code Playgroud)
而不是这个:
class MyClass
{
public:
MyClass(int foo)
{
mFoo = foo;
}
private:
int mFoo;
};
Run Code Online (Sandbox Code Playgroud) 在它的"超时"信号/插槽功能中停止Qt的定时器是否安全?似乎无法在Qt文档中找到有关QTimer的任何信息.
我创建了一个定时向服务器发送"保持活动"消息的计时器.如果在发送消息时出现某种错误,我希望停止此计时器.
private:
QTimer* mpKeepAliveTimer;
Run Code Online (Sandbox Code Playgroud)
Timer初始化如下:
mpKeepAliveTimer = new QTimer(/* this */);
QObject::connect(mpKeepAliveTimer, SIGNAL(timeout()), this, SLOT(OnKeepAlive()));
mpKeepAliveTimer->start(KEEP_ALIVE_PERIOD);
Run Code Online (Sandbox Code Playgroud)
像这样停下来:
if (mpKeepAliveTimer != NULL) // <-- Edited
{
if (mpKeepAliveTimer->isActive() == true)
mpKeepAliveTimer->stop();
delete mpKeepAliveTimer;
mpKeepAliveTimer = NULL;
}
Run Code Online (Sandbox Code Playgroud)
超时功能如下所示:
void Classname::OnKeepAlive()
{
if (isErrorFound == true)
mpKeepAliveTimer->stop(); // <---- IS THIS SAFE?
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
将错误代码从枚举映射到字符串的更有效方法是什么?(在C++中)
例如,现在我正在做这样的事情:
std::string ErrorCodeToString(enum errorCode)
{
switch (errorCode)
{
case ERROR_ONE: return "ERROR_ONE";
case ERROR_TWO: return "ERROR_TWO";
...
default:
break;
}
return "UNKNOWN";
}
Run Code Online (Sandbox Code Playgroud)
如果我做这样的事情会以任何方式提高效率吗?:
#define ToStr( name ) # name;
std::string MapError(enum errorCode)
{
switch (errorCode)
{
case ERROR_ONE: return ToStr(ERROR_ONE);
case ERROR_TWO: return ToStr(ERROR_TWO);
...
default:
break;
}
return "UNKNOWN";
}
Run Code Online (Sandbox Code Playgroud)
也许有人对此有任何建议或想法?谢谢.
当制服使用布局绑定时,我对什么是绑定纹理的正确方法感到有些困惑。
layout(binding = 0, std140) uniform uCommon
{
mat4 projectionMatrix;
mat4 viewMatrix;
};
layout(binding = 1, std140) uniform uModel
{
mat4 modelViewProjectionMatrix;
};
layout(binding = 3) uniform sampler2D uTexture;
Run Code Online (Sandbox Code Playgroud)
要绑定我的第一个纹理,我应该使用“GL_TEXTURE0 + 3”吗?
glActiveTexture(GL_TEXTURE0 + 3);
glBindTexture(GL_TEXTURE_2D, textureId);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
编辑:或者采样器使用与其他制服分开的绑定?我可以用吗:
layout(binding = 0) uniform sampler2D uTexture;
Run Code Online (Sandbox Code Playgroud)
还在使用的时候
layout(binding = 0, std140) uniform uCommon
Run Code Online (Sandbox Code Playgroud) 有没有办法从视图投影矩阵中检索相机原点/位置?(OpenGL)
我正在尝试绘制相机的截锥体,并且计算远平面和近平面的角没有问题。
但我不知道如何检索代表相机原点的点。
我期望通过乘以同质剪切空间坐标来检索它:
glm::vec4(0.f, 0.f, 0.f, 1.f)
Run Code Online (Sandbox Code Playgroud)
但我发现有点像~倒置的相机位置。(在屏幕截图中标记为X)包含以下所有源代码。
// Homogeneous points for source cube in clip-space.
std::array<glm::vec4, 9> corners =
{
// Far plane
glm::vec4(-1.f,-1.f, 1.f, 1.f), // bottom-left
glm::vec4( 1.f,-1.f, 1.f, 1.f), // bottom-right
glm::vec4( 1.f, 1.f, 1.f, 1.f), // top-right
glm::vec4(-1.f, 1.f, 1.f, 1.f), // top-left
// Near plane
glm::vec4(-1.f,-1.f,-1.f, 1.f), // bottom-left
glm::vec4( 1.f,-1.f,-1.f, 1.f), // bottom-right
glm::vec4( 1.f, 1.f,-1.f, 1.f), // top-right
glm::vec4(-1.f, 1.f,-1.f, 1.f), // top-left
// Camera/screen center …Run Code Online (Sandbox Code Playgroud) 例如,我有类似的代码:
template<typename A, typename B>
using Map = std::map<A, B>;
template<typename A, typename B>
using UnorderedMap = std::unordered_map<A, B>;
Run Code Online (Sandbox Code Playgroud)
我想对做同样的事情std::array,即:
template<typename A, typename B>
using Array = std::array<A, B>;
Run Code Online (Sandbox Code Playgroud)
但是,如果这样做,我将得到一个编译器错误:
错误C2993:'B':非类型模板参数'_Size'的非法类型
错误C2955:“ std :: array”:使用类模板需要模板
参数列表array(21):message:参见'std :: array'的声明
有什么方法可以声明Array在后台使用的std::array吗?
最后,我想使用Array<int, 7> items代替的数组std::array<int, 7> items。