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

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

Issue 2736073002: Set AVDISCARD_ALL flag for disabled streams in FFmpegDemuxer (Closed)
Patch Set: Added test case for the disabled video stream Created 3 years, 9 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
« no previous file with comments | « no previous file | media/filters/ffmpeg_demuxer_unittest.cc » ('j') | 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 "media/filters/ffmpeg_demuxer.h" 5 #include "media/filters/ffmpeg_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 DCHECK(task_runner_->BelongsToCurrentThread()); 725 DCHECK(task_runner_->BelongsToCurrentThread());
726 return is_enabled_; 726 return is_enabled_;
727 } 727 }
728 728
729 void FFmpegDemuxerStream::set_enabled(bool enabled, base::TimeDelta timestamp) { 729 void FFmpegDemuxerStream::set_enabled(bool enabled, base::TimeDelta timestamp) {
730 DCHECK(task_runner_->BelongsToCurrentThread()); 730 DCHECK(task_runner_->BelongsToCurrentThread());
731 if (enabled == is_enabled_) 731 if (enabled == is_enabled_)
732 return; 732 return;
733 733
734 is_enabled_ = enabled; 734 is_enabled_ = enabled;
735 av_stream()->discard = enabled ? AVDISCARD_DEFAULT : AVDISCARD_ALL;
735 if (is_enabled_) { 736 if (is_enabled_) {
736 waiting_for_keyframe_ = true; 737 waiting_for_keyframe_ = true;
737 } 738 }
738 if (!is_enabled_ && !read_cb_.is_null()) { 739 if (!is_enabled_ && !read_cb_.is_null()) {
739 DVLOG(1) << "Read from disabled stream, returning EOS"; 740 DVLOG(1) << "Read from disabled stream, returning EOS";
740 base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer()); 741 base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
741 return; 742 return;
742 } 743 }
743 if (!stream_status_change_cb_.is_null()) 744 if (!stream_status_change_cb_.is_null())
744 stream_status_change_cb_.Run(this, is_enabled_, timestamp); 745 stream_status_change_cb_.Run(this, is_enabled_, timestamp);
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 // when using external decoder (e.g. hardware decoder), so override them 1281 // when using external decoder (e.g. hardware decoder), so override them
1281 // to make sure this translates into a valid VideoDecoderConfig. Coded 1282 // to make sure this translates into a valid VideoDecoderConfig. Coded
1282 // size is overridden in AVStreamToVideoDecoderConfig(). 1283 // size is overridden in AVStreamToVideoDecoderConfig().
1283 if (stream->codecpar->format == AV_PIX_FMT_NONE) 1284 if (stream->codecpar->format == AV_PIX_FMT_NONE)
1284 stream->codecpar->format = AV_PIX_FMT_YUV420P; 1285 stream->codecpar->format = AV_PIX_FMT_YUV420P;
1285 } 1286 }
1286 #endif 1287 #endif
1287 } else if (codec_type == AVMEDIA_TYPE_SUBTITLE) { 1288 } else if (codec_type == AVMEDIA_TYPE_SUBTITLE) {
1288 detected_text_track_count++; 1289 detected_text_track_count++;
1289 if (codec_id != AV_CODEC_ID_WEBVTT || !text_enabled_) { 1290 if (codec_id != AV_CODEC_ID_WEBVTT || !text_enabled_) {
1291 stream->discard = AVDISCARD_ALL;
1290 continue; 1292 continue;
1291 } 1293 }
1292 } else { 1294 } else {
1295 stream->discard = AVDISCARD_ALL;
1293 continue; 1296 continue;
1294 } 1297 }
1295 1298
1296 // Attempt to create a FFmpegDemuxerStream from the AVStream. This will 1299 // Attempt to create a FFmpegDemuxerStream from the AVStream. This will
1297 // return nullptr if the AVStream is invalid. Validity checks will verify 1300 // return nullptr if the AVStream is invalid. Validity checks will verify
1298 // things like: codec, channel layout, sample/pixel format, etc... 1301 // things like: codec, channel layout, sample/pixel format, etc...
1299 std::unique_ptr<FFmpegDemuxerStream> demuxer_stream = 1302 std::unique_ptr<FFmpegDemuxerStream> demuxer_stream =
1300 FFmpegDemuxerStream::Create(this, stream, media_log_); 1303 FFmpegDemuxerStream::Create(this, stream, media_log_);
1301 if (demuxer_stream.get()) { 1304 if (demuxer_stream.get()) {
1302 streams_[i] = std::move(demuxer_stream); 1305 streams_[i] = std::move(demuxer_stream);
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
1839 1842
1840 void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) { 1843 void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) {
1841 DCHECK(task_runner_->BelongsToCurrentThread()); 1844 DCHECK(task_runner_->BelongsToCurrentThread());
1842 for (const auto& stream : streams_) { 1845 for (const auto& stream : streams_) {
1843 if (stream) 1846 if (stream)
1844 stream->SetLiveness(liveness); 1847 stream->SetLiveness(liveness);
1845 } 1848 }
1846 } 1849 }
1847 1850
1848 } // namespace media 1851 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/filters/ffmpeg_demuxer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698