Search Unity

NatDevice - Media Device API

Discussion in 'Assets and Asset Store' started by Lanre, Dec 17, 2015.

?

Should we add exposure controls in v1.3? This means dropping support for iOS 7

Poll closed Jun 10, 2016.
  1. Yes

    9 vote(s)
    75.0%
  2. No

    3 vote(s)
    25.0%
  1. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    If you want to record just the camera preview, see this document in the docs.
    If you can't switch to the front cam, then it is likely because some other client (like WebCamTexture) or app has access to the camera and has not relinquished it. NatDevice does not support autorotation; UI best practices is to lock the app orientation when the camera preview on screen (you can cross-check this with most camera apps in the wild).
     
  2. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Hey there Shane! First, on Windows NatDevice falls back to WebCamTexture as we don't have a native camera implementation (same on macOS). As for finding a specific camera, you can filter by name when you create the query. Just define a criterion that checks the UID of the device against whatever UID you want.
     
  3. DKasper_3DQR

    DKasper_3DQR

    Joined:
    Dec 20, 2016
    Posts:
    5
    Okay, so here is the whole log:

    Code (CSharp):
    1. 2020-04-29 15:01:23.906180+0200 NatDeviceTest[19099:41708317] Built from '2019.3/staging' branch, Version '2019.3.11f1 (ceef2d848e70)', Build type 'Release', Scripting Backend 'il2cpp'
    2.  
    3. -> applicationDidFinishLaunching()
    4.  
    5. -> applicationDidBecomeActive()
    6.  
    7. GfxDevice: creating device client; threaded=1
    8.  
    9. Initializing Metal device caps: Apple A9 GPU
    10.  
    11. Initialize engine version: 2019.3.11f1 (ceef2d848e70)
    12.  
    13. UnloadTime: 0.113083 ms
    14.  
    15. 2020-04-29 15:01:26.842129+0200 NatDeviceTest[19099:41708317] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
    16.  
    17. 2020-04-29 15:01:26.843508+0200 NatDeviceTest[19099:41708317] [MC] Reading from public effective user settings.
    18.  
    19. (lldb) bt all
    20.  
    21. NatDeviceTest was compiled with optimization - stepping may behave oddly; variables may not be available.
    22.  
    23. * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    24.  
    25.     frame #0: 0x00000001066faefc UnityFramework`+[NDCameraDevice devices] + 248
    26.  
    27.     frame #1: 0x00000001066f9e28 UnityFramework`NDCameraDevices + 52
    28.  
    29.     frame #2: 0x0000000106701ac8 UnityFramework`MediaDeviceQuery_CameraDevices_m60D429C0F13ECBA83AC11934AE132A7FE128F9BE + 88
    30.  
    31.     frame #3: 0x0000000106701818 UnityFramework`MediaDeviceQuery__ctor_mEB3759CB8C88782A4CA6BB1C45B81BEAFB3D5236 + 260
    32.  
    33.     frame #4: 0x0000000106706060 UnityFramework`U3CStartU3Ed__7_MoveNext_m13147601794643A397346DDFEA6CEF8132855AB4 + 368
    34.  
    35.     frame #5: 0x000000010675c510 UnityFramework`AsyncVoidMethodBuilder_Start_TisU3CStartU3Ed__7_tB0A74987C2EA150C764A91DCF688F1CE8A771F70_m1F114FAFA3323E2851B4B13F070B53F00BB2196D_gshared + 128
    36.  
    37.     frame #6: 0x0000000106705478 UnityFramework`MiniCam_Start_mB16BB70C54A56B353FC38AE6DEEFDDD7717D30CB + 184
    38.  
    39.     frame #7: 0x0000000106059420 UnityFramework`RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017(void (*)(), MethodInfo const*, void*, void**) + 20
    40.  
    41.     frame #8: 0x00000001066e1618 UnityFramework`il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) + 116
    42.  
    43.     frame #9: 0x00000001063cf2c0 UnityFramework`scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) + 116
    44.  
    45.     frame #10: 0x00000001063d9d70 UnityFramework`ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) + 116
    46.  
    47.     frame #11: 0x00000001063e6470 UnityFramework`MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingExceptionPtr*) + 1972
    48.  
    49.     frame #12: 0x00000001063e66f0 UnityFramework`MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) + 84
    50.  
    51.     frame #13: 0x00000001063e5074 UnityFramework`MonoBehaviour::DelayedStartCall(Object*, void*) + 104
    52.  
    53.     frame #14: 0x0000000106272f08 UnityFramework`DelayedCallManager::Update(int) + 752
    54.  
    55.     frame #15: 0x0000000106333f18 UnityFramework`ExecutePlayerLoop(NativePlayerLoopSystem*) + 88
    56.  
    57.     frame #16: 0x0000000106333f4c UnityFramework`ExecutePlayerLoop(NativePlayerLoopSystem*) + 140
    58.  
    59.     frame #17: 0x00000001063341a4 UnityFramework`PlayerLoop() + 348
    60.  
    61.     frame #18: 0x0000000106504450 UnityFramework`UnityPlayerLoopImpl(bool) + 240
    62.  
    63.     frame #19: 0x000000010601bc04 UnityFramework`UnityRepaint + 140
    64.  
    65.     frame #20: 0x000000010601bae0 UnityFramework`-[UnityAppController(Rendering) repaintDisplayLink] + 88
    66.  
    67.     frame #21: 0x00000001cabeff90 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 636
    68.  
    69.     frame #22: 0x00000001c6ac44b0 IOKit`IODispatchCalloutFromCFMessage + 488
    70.  
    71.     frame #23: 0x00000001c67d3a8c CoreFoundation`__CFMachPortPerform + 188
    72.  
    73.     frame #24: 0x00000001c67fa690 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
    74.  
    75.     frame #25: 0x00000001c67f9ddc CoreFoundation`__CFRunLoopDoSource1 + 440
    76.  
    77.     frame #26: 0x00000001c67f4c00 CoreFoundation`__CFRunLoopRun + 2096
    78.  
    79.     frame #27: 0x00000001c67f40b0 CoreFoundation`CFRunLoopRunSpecific + 436
    80.  
    81.     frame #28: 0x00000001c89f479c GraphicsServices`GSEventRunModal + 104
    82.  
    83.     frame #29: 0x00000001f2d9e978 UIKitCore`UIApplicationMain + 212
    84.  
    85.     frame #30: 0x000000010601a5a4 UnityFramework`-[UnityFramework runUIApplicationMainWithArgc:argv:] + 108
    86.  
    87.   * frame #31: 0x00000001045c3e1c NatDeviceTest`main(argc=<unavailable>, argv=<unavailable>) at main.mm:26:9 [opt]
    88.  
    89.     frame #32: 0x00000001c62b98e0 libdyld.dylib`start + 4
    90.  
    91.   thread #2
    92.  
    93.     frame #0: 0x00000001c648acd0 libsystem_pthread.dylib`start_wqthread
    94.  
    95.   thread #3
    96.  
    97.     frame #0: 0x00000001c6405b74 libsystem_kernel.dylib`__workq_kernreturn + 8
    98.  
    99.     frame #1: 0x00000001c6488138 libsystem_pthread.dylib`_pthread_wqthread + 340
    100.  
    101.     frame #2: 0x00000001c648acd4 libsystem_pthread.dylib`start_wqthread + 4
    102.  
    103.   thread #4, name = 'com.apple.uikit.eventfetch-thread'
    104.  
    105.     frame #0: 0x00000001c63fa0f4 libsystem_kernel.dylib`mach_msg_trap + 8
    106.  
    107.     frame #1: 0x00000001c63f95a0 libsystem_kernel.dylib`mach_msg + 72
    108.  
    109.     frame #2: 0x00000001c67f9a10 CoreFoundation`__CFRunLoopServiceMachPort + 236
    110.  
    111.     frame #3: 0x00000001c67f4920 CoreFoundation`__CFRunLoopRun + 1360
    112.  
    113.     frame #4: 0x00000001c67f40b0 CoreFoundation`CFRunLoopRunSpecific + 436
    114.  
    115.     frame #5: 0x00000001c71c1fac Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 300
    116.  
    117.     frame #6: 0x00000001c71c1e3c Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 96
    118.  
    119.     frame #7: 0x00000001f2e84494 UIKitCore`-[UIEventFetcher threadMain] + 136
    120.  
    121.     frame #8: 0x00000001c72ee6a4 Foundation`__NSThread__start__ + 984
    122.  
    123.     frame #9: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    124.  
    125.     frame #10: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    126.  
    127.     frame #11: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    128.  
    129.   thread #5
    130.  
    131.     frame #0: 0x00000001c6405b74 libsystem_kernel.dylib`__workq_kernreturn + 8
    132.  
    133.     frame #1: 0x00000001c6488138 libsystem_pthread.dylib`_pthread_wqthread + 340
    134.  
    135.     frame #2: 0x00000001c648acd4 libsystem_pthread.dylib`start_wqthread + 4
    136.  
    137.   thread #6
    138.  
    139.     frame #0: 0x00000001c6405b74 libsystem_kernel.dylib`__workq_kernreturn + 8
    140.  
    141.     frame #1: 0x00000001c6488138 libsystem_pthread.dylib`_pthread_wqthread + 340
    142.  
    143.     frame #2: 0x00000001c648acd4 libsystem_pthread.dylib`start_wqthread + 4
    144.  
    145.   thread #7
    146.  
    147.     frame #0: 0x00000001c6405b74 libsystem_kernel.dylib`__workq_kernreturn + 8
    148.  
    149.     frame #1: 0x00000001c6488138 libsystem_pthread.dylib`_pthread_wqthread + 340
    150.  
    151.     frame #2: 0x00000001c648acd4 libsystem_pthread.dylib`start_wqthread + 4
    152.  
    153.   thread #8, name = 'GC Finalizer'
    154.  
    155.     frame #0: 0x00000001c6404ee4 libsystem_kernel.dylib`__psynch_cvwait + 8
    156.  
    157.     frame #1: 0x00000001c647fcf8 libsystem_pthread.dylib`_pthread_cond_wait$VARIANT$mp + 636
    158.  
    159.     frame #2: 0x00000001066bc41c UnityFramework`il2cpp::eek:s::posix::posixWaitObject::Wait(unsigned int, bool) + 400
    160.  
    161.     frame #3: 0x000000010669d8a8 UnityFramework`il2cpp::gc::FinalizerThread(void*) + 104
    162.  
    163.     frame #4: 0x00000001066b6e50 UnityFramework`il2cpp::eek:s::Thread::RunWrapper(void*) + 88
    164.  
    165.     frame #5: 0x00000001066b897c UnityFramework`il2cpp::eek:s::ThreadImpl::ThreadStartWrapper(void*) + 40
    166.  
    167.     frame #6: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    168.  
    169.     frame #7: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    170.  
    171.     frame #8: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    172.  
    173.   thread #9, name = 'Job.Worker 0'
    174.  
    175.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    176.  
    177.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    178.  
    179.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    180.  
    181.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    182.  
    183.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    184.  
    185.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    186.  
    187.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    188.  
    189.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    190.  
    191.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    192.  
    193.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    194.  
    195.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    196.  
    197.   thread #10, name = 'Background Job.Worker 0'
    198.  
    199.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    200.  
    201.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    202.  
    203.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    204.  
    205.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    206.  
    207.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    208.  
    209.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    210.  
    211.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    212.  
    213.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    214.  
    215.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    216.  
    217.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    218.  
    219.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    220.  
    221.   thread #11, name = 'Background Job.Worker 1'
    222.  
    223.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    224.  
    225.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    226.  
    227.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    228.  
    229.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    230.  
    231.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    232.  
    233.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    234.  
    235.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    236.  
    237.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    238.  
    239.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    240.  
    241.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    242.  
    243.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    244.  
    245.   thread #12, name = 'Background Job.Worker 2'
    246.  
    247.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    248.  
    249.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    250.  
    251.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    252.  
    253.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    254.  
    255.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    256.  
    257.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    258.  
    259.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    260.  
    261.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    262.  
    263.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    264.  
    265.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    266.  
    267.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    268.  
    269.   thread #13, name = 'Background Job.Worker 3'
    270.  
    271.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    272.  
    273.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    274.  
    275.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    276.  
    277.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    278.  
    279.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    280.  
    281.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    282.  
    283.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    284.  
    285.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    286.  
    287.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    288.  
    289.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    290.  
    291.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    292.  
    293.   thread #14, name = 'Background Job.Worker 4'
    294.  
    295.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    296.  
    297.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    298.  
    299.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    300.  
    301.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    302.  
    303.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    304.  
    305.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    306.  
    307.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    308.  
    309.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    310.  
    311.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    312.  
    313.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    314.  
    315.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    316.  
    317.   thread #15, name = 'Background Job.Worker 5'
    318.  
    319.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    320.  
    321.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    322.  
    323.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    324.  
    325.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    326.  
    327.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    328.  
    329.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    330.  
    331.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    332.  
    333.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    334.  
    335.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    336.  
    337.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    338.  
    339.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    340.  
    341.   thread #16, name = 'Background Job.Worker 6'
    342.  
    343.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    344.  
    345.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    346.  
    347.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    348.  
    349.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    350.  
    351.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    352.  
    353.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    354.  
    355.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    356.  
    357.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    358.  
    359.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    360.  
    361.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    362.  
    363.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    364.  
    365.   thread #17, name = 'Background Job.Worker 7'
    366.  
    367.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    368.  
    369.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    370.  
    371.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    372.  
    373.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    374.  
    375.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    376.  
    377.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    378.  
    379.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    380.  
    381.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    382.  
    383.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    384.  
    385.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    386.  
    387.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    388.  
    389.   thread #18, name = 'Background Job.Worker 8'
    390.  
    391.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    392.  
    393.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    394.  
    395.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    396.  
    397.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    398.  
    399.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    400.  
    401.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    402.  
    403.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    404.  
    405.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    406.  
    407.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    408.  
    409.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    410.  
    411.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    412.  
    413.   thread #19, name = 'Background Job.Worker 9'
    414.  
    415.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    416.  
    417.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    418.  
    419.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    420.  
    421.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    422.  
    423.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    424.  
    425.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    426.  
    427.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    428.  
    429.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    430.  
    431.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    432.  
    433.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    434.  
    435.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    436.  
    437.   thread #20, name = 'Background Job.Worker 10'
    438.  
    439.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    440.  
    441.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    442.  
    443.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    444.  
    445.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    446.  
    447.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    448.  
    449.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    450.  
    451.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    452.  
    453.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    454.  
    455.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    456.  
    457.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    458.  
    459.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    460.  
    461.   thread #21, name = 'Background Job.Worker 11'
    462.  
    463.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    464.  
    465.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    466.  
    467.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    468.  
    469.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    470.  
    471.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    472.  
    473.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    474.  
    475.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    476.  
    477.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    478.  
    479.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    480.  
    481.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    482.  
    483.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    484.  
    485.   thread #22, name = 'Background Job.Worker 12'
    486.  
    487.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    488.  
    489.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    490.  
    491.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    492.  
    493.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    494.  
    495.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    496.  
    497.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    498.  
    499.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    500.  
    501.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    502.  
    503.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    504.  
    505.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    506.  
    507.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    508.  
    509.   thread #23, name = 'Background Job.Worker 13'
    510.  
    511.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    512.  
    513.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    514.  
    515.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    516.  
    517.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    518.  
    519.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    520.  
    521.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    522.  
    523.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    524.  
    525.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    526.  
    527.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    528.  
    529.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    530.  
    531.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    532.  
    533.   thread #24, name = 'Background Job.Worker 14'
    534.  
    535.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    536.  
    537.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    538.  
    539.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    540.  
    541.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    542.  
    543.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    544.  
    545.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    546.  
    547.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    548.  
    549.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    550.  
    551.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    552.  
    553.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    554.  
    555.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    556.  
    557.   thread #25, name = 'Background Job.Worker 15'
    558.  
    559.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    560.  
    561.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    562.  
    563.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    564.  
    565.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    566.  
    567.     frame #4: 0x00000001062c8d88 UnityFramework`CappedSemaphore::WaitForSignalInternal(bool) + 132
    568.  
    569.     frame #5: 0x000000010630810c UnityFramework`JobQueue::processJobs(JobQueue::ThreadInfo*, void*) + 236
    570.  
    571.     frame #6: 0x000000010630767c UnityFramework`JobQueue::WorkLoop(void*) + 56
    572.  
    573.     frame #7: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    574.  
    575.     frame #8: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    576.  
    577.     frame #9: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    578.  
    579.     frame #10: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    580.  
    581.   thread #26, name = 'BatchDeleteObjects'
    582.  
    583.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    584.  
    585.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    586.  
    587.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    588.  
    589.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    590.  
    591.     frame #4: 0x000000010639ccb8 UnityFramework`ThreadedStreamBuffer::HandleOutOfBufferToReadFrom(ThreadedStreamBuffer::DataOffsets) + 168
    592.  
    593.     frame #5: 0x0000000106332838 UnityFramework`BatchDeleteStep2Threaded(void*) + 208
    594.  
    595.     frame #6: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    596.  
    597.     frame #7: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    598.  
    599.     frame #8: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    600.  
    601.     frame #9: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    602.  
    603.   thread #27, name = 'Loading.AsyncRead'
    604.  
    605.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    606.  
    607.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    608.  
    609.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    610.  
    611.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    612.  
    613.     frame #4: 0x00000001062710a8 UnityFramework`AsyncReadManagerThreaded::ThreadEntry() + 208
    614.  
    615.     frame #5: 0x0000000106270c70 UnityFramework`AsyncReadManagerThreaded::StaticThreadEntry(void*) + 12
    616.  
    617.     frame #6: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    618.  
    619.     frame #7: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    620.  
    621.     frame #8: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    622.  
    623.     frame #9: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    624.  
    625.   thread #29, name = 'UnityGfxDeviceWorker'
    626.  
    627.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    628.  
    629.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    630.  
    631.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    632.  
    633.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    634.  
    635.     frame #4: 0x000000010639ccb8 UnityFramework`ThreadedStreamBuffer::HandleOutOfBufferToReadFrom(ThreadedStreamBuffer::DataOffsets) + 168
    636.  
    637.     frame #5: 0x0000000106157d58 UnityFramework`GfxDeviceWorker::RunCommand(ThreadedStreamBuffer&) + 120
    638.  
    639.     frame #6: 0x00000001064df118 UnityFramework`GfxDeviceWorkerAutoreleasePoolProxy + 68
    640.  
    641.     frame #7: 0x0000000106160fc4 UnityFramework`GfxDeviceWorker::RunExt(ThreadedStreamBuffer&) + 92
    642.  
    643.     frame #8: 0x000000010615797c UnityFramework`GfxDeviceWorker::RunGfxDeviceWorker(void*) + 12
    644.  
    645.     frame #9: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    646.  
    647.     frame #10: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    648.  
    649.     frame #11: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    650.  
    651.     frame #12: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    652.  
    653.   thread #30, name = 'AVAudioSession Notify Thread'
    654.  
    655.     frame #0: 0x00000001c63fa0f4 libsystem_kernel.dylib`mach_msg_trap + 8
    656.  
    657.     frame #1: 0x00000001c63f95a0 libsystem_kernel.dylib`mach_msg + 72
    658.  
    659.     frame #2: 0x00000001c67f9a10 CoreFoundation`__CFRunLoopServiceMachPort + 236
    660.  
    661.     frame #3: 0x00000001c67f4920 CoreFoundation`__CFRunLoopRun + 1360
    662.  
    663.     frame #4: 0x00000001c67f40b0 CoreFoundation`CFRunLoopRunSpecific + 436
    664.  
    665.     frame #5: 0x00000001cc6dc334 AVFAudio`GenericRunLoopThread::Entry(void*) + 156
    666.  
    667.     frame #6: 0x00000001cc706c60 AVFAudio`CAPThread::Entry(CAPThread*) + 88
    668.  
    669.     frame #7: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    670.  
    671.     frame #8: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    672.  
    673.     frame #9: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    674.  
    675.   thread #31
    676.  
    677.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    678.  
    679.     frame #1: 0x0000000106639c50 UnityFramework`FMOD_OS_Semaphore_Wait(FMOD_OS_SEMAPHORE*) + 16
    680.  
    681.     frame #2: 0x0000000106656964 UnityFramework`FMOD::Thread::callback(void*) + 124
    682.  
    683.     frame #3: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    684.  
    685.     frame #4: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    686.  
    687.     frame #5: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    688.  
    689.   thread #32, name = 'AURemoteIO::IOThread'
    690.  
    691.     frame #0: 0x00000001c63fa0f4 libsystem_kernel.dylib`mach_msg_trap + 8
    692.  
    693.     frame #1: 0x00000001c63f95a0 libsystem_kernel.dylib`mach_msg + 72
    694.  
    695.     frame #2: 0x00000001ca728890 AudioToolbox`AURemoteIO::IOThread::Run() + 256
    696.  
    697.     frame #3: 0x00000001ca72d800 AudioToolbox`AURemoteIO::IOThread::Entry(void*) + 76
    698.  
    699.     frame #4: 0x00000001cab004f8 AudioToolbox`CAPThread::Entry(CAPThread*) + 88
    700.  
    701.     frame #5: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    702.  
    703.     frame #6: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    704.  
    705.     frame #7: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    706.  
    707.   thread #33
    708.  
    709.     frame #0: 0x00000001c6405400 libsystem_kernel.dylib`__semwait_signal + 8
    710.  
    711.     frame #1: 0x00000001c637c56c libsystem_c.dylib`nanosleep + 212
    712.  
    713.     frame #2: 0x00000001c637c444 libsystem_c.dylib`usleep + 64
    714.  
    715.     frame #3: 0x00000001066397c4 UnityFramework`FMOD_OS_Time_Sleep(unsigned int) + 20
    716.  
    717.     frame #4: 0x00000001066569cc UnityFramework`FMOD::Thread::callback(void*) + 228
    718.  
    719.     frame #5: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    720.  
    721.     frame #6: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    722.  
    723.     frame #7: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    724.  
    725.   thread #34, name = 'com.apple.CoreMotion.MotionThread'
    726.  
    727.     frame #0: 0x00000001c63fa0f4 libsystem_kernel.dylib`mach_msg_trap + 8
    728.  
    729.     frame #1: 0x00000001c63f95a0 libsystem_kernel.dylib`mach_msg + 72
    730.  
    731.     frame #2: 0x00000001c67f9a10 CoreFoundation`__CFRunLoopServiceMachPort + 236
    732.  
    733.     frame #3: 0x00000001c67f4920 CoreFoundation`__CFRunLoopRun + 1360
    734.  
    735.     frame #4: 0x00000001c67f40b0 CoreFoundation`CFRunLoopRunSpecific + 436
    736.  
    737.     frame #5: 0x00000001c67f4e0c CoreFoundation`CFRunLoopRun + 80
    738.  
    739.     frame #6: 0x00000001cc142c08 CoreMotion`___lldb_unnamed_symbol2459$$CoreMotion + 1020
    740.  
    741.     frame #7: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    742.  
    743.     frame #8: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    744.  
    745.     frame #9: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    746.  
    747.   thread #35, name = 'Loading.PreloadManager'
    748.  
    749.     frame #0: 0x00000001c63fa130 libsystem_kernel.dylib`semaphore_wait_trap + 8
    750.  
    751.     frame #1: 0x00000001c624a798 libdispatch.dylib`_dispatch_sema4_wait$VARIANT$mp + 24
    752.  
    753.     frame #2: 0x00000001c624b21c libdispatch.dylib`_dispatch_semaphore_wait_slow + 140
    754.  
    755.     frame #3: 0x000000010656b404 UnityFramework`Baselib_SystemSemaphore_Acquire + 28
    756.  
    757.     frame #4: 0x000000010633f404 UnityFramework`PreloadManager::Run() + 168
    758.  
    759.     frame #5: 0x000000010633f350 UnityFramework`PreloadManager::Run(void*) + 12
    760.  
    761.     frame #6: 0x000000010639b660 UnityFramework`Thread::RunThreadWrapper(void*) + 76
    762.  
    763.     frame #7: 0x00000001c64872c0 libsystem_pthread.dylib`_pthread_body + 128
    764.  
    765.     frame #8: 0x00000001c6487220 libsystem_pthread.dylib`_pthread_start + 44
    766.  
    767.     frame #9: 0x00000001c648acdc libsystem_pthread.dylib`thread_start + 4
    And I also attached a screenshot from Xcode.
     

    Attached Files:

    Last edited: Apr 29, 2020
  4. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Do you mind editing this to use code tags? Pasting it directly into your response makes the page harder to navigate. Also, this is the same crash as the one I've reported to Apple. I'm waiting to hear back.
     
  5. Shane-Pangea

    Shane-Pangea

    Joined:
    Dec 12, 2012
    Posts:
    38
    Thanks Lanre! Can you give an example of how to use a criterion with a uniqueID? I'm not sure how that syntax would look.
     
  6. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Code (CSharp):
    1. var criterion = device => device.uniqueID == "Whatever unique ID";
     
    Shane-Pangea likes this.
  7. pjdVR

    pjdVR

    Joined:
    Sep 8, 2017
    Posts:
    1
    Hi, I've purchased the plugin for the purposes of capturing high res images via webcam on Windows.

    Having played around with the plugin, I can't seem to be able to use any attached or integrated webcams as a CameraDevice, only GenericCameraDevice's are detected.

    Is it possible to capture high res images via webcam on Windows at all?

    Thanks
     
  8. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    On standalone platforms, NatDevice falls back to WebCamTexture. Webcams don't offer nearly as much functionality as mobile cameras.
     
  9. DrSharky

    DrSharky

    Joined:
    Dec 7, 2016
    Posts:
    17
    Hello, I've been trying to use NatCorder to record video with microphone input, using the ReplayCam demo as an example. On iOS this works fine, but on Android the microphone input is very low. I can't do much about this myself as the audio input is based on the audio source component, and the volume for that is already set to max.
    If I used NatDevice, would there be a way around this? I don't have NatDevice yet, and I'm wondering if it would be a good idea to get it if it fixes this. Thanks for the work on the NatSuite. There really should be more stuff exposed to Unity from mobile devices like this in the first place.
     
  10. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    If the volume is low from the microphone itself, then there isn't anything you can do to rectify it except manually amplifying the samples in code. Chances are that NatDevice won't help here because the issue is coming from a level below both NatDevice and Unity's Microphone API.
    In this case specifically, microphones don't expose any volume or attenuation controls.
     
    DrSharky likes this.
  11. snorrsi

    snorrsi

    Joined:
    Jan 30, 2017
    Posts:
    12
    Hi @Lanre, we have been using NatMic and tried to move over to NatDevice recently. There were however couple of issues we found out which sadly made our app unable to use NatDevice.

    a) NatDevice seems to require Camera at all times, even if we are only requesting access for Microphone and using microphone device.
    Can we ban NatDevice to request Camera permission? It seems to add it automatically in Android manifest as well, which can be removed but we got stuck in iOS.

    b) NatDevice is only compiled for iOS arm64. Is it not armv7 compatible? Can you compile armv7 compatible version of NatDevice ? . We are still supporting armv7 and haven't decided to stop supporting it.
     
  12. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I'm not sure what you mean by 'require the camera at all times'. We need to specify the camera and microphone permission tags in the manifest. There is no way around this.
    NatDevice does not ask for permissions when the app starts. So if you are seeing a permissions dialog, then it is likely because you have WebCamTexture somewhere in your scene. Unless you start a camera device or explicitly call RequestPermissions, NatDevice doesn't ask for permissions.
    NatCorder, NatDevice, NatShare, and NatReader all require iOS 11+, and no armv7 device supports iOS 11, so they are all built exclusively for the arm64 architecture. See the data on this page.
     
  13. snorrsi

    snorrsi

    Joined:
    Jan 30, 2017
    Posts:
    12
    Thanks for quick reply. Seems we missed that iOS 11+ requirement. Luckily for us updated NatMic fixed our issues. We called RequestPermission to Mic, and when we did then we got popup for that first, but then after we accepted Mic permissions, Camera permission popped up. If we did not request specific permission then we always got Camera first and then Mic. This always happened when using builtin Mic with echo cancellation on iPhone 8 plus.
     
    Lanre likes this.
  14. DrSharky

    DrSharky

    Joined:
    Dec 7, 2016
    Posts:
    17
    Well I used NatDevice and somehow it fixed the volume problem I was having. I think it was using Unity's Microphone API that was the problem maybe? I don't really know.

    And as far as things being exposed, I just mean that I think that some of these device functions should be easier to access within Unity, at least from my perspective.

    Incidentally enough, I have another issue, this time with iOS. I'm basically copying the ReplayCam example exactly with iOS. The first recording in the application works fine. Then if the user quits and re-opens the application, and records again, the audio is delayed. This can be repeated to further delay the audio recording.

    I'm pretty sure this occurs with the default ReplayCam example, without anything changed.

    EDIT: Well I fixed my issue by using Natcorder + NatDevice on iOS. Before, I was only using NatCorder. I think the above issue still occurs in the ReplayCam example on both platforms. Also, on iOS, I had to use the AudioSettings.outputSampleRate instead of the sample rate from the audioDevice, as was shown in NatDevice. The sample rate should be the same with either option, from what I can tell, but somehow that made a difference. Maybe it was something else I did, but I can't pinpoint what else it could've been.
     
    Last edited: May 5, 2020
  15. kotsopoulos

    kotsopoulos

    Joined:
    Nov 6, 2014
    Posts:
    22
    Hi, in order to make my object detection scene with OpenCvForUnity on an android phone better (brighter camera and high fps ) I purchased the NatDevice from asset store.

    I tested on Xiaomi Redmi 5A and on Samsung galaxy S10

    and the problem is that while with WebCamTextureToMat Helper when you set Initialize (Screen.width, Screen.Height)

    it is covering the whole screen, in the NatCamWebCamTexturePreviewHelper when i set the resolution 1080x1920 or Initialize(Screen.width, Screen.heigth) is not goif full screen

    Why is that happening???
     
  16. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    It's really hard to tell, no clue.
    I'm not able to reproduce this, and quitting the application (as opposed to suspending it) should definitely not produce an issue like this. Can you confirm?
    This is a known bug on iOS. For some reason iOS reports the wrong sample rate before the first time the microphone starts. Immediately after that, it reports the correct value. I'm working on it.
     
    DrSharky likes this.
  17. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I'm not too sure how the NatDeviceWithOpenCVExample UI is setup, but you might want to check that the raw image or UI plane is set to cover the entire screen. You can use an AspectRatioFitter component for this.
     
  18. fizzbuzzph

    fizzbuzzph

    Joined:
    Jul 4, 2018
    Posts:
    2
    Hi Lanre,

    Any update on the crash on EXC_BAD_ACCESS from Bridge.CameraDevices ?
     
  19. kotsopoulos

    kotsopoulos

    Joined:
    Nov 6, 2014
    Posts:
    22
    I am referring to the NatDeviceCamPreviewToMatHelperExample scene
    With an orothgraphic camera and a quad as the first object to show
    When i set Initialize(Screen.width, Screen.Height) (canvas size: 1080,1920) in a Pixel 1 without adding the compontent Aspect Ratio Fitter
    it goes full screen but not in a samsung galaxy s 10

    Any Idieas, is it the phone that cant take that resolution
     
  20. DrSharky

    DrSharky

    Joined:
    Dec 7, 2016
    Posts:
    17
    For the bug I was reporting on regarding quitting the application, I actually meant suspending it. That was my bad. I fixed that by using NatDevice's audio device system instead of using Unity's Microphone API. Maybe I was just using the Unity Microphone system wrong, but whatever works.

    Good to know the other known bug. I'll just have to remember about using the other reported sample rate for iOS for now. Thanks!
     
  21. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Not just yet, Apple hasn't gotten back to me. I got a report that NatCam, NatDevice's predecessor, doesn't have this issue but it is expected since NatCam was built with an older version of the iOS SDK. In any case I'm working to deploy the old code and do an incremental upgrade to NatDevice's current code in hopes to isolate the cause of the crash.
     
  22. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I'm not sure why you are using an orthographic camera. Why not just use a normal perspective camera along with a UI canvas? Then make sure your UI panel has an aspect ratio fitter.
     
  23. MultivariousDev01

    MultivariousDev01

    Joined:
    May 22, 2014
    Posts:
    28
    Sent an email to the email I've used before (the o**********f one)

    I have separate suspicions that Google VR plugin for Unity may be to blame, (at the very least it's causing issues of its own,) but soon I'll be swapping it out with their new native Cardboard plugin that's getting released this week, so I'll see, I guess. Let me know if the XCode logs are useful!
     
    Lanre likes this.
  24. Conor_Tradiebot

    Conor_Tradiebot

    Joined:
    Mar 2, 2020
    Posts:
    3
    Hi I have both NatCorder and NatDevice and I am having a build error saying that I have two instances of plugins with the same name.

    In my assets folder I have a “NatSuit” (NatCorder) folder and a “NatDevice” folder which both have a “plugin” folder and both have an “Android” folder.

    The files that have the same name are Natcorder and NatRender (could be NatRendor)

    If any one has had this issue do they have any tips on how to fix it?

    (sorry for the unsure-ness about the file name, it’s a question for the work I have to do tomorrow and I’m not at work)
     
  25. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Sorry for the late response; I just responded to your email.
     
  26. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I responded to your email.
     
  27. m4kvrstudios

    m4kvrstudios

    Joined:
    Jan 21, 2020
    Posts:
    10
    Hi, I'm getting worse quality photos with the plugin compared to the camera on my Samsung. The colors are way sharper and details a lot clearer in the original camera app. Any idea of how to fix this?
     
  28. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    The only thing you can check is that your photo resolution is high (set the photo resolution to something like (9999, 9999)). It is not uncommon for camera apps to perform image post-processing like sharpening and color enhancement. So you can't use them as a baseline.
     
  29. m4kvrstudios

    m4kvrstudios

    Joined:
    Jan 21, 2020
    Posts:
    10

    are they doing this at runtime? The original samsung camera "preview texture" is also a lot better.
     
  30. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Realtime image filters are everywhere; in fact this is Snapchat's entire product.
     
  31. bernardfrancois

    bernardfrancois

    Joined:
    Oct 29, 2009
    Posts:
    373
    It seems the documentation link in the very first post here doesn't work any more.
     
  32. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I'll fix that. I've been migrating to new online docs. I should note that the NatDevice docs are currently incomplete.
     
  33. vn_man

    vn_man

    Joined:
    Jun 7, 2017
    Posts:
    24
    Hi Lanre,
    I try get timestamp and samplebuffer for my purpose, but debug always result = 0
    Code (CSharp):
    1. async void Start () {
    2.             // Request mic permissions
    3.             if (!await MediaDeviceQuery.RequestPermissions<AudioDevice>()) {
    4.                 Debug.LogError("User did not grant microphone permissions");
    5.                 return;
    6.             }
    7.             // Create a media device query for audio devices
    8.             var deviceQuery = new MediaDeviceQuery(MediaDeviceQuery.Criteria.AudioDevice);
    9.             // Get the device
    10.             device = deviceQuery.currentDevice as AudioDevice;
    11.             Debug.Log($"{device}");
    12.             if (device != null)
    13.                 device.StartRunning(OnSampleBuffer);
    14.         }
    15.  
    16.         void OnSampleBuffer (float[] sampleBuffer, long timestamp) {
    17.            
    18.             //var position = Microphone.GetPosition(null);
    19.  
    20.             Debuger.Log("timestamp: " + timestamp);
    21.             Debuger.Log("Max: " + sampleBuffer.Max());
    22. }
    so I don't understand it
    and with Unity API, it has Microphone.GetPosition(null), so with NatDevice how we can get it value?
     
  34. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I'm a bit confused. Are you saying that the array max is always zero? If so, then what device does this happen on? If you are testing on iOS, this will happen if the app doesn't have microphone permissions.
     
  35. jose_pedro_didimo

    jose_pedro_didimo

    Joined:
    May 2, 2018
    Posts:
    15
    Hi Lanre,
    we've purchased the upgrade but it is crashing the editor immediately.
    This is reproducible in a blank project with only the plugin imported, trying to run the minicam scene
    I have already tried various unity versions to no avail: 2019.2.6f1, 209.2.17f, 2019.3.0f5, and 2019.3.13f1. All on MacOS.
    Please advise.
     
  36. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I responded to your email. It's likely because of macOS Catalina's permissions.
     
    jose_pedro_didimo likes this.
  37. t1h

    t1h

    Joined:
    May 25, 2016
    Posts:
    4
    Hi, I want to record video that Avatar Lipsyncing what I'm talking about, using NatCorder, NatDevice and Oculus Lipsync on Oculus Quest.
    I tried and got Oculus Lipsync getting an error "Timeout initializing microphone".
    Can't NatDevice and Lipsync asset be used together?
    Could you give me any advice if possible?
     
  38. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    Two clients cannot access the camera or microphone at the same time. So if your lipsyncing uses the microphone, NatDevice cannot use it and vice versa.
     
    t1h likes this.
  39. JABIIGroup

    JABIIGroup

    Joined:
    Jun 8, 2020
    Posts:
    1
    Hi,

    I just updated to the latest versions of NatSuite and NatDevice. Everything works like a charm on Android, but when i run the same code on iOS, it only finds one microphone (built-in microphone), which makes the audio lag and also mute and then play it all really fast at the end. I have tested this on iPhone 7 and XS. Shouldnt they find more than one microphone?
    This is the code for the microphone:

    Code (CSharp):
    1.         // Request mic permissions
    2.         if (!await MediaDeviceQuery.RequestPermissions<IAudioDevice>())
    3.         {
    4.             Debug.LogError("User did not grant microphone permissions");
    5.             return;
    6.         }
    7.  
    8.         var deviceQuery = new MediaDeviceQuery(MediaDeviceQuery.Criteria.AudioDevice);
    9.         Debug.Log("number of mics: " + deviceQuery.count);
    10.         if (deviceQuery.count > 1)
    11.         {
    12.             for (int i = 0; i < deviceQuery.count; i++)
    13.             {
    14.                 deviceMicrophoneAudio = deviceQuery.currentDevice as AudioDevice;
    15.                 if (deviceMicrophoneAudio.echoCancellation)
    16.                 {
    17.                     break;
    18.                 }
    19.                 else
    20.                 {
    21.                     deviceQuery.Advance();
    22.                 }
    23.             }
    24.         }
    25.         else
    26.         {
    27.             deviceMicrophoneAudio = deviceQuery.currentDevice as AudioDevice;
    28.         }
    29.         Debug.Log($"{deviceMicrophoneAudio}");
     
    iangerardmcnamara likes this.
  40. iangerardmcnamara

    iangerardmcnamara

    Joined:
    Dec 1, 2017
    Posts:
    3
    Hi Lanre, I am seeing similar to what is said in the above post.

    I am seeing:

    2 mics on Android (Both built in) Galaxy S9.
    1 mic on iOS (iPhone Microphone) iPhone 8.

    Android recording and playback are fine, using built in mics.
    Unity Editor recording and playback are fine.

    iOS constantly fails after CommitSamples.
    In ClipRecorder.cs - FinishWriting() - AudioClip.Create throws an exception claiming

    ArgumentException: Length of created clip must be larger than 0.

    (I read a previous post suggesting this happens on first attempt only but I get it constantly on iOS)

    I've immediately logged out the variables prior to this call to AudioClip.Create in this function.

    byteSamples.Length = 667648
    totalSampleCount = 166912

    It's also worth knowing that:
    Neither platform running Natdevice will recognise a connected bluetooth mic as a listed device for selection.
    Neither platform will record from the bluetooth mic. (Android will record from built in mics and playback audio in the bluetooth headset.)

    Any help or advice would be very appreciated.

    Edit: FYI - this is post successful permissions acceptance.
     
    Last edited: Jun 10, 2020
  41. vn_man

    vn_man

    Joined:
    Jun 7, 2017
    Posts:
    24
    Hi Lanre,
    sorry I'm busy on other project so I forget this
    "Are you saying that the array max is always zero" -> yes, both timestamp and sampleBuffer.Max() always log 0
    "If you are testing on iOS, this will happen if the app doesn't have microphone permissions"-> I think microphone device work fine because video after record have sound
    thanks!
     
  42. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    This is correct behaviour. NatDevice will only find microphones for each connected microphone. So if you have no external devices (like AirPods) plugged in, then there's only going to be one device. If you have headphones, that's 2 devices. And so on.
    This audio lag could be an issue we have been facing with iOS where it incorrectly reports the sample rate and channel count until after the microphone has started recording. We have fixed this in the upcoming 1.0.2 update.
    In the next update, this will be only 1 built-in microphone. The reason why NatDevice reports two is because of echo cancellation (one supports, the other doesn't). We've changed this such that `echoCancellation` is now a read-write property on the audio device.
    This is weird. I can't reproduce it on my end, and the number of samples is clearly non-zero. It could be a Unity bug.
    On Android, NatDevice doesn't detect external microphones as independent devices. This is because the Android API's don't expose this until API level 23, and NatDevice's minimum is 21. On iOS, you should be getting a device for bluetooth microphones on NatDevice 1.0.1 (the current Asset Store version). For example, I get my AirPod Pro's as a second audio device after the built in mic.
     
    iangerardmcnamara likes this.
  43. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    This definitely sounds like you don't have permissions. Check the device's Settings to confirm.
     
  44. iangerardmcnamara

    iangerardmcnamara

    Joined:
    Dec 1, 2017
    Posts:
    3
    Lanre, thank you for the response.

    it was quite informative, can you confirm the version of Unity that you are using?

    I'll test mine against that version and see what happens.
     
  45. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I use Unity 2019.3.
     
    iangerardmcnamara likes this.
  46. Sckir

    Sckir

    Joined:
    Apr 13, 2017
    Posts:
    2
    Good afternoon! First of all amazing asset!

    I'm using it to record audio, however for example on Windows my microphone list shows 2 devices, which would be the plugged in one (which records) and a virtual oculus one which doesn't, how can I select a default or make sure that the one selected is indeed recording?

    So current behaviour when I use "query.currentDevice" gives me the virtual one which doesn't record I have to manually set the index to 1, which then doesn't work on all platforms I support, how can I default to a mic that actually records?

    Thank you so so much!
     
  47. LT23Live

    LT23Live

    Joined:
    Jul 8, 2014
    Posts:
    95
    @Lanre - Hope all is well and you managed to stay healthy. Sent you an email recently about a bug i was facing with Nat Device.

    I have a literal copy and paste straight from your documentation/readme and my camera device keeps coming back as null when I try to call the command capture photo.But interestingly i do see a camera feed.

    Using unity 2019.3.12
     
  48. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I am not familiar with this concept of virtual microphones, or microphones which record or don't record. Windows doesn't make any distinction; MediaFoundation reports audio capture devices, and we simply forward these to Unity. As such I don't think there is anything we can do on our end. A simple workaround for you is to search for a device that is not the Vuforia microphone.
     
  49. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    3,971
    I responded to your email. You need to check if you have a `CameraDevice` instance or a `WebCameraDevice` instance. The former supports photo capture; the latter doesn't.
     
  50. AdminOh

    AdminOh

    Joined:
    Feb 11, 2016
    Posts:
    23
    Hello @Lanre.

    We have just purchased your plugin and are running into a slight issue. We use your plugin with an Android tablet (Samsung Galaxy A T550 - with a 4:3 aspect ratio). In portrait mode and using the back camera, the camera feed preview is displayed properly but when we call the CapturePhoto() the capture is flipped horizontally.

    Unfortunately this way text become unreadable unless we flip back ourselves the resulting texture2D. We could not find a way to have acapture that matches the preview using only functions from your plugin.

    Is this a bug or is there a way to configure this?

    Thanks.