Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 変更履歴
- 2019/02/03 投稿。
- 2019/02/03 内容2はreadmeの記述の間違いであってソースは問題なさそうという点を追記。
- 2019/02/23 2019/02/17に内容をまとめなおしてメールで報告したのでその内容に更新。
- ---------
- 「MPEG-2 VIDEO VFAPI Plug-In」 v0.7.12の色変換行列について気が付いた点の報告
- ■概要
- 内容1.BT.709のパラメータが古いままになっているようです。
- 内容2.readme.ja.txtに記載されている「YUV -> RGB 変換式」に、
- 以下2点の間違いがあるようです。(ソースの方はおそらく問題なし)
- 2-1.伸張時のBの計算式だけ、Yの係数が76309ではなく76308になってしまっている。
- 2-2.FCCの計算式が、伸張・ストレートともに間違っている。
- ---------------------------------------------------------------
- ■内容1.BT.709のパラメータが古いままになっているようです。
- ---------------------------------------------------------------
- ●BT.709の変換係数定義は、BT.709-1(1993/11版)と、
- BT.709-2(1995/10版)以降とでは値が異なります。
- 〇BT.709-1 (旧パラメータ)
- Y = 0.2125 * R + 0.7154 * G + 0.0721 * B
- ○BT.709-2~ (新パラメータ)
- Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
- ●readme.ja.txtの【謝辞】には「ITU-R BT.709-5」も挙げられているようです。
- ●H.262は、readme.ja.txtにあるH.262(2000/02版)までは旧パラメータを採用していましたが、
- H.262 (2000) Amendment 2 (2007/01)
- H.262 (2000) Amendment 4 (2012/02)
- において、新パラメータへの置き換えがなされています。
- 最新のH.262(2012/02版)でもそうなっているはずですが、そちらは有料なので未確認です。
- ●readme.ja.txtにあるARIB STD-B32 v1.2(平成14年1月24日)は確認できませんでした。
- (日付を考えるとBT.709は新パラメータになっているが、H.262は旧パラメータのままなので
- おそらく旧パラメータが記載されていたと推測。)
- なお、手元にあったARIB STD-B32 v3.7(平成28年7月6日)では
- BT.709-5準拠ということで、新パラメータが記載されているようです。
- ●「MPEG-2 VIDEO VFAPI Plug-In」 v0.7.12 のreadme.ja.txtの変換式や
- sequence_header.cを見ると、採用しているのは旧パラメータのようです。
- 旧パラメータのYCbCr->RGB変換式
- R = Y + 1.575 * V
- G = Y - 0.187033 * U - 0.467833 * V
- B = Y + 1.8558 * U
- ↓
- 「MPEG-2 VIDEO VFAPI Plug-In」v0.7.12での採用式 (readme.ja.txtより)
- matrix_coefficient=1 - ITU-R BT.709(伸張)
- R = (76309 * (Y-16) + 117504 * (V-128)) / 65536
- G = (76309 * (Y-16) - 13954 * (U-128) - 34903 * (V-128)) / 65536
- B = (76308 * (Y-16) + 138453 * (U-128) ) / 65536
- matrix_coefficient=1 - ITU-R BT.709(ストレート)
- R = (65536 * Y + 103219 * (V-128)) / 65536
- G = (65536 * Y - 12257 * (U-128) - 30659 * (V-128)) / 65536
- B = (65536 * Y + 121621 * (U-128) ) / 65536
- ●新パラメータに変える場合は、以下のような感じになると思われます。
- (丸め方などに違いがあるかもしれませんので検算願います)
- 新パラメータのYCbCr->RGB変換式
- R = Y + 1.5748 * V
- G = Y - 0.187324 * U - 0.468124 * V
- B = Y + 1.8556 * U
- ↓
- matrix_coefficient=1 - ITU-R BT.709(伸張)
- R = (76309 * (Y-16) + 117489 * (V-128)) / 65536
- G = (76309 * (Y-16) - 13975 * (U-128) - 34925 * (V-128)) / 65536
- B = (76309 * (Y-16) + 138438 * (U-128) ) / 65536
- matrix_coefficient=1 - ITU-R BT.709(ストレート)
- R = (65536 * Y + 103206 * (V-128)) / 65536
- G = (65536 * Y - 12276 * (U-128) - 30678 * (V-128)) / 65536
- B = (65536 * Y + 121608 * (U-128) ) / 65536
- ●BT.709を新パラメータに変える場合、「BT.709 to BT.601」など他マトリクスとの
- 相互変換係数(sequence_header.cのYUY2_CONVERSION_PARAMETER table[])にも
- 影響が出ると思われます。
- ---------------------------------------------------------------
- ■内容2.readme.ja.txtに記載されている「YUV -> RGB 変換式」に、
- 2点間違いがあるようです。(ソースの方はおそらく問題なし)
- ---------------------------------------------------------------
- ●2-1.伸張時のBの計算式だけ、Yの係数が76309ではなく76308になってしまっている。
- 〇例:
- MPEG-1 の場合(伸張)
- R = (76309 * (Y-16) + 104597 * (V-128)) / 65536
- G = (76309 * (Y-16) - 25675 * (U-128) - 53279 * (V-128)) / 65536
- B = (76308 * (Y-16) + 132201 * (U-128) ) / 65536
- ●2-2.FCCの計算式の記述が、伸張・ストレートともに間違っている。
- 〇ほぼBT.601のままの記述となっている。(一部のみ書き換え)
- 〇sequence_header.cには正しい値が格納されている模様。
- 〇sequence_header.cの内容を考慮すると、正しくは以下のようになるかと思います。
- matrix_coefficient=4 - FCC(伸張)
- R = (76309 * (Y-16) + 104448 * (V-128)) / 65536
- G = (76309 * (Y-16) - 24759 * (U-128) - 53109 * (V-128)) / 65536
- B = (76309 * (Y-16) + 132798 * (U-128) ) / 65536
- matrix_coefficient=4 - FCC(ストレート)
- R = (65536 * Y + 91750 * (V-128)) / 65536
- G = (65536 * Y - 21749 * (U-128) - 46652 * (V-128)) / 65536
- B = (65536 * Y + 116654 * (U-128) ) / 65536
- ●2-1、2-2を修正した場合の「YUV -> RGB 変換式」の全体を以下に貼っておきます。
- BT.709については旧パラメータのままとしておりますので、
- もし新パラメータに変える場合は、そちらに張り替えてください。
- ---
- ・YUV -> RGB 変換式
- 以下の変換式を使用してます。おかしな点があったら指摘してください。
- MPEG-1 の場合(伸張)
- R = (76309 * (Y-16) + 104597 * (V-128)) / 65536
- G = (76309 * (Y-16) - 25675 * (U-128) - 53279 * (V-128)) / 65536
- B = (76309 * (Y-16) + 132201 * (U-128) ) / 65536
- MPEG-1 の場合(ストレート)
- R = (65536 * Y + 91881 * (V-128)) / 65536
- G = (65536 * Y - 22553 * (U-128) - 46801 * (V-128)) / 65536
- B = (65536 * Y + 116129 * (U-128) ) / 65536
- MPEG-2 sequence_display_extension ありの場合
- matrix_coefficient=1 - ITU-R BT.709(伸張)
- R = (76309 * (Y-16) + 117504 * (V-128)) / 65536
- G = (76309 * (Y-16) - 13954 * (U-128) - 34903 * (V-128)) / 65536
- B = (76309 * (Y-16) + 138453 * (U-128) ) / 65536
- matrix_coefficient=1 - ITU-R BT.709(ストレート)
- R = (65536 * Y + 103219 * (V-128)) / 65536
- G = (65536 * Y - 12257 * (U-128) - 30659 * (V-128)) / 65536
- B = (65536 * Y + 121621 * (U-128) ) / 65536
- matrix_coefficient=4 - FCC(伸張)
- R = (76309 * (Y-16) + 104448 * (V-128)) / 65536
- G = (76309 * (Y-16) - 24759 * (U-128) - 53109 * (V-128)) / 65536
- B = (76309 * (Y-16) + 132798 * (U-128) ) / 65536
- matrix_coefficient=4 - FCC(ストレート)
- R = (65536 * Y + 91750 * (V-128)) / 65536
- G = (65536 * Y - 21749 * (U-128) - 46652 * (V-128)) / 65536
- B = (65536 * Y + 116654 * (U-128) ) / 65536
- matrix_coefficient=5 ITU-R Rec. 470-2 System B, G
- MPEG-1 の場合と同じ
- matrix_coefficient=6 SMPTE 170M
- MPEG-1 の場合と同じ
- matrix_coefficient=7 - SMPTE 240M(伸張)
- R = (76309 * (Y-16) + 117579 * (V-128)) / 65536
- G = (76309 * (Y-16) - 16907 * (U-128) - 35559 * (V-128)) / 65536
- B = (76309 * (Y-16) + 136230 * (U-128) ) / 65536
- matrix_coefficient=7 - SMPTE 240M(ストレート)
- R = (65536 * Y + 103284 * (V-128)) / 65536
- G = (65536 * Y - 14851 * (U-128) - 31235 * (V-128)) / 65536
- B = (65536 * Y + 119668 * (U-128) ) / 65536
- ---
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement