コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
				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;
				}
コード例 #4
0
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;
}
コード例 #5
0
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;
}
コード例 #6
0
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;
}