Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

How to decode AAC.

billcruse
Beginner
747 Views

hi...

I try to decode AAC data from RTSP stream. The GetFrame function wlways returns error (AAC_BAD_STREAM,UMC_ERR_INVALID_STREAM).
The code as follows.


a=rtpmap:98 mpeg4-generic/8000/2
a=fmtp:98 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1590; SizeLength=13;IndexLength=3; IndexDeltaLength=3; Profile=1;

pData ={

00 10 0a 60 21 0a 05 01 05 02 c2 10 a1 1c 89 b7 0c bb df 47 35 d6 6a f7 d4 e7 5c 65 3a e6 15 72
b4 ad 20 ec 5d bf 72 33 45 18 bc 4c 0c 4a 62 07 75 6d 01 8b e7 65 6d 75 91 66 7e 81 58 cc 7f fb
73 40 82 17 35 5c 9c 02 a2 0a e3 5d 09 b8 e8 2a b6 a8 a3 9a ac cf 90 02 86 f2 df 26 11 7f 3d fa\\
a3 4a 7c b9 29 73 f9 b1 cb 3f c3 a3 fe 28 46 3e 4b e9 d7 37 b0 dd fa 2f 31 e8 6c 11 85 10 48 6a
4f e8 d4 b9 70 db b8 b7 fe cb 6a 6d 8e e1 84 67 81 9e 33 6c 1c e8 11 0b 28 fc 8e 9e 97 24 2f 36
a6 5e 50 b4 d3 05 2f 7a 34 02 af d5 f1 ac 0c f7 62 3d 47 21 34 7d 02 8a 46 43 1a 7c a6 48 32 3f
52 c9 19 0b b6 f2 0c 76 7b b9 6f d0 c0 e9 ca d7 98 13 29 ba 7c f1 28 35 56 5c ae ac 30 ab 9a 9e
95 5e d8 b5 0d 75 13 13 db d5 d7 19 4e 89 50 f9 ea 4f eb 52 45 e9 f2 09 9f 36 ab af bf e2 3a 7a
ab 7d f9 9a b8 32 dc f5 f6 b4 98 d1 b3 8d 17 74 74 04 14 0b 08 42 84 72 20 7f 4e 19 77 be 8e 6b
ac 00 00 00 07 62 ed fb 91 9a 28 c5 e2 60 62 53 10 3b ab 68 0c 5f 3b 2b 6b ac 8b 33 f4 0a c6 63
ff db 9a 04 10 b9 aa e4 e0 15 10 57 1a c2 01 c0
};

iData=336;
resultSpecialHeaderSize = 4

// offset header
pData+=resultSpecialHeaderSize;
iData-=resultSpecialHeaderSize;

//UMC::AACDecoder
UMC::AudioCodec *pHandle=(UMC::AudioCodec *)m_pHandle;
UMC::MediaData *pDataIn=(UMC::MediaData *)m_pDataIn;
UMC::AudioData *pDataOut=(UMC::AudioData *)m_pDataOut;

pDataIn->SetBufferPointer(pData,iData);
pDataIn->SetDataSize(iData);

UMC::Status status ;


UMC::AudioCodecParams param;
param.m_info_in.sample_frequency = 8000;
param.m_info_in.bitrate = 32000;
param.m_info_in.bitPerSample = 16;
param.m_info_in.channels = 2;
param.m_info_in.stream_type = UMC::AAC_MPEG4_STREAM;
param.profile = AAC_PROFILE_MAIN;
param.m_pData = pDataIn;

if(pHandle->Init(&param)!=UMC::UMC_OK)
{
return false;
}

pDataIn->SetBufferPointer(pData,iData);
pDataIn->SetDataSize(iData);

if(!m_pDataOut)
{
m_pDataOut=PF_NEW(UMC::AudioData);
pDataOut=(UMC::AudioData *)m_pDataOut;
}

pDataOut->SetBufferPointer(pBuffer,iBuffer);

status = pHandle->GetFrame(pDataIn,pDataOut);
if(status!=UMC::UMC_OK)
return false;
(AAC_BAD_STREAM,UMC_ERR_INVALID_STREAM)

How to fix the error ?

Thx.

0 Kudos
3 Replies
billcruse
Beginner
747 Views
Attach AAC-Frame00~ACC-Frame59 data.

Thx
0 Kudos
VipinKumar_E_Intel
747 Views
Have you tried the IPP samples? There are some good samples for AAC encoding and decoding in audio-video-codecs-samples
0 Kudos
VipinKumar_E_Intel
747 Views

Actually, this is not a bug of AAC Decoder. Our decoder doesnt work with RTP packet, so stream should be properly prepared. First of all, you need to initialize decoder using AudioSpecifigConfig() (0x1590 in this case) and then pass audio data.You may find an example of this usage in the following forum discussion

http://software.intel.com/en-us/forums/showthread.php?t=74291

Vipin

0 Kudos
Reply