To make SniffMP3() more concrete so that we can remove false-positve responses from MPEG-PS streams.

Note: current resync logic keeps searching mp3 frames until it meets a
valid one. This resync logic works well with seek() operation, but in
SniffMP3(), this may cause false-positive classification for the
following MPEG-PS file format.
  A possible MPEG-PS video file:
      [PS header]...[mp3 frame][mp3 frame] ...
  MP3 files:
      [ID3 tag][mp3 frame][mp3 frame] ...

BUG: 5104562
Change-Id: Idd5020723f7bdb2fefc2a63fc8651580fd644399
This commit is contained in:
Dongwon Kang
2011-08-18 15:24:27 +09:00
parent 7fa6e42483
commit 983ab88e11

View File

@@ -52,7 +52,10 @@ static bool Resync(
*post_id3_pos = 0;
}
bool resync_from_head = false;
if (*inout_pos == 0) {
resync_from_head = true;
// Skip an optional ID3 header if syncing at the very beginning
// of the datasource.
@@ -137,22 +140,20 @@ static bool Resync(
uint32_t header = U32_AT(tmp);
if (match_header != 0 && (header & kMask) != (match_header & kMask)) {
++pos;
++tmp;
--remainingBytes;
continue;
}
size_t frame_size;
int sample_rate, num_channels, bitrate;
if (!GetMPEGAudioFrameSize(
header, &frame_size,
&sample_rate, &num_channels, &bitrate)) {
++pos;
++tmp;
--remainingBytes;
continue;
if ((match_header != 0 && (header & kMask) != (match_header & kMask))
|| !GetMPEGAudioFrameSize(header, &frame_size)) {
if (resync_from_head) {
// This isn't a valid mp3 file because it failed to detect
// a header while a valid mp3 file should have a valid
// header here.
break;
} else {
++pos;
++tmp;
--remainingBytes;
continue;
}
}
LOGV("found possible 1st frame at %lld (header = 0x%08x)", pos, header);