Beispiel #1
0
void quicktime_write_smhd(quicktime_t *file, quicktime_smhd_t *smhd)
{
	quicktime_atom_t atom;
	quicktime_atom_write_header(file, &atom, "smhd");

	quicktime_write_char(file, smhd->version);
	quicktime_write_int24(file, smhd->flags);
	quicktime_write_int16(file, smhd->balance);
	quicktime_write_int16(file, smhd->reserved);

	quicktime_atom_write_footer(file, &atom);
}
Beispiel #2
0
void quicktime_write_vmhd(quicktime_t *file, quicktime_vmhd_t *vmhd)
{
	quicktime_atom_t atom;
	int i;
	quicktime_atom_write_header(file, &atom, "vmhd");

	quicktime_write_char(file, vmhd->version);
	quicktime_write_int24(file, vmhd->flags);
	quicktime_write_int16(file, vmhd->graphics_mode);
	
	for(i = 0; i < 3; i++)
		quicktime_write_int16(file, vmhd->opcolor[i]);

	quicktime_atom_write_footer(file, &atom);
}
Beispiel #3
0
int quicktime_write_tkhd(quicktime_t *file, quicktime_tkhd_t *tkhd)
{
    quicktime_atom_t atom;
    int i = 0;
    quicktime_atom_write_header(file, &atom, "tkhd");

    quicktime_write_char(file, tkhd->version);
    if (tkhd->flags != 0) {
        quicktime_write_int24(file, 1);
    } else {
        quicktime_write_int24(file, tkhd->flags);
    }
    quicktime_write_int32(file, tkhd->creation_time);
    quicktime_write_int32(file, tkhd->modification_time);
    quicktime_write_int32(file, tkhd->track_id);
    quicktime_write_int32(file, tkhd->reserved1);
    quicktime_write_int32(file, tkhd->duration);

    for (i = 0; i < 3; i++) {
        quicktime_write_int32(file, 0x00000000);
    }
    if (tkhd->is_audio) {
        quicktime_write_int16(file, 0x0100);
    } else {
        quicktime_write_int16(file, 0x0000);
    }
    quicktime_write_int16(file, 0x0000);
    quicktime_write_int32(file, 0x00010000);
    for (i = 0; i < 3; i++) {
        quicktime_write_int32(file, 0x00000000);
    }
    quicktime_write_int32(file, 0x00010000);
    for (i = 0; i < 3; i++) {
        quicktime_write_int32(file, 0x00000000);
    }
    quicktime_write_int32(file, 0x40000000);
    if (tkhd->is_video) {
        quicktime_write_int32(file, 0x01400000);
        quicktime_write_int32(file, 0x00F00000);
    } else {
        quicktime_write_int32(file, 0x00000000);
        quicktime_write_int32(file, 0x00000000);
    }

    quicktime_atom_write_footer(file, &atom);

    return 0;
}
Beispiel #4
0
void quicktime_write_mdhd(quicktime_t *file, quicktime_mdhd_t *mdhd)
{
	quicktime_atom_t atom;
	quicktime_atom_write_header(file, &atom, "mdhd");

	quicktime_write_char(file, mdhd->version);
	quicktime_write_int24(file, mdhd->flags);
	quicktime_write_int32(file, mdhd->creation_time);
	quicktime_write_int32(file, mdhd->modification_time);
	quicktime_write_int32(file, mdhd->time_scale);
	quicktime_write_int32(file, mdhd->duration);
	quicktime_write_int16(file, mdhd->language);
	quicktime_write_int16(file, mdhd->quality);	

	quicktime_atom_write_footer(file, &atom);
}
Beispiel #5
0
int quicktime_write_smhd(quicktime_t *file, quicktime_smhd_t *smhd)
{
	quicktime_atom_t atom;
	quicktime_atom_write_header(file, &atom, "smhd");

	quicktime_write_char(file, smhd->version);
	quicktime_write_int24(file, smhd->flags);

	if (file->use_mp4) {
		quicktime_write_int32(file, 0x00000000);
	} else {
		quicktime_write_int16(file, smhd->balance);
		quicktime_write_int16(file, smhd->reserved);
	}

	quicktime_atom_write_footer(file, &atom);
}
Beispiel #6
0
int quicktime_write_hmhd(quicktime_t *file, quicktime_hmhd_t *hmhd)
{
    quicktime_atom_t atom;

    quicktime_atom_write_header(file, &atom, "hmhd");

    quicktime_write_char(file, hmhd->version);
    quicktime_write_int24(file, hmhd->flags);

    quicktime_write_int16(file, hmhd->maxPDUsize);
    quicktime_write_int16(file, hmhd->avgPDUsize);
    quicktime_write_int32(file, hmhd->maxbitrate);
    quicktime_write_int32(file, hmhd->avgbitrate);
    quicktime_write_int32(file, hmhd->slidingavgbitrate);

    quicktime_atom_write_footer(file, &atom);

    return 0;
}
Beispiel #7
0
int quicktime_write_mvhd(quicktime_t *file, quicktime_mvhd_t *mvhd)
{
    quicktime_atom_t atom;
    int i = 0;
    quicktime_atom_write_header(file, &atom, "mvhd");

    quicktime_write_char(file, mvhd->version);
    quicktime_write_int24(file, mvhd->flags);
    quicktime_write_int32(file, mvhd->creation_time);
    quicktime_write_int32(file, mvhd->modification_time);
    quicktime_write_int32(file, mvhd->time_scale);
    quicktime_write_int32(file, mvhd->duration);

    quicktime_write_int32(file, 0x00010000);
    quicktime_write_int16(file, 0x0100);
    quicktime_write_int16(file, 0x0000);
    quicktime_write_int32(file, 0x00000000);
    quicktime_write_int32(file, 0x00000000);
    quicktime_write_int32(file, 0x00010000);
    for (i = 0; i < 3; i++) 
    {
        quicktime_write_int32(file, 0x00000000);
    }
    quicktime_write_int32(file, 0x00010000);
    for (i = 0; i < 3; i++) 
    {
        quicktime_write_int32(file, 0x00000000);
    }
    quicktime_write_int32(file, 0x40000000);
    for (i = 0; i < 6; i++) 
    {
        quicktime_write_int32(file, 0x00000000);
    }


    quicktime_write_int32(file, mvhd->next_track_id);

    quicktime_atom_write_footer(file, &atom);

    return 0;
}
Beispiel #8
0
void quicktime_write_tkhd(quicktime_t *file, quicktime_tkhd_t *tkhd)
{
	quicktime_atom_t atom;
	quicktime_atom_write_header(file, &atom, "tkhd");
	quicktime_write_char(file, tkhd->version);
	quicktime_write_int24(file, tkhd->flags);
	quicktime_write_int32(file, tkhd->creation_time);
	quicktime_write_int32(file, tkhd->modification_time);
	quicktime_write_int32(file, tkhd->track_id);
	quicktime_write_int32(file, tkhd->reserved1);
	quicktime_write_int32(file, tkhd->duration);
	quicktime_write_data(file, tkhd->reserved2, 8);
	quicktime_write_int16(file, tkhd->layer);
	quicktime_write_int16(file, tkhd->alternate_group);
	quicktime_write_fixed16(file, tkhd->volume);
	quicktime_write_int16(file, tkhd->reserved3);
	quicktime_write_matrix(file, &(tkhd->matrix));
 	quicktime_write_fixed32(file, tkhd->track_width);
 	quicktime_write_fixed32(file, tkhd->track_height);
	quicktime_atom_write_footer(file, &atom);
}
Beispiel #9
0
void quicktime_write_stsd_table(quicktime_t *file, quicktime_minf_t *minf, quicktime_stsd_table_t *table)
{
	quicktime_atom_t atom;
	quicktime_atom_write_header(file, &atom, table->format);
/*printf("quicktime_write_stsd_table %c%c%c%c\n", table->format[0], table->format[1], table->format[2], table->format[3]); */
	quicktime_write_data(file, table->reserved, 6);
	quicktime_write_int16(file, table->data_reference);
	
	if(minf->is_audio) quicktime_write_stsd_audio(file, table);
	if(minf->is_video) quicktime_write_stsd_video(file, table);

	quicktime_atom_write_footer(file, &atom);
}
Beispiel #10
0
int quicktime_write_esds_common(quicktime_t *file, quicktime_esds_t *esds, int esid, u_int objectType, u_int streamType)
{
    quicktime_atom_t atom;

    if (!file->use_mp4) {
        return 0;
    }

    quicktime_atom_write_header(file, &atom, "esds");

    quicktime_write_char(file, esds->version);
    quicktime_write_int24(file, esds->flags);

    quicktime_write_char(file, 0x03);	/* ES_DescrTag */
    quicktime_write_mp4_descr_length(file,
                                     3 + (5 + (13 + (5 + esds->decoderConfigLen))) + 3, FALSE);

    quicktime_write_int16(file, esid);
    quicktime_write_char(file, 0x10);	/* streamPriorty = 16 (0-31) */

    /* DecoderConfigDescriptor */
    quicktime_write_char(file, 0x04);	/* DecoderConfigDescrTag */
    quicktime_write_mp4_descr_length(file,
                                     13 + (5 + esds->decoderConfigLen), FALSE);

    quicktime_write_char(file, objectType); /* objectTypeIndication */
    quicktime_write_char(file, streamType); /* streamType */

    quicktime_write_int24(file, 0);		/* buffer size */
    quicktime_write_int32(file, 0);		/* max bitrate */
    quicktime_write_int32(file, 0);		/* average bitrate */

    quicktime_write_char(file, 0x05);	/* DecSpecificInfoTag */
    quicktime_write_mp4_descr_length(file, esds->decoderConfigLen, FALSE);
    quicktime_write_data(file, esds->decoderConfig, esds->decoderConfigLen);

    /* SLConfigDescriptor */
    quicktime_write_char(file, 0x06);	/* SLConfigDescrTag */
    quicktime_write_char(file, 0x01);	/* length */
    quicktime_write_char(file, 0x02);	/* constant in mp4 files */

    /* no IPI_DescrPointer */
    /* no IP_IdentificationDataSet */
    /* no IPMP_DescriptorPointer */
    /* no LanguageDescriptor */
    /* no QoS_Descriptor */
    /* no RegistrationDescriptor */
    /* no ExtensionDescriptor */

    quicktime_atom_write_footer(file, &atom);
}
Beispiel #11
0
int quicktime_write_tkhd(quicktime_t *file, quicktime_tkhd_t *tkhd)
{
	quicktime_atom_t atom;
	quicktime_atom_write_header(file, &atom, "tkhd");

	quicktime_write_char(file, tkhd->version);
	quicktime_write_int24(file, tkhd->flags);
	quicktime_write_int32(file, tkhd->creation_time);
	quicktime_write_int32(file, tkhd->modification_time);
	quicktime_write_int32(file, tkhd->track_id);
	quicktime_write_int32(file, tkhd->reserved1);
	quicktime_write_int32(file, tkhd->duration);

	if (file->use_mp4) {
		int i;
		for (i = 0; i < 3; i++) {
			quicktime_write_int32(file, 0x00000000);
		}
		if (tkhd->is_audio) {
			quicktime_write_int16(file, 0x0100);
		} else {
			quicktime_write_int16(file, 0x0000);
		}
		quicktime_write_int16(file, 0x0000);
		quicktime_write_int32(file, 0x00010000);
		for (i = 0; i < 3; i++) {
			quicktime_write_int32(file, 0x00000000);
		}
		quicktime_write_int32(file, 0x00010000);
		for (i = 0; i < 3; i++) {
			quicktime_write_int32(file, 0x00000000);
		}
		quicktime_write_int32(file, 0x40000000);
		if (tkhd->is_video) {
			quicktime_write_int32(file, 0x01400000);
			quicktime_write_int32(file, 0x00F00000);
		} else {
			quicktime_write_int32(file, 0x00000000);
			quicktime_write_int32(file, 0x00000000);
		}
	} else {
		quicktime_write_data(file, tkhd->reserved2, 8);
		quicktime_write_int16(file, tkhd->layer);
		quicktime_write_int16(file, tkhd->alternate_group);
		quicktime_write_fixed16(file, tkhd->volume);
		quicktime_write_int16(file, tkhd->reserved3);
		quicktime_write_matrix(file, &(tkhd->matrix));
		quicktime_write_fixed32(file, tkhd->track_width);
		quicktime_write_fixed32(file, tkhd->track_height);
	}

	quicktime_atom_write_footer(file, &atom);
}
Beispiel #12
0
void quicktime_write_stsd_video(quicktime_t *file, quicktime_stsd_table_t *table)
{
	quicktime_write_int16(file, table->version);
	quicktime_write_int16(file, table->revision);
	quicktime_write_data(file, table->vendor, 4);
	quicktime_write_int32(file, table->temporal_quality);
	quicktime_write_int32(file, table->spatial_quality);
	quicktime_write_int16(file, table->width);
	quicktime_write_int16(file, table->height);
	quicktime_write_fixed32(file, table->dpi_horizontal);
	quicktime_write_fixed32(file, table->dpi_vertical);
	quicktime_write_int32(file, table->data_size);
	quicktime_write_int16(file, table->frames_per_sample);
	quicktime_write_char(file, strlen(table->compressor_name));
	quicktime_write_data(file, table->compressor_name, 31);
	quicktime_write_int16(file, table->depth);
	quicktime_write_int16(file, table->ctab_id);


// Write field order for mjpa
	if(table->fields)
	{
		quicktime_atom_t atom;

		quicktime_atom_write_header(file, &atom, "fiel");
		quicktime_write_char(file, table->fields);
		quicktime_write_char(file, table->field_dominance);
		quicktime_atom_write_footer(file, &atom);
	}

// Write header for mp4v
	if(table->esds.mpeg4_header_size && table->esds.mpeg4_header)
	{
		quicktime_write_esds(file, &table->esds, 1, 0);
	}

	if(table->avcc.data_size)
	{
		quicktime_write_avcc(file, &table->avcc);
	}

// Write another 32 bits
	if(table->version == 1)
		quicktime_write_int32(file, 0x0);
}
void quicktime_write_stsd_audio(quicktime_t *file, quicktime_stsd_table_t *table)
{
    quicktime_write_int16(file, table->version);
    quicktime_write_int16(file, table->revision);
    quicktime_write_data(file, table->vendor, 4);
    quicktime_write_int16(file, table->channels);
    quicktime_write_int16(file, table->sample_size);

    quicktime_write_int16(file, table->compression_id);
    quicktime_write_int16(file, table->packet_size);
    quicktime_write_fixed32(file, table->sample_rate);

// Write header for mp4a
    if(table->esds.mpeg4_header_size && table->esds.mpeg4_header)
    {
// Android requires leaving out the WAVE header
#if 0
// Version 1 info
        quicktime_write_int32(file, 0);
        quicktime_write_int32(file, 0);
        quicktime_write_int32(file, 0);
        quicktime_write_int32(file, 0);

        quicktime_atom_t wave_atom;
        quicktime_atom_t frma_atom;
        quicktime_atom_t mp4a_atom;
        quicktime_atom_write_header(file, &wave_atom, "wave");

        quicktime_atom_write_header(file, &frma_atom, "frma");
        quicktime_write_data(file, "mp4a", 4);
        quicktime_atom_write_footer(file, &frma_atom);

        quicktime_atom_write_header(file, &mp4a_atom, "mp4a");
        quicktime_write_int32(file, 0x0);
        quicktime_atom_write_footer(file, &mp4a_atom);
#endif // 0

        quicktime_write_esds(file, &table->esds, 0, 1);
//		quicktime_atom_write_footer(file, &wave_atom);
    }
}