Ejemplo n.º 1
0
static void flush_movie()
{
	fseek(Movie.File, 0, SEEK_SET);
	write_movie_header(Movie.File, &Movie);
	fseek(Movie.File, Movie.ControllerDataOffset, SEEK_SET);
	fwrite(Movie.InputBuffer, 1, Movie.BytesPerFrame*(Movie.MaxFrame+1), Movie.File);
}
Ejemplo n.º 2
0
int S9xMovieCreate (const char* filename, uint8 controllers_mask, uint8 opts, const wchar_t* metadata, int metadata_length)
{
	FILE* fd;
	STREAM stream;
	int fn;

   return FILE_NOT_FOUND;
#if 0

	if(controllers_mask==0)
		return WRONG_FORMAT;

	if(!(fd=fopen(filename, "wb")))
		return FILE_NOT_FOUND;

	// stop current movie before opening
	change_state(MOVIE_STATE_NONE);

	if(metadata_length>MOVIE_MAX_METADATA)
	{
		metadata_length=MOVIE_MAX_METADATA;
	}

	Movie.MovieId=(uint32)time(NULL);
	Movie.RerecordCount=0;
	Movie.MaxFrame=0;
	Movie.SaveStateOffset=SMV_HEADER_SIZE+(sizeof(uint16)*metadata_length);
	Movie.ControllerDataOffset=0;
	Movie.ControllersMask=controllers_mask;
	Movie.Opts=opts;
	if(Settings.PAL)
	{
		Movie.Opts |= MOVIE_OPT_PAL;
	}
	else
	{
		Movie.Opts &= ~MOVIE_OPT_PAL;
	}

	write_movie_header(fd, &Movie);

	// convert wchar_t metadata string/array to a uint16 array
	if(metadata_length>0)
	{
		uint8 meta_buf[MOVIE_MAX_METADATA * sizeof(uint16)];
		int i;

		for(i=0; i<metadata_length; ++i)
		{
			uint16 c=(uint16)metadata[i];
			meta_buf[i+i]  =(uint8)(c&0xff);
			meta_buf[i+i+1]=(uint8)((c>>8)&0xff);
		}

		fwrite(meta_buf, sizeof(uint16), metadata_length, fd);
	}
Ejemplo n.º 3
0
static void flush_movie()
{
	if(!Movie.File)
		return;

	fseek(Movie.File, 0, SEEK_SET);
	write_movie_header(Movie.File, &Movie);
	fseek(Movie.File, Movie.ControllerDataOffset, SEEK_SET);
	fwrite(Movie.InputBuffer, 1, Movie.BytesPerSample*(Movie.MaxSample+1), Movie.File);
	assert(!ferror(Movie.File));
}
Ejemplo n.º 4
0
static void flush_movie()
{
	if(!Movie.File)
		return;

	if((Movie.SyncFlags & MOVIE_SYNC_HASROMINFO) == 0) // if we have to insert the ROM info into a movie made by a previous version
	{
		fseek(Movie.File, 0, SEEK_END);
		long oldFileSize = (uint32)ftell(Movie.File);

		// copy whole movie into temporary memory
		char * tempFile = (char*)malloc(sizeof(char)*oldFileSize);
		fseek(Movie.File, 0, SEEK_SET);
		fread(tempFile, 1, oldFileSize, Movie.File);

		// write back part of the movie offset by SMV_EXTRAROMINFO_SIZE
		fseek(Movie.File, Movie.SaveStateOffset + SMV_EXTRAROMINFO_SIZE, SEEK_SET);
		fwrite(tempFile + Movie.SaveStateOffset, 1, oldFileSize - Movie.SaveStateOffset, Movie.File);

		// free the temporary movie in memory
		free(tempFile);

		// update flags and offset amounts
		Movie.SyncFlags |= MOVIE_SYNC_HASROMINFO;
		Movie.SaveStateOffset += SMV_EXTRAROMINFO_SIZE;
		Movie.ControllerDataOffset += SMV_EXTRAROMINFO_SIZE;

		// write the extra rom info into the newly inserted space in the file between the metadata and the save data
		fseek(Movie.File, Movie.SaveStateOffset - SMV_EXTRAROMINFO_SIZE, SEEK_SET);
		write_movie_extrarominfo(Movie.File, &Movie);
	}

	fseek(Movie.File, 0, SEEK_SET);
	write_movie_header(Movie.File, &Movie);
	fseek(Movie.File, Movie.ControllerDataOffset, SEEK_SET);
	fwrite(Movie.InputBuffer, 1, Movie.BytesPerFrame*(Movie.MaxFrame+1), Movie.File);
	assert(!ferror(Movie.File));
}
Ejemplo n.º 5
0
int S9xMovieCreate (const char* filename, uint8 controllers_mask, uint8 opts, const wchar_t* metadata, int metadata_length)
{
	FILE* fd;
	STREAM stream;
	int fn;

	if(controllers_mask==0)
		return WRONG_FORMAT;

	char movie_filename [_MAX_PATH];
#ifdef __WIN32__
	_fullpath(movie_filename, filename, _MAX_PATH);
#else
	strcpy(movie_filename, filename);
#endif

	if(!(fd=fopen(movie_filename, "wb")))
		return FILE_NOT_FOUND;

	const bool8 wasPaused = Settings.Paused;

	// stop current movie before opening
	change_state(MOVIE_STATE_NONE);

	if(metadata_length>MOVIE_MAX_METADATA)
	{
		metadata_length=MOVIE_MAX_METADATA;
	}

	Movie.MovieId=(uint32)time(NULL);
	Movie.RerecordCount=0;
	Movie.MaxFrame=0;
	Movie.MaxSample=0;
	Movie.SaveStateOffset=SMV_HEADER_SIZE+(sizeof(uint16)*metadata_length) + SMV_EXTRAROMINFO_SIZE;
	Movie.ControllerDataOffset=0;
	Movie.ControllersMask=controllers_mask;
	Movie.Opts=opts;
	Movie.SyncFlags=MOVIE_SYNC_DATA_EXISTS|MOVIE_SYNC_HASROMINFO;

	// store previous, in case we switch to playback later
	store_previous_settings();

	// store settings in movie
	store_movie_settings();

	// extra rom info
	Movie.ROMCRC32 = Memory.ROMCRC32;
	strncpy(Movie.ROMName, Memory.ROMName, 23);


	write_movie_header(fd, &Movie);


	// convert wchar_t metadata string/array to a uint16 array
	if(metadata_length>0)
	{
		uint8 meta_buf[MOVIE_MAX_METADATA * sizeof(uint16)];
		for(int i=0; i<metadata_length; ++i)
		{
			uint16 c=(uint16)metadata[i];
			meta_buf[i+i]  =(uint8)(c&0xff);
			meta_buf[i+i+1]=(uint8)((c>>8)&0xff);
		}

		fwrite(meta_buf, sizeof(uint16), metadata_length, fd);
		assert(!ferror(fd));
	}