Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: net/base/mime_util.cc

Issue 66863003: Add VP9 to canPlayType on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor fix. please ignore ps1. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <iterator> 6 #include <iterator>
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #if defined(OS_ANDROID)
11 #include "base/android/build_info.h"
scherkus (not reviewing) 2013/11/09 00:20:05 typically #if #includes are put after the first bl
vignesh 2013/11/11 19:55:34 Done.
12 #endif
10 #include "base/containers/hash_tables.h" 13 #include "base/containers/hash_tables.h"
11 #include "base/lazy_instance.h" 14 #include "base/lazy_instance.h"
12 #include "base/logging.h" 15 #include "base/logging.h"
13 #include "base/stl_util.h" 16 #include "base/stl_util.h"
14 #include "base/strings/string_split.h" 17 #include "base/strings/string_split.h"
15 #include "base/strings/string_util.h" 18 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
17 #include "net/base/mime_util.h" 20 #include "net/base/mime_util.h"
18 #include "net/base/platform_mime_util.h" 21 #include "net/base/platform_mime_util.h"
19 22
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 "video/x-m4v", 289 "video/x-m4v",
287 "audio/mp4", 290 "audio/mp4",
288 "audio/x-m4a", 291 "audio/x-m4a",
289 292
290 // MP3. 293 // MP3.
291 "audio/mp3", 294 "audio/mp3",
292 "audio/x-mp3", 295 "audio/x-mp3",
293 "audio/mpeg", 296 "audio/mpeg",
294 }; 297 };
295 298
299 struct CommonMediaCodec {
300 const char* codec;
301 #if defined(OS_ANDROID)
302 const int min_api_level;
303 #endif
304 };
305
296 // List of supported codecs when passed in with <source type="...">. 306 // List of supported codecs when passed in with <source type="...">.
297 // This set of codecs is supported by all variations of Chromium. 307 // This set of codecs is supported by all variations of Chromium.
308 // For android this also lists the minimum API level from which the codec is
309 // supported.
298 // 310 //
299 // Refer to http://wiki.whatwg.org/wiki/Video_type_parameters#Browser_Support 311 // Refer to http://wiki.whatwg.org/wiki/Video_type_parameters#Browser_Support
300 // for more information. 312 // for more information.
301 // 313 //
302 // The codecs for WAV are integers as defined in Appendix A of RFC2361: 314 // The codecs for WAV are integers as defined in Appendix A of RFC2361:
303 // http://tools.ietf.org/html/rfc2361 315 // http://tools.ietf.org/html/rfc2361
304 static const char* const common_media_codecs[] = { 316 static const CommonMediaCodec common_media_codecs[] = {
305 #if !defined(OS_ANDROID) // Android doesn't support Ogg Theora. 317 #if !defined(OS_ANDROID)
306 "theora", 318 { "theora" },
307 "vp9", // TODO(tomfinegan): Move vp9 back down with vp8 once VP9 is supported 319 { "vorbis" },
308 // on Android. https://crbug.com/285016 320 { "vp8" },
321 { "vp9" },
322 { "1" } // WAVE_FORMAT_PCM.
323 #else
324 { "vorbis", 0 },
325 { "vp8", 0 },
326 { "vp9", 19 }, // VP9 supported only in Kitkat+.
scherkus (not reviewing) 2013/11/09 00:20:05 it seems unfortunate to duplicate both lists and m
vignesh 2013/11/11 16:07:10 if duplication is your only concern, then how abou
vignesh 2013/11/11 19:55:34 Hardcoding this as discussed on other comments.
327 { "1", 0 } // WAVE_FORMAT_PCM.
309 #endif 328 #endif
310 "vorbis",
311 "vp8",
312 "1" // WAVE_FORMAT_PCM.
313 }; 329 };
314 330
315 // List of proprietary codecs only supported by Google Chrome. 331 // List of proprietary codecs only supported by Google Chrome.
316 static const char* const proprietary_media_codecs[] = { 332 static const char* const proprietary_media_codecs[] = {
317 "avc1", 333 "avc1",
318 "avc3", 334 "avc3",
319 "mp4a" 335 "mp4a"
320 }; 336 };
321 337
322 // Note: does not include javascript types list (see supported_javascript_types) 338 // Note: does not include javascript types list (see supported_javascript_types)
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 "text/javascript1.1", 421 "text/javascript1.1",
406 "text/javascript1.2", 422 "text/javascript1.2",
407 "text/javascript1.3", 423 "text/javascript1.3",
408 "text/jscript", 424 "text/jscript",
409 "text/livescript" 425 "text/livescript"
410 }; 426 };
411 427
412 struct MediaFormatStrict { 428 struct MediaFormatStrict {
413 const char* mime_type; 429 const char* mime_type;
414 const char* codecs_list; 430 const char* codecs_list;
431 #if defined(OS_ANDROID)
432 const int* min_api_levels;
433 #endif
415 }; 434 };
416 435
417 static const MediaFormatStrict format_codec_mappings[] = { 436 static const MediaFormatStrict format_codec_mappings[] = {
418 // TODO(tomfinegan): Remove this if/else when VP9 is supported on Android.
419 // https://crbug.com/285016
420 #if !defined(OS_ANDROID) 437 #if !defined(OS_ANDROID)
421 { "video/webm", "vorbis,vp8,vp8.0,vp9,vp9.0" }, 438 { "video/webm", "vorbis,vp8,vp8.0,vp9,vp9.0" },
422 #else
423 { "video/webm", "vorbis,vp8,vp8.0" },
424 #endif
425 { "audio/webm", "vorbis" }, 439 { "audio/webm", "vorbis" },
426 { "audio/wav", "1" } 440 { "audio/wav", "1" }
441 #else
442 { "video/webm", "vorbis,vp8,vp8.0,vp9,vp9.0", (int[]) { 0, 0, 0, 19, 19 } },
443 { "audio/webm", "vorbis", (int[]) { 0 } },
444 { "audio/wav", "1", (int[]) { 0 } }
445 #endif
427 }; 446 };
428 447
429 MimeUtil::MimeUtil() { 448 MimeUtil::MimeUtil() {
430 InitializeMimeTypeMaps(); 449 InitializeMimeTypeMaps();
431 } 450 }
432 451
433 // static 452 // static
434 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs, 453 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs,
435 const std::vector<std::string>& codecs) { 454 const std::vector<std::string>& codecs) {
436 for (size_t i = 0; i < codecs.size(); ++i) { 455 for (size_t i = 0; i < codecs.size(); ++i) {
(...skipping 27 matching lines...) Expand all
464 for (size_t i = 0; i < arraysize(common_media_types); ++i) 483 for (size_t i = 0; i < arraysize(common_media_types); ++i)
465 media_map_.insert(common_media_types[i]); 484 media_map_.insert(common_media_types[i]);
466 #if defined(USE_PROPRIETARY_CODECS) 485 #if defined(USE_PROPRIETARY_CODECS)
467 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) 486 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i)
468 media_map_.insert(proprietary_media_types[i]); 487 media_map_.insert(proprietary_media_types[i]);
469 #endif 488 #endif
470 489
471 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) 490 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i)
472 javascript_map_.insert(supported_javascript_types[i]); 491 javascript_map_.insert(supported_javascript_types[i]);
473 492
474 for (size_t i = 0; i < arraysize(common_media_codecs); ++i) 493 for (size_t i = 0; i < arraysize(common_media_codecs); ++i)
scherkus (not reviewing) 2013/11/09 00:31:00 we'll also need { }s for this for loop and one bel
vignesh 2013/11/11 19:55:34 Done.
475 codecs_map_.insert(common_media_codecs[i]); 494 #if defined(OS_ANDROID)
495 if (base::android::BuildInfo::GetInstance()->sdk_int() >=
496 common_media_codecs[i].min_api_level)
497 #endif
498 codecs_map_.insert(common_media_codecs[i].codec);
476 #if defined(USE_PROPRIETARY_CODECS) 499 #if defined(USE_PROPRIETARY_CODECS)
477 for (size_t i = 0; i < arraysize(proprietary_media_codecs); ++i) 500 for (size_t i = 0; i < arraysize(proprietary_media_codecs); ++i)
478 codecs_map_.insert(proprietary_media_codecs[i]); 501 codecs_map_.insert(proprietary_media_codecs[i]);
479 #endif 502 #endif
480 503
481 // Initialize the strict supported media types. 504 // Initialize the strict supported media types.
482 for (size_t i = 0; i < arraysize(format_codec_mappings); ++i) { 505 for (size_t i = 0; i < arraysize(format_codec_mappings); ++i) {
483 std::vector<std::string> mime_type_codecs; 506 std::vector<std::string> mime_type_codecs;
484 ParseCodecString(format_codec_mappings[i].codecs_list, 507 ParseCodecString(format_codec_mappings[i].codecs_list,
485 &mime_type_codecs, 508 &mime_type_codecs,
486 false); 509 false);
487 510
488 MimeMappings codecs; 511 MimeMappings codecs;
489 for (size_t j = 0; j < mime_type_codecs.size(); ++j) 512 for (size_t j = 0; j < mime_type_codecs.size(); ++j)
513 #if defined(OS_ANDROID)
514 if (base::android::BuildInfo::GetInstance()->sdk_int() >=
515 format_codec_mappings[i].min_api_levels[j])
516 #endif
490 codecs.insert(mime_type_codecs[j]); 517 codecs.insert(mime_type_codecs[j]);
491 strict_format_map_[format_codec_mappings[i].mime_type] = codecs; 518 strict_format_map_[format_codec_mappings[i].mime_type] = codecs;
492 } 519 }
493 } 520 }
494 521
495 bool MimeUtil::IsSupportedImageMimeType(const std::string& mime_type) const { 522 bool MimeUtil::IsSupportedImageMimeType(const std::string& mime_type) const {
496 return image_map_.find(mime_type) != image_map_.end(); 523 return image_map_.find(mime_type) != image_map_.end();
497 } 524 }
498 525
499 bool MimeUtil::IsSupportedMediaMimeType(const std::string& mime_type) const { 526 bool MimeUtil::IsSupportedMediaMimeType(const std::string& mime_type) const {
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 post_data->append("\r\n" + value + "\r\n"); 1027 post_data->append("\r\n" + value + "\r\n");
1001 } 1028 }
1002 1029
1003 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, 1030 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary,
1004 std::string* post_data) { 1031 std::string* post_data) {
1005 DCHECK(post_data); 1032 DCHECK(post_data);
1006 post_data->append("--" + mime_boundary + "--\r\n"); 1033 post_data->append("--" + mime_boundary + "--\r\n");
1007 } 1034 }
1008 1035
1009 } // namespace net 1036 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698