History

avcodec/vvc: parse all SEI messages

While the current code iterated over the messages, it always returned in the first iteration. Instead keep iterating and warn for failure to parse. At time of writing, none of the parsing functions seems to actually return an error, ever. Fix CID 1648348

Marvin Scholz committed 1 year ago

Commit 9ad6dca1 parent 3d7668d1 file · +22 −7Browse files

Unified · Split

libavcodec/vvc/sei.c+22−7
@@ -184,6 +184,7 @@ int ff_vvc_sei_decode(VVCSEI *s, const H266RawSEI *sei, const struct VVCFrameCon · 183 unmodified lines
184184 return AVERROR_INVALIDDATA;
185185
186186 for (int i = 0; i < sei->message_list.nb_messages; i++) {
187+ int ret = 0;
187188 SEIRawMessage *message = &sei->message_list.messages[i];
188189 void *payload = message->payload;
189190
@@ -193,25 +194,32 @@ int ff_vvc_sei_decode(VVCSEI *s, const H266RawSEI *sei, const struct VVCFrameCon · 3 unmodified lines
193194 c->film_grain_characteristics = av_refstruct_allocz(sizeof(*c->film_grain_characteristics));
194195 if (!c->film_grain_characteristics)
195196 return AVERROR(ENOMEM);
196− return decode_film_grain_characteristics(c->film_grain_characteristics, payload, fc);
197+ ret = decode_film_grain_characteristics(c->film_grain_characteristics, payload, fc);
198+ break;
197199
198200 case SEI_TYPE_DECODED_PICTURE_HASH:
199− return decode_decoded_picture_hash(&s->picture_hash, payload);
201+ ret = decode_decoded_picture_hash(&s->picture_hash, payload);
202+ break;
200203
201204 case SEI_TYPE_DISPLAY_ORIENTATION:
202− return decode_display_orientation(&s->common.display_orientation, payload);
205+ ret = decode_display_orientation(&s->common.display_orientation, payload);
206+ break;
203207
204208 case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
205− return decode_content_light_level_info(&s->common.content_light, payload);
209+ ret = decode_content_light_level_info(&s->common.content_light, payload);
210+ break;
206211
207212 case SEI_TYPE_FRAME_FIELD_INFO:
208− return decode_frame_field_info(&s->frame_field_info, payload);
213+ ret = decode_frame_field_info(&s->frame_field_info, payload);
214+ break;
209215
210216 case SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT:
211− return decode_ambient_viewing_environment(&s->common.ambient_viewing_environment, payload);
217+ ret = decode_ambient_viewing_environment(&s->common.ambient_viewing_environment, payload);
218+ break;
212219
213220 case SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME:
214− return decode_mastering_display_colour_volume(&s->common.mastering_display, payload);
221+ ret = decode_mastering_display_colour_volume(&s->common.mastering_display, payload);
222+ break;
215223
216224 default:
217225 av_log(fc->log_ctx, AV_LOG_DEBUG, "Skipped %s SEI %d\n",
@@ -219,6 +227,13 @@ int ff_vvc_sei_decode(VVCSEI *s, const H266RawSEI *sei, const struct VVCFrameCon · 1 unmodified line
219227 "PREFIX" : "SUFFIX", message->payload_type);
220228 return FF_H2645_SEI_MESSAGE_UNHANDLED;
221229 }
230+
231+ if (ret == AVERROR(ENOMEM))
232+ return ret;
233+ if (ret < 0)
234+ av_log(fc->log_ctx, AV_LOG_WARNING, "Failure to parse %s SEI %d: %s\n",
235+ sei->nal_unit_header.nal_unit_type == VVC_PREFIX_SEI_NUT ?
236+ "PREFIX" : "SUFFIX", message->payload_type, av_err2str(ret));
222237 }
223238
224239 return 0;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t