Changeset 009a1e8d2eca3a813d66aa1d067dd6def9eefd26
- Timestamp:
- 25/03/04 02:01:58
(5 years ago)
- Author:
- Laurent Aimar <fenrir@videolan.org>
- git-committer:
- Laurent Aimar <fenrir@videolan.org> 1080176518 +0000
- git-parent:
[1f878728d314a9028a3a584b5b26a80e45a11b81]
- git-author:
- Laurent Aimar <fenrir@videolan.org> 1080176518 +0000
- Message:
- real: added support for aac codec.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| ra54eb77 |
r009a1e8 |
|
| 447 | 447 | else if( tk->fmt.i_cat == AUDIO_ES && b_selected ) |
|---|
| 448 | 448 | { |
|---|
| 449 | | block_t *p_block = block_New( p_demux, i_size ); |
|---|
| 450 | | |
|---|
| 451 | | if( tk->fmt.i_codec == VLC_FOURCC( 'a', '5', '2', ' ' ) ) |
|---|
| 452 | | { |
|---|
| 453 | | uint8_t *src = p_sys->buffer; |
|---|
| 454 | | uint8_t *dst = p_block->p_buffer; |
|---|
| 455 | | |
|---|
| 456 | | /* byte swap data */ |
|---|
| 457 | | while( dst < &p_block->p_buffer[i_size- 1]) |
|---|
| 458 | | { |
|---|
| 459 | | *dst++ = src[1]; |
|---|
| 460 | | *dst++ = src[0]; |
|---|
| 461 | | |
|---|
| 462 | | src += 2; |
|---|
| | 449 | /* Set PCR */ |
|---|
| | 450 | if( p_sys->i_pcr < i_pts ) |
|---|
| | 451 | { |
|---|
| | 452 | p_sys->i_pcr = i_pts; |
|---|
| | 453 | es_out_Control( p_demux->out, ES_OUT_SET_PCR, (int64_t)p_sys->i_pcr ); |
|---|
| | 454 | } |
|---|
| | 455 | |
|---|
| | 456 | if( tk->fmt.i_codec == VLC_FOURCC( 'm', 'p', '4', 'a' ) ) |
|---|
| | 457 | { |
|---|
| | 458 | int i_sub = (p_sys->buffer[1] >> 4)&0x0f; |
|---|
| | 459 | uint8_t *p_sub = &p_sys->buffer[2+2*i_sub]; |
|---|
| | 460 | |
|---|
| | 461 | int i; |
|---|
| | 462 | for( i = 0; i < i_sub; i++ ) |
|---|
| | 463 | { |
|---|
| | 464 | int i_sub_size = GetWBE( &p_sys->buffer[2+i*2]); |
|---|
| | 465 | block_t *p_block = block_New( p_demux, i_sub_size ); |
|---|
| | 466 | if( p_block ) |
|---|
| | 467 | { |
|---|
| | 468 | memcpy( p_block->p_buffer, p_sub, i_sub_size ); |
|---|
| | 469 | p_sub += i_sub_size; |
|---|
| | 470 | |
|---|
| | 471 | p_block->i_dts = |
|---|
| | 472 | p_block->i_pts = ( i == 0 ? i_pts : 0 ); |
|---|
| | 473 | |
|---|
| | 474 | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| | 475 | } |
|---|
| 463 | 476 | } |
|---|
| 464 | 477 | } |
|---|
| 465 | 478 | else |
|---|
| 466 | 479 | { |
|---|
| 467 | | memcpy( p_block->p_buffer, p_sys->buffer, i_size ); |
|---|
| 468 | | } |
|---|
| 469 | | p_block->i_dts = |
|---|
| 470 | | p_block->i_pts = i_pts; |
|---|
| 471 | | |
|---|
| 472 | | if( p_sys->i_pcr < i_pts ) |
|---|
| 473 | | { |
|---|
| 474 | | p_sys->i_pcr = i_pts; |
|---|
| 475 | | |
|---|
| 476 | | es_out_Control( p_demux->out, ES_OUT_SET_PCR, (int64_t)p_sys->i_pcr ); |
|---|
| 477 | | } |
|---|
| 478 | | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| | 480 | block_t *p_block = block_New( p_demux, i_size ); |
|---|
| | 481 | |
|---|
| | 482 | if( tk->fmt.i_codec == VLC_FOURCC( 'a', '5', '2', ' ' ) ) |
|---|
| | 483 | { |
|---|
| | 484 | uint8_t *src = p_sys->buffer; |
|---|
| | 485 | uint8_t *dst = p_block->p_buffer; |
|---|
| | 486 | |
|---|
| | 487 | /* byte swap data */ |
|---|
| | 488 | while( dst < &p_block->p_buffer[i_size- 1]) |
|---|
| | 489 | { |
|---|
| | 490 | *dst++ = src[1]; |
|---|
| | 491 | *dst++ = src[0]; |
|---|
| | 492 | |
|---|
| | 493 | src += 2; |
|---|
| | 494 | } |
|---|
| | 495 | } |
|---|
| | 496 | else |
|---|
| | 497 | { |
|---|
| | 498 | memcpy( p_block->p_buffer, p_sys->buffer, i_size ); |
|---|
| | 499 | } |
|---|
| | 500 | p_block->i_dts = |
|---|
| | 501 | p_block->i_pts = i_pts; |
|---|
| | 502 | |
|---|
| | 503 | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| | 504 | } |
|---|
| 479 | 505 | } |
|---|
| 480 | 506 | |
|---|
| … | … | |
| 764 | 790 | else if( !strncmp( p_peek, ".ra\xfd", 4 ) ) |
|---|
| 765 | 791 | { |
|---|
| 766 | | int i_version = GetWBE( &p_peek[4] ); |
|---|
| | 792 | int i_version = GetWBE( &p_peek[4] ); |
|---|
| | 793 | uint8_t *p_extra = NULL; |
|---|
| 767 | 794 | msg_Dbg( p_demux, " - audio version=%d", i_version ); |
|---|
| 768 | 795 | |
|---|
| … | … | |
| 780 | 807 | memcpy( &fmt.i_codec, &p_peek[57 + p_peek[56] + 1], 4 ); |
|---|
| 781 | 808 | } |
|---|
| | 809 | p_extra = &p_peek[57 + p_peek[56] + 1+ 4 + 3]; |
|---|
| 782 | 810 | } |
|---|
| 783 | 811 | } |
|---|
| … | … | |
| 787 | 815 | fmt.audio.i_channels = GetWBE( &p_peek[60] ); |
|---|
| 788 | 816 | fmt.audio.i_rate = GetWBE( &p_peek[54] ); |
|---|
| | 817 | |
|---|
| | 818 | p_extra = &p_peek[66+4+3+1]; |
|---|
| 789 | 819 | } |
|---|
| 790 | 820 | msg_Dbg( p_demux, " - audio codec=%4.4s channels=%d rate=%dHz", |
|---|
| … | … | |
| 792 | 822 | fmt.audio.i_channels, fmt.audio.i_rate ); |
|---|
| 793 | 823 | |
|---|
| 794 | | if( !strncasecmp( (char*)&fmt.i_codec, "dnet", 4 ) ) |
|---|
| | 824 | if( fmt.i_codec == VLC_FOURCC( 'd', 'n', 'e', 't' ) ) |
|---|
| 795 | 825 | { |
|---|
| 796 | 826 | fmt.i_codec = VLC_FOURCC( 'a', '5', '2', ' ' ); |
|---|
| | 827 | } |
|---|
| | 828 | else if( fmt.i_codec == VLC_FOURCC( 'r', 'a', 'a', 'c' ) || |
|---|
| | 829 | fmt.i_codec == VLC_FOURCC( 'r', 'a', 'c', 'p' ) ) |
|---|
| | 830 | { |
|---|
| | 831 | int i_peek = p_extra - p_peek; |
|---|
| | 832 | if( stream_Peek( p_demux->s, &p_peek, i_peek + 4 ) >= i_peek + 4 ) |
|---|
| | 833 | { |
|---|
| | 834 | int i_extra = GetDWBE( &p_peek[i_peek] ); |
|---|
| | 835 | |
|---|
| | 836 | if( i_extra > 1 && i_peek + 4 + i_extra <= i_len && |
|---|
| | 837 | stream_Peek( p_demux->s, &p_peek, i_peek + 4 + i_extra ) >= i_peek + 4 + i_extra ) |
|---|
| | 838 | { |
|---|
| | 839 | fmt.i_extra = i_extra - 1; |
|---|
| | 840 | fmt.p_extra = malloc ( i_extra - 1 ); |
|---|
| | 841 | memcpy( fmt.p_extra, &p_peek[i_peek+4+1], i_extra - 1 ); |
|---|
| | 842 | |
|---|
| | 843 | msg_Dbg( p_demux, " - extra data=%d", i_extra ); |
|---|
| | 844 | { |
|---|
| | 845 | int i; |
|---|
| | 846 | for( i = 0; i < fmt.i_extra; i++ ) |
|---|
| | 847 | { |
|---|
| | 848 | msg_Dbg( p_demux, " data[%d] = 0x%x", i,((uint8_t*)fmt.p_extra)[i] ); |
|---|
| | 849 | } |
|---|
| | 850 | } |
|---|
| | 851 | } |
|---|
| | 852 | } |
|---|
| | 853 | fmt.i_codec = VLC_FOURCC( 'm', 'p', '4', 'a' ); |
|---|
| 797 | 854 | } |
|---|
| 798 | 855 | |
|---|