Re: AudioQueueNewOutput and the runloop
Re: AudioQueueNewOutput and the runloop
- Subject: Re: AudioQueueNewOutput and the runloop
- From: patrick machielse <email@hidden>
- Date: Mon, 29 Oct 2012 15:22:50 +0100
Op 28 okt. 2012, om 00:47 heeft Wil Macaulay <email@hidden> het volgende geschreven:
>> On Tue, Oct 23, 2012 at 9:07 AM, patrick machielse <email@hidden> wrote:
>> Op 22 okt. 2012, om 22:53 heeft Michael Miller <email@hidden> het volgende geschreven:
>>
>> > I can certainly speculate. If your output settings require conversion (i.e., decoding AAC audio), AV Foundation will use AudioQueue to do that conversion. We've been seeing crashes related to AVAssetReader and AudioQueue under OS X 10.8.2 in our own code. We've now resorted to decoding the frames by hand using AudioConverter to work around the above crashes. Since AVAssetReader is relying on AudioQueues, I can certainly imagine calling copyNextSampleBuffer on the AudioQueue thread causing problems.
>> >
>> > Have you tried either specifying a runloop instead of letting AudioQueueNewOutput decide or using the dispatch queue version?
>>
>> Also, because I'm on iOS the dispatch queue API is not available.
>
> You can use dispatch queues in iOS 5 and greater (IIRC)
I think Michael was refering to AudioQueueNewOutputWithDispatchQueue(), which is not available on iOS.
I'm still running in to the original problem:
> in 'queueCallback', eventually AVAssetReader is used to decode frames from an audio file
>
> CMSampleBufferRef nextBuffer = [output copyNextSampleBuffer];
>
>
> Sometimes this call hangs:
>
> Thread 21 AQClient, Queue : (null)
> #0 0x3a0bdeb4 in mach_msg_trap ()
> #1 0x3a0be04c in mach_msg ()
> #2 0x38043044 in __CFRunLoopServiceMachPort ()
> #3 0x38041da2 in __CFRunLoopRun ()
> #4 0x37fb4ebc in CFRunLoopRunSpecific ()
> #5 0x37fb4d48 in CFRunLoopRunInMode ()
> #6 0x3842e658 in -[AVRunLoopCondition _waitInMode:untilDate:] ()
> #7 0x383e49b8 in -[AVAssetReaderOutput copyNextSampleBuffer] ()
It now seems that this situation can occur after I'm manipulating the AudioQueue object from the main thread -- for instance by calling AudioQueueStop() or AudioQueueReset().
I'd like to try passing a different CFRunLoopRef into the call to AudioQueueNewOutput().
What would be the best way to go about doing that (creating a thread / options)?
Thanks,
patrick
--
Patrick Machielse
Hieper Software
http://www.hieper.nl
email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden