Esempio n. 1
0
quicktime_t* quicktime_open(char *filename, int rd, int wr)
{
	quicktime_t *new_file = calloc(1, sizeof(quicktime_t));
	int result = 0;

//printf("quicktime_open 1\n");
	quicktime_init(new_file);
	new_file->wr = wr;
	new_file->rd = rd;
	new_file->mdat.atom.start = 0;

	result = quicktime_file_open(new_file, filename, rd, wr);

	if(!result)
	{
		if(rd)
		{
			if(quicktime_read_info(new_file))
			{
				quicktime_close(new_file);
				fprintf(stderr, "quicktime_open: error in header\n");
				new_file = 0;
			}
		}

/* start the data atom */
/* also don't want to do this if making a streamable file */
		if(wr)
		{
			quicktime_set_presave(new_file, 1);




// android requires the ftyp header
			const unsigned char ftyp_data[] =
			{
				0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70,
				0x6d, 0x70, 0x34, 0x32, 0x00, 0x00, 0x00, 0x01,
				0x6d, 0x70, 0x34, 0x32, 0x61, 0x76, 0x63, 0x31
			};
			quicktime_write_data(new_file, (char*)ftyp_data, sizeof(ftyp_data));

			quicktime_atom_write_header64(new_file,
				&new_file->mdat.atom,
				"mdat");
			quicktime_set_presave(new_file, 0);
		}
	}
	else
	{
//printf("quicktime_open 10\n");
		quicktime_close(new_file);
//printf("quicktime_open 100\n");
		new_file = 0;
	}


	return new_file;
}
Esempio n. 2
0
quicktime_t* quicktime_open(char *filename, int rd, int wr)
{
	quicktime_t *new_file = calloc(1, sizeof(quicktime_t));
	char flags[10];
	int result = 0;

//printf("quicktime_open 1\n");
	quicktime_init(new_file);
	new_file->wr = wr;
	new_file->rd = rd;
	new_file->mdat.atom.start = 0;

	result = quicktime_file_open(new_file, filename, rd, wr);

	if(!result)
	{
		if(rd)
		{
			if(quicktime_read_info(new_file))
			{
				quicktime_close(new_file);
				fprintf(stderr, "quicktime_open: error in header\n");
				new_file = 0;
			}
		}

/* start the data atom */
/* also don't want to do this if making a streamable file */
		if(wr)
		{
			quicktime_set_presave(new_file, 1);
			quicktime_atom_write_header64(new_file, 
				&new_file->mdat.atom, 
				"mdat");
			quicktime_set_presave(new_file, 0);
		}
	}
	else
	{
//printf("quicktime_open 10\n");
		quicktime_close(new_file);
//printf("quicktime_open 100\n");
		new_file = 0;
	}


	return new_file;
}
Esempio n. 3
0
int quicktime_close(quicktime_t *file)
{
	int result = 0;
	if(file->wr)
	{
		quicktime_codecs_flush(file);

// Reenable buffer for quick header writing.
		quicktime_set_presave(file, 1);
		if(file->use_avi)
		{
			quicktime_atom_t junk_atom;
			int i;

// Finalize last header
			quicktime_finalize_riff(file, file->riff[file->total_riffs - 1]);

			int64_t position = quicktime_position(file);

// Finalize the odml header
			quicktime_finalize_odml(file, &file->riff[0]->hdrl);

// Finalize super indexes
			quicktime_finalize_indx(file);

// Pad ending
			quicktime_set_position(file, position);
			quicktime_atom_write_header(file, &junk_atom, "JUNK");
			for(i = 0; i < 0x406; i++)
				quicktime_write_int32_le(file, 0);
			quicktime_atom_write_footer(file, &junk_atom);
		}
		else
		{
// Atoms are only written here
			if(file->stream)
			{
				quicktime_write_moov(file, &(file->moov));
				quicktime_atom_write_footer(file, &file->mdat.atom);
			}
		}
	}

	quicktime_file_close(file);

	quicktime_delete(file);
	free(file);
	return result;
}