http://blog.sina.com.cn/s/blog_76550fd70101gh1q.html
typedef struct ParseContext{
unsigned int FrameStartFound;
unsigned int iFrameLength;
} ParseContext;
signed int DecLoadAU(unsigned char* pStream, unsigned int iStreamLen, ParseContext *pc)
{
unsigned int i;
unsigned int state = 0xffffffff;
if( NULL == pStream )
{
return -1;
}
for( i = 0; i < iStreamLen; i++)
{
if( (state & 0xFFFFFF1F) == 0x101 || (state & 0xFFFFFF1F) == 0x105 )
{
if (i >= iStreamLen)
{
break;
}if( pStream[i] & 0x80)
{
if(pc->FrameStartFound)
{
pc->iFrameLength = i - 4;
pc->FrameStartFound = 0;
state = 0xffffffff;
return 0;
}
else
{
pc->FrameStartFound = 1;
}
}
}
if (i < iStreamLen)
{
state = (state << 8) | pStream[i];
}
}
pc->FrameStartFound = 0;
return -1;
}