From d751b24ed51cc225cf2544e1251665be56ad92c8 Mon Sep 17 00:00:00 2001 From: jeffqjiangNew <142832361+jeffqjiangNew@users.noreply.github.com> Date: Thu, 1 May 2025 12:50:28 -0400 Subject: [PATCH] * Roc decoder utility: Do not throw exceptions on picture decode or decoder reconfig errors. (#577) - This allows the decoder to be able to handle more AV1 error streams. --- src/parser/av1_parser.cpp | 2 +- utils/rocvideodecode/roc_video_dec.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/parser/av1_parser.cpp b/src/parser/av1_parser.cpp index 1069425f10..1c6d49bd86 100644 --- a/src/parser/av1_parser.cpp +++ b/src/parser/av1_parser.cpp @@ -59,7 +59,7 @@ rocDecStatus Av1VideoParser::ParseVideoData(RocdecSourceDataPacket *p_data) { curr_pts_ = p_data->pts; if (ParsePictureData(p_data->payload, p_data->payload_size) != PARSER_OK) { ERR("Error occurred in picture data parsing."); - return ROCDEC_SUCCESS; + return ROCDEC_RUNTIME_ERROR; } } else if (!(p_data->flags & ROCDEC_PKT_ENDOFSTREAM)) { // If no payload and EOS is not set, treated as invalid. diff --git a/utils/rocvideodecode/roc_video_dec.cpp b/utils/rocvideodecode/roc_video_dec.cpp index 43e1cacb73..479b8b11cd 100644 --- a/utils/rocvideodecode/roc_video_dec.cpp +++ b/utils/rocvideodecode/roc_video_dec.cpp @@ -614,7 +614,9 @@ int RocVideoDecoder::ReconfigureDecoder(RocdecVideoFormat *p_video_format) { return 0; } if (p_video_format->reconfig_options == ROCDEC_RECONFIG_NEW_SURFACES) { - ROCDEC_API_CALL(rocDecReconfigureDecoder(roc_decoder_, &reconfig_params)); + if (rocDecReconfigureDecoder(roc_decoder_, &reconfig_params) != ROCDEC_SUCCESS) { + return 0; + } } input_video_info_str_.str(""); @@ -860,7 +862,9 @@ int RocVideoDecoder::DecodeFrame(const uint8_t *data, size_t size, int pkt_flags if (!data || size == 0) { packet.flags |= ROCDEC_PKT_ENDOFSTREAM; } - ROCDEC_API_CALL(rocDecParseVideoData(rocdec_parser_, &packet)); + if (rocDecParseVideoData(rocdec_parser_, &packet) != ROCDEC_SUCCESS) { + ROCDEC_ERR("Error occurred in rocDecParseVideoData()."); + } if (num_decoded_pics) { *num_decoded_pics = decoded_pic_cnt_; }