summaryrefslogtreecommitdiff
path: root/libavformat/gxfenc.c
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2009-03-08 22:23:44 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2009-03-08 22:23:44 +0000
commit33605366eecab77a374c00ba0be0a8fc05da11c9 (patch)
treeffaabce77b6fb5a526150acdec026aad5a86202d /libavformat/gxfenc.c
parentcd34fd9c8cf6a7e9729c18997cb13a26a5a218a2 (diff)
compute media info in write_header
Originally committed as revision 17889 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/gxfenc.c')
-rw-r--r--libavformat/gxfenc.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/libavformat/gxfenc.c b/libavformat/gxfenc.c
index 9dcbaf2643..142342239f 100644
--- a/libavformat/gxfenc.c
+++ b/libavformat/gxfenc.c
@@ -416,26 +416,11 @@ static int gxf_write_umf_track_description(AVFormatContext *s)
ByteIOContext *pb = s->pb;
GXFContext *gxf = s->priv_data;
int64_t pos = url_ftell(pb);
- int tracks[255]={0};
int i;
gxf->umf_track_offset = pos - gxf->umf_start_offset;
for (i = 0; i < s->nb_streams; ++i) {
- AVStream *st = s->streams[i];
- GXFStreamContext *sc = st->priv_data;
- int id = 0;
-
- switch (st->codec->codec_id) {
- case CODEC_ID_MPEG1VIDEO: id= 'L'; break;
- case CODEC_ID_MPEG2VIDEO: id= 'M'; break;
- case CODEC_ID_PCM_S16LE: id= 'A'; break;
- case CODEC_ID_DVVIDEO: id= sc->track_type == 6 ? 'E' : 'D'; break;
- case CODEC_ID_MJPEG: id= 'V'; break;
- default: break;
- }
- sc->media_info= id << 8;
- /* FIXME first 10 audio tracks are 0 to 9 next 22 are A to V */
- sc->media_info |= '0' + (tracks[id]++);
+ GXFStreamContext *sc = s->streams[i]->priv_data;
put_le16(pb, sc->media_info);
put_le16(pb, 1);
}
@@ -593,7 +578,8 @@ static int gxf_write_header(AVFormatContext *s)
{
ByteIOContext *pb = s->pb;
GXFContext *gxf = s->priv_data;
- int i;
+ uint8_t tracks[255] = {0};
+ int i, media_info = 0;
gxf->flags |= 0x00080000; /* material is simple clip */
for (i = 0; i < s->nb_streams; ++i) {
@@ -626,6 +612,7 @@ static int gxf_write_header(AVFormatContext *s)
sc->fields = -2;
gxf->audio_tracks++;
gxf->flags |= 0x04000000; /* audio is 16 bit pcm */
+ media_info = 'A';
} else if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
/* FIXME check from time_base ? */
if (st->codec->height == 480 || st->codec->height == 512) { /* NTSC or NTSC+VBI */
@@ -645,20 +632,33 @@ static int gxf_write_header(AVFormatContext *s)
sc->sample_size = st->codec->bit_rate;
sc->fields = 2; /* interlaced */
switch (st->codec->codec_id) {
+ case CODEC_ID_MJPEG:
+ sc->track_type = 1;
+ gxf->flags |= 0x00004000;
+ media_info = 'J';
+ break;
+ case CODEC_ID_MPEG1VIDEO:
+ sc->track_type = 9;
+ gxf->mpeg_tracks++;
+ media_info = 'L';
+ break;
case CODEC_ID_MPEG2VIDEO:
sc->first_gop_closed = -1;
sc->track_type = 4;
gxf->mpeg_tracks++;
gxf->flags |= 0x00008000;
+ media_info = 'M';
break;
case CODEC_ID_DVVIDEO:
if (st->codec->pix_fmt == PIX_FMT_YUV422P) {
sc->media_type += 2;
sc->track_type = 6;
gxf->flags |= 0x00002000;
+ media_info = 'E';
} else {
sc->track_type = 5;
gxf->flags |= 0x00001000;
+ media_info = 'D';
}
break;
default:
@@ -666,6 +666,8 @@ static int gxf_write_header(AVFormatContext *s)
return -1;
}
}
+ /* FIXME first 10 audio tracks are 0 to 9 next 22 are A to V */
+ sc->media_info = media_info<<8 | ('0'+tracks[media_info]++);
}
if (ff_audio_interleave_init(s, GXF_samples_per_frame, (AVRational){ 1, 48000 }) < 0)