| 498 | | if( tk->fmt.i_codec == VLC_FOURCC( 'm','p','4','a' ) ) |
|---|
| 499 | | { |
|---|
| 500 | | int i_sub = (p_sys->buffer[1] >> 4)&0x0f; |
|---|
| 501 | | uint8_t *p_sub = &p_sys->buffer[2+2*i_sub]; |
|---|
| 502 | | |
|---|
| 503 | | /* Set PCR */ |
|---|
| 504 | | if( p_sys->i_pcr < i_pts ) |
|---|
| 505 | | { |
|---|
| 506 | | p_sys->i_pcr = i_pts; |
|---|
| 507 | | es_out_Control( p_demux->out, ES_OUT_SET_PCR, |
|---|
| 508 | | (int64_t)p_sys->i_pcr ); |
|---|
| 509 | | } |
|---|
| 510 | | |
|---|
| 511 | | int i; |
|---|
| 512 | | for( i = 0; i < i_sub; i++ ) |
|---|
| 513 | | { |
|---|
| 514 | | int i_sub_size = GetWBE( &p_sys->buffer[2+i*2]); |
|---|
| 515 | | block_t *p_block = block_New( p_demux, i_sub_size ); |
|---|
| 516 | | if( p_block ) |
|---|
| 517 | | { |
|---|
| 518 | | memcpy( p_block->p_buffer, p_sub, i_sub_size ); |
|---|
| 519 | | p_sub += i_sub_size; |
|---|
| 520 | | |
|---|
| 521 | | p_block->i_dts = |
|---|
| 522 | | p_block->i_pts = ( i == 0 ? i_pts : 0 ); |
|---|
| 523 | | |
|---|
| 524 | | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| 525 | | } |
|---|
| 526 | | } |
|---|
| 527 | | } |
|---|
| 528 | | else if( tk->fmt.i_codec == VLC_FOURCC( 'c', 'o', 'o', 'k' ) || |
|---|
| 529 | | tk->fmt.i_codec == VLC_FOURCC( 'a', 't', 'r', 'c') || |
|---|
| 530 | | tk->fmt.i_codec == VLC_FOURCC( 's', 'i', 'p', 'r') || |
|---|
| 531 | | tk->fmt.i_codec == VLC_FOURCC( '2', '8', '_', '8') ) |
|---|
| | 498 | if( tk->fmt.i_codec == VLC_FOURCC( 'c', 'o', 'o', 'k' ) || |
|---|
| | 499 | tk->fmt.i_codec == VLC_FOURCC( 'a', 't', 'r', 'c') || |
|---|
| | 500 | tk->fmt.i_codec == VLC_FOURCC( 's', 'i', 'p', 'r') || |
|---|
| | 501 | tk->fmt.i_codec == VLC_FOURCC( '2', '8', '_', '8') ) |
|---|
| 617 | | if( tk->fmt.i_codec == VLC_FOURCC( 'a', '5', '2', ' ' ) ) |
|---|
| 618 | | { |
|---|
| 619 | | uint8_t *src = p_sys->buffer; |
|---|
| 620 | | uint8_t *dst = p_block->p_buffer; |
|---|
| 621 | | |
|---|
| 622 | | /* byte swap data */ |
|---|
| 623 | | while( dst < &p_block->p_buffer[i_size- 1]) |
|---|
| 624 | | { |
|---|
| 625 | | *dst++ = src[1]; |
|---|
| 626 | | *dst++ = src[0]; |
|---|
| 627 | | |
|---|
| 628 | | src += 2; |
|---|
| | 585 | if( tk->fmt.i_codec == VLC_FOURCC( 'm','p','4','a' ) ) |
|---|
| | 586 | { |
|---|
| | 587 | int i_sub = (p_sys->buffer[1] >> 4)&0x0f; |
|---|
| | 588 | uint8_t *p_sub = &p_sys->buffer[2+2*i_sub]; |
|---|
| | 589 | |
|---|
| | 590 | int i; |
|---|
| | 591 | for( i = 0; i < i_sub; i++ ) |
|---|
| | 592 | { |
|---|
| | 593 | int i_sub_size = GetWBE( &p_sys->buffer[2+i*2]); |
|---|
| | 594 | block_t *p_block = block_New( p_demux, i_sub_size ); |
|---|
| | 595 | if( p_block ) |
|---|
| | 596 | { |
|---|
| | 597 | memcpy( p_block->p_buffer, p_sub, i_sub_size ); |
|---|
| | 598 | p_sub += i_sub_size; |
|---|
| | 599 | |
|---|
| | 600 | p_block->i_dts = |
|---|
| | 601 | p_block->i_pts = ( i == 0 ? i_pts : 0 ); |
|---|
| | 602 | |
|---|
| | 603 | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| | 604 | } |
|---|
| 633 | | memcpy( p_block->p_buffer, p_sys->buffer, i_size ); |
|---|
| 634 | | } |
|---|
| 635 | | p_block->i_dts = p_block->i_pts = i_pts; |
|---|
| 636 | | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| | 609 | block_t *p_block = block_New( p_demux, i_size ); |
|---|
| | 610 | |
|---|
| | 611 | if( tk->fmt.i_codec == VLC_FOURCC( 'a', '5', '2', ' ' ) ) |
|---|
| | 612 | { |
|---|
| | 613 | uint8_t *src = p_sys->buffer; |
|---|
| | 614 | uint8_t *dst = p_block->p_buffer; |
|---|
| | 615 | |
|---|
| | 616 | /* byte swap data */ |
|---|
| | 617 | while( dst < &p_block->p_buffer[i_size- 1]) |
|---|
| | 618 | { |
|---|
| | 619 | *dst++ = src[1]; |
|---|
| | 620 | *dst++ = src[0]; |
|---|
| | 621 | |
|---|
| | 622 | src += 2; |
|---|
| | 623 | } |
|---|
| | 624 | } |
|---|
| | 625 | else |
|---|
| | 626 | { |
|---|
| | 627 | memcpy( p_block->p_buffer, p_sys->buffer, i_size ); |
|---|
| | 628 | } |
|---|
| | 629 | p_block->i_dts = p_block->i_pts = i_pts; |
|---|
| | 630 | es_out_Send( p_demux->out, tk->p_es, p_block ); |
|---|
| | 631 | } |
|---|