decisibuffersize值似乎被忽略了
DecideBufferSize values seem to be ignored
本文关键字:被忽略了 decisibuffersize 更新时间:2023-10-16
我遇到的问题是,当使用网络摄像头作为源时,输入样本大于分配器提供的缓冲区的大小,您可以在此代码中的ASSERT语句中看到。
HRESULT MCMyOutputPin::Deliver(IMediaSample* sample)
{
HRESULT hr = NO_ERROR;
myLogger->LogDebug("In Outputpin Deliver", L"D:\TEMP\yc.log");
if (sample->GetActualDataLength() > 0)
{
IMediaSample *outsample;
hr = m_pAllocator->GetBuffer(&outsample, NULL, NULL, NULL);
if (FAILED(hr))
{
return hr;
}
BYTE* sampleBuffer = NULL;
BYTE* newBuffer = NULL;
long ulDataLen = sample->GetSize();
long datalenout = outsample->GetSize(); //this is always 92160
outsample->GetPointer(&newBuffer);
ASSERT(datalenout >= ulDataLen); //This fails
memcpy((void *)newBuffer, (void *)sampleBuffer, ulDataLen);
m_pInputPin->Receive(outsample);
outsample->Release();
sample->Release();
}
return hr;
//Forward to filter
}
所以memcpy肯定会失败,因为你不能把比数据小的东西复制到缓冲区中。所以我试着调整DecideBufferSize
:
HRESULT MCMyOutputPin::DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProps)
{
myLogger->LogDebug("On DecideBufferSIze", L"D:\TEMP\yc.log");
ALLOCATOR_PROPERTIES act;
HRESULT hr;
// by default we do something like this...
pProps->cbAlign = 1;
pProps->cBuffers = 30;
long buffersize = this->CurrentMediaType().lSampleSize * 3;
pProps->cbBuffer = 10 * 10 * 1000;
pProps->cbPrefix = 0;
hr = pAlloc->SetProperties(pProps, &act);
if (FAILED(hr)) return hr;
// make sure the allocator is OK with it.
if ((pProps->cBuffers > act.cBuffers) ||
(pProps->cbBuffer > act.cbBuffer) ||
(pProps->cbAlign > act.cbAlign))
return E_FAIL;
return NOERROR;
}
被忽略。分配器返回的样本大小始终为92160。
我还确保了实际调用了decisibuffersize方法。
如何设置由Allocator->GetBuffer()返回的缓冲区的大小?
MSDN的表述相当准确:
通常,派生类将满足输入引脚的缓冲区要求,但不需要。
缓冲区大小的决定是协商的问题。你的设置要求并不意味着他们会被接受。
分配器返回的样本大小始终为92160。
如何设置由Allocator->GetBuffer()返回的缓冲区的大小?
92160到底出了什么问题,是什么让你认为它无效?你在寻找错误问题的答案。如果您拥有分配器,那么您可以设置它的缓冲区大小。如果你不拥有和管理它,那么你就不得不忍受它已经拥有的规模。
我在几个问题之前给了你MSDN链接,它解释了为什么增加大小的缓冲区有时是有效的,甚至更多-它们是不可避免的。
相关文章:
- 不知道某个东西是否被忽略会引入未定义的行为吗
- clang整洁10忽略了我的NOLINT命令
- C++模板参数之间的比较似乎被忽略了
- 我得到了一个没有被忽略的无效值,因为它应该是错误的,为什么
- 为什么 std::optional 的强制转换运算符被忽略了
- QTableWidget省略了一些主题,项目被创建但被忽略
- JNA 库路径似乎被忽略了
- C++ - 为什么我的 else 语句在 if-else 语句中被忽略了?
- 如果这些 { } 只是在代码中间,它们是什么意思?被忽略了
- 外部常量链接规范似乎被G++忽略了
- QGraphicsItem setTransformOriginPoint似乎被忽略了
- 显式复制构造函数被忽略,即使提供了确切的参数
- Xcode: C++头文件中的断点似乎被忽略了
- GMock:gtest_filter Android上被忽略了
- 我的第一个 cin 被忽略了,它只接受第二个
- 虚拟关键字似乎被忽略了
- 似乎头文件被忽略了/继承平原不起作用
- 为什么这段代码被忽略了?
- 下面c++函数中的数组重赋值似乎在函数调用后被忽略了
- decisibuffersize值似乎被忽略了