> you are not subscribed (with this email address you used here at least > it seems) > Right, apparently the subscription confirmation message went to the junk folder... Anyway, glad this one is now resolved :-) and sorry for the trouble.
> > > > > > > + id = mov_codec_id(st, format); > > > > + st->codec->codec_id = id; > > > > > > doesnt this allow changing the codec id to anything from anything ? > > > this seems potentially risky > > > > > I see options to address this: > > 1. overwrite the codec_id only when it's AV_CODEC_ID_NONE > > 2. (stricter) save the format 4cc (that is loaded in > > ff_mov_read_stsd_entries) to some member of > > MOVStreamContext, and overwrite the codec id only when the format is 'encv' > > or 'enca' > > > > please let me know which one you prefer, and I will update the patch. > > i think the strcter variant sounds more robust > Fixed, updated patch attached. Also added a warning in case the frma atom is ignored because of this. Pasting here the diff between this new patch and the previous one (if it helps): diff --git a/libavformat/isom.h b/libavformat/isom.h index 3b0230a..a5ca21b 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -170,6 +170,7 @@ typedef struct MOVStreamContext { int64_t duration_for_fps; int32_t *display_matrix; + uint32_t format; struct { int use_subsamples; diff --git a/libavformat/mov.c b/libavformat/mov.c index 728d8b0..94005cb 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2227,6 +2227,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) sc->pseudo_stream_id = st->codec->codec_tag ? -1 : pseudo_stream_id; sc->dref_id= dref_id; + sc->format = format; id = mov_codec_id(st, format); @@ -4011,15 +4012,30 @@ static int mov_read_free(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_frma(MOVContext *c, AVIOContext *pb, MOVAtom atom) { uint32_t format = avio_rl32(pb); + MOVStreamContext *sc; enum AVCodecID id; AVStream *st; if (c->fc->nb_streams < 1) return 0; st = c->fc->streams[c->fc->nb_streams - 1]; + sc = st->priv_data; + + switch (sc->format) + { + case MKTAG('e','n','c','v'): // encrypted video + case MKTAG('e','n','c','a'): // encrypted audio + id = mov_codec_id(st, format); + st->codec->codec_id = id; + sc->format = format; + break; - id = mov_codec_id(st, format); - st->codec->codec_id = id; + default: + av_log(c->fc, AV_LOG_WARNING, + "ignoring 'frma' atom of '%.4s', stream format is '%.4s'\n", + (char*)&format, (char*)&sc->format); + break; return 0; } Thanks Eran
0001-mov-support-cenc-common-encryption.patch
Description: 0001-mov-support-cenc-common-encryption.patch
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel