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

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

Issue 14217008: Remove reference counting from media::DemuxerStream and friends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 8 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 | Annotate | Revision Log
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/decrypting_demuxer_stream.h" 5 #include "media/filters/decrypting_demuxer_stream.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/message_loop_proxy.h" 11 #include "base/message_loop_proxy.h"
12 #include "media/base/audio_decoder_config.h" 12 #include "media/base/audio_decoder_config.h"
13 #include "media/base/video_decoder_config.h" 13 #include "media/base/video_decoder_config.h"
14 #include "media/base/bind_to_loop.h" 14 #include "media/base/bind_to_loop.h"
15 #include "media/base/decoder_buffer.h" 15 #include "media/base/decoder_buffer.h"
16 #include "media/base/decryptor.h" 16 #include "media/base/decryptor.h"
17 #include "media/base/demuxer_stream.h" 17 #include "media/base/demuxer_stream.h"
18 #include "media/base/pipeline.h" 18 #include "media/base/pipeline.h"
19 19
20 namespace media { 20 namespace media {
21 21
22 #define BIND_TO_LOOP(function) \ 22 #define BIND_TO_LOOP(function) \
23 media::BindToLoop(message_loop_, base::Bind(function, this)) 23 media::BindToLoop(message_loop_, base::Bind(function, weak_this_))
24 24
25 static bool IsStreamValidAndEncrypted( 25 static bool IsStreamValidAndEncrypted(DemuxerStream* stream) {
26 const scoped_refptr<DemuxerStream>& stream) {
27 return ((stream->type() == DemuxerStream::AUDIO && 26 return ((stream->type() == DemuxerStream::AUDIO &&
28 stream->audio_decoder_config().IsValidConfig() && 27 stream->audio_decoder_config().IsValidConfig() &&
29 stream->audio_decoder_config().is_encrypted()) || 28 stream->audio_decoder_config().is_encrypted()) ||
30 (stream->type() == DemuxerStream::VIDEO && 29 (stream->type() == DemuxerStream::VIDEO &&
31 stream->video_decoder_config().IsValidConfig() && 30 stream->video_decoder_config().IsValidConfig() &&
32 stream->video_decoder_config().is_encrypted())); 31 stream->video_decoder_config().is_encrypted()));
33 } 32 }
34 33
35 DecryptingDemuxerStream::DecryptingDemuxerStream( 34 DecryptingDemuxerStream::DecryptingDemuxerStream(
36 const scoped_refptr<base::MessageLoopProxy>& message_loop, 35 const scoped_refptr<base::MessageLoopProxy>& message_loop,
37 const SetDecryptorReadyCB& set_decryptor_ready_cb) 36 const SetDecryptorReadyCB& set_decryptor_ready_cb)
38 : message_loop_(message_loop), 37 : message_loop_(message_loop),
38 weak_factory_(this),
39 state_(kUninitialized), 39 state_(kUninitialized),
40 demuxer_stream_(NULL),
40 set_decryptor_ready_cb_(set_decryptor_ready_cb), 41 set_decryptor_ready_cb_(set_decryptor_ready_cb),
41 decryptor_(NULL), 42 decryptor_(NULL),
42 key_added_while_decrypt_pending_(false) { 43 key_added_while_decrypt_pending_(false) {
43 } 44 }
44 45
45 void DecryptingDemuxerStream::Initialize( 46 void DecryptingDemuxerStream::Initialize(
46 const scoped_refptr<DemuxerStream>& stream, 47 DemuxerStream* stream,
47 const PipelineStatusCB& status_cb) { 48 const PipelineStatusCB& status_cb) {
48 DVLOG(2) << "Initialize()"; 49 DVLOG(2) << "Initialize()";
49 DCHECK(message_loop_->BelongsToCurrentThread()); 50 DCHECK(message_loop_->BelongsToCurrentThread());
50 DCHECK_EQ(state_, kUninitialized) << state_; 51 DCHECK_EQ(state_, kUninitialized) << state_;
51 52
52 DCHECK(!demuxer_stream_); 53 DCHECK(!demuxer_stream_);
54 weak_this_ = weak_factory_.GetWeakPtr();
53 demuxer_stream_ = stream; 55 demuxer_stream_ = stream;
54 init_cb_ = status_cb; 56 init_cb_ = status_cb;
55 57
56 InitializeDecoderConfig(); 58 InitializeDecoderConfig();
57 59
58 state_ = kDecryptorRequested; 60 state_ = kDecryptorRequested;
59 set_decryptor_ready_cb_.Run( 61 set_decryptor_ready_cb_.Run(
60 BIND_TO_LOOP(&DecryptingDemuxerStream::SetDecryptor)); 62 BIND_TO_LOOP(&DecryptingDemuxerStream::SetDecryptor));
61 } 63 }
62 64
63 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) { 65 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) {
64 DVLOG(3) << "Read()"; 66 DVLOG(3) << "Read()";
65 DCHECK(message_loop_->BelongsToCurrentThread()); 67 DCHECK(message_loop_->BelongsToCurrentThread());
66 DCHECK_EQ(state_, kIdle) << state_; 68 DCHECK_EQ(state_, kIdle) << state_;
67 DCHECK(!read_cb.is_null()); 69 DCHECK(!read_cb.is_null());
68 CHECK(read_cb_.is_null()) << "Overlapping reads are not supported."; 70 CHECK(read_cb_.is_null()) << "Overlapping reads are not supported.";
69 71
70 read_cb_ = read_cb; 72 read_cb_ = read_cb;
71 state_ = kPendingDemuxerRead; 73 state_ = kPendingDemuxerRead;
72 demuxer_stream_->Read( 74 demuxer_stream_->Read(
73 base::Bind(&DecryptingDemuxerStream::DecryptBuffer, this)); 75 base::Bind(&DecryptingDemuxerStream::DecryptBuffer, weak_this_));
74 } 76 }
75 77
76 void DecryptingDemuxerStream::Reset(const base::Closure& closure) { 78 void DecryptingDemuxerStream::Reset(const base::Closure& closure) {
77 DVLOG(2) << "Reset() - state: " << state_; 79 DVLOG(2) << "Reset() - state: " << state_;
78 DCHECK(message_loop_->BelongsToCurrentThread()); 80 DCHECK(message_loop_->BelongsToCurrentThread());
79 DCHECK(state_ != kUninitialized && state_ != kDecryptorRequested) << state_; 81 DCHECK(state_ != kUninitialized && state_ != kDecryptorRequested) << state_;
80 DCHECK(init_cb_.is_null()); // No Reset() during pending initialization. 82 DCHECK(init_cb_.is_null()); // No Reset() during pending initialization.
81 DCHECK(reset_cb_.is_null()); 83 DCHECK(reset_cb_.is_null());
82 84
83 reset_cb_ = BindToCurrentLoop(closure); 85 reset_cb_ = BindToCurrentLoop(closure);
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 break; 317 break;
316 } 318 }
317 319
318 default: 320 default:
319 NOTREACHED(); 321 NOTREACHED();
320 return; 322 return;
321 } 323 }
322 } 324 }
323 325
324 } // namespace media 326 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/decrypting_demuxer_stream.h ('k') | media/filters/decrypting_demuxer_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698