public void TrackModifiedConfiguration(AudioOutputConfiguration config)
        {
            AudioOutputConfiguration modified = _modifiedAudioOutputConfigurations.Where(AEC => AEC.token == config.token).FirstOrDefault();

            if (modified == null)
            {
                _modifiedAudioOutputConfigurations.Add(config);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Open a new <see cref="AudioOutputSystem"/>.
        /// </summary>
        /// <param name="outputDeviceName">The output device name selected by the <see cref="AudioOutputSystem"/></param>
        /// <param name="outputConfiguration">The output audio configuration selected by the <see cref="AudioOutputSystem"/></param>
        /// <param name="obj">The new <see cref="AudioOutputSystem"/></param>
        /// <param name="memoryManager">The memory manager that will be used for all guest memory operations</param>
        /// <param name="inputDeviceName">The input device name wanted by the user</param>
        /// <param name="sampleFormat">The sample format to use</param>
        /// <param name="parameter">The user configuration</param>
        /// <param name="appletResourceUserId">The applet resource user id of the application</param>
        /// <param name="processHandle">The process handle of the application</param>
        /// <returns>A <see cref="ResultCode"/> reporting an error or a success</returns>
        public ResultCode OpenAudioOut(out string outputDeviceName,
                                       out AudioOutputConfiguration outputConfiguration,
                                       out AudioOutputSystem obj,
                                       IVirtualMemoryManager memoryManager,
                                       string inputDeviceName,
                                       SampleFormat sampleFormat,
                                       ref AudioInputConfiguration parameter,
                                       ulong appletResourceUserId,
                                       uint processHandle,
                                       float volume)
        {
            int sessionId = AcquireSessionId();

            _sessionsBufferEvents[sessionId].Clear();

            IHardwareDeviceSession deviceSession = _deviceDriver.OpenDeviceSession(IHardwareDeviceDriver.Direction.Output, memoryManager, sampleFormat, parameter.SampleRate, parameter.ChannelCount, volume);

            AudioOutputSystem audioOut = new AudioOutputSystem(this, _lock, deviceSession, _sessionsBufferEvents[sessionId]);

            ResultCode result = audioOut.Initialize(inputDeviceName, sampleFormat, ref parameter, sessionId);

            if (result == ResultCode.Success)
            {
                outputDeviceName    = audioOut.DeviceName;
                outputConfiguration = new AudioOutputConfiguration
                {
                    ChannelCount  = audioOut.ChannelCount,
                    SampleFormat  = audioOut.SampleFormat,
                    SampleRate    = audioOut.SampleRate,
                    AudioOutState = audioOut.GetState(),
                };

                obj = audioOut;

                Register(audioOut);
            }
            else
            {
                ReleaseSessionId(sessionId);

                obj = null;
                outputDeviceName    = null;
                outputConfiguration = default;
            }

            return(result);
        }
Ejemplo n.º 3
0
        private bool TuneBackchannelProfile(Profile profile, MediaConfigurationChangeLog changeLog, string Codec)
        {
            AudioOutputConfiguration o = profile.Extension.AudioOutputConfiguration;

            if ((o.SendPrimacy != null) && (o.SendPrimacy == "www.onvif.org/ver20/HalfDuplex/Server"))
            {
                AudioOutputConfigurationOptions opt = GetAudioOutputConfigurationOptions(o.token, null);
                if (opt != null && opt.SendPrimacyOptions != null)
                {
                    string s = opt.SendPrimacyOptions.FirstOrDefault(c => c != "www.onvif.org/ver20/HalfDuplex/Server");
                    if (s != null)
                    {
                        o.SendPrimacy = s;
                        changeLog.TrackModifiedConfiguration(o);
                        SetAudioOutputConfiguration(o, false);
                    }
                }
            }
            if ((o.SendPrimacy != null) && (o.SendPrimacy == "www.onvif.org/ver20/HalfDuplex/Server"))
            {
                return(false);
            }
            AudioDecoderConfiguration        d       = profile.Extension.AudioDecoderConfiguration;
            AudioDecoderConfigurationOptions Options = GetAudioDecoderConfigurationOptions(d.token, profile.token);

            if (Options == null)
            {
                return(false);
            }
            if (Codec == "G711" && Options.G711DecOptions == null)
            {
                return(false);
            }
            if (Codec == "G726" && Options.G726DecOptions == null)
            {
                return(false);
            }
            if (Codec == "AAC" && Options.AACDecOptions == null)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 4
0
        public ResultCode OpenAudioOut(ServiceCtx context, out string outputDeviceName, out AudioOutputConfiguration outputConfiguration, out IAudioOut obj, string inputDeviceName, ref AudioInputConfiguration parameter, ulong appletResourceUserId, uint processHandle, float volume)
        {
            var memoryManager = context.Process.HandleTable.GetKProcess((int)processHandle).CpuMemory;

            ResultCode result = (ResultCode)_impl.OpenAudioOut(out outputDeviceName, out outputConfiguration, out AudioOutputSystem outSystem, memoryManager, inputDeviceName, SampleFormat.PcmInt16, ref parameter, appletResourceUserId, processHandle, volume);

            if (result == ResultCode.Success)
            {
                obj = new AudioOut.AudioOut(outSystem, context.Device.System.KernelContext, processHandle);
            }
            else
            {
                obj = null;
            }

            return(result);
        }
 public override void SetAudioOutputConfiguration(AudioOutputConfiguration Configuration, bool ForcePersistence, ref System.Xml.XmlElement[] Any)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 6
0
		public Task SetAudioOutputConfigurationAsync(AudioOutputConfiguration Configuration, bool ForcePersistence)
		{
			throw new NotImplementedException();
		}
Ejemplo n.º 7
0
 public override void SetAudioOutputConfiguration(AudioOutputConfiguration Configuration)
 {
     throw new NotImplementedException();
 }