diff --git a/desmume/src/frontend/cocoa/ClientAVCaptureObject.cpp b/desmume/src/frontend/cocoa/ClientAVCaptureObject.cpp index b86280f99..61d90ba2c 100644 --- a/desmume/src/frontend/cocoa/ClientAVCaptureObject.cpp +++ b/desmume/src/frontend/cocoa/ClientAVCaptureObject.cpp @@ -245,7 +245,11 @@ ClientAVCaptureObject::ClientAVCaptureObject(size_t videoFrameWidth, size_t vide { __InstanceInit(videoFrameWidth, videoFrameHeight); - _pendingVideoBuffer = (u8 *)malloc_alignedCacheLine(_videoFrameSize * _pendingBufferCount); + if (_videoFrameSize > 0) + { + _pendingVideoBuffer = (u8 *)malloc_alignedCacheLine(_videoFrameSize * _pendingBufferCount); + } + _pendingAudioBuffer = (u8 *)malloc_alignedCacheLine(_audioFrameSize * _pendingBufferCount); _pendingAudioWriteSize = (size_t *)calloc(_pendingBufferCount, sizeof(size_t)); @@ -258,7 +262,7 @@ ClientAVCaptureObject::ClientAVCaptureObject(size_t videoFrameWidth, size_t vide _convertParam[i].firstLineIndex = 0; _convertParam[i].lastLineIndex = linesPerThread - 1; _convertParam[i].srcOffset = 0; - _convertParam[i].dstOffset = (videoFrameWidth * (videoFrameHeight - 1) * 3); + _convertParam[i].dstOffset = 0; _convertParam[i].frameWidth = videoFrameWidth; } } @@ -283,7 +287,7 @@ ClientAVCaptureObject::ClientAVCaptureObject(size_t videoFrameWidth, size_t vide } _convertParam[i].srcOffset = (videoFrameWidth * _convertParam[i].firstLineIndex); - _convertParam[i].dstOffset = (videoFrameWidth * (videoFrameHeight - (_convertParam[i].firstLineIndex + 1)) * 3); + _convertParam[i].dstOffset = (videoFrameWidth * _convertParam[i].firstLineIndex * 3); _convertParam[i].frameWidth = videoFrameWidth; } } @@ -297,9 +301,20 @@ void ClientAVCaptureObject::__InstanceInit(size_t videoFrameWidth, size_t videoF _mutexCaptureFlags = slock_new(); - _videoFrameWidth = videoFrameWidth; - _videoFrameHeight = videoFrameHeight; - _videoFrameSize = videoFrameWidth * videoFrameHeight * 3; // The video frame will always be in the RGB888 colorspace. + if ( (videoFrameWidth == 0) || (videoFrameHeight == 0) ) + { + // Audio-only capture. + _videoFrameWidth = 0; + _videoFrameHeight = 0; + _videoFrameSize = 0; + } + else + { + _videoFrameWidth = videoFrameWidth; + _videoFrameHeight = videoFrameHeight; + _videoFrameSize = videoFrameWidth * videoFrameHeight * 3; // The video frame will always be in the RGB888 colorspace. + } + _audioBlockSize = sizeof(int16_t) * 2; _audioFrameSize = ((DESMUME_SAMPLE_RATE * _audioBlockSize) / 30); @@ -433,27 +448,24 @@ void ClientAVCaptureObject::StreamWriteStart() return; } + // Force video conversion to finish before putting the frame on the queue. + if ( (this->_videoFrameSize > 0) && (this->_numThreads > 0) ) + { + for (size_t i = 0; i < this->_numThreads; i++) + { + this->_convertThread[i]->finish(); + } + } + const size_t bufferIndex = this->_currentBufferIndex; const size_t queueSize = this->_fs->GetQueueSize(); const bool isQueueEmpty = (queueSize == 0); - // If there are no frames in the current write queue, then we know that the current - // pending video frame will be written immediately. If this is the case, then we - // need to force the video conversion to finish so that we can write out the frame. - if (isQueueEmpty) - { - if (this->_videoFrameSize > 0) - { - for (size_t i = 0; i < this->_numThreads; i++) - { - this->_convertThread[i]->finish(); - } - } - } - this->_fs->QueueAdd(this->_pendingVideoBuffer + (this->_videoFrameSize * bufferIndex), this->_videoFrameSize, this->_pendingAudioBuffer + (AUDIO_STREAM_BUFFER_SIZE * bufferIndex), this->_pendingAudioWriteSize[bufferIndex]); + // If the queue was initially empty, then we need to wake up the file write + // thread at this time. if (isQueueEmpty) { this->_fileWriteThread->execute(&RunAviFileWrite, this->_fs); @@ -468,39 +480,31 @@ void ClientAVCaptureObject::StreamWriteFinish() //converts 16bpp to 24bpp and flips void ClientAVCaptureObject::ConvertVideoSlice555Xto888(const VideoConvertParam ¶m) { + const size_t lineCount = param.lastLineIndex - param.firstLineIndex + 1; const u16 *__restrict src = (const u16 *__restrict)param.src; u8 *__restrict dst = param.dst; - for (size_t y = param.firstLineIndex; y <= param.lastLineIndex; y++) - { - ColorspaceConvertBuffer555XTo888(src, dst, param.frameWidth); - src += param.frameWidth; - dst -= param.frameWidth * 3; - } + ColorspaceConvertBuffer555XTo888(src, dst, param.frameWidth * lineCount); } //converts 32bpp to 24bpp and flips void ClientAVCaptureObject::ConvertVideoSlice888Xto888(const VideoConvertParam ¶m) { + const size_t lineCount = param.lastLineIndex - param.firstLineIndex + 1; const u32 *__restrict src = (const u32 *__restrict)param.src; u8 *__restrict dst = param.dst; - for (size_t y = param.firstLineIndex; y <= param.lastLineIndex; y++) - { - ColorspaceConvertBuffer888XTo888(src, dst, param.frameWidth); - src += param.frameWidth; - dst -= param.frameWidth * 3; - } + ColorspaceConvertBuffer888XTo888(src, dst, param.frameWidth * lineCount); } -void ClientAVCaptureObject::ReadVideoFrame(const void *srcVideoFrame, const size_t inFrameWidth, const size_t inFrameHeight, const NDSColorFormat colorFormat) +void ClientAVCaptureObject::CaptureVideoFrame(const void *srcVideoFrame, const size_t inFrameWidth, const size_t inFrameHeight, const NDSColorFormat colorFormat) { //dont do anything if prescale has changed, it's just going to be garbage if (!this->_isCapturingVideo || (srcVideoFrame == NULL) || (this->_videoFrameSize == 0) || (this->_videoFrameWidth != inFrameWidth) || - (this->_videoFrameHeight != (inFrameHeight * 2))) + (this->_videoFrameHeight != inFrameHeight)) { return; } @@ -548,7 +552,7 @@ void ClientAVCaptureObject::ReadVideoFrame(const void *srcVideoFrame, const size } } -void ClientAVCaptureObject::ReadAudioFrames(const void *srcAudioBuffer, const size_t inSampleCount) +void ClientAVCaptureObject::CaptureAudioFrames(const void *srcAudioBuffer, const size_t inSampleCount) { if (!this->_isCapturingAudio || (srcAudioBuffer == NULL)) { diff --git a/desmume/src/frontend/cocoa/ClientAVCaptureObject.h b/desmume/src/frontend/cocoa/ClientAVCaptureObject.h index c6afedcfa..958123d54 100644 --- a/desmume/src/frontend/cocoa/ClientAVCaptureObject.h +++ b/desmume/src/frontend/cocoa/ClientAVCaptureObject.h @@ -253,8 +253,8 @@ public: void ConvertVideoSlice555Xto888(const VideoConvertParam ¶m); void ConvertVideoSlice888Xto888(const VideoConvertParam ¶m); - void ReadVideoFrame(const void *srcVideoFrame, const size_t inFrameWidth, const size_t inFrameHeight, const NDSColorFormat colorFormat); - void ReadAudioFrames(const void *srcAudioBuffer, const size_t inSampleCount); + void CaptureVideoFrame(const void *srcVideoFrame, const size_t inFrameWidth, const size_t inFrameHeight, const NDSColorFormat colorFormat); + void CaptureAudioFrames(const void *srcAudioBuffer, const size_t inSampleCount); }; #endif // _CLIENT_AV_CAPTURE_OBJECT_H_ diff --git a/desmume/src/frontend/cocoa/ClientExecutionControl.cpp b/desmume/src/frontend/cocoa/ClientExecutionControl.cpp index 2abc65d3e..2f80bcbc8 100644 --- a/desmume/src/frontend/cocoa/ClientExecutionControl.cpp +++ b/desmume/src/frontend/cocoa/ClientExecutionControl.cpp @@ -25,6 +25,7 @@ #include "../../gdbstub.h" #include "../../rtc.h" +#include "ClientAVCaptureObject.h" #include "ClientExecutionControl.h" // Need to include assert.h this way so that GDB stub will work @@ -144,9 +145,15 @@ ClientAVCaptureObject* ClientExecutionControl::GetClientAVCaptureObjectApplied() void ClientExecutionControl::SetClientAVCaptureObject(ClientAVCaptureObject *theCaptureObject) { pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); - this->_settingsPending.avCaptureObject = theCaptureObject; - this->_newSettingsPendingOnNDSExec = true; + if (this->_settingsPending.avCaptureObject != theCaptureObject) + { + this->_settingsPending.avCaptureObject = theCaptureObject; + + this->_needResetFramesToSkip = true; + this->_newSettingsPendingOnNDSExec = true; + } + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); } diff --git a/desmume/src/frontend/cocoa/ClientExecutionControl.h b/desmume/src/frontend/cocoa/ClientExecutionControl.h index 06908665c..cc3cd1340 100644 --- a/desmume/src/frontend/cocoa/ClientExecutionControl.h +++ b/desmume/src/frontend/cocoa/ClientExecutionControl.h @@ -22,11 +22,13 @@ #include #include -#include "ClientAVCaptureObject.h" #include "ClientInputHandler.h" #include "../../slot1.h" + +#ifdef BOOL #undef BOOL +#endif #define SPEED_SCALAR_QUARTER 0.25 // Speed scalar for quarter execution speed. #define SPEED_SCALAR_HALF 0.5 // Speed scalar for half execution speed. @@ -43,6 +45,8 @@ #define FRAME_SKIP_BIAS 0.1 // May be any real number. This value acts as a vector addition to the frame skip. #define MAX_FRAME_SKIP (DS_FRAMES_PER_SECOND / 2.98) +class ClientAVCaptureObject; + enum ExecutionBehavior { ExecutionBehavior_Pause = 0, diff --git a/desmume/src/frontend/cocoa/cocoa_core.mm b/desmume/src/frontend/cocoa/cocoa_core.mm index e0eff2d92..05530def3 100644 --- a/desmume/src/frontend/cocoa/cocoa_core.mm +++ b/desmume/src/frontend/cocoa/cocoa_core.mm @@ -26,6 +26,7 @@ #import "cocoa_util.h" #include "macOS_driver.h" +#include "ClientAVCaptureObject.h" #include "ClientExecutionControl.h" #include "ClientInputHandler.h" @@ -1118,7 +1119,7 @@ static void* RunCoreThread(void *arg) continue; } - if (avCaptureObject != NULL) + if ( (avCaptureObject != NULL) && !avCaptureObject->IsCapturingVideo() ) { avCaptureObject->StreamWriteStart(); } @@ -1186,7 +1187,7 @@ static void* RunCoreThread(void *arg) { case ExecutionBehavior_Run: { - if (execControl->GetEnableFrameSkipApplied()) + if (execControl->GetEnableFrameSkipApplied() && !avCaptureObject) { if (framesToSkip > 0) { @@ -1203,14 +1204,17 @@ static void* RunCoreThread(void *arg) case ExecutionBehavior_FrameJump: { - if (framesToSkip > 0) + if (!avCaptureObject) { - NDS_SkipNextFrame(); - execControl->SetFramesToSkip(framesToSkip - 1); - } - else - { - execControl->SetFramesToSkip( (uint8_t)((DS_FRAMES_PER_SECOND * 1.0) + 0.85) ); + if (framesToSkip > 0) + { + NDS_SkipNextFrame(); + execControl->SetFramesToSkip(framesToSkip - 1); + } + else + { + execControl->SetFramesToSkip( (uint8_t)((DS_FRAMES_PER_SECOND * 1.0) + 0.85) ); + } } break; } diff --git a/desmume/src/frontend/cocoa/cocoa_output.h b/desmume/src/frontend/cocoa/cocoa_output.h index ab10c98b8..c24b90d76 100644 --- a/desmume/src/frontend/cocoa/cocoa_output.h +++ b/desmume/src/frontend/cocoa/cocoa_output.h @@ -23,9 +23,13 @@ #import "cocoa_util.h" #include "ClientDisplayView.h" #include "ClientExecutionControl.h" -#include "ClientAVCaptureObject.h" -#undef BOOL +#ifdef BOOL +#undef BOOL +#endif + + +class ClientAVCaptureObject; @class NSImage; @class NSBitmapImageRep; @@ -122,9 +126,14 @@ @interface CocoaDSVideoCapture : CocoaDSDisplay { ClientDisplay3DPresenter *_cdp; + ClientAVCaptureObject *avCaptureObject; + uint32_t *_videoCaptureBuffer; + + pthread_mutex_t _mutexCaptureBuffer; } @property (assign, nonatomic, getter=clientDisplay3DPresenter, setter=setClientDisplay3DPresenter:) ClientDisplay3DPresenter *_cdp; +@property (assign, nonatomic) ClientAVCaptureObject *avCaptureObject; - (void) handleReceiveGPUFrame; diff --git a/desmume/src/frontend/cocoa/cocoa_output.mm b/desmume/src/frontend/cocoa/cocoa_output.mm index 14bd4ef53..415b33dac 100644 --- a/desmume/src/frontend/cocoa/cocoa_output.mm +++ b/desmume/src/frontend/cocoa/cocoa_output.mm @@ -23,6 +23,8 @@ #import "cocoa_core.h" #include "sndOSX.h" +#include "ClientAVCaptureObject.h" + #include "../../NDSSystem.h" #include "../../common.h" #include "../../GPU.h" @@ -34,7 +36,9 @@ #import +#ifdef BOOL #undef BOOL +#endif @implementation CocoaDSOutput @@ -556,21 +560,63 @@ @implementation CocoaDSVideoCapture @synthesize _cdp; +@synthesize avCaptureObject; + +- (id)init +{ + self = [super init]; + if (self == nil) + { + return self; + } + + _cdp = NULL; + avCaptureObject = NULL; + _videoCaptureBuffer = NULL; + + pthread_mutex_init(&_mutexCaptureBuffer, NULL); + + return self; +} + +- (void)dealloc +{ + pthread_mutex_lock(&_mutexCaptureBuffer); + free_aligned(_videoCaptureBuffer); + pthread_mutex_unlock(&_mutexCaptureBuffer); + + pthread_mutex_destroy(&_mutexCaptureBuffer); + + [super dealloc]; +} - (void) handleReceiveGPUFrame { [super handleReceiveGPUFrame]; - if (_cdp == NULL) + if ( (_cdp == NULL) || (avCaptureObject == NULL) ) { return; } + const ClientDisplayPresenterProperties &cdpProperty = _cdp->GetPresenterProperties(); + _cdp->LoadDisplays(); _cdp->ProcessDisplays(); _cdp->UpdateLayout(); - //_cdp->CopyFrameToBuffer((uint32_t *)[newImageRep bitmapData]); - //avCaptureObject->ReadVideoFrame(NULL, 0, 0, NDSColorFormat_BGR888_Rev); + + pthread_mutex_lock(&_mutexCaptureBuffer); + + if (_videoCaptureBuffer == NULL) + { + _videoCaptureBuffer = (uint32_t *)malloc_alignedPage(cdpProperty.clientWidth * cdpProperty.clientHeight * sizeof(uint32_t)); + } + + _cdp->CopyFrameToBuffer(_videoCaptureBuffer); + avCaptureObject->CaptureVideoFrame(_videoCaptureBuffer, (size_t)cdpProperty.clientWidth, (size_t)cdpProperty.clientHeight, NDSColorFormat_BGR888_Rev); + avCaptureObject->StreamWriteStart(); + + pthread_mutex_unlock(&_mutexCaptureBuffer); } @end diff --git a/desmume/src/frontend/cocoa/macOS_driver.cpp b/desmume/src/frontend/cocoa/macOS_driver.cpp index 1cb75c967..1300cb047 100644 --- a/desmume/src/frontend/cocoa/macOS_driver.cpp +++ b/desmume/src/frontend/cocoa/macOS_driver.cpp @@ -16,8 +16,10 @@ */ #include "macOS_driver.h" +#include "ClientAVCaptureObject.h" #include "ClientExecutionControl.h" + pthread_mutex_t* macOS_driver::GetCoreThreadMutexLock() { return this->__mutexThreadExecute; @@ -52,7 +54,7 @@ void macOS_driver::AVI_SoundUpdate(void *soundData, int soundLen) return; } - avCaptureObject->ReadAudioFrames(soundData, soundLen); + avCaptureObject->CaptureAudioFrames(soundData, soundLen); } bool macOS_driver::AVI_IsRecording() diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib index aa2f02ad4..b2f2aa877 100644 --- a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib @@ -2,9 +2,9 @@ 1050 - 17E202 + 17G65 851 - 1561.40.112 + 1561.60.100 911.10 com.apple.InterfaceBuilder.CocoaPlugin @@ -2155,7 +2155,7 @@ {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 @@ -2181,7 +2181,6 @@ {{20, 302}, {128, 128}} - YES 134217728 @@ -2204,7 +2203,6 @@ 274 {{13, 10}, {524, 290}} - YES @@ -2233,7 +2231,6 @@ 274 {505, 244} - @@ -2329,7 +2326,6 @@ {505, 244} - @@ -2363,7 +2359,6 @@ 256 {{489, 0}, {16, 244}} - NO _doScroller: @@ -2377,7 +2372,6 @@ -2147483392 {{-100, -100}, {87, 18}} - NO _doScroller: @@ -2390,7 +2384,6 @@ {{-3, -3}, {505, 244}} - YES @@ -2401,6 +2394,27 @@ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133136 @@ -2413,7 +2427,6 @@ {{10, 33}, {504, 244}} - Read Me @@ -2563,6 +2576,27 @@ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133136 @@ -2718,6 +2752,27 @@ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133136 @@ -2873,6 +2928,27 @@ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133136 @@ -2910,7 +2986,6 @@ 270 {{153, 374}, {380, 56}} - YES 69206017 @@ -2931,7 +3006,6 @@ 270 {{156, 302}, {374, 64}} - YES 73400321 @@ -2953,8 +3027,6 @@ {550, 450} - - {{0, 0}, {1920, 1177}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -4239,6 +4311,27 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -10028,6 +10121,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -10291,7 +10405,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 1 2 - {{157, 281}, {640, 167}} + {{157, 281}, {807, 167}} 1685586944 InputSettingsNDSInput NSWindow @@ -10354,7 +10468,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 265 - {{535, 7}, {96, 32}} + {{697, 7}, {96, 32}} 1 YES @@ -10377,7 +10491,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 265 - {{439, 7}, {96, 32}} + {{601, 7}, {96, 32}} YES @@ -10399,7 +10513,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 271 - {{13, 50}, {614, 20}} + {{16, 50}, {773, 21}} _NS:2202 YES @@ -10412,183 +10526,182 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ YES - 18 + 23 1 YES 0 - 18 + 23 2 0 - 18 + 23 3 YES 0 - 18 + 23 4 0 - 18 + 23 5 YES 0 - 18 + 23 6 0 - 18 + 23 7 YES 0 - 18 + 23 8 0 - 18 + 23 9 YES 0 - 18 + 23 10 0 - 18 + 23 11 YES 0 - 18 + 23 12 0 - 18 + 23 13 YES 0 - 18 + 23 14 0 - 18 + 23 15 YES 0 - 18 + 23 16 0 - 18 + 23 17 YES 0 - 18 + 23 18 0 - 18 + 23 19 YES 0 - 18 + 23 20 0 - 18 + 23 21 YES 0 - 18 + 23 22 0 - 18 + 23 23 YES 0 - 18 + 23 24 0 - 18 + 23 25 YES 0 - 18 + 23 26 0 - 18 + 23 27 YES 0 - 18 + 23 28 0 - 18 + 23 29 YES 0 - 18 + 23 30 0 - 18 + 23 31 YES 0 - 19 + 23 32 0 - 18 1 1 0 @@ -10847,7 +10960,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ NO - {640, 167} + {807, 167} _NS:122 {{0, 0}, {1920, 1177}} @@ -14526,6 +14639,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -15126,6 +15260,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -15970,6 +16125,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -16192,6 +16368,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -17489,6 +17686,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133650 @@ -18830,6 +19048,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -19651,6 +19890,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133682 @@ -24300,7 +24560,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 @@ -24323,6 +24583,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 77}, {206, 18}} + YES -2080374784 @@ -24347,6 +24608,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 15}, {109, 14}} + YES 68157504 @@ -24366,6 +24628,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 57}, {115, 18}} + YES -2080374784 @@ -24390,6 +24653,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 37}, {195, 18}} + YES -2080374784 @@ -24414,6 +24678,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{126, 10}, {96, 22}} + _NS:791 YES @@ -24536,10 +24801,12 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {{1, 1}, {237, 102}} + {{17, 109}, {239, 118}} + {0, 0} 67108864 @@ -24561,6 +24828,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{56, 8}, {162, 19}} + YES -2080374784 @@ -24595,6 +24863,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{18, 14}, {107, 58}} + YES NO 3 @@ -24853,10 +25122,12 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {{1, 1}, {237, 82}} + {{17, 424}, {239, 98}} + {0, 0} 67108864 @@ -24890,6 +25161,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 52}, {108, 18}} + YES -2080374784 @@ -24914,6 +25186,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 32}, {135, 18}} + YES -2080374784 @@ -24938,6 +25211,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 12}, {82, 18}} + YES -2080374784 @@ -24962,6 +25236,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{32, 148}, {113, 14}} + _NS:526 {251, 750} YES @@ -24984,6 +25259,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{150, 146}, {48, 19}} + _NS:9 YES @@ -25062,6 +25338,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{203, 142}, {19, 27}} + _NS:1592 YES @@ -25082,6 +25359,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 72}, {137, 18}} + YES 67108864 @@ -25106,6 +25384,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{6, 96}, {139, 14}} + YES 68157504 @@ -25125,6 +25404,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{203, 89}, {19, 27}} + YES 67895328 @@ -25145,6 +25425,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{163, 96}, {38, 14}} + _NS:4068 YES @@ -25222,6 +25503,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{41, 122}, {104, 14}} + _NS:4068 YES @@ -25243,6 +25525,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{147, 117}, {75, 22}} + _NS:791 YES @@ -25311,10 +25594,12 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {{1, 1}, {237, 173}} + {{17, 231}, {239, 189}} + {0, 0} 67108864 @@ -25348,6 +25633,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{16, 32}, {192, 18}} + YES 67108864 @@ -25372,6 +25658,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{16, 12}, {114, 18}} + YES 67108864 @@ -25393,10 +25680,12 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {{1, 1}, {237, 58}} + {{17, 31}, {239, 74}} + {0, 0} 67108864 @@ -25414,6 +25703,8 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {273, 542} + + {{0, 0}, {1920, 1177}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -29241,6 +29532,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133138 @@ -31962,9 +32274,9 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 400 75 - + - mov (ProRes422 + ALAC) + mp4 (H.264 + AAC) 2147483647 1 @@ -31986,6 +32298,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 73744 @@ -31996,19 +32309,21 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 143424 - - + - mp4 (H.264 + AAC) + mov (ProRes422 + ALAC) 2147483647 _popUpItemAction: + 213040 + YES @@ -32030,6 +32345,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 8519456 @@ -32040,6 +32356,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 8585024 @@ -32050,6 +32367,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 8453888 @@ -32060,6 +32378,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 8453936 @@ -32070,12 +32389,13 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _popUpItemAction: + 8650512 - 2 + 3 1 YES YES @@ -32443,8 +32763,8 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _NS:185 YES - -1804599231 - 71435264 + -2073034687 + 104989696 @@ -32543,8 +32863,8 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ _NS:185 YES - -1804599231 - 71435264 + -2073034687 + 104989696 @@ -32687,7 +33007,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ NO - + 256 @@ -32698,7 +33018,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 8 {{313, 5}, {5, 157}} - _NS:2182 {0, 0} @@ -32720,7 +33039,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 8 {{156, 5}, {5, 157}} - _NS:2182 {0, 0} @@ -32742,7 +33060,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{329, 45}, {74, 14}} - _NS:4068 YES @@ -32764,7 +33081,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{172, 104}, {103, 14}} - _NS:4068 YES @@ -32786,7 +33102,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{164, 82}, {146, 22}} - _NS:791 YES @@ -32878,7 +33193,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{15, 104}, {92, 14}} - _NS:4068 YES @@ -32900,7 +33214,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{7, 82}, {146, 22}} - _NS:791 YES @@ -32981,7 +33294,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{15, 144}, {80, 14}} - _NS:4068 YES @@ -33003,7 +33315,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{7, 122}, {146, 22}} - _NS:791 YES @@ -33074,7 +33385,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{329, 86}, {80, 14}} - _NS:4068 YES @@ -33096,7 +33406,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{172, 144}, {90, 14}} - _NS:4068 YES @@ -33130,7 +33439,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{15, 12}, {87, 18}} - _NS:682 YES @@ -33154,13 +33462,11 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {{1, 1}, {144, 38}} - _NS:21 {{321, 104}, {146, 54}} - _NS:18 {0, 0} @@ -33183,7 +33489,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{321, 23}, {146, 22}} - _NS:791 YES @@ -33451,7 +33756,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{321, 64}, {146, 22}} - _NS:791 YES @@ -33555,7 +33859,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 264 {{164, 122}, {146, 22}} - _NS:791 YES @@ -33659,7 +33962,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 268 {{8, 14}, {132, 32}} - _NS:736 YES NO @@ -33905,13 +34207,11 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {{1, 1}, {144, 56}} - _NS:21 {{164, 6}, {146, 72}} - _NS:18 {0, 0} @@ -33930,8 +34230,6 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ {474, 167} - - NSView @@ -34991,6 +35289,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133138 @@ -35541,6 +35860,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133138 @@ -35704,6 +36044,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133138 @@ -36293,6 +36654,27 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 0 1 + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + + + 1 + _panWithGestureRecognizer: + + 0 + 1 + 133138 @@ -51310,15 +51692,31 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ - hidden: isDeveloperPlusBuild - - + value: saveDirectoryPath + + - - - hidden: isDeveloperPlusBuild - hidden - isDeveloperPlusBuild + + + value: saveDirectoryPath + value + saveDirectoryPath + 2 + + + 11286 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording NSValueTransformerName NSNegateBoolean @@ -51326,7 +51724,467 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 2 - 11284 + 11288 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11290 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11292 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11294 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11296 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11298 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11300 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11302 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11304 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11306 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11308 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11310 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11312 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11314 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11316 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11318 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11320 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11322 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11324 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11326 + + + + enabled: isFileStreamClosing + + + + + + enabled: isFileStreamClosing + enabled + isFileStreamClosing + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11328 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11330 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11332 + + + + enabled: isRecording + + + + + + enabled: isRecording + enabled + isRecording + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 11335 @@ -62527,13 +63385,13 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ YES - + @@ -67401,11 +68259,11 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ YES - + @@ -73198,10 +74056,10 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + - P4AAAL+AAABBkAAAwzMAAA + P4AAAL+AAABBUAAAwogAAA com.apple.InterfaceBuilder.CocoaPlugin @@ -73333,9 +74191,9 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{905, 759}, {480, 177}} + {{1111, 877}, {480, 177}} com.apple.InterfaceBuilder.CocoaPlugin - {{905, 759}, {480, 177}} + {{1111, 877}, {480, 177}} @@ -73350,7 +74208,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ DirectoryURLDragDestTextField com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABBoAAAw9SAAA + P4AAAL+AAABBIAAAwxgAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -73544,9 +74402,9 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{905, 497}, {480, 245}} + {{1137, 506}, {480, 245}} com.apple.InterfaceBuilder.CocoaPlugin - {{905, 497}, {480, 245}} + {{1137, 506}, {480, 245}} @@ -73616,10 +74474,10 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABD54AAw8eAAA + P4AAAL+AAABBIAAAwxIAAA com.apple.InterfaceBuilder.CocoaPlugin - {{1183, 489}, {199, 166}} + {{1673, 230}, {198, 166}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -73637,7 +74495,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{587, 490}, {217, 383}} + {{1393, 321}, {217, 383}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -73720,7 +74578,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{918, 288}, {474, 167}} + {{1133, 394}, {474, 167}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -73757,7 +74615,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABA4AAAwzgAAA + P4AAAL+AAABA4AAAww4AAA com.apple.InterfaceBuilder.CocoaPlugin @@ -73785,7 +74643,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABDJAAAwxYAAA + P4AAAL+AAABDJAAAww4AAA com.apple.InterfaceBuilder.CocoaPlugin {{827, 550}, {146, 88}} @@ -74368,7 +75226,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{891, 985}, {500, 20}} + {{1065, 1128}, {500, 20}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -74620,10 +75478,10 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{748, 206}, {273, 542}} + {{1316, 541}, {273, 542}} {193.5, 488.5} com.apple.InterfaceBuilder.CocoaPlugin - {{748, 206}, {273, 542}} + {{1316, 541}, {273, 542}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -75493,7 +76351,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{423, 653}, {203, 183}} + {{1077, 945}, {200, 183}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -75513,7 +76371,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1208, 832}, {281, 153}} + {{1382, 975}, {281, 153}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -76379,7 +77237,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{227, 373}, {325, 463}} + {{1166, 665}, {316, 463}} com.apple.InterfaceBuilder.CocoaPlugin {{655, 347}, {173, 339}} com.apple.InterfaceBuilder.CocoaPlugin @@ -76835,9 +77693,9 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{503, 689}, {640, 167}} + {{686, 691}, {807, 167}} com.apple.InterfaceBuilder.CocoaPlugin - {{503, 689}, {640, 167}} + {{686, 691}, {807, 167}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -77310,7 +78168,7 @@ xcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ - 11284 + 11335 diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm index b063be4ce..738607d76 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm @@ -2739,6 +2739,11 @@ { [(NSMenuItem*)theItem setTitle:([cdsCore isFrameSkipEnabled]) ? NSSTRING_TITLE_DISABLE_AUTO_FRAME_SKIP : NSSTRING_TITLE_ENABLE_AUTO_FRAME_SKIP]; } + + if ([avCaptureToolDelegate isRecording]) + { + enable = NO; + } } else if (theAction == @selector(toggleCheats:)) {