comparison libmpcodecs/ad_hwac3.c @ 24432:79fcacd73f9b

Simplify and fix big-endian hwac3 header generation code.
author reimar
date Fri, 14 Sep 2007 08:54:06 +0000
parents acfe034e5386
children 435b37266f1e
comparison
equal deleted inserted replaced
24431:3cfff0f1d9b8 24432:79fcacd73f9b
157 { 157 {
158 return decode_audio_dts(sh_audio->a_in_buffer, len, buf); 158 return decode_audio_dts(sh_audio->a_in_buffer, len, buf);
159 } 159 }
160 else if(isdts == 0) 160 else if(isdts == 0)
161 { 161 {
162 buf[0] = 0x72; 162 uint16_t *buf16 = (uint16_t *)buf;
163 buf[1] = 0xF8; 163 buf16[0] = 0xF872;
164 buf[2] = 0x1F; 164 buf16[1] = 0x4E1F;
165 buf[3] = 0x4E; 165 buf16[2] = 0x0001;
166 buf[4] = 0x01; //(length) ? data_type : 0; /* & 0x1F; */ 166 buf16[3] = len << 3;
167 buf[5] = 0x00;
168 buf[6] = (len << 3) & 0xFF;
169 buf[7] = (len >> 5) & 0xFF;
170 #ifdef WORDS_BIGENDIAN 167 #ifdef WORDS_BIGENDIAN
171 memcpy(buf + 8, sh_audio->a_in_buffer, len); // untested 168 memcpy(buf + 8, sh_audio->a_in_buffer, len); // untested
172 #else 169 #else
173 swab(sh_audio->a_in_buffer, buf + 8, len); 170 swab(sh_audio->a_in_buffer, buf + 8, len);
174 #endif 171 #endif
325 int fsize; 322 int fsize;
326 int rate; 323 int rate;
327 int sfreq; 324 int sfreq;
328 int burst_len; 325 int burst_len;
329 int nr_samples; 326 int nr_samples;
327 uint16_t *buf16 = (uint16_t *)buf;
330 328
331 fsize = dts_decode_header(indata_ptr, &rate, &nblks, &sfreq); 329 fsize = dts_decode_header(indata_ptr, &rate, &nblks, &sfreq);
332 if(fsize < 0) 330 if(fsize < 0)
333 return -1; 331 return -1;
334 332
335 burst_len = fsize * 8; 333 burst_len = fsize * 8;
336 nr_samples = nblks * 32; 334 nr_samples = nblks * 32;
337 335
338 buf[0] = 0x72; buf[1] = 0xf8; /* iec 61937 */ 336 buf16[0] = 0xf872; /* iec 61937 */
339 buf[2] = 0x1f; buf[3] = 0x4e; /* syncword */ 337 buf16[1] = 0x431f; /* syncword */
340 switch(nr_samples) 338 switch(nr_samples)
341 { 339 {
342 case 512: 340 case 512:
343 buf[4] = 0x0b; /* DTS-1 (512-sample bursts) */ 341 buf16[2] = 0x000b; /* DTS-1 (512-sample bursts) */
344 break; 342 break;
345 case 1024: 343 case 1024:
346 buf[4] = 0x0c; /* DTS-2 (1024-sample bursts) */ 344 buf16[2] = 0x000c; /* DTS-2 (1024-sample bursts) */
347 break; 345 break;
348 case 2048: 346 case 2048:
349 buf[4] = 0x0d; /* DTS-3 (2048-sample bursts) */ 347 buf16[2] = 0x000d; /* DTS-3 (2048-sample bursts) */
350 break; 348 break;
351 default: 349 default:
352 mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: %d-sample bursts not supported\n", nr_samples); 350 mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: %d-sample bursts not supported\n", nr_samples);
353 buf[4] = 0x00; 351 buf16[2] = 0x0000;
354 break; 352 break;
355 } 353 }
356 buf[5] = 0; /* ?? */ 354 buf16[3] = burst_len;
357 buf[6] = (burst_len) & 0xff;
358 buf[7] = (burst_len >> 8) & 0xff;
359 355
360 if(fsize + 8 > nr_samples * 2 * 2) 356 if(fsize + 8 > nr_samples * 2 * 2)
361 { 357 {
362 mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: more data than fits\n"); 358 mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: more data than fits\n");
363 } 359 }