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

Side by Side Diff: media/filters/ffmpeg_demuxer.cc

Issue 816353010: Implemented HEVC video demuxing and parsing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adjusted inclusion of hevc source files in gyp/gn Created 5 years, 10 months 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
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 "media/filters/ffmpeg_demuxer.h" 5 #include "media/filters/ffmpeg_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 14 matching lines...) Expand all
25 #include "media/base/decoder_buffer.h" 25 #include "media/base/decoder_buffer.h"
26 #include "media/base/decrypt_config.h" 26 #include "media/base/decrypt_config.h"
27 #include "media/base/limits.h" 27 #include "media/base/limits.h"
28 #include "media/base/media_log.h" 28 #include "media/base/media_log.h"
29 #include "media/base/video_decoder_config.h" 29 #include "media/base/video_decoder_config.h"
30 #include "media/ffmpeg/ffmpeg_common.h" 30 #include "media/ffmpeg/ffmpeg_common.h"
31 #include "media/filters/ffmpeg_aac_bitstream_converter.h" 31 #include "media/filters/ffmpeg_aac_bitstream_converter.h"
32 #include "media/filters/ffmpeg_bitstream_converter.h" 32 #include "media/filters/ffmpeg_bitstream_converter.h"
33 #include "media/filters/ffmpeg_glue.h" 33 #include "media/filters/ffmpeg_glue.h"
34 #include "media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.h" 34 #include "media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.h"
35 #if defined(ENABLE_HEVC_DEMUXING)
36 #include "media/filters/ffmpeg_h265_to_annex_b_bitstream_converter.h"
37 #endif
35 #include "media/filters/webvtt_util.h" 38 #include "media/filters/webvtt_util.h"
36 #include "media/formats/webm/webm_crypto_helpers.h" 39 #include "media/formats/webm/webm_crypto_helpers.h"
37 40
38 namespace media { 41 namespace media {
39 42
40 static base::Time ExtractTimelineOffset(AVFormatContext* format_context) { 43 static base::Time ExtractTimelineOffset(AVFormatContext* format_context) {
41 if (strstr(format_context->iformat->name, "webm") || 44 if (strstr(format_context->iformat->name, "webm") ||
42 strstr(format_context->iformat->name, "matroska")) { 45 strstr(format_context->iformat->name, "matroska")) {
43 const AVDictionaryEntry* entry = 46 const AVDictionaryEntry* entry =
44 av_dict_get(format_context->metadata, "creation_time", NULL, 0); 47 av_dict_get(format_context->metadata, "creation_time", NULL, 0);
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 if (bitstream_converter_) 456 if (bitstream_converter_)
454 InitBitstreamConverter(); 457 InitBitstreamConverter();
455 #endif // defined(USE_PROPRIETARY_CODECS) 458 #endif // defined(USE_PROPRIETARY_CODECS)
456 } 459 }
457 460
458 void FFmpegDemuxerStream::InitBitstreamConverter() { 461 void FFmpegDemuxerStream::InitBitstreamConverter() {
459 #if defined(USE_PROPRIETARY_CODECS) 462 #if defined(USE_PROPRIETARY_CODECS)
460 if (stream_->codec->codec_id == AV_CODEC_ID_H264) { 463 if (stream_->codec->codec_id == AV_CODEC_ID_H264) {
461 bitstream_converter_.reset( 464 bitstream_converter_.reset(
462 new FFmpegH264ToAnnexBBitstreamConverter(stream_->codec)); 465 new FFmpegH264ToAnnexBBitstreamConverter(stream_->codec));
466 #if defined(ENABLE_HEVC_DEMUXING)
467 } else if (stream_->codec->codec_id == AV_CODEC_ID_HEVC) {
ddorwin 2015/02/23 20:00:49 Do you expect FFmpeg to be built with such support
servolk 2015/02/24 02:15:13 Possibly. At the moment none of the ffmpeg_brandin
468 bitstream_converter_.reset(
469 new FFmpegH265ToAnnexBBitstreamConverter(stream_->codec));
470 #endif
463 } else if (stream_->codec->codec_id == AV_CODEC_ID_AAC) { 471 } else if (stream_->codec->codec_id == AV_CODEC_ID_AAC) {
464 bitstream_converter_.reset( 472 bitstream_converter_.reset(
465 new FFmpegAACBitstreamConverter(stream_->codec)); 473 new FFmpegAACBitstreamConverter(stream_->codec));
466 } 474 }
467 #endif // defined(USE_PROPRIETARY_CODECS) 475 #endif // defined(USE_PROPRIETARY_CODECS)
468 } 476 }
469 477
470 bool FFmpegDemuxerStream::SupportsConfigChanges() { return false; } 478 bool FFmpegDemuxerStream::SupportsConfigChanges() { return false; }
471 479
472 AudioDecoderConfig FFmpegDemuxerStream::audio_decoder_config() { 480 AudioDecoderConfig FFmpegDemuxerStream::audio_decoder_config() {
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after
1293 1301
1294 void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) { 1302 void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) {
1295 DCHECK(task_runner_->BelongsToCurrentThread()); 1303 DCHECK(task_runner_->BelongsToCurrentThread());
1296 for (const auto& stream : streams_) { // |stream| is a ref to a pointer. 1304 for (const auto& stream : streams_) { // |stream| is a ref to a pointer.
1297 if (stream) 1305 if (stream)
1298 stream->SetLiveness(liveness); 1306 stream->SetLiveness(liveness);
1299 } 1307 }
1300 } 1308 }
1301 1309
1302 } // namespace media 1310 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698