comparison libmpdemux/demux_ty.c @ 24475:7e10a426b257

Avoid a big piece of duplicated code
author reimar
date Fri, 14 Sep 2007 19:30:25 +0000
parents 1754f9ab919e
children b42dd327f81f
comparison
equal deleted inserted replaced
24474:1754f9ab919e 24475:7e10a426b257
746 &chunk[ offset ], size, ( demux->filepos + offset ), 746 &chunk[ offset ], size, ( demux->filepos + offset ),
747 tivo->lastAudioPTS ); 747 tivo->lastAudioPTS );
748 } 748 }
749 } 749 }
750 750
751 // MPEG Audio with PES Header, either SA or DTiVo 751 // 3 - MPEG Audio with PES Header, either SA or DTiVo
752 // 9 - DTiVo AC3 Audio Data with PES Header
752 // ================================================ 753 // ================================================
753 if ( nybbleType == 0x03 ) 754 if ( nybbleType == 0x03 || nybbleType == 0x09 )
754 { 755 {
756 if ( nybbleType == 0x03 )
755 demux_ty_FindESHeader( ty_MPEGAudioPacket, 4, &chunk[ offset ], 757 demux_ty_FindESHeader( ty_MPEGAudioPacket, 4, &chunk[ offset ],
756 size, &esOffset1 ); 758 size, &esOffset1 );
757 759
758 // SA PES Header, No Audio Data 760 // SA PES Header, No Audio Data
759 // ================================================ 761 // ================================================
760 if ( esOffset1 == 0 && size == 16 ) 762 if ( nybbleType == 0x03 && esOffset1 == 0 && size == 16 )
761 { 763 {
762 tivo->tivoType = 1; 764 tivo->tivoType = 1;
763 tivo->lastAudioPTS = get_ty_pts( &chunk[ offset + 765 tivo->lastAudioPTS = get_ty_pts( &chunk[ offset +
764 SERIES2_PTS_OFFSET ] ); 766 SERIES2_PTS_OFFSET ] );
765 } 767 }
768 // ================================================ 770 // ================================================
769 { 771 {
770 tivo->tivoType = 2; 772 tivo->tivoType = 2;
771 773
772 demux_ty_AddToAudioBuffer( tivo, &chunk[ offset ], size ); 774 demux_ty_AddToAudioBuffer( tivo, &chunk[ offset ], size );
773 demux_ty_FindESPacket( ty_MPEGAudioPacket, 4, 775 demux_ty_FindESPacket( nybbleType == 9 ? ty_AC3AudioPacket : ty_MPEGAudioPacket, 4,
774 tivo->lastAudio, tivo->lastAudioEnd, &esOffset1, 776 tivo->lastAudio, tivo->lastAudioEnd, &esOffset1,
775 &esOffset2 ); 777 &esOffset2 );
776 778
777 if ( esOffset1 != -1 && esOffset2 != -1 ) 779 if ( esOffset1 != -1 && esOffset2 != -1 )
778 { 780 {
788 packetSize ); 790 packetSize );
789 791
790 tivo->lastAudioPTS = get_ty_pts( 792 tivo->lastAudioPTS = get_ty_pts(
791 &tivo->lastAudio[ esOffset1 + ptsOffset ] ); 793 &tivo->lastAudio[ esOffset1 + ptsOffset ] );
792 794
795 if (nybbleType == 9) headerSize = 0;
793 demux_ty_CopyToDemuxPacket 796 demux_ty_CopyToDemuxPacket
794 ( 797 (
795 TY_A, 798 TY_A,
796 tivo, 799 tivo,
797 demux->audio, 800 demux->audio,
821 demux_ty_CopyToDemuxPacket( TY_A, tivo, demux->audio, 824 demux_ty_CopyToDemuxPacket( TY_A, tivo, demux->audio,
822 &chunk[ offset ], size, ( demux->filepos + offset ), 825 &chunk[ offset ], size, ( demux->filepos + offset ),
823 tivo->lastAudioPTS ); 826 tivo->lastAudioPTS );
824 } 827 }
825 828
826 // DTiVo AC3 Audio Data with PES Header
827 // ================================================
828 if ( nybbleType == 0x09 )
829 {
830 tivo->tivoType = 2;
831
832 demux_ty_AddToAudioBuffer( tivo, &chunk[ offset ], size );
833 demux_ty_FindESPacket( ty_AC3AudioPacket, 4,
834 tivo->lastAudio, tivo->lastAudioEnd, &esOffset1,
835 &esOffset2 );
836
837 if ( esOffset1 != -1 && esOffset2 != -1 )
838 {
839 int packetSize = esOffset2 - esOffset1;
840 int headerSize;
841 int ptsOffset;
842
843 if ( IsValidAudioPacket( packetSize, &ptsOffset,
844 &headerSize ) )
845 {
846 mp_msg( MSGT_DEMUX, MSGL_DBG3,
847 "ty:Adding DTiVo Audio Packet Size %d\n",
848 packetSize );
849
850 tivo->lastAudioPTS = get_ty_pts(
851 &tivo->lastAudio[ esOffset1 + ptsOffset ] );
852
853 // AC3 Decoder WANTS the PTS
854 demux_ty_CopyToDemuxPacket
855 (
856 TY_A,
857 tivo,
858 demux->audio,
859 &tivo->lastAudio[ esOffset1 ],
860 packetSize,
861 demux->filepos + offset,
862 tivo->lastAudioPTS
863 );
864
865 }
866
867 // Collapse the Audio Buffer
868 memmove( &tivo->lastAudio[ 0 ],
869 &tivo->lastAudio[ esOffset2 ],
870 tivo->lastAudioEnd - esOffset2 );
871 tivo->lastAudioEnd -= esOffset2;
872 }
873 }
874 offset += size; 829 offset += size;
875 } 830 }
876 else 831 else
877 errorHeader++; 832 errorHeader++;
878 } 833 }