Esempio n. 1
0
File: rr.c Progetto: MoochMcGee/mgba
bool GBARRReinitStream(struct GBARRContext* rr, enum GBARRInitFrom initFrom) {
	if (!rr) {
		return false;
	}

	if (rr->metadataFile) {
		rr->metadataFile->truncate(rr->metadataFile, 0);
	} else {
		rr->metadataFile = rr->streamDir->openFile(rr->streamDir, METADATA_FILENAME, O_CREAT | O_TRUNC | O_RDWR);
	}
	_emitMagic(rr, rr->metadataFile);

	rr->initFrom = initFrom;
	rr->initFromOffset = rr->metadataFile->seek(rr->metadataFile, 0, SEEK_CUR);
	_emitTag(rr, rr->metadataFile, TAG_INIT | initFrom);

	rr->streamId = 0;
	rr->maxStreamId = 0;
	_emitTag(rr, rr->metadataFile, TAG_MAX_STREAM);
	rr->maxStreamIdOffset = rr->metadataFile->seek(rr->metadataFile, 0, SEEK_CUR);
	rr->metadataFile->write(rr->metadataFile, &rr->maxStreamId, sizeof(rr->maxStreamId));

	rr->rrCount = 0;
	_emitTag(rr, rr->metadataFile, TAG_RR_COUNT);
	rr->rrCountOffset = rr->metadataFile->seek(rr->metadataFile, 0, SEEK_CUR);
	rr->metadataFile->write(rr->metadataFile, &rr->rrCount, sizeof(rr->rrCount));
	return true;
}
Esempio n. 2
0
File: mgm.c Progetto: Sappharad/mgba
bool _incrementStream(struct GBAMGMContext* mgm, bool recursive) {
	uint32_t newStreamId = mgm->maxStreamId + 1;
	uint32_t oldStreamId = mgm->streamId;
	if (mgm->d.isRecording(&mgm->d) && mgm->movieStream) {
		if (!_markStreamNext(mgm, newStreamId, recursive)) {
			return false;
		}
	}
	if (!_loadStream(mgm, newStreamId)) {
		return false;
	}
	GBALog(0, GBA_LOG_DEBUG, "[RR] New segment: %u", newStreamId);
	_emitMagic(mgm, mgm->movieStream);
	mgm->maxStreamId = newStreamId;
	_emitTag(mgm, mgm->movieStream, TAG_PREVIOUSLY);
	mgm->movieStream->write(mgm->movieStream, &oldStreamId, sizeof(oldStreamId));
	_emitTag(mgm, mgm->movieStream, TAG_BEGIN);

	mgm->metadataFile->seek(mgm->metadataFile, mgm->maxStreamIdOffset, SEEK_SET);
	mgm->metadataFile->write(mgm->metadataFile, &mgm->maxStreamId, sizeof(mgm->maxStreamId));
	mgm->previously = oldStreamId;
	return true;
}
Esempio n. 3
0
File: rr.c Progetto: MoochMcGee/mgba
bool GBARRIncrementStream(struct GBARRContext* rr, bool recursive) {
	uint32_t newStreamId = rr->maxStreamId + 1;
	uint32_t oldStreamId = rr->streamId;
	if (GBARRIsRecording(rr) && rr->movieStream) {
		if (!_markStreamNext(rr, newStreamId, recursive)) {
			return false;
		}
	}
	if (!GBARRLoadStream(rr, newStreamId)) {
		return false;
	}
	GBALog(0, GBA_LOG_DEBUG, "[RR] New segment: %u", newStreamId);
	_emitMagic(rr, rr->movieStream);
	rr->maxStreamId = newStreamId;
	_emitTag(rr, rr->movieStream, TAG_PREVIOUSLY);
	rr->movieStream->write(rr->movieStream, &oldStreamId, sizeof(oldStreamId));
	_emitTag(rr, rr->movieStream, TAG_BEGIN);

	rr->metadataFile->seek(rr->metadataFile, rr->maxStreamIdOffset, SEEK_SET);
	rr->metadataFile->write(rr->metadataFile, &rr->maxStreamId, sizeof(rr->maxStreamId));
	rr->previously = oldStreamId;
	return true;
}
Esempio n. 4
0
File: mgm.c Progetto: Sappharad/mgba
bool GBAMGMCreateStream(struct GBAMGMContext* mgm, enum GBARRInitFrom initFrom) {
	if (mgm->metadataFile) {
		mgm->metadataFile->truncate(mgm->metadataFile, 0);
	} else {
		mgm->metadataFile = mgm->streamDir->openFile(mgm->streamDir, METADATA_FILENAME, O_CREAT | O_TRUNC | O_RDWR);
	}
	_emitMagic(mgm, mgm->metadataFile);

	mgm->d.initFrom = initFrom;
	mgm->initFromOffset = mgm->metadataFile->seek(mgm->metadataFile, 0, SEEK_CUR);
	_emitTag(mgm, mgm->metadataFile, TAG_INIT | initFrom);

	mgm->streamId = 0;
	mgm->maxStreamId = 0;
	_emitTag(mgm, mgm->metadataFile, TAG_MAX_STREAM);
	mgm->maxStreamIdOffset = mgm->metadataFile->seek(mgm->metadataFile, 0, SEEK_CUR);
	mgm->metadataFile->write(mgm->metadataFile, &mgm->maxStreamId, sizeof(mgm->maxStreamId));

	mgm->d.rrCount = 0;
	_emitTag(mgm, mgm->metadataFile, TAG_RR_COUNT);
	mgm->rrCountOffset = mgm->metadataFile->seek(mgm->metadataFile, 0, SEEK_CUR);
	mgm->metadataFile->write(mgm->metadataFile, &mgm->d.rrCount, sizeof(mgm->d.rrCount));
	return true;
}