CrendKing / avisynth_filter

DirectShow filters that put AviSynth and VapourSynth into video playing
MIT License
107 stars 8 forks source link

0.9.1, 10-bit video doesn't show with EVR #37

Closed chainikdn closed 3 years ago

chainikdn commented 3 years ago

Again, a regression in 0.9, works with 0.8.5

MPC-HC, EVR-CP renderer, any 10-bit video

0.8.5: connects as NV12, plays fine 0.9.1: doesn't connect at all, video isn't processed.

it works only if uncheck both p010 and p016 checkboxes

T 19416 @ 0: Configured script file: T 19416 @ 0: Configured input format NV12: 1 T 19416 @ 0: Configured input format IYUV: 1 T 19416 @ 0: Configured input format P210: 1 T 19416 @ 0: Configured input format YV12: 1 T 19416 @ 0: Configured input format I420: 1 T 19416 @ 0: Configured input format P016: 1 T 19416 @ 0: Configured input format YUY2: 1 T 19416 @ 0: Configured input format P010: 1 T 19416 @ 0: Configured input format P216: 1 T 19416 @ 0: Configured input format YV24: 0 T 19416 @ 0: Configured input format RGB24: 1 T 19416 @ 0: Configured input format RGB32: 1 T 19416 @ 0: Configured output threads: 1 T 19416 @ 1: Loading process: mpc-hc64.exe T 19416 @ 4: AvsHandler() T 19416 @ 4: Filter version: 0.9.1 T 19416 @ 4: AviSynth version: AviSynth+ 3.5 (r3106, 3.5, x86_64) T 19416 @ 4: CAviSynthFilter(): 000001C2C116E530 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P010 output P016 T 19416 @ 4: Add compatible definitions: input P010 output P010 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P010 output P016 T 19416 @ 4: Add compatible definitions: input P010 output P010 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P016 output P016 T 19416 @ 4: Add compatible definitions: input P016 output P010 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P016 output P016 T 19416 @ 4: Add compatible definitions: input P016 output P010 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input NV12 output NV12 T 19416 @ 4: Add compatible definitions: input NV12 output IYUV T 19416 @ 4: Add compatible definitions: input NV12 output YV12 T 19416 @ 4: Add compatible definitions: input NV12 output I420 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input NV12 output NV12 T 19416 @ 4: Add compatible definitions: input NV12 output IYUV T 19416 @ 4: Add compatible definitions: input NV12 output YV12 T 19416 @ 4: Add compatible definitions: input NV12 output I420 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input YV12 output NV12 T 19416 @ 4: Add compatible definitions: input YV12 output IYUV T 19416 @ 4: Add compatible definitions: input YV12 output YV12 T 19416 @ 4: Add compatible definitions: input YV12 output I420 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input YV12 output NV12 T 19416 @ 4: Add compatible definitions: input YV12 output IYUV T 19416 @ 4: Add compatible definitions: input YV12 output YV12 T 19416 @ 4: Add compatible definitions: input YV12 output I420 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P216 output P210 T 19416 @ 4: Add compatible definitions: input P216 output P216 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P216 output P210 T 19416 @ 4: Add compatible definitions: input P216 output P216 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P210 output P210 T 19416 @ 4: Add compatible definitions: input P210 output P216 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input P210 output P210 T 19416 @ 4: Add compatible definitions: input P210 output P216 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input YUY2 output YUY2 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input YUY2 output YUY2 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input RGB32 output RGB32 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input RGB32 output RGB32 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input RGB24 output RGB24 T 19416 @ 4: ReloadAviSynthScript T 19416 @ 4: Add compatible definitions: input RGB24 output RGB24 T 19416 @ 5: CAviSynthFilter(): 000001C2C65F48E0 T 19416 @ 5: Destroy CAviSynthFilter: 000001C2C65F48E0 T 19416 @ 7: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 7: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 7: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 7: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 7: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 7: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 7: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 7: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 8: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 8: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 8: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 8: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 8: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 8: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 8: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 8: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 8: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 8: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 17: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 17: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 17: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 18: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 18: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 18: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 18: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 18: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 18: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output IYUV Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output YV12 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output I420 Offered input: P010 Compatible input: NV12 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P210 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output P216 Offered input: P010 Compatible input: P216 T 19416 @ 18: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 18: Accept transform: output YUY2 Offered input: P010 Compatible input: YUY2 T 19416 @ 18: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 18: Accept transform: output RGB32 Offered input: P010 Compatible input: RGB32 T 19416 @ 18: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 18: Accept transform: output RGB24 Offered input: P010 Compatible input: RGB24 T 19416 @ 153: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P016 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output P010 Offered input: P010 Compatible input: P010 T 19416 @ 153: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 159: Accept transform: output NV12 Offered input: P010 Compatible input: NV12 T 19416 @ 166: Accept transform: output NV12 Offered input: P010 Compatible input: NV12

... and nothing else

CrendKing commented 3 years ago

This is in fact a bug introduced in v0.5.6, but was lucky never surfaced. I recently changed the way how FORMATS are managed and added extra checks, and thus exposing this bug.

Try this AviSynthFilter.zip

chainikdn commented 3 years ago

seems to work

chainikdn commented 3 years ago

broken again, somewhere between 0.9.4 and 0.10

CrendKing commented 3 years ago

Can't reproduce with current. The file you mentioned in https://github.com/CrendKing/avisynth_filter/issues/49 was P010, and I could play it fine. Do you mean the old version was broken (which already got fixed) and ask me to backport the fix?

T  43780 @        0: Filter version: 1.1.0 [Debug] # 4fb4490
T  43780 @        0: Configured script file: 
T  43780 @        0: Configured input format NV12: 1
T  43780 @        0: Configured input format YV12: 1
T  43780 @        1: Configured input format I420: 1
T  43780 @        1: Configured input format IYUV: 1
T  43780 @        1: Configured input format P016: 1
T  43780 @        1: Configured input format P010: 1
T  43780 @        1: Configured input format YUY2: 1
T  43780 @        1: Configured input format P216: 1
T  43780 @        1: Configured input format P210: 1
T  43780 @        3: Configured input format YV24: 1
T  43780 @        3: Configured input format RGB24: 0
T  43780 @        3: Configured input format RGB32: 0
T  43780 @        3: Loading process: mpc-be64.exe
T  43780 @        3: FrameServerCommon()
T  43780 @        5: AviSynth version: AviSynth+ 3.5 (r3106, 3.5, x86_64)
T  43780 @        7: CSynthFilter(): 000001B162257F70
T  43780 @        7: ReloadScript from checking instance
T  43780 @        9: New script clip: 000001B1623374A0
T  43780 @        9: Release script clip: 000001B1623374A0
T  43780 @       11: Add compatible formats: input P010 output P016
T  43780 @       11: Add compatible formats: input P010 output P010
T  43780 @       11: ReloadScript from checking instance
T  43780 @       12: New script clip: 000001B1623335C0
T  43780 @       12: Release script clip: 000001B1623335C0
T  43780 @       14: Add compatible formats: input P016 output P016
T  43780 @       14: Add compatible formats: input P016 output P010
T  43780 @       14: ReloadScript from checking instance
T  43780 @       15: New script clip: 000001B16232F660
T  43780 @       15: Release script clip: 000001B16232F660
T  43780 @       17: Add compatible formats: input NV12 output NV12
T  43780 @       17: Add compatible formats: input NV12 output YV12
T  43780 @       17: Add compatible formats: input NV12 output I420
T  43780 @       17: Add compatible formats: input NV12 output IYUV
T  43780 @       17: ReloadScript from checking instance
T  43780 @       18: New script clip: 000001B16232E820
T  43780 @       18: Release script clip: 000001B16232E820
T  43780 @       20: Add compatible formats: input YV12 output NV12
T  43780 @       20: Add compatible formats: input YV12 output YV12
T  43780 @       20: Add compatible formats: input YV12 output I420
T  43780 @       20: Add compatible formats: input YV12 output IYUV
T  43780 @       20: ReloadScript from checking instance
T  43780 @       21: New script clip: 000001B162337180
T  43780 @       21: Release script clip: 000001B162337180
T  43780 @       23: Add compatible formats: input P216 output P216
T  43780 @       23: Add compatible formats: input P216 output P210
T  43780 @       23: ReloadScript from checking instance
T  43780 @       24: New script clip: 000001B1623334A0
T  43780 @       24: Release script clip: 000001B1623334A0
T  43780 @       26: Add compatible formats: input P210 output P216
T  43780 @       26: Add compatible formats: input P210 output P210
T  43780 @       26: ReloadScript from checking instance
T  43780 @       27: New script clip: 000001B16232F300
T  43780 @       28: Release script clip: 000001B16232F300
T  43780 @       29: Add compatible formats: input YUY2 output YUY2
T  43780 @       30: Reject input format due to settings: RGB32
T  43780 @       30: Reject input format due to settings: RGB32
T  43780 @       30: Reject input format due to settings: RGB24
T  43780 @       30: Reject input format due to settings: RGB24
T  43780 @       30: ReloadScript from checking instance
T  43780 @       31: New script clip: 000001B16232E600
T  43780 @       31: Release script clip: 000001B16232E600
T  43780 @       33: Add compatible formats: input YV24 output YV24
T  43780 @       33: GetMediaType() offer media type 0 with P016
T  43780 @       33: GetMediaType() offer media type 1 with P010
T  43780 @       33: GetMediaType() offer media type 2 with P016
T  43780 @       33: GetMediaType() offer media type 3 with P010
T  43780 @       33: GetMediaType() offer media type 4 with NV12
T  43780 @       33: GetMediaType() offer media type 5 with YV12
T  43780 @       33: GetMediaType() offer media type 6 with I420
T  43780 @       33: GetMediaType() offer media type 7 with IYUV
T  43780 @       33: GetMediaType() offer media type 8 with NV12
T  43780 @       33: GetMediaType() offer media type 9 with YV12
T  43780 @       33: GetMediaType() offer media type 10 with I420
T  43780 @       33: GetMediaType() offer media type 11 with IYUV
T  43780 @       33: GetMediaType() offer media type 12 with P216
T  43780 @       33: GetMediaType() offer media type 13 with P210
T  43780 @       33: GetMediaType() offer media type 14 with P216
T  43780 @       33: GetMediaType() offer media type 15 with P210
T  43780 @       33: GetMediaType() offer media type 16 with YUY2
T  43780 @       33: GetMediaType() offer media type 17 with YV24
T  43780 @       34: GetMediaType() offer media type 0 with P016
T  43780 @       34: GetMediaType() offer media type 1 with P010
T  43780 @       34: GetMediaType() offer media type 2 with P016
T  43780 @       34: GetMediaType() offer media type 3 with P010
T  43780 @       34: GetMediaType() offer media type 4 with NV12
T  43780 @       34: GetMediaType() offer media type 5 with YV12
T  43780 @       34: GetMediaType() offer media type 6 with I420
T  43780 @       34: GetMediaType() offer media type 7 with IYUV
T  43780 @       34: GetMediaType() offer media type 8 with NV12
T  43780 @       34: GetMediaType() offer media type 9 with YV12
T  43780 @       34: GetMediaType() offer media type 10 with I420
T  43780 @       34: GetMediaType() offer media type 11 with IYUV
T  43780 @       34: GetMediaType() offer media type 12 with P216
T  43780 @       34: GetMediaType() offer media type 13 with P210
T  43780 @       34: GetMediaType() offer media type 14 with P216
T  43780 @       34: GetMediaType() offer media type 15 with P210
T  43780 @       34: GetMediaType() offer media type 16 with YUY2
T  43780 @       34: GetMediaType() offer media type 17 with YV24
T  43780 @       35: CSynthFilter(): 000001B1623582A0
T  43780 @       35: Destroy CSynthFilter: 000001B1623582A0
T  43780 @      288: GetMediaType() offer media type 0 with P016
T  43780 @      288: CheckTransform() for P010 -> P016, result: 1
T  43780 @      288: CheckTransform() for P010 -> P016, result: 1
T  43780 @      288: GetMediaType() offer media type 1 with P010
T  43780 @      288: CheckTransform() for P010 -> P010, result: 1
T  43780 @      288: CheckTransform() for P010 -> P010, result: 1
T  43780 @      291: GetMediaType() offer media type 0 with P016
T  43780 @      291: GetMediaType() offer media type 1 with P010
T  43780 @      291: GetMediaType() offer media type 2 with P016
T  43780 @      291: GetMediaType() offer media type 3 with P010
T  43780 @      291: GetMediaType() offer media type 4 with NV12
T  43780 @      291: GetMediaType() offer media type 5 with YV12
T  43780 @      291: GetMediaType() offer media type 6 with I420
T  43780 @      291: GetMediaType() offer media type 7 with IYUV
T  43780 @      291: GetMediaType() offer media type 8 with NV12
T  43780 @      291: GetMediaType() offer media type 9 with YV12
T  43780 @      291: GetMediaType() offer media type 10 with I420
T  43780 @      291: GetMediaType() offer media type 11 with IYUV
T  43780 @      291: GetMediaType() offer media type 12 with P216
T  43780 @      291: GetMediaType() offer media type 13 with P210
T  43780 @      291: GetMediaType() offer media type 14 with P216
T  43780 @      291: GetMediaType() offer media type 15 with P210
T  43780 @      291: GetMediaType() offer media type 16 with YUY2
T  43780 @      291: GetMediaType() offer media type 17 with YV24
T  43780 @      291: Connected with types: in P010 out P010
T  43780 @      291: CheckTransform() for P010 -> P010, result: 1
T  43780 @      303: CheckTransform() for P010 -> P010, result: 1
T  18800 @      410: Filter in graph: LAV Splitter Source
T  18800 @      410: Filter in graph: LAV Video Decoder
T  18800 @      410: Filter in graph: AviSynth Filter [Debug]
T  18800 @      410: Filter in graph: Enhanced Video Renderer (custom presenter)
T  18800 @      410: ReloadScript from main instance
T  53380 @      413: Remote control started processing messages
T  18800 @      414: New script clip: 000001B1653E2900
T  18800 @      414: CheckTransform() for P010 -> P010, result: 1
T   3204 @      414: Start worker thread
T  18800 @      417: CheckTransform() for P010 -> P010, result: 1
T  18800 @      417: CheckTransform() for P010 -> P010, result: 1
T  18800 @      417: CheckTransform() for P010 -> P010, result: 1
T  43816 @      435: ReloadScript from checking instance
T  43816 @      437: New script clip: 000001B1653E9560
T  43816 @      437: Release script clip: 000001B1653E9560
T  43816 @      439: Downstream QueryAccept in CheckTransform(): result 1 input P010
T  43816 @      439: ReloadScript from checking instance
T  43816 @      441: New script clip: 000001B1653E9040
T  43816 @      441: Release script clip: 000001B1653E9040
T  43816 @      443: Downstream QueryAccept in CheckTransform(): result 1 input P010
T  43816 @      444: ReloadScript from checking instance
T  43816 @      445: New script clip: 000001B1653E8F20
T  43816 @      445: Release script clip: 000001B1653E8F20
T  43816 @      447: Downstream QueryAccept in CheckTransform(): result 1 input P010
T  43816 @      447: Upstream proposes to change input format: name P010, width  1024, height   576
T  43816 @      447: FrameHandler start BeginFlush()
T  43816 @      447: FrameHandler finish BeginFlush()
T  43816 @      447: FrameHandler start EndFlush()
T  43816 @      447: ReloadScript from main instance
T  43816 @      447: Release script clip: 000001B1653E2900
T  43816 @      449: New script clip: 000001B162332DC0
T  43816 @      449: FrameHandler finish EndFlush()
T  43816 @      449: ReloadScript from checking instance
T  43816 @      450: New script clip: 000001B1653E27C0
T  43816 @      450: Release script clip: 000001B1653E27C0
T  43816 @      457: CheckTransform() for P010 -> P010, result: 1
T  43816 @      457: CheckTransform() for P010 -> P010, result: 1
T  43816 @      457: CheckTransform() for P010 -> P010, result: 1
T  43816 @      463: CheckTransform() for P010 -> P010, result: 1
T  43816 @      463: CheckTransform() for P010 -> P010, result: 1
T  43816 @      463: Rejecting source sample due to start time going backward: curr          0 last          0
T  43816 @      465: Stored source frame:      0 at     420000 ~     837083 duration(literal)     417083
T  43816 @      466: Stored source frame:      1 at     830000 ~    1247083 duration(literal)     417083
T  43816 @      467: Stored source frame:      2 at    1250000 ~    1667083 duration(literal)     417083
chainikdn commented 3 years ago

Filter in graph: madVR Renderer

10-bit video doesn't show with EVR

hmm...

Do you mean the old version was broken (which already got fixed) and ask me to backport the fix?

I mean the current version is broken again since 0.10

CrendKing commented 3 years ago

10-bit video doesn't show with EVR

hmm...

Fixed the log lines. Didn't think renderer would make any difference.

chainikdn commented 3 years ago

the thing in EVR doesn't want to load with 0.10+ AND 10-bit video, and it loads simple "Video Renderer" instead, which doesn't render 10-bit video at all

T   2496 @      258: CheckTransform() for P010 -> P010, result: 1
T   2496 @      359: CheckTransform() for P010 -> P010, result: 1
T  13356 @      638: Filter in graph: LAV Splitter Source (internal)
T  13356 @      638: Filter in graph: LAV Video Decoder (internal)
T  13356 @      638: Filter in graph: AviSynth Filter
T  13356 @      638: Filter in graph: Video Renderer

0.10 + EVR + 10-bit video --> ??? 0.10 + EVR + 8-bit video --> OK the above build from Feb 11 + EVR + 8/10-bit video --> connects as NV12

T   8836 @      149: Downstream QueryAccept in CheckTransform(): result 1 input NV12
T   8836 @      149: Connected with types: in NV12 out NV12
T  18112 @      312: Filter in graph: LAV Splitter Source (internal)
T  18112 @      312: Filter in graph: LAV Video Decoder (internal)
T  18112 @      312: Filter in graph: AviSynth Filter
T  18112 @      312: Filter in graph: Enhanced Video Renderer (custom presenter)

build from 24.03 - works (as NV12) build from 14.04 - doesn't work

chainikdn commented 3 years ago

MPC-HC, by the way. Working in MPC-BE... but only NV12, not P010.

CrendKing commented 3 years ago

I can see the Video Renderer problem. I'll check the problem. However, it says P010 works, weird:

Clipboard 1

Working in MPC-BE... but only NV12, not P010.

You can see in my log that it works as P010. Maybe post your MPC-BE log for diag?

CrendKing commented 3 years ago

OK, I found out why. https://github.com/CrendKing/avisynth_filter/commit/933813af6b1d3b9580bfd6df8ca759c840423ac8 fixed a problem that generates incorrect media type for pin connection. Here is the log before the fix:

T  22700 @      237: GetMediaType() offer media type 0 with P016
T  22700 @      237: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      238: GetMediaType() offer media type 1 with P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      238: GetMediaType() offer media type 2 with P016
T  22700 @      238: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      238: GetMediaType() offer media type 3 with P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      238: GetMediaType() offer media type 4 with P016
T  22700 @      238: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      238: GetMediaType() offer media type 5 with P010
T  22700 @      238: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      239: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      239: GetMediaType() offer media type 6 with P016
T  22700 @      239: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      239: CheckTransform() for output type: result: 1 output P016 offered input: P010 compatible input: P010
T  22700 @      239: GetMediaType() offer media type 7 with P010
T  22700 @      239: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      239: CheckTransform() for output type: result: 1 output P010 offered input: P010 compatible input: P010
T  22700 @      239: GetMediaType() offer media type 8 with NV12
T  22700 @      239: CheckTransform() for output type: result: 1 output NV12 offered input: P010 compatible input: NV12
T  22700 @      239: CheckTransform() for output type: result: 1 output NV12 offered input: P010 compatible input: NV12
T  22700 @      252: GetMediaType() offer media type 0 with P016
T  22700 @      252: GetMediaType() offer media type 1 with P010
T  22700 @      252: GetMediaType() offer media type 2 with P016
T  22700 @      252: CheckTransform() for output type: result: 1 output NV12 offered input: P010 compatible input: NV12
T  22700 @      254: CheckTransform() for output type: result: 1 output NV12 offered input: P010 compatible input: NV12
T  22700 @      255: Reject input format due to settings: RGB32
T  22700 @      255: Reject input format due to settings: RGB32
T  22700 @      255: Reject input format due to settings: RGB24
T  22700 @      255: Reject input format due to settings: RGB24
T  22700 @      255: ReloadAviSynthScript
T  22700 @      255: Downstream QueryAccept in CheckTransform(): result 1 input NV12
T  22700 @      255: Connected with types: in NV12 out NV12

Here is immediately after the fix:

T  26816 @      232: GetMediaType() offer media type 0 with P016
T  26816 @      232: CheckTransform() for P010 -> P016, result: 1
T  26816 @      233: CheckTransform() for P010 -> P016, result: 1
T  26816 @      233: GetMediaType() offer media type 1 with P010
T  26816 @      233: CheckTransform() for P010 -> P010, result: 1
T  26816 @      233: CheckTransform() for P010 -> P010, result: 1
T  26816 @      233: GetMediaType() offer media type 2 with P016
T  26816 @      233: CheckTransform() for P010 -> P016, result: 1
T  26816 @      233: CheckTransform() for P010 -> P016, result: 1
T  26816 @      233: GetMediaType() offer media type 3 with P010
T  26816 @      233: CheckTransform() for P010 -> P010, result: 1
T  26816 @      233: CheckTransform() for P010 -> P010, result: 1
T  26816 @      233: GetMediaType() offer media type 4 with NV12
T  26816 @      233: CheckTransform() for P010 -> NV12, result: 0
T  26816 @      233: GetMediaType() offer media type 5 with YV12
T  26816 @      233: CheckTransform() for P010 -> YV12, result: 0
T  26816 @      233: GetMediaType() offer media type 6 with I420
T  26816 @      233: CheckTransform() for P010 -> I420, result: 0
T  26816 @      233: GetMediaType() offer media type 7 with IYUV
T  26816 @      233: CheckTransform() for P010 -> IYUV, result: 0
T  26816 @      233: GetMediaType() offer media type 8 with NV12
T  26816 @      233: CheckTransform() for P010 -> NV12, result: 0
T  26816 @      233: GetMediaType() offer media type 9 with YV12
T  26816 @      233: CheckTransform() for P010 -> YV12, result: 0
T  26816 @      233: GetMediaType() offer media type 10 with I420
T  26816 @      234: CheckTransform() for P010 -> I420, result: 0
T  26816 @      234: GetMediaType() offer media type 11 with IYUV
T  26816 @      234: CheckTransform() for P010 -> IYUV, result: 0
T  26816 @      234: GetMediaType() offer media type 12 with P216
T  26816 @      234: CheckTransform() for P010 -> P216, result: 0
T  26816 @      234: GetMediaType() offer media type 13 with P210
T  26816 @      234: CheckTransform() for P010 -> P210, result: 0
T  26816 @      234: GetMediaType() offer media type 14 with P216
T  26816 @      234: CheckTransform() for P010 -> P216, result: 0
T  26816 @      234: GetMediaType() offer media type 15 with P210
T  26816 @      234: CheckTransform() for P010 -> P210, result: 0
T  26816 @      234: GetMediaType() offer media type 16 with YUY2
T  26816 @      234: CheckTransform() for P010 -> YUY2, result: 0
T  26816 @      234: GetMediaType() offer media type 17 with YV24
T  26816 @      234: CheckTransform() for P010 -> YV24, result: 0
T  26816 @      234: GetMediaType() offer media type 0 with P016
T  26816 @      234: CheckTransform() for P010 -> P016, result: 1
T  26816 @      234: CheckTransform() for P010 -> P016, result: 1
T  26816 @      234: GetMediaType() offer media type 1 with P010
T  26816 @      234: CheckTransform() for P010 -> P010, result: 1
T  26816 @      234: CheckTransform() for P010 -> P010, result: 1
T  26816 @      234: GetMediaType() offer media type 2 with P016
T  26816 @      234: CheckTransform() for P010 -> P016, result: 1
T  26816 @      235: CheckTransform() for P010 -> P016, result: 1
T  26816 @      235: GetMediaType() offer media type 3 with P010
T  26816 @      235: CheckTransform() for P010 -> P010, result: 1
T  26816 @      235: CheckTransform() for P010 -> P010, result: 1
T  26816 @      235: GetMediaType() offer media type 4 with NV12
T  26816 @      235: CheckTransform() for P010 -> NV12, result: 0
T  26816 @      235: GetMediaType() offer media type 5 with YV12
T  26816 @      235: CheckTransform() for P010 -> YV12, result: 0
T  26816 @      235: GetMediaType() offer media type 6 with I420
T  26816 @      235: CheckTransform() for P010 -> I420, result: 0
T  26816 @      235: GetMediaType() offer media type 7 with IYUV
T  26816 @      235: CheckTransform() for P010 -> IYUV, result: 0
T  26816 @      235: GetMediaType() offer media type 8 with NV12
T  26816 @      235: CheckTransform() for P010 -> NV12, result: 0
T  26816 @      235: GetMediaType() offer media type 9 with YV12
T  26816 @      235: CheckTransform() for P010 -> YV12, result: 0
T  26816 @      235: GetMediaType() offer media type 10 with I420
T  26816 @      235: CheckTransform() for P010 -> I420, result: 0
T  26816 @      235: GetMediaType() offer media type 11 with IYUV
T  26816 @      235: CheckTransform() for P010 -> IYUV, result: 0
T  26816 @      235: GetMediaType() offer media type 12 with P216
T  26816 @      235: CheckTransform() for P010 -> P216, result: 0
T  26816 @      235: GetMediaType() offer media type 13 with P210
T  26816 @      236: CheckTransform() for P010 -> P210, result: 0
T  26816 @      236: GetMediaType() offer media type 14 with P216
T  26816 @      236: CheckTransform() for P010 -> P216, result: 0
T  26816 @      236: GetMediaType() offer media type 15 with P210
T  26816 @      236: CheckTransform() for P010 -> P210, result: 0
T  26816 @      236: GetMediaType() offer media type 16 with YUY2
T  26816 @      236: CheckTransform() for P010 -> YUY2, result: 0
T  26816 @      236: GetMediaType() offer media type 17 with YV24
T  26816 @      236: CheckTransform() for P010 -> YV24, result: 0
T  26816 @      236: GetMediaType() offer media type 0 with P016
T  26816 @      236: CheckTransform() for P010 -> P016, result: 1
T  26816 @      236: CheckTransform() for P010 -> P016, result: 1
T  26816 @      236: GetMediaType() offer media type 1 with P010
T  26816 @      236: CheckTransform() for P010 -> P010, result: 1
T  26816 @      236: CheckTransform() for P010 -> P010, result: 1
T  26816 @      236: GetMediaType() offer media type 2 with P016
T  26816 @      236: CheckTransform() for P010 -> P016, result: 1
T  26816 @      236: CheckTransform() for P010 -> P016, result: 1
T  26816 @      236: GetMediaType() offer media type 3 with P010
T  26816 @      236: CheckTransform() for P010 -> P010, result: 1
T  26816 @      236: CheckTransform() for P010 -> P010, result: 1
T  26816 @      236: GetMediaType() offer media type 4 with NV12
T  26816 @      236: CheckTransform() for P010 -> NV12, result: 0
T  26816 @      236: GetMediaType() offer media type 5 with YV12
T  26816 @      237: CheckTransform() for P010 -> YV12, result: 0
T  26816 @      237: GetMediaType() offer media type 6 with I420
T  26816 @      237: CheckTransform() for P010 -> I420, result: 0
T  26816 @      237: GetMediaType() offer media type 7 with IYUV
T  26816 @      237: CheckTransform() for P010 -> IYUV, result: 0
T  26816 @      237: GetMediaType() offer media type 8 with NV12
T  26816 @      237: CheckTransform() for P010 -> NV12, result: 0
T  26816 @      237: GetMediaType() offer media type 9 with YV12
T  26816 @      237: CheckTransform() for P010 -> YV12, result: 0
T  26816 @      237: GetMediaType() offer media type 10 with I420
T  26816 @      237: CheckTransform() for P010 -> I420, result: 0
T  26816 @      237: GetMediaType() offer media type 11 with IYUV
T  26816 @      237: CheckTransform() for P010 -> IYUV, result: 0
T  26816 @      237: GetMediaType() offer media type 12 with P216
T  26816 @      237: CheckTransform() for P010 -> P216, result: 0
T  26816 @      237: GetMediaType() offer media type 13 with P210
T  26816 @      237: CheckTransform() for P010 -> P210, result: 0
T  26816 @      237: GetMediaType() offer media type 14 with P216
T  26816 @      237: CheckTransform() for P010 -> P216, result: 0
T  26816 @      237: GetMediaType() offer media type 15 with P210
T  26816 @      237: CheckTransform() for P010 -> P210, result: 0
T  26816 @      237: GetMediaType() offer media type 16 with YUY2
T  26816 @      237: CheckTransform() for P010 -> YUY2, result: 0
T  26816 @      238: GetMediaType() offer media type 17 with YV24
T  26816 @      238: CheckTransform() for P010 -> YV24, result: 0
T  26816 @      396: GetMediaType() offer media type 0 with P016
T  26816 @      396: CheckTransform() for P010 -> P016, result: 1
T  26816 @      396: CheckTransform() for P010 -> P016, result: 1
T  26816 @      396: GetMediaType() offer media type 1 with P010
T  26816 @      396: CheckTransform() for P010 -> P010, result: 1
T  26816 @      396: CheckTransform() for P010 -> P010, result: 1
T  26816 @      396: GetMediaType() offer media type 0 with P016
T  26816 @      396: GetMediaType() offer media type 1 with P010
T  26816 @      396: GetMediaType() offer media type 2 with P016
T  26816 @      396: GetMediaType() offer media type 3 with P010
T  26816 @      396: GetMediaType() offer media type 4 with NV12
T  26816 @      396: GetMediaType() offer media type 5 with YV12
T  26816 @      397: GetMediaType() offer media type 6 with I420
T  26816 @      397: GetMediaType() offer media type 7 with IYUV
T  26816 @      397: GetMediaType() offer media type 8 with NV12
T  26816 @      397: GetMediaType() offer media type 9 with YV12
T  26816 @      397: GetMediaType() offer media type 10 with I420
T  26816 @      397: GetMediaType() offer media type 11 with IYUV
T  26816 @      397: GetMediaType() offer media type 12 with P216
T  26816 @      397: GetMediaType() offer media type 13 with P210
T  26816 @      397: GetMediaType() offer media type 14 with P216
T  26816 @      397: GetMediaType() offer media type 15 with P210
T  26816 @      397: GetMediaType() offer media type 16 with YUY2
T  26816 @      397: GetMediaType() offer media type 17 with YV24
T  26816 @     9494: CheckTransform() for P010 -> P010, result: 1
T  26816 @     9575: CheckTransform() for P010 -> P010, result: 1
T  26816 @     9579: Reject input format due to settings: RGB32
T  26816 @     9579: Reject input format due to settings: RGB32
T  26816 @     9579: Reject input format due to settings: RGB24
T  26816 @     9579: Reject input format due to settings: RGB24
T  26816 @     9579: ReloadAviSynthScript from checking instance
T  26816 @     9579: Downstream QueryAccept in CheckTransform(): result 1 input P010
T  26816 @     9579: Connected with types: in P010 out P010

This was the problematic line: T 22700 @ 252: CheckTransform() for output type: result: 1 output NV12 offered input: P010 compatible input: NV12. As you can see, previously, even though the input to CheckTransform is P010, AVSF disregard that and forcefully added NV12 -> NV12: true to the compatible media type table. This gives MPC-HC "excuse" to use that pair to activate EVR with NV12. It looks like MPC-HC's EVR doesn't take P010 at all. So after the fix, we no longer do that and tells T 26816 @ 237: CheckTransform() for P010 -> NV12, result: 0 result. Since the input type is determined by the upstream (LAV Filters), NV12 was not tested at all, MPC-HC had to fallback to the only renderer that can accept that type, which is Video Renderer. Should Video Renderer fails to accept P010, there will be a whole new attempt of pin connection with new types, which could involve NV12 and EVR.

A simple workaround on our end is to tick off P010/P016 from LAV Filters, so that NV12 is used as input type. Alternatively, we could add something like ConvertBits(8) to restrict output formats to NV12/YV12 and allow P010 -> NV12 transform.

But the real problem is probably: 1) Why does MPC-HC EVR not support P010 (it returns 0x8004022a on ReceiveConnect() whereas MPC-BE's EVR returns S_OK)? 2) Why does MPC-HC Video Renderer support P010 (I'm not 100% on this one honestly)?

chainikdn commented 3 years ago

It looks like MPC-HC's EVR doesn't take P010 at all.

then how it works in P010 without AVSF?

  • Connected to: CLSID: {EE30215D-164F-4A92-A4EB-9D4C13390F9F} Filter: LAV Video Decoder (internal) Pin: Output
  • Connection media type: Video: P010 1024x576 23.976fps
chainikdn commented 3 years ago

ah, yes... https://github.com/clsid2/mpc-hc/issues/767

so, can we add a counter-heuristic specifically for MPC-HC? cause as far I can see MPC-HC is the only one aware of that unnamed "Microsoft bug" and everything work in MPC-BE and PotPlayer

CrendKing commented 3 years ago

Glad we found out the cause. I don't understand what counter-heuristic you meant. Do you want AVSF to not offer P010/P016 as output type if we detect the downstream is EVR and the loading process is mpc-hc*.exe?

Frankly, I think since MPC-HC seems to have the most knowledge (knowing the Microsoft bug), they should make a decision. Either allow all filter upstream to offer P010 to EVR (not only just LAV), or ignore the P010/P016 returned values from GetMediaType() if the renderer is EVR, so that it fallbacks to NV12. I think this is the right way, because you never know how many DS filters are out there. Requiring every single filters to add these special handling logic is overwhelming.

chainikdn commented 3 years ago

if we detect the downstream is EVR and the loading process is mpc-hc*.exe?

kind of... cause from the user's point-of-view right now AVSF just doesn't work in the most common configiration, which is MPC-HC + EVR or we can ask clsid2 to copy that piece of code from MPC-BE, enabling P010 on Windows 10

CrendKing commented 3 years ago

See my update. I think clsid2 should make decision.

chainikdn commented 3 years ago

Let's say clsid2 will do something in the next version. That will mean AVSF will be fully compatible only with MPC-HC 1.9.14 and later. And if he won't do something then AVSF won't be compatible with MPC-HC ever.

So, how can I finally make AVSF the default option when installing SVP? A workaround in AVSF looks like the better option for me, although it might not be "right".

CrendKing commented 3 years ago

1) Doesn't ffdshow have the same problem? 2) For SVP specifically, does it actually interpolate P010 content? You remember you mentioned that it only supports 420, but I don't remember about 10 bit. 3) Can't you add ConvertBits(8) to the SVP generated script if the condition matches? You know the video player name, and we return the filter chain through RC. There is no performance loss, because either LAV has to do the conversion, or Avs+ does.

chainikdn commented 3 years ago
  1. nope, it doesn't support 10-bit at all
  2. nope, 10-bit remains 10-bit
  3. nope, because the chain is already switched to "Video Renderer", it can't switch back to EVR in runtime

did you read clsid2's answer? don't you want to participate, cause I see a kind of deadlock here :D

CrendKing commented 3 years ago

Yeah, I thought about 3. and it won't work.

I already replied. I have a local workaround working. However, if the driver issue no longer exists and MPC-HC EVR can accept P010, with the workaround we won't take advantage of it. It will be very messy to test MPC-HC version, or check if EVR accepts P010 and fallback.

I think let's wait for clsid2's decision, and work out a solution together.

chainikdn commented 3 years ago

or check if EVR renderer accepts P010 and fallback

sounds like the best solution

CrendKing commented 3 years ago

I saw clsid2's comment, and thought myself: hmm, that logic sounds awfully familiar. Turns out the last time I tried to fix this issue, I effectively disabled the input pin reconnection process. https://github.com/CrendKing/avisynth_filter/actions/runs/919855208 should reactivate it, so that MPC-HC EVR P010 would result in NV12 while everywhere else is P010 as expected. And if one day MPC-HC decides to allow P010, no change is needed in AVSF to get back to P010. Is it good enough? If yes, please let me know and I'll release a version.

Please help me test this. I don't want it to be wrong the third time. Thanks.

CrendKing commented 3 years ago

BTW, I was testing SVP with MPC-BE on the P010 video. If EVR is used, the initial output media type will be settled as P010 as expected. However, when SVP injects, it tries to dynamically change the media type to NV12 (with ConvertToYUV420() and ConvertBits(8,dither=0) in the generated avs script). It seems EVR doesn't allow this, resulting in wrong frames:

Clipboard 1

This is because the input media type is already changed by SVP to NV12, but output media type stayed as P010. We could try to reconnect the input pin with P010, but then SVP won't work anyways.

If madVR is used, the P010 to NV12 change is allowed, and it worked.

So from SVP's perspective, it's actually better for EVR to not accept P010 as the initial media type. Of course the cost is losing 10-bit video, but it's infinitely better than wrong video.

chainikdn commented 3 years ago

However, when SVP injects, it tries to dynamically change the media type to NV12

actually it depends on the App. settings -> Add. options -> Allow output in 10-bit sure SVP could ignore it and do not switch the color depth in runtime for EVR... at the cost that 10-bit will always remain 10-bit, even if it's a 4K @144 fps and it will stutter as hell.

the cost is losing 10-bit video, but it's infinitely better than wrong video.

clsid2 told about it - if EVR is a 8-bit renderer anyway then feeding it with 8-bit after dithering is better than plain 10-bit. Cause EVR doesn't do dithering.

so if I'd made a "SVP Filter", I'd just add a EVR-specific heuristic,... or probably a white list of filters that can switch color depth in runtime, plus simple SSE 8-to-10 bit converter but you definitely won't like this :D

CrendKing commented 3 years ago

Allow output in 10-bit

Are you sure? I set it to "Always" and it converted to NV12. Just tried Never and same result. Do you mean if set to Always it should not produce those two convert functions?

EVR is a 8-bit renderer

Is it? Any source? I mean I don't know any official document listing the support input format of either EVR, madVR or MPC VR. All those "EVR doesn't support 10-bit", "madVR supports 10-bit and HDR" are empirical knowledge. Even AviSynth doesn't have official documentation about their APIs. That's why I'm grateful that VapourSynth has a documentation site.

If Microsoft offcially says EVR does not support 4:2:2 or 10-bit, then feeding it P010 is considered bug. It's not a matter of if I like or not.

(Which also means MPC-BE is wrong, and also means MPC-HC is only right by orthogonal reason)

a white list of filters that can switch color depth in runtime

If there is one I can surely consider. Seriously, how many video renderers and splitters/decoders are out there? If we only support LAV, EVR and madVR (and maybe MPC VR?), and only MPC-HC, MPC-BE and PotPlayer, it's not a big list to begin with, right?

chainikdn commented 3 years ago

Is it? Any source?

"it typically gets converted to RGB32 in the renderer, so you might as well do conversion to 8-bit earlier in the chain and be able to apply dithering" (c) it is not a question of allowed input formats

chainikdn commented 3 years ago

Are you sure? I set it to "Always" and it converted to NV12.

totally sure. however 10-bit output is not working w/o "GPU acceleration" ON, for example...

chainikdn commented 3 years ago

Please help me test this. I don't want it to be wrong the third time. Thanks.

seems to work in MPC-HC BUT still doesn't work with PotPlayer's "Built-in XXX Video Renderer" - the same thing with fallback to "Video Renderer" happens

T   4368 @        0: Loading process: PotPlayerMini64.exe
T   4368 @        0: FrameServerCommon()
T   4368 @        2: AviSynth version: AviSynth+ 3.5 (r3106, 3.5, x86_64)
T   4368 @        7: CSynthFilter(): 0000025D7C897160
T   4368 @        7: ReloadScript from checking instance
T   4368 @        7: New script clip: 0000025D58CA7300
T   4368 @        7: Release script clip: 0000025D58CA7300
T   4368 @       11: Add compatible formats: input P010 output P016
T   4368 @       11: Add compatible formats: input P010 output P010
T   4368 @       11: ReloadScript from checking instance
T   4368 @       11: New script clip: 0000025D58CA7300
T   4368 @       11: Release script clip: 0000025D58CA7300
T   4368 @       15: Add compatible formats: input P016 output P016
T   4368 @       15: Add compatible formats: input P016 output P010
T   4368 @       15: ReloadScript from checking instance
T   4368 @       15: New script clip: 0000025D58CA7300
T   4368 @       15: Release script clip: 0000025D58CA7300
T   4368 @       19: Add compatible formats: input NV12 output NV12
T   4368 @       19: Add compatible formats: input NV12 output YV12
T   4368 @       19: Add compatible formats: input NV12 output I420
T   4368 @       19: Add compatible formats: input NV12 output IYUV
T   4368 @       19: ReloadScript from checking instance
T   4368 @       19: New script clip: 0000025D58CA7300
T   4368 @       19: Release script clip: 0000025D58CA7300
T   4368 @       22: Add compatible formats: input YV12 output NV12
T   4368 @       22: Add compatible formats: input YV12 output YV12
T   4368 @       22: Add compatible formats: input YV12 output I420
T   4368 @       22: Add compatible formats: input YV12 output IYUV
T   4368 @       22: ReloadScript from checking instance
T   4368 @       22: New script clip: 0000025D58CA7300
T   4368 @       22: Release script clip: 0000025D58CA7300
T   4368 @       26: Add compatible formats: input P216 output P216
T   4368 @       26: Add compatible formats: input P216 output P210
T   4368 @       26: ReloadScript from checking instance
T   4368 @       26: New script clip: 0000025D58CA7300
T   4368 @       26: Release script clip: 0000025D58CA7300
T   4368 @       29: Add compatible formats: input P210 output P216
T   4368 @       29: Add compatible formats: input P210 output P210
T   4368 @       29: ReloadScript from checking instance
T   4368 @       29: New script clip: 0000025D58CA7300
T   4368 @       29: Release script clip: 0000025D58CA7300
T   4368 @       33: Add compatible formats: input YUY2 output YUY2
T   4368 @       33: Reject input format due to settings: RGB32
T   4368 @       33: Reject input format due to settings: RGB32
T   4368 @       33: Reject input format due to settings: RGB24
T   4368 @       33: Reject input format due to settings: RGB24
T   4368 @       33: Reject input format due to settings: YV24
T   4368 @       33: Reject input format due to settings: YV24
T   4368 @       33: CheckInputType(): input P010 result 1
T   4368 @       33: GetMediaType() offer media type 0 with P016
T   4368 @       33: GetMediaType() offer media type 1 with P010
T   4368 @       33: GetMediaType() offer media type 2 with NV12
T   4368 @       33: GetMediaType() offer media type 3 with YV12
T   4368 @       33: GetMediaType() offer media type 4 with I420
T   4368 @       33: GetMediaType() offer media type 5 with IYUV
T   4368 @       33: GetMediaType() offer media type 6 with P216
T   4368 @       33: GetMediaType() offer media type 7 with P210
T   4368 @       33: GetMediaType() offer media type 8 with YUY2
T   4368 @       33: GetMediaType() offer media type 0 with P016
T   4368 @       33: GetMediaType() offer media type 1 with P010
T   4368 @       34: GetMediaType() offer media type 2 with NV12
T   4368 @       34: GetMediaType() offer media type 3 with YV12
T   4368 @       34: GetMediaType() offer media type 4 with I420
T   4368 @       34: GetMediaType() offer media type 5 with IYUV
T   4368 @       34: GetMediaType() offer media type 6 with P216
T   4368 @       34: GetMediaType() offer media type 7 with P210
T   4368 @       34: GetMediaType() offer media type 8 with YUY2
T   4368 @       34: GetMediaType() offer media type 0 with P016
T   4368 @       34: GetMediaType() offer media type 1 with P010
T   4368 @       34: GetMediaType() offer media type 2 with NV12
T   4368 @       34: GetMediaType() offer media type 3 with YV12
T   4368 @       35: GetMediaType() offer media type 4 with I420
T   4368 @       35: GetMediaType() offer media type 5 with IYUV
T   4368 @       35: GetMediaType() offer media type 6 with P216
T   4368 @       35: GetMediaType() offer media type 7 with P210
T   4368 @       35: GetMediaType() offer media type 8 with YUY2
T   4368 @       35: GetMediaType() offer media type 0 with P016
T   4368 @       35: GetMediaType() offer media type 1 with P010
T   4368 @       35: GetMediaType() offer media type 2 with NV12
T   4368 @       35: GetMediaType() offer media type 3 with YV12
T   4368 @       35: GetMediaType() offer media type 4 with I420
T   4368 @       35: GetMediaType() offer media type 5 with IYUV
T   4368 @       35: GetMediaType() offer media type 6 with P216
T   4368 @       35: GetMediaType() offer media type 7 with P210
T   4368 @       35: GetMediaType() offer media type 8 with YUY2
T   4368 @       35: GetMediaType() offer media type 0 with P016
T   4368 @       35: GetMediaType() offer media type 1 with P010
T   4368 @       35: GetMediaType() offer media type 2 with NV12
T   4368 @       35: GetMediaType() offer media type 3 with YV12
T   4368 @       35: GetMediaType() offer media type 4 with I420
T   4368 @       35: GetMediaType() offer media type 5 with IYUV
T   4368 @       35: GetMediaType() offer media type 6 with P216
T   4368 @       35: GetMediaType() offer media type 7 with P210
T   4368 @       35: GetMediaType() offer media type 8 with YUY2
T   4368 @      142: GetMediaType() offer media type 0 with P016
T   4368 @      144: GetMediaType() offer media type 1 with P010
T   4368 @      145: Connected with types: in P010 out P010
T   4368 @      145: GetMediaType() offer media type 2 with NV12
T   4368 @      146: Attempt to reconnect input pin with media type NV12
T   4368 @      146: GetMediaType() offer media type 3 with YV12
T   4368 @      146: GetMediaType() offer media type 4 with I420
T   4368 @      146: GetMediaType() offer media type 5 with IYUV
T   4368 @      146: GetMediaType() offer media type 6 with P216
T   4368 @      146: GetMediaType() offer media type 7 with P210
T   4368 @      146: GetMediaType() offer media type 8 with YUY2
T   4368 @      146: Failed to reconnect with any of the 1 candidate input media types
T   4368 @      146: Reject input format due to settings: RGB32
T   4368 @      146: Reject input format due to settings: RGB32
T   4368 @      146: Reject input format due to settings: RGB24
T   4368 @      146: Reject input format due to settings: RGB24
T   4368 @      146: Reject input format due to settings: YV24
T   4368 @      146: Reject input format due to settings: YV24
T   4368 @      146: CheckInputType(): input NV12 result 1
T   4368 @      238: GetMediaType() offer media type 0 with P016
T   4368 @      238: GetMediaType() offer media type 1 with P010
T   4368 @      239: Attempt to reconnect input pin with media type P016
T   4368 @      239: GetMediaType() offer media type 2 with NV12
T   4368 @      249: Connected with types: in NV12 out NV12
T   4368 @      249: GetMediaType() offer media type 3 with YV12
T   4368 @      249: Connected with types: in NV12 out YV12
T   4368 @      249: GetMediaType() offer media type 4 with I420
T   4368 @      249: GetMediaType() offer media type 5 with IYUV
T   4368 @      249: GetMediaType() offer media type 6 with P216
T   4368 @      249: GetMediaType() offer media type 7 with P210
T   4368 @      249: GetMediaType() offer media type 8 with YUY2
T   4368 @      250: Failed to reconnect with any of the 2 candidate input media types
T   4368 @      250: Reject input format due to settings: RGB32
T   4368 @      250: Reject input format due to settings: RGB32
T   4368 @      250: Reject input format due to settings: RGB24
T   4368 @      250: Reject input format due to settings: RGB24
T   4368 @      250: Reject input format due to settings: YV24
T   4368 @      250: Reject input format due to settings: YV24
T   4368 @      250: CheckInputType(): input P016 result 1
T   4368 @      282: GetMediaType() offer media type 0 with P016
T   4368 @      282: GetMediaType() offer media type 1 with P010
T   4368 @      282: GetMediaType() offer media type 2 with NV12
T   4368 @      282: GetMediaType() offer media type 3 with YV12
T   4368 @      282: GetMediaType() offer media type 4 with I420
T   4368 @      282: GetMediaType() offer media type 5 with IYUV
T   4368 @      282: GetMediaType() offer media type 6 with P216
T   4368 @      282: GetMediaType() offer media type 7 with P210
T   4368 @      282: GetMediaType() offer media type 8 with YUY2
T   4368 @      283: GetMediaType() offer media type 0 with P016
T   4368 @      283: GetMediaType() offer media type 1 with P010
T   4368 @      283: GetMediaType() offer media type 2 with NV12
T   4368 @      283: GetMediaType() offer media type 3 with YV12
T   4368 @      283: GetMediaType() offer media type 4 with I420
T   4368 @      283: GetMediaType() offer media type 5 with IYUV
T   4368 @      283: GetMediaType() offer media type 6 with P216
T   4368 @      283: GetMediaType() offer media type 7 with P210
T   4368 @      283: GetMediaType() offer media type 8 with YUY2
T   4368 @      290: GetMediaType() offer media type 0 with P016
T   4368 @      290: GetMediaType() offer media type 1 with P010
T   4368 @      290: GetMediaType() offer media type 2 with NV12
T   4368 @      290: GetMediaType() offer media type 3 with YV12
T   4368 @      290: GetMediaType() offer media type 4 with I420
T   4368 @      290: GetMediaType() offer media type 5 with IYUV
T   4368 @      290: GetMediaType() offer media type 6 with P216
T   4368 @      290: GetMediaType() offer media type 7 with P210
T   4368 @      290: GetMediaType() offer media type 8 with YUY2
T   4368 @      290: GetMediaType() offer media type 0 with P016
T   4368 @      290: GetMediaType() offer media type 1 with P010
T   4368 @      290: GetMediaType() offer media type 2 with NV12
T   4368 @      290: GetMediaType() offer media type 3 with YV12
T   4368 @      291: GetMediaType() offer media type 4 with I420
T   4368 @      291: GetMediaType() offer media type 5 with IYUV
T   4368 @      291: GetMediaType() offer media type 6 with P216
T   4368 @      291: GetMediaType() offer media type 7 with P210
T   4368 @      291: GetMediaType() offer media type 8 with YUY2
T   4368 @      401: GetMediaType() offer media type 0 with P016
T   4368 @      401: GetMediaType() offer media type 1 with P010
T   4368 @      401: GetMediaType() offer media type 0 with P016
T   4368 @      401: GetMediaType() offer media type 1 with P010
T   4368 @      401: GetMediaType() offer media type 2 with NV12
T   4368 @      401: GetMediaType() offer media type 3 with YV12
T   4368 @      401: GetMediaType() offer media type 4 with I420
T   4368 @      401: GetMediaType() offer media type 5 with IYUV
T   4368 @      401: GetMediaType() offer media type 6 with P216
T   4368 @      401: GetMediaType() offer media type 7 with P210
T   4368 @      401: GetMediaType() offer media type 8 with YUY2
T   4368 @      401: Connected with types: in P016 out P010
T  19148 @      906: GetMediaType() offer media type 0 with P016
T  19148 @      906: GetMediaType() offer media type 1 with P010
T  19148 @      906: GetMediaType() offer media type 0 with P016
T  19148 @      906: GetMediaType() offer media type 1 with P010
T  19148 @      906: GetMediaType() offer media type 2 with NV12
T  19148 @      906: GetMediaType() offer media type 3 with YV12
T  19148 @      906: GetMediaType() offer media type 4 with I420
T  19148 @      906: GetMediaType() offer media type 5 with IYUV
T  19148 @      906: GetMediaType() offer media type 6 with P216
T  19148 @      906: GetMediaType() offer media type 7 with P210
T  19148 @      906: GetMediaType() offer media type 8 with YUY2
T  19148 @      906: Connected with types: in P016 out P010
T  19148 @     1042: Filter in graph: Built-in MKV Source
T  19148 @     1042: Filter in graph: LAV Video Decoder
T  19148 @     1042: Filter in graph: AviSynth Filter
T  19148 @     1042: Filter in graph: Video Renderer
T  19148 @     1042: ReloadScript from main instance
CrendKing commented 3 years ago

"it typically gets converted to RGB32 in the renderer, so you might as well do conversion to 8-bit earlier in the chain and be able to apply dithering" (c)

I meant is there official document from Microsoft stating that when given 10-bit content to EVR, it converts internally to RGB32? If you can find, then treating it as 8-bit seems reasonable.

If not, is there an easy to test what kind of data it sends to graphics card?

10-bit output is not working w/o "GPU acceleration" ON

You are correct. I disabled it. I was not aware of this conditon, and I didn't find any page from SVP wiki mentioning it.

Once enabled GPU (NVOF or not), everything works.

still doesn't work with PotPlayer's "Built-in XXX Video Renderer"

I can repro. I'll look into it.

chainikdn commented 3 years ago

so, ok... the only ultimate solution to all this: an on/off option that will not accept P010/016 input IF downstream is NOT from the list [madVR, MPC VR] (configurable via registry)

if you want quality - 10-bit gradients, tonemapping, etc - go for madVR EVR is for maximum compatibility and if you're a video enthusiast writing your own AVS scripts then you'll handle all these conflicts manually


no idea wtf is going on with PotPlayer's renderers, they doesn't work even with all 10/16 checkboxes unchecked

CrendKing commented 3 years ago

About the option: AVSF already has the input format checkboxes. What if we just make a table listing the video renderers and their recommended input format selections (EVR: only NV12. madVR: all. MPC VR: only 4:4:4, just example ofc). It's not like people change their video renderer frequently.

Then add a paragraph about writing custom avs script. I feel giving user more control and educate is better than doing everything behind the curtain. At least I never like others doing that to me.

If SVP wants to make choice for your users, feel free to pre-populate relevant registry values or ini entries when installing.


And it disallows any debugger to attach to the process. Very open minded /s.

chainikdn commented 3 years ago

What if we just make a table listing the video renderers and their recommended input format selections

Not sure someone will ever need such flexibility and we can't test every renderer in every video player out there. People knowing wtf is "filter", "renderer" and "colorspace" can do anything they want manually by ticking with numerous checkboxes. And I only care about normal people :D

So the proposed option will have two positions: 1 - do whatever you want, 2 - "just work" in every possible situation chk

CrendKing commented 3 years ago

For PotPlayer, even if I disable all input formats other than 4:2:0 8-bit, I still connects to Video Renderer for the 10-bit video. Then if I switch to a 8-bit video, even if I select the DirectX 11 renderer, I get connected to Built-in Direct3D9 Video Renderer after multiple pin reconnections. There is a "10-bit output" checkbox, but doesn't do anything.

So I'm guess there is some special treatment inside the player that whitelist only certain upstream for the built-in renderers. I'd suggest just stay away from them.

CrendKing commented 3 years ago

About the option: what about if by default or new installation, the 10/16-bit input formats are disabled. And we put a note in README that 10-bit can be explicitly enabled by ticking them, with "Make sure you have 10-bit capable video renderers installed, such as madVR, MPC VR, etc". I think since these VRs are not available by default and always manually installed, we can assume whoever does that at least knows something about video playing.

Also, I made checkboxes by duplicating whatever LAV Video Decoder has. I don't expect everybody to know or do anything about them, but if someone does, at least it's there.

chainikdn commented 3 years ago

The thing is nobody reads readme.

CrendKing commented 3 years ago

My thinking process is, SVP users might be non-tech-savvy people who don't know these details, but since you are their "guardian", you can do whatever you want to help them: changing registry or ini based on their selection in the installer/SVP manager. You can easily detect if they installed madVR (e.g. HKEY_CURRENT_USER\Software\madshi\madVR). If they have problem using the filter, they don't come here and create issue. They go to SVP forum and you help them. While my target audience is the ones that literally find this project, download and install themselves. I expect them to know how open source projects work and read docs.

Anyways, I could even put a http linked text in that settings page to the relevant README section. Gonna be pretty much the same as your mockup pic.

chainikdn commented 3 years ago

They go to SVP forum and you help them.

madVR is installed and enabled by default (i.e. if the user install SVP "blindly" by clicking next-next-next) in this case P010 will be enabled (obviously) then he wants to run another video player, say MPC-BE, or, I dunno, Whirligig (a VR player that use its own renderer) and what? go to the forum? RTFM? uncheck checkboxes? then check them back when running MPC-HC again?

another case: user observes that madVR is too heavy for his hardware, then right now all he have to do is switching the renderer. which is done via player's native options, even from the context menu in PotPlayer... and you want him to go to the filter's options. why?

I really don't understand what bad side do you see in maximum compatibility with default settings? If you don't like checkboxes - make it a registry-only option disabled by default...

CrendKing commented 3 years ago

I understand your concern, but I don't know what do you suggest we do here? Do you want the filter to detect the downstream, and react according to an internal whitelist, such that if downstream is madVR, automatically enable 10-bit, if EVR, automatically disable 10-bit? What if user forcifully want 10-bit on EVR (if he uses MPC-BE)? What if user don't want 10-bit on madVR? Do we put the whitelist in configuration (registry or ini)? Do you expect people to edit that whitelist if they don't even use the GUI settings?

So can you use a few clear bullets to summarize your suggestions?

chainikdn commented 3 years ago
CrendKing commented 3 years ago

I don't think this checkbox is good idea. If the premise of using it is based on user reading README and understanding, then what I've put in that section should already suffice. If they don't read or can't understand, this only confuses them.

As for default, I'm OK either all checked, or all but 10/16-bit checked. The difference is pretty much if we want user to have best video quality or best compatibility by default. I'm OK either way. I changed only because I thought you wanted MPC-BE EVR to not render P010. If I misunderstood you, I can change it back.

chainikdn commented 3 years ago

Then why make it default?

SVP will check it at installation time, and w/o SVP nothing changed at all consider this as a "checkbox specifically for SVP" because only SVP will change color depth at runtime

CrendKing commented 3 years ago

consider this as a "checkbox specifically for SVP"

Are you saying SVP might change this setting during installation if it detects madVR being installed? That solves the "README" problem. But still, it confuses people who don't use SVP.

SVP will change color depth at runtime

Are you saying SVP might dynamically inserts something like ConvertBits(8) into the script and reload to change the output format? What does it have to do with input format at all? I just tried that with both madVR and EVR without any problem (https://github.com/CrendKing/avisynth_filter/issues/49 was solved). What exactly the problem are you trying to solve? Describe it, and there might be better solution than this.

chainikdn commented 3 years ago

What does it have to do with input format at all?

https://github.com/CrendKing/avisynth_filter/issues/37#issuecomment-857285929

What exactly the problem are you trying to solve? Describe it, and there might be better solution than this.

I want AVSF working in any of the following situations, w/o modifying any checkboxes before every run:

  1. 10-bit video, MPC-HC, EVR --> 8-bit image
  2. 10-bit video, MPC-HC, madVR, SVP allows 10-bit output --> 10-bit image
  3. 10-bit video, non-MPC-HC, EVR (or any other unknown renderer), SVP doesn't allow 10-biut output --> 8-bit image

case 1 already solved case 2 requires 10/16 checkboxes ON case 3 requires 10/16 checkboxes OFF

CrendKing commented 3 years ago

If I revert the input format change but keep the README change, case 1 and 2 are already good, so our focus is on case 3, which is what I understood: you want non-MPC-HC EVR to not take P010.

From what I can see, SVP installer does not include any non-MPC-HC DirectShow player. So imagine if I introduce this new checkbox and config. How do you plan to make use of it? Any combination from SVP already works out of box, so there is nothing to be done. If someone uses SVP just for the filter (they bring their own player and/or renderer), you can't just flip the checkbox for them blindly. You require that user to read the never read README, understand the checkbox, and make the choice themselves. How is it different to status quo?

Imagine one day, SVP does include MPC-BE in the installer. Now you can detect the MPC-BE + no madVR combination and turn on the special checkbox. But again, without the checkbox you can just uncheck the 10/16-bit formats the same way.

Similarly, if you include a checkbox in the installer asking user if they have the problematic combination, instead of turn on this one box, you can uncheck 10/16-bit.

In short, my basic assumption is, for your average user, they use one player and stick to one renderer. They only need to make the input format choice once and be done with it, which can come from SVP installer. They don't need dynamic format detection and pin reconnection. If the user either have 1) multiple players and/or renderers; 2) frequently change those settings, then I think requiring these minority to make intelligent choice on input format is not too much to ask.

Forgot if I mentioned before or not. As to a solution to case 3, we can

This does not require any change to the settings or checkboxes. It just works. What's concerning is that player detection method. It's very fragile. If someone rename MPC-BE to mpc-hc64.exe for whatever reason, it will fail. I asked clsid2 about reliable player detection and he didn't answer (I assume no better way).

chainikdn commented 3 years ago

Reconnect input without 10/16-bit if not start with mpc-hc and is EVR

mpc-hc is fine w/o all these at all! I don't want 10-bit in other (*) players with EVR(-CP), Sync,, VMR, etc. But I want to leave people not using SVP an option to USE 10-bit in EVR if they want.

(*) "any", not "other", but as long as MPC-HC is already covered, then a say "other"

CrendKing commented 3 years ago

I don't know how to satisfy the 3 conditions at the same time

  1. Whitelist madVR and MPC VR
  2. Leave people not using SVP an option to USE 10-bit in EVR if they want
  3. Without reading README (i.e. not introducing non-straightforward option)

If you whitelist, it means you want to not give EVR 10-bit. But if you then sometimes want to give EVR 10-bit, you have to make another config. By its very nature, this config won't be straightforward.

I think we've discussed this at length. I tend to just leave it as-is now. Besides, SVP (w/ MPC-HC) won't be impacted at all.

If you want to discuss this furthermore with new thoughts, please create a new issue.