Make VLC player support polarized 3D.让VLC播放器支持偏振3D效果。

七步设计高频变压器 阅读详情

This is the initial patch for VLC player's polarized 3D support.

将这个patch应用到VLC播放器的源代码中,会多出一个--anaglyph-scheme polarized的3d模式,全屏幕播放视频时,可以支持偏振3D效果。

# use "./vlc  --anaglyph-scheme polarized" to start vlc then watch SBS 3d in fullscreen
# brought to you by Joyer(collger AT gmail.com)
diff --git a/modules/video_filter/anaglyph.c b/modules/video_filter/anaglyph.c
index 5e103d4..6968cda 100644
--- a/modules/video_filter/anaglyph.c
+++ b/modules/video_filter/anaglyph.c
@@ -24,7 +24,7 @@
 #ifdef HAVE_CONFIG_H
 #   include "config.h"
 #endif
-
+#include <math.h>
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 
@@ -35,6 +35,7 @@ static int Create(vlc_object_t *);
 static void Destroy(vlc_object_t *);
 static picture_t *Filter(filter_t *, picture_t *);
 static void combine_side_by_side_yuv420(picture_t *, picture_t *, int, int);
+static void combine_side_by_side_yuv420_polarized(picture_t *, picture_t *);
 
 #define SCHEME_TEXT N_("Color scheme")
 #define SCHEME_LONGTEXT N_("Define the glasses' color scheme")
@@ -51,6 +52,7 @@ enum scheme_e
     red_cyan,
     trioscopic,
     magenta_cyan,
+    polarized
 };
 
 static const char *const ppsz_scheme_values[] = {
@@ -59,6 +61,7 @@ static const char *const ppsz_scheme_values[] = {
     "red-cyan",
     "trioscopic",
     "magenta-cyan",
+    "polarized"
     };
 static const char *const ppsz_scheme_descriptions[] = {
     "pure red (left)  pure green (right)",
@@ -66,6 +69,7 @@ static const char *const ppsz_scheme_descriptions[] = {
     "pure red (left)  pure cyan (right)",
     "pure green (left)  pure magenta (right)",
     "magenta (left)  cyan (right)",
+    "polarized lcd"
     };
 
 vlc_module_begin()
@@ -85,7 +89,7 @@ static const char *const ppsz_filter_options[] = {
 
 struct filter_sys_t
 {
-    int left, right;
+    int left, right, polarized;
 };
 
 
@@ -116,6 +120,7 @@ static int Create(vlc_object_t *p_this)
 
     char *psz_scheme = var_CreateGetStringCommand(p_filter,
                                                   FILTER_PREFIX "scheme");
+	p_sys->polarized = 0;
     enum scheme_e scheme = red_cyan;
     if (psz_scheme)
     {
@@ -129,6 +134,8 @@ static int Create(vlc_object_t *p_this)
             scheme = trioscopic;
         else if (!strcmp(psz_scheme, "magenta-cyan"))
             scheme = magenta_cyan;
+        else if (!strcmp(psz_scheme, "polarized"))
+            scheme = polarized;
         else
             msg_Err(p_filter, "Unknown anaglyph color scheme '%s'", psz_scheme);
     }
@@ -156,6 +163,9 @@ static int Create(vlc_object_t *p_this)
             p_sys->left = 0xff00ff;
             p_sys->right = 0x00ffff;
             break;
+	    case polarized:
+			p_sys->polarized = 1;
+			break;
         case unknown:
             msg_Err(p_filter, "Oops");
             break;
@@ -191,8 +201,12 @@ static picture_t *Filter(filter_t *p_filter, picture_t *p_pic)
         case VLC_CODEC_I420:
         case VLC_CODEC_J420:
         case VLC_CODEC_YV12:
-            combine_side_by_side_yuv420(p_pic, p_outpic,
-                                        p_sys->left, p_sys->right);
+			if (p_sys->polarized) {
+				combine_side_by_side_yuv420_polarized(p_pic, p_outpic);
+			} else {
+				combine_side_by_side_yuv420(p_pic, p_outpic,
+											p_sys->left, p_sys->right);
+			}
             break;
 
         default:
@@ -205,6 +219,68 @@ static picture_t *Filter(filter_t *p_filter, picture_t *p_pic)
     return CopyInfoAndRelease(p_outpic, p_pic);
 }
 
+static int blend(int c1, int c2) {
+	return (int)sqrt((c1*c1 + c2*c2)/2);
+}
+
+static void combine_side_by_side_yuv420_polarized(picture_t *p_inpic,
+												  picture_t *p_outpic)
+{
+    uint8_t *y1inl = p_inpic->p[Y_PLANE].p_pixels; /*input line left*/
+    uint8_t *uinl = p_inpic->p[U_PLANE].p_pixels;
+    uint8_t *vinl = p_inpic->p[V_PLANE].p_pixels;
+
+    uint8_t *y1out = p_outpic->p[Y_PLANE].p_pixels;
+    uint8_t *uout = p_outpic->p[U_PLANE].p_pixels;
+    uint8_t *vout = p_outpic->p[V_PLANE].p_pixels;
+
+    const int in_pitch = p_inpic->p[Y_PLANE].i_pitch;
+    const int out_pitch = p_outpic->p[Y_PLANE].i_pitch;
+
+    const int visible_pitch = p_inpic->p[Y_PLANE].i_visible_pitch;
+    const int visible_lines = p_inpic->p[Y_PLANE].i_visible_lines;
+    /*const int uv_visible_pitch = p_inpic->p[U_PLANE].i_visible_pitch;*/
+
+	int cnt,col;
+	int uinc = p_inpic->p[U_PLANE].i_pitch;
+	int vinc = p_inpic->p[V_PLANE].i_pitch;
+	int uoutc = p_outpic->p[U_PLANE].i_pitch;
+	int voutc = p_outpic->p[V_PLANE].i_pitch;
+	for (cnt=0;cnt<visible_lines / 2;cnt++) {
+		for(col=0; col<visible_pitch;col++) {
+			int halfw = visible_pitch / 2;
+			int left_idx = col/2;
+			int right_idx = left_idx + halfw;
+			y1out[col] = blend(y1inl[left_idx], y1inl[left_idx + in_pitch]);
+			y1out[col + out_pitch] = blend(y1inl[right_idx], y1inl[right_idx + in_pitch]);
+		}
+		y1inl += in_pitch * 2;
+		y1out += out_pitch * 2;
+	}
+
+	for (cnt=0;cnt<p_inpic->p[U_PLANE].i_visible_lines / 2;cnt++) {
+		for(col=0; col<uinc;col++) {
+			int halfw = uinc / 2;
+			int left_idx = col/2;
+			int right_idx = left_idx + halfw;
+			uout[col] = blend(uinl[left_idx], uinl[left_idx + uinc]);
+			uout[col + uoutc] = blend(uinl[right_idx], uinl[right_idx + uinc]);
+		}
+
+		for(col=0; col<vinc;col++) {
+			int halfw = vinc / 2;
+			int left_idx = col/2;
+			int right_idx = left_idx + halfw;
+			vout[col] = blend(vinl[left_idx], vinl[left_idx + vinc]);
+			vout[col + voutc] = blend(vinl[right_idx], vinl[right_idx + vinc]);
+		}
+
+		uinl += uinc * 2;
+		vinl += vinc * 2;
+		uout += uinc * 2;
+		vout += vinc * 2;
+	}
+}
 
 static void combine_side_by_side_yuv420(picture_t *p_inpic, picture_t *p_outpic,
                                         int left, int right)


【3D Slicer】阈值法测量肺部病灶体积 利用3D Slicer测量肺容积 阅读详情

相关推荐

双摄像头的实时视频拼接及目标跟踪(一)

本章主要讲图像拼接算法的研究 先膜拜一下知乎大佬全面的叙述:https://www.zhihu.com/question/34535199/answer/135169187 本文图像拼接是基于opencv的图像拼接,流程分为以下几步 ...

Y.W.jian的博客 3万+

让VLC播放器支持SDS 3D视频转换成interlaced 3D视频(红蓝3D)

插件 VLC HSBS to interlaced 3D plugin 经过测试不能使用,2013年作者就弃坑了。 幸运的是,VLC自带此功能。 VLC, since version 2.1.0, is capable of playing 3D side-by-side (SBS) videos using anaglyph technology, viewable with typical paper red-cyan 3D glasses. To enable this filter, go t

FUN 7848

Buck-Boost电路实战:如何用LM2596模块快速搭建升降压电源(附元件选型指南)

本文详细介绍了如何使用LM2596模块快速搭建Buck-Boost升降压电路,包括硬件选型、电路搭建、示波器实测和进阶技巧。通过实测数据和避坑指南,帮助电子工程师解决电压不稳定、效率低下等常见问题,提升DC-DC变换器的设计水平。

weixin_30485379的博客 111

基于vlc的unity3d vr视频播放器开发,简述

基于vlc的unity3d vr视频播放器开发,简述

烟囱囱 1万+

第14.10章 高翔博士最新开源框架Lightning-LM源码解读(十):在线定位run_loc_online涉及到的核心模块总结

本文对Lightning-LM激光SLAM定位框架进行了全面剖析。该框架是一个轻量高效的激光雷达建图与定位系统,支持3D SLAM、动态图层管理等功能。文章首先介绍了项目概况和源码结构,包括核心模块如定位系统(loc_system)、激光匹配(lidar_loc)和位姿图优化(pose_graph)等。接着详细解析了各模块的关键函数和运行流程,如数据接收处理、NDT匹配和位姿优化等。最后总结了学习该框架所需的C++知识要点,包括智能指针、多线程编程等现代C++特性。该分析为SLAM开发者提供了实用的架构参考

行知SLAM 801

13. MIC配置

恒玄BES2700,支持3个MIC。

雪飞_海 927

基于vlc的unity3d vr视频播放器开发,360度全景视频

最早开始是有全景图片,比较早的应用场景在照片拍摄,地图展示上。数据采集需要一台全景摄像机,放到汽车的顶部。开动汽车,慢速驾驶,就可以采集周边建筑的全景图片。数据的成本相对3d建模会低很多。广泛用在gis导航,实地查看等情景上。 来到了vr时代, 通过全景摄像机拍摄360度视频,制作为短片或者视频。在头盔里面播放,用户会拥有完全的沉浸影片的感觉。要在unit3d中实现,思路是:1、新建模型球,

烟囱囱 9707

学Simulink——线控转向(Steer‑By‑Wire, SBW)路感模拟与回正控制仿真

本文详细介绍了线控转向(SBW)系统的Simulink建模方法,重点讲解了路感模拟与回正控制的实现原理。文章首先分析了SBW系统结构,建立了方向盘和前轮的动力学方程;随后分步骤演示了Simulink建模过程,包括方向盘二阶动力学、前轮位置闭环控制、路感反馈计算等核心模块;最后通过仿真验证了转向跟随性能、路感反馈效果和自动回正功能。文中还提供了工程实现的关键参数和注意事项,为开发真实的SBW系统提供了实用指导。该模型可扩展应用于主动转向、故障注入等高级功能开发。

xiaoheshang_123的博客 39

最强偏振3D播放器TriDef 3D安装+全格式播放配置

最强偏振3D播放器TriDef 3D安装+全格式播放配置(图文详细指南) 如果你和我一样,现在已经使用上了偏振3D的显示器,如:LG D2341P 23寸、AOC e2352Pz 23寸等。那么请你注意,无论是Stereoscopic Player还是CyberLink PowerDVD 11  3D播放器,你都会遇到不能很好使用的问题。Stereoscopic Player暂无法正常用偏振

痞子龙3D编程 2万+

飞牛fnNAS免费内网穿透之zerotier篇

本文介绍了如何通过ZeroTier实现飞牛NAS的远程文件共享。首先,用户需要在ZeroTier官网注册账号并创建虚拟局域网。接着,分别在Windows和飞牛NAS上安装ZeroTier客户端,并通过SSH登录飞牛NAS进行配置。安装完成后,用户可以在ZeroTier页面中授权设备加入虚拟局域网。最后,通过Windows的“网上邻居”功能访问飞牛NAS的共享文件夹,实现跨局域网的文件共享。这种方法不仅适用于文件共享,还可以用于打印机共享和远程桌面连接。

dgnankai的专栏 2466

uniapp - [全端兼容] 实现精美Editor富文本编辑器功能,uniApp全平台兼容的富文本插件组件用户可上传图片及对接服务器存储文件等,手机移动端H5网页富文本/小程序富文本/App富文本!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp富文本编辑器,uniapp中如何实现各平台都兼容的富文本编辑器,Editor富文本插件,uniApp微信小程序富文本,UNI-APP安卓苹果ios系统App端富文本组件,editor富文本编辑器如何实现上传图片,图片上传后不显示怎么办,如何配置图像上传功能,富文本图片上传怎么传到服务器中,获取图片路径,editor插入图片,富文本编辑器上传图片,报错怎么办,跨域CORS处理,配置不行无效

🏆 前端领域优质创作者 1万+

VLC播放器使用技巧

VLC播放器使用技巧

weixin_44357071的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VLC for Android 360度视频和3D音频:沉浸式体验完全指南

VLC for Android 是一款功能强大的媒体播放器,不仅支持几乎所有常见的音视频格式,还提供了对360度视频和3D音频的出色支持,让你在移动设备上也能享受沉浸式的媒体体验。本文将详细介绍如何在VLC for Android中开启和优化360度视频与3D音频播放,帮助你轻松打造私人沉浸式影院。 ## 为什么选择VLC for Android观看360度视频? VLC for Androi

gitblog_00785的博客 593

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VLC可用的模块列表!

visual                 可视化过滤器   projectm               libprojectM 特效   goom                   Goom 效果   glspectrum             3D OpenGL spectrum visualization   wall                   显示墙滤镜   p

面朝阳光,心向大海 的专栏 4327

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

最强偏振 3D 播放器

TriDef3D是一款3D转换播放器,可将2D影片、游戏和图片转换为立体3D效果,兼容多种3D显示设备(快门、偏光等)。它支持主流3D格式和DirectX 9/10/11游戏,适配AMD/NVIDIA显卡,但不支持VR设备。该软件预装在部分电脑中,支持37种语言。

u014771868的博客 946

VLC详细的使用说明以及配置…

原文地址:VLC详细的使用说明以及配置说明综合示范实例精通VLC开发作者:向前冲vlc的全名是Video Lan Client,是一个开源的、跨平台的视频播放器。VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里获得http://www.videolan.org/vlc/features.html,下面给出一个简要的不完整的列表: 操作系统:Windows、WinCE、Li

shixifengkuang的专栏 2万+

[乐意黎原创] 左右格式的3D电影怎么播放

播放左右分屏显示的影片时,此时影片是属于3D格式,用播放器QQ影音打来影片, 然后按ALT+D ,再选择3D模式.

打杂人-aerchi 3万+

立体感的3D图像(包含左右眼)生成Red-Cyan分析图

现在在作3D的东西,得到左右两个视角的图,但不知道怎么来判断效果,不知道哪个结果更好,怎么办?现在整理了些方法,备份在此,供大家分享和讨论。 1.Red-Cyan anaglyph       没有眼镜也没有关系,看视觉的一致性,视觉不一致,会带来retinal rivalry,我是这么理解的吧,如果object A在左视角出现,不在右视角出现,或者虽然都出现,但是二者形状改变等,左右眼融合得

vine_branches的专栏 7405

不用去电影院 3D电影格式/播放全攻略

在立体3D应用中,3D电影是目前最为主流、普及程度最高的娱乐方式。立体3D做为一种正在发展中的技术,尚未统一的标准常常使得用户感到迷惑,究竟哪种格式更好?对设备的要求是什么?本文将针对3D电影的格式、设备要求等方面进行一次全面说明,解开种种疑惑。 立体3D是利用人们两眼视觉

jgdu1981的专栏 1万+

VLC Media Player 初始设置推荐

偏好设置 打开视频时窗口经常跑到屏幕外边了,将“缩放至视频界面大小”去掉就可以保持上一次的窗口大小 如果不喜欢每次播放视频都在屏幕上显示挡视角的文件名,就可以去掉该选项 自定义界面 尝试拖动扩展占位符使得下面的按钮居中 效果如下 ...

Doge的技术小屋 8852

python direct_如何在python中将vlc(direct3D输出)改为普通vlc帧

下面的代码可以完美地从目录中播放播放列表。但是,当我运行代码vlc(direct3D输出)时,弹出的不是普通的vlc播放器。我需要一个vlc播放器帧来控制视频。此外,此代码播放视频,当它传递到第二个视频时,vlc(direct3D输出)帧关闭并打开。不过,我需要看到视频在一个vlc播放器帧一个接一个。我怎样才能解决我的问题?子进程打开正常的vlc帧,但我不知道如何对代码实现子进程。import d...

weixin_42552261的博客 457

Daydream播放3D视频(视频左右分屏3D效果)

需求分析:          因为VR项目需求,要实现3D视频的播放,即左右分屏视频播放。如下图所示类型视频。 使用GoogleVRForUnity插件实现VR功能效果。项目刚开始使用的是0.8的老版本插件,可以轻松实现3D视频的播放,但升级GoogleVRForUnity插件到1.10接入Daydream后,发现3D视频播放3D效果没有了。   解决方案: 一、未接入Daydr

Flyer 2万+

VLC-3.0全部详细参数

用法: vlc [选项] [流] ...您可以在命令行中指定多个流。它们将被加入播放列表队列。指定的首个项目将被首先播放。选项风格:  --选项  用于设置程序执行期间的全局选项。   -选项  单字母版本的全局 --选项。   :选项  仅对此选项之前的单条流生效,            且优先级高于先前的设置。流媒体 MRL 语法:  [[协议][/分流]://]URL[#[标题][:章节][...

单眼皮的老虎的专栏 1万+

apt-get依赖库版本过高问题的解决(如何处理libqt4-dev在ubuntu的安装问题)

结果今天装libqt4-dev时遇到的问题,用apt-get降级的方式来解决。

Joyer的日志 4万+

丢掉python -m SimpleHTTPServer,一行命令用http分享目录(单行web服务器)

好久没更新博客,还是要备忘一些实用工作技巧:

Joyer的日志 2万+

今天和emacs的ido-mode较劲了

 emacs无疑是最强大的编辑器,最近她又升级到23.2了,内置了强大的cedet。没有不升级一下的道理。 升级后主要是把.emacs中关于cedet加载的配置关掉即可。但是我日常使用的ido-mode居然出现了问题。 因为在做symbian手机应用开发,所以随大流把所有工程放到了C:/Symbian/Source目录当中,并且用emacs修改,用abld编译。fine,一

Joyer的日志 7147
上一篇: 丢掉python -m SimpleHTTPServer,一行命令用http分享目录(单行web服务器)
下一篇: 到了2018年,还有学习Emacs的必要吗?
JoyerHuang_悦
博客等级 码龄23年 101粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值