Browse Source

Correct AAC handling of different AOT

Philippe G 3 years ago
parent
commit
852e312879
1 changed files with 6 additions and 5 deletions
  1. 6 5
      components/squeezelite/helix-aac.c

+ 6 - 5
components/squeezelite/helix-aac.c

@@ -152,27 +152,28 @@ static int read_mp4_header(unsigned long *samplerate_p, unsigned char *channels_
 				return -1;
 			}
 			int desc_len = mp4_desc_length(&ptr);
-			info.profile = *ptr >> 3;
+			int AOT = *ptr >> 3;
+			info.profile = AAC_PROFILE_LC;
 			info.sampRateCore = (*ptr++ & 0x07) << 1;
 			info.sampRateCore |= (*ptr >> 7) & 0x01;
 			info.sampRateCore = rates[info.sampRateCore];								
 			info.nChans = (*ptr & 0x7f) >> 3;
 			*channels_p = info.nChans;				
 			// Note that 24 bits frequencies are not handled	
-			if (info.profile == 5) {
+			if (AOT == 5 || AOT == 29) {
 				*samplerate_p = rates[((ptr[0] & 0x03) << 1) | (ptr[1] >> 7)];
 				LOG_WARN("AAC stream with SBR => high CPU required (use LMS proxied mode)");									
 			} else if (desc_len > 2 && ((ptr[1] << 3) | (ptr[2] >> 5)) == 0x2b7 && (ptr[2] & 0x1f) == 0x05 && (ptr[3] & 0x80)) {
 				*samplerate_p = rates[(ptr[3] & 0x78) >> 3];
 				LOG_WARN("AAC stream with extended SBR => high CPU required (use LMS proxied mode)");									
-			} else if (info.profile == 2 || info.profile == 29) {
+			} else if (AOT == 2) {
 				*samplerate_p = info.sampRateCore;
 			} else {	
 				*samplerate_p = 44100;
-				LOG_ERROR("AAC audio object type %d not handled", info.profile);									
+				LOG_ERROR("AAC audio object type %d not handled", AOT);									
 			}	
 			HAAC(a, SetRawBlockParams, a->hAac, 0, &info); 
-			LOG_DEBUG("playable aac track: %u (p:%x, r:%d, c:%d, desc_len:%d)", trak, info.profile, info.sampRateCore, info.nChans, desc_len);
+			LOG_DEBUG("playable aac track: %u (p:%x, r:%d, c:%d, desc_len:%d)", trak, AOT, info.sampRateCore, info.nChans, desc_len);
 			play = trak;
 		}