VMR9显示的图片颜色失真,花屏?
来源:互联网 发布:网络消费陷阱揭秘 编辑:程序博客网 时间:2024/05/01 10:11
我将一副存储在单片机中的图片通过网线传到电脑上显示,没有用打时间戳,{etSyncSource(NULL);SetTime(NULL, NULL)}
确认所有的数据被传到电脑端了,视频不闪烁,移动,下面是我的视屏格式;
mPreferredMt.SetType(&MEDIATYPE_Video);
mPreferredMt.SetSubtype(&MEDIASUBTYPE_RGB565);
mPreferredMt.SetFormatType(&FORMAT_VideoInfo);
mPreferredMt.SetTemporalCompression(FALSE);
VIDEOINFO info;
ZeroMemory(&info, sizeof(VIDEOINFO));
info.AvgTimePerFrame = 40000;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth =160;
info.bmiHeader.biHeight = - 120;
info.bmiHeader.biBitCount = 16;
info.bmiHeader.biSizeImage = (192)*(120)*2; //
info.bmiHeader.biCompression = BI_BITFIELDS;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biClrImportant = 0;
info.bmiHeader.biClrUsed = 0; //Use max colour depth
info.bmiHeader.biXPelsPerMeter = 0 ;
info.bmiHeader.biYPelsPerMeter = 0 ;
info.dwBitMasks[0] =0xF800;
info.dwBitMasks[1] =0x7E0;
info.dwBitMasks[2] =0x1F;
SetRectEmpty(&(info.rcSource));
SetRectEmpty(&(info.rcTarget));
info.rcSource.bottom = 0;
info.rcSource.right = 0;
info.rcTarget.bottom = 120;
info.rcTarget.right = 160;
TRACE("VIDEOINFO%u",sizeof(VIDEOINFO));
mPreferredMt.SetFormat((BYTE*)&info, sizeof(VIDEOINFO));
mPreferredMt.SetSampleSize(info.bmiHeader.biSizeImage);
mPreferredMt.cbFormat = sizeof(VIDEOINFO);
DisplayType("MediaType",&mPreferredMt);
下面是我的数据接收函数,先接收一个同步标志,然后按行接收,一行320bytes的数据,把整幅图片120行接收完,在每行末尾加入64bytes,因为VMR9需要192*2=384bytes的STRIDE
void CStreamSocket::ReceivingLoop(void)
{
unsigned int bytes = 0;
int err;
char VideoBegin =0;
PBYTE pSampleBuffer;
SOCKET UDPReceiver,TCPReceiver;
TRACE("In Net Receiver Filter Loop");
char buffer[MAX_COMMAND_SIZE];
// Set up command listening
BOOL pass = mUDPReceiver->CreateReceiver();
if(pass)
UDPReceiver = mUDPReceiver->GetUDPReceiver();
else
TRACE("UDP SOCKET创建失败");
while(TRUE)
{
if(mIsConnected!=TRUE)
{
TCPReceiver = AcceptConnectform();
TRACE("连接到摄像头 %x",TCPReceiver);//建立连接
}
else
{
TRACE("Receive media data");
// Receive media data
BOOL pass = FALSE;
do
{
pass = mOwnerFilter->GetSampleBuffer(&pSampleBuffer);
if (!pass)
{
Sleep(100);
}
} while (mIsReceiving && !pass);
while (VideoBegin == 0) //同步主机和摄像头
{
bytes = recv(UDPReceiver, (char *)buffer, MAX_COMMAND_SIZE, 0);
TRACE("等待新的一帧图像 %X ",bytes);
TRACE("buffer%x",*(long *)buffer);
//long tem = *(long *)buffer;
//TRACE("TEM%X",tem);
TRACE("CMD%x",cmd_VideoBegin);
//ntohl(tem);
if ( *(long *)buffer == cmd_VideoBegin)
{
VideoBegin = 1;
}
}
unsigned int row = 320;
long received = 0;
while (mIsReceiving && received < (160 +32)*120*2)
{
bytes = recv(TCPReceiver, (char*)(pSampleBuffer+received), row, 0);
err=WSAGetLastError();
switch(err)
{
case 0 : TRACE("Bytes received: %d\n", bytes);VideoBegin = 0;break;
case WSAENOTCONN : mIsConnected=FALSE;TRACE("连接断开");break;
case WSAENETRESET : mIsConnected=FALSE;TRACE("连接断开");break;
case WSAESHUTDOWN : TRACE("连接被关闭");break;
case WSAECONNABORTED : mIsConnected=FALSE;TRACE("连接断开");break;
case WSAETIMEDOUT : mIsConnected=FALSE;TRACE("连接超时");break;
case WSAECONNRESET : mIsConnected=FALSE;TRACE("连接断开");break;
default:TRACE("recv failed: %d\n", err);
}
if(bytes == 320) //得到的数据正好是一行则直接添加STRIDE
{
received += (row +64);
TRACE("已经接收的数据 %d\n",received);
}
else
{
received += bytes;
row =320-received%384; //接收一行的下半部分
TRACE("已经接收的数据 %d\n",received);
TRACE("下半部分 %d\n", row);
if(row == 0) //凑齐了一行数据后插入STRIDE
{
received+=64;
row = 320;
}
}
}
TRACE("received %u",received);
// Deliver this sample
mOwnerFilter->DeliverHoldingSample(received);
Sleep(10);
}
}
}
调试到这里不知道怎么弄了,请大家说说可能是哪方面的问题?
- VMR9显示的图片颜色失真,花屏?
- ListView显示图片失真
- tabBar图片颜色 失真解决
- 运行directfb-example中的df_andi显示的颜色失真
- IPicture::Render显示图片失真
- 位图显示出现颜色失真(VC)
- CImage缩小图片时颜色失真
- iOS-图片显示时失真问题
- ImageList的图片失真问题
- Android 图片失真的原因
- 不失真的图片展示
- VMR9的定制AP
- VMR9的定制AP
- VMR9的定制AP
- 解决使用CImage类的Draw函数在显示图片时引起的图像失真问题
- Android 拍照并显示在ImageView中(解决图片压缩失真的问题)
- 显示一张超高清图片/长图且不失真的方法
- MFC显示图片/StretchDIBits失真/显示倒了
- C++ 对象的内存布局(下)
- PLINQ
- oracle execute immediate
- undefined reference to `vtable for “classname”
- vs2008中新建项目后看不到解决方案的解决办法
- VMR9显示的图片颜色失真,花屏?
- Managed Beans
- 查询Active Directory(LDAP)
- 以后开始写博客
- Mysql查询前n条数据,n-m之间,n之后的数据总结
- 判断数字和汉字 工具 总结
- 谁说菜鸟不会数据分析
- IBM虚拟化技术关键词解释
- ubuntu速配指南之软件参考