觉得没什么比代码更清楚了。直接“翠花,上代码”.
int VideoPublisher_T::publishVideo(long lw,long lh,ACE_UINT8 * dibData, long size)
{
ACE_UINT8* jpgImageData = 0;
long jpgImageDataSize = 0;
CxImage image;
Video::FrameDataWriter_var dw =
Video::FrameDataWriter::_narrow(this->dataWriter_.in());
if (CORBA::is_nil(dw.in()))
{
ACE_ERROR_RETURN((LM_ERROR,"(%t|%T) narrow frame data writer\n"),-1);
}
// bytes alignment
ACE_UINT32 bytesPerLine = 4 * ((lw * 24 + 31)/32);
// Convert original RGB data to Image
image.CreateFromArray(
(unsigned char *)dibData,
lw,
lh,
24,
bytesPerLine,
false);
image.Encode(jpgImageData,jpgImageDataSize,CXIMAGE_FORMAT_JPG);
image.SetJpegQuality(24);
Video::Frame frame;
frame.frameId = 0;
frame.timestamp = ::getTimestamp();
frame.deviceId = OPTIONS::instance()->getDeviceId();
frame.type = Video::IT_JPG;
frame.deviceInfo = CORBA::string_dup(this->statMsg_);
frame.image.length(jpgImageDataSize);
ACE_OS::memcpy(frame.image.get_buffer(),(const void*)jpgImageData,jpgImageDataSize);
image.FreeMemory(jpgImageData);
DDS::ReturnCode_t ret = dw->write(frame, DDS::HANDLE_NIL);
if (ret != DDS::RETCODE_OK)
{
ACE_ERROR_RETURN((LM_ERROR,"(%t|%T) data writer\n"),-1);
}
return 0;
}
本文详细介绍了视频从原始RGB数据转换为JPEG格式,并通过CORBA接口进行发布的整个过程。包括了图像处理、JPEG压缩及质量设置、CORBA窄化检查、数据写入等关键步骤。
4356

被折叠的 条评论
为什么被折叠?



