OLD | NEW |
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 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 MPEG4_AAC_SBR_v1, | 41 MPEG4_AAC_SBR_v1, |
42 MPEG4_AAC_SBR_PS_v2, | 42 MPEG4_AAC_SBR_PS_v2, |
43 VORBIS, | 43 VORBIS, |
44 OPUS, | 44 OPUS, |
45 H264_BASELINE, | 45 H264_BASELINE, |
46 H264_MAIN, | 46 H264_MAIN, |
47 H264_HIGH, | 47 H264_HIGH, |
48 VP8, | 48 VP8, |
49 VP9, | 49 VP9, |
50 THEORA | 50 THEORA |
| 51 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 52 , |
| 53 AC3, |
| 54 EAC3 |
| 55 #endif |
51 }; | 56 }; |
52 | 57 |
53 bool GetMimeTypeFromExtension(const base::FilePath::StringType& ext, | 58 bool GetMimeTypeFromExtension(const base::FilePath::StringType& ext, |
54 std::string* mime_type) const; | 59 std::string* mime_type) const; |
55 | 60 |
56 bool GetMimeTypeFromFile(const base::FilePath& file_path, | 61 bool GetMimeTypeFromFile(const base::FilePath& file_path, |
57 std::string* mime_type) const; | 62 std::string* mime_type) const; |
58 | 63 |
59 bool GetWellKnownMimeTypeFromExtension(const base::FilePath::StringType& ext, | 64 bool GetWellKnownMimeTypeFromExtension(const base::FilePath::StringType& ext, |
60 std::string* mime_type) const; | 65 std::string* mime_type) const; |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 case MimeUtil::VP8: | 470 case MimeUtil::VP8: |
466 case MimeUtil::VORBIS: | 471 case MimeUtil::VORBIS: |
467 return true; | 472 return true; |
468 | 473 |
469 case MimeUtil::MPEG2_AAC_LC: | 474 case MimeUtil::MPEG2_AAC_LC: |
470 case MimeUtil::MPEG2_AAC_MAIN: | 475 case MimeUtil::MPEG2_AAC_MAIN: |
471 case MimeUtil::MPEG2_AAC_SSR: | 476 case MimeUtil::MPEG2_AAC_SSR: |
472 // MPEG-2 variants of AAC are not supported on Android. | 477 // MPEG-2 variants of AAC are not supported on Android. |
473 return false; | 478 return false; |
474 | 479 |
| 480 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 481 case MimeUtil::AC3: |
| 482 case MimeUtil::EAC3: |
| 483 // TODO(servolk): Revisit this for AC3/EAC3 support on AndroidTV |
| 484 return false; |
| 485 #endif |
| 486 |
475 case MimeUtil::VP9: | 487 case MimeUtil::VP9: |
476 // VP9 is supported only in KitKat+ (API Level 19). | 488 // VP9 is supported only in KitKat+ (API Level 19). |
477 return base::android::BuildInfo::GetInstance()->sdk_int() >= 19; | 489 return base::android::BuildInfo::GetInstance()->sdk_int() >= 19; |
478 | 490 |
479 case MimeUtil::OPUS: | 491 case MimeUtil::OPUS: |
480 // Opus is supported only in Lollipop+ (API Level 21). | 492 // Opus is supported only in Lollipop+ (API Level 21). |
481 return base::android::BuildInfo::GetInstance()->sdk_int() >= 21; | 493 return base::android::BuildInfo::GetInstance()->sdk_int() >= 21; |
482 | 494 |
483 case MimeUtil::THEORA: | 495 case MimeUtil::THEORA: |
484 return false; | 496 return false; |
(...skipping 29 matching lines...) Expand all Loading... |
514 // mp4a.40.5 - MPEG-4 HE-AAC v1 (AAC LC + SBR) | 526 // mp4a.40.5 - MPEG-4 HE-AAC v1 (AAC LC + SBR) |
515 // mp4a.40.05 - MPEG-4 HE-AAC v1 (AAC LC + SBR) (leading 0 in aud-oti for | 527 // mp4a.40.05 - MPEG-4 HE-AAC v1 (AAC LC + SBR) (leading 0 in aud-oti for |
516 // compatibility) | 528 // compatibility) |
517 // mp4a.40.29 - MPEG-4 HE-AAC v2 (AAC LC + SBR + PS) | 529 // mp4a.40.29 - MPEG-4 HE-AAC v2 (AAC LC + SBR + PS) |
518 // | 530 // |
519 // avc1.42E0xx - H.264 Baseline | 531 // avc1.42E0xx - H.264 Baseline |
520 // avc1.4D40xx - H.264 Main | 532 // avc1.4D40xx - H.264 Main |
521 // avc1.6400xx - H.264 High | 533 // avc1.6400xx - H.264 High |
522 static const char kMP4AudioCodecsExpression[] = | 534 static const char kMP4AudioCodecsExpression[] = |
523 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," | 535 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
| 536 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 537 "ac-3,ec-3," // Note: only one variant of eac codec string is sufficient |
| 538 // here since these are converted into enums in |
| 539 // InitializeMimeTypeMaps |
| 540 #endif |
524 "mp4a.40.05,mp4a.40.29"; | 541 "mp4a.40.05,mp4a.40.29"; |
525 static const char kMP4VideoCodecsExpression[] = | 542 static const char kMP4VideoCodecsExpression[] = |
526 // This is not a complete list of supported avc1 codecs. It is simply used | 543 // This is not a complete list of supported avc1 codecs. It is simply used |
527 // to register support for the corresponding Codec enum. Instead of using | 544 // to register support for the corresponding Codec enum. Instead of using |
528 // strings in these three arrays, we should use the Codec enum values. | 545 // strings in these three arrays, we should use the Codec enum values. |
529 // This will avoid confusion and unnecessary parsing at runtime. | 546 // This will avoid confusion and unnecessary parsing at runtime. |
530 // kUnambiguousCodecStringMap/kAmbiguousCodecStringMap should be the only | 547 // kUnambiguousCodecStringMap/kAmbiguousCodecStringMap should be the only |
531 // mapping from strings to codecs. See crbug.com/461009. | 548 // mapping from strings to codecs. See crbug.com/461009. |
532 "avc1.42E00A,avc1.4D400A,avc1.64000A," | 549 "avc1.42E00A,avc1.4D400A,avc1.64000A," |
| 550 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 551 "ac-3,ec-3," // Note: only one variant of eac codec string is sufficient |
| 552 // here since these are converted into enums in |
| 553 // InitializeMimeTypeMaps |
| 554 #endif |
533 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," | 555 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
534 "mp4a.40.05,mp4a.40.29"; | 556 "mp4a.40.05,mp4a.40.29"; |
535 | 557 |
536 // These containers are also included in | 558 // These containers are also included in |
537 // common_media_types/proprietary_media_types. See crbug.com/461012. | 559 // common_media_types/proprietary_media_types. See crbug.com/461012. |
538 static const MediaFormatStrict format_codec_mappings[] = { | 560 static const MediaFormatStrict format_codec_mappings[] = { |
539 {"video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0"}, | 561 {"video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0"}, |
540 {"audio/webm", "opus,vorbis"}, | 562 {"audio/webm", "opus,vorbis"}, |
541 {"audio/wav", "1"}, | 563 {"audio/wav", "1"}, |
542 {"audio/x-wav", "1"}, | 564 {"audio/x-wav", "1"}, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 {"mp4a.66", MimeUtil::MPEG2_AAC_MAIN}, | 598 {"mp4a.66", MimeUtil::MPEG2_AAC_MAIN}, |
577 {"mp4a.67", MimeUtil::MPEG2_AAC_LC}, | 599 {"mp4a.67", MimeUtil::MPEG2_AAC_LC}, |
578 {"mp4a.68", MimeUtil::MPEG2_AAC_SSR}, | 600 {"mp4a.68", MimeUtil::MPEG2_AAC_SSR}, |
579 {"mp4a.69", MimeUtil::MP3}, | 601 {"mp4a.69", MimeUtil::MP3}, |
580 {"mp4a.6B", MimeUtil::MP3}, | 602 {"mp4a.6B", MimeUtil::MP3}, |
581 {"mp4a.40.2", MimeUtil::MPEG4_AAC_LC}, | 603 {"mp4a.40.2", MimeUtil::MPEG4_AAC_LC}, |
582 {"mp4a.40.02", MimeUtil::MPEG4_AAC_LC}, | 604 {"mp4a.40.02", MimeUtil::MPEG4_AAC_LC}, |
583 {"mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1}, | 605 {"mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1}, |
584 {"mp4a.40.05", MimeUtil::MPEG4_AAC_SBR_v1}, | 606 {"mp4a.40.05", MimeUtil::MPEG4_AAC_SBR_v1}, |
585 {"mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2}, | 607 {"mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2}, |
| 608 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 609 {"ac-3", MimeUtil::AC3}, |
| 610 {"ec-3", MimeUtil::EAC3}, |
| 611 {"mp4a.a5", MimeUtil::AC3}, |
| 612 {"mp4a.a6", MimeUtil::EAC3}, |
| 613 #endif |
586 {"vorbis", MimeUtil::VORBIS}, | 614 {"vorbis", MimeUtil::VORBIS}, |
587 {"opus", MimeUtil::OPUS}, | 615 {"opus", MimeUtil::OPUS}, |
588 {"vp8", MimeUtil::VP8}, | 616 {"vp8", MimeUtil::VP8}, |
589 {"vp8.0", MimeUtil::VP8}, | 617 {"vp8.0", MimeUtil::VP8}, |
590 {"vp9", MimeUtil::VP9}, | 618 {"vp9", MimeUtil::VP9}, |
591 {"vp9.0", MimeUtil::VP9}, | 619 {"vp9.0", MimeUtil::VP9}, |
592 {"theora", MimeUtil::THEORA}}; | 620 {"theora", MimeUtil::THEORA}}; |
593 | 621 |
594 // List of codec IDs that are ambiguous and don't provide | 622 // List of codec IDs that are ambiguous and don't provide |
595 // enough information to determine the codec and profile. | 623 // enough information to determine the codec and profile. |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 base::TrimString(codecs, "\"", &no_quote_codecs); | 929 base::TrimString(codecs, "\"", &no_quote_codecs); |
902 base::SplitString(no_quote_codecs, ',', codecs_out); | 930 base::SplitString(no_quote_codecs, ',', codecs_out); |
903 | 931 |
904 if (!strip) | 932 if (!strip) |
905 return; | 933 return; |
906 | 934 |
907 // Strip everything past the first '.' | 935 // Strip everything past the first '.' |
908 for (std::vector<std::string>::iterator it = codecs_out->begin(); | 936 for (std::vector<std::string>::iterator it = codecs_out->begin(); |
909 it != codecs_out->end(); | 937 it != codecs_out->end(); |
910 ++it) { | 938 ++it) { |
| 939 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 940 // We need to know the codec subtype to properly support AC3/EAC3. |
| 941 // Do not strip the first '.' for mp4a.a5 and mp4a.a6. |
| 942 if (it->compare("mp4a.a5") == 0 || it->compare("mp4a.a6") == 0) { |
| 943 continue; |
| 944 } |
| 945 #endif |
911 size_t found = it->find_first_of('.'); | 946 size_t found = it->find_first_of('.'); |
912 if (found != std::string::npos) | 947 if (found != std::string::npos) |
913 it->resize(found); | 948 it->resize(found); |
914 } | 949 } |
915 } | 950 } |
916 | 951 |
917 bool MimeUtil::IsStrictMediaMimeType(const std::string& mime_type) const { | 952 bool MimeUtil::IsStrictMediaMimeType(const std::string& mime_type) const { |
918 return strict_format_map_.find(base::StringToLowerASCII(mime_type)) != | 953 return strict_format_map_.find(base::StringToLowerASCII(mime_type)) != |
919 strict_format_map_.end(); | 954 strict_format_map_.end(); |
920 } | 955 } |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 case MP3: | 1112 case MP3: |
1078 case MPEG2_AAC_LC: | 1113 case MPEG2_AAC_LC: |
1079 case MPEG2_AAC_MAIN: | 1114 case MPEG2_AAC_MAIN: |
1080 case MPEG2_AAC_SSR: | 1115 case MPEG2_AAC_SSR: |
1081 case MPEG4_AAC_LC: | 1116 case MPEG4_AAC_LC: |
1082 case MPEG4_AAC_SBR_v1: | 1117 case MPEG4_AAC_SBR_v1: |
1083 case MPEG4_AAC_SBR_PS_v2: | 1118 case MPEG4_AAC_SBR_PS_v2: |
1084 case H264_BASELINE: | 1119 case H264_BASELINE: |
1085 case H264_MAIN: | 1120 case H264_MAIN: |
1086 case H264_HIGH: | 1121 case H264_HIGH: |
| 1122 #if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
| 1123 case AC3: |
| 1124 case EAC3: |
| 1125 #endif |
1087 return true; | 1126 return true; |
1088 | 1127 |
1089 case PCM: | 1128 case PCM: |
1090 case VORBIS: | 1129 case VORBIS: |
1091 case OPUS: | 1130 case OPUS: |
1092 case VP8: | 1131 case VP8: |
1093 case VP9: | 1132 case VP9: |
1094 case THEORA: | 1133 case THEORA: |
1095 return false; | 1134 return false; |
1096 } | 1135 } |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1427 post_data->append("\r\n" + value + "\r\n"); | 1466 post_data->append("\r\n" + value + "\r\n"); |
1428 } | 1467 } |
1429 | 1468 |
1430 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, | 1469 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, |
1431 std::string* post_data) { | 1470 std::string* post_data) { |
1432 DCHECK(post_data); | 1471 DCHECK(post_data); |
1433 post_data->append("--" + mime_boundary + "--\r\n"); | 1472 post_data->append("--" + mime_boundary + "--\r\n"); |
1434 } | 1473 } |
1435 | 1474 |
1436 } // namespace net | 1475 } // namespace net |
OLD | NEW |