void DecodedStream::SendData() { AssertOwnerThread(); MOZ_ASSERT(mStartTime.isSome(), "Must be called after StartPlayback()"); // Not yet created on the main thread. MDSM will try again later. if (!mData) { return; } // Nothing to do when the stream is finished. if (mData->mHaveSentFinish) { return; } SendAudio(mParams.mVolume, mSameOrigin, mPrincipalHandle); SendVideo(mSameOrigin, mPrincipalHandle); AdvanceTracks(); bool finished = (!mInfo.HasAudio() || mAudioQueue.IsFinished()) && (!mInfo.HasVideo() || mVideoQueue.IsFinished()); if (finished && !mData->mHaveSentFinish) { mData->mHaveSentFinish = true; mData->mStream->Finish(); } }
static int Send( sout_stream_t *p_stream, sout_stream_id_t *id, block_t *p_buffer ) { if ( id->format->i_cat == VIDEO_ES ) return SendVideo( p_stream, id, p_buffer ); else if ( id->format->i_cat == AUDIO_ES ) return SendAudio( p_stream, id, p_buffer ); return VLC_SUCCESS; }