From fdc26b40ae16f52a5b2b7b89e06b03b04c26fe64 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Mon, 23 Sep 2024 09:58:54 +0200 Subject: [PATCH] video_decoders: allow display codec blacklist using param decoder-use-codec with an exclamation mark --- src/rtp/video_decoders.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/rtp/video_decoders.cpp b/src/rtp/video_decoders.cpp index a43cd5b5b..ad1090796 100644 --- a/src/rtp/video_decoders.cpp +++ b/src/rtp/video_decoders.cpp @@ -843,7 +843,9 @@ ADD_TO_PARAM("decoder-use-codec", "* decoder-use-codec=\n" " Use specified pixel format for decoding (eg. v210). This overrides automatic\n" " choice. The pixel format must be supported by the video display. Use 'help' to see\n" - " available options for a display (eg.: 'uv -d gl --param decoder-use-codec=help').\n"); + " available options for a display (eg.: 'uv -d gl --param decoder-use-codec=help').\n" + "* decoder-use-codec=!\n" + " Blacklist specified pixel format ('!native_codecs) << "\n"; @@ -887,7 +894,16 @@ bool video_decoder_register_display(struct state_video_decoder *decoder, struct LOG(LOG_LEVEL_INFO) << MOD_NAME << "Supported codecs for current display are: " << codec_list_to_str(decoder->native_codecs) << "\n"; return false; } - if (find(decoder->native_codecs.begin(), decoder->native_codecs.end(), req_codec) != end(decoder->native_codecs)) { + if (blacklist_codec) { + auto to_erase = find(decoder->native_codecs.begin(), + decoder->native_codecs.end(), + req_codec); + if (to_erase != decoder->native_codecs.end()) { + decoder->native_codecs.erase(to_erase); + } + } else if (find(decoder->native_codecs.begin(), + decoder->native_codecs.end(), + req_codec) != end(decoder->native_codecs)) { decoder->native_codecs.clear(); decoder->native_codecs.push_back(req_codec); } else {