Ejemplo n.º 1
0
int quicktime_close(quicktime_t *file)
{
	int result;
	if(file->wr)
	{
		quicktime_write_mdat(file, &(file->mdat));
		quicktime_write_moov(file, &(file->moov));
	}
	result = fclose(file->stream);

	quicktime_delete(file);
	free(file);
	return result;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
0
int quicktime_check_sig(char *path)
{
	quicktime_t file;
	quicktime_atom_t leaf_atom;
	int result = 0, result1 = 0, result2 = 0;
	char avi_test[12];

	quicktime_init(&file);
	result = quicktime_file_open(&file, path, 1, 0);

	if(!result)
	{
// Check for Microsoft AVI
		quicktime_read_data(&file, avi_test, 12);
		quicktime_set_position(&file, 0);
		if(quicktime_match_32(avi_test, "RIFF") && 
			quicktime_match_32(avi_test + 8, "AVI "))
		{
			result2 = 1;
		}
		else
		{
			do
			{
				result1 = quicktime_atom_read_header(&file, &leaf_atom);

				if(!result1)
				{
/* just want the "moov" atom */
					if(quicktime_atom_is(&leaf_atom, "moov"))
					{
						result2 = 1;
					}
					else
						quicktime_atom_skip(&file, &leaf_atom);
				}
			}while(!result1 && !result2 && quicktime_position(&file) < file.total_length);
		}
	}

//printf(__FUNCTION__ " 2 %d\n", result2);
	quicktime_file_close(&file);
	quicktime_delete(&file);
	return result2;
}
Ejemplo n.º 4
0
int quicktime_check_sig(const char *path)
{
	quicktime_t file;
	quicktime_atom_t leaf_atom;
	int result1 = 0, result2 = 0;

	quicktime_init(&file);
	if(!(file.stream = fopen(path, "rb"))) 
	{
		perror("quicktime_check_sig");
		return 0;
	}

	fseek(file.stream, 0, SEEK_END);
	file.total_length = ftell(file.stream);
	fseek(file.stream, 0, SEEK_SET);

	do
	{
		result1 = quicktime_atom_read_header(&file, &leaf_atom);

		if(!result1)
		{
/* just want the "moov" atom */
			if(quicktime_atom_is(&leaf_atom, "moov"))
			{
				result2 = 1;
			}
			else
				quicktime_atom_skip(&file, &leaf_atom);
		}
	}while(!result1 && !result2 && quicktime_position(&file) < file.total_length);

	fclose(file.stream);

	quicktime_delete(&file);
	return result2;
}
Ejemplo n.º 5
0
int quicktime_destroy(quicktime_t *file)
{
	quicktime_delete(file);
	free(file);
	return 0;
}