mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-29 18:18:27 +00:00
0c01ffebb4
- Bug 1197669 - Part1 - 1.Enable the testcase on B2G. 2. fix the mimetype check in testcase. r=jwwang (9bbae092f) - Bug 1197669 - Part2 - 1. Ensure the EOS is sent to MediaCodec. 2. mEndOfStream should be protected by monitor. r=sotaro (62b8e66b7) - bug 1193922 skip SetIsOnlyNodeForContext after shutdown r=padenot (df991d0af) - Minor (1d695f7c4) - Bug 1197051 - Don't try to decode ahead while seeking - r=jya (7d8d877ad) - Bug 1197075: P1. Revert "Bug 1197051 - Don't try to decode ahead while seeking - r=jya". r=edwin (e837b12e3) - Bug 1143575. Push all available frames to the compositor. r=cpearce (109e54ae8) - partial of Bug 1197075: P2. Revert "Bug 1171257 - Add force decode ahead to MediaFormatReader r=jya,bholley". r=edwin (5f4859e47) - Minor (a841ca407) - Bug 1199155. Part 2 - fix includes and forward declarations. r=roc. (ca523595a) - Bug 1199155. Part 1 - move dom/media/DecodedStream.* to dom/media/mediasink/ and implement the interface of MediaSink. r=roc. (90b376a24) - Bug 1199155. Part 3 - rename mDecodedStream to mStreamSink. r=roc. (1aae54328) - Bug 1203374. Part 1 - extract the code of computing canplaythrough so it is reusable. r=jya. (acc5fc8c6) - Bug 1203374. Part 2 - duplicate the implementation of MediaDecoder::CanPlayThrough so MDSM can call its own CanPlayThrough() on its own thread. r=jya. (a042541a8) - Bug 1182928 - Disable dormant mode for EME videos in Firefox Beta and Release. r=sotaro (ea5964ae9) - Bug 1197022 - [EME] Disable dormant mode for EME videos on all channels. r=kentuckyfriedtakahe (742d00672) - Bug 1179110 - Fix ComputePlaybackRate. r=jww (a43272af5) - Bug 1178622 - Fix enum-to-string mismatch in MediaDecoder.cpp. r=jya. (b9da7ebf3) - Bug 1203418. Part 1 - cache the results of ComputePlaybackRate() so they can be mirrored by MDSM. r=cpearce. (95f7ac068) - Bug 1203418. Part 2 - duplicate the implementation of MediaDecoder::GetStatistics so MDSM can call it on its own thread. r=cpearce. (2755b85a7) - Bug 1203418. Part 3 - ensure MDSM::mPlaybackOffset and MediaDecoder::mPlaybackPosition are mono-increasing to avoid "jitter" in calculating playback statistics. r=cpearce. (54dcb6219) - Bug 1104616 - Proxy video capture access to the main process. r=jesup,glandium,mrbkap (cfdd08459) - Bug 1200614 - Protect the capture engines array from concurrent access (during shutdown). r=jesup (c4dbd6e10) - Bug 1200614 - Check whether engines are still alive when webrtc ops run. r=jesup (d42d3474f) - Bug 1194640 - add NSPR logging of camera capabilities, r=jesup (c7365b916) - Bug 1204413 - Make MediaDecoder::IsTransportSeekable run on the main thread. r=kinetik. (098868b0d) - Bug 1198202 - Increase hardware video decoding fallback threshold. r=ajones (1059f9b0f) - Bug 1201197 - add dedicated listener to enumerateDevices. r=jesup (a51477957) - Bug 1199562. Part 1 - rename mAudioSink to mMediaSink as well as related member names. r=roc. (c2db1b4d4) - Bug 1199562. Part 2 - replace usage of mStreamSink with mMediaSink in most cases. r=roc. (7aa0754c4) - Bug 1199562. Part 3 - remove unused code. r=roc. (343c5be2f) - Bug 1203877 - Remove MediaDecoder::UpdatePlaybackOffset. r=kinetik. (4476dd1f8) - Bug 1204430. Part 2 - mirror MediaDecoder::mMediaSeekable. r=kinetik. (51ca1197d) - Bug 1206576 - Dispatch some MDSM functions to hide its internal thread model. r=jya. (74b9a169c) - Bug 1206574 - Remove AbstractMediaDecoder::IsShutdown(). r=cpearce. (4ed17a27f) - Bug 1207017. Part 1 - fix coding styles. r=kinetik. (cc10a28c3) - Bug 1207017. Part 2 - remove duplicated GetStateMachine(). r=kinetik. (19b663098) - Bug 1200477 - Allow building with WebRTC disabled. r=glandium,mrbkap (56055c3c7)
148 lines
4.6 KiB
C++
148 lines
4.6 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set sw=2 ts=8 et ft=cpp : */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_CamerasParent_h
|
|
#define mozilla_CamerasParent_h
|
|
|
|
#include "mozilla/dom/ContentParent.h"
|
|
#include "mozilla/camera/PCamerasParent.h"
|
|
#include "mozilla/ipc/Shmem.h"
|
|
#include "mozilla/ShmemPool.h"
|
|
|
|
// conflicts with #include of scoped_ptr.h
|
|
#undef FF
|
|
#include "webrtc/common.h"
|
|
// Video Engine
|
|
#include "webrtc/video_engine/include/vie_base.h"
|
|
#include "webrtc/video_engine/include/vie_capture.h"
|
|
#include "webrtc/video_engine/include/vie_render.h"
|
|
#include "CamerasChild.h"
|
|
|
|
#include "base/thread.h"
|
|
|
|
namespace mozilla {
|
|
namespace camera {
|
|
|
|
class CamerasParent;
|
|
|
|
class CallbackHelper : public webrtc::ExternalRenderer
|
|
{
|
|
public:
|
|
CallbackHelper(CaptureEngine aCapEng, int aCapId, CamerasParent *aParent)
|
|
: mCapEngine(aCapEng), mCapturerId(aCapId), mParent(aParent) {};
|
|
|
|
// ViEExternalRenderer implementation. These callbacks end up
|
|
// running on the VideoCapture thread.
|
|
virtual int FrameSizeChange(unsigned int w, unsigned int h,
|
|
unsigned int streams) override;
|
|
virtual int DeliverFrame(unsigned char* buffer,
|
|
int size,
|
|
uint32_t time_stamp,
|
|
int64_t ntp_time,
|
|
int64_t render_time,
|
|
void *handle) override;
|
|
virtual bool IsTextureSupported() override { return false; };
|
|
|
|
friend CamerasParent;
|
|
|
|
private:
|
|
CaptureEngine mCapEngine;
|
|
int mCapturerId;
|
|
CamerasParent *mParent;
|
|
};
|
|
|
|
class EngineHelper
|
|
{
|
|
public:
|
|
EngineHelper() :
|
|
mEngine(nullptr), mPtrViEBase(nullptr), mPtrViECapture(nullptr),
|
|
mPtrViERender(nullptr), mEngineIsRunning(false) {};
|
|
|
|
webrtc::VideoEngine *mEngine;
|
|
webrtc::ViEBase *mPtrViEBase;
|
|
webrtc::ViECapture *mPtrViECapture;
|
|
webrtc::ViERender *mPtrViERender;
|
|
|
|
// The webrtc code keeps a reference to this one.
|
|
webrtc::Config mConfig;
|
|
|
|
// Engine alive
|
|
bool mEngineIsRunning;
|
|
};
|
|
|
|
class CamerasParent : public PCamerasParent
|
|
{
|
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CamerasParent);
|
|
|
|
public:
|
|
static already_AddRefed<CamerasParent> Create();
|
|
|
|
// Messages received form the child. These run on the IPC/PBackground thread.
|
|
virtual bool RecvAllocateCaptureDevice(const int&, const nsCString&) override;
|
|
virtual bool RecvReleaseCaptureDevice(const int&, const int &) override;
|
|
virtual bool RecvNumberOfCaptureDevices(const int&) override;
|
|
virtual bool RecvNumberOfCapabilities(const int&, const nsCString&) override;
|
|
virtual bool RecvGetCaptureCapability(const int&, const nsCString&, const int&) override;
|
|
virtual bool RecvGetCaptureDevice(const int&, const int&) override;
|
|
virtual bool RecvStartCapture(const int&, const int&, const CaptureCapability&) override;
|
|
virtual bool RecvStopCapture(const int&, const int&) override;
|
|
virtual bool RecvReleaseFrame(mozilla::ipc::Shmem&&) override;
|
|
virtual bool RecvAllDone() override;
|
|
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
|
|
|
nsIThread* GetBackgroundThread() { return mPBackgroundThread; };
|
|
bool IsShuttingDown() { return !mChildIsAlive || mDestroyed; };
|
|
ShmemBuffer GetBuffer(size_t aSize);
|
|
|
|
// helper to forward to the PBackground thread
|
|
int DeliverFrameOverIPC(CaptureEngine capEng,
|
|
int cap_id,
|
|
ShmemBuffer buffer,
|
|
unsigned char* altbuffer,
|
|
int size,
|
|
uint32_t time_stamp,
|
|
int64_t ntp_time,
|
|
int64_t render_time);
|
|
|
|
|
|
CamerasParent();
|
|
|
|
protected:
|
|
virtual ~CamerasParent();
|
|
|
|
bool SetupEngine(CaptureEngine aCapEngine);
|
|
void CloseEngines();
|
|
bool EnsureInitialized(int aEngine);
|
|
void DoShutdown();
|
|
|
|
EngineHelper mEngines[CaptureEngine::MaxEngine];
|
|
nsTArray<CallbackHelper*> mCallbacks;
|
|
// Protects the callback arrays
|
|
Mutex mCallbackMutex;
|
|
// Protects the engines array
|
|
Mutex mEngineMutex;
|
|
|
|
// image buffers
|
|
mozilla::ShmemPool mShmemPool;
|
|
|
|
// PBackground parent thread
|
|
nsCOMPtr<nsIThread> mPBackgroundThread;
|
|
|
|
// video processing thread - where webrtc.org capturer code runs
|
|
base::Thread* mVideoCaptureThread;
|
|
|
|
// Shutdown handling
|
|
bool mChildIsAlive;
|
|
bool mDestroyed;
|
|
};
|
|
|
|
PCamerasParent* CreateCamerasParent();
|
|
|
|
} // namespace camera
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_CameraParent_h
|