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