mirror of https://git.ffmpeg.org/ffmpeg.git
mov header field and compressor name patch by Roine Gustafsson <roine AT users DOT sourceforge DOT net>
Originally committed as revision 3885 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a64a006e95
commit
53ffdd1434
|
@ -773,6 +773,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
||||||
//MOVStreamContext *sc = (MOVStreamContext *)st->priv_data;
|
//MOVStreamContext *sc = (MOVStreamContext *)st->priv_data;
|
||||||
int entries, frames_per_sample;
|
int entries, frames_per_sample;
|
||||||
uint32_t format;
|
uint32_t format;
|
||||||
|
uint8_t codec_name[32];
|
||||||
|
|
||||||
/* for palette traversal */
|
/* for palette traversal */
|
||||||
int color_depth;
|
int color_depth;
|
||||||
|
@ -845,7 +846,11 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
av_log(NULL, AV_LOG_DEBUG, "frames/samples = %d\n", frames_per_sample);
|
av_log(NULL, AV_LOG_DEBUG, "frames/samples = %d\n", frames_per_sample);
|
||||||
#endif
|
#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.bits_per_sample = get_be16(pb); /* depth */
|
||||||
st->codec.color_table_id = get_be16(pb); /* colortable id */
|
st->codec.color_table_id = get_be16(pb); /* colortable id */
|
||||||
|
|
|
@ -451,6 +451,7 @@ const CodecTag codec_movvideo_tags[] = {
|
||||||
static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track)
|
static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track)
|
||||||
{
|
{
|
||||||
int pos = url_ftell(pb);
|
int pos = url_ftell(pb);
|
||||||
|
char compressor_name[32];
|
||||||
int tag;
|
int tag;
|
||||||
|
|
||||||
put_be32(pb, 0); /* size */
|
put_be32(pb, 0); /* size */
|
||||||
|
@ -467,25 +468,28 @@ static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track)
|
||||||
put_be16(pb, 0); /* Reserved */
|
put_be16(pb, 0); /* Reserved */
|
||||||
put_be16(pb, 1); /* Data-reference index */
|
put_be16(pb, 1); /* Data-reference index */
|
||||||
|
|
||||||
put_be32(pb, 0); /* Reserved (= 02000c) */
|
put_be16(pb, 0); /* Codec stream version */
|
||||||
put_be32(pb, 0); /* Reserved ("SVis")*/
|
put_be16(pb, 0); /* Codec stream revision (=0) */
|
||||||
put_be32(pb, 0); /* Reserved */
|
put_tag(pb, "FFMP"); /* Vendor */
|
||||||
put_be32(pb, 0); /* Reserved (400)*/
|
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->width); /* Video width */
|
||||||
put_be16(pb, track->enc->height); /* Video height */
|
put_be16(pb, track->enc->height); /* Video height */
|
||||||
put_be32(pb, 0x00480000); /* Reserved */
|
put_be32(pb, 0x00480000); /* Horizontal resolution 72dpi */
|
||||||
put_be32(pb, 0x00480000); /* Reserved */
|
put_be32(pb, 0x00480000); /* Vertical resolution 72dpi */
|
||||||
put_be32(pb, 0); /* Data size (= 0) */
|
put_be32(pb, 0); /* Data size (= 0) */
|
||||||
put_be16(pb, 1); /* Frame count (= 1) */
|
put_be16(pb, 1); /* Frame count (= 1) */
|
||||||
|
|
||||||
put_be32(pb, 0); /* Reserved */
|
memset(compressor_name,0,32);
|
||||||
put_be32(pb, 0); /* Reserved */
|
if (track->enc->codec->name)
|
||||||
put_be32(pb, 0); /* Reserved */
|
strncpy(compressor_name,track->enc->codec->name,31);
|
||||||
put_be32(pb, 0); /* Reserved */
|
put_byte(pb, FFMAX(strlen(compressor_name),32) );
|
||||||
put_be32(pb, 0); /* Reserved */
|
put_buffer(pb, compressor_name, 31);
|
||||||
put_be32(pb, 0); /* Reserved */
|
|
||||||
put_be32(pb, 0); /* Reserved */
|
|
||||||
put_be32(pb, 0); /* Reserved */
|
|
||||||
|
|
||||||
put_be16(pb, 0x18); /* Reserved */
|
put_be16(pb, 0x18); /* Reserved */
|
||||||
put_be16(pb, 0xffff); /* Reserved */
|
put_be16(pb, 0xffff); /* Reserved */
|
||||||
|
|
Loading…
Reference in New Issue