Directshow 播放跳帧

姚小白 2016-08-29 03:38:57
自己写了一个读取D3D后台缓存的TransformFilter, 作用是对Input Sample使用D3D渲染,然后读取后台缓存,赋值给Out Sample。连接此Filter然后播放,发现每次视频播放到差不多的时候会出现跳帧现象,画面突变。之前怀疑是不是Transform太耗时了,导致还没来得及处理当前帧,后面的帧就来了,使用计时算了一下Transform函数运行的时间,大概是31ms左右,视频是25fps的,那每帧的时间大概是40ms,也就是说Transform函数处理没有超出时间,但播放就是出现跳帧现象,而且出现的时间进度差不多,请大神指导指导
...全文
359 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
姚小白 2016-08-29
  • 打赏
  • 举报
回复
引用 1 楼 rightorwrong 的回复:
时间戳的问题吧
我加了如下代码的:

REFERENCE_TIME TimeStart,TimeEnd;
	if (NOERROR == pIn->GetTime(×tart,&TimeEnd))
	{
		pOut->SetTime(×tart,&TimeEnd);
	}

	LONGLONG  MediaStart,MediaEnd;
	if (pIn->GetMediaTime(&MediaStart,&MediaEnd) == NOERROR)
	{
		pOut->SetMediaTime(&MediaStart,&MediaEnd);
	}

    hr = pIn->IsSyncPoint();
	if (hr == S_OK)
	{
		pOut->SetSyncPoint(TRUE);
	}else if(hr == S_FALSE)
	{
		pOut->SetSyncPoint(FALSE);
	}else
	{
		return E_UNEXPECTED;
	}

	hr = pIn->IsPreroll();
	if (hr == S_OK)
	{
		pOut->SetPreroll(TRUE);
	}else if (hr == S_FALSE)
	{
		pOut->SetPreroll(FALSE);
	}else
		return E_UNEXPECTED;

	hr = pIn->IsDiscontinuity();
	if ( hr == S_OK)
	{
		pOut->SetDiscontinuity(TRUE);
	}else if (hr == S_FALSE)
	{
		pOut->SetDiscontinuity(FALSE);
	}else
	{
		return E_UNEXPECTED;
	}
rightorwrong 2016-08-29
  • 打赏
  • 举报
回复
时间戳的问题吧

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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