| 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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 // compatibility) | 516 // compatibility) |
| 517 // mp4a.40.29 - MPEG-4 HE-AAC v2 (AAC LC + SBR + PS) | 517 // mp4a.40.29 - MPEG-4 HE-AAC v2 (AAC LC + SBR + PS) |
| 518 // | 518 // |
| 519 // avc1.42E0xx - H.264 Baseline | 519 // avc1.42E0xx - H.264 Baseline |
| 520 // avc1.4D40xx - H.264 Main | 520 // avc1.4D40xx - H.264 Main |
| 521 // avc1.6400xx - H.264 High | 521 // avc1.6400xx - H.264 High |
| 522 static const char kMP4AudioCodecsExpression[] = | 522 static const char kMP4AudioCodecsExpression[] = |
| 523 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," | 523 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
| 524 "mp4a.40.05,mp4a.40.29"; | 524 "mp4a.40.05,mp4a.40.29"; |
| 525 static const char kMP4VideoCodecsExpression[] = | 525 static const char kMP4VideoCodecsExpression[] = |
| 526 // 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 |
| 528 // strings in these three arrays, we should use the Codec enum values. |
| 529 // This will avoid confusion and unnecessary parsing at runtime. |
| 530 // kUnambiguousCodecStringMap/kAmbiguousCodecStringMap should be the only |
| 531 // mapping from strings to codecs. See crbug.com/461009. |
| 526 "avc1.42E00A,avc1.4D400A,avc1.64000A," | 532 "avc1.42E00A,avc1.4D400A,avc1.64000A," |
| 527 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," | 533 "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
| 528 "mp4a.40.05,mp4a.40.29"; | 534 "mp4a.40.05,mp4a.40.29"; |
| 529 | 535 |
| 536 // These containers are also included in |
| 537 // common_media_types/proprietary_media_types. See crbug.com/461012. |
| 530 static const MediaFormatStrict format_codec_mappings[] = { | 538 static const MediaFormatStrict format_codec_mappings[] = { |
| 531 {"video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0"}, | 539 {"video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0"}, |
| 532 {"audio/webm", "opus,vorbis"}, | 540 {"audio/webm", "opus,vorbis"}, |
| 533 {"audio/wav", "1"}, | 541 {"audio/wav", "1"}, |
| 534 {"audio/x-wav", "1"}, | 542 {"audio/x-wav", "1"}, |
| 535 // Android does not support Opus in Ogg container. | 543 // Android does not support Opus in Ogg container. |
| 536 #if defined(OS_ANDROID) | 544 #if defined(OS_ANDROID) |
| 537 {"video/ogg", "theora,vorbis"}, | 545 {"video/ogg", "theora,vorbis"}, |
| 538 {"audio/ogg", "vorbis"}, | 546 {"audio/ogg", "vorbis"}, |
| 539 {"application/ogg", "theora,vorbis"}, | 547 {"application/ogg", "theora,vorbis"}, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 554 | 562 |
| 555 struct CodecIDMappings { | 563 struct CodecIDMappings { |
| 556 const char* const codec_id; | 564 const char* const codec_id; |
| 557 MimeUtil::Codec codec; | 565 MimeUtil::Codec codec; |
| 558 }; | 566 }; |
| 559 | 567 |
| 560 // List of codec IDs that provide enough information to determine the | 568 // List of codec IDs that provide enough information to determine the |
| 561 // codec and profile being requested. | 569 // codec and profile being requested. |
| 562 // | 570 // |
| 563 // The "mp4a" strings come from RFC 6381. | 571 // The "mp4a" strings come from RFC 6381. |
| 564 static const CodecIDMappings kUnambiguousCodecIDs[] = { | 572 static const CodecIDMappings kUnambiguousCodecStringMap[] = { |
| 565 {"1", MimeUtil::PCM}, // We only allow this for WAV so it isn't ambiguous. | 573 {"1", MimeUtil::PCM}, // We only allow this for WAV so it isn't ambiguous. |
| 574 // avc1/avc3.XXXXXX may be unambiguous; handled by ParseH264CodecID(). |
| 566 {"mp3", MimeUtil::MP3}, | 575 {"mp3", MimeUtil::MP3}, |
| 567 {"mp4a.66", MimeUtil::MPEG2_AAC_MAIN}, | 576 {"mp4a.66", MimeUtil::MPEG2_AAC_MAIN}, |
| 568 {"mp4a.67", MimeUtil::MPEG2_AAC_LC}, | 577 {"mp4a.67", MimeUtil::MPEG2_AAC_LC}, |
| 569 {"mp4a.68", MimeUtil::MPEG2_AAC_SSR}, | 578 {"mp4a.68", MimeUtil::MPEG2_AAC_SSR}, |
| 570 {"mp4a.69", MimeUtil::MP3}, | 579 {"mp4a.69", MimeUtil::MP3}, |
| 571 {"mp4a.6B", MimeUtil::MP3}, | 580 {"mp4a.6B", MimeUtil::MP3}, |
| 572 {"mp4a.40.2", MimeUtil::MPEG4_AAC_LC}, | 581 {"mp4a.40.2", MimeUtil::MPEG4_AAC_LC}, |
| 573 {"mp4a.40.02", MimeUtil::MPEG4_AAC_LC}, | 582 {"mp4a.40.02", MimeUtil::MPEG4_AAC_LC}, |
| 574 {"mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1}, | 583 {"mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1}, |
| 575 {"mp4a.40.05", MimeUtil::MPEG4_AAC_SBR_v1}, | 584 {"mp4a.40.05", MimeUtil::MPEG4_AAC_SBR_v1}, |
| 576 {"mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2}, | 585 {"mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2}, |
| 577 {"vorbis", MimeUtil::VORBIS}, | 586 {"vorbis", MimeUtil::VORBIS}, |
| 578 {"opus", MimeUtil::OPUS}, | 587 {"opus", MimeUtil::OPUS}, |
| 579 {"vp8", MimeUtil::VP8}, | 588 {"vp8", MimeUtil::VP8}, |
| 580 {"vp8.0", MimeUtil::VP8}, | 589 {"vp8.0", MimeUtil::VP8}, |
| 581 {"vp9", MimeUtil::VP9}, | 590 {"vp9", MimeUtil::VP9}, |
| 582 {"vp9.0", MimeUtil::VP9}, | 591 {"vp9.0", MimeUtil::VP9}, |
| 583 {"theora", MimeUtil::THEORA}}; | 592 {"theora", MimeUtil::THEORA}}; |
| 584 | 593 |
| 585 // List of codec IDs that are ambiguous and don't provide | 594 // List of codec IDs that are ambiguous and don't provide |
| 586 // enough information to determine the codec and profile. | 595 // enough information to determine the codec and profile. |
| 587 // The codec in these entries indicate the codec and profile | 596 // The codec in these entries indicate the codec and profile |
| 588 // we assume the user is trying to indicate. | 597 // we assume the user is trying to indicate. |
| 589 static const CodecIDMappings kAmbiguousCodecIDs[] = { | 598 static const CodecIDMappings kAmbiguousCodecStringMap[] = { |
| 590 { "mp4a.40", MimeUtil::MPEG4_AAC_LC }, | 599 {"mp4a.40", MimeUtil::MPEG4_AAC_LC}, |
| 591 { "avc1", MimeUtil::H264_BASELINE }, | 600 {"avc1", MimeUtil::H264_BASELINE}, |
| 592 { "avc3", MimeUtil::H264_BASELINE }, | 601 {"avc3", MimeUtil::H264_BASELINE}, |
| 602 // avc1/avc3.XXXXXX may be ambiguous; handled by ParseH264CodecID(). |
| 593 }; | 603 }; |
| 594 | 604 |
| 595 MimeUtil::MimeUtil() : allow_proprietary_codecs_(false) { | 605 MimeUtil::MimeUtil() : allow_proprietary_codecs_(false) { |
| 596 InitializeMimeTypeMaps(); | 606 InitializeMimeTypeMaps(); |
| 597 } | 607 } |
| 598 | 608 |
| 599 SupportsType MimeUtil::AreSupportedCodecs( | 609 SupportsType MimeUtil::AreSupportedCodecs( |
| 600 const CodecSet& supported_codecs, | 610 const CodecSet& supported_codecs, |
| 601 const std::vector<std::string>& codecs) const { | 611 const std::vector<std::string>& codecs) const { |
| 602 DCHECK(!supported_codecs.empty()); | 612 DCHECK(!supported_codecs.empty()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 media_map_.insert(common_media_types[i]); | 667 media_map_.insert(common_media_types[i]); |
| 658 } | 668 } |
| 659 #if defined(USE_PROPRIETARY_CODECS) | 669 #if defined(USE_PROPRIETARY_CODECS) |
| 660 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) | 670 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) |
| 661 media_map_.insert(proprietary_media_types[i]); | 671 media_map_.insert(proprietary_media_types[i]); |
| 662 #endif | 672 #endif |
| 663 | 673 |
| 664 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) | 674 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) |
| 665 javascript_map_.insert(supported_javascript_types[i]); | 675 javascript_map_.insert(supported_javascript_types[i]); |
| 666 | 676 |
| 667 for (size_t i = 0; i < arraysize(kUnambiguousCodecIDs); ++i) { | 677 for (size_t i = 0; i < arraysize(kUnambiguousCodecStringMap); ++i) { |
| 668 string_to_codec_map_[kUnambiguousCodecIDs[i].codec_id] = | 678 string_to_codec_map_[kUnambiguousCodecStringMap[i].codec_id] = |
| 669 CodecEntry(kUnambiguousCodecIDs[i].codec, false); | 679 CodecEntry(kUnambiguousCodecStringMap[i].codec, false); |
| 670 } | 680 } |
| 671 | 681 |
| 672 for (size_t i = 0; i < arraysize(kAmbiguousCodecIDs); ++i) { | 682 for (size_t i = 0; i < arraysize(kAmbiguousCodecStringMap); ++i) { |
| 673 string_to_codec_map_[kAmbiguousCodecIDs[i].codec_id] = | 683 string_to_codec_map_[kAmbiguousCodecStringMap[i].codec_id] = |
| 674 CodecEntry(kAmbiguousCodecIDs[i].codec, true); | 684 CodecEntry(kAmbiguousCodecStringMap[i].codec, true); |
| 675 } | 685 } |
| 676 | 686 |
| 677 // Initialize the strict supported media types. | 687 // Initialize the strict supported media types. |
| 678 for (size_t i = 0; i < arraysize(format_codec_mappings); ++i) { | 688 for (size_t i = 0; i < arraysize(format_codec_mappings); ++i) { |
| 679 std::vector<std::string> mime_type_codecs; | 689 std::vector<std::string> mime_type_codecs; |
| 680 ParseCodecString(format_codec_mappings[i].codecs_list, | 690 ParseCodecString(format_codec_mappings[i].codecs_list, |
| 681 &mime_type_codecs, | 691 &mime_type_codecs, |
| 682 false); | 692 false); |
| 683 | 693 |
| 684 CodecSet codecs; | 694 CodecSet codecs; |
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1418 post_data->append("\r\n" + value + "\r\n"); | 1428 post_data->append("\r\n" + value + "\r\n"); |
| 1419 } | 1429 } |
| 1420 | 1430 |
| 1421 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, | 1431 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, |
| 1422 std::string* post_data) { | 1432 std::string* post_data) { |
| 1423 DCHECK(post_data); | 1433 DCHECK(post_data); |
| 1424 post_data->append("--" + mime_boundary + "--\r\n"); | 1434 post_data->append("--" + mime_boundary + "--\r\n"); |
| 1425 } | 1435 } |
| 1426 | 1436 |
| 1427 } // namespace net | 1437 } // namespace net |
| OLD | NEW |