2014-06-14 19 views
0

ADTS 인코딩 된 aac 파일의 헤더를 읽으려면 어떻게해야합니까? 전체 aac 파일을 읽기 위해 각 프레임의 버퍼 길이를 확보해야합니다. 그러나 나는 올바른 가치를 얻을 수 없습니다. 여기서 헤더를 판독하고, 각 프레임 (비트 30-43)에 대한 버퍼 길이를 얻기 내 코드이며, 빅 엔디안 가정했을 때이 코드로 얻는 FRAMESIZE가 65C++에서 파일에서 ADTS 헤더를 읽는 방법은 무엇입니까?

main(){ 
    ifstream file("audio_adts.m4a", ios::binary); 
    char header[7],buf[1024]; 
    int framesize; 

    while(file.read(header,7)) { 
     memset(buf ,0 , 1024); 

     /* Get header bit 30 - 42 */ 
     framesize = (header[3]&240|header[4]|header[5]&1); 

     cout << "Framesize including header: "<<framesize<<endl; 
     file.read(buf,framesize); 

     /*Do something with buffer*/ 
    } 

    return 0; 
} 

, 45, 45, 45 , -17 그리고 음수 값 때문에 멈 춥니 다. 실제 framesizes 주위 첫 번째 헤더 (200)

Hexdump에서는 다음과 같습니다

0x000000: ff f9 50 40 01 3f fc 
+0

는 어떻게 알 수 있습니까 (당신의 음의 값 오류에 대한 원인) 비트 조작 이런 종류의 일을 부호 확장 문제의 모든 종류에 실행으로

또한

, unsigned charchar 변경 올바른 가치가 아닌가? 입력은 무엇이며 예상되는 결과는 무엇입니까? – wimh

+0

내 편집을 참조하십시오. 프레임의 길이는 약 200 – user2212461

+0

입니다. 따라서 첫 번째 헤더의 경우 65가되지만 200 정도가 될 것입니다. 헤더가 7 바이트이므로 첫 번째 헤더의 hexdump를 게시 할 수 있습니까? – wimh

답변

1

framesize 귀하의 추출이 올바른 위치에 추출 된 비트를 얻을 필요 <<이 누락 변화를 가질 것으로 보인다

비트 마스크는 /*bit 30-42*/ 개의 댓글과 일치하지 않습니다. 당신이 그렇지 않으면 당신은