void systemStartGamePlayback(const wxString& fname) { GameArea* panel = wxGetApp().frame->GetPanel(); if (!panel || panel->game_type() == IMAGE_UNKNOWN || !panel->emusys->emuReadState) { wxLogError(_("No game in progress to record")); return; } if (game_recording) { wxLogError(_("Cannot play game recording while recording")); return; } systemStopGamePlayback(); wxString fn = fname; if (fn.size() < 4 || !wxString(fn.substr(fn.size() - 4)).IsSameAs(wxT(".vmv"), false)) fn.append(wxT(".vmv")); u32 version; if (!game_file.Open(fn.c_str(), wxT("rb")) || game_file.Read(&version, sizeof(version)) != sizeof(version) || wxUINT32_SWAP_ON_BE(version) != 1) { wxLogError(_("Cannot open recording file %s"), fname.c_str()); return; } u32 gf, jp; if (game_file.Read(&gf, sizeof(gf)) != sizeof(gf) || game_file.Read(&jp, sizeof(jp)) != sizeof(jp)) { wxLogError(_("Error reading game recording")); game_file.Close(); return; } game_next_frame = wxUINT32_SWAP_ON_BE(gf); game_next_joypad = wxUINT32_SWAP_ON_BE(jp); fn[fn.size() - 1] = wxT('0'); if (!panel->emusys->emuReadState(fn.mb_fn_str())) { wxLogError(_("Error reading game recording")); game_file.Close(); return; } game_frame = 0; game_joypad = 0; game_playback = true; MainFrame* mf = wxGetApp().frame; mf->cmd_enable &= ~(CMDEN_NGREC | CMDEN_GREC | CMDEN_NGPLAY); mf->cmd_enable |= CMDEN_GPLAY; mf->enable_menus(); }
bool FLACImportFileHandle::Init() { #ifdef LEGACY_FLAC bool success = mFile->set_filename(OSINPUT(mFilename)); if (!success) { return false; } mFile->set_metadata_respond(FLAC__METADATA_TYPE_STREAMINFO); mFile->set_metadata_respond(FLAC__METADATA_TYPE_VORBIS_COMMENT); FLAC::Decoder::File::State state = mFile->init(); if (state != FLAC__FILE_DECODER_OK) { return false; } #else if (!mHandle.Open(mFilename, wxT("rb"))) { return false; } // Even though there is an init() method that takes a filename, use the one that // takes a file handle because wxWidgets can open a file with a Unicode name and // libflac can't (under Windows). // // Responsibility for closing the file is passed to libflac. // (it happens when mFile->finish() is called) bool result = mFile->init(mHandle.fp())?true:false; mHandle.Detach(); if (result != FLAC__STREAM_DECODER_INIT_STATUS_OK) { return false; } #endif mFile->process_until_end_of_metadata(); #ifdef LEGACY_FLAC state = mFile->get_state(); if (state != FLAC__FILE_DECODER_OK) { return false; } #else // not necessary to check state, error callback will catch errors, but here's how: if (mFile->get_state() > FLAC__STREAM_DECODER_READ_FRAME) { return false; } #endif if (!mFile->is_valid() || mFile->get_was_error()) { // This probably is not a FLAC file at all return false; } return true; }
void systemStartGameRecording(const wxString &fname) { GameArea* panel = wxGetApp().frame->GetPanel(); if (!panel || panel->game_type() == IMAGE_UNKNOWN || !panel->emusys->emuWriteState) { wxLogError(_("No game in progress to record")); return; } systemStopGamePlayback(); wxString fn = fname; if (fn.size() < 4 || !wxString(fn.substr(fn.size() - 4)).IsSameAs(wxT(".vmv"), false)) fn.append(wxT(".vmv")); u32 version = 1; if (!game_file.Open(fn.c_str(), wxT("wb")) || game_file.Write(&version, sizeof(version)) != sizeof(version)) { wxLogError(_("Cannot open output file %s"), fname.c_str()); return; } fn[fn.size() - 1] = wxT('0'); if (!panel->emusys->emuWriteState(fn.mb_fn_str())) { wxLogError(_("Error writing game recording")); game_file.Close(); return; } game_frame = 0; game_joypad = 0; game_recording = true; MainFrame* mf = wxGetApp().frame; mf->cmd_enable &= ~(CMDEN_NGREC | CMDEN_GPLAY | CMDEN_NGPLAY); mf->cmd_enable |= CMDEN_GREC; mf->enable_menus(); }
bool FLACImportFileHandle::Init() { #ifdef EXPERIMENTAL_OD_FLAC mDecoderTask=new ODDecodeFlacTask; ODFlacDecoder* odDecoder = (ODFlacDecoder*)mDecoderTask->CreateFileDecoder(mFilename); if(!odDecoder || !odDecoder->ReadHeader()) { //DELETE the task only if it failed to read - otherwise the OD man takes care of it. delete mDecoderTask; return false; } //copy the meta data over to the class mSampleRate=odDecoder->mSampleRate; mNumChannels=odDecoder->mNumChannels; mBitsPerSample=odDecoder->mBitsPerSample; mNumSamples=odDecoder->mNumSamples; mBitsPerSample=odDecoder->mBitsPerSample; mFormat=odDecoder->mFormat; mStreamInfoDone=true; return true; #endif #ifdef LEGACY_FLAC bool success = mFile->set_filename(OSINPUT(mFilename)); if (!success) { return false; } mFile->set_metadata_respond(FLAC__METADATA_TYPE_STREAMINFO); mFile->set_metadata_respond(FLAC__METADATA_TYPE_VORBIS_COMMENT); FLAC::Decoder::File::State state = mFile->init(); if (state != FLAC__FILE_DECODER_OK) { return false; } #else if (!mHandle.Open(mFilename, wxT("rb"))) { return false; } // Even though there is an init() method that takes a filename, use the one that // takes a file handle because wxWidgets can open a file with a Unicode name and // libflac can't (under Windows). // // Responsibility for closing the file is passed to libflac. // (it happens when mFile->finish() is called) bool result = mFile->init(mHandle.fp())?true:false; mHandle.Detach(); if (result != FLAC__STREAM_DECODER_INIT_STATUS_OK) { return false; } #endif mFile->process_until_end_of_metadata(); #ifdef LEGACY_FLAC state = mFile->get_state(); if (state != FLAC__FILE_DECODER_OK) { return false; } #else // not necessary to check state, error callback will catch errors, but here's how: if (mFile->get_state() > FLAC__STREAM_DECODER_READ_FRAME) { return false; } #endif if (!mFile->is_valid() || mFile->get_was_error()) { // This probably is not a FLAC file at all return false; } return true; }