DVD subtitle stream in SDL(thinkvd开发日志)

  在开发thinkvd dvd subtitle视频时,SDL中显示dvd字幕流,在ffplay.c中运行是正常的,但把它嵌入到QT中,再由SDL来显示就不行,跟踪了很久。

   在字幕与视频合并的地方video_image_display(VideoState *is),把每帧都保存为png图片,发现在非嵌入QT情况下,它的每一帧带字幕的图片显示都正常,在嵌入情况下,只有少部分图片缺少字幕,应该来说也可以显示字幕。但字幕基本上只闪了一下。

在跟踪过程中发现一个现象:当保存图片时,SDL中能看到部分字幕,只是闪烁比较厉害,当时感觉是需要Delay一下,于是在video_image_display     中加了Delay,情况要好一些,但闪烁问题一直还是存在,无论把它延时多少

 

也想把subtitle stream共享到qt中,再在qt中实现视频数据与字幕流合并,但感觉这样实现的逻辑有点复杂,如果没有其它更好的办法只能这样。但个人一直坚信,合并字幕流后的视频里面已经存在字幕数据了,应该能显示才对。

再次对video_image_display进行了分析,它原来的结束是显示SDL_DisplayYUVOverlay(vp->bmp, &rect),而现在把它提前return了,它的调用关系video_refresh_timer->video_display->video_image_display, 调用完成之后,会立即处于后面的逻辑is->pictq_size--;,而这时在QT中正在COPY数据,COPY数据相对来说是比较慢的,在这个生产者与消费者模式下共享内存时,需要加一个同步机制,用于消费者还没有把数据完全COPY出来之前,生产者需要waiting.于是加了两个变量用于同步dts,pts,当dts>pts,让生产者ffplay waiting.
 就这样,qt中用SDL渲染dvd subtile基本正常了。
 

subtitle_thread中加上lock防止dvd subtitle stream被update,但少数subtile还有点闪烁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值