void HP_Stream::GetPropertyData(const AudioObjectPropertyAddress& inAddress, UInt32 inQualifierDataSize, const void* inQualifierData, UInt32& ioDataSize, void* outData) const { // take and hold the state mutex CAMutex::Locker theStateMutex(const_cast<HP_Device*>(mOwningDevice)->GetStateMutex()); switch(inAddress.mSelector) { case kAudioObjectPropertyName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyName"); *static_cast<CFStringRef*>(outData) = CopyStreamName(); break; case kAudioObjectPropertyManufacturer: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyName"); *static_cast<CFStringRef*>(outData) = CopyStreamManufacturerName(); break; case kAudioObjectPropertyElementName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyElementName"); *static_cast<CFStringRef*>(outData) = CopyElementFullName(inAddress); break; case kAudioObjectPropertyElementCategoryName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyElementCategoryName"); *static_cast<CFStringRef*>(outData) = CopyElementCategoryName(inAddress); break; case kAudioObjectPropertyElementNumberName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyElementNumberName"); *static_cast<CFStringRef*>(outData) = CopyElementNumberName(inAddress); break; case kAudioStreamPropertyDirection: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyDirection"); *static_cast<UInt32*>(outData) = IsInput() ? 1 : 0; break; case kAudioStreamPropertyTerminalType: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyTerminalType"); *static_cast<UInt32*>(outData) = GetTerminalType(); break; case kAudioStreamPropertyStartingChannel: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyStartingChannel"); *static_cast<UInt32*>(outData) = GetStartingDeviceChannelNumber(); break; case kAudioStreamPropertyLatency: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyLatency"); *static_cast<UInt32*>(outData) = GetLatency(); break; default: HP_Object::GetPropertyData(inAddress, inQualifierDataSize, inQualifierData, ioDataSize, outData); break; }; }
// WARNING - don't rely on this method - the return value of // GetTerminalType is driver specific - the checked return // values are only recommendations from apple bool CCoreAudioStream::IsDigitalOuptut(AudioStreamID id) { UInt32 type = GetTerminalType(id); // yes apple is mixing types here... return (type == kAudioStreamTerminalTypeDigitalAudioInterface || type == kIOAudioDeviceTransportTypeDisplayPort || type == kIOAudioDeviceTransportTypeHdmi || type == kIOAudioDeviceTransportTypeFireWire || type == kIOAudioDeviceTransportTypeThunderbolt || type == kIOAudioDeviceTransportTypeUSB); }
int EasyProtocol::GetTerminalType() { std::string sTerminalType = root[EASY_TAG_ROOT][EASY_TAG_HEADER][EASY_TAG_TERMINAL_TYPE].asString(); return GetTerminalType(sTerminalType); }