summaryrefslogtreecommitdiff
path: root/chromium/media/formats/mp4/box_definitions.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-05 17:15:33 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-11 07:47:18 +0000
commit7324afb043a0b1e623d8e8eb906cdc53bdeb4685 (patch)
treea3fe2d74ea9c9e142c390dac4ca0e219382ace46 /chromium/media/formats/mp4/box_definitions.cc
parent6a4cabb866f66d4128a97cdc6d9d08ce074f1247 (diff)
downloadqtwebengine-chromium-7324afb043a0b1e623d8e8eb906cdc53bdeb4685.tar.gz
BASELINE: Update Chromium to 58.0.3029.54
Change-Id: I67f57065a7afdc8e4614adb5c0230281428df4d1 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'chromium/media/formats/mp4/box_definitions.cc')
-rw-r--r--chromium/media/formats/mp4/box_definitions.cc91
1 files changed, 76 insertions, 15 deletions
diff --git a/chromium/media/formats/mp4/box_definitions.cc b/chromium/media/formats/mp4/box_definitions.cc
index b6ea088aff8..c1c9934ccc4 100644
--- a/chromium/media/formats/mp4/box_definitions.cc
+++ b/chromium/media/formats/mp4/box_definitions.cc
@@ -20,6 +20,10 @@
#include "media/formats/mp4/rcheck.h"
#include "media/media_features.h"
+#if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+#include "media/formats/mp4/dolby_vision.h"
+#endif
+
#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
#include "media/formats/mp4/hevc.h"
#endif
@@ -610,11 +614,6 @@ bool AVCDecoderConfigurationRecord::ParseInternal(
RCHECK(reader->Read2(&sps_length) &&
reader->ReadVec(&sps_list[i], sps_length));
RCHECK(sps_list[i].size() > 4);
-
- if (media_log.get()) {
- MEDIA_LOG(INFO, media_log) << "Video codec: avc1."
- << base::HexEncode(sps_list[i].data() + 1, 3);
- }
}
uint8_t num_pps;
@@ -706,8 +705,10 @@ bool VideoSampleEntry::Parse(BoxReader* reader) {
reader->Read2(&height) &&
reader->SkipBytes(50));
- RCHECK(reader->ScanChildren() &&
- reader->MaybeReadChild(&pixel_aspect));
+ RCHECK(reader->ScanChildren());
+ if (reader->HasChild(&pixel_aspect)) {
+ RCHECK(reader->MaybeReadChild(&pixel_aspect));
+ }
if (format == FOURCC_ENCV) {
// Continue scanning until a recognized protection scheme is found, or until
@@ -732,6 +733,17 @@ bool VideoSampleEntry::Parse(BoxReader* reader) {
avcConfig->profile_indication);
frame_bitstream_converter =
make_scoped_refptr(new AVCBitstreamConverter(std::move(avcConfig)));
+#if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+ // It can be Dolby Vision stream if there is DVCC box.
+ DolbyVisionConfiguration dvccConfig;
+ if (reader->HasChild(&dvccConfig) && reader->ReadChild(&dvccConfig)) {
+ DVLOG(2) << __func__ << " reading DolbyVisionConfiguration (dvcC)";
+ static_cast<AVCBitstreamConverter*>(frame_bitstream_converter.get())
+ ->DisablePostAnnexbValidation();
+ video_codec = kCodecDolbyVision;
+ video_codec_profile = dvccConfig.codec_profile;
+ }
+#endif // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
break;
}
#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
@@ -745,9 +757,52 @@ bool VideoSampleEntry::Parse(BoxReader* reader) {
video_codec_profile = hevcConfig->GetVideoProfile();
frame_bitstream_converter =
make_scoped_refptr(new HEVCBitstreamConverter(std::move(hevcConfig)));
+#if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+ // It can be Dolby Vision stream if there is DVCC box.
+ DolbyVisionConfiguration dvccConfig;
+ if (reader->HasChild(&dvccConfig) && reader->ReadChild(&dvccConfig)) {
+ DVLOG(2) << __func__ << " reading DolbyVisionConfiguration (dvcC)";
+ video_codec = kCodecDolbyVision;
+ video_codec_profile = dvccConfig.codec_profile;
+ }
+#endif // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
break;
}
-#endif
+#endif // BUILDFLAG(ENABLE_HEVC_DEMUXING)
+#if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+ case FOURCC_DVA1:
+ case FOURCC_DVAV: {
+ DVLOG(2) << __func__ << " reading AVCDecoderConfigurationRecord (avcC)";
+ std::unique_ptr<AVCDecoderConfigurationRecord> avcConfig(
+ new AVCDecoderConfigurationRecord());
+ RCHECK(reader->ReadChild(avcConfig.get()));
+ frame_bitstream_converter =
+ make_scoped_refptr(new AVCBitstreamConverter(std::move(avcConfig)));
+ DVLOG(2) << __func__ << " reading DolbyVisionConfiguration (dvcC)";
+ DolbyVisionConfiguration dvccConfig;
+ RCHECK(reader->ReadChild(&dvccConfig));
+ video_codec = kCodecDolbyVision;
+ video_codec_profile = dvccConfig.codec_profile;
+ break;
+ }
+#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
+ case FOURCC_DVH1:
+ case FOURCC_DVHE: {
+ DVLOG(2) << __func__ << " reading HEVCDecoderConfigurationRecord (hvcC)";
+ std::unique_ptr<HEVCDecoderConfigurationRecord> hevcConfig(
+ new HEVCDecoderConfigurationRecord());
+ RCHECK(reader->ReadChild(hevcConfig.get()));
+ frame_bitstream_converter =
+ make_scoped_refptr(new HEVCBitstreamConverter(std::move(hevcConfig)));
+ DVLOG(2) << __func__ << " reading DolbyVisionConfiguration (dvcC)";
+ DolbyVisionConfiguration dvccConfig;
+ RCHECK(reader->ReadChild(&dvccConfig));
+ video_codec = kCodecDolbyVision;
+ video_codec_profile = dvccConfig.codec_profile;
+ break;
+ }
+#endif // BUILDFLAG(ENABLE_HEVC_DEMUXING)
+#endif // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
case FOURCC_VP09:
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableVp9InMp4)) {
@@ -783,7 +838,15 @@ bool VideoSampleEntry::IsFormatValid() const {
#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
case FOURCC_HEV1:
case FOURCC_HVC1:
-#endif
+#if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+ case FOURCC_DVH1:
+ case FOURCC_DVHE:
+#endif // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+#endif // BUILDFLAG(ENABLE_HEVC_DEMUXING)
+#if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
+ case FOURCC_DVA1:
+ case FOURCC_DVAV:
+#endif // BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
return true;
case FOURCC_VP09:
return base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -815,11 +878,6 @@ bool ElementaryStreamDescriptor::Parse(BoxReader* reader) {
object_type = es_desc.object_type();
- if (object_type != 0x40) {
- MEDIA_LOG(INFO, reader->media_log()) << "Audio codec: mp4a." << std::hex
- << static_cast<int>(object_type);
- }
-
if (es_desc.IsAAC(object_type))
RCHECK(aac.Parse(es_desc.decoder_specific_info(), reader->media_log()));
@@ -1078,7 +1136,10 @@ bool TrackFragmentHeader::Parse(BoxReader* reader) {
// the wild don't set it.
//
// RCHECK((flags & 0x020000) && !(flags & 0x1));
- RCHECK(!(reader->flags() & 0x1));
+ RCHECK_MEDIA_LOGGED(!(reader->flags() & 0x1), reader->media_log(),
+ "TFHD base-data-offset not allowed by MSE. See "
+ "https://www.w3.org/TR/mse-byte-stream-format-isobmff/"
+ "#movie-fragment-relative-addressing");
if (reader->flags() & 0x2) {
RCHECK(reader->Read4(&sample_description_index));