void DOMHwMediaStream::Init(MediaStream* stream) { SourceMediaStream* srcStream = stream->AsSourceStream(); if (srcStream) { VideoSegment segment; #ifdef MOZ_WIDGET_GONK const StreamTime delta = STREAM_TIME_MAX; // Because MediaStreamGraph will run out frames in non-autoplay mode, // we must give it bigger frame length to cover this situation. mImageData.mOverlayId = DEFAULT_IMAGE_ID; mImageData.mSize.width = DEFAULT_IMAGE_WIDTH; mImageData.mSize.height = DEFAULT_IMAGE_HEIGHT; mOverlayImage->SetData(mImageData); RefPtr<Image> image = static_cast<Image*>(mOverlayImage.get()); mozilla::gfx::IntSize size = image->GetSize(); segment.AppendFrame(image.forget(), delta, size); #endif srcStream->AddTrack(TRACK_VIDEO_PRIMARY, 0, new VideoSegment()); srcStream->AppendToTrack(TRACK_VIDEO_PRIMARY, &segment); srcStream->FinishAddTracks(); srcStream->AdvanceKnownTracksTime(STREAM_TIME_MAX); } }
void RemoteSourceStreamInfo::StartReceiving() { if (mReceiving || mPipelines.empty()) { return; } mReceiving = true; SourceMediaStream* source = GetMediaStream()->GetInputStream()->AsSourceStream(); source->SetPullEnabled(true); // AdvanceKnownTracksTicksTime(HEAT_DEATH_OF_UNIVERSE) means that in // theory per the API, we can't add more tracks before that // time. However, the impl actually allows it, and it avoids a whole // bunch of locking that would be required (and potential blocking) // if we used smaller values and updated them on each NotifyPull. source->AdvanceKnownTracksTime(STREAM_TIME_MAX); CSFLogDebug(logTag, "Finished adding tracks to MediaStream %p", source); }