| Index: chromecast/browser/media/cma_message_filter_host.h
|
| diff --git a/chromecast/browser/media/cma_message_filter_host.h b/chromecast/browser/media/cma_message_filter_host.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..763727c5888227aedaa755d59ecf52b4a7bf465f
|
| --- /dev/null
|
| +++ b/chromecast/browser/media/cma_message_filter_host.h
|
| @@ -0,0 +1,126 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROMECAST_BROWSER_MEDIA_CMA_MESSAGE_FILTER_HOST_H_
|
| +#define CHROMECAST_BROWSER_MEDIA_CMA_MESSAGE_FILTER_HOST_H_
|
| +
|
| +#include <map>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/shared_memory.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "chromecast/common/media/cma_ipc_common.h"
|
| +#include "chromecast/media/cma/pipeline/load_type.h"
|
| +#include "content/public/browser/browser_message_filter.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "media/base/buffering_state.h"
|
| +#include "media/base/pipeline_status.h"
|
| +
|
| +namespace base {
|
| +class CancelableSyncSocket;
|
| +class SingleThreadTaskRunner;
|
| +}
|
| +
|
| +namespace gfx {
|
| +class PointF;
|
| +class Size;
|
| +}
|
| +
|
| +namespace media {
|
| +class AudioDecoderConfig;
|
| +class BrowserCdm;
|
| +class VideoDecoderConfig;
|
| +}
|
| +
|
| +namespace chromecast {
|
| +namespace media {
|
| +
|
| +class MediaPipelineHost;
|
| +
|
| +class CmaMessageFilterHost
|
| + : public content::BrowserMessageFilter {
|
| + public:
|
| + explicit CmaMessageFilterHost(int render_process_id);
|
| +
|
| + // content::BrowserMessageFilter implementation.
|
| + void OnChannelClosing() override;
|
| + void OnDestruct() const override;
|
| + bool OnMessageReceived(const IPC::Message& message) override;
|
| +
|
| + private:
|
| + typedef std::map<int, MediaPipelineHost*> MediaPipelineMap;
|
| +
|
| + friend class content::BrowserThread;
|
| + friend class base::DeleteHelper<CmaMessageFilterHost>;
|
| + ~CmaMessageFilterHost() override;
|
| +
|
| + void DeleteEntries();
|
| + MediaPipelineHost* LookupById(int media_id);
|
| +
|
| + // Handling of incoming IPC messages.
|
| + void CreateMedia(int media_id, LoadType load_type);
|
| + void DestroyMedia(int media_id);
|
| + void SetCdm(int media_id, int render_frame_id, int cdm_id);
|
| + void CreateAvPipe(int media_id, TrackId track_id, size_t shared_mem_size);
|
| + void OnAvPipeSet(int media_id,
|
| + TrackId track_id,
|
| + base::SharedMemoryHandle foreign_memory_handle,
|
| + scoped_ptr<base::CancelableSyncSocket> foreign_socket);
|
| + void AudioInitialize(int media_id,
|
| + TrackId track_id,
|
| + const ::media::AudioDecoderConfig& config);
|
| + void VideoInitialize(int media_id,
|
| + TrackId track_id,
|
| + const ::media::VideoDecoderConfig& config);
|
| + void StartPlayingFrom(int media_id, base::TimeDelta time);
|
| + void Flush(int media_id);
|
| + void Stop(int media_id);
|
| + void SetPlaybackRate(int media_id, float playback_rate);
|
| + void SetVolume(int media_id, TrackId track_id, float volume);
|
| + void NotifyPipeWrite(int media_id, TrackId track_id);
|
| + void NotifyExternalSurface(int surface_id,
|
| + const gfx::PointF& p0, const gfx::PointF& p1,
|
| + const gfx::PointF& p2, const gfx::PointF& p3);
|
| +
|
| + // Audio/Video callbacks.
|
| + void OnMediaStateChanged(int media_id,
|
| + ::media::PipelineStatus status);
|
| + void OnTrackStateChanged(int media_id,
|
| + TrackId track_id,
|
| + ::media::PipelineStatus status);
|
| + void OnPipeReadActivity(int media_id, TrackId track_id);
|
| + void OnTimeUpdate(int media_id,
|
| + base::TimeDelta media_time,
|
| + base::TimeDelta max_media_time,
|
| + base::TimeTicks stc);
|
| + void OnBufferingNotification(int media_id, ::media::BufferingState state);
|
| + void OnEos(int media_id, TrackId track_id);
|
| + void OnPlaybackError(int media_id, TrackId track_id,
|
| + ::media::PipelineStatus status);
|
| + void OnStatisticsUpdated(int media_id,
|
| + TrackId track_id,
|
| + const ::media::PipelineStatistics& stats);
|
| + void OnNaturalSizeChanged(int media_id,
|
| + TrackId track_id,
|
| + const gfx::Size& size);
|
| +
|
| + // Render process ID correponding to this message filter.
|
| + const int process_id_;
|
| +
|
| + // List of media pipeline and message loop media pipelines are running on.
|
| + MediaPipelineMap media_pipelines_;
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| +
|
| + base::WeakPtr<CmaMessageFilterHost> weak_this_;
|
| + base::WeakPtrFactory<CmaMessageFilterHost> weak_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CmaMessageFilterHost);
|
| +};
|
| +
|
| +} // namespace media
|
| +} // namespace chromecast
|
| +
|
| +#endif // CHROMECAST_BROWSER_MEDIA_CMA_MESSAGE_FILTER_HOST_H_
|
| +
|
|
|