Commit 721da10a authored by Baptiste Coudurier's avatar Baptiste Coudurier

fix mpeg2 muxing, replace seq header if contained in extradata and key frame does not contain it

Originally committed as revision 12520 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 7b0f4c9a
......@@ -616,7 +616,8 @@ static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track)
mov_write_avcc_tag(pb, track);
if(track->mode == MODE_IPOD)
mov_write_uuid_tag_ipod(pb);
} else if(track->vosLen > 0)
} else if(track->vosLen > 0 &&
track->enc->codec_id != CODEC_ID_MPEG2VIDEO)
mov_write_glbl_tag(pb, track);
return updateSize (pb, pos);
......@@ -1536,6 +1537,7 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
AVCodecContext *enc = trk->enc;
unsigned int samplesInChunk = 0;
int size= pkt->size;
int dump_extradata = 0;
if (url_is_streamed(s->pb)) return 0; /* Can't handle that */
if (!size) return 0; /* Discard 0 sized packets */
......@@ -1581,6 +1583,11 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
trk->vosLen = 640;
trk->vosData = av_malloc(trk->vosLen);
memcpy(trk->vosData, pkt->data, 640);
} else if (enc->codec_id == CODEC_ID_MPEG2VIDEO && trk->vosLen > 4 &&
AV_RB32(trk->vosData) == 0x000001b3 && pkt->flags & PKT_FLAG_KEY &&
pkt->size > 4 && AV_RB32(pkt->data) != 0x000001b3) {
size += trk->vosLen;
dump_extradata = 1;
}
if (!(trk->entry % MOV_INDEX_CLUSTER_SIZE)) {
......@@ -1608,6 +1615,10 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
trk->sampleCount += samplesInChunk;
mov->mdat_size += size;
if (dump_extradata) {
put_buffer(pb, trk->vosData, trk->vosLen);
size -= trk->vosLen;
}
put_buffer(pb, pkt->data, size);
put_flush_packet(pb);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment