void CodecCommander::onTimerAction() { // if infinite checks are enabled - essentially are for monitoring fugue state, sleep is fine with finite check if (checkInfinite) { // check if hda codec is powered parseCodecPowerState(); // if no power after semi-sleep (fugue) state and power was restored - set EAPD bit if (eapdPoweredDown && (hdaCurrentPowerState == 0x1 || hdaCurrentPowerState == 0x2)) { DEBUG_LOG("CodecCommander: cc: --> hda codec power restored\n"); setOutputs(); // if popping requested - generate stream at fugue-wake if (!coldBoot && generatePop){ createAudioStream(); } // simulate headphone jack replug simulateHedphoneJack(); // <------ makes sure this is needed? } } // check if audio stream is up on given output parseAudioEngineState(); // get EAPD bit status from command response if audio stream went up if (hdaEngineState == 0x1) { getOutputs(); // if engine output stream has started, but EAPD isn't up if(response == 0x0) { // set EAPD bit setOutputs(); } } fTimer->setTimeoutMS(updateInterval); }
size_t ASFStream::readBuffer(int16 *buffer, const size_t numSamples) { size_t samplesDecoded = 0; for (;;) { if (_curAudioStream) { const size_t n = _curAudioStream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); if (n == kSizeInvalid) return kSizeInvalid; samplesDecoded += n; if (_curAudioStream->endOfData()) { delete _curAudioStream; _curAudioStream = 0; } } if (samplesDecoded == numSamples || endOfData()) break; if (!_curAudioStream) { _curAudioStream = createAudioStream(); } } return samplesDecoded; }
IOReturn CodecCommander::setPowerState(unsigned long powerStateOrdinal, IOService *policyMaker) { if (kPowerStateSleep == powerStateOrdinal) { DEBUG_LOG("CodecCommander: cc: --> asleep\n"); eapdPoweredDown = true; // though this probably has been determined after parsing codec power state, we set this as false again coldBoot = false; } else if (kPowerStateNormal == powerStateOrdinal) { DEBUG_LOG("CodecCommander: cc: --> awake\n"); updateCount = 0; // This operation has to be performed right at wake or codec will enter power mode 0 immediately! // ***** // set EAPD bit at wake or cold boot if (eapdPoweredDown) { DEBUG_LOG("CodecCommander: cc: --> hda codec power restored\n"); // delay setting by 100ms, otherwise immediate command won't be received IOSleep(100); setOutputs(); } // only when this is done we can stars a check workloop! // ***** // if infinite checking requested if (checkInfinite){ // if checking infinitely then make sure to delay workloop if (coldBoot) { fTimer->setTimeoutMS(20000); // create a nasty 20sec delay for AudioEngineOutput to initialize } // if we are waking it will be already initialized else { fTimer->setTimeoutMS(100); // so fire timer for workLoop almost immediately } DEBUG_LOG("CodecCommander: cc: --> workloop started\n"); } // generate audio stream at wake if requested if (!coldBoot && generatePop){ // apply delay or it will not trigger a system event IOSleep(streamDelay); createAudioStream(); } // simulate headphone jack replug simulateHedphoneJack(); } return IOPMAckImplied; }
bool AviDecoder::loadStream(Common::SeekableReadStream *stream) { close(); _fileStream = stream; _decodedHeader = false; // Read chunks until we have decoded the header while (!_decodedHeader) runHandle(_fileStream->readUint32BE()); uint32 nextTag = _fileStream->readUint32BE(); // Throw out any JUNK section if (nextTag == ID_JUNK) { runHandle(ID_JUNK); nextTag = _fileStream->readUint32BE(); } // Ignore the 'movi' LIST if (nextTag == ID_LIST) { _fileStream->readUint32BE(); // Skip size if (_fileStream->readUint32BE() != ID_MOVI) error ("Expected 'movi' LIST"); } else error ("Expected 'movi' LIST"); // Now, create the codec _videoCodec = createCodec(); // Initialize the video stuff too _audStream = createAudioStream(); if (_audStream) _mixer->playStream(_soundType, _audHandle, _audStream); debug (0, "Frames = %d, Dimensions = %d x %d", _header.totalFrames, _header.width, _header.height); debug (0, "Frame Rate = %d", _vidsHeader.rate / _vidsHeader.scale); if (_wvInfo.samplesPerSec != 0) debug (0, "Sound Rate = %d", _wvInfo.samplesPerSec); debug (0, "Video Codec = \'%s\'", tag2str(_vidsHeader.streamHandler)); if (!_videoCodec) return false; return true; }
int ASFStream::readBuffer(int16 *buffer, const int numSamples) { int samplesDecoded = 0; for (;;) { if (_curAudioStream) { samplesDecoded += _curAudioStream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); if (_curAudioStream->endOfData()) { delete _curAudioStream; _curAudioStream = 0; } } if (samplesDecoded == numSamples || endOfData()) break; if (!_curAudioStream) { _curAudioStream = createAudioStream(); } } return samplesDecoded; }
void AVIDecoder::AVIAudioTrack::resetStream() { delete _audStream; _audStream = createAudioStream(); }
AVIDecoder::AVIAudioTrack::AVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType) : _audsHeader(streamHeader), _wvInfo(waveFormat), _soundType(soundType) { _audStream = createAudioStream(); }
void AVIDecoder::AVIAudioTrack::resetStream() { delete _audioStream; createAudioStream(); _curChunk = 0; }