mozilla::ipc::IPCResult RemoteDecoderParent::RecvInput( const MediaRawDataIPDL& aData) { MOZ_ASSERT(OnManagerThread()); // XXX: This copies the data into a buffer owned by the MediaRawData. Ideally // we'd just take ownership of the shmem. RefPtr<MediaRawData> data = new MediaRawData(aData.buffer().get<uint8_t>(), aData.buffer().Size<uint8_t>()); if (aData.buffer().Size<uint8_t>() && !data->Data()) { // OOM Error(NS_ERROR_OUT_OF_MEMORY); return IPC_OK(); } data->mOffset = aData.base().offset(); data->mTime = aData.base().time(); data->mTimecode = aData.base().timecode(); data->mDuration = aData.base().duration(); data->mKeyframe = aData.base().keyframe(); DeallocShmem(aData.buffer()); RefPtr<RemoteDecoderParent> self = this; mDecoder->Decode(data)->Then( mManagerTaskQueue, __func__, [self, this](const MediaDataDecoder::DecodedData& aResults) { if (mDestroyed) { return; } ProcessDecodedData(aResults); Unused << SendInputExhausted(); }, [self](const MediaResult& aError) { self->Error(aError); }); return IPC_OK(); }
mozilla::ipc::IPCResult VideoDecoderParent::RecvInput(const MediaRawDataIPDL& aData) { MOZ_ASSERT(OnManagerThread()); // XXX: This copies the data into a buffer owned by the MediaRawData. Ideally we'd just take ownership // of the shmem. RefPtr<MediaRawData> data = new MediaRawData(aData.buffer().get<uint8_t>(), aData.buffer().Size<uint8_t>()); data->mOffset = aData.base().offset(); data->mTime = aData.base().time(); data->mTimecode = aData.base().timecode(); data->mDuration = aData.base().duration(); data->mKeyframe = aData.base().keyframe(); DeallocShmem(aData.buffer()); mDecoder->Input(data); return IPC_OK(); }