summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorstrobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-15 23:33:28 +0000
committerstrobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-15 23:33:28 +0000
commite59ceddfe895bed6a4614b75b97d05c90322bd2d (patch)
tree61eb2b10827ec9f3c58e8f38cbdb3ed94fdaf553 /media
parent6131a644b12d6359630c118a21c609a15d2f5c21 (diff)
downloadchromium_src-e59ceddfe895bed6a4614b75b97d05c90322bd2d.zip
chromium_src-e59ceddfe895bed6a4614b75b97d05c90322bd2d.tar.gz
chromium_src-e59ceddfe895bed6a4614b75b97d05c90322bd2d.tar.bz2
Allow any AVC level in Media Source ISO BMFF codec strings.
BUG=129072 TEST=ChunkDemuxerTest Review URL: https://chromiumcodereview.appspot.com/10544166 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142520 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/filters/chunk_demuxer.cc11
-rw-r--r--media/filters/chunk_demuxer_unittest.cc9
2 files changed, 14 insertions, 6 deletions
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index fcb3625..2cc1bbc 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop.h"
+#include "base/string_util.h"
#include "media/base/audio_decoder_config.h"
#include "media/base/stream_parser_buffer.h"
#include "media/base/video_decoder_config.h"
@@ -17,7 +18,7 @@
namespace media {
struct CodecInfo {
- const char* name;
+ const char* pattern;
DemuxerStream::Type type;
};
@@ -32,10 +33,8 @@ struct SupportedTypeInfo {
static const CodecInfo kVP8CodecInfo = { "vp8", DemuxerStream::VIDEO };
static const CodecInfo kVorbisCodecInfo = { "vorbis", DemuxerStream::AUDIO };
-// TODO(strobe): Perform matching against supported profiles and levels, or
-// simply accept codecs that match a prefix.
-static const CodecInfo kH264CodecInfo = { "avc1.4D4041", DemuxerStream::VIDEO };
-static const CodecInfo kAACCodecInfo = { "mp4a.40.2", DemuxerStream::AUDIO };
+static const CodecInfo kH264CodecInfo = { "avc1.*", DemuxerStream::VIDEO };
+static const CodecInfo kAACCodecInfo = { "mp4a.40.*", DemuxerStream::AUDIO };
static const CodecInfo* kVideoWebMCodecs[] = {
&kVP8CodecInfo,
@@ -103,7 +102,7 @@ static bool IsSupported(const std::string& type,
DemuxerStream::Type codec_type = DemuxerStream::UNKNOWN;
for (int k = 0; type_info.codecs[k]; ++k) {
- if (codecs[j] == type_info.codecs[k]->name) {
+ if (MatchPattern(codecs[j], type_info.codecs[k]->pattern)) {
found_codec = true;
codec_type = type_info.codecs[k]->type;
break;
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
index d242aae..941bbcb 100644
--- a/media/filters/chunk_demuxer_unittest.cc
+++ b/media/filters/chunk_demuxer_unittest.cc
@@ -1622,4 +1622,13 @@ TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodes) {
GenerateExpectedReads(5025, 5000, 8, audio, video);
}
+TEST_F(ChunkDemuxerTest, TestCodecPrefixMatching) {
+ std::vector<std::string> codecs;
+ codecs.push_back("avc1.4D4041");
+ codecs.push_back("mp4a.40.2");
+
+ EXPECT_EQ(ChunkDemuxer::kOk,
+ demuxer_->AddId("source_id", "video/mp4", codecs));
+}
+
} // namespace media