Bug 1354457 - Remove old suspend logic from media encoder. r?pehrsons
The switch from duration to time stamp based samples has removed the need for
this logic.
MozReview-Commit-ID: 7J6oQf7qn4u
--- a/dom/media/encoder/MediaEncoder.cpp
+++ b/dom/media/encoder/MediaEncoder.cpp
@@ -47,30 +47,31 @@ MediaEncoder::SetDirectConnect(bool aCon
void
MediaEncoder::NotifyRealtimeData(MediaStreamGraph* aGraph,
TrackID aID,
StreamTime aTrackOffset,
uint32_t aTrackEvents,
const MediaSegment& aRealtimeMedia)
{
- if (mSuspended == RECORD_NOT_SUSPENDED) {
- // Process the incoming raw track data from MediaStreamGraph, called on the
- // thread of MediaStreamGraph.
- if (mAudioEncoder && aRealtimeMedia.GetType() == MediaSegment::AUDIO) {
- mAudioEncoder->NotifyQueuedTrackChanges(aGraph, aID,
- aTrackOffset, aTrackEvents,
- aRealtimeMedia);
- } else if (mVideoEncoder &&
- aRealtimeMedia.GetType() == MediaSegment::VIDEO &&
- aTrackEvents != TrackEventCommand::TRACK_EVENT_NONE) {
- mVideoEncoder->NotifyQueuedTrackChanges(aGraph, aID,
- aTrackOffset, aTrackEvents,
- aRealtimeMedia);
- }
+ if (mSuspended) {
+ return;
+ }
+ // Process the incoming raw track data from MediaStreamGraph, called on the
+ // thread of MediaStreamGraph.
+ if (mAudioEncoder && aRealtimeMedia.GetType() == MediaSegment::AUDIO) {
+ mAudioEncoder->NotifyQueuedTrackChanges(aGraph, aID,
+ aTrackOffset, aTrackEvents,
+ aRealtimeMedia);
+ } else if (mVideoEncoder &&
+ aRealtimeMedia.GetType() == MediaSegment::VIDEO &&
+ aTrackEvents != TrackEventCommand::TRACK_EVENT_NONE) {
+ mVideoEncoder->NotifyQueuedTrackChanges(aGraph, aID,
+ aTrackOffset, aTrackEvents,
+ aRealtimeMedia);
}
}
void
MediaEncoder::NotifyQueuedTrackChanges(MediaStreamGraph* aGraph,
TrackID aID,
StreamTime aTrackOffset,
TrackEventCommand aTrackEvents,
@@ -86,52 +87,28 @@ MediaEncoder::NotifyQueuedTrackChanges(M
if (aQueuedMedia.GetType() == MediaSegment::VIDEO) {
VideoSegment segment;
NotifyRealtimeData(aGraph, aID, aTrackOffset, aTrackEvents, segment);
} else {
AudioSegment segment;
NotifyRealtimeData(aGraph, aID, aTrackOffset, aTrackEvents, segment);
}
}
- if (mSuspended == RECORD_RESUMED) {
- if (mVideoEncoder) {
- if (aQueuedMedia.GetType() == MediaSegment::VIDEO) {
- // insert a null frame of duration equal to the first segment passed
- // after Resume(), so it'll get added to one of the DirectListener frames
- VideoSegment segment;
- gfx::IntSize size(0,0);
- segment.AppendFrame(nullptr, aQueuedMedia.GetDuration(), size,
- PRINCIPAL_HANDLE_NONE);
- mVideoEncoder->NotifyQueuedTrackChanges(aGraph, aID,
- aTrackOffset, aTrackEvents,
- segment);
- mSuspended = RECORD_NOT_SUSPENDED;
- }
- } else {
- mSuspended = RECORD_NOT_SUSPENDED; // no video
- }
- }
}
}
void
MediaEncoder::NotifyQueuedAudioData(MediaStreamGraph* aGraph, TrackID aID,
StreamTime aTrackOffset,
const AudioSegment& aQueuedMedia,
MediaStream* aInputStream,
TrackID aInputTrackID)
{
if (!mDirectConnected) {
NotifyRealtimeData(aGraph, aID, aTrackOffset, 0, aQueuedMedia);
- } else {
- if (mSuspended == RECORD_RESUMED) {
- if (!mVideoEncoder) {
- mSuspended = RECORD_NOT_SUSPENDED; // no video
- }
- }
}
}
void
MediaEncoder::NotifyEvent(MediaStreamGraph* aGraph,
MediaStreamGraphEvent event)
{
// In case that MediaEncoder does not receive a TRACK_EVENT_ENDED event.
--- a/dom/media/encoder/MediaEncoder.h
+++ b/dom/media/encoder/MediaEncoder.h
@@ -102,40 +102,32 @@ public :
, mState(MediaEncoder::ENCODE_METADDATA)
, mShutdown(false)
, mDirectConnected(false)
, mSuspended(false)
{}
~MediaEncoder() {};
- enum SuspendState {
- RECORD_NOT_SUSPENDED,
- RECORD_SUSPENDED,
- RECORD_RESUMED
- };
-
/* Note - called from control code, not on MSG threads. */
void Suspend()
{
MOZ_ASSERT(NS_IsMainThread());
- mSuspended = RECORD_SUSPENDED;
+ mSuspended = true;
mVideoSink->Suspend();
}
/**
* Note - called from control code, not on MSG threads.
* Arm to collect the Duration of the next video frame and give it
* to the next frame, in order to avoid any possible loss of sync. */
void Resume()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mSuspended == RECORD_SUSPENDED) {
- mSuspended = RECORD_RESUMED;
- }
+ mSuspended = false;
mVideoSink->Resume();
}
/**
* Tells us which Notify to pay attention to for media
*/
void SetDirectConnect(bool aConnected);
@@ -247,17 +239,17 @@ private:
nsAutoPtr<VideoTrackEncoder> mVideoEncoder;
RefPtr<MediaStreamVideoRecorderSink> mVideoSink;
TimeStamp mStartTime;
nsString mMIMEType;
int64_t mSizeOfBuffer;
int mState;
bool mShutdown;
bool mDirectConnected;
- Atomic<int> mSuspended;
+ Atomic<bool> mSuspended;
// Get duration from create encoder, for logging purpose
double GetEncodeTimeStamp()
{
TimeDuration decodeTime;
decodeTime = TimeStamp::Now() - mStartTime;
return decodeTime.ToMilliseconds();
}
};