You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avformat/mov: move AVC-Intra extradata generation to earlier in the stsd parsing process
This will ensure it will be stored in the stream's private context, so it can
be fetched and replaced as required.
Fixes a regression since eefa6de7d5
.
Fixes avc-intra-panasonic-AG-HPX301E.mov
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@ -3028,6 +3028,27 @@ static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mov_finalize_stsd_entry(MOVContext *c, AVStream *st)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* special codec parameters handling */
|
||||||
|
switch (st->codecpar->codec_id) {
|
||||||
|
case AV_CODEC_ID_H264:
|
||||||
|
// done for ai5q, ai52, ai55, ai1q, ai12 and ai15.
|
||||||
|
if (!st->codecpar->extradata_size && TAG_IS_AVCI(st->codecpar->codec_tag)) {
|
||||||
|
ret = ff_generate_avci_extradata(st);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
|
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
@ -3105,6 +3126,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
|
|||||||
} else if (a.size > 0)
|
} else if (a.size > 0)
|
||||||
avio_skip(pb, a.size);
|
avio_skip(pb, a.size);
|
||||||
|
|
||||||
|
ret = mov_finalize_stsd_entry(c, st);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
if (sc->extradata && st->codecpar->extradata) {
|
if (sc->extradata && st->codecpar->extradata) {
|
||||||
int extra_size = st->codecpar->extradata_size;
|
int extra_size = st->codecpar->extradata_size;
|
||||||
|
|
||||||
@ -5216,14 +5241,6 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// done for ai5q, ai52, ai55, ai1q, ai12 and ai15.
|
|
||||||
if (!st->codecpar->extradata_size && st->codecpar->codec_id == AV_CODEC_ID_H264 &&
|
|
||||||
TAG_IS_AVCI(st->codecpar->codec_tag)) {
|
|
||||||
ret = ff_generate_avci_extradata(st);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (st->codecpar->codec_id) {
|
switch (st->codecpar->codec_id) {
|
||||||
case AV_CODEC_ID_H261:
|
case AV_CODEC_ID_H261:
|
||||||
case AV_CODEC_ID_H263:
|
case AV_CODEC_ID_H263:
|
||||||
|
Reference in New Issue
Block a user