+ // FIXME: Remove the following once libaom starts propagating extradata during init()
+ // See https://bugs.chromium.org/p/aomedia/issues/detail?id=2012
+ case AV_CODEC_ID_AV1:
+ if (side_data_size && (s->pb->seekable & AVIO_SEEKABLE_NORMAL) && !mkv->is_live &&
+ !par->extradata_size) {
+ AVIOContext *dyn_cp;
+ uint8_t *codecpriv;
+ int codecpriv_size;
+ int64_t curpos;
+ ret = avio_open_dyn_buf(&dyn_cp);
+ if (ret < 0)
+ return ret;
+ ff_isom_write_av1c(dyn_cp, side_data, side_data_size);
+ codecpriv_size = avio_close_dyn_buf(dyn_cp, &codecpriv);
+ if (!codecpriv_size) {
+ av_free(codecpriv);
+ return AVERROR_INVALIDDATA;
+ }
+ curpos = avio_tell(mkv->tracks_bc);
+ avio_seek(mkv->tracks_bc, track->codecpriv_offset, SEEK_SET);
+ // Do not write the OBUs as we don't have space saved for them
+ put_ebml_binary(mkv->tracks_bc, MATROSKA_ID_CODECPRIVATE, codecpriv, 4);
+ av_free(codecpriv);
+ avio_seek(mkv->tracks_bc, curpos, SEEK_SET);
+ ret = ff_alloc_extradata(par, side_data_size);
+ if (ret < 0)
+ return ret;
+ memcpy(par->extradata, side_data, side_data_size);
+ } else if (!par->extradata_size)
+ return AVERROR_INVALIDDATA;
+ break;