Mercurial > libavformat.hg
changeset 657:5b9575f5b6e8 libavformat
mov header field and compressor name patch by Roine Gustafsson <roine AT users DOT sourceforge DOT net>
author | mmu_man |
---|---|
date | Wed, 26 Jan 2005 09:31:49 +0000 |
parents | 0d700094e887 |
children | 0624def73c76 |
files | mov.c movenc.c |
diffstat | 2 files changed, 24 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/mov.c Sun Jan 23 21:54:07 2005 +0000 +++ b/mov.c Wed Jan 26 09:31:49 2005 +0000 @@ -773,6 +773,7 @@ //MOVStreamContext *sc = (MOVStreamContext *)st->priv_data; int entries, frames_per_sample; uint32_t format; + uint8_t codec_name[32]; /* for palette traversal */ int color_depth; @@ -845,7 +846,11 @@ #ifdef DEBUG av_log(NULL, AV_LOG_DEBUG, "frames/samples = %d\n", frames_per_sample); #endif - get_buffer(pb, (uint8_t *)st->codec.codec_name, 32); /* codec name */ + get_buffer(pb, codec_name, 32); /* codec name, pascal string (FIXME: true for mp4?) */ + if (codec_name[0] <= 31) { + memcpy(st->codec.codec_name, &codec_name[1],codec_name[0]); + st->codec.codec_name[codec_name[0]] = 0; + } st->codec.bits_per_sample = get_be16(pb); /* depth */ st->codec.color_table_id = get_be16(pb); /* colortable id */
--- a/movenc.c Sun Jan 23 21:54:07 2005 +0000 +++ b/movenc.c Wed Jan 26 09:31:49 2005 +0000 @@ -451,6 +451,7 @@ static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track) { int pos = url_ftell(pb); + char compressor_name[32]; int tag; put_be32(pb, 0); /* size */ @@ -467,25 +468,28 @@ put_be16(pb, 0); /* Reserved */ put_be16(pb, 1); /* Data-reference index */ - put_be32(pb, 0); /* Reserved (= 02000c) */ - put_be32(pb, 0); /* Reserved ("SVis")*/ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved (400)*/ + put_be16(pb, 0); /* Codec stream version */ + put_be16(pb, 0); /* Codec stream revision (=0) */ + put_tag(pb, "FFMP"); /* Vendor */ + if(track->enc->codec_id == CODEC_ID_RAWVIDEO) { + put_be32(pb, 0); /* Temporal Quality */ + put_be32(pb, 0x400); /* Spatial Quality = lossless*/ + } else { + put_be32(pb, 0x200); /* Temporal Quality = normal */ + put_be32(pb, 0x200); /* Spatial Quality = normal */ + } put_be16(pb, track->enc->width); /* Video width */ put_be16(pb, track->enc->height); /* Video height */ - put_be32(pb, 0x00480000); /* Reserved */ - put_be32(pb, 0x00480000); /* Reserved */ + put_be32(pb, 0x00480000); /* Horizontal resolution 72dpi */ + put_be32(pb, 0x00480000); /* Vertical resolution 72dpi */ put_be32(pb, 0); /* Data size (= 0) */ put_be16(pb, 1); /* Frame count (= 1) */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ - put_be32(pb, 0); /* Reserved */ + memset(compressor_name,0,32); + if (track->enc->codec->name) + strncpy(compressor_name,track->enc->codec->name,31); + put_byte(pb, FFMAX(strlen(compressor_name),32) ); + put_buffer(pb, compressor_name, 31); put_be16(pb, 0x18); /* Reserved */ put_be16(pb, 0xffff); /* Reserved */