DVD subtitle stream in SDL(thinkvd开发日志)
来源:互联网 发布:丽水学院网络图书馆 编辑:程序博客网 时间:2024/06/01 07:16
在开发thinkvd dvd subtitle视频时,SDL中显示dvd字幕流,在ffplay.c中运行是正常的,但把它嵌入到QT中,再由SDL来显示就不行,跟踪了很久。
在字幕与视频合并的地方video_image_display(VideoState *is),把每帧都保存为png图片,发现在非嵌入QT情况下,它的每一帧带字幕的图片显示都正常,在嵌入情况下,只有少部分图片缺少字幕,应该来说也可以显示字幕。但字幕基本上只闪了一下。
在字幕与视频合并的地方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还有点闪烁
- DVD subtitle stream in SDL(thinkvd开发日志)
- DVD subtitle (thinkvd开发日志)
- 关于dvd subtitle与effect效果有冲突问题(thinkvd开发日志)
- SDL内存泄漏跟踪(thinkvd开发日志)
- dvd 字幕转换缩放问题 (thinkvd开发日志)
- dvd 字幕缩放测试代码 (thinkvd开发日志)
- 转换dvd 字幕缩小改进(thinkvd开发日志)
- SDL 共享内存存在问题(thinkvd开发日志)
- thinkvd 视频效果(Thinkvd开发日志)
- SDL实现overlay方式双屏显示的应用流程分析(thinkvd开发日志)
- SDL实现overlay方式双屏显示的应用流程分析(thinkvd开发日志)
- SDL实现overlay方式双屏显示的应用流程分析(thinkvd开发日志)[转]
- DVD subtitle standard
- thinkvd开发日志(2010.11.09)
- Qt QTabWidget的BUG(thinkvd开发日志)
- 音视频同步问题(thinkvd开发日志)
- thinkvd将支持rmvb转换 (开发日志)
- mingw下编译mplayer (thinkvd开发日志)
- [摘录]网络通信中的心跳机制的实现
- .net-c# 获取机器码
- 群发带附件的VBA程序
- 数字金额转为大写金额(C#)
- 局域网其他电脑访问本机iis网站的设置
- DVD subtitle stream in SDL(thinkvd开发日志)
- rtp协议中的时间戳和序列号的差别
- C#中把货币、日期转换成中文大写
- FckEditor V2.6 fckconfig.js中文注释
- rtcp 补包的初步调研
- 第一次
- 学技术需要按部就班,不能着急!
- ubuntu下 声音小的 两种解决办法
- 11月的天空