Mercurial > mplayer.hg
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 } |