void Initialize(DemuxerStream* stream,
const PipelineStatusCB& status_cb);
- // Cancels all pending operations and fires all pending callbacks. Sets
- // |this| to kUninitialized state if |this| hasn't been initialized, or to
- // kIdle state otherwise.
+ // Cancels all pending operations and fires all pending callbacks. If in
+ // kPendingDemuxerRead or kPendingDecrypt state, waits for the pending
+ // operation to finish before satisfying |closure|. Sets the state to
+ // kUninitialized if |this| hasn't been initialized, or to kIdle otherwise.
void Reset(const base::Closure& closure);
+ // Cancels all pending operations immediately and fires all pending callbacks
+ // and sets the state to kStopped. Does NOT wait for any pending operations.
+ // Note: During the teardown process, media pipeline will be waiting on the
+ // render main thread. If a Decryptor depends on the render main thread
+ // (e.g. PpapiDecryptor), the pending DecryptCB would not be satisfied.
+ void Stop(const base::Closure& closure);
+
// DemuxerStream implementation.
virtual void Read(const ReadCB& read_cb) OVERRIDE;
virtual AudioDecoderConfig audio_decoder_config() OVERRIDE;
kPendingDemuxerRead,
kPendingDecrypt,
kWaitingForKey,
+ kStopped
};
// Callback for DecryptorHost::RequestDecryptor().