GMPErr GMPStorageChild::Write(GMPRecordImpl* aRecord, const uint8_t* aData, uint32_t aDataSize) { if (aDataSize > GMP_MAX_RECORD_SIZE) { return GMPQuotaExceededErr; } MonitorAutoLock lock(mMonitor); if (mShutdown) { NS_WARNING("GMPStorage used after it's been shutdown!"); return GMPClosedErr; } if (!HasRecord(aRecord->Name())) { // Record not opened. return GMPClosedErr; } CALL_ON_GMP_THREAD(SendWrite, aRecord->Name(), ToArray(aData, aDataSize)); return GMPNoErr; }
GMPErr GMPStorageChild::CreateRecord(const nsCString& aRecordName, GMPRecord** aOutRecord, GMPRecordClient* aClient) { MonitorAutoLock lock(mMonitor); if (mShutdown) { NS_WARNING("GMPStorage used after it's been shutdown!"); return GMPClosedErr; } MOZ_ASSERT(aRecordName.Length() && aOutRecord); if (HasRecord(aRecordName)) { return GMPRecordInUse; } RefPtr<GMPRecordImpl> record(new GMPRecordImpl(this, aRecordName, aClient)); mRecords.Put(aRecordName, record); // Addrefs // The GMPRecord holds a self reference until the GMP calls Close() on // it. This means the object is always valid (even if neutered) while // the GMP expects it to be. record.forget(aOutRecord); return GMPNoErr; }
Object::Action Object::SetProfile(Sample *sample) { if (sample && Tracker.IsValid() && DescIndex != UINT_ERROR && Utility::GetStreamCountFromDesc(&Profile.inputs)) { if (TrackerConfig.empty()) { String folder, file; auto vars = App::Vars::GetForCurrentThread(); if (!vars->GetRecordsCount()) if (Utility::Failed(vars->Read())) return; if (vars->HasRecord(_NenaVideo_DFusion_DefCfgFolderRec)) folder = vars->GetRecord<String>(_NenaVideo_DFusion_DefCfgFolderRec); if (vars->HasRecord(_NenaVideo_DFusion_DefCfgFileRec)) file = vars->GetRecord<String>(_NenaVideo_DFusion_DefCfgFileRec); TrackerConfig = folder + file; } UINT32 streamsRequired = Utility::GetStreamCountFromDesc(Profile.inputs); if (streamsRequired != sample->StreamCount) { Check() = PXC_STATUS_HANDLE_INVALID; return; } PXCCapture::VideoStream::ProfileInfo streamProfile; sample->VideoStreams[0]->QueryProfile(&streamProfile); Profile.width = streamProfile.imageInfo.width; Profile.height = streamProfile.imageInfo.height; Check() = Tracker->SetProfile(TrackerConfig.c_str(), &Profile); } else Check() = PXC_STATUS_HANDLE_INVALID; }
GMPErr GMPStorageChild::Close(const nsCString& aRecordName) { MonitorAutoLock lock(mMonitor); if (!HasRecord(aRecordName)) { // Already closed. return GMPClosedErr; } mRecords.Remove(aRecordName); if (!mShutdown) { CALL_ON_GMP_THREAD(SendClose, aRecordName); } return GMPNoErr; }
GMPErr GMPStorageChild::Read(GMPRecordImpl* aRecord) { MonitorAutoLock lock(mMonitor); if (mShutdown) { NS_WARNING("GMPStorage used after it's been shutdown!"); return GMPClosedErr; } if (!HasRecord(aRecord->Name())) { // Record not opened. return GMPClosedErr; } CALL_ON_GMP_THREAD(SendRead, aRecord->Name()); return GMPNoErr; }
GMPErr GMPStorageChild::Open(GMPRecordImpl* aRecord) { MonitorAutoLock lock(mMonitor); if (mShutdown) { NS_WARNING("GMPStorage used after it's been shutdown!"); return GMPClosedErr; } if (!HasRecord(aRecord->Name())) { // Trying to re-open a record that has already been closed. return GMPClosedErr; } CALL_ON_GMP_THREAD(SendOpen, aRecord->Name()); return GMPNoErr; }