1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/renderer/media/media_stream_track.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content {
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MediaStreamTrack* MediaStreamTrack::GetTrack(
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const blink::WebMediaStreamTrack& track) {
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (track.isNull())
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return static_cast<MediaStreamTrack*>(track.extraData());
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MediaStreamTrack::MediaStreamTrack(
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const scoped_refptr<webrtc::MediaStreamTrackInterface>& track,
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool is_local_track)
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : track_(track), is_local_track_(is_local_track) {
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MediaStreamTrack::~MediaStreamTrack() {
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MediaStreamTrack::SetEnabled(bool enabled) {
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(thread_checker_.CalledOnValidThread());
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (track_.get())
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    track_->set_enabled(enabled);
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid MediaStreamTrack::Stop() {
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(thread_checker_.CalledOnValidThread());
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Stop means that a track should be stopped permanently. But
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // since there is no proper way of doing that on a remote track, we can
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // at least disable the track. Blink will not call down to the content layer
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // after a track has been stopped.
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (track_.get())
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    track_->set_enabled(false);
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochwebrtc::AudioTrackInterface* MediaStreamTrack::GetAudioAdapter() {
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(thread_checker_.CalledOnValidThread());
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return static_cast<webrtc::AudioTrackInterface*>(track_.get());
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace content
51