CUDA编码结果码流转发

想飞的笨猴 2016-05-16 05:26:15
小弟最近因为实验室项目需要,开始学习一些基于CUDA的图像压缩和转发的东西。使用的CudaSDK自带的CudaEncode示例,这个demo里面使用 NVEncodeFrame函数对图像进行逐帧压缩,把压缩的结果写进对应的H264文件,但是得不到每一帧压缩结果的字符串,想请教各位大咖,如何才能得到压缩后的字符串或者码流?

按理说得从

static unsigned char *_stdcall NVDefault_HandleAcquireBitStream(int *pBufferSize, void *pUserData)
static void _stdcall NVDefault_HandleReleaseBitStream(int nBytesInBuffer, unsigned char *cb,void *pUserData)
这两个函数找思路,但是因为NVEncodeFrame函数封装在"NVEncoderAPI.h",看不到具体函数调用的过程,求各位大神指点
附demo中的编码函数:

bool VideoEncoder::EncodeFrame(NVVE_EncodeFrameParams &sFrameParams, CUdeviceptr dptr_VideoFrame, CUvideoctxlock ctxLock)
{
// If this is the first frame, we can start timing
if (m_nFrameCount == 0)
{
Start();
}

HRESULT hr = S_OK;

if (m_pEncoderParams->iUseDeviceMem)
{
// Copies video frame from system memory, and passes it as a System pointer to the API
switch (m_pEncoderParams->iSurfaceFormat)
{
case UYVY: // UYVY (4:2:2)
case YUY2: // YUY2 (4:2:2)
CopyUYVYorYUY2Frame(sFrameParams, dptr_VideoFrame, ctxLock);
break;

case YV12: // YV12 (4:2:0), Y V U
case IYUV: // IYUV (4:2:0), Y U V
CopyYV12orIYUVFrame(sFrameParams, dptr_VideoFrame, ctxLock);
break;

case NV12: // NV12 (4:2:0)
CopyNV12Frame(sFrameParams, dptr_VideoFrame, ctxLock);
break;

default:
break;
}

sFrameParams.picBuf = NULL; // Must be set to NULL in order to support device memory input
hr = NVEncodeFrame(m_pEncoder, &sFrameParams, 0, (void *)dptr_VideoFrame); //send the video (device memory) to the
}
else
{
// Copies video frame from system memory, and passes it as a System pointer to the API
hr = NVEncodeFrame(m_pEncoder, &sFrameParams, 0, m_pSNRData);

}

if (FAILED(hr))
{
printf("VideoEncoder::EncodeFrame() error when encoding frame (%d)\n", m_nFrameCount);
return false;
}

if (sFrameParams.bLast)
{
m_bLastFrame = true;
m_nLastFrameNumber = m_nFrameCount;
}
else
{
frameSummation(m_nFrameCount);
m_nFrameCount++;
}

return true;
}

...全文
397 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
想飞的笨猴 2016-11-08
  • 打赏
  • 举报
回复
没人回复,自顶吧

580

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧