ff_id3v2_parse_apic/chapters/priv/priv_dict all had a parameter extra_meta of type ID3v2ExtraMeta ** as if the functions wanted to make *extra_meta point to something else. But they don't, so just use an ID3v2ExtraMeta *.
Unified · Split
| @@ -146,7 +146,7 @@ static int handle_id3(AVFormatContext *s, AVPacket *pkt) · 145 unmodified lines | |||
| 146 | 146 | ||
| 147 | ffio_init_context(&ioctx, pkt->data, pkt->size, 0, NULL, NULL, NULL, NULL); | 147 | ffio_init_context(&ioctx, pkt->data, pkt->size, 0, NULL, NULL, NULL, NULL); |
| 148 | ff_id3v2_read_dict(&ioctx, &metadata, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); | 148 | ff_id3v2_read_dict(&ioctx, &metadata, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); |
| 149 | if ((ret = ff_id3v2_parse_priv_dict(&metadata, &id3v2_extra_meta)) < 0) | 149 | if ((ret = ff_id3v2_parse_priv_dict(&metadata, id3v2_extra_meta)) < 0) |
| 150 | goto error; | 150 | goto error; |
| 151 | 151 | ||
| 152 | if (metadata) { | 152 | if (metadata) { |
| @@ -261,8 +261,8 @@ static int aiff_read_header(AVFormatContext *s) · 260 unmodified lines | |||
| 261 | position = avio_tell(pb); | 261 | position = avio_tell(pb); |
| 262 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, size); | 262 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, size); |
| 263 | if (id3v2_extra_meta) | 263 | if (id3v2_extra_meta) |
| 264 | if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0 || | 264 | if ((ret = ff_id3v2_parse_apic(s, id3v2_extra_meta)) < 0 || |
| 265 | (ret = ff_id3v2_parse_chapters(s, &id3v2_extra_meta)) < 0) { | 265 | (ret = ff_id3v2_parse_chapters(s, id3v2_extra_meta)) < 0) { |
| 266 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); | 266 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); |
| 267 | return ret; | 267 | return ret; |
| 268 | } | 268 | } |
| @@ -308,8 +308,8 @@ static void get_id3_tag(AVFormatContext *s, int len) · 307 unmodified lines | |||
| 308 | 308 | ||
| 309 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, len); | 309 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, len); |
| 310 | if (id3v2_extra_meta) { | 310 | if (id3v2_extra_meta) { |
| 311 | ff_id3v2_parse_apic(s, &id3v2_extra_meta); | 311 | ff_id3v2_parse_apic(s, id3v2_extra_meta); |
| 312 | ff_id3v2_parse_chapters(s, &id3v2_extra_meta); | 312 | ff_id3v2_parse_chapters(s, id3v2_extra_meta); |
| 313 | } | 313 | } |
| 314 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); | 314 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); |
| 315 | } | 315 | } |
| @@ -461,8 +461,8 @@ static void get_id3_tag(AVFormatContext *s, int len) · 460 unmodified lines | |||
| 461 | 461 | ||
| 462 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, len); | 462 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, len); |
| 463 | if (id3v2_extra_meta) { | 463 | if (id3v2_extra_meta) { |
| 464 | ff_id3v2_parse_apic(s, &id3v2_extra_meta); | 464 | ff_id3v2_parse_apic(s, id3v2_extra_meta); |
| 465 | ff_id3v2_parse_chapters(s, &id3v2_extra_meta); | 465 | ff_id3v2_parse_chapters(s, id3v2_extra_meta); |
| 466 | } | 466 | } |
| 467 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); | 467 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); |
| 468 | } | 468 | } |
| @@ -56,8 +56,8 @@ static void read_id3(AVFormatContext *s, uint64_t id3pos) · 55 unmodified lines | |||
| 56 | 56 | ||
| 57 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, 0); | 57 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, 0); |
| 58 | if (id3v2_extra_meta) { | 58 | if (id3v2_extra_meta) { |
| 59 | ff_id3v2_parse_apic(s, &id3v2_extra_meta); | 59 | ff_id3v2_parse_apic(s, id3v2_extra_meta); |
| 60 | ff_id3v2_parse_chapters(s, &id3v2_extra_meta); | 60 | ff_id3v2_parse_chapters(s, id3v2_extra_meta); |
| 61 | } | 61 | } |
| 62 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); | 62 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); |
| 63 | } | 63 | } |
| @@ -1070,12 +1070,12 @@ static void handle_id3(AVIOContext *pb, struct playlist *pls) · 1069 unmodified lines | |||
| 1070 | 1070 | ||
| 1071 | /* get picture attachment and set text metadata */ | 1071 | /* get picture attachment and set text metadata */ |
| 1072 | if (pls->ctx->nb_streams) | 1072 | if (pls->ctx->nb_streams) |
| 1073 | ff_id3v2_parse_apic(pls->ctx, &extra_meta); | 1073 | ff_id3v2_parse_apic(pls->ctx, extra_meta); |
| 1074 | else | 1074 | else |
| 1075 | /* demuxer not yet opened, defer picture attachment */ | 1075 | /* demuxer not yet opened, defer picture attachment */ |
| 1076 | pls->id3_deferred_extra = extra_meta; | 1076 | pls->id3_deferred_extra = extra_meta; |
| 1077 | 1077 | ||
| 1078 | ff_id3v2_parse_priv_dict(&metadata, &extra_meta); | 1078 | ff_id3v2_parse_priv_dict(&metadata, extra_meta); |
| 1079 | av_dict_copy(&pls->ctx->metadata, metadata, 0); | 1079 | av_dict_copy(&pls->ctx->metadata, metadata, 0); |
| 1080 | pls->id3_initial = metadata; | 1080 | pls->id3_initial = metadata; |
| 1081 | 1081 | ||
| @@ -1965,9 +1965,9 @@ static int hls_read_header(AVFormatContext *s) · 883 unmodified lines | |||
| 1965 | goto fail; | 1965 | goto fail; |
| 1966 | 1966 | ||
| 1967 | if (pls->id3_deferred_extra && pls->ctx->nb_streams == 1) { | 1967 | if (pls->id3_deferred_extra && pls->ctx->nb_streams == 1) { |
| 1968 | ff_id3v2_parse_apic(pls->ctx, &pls->id3_deferred_extra); | 1968 | ff_id3v2_parse_apic(pls->ctx, pls->id3_deferred_extra); |
| 1969 | avformat_queue_attached_pictures(pls->ctx); | 1969 | avformat_queue_attached_pictures(pls->ctx); |
| 1970 | ff_id3v2_parse_priv(pls->ctx, &pls->id3_deferred_extra); | 1970 | ff_id3v2_parse_priv(pls->ctx, pls->id3_deferred_extra); |
| 1971 | ff_id3v2_free_extra_meta(&pls->id3_deferred_extra); | 1971 | ff_id3v2_free_extra_meta(&pls->id3_deferred_extra); |
| 1972 | } | 1972 | } |
| 1973 | 1973 | ||
| @@ -1127,11 +1127,11 @@ void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta) · 1126 unmodified lines | |||
| 1127 | *extra_meta = NULL; | 1127 | *extra_meta = NULL; |
| 1128 | } | 1128 | } |
| 1129 | 1129 | ||
| 1130 | int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta **extra_meta) | 1130 | int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta *extra_meta) |
| 1131 | { | 1131 | { |
| 1132 | ID3v2ExtraMeta *cur; | 1132 | ID3v2ExtraMeta *cur; |
| 1133 | 1133 | ||
| 1134 | for (cur = *extra_meta; cur; cur = cur->next) { | 1134 | for (cur = extra_meta; cur; cur = cur->next) { |
| 1135 | ID3v2ExtraMetaAPIC *apic; | 1135 | ID3v2ExtraMetaAPIC *apic; |
| 1136 | AVStream *st; | 1136 | AVStream *st; |
| 1137 | 1137 | ||
| @@ -1167,7 +1167,7 @@ int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta **extra_meta) · 29 unmodified lines | |||
| 1167 | return 0; | 1167 | return 0; |
| 1168 | } | 1168 | } |
| 1169 | 1169 | ||
| 1170 | int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta **extra_meta) | 1170 | int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta *extra_meta) |
| 1171 | { | 1171 | { |
| 1172 | int ret = 0; | 1172 | int ret = 0; |
| 1173 | ID3v2ExtraMeta *cur; | 1173 | ID3v2ExtraMeta *cur; |
| @@ -1178,7 +1178,7 @@ int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta **extra_meta) · 4 unmodified lines | |||
| 1178 | 1178 | ||
| 1179 | // since extra_meta is a linked list where elements are prepended, | 1179 | // since extra_meta is a linked list where elements are prepended, |
| 1180 | // we need to reverse the order of chapters | 1180 | // we need to reverse the order of chapters |
| 1181 | for (cur = *extra_meta; cur; cur = cur->next) { | 1181 | for (cur = extra_meta; cur; cur = cur->next) { |
| 1182 | ID3v2ExtraMetaCHAP *chap; | 1182 | ID3v2ExtraMetaCHAP *chap; |
| 1183 | 1183 | ||
| 1184 | if (strcmp(cur->tag, "CHAP")) | 1184 | if (strcmp(cur->tag, "CHAP")) |
| @@ -1218,12 +1218,12 @@ end: · 33 unmodified lines | |||
| 1218 | return ret; | 1218 | return ret; |
| 1219 | } | 1219 | } |
| 1220 | 1220 | ||
| 1221 | int ff_id3v2_parse_priv_dict(AVDictionary **metadata, ID3v2ExtraMeta **extra_meta) | 1221 | int ff_id3v2_parse_priv_dict(AVDictionary **metadata, ID3v2ExtraMeta *extra_meta) |
| 1222 | { | 1222 | { |
| 1223 | ID3v2ExtraMeta *cur; | 1223 | ID3v2ExtraMeta *cur; |
| 1224 | int dict_flags = AV_DICT_DONT_OVERWRITE | AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL; | 1224 | int dict_flags = AV_DICT_DONT_OVERWRITE | AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL; |
| 1225 | 1225 | ||
| 1226 | for (cur = *extra_meta; cur; cur = cur->next) { | 1226 | for (cur = extra_meta; cur; cur = cur->next) { |
| 1227 | if (!strcmp(cur->tag, "PRIV")) { | 1227 | if (!strcmp(cur->tag, "PRIV")) { |
| 1228 | ID3v2ExtraMetaPRIV *priv = &cur->data.priv; | 1228 | ID3v2ExtraMetaPRIV *priv = &cur->data.priv; |
| 1229 | AVBPrint bprint; | 1229 | AVBPrint bprint; |
| @@ -1258,7 +1258,7 @@ int ff_id3v2_parse_priv_dict(AVDictionary **metadata, ID3v2ExtraMeta **extra_met · 28 unmodified lines | |||
| 1258 | return 0; | 1258 | return 0; |
| 1259 | } | 1259 | } |
| 1260 | 1260 | ||
| 1261 | int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta **extra_meta) | 1261 | int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta *extra_meta) |
| 1262 | { | 1262 | { |
| 1263 | return ff_id3v2_parse_priv_dict(&s->metadata, extra_meta); | 1263 | return ff_id3v2_parse_priv_dict(&s->metadata, extra_meta); |
| 1264 | } | 1264 | } |
| @@ -167,25 +167,25 @@ void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta); · 166 unmodified lines | |||
| 167 | * Create a stream for each APIC (attached picture) extracted from the | 167 | * Create a stream for each APIC (attached picture) extracted from the |
| 168 | * ID3v2 header. | 168 | * ID3v2 header. |
| 169 | */ | 169 | */ |
| 170 | int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta **extra_meta); | 170 | int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta *extra_meta); |
| 171 | 171 | ||
| 172 | /** | 172 | /** |
| 173 | * Create chapters for all CHAP tags found in the ID3v2 header. | 173 | * Create chapters for all CHAP tags found in the ID3v2 header. |
| 174 | */ | 174 | */ |
| 175 | int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta **extra_meta); | 175 | int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta *extra_meta); |
| 176 | 176 | ||
| 177 | /** | 177 | /** |
| 178 | * Parse PRIV tags into a dictionary. The PRIV owner is the metadata key. The | 178 | * Parse PRIV tags into a dictionary. The PRIV owner is the metadata key. The |
| 179 | * PRIV data is the value, with non-printable characters escaped. | 179 | * PRIV data is the value, with non-printable characters escaped. |
| 180 | */ | 180 | */ |
| 181 | int ff_id3v2_parse_priv_dict(AVDictionary **d, ID3v2ExtraMeta **extra_meta); | 181 | int ff_id3v2_parse_priv_dict(AVDictionary **d, ID3v2ExtraMeta *extra_meta); |
| 182 | 182 | ||
| 183 | /** | 183 | /** |
| 184 | * Add metadata for all PRIV tags in the ID3v2 header. The PRIV owner is the | 184 | * Add metadata for all PRIV tags in the ID3v2 header. The PRIV owner is the |
| 185 | * metadata key. The PRIV data is the value, with non-printable characters | 185 | * metadata key. The PRIV data is the value, with non-printable characters |
| 186 | * escaped. | 186 | * escaped. |
| 187 | */ | 187 | */ |
| 188 | int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta **extra_meta); | 188 | int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta *extra_meta); |
| 189 | 189 | ||
| 190 | extern const AVMetadataConv ff_id3v2_34_metadata_conv[]; | 190 | extern const AVMetadataConv ff_id3v2_34_metadata_conv[]; |
| 191 | extern const AVMetadataConv ff_id3v2_4_metadata_conv[]; | 191 | extern const AVMetadataConv ff_id3v2_4_metadata_conv[]; |
| @@ -312,8 +312,8 @@ static int parse_dsd_prop(AVFormatContext *s, AVStream *st, uint64_t eof) · 311 unmodified lines | |||
| 312 | id3v2_extra_meta = NULL; | 312 | id3v2_extra_meta = NULL; |
| 313 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, size); | 313 | ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, size); |
| 314 | if (id3v2_extra_meta) { | 314 | if (id3v2_extra_meta) { |
| 315 | if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0 || | 315 | if ((ret = ff_id3v2_parse_apic(s, id3v2_extra_meta)) < 0 || |
| 316 | (ret = ff_id3v2_parse_chapters(s, &id3v2_extra_meta)) < 0) { | 316 | (ret = ff_id3v2_parse_chapters(s, id3v2_extra_meta)) < 0) { |
| 317 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); | 317 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); |
| 318 | return ret; | 318 | return ret; |
| 319 | } | 319 | } |
| @@ -396,7 +396,7 @@ static int oma_read_header(AVFormatContext *s) · 395 unmodified lines | |||
| 396 | OMAContext *oc = s->priv_data; | 396 | OMAContext *oc = s->priv_data; |
| 397 | 397 | ||
| 398 | ff_id3v2_read(s, ID3v2_EA3_MAGIC, &extra_meta, 0); | 398 | ff_id3v2_read(s, ID3v2_EA3_MAGIC, &extra_meta, 0); |
| 399 | if ((ret = ff_id3v2_parse_chapters(s, &extra_meta)) < 0) { | 399 | if ((ret = ff_id3v2_parse_chapters(s, extra_meta)) < 0) { |
| 400 | ff_id3v2_free_extra_meta(&extra_meta); | 400 | ff_id3v2_free_extra_meta(&extra_meta); |
| 401 | return ret; | 401 | return ret; |
| 402 | } | 402 | } |
| @@ -638,11 +638,11 @@ FF_ENABLE_DEPRECATION_WARNINGS · 637 unmodified lines | |||
| 638 | if (id3v2_extra_meta) { | 638 | if (id3v2_extra_meta) { |
| 639 | if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") || | 639 | if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") || |
| 640 | !strcmp(s->iformat->name, "tta") || !strcmp(s->iformat->name, "wav")) { | 640 | !strcmp(s->iformat->name, "tta") || !strcmp(s->iformat->name, "wav")) { |
| 641 | if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0) | 641 | if ((ret = ff_id3v2_parse_apic(s, id3v2_extra_meta)) < 0) |
| 642 | goto close; | 642 | goto close; |
| 643 | if ((ret = ff_id3v2_parse_chapters(s, &id3v2_extra_meta)) < 0) | 643 | if ((ret = ff_id3v2_parse_chapters(s, id3v2_extra_meta)) < 0) |
| 644 | goto close; | 644 | goto close; |
| 645 | if ((ret = ff_id3v2_parse_priv(s, &id3v2_extra_meta)) < 0) | 645 | if ((ret = ff_id3v2_parse_priv(s, id3v2_extra_meta)) < 0) |
| 646 | goto close; | 646 | goto close; |
| 647 | } else | 647 | } else |
| 648 | av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n"); | 648 | av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n"); |
| @@ -507,9 +507,9 @@ static int wav_read_header(AVFormatContext *s) · 506 unmodified lines | |||
| 507 | ID3v2ExtraMeta *id3v2_extra_meta = NULL; | 507 | ID3v2ExtraMeta *id3v2_extra_meta = NULL; |
| 508 | ff_id3v2_read_dict(pb, &s->internal->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); | 508 | ff_id3v2_read_dict(pb, &s->internal->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); |
| 509 | if (id3v2_extra_meta) { | 509 | if (id3v2_extra_meta) { |
| 510 | ff_id3v2_parse_apic(s, &id3v2_extra_meta); | 510 | ff_id3v2_parse_apic(s, id3v2_extra_meta); |
| 511 | ff_id3v2_parse_chapters(s, &id3v2_extra_meta); | 511 | ff_id3v2_parse_chapters(s, id3v2_extra_meta); |
| 512 | ff_id3v2_parse_priv(s, &id3v2_extra_meta); | 512 | ff_id3v2_parse_priv(s, id3v2_extra_meta); |
| 513 | } | 513 | } |
| 514 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); | 514 | ff_id3v2_free_extra_meta(&id3v2_extra_meta); |
| 515 | } | 515 | } |