头像
xiao7
帖子: 138
注册时间: 2010-09-25 16:16

最新的ffdshow能解码10bit源了?

貌似是支持了 能不能硬解呢 自己开了一下DXVA 结果花屏 不知道是不是源(high10@5.0 ref16 )的问题
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

这种ref和level,用DXVA解码花屏几乎是肯定的了吧

没10bit源,也没支持10bit-depth的显示器,故没法测试╮(╯_╰)╭

不过x86版ffdshow的libavcodec应该是支持解码了吧?
头像
xiao7
帖子: 138
注册时间: 2010-09-25 16:16

Re: 最新的ffdshow能解码10bit源了?

源可以造一个出来 显示器就没辙, 用8bit的显示器播放会怎么样呢?
头像
dgwxx
管理猿
帖子: 771
注册时间: 2010-09-19 20:42
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

现有DXVA肯定不能硬解的吧。
要想直接看原生10bit,除了解码器播放器渲染器支持以外,还需要操作系统支持(Win7)、驱动支持、显卡支持、Dual-Link DVI或者DisplayPort或者HDMI1.3+连接,最后才是显示器支持10bit信号输入。显示器不光面板要支持10bit,还要内部的处理系统支持10bit以上的精度(10bit面板一般使用14bit精度的电路)……很贵的-v-
日常推 @dgwxx: 基本没什么技术的话题,欢迎没事看看消遣。
► 显示剧情透露 平庸的rip
► 显示剧情透露 “不知道”的五大理由
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

xiao7 写了:源可以造一个出来 显示器就没辙, 用8bit的显示器播放会怎么样呢?
话说造源是单纯用支持10bit的x264压一遍么?
如果是的话
上:8bit
下:10bit
显示器为普通的LCD(8bit)
图片
图片
把10亿多色变成1677万多色,就是下面那个样子的原因了吧?(更何况我压根也不知道这个流程是怎么转换对应的)
头像
xiao7
帖子: 138
注册时间: 2010-09-25 16:16

Re: 最新的ffdshow能解码10bit源了?

不能直接创建一个视频 然后以10bit输出么


目前看来还需要好久才能普及啊T-T
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

xiao7 写了:不能直接创建一个视频 然后以10bit输出么

目前看来还需要好久才能普及啊T-T
没非编……
头像
SAPikachu
帖子: 192
注册时间: 2011-02-28 19:55
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

upyzl 写了: 话说造源是单纯用支持10bit的x264压一遍么?
如果是的话
上:8bit
下:10bit
显示器为普通的LCD(8bit)
图片
图片
把10亿多色变成1677万多色,就是下面那个样子的原因了吧?(更何况我压根也不知道这个流程是怎么转换对应的)
这样明显是转换错误了吧。。。正确的话粗看是看不出大区别的
T: @SAPikachu
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

弱弱求个10bit源

如前所述,没法造10bit源
头像
SAPikachu
帖子: 192
注册时间: 2011-02-28 19:55
联系: 网站

Re: 最新的ffdshow能解码10bit源了?

高bitdepth源造起来比较麻烦,我知道的方法是通过GradFun3(http://forum.doom9.org/showthread.php?p ... ost1386559),添加两个函数:

代码: 全选


function output_16bit_interleaved(clip c)
{
c
Interleave (Dither_get_lsb (), Dither_get_msb ())
TurnRight ()
AssumeFieldBased ().AssumeTFF ()
Weave ()
TurnLeft ()
}

Function GradFun3_nodither (clip src, float "thr", int "radius", float "elast",
\   int "mask", int "mode", float "ampo", float "ampn", int "pat",
\   bool "dyn", float "dthr", int "smode", float "wmin", float "thr_det",
\   float "thr_edg", int "debug", int "subspl")
{
   thr     = Default (thr,      0.35)
   radius  = Default (radius,     12)
   elast   = Default (elast,     3.0)
   mask    = Default (mask, radius/4)
   smode   = Default (smode,       0)
   wmin    = Default (wmin,      1.0)
   thr_det = Default (thr_det,     2)
   thr_edg = Default (thr_edg,    32)
   debug   = Default (debug,       0)
   subspl  = Default (subspl,      0)

   Assert (thr > 0, "GradFun3: "+chr(34)+"thr"+chr(34)+" must be strictly positive.")

   elast = Dither_max (elast, 1)

   w = src.Width ()
   h = src.Height ()

   src.Dither_convert_8_to_16 ()
   inp = last

   # Main debanding

     (smode == 1) ? Dither_gf3_dfttest (src, radius, thr, elast)
\   : (smode == 2) ? Dither_gf3_bilateral_multistage (radius, thr, elast, wmin, subspl)
\   :                Dither_gf3_smoothgrad_multistage (radius, thr, elast)
   flt = last

   # Edge mask

   edge_mask = src.mt_edge (mode="prewitt", thY1=0, thY2=255)
   detl_mask = src.mt_edge (mode="min/max", thY1=0, thY2=255)

   # Edges
   e_edg = Dither_make_expr_gate (thr_edg * 0.75, thr_edg)
   m_edg = edge_mask.mt_lut (expr=e_edg)
   m_edg = m_edg.RemoveGrain (21, -1)
   m_edg = m_edg.mt_expand_multi (sw=mask-1, sh=mask-1, mode="ellipse")

   # Details
   m_det_rad = Round (sqrt (mask))
   thr_det_lo = Dither_max (thr_det * 0.75, 1)
   thr_det_hi = Dither_max (thr_det,        1)
   e_det = Dither_make_expr_gate (thr_det_lo, thr_det_hi)
   m_det = detl_mask.mt_lut (expr=e_det)
   m_det = m_det.RemoveGrain (21, -1)
   m_det = m_det.mt_expand_multi (sw=m_det_rad-1, sh=m_det_rad-1, mode="ellipse")

   # Final mask
   edge_mask = mt_logic (m_edg, m_det, mode="max")
   edge_mask = edge_mask.RemoveGrain (19, -1)
   edge_mask = edge_mask.RemoveGrain (19, -1)
   masked = Dither_merge16_8 (flt, inp, edge_mask, luma=true)

   (mask > 0) ? masked : flt

}

(7.22修正脚本,感谢草巨巨( @264768502 )指出~
(7.22下午再次修正,之前没验证代码,关键字打错了(死

然后如果不需要deband的话,Dither_convert_8_to_16().output_16bit_interleaved(),需要deband的话,GradFun3_nodither().output_16bit_interleaved(),弄出来的数据就是16bit精度了,然后x264的命令行这样写:

代码: 全选

avs2yuv -raw XXXX-16bit.avs -o - | x264-1995-10.exe - --demuxer raw --input-depth 16 --input-res 704x480 --fps 23.976 --preset ultrafast --qp 0 -o XXXX_10.mkv

x264就能吃下去了。

(声明下我个人没测试过。。。是看 http://forum.doom9.org/showthread.php?p ... ost1507639 学回来的。
上次由 SAPikachu 在 2011-07-22 15:02,总共编辑 2 次。
T: @SAPikachu

回到 “解码 播放 字幕 / Decoder playback and subtitles”