mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-29 22:40:23 +00:00
avformat/avienc: factor write_odml_master() out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
5440d4b68b
commit
c3a6d179fb
@ -156,6 +156,34 @@ static int avi_write_counters(AVFormatContext *s, int riff_id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void write_odml_master(AVFormatContext *s, int stream_index)
|
||||
{
|
||||
AVIOContext *pb = s->pb;
|
||||
AVStream *st = s->streams[stream_index];
|
||||
AVCodecContext *enc = st->codec;
|
||||
AVIStream *avist = st->priv_data;
|
||||
unsigned char tag[5];
|
||||
int j;
|
||||
|
||||
/* Starting to lay out AVI OpenDML master index.
|
||||
* We want to make it JUNK entry for now, since we'd
|
||||
* like to get away without making AVI an OpenDML one
|
||||
* for compatibility reasons. */
|
||||
avist->indexes.entry = avist->indexes.ents_allocated = 0;
|
||||
avist->indexes.indx_start = ff_start_tag(pb, "JUNK");
|
||||
avio_wl16(pb, 4); /* wLongsPerEntry */
|
||||
avio_w8(pb, 0); /* bIndexSubType (0 == frame index) */
|
||||
avio_w8(pb, 0); /* bIndexType (0 == AVI_INDEX_OF_INDEXES) */
|
||||
avio_wl32(pb, 0); /* nEntriesInUse (will fill out later on) */
|
||||
ffio_wfourcc(pb, avi_stream2fourcc(tag, stream_index, enc->codec_type));
|
||||
/* dwChunkId */
|
||||
avio_wl64(pb, 0); /* dwReserved[3] */
|
||||
// avio_wl32(pb, 0); /* Must be 0. */
|
||||
for (j = 0; j < AVI_MASTER_INDEX_SIZE * 2; j++)
|
||||
avio_wl64(pb, 0);
|
||||
ff_end_tag(pb, avist->indexes.indx_start);
|
||||
}
|
||||
|
||||
static int avi_write_header(AVFormatContext *s)
|
||||
{
|
||||
AVIContext *avi = s->priv_data;
|
||||
@ -365,26 +393,7 @@ static int avi_write_header(AVFormatContext *s)
|
||||
}
|
||||
|
||||
if (pb->seekable) {
|
||||
unsigned char tag[5];
|
||||
int j;
|
||||
|
||||
/* Starting to lay out AVI OpenDML master index.
|
||||
* We want to make it JUNK entry for now, since we'd
|
||||
* like to get away without making AVI an OpenDML one
|
||||
* for compatibility reasons. */
|
||||
avist->indexes.entry = avist->indexes.ents_allocated = 0;
|
||||
avist->indexes.indx_start = ff_start_tag(pb, "JUNK");
|
||||
avio_wl16(pb, 4); /* wLongsPerEntry */
|
||||
avio_w8(pb, 0); /* bIndexSubType (0 == frame index) */
|
||||
avio_w8(pb, 0); /* bIndexType (0 == AVI_INDEX_OF_INDEXES) */
|
||||
avio_wl32(pb, 0); /* nEntriesInUse (will fill out later on) */
|
||||
ffio_wfourcc(pb, avi_stream2fourcc(tag, i, enc->codec_type));
|
||||
/* dwChunkId */
|
||||
avio_wl64(pb, 0); /* dwReserved[3] */
|
||||
// avio_wl32(pb, 0); /* Must be 0. */
|
||||
for (j = 0; j < AVI_MASTER_INDEX_SIZE * 2; j++)
|
||||
avio_wl64(pb, 0);
|
||||
ff_end_tag(pb, avist->indexes.indx_start);
|
||||
write_odml_master(s, i);
|
||||
}
|
||||
|
||||
if (enc->codec_type == AVMEDIA_TYPE_VIDEO &&
|
||||
|
Loading…
Reference in New Issue
Block a user