Yes, it works for other inputs. But I can't see my error:
OSStatus MyDeviceGetProperty(AudioHardwarePlugInRef inSelf,
AudioDeviceID inDevice,
UInt32 inChannel,
Boolean isInput,
AudioDevicePropertyID inPropertyID,
UInt32* ioPropertyDataSize,
void* outPropertyData)
{
OSStatus err = kAudioHardwareNoError;
switch (inPropertyID) {
case kAudioDevicePropertyDataSourceNameForID:
{
if (*ioPropertyDataSize < sizeof (AudioValueTranslation)){
err = kAudioHardwareBadPropertySizeError;
}else{
AudioValueTranslation* trl =
(AudioValueTranslation*)outPropertyData;
printf("DeviceGetProperty:
kAudioDevicePropertyDataSourceNameForID: \n ioPropertyDataSize %ld
\n
mInputData %p \n mInputDataSize %ld \n mOutputData %p \n
mOutputDataSize
%ld\n",
*ioPropertyDataSize,
trl->mInputData,
trl->mInputDataSize,
trl->mOutputData,
trl->mOutputDataSize);
if (trl->mInputData
&& *(UInt32*)trl->mInputData ==
kMyInputID)
{
char* data = (char*) trl->mOutputData;
if (data) {
strlcpy(data,m_nameString,trl->mOutputDataSize);
} else {
printf("DeviceGetProperty : no buffer
%p\n",data);
err = kAudioHardwareIllegalOperationError;
}
trl->mOutputDataSize =
min(strlen(m_nameString
)+1,trl->mOutputDataSize);
} else if (NULL == trl->mInputData ) {
printf("DeviceGetProperty : no input %p\n",
trl->mInputData);
err = kAudioHardwareIllegalOperationError;
} else {
printf("DeviceGetProperty : wrong input %ld\n",
*(UInt32*)trl->mInputData);
err = kAudioHardwareUnspecifiedError;
}
*ioPropertyDataSize = sizeof(AudioValueTranslation);
}
break;
}
}
return err;
}
The fun thing is that quite similar code for
kAudioDevicePropertyDataSourceNameForIDCFString works fine when
triggered in
HALLab.
That certainly doesn't look right. There isn't any translation
data.
Does it work correctly for the built-in hardware? If it does, it
most
likely means you are accidently munging the translation data
somewhere
in the
dispatching code.
If it doesn't, it likely means the bug is on the
QuickTime/SoundManager
side.
On Nov 4, 2004, at 2:39 AM, Dirk Musfeldt wrote:
Is it possible that QuickTime or the SoundManager layer is doing
this
wrong?
If I use HackTV with my plug-in and open the Sounbd settings I get
this:
DeviceGetProperty: kAudioDevicePropertyDataSourceNameForID:
ioPropertyDataSize 16
mInputData 0x0
mInputDataSize 0
mOutputData 0x0
mOutputDataSize 0
But I could see other input names so there must be a way to signal
this.
What am I doing wrong?
If the mOutputData field is NULL or the mOutputDataSize field is
0, it
is an error by the caller of AudioDeviceGetProperty() and you
should
return kAudioHardwareIllegalOperationError.
If mOutputData is not NULL but mOutputDataSize is smaller than
the
string you want to return, you should truncate the string to fit
in
the
provided buffer.
On Nov 3, 2004, at 5:18 AM, Dirk Musfeldt wrote:
Hi all,
I'm doing an AudioHardwarePlugIn and have troubles to get my
reaction
on
kAudioDevicePropertyDataSourceNameForID right.
I get an AudioValueTranslation record and want to copy my C
string
into the
buffer provided with the mOutputData field.
strcpy((char*)translation->mOutputData,nameString);
But what if mOutputData and mOutputData Size are null? Do I have
to
malloc a
buffer myself?
Regards
Dirk
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40apple.com
This email sent to email@hidden
Regards
Dirk
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40apple.com
This email sent to email@hidden
Mit freundlichen Grüßen
Dirk Musfeldt
Meilenstein Mac OS Software
Neue Strasse 5
D-31582 Nienburg
Tel: +49 (0) 5021 91 24 44
Fax: +49 (0) 5021 91 24 45
<http://www.meilenstein.de/>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40meilenstein.
de
This email sent to email@hidden