• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Problem in AUElement::SaveState, conversion from Float32 -> UInt32 not working in non debug mode
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problem in AUElement::SaveState, conversion from Float32 -> UInt32 not working in non debug mode


  • Subject: Problem in AUElement::SaveState, conversion from Float32 -> UInt32 not working in non debug mode
  • From: Chris <email@hidden>
  • Date: Thu, 23 Aug 2007 12:10:45 +0200

Hello,

I can't save the state of my AU, because AUElement::SaveState is not working properly.
I think the issue is a compilation option problem linked to data alignment.
In debug mode, it's working fine.

In non debug mode, data are not converted properly (mostly result is zero).

To find out, I added a few lines of code.
I found the *(UInt32*)&v conversion is not working depending on its alignment.
(see the two examples below, performing two conversion. Always, the first conversion is failing.
I inverted the conversions between the two trials. Each conversion is working when it is in second
position).

What can I do??

Thanks,
Chris



AUBase::SaveState
sizeof Float32=4 UInt32=4
  AUElement::*(UInt32 *)&v   v=103.000000 vi=0		<-- NOK
  AUElement::EndianU32_NtoB 103.000000-> 1120796672	<-- OK


void AUElement::SaveState(CFMutableDataRef data)
{
{
	printf("sizeof Float32=%ld UInt32=%ld\n",sizeof(Float32),sizeof(UInt32));
	Float32 v = 103.0f;
	UInt32 vi = *(UInt32 *)&v;
	printf("  AUElement::*(UInt32 *)&v   v=%f vi=%ld\n",v,vi);
	UInt32 i = EndianU32_NtoB(*(UInt32 *)&v);
	printf("  AUElement::EndianU32_NtoB %f-> %ld\n",v,i);
}
...
}

//////////////////////////////////////////////////////
AUBase::SaveState
sizeof Float32=4 UInt32=4
  AUElement::EndianU32_NtoB 103.000000-> 0		<--NOK
  AUElement::*(UInt32 *)&v   v=103.000000 vi=1120796672	<-- OK


void AUElement::SaveState(CFMutableDataRef data)
{
{
	printf("sizeof Float32=%ld UInt32=%ld\n",sizeof(Float32),sizeof(UInt32));
	Float32 v = 103.0f;
	UInt32 i = EndianU32_NtoB(*(UInt32 *)&v);
	printf("  AUElement::EndianU32_NtoB %f-> %ld\n",v,i);
	UInt32 vi = *(UInt32 *)&v;
	printf("  AUElement::*(UInt32 *)&v   v=%f vi=%ld\n",v,vi);
}
...
}
 _______________________________________________
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

  • Follow-Ups:
    • Re: Problem in AUElement::SaveState, conversion from Float32 -> UInt32 not working in non debug mode
      • From: Doug Wyatt <email@hidden>
  • Prev by Date: Re: CallHostTransportState doesn't return to stopped state
  • Next by Date: Re: CallHostTransportState doesn't return to stopped state
  • Previous by thread: Re: CallHostTransportState doesn't return to stopped state
  • Next by thread: Re: Problem in AUElement::SaveState, conversion from Float32 -> UInt32 not working in non debug mode
  • Index(es):
    • Date
    • Thread