| | 450 | static inline void DecoderUpdatePreroll( int64_t *pi_preroll, const block_t *p ) |
|---|
| | 451 | { |
|---|
| | 452 | if( p->i_pts > 0 ) |
|---|
| | 453 | *pi_preroll = __MIN( *pi_preroll, p->i_pts ); |
|---|
| | 454 | else if( p->i_dts > 0 ) |
|---|
| | 455 | *pi_preroll = __MIN( *pi_preroll, p->i_dts ); |
|---|
| | 456 | } |
|---|
| | 457 | static void DecoderDecodeAudio( decoder_t *p_dec, block_t *p_block ) |
|---|
| | 458 | { |
|---|
| | 459 | input_thread_t *p_input = p_dec->p_owner->p_input; |
|---|
| | 460 | aout_buffer_t *p_aout_buf; |
|---|
| | 461 | |
|---|
| | 462 | //DecoderUpdatePreroll( &p_dec->p_owner->i_preroll_end, p_block ); |
|---|
| | 463 | while( (p_aout_buf = p_dec->pf_decode_audio( p_dec, &p_block )) ) |
|---|
| | 464 | { |
|---|
| | 465 | vlc_mutex_lock( &p_input->p->counters.counters_lock ); |
|---|
| | 466 | stats_UpdateInteger( p_dec, p_input->p->counters.p_decoded_audio, 1, NULL ); |
|---|
| | 467 | vlc_mutex_unlock( &p_input->p->counters.counters_lock ); |
|---|
| | 468 | |
|---|
| | 469 | /* FIXME the best would be to handle the case |
|---|
| | 470 | * start_date < preroll < end_date |
|---|
| | 471 | * but that's not easy with non raw audio stream */ |
|---|
| | 472 | // if( p_dec->p_owner->i_preroll_end > 0 ) |
|---|
| | 473 | // msg_Err( p_dec, "Prerolling %lld - %lld", p_dec->p_owner->i_preroll_end, p_aout_buf->start_date ); |
|---|
| | 474 | |
|---|
| | 475 | if( p_dec->p_owner->i_preroll_end > 0 && |
|---|
| | 476 | p_aout_buf->start_date < p_dec->p_owner->i_preroll_end ) |
|---|
| | 477 | { |
|---|
| | 478 | aout_DecDeleteBuffer( p_dec->p_owner->p_aout, |
|---|
| | 479 | p_dec->p_owner->p_aout_input, p_aout_buf ); |
|---|
| | 480 | } |
|---|
| | 481 | else |
|---|
| | 482 | { |
|---|
| | 483 | p_dec->p_owner->i_preroll_end = -1; |
|---|
| | 484 | aout_DecPlay( p_dec->p_owner->p_aout, |
|---|
| | 485 | p_dec->p_owner->p_aout_input, |
|---|
| | 486 | p_aout_buf ); |
|---|
| | 487 | } |
|---|
| | 488 | } |
|---|
| | 489 | } |
|---|
| | 490 | static void DecoderDecodeVideo( decoder_t *p_dec, block_t *p_block ) |
|---|
| | 491 | { |
|---|
| | 492 | input_thread_t *p_input = p_dec->p_owner->p_input; |
|---|
| | 493 | picture_t *p_pic; |
|---|
| | 494 | |
|---|
| | 495 | //DecoderUpdatePreroll( &p_dec->p_owner->i_preroll_end, p_block ); |
|---|
| | 496 | while( (p_pic = p_dec->pf_decode_video( p_dec, &p_block )) ) |
|---|
| | 497 | { |
|---|
| | 498 | vlc_mutex_lock( &p_input->p->counters.counters_lock ); |
|---|
| | 499 | stats_UpdateInteger( p_dec, p_input->p->counters.p_decoded_video, 1, NULL ); |
|---|
| | 500 | vlc_mutex_unlock( &p_input->p->counters.counters_lock ); |
|---|
| | 501 | |
|---|
| | 502 | if( p_dec->p_owner->i_preroll_end > 0 && |
|---|
| | 503 | p_pic->date < p_dec->p_owner->i_preroll_end ) |
|---|
| | 504 | { |
|---|
| | 505 | vout_DestroyPicture( p_dec->p_owner->p_vout, p_pic ); |
|---|
| | 506 | } |
|---|
| | 507 | else |
|---|
| | 508 | { |
|---|
| | 509 | p_dec->p_owner->i_preroll_end = -1; |
|---|
| | 510 | vout_DatePicture( p_dec->p_owner->p_vout, p_pic, |
|---|
| | 511 | p_pic->date ); |
|---|
| | 512 | vout_DisplayPicture( p_dec->p_owner->p_vout, p_pic ); |
|---|
| | 513 | } |
|---|
| | 514 | } |
|---|
| | 515 | } |
|---|
| | 516 | |
|---|
| | 517 | |
|---|
| 553 | | while( (p_aout_buf = p_dec->pf_decode_audio( p_dec, |
|---|
| 554 | | &p_packetized_block )) ) |
|---|
| 555 | | { |
|---|
| 556 | | input_thread_t *p_i =(input_thread_t*)(p_dec->p_parent); |
|---|
| 557 | | vlc_mutex_lock( &p_i->p->counters.counters_lock ); |
|---|
| 558 | | stats_UpdateInteger( p_dec, |
|---|
| 559 | | p_i->p->counters.p_decoded_audio, 1, NULL ); |
|---|
| 560 | | vlc_mutex_unlock( &p_i->p->counters.counters_lock ); |
|---|
| 561 | | |
|---|
| 562 | | /* FIXME the best would be to handle the case |
|---|
| 563 | | * start_date < preroll < end_date |
|---|
| 564 | | * but that's not easy with non raw audio stream */ |
|---|
| 565 | | if( p_dec->p_owner->i_preroll_end > 0 && |
|---|
| 566 | | p_aout_buf->start_date < p_dec->p_owner->i_preroll_end ) |
|---|
| 567 | | { |
|---|
| 568 | | aout_DecDeleteBuffer( p_dec->p_owner->p_aout, |
|---|
| 569 | | p_dec->p_owner->p_aout_input, p_aout_buf ); |
|---|
| 570 | | } |
|---|
| 571 | | else |
|---|
| 572 | | { |
|---|
| 573 | | p_dec->p_owner->i_preroll_end = -1; |
|---|
| 574 | | aout_DecPlay( p_dec->p_owner->p_aout, |
|---|
| 575 | | p_dec->p_owner->p_aout_input, |
|---|
| 576 | | p_aout_buf ); |
|---|
| 577 | | } |
|---|
| 578 | | } |
|---|
| | 619 | DecoderDecodeAudio( p_dec, p_packetized_block ); |
|---|
| 584 | | else while( (p_aout_buf = p_dec->pf_decode_audio( p_dec, &p_block )) ) |
|---|
| 585 | | { |
|---|
| 586 | | input_thread_t *p_i = (input_thread_t*)(p_dec->p_parent); |
|---|
| 587 | | vlc_mutex_lock( &p_i->p->counters.counters_lock ); |
|---|
| 588 | | stats_UpdateInteger( p_dec, |
|---|
| 589 | | p_i->p->counters.p_decoded_audio, 1, NULL ); |
|---|
| 590 | | vlc_mutex_unlock( &p_i->p->counters.counters_lock ); |
|---|
| 591 | | |
|---|
| 592 | | if( p_dec->p_owner->i_preroll_end > 0 && |
|---|
| 593 | | p_aout_buf->start_date < p_dec->p_owner->i_preroll_end ) |
|---|
| 594 | | { |
|---|
| 595 | | aout_DecDeleteBuffer( p_dec->p_owner->p_aout, |
|---|
| 596 | | p_dec->p_owner->p_aout_input, p_aout_buf ); |
|---|
| 597 | | } |
|---|
| 598 | | else |
|---|
| 599 | | { |
|---|
| 600 | | p_dec->p_owner->i_preroll_end = -1; |
|---|
| 601 | | aout_DecPlay( p_dec->p_owner->p_aout, |
|---|
| 602 | | p_dec->p_owner->p_aout_input, |
|---|
| 603 | | p_aout_buf ); |
|---|
| 604 | | } |
|---|
| | 625 | else |
|---|
| | 626 | { |
|---|
| | 627 | DecoderDecodeAudio( p_dec, p_block ); |
|---|
| 631 | | while( (p_pic = p_dec->pf_decode_video( p_dec, |
|---|
| 632 | | &p_packetized_block )) ) |
|---|
| 633 | | { |
|---|
| 634 | | input_thread_t *p_i =(input_thread_t*)(p_dec->p_parent); |
|---|
| 635 | | vlc_mutex_lock( &p_i->p->counters.counters_lock ); |
|---|
| 636 | | stats_UpdateInteger( p_dec, |
|---|
| 637 | | p_i->p->counters.p_decoded_video, 1, NULL ); |
|---|
| 638 | | vlc_mutex_unlock( &p_i->p->counters.counters_lock ); |
|---|
| 639 | | |
|---|
| 640 | | if( p_dec->p_owner->i_preroll_end > 0 && |
|---|
| 641 | | p_pic->date < p_dec->p_owner->i_preroll_end ) |
|---|
| 642 | | { |
|---|
| 643 | | vout_DestroyPicture( p_dec->p_owner->p_vout, p_pic ); |
|---|
| 644 | | } |
|---|
| 645 | | else |
|---|
| 646 | | { |
|---|
| 647 | | p_dec->p_owner->i_preroll_end = -1; |
|---|
| 648 | | vout_DatePicture( p_dec->p_owner->p_vout, p_pic, |
|---|
| 649 | | p_pic->date ); |
|---|
| 650 | | vout_DisplayPicture( p_dec->p_owner->p_vout, p_pic ); |
|---|
| 651 | | } |
|---|
| 652 | | } |
|---|
| | 652 | DecoderDecodeVideo( p_dec, p_packetized_block ); |
|---|
| 658 | | else while( (p_pic = p_dec->pf_decode_video( p_dec, &p_block )) ) |
|---|
| 659 | | { |
|---|
| 660 | | input_thread_t *p_i = (input_thread_t*)(p_dec->p_parent); |
|---|
| 661 | | vlc_mutex_lock( &p_i->p->counters.counters_lock ); |
|---|
| 662 | | stats_UpdateInteger( p_dec, |
|---|
| 663 | | p_i->p->counters.p_decoded_video, 1, NULL ); |
|---|
| 664 | | vlc_mutex_unlock( &p_i->p->counters.counters_lock ); |
|---|
| 665 | | |
|---|
| 666 | | if( p_dec->p_owner->i_preroll_end > 0 && |
|---|
| 667 | | p_pic->date < p_dec->p_owner->i_preroll_end ) |
|---|
| 668 | | { |
|---|
| 669 | | vout_DestroyPicture( p_dec->p_owner->p_vout, p_pic ); |
|---|
| 670 | | } |
|---|
| 671 | | else |
|---|
| 672 | | { |
|---|
| 673 | | p_dec->p_owner->i_preroll_end = -1; |
|---|
| 674 | | vout_DatePicture( p_dec->p_owner->p_vout, p_pic, p_pic->date ); |
|---|
| 675 | | vout_DisplayPicture( p_dec->p_owner->p_vout, p_pic ); |
|---|
| 676 | | } |
|---|
| | 658 | else |
|---|
| | 659 | { |
|---|
| | 660 | DecoderDecodeVideo( p_dec, p_block ); |
|---|
| 685 | | input_thread_t *p_i = (input_thread_t*)(p_dec->p_parent); |
|---|
| 686 | | vlc_mutex_lock( &p_i->p->counters.counters_lock ); |
|---|
| 687 | | stats_UpdateInteger( p_dec, |
|---|
| 688 | | p_i->p->counters.p_decoded_sub, 1, NULL ); |
|---|
| 689 | | vlc_mutex_unlock( &p_i->p->counters.counters_lock ); |
|---|
| | 671 | vlc_mutex_lock( &p_input->p->counters.counters_lock ); |
|---|
| | 672 | stats_UpdateInteger( p_dec, p_input->p->counters.p_decoded_sub, 1, NULL ); |
|---|
| | 673 | vlc_mutex_unlock( &p_input->p->counters.counters_lock ); |
|---|