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
184 return AVERROR_INVALIDDATA;184 return AVERROR_INVALIDDATA;
185 185
186 for (int i = 0; i < sei->message_list.nb_messages; i++) {186 for (int i = 0; i < sei->message_list.nb_messages; i++) {
187 int ret = 0;
187 SEIRawMessage *message = &sei->message_list.messages[i];188 SEIRawMessage *message = &sei->message_list.messages[i];
188 void *payload = message->payload;189 void *payload = message->payload;
189 190
@@ -193,25 +194,32 @@ int ff_vvc_sei_decode(VVCSEI *s, const H266RawSEI *sei, const struct VVCFrameCon · 3 unmodified lines
193 c->film_grain_characteristics = av_refstruct_allocz(sizeof(*c->film_grain_characteristics));194 c->film_grain_characteristics = av_refstruct_allocz(sizeof(*c->film_grain_characteristics));
194 if (!c->film_grain_characteristics)195 if (!c->film_grain_characteristics)
195 return AVERROR(ENOMEM);196 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;
197 199
198 case SEI_TYPE_DECODED_PICTURE_HASH:200 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;
200 203
201 case SEI_TYPE_DISPLAY_ORIENTATION:204 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;
203 207
204 case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:208 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;
206 211
207 case SEI_TYPE_FRAME_FIELD_INFO:212 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;
209 215
210 case SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT:216 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;
212 219
213 case SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME:220 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;
215 223
216 default:224 default:
217 av_log(fc->log_ctx, AV_LOG_DEBUG, "Skipped %s SEI %d\n",225 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
219 "PREFIX" : "SUFFIX", message->payload_type);227 "PREFIX" : "SUFFIX", message->payload_type);
220 return FF_H2645_SEI_MESSAGE_UNHANDLED;228 return FF_H2645_SEI_MESSAGE_UNHANDLED;
221 }229 }
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));
222 }237 }
223 238
224 return 0;239 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