I would think that your approach could work, but perhaps you might be able to reliably figure out the end of the audio data.
You asked before if the audio session knows when the end of stream is. I said the audio session doesn't really know. However, the audio decoder *does*. In the IHXAudioDecoder::Decode() call, the last argument is a bEOF argument, which says that the input encoded buffer is the last one available. Therefore the decoder should be able to tell the timestamp of the last frame audio decoded audio data it passes back to the renderer. In your scenario, is there any way for the audio device to retrieve this information from the decoder and then wait for that timestamp to be written to it? Eric ======================================= Eric Hyche ([EMAIL PROTECTED]) Principal Engineer RealNetworks, Inc. >-----Original Message----- >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of >[EMAIL PROTECTED] >Sent: Wednesday, October 01, 2008 12:18 PM >To: [email protected]; [EMAIL PROTECTED] >Subject: [Audio-dev] Audio pushdown & Stream End > >Hello All, > I'm trying to evaluate an idea of pausing & resuming scheduler for local > playback for CPU >optimization. > >As a part of this exercise, the AudioPushDown is increased (say 1 or 2 >minutes). Scheduler will be >paused and resumed based on the high and low water mark of unplayed data in >device. AudioSession >(client\audiosvc) does not detect end of stream. This results in sending lot >of silence data to the >device. The data is pushed to device is based on audio push down (Block >count). If audio push down is >huge (say 1 min), and if the playback is close to duration ( say 50 msec to >end playback), the audio >session pushes 1 min of data to device ( Mostly just silence). > >Given the problem, shouldn't the audio pushdown be dependent on presentation >duration. ? Assumption: >Presentation duration is greater among all stream playback. > >NumBlocksReqdToComplete = (PresentationDuration - CurrTime) / Granularity > >If(uNumBlocksPushed > NumBlocksReqdToComplete) { > uNumBlocksPushed = NumBlocksReqdToComplete; > > // Add a tolerance. > uNumBlocksPushed += Tolerance. (say 2 blocks, around 100 msecs) } > >We will not see this problem most of the time, if our audiopushdown values are >smaller. > > >Thanks, >Rajesh. _______________________________________________ Audio-dev mailing list [email protected] http://lists.helixcommunity.org/mailman/listinfo/audio-dev
