Loading media/libstagefright/MP3Extractor.cpp +35 −23 Original line number Diff line number Diff line Loading @@ -282,17 +282,50 @@ MP3Extractor::MP3Extractor( mFirstFramePos = pos; mFixedHeader = header; mMeta = new MetaData; sp<XINGSeeker> seeker = XINGSeeker::CreateFromSource(mDataSource, mFirstFramePos); if (seeker == NULL) { mSeeker = VBRISeeker::CreateFromSource(mDataSource, post_id3_pos); } else { mSeeker = seeker; int encd = seeker->getEncoderDelay(); int encp = seeker->getEncoderPadding(); if (encd != 0 || encp != 0) { mMeta->setInt32(kKeyEncoderDelay, encd); mMeta->setInt32(kKeyEncoderPadding, encp); } } if (mSeeker != NULL) { // While it is safe to send the XING/VBRI frame to the decoder, this will // result in an extra 1152 samples being output. In addition, the bitrate // of the Xing header might not match the rest of the file, which could // lead to problems when seeking. The real first frame to decode is after // the XING/VBRI frame, so skip there. size_t frame_size; int sample_rate; int num_channels; int bitrate; GetMPEGAudioFrameSize( header, &frame_size, &sample_rate, &num_channels, &bitrate); pos += frame_size; if (!Resync(mDataSource, 0, &pos, &post_id3_pos, &header)) { // mInitCheck will remain NO_INIT return; } mFirstFramePos = pos; mFixedHeader = header; } unsigned layer = 4 - ((header >> 17) & 3); size_t frame_size; int sample_rate; int num_channels; int bitrate; GetMPEGAudioFrameSize( header, &frame_size, &sample_rate, &num_channels, &bitrate); mMeta = new MetaData; unsigned layer = 4 - ((header >> 17) & 3); switch (layer) { case 1: Loading @@ -312,27 +345,6 @@ MP3Extractor::MP3Extractor( mMeta->setInt32(kKeyBitRate, bitrate * 1000); mMeta->setInt32(kKeyChannelCount, num_channels); sp<XINGSeeker> seeker = XINGSeeker::CreateFromSource(mDataSource, mFirstFramePos); if (seeker == NULL) { mSeeker = VBRISeeker::CreateFromSource(mDataSource, post_id3_pos); } else { mSeeker = seeker; int encd = seeker->getEncoderDelay(); int encp = seeker->getEncoderPadding(); if (encd != 0 || encp != 0) { mMeta->setInt32(kKeyEncoderDelay, encd); mMeta->setInt32(kKeyEncoderPadding, encp); } } if (mSeeker != NULL) { // While it is safe to send the XING/VBRI frame to the decoder, this will // result in an extra 1152 samples being output. The real first frame to // decode is after the XING/VBRI frame, so skip there. mFirstFramePos += frame_size; } int64_t durationUs; if (mSeeker == NULL || !mSeeker->getDuration(&durationUs)) { Loading Loading
media/libstagefright/MP3Extractor.cpp +35 −23 Original line number Diff line number Diff line Loading @@ -282,17 +282,50 @@ MP3Extractor::MP3Extractor( mFirstFramePos = pos; mFixedHeader = header; mMeta = new MetaData; sp<XINGSeeker> seeker = XINGSeeker::CreateFromSource(mDataSource, mFirstFramePos); if (seeker == NULL) { mSeeker = VBRISeeker::CreateFromSource(mDataSource, post_id3_pos); } else { mSeeker = seeker; int encd = seeker->getEncoderDelay(); int encp = seeker->getEncoderPadding(); if (encd != 0 || encp != 0) { mMeta->setInt32(kKeyEncoderDelay, encd); mMeta->setInt32(kKeyEncoderPadding, encp); } } if (mSeeker != NULL) { // While it is safe to send the XING/VBRI frame to the decoder, this will // result in an extra 1152 samples being output. In addition, the bitrate // of the Xing header might not match the rest of the file, which could // lead to problems when seeking. The real first frame to decode is after // the XING/VBRI frame, so skip there. size_t frame_size; int sample_rate; int num_channels; int bitrate; GetMPEGAudioFrameSize( header, &frame_size, &sample_rate, &num_channels, &bitrate); pos += frame_size; if (!Resync(mDataSource, 0, &pos, &post_id3_pos, &header)) { // mInitCheck will remain NO_INIT return; } mFirstFramePos = pos; mFixedHeader = header; } unsigned layer = 4 - ((header >> 17) & 3); size_t frame_size; int sample_rate; int num_channels; int bitrate; GetMPEGAudioFrameSize( header, &frame_size, &sample_rate, &num_channels, &bitrate); mMeta = new MetaData; unsigned layer = 4 - ((header >> 17) & 3); switch (layer) { case 1: Loading @@ -312,27 +345,6 @@ MP3Extractor::MP3Extractor( mMeta->setInt32(kKeyBitRate, bitrate * 1000); mMeta->setInt32(kKeyChannelCount, num_channels); sp<XINGSeeker> seeker = XINGSeeker::CreateFromSource(mDataSource, mFirstFramePos); if (seeker == NULL) { mSeeker = VBRISeeker::CreateFromSource(mDataSource, post_id3_pos); } else { mSeeker = seeker; int encd = seeker->getEncoderDelay(); int encp = seeker->getEncoderPadding(); if (encd != 0 || encp != 0) { mMeta->setInt32(kKeyEncoderDelay, encd); mMeta->setInt32(kKeyEncoderPadding, encp); } } if (mSeeker != NULL) { // While it is safe to send the XING/VBRI frame to the decoder, this will // result in an extra 1152 samples being output. The real first frame to // decode is after the XING/VBRI frame, so skip there. mFirstFramePos += frame_size; } int64_t durationUs; if (mSeeker == NULL || !mSeeker->getDuration(&durationUs)) { Loading