Recently I've used mpv with set icc-profile and it worked with hwdec=auto-safe setting. Then I've tried to change colors via set vf colorchannelmixer but got an error "Impossible to convert between the formats supported by the filter 'mpv_src_in0' and the filter 'auto_scaler_0'". I've found the workaround in https://stackoverflow.com/questions/57297372/how-to-make-mpv-more-compatible-with-ffmpeg-filters-like-minterpolate :
The problem is that you're using hardware decoding WITHOUT copying the decoded video back to system memory. This means your video filter can't access it. The fix is simple but that error message makes it very hard to figure this out.
To fix this just pass in --hwdec=no.
Why can mpv change hardware decoded video stream to apply icc-profile but not color filter? Being specific, on my PC mpv seems to use VA-API for hardware decoding.