From 18dbb110cc54ceed3484780a61be8c6949b88d31 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 11:57:02 +0100 Subject: [PATCH 001/116] Fix build warnings --- GstreamerHelper/GstreamerHelper.vcxproj | 1 - Vocaluxe/Base/CGame.cs | 14 ++++++++++---- Vocaluxe/Base/Fonts/CGlyph.cs | 13 ++++++------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj index 21d99413..eb858c8e 100644 --- a/GstreamerHelper/GstreamerHelper.vcxproj +++ b/GstreamerHelper/GstreamerHelper.vcxproj @@ -104,7 +104,6 @@ obj\$(Configuration).$(Platform)\ - true bin\$(Configuration).$(Platform)\ $(MSBuildProjectDirectory)\x64\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x64\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x64\include\glib-2.0;$(MSBuildProjectDirectory)\x64\include;$(IncludePath) $(MSBuildProjectDirectory)\x64\lib;$(LibraryPath) diff --git a/Vocaluxe/Base/CGame.cs b/Vocaluxe/Base/CGame.cs index 009e585f..176fd0a6 100644 --- a/Vocaluxe/Base/CGame.cs +++ b/Vocaluxe/Base/CGame.cs @@ -15,6 +15,9 @@ // along with Vocaluxe. If not, see . #endregion +//Uncomment to make the engine hit every note +//#define DEBUG_HIT + using System; using System.Collections.Generic; using Vocaluxe.SongQueue; @@ -208,8 +211,6 @@ namespace Vocaluxe.Base public static void UpdatePoints(float time) { - const bool DEBUG_HIT = false; - CSong song = _SongQueue.GetSong(); if (song == null) @@ -270,7 +271,11 @@ namespace Vocaluxe.Base if (line == lines.Length - 1 && beat == lines[line].LastNoteBeat) Players[p].SongFinished = true; - if (notes[note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT)) + if (notes[note].PointsForBeat > 0 && (CSound.RecordToneValid(p) +#if DEBUG_HIT + || true +#endif + )) { int tone = notes[note].Tone; int tonePlayer = CSound.RecordGetTone(p); @@ -281,8 +286,9 @@ namespace Vocaluxe.Base while (tonePlayer - tone < -6) tonePlayer += 12; - if (DEBUG_HIT) +#if DEBUG_HIT tonePlayer = tone; +#endif Players[p].NoteDiff = Math.Abs(tone - tonePlayer); bool hit = Players[p].NoteDiff <= (2 - (int)CProfiles.GetDifficulty(Players[p].ProfileID)); diff --git a/Vocaluxe/Base/Fonts/CGlyph.cs b/Vocaluxe/Base/Fonts/CGlyph.cs index cab5d9b6..c694c84d 100644 --- a/Vocaluxe/Base/Fonts/CGlyph.cs +++ b/Vocaluxe/Base/Fonts/CGlyph.cs @@ -15,6 +15,9 @@ // along with Vocaluxe. If not, see . #endregion +//Uncomment to make the font write the glyphs to file +//#define FONT_DEBUG_OUTPUT + using System; using System.Drawing; using System.Drawing.Drawing2D; @@ -119,19 +122,15 @@ namespace Vocaluxe.Base.Fonts _DrawBounding.Y *= _Texture.Width / _DrawBounding.Width; _DrawBounding.Width = _Texture.Width; _DrawBounding.Height = _Texture.Height;*/ -#pragma warning disable 162 - // ReSharper disable HeuristicUnreachableCode - // ReSharper disable ConditionIsAlwaysTrueOrFalse - if (false && Char.IsLetterOrDigit(chr)) +#if FONT_DEBUG_OUTPUT + if (Char.IsLetterOrDigit(chr)) { if (outline > 0) bmpCropped.Save("font_" + chr + "o" + CFonts.Style + "2.png", ImageFormat.Png); else bmpCropped.Save("font_" + chr + CFonts.Style + "2.png", ImageFormat.Png); } - // ReSharper restore ConditionIsAlwaysTrueOrFalse - // ReSharper restore HeuristicUnreachableCode -#pragma warning restore 162 +#endif } } } From bb2df2cc8e8a8981d23b102eeb4179f68bae55fa Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 13:56:00 +0100 Subject: [PATCH 002/116] Organize Lib/Sound --- Vocaluxe/Base/CConfig.cs | 1 + Vocaluxe/Base/CSound.cs | 8 +++++ .../Decoder/CAudioDecoderFFmpeg.cs | 2 +- .../{ => Playback}/Decoder/IAudioDecoder.cs | 2 +- .../Gstreamer}/CGstreamerAudio.cs | 3 +- .../Gstreamer/CGstreamerAudioWrapper.cs | 2 +- .../GstreamerSharp}/CGstreamerSharpAudio.cs | 7 ++--- .../Lib/Sound/{ => Playback}/IPlayback.cs | 2 +- .../{ => Playback/OpenAL}/COpenALPlay.cs | 4 +-- .../PortAudio}/CPortAudioPlay.cs | 4 +-- .../Sound/{ => Playback/PortAudio}/CPt1.cs | 2 +- .../{ => Playback/PortAudio}/CSyncTimer.cs | 2 +- Vocaluxe/Lib/Sound/{ => Record}/CBuffer.cs | 2 +- Vocaluxe/Lib/Sound/{ => Record}/CDelayTest.cs | 2 +- .../DirectSound}/CDirectSoundRecord.cs | 2 +- Vocaluxe/Lib/Sound/{ => Record}/IRecord.cs | 2 +- .../PortAudio}/CPortAudioRecord.cs | 2 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 1 + Vocaluxe/Vocaluxe.csproj | 30 +++++++++---------- 19 files changed, 44 insertions(+), 36 deletions(-) rename Vocaluxe/Lib/Sound/{ => Playback}/Decoder/CAudioDecoderFFmpeg.cs (99%) rename Vocaluxe/Lib/Sound/{ => Playback}/Decoder/IAudioDecoder.cs (96%) rename Vocaluxe/Lib/Sound/{ => Playback/Gstreamer}/CGstreamerAudio.cs (98%) rename Vocaluxe/Lib/Sound/{ => Playback}/Gstreamer/CGstreamerAudioWrapper.cs (99%) rename Vocaluxe/Lib/Sound/{ => Playback/GstreamerSharp}/CGstreamerSharpAudio.cs (98%) rename Vocaluxe/Lib/Sound/{ => Playback}/IPlayback.cs (98%) rename Vocaluxe/Lib/Sound/{ => Playback/OpenAL}/COpenALPlay.cs (99%) rename Vocaluxe/Lib/Sound/{ => Playback/PortAudio}/CPortAudioPlay.cs (99%) rename Vocaluxe/Lib/Sound/{ => Playback/PortAudio}/CPt1.cs (97%) rename Vocaluxe/Lib/Sound/{ => Playback/PortAudio}/CSyncTimer.cs (97%) rename Vocaluxe/Lib/Sound/{ => Record}/CBuffer.cs (99%) rename Vocaluxe/Lib/Sound/{ => Record}/CDelayTest.cs (98%) rename Vocaluxe/Lib/Sound/{ => Record/DirectSound}/CDirectSoundRecord.cs (99%) rename Vocaluxe/Lib/Sound/{ => Record}/IRecord.cs (98%) rename Vocaluxe/Lib/Sound/{ => Record/PortAudio}/CPortAudioRecord.cs (99%) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 2b5d8b3d..8afa3d64 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -25,6 +25,7 @@ using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; using Vocaluxe.Lib.Sound; +using Vocaluxe.Lib.Sound.Record; using Vocaluxe.Lib.Webcam; using VocaluxeLib; using VocaluxeLib.Profile; diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index d6b55cbe..662bb8f0 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -19,6 +19,14 @@ using System; using System.Collections.ObjectModel; using System.IO; using Vocaluxe.Lib.Sound; +using Vocaluxe.Lib.Sound.Playback; +using Vocaluxe.Lib.Sound.Playback.Gstreamer; +using Vocaluxe.Lib.Sound.Playback.GstreamerSharp; +using Vocaluxe.Lib.Sound.Playback.OpenAL; +using Vocaluxe.Lib.Sound.Playback.PortAudio; +using Vocaluxe.Lib.Sound.Record; +using Vocaluxe.Lib.Sound.Record.DirectSound; +using Vocaluxe.Lib.Sound.Record.PortAudio; using VocaluxeLib; namespace Vocaluxe.Base diff --git a/Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs b/Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs similarity index 99% rename from Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs rename to Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs index d1503dfc..1668deb0 100644 --- a/Vocaluxe/Lib/Sound/Decoder/CAudioDecoderFFmpeg.cs +++ b/Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs @@ -20,7 +20,7 @@ using System.Runtime.InteropServices; using Vocaluxe.Base; using Vocaluxe.Lib.Video.Acinerella; -namespace Vocaluxe.Lib.Sound.Decoder +namespace Vocaluxe.Lib.Sound.Playback.Decoder { class CAudioDecoderFFmpeg : IAudioDecoder, IDisposable { diff --git a/Vocaluxe/Lib/Sound/Decoder/IAudioDecoder.cs b/Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs similarity index 96% rename from Vocaluxe/Lib/Sound/Decoder/IAudioDecoder.cs rename to Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs index 7308ba09..6187c279 100644 --- a/Vocaluxe/Lib/Sound/Decoder/IAudioDecoder.cs +++ b/Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs @@ -15,7 +15,7 @@ // along with Vocaluxe. If not, see . #endregion -namespace Vocaluxe.Lib.Sound.Decoder +namespace Vocaluxe.Lib.Sound.Playback.Decoder { struct SFormatInfo { diff --git a/Vocaluxe/Lib/Sound/CGstreamerAudio.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs similarity index 98% rename from Vocaluxe/Lib/Sound/CGstreamerAudio.cs rename to Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs index e29937de..66a30301 100644 --- a/Vocaluxe/Lib/Sound/CGstreamerAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs @@ -17,9 +17,8 @@ using System; using Vocaluxe.Base; -using Vocaluxe.Lib.Sound.Gstreamer; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback.Gstreamer { class CGstreamerAudio : IPlayback { diff --git a/Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs similarity index 99% rename from Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs rename to Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs index e4db4114..bf600899 100644 --- a/Vocaluxe/Lib/Sound/Gstreamer/CGstreamerAudioWrapper.cs +++ b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs @@ -17,7 +17,7 @@ using System.Runtime.InteropServices; -namespace Vocaluxe.Lib.Sound.Gstreamer +namespace Vocaluxe.Lib.Sound.Playback.Gstreamer { public static class CGstreamerAudioWrapper { diff --git a/Vocaluxe/Lib/Sound/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs similarity index 98% rename from Vocaluxe/Lib/Sound/CGstreamerSharpAudio.cs rename to Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index dc856e98..8696bdc2 100644 --- a/Vocaluxe/Lib/Sound/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -22,9 +22,8 @@ using GLib; using System.Runtime.InteropServices; using Vocaluxe.Base; using VocaluxeLib; -using Thread = System.Threading.Thread; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { public class CGstreamerSharpAudio : IPlayback { @@ -322,7 +321,7 @@ namespace Vocaluxe.Lib.Sound { Closed = true; Finished = true; - var t = new Thread(_TerminateStream) {Name = "GSt Terminate"}; + var t = new System.Threading.Thread(_TerminateStream) {Name = "GSt Terminate"}; t.Start(); } } @@ -403,7 +402,7 @@ namespace Vocaluxe.Lib.Sound if (_Duration < 0 && !_QueryingDuration) { _QueryingDuration = true; // Set this to avoid race conditions - var t = new Thread(_UpdateDuration) {Name = "GSt Update Duration"}; + var t = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; t.Start(); } return _Duration > 0 ? _Duration : -1; diff --git a/Vocaluxe/Lib/Sound/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs similarity index 98% rename from Vocaluxe/Lib/Sound/IPlayback.cs rename to Vocaluxe/Lib/Sound/Playback/IPlayback.cs index 22d7d7b7..c69eed4e 100644 --- a/Vocaluxe/Lib/Sound/IPlayback.cs +++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs @@ -15,7 +15,7 @@ // along with Vocaluxe. If not, see . #endregion -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback { public enum EStreamAction { diff --git a/Vocaluxe/Lib/Sound/COpenALPlay.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs similarity index 99% rename from Vocaluxe/Lib/Sound/COpenALPlay.cs rename to Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs index 6ab9f2b4..5e9850e6 100644 --- a/Vocaluxe/Lib/Sound/COpenALPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs @@ -23,10 +23,10 @@ using System.Diagnostics; using System.IO; using System.Threading; using Vocaluxe.Base; -using Vocaluxe.Lib.Sound.Decoder; +using Vocaluxe.Lib.Sound.Playback.Decoder; using VocaluxeLib; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback.OpenAL { class COpenALPlay : IPlayback, IDisposable { diff --git a/Vocaluxe/Lib/Sound/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs similarity index 99% rename from Vocaluxe/Lib/Sound/CPortAudioPlay.cs rename to Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs index 2be82c2c..c0cd93f8 100644 --- a/Vocaluxe/Lib/Sound/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs @@ -22,11 +22,11 @@ using System.Linq; using System.Runtime.InteropServices; using System.Threading; using Vocaluxe.Base; -using Vocaluxe.Lib.Sound.Decoder; +using Vocaluxe.Lib.Sound.Playback.Decoder; using Vocaluxe.Lib.Sound.PortAudio; using VocaluxeLib; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback.PortAudio { class CPortAudioPlay : IPlayback { diff --git a/Vocaluxe/Lib/Sound/CPt1.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs similarity index 97% rename from Vocaluxe/Lib/Sound/CPt1.cs rename to Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs index 4ca4b951..17b92f45 100644 --- a/Vocaluxe/Lib/Sound/CPt1.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs @@ -1,6 +1,6 @@ using System.Diagnostics; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback.PortAudio { class CPt1 { diff --git a/Vocaluxe/Lib/Sound/CSyncTimer.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs similarity index 97% rename from Vocaluxe/Lib/Sound/CSyncTimer.cs rename to Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs index 6ccd380c..2b405c9c 100644 --- a/Vocaluxe/Lib/Sound/CSyncTimer.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs @@ -1,7 +1,7 @@ using System; using System.Diagnostics; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Playback.PortAudio { class CSyncTimer { diff --git a/Vocaluxe/Lib/Sound/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs similarity index 99% rename from Vocaluxe/Lib/Sound/CBuffer.cs rename to Vocaluxe/Lib/Sound/Record/CBuffer.cs index 34831ccd..cbf72706 100644 --- a/Vocaluxe/Lib/Sound/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -1,7 +1,7 @@ using System; using System.IO; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { diff --git a/Vocaluxe/Lib/Sound/CDelayTest.cs b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs similarity index 98% rename from Vocaluxe/Lib/Sound/CDelayTest.cs rename to Vocaluxe/Lib/Sound/Record/CDelayTest.cs index 047b3999..d8c07b5e 100644 --- a/Vocaluxe/Lib/Sound/CDelayTest.cs +++ b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs @@ -1,7 +1,7 @@ using System.Diagnostics; using Vocaluxe.Base; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Record { class CDelayTest { diff --git a/Vocaluxe/Lib/Sound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs similarity index 99% rename from Vocaluxe/Lib/Sound/CDirectSoundRecord.cs rename to Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index eabf0d73..e135211e 100644 --- a/Vocaluxe/Lib/Sound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -23,7 +23,7 @@ using System.Collections.Generic; using System.Threading; using Vocaluxe.Base; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Record.DirectSound { class CDirectSoundRecord : IRecord { diff --git a/Vocaluxe/Lib/Sound/IRecord.cs b/Vocaluxe/Lib/Sound/Record/IRecord.cs similarity index 98% rename from Vocaluxe/Lib/Sound/IRecord.cs rename to Vocaluxe/Lib/Sound/Record/IRecord.cs index f4568a93..1dfea755 100644 --- a/Vocaluxe/Lib/Sound/IRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/IRecord.cs @@ -18,7 +18,7 @@ using System; using System.Collections.ObjectModel; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Record { class CRecordDevice { diff --git a/Vocaluxe/Lib/Sound/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs similarity index 99% rename from Vocaluxe/Lib/Sound/CPortAudioRecord.cs rename to Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 37d6c808..05b37330 100644 --- a/Vocaluxe/Lib/Sound/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -23,7 +23,7 @@ using System.Runtime.InteropServices; using Vocaluxe.Base; using Vocaluxe.Lib.Sound.PortAudio; -namespace Vocaluxe.Lib.Sound +namespace Vocaluxe.Lib.Sound.Record.PortAudio { class CPortAudioRecord : IRecord { diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 979809c6..8a1e3c97 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -20,6 +20,7 @@ using System.Collections.ObjectModel; using System.Windows.Forms; using Vocaluxe.Base; using Vocaluxe.Lib.Sound; +using Vocaluxe.Lib.Sound.Record; using VocaluxeLib; using VocaluxeLib.Menu; diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 1b5d5b87..e97608d2 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -212,14 +212,14 @@ - + - - + + @@ -252,11 +252,11 @@ - + - + @@ -278,17 +278,17 @@ - - - + + + - - - - - - - + + + + + + + From 052e32aa6c6ab8b10edd661196d7fadfece48308 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 14:25:00 +0100 Subject: [PATCH 003/116] Unify CRecordDevice handling --- .../GstreamerSharp/CGstreamerSharpAudio.cs | 284 ---------- .../Lib/Sound/Playback/OpenAL/COpenALPlay.cs | 499 ------------------ .../Record/DirectSound/CDirectSoundRecord.cs | 5 +- Vocaluxe/Lib/Sound/Record/IRecord.cs | 20 +- .../Record/PortAudio/CPortAudioRecord.cs | 5 +- 5 files changed, 18 insertions(+), 795 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index 8696bdc2..8125038f 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -15,13 +15,9 @@ // along with Vocaluxe. If not, see . #endregion -using System; using System.Collections.Generic; using Gst; -using GLib; using System.Runtime.InteropServices; -using Vocaluxe.Base; -using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { @@ -209,285 +205,5 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp foreach (int key in streamsToDelete) _Streams.Remove(key); } - - private class CGstreamerSharpAudioStream - { - private Element _Element; - private bool _Loop; - public volatile bool Closed = true; - public volatile bool Finished; - - private CFading _Fading; - private EStreamAction _AfterFadeAction; - private float _Volume = 1f; - - private float _MaxVolume = 1f; - - private volatile float _Duration = -1f; - private volatile float _Position; - private volatile bool _QueryingDuration; - - public CGstreamerSharpAudioStream(string media, bool prescan) - { - Element convert = ElementFactory.Make("audioconvert", "convert"); - Element audiosink = ElementFactory.Make("directsoundsink", "audiosink"); - var audioSinkBin = new Bin("Audiosink"); - - if (convert == null || audiosink == null) - { - CLog.LogError("Could not create pipeline"); - return; - } - - audioSinkBin.Add(convert); - audioSinkBin.Add(audiosink); - convert.Link(audiosink); - Pad pad = convert.GetStaticPad("sink"); - GhostPad ghostpad = new GhostPad("sink", pad); - - if (pad == null) - { - CLog.LogError("Could not create pads"); - return; - } - - if (!ghostpad.SetActive(true)) - { - CLog.LogError("Could not link pads"); - return; - } - if (!audioSinkBin.AddPad(ghostpad)) - { - CLog.LogError("Could not add pad"); - return; - } - - _Element = ElementFactory.Make("playbin", "playbin"); - if (_Element == null) - { - CLog.LogError("Could not create playbin"); - return; - } - _Element["audio-sink"] = audioSinkBin; - _Element["flags"] = 1 << 1; - _Element["uri"] = new Uri(media).AbsoluteUri; - _Element.SetState(State.Paused); - - Closed = false; //Enable stream - - // Passing CLOCK_TIME_NONE here causes the pipeline to block for a long time so with - // prescan enabled the pipeline will wait 500ms for stream to initialize and then continue - // if it takes more than 500ms, duration queries will be performed asynchronously - if (prescan) - { - Message msg = _Element.Bus.TimedPopFiltered(0xffffffffffffffff, MessageType.AsyncDone); - if (msg.Handle != IntPtr.Zero) - _UpdateDuration(); - } - } - - private void _OnMessage(Message msg) - { - if (msg.Handle == IntPtr.Zero) - return; - switch (msg.Type) - { - case MessageType.Eos: - if (_Loop) - Position = 0; - else - { - Finished = true; - Close(); - } - break; - case MessageType.Error: - GException error; - string debug; - msg.ParseError(out error, out debug); - CLog.LogError("Gstreamer error: message" + error.Message + ", code" + error.Code + " ,debug information" + debug); - break; - case MessageType.DurationChanged: - if (!_QueryingDuration) - _UpdateDuration(); - break; - } - msg.Unref(); - } - - public void Close() - { - if (!Closed) - { - Closed = true; - Finished = true; - var t = new System.Threading.Thread(_TerminateStream) {Name = "GSt Terminate"}; - t.Start(); - } - } - - private void _TerminateStream() - { - if (_Element != null) - { - _Element.SetState(State.Null); - _Element.Dispose(); - _Element = null; - } - } - - public void Play(bool loop = false) - { - if (_Element != null) - _Element.SetState(State.Playing); - _Loop = loop; - } - - public void Stop() - { - if (_Element != null) - _Element.SetState(State.Ready); - Position = 0; - } - - public void Fade(float targetVolume, float seconds) - { - _Fading = new CFading(_Volume, targetVolume, seconds); - _AfterFadeAction = EStreamAction.Nothing; - } - - public void FadeAndPause(float targetVolume, float seconds) - { - Fade(targetVolume, seconds); - _AfterFadeAction = EStreamAction.Pause; - } - - public void FadeAndClose(float targetVolume, float seconds) - { - Fade(targetVolume, seconds); - _AfterFadeAction = EStreamAction.Close; - } - - public void FadeAndStop(float targetVolume, float seconds) - { - Fade(targetVolume, seconds); - _AfterFadeAction = EStreamAction.Stop; - } - - public float Volume - { - get { return _Volume * 100f; } - set - { - _Volume = value / 100f; - if (_Element != null) - _Element["volume"] = (_Volume * _MaxVolume); - } - } - - public float MaxVolume - { - get { return _MaxVolume * 100f; } - set - { - _MaxVolume = value / 100f; - Volume = _Volume; - } - } - - public float Length - { - get - { - if (_Duration < 0 && !_QueryingDuration) - { - _QueryingDuration = true; // Set this to avoid race conditions - var t = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; - t.Start(); - } - return _Duration > 0 ? _Duration : -1; - } - } - - public float Position - { - get - { - long position; - if (!_Element.QueryPosition(Format.Time, out position)) - CLog.LogError("Could not query position"); - else - _Position = (float)(position / (double)Constants.SECOND); - return _Position; - } - set - { - if (_Element != null) - _Element.SeekSimple(Format.Time, SeekFlags.Accurate | SeekFlags.Flush, (long)(value * (double)Constants.SECOND)); - } - } - - public bool Paused - { - get { return _Element == null || _Element.TargetState == State.Paused; } - set - { - if (value && _Element != null) - _Element.SetState(State.Paused); - } - } - - public bool Playing - { - get { return _Element != null && (_Element.TargetState == State.Playing && !Finished); } - set - { - if (value && _Element != null) - _Element.SetState(State.Playing); - } - } - - public void Update() - { - while (_Element != null && _Element.Bus != null && _Element.Bus.HavePending()) - _OnMessage(_Element.Bus.Pop()); - - if (_Fading != null) - { - bool finished; - Volume = _Fading.GetValue(out finished); - if (finished) - { - switch (_AfterFadeAction) - { - case EStreamAction.Pause: - Paused = true; - break; - case EStreamAction.Stop: - Stop(); - break; - case EStreamAction.Close: - Close(); - break; - } - _Fading = null; - } - } - } - - private void _UpdateDuration() - { - _QueryingDuration = true; - long duration = -1; - while (duration < 0 && !Closed && !Finished && _Element != null) - { - if (_Element.QueryDuration(Format.Time, out duration)) - { - _Duration = duration / (float)Constants.SECOND; - _QueryingDuration = false; - } - } - } - } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs index 5e9850e6..ac7b533b 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs @@ -19,12 +19,6 @@ using System.Linq; using OpenTK.Audio; using System; using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Threading; -using Vocaluxe.Base; -using Vocaluxe.Lib.Sound.Playback.Decoder; -using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.OpenAL { @@ -352,497 +346,4 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL throw new NotImplementedException(); } } - - class COpenAlStream : IDisposable - { - private const int _BufferSize = 2048; - private const int _BufferCount = 5; - private const long _Bufsize = 50000L; - - private Object _CloseMutex; - - private int[] _Buffers; - private int _State; - private int _Source; - private SFormatInfo _Format; - - private bool _Initialized; - private int _ByteCount = 4; - private float _Volume = 1f; - private float _VolumeMax = 1f; - - private EStreamAction _AfterFadeAction; - private CFading _Fading; - - private readonly Stopwatch _Timer = new Stopwatch(); - - private Closeproc _Closeproc; - private int _StreamID; - private IAudioDecoder _Decoder; - private float _BytesPerSecond; - private bool _NoMoreData; - - private bool _FileOpened; - - private bool _Waiting; - private bool _Skip; - - private bool _Loop; - private float _Duration; - private float _CurrentTime; - private float _TimeCode; - - private bool _Paused; - - private CRingBuffer _Data; - private float _SetStart; - private float _Start; - private bool _SetLoop; - private bool _SetSkip; - private bool _Terminated; - - private readonly Thread _DecoderThread; - - private AutoResetEvent _EventDecode = new AutoResetEvent(false); - - private readonly Object _MutexData = new Object(); - private readonly Object _MutexSyncSignals = new Object(); - - public COpenAlStream() - { - _Initialized = false; - _DecoderThread = new Thread(_Execute) {Name = "OpenAL Decode"}; - } - - public void Free(Closeproc closeProc, int streamID, Object closeMutex) - { - _Closeproc = closeProc; - _StreamID = streamID; - _Terminated = true; - _CloseMutex = closeMutex; - } - - public float Length - { - get - { - if (_FileOpened) - return _Duration; - - return 0f; - } - } - - public bool Finished - { - get - { - lock (_MutexData) - { - return _NoMoreData && _Data.BytesNotRead == 0L; - } - } - } - - public float Volume - { - get { return _Volume * 100f; } - set - { - lock (_MutexData) - { - _Volume = value / 100f; - if (_Volume < 0f) - _Volume = 0f; - - if (_Volume > 1f) - _Volume = 1f; - } - } - } - - public float VolumeMax - { - get { return _VolumeMax * 100f; } - set - { - lock (_MutexData) - { - _VolumeMax = value / 100f; - if (_VolumeMax < 0f) - _VolumeMax = 0f; - - if (_VolumeMax > 1f) - _VolumeMax = 1f; - } - } - } - - public float Position - { - get - { - if (Finished) - _Timer.Stop(); - //TODO: Why not use Decoder.GetPosition()? - return _CurrentTime + _Timer.ElapsedMilliseconds / 1000f; - } - } - - public bool Paused - { - get { return _Paused; } - set - { - _Paused = value; - lock (_MutexSyncSignals) - { - if (_Paused) - { - _Timer.Stop(); - AL.SourceStop(_Source); - } - else - { - _Timer.Start(); - _EventDecode.Set(); - AL.SourcePlay(_Source); - } - } - } - } - - public void Fade(float targetVolume, float fadeTime) - { - _Fading = new CFading(_Volume, targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Nothing; - } - - public void FadeAndPause(float targetVolume, float fadeTime) - { - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Pause; - } - - public void FadeAndStop(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) - { - _Closeproc = closeProc; - _StreamID = streamID; - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Stop; - } - - public void Play() - { - Paused = false; - _AfterFadeAction = EStreamAction.Nothing; - AL.SourcePlay(_Source); - } - - public void Stop() - { - AL.SourceStop(_Source); - Skip(0f); - } - - public bool Loop - { - get { return _SetLoop; } - set { _SetLoop = value; } - } - - public int Open(string fileName) - { - if (_FileOpened) - return -1; - - if (!File.Exists(fileName)) - return -1; - - _Decoder = new CAudioDecoderFFmpeg(); - _Decoder.Init(); - - try - { - _Source = AL.GenSource(); - _Buffers = new int[_BufferCount]; - for (int i = 0; i < _BufferCount; i++) - _Buffers[i] = AL.GenBuffer(); - - _State = 0; - //AL.SourceQueueBuffers(_source, _buffers.Length, _buffers); - } - catch (Exception) - { - _Initialized = false; - CLog.LogError("Error Init OpenAL Playback"); - return -1; - } - - _Decoder.Open(fileName); - _Duration = _Decoder.GetLength(); - - _Format = _Decoder.GetFormatInfo(); - _ByteCount = 2 * _Format.ChannelCount; - _BytesPerSecond = _Format.SamplesPerSecond * _ByteCount; - _CurrentTime = 0f; - _Timer.Reset(); - - var stream = new SAudioStreams(0) {Handle = _Buffers[0]}; - - if (stream.Handle != 0) - { - _FileOpened = true; - _Data = new CRingBuffer(_Bufsize); - _NoMoreData = false; - _DecoderThread.Priority = ThreadPriority.Normal; - _DecoderThread.Name = Path.GetFileName(fileName); - _DecoderThread.Start(); - - return stream.Handle; - } - _Initialized = true; - return -1; - } - - public bool Skip(float time) - { - lock (_MutexSyncSignals) - { - _SetStart = time; - _SetSkip = true; - } - _EventDecode.Set(); - - return true; - } - - #region Threading - private void _DoSkip() - { - _Decoder.SetPosition(_Start); - _CurrentTime = _Start; - _TimeCode = _Start; - _Timer.Reset(); - _Waiting = false; - - lock (_MutexData) - { - _Data = new CRingBuffer(_Bufsize); - _NoMoreData = false; - } - } - - private void _Execute() - { - while (!_Terminated) - { - _Waiting = false; - if (_EventDecode.WaitOne(1) || !_Waiting) - { - if (_Skip) - { - _DoSkip(); - _Skip = false; - } - - _DoDecode(); - } - if (!_Terminated) - { - lock (_MutexSyncSignals) - { - if (_SetSkip) - _Skip = true; - - _SetSkip = false; - - _Start = _SetStart; - _Loop = _SetLoop; - } - } - } - - _DoFree(); - } - - private void _DoDecode() - { - if (!_FileOpened) - return; - - if (_Paused) - return; - - if (_Terminated) - return; - - float timecode; - byte[] buffer; - - bool doIt = false; - lock (_MutexData) - { - if (_Bufsize - 10000L > _Data.BytesNotRead) - doIt = true; - } - - if (!doIt) - return; - - _Decoder.Decode(out buffer, out timecode); - - if (buffer == null) - { - if (_Loop) - { - lock (_MutexSyncSignals) - { - _CurrentTime = 0f; - _Start = 0f; - } - - _DoSkip(); - } - else - _NoMoreData = true; - return; - } - - lock (_MutexData) - { - _Data.Write(buffer); - _TimeCode = timecode; - } - } - - private void _DoFree() - { - if (_Initialized) - { - lock (_CloseMutex) - { - Stop(); - AL.DeleteSource(_Source); - AL.DeleteBuffers(_Buffers); - } - _Decoder.Close(); - } - - _Closeproc(_StreamID); - } - #endregion Threading - - private void _Update() - { - if (_Fading != null) - { - bool finished; - _Volume = _Fading.GetValue(out finished); - if (finished) - { - switch (_AfterFadeAction) - { - case EStreamAction.Close: - case EStreamAction.Stop: - _Terminated = true; - break; - case EStreamAction.Pause: - Paused = true; - break; - } - _Fading = null; - } - } - } - - public void UploadData() - { - _Update(); - - if (_Paused) - return; - - int queuedCount; - bool doit = true; - AL.GetSource(_Source, ALGetSourcei.BuffersQueued, out queuedCount); - - int processedCount = _BufferCount; - if (queuedCount > 0) - { - AL.GetSource(_Source, ALGetSourcei.BuffersProcessed, out processedCount); - doit = false; - Console.WriteLine("Buffers Processed on Stream " + _Source + " = " + processedCount); - if (processedCount < 1) - return; - } - - var buf = new byte[_BufferSize]; - - lock (_MutexData) - { - while (processedCount > 0) - { - if (_Data.BytesNotRead >= buf.Length) - { - _Data.Read(buf); - - - var b = new byte[2]; - for (int i = 0; i < buf.Length; i += _ByteCount) - { - b[0] = buf[i]; - b[1] = buf[i + 1]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); - buf[i] = b[0]; - buf[i + 1] = b[1]; - - if (_ByteCount == 4) - { - b[0] = buf[i + 2]; - b[1] = buf[i + 3]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); - buf[i + 2] = b[0]; - buf[i + 3] = b[1]; - } - } - - - int buffer; - if (!doit) - buffer = AL.SourceUnqueueBuffer(_Source); - else - { - buffer = _Buffers[queuedCount]; - queuedCount++; - } - - if (buffer != 0) - { - ALFormat alFormat = (_Format.ChannelCount == 2) ? ALFormat.Stereo16 : ALFormat.Mono16; - AL.BufferData(buffer, alFormat, buf, buf.Length, _Format.SamplesPerSecond); - Console.WriteLine("Write to Buffer: " + buffer); - AL.SourceQueueBuffer(_Source, buffer); - } - } - processedCount--; - } - AL.GetSource(_Source, ALGetSourcei.SourceState, out _State); - if ((ALSourceState)_State != ALSourceState.Playing) - AL.SourcePlay(_Source); - } - - _CurrentTime = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - 0.1f; - _Timer.Reset(); - _Timer.Start(); - } - - public void Dispose() - { - _EventDecode.Close(); - _EventDecode = null; - } - } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index e135211e..484b0d6b 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -53,10 +53,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound { using (var ds = new DirectSoundCapture(dev.DriverGuid)) { - var device = new CRecordDevice {Driver = dev.DriverGuid.ToString(), ID = id, Name = dev.Description, Channels = ds.Capabilities.Channels}; - - if (device.Channels > 2) - device.Channels = 2; //more are not supported in vocaluxe + var device = new CRecordDevice(id,dev.DriverGuid.ToString(), dev.Description, ds.Capabilities.Channels); _Devices.Add(device); diff --git a/Vocaluxe/Lib/Sound/Record/IRecord.cs b/Vocaluxe/Lib/Sound/Record/IRecord.cs index 1dfea755..6812e7c0 100644 --- a/Vocaluxe/Lib/Sound/Record/IRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/IRecord.cs @@ -22,13 +22,25 @@ namespace Vocaluxe.Lib.Sound.Record { class CRecordDevice { - public int ID; - public string Name; - public string Driver; + public readonly int ID; + public readonly string Name; + public readonly string Driver; - public int Channels; + public readonly int Channels; public int PlayerChannel1; public int PlayerChannel2; + + public CRecordDevice(int id, string name, string driver, int channels) + { + ID = id; + Name = name; + Driver = driver; + + if (channels > 2) + channels = 2; //more are not supported in vocaluxe + + Channels = channels; + } } struct SMicConfig diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 05b37330..98a3dd72 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -71,10 +71,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio CPortAudio.SPaDeviceInfo info = CPortAudio.PaGetDeviceInfo(i); if (info.HostApi == hostAPI && info.MaxInputChannels > 0) { - var dev = new CRecordDevice {ID = i, Name = info.Name, Driver = info.Name + i, Channels = info.MaxInputChannels}; - - if (dev.Channels > 2) - dev.Channels = 2; //more are not supported in vocaluxe + var dev = new CRecordDevice( i, info.Name,info.Name + i, info.MaxInputChannels); _Devices.Add(dev); } From 312c28ebed4b4472c224477e092803e1bd754c7f Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 14:37:16 +0100 Subject: [PATCH 004/116] Split classes of Lib/Sound --- .../CGstreamerSharpAudioStream.cs | 288 ++++++++ .../Sound/Playback/OpenAL/COpenAlStream.cs | 504 ++++++++++++++ .../Playback/PortAudio/CPortAudioPlay.cs | 613 ----------------- .../Playback/PortAudio/CPortAudioStream.cs | 617 ++++++++++++++++++ .../Record/DirectSound/CDirectSoundRecord.cs | 183 +----- .../DirectSound/CSampleDataEventArgs.cs | 16 + .../Record/DirectSound/CSoundCardSource.cs | 175 +++++ Vocaluxe/Vocaluxe.csproj | 5 + 8 files changed, 1606 insertions(+), 795 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs create mode 100644 Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs create mode 100644 Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs create mode 100644 Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs create mode 100644 Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs new file mode 100644 index 00000000..525061ac --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -0,0 +1,288 @@ +using System; +using GLib; +using Gst; +using Vocaluxe.Base; +using VocaluxeLib; + +namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp +{ + public class CGstreamerSharpAudioStream + { + private Element _Element; + private bool _Loop; + public volatile bool Closed = true; + public volatile bool Finished; + + private CFading _Fading; + private EStreamAction _AfterFadeAction; + private float _Volume = 1f; + + private float _MaxVolume = 1f; + + private volatile float _Duration = -1f; + private volatile float _Position; + private volatile bool _QueryingDuration; + + public CGstreamerSharpAudioStream(string media, bool prescan) + { + Element convert = ElementFactory.Make("audioconvert", "convert"); + Element audiosink = ElementFactory.Make("directsoundsink", "audiosink"); + var audioSinkBin = new Bin("Audiosink"); + + if (convert == null || audiosink == null) + { + CLog.LogError("Could not create pipeline"); + return; + } + + audioSinkBin.Add(convert); + audioSinkBin.Add(audiosink); + convert.Link(audiosink); + Pad pad = convert.GetStaticPad("sink"); + GhostPad ghostpad = new GhostPad("sink", pad); + + if (pad == null) + { + CLog.LogError("Could not create pads"); + return; + } + + if (!ghostpad.SetActive(true)) + { + CLog.LogError("Could not link pads"); + return; + } + if (!audioSinkBin.AddPad(ghostpad)) + { + CLog.LogError("Could not add pad"); + return; + } + + _Element = ElementFactory.Make("playbin", "playbin"); + if (_Element == null) + { + CLog.LogError("Could not create playbin"); + return; + } + _Element["audio-sink"] = audioSinkBin; + _Element["flags"] = 1 << 1; + _Element["uri"] = new Uri(media).AbsoluteUri; + _Element.SetState(State.Paused); + + Closed = false; //Enable stream + + // Passing CLOCK_TIME_NONE here causes the pipeline to block for a long time so with + // prescan enabled the pipeline will wait 500ms for stream to initialize and then continue + // if it takes more than 500ms, duration queries will be performed asynchronously + if (prescan) + { + Message msg = _Element.Bus.TimedPopFiltered(0xffffffffffffffff, MessageType.AsyncDone); + if (msg.Handle != IntPtr.Zero) + _UpdateDuration(); + } + } + + private void _OnMessage(Message msg) + { + if (msg.Handle == IntPtr.Zero) + return; + switch (msg.Type) + { + case MessageType.Eos: + if (_Loop) + Position = 0; + else + { + Finished = true; + Close(); + } + break; + case MessageType.Error: + GException error; + string debug; + msg.ParseError(out error, out debug); + CLog.LogError("Gstreamer error: message" + error.Message + ", code" + error.Code + " ,debug information" + debug); + break; + case MessageType.DurationChanged: + if (!_QueryingDuration) + _UpdateDuration(); + break; + } + msg.Unref(); + } + + public void Close() + { + if (!Closed) + { + Closed = true; + Finished = true; + var t = new System.Threading.Thread(_TerminateStream) {Name = "GSt Terminate"}; + t.Start(); + } + } + + private void _TerminateStream() + { + if (_Element != null) + { + _Element.SetState(State.Null); + _Element.Dispose(); + _Element = null; + } + } + + public void Play(bool loop = false) + { + if (_Element != null) + _Element.SetState(State.Playing); + _Loop = loop; + } + + public void Stop() + { + if (_Element != null) + _Element.SetState(State.Ready); + Position = 0; + } + + public void Fade(float targetVolume, float seconds) + { + _Fading = new CFading(_Volume, targetVolume, seconds); + _AfterFadeAction = EStreamAction.Nothing; + } + + public void FadeAndPause(float targetVolume, float seconds) + { + Fade(targetVolume, seconds); + _AfterFadeAction = EStreamAction.Pause; + } + + public void FadeAndClose(float targetVolume, float seconds) + { + Fade(targetVolume, seconds); + _AfterFadeAction = EStreamAction.Close; + } + + public void FadeAndStop(float targetVolume, float seconds) + { + Fade(targetVolume, seconds); + _AfterFadeAction = EStreamAction.Stop; + } + + public float Volume + { + get { return _Volume * 100f; } + set + { + _Volume = value / 100f; + if (_Element != null) + _Element["volume"] = (_Volume * _MaxVolume); + } + } + + public float MaxVolume + { + get { return _MaxVolume * 100f; } + set + { + _MaxVolume = value / 100f; + Volume = _Volume; + } + } + + public float Length + { + get + { + if (_Duration < 0 && !_QueryingDuration) + { + _QueryingDuration = true; // Set this to avoid race conditions + var t = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; + t.Start(); + } + return _Duration > 0 ? _Duration : -1; + } + } + + public float Position + { + get + { + long position; + if (!_Element.QueryPosition(Format.Time, out position)) + CLog.LogError("Could not query position"); + else + _Position = (float)(position / (double)Constants.SECOND); + return _Position; + } + set + { + if (_Element != null) + _Element.SeekSimple(Format.Time, SeekFlags.Accurate | SeekFlags.Flush, (long)(value * (double)Constants.SECOND)); + } + } + + public bool Paused + { + get { return _Element == null || _Element.TargetState == State.Paused; } + set + { + if (value && _Element != null) + _Element.SetState(State.Paused); + } + } + + public bool Playing + { + get { return _Element != null && (_Element.TargetState == State.Playing && !Finished); } + set + { + if (value && _Element != null) + _Element.SetState(State.Playing); + } + } + + public void Update() + { + while (_Element != null && _Element.Bus != null && _Element.Bus.HavePending()) + _OnMessage(_Element.Bus.Pop()); + + if (_Fading != null) + { + bool finished; + Volume = _Fading.GetValue(out finished); + if (finished) + { + switch (_AfterFadeAction) + { + case EStreamAction.Pause: + Paused = true; + break; + case EStreamAction.Stop: + Stop(); + break; + case EStreamAction.Close: + Close(); + break; + } + _Fading = null; + } + } + } + + private void _UpdateDuration() + { + _QueryingDuration = true; + long duration = -1; + while (duration < 0 && !Closed && !Finished && _Element != null) + { + if (_Element.QueryDuration(Format.Time, out duration)) + { + _Duration = duration / (float)Constants.SECOND; + _QueryingDuration = false; + } + } + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs new file mode 100644 index 00000000..16fac938 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -0,0 +1,504 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; +using OpenTK.Audio; +using Vocaluxe.Base; +using Vocaluxe.Lib.Sound.Playback.Decoder; +using VocaluxeLib; + +namespace Vocaluxe.Lib.Sound.Playback.OpenAL +{ + class COpenAlStream : IDisposable + { + private const int _BufferSize = 2048; + private const int _BufferCount = 5; + private const long _Bufsize = 50000L; + + private Object _CloseMutex; + + private int[] _Buffers; + private int _State; + private int _Source; + private SFormatInfo _Format; + + private bool _Initialized; + private int _ByteCount = 4; + private float _Volume = 1f; + private float _VolumeMax = 1f; + + private EStreamAction _AfterFadeAction; + private CFading _Fading; + + private readonly Stopwatch _Timer = new Stopwatch(); + + private Closeproc _Closeproc; + private int _StreamID; + private IAudioDecoder _Decoder; + private float _BytesPerSecond; + private bool _NoMoreData; + + private bool _FileOpened; + + private bool _Waiting; + private bool _Skip; + + private bool _Loop; + private float _Duration; + private float _CurrentTime; + private float _TimeCode; + + private bool _Paused; + + private CRingBuffer _Data; + private float _SetStart; + private float _Start; + private bool _SetLoop; + private bool _SetSkip; + private bool _Terminated; + + private readonly Thread _DecoderThread; + + private AutoResetEvent _EventDecode = new AutoResetEvent(false); + + private readonly Object _MutexData = new Object(); + private readonly Object _MutexSyncSignals = new Object(); + + public COpenAlStream() + { + _Initialized = false; + _DecoderThread = new Thread(_Execute) {Name = "OpenAL Decode"}; + } + + public void Free(Closeproc closeProc, int streamID, Object closeMutex) + { + _Closeproc = closeProc; + _StreamID = streamID; + _Terminated = true; + _CloseMutex = closeMutex; + } + + public float Length + { + get + { + if (_FileOpened) + return _Duration; + + return 0f; + } + } + + public bool Finished + { + get + { + lock (_MutexData) + { + return _NoMoreData && _Data.BytesNotRead == 0L; + } + } + } + + public float Volume + { + get { return _Volume * 100f; } + set + { + lock (_MutexData) + { + _Volume = value / 100f; + if (_Volume < 0f) + _Volume = 0f; + + if (_Volume > 1f) + _Volume = 1f; + } + } + } + + public float VolumeMax + { + get { return _VolumeMax * 100f; } + set + { + lock (_MutexData) + { + _VolumeMax = value / 100f; + if (_VolumeMax < 0f) + _VolumeMax = 0f; + + if (_VolumeMax > 1f) + _VolumeMax = 1f; + } + } + } + + public float Position + { + get + { + if (Finished) + _Timer.Stop(); + //TODO: Why not use Decoder.GetPosition()? + return _CurrentTime + _Timer.ElapsedMilliseconds / 1000f; + } + } + + public bool Paused + { + get { return _Paused; } + set + { + _Paused = value; + lock (_MutexSyncSignals) + { + if (_Paused) + { + _Timer.Stop(); + AL.SourceStop(_Source); + } + else + { + _Timer.Start(); + _EventDecode.Set(); + AL.SourcePlay(_Source); + } + } + } + } + + public void Fade(float targetVolume, float fadeTime) + { + _Fading = new CFading(_Volume, targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Nothing; + } + + public void FadeAndPause(float targetVolume, float fadeTime) + { + Fade(targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Pause; + } + + public void FadeAndStop(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) + { + _Closeproc = closeProc; + _StreamID = streamID; + Fade(targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Stop; + } + + public void Play() + { + Paused = false; + _AfterFadeAction = EStreamAction.Nothing; + AL.SourcePlay(_Source); + } + + public void Stop() + { + AL.SourceStop(_Source); + Skip(0f); + } + + public bool Loop + { + get { return _SetLoop; } + set { _SetLoop = value; } + } + + public int Open(string fileName) + { + if (_FileOpened) + return -1; + + if (!File.Exists(fileName)) + return -1; + + _Decoder = new CAudioDecoderFFmpeg(); + _Decoder.Init(); + + try + { + _Source = AL.GenSource(); + _Buffers = new int[_BufferCount]; + for (int i = 0; i < _BufferCount; i++) + _Buffers[i] = AL.GenBuffer(); + + _State = 0; + //AL.SourceQueueBuffers(_source, _buffers.Length, _buffers); + } + catch (Exception) + { + _Initialized = false; + CLog.LogError("Error Init OpenAL Playback"); + return -1; + } + + _Decoder.Open(fileName); + _Duration = _Decoder.GetLength(); + + _Format = _Decoder.GetFormatInfo(); + _ByteCount = 2 * _Format.ChannelCount; + _BytesPerSecond = _Format.SamplesPerSecond * _ByteCount; + _CurrentTime = 0f; + _Timer.Reset(); + + var stream = new SAudioStreams(0) {Handle = _Buffers[0]}; + + if (stream.Handle != 0) + { + _FileOpened = true; + _Data = new CRingBuffer(_Bufsize); + _NoMoreData = false; + _DecoderThread.Priority = ThreadPriority.Normal; + _DecoderThread.Name = Path.GetFileName(fileName); + _DecoderThread.Start(); + + return stream.Handle; + } + _Initialized = true; + return -1; + } + + public bool Skip(float time) + { + lock (_MutexSyncSignals) + { + _SetStart = time; + _SetSkip = true; + } + _EventDecode.Set(); + + return true; + } + + #region Threading + private void _DoSkip() + { + _Decoder.SetPosition(_Start); + _CurrentTime = _Start; + _TimeCode = _Start; + _Timer.Reset(); + _Waiting = false; + + lock (_MutexData) + { + _Data = new CRingBuffer(_Bufsize); + _NoMoreData = false; + } + } + + private void _Execute() + { + while (!_Terminated) + { + _Waiting = false; + if (_EventDecode.WaitOne(1) || !_Waiting) + { + if (_Skip) + { + _DoSkip(); + _Skip = false; + } + + _DoDecode(); + } + if (!_Terminated) + { + lock (_MutexSyncSignals) + { + if (_SetSkip) + _Skip = true; + + _SetSkip = false; + + _Start = _SetStart; + _Loop = _SetLoop; + } + } + } + + _DoFree(); + } + + private void _DoDecode() + { + if (!_FileOpened) + return; + + if (_Paused) + return; + + if (_Terminated) + return; + + float timecode; + byte[] buffer; + + bool doIt = false; + lock (_MutexData) + { + if (_Bufsize - 10000L > _Data.BytesNotRead) + doIt = true; + } + + if (!doIt) + return; + + _Decoder.Decode(out buffer, out timecode); + + if (buffer == null) + { + if (_Loop) + { + lock (_MutexSyncSignals) + { + _CurrentTime = 0f; + _Start = 0f; + } + + _DoSkip(); + } + else + _NoMoreData = true; + return; + } + + lock (_MutexData) + { + _Data.Write(buffer); + _TimeCode = timecode; + } + } + + private void _DoFree() + { + if (_Initialized) + { + lock (_CloseMutex) + { + Stop(); + AL.DeleteSource(_Source); + AL.DeleteBuffers(_Buffers); + } + _Decoder.Close(); + } + + _Closeproc(_StreamID); + } + #endregion Threading + + private void _Update() + { + if (_Fading != null) + { + bool finished; + _Volume = _Fading.GetValue(out finished); + if (finished) + { + switch (_AfterFadeAction) + { + case EStreamAction.Close: + case EStreamAction.Stop: + _Terminated = true; + break; + case EStreamAction.Pause: + Paused = true; + break; + } + _Fading = null; + } + } + } + + public void UploadData() + { + _Update(); + + if (_Paused) + return; + + int queuedCount; + bool doit = true; + AL.GetSource(_Source, ALGetSourcei.BuffersQueued, out queuedCount); + + int processedCount = _BufferCount; + if (queuedCount > 0) + { + AL.GetSource(_Source, ALGetSourcei.BuffersProcessed, out processedCount); + doit = false; + Console.WriteLine("Buffers Processed on Stream " + _Source + " = " + processedCount); + if (processedCount < 1) + return; + } + + var buf = new byte[_BufferSize]; + + lock (_MutexData) + { + while (processedCount > 0) + { + if (_Data.BytesNotRead >= buf.Length) + { + _Data.Read(buf); + + + var b = new byte[2]; + for (int i = 0; i < buf.Length; i += _ByteCount) + { + b[0] = buf[i]; + b[1] = buf[i + 1]; + + b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); + buf[i] = b[0]; + buf[i + 1] = b[1]; + + if (_ByteCount == 4) + { + b[0] = buf[i + 2]; + b[1] = buf[i + 3]; + + b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); + buf[i + 2] = b[0]; + buf[i + 3] = b[1]; + } + } + + + int buffer; + if (!doit) + buffer = AL.SourceUnqueueBuffer(_Source); + else + { + buffer = _Buffers[queuedCount]; + queuedCount++; + } + + if (buffer != 0) + { + ALFormat alFormat = (_Format.ChannelCount == 2) ? ALFormat.Stereo16 : ALFormat.Mono16; + AL.BufferData(buffer, alFormat, buf, buf.Length, _Format.SamplesPerSecond); + Console.WriteLine("Write to Buffer: " + buffer); + AL.SourceQueueBuffer(_Source, buffer); + } + } + processedCount--; + } + AL.GetSource(_Source, ALGetSourcei.SourceState, out _State); + if ((ALSourceState)_State != ALSourceState.Playing) + AL.SourcePlay(_Source); + } + + _CurrentTime = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - 0.1f; + _Timer.Reset(); + _Timer.Start(); + } + + public void Dispose() + { + _EventDecode.Close(); + _EventDecode = null; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs index c0cd93f8..38742b9f 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs @@ -17,14 +17,7 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Runtime.InteropServices; -using System.Threading; -using Vocaluxe.Base; -using Vocaluxe.Lib.Sound.Playback.Decoder; -using Vocaluxe.Lib.Sound.PortAudio; -using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.PortAudio { @@ -337,610 +330,4 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } } } - - class CPortAudioStream : IDisposable - { - private const long _Bufsize = 1000000L; - private const long _Beginrefill = 800000L; - - private readonly CSyncTimer _SyncTimer; - private static bool _Initialized; - private static int _NumStreams; - private static readonly Object _Mutex = new object(); - private int _ByteCount = 4; - private float _Volume = 1f; - private float _VolumeMax = 1f; - - private EStreamAction _AfterFadeAction; - private CFading _Fading; - - private static CPortAudio.SPaHostApiInfo _ApiInfo; - private static CPortAudio.SPaDeviceInfo _OutputDeviceInfo; - private IntPtr _Ptr = new IntPtr(0); - - private Closeproc _Closeproc; - private CPortAudio.PaStreamCallbackDelegate _PaStreamCallback; - private int _StreamID; - private IAudioDecoder _Decoder; - private float _BytesPerSecond; - private bool _NoMoreData; - - private bool _FileOpened; - - private bool _Waiting; - private bool _Skip; - - private bool _Loop; - private float _Duration; - private float _CurrentTime; - private float _TimeCode; - - private bool _Paused; - - private CRingBuffer _Data; - private float _SetStart; - private float _Start; - private bool _SetLoop; - private bool _SetSkip; - private bool _Terminated; - - private readonly Thread _DecoderThread; - - private AutoResetEvent _EventDecode = new AutoResetEvent(false); - - private readonly Object _LockData = new Object(); - private readonly Object _LockSyncSignals = new Object(); - - public CPortAudioStream() - { - _SyncTimer = new CSyncTimer(0f, 1f, 0.02f); - _DecoderThread = new Thread(_Execute) {Name = "PortAudio Decode"}; - } - - ~CPortAudioStream() - { - Dispose(); - } - - public void Free(Closeproc closeProc, int streamID) - { - _Closeproc = closeProc; - _StreamID = streamID; - _Terminated = true; - } - - public float Length - { - get - { - if (_FileOpened) - return _Duration; - - return 0f; - } - } - - public bool Finished - { - get - { - lock (_LockData) - { - return _NoMoreData && _Data.BytesNotRead == 0L && _SyncTimer.Time >= _Duration; - } - } - } - - public float Volume - { - get { return _Volume * 100f; } - set - { - lock (_LockData) - { - _Volume = value / 100f; - if (_Volume < 0f) - _Volume = 0f; - - if (_Volume > 1f) - _Volume = 1f; - } - } - } - - public float VolumeMax - { - get { return _VolumeMax * 100f; } - set - { - lock (_LockData) - { - _VolumeMax = value / 100f; - if (_VolumeMax < 0f) - _VolumeMax = 0f; - - if (_VolumeMax > 1f) - _VolumeMax = 1f; - } - } - } - - public float Position - { - get - { - lock (_LockData) - { - if (Finished) - _SyncTimer.Pause(); - //TODO: Why not use Decoder.GetPosition()? - return _SyncTimer.Time; - } - } - } - - public bool Paused - { - get { return _Paused; } - set - { - _Paused = value; - lock (_LockData) - { - if (_Paused) - _SyncTimer.Pause(); - else - { - _SyncTimer.Resume(); - _EventDecode.Set(); - } - } - } - } - - public void Fade(float targetVolume, float fadeTime) - { - _Fading = new CFading(_Volume, targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Nothing; - } - - public void FadeAndPause(float targetVolume, float fadeTime) - { - Fade(targetVolume, fadeTime); - } - - public void FadeAndClose(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) - { - _Closeproc = closeProc; - _StreamID = streamID; - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Close; - } - - public void FadeAndStop(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) - { - _Closeproc = closeProc; - _StreamID = streamID; - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Stop; - } - - public void Play() - { - Paused = false; - _AfterFadeAction = EStreamAction.Nothing; - lock (_Mutex) - { - _ErrorCheck("StartStream", CPortAudio.Pa_StartStream(_Ptr)); - } - } - - public void Stop() - { - lock (_Mutex) - { - _ErrorCheck("StopStream (playback)", CPortAudio.Pa_StopStream(_Ptr)); - } - Skip(0f); - } - - public bool Loop - { - get { return _SetLoop; } - set { _SetLoop = value; } - } - - public int Open(string fileName) - { - if (_FileOpened) - return -1; - - if (!File.Exists(fileName)) - return -1; - - if (_FileOpened) - return -1; - - _Decoder = new CAudioDecoderFFmpeg(); - _Decoder.Init(); - - try - { - lock (_Mutex) - { - if (!_Initialized) - { - if (_ErrorCheck("Initialize", CPortAudio.Pa_Initialize())) - return -1; - _Initialized = true; - - int hostApi = _ApiSelect(); - _ApiInfo = CPortAudio.PaGetHostApiInfo(hostApi); - _OutputDeviceInfo = CPortAudio.PaGetDeviceInfo(_ApiInfo.DefaultOutputDevice); - if (_OutputDeviceInfo.DefaultLowOutputLatency < 0.1) - _OutputDeviceInfo.DefaultLowOutputLatency = 0.1; - } - } - - _PaStreamCallback = _ProcessNewData; - } - catch (Exception) - { - _Initialized = false; - CLog.LogError("Error Init PortAudio Playback"); - return -1; - } - - _Decoder.Open(fileName); - _Duration = _Decoder.GetLength(); - - SFormatInfo format = _Decoder.GetFormatInfo(); - if (format.SamplesPerSecond == 0) - return -1; - - _ByteCount = 2 * format.ChannelCount; - _BytesPerSecond = format.SamplesPerSecond * _ByteCount; - _CurrentTime = 0f; - _SyncTimer.Time = _CurrentTime; - - var stream = new SAudioStreams(0); - - var data = new IntPtr(0); - - var outputParams = new CPortAudio.SPaStreamParameters - { - ChannelCount = format.ChannelCount, - Device = _ApiInfo.DefaultOutputDevice, - SampleFormat = CPortAudio.EPaSampleFormat.PaInt16, - SuggestedLatency = _OutputDeviceInfo.DefaultLowOutputLatency - }; - - var bufsize = (uint)CConfig.AudioBufferSize; - lock (_Mutex) - { - _ErrorCheck("OpenDefaultStream (playback)", CPortAudio.Pa_OpenStream( - out _Ptr, - IntPtr.Zero, - ref outputParams, - format.SamplesPerSecond, - bufsize, - CPortAudio.EPaStreamFlags.PaNoFlag, - _PaStreamCallback, - data)); - } - - stream.Handle = _Ptr.ToInt32(); - - if (stream.Handle != 0) - { - _NumStreams++; - _Paused = true; - _Waiting = true; - _FileOpened = true; - _Data = new CRingBuffer(_Bufsize); - _NoMoreData = false; - _DecoderThread.Priority = ThreadPriority.Normal; - _DecoderThread.Name = Path.GetFileName(fileName); - _DecoderThread.Start(); - - return stream.Handle; - } - return -1; - } - - public void Skip(float time) - { - lock (_LockSyncSignals) - { - _SetStart = time; - _SetSkip = true; - _Waiting = true; - } - } - - #region Threading - private void _DoSkip() - { - lock (_LockData) - { - _Decoder.SetPosition(_Start); - _CurrentTime = _Start; - _TimeCode = _Start; - _Data = new CRingBuffer(_Bufsize); - _NoMoreData = false; - _EventDecode.Set(); - _Waiting = false; - _SyncTimer.Time = _Start; - } - } - - private void _Execute() - { - while (!_Terminated) - { - if (_EventDecode.WaitOne(10)) - { - lock (_LockSyncSignals) - { - if (_SetSkip) - { - _Skip = true; - _EventDecode.Set(); - _Waiting = true; - } - - _SetSkip = false; - - _Start = _SetStart; - _Loop = _SetLoop; - } - - if (_Skip) - { - _DoSkip(); - _Skip = false; - } - - if (!_Waiting) - { - _DoDecode(); - _Update(); - } - } - } - - _DoFree(); - } - - private void _DoDecode() - { - if (!_FileOpened) - return; - - if (_Paused) - return; - - if (_Terminated) - return; - - float timecode; - byte[] buffer; - - bool doIt = false; - lock (_LockData) - { - if (!_Skip && _Beginrefill > _Data.BytesNotRead) - doIt = true; - } - - if (!doIt) - return; - - _Decoder.Decode(out buffer, out timecode); - - if (buffer == null) - { - if (_Loop) - { - lock (_LockSyncSignals) - { - _CurrentTime = 0f; - _Start = 0f; - } - - _DoSkip(); - } - else - _NoMoreData = true; - return; - } - - lock (_LockData) - { - _Data.Write(buffer); - _TimeCode = timecode; - if (_Data.BytesNotRead < _Beginrefill) - { - _Waiting = false; - _EventDecode.Set(); - } - else - _Waiting = true; - } - } - - private void _DoFree() - { - if (_Initialized) - { - Stop(); - _NumStreams--; - if (_NumStreams == 0) - { - lock (_Mutex) - { - CPortAudio.Pa_Terminate(); - _Initialized = false; - } - } - _Decoder.Close(); - } - - _Closeproc(_StreamID); - } - #endregion Threading - - #region Callbacks - private CPortAudio.EPaStreamCallbackResult _ProcessNewData( - IntPtr input, - IntPtr output, - uint frameCount, - ref CPortAudio.SPaStreamCallbackTimeInfo timeInfo, - CPortAudio.EPaStreamCallbackFlags statusFlags, - IntPtr userData) - { - var buf = new byte[frameCount * _ByteCount]; - - if (_Paused) - { - try - { - Marshal.Copy(buf, 0, output, (int)frameCount * _ByteCount); - } - catch (Exception e) - { - Console.WriteLine(e.ToString()); - } - return CPortAudio.EPaStreamCallbackResult.PaContinue; - } - - lock (_LockData) - { - if (_NoMoreData || _Data.BytesNotRead >= buf.Length) - { - _Data.Read(buf); - - var b = new byte[2]; - for (int i = 0; i < buf.Length; i += _ByteCount) - { - b[0] = buf[i]; - b[1] = buf[i + 1]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); - buf[i] = b[0]; - buf[i + 1] = b[1]; - - if (_ByteCount == 4) - { - b[0] = buf[i + 2]; - b[1] = buf[i + 3]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); - buf[i + 2] = b[0]; - buf[i + 3] = b[1]; - } - } - } - - if (_Data.BytesNotRead < _Beginrefill) - { - _EventDecode.Set(); - _Waiting = false; - } - else - _Waiting = true; - - float latency = buf.Length / _BytesPerSecond + CConfig.AudioLatency / 1000f; - float time = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; - - if (!_NoMoreData) - _CurrentTime = _SyncTimer.Update(time); - } - - try - { - Marshal.Copy(buf, 0, output, (int)frameCount * _ByteCount); - } - catch (Exception e) - { - CLog.LogError("Error PortAudio.StreamCallback: " + e.Message); - } - - return CPortAudio.EPaStreamCallbackResult.PaContinue; - } - #endregion Callbacks - - private bool _ErrorCheck(String action, CPortAudio.EPaError errorCode) - { - if (errorCode != CPortAudio.EPaError.PaNoError) - { - if (errorCode == CPortAudio.EPaError.PaStreamIsNotStopped) - return false; - - CLog.LogError(action + " error (playback): " + CPortAudio.PaGetErrorText(errorCode)); - if (errorCode == CPortAudio.EPaError.PaUnanticipatedHostError) - { - CPortAudio.SPaHostErrorInfo errorInfo = CPortAudio.PaGetLastHostErrorInfo(); - CLog.LogError("- Host error API type: " + errorInfo.HostApiType); - CLog.LogError("- Host error code: " + errorInfo.ErrorCode); - CLog.LogError("- Host error text: " + errorInfo.ErrorText); - } - return true; - } - - return false; - } - - private int _ApiSelect() - { - if (!_Initialized) - return 0; - - int selectedHostApi = CPortAudio.Pa_GetDefaultHostApi(); - int apiCount = CPortAudio.Pa_GetHostApiCount(); - for (int i = 0; i < apiCount; i++) - { - CPortAudio.SPaHostApiInfo apiInfo = CPortAudio.PaGetHostApiInfo(i); - if ((apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaDirectSound) - || (apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaALSA)) - selectedHostApi = i; - } - return selectedHostApi; - } - - private void _Update() - { - if (_Fading != null) - { - bool finished; - _Volume = _Fading.GetValue(out finished); - if (finished) - { - switch (_AfterFadeAction) - { - case EStreamAction.Close: - _Terminated = true; - break; - case EStreamAction.Stop: - Stop(); - break; - case EStreamAction.Pause: - Paused = true; - break; - } - _Fading = null; - } - } - } - - public void Dispose() - { - if (_EventDecode != null) - { - _EventDecode.Close(); - _EventDecode = null; - GC.SuppressFinalize(this); - } - } - } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs new file mode 100644 index 00000000..bf603b6d --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -0,0 +1,617 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading; +using Vocaluxe.Base; +using Vocaluxe.Lib.Sound.Playback.Decoder; +using Vocaluxe.Lib.Sound.PortAudio; +using VocaluxeLib; + +namespace Vocaluxe.Lib.Sound.Playback.PortAudio +{ + class CPortAudioStream : IDisposable + { + private const long _Bufsize = 1000000L; + private const long _Beginrefill = 800000L; + + private readonly CSyncTimer _SyncTimer; + private static bool _Initialized; + private static int _NumStreams; + private static readonly Object _Mutex = new object(); + private int _ByteCount = 4; + private float _Volume = 1f; + private float _VolumeMax = 1f; + + private EStreamAction _AfterFadeAction; + private CFading _Fading; + + private static CPortAudio.SPaHostApiInfo _ApiInfo; + private static CPortAudio.SPaDeviceInfo _OutputDeviceInfo; + private IntPtr _Ptr = new IntPtr(0); + + private Closeproc _Closeproc; + private CPortAudio.PaStreamCallbackDelegate _PaStreamCallback; + private int _StreamID; + private IAudioDecoder _Decoder; + private float _BytesPerSecond; + private bool _NoMoreData; + + private bool _FileOpened; + + private bool _Waiting; + private bool _Skip; + + private bool _Loop; + private float _Duration; + private float _CurrentTime; + private float _TimeCode; + + private bool _Paused; + + private CRingBuffer _Data; + private float _SetStart; + private float _Start; + private bool _SetLoop; + private bool _SetSkip; + private bool _Terminated; + + private readonly Thread _DecoderThread; + + private AutoResetEvent _EventDecode = new AutoResetEvent(false); + + private readonly Object _LockData = new Object(); + private readonly Object _LockSyncSignals = new Object(); + + public CPortAudioStream() + { + _SyncTimer = new CSyncTimer(0f, 1f, 0.02f); + _DecoderThread = new Thread(_Execute) {Name = "PortAudio Decode"}; + } + + ~CPortAudioStream() + { + Dispose(); + } + + public void Free(Closeproc closeProc, int streamID) + { + _Closeproc = closeProc; + _StreamID = streamID; + _Terminated = true; + } + + public float Length + { + get + { + if (_FileOpened) + return _Duration; + + return 0f; + } + } + + public bool Finished + { + get + { + lock (_LockData) + { + return _NoMoreData && _Data.BytesNotRead == 0L && _SyncTimer.Time >= _Duration; + } + } + } + + public float Volume + { + get { return _Volume * 100f; } + set + { + lock (_LockData) + { + _Volume = value / 100f; + if (_Volume < 0f) + _Volume = 0f; + + if (_Volume > 1f) + _Volume = 1f; + } + } + } + + public float VolumeMax + { + get { return _VolumeMax * 100f; } + set + { + lock (_LockData) + { + _VolumeMax = value / 100f; + if (_VolumeMax < 0f) + _VolumeMax = 0f; + + if (_VolumeMax > 1f) + _VolumeMax = 1f; + } + } + } + + public float Position + { + get + { + lock (_LockData) + { + if (Finished) + _SyncTimer.Pause(); + //TODO: Why not use Decoder.GetPosition()? + return _SyncTimer.Time; + } + } + } + + public bool Paused + { + get { return _Paused; } + set + { + _Paused = value; + lock (_LockData) + { + if (_Paused) + _SyncTimer.Pause(); + else + { + _SyncTimer.Resume(); + _EventDecode.Set(); + } + } + } + } + + public void Fade(float targetVolume, float fadeTime) + { + _Fading = new CFading(_Volume, targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Nothing; + } + + public void FadeAndPause(float targetVolume, float fadeTime) + { + Fade(targetVolume, fadeTime); + } + + public void FadeAndClose(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) + { + _Closeproc = closeProc; + _StreamID = streamID; + Fade(targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Close; + } + + public void FadeAndStop(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) + { + _Closeproc = closeProc; + _StreamID = streamID; + Fade(targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Stop; + } + + public void Play() + { + Paused = false; + _AfterFadeAction = EStreamAction.Nothing; + lock (_Mutex) + { + _ErrorCheck("StartStream", CPortAudio.Pa_StartStream(_Ptr)); + } + } + + public void Stop() + { + lock (_Mutex) + { + _ErrorCheck("StopStream (playback)", CPortAudio.Pa_StopStream(_Ptr)); + } + Skip(0f); + } + + public bool Loop + { + get { return _SetLoop; } + set { _SetLoop = value; } + } + + public int Open(string fileName) + { + if (_FileOpened) + return -1; + + if (!File.Exists(fileName)) + return -1; + + if (_FileOpened) + return -1; + + _Decoder = new CAudioDecoderFFmpeg(); + _Decoder.Init(); + + try + { + lock (_Mutex) + { + if (!_Initialized) + { + if (_ErrorCheck("Initialize", CPortAudio.Pa_Initialize())) + return -1; + _Initialized = true; + + int hostApi = _ApiSelect(); + _ApiInfo = CPortAudio.PaGetHostApiInfo(hostApi); + _OutputDeviceInfo = CPortAudio.PaGetDeviceInfo(_ApiInfo.DefaultOutputDevice); + if (_OutputDeviceInfo.DefaultLowOutputLatency < 0.1) + _OutputDeviceInfo.DefaultLowOutputLatency = 0.1; + } + } + + _PaStreamCallback = _ProcessNewData; + } + catch (Exception) + { + _Initialized = false; + CLog.LogError("Error Init PortAudio Playback"); + return -1; + } + + _Decoder.Open(fileName); + _Duration = _Decoder.GetLength(); + + SFormatInfo format = _Decoder.GetFormatInfo(); + if (format.SamplesPerSecond == 0) + return -1; + + _ByteCount = 2 * format.ChannelCount; + _BytesPerSecond = format.SamplesPerSecond * _ByteCount; + _CurrentTime = 0f; + _SyncTimer.Time = _CurrentTime; + + var stream = new SAudioStreams(0); + + var data = new IntPtr(0); + + var outputParams = new CPortAudio.SPaStreamParameters + { + ChannelCount = format.ChannelCount, + Device = _ApiInfo.DefaultOutputDevice, + SampleFormat = CPortAudio.EPaSampleFormat.PaInt16, + SuggestedLatency = _OutputDeviceInfo.DefaultLowOutputLatency + }; + + var bufsize = (uint)CConfig.AudioBufferSize; + lock (_Mutex) + { + _ErrorCheck("OpenDefaultStream (playback)", CPortAudio.Pa_OpenStream( + out _Ptr, + IntPtr.Zero, + ref outputParams, + format.SamplesPerSecond, + bufsize, + CPortAudio.EPaStreamFlags.PaNoFlag, + _PaStreamCallback, + data)); + } + + stream.Handle = _Ptr.ToInt32(); + + if (stream.Handle != 0) + { + _NumStreams++; + _Paused = true; + _Waiting = true; + _FileOpened = true; + _Data = new CRingBuffer(_Bufsize); + _NoMoreData = false; + _DecoderThread.Priority = ThreadPriority.Normal; + _DecoderThread.Name = Path.GetFileName(fileName); + _DecoderThread.Start(); + + return stream.Handle; + } + return -1; + } + + public void Skip(float time) + { + lock (_LockSyncSignals) + { + _SetStart = time; + _SetSkip = true; + _Waiting = true; + } + } + + #region Threading + private void _DoSkip() + { + lock (_LockData) + { + _Decoder.SetPosition(_Start); + _CurrentTime = _Start; + _TimeCode = _Start; + _Data = new CRingBuffer(_Bufsize); + _NoMoreData = false; + _EventDecode.Set(); + _Waiting = false; + _SyncTimer.Time = _Start; + } + } + + private void _Execute() + { + while (!_Terminated) + { + if (_EventDecode.WaitOne(10)) + { + lock (_LockSyncSignals) + { + if (_SetSkip) + { + _Skip = true; + _EventDecode.Set(); + _Waiting = true; + } + + _SetSkip = false; + + _Start = _SetStart; + _Loop = _SetLoop; + } + + if (_Skip) + { + _DoSkip(); + _Skip = false; + } + + if (!_Waiting) + { + _DoDecode(); + _Update(); + } + } + } + + _DoFree(); + } + + private void _DoDecode() + { + if (!_FileOpened) + return; + + if (_Paused) + return; + + if (_Terminated) + return; + + float timecode; + byte[] buffer; + + bool doIt = false; + lock (_LockData) + { + if (!_Skip && _Beginrefill > _Data.BytesNotRead) + doIt = true; + } + + if (!doIt) + return; + + _Decoder.Decode(out buffer, out timecode); + + if (buffer == null) + { + if (_Loop) + { + lock (_LockSyncSignals) + { + _CurrentTime = 0f; + _Start = 0f; + } + + _DoSkip(); + } + else + _NoMoreData = true; + return; + } + + lock (_LockData) + { + _Data.Write(buffer); + _TimeCode = timecode; + if (_Data.BytesNotRead < _Beginrefill) + { + _Waiting = false; + _EventDecode.Set(); + } + else + _Waiting = true; + } + } + + private void _DoFree() + { + if (_Initialized) + { + Stop(); + _NumStreams--; + if (_NumStreams == 0) + { + lock (_Mutex) + { + CPortAudio.Pa_Terminate(); + _Initialized = false; + } + } + _Decoder.Close(); + } + + _Closeproc(_StreamID); + } + #endregion Threading + + #region Callbacks + private CPortAudio.EPaStreamCallbackResult _ProcessNewData( + IntPtr input, + IntPtr output, + uint frameCount, + ref CPortAudio.SPaStreamCallbackTimeInfo timeInfo, + CPortAudio.EPaStreamCallbackFlags statusFlags, + IntPtr userData) + { + var buf = new byte[frameCount * _ByteCount]; + + if (_Paused) + { + try + { + Marshal.Copy(buf, 0, output, (int)frameCount * _ByteCount); + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + } + return CPortAudio.EPaStreamCallbackResult.PaContinue; + } + + lock (_LockData) + { + if (_NoMoreData || _Data.BytesNotRead >= buf.Length) + { + _Data.Read(buf); + + var b = new byte[2]; + for (int i = 0; i < buf.Length; i += _ByteCount) + { + b[0] = buf[i]; + b[1] = buf[i + 1]; + + b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); + buf[i] = b[0]; + buf[i + 1] = b[1]; + + if (_ByteCount == 4) + { + b[0] = buf[i + 2]; + b[1] = buf[i + 3]; + + b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); + buf[i + 2] = b[0]; + buf[i + 3] = b[1]; + } + } + } + + if (_Data.BytesNotRead < _Beginrefill) + { + _EventDecode.Set(); + _Waiting = false; + } + else + _Waiting = true; + + float latency = buf.Length / _BytesPerSecond + CConfig.AudioLatency / 1000f; + float time = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; + + if (!_NoMoreData) + _CurrentTime = _SyncTimer.Update(time); + } + + try + { + Marshal.Copy(buf, 0, output, (int)frameCount * _ByteCount); + } + catch (Exception e) + { + CLog.LogError("Error PortAudio.StreamCallback: " + e.Message); + } + + return CPortAudio.EPaStreamCallbackResult.PaContinue; + } + #endregion Callbacks + + private bool _ErrorCheck(String action, CPortAudio.EPaError errorCode) + { + if (errorCode != CPortAudio.EPaError.PaNoError) + { + if (errorCode == CPortAudio.EPaError.PaStreamIsNotStopped) + return false; + + CLog.LogError(action + " error (playback): " + CPortAudio.PaGetErrorText(errorCode)); + if (errorCode == CPortAudio.EPaError.PaUnanticipatedHostError) + { + CPortAudio.SPaHostErrorInfo errorInfo = CPortAudio.PaGetLastHostErrorInfo(); + CLog.LogError("- Host error API type: " + errorInfo.HostApiType); + CLog.LogError("- Host error code: " + errorInfo.ErrorCode); + CLog.LogError("- Host error text: " + errorInfo.ErrorText); + } + return true; + } + + return false; + } + + private int _ApiSelect() + { + if (!_Initialized) + return 0; + + int selectedHostApi = CPortAudio.Pa_GetDefaultHostApi(); + int apiCount = CPortAudio.Pa_GetHostApiCount(); + for (int i = 0; i < apiCount; i++) + { + CPortAudio.SPaHostApiInfo apiInfo = CPortAudio.PaGetHostApiInfo(i); + if ((apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaDirectSound) + || (apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaALSA)) + selectedHostApi = i; + } + return selectedHostApi; + } + + private void _Update() + { + if (_Fading != null) + { + bool finished; + _Volume = _Fading.GetValue(out finished); + if (finished) + { + switch (_AfterFadeAction) + { + case EStreamAction.Close: + _Terminated = true; + break; + case EStreamAction.Stop: + Stop(); + break; + case EStreamAction.Pause: + Paused = true; + break; + } + _Fading = null; + } + } + } + + public void Dispose() + { + if (_EventDecode != null) + { + _EventDecode.Close(); + _EventDecode = null; + GC.SuppressFinalize(this); + } + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index 484b0d6b..33ef285b 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -17,10 +17,8 @@ using System.Collections.ObjectModel; using SlimDX.DirectSound; -using SlimDX.Multimedia; using System; using System.Collections.Generic; -using System.Threading; using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.DirectSound @@ -53,7 +51,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound { using (var ds = new DirectSoundCapture(dev.DriverGuid)) { - var device = new CRecordDevice(id,dev.DriverGuid.ToString(), dev.Description, ds.Capabilities.Channels); + var device = new CRecordDevice(id, dev.DriverGuid.ToString(), dev.Description, ds.Capabilities.Channels); _Devices.Add(device); @@ -229,184 +227,5 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound } } } - - private class CSampleDataEventArgs : EventArgs - { - public CSampleDataEventArgs(byte[] data, Guid guid) - { - Data = data; - Guid = guid; - } - - public byte[] Data { get; private set; } - public Guid Guid { get; private set; } - } - - private class CSoundCardSource : IDisposable - { - private volatile bool _Running; - private readonly int _BufferSize; - private CaptureBuffer _CaptureBuffer; - private CaptureBufferDescription _BufferDescription; - private DirectSoundCapture _CaptureDevice; - private readonly WaveFormat _WaveFormat; - private Thread _CaptureThread; - private List _Notifications; - private int _BufferPortionCount; - private int _BufferPortionSize; - private WaitHandle[] _WaitHandles; - private double _SampleRate; - private readonly Guid _Guid; - private readonly short _Channels; - - public CSoundCardSource(Guid guid, short channels) - { - _Guid = guid; - _Channels = channels; - _WaveFormat = new WaveFormat(); - SampleRateKhz = 44.1; - _BufferSize = 2048; - } - - public event EventHandler SampleDataReady = delegate { }; - - public double SampleRateKhz - { - get { return _SampleRate; } - - set - { - _SampleRate = value; - - if (_Running) - Restart(); - } - } - - public void Start() - { - if (_Running) - throw new InvalidOperationException(); - - if (_CaptureDevice == null) - _CaptureDevice = new DirectSoundCapture(_Guid); - - _WaveFormat.FormatTag = WaveFormatTag.Pcm; // Change to WaveFormatTag.IeeeFloat for float - _WaveFormat.BitsPerSample = 16; // Set this to 32 for float - _WaveFormat.BlockAlignment = (short)(_Channels * (_WaveFormat.BitsPerSample / 8)); - _WaveFormat.Channels = _Channels; - _WaveFormat.SamplesPerSecond = (int)(SampleRateKhz * 1000D); - _WaveFormat.AverageBytesPerSecond = - _WaveFormat.SamplesPerSecond * - _WaveFormat.BlockAlignment; - - _BufferPortionCount = 2; - - _BufferDescription.BufferBytes = _BufferSize * sizeof(short) * _BufferPortionCount * _Channels; - _BufferDescription.Format = _WaveFormat; - _BufferDescription.WaveMapped = false; - - _CaptureBuffer = new CaptureBuffer(_CaptureDevice, _BufferDescription); - - _BufferPortionSize = _CaptureBuffer.SizeInBytes / _BufferPortionCount; - _Notifications = new List(); - - for (int i = 0; i < _BufferPortionCount; i++) - { - var notification = new NotificationPosition {Offset = _BufferPortionCount - 1 + (_BufferPortionSize * i), Event = new AutoResetEvent(false)}; - _Notifications.Add(notification); - } - - _CaptureBuffer.SetNotificationPositions(_Notifications.ToArray()); - _WaitHandles = new WaitHandle[_Notifications.Count]; - - for (int i = 0; i < _Notifications.Count; i++) - _WaitHandles[i] = _Notifications[i].Event; - - _CaptureThread = new Thread(_DoCapture) {Name = "DirectSoundCapture", IsBackground = true}; - - _Running = true; - _CaptureThread.Start(); - } - - public void Stop() - { - _Running = false; - - if (_CaptureThread != null) - { - _CaptureThread.Join(); - _CaptureThread = null; - } - - if (_CaptureBuffer != null) - { - _CaptureBuffer.Dispose(); - _CaptureBuffer = null; - } - - if (_Notifications != null) - { - foreach (NotificationPosition notification in _Notifications) - notification.Event.Close(); - - _Notifications.Clear(); - _Notifications = null; - } - } - - public void Restart() - { - Stop(); - Start(); - } - - private void _DoCapture() - { - int bufferPortionSamples = _BufferPortionSize / sizeof(byte); - - // Buffer type must match this.waveFormat.FormatTag and this.waveFormat.BitsPerSample - var bufferPortion = new byte[bufferPortionSamples]; - - _CaptureBuffer.Start(true); - - while (_Running) - { - int bufferPortionIndex = WaitHandle.WaitAny(_WaitHandles); - - _CaptureBuffer.Read( - bufferPortion, - 0, - bufferPortionSamples, - _BufferPortionSize * Math.Abs((bufferPortionIndex - 1) % _BufferPortionCount)); - - SampleDataReady(this, new CSampleDataEventArgs(bufferPortion, _Guid)); - } - - _CaptureBuffer.Stop(); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - // ReSharper disable InconsistentNaming - protected void Dispose(bool disposing) - // ReSharper restore InconsistentNaming - { - if (disposing) - { - Stop(); - - if (_CaptureDevice != null) - { - _CaptureDevice.Dispose(); - _CaptureDevice = null; - } - } - } - } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs new file mode 100644 index 00000000..695cd5a3 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs @@ -0,0 +1,16 @@ +using System; + +namespace Vocaluxe.Lib.Sound.Record.DirectSound +{ + public class CSampleDataEventArgs : EventArgs + { + public readonly byte[] Data; + public readonly Guid Guid; + + public CSampleDataEventArgs(byte[] data, Guid guid) + { + Data = data; + Guid = guid; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs new file mode 100644 index 00000000..cb99d629 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using SlimDX.DirectSound; +using SlimDX.Multimedia; + +namespace Vocaluxe.Lib.Sound.Record.DirectSound +{ + public class CSoundCardSource : IDisposable + { + private volatile bool _Running; + private readonly int _BufferSize; + private CaptureBuffer _CaptureBuffer; + private CaptureBufferDescription _BufferDescription; + private DirectSoundCapture _CaptureDevice; + private readonly WaveFormat _WaveFormat; + private Thread _CaptureThread; + private List _Notifications; + private int _BufferPortionCount; + private int _BufferPortionSize; + private WaitHandle[] _WaitHandles; + private double _SampleRate; + private readonly Guid _Guid; + private readonly short _Channels; + + public CSoundCardSource(Guid guid, short channels) + { + _Guid = guid; + _Channels = channels; + _WaveFormat = new WaveFormat(); + SampleRateKhz = 44.1; + _BufferSize = 2048; + } + + public event EventHandler SampleDataReady = delegate { }; + + public double SampleRateKhz + { + get { return _SampleRate; } + + set + { + _SampleRate = value; + + if (_Running) + Restart(); + } + } + + public void Start() + { + if (_Running) + throw new InvalidOperationException(); + + if (_CaptureDevice == null) + _CaptureDevice = new DirectSoundCapture(_Guid); + + _WaveFormat.FormatTag = WaveFormatTag.Pcm; // Change to WaveFormatTag.IeeeFloat for float + _WaveFormat.BitsPerSample = 16; // Set this to 32 for float + _WaveFormat.BlockAlignment = (short)(_Channels * (_WaveFormat.BitsPerSample / 8)); + _WaveFormat.Channels = _Channels; + _WaveFormat.SamplesPerSecond = (int)(SampleRateKhz * 1000D); + _WaveFormat.AverageBytesPerSecond = + _WaveFormat.SamplesPerSecond * + _WaveFormat.BlockAlignment; + + _BufferPortionCount = 2; + + _BufferDescription.BufferBytes = _BufferSize * sizeof(short) * _BufferPortionCount * _Channels; + _BufferDescription.Format = _WaveFormat; + _BufferDescription.WaveMapped = false; + + _CaptureBuffer = new CaptureBuffer(_CaptureDevice, _BufferDescription); + + _BufferPortionSize = _CaptureBuffer.SizeInBytes / _BufferPortionCount; + _Notifications = new List(); + + for (int i = 0; i < _BufferPortionCount; i++) + { + var notification = new NotificationPosition { Offset = _BufferPortionCount - 1 + (_BufferPortionSize * i), Event = new AutoResetEvent(false) }; + _Notifications.Add(notification); + } + + _CaptureBuffer.SetNotificationPositions(_Notifications.ToArray()); + _WaitHandles = new WaitHandle[_Notifications.Count]; + + for (int i = 0; i < _Notifications.Count; i++) + _WaitHandles[i] = _Notifications[i].Event; + + _CaptureThread = new Thread(_DoCapture) { Name = "DirectSoundCapture", IsBackground = true }; + + _Running = true; + _CaptureThread.Start(); + } + + public void Stop() + { + _Running = false; + + if (_CaptureThread != null) + { + _CaptureThread.Join(); + _CaptureThread = null; + } + + if (_CaptureBuffer != null) + { + _CaptureBuffer.Dispose(); + _CaptureBuffer = null; + } + + if (_Notifications != null) + { + foreach (NotificationPosition notification in _Notifications) + notification.Event.Close(); + + _Notifications.Clear(); + _Notifications = null; + } + } + + public void Restart() + { + Stop(); + Start(); + } + + private void _DoCapture() + { + int bufferPortionSamples = _BufferPortionSize / sizeof(byte); + + // Buffer type must match this.waveFormat.FormatTag and this.waveFormat.BitsPerSample + var bufferPortion = new byte[bufferPortionSamples]; + + _CaptureBuffer.Start(true); + + while (_Running) + { + int bufferPortionIndex = WaitHandle.WaitAny(_WaitHandles); + + _CaptureBuffer.Read( + bufferPortion, + 0, + bufferPortionSamples, + _BufferPortionSize * Math.Abs((bufferPortionIndex - 1) % _BufferPortionCount)); + + SampleDataReady(this, new CSampleDataEventArgs(bufferPortion, _Guid)); + } + + _CaptureBuffer.Stop(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + // ReSharper disable InconsistentNaming + protected void Dispose(bool disposing) + // ReSharper restore InconsistentNaming + { + if (disposing) + { + Stop(); + + if (_CaptureDevice != null) + { + _CaptureDevice.Dispose(); + _CaptureDevice = null; + } + } + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index e97608d2..4087a99e 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -212,6 +212,9 @@ + + + @@ -253,6 +256,8 @@ + + From f0fca0baf7797cf840b3141ef4d7b57e94748270 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 15:04:05 +0100 Subject: [PATCH 005/116] Fix compile warning --- GstreamerHelper/GstreamerHelper.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj index eb858c8e..cf79bf57 100644 --- a/GstreamerHelper/GstreamerHelper.vcxproj +++ b/GstreamerHelper/GstreamerHelper.vcxproj @@ -95,8 +95,7 @@ - - + false bin\$(Configuration).$(Platform)\ $(MSBuildProjectDirectory)\x86\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x86\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x86\include\glib-2.0;$(MSBuildProjectDirectory)\x86\include;$(IncludePath) $(MSBuildProjectDirectory)\x86\lib;$(LibraryPath) @@ -109,6 +108,7 @@ $(MSBuildProjectDirectory)\x64\lib;$(LibraryPath) ..\CheckingRules.ruleset obj\$(Configuration).$(Platform)\ + false false From 5316d30a7df06d1bba38e225bc39c815a7cfbe0c Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 17:15:13 +0100 Subject: [PATCH 006/116] Use PortAudio-Sharp bindings for easier updates Use COSFunctions for OS-specific stuff Add dll directories on startup (could be done in the modules itself, but this way it avoids all trouble) --- Output/PortAudioSharp.dll | Bin 0 -> 49152 bytes Output/PortAudioSharp.dll.config | 4 + .../x64/{portaudio_x64.dll => PortAudio.dll} | Bin .../x86/{portaudio_x86.dll => PortAudio.dll} | Bin Vocaluxe/COSFunctions.cs | 89 +++ Vocaluxe/CProgrammHelper.cs | 15 + .../GstreamerSharp/CGstreamerSharpAudio.cs | 5 +- .../Playback/PortAudio/CPortAudioStream.cs | 80 +-- Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs | 558 ------------------ .../Record/PortAudio/CPortAudioRecord.cs | 73 ++- Vocaluxe/Program.cs | 16 +- Vocaluxe/Vocaluxe.csproj | 6 +- 12 files changed, 196 insertions(+), 650 deletions(-) create mode 100644 Output/PortAudioSharp.dll create mode 100644 Output/PortAudioSharp.dll.config rename Output/x64/{portaudio_x64.dll => PortAudio.dll} (100%) rename Output/x86/{portaudio_x86.dll => PortAudio.dll} (100%) create mode 100644 Vocaluxe/COSFunctions.cs delete mode 100644 Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs diff --git a/Output/PortAudioSharp.dll b/Output/PortAudioSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..f48cfc2ac62c98556e0b1361c698e74543b6606b GIT binary patch literal 49152 zcmeHw3wT^rwf{b69+^y5dE~GegO)tv$&>XCU2CT^*lqRBv0S z)FvyWb`8z%@oIZQ*>kI`Dy7~AN>Wq5`Dv3sPJFed&(Q5Ah3(fLODWL#38~d@5JYeQ zLpO=YoVCzXl?3rtyH$^ugs zn6ki>1*R-8Wq~OROj%&c0{zYEQrilLYeStp zIn!>hRVr?`N0f>#dbK?o#o62*wE>+*keoVj7ri#LWTrie<92vSl}??REEQ^>MK;uj zmWI^@<~(la>OmbtE5dfJf!PYlLSK9g^?)i_T@}Tg1X%Vc#dNk^6Ub|HnuMwI&3@i# zK{nS4;LHX%)gBd1b3}le8XBE8K}c_Ll77A|-WJcz1?s%ar@1iTurtrc6V7};@0@~c zBV^yTHg_tr&H@0hKJpUaePhi8UUCPNCN}}(+F5KNfNo`j1DkmrUMyMK#aU8HrHKMm zuNUlI!a2>CZb~j@EptIIeWHZBqR=NXh|}ShNTyJrZBDRZT0}RDtx3*=NK;TLsqT(~ zQsQkFv^55`kk)9rC-M&EUoI7E-crf4XKit3nU5sD0yiqEjw0?@p*ks2QXOfYHANox zGhTJX8y%?*19W^fz_!lZa@5!k%f#)*_R}TN4wlTIyUEJ|q&w|rkk_sUM?6agr=|T& z(%l}?PrnR(7uXEWBV&a>OQ|Q_KQ(8Cz?B(qUVq)?%Lp-D|u~u$v3o1 z(*8;?7Cm6wIrw>W49yDL_9&AvoB5!(liJWA-oB{$D$LmMqB-`sq%$!ucY=@qYwh;) zSeg49wjCEwQ9Cq-JFl=E9;;*$8H+Qi36J3}4{2l!LSfsTZb7~a^6k|COX}>#G0gt3 zdkW~e)lm7`_Vr-I8>$v>sA%s-cADM%7PQi;u5567Aa$&=vEq94+B#O5a9<~craJq@ z1}r_c(+Lg7D%;l}kyceSURYHTU4Dmcx7R?|7%D|0u0bh#lzCCqzSa|mRY;Y3$4~%f zx{}FgFR9z9VS0cH_cc`9xIynHsP{@ryx0JWZVr2^8)LfN!6ayvWwTYxx35D}CU#j^0MSKXvE6x) zHdT%a14AE$T_lf|N9~3jMkp@I7ab4}Su(>t8^uDps~gx~>?yLA(`T+{U*I$0B?s(~ z+XKlkO&+D0wPnJ|XMb?w#EKp5n?Z(Gr6E(NMt7pk*TZG)zzDfFXx=XJ=mtUFmo)D} z_SH9g<091hGjIx|hD9@%+6q&R_usYcXmKxj8HB zSUlEv;j~!A@*hSQshLaT>W9#Q8C_eaUaZF~v+Aq{DvF2dJHp|HrEz#>J?2Zx;`8c4 zFV@$iFLj~tSPF&eLZPwCC2bt*lT^FT=mkK=`bn`XbLT_X5h{q(cSLGLW7ufytcw_p zU}%+*h*lXfDkJulbhgn=zRGZIq@dGwe=P>9v+Ke&k!(%0!5-x_t!Rhk^$a~Vx@e2- z)`mE`FsmVwwoqsn7tuO}c1eMDk3GuiecGJRskXZdTVAMl*M_5w6aoR-2)fInM*ANK}0lIr$%A(a6G!C zA}TS+q6Uszc|PKVDELD*-4N^bT(%@MhOi`T&l;m1mJO+XREPx_x)Cvioh=Y{wgUJo z*AlaG)!E`fOA-Oen4Nn$iaXm-;8e3bJ)-&IhYoxW3p%_$pgDji)ibsd$JZ)?tQogY z%2Efd$x2;&;iRnbFQ~~%b=^8COWimr>tpYnl%=pcPtvdBmrcrg89a58QVKpa3G2I9 zc_v|vV-`=sdZJ@eR_)?RS>vZn%36(>azb4#+5_6>&>P`zwt{cbxjlcwHWbfe!MEWi z2xr3%>W(`-bekxnvS=QTZ;QVM1T;&>f4=UpdNp)oH-T>PIO@h^S*xeblCyQnI67Jt zy@ku|GWB&%w8T&K! zVt;I7e(e8Iw4Wan`y)(8l#g+akD(o2cD7`(3&h7b3+U>GhG2|Ari{0_UfU?j}}h62sz z03%hvou%6i#fKE1$HUF0;=_&4_zVN`jjz zw1jx_dCal4`e47cUTmST6Z1G}piTOu;b5r%nZD?^iHO%GaZ=MJ5gJI^C8j62s97Yq zZz?p4c$sFA+-!z}c{B?vr)k!1X_ia{bGm2Vo6F35-p_nnUt34eQlz<`EVO`l^1oo1 zVqPhgr33zMG@DjMR-HiS!-S=-f2m3uY*gN&476F&*)C_s{p~3h8%BmW4^%|kgAw>KS2$8O<>hc zCQgxNU~QDU#o^A}#mIUQiO(~4i)DG-w#${n95$1~k2FM|rqjfJq!FOg-hLz#pwsw% zBom->BpO>x#1f!$SQ?uHbkDw&X=u&j0}*e3X1>wv&mvUUHaloO(p)R*`zP__BdDo3M9^wb zBfNs6@7G1dt4rL%)Fnc7ZLbQ}MVgE0?9Bz@W$Gf?n+Wu%wi?qfLF(oNRg&cP6jTz| zD(ixCi)1gdlOiK5qURHx)2~91y0&wIb&%%1y-)}7GIfybg)36zjzS%Dbl+q|Jd?=` zFeVeBy5t);%vd44$dzRGJB8|rm$4ejEhda$9=ke*t0-FHwDNl@NL|}-uqx8r=L=O4 zFVjU;@7@3QY9Ec&_-N_J7G2-FRbH z!Xhn^307!C5xg4;$$PGGo_X~hc4&-3I;d#i1>k8h+2y&hZzQK1RnH99h2=75x+Teq zFn2|{42&-SRz<_IOAUhoN#jN9LZ}PpU)~cbm_pS?=5#E^MPxX)0>m+C4l(#(0DEH* z_SPco6+VVgiY*>R=;Vb`OOY)XO07g8gi@!0jX+~;Ui`$o|LD3Te)_xReWW;kVmr&nPvm&< z6GzJ5pow@Jv<#uyphc)8ej+UxKM^mpJ8Lyqg%Lk-^!>Vscy)i9|fe;|HZ6mQ`F{*$nCbQp0KDnuBu3W<4* z2SJJKF-#}yF-ZnNg+1nMme%KWROM|JP>s!kJhNGlSF~9OPj42&)0+jU-eSgl@n%6v zaI+v@ezPFQn{-U^7xN{HG)cil znz*+}Ge6lP{ddbNS)|#{@{2S%-Xcwl`SVYZ;>C=l;9^F+%=9DKTg;@$9e!}|5{@tQ z7Bl@GJ^Az#_x5g4bw2?4h7S|Gi(sj0%#$kKZLY>ti$~k{kO3NbHHK&NvM|8pv%%Ru z4@VX79;ro4*S;5}+xG$7LR9OqRjZNZ({qZ}6^jy;_aX{9U!?_S6blm7I%Dc;=$wXj zhuSl!Zporh`)iP1U(XWz*@`ScJV1>$whw}|IC|9(Ibl;ST&`SIfLc*huF8&9;H`(6 zNKLe+qJ0ONi3Szh1J4E6$yvp1C(6f>=b>`lhmiUU`T+aaw#||kjpDevjl^)F9Bs6( zU|;2~w*3l}a9n_6xW}y&ev>WN*~g;IZi^6F^u4gYUXHf9%Y=#(0gjO7(m6WEy-28S zmHLj>2)D)EYcw5CMlYcFRy=Jz7Hym6-lgf)w!FvT(QDjaYx;D1baOy{hC8p4jc>y< zU7Rg^J$3FSnvS0j|Ey<+nu&IxA6-vSY=<|9O4wl=HDV5-#m(-=g$iT9 zfAkAH$6$=Rg$iSA2lW{2@StuF?9fvv4Ldxg>99j@fIiKg8JB*+4j6E+wm|#gZ!(T^ zCN`hGeLX>O^E*W&n!l3@vBKMIeoCll{;onbtuEfKf>qJ{3qd`mFYdM7h9|FgChH|A zuJ;D7-iuj-9_VKG4zJ#e3e;BjNw3~Z3RK-`-ep|tjahtRr|Ik0i~kq-u0Lj%QlU3y z)2rA$bo#PFHLdQ;g^EtUxQ&y*Blc+6aYormy;K>Mw1Re%b`@E_+4tW~>vqBDoE0#5T7h@z#a?c(zf=H5t=r zvgb`K7I5F<=S{*a_;B&_raRdlXx8rz;ZEdM4CP6lFEy=x69oQS&zH_emGXSaueoX*l6d#9U)+mPbNjS-&TNYYd-p@@ou=CG;a9S;ITg&l=c0P`AnEXs$d! zz5>G@kMfZ|UKSexrK-+qKY%oM5P->PP-;GT3u4|=gFW!}AU^Ofk@A|wl@vhG+ z6YmO7$GbG2e_0Wr)0X}vNq|nn`j;dDI<4%-%>g=1?q8CS?%9#~l6aaVcP`C<3uQ9` zUOX)-af4p&q0!$huOyykJIlw@$!jnPf=>iUZfa<1$Q^<~%)3IQ zxfc|SCq*-DiQoel(t_2vBL$x$&%9JW$~;cm*w4&K`>>1$eZoKQ6Ym4U^_%gUM_hDbYZ){2W)Kj zUqFI0Pe{F#=OHXJ>0U3)UP$POs(7#eD(Hp1-X1+(g#Y#DA#?r*pNIHuDc$@19&qoc zl!g=b{^0WvzawRp?SK+0qg1fd2;9m(50Nn|7fASwlLrzMGl2xQevWN$>;EEfZv9M) zw*E5jmV5~^X5YVGvb)gaF)@nX?4?WkdB|5pU?&B>T##j3Of+yWv!hgLLIA2P3IWLT z-YpS19S(?`4hKl}wlU_5!vRu)*ImTRhXdqzYmn$M*IlAvcC{Z4uxc+HkY-F04*0w> z;egL86AlPZhXb^#zwHO;G_k+!2k5l7zwHO;G`_#>2k0CLKimk=IV}FO5z;;TGG7uV zkQBUjBkqL>%ujah_IJxGdAEe^EFUJ2XQnKrk7JN2Byi6S=d%La_2|OF2qx&Y)Yax#K*dt{I7?X+6#AhQU2SXU* zWvoWB_iTiDgfMUOHfLwIRK{uL_f(LQXCtHqpN$YN(^HbYXCqSNZ;CIto|*V!6;`#A z#}`MvF0`kl3wmKZSMu8bC13PziBbwtkNW1n{N`Q@>D%$m_8iXT(}Nw`(>Z6v?N8_Y z-1c;8Anh(m4(9qDH=F5OlH8ega~Wso+~plh`QMV{+L3I2#7&<&lpe{usqB*EwvoPU zrvHNU;a+Eddg$D~l`B(c^q+C&vQ;ZiPcJ=d)x3$7jSS^8gK4k!o^;+uqrA_y&MyAX zHcz#C%HC6c!WsJaH80onoWI863)T2c!}kCehclM0T)vW&h{^)~Xtq-GuEO7Jn4{Eq zEAl;gH#4+1M~QE|LaEE~AYpKv&H!!Rh8^8qNY4U(EAF=Dt;zB|art0*uy&ny zY<6V`=$}tnp&CFy7WdH#>J^qgh2xTX0AJjLDxApG27FP4{LMw&(WyATGx42;FU#_~ z%%owYe9egMprr0uRIRjMX2;bgdmUg8U{viE%6_4Y2z(P@jru?K7r_mOUIy49@B+ZN z%7$3#vIyzp0`C%dEJ|);oSJW`BK(ZN1v6uKc<>H^w+Q^Qz%ysfpA}b|1-?e$bpnqG z{DQ#m3w%~!yq@y&1in(>!TMeGarJJ%sJf$`?Rie%sSV7ZDe!W@I(2nJt|6*EA(Tf2 zJ|Xm{L4P+QQQE4ZQA!ECMBvqcb?SYMEc+3mJSgx_0$UT5UjrCddlKyLy9M4P@S_6n z5O}}9?*pEvo=vc>x+a$G6!;pzI`#dgTti${HPcp01a>u3XScvF2<6)Xe|u(Vy_iR{*tF2*j0k96l|M%onY$(+o{F{ER8a%n|rxnDqv0?2p_C%CNvUM&5_~ zdn0Va@yLe&za#MH!u>;pZLp)%zbVSPv^L%HPektn<%>~jdnn4XKNk3$P@)y2H&&3o zxPtmSE2v>}#a96*YSS9DPOU*})B3d@ty628s6m%4$m|^da>a7BbNq(_e*+j*Lsc)} zE&E&*^RJWqn*c5KmZ~mLzEAp$pH`iVxk(F0)zc#RXMxkEtpU){7b*L=z^4Ox{!8-lYSx$#IIo)8771Kgy#e$t zq3@_h%cBnHJI4=JUtsSXzZ#H~GeG%gNbVf}oWL&%ykFo$0>2~hhXVgEpjYZI)mNfa zxQ4JsV6(u*0($^G$^A8NfXtNwuNU|sfu9EST6JH|b&z>b;J*p{oxsZJq|X+3n!vLK z?iA<wwH^vr(&qut{Zm?H`w*Xrz z7;EUkp7bs};bhT`YAP6y;iWFORMLqF@v$ybJbD5++DzK73_$*IJ#KPQ{$(z zz9Z@&uv64q1k){Bpl&rhwya$}i5QtJ>#O)Wu%`{?Ry+jkIgO!ZcLDqS*_6~RTco}w zm~Po3^$mluWsB6m2}XO~1?*3P9Z|PdEQa|W!p(u#vJUl_V7g^X)t?NHEnB8qx+tk@ zSf=I}j5RD%a|P2iEK}zSrnRh4mkOq5fOJ)js~eNkVn0&_Y<}!l>P)H^-g&X#Atut; z+moAPe*|_d1AF}8jyW}w`0qw_DZdP@u@TB<8staJPtmQ>EQ#6-f|TKPwHp8Az3H&nU6I?tDUW99F_ ztimkeLgl0EaPKGfxX7Zjse^6 zW1owEz{;veOj{m`-((H?yvO4owT67`8DNf&*;Th%!vX9LOOB1wYP;%Q>p+0_b&IDx z-6Ol|5$nnT_L%j$0QM8>Y9E_{8r~4V?y#;6VE0;Y4q#um-WtFjv3P@~>zh&anDwpz z_7m&fKGs(COY40;whGw$eXO_Yx7G)IEM4_S>x1ffvC@!rjF6 z8giGKc770hs0i!2Ajmsjg!OI;@_r$hUMKESzcd)viM!N)38vSHyHqP)3*_4K@A&I9 zcdK`8(b#jqzM!5o7+1_Msb>V!E6ROp1}^|mj_cBK^{6H3bV z7@qgBT()kp`ilAyo``uX-~H-o!E_A|sMs#eV+~(N)>2p35nc~yt9MHN27yO$H(}!p zLaW{i7*=-zMsNn9{QE`b7AbY-G*WJrJWJtse#nQVYy=T3&%7*asaUua>e`gByOCK%7_H2WOk4k?v zyh`ZI+v>YgiW)4X;ZtI_KLUoJhbMHclk|`xJuLboV#BC99hW{8YBgX?ZJqhQCx0Po z45FePjN6Jl?gs#EbuyU>H4E}FMa`CIz`O0BSVHmY z(%J}Zkq;SpEg766lg+^(UC*PJQtIlu5ZV?-R3An39z{NeG>&f-zO(V2gYQj>yUfP{ zw}$SP{FebQQx6LKw!p^(J}K~NfzJwjUZ7=Bz7num)k?kza93z9U>vt)gbS@N)i>jQ zisyq$IR$kK{UU*{GBOY1R&t^BC?vbpPwRJux>bF{rJ+@#XPLFUp%0XvhD@jvc_*~c zdQHQj(5t|`7Wr!%-U@g_!(}M@p$3+Hu;GSK3f%XHE`t0&hORJ@&oulqB>xDRg;r0) z?V-cq-W9q?&2PLHlr@cC1Ki$tnR>gmr?DCBIokM8=q8l?PUz#-?TwECKHB(1s8T)M z_|Jf`#8aU!gG+7m6VHIMG|`Mc_9lKG`Znk%tV)$jya4W%pf9wpOT=;0M4LPY?q$gH z6!En6sYEDDSSfIN_*v_ViHv$yG(T@Wl$aAHoG07`;c3vYCT!V{B`yos$~kMU=sc|K zroG`xds-9hY%gyZ4ASj)rOT z_oL0bo1Q`0LrphA&p$LZ<2L;xO)r3QH(*9R)%3yeT{vN%X(NYn)!k*XiDZE^}q9ucVt!t@^EVQZi*+}{fKIp{=7qz%e`3-V$6 z9e^?W-GI~V4*<@vZvvcU{}W)s{sdsFeH&oXz5{T+eGg!}eIMWw`+mTs_Je?@+usB{ z%l;1FIra|#SKE&RcG*7x+-N@qxXJz%;5PeNz+U?gfEU_-0ld^!u+rsr1aQEP1Mah@ z17_`6fWvkZJo%8#USDa`R^v8p^?G{_=-1k`*!A{2d05EYeFxC|3lzgRU~pVzPI7~u-Xx-4|jxDgg1u!!ftphd|mkF@Mpqb z4L=>Oj?9mQu}(*@CgWKRq5{1>R$_gO!#k_+F86HQNY7CSBGkviJV`tfem&s#!#o`X z^Jhd!>5P7+g#PA=Z-esgitm@ugJsL-ZL}wZ*2MsA+;*^)3D9h;pp}5lXrGNI3)O)0 z)O5g8v5wek0q$&UJXNR%>_9mir|>4g<*EhnEcD1$t8jl| zO3!J=-*K}>)wCF{<*hL_U((m9^CUfjb2jO3P)8-bPJLL?H>*!d`WAJMq({}mlD=L2 zMbaBoH6KpkJhVj8_o^XDKd9a)>4(*OB)v)9F6lqwgiHC4s^=vAxT=g3|Aa|DtzIVh z?P{f@pH=H6y+id&dY5t~y<3e-`UQ1V(l4oFlHR8tlJu+UaY?_Xo{{wH%C2HP51RB} zP5Q7&zh%;IoAf&-{hpd3j5=HH9_Fb#qH z{m8eYAoKr;{1YZWzg4OCNSvs-f;(&C{f*A=>wU5zo6Ef&gc06+S8^*y73;2>dLrK(c_E^ z4HOroepDkun>Vj3W^Qpbo+~E%T~XUoop^Ny&%M*B!S10w4hR}qo62VUQvLh8(Dc2j zeA;KM&kSX9`_cnt1au`vjn^)%l-N4gb=UB1RFiErovtF`dUtK4^qj$3XfJ zo0J+H&ZcSARKC!{YzoitOFOdOP^A^%n)dY`9!_@;OpwNlKX`{ob@p^`EjC@}rk>7X zig|ZvS7vCyIhgBUV{%Fc+IvGuX%V%x?==`hjC>|H?BwV+YDX^ZdZWEFl^sd5J!&)R z&h)2pdEff$hDHX}2)!+>QsRUqt};;MO&$Gt$2HYD0cBl&HqA*jfi$|o?^jO6pqkix%M*`LlD z#My5$>$A?mpq4$w_%gNb02w8=^@D z)PT0yfZChR@7`3*gON%}J^7TIS3P-Wn2J=I6JqVYbpL*~LoX6aSG09FJ!G5`p$CJiG%-LBrwT4%yaE(4^jdMsh zIX%!lgz3mp*$bQKIk_F4S}ca;Pm6#&n91iMx+&EMZ^}XxgQk(3%xIR@xOTWAmoGz_ z;D}z;s-Vv&4NT~VDv)%odNxV7l$VEB(5jwKZ~+S9VE1w%g?Ff+jF$(0*jseOtP3LA{!6gMhpW8J6{ zib3_Z+3WaRy&ro6={Y^9y(R?Flc}g%o3O)Cfpka4UROC8-5c!*UFqhopt;7BrjJ`? zgD{+;y1f=+TIx!R3EesE8wJmR6c=SZ!fMM%Hp@lx@?|VehN;o;L6mj7fZ`Qmjg$sZ zR3PhmKo&bh0qg98Zx&FvtM)Po4U1Rq_DG!wG7oSM54f2Y4p?^*0%I^^3N5jActj=; zn#Wf=HIWj#+)O@QK;dK>p;YIAR7MO_q)JLmV981^n-VRMO{a%dj$70|y*EoFgbjzU zcB?%Sz4hyjzc7WnhYsL{Zq?nHJ3Q3y#ca%b(WzRK#(r(Y)(v5&k^;HBJJRn@%OL~{ zYA|(3+{i2wITEz{_>=)XaW**zMRJqgx3EFTd;(d^m(Vw6_UqG;<^aAB=5*n(fqEI=1UQ;J6gcQ z3j3;QpE84^R~pUMb4cYz_U=vNZTYVy|VUe_YoI8z!-SJ-b|IScU`4Z7wE}9tds7+>RXL0o^~}B_Wqh z<@ey6;B`QsP1tM<(GCPtE@NXT6v9^2VsNcHD4{6<5w-z!YC2SGab$UwT)wbZaI4!f zl)|qZ`ZL3DsE260RUfy;5gzEG}hj@=eq`u6|~ zf~<@$LT1k%qA?V=Dj7wgnTk+y zJGfB)$>+;j+v`lm_KOc0&l$=doML7+sHxHhMR9!~^N9GdzfaMC$_KE--{@fIMC!kz0+;siD+fIjXI7+_W4*z}ni= zLpdC}B>`BI-b&K0uFV%PJ->791w=c0I=6KrqfamNp8oVkp)gd-42`70M5v1E0>nm; z%WaN1{-&^zO^A+3^yBpj zcMH-Qea7UmBA4dUfLEPmmE;i;V?ahqE|*j$5C%EH$R{VirSeuAZ-dp{)Nz><4P3P7 z;sJv93n~4(s1BJ&2vX86FR^k8&eWMlWBNv5-JHZHdQsDP&sWt5?mN10Wu|bSA@1dG zt{`ZS^eIM7$$gXBoN{yfQrXU2p~4+QgW^2{5;N#QGIsz7h6-|Ab8%5Lm`nF7M_Cu5_;7%?xwJo5+N}?#b*Oab-a)$Hv+;ba*0Tn~RIe{=hJJwXJoA54#99%CLG} z{FZJowT%j0<%po5=@E;vFq{1>;@S^o-;Xr6UC4H5SjxyE{knj)b2?);igd!67~9 zfmy1_J^91D;>~))%Oh%llT!gibq)*!Z_G?vCX|-@V%)nq{rg3|G>MpZZP(?d4svpD zb23;!*~U#yzt};LEeu*o-Oke}W5YnRK`Ym0kDOCpPSF4|YkW)i8R*lC!^AEi(mJRY zbZ**gMKNVN-L2Qzl-{FTUW!XVs@KIeDc){D1ERd0ncPS!D=lAxyJy%8x0szn{renO zh&d6|1ZnwtSl(P_2FF}R7PB&k8D3ix-*N_ zO5zhbAe~Yu(g{7Mgr4e?E8DJYwi{RCcnak2bpC@Bc^qVRCWQdVy9(@t_bHiQX2oJ& z546I;nHYmPL-7h?8OP6;r5PJjxt%-{38HiK&#ik@XEy8fZ`^>NAf~b$e_g28Vfb}% z+I0*~J4~U;8owZe7}MW2*N+TI1R+aJ+ARok--d_7T)dj6@0vy{gywx|{WOQGp{zz- z4t{2>TUsJQ_a`q=dJQ?bq<6+GemobD$MeT!IRt!p{FhNf3NfJSRVmen->;_CCgct) zM~#5H4f!F^vP#X}1L&xOlkoA2(x!fq?icwrQa+CoLwI1iHo#G}j@qw^_>ryrmmn7+ z8b^CJqD&5T_lTaf>X%kh&w6lNHHe49ozRZ(3V2fOgKihtK}pk~l=e-vb)$4f^rX;> z41PDL``v*z2RiVxzlr>`Qm5%wFF?7Z$QNs1O)0+}*5VX?o0x)J7EoIFRoOz0z~WaBm&1)OsHzDql6lTy|d zu25cnT2Y^^7K&JG6e~yzU5|?a^Yh$IosH3 zJl=#Y#BON!AX=i%E_fH`!rwGo+j26pcp`|B+f5y;s}DG4b5l=%pG2E=EAWeuwgF%n zco}=rYsM!~@|423(;o}6!O>Kw1Ua6TwXoPATHs*zI~XT*O1V}}l$zWQf%U10^R8gY zK#ONHU*OQj%hXapu`*U2Z!IacGF!qqL9d0)X48MX*_Xt4aqf{XqxNz=I}84$*NpNr z6Kg;Ozf#AlN{;|cA1fFGVw6F`K!I{c+qQ}(9)uObdT3lEu{_1MJpdcIU)dbrw z46ZLHm7H5%V_+Owx?!#I_E7UCt0z!?_Ey*%mp%eZ*FtqlALx7VAN{rmHhV2{6Z+Fu zPAX8xY224QEwr)Llfx&9tIjB2CRo=?DYX%!x)-f4 z^rcLxm8ErgrT$87ut0IYf-9}J5{pge(e|{n3!mfc-U)lSpfIi(()OGl2feUID&R$< zHCxvf9O1y4w79e_g&qg}LRxcLscf*H6QtYN_F_NrR(a8eH?P?jz2DRCXp@N??ug!g ztwd)(Y{7Ee5pnqdTlk)d-ef@4^FKIGJE6V5SQfo;pvhY;g3?{^;}Yq%pyo2ZFt=D+ z8HpB-Bxh0ajw?N`mtQ5LN8Tt26?OI(%^+GSFm~VvHF~ixcQPrD8JUCpUi^o1EvSqk z%e1U11ui{m!p_ptiFL9YF;bbmWT98;ukIuZIkH~QN_SA&ox7Wy0!|5f(Zo7Ud^tO) zZ^HWB8050ICZ3rd)Qy$7u@5zS>v%wJp4aD~e95{9yKI7GI?LGw@3xyL@BN8H<2X$J`nCuEO`+a8lK-X5F#c)sU_Uw*#*LUfU&toe;vm z5vyvu0FVQ_3jjF_{l$;l_){Xgc3&(ZNunAJjp3WXw+4SwCQ-W&5G{l#ft82>uk9j? z)n@V1HyTXdMv_;@s#K_U-;CN`{9ip&#gI=Jtg`mzU==E@JBMu%+O`C;)nK6J#O!JK2P7mD@iJjAQ{iQzUZ&E^z~<-= zY=A0iFGb$MFjhr4ritogw01a=sGL!|sdgYSBN?mf_OZInt(8f;b{M?6?pQJe7Dy2e zQ@0(hv7^;+fh@k4;(K8jf7Ja%_(cMn)~ETy_~nNR&mc$=@HJ-A$5G&NWKNtwW&q!P z;otrM1)nAOPlDeOJV)?*fF1R&lCKa;4cI(5d0Uxiv%YK)MEe^flUx12oppI zq68HLF@j2hI6)P`Gy?dD3P%X=%S#omB*5WTg{uho!gLrvBvj!V0Q6v(cB#F{IyH{j@BO{>6~ znpj0R7OU-=-AXs9fer9SXF@gjge$DtjTPjA9o4SPF3(i6Dx!&mCe-$NDT}wFOx-ND z`bY#;iM2*6LM)A`EUfud-HMtkLaoLCN2;ZPM{0FaUtLjw600#KXSdF7t*VH!dZ4vg zR8W%$Rba|0tM16$+9Rh_D7!U*EL?3Syo~j!5M102SJ;V!R*01hwmEVJeilI|MfY_3 z=Ax+v-;~d9$q{6OiO;jYqT-IVU@sH{hU)?E{v{Z{vOXBH1@5ysXTwo_V zwyeVsog-X})GSL)-=693Pq_n5as%!xb1AGv{DBESbNH98dhLc?ZfY2>X82d$z586e zXblA)__W9gxR?240T1SG3&<7dc!J~NN_TS#chB;sb~-J$xRf|?ib}37i2ltv{?#a~ zsF>5mMcE^T6YWGgAb;c=z5ah93Sw$SOw?Zhs(8*m+N2y`T{1$ejGf}6IjBKf88 zZ(ig=f}eBZml+{H)qlwWGZJ(?xFRl~3($gA-a4&E`mh0_wK#ZBS~VO^l5h^X)C8>3We_ihk?=PDd;N8{o#R6=ikgz}S&-ByLkc=j~ze z-YSU_)XtkkeG95jQ!a+Q16Ejvn3DFJ4t-uvxbNo>xv^ctMeUxbzenObyelHzItRZS zDd;JV^(n9vbuPm%miSw+4*ZH~6}~If8B%s5EN_Vw8RxlZE$=b60J4YW`c|mB1O3D6 z(4wac9)w@QqYNJJgGMV2<9xy1@I;h{)OO_i@t?j`<%x5H)X6hpO6p=;wwf}u95s3N z@lGc%y-lmdzT2RWrv!ZxD)j8+df2JeV%OsGrPe)}ZM&p=Cwj*l72Z!}VUc9XY3$_V z!*)!4rYtaJfhh}2SzyWnQx=%Az?221EHGt(DGU6!EbtNicjh1Q4&47OWmAQxEHGt( lDGN+lV9Ekh7MQZYlm(_NFlB)$3rtyH$^ugs_ + + + \ No newline at end of file diff --git a/Output/x64/portaudio_x64.dll b/Output/x64/PortAudio.dll similarity index 100% rename from Output/x64/portaudio_x64.dll rename to Output/x64/PortAudio.dll diff --git a/Output/x86/portaudio_x86.dll b/Output/x86/PortAudio.dll similarity index 100% rename from Output/x86/portaudio_x86.dll rename to Output/x86/PortAudio.dll diff --git a/Vocaluxe/COSFunctions.cs b/Vocaluxe/COSFunctions.cs new file mode 100644 index 00000000..c72b6c46 --- /dev/null +++ b/Vocaluxe/COSFunctions.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace Vocaluxe +{ + static class COSFunctions + { +#if WIN + private static bool _DefaultDllDirSet; + private static bool _UsePath; + private static bool _UseSetDllDir; + + private static class CWindowsFunctions + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + public static extern void AddDllDirectory(string lpPathName); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + public static extern void SetDllDirectory(string lpPathName); + + [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetForegroundWindow(IntPtr hWnd); + + [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetDefaultDllDirectories(int directoryFlags); + + // ReSharper disable InconsistentNaming + public const int LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000; + // ReSharper restore InconsistentNaming + } +#endif + + public static void AddEnvironmentPath(string path) + { + string newPath = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; + if (newPath.Length > 0) + newPath += ";"; + newPath += path; + + Environment.SetEnvironmentVariable("PATH", newPath); + } + + public static void AddLibrarySearchpath(string path) + { +#if WIN + if (!_DefaultDllDirSet) + { + try + { + CWindowsFunctions.SetDefaultDllDirectories(CWindowsFunctions.LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); + } + catch (Exception) + { + _UsePath = true; + _UseSetDllDir = true; + } + _DefaultDllDirSet = true; + } + if (_UsePath) + AddEnvironmentPath(path); + if (!_UseSetDllDir) + { + try + { + CWindowsFunctions.AddDllDirectory(path); + } + catch (Exception) + { + _UseSetDllDir = true; + } + } + if (_UseSetDllDir) + CWindowsFunctions.SetDllDirectory(path); +#endif + } + + public static void SetForegroundWindow(IntPtr hWnd) + { +#if WIN + CWindowsFunctions.SetForegroundWindow(hWnd); +#endif + } + } +} \ No newline at end of file diff --git a/Vocaluxe/CProgrammHelper.cs b/Vocaluxe/CProgrammHelper.cs index f4425776..7140589e 100644 --- a/Vocaluxe/CProgrammHelper.cs +++ b/Vocaluxe/CProgrammHelper.cs @@ -17,6 +17,8 @@ using System; using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; using System.Security; using Microsoft.Win32; using Vocaluxe.Base; @@ -108,5 +110,18 @@ namespace Vocaluxe } return true; } + + public static void Init() + { +#if ARCH_X86 + string path = "x86"; +#endif +#if ARCH_X64 + string path = "x64"; +#endif + path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar + path; + COSFunctions.AddLibrarySearchpath(path); + COSFunctions.AddLibrarySearchpath(path + Path.DirectorySeparatorChar + "gstreamer"); + } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index 8125038f..239edf7b 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -26,9 +26,6 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp private readonly Dictionary _Streams = new Dictionary(); private static int _IDCount; - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - private static extern void SetDllDirectory(string lpPathName); - public bool Init() { #if ARCH_X86 @@ -37,7 +34,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp #if ARCH_X64 const string path = ".\\x64\\gstreamer"; #endif - SetDllDirectory(path); + //SetDllDirectory(path); Application.Init(); Registry reg = Registry.Get(); reg.ScanPath(path); diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index bf603b6d..48ee8776 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -4,7 +4,6 @@ using System.Runtime.InteropServices; using System.Threading; using Vocaluxe.Base; using Vocaluxe.Lib.Sound.Playback.Decoder; -using Vocaluxe.Lib.Sound.PortAudio; using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.PortAudio @@ -25,12 +24,12 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private EStreamAction _AfterFadeAction; private CFading _Fading; - private static CPortAudio.SPaHostApiInfo _ApiInfo; - private static CPortAudio.SPaDeviceInfo _OutputDeviceInfo; + private static PortAudioSharp.PortAudio.PaHostApiInfo _ApiInfo; + private static PortAudioSharp.PortAudio.PaDeviceInfo _OutputDeviceInfo; private IntPtr _Ptr = new IntPtr(0); private Closeproc _Closeproc; - private CPortAudio.PaStreamCallbackDelegate _PaStreamCallback; + private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _PaStreamCallback; private int _StreamID; private IAudioDecoder _Decoder; private float _BytesPerSecond; @@ -202,7 +201,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _AfterFadeAction = EStreamAction.Nothing; lock (_Mutex) { - _ErrorCheck("StartStream", CPortAudio.Pa_StartStream(_Ptr)); + _ErrorCheck("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Ptr)); } } @@ -210,7 +209,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { lock (_Mutex) { - _ErrorCheck("StopStream (playback)", CPortAudio.Pa_StopStream(_Ptr)); + _ErrorCheck("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Ptr)); } Skip(0f); } @@ -241,15 +240,15 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { if (!_Initialized) { - if (_ErrorCheck("Initialize", CPortAudio.Pa_Initialize())) + if (_ErrorCheck("Initialize", PortAudioSharp.PortAudio.Pa_Initialize())) return -1; _Initialized = true; int hostApi = _ApiSelect(); - _ApiInfo = CPortAudio.PaGetHostApiInfo(hostApi); - _OutputDeviceInfo = CPortAudio.PaGetDeviceInfo(_ApiInfo.DefaultOutputDevice); - if (_OutputDeviceInfo.DefaultLowOutputLatency < 0.1) - _OutputDeviceInfo.DefaultLowOutputLatency = 0.1; + _ApiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(hostApi); + _OutputDeviceInfo = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_ApiInfo.defaultOutputDevice); + if (_OutputDeviceInfo.defaultLowOutputLatency < 0.1) + _OutputDeviceInfo.defaultLowOutputLatency = 0.1; } } @@ -278,24 +277,25 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio var data = new IntPtr(0); - var outputParams = new CPortAudio.SPaStreamParameters + PortAudioSharp.PortAudio.PaStreamParameters? outputParams = new PortAudioSharp.PortAudio.PaStreamParameters { - ChannelCount = format.ChannelCount, - Device = _ApiInfo.DefaultOutputDevice, - SampleFormat = CPortAudio.EPaSampleFormat.PaInt16, - SuggestedLatency = _OutputDeviceInfo.DefaultLowOutputLatency + channelCount = format.ChannelCount, + device = _ApiInfo.defaultOutputDevice, + sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, + suggestedLatency = _OutputDeviceInfo.defaultLowOutputLatency }; + PortAudioSharp.PortAudio.PaStreamParameters? inputParams = null; var bufsize = (uint)CConfig.AudioBufferSize; lock (_Mutex) { - _ErrorCheck("OpenDefaultStream (playback)", CPortAudio.Pa_OpenStream( + _ErrorCheck("OpenDefaultStream (playback)", PortAudioSharp.PortAudio.Pa_OpenStream( out _Ptr, - IntPtr.Zero, + ref inputParams, ref outputParams, format.SamplesPerSecond, bufsize, - CPortAudio.EPaStreamFlags.PaNoFlag, + PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, _PaStreamCallback, data)); } @@ -450,7 +450,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { lock (_Mutex) { - CPortAudio.Pa_Terminate(); + PortAudioSharp.PortAudio.Pa_Terminate(); _Initialized = false; } } @@ -462,12 +462,12 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio #endregion Threading #region Callbacks - private CPortAudio.EPaStreamCallbackResult _ProcessNewData( + private PortAudioSharp.PortAudio.PaStreamCallbackResult _ProcessNewData( IntPtr input, IntPtr output, uint frameCount, - ref CPortAudio.SPaStreamCallbackTimeInfo timeInfo, - CPortAudio.EPaStreamCallbackFlags statusFlags, + ref PortAudioSharp.PortAudio.PaStreamCallbackTimeInfo timeInfo, + PortAudioSharp.PortAudio.PaStreamCallbackFlags statusFlags, IntPtr userData) { var buf = new byte[frameCount * _ByteCount]; @@ -482,7 +482,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { Console.WriteLine(e.ToString()); } - return CPortAudio.EPaStreamCallbackResult.PaContinue; + return PortAudioSharp.PortAudio.PaStreamCallbackResult.paContinue; } lock (_LockData) @@ -534,27 +534,27 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } catch (Exception e) { - CLog.LogError("Error PortAudio.StreamCallback: " + e.Message); + CLog.LogError("Error PortAudio.treamCallback: " + e.Message); } - return CPortAudio.EPaStreamCallbackResult.PaContinue; + return PortAudioSharp.PortAudio.PaStreamCallbackResult.paContinue; } #endregion Callbacks - private bool _ErrorCheck(String action, CPortAudio.EPaError errorCode) + private bool _ErrorCheck(String action, PortAudioSharp.PortAudio.PaError errorCode) { - if (errorCode != CPortAudio.EPaError.PaNoError) + if (errorCode != PortAudioSharp.PortAudio.PaError.paNoError) { - if (errorCode == CPortAudio.EPaError.PaStreamIsNotStopped) + if (errorCode == PortAudioSharp.PortAudio.PaError.paStreamIsNotStopped) return false; - CLog.LogError(action + " error (playback): " + CPortAudio.PaGetErrorText(errorCode)); - if (errorCode == CPortAudio.EPaError.PaUnanticipatedHostError) + CLog.LogError(action + " error (playback): " + PortAudioSharp.PortAudio.Pa_GetErrorText(errorCode)); + if (errorCode == PortAudioSharp.PortAudio.PaError.paUnanticipatedHostError) { - CPortAudio.SPaHostErrorInfo errorInfo = CPortAudio.PaGetLastHostErrorInfo(); - CLog.LogError("- Host error API type: " + errorInfo.HostApiType); - CLog.LogError("- Host error code: " + errorInfo.ErrorCode); - CLog.LogError("- Host error text: " + errorInfo.ErrorText); + PortAudioSharp.PortAudio.PaHostErrorInfo errorInfo = PortAudioSharp.PortAudio.Pa_GetLastHostErrorInfo(); + CLog.LogError("- Host error API type: " + errorInfo.hostApiType); + CLog.LogError("- Host error code: " + errorInfo.errorCode); + CLog.LogError("- Host error text: " + errorInfo.errorText); } return true; } @@ -567,13 +567,13 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (!_Initialized) return 0; - int selectedHostApi = CPortAudio.Pa_GetDefaultHostApi(); - int apiCount = CPortAudio.Pa_GetHostApiCount(); + int selectedHostApi = PortAudioSharp.PortAudio.Pa_GetDefaultHostApi(); + int apiCount = PortAudioSharp.PortAudio.Pa_GetHostApiCount(); for (int i = 0; i < apiCount; i++) { - CPortAudio.SPaHostApiInfo apiInfo = CPortAudio.PaGetHostApiInfo(i); - if ((apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaDirectSound) - || (apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaALSA)) + PortAudioSharp.PortAudio.PaHostApiInfo apiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(i); + if ((apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paDirectSound) + || (apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paALSA)) selectedHostApi = i; } return selectedHostApi; diff --git a/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs b/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs deleted file mode 100644 index d8c6c9f5..00000000 --- a/Vocaluxe/Lib/Sound/Portaudio/PortAudio.cs +++ /dev/null @@ -1,558 +0,0 @@ -#region license -// This file is part of Vocaluxe. -// -// Vocaluxe is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Vocaluxe is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Vocaluxe. If not, see . -#endregion - -using System; -using System.Runtime.InteropServices; - -namespace Vocaluxe.Lib.Sound.PortAudio -{ - /** - - PortAudio v.19 bindings for .NET - - */ - // ReSharper disable UnusedMember.Global - // ReSharper disable FieldCanBeMadeReadOnly.Global - // ReSharper disable MemberCanBePrivate.Global - - public static class CPortAudio - { - #region **** PORTAUDIO CALLBACKS **** - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate EPaStreamCallbackResult PaStreamCallbackDelegate( - IntPtr input, - IntPtr output, - uint frameCount, - ref SPaStreamCallbackTimeInfo timeInfo, - EPaStreamCallbackFlags statusFlags, - IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void PaStreamFinishedCallbackDelegate(IntPtr userData); - #endregion - - #region **** PORTAUDIO DATA STRUCTURES **** - [StructLayout(LayoutKind.Sequential)] - public struct SPaDeviceInfo - { - public int StructVersion; - [MarshalAs(UnmanagedType.LPStr)] public string Name; - public int HostApi; - public int MaxInputChannels; - public int MaxOutputChannels; - public double DefaultLowInputLatency; - public double DefaultLowOutputLatency; - public double DefaultHighInputLatency; - public double DefaultHighOutputLatency; - public double DefaultSampleRate; - - public override string ToString() - { - return "[" + GetType().Name + "]" + "\n" - + "name: " + Name + "\n" - + "hostApi: " + HostApi + "\n" - + "maxInputChannels: " + MaxInputChannels + "\n" - + "maxOutputChannels: " + MaxOutputChannels + "\n" - + "defaultLowInputLatency: " + DefaultLowInputLatency + "\n" - + "defaultLowOutputLatency: " + DefaultLowOutputLatency + "\n" - + "defaultHighInputLatency: " + DefaultHighInputLatency + "\n" - + "defaultHighOutputLatency: " + DefaultHighOutputLatency + "\n" - + "defaultSampleRate: " + DefaultSampleRate; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct SPaHostApiInfo - { - public int StructVersion; - public EPaHostApiTypeId Type; - [MarshalAs(UnmanagedType.LPStr)] public string Name; - public int DeviceCount; - public int DefaultInputDevice; - public int DefaultOutputDevice; - - public override string ToString() - { - return "[" + GetType().Name + "]" + "\n" - + "structVersion: " + StructVersion + "\n" - + "type: " + Type + "\n" - + "name: " + Name + "\n" - + "deviceCount: " + DeviceCount + "\n" - + "defaultInputDevice: " + DefaultInputDevice + "\n" - + "defaultOutputDevice: " + DefaultOutputDevice; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct SPaHostErrorInfo - { - public EPaHostApiTypeId HostApiType; - public int ErrorCode; - [MarshalAs(UnmanagedType.LPStr)] public string ErrorText; - - public override string ToString() - { - return "[" + GetType().Name + "]" + "\n" - + "hostApiType: " + HostApiType + "\n" - + "errorCode: " + ErrorCode + "\n" - + "errorText: " + ErrorText; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct SPaStreamCallbackTimeInfo - { - public double InputBufferAdcTime; - public double CurrentTime; - public double OutputBufferDacTime; - - public override string ToString() - { - return "[" + GetType().Name + "]" + "\n" - + "currentTime: " + CurrentTime + "\n" - + "inputBufferAdcTime: " + InputBufferAdcTime + "\n" - + "outputBufferDacTime: " + OutputBufferDacTime; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct SPaStreamInfo - { - public int StructVersion; - public double InputLatency; - public double OutputLatency; - public double SampleRate; - - public override string ToString() - { - return "[" + GetType().Name + "]" + "\n" - + "structVersion: " + StructVersion + "\n" - + "inputLatency: " + InputLatency + "\n" - + "outputLatency: " + OutputLatency + "\n" - + "sampleRate: " + SampleRate; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct SPaStreamParameters - { - public int Device; - public int ChannelCount; - public EPaSampleFormat SampleFormat; - public double SuggestedLatency; - internal IntPtr HostApiSpecificStreamInfo; - - public override string ToString() - { - return "[" + GetType().Name + "]" + "\n" - + "device: " + Device + "\n" - + "channelCount: " + ChannelCount + "\n" - + "sampleFormat: " + SampleFormat + "\n" - + "suggestedLatency: " + SuggestedLatency; - } - } - #endregion - - #region **** PORTAUDIO DEFINES **** - public enum EPaDeviceIndex - { - PaNoDevice = -1, - PaUseHostApiSpecificDeviceSpecification = -2 - } - - public enum EPaSampleFormat : uint - { - PaFloat32 = 0x00000001, - PaInt32 = 0x00000002, - PaInt24 = 0x00000004, - PaInt16 = 0x00000008, - PaInt8 = 0x00000010, - PaUInt8 = 0x00000020, - PaCustomFormat = 0x00010000, - PaNonInterleaved = 0x80000000, - } - - public const int PaFormatIsSupported = 0; - public const int PaFramesPerBufferUnspecified = 0; - - public enum EPaStreamFlags : uint - { - PaNoFlag = 0, - PaClipOff = 0x00000001, - PaDitherOff = 0x00000002, - PaNeverDropInput = 0x00000004, - PaPrimeOutputBuffersUsingStreamCallback = 0x00000008, - PaPlatformSpecificFlags = 0xFFFF0000 - } - - public enum EPaStreamCallbackFlags : uint - { - PaInputUnderflow = 0x00000001, - PaInputOverflow = 0x00000002, - PaOutputUnderflow = 0x00000004, - PaOutputOverflow = 0x00000008, - PaPrimingOutput = 0x00000010 - } - #endregion - - #region **** PORTAUDIO ENUMERATIONS **** - public enum EPaError - { - PaNoError = 0, - PaNotInitialized = -10000, - PaUnanticipatedHostError, - PaInvalidChannelCount, - PaInvalidSampleRate, - PaInvalidDevice, - PaInvalidFlag, - PaSampleFormatNotSupported, - PaBadIODeviceCombination, - PaInsufficientMemory, - PaBufferTooBig, - PaBufferTooSmall, - PaNullCallback, - PaBadStreamPtr, - PaTimedOut, - PaInternalError, - PaDeviceUnavailable, - PaIncompatibleHostApiSpecificStreamInfo, - PaStreamIsStopped, - PaStreamIsNotStopped, - PaInputOverflowed, - PaOutputUnderflowed, - PaHostApiNotFound, - PaInvalidHostApi, - PaCanNotReadFromCallbackStream, - PaCanNotWriteToACallbackStream, - PaCanNotReadFromAnOutputOnlyStream, - PaCanNotWriteToAnInputOnlyStream, - PaIncompatibleStreamHostApi, - PaBadBufferPtr - } - - public enum EPaHostApiTypeId : uint - { - PaInDevelopment = 0, - PaDirectSound = 1, - PaMME = 2, - PaASIO = 3, - PaSoundManager = 4, - PaCoreAudio = 5, - PaOSS = 7, - PaALSA = 8, - PaAL = 9, - PaBeOS = 10, - PaWDMKS = 11, - PaJACK = 12, - PaWASAPI = 13, - PaAudioScienceHPI = 14 - } - - public enum EPaStreamCallbackResult : uint - { - PaContinue = 0, - PaComplete = 1, - PaAbort = 2 - } - #endregion - - #region **** PORTAUDIO FUNCTIONS **** -#if ARCH_X86 -#if WIN - private const string _PaDll = "x86\\portaudio_x86.dll"; -#endif - -#if LINUX - private const string _PaDll = "libportaudio.so.2.0.0"; -#endif -#endif - -#if ARCH_X64 -#if WIN - private const string _PaDll = "x64\\portaudio_x64.dll"; -#endif - -#if LINUX - private const string _PaDll = "libportaudio.so.2.0.0"; -#endif -#endif - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetVersion(); - - [DllImport(_PaDll, EntryPoint = "Pa_GetVersionText", CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr IntPtr_Pa_GetVersionText(); - - public static string PaGetVersionText() - { - IntPtr strptr = IntPtr_Pa_GetVersionText(); - return Marshal.PtrToStringAnsi(strptr); - } - - [DllImport(_PaDll, EntryPoint = "Pa_GetErrorText", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr IntPtr_Pa_GetErrorText(EPaError errorCode); - - public static string PaGetErrorText(EPaError errorCode) - { - IntPtr strptr = IntPtr_Pa_GetErrorText(errorCode); - return Marshal.PtrToStringAnsi(strptr); - } - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_Initialize(); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_Terminate(); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetHostApiCount(); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetDefaultHostApi(); - - [DllImport(_PaDll, EntryPoint = "Pa_GetHostApiInfo", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr IntPtr_Pa_GetHostApiInfo(int hostApi); - - public static SPaHostApiInfo PaGetHostApiInfo(int hostApi) - { - IntPtr structptr = IntPtr_Pa_GetHostApiInfo(hostApi); - return (SPaHostApiInfo)Marshal.PtrToStructure(structptr, typeof(SPaHostApiInfo)); - } - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_HostApiTypeIdToHostApiIndex(EPaHostApiTypeId type); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_HostApiDeviceIndexToDeviceIndex(int hostApi, int hostApiDeviceIndex); - - [DllImport(_PaDll, EntryPoint = "Pa_GetLastHostErrorInfo", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr IntPtr_Pa_GetLastHostErrorInfo(); - - public static SPaHostErrorInfo PaGetLastHostErrorInfo() - { - IntPtr structptr = IntPtr_Pa_GetLastHostErrorInfo(); - return (SPaHostErrorInfo)Marshal.PtrToStructure(structptr, typeof(SPaHostErrorInfo)); - } - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetDeviceCount(); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetDefaultInputDevice(); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetDefaultOutputDevice(); - - [DllImport(_PaDll, EntryPoint = "Pa_GetDeviceInfo", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr IntPtr_Pa_GetDeviceInfo(int device); - - public static SPaDeviceInfo PaGetDeviceInfo(int device) - { - IntPtr structptr = IntPtr_Pa_GetDeviceInfo(device); - return (SPaDeviceInfo)Marshal.PtrToStructure(structptr, typeof(SPaDeviceInfo)); - } - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_IsFormatSupported( - ref SPaStreamParameters inputParameters, - ref SPaStreamParameters outputParameters, - double sampleRate); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_OpenStream( - out IntPtr stream, - ref SPaStreamParameters inputParameters, - ref SPaStreamParameters outputParameters, - double sampleRate, - uint framesPerBuffer, - EPaStreamFlags streamFlags, - PaStreamCallbackDelegate streamCallback, - IntPtr userData); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_OpenStream( - out IntPtr stream, - ref SPaStreamParameters inputParameters, - IntPtr outputParameters, - double sampleRate, - uint framesPerBuffer, - EPaStreamFlags streamFlags, - PaStreamCallbackDelegate streamCallback, - IntPtr userData); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_OpenStream( - out IntPtr stream, - IntPtr inputParameters, - ref SPaStreamParameters outputParameters, - double sampleRate, - uint framesPerBuffer, - EPaStreamFlags streamFlags, - PaStreamCallbackDelegate streamCallback, - IntPtr userData); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_OpenDefaultStream( - out IntPtr stream, - int numInputChannels, - int numOutputChannels, - uint sampleFormat, - double sampleRate, - uint framesPerBuffer, - PaStreamCallbackDelegate streamCallback, - IntPtr userData); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_CloseStream(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_SetStreamFinishedCallback( - ref IntPtr stream, - [MarshalAs(UnmanagedType.FunctionPtr)] PaStreamFinishedCallbackDelegate streamFinishedCallback); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_StartStream(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_StopStream(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_AbortStream(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_IsStreamStopped(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_IsStreamActive(IntPtr stream); - - [DllImport(_PaDll, EntryPoint = "Pa_GetStreamInfo", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr IntPtr_Pa_GetStreamInfo(IntPtr stream); - - public static SPaStreamInfo PaGetStreamInfo(IntPtr stream) - { - IntPtr structptr = IntPtr_Pa_GetStreamInfo(stream); - return (SPaStreamInfo)Marshal.PtrToStructure(structptr, typeof(SPaStreamInfo)); - } - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern double Pa_GetStreamTime(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern double Pa_GetStreamCpuLoad(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] float[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] byte[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] sbyte[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] ushort[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] short[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] uint[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_ReadStream( - IntPtr stream, - [Out] int[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] float[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] byte[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] sbyte[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] ushort[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] short[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] uint[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_WriteStream( - IntPtr stream, - [In] int[] buffer, - uint frames); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetStreamReadAvailable(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Pa_GetStreamWriteAvailable(IntPtr stream); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern EPaError Pa_GetSampleSize(EPaSampleFormat format); - - [DllImport(_PaDll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Pa_Sleep(int msec); - #endregion - } - - // ReSharper restore UnusedMember.Global - // ReSharper restore FieldCanBeMadeReadOnly.Global - // ReSharper restore MemberCanBePrivate.Global -} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 98a3dd72..5c05be0a 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -21,7 +21,6 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Vocaluxe.Base; -using Vocaluxe.Lib.Sound.PortAudio; namespace Vocaluxe.Lib.Sound.Record.PortAudio { @@ -30,7 +29,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio private bool _Initialized; private List _Devices; - private CPortAudio.PaStreamCallbackDelegate _MyRecProc; + private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _MyRecProc; private IntPtr[] _RecHandle; private readonly CBuffer[] _Buffer; @@ -59,19 +58,19 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio if (_Initialized) CloseAll(); - if (_ErrorCheck("Initialize", CPortAudio.Pa_Initialize())) + if (_ErrorCheck("Initialize", PortAudioSharp.PortAudio.Pa_Initialize())) return false; _Initialized = true; int hostAPI = _ApiSelect(); - int numDevices = CPortAudio.Pa_GetDeviceCount(); + int numDevices = PortAudioSharp.PortAudio.Pa_GetDeviceCount(); for (int i = 0; i < numDevices; i++) { - CPortAudio.SPaDeviceInfo info = CPortAudio.PaGetDeviceInfo(i); - if (info.HostApi == hostAPI && info.MaxInputChannels > 0) + PortAudioSharp.PortAudio.PaDeviceInfo info = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(i); + if (info.hostApi == hostAPI && info.maxInputChannels > 0) { - var dev = new CRecordDevice( i, info.Name,info.Name + i, info.MaxInputChannels); + var dev = new CRecordDevice(i, info.name, info.name + i, info.maxInputChannels); _Devices.Add(dev); } @@ -108,7 +107,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio foreach (IntPtr handle in _RecHandle) { int waitcount = 0; - while (waitcount < 5 && CPortAudio.Pa_IsStreamStopped(handle) == CPortAudio.EPaError.PaStreamIsNotStopped) + while (waitcount < 5 && PortAudioSharp.PortAudio.Pa_IsStreamStopped(handle) == PortAudioSharp.PortAudio.PaError.paStreamIsNotStopped) { Thread.Sleep(1); waitcount++; @@ -130,26 +129,26 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio { if (active[i]) { - var inputParams = new CPortAudio.SPaStreamParameters + PortAudioSharp.PortAudio.PaStreamParameters? inputParams = new PortAudioSharp.PortAudio.PaStreamParameters { - ChannelCount = _Devices[i].Channels, - Device = _Devices[i].ID, - SampleFormat = CPortAudio.EPaSampleFormat.PaInt16, - SuggestedLatency = CPortAudio.PaGetDeviceInfo(_Devices[i].ID).DefaultLowInputLatency + channelCount = _Devices[i].Channels, + device = _Devices[i].ID, + sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, + suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[i].ID).defaultLowInputLatency }; - - if (_ErrorCheck("OpenStream (rec)", CPortAudio.Pa_OpenStream( + PortAudioSharp.PortAudio.PaStreamParameters? outputParams = null; + if (_ErrorCheck("OpenStream (rec)", PortAudioSharp.PortAudio.Pa_OpenStream( out _RecHandle[i], ref inputParams, - IntPtr.Zero, + ref outputParams, 44100, 882, - CPortAudio.EPaStreamFlags.PaNoFlag, + PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, _MyRecProc, new IntPtr(i)))) return false; - if (_ErrorCheck("Start Stream (rec)", CPortAudio.Pa_StartStream(_RecHandle[i]))) + if (_ErrorCheck("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[i]))) return false; } } @@ -166,7 +165,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio return false; foreach (IntPtr handle in _RecHandle) - CPortAudio.Pa_StopStream(handle); + PortAudioSharp.PortAudio.Pa_StopStream(handle); return true; } @@ -179,7 +178,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio if (_Initialized) { - CPortAudio.Pa_Terminate(); + PortAudioSharp.PortAudio.Pa_Terminate(); _Initialized = false; } @@ -265,12 +264,12 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio return _Devices.AsReadOnly(); } - private CPortAudio.EPaStreamCallbackResult _MyPaStreamCallback( + private PortAudioSharp.PortAudio.PaStreamCallbackResult _MyPaStreamCallback( IntPtr input, IntPtr output, uint frameCount, - ref CPortAudio.SPaStreamCallbackTimeInfo timeInfo, - CPortAudio.EPaStreamCallbackFlags statusFlags, + ref PortAudioSharp.PortAudio.PaStreamCallbackTimeInfo timeInfo, + PortAudioSharp.PortAudio.PaStreamCallbackFlags statusFlags, IntPtr userData) { try @@ -312,20 +311,20 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio CLog.LogError("Error on Stream Callback (rec): " + e); } - return CPortAudio.EPaStreamCallbackResult.PaContinue; + return PortAudioSharp.PortAudio.PaStreamCallbackResult.paContinue; } - private bool _ErrorCheck(String action, CPortAudio.EPaError errorCode) + private bool _ErrorCheck(String action, PortAudioSharp.PortAudio.PaError errorCode) { - if (errorCode != CPortAudio.EPaError.PaNoError) + if (errorCode != PortAudioSharp.PortAudio.PaError.paNoError) { - CLog.LogError(action + " error (rec): " + CPortAudio.PaGetErrorText(errorCode)); - if (errorCode == CPortAudio.EPaError.PaUnanticipatedHostError) + CLog.LogError(action + " error (rec): " + PortAudioSharp.PortAudio.Pa_GetErrorText(errorCode)); + if (errorCode == PortAudioSharp.PortAudio.PaError.paUnanticipatedHostError) { - CPortAudio.SPaHostErrorInfo errorInfo = CPortAudio.PaGetLastHostErrorInfo(); - CLog.LogError("- Host error API type: " + errorInfo.HostApiType); - CLog.LogError("- Host error code: " + errorInfo.ErrorCode); - CLog.LogError("- Host error text: " + errorInfo.ErrorText); + PortAudioSharp.PortAudio.PaHostErrorInfo errorInfo = PortAudioSharp.PortAudio.Pa_GetLastHostErrorInfo(); + CLog.LogError("- Host error API type: " + errorInfo.hostApiType); + CLog.LogError("- Host error code: " + errorInfo.errorCode); + CLog.LogError("- Host error text: " + errorInfo.errorText); } return true; } @@ -338,13 +337,13 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio if (!_Initialized) return 0; - int selectedHostApi = CPortAudio.Pa_GetDefaultHostApi(); - int apiCount = CPortAudio.Pa_GetHostApiCount(); + int selectedHostApi = PortAudioSharp.PortAudio.Pa_GetDefaultHostApi(); + int apiCount = PortAudioSharp.PortAudio.Pa_GetHostApiCount(); for (int i = 0; i < apiCount; i++) { - CPortAudio.SPaHostApiInfo apiInfo = CPortAudio.PaGetHostApiInfo(i); - if ((apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaDirectSound) - || (apiInfo.Type == CPortAudio.EPaHostApiTypeId.PaALSA)) + PortAudioSharp.PortAudio.PaHostApiInfo apiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(i); + if ((apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paDirectSound) + || (apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paALSA)) selectedHostApi = i; } return selectedHostApi; diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index b59d4f9e..1cb6d368 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -20,7 +20,6 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; -using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; using Vocaluxe.Base; @@ -32,12 +31,6 @@ namespace Vocaluxe { static class CMainProgram { -#if WIN - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool SetForegroundWindow(IntPtr hWnd); -#endif - private static CSplashScreen _SplashScreen; [STAThread, HandleProcessCorruptedStateExceptions] @@ -85,6 +78,7 @@ namespace Vocaluxe if (!CProgrammHelper.CheckRequirements()) return; + CProgrammHelper.Init(); CMain.Init(); CSettings.CreateFolders(); @@ -228,13 +222,15 @@ namespace Vocaluxe { MessageBox.Show("Error on start up: " + e.Message + e.StackTrace); CLog.LogError("Error on start up: " + e); - _SplashScreen.Close(); + if (_SplashScreen != null) + _SplashScreen.Close(); _CloseProgram(); } Application.DoEvents(); // Start Main Loop - _SplashScreen.Close(); + if (_SplashScreen != null) + _SplashScreen.Close(); CVocaluxeServer.Start(); CDraw.MainLoop(); @@ -332,7 +328,7 @@ namespace Vocaluxe { IntPtr wnd = process.MainWindowHandle; if (wnd != IntPtr.Zero) - SetForegroundWindow(wnd); + COSFunctions.SetForegroundWindow(wnd); } #endif return false; diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 4087a99e..d89cca3f 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -199,6 +199,10 @@ ..\Output\OpenTK.GLControl.dll + + False + ..\Output\PortAudioSharp.dll + False ..\Output\QRCoder.dll @@ -212,6 +216,7 @@ + @@ -327,7 +332,6 @@ Designer - PreserveNewest From de0f4777e02238b5e2be36f82728791c55bb4440 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 17:15:47 +0100 Subject: [PATCH 007/116] Add licenses and source of libraries (KEEP UP2DATE!) --- Output/LICENSE.txt | 55 +------------------ .../PortAudio-Sharp/SourceAndVersion.txt | 7 +++ .../Licenses/PortAudio-Sharp}/copyright.txt | 0 .../Licenses/PortAudio-Sharp}/license.txt | 0 .../Licenses/PortAudio-Sharp}/readme.txt | 0 .../QR Coder/QRCoder.txt} | 2 - Output/Licenses/QR Coder/SourceAndVersion.txt | 6 ++ 7 files changed, 14 insertions(+), 56 deletions(-) create mode 100644 Output/Licenses/PortAudio-Sharp/SourceAndVersion.txt rename {Vocaluxe/Lib/Sound/Portaudio => Output/Licenses/PortAudio-Sharp}/copyright.txt (100%) rename {Vocaluxe/Lib/Sound/Portaudio => Output/Licenses/PortAudio-Sharp}/license.txt (100%) rename {Vocaluxe/Lib/Sound/Portaudio => Output/Licenses/PortAudio-Sharp}/readme.txt (100%) rename Output/{LICENSE QRCoder.txt => Licenses/QR Coder/QRCoder.txt} (94%) create mode 100644 Output/Licenses/QR Coder/SourceAndVersion.txt diff --git a/Output/LICENSE.txt b/Output/LICENSE.txt index 20d40b6b..e587591e 100644 --- a/Output/LICENSE.txt +++ b/Output/LICENSE.txt @@ -618,57 +618,4 @@ an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/Output/Licenses/PortAudio-Sharp/SourceAndVersion.txt b/Output/Licenses/PortAudio-Sharp/SourceAndVersion.txt new file mode 100644 index 00000000..d9759e5b --- /dev/null +++ b/Output/Licenses/PortAudio-Sharp/SourceAndVersion.txt @@ -0,0 +1,7 @@ +https://code.google.com/p/portaudiosharp/ + +Version: rev44 (Feb 26, 2012) + +Files: +PortAudioSharp.dll +PortAudioSharp.dll.config \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Portaudio/copyright.txt b/Output/Licenses/PortAudio-Sharp/copyright.txt similarity index 100% rename from Vocaluxe/Lib/Sound/Portaudio/copyright.txt rename to Output/Licenses/PortAudio-Sharp/copyright.txt diff --git a/Vocaluxe/Lib/Sound/Portaudio/license.txt b/Output/Licenses/PortAudio-Sharp/license.txt similarity index 100% rename from Vocaluxe/Lib/Sound/Portaudio/license.txt rename to Output/Licenses/PortAudio-Sharp/license.txt diff --git a/Vocaluxe/Lib/Sound/Portaudio/readme.txt b/Output/Licenses/PortAudio-Sharp/readme.txt similarity index 100% rename from Vocaluxe/Lib/Sound/Portaudio/readme.txt rename to Output/Licenses/PortAudio-Sharp/readme.txt diff --git a/Output/LICENSE QRCoder.txt b/Output/Licenses/QR Coder/QRCoder.txt similarity index 94% rename from Output/LICENSE QRCoder.txt rename to Output/Licenses/QR Coder/QRCoder.txt index 5624f5cf..e331740c 100644 --- a/Output/LICENSE QRCoder.txt +++ b/Output/Licenses/QR Coder/QRCoder.txt @@ -1,5 +1,3 @@ -// QRCode.dll from https://github.com/codebude/QRCoder/ - The MIT License (MIT) Copyright (c) 2013 Raffael Herrmann diff --git a/Output/Licenses/QR Coder/SourceAndVersion.txt b/Output/Licenses/QR Coder/SourceAndVersion.txt new file mode 100644 index 00000000..21625974 --- /dev/null +++ b/Output/Licenses/QR Coder/SourceAndVersion.txt @@ -0,0 +1,6 @@ +https://github.com/codebude/QRCoder/ + +Version: master 19.01.2014 + +Files: +QRCoder.dll \ No newline at end of file From 5c2e0d5dd9e1da40f3f1acc02c46934756b9a114 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 18:33:00 +0100 Subject: [PATCH 008/116] Fix bug with record devices with only 1 channel --- .../Record/DirectSound/CDirectSoundRecord.cs | 64 ++++++++--------- .../DirectSound/CSampleDataEventArgs.cs | 4 +- .../Record/DirectSound/CSoundCardSource.cs | 10 +-- .../Record/PortAudio/CPortAudioRecord.cs | 72 +++++++++---------- 4 files changed, 73 insertions(+), 77 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index 33ef285b..5707db98 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -16,6 +16,8 @@ #endregion using System.Collections.ObjectModel; +using System.Linq; +using System.Runtime.InteropServices; using SlimDX.DirectSound; using System; using System.Collections.Generic; @@ -82,29 +84,18 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound foreach (CBuffer buffer in _Buffer) buffer.Reset(); - var active = new bool[_Devices.Count]; - var guid = new Guid[_Devices.Count]; - var channels = new short[_Devices.Count]; - for (int dev = 0; dev < _Devices.Count; dev++) + foreach (CRecordDevice device in _Devices) { - active[dev] = false; - if (_Devices[dev].PlayerChannel1 > 0 || _Devices[dev].PlayerChannel2 > 0) - active[dev] = true; - guid[dev] = new Guid(_Devices[dev].Driver); - channels[dev] = (short)_Devices[dev].Channels; - } - - for (int i = 0; i < _Devices.Count; i++) - { - if (active[i]) + if (device.PlayerChannel1 > 0 || device.PlayerChannel2 > 0) { - var source = new CSoundCardSource(guid[i], channels[i]) {SampleRateKhz = 44.1}; + var source = new CSoundCardSource(device.Driver, (short)device.Channels) {SampleRateKhz = 44.1}; source.SampleDataReady += _OnDataReady; source.Start(); _Sources.Add(source); } } + return true; } @@ -200,32 +191,37 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound private void _OnDataReady(object sender, CSampleDataEventArgs e) { - if (_Initialized) - { - var leftBuffer = new byte[e.Data.Length / 2]; - var rightBuffer = new byte[e.Data.Length / 2]; + if (!_Initialized) + return; + CRecordDevice dev = _Devices.FirstOrDefault(device => device.Driver == e.Guid); + if (dev == null) + return; + byte[] leftBuffer; + byte[] rightBuffer; + if (dev.Channels == 2) + { + leftBuffer = new byte[e.Data.Length / 2]; + rightBuffer = new byte[e.Data.Length / 2]; //[]: Sample, L: Left channel R: Right channel //[LR][LR][LR][LR][LR][LR] //The data is interleaved and needs to be demultiplexed - for (int i = 0; i < e.Data.Length / 2; i++) + for (int i = 0; i < e.Data.Length / 4; i++) { - leftBuffer[i] = e.Data[i * 2 - (i % 2)]; - rightBuffer[i] = e.Data[i * 2 - (i % 2) + 2]; - } - - foreach (CRecordDevice device in _Devices) - { - if (device.Driver == e.Guid.ToString()) - { - if (device.PlayerChannel1 > 0) - _Buffer[device.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); - - if (device.PlayerChannel2 > 0) - _Buffer[device.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); - } + leftBuffer[i * 2] = e.Data[i * 4]; + leftBuffer[i * 2 + 1] = e.Data[i * 4 + 1]; + rightBuffer[i * 2] = e.Data[i * 4 + 2]; + rightBuffer[i * 2 + 1] = e.Data[i * 4 + 3]; } } + else + leftBuffer = rightBuffer = e.Data; + + if (dev.PlayerChannel1 > 0) + _Buffer[dev.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); + + if (dev.PlayerChannel2 > 0) + _Buffer[dev.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs index 695cd5a3..22a9fcd1 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs @@ -5,9 +5,9 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound public class CSampleDataEventArgs : EventArgs { public readonly byte[] Data; - public readonly Guid Guid; + public readonly string Guid; - public CSampleDataEventArgs(byte[] data, Guid guid) + public CSampleDataEventArgs(byte[] data, string guid) { Data = data; Guid = guid; diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs index cb99d629..b3a7d5c4 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs @@ -20,10 +20,10 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound private int _BufferPortionSize; private WaitHandle[] _WaitHandles; private double _SampleRate; - private readonly Guid _Guid; + private readonly string _Guid; private readonly short _Channels; - public CSoundCardSource(Guid guid, short channels) + public CSoundCardSource(string guid, short channels) { _Guid = guid; _Channels = channels; @@ -53,7 +53,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound throw new InvalidOperationException(); if (_CaptureDevice == null) - _CaptureDevice = new DirectSoundCapture(_Guid); + _CaptureDevice = new DirectSoundCapture(new Guid(_Guid)); _WaveFormat.FormatTag = WaveFormatTag.Pcm; // Change to WaveFormatTag.IeeeFloat for float _WaveFormat.BitsPerSample = 16; // Set this to 32 for float @@ -77,7 +77,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound for (int i = 0; i < _BufferPortionCount; i++) { - var notification = new NotificationPosition { Offset = _BufferPortionCount - 1 + (_BufferPortionSize * i), Event = new AutoResetEvent(false) }; + var notification = new NotificationPosition {Offset = _BufferPortionCount - 1 + (_BufferPortionSize * i), Event = new AutoResetEvent(false)}; _Notifications.Add(notification); } @@ -87,7 +87,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound for (int i = 0; i < _Notifications.Count; i++) _WaitHandles[i] = _Notifications[i].Event; - _CaptureThread = new Thread(_DoCapture) { Name = "DirectSoundCapture", IsBackground = true }; + _CaptureThread = new Thread(_DoCapture) {Name = "DirectSoundCapture", IsBackground = true}; _Running = true; _CaptureThread.Start(); diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 5c05be0a..156b0938 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -117,38 +117,30 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio for (int i = 0; i < _RecHandle.Length; i++) _RecHandle[i] = IntPtr.Zero; - var active = new bool[_Devices.Count]; for (int dev = 0; dev < _Devices.Count; dev++) { - active[dev] = false; if (_Devices[dev].PlayerChannel1 > 0 || _Devices[dev].PlayerChannel2 > 0) - active[dev] = true; - } - - for (int i = 0; i < _RecHandle.Length; i++) - { - if (active[i]) { PortAudioSharp.PortAudio.PaStreamParameters? inputParams = new PortAudioSharp.PortAudio.PaStreamParameters { - channelCount = _Devices[i].Channels, - device = _Devices[i].ID, + channelCount = _Devices[dev].Channels, + device = _Devices[dev].ID, sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, - suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[i].ID).defaultLowInputLatency + suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency }; PortAudioSharp.PortAudio.PaStreamParameters? outputParams = null; if (_ErrorCheck("OpenStream (rec)", PortAudioSharp.PortAudio.Pa_OpenStream( - out _RecHandle[i], + out _RecHandle[dev], ref inputParams, ref outputParams, 44100, 882, PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, _MyRecProc, - new IntPtr(i)))) + new IntPtr(dev)))) return false; - if (_ErrorCheck("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[i]))) + if (_ErrorCheck("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) return false; } } @@ -274,36 +266,44 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio { try { - frameCount *= 4; if (frameCount > 0 && input != IntPtr.Zero) { - var recbuffer = new byte[frameCount]; - var leftBuffer = new byte[frameCount / 2]; - var rightBuffer = new byte[frameCount / 2]; + CRecordDevice dev = _Devices[userData.ToInt32()]; + uint numBytes; + if (dev.Channels == 2) + numBytes = frameCount * 4; + else + numBytes = frameCount * 2; + + byte[] recbuffer = new byte[numBytes]; + byte[] leftBuffer; + byte[] rightBuffer; // copy from managed to unmanaged memory - Marshal.Copy(input, recbuffer, 0, (int)frameCount); - - // copy into left/right Buffer - for (int i = 0; i < frameCount / 2; i++) + Marshal.Copy(input, recbuffer, 0, (int)numBytes); + if (dev.Channels == 2) { - leftBuffer[i] = recbuffer[i * 2 - (i % 2)]; - rightBuffer[i] = recbuffer[i * 2 - (i % 2) + 2]; - } - - for (int i = 0; i < _RecHandle.Length; i++) - { - if (new IntPtr(i) == userData) + leftBuffer = new byte[numBytes / 2]; + rightBuffer = new byte[numBytes / 2]; + //[]: Sample, L: Left channel R: Right channel + //[LR][LR][LR][LR][LR][LR] + //The data is interleaved and needs to be demultiplexed + for (int i = 0; i < frameCount; i++) { - if (_Devices[i].PlayerChannel1 > 0) - _Buffer[_Devices[i].PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); - - if (_Devices[i].PlayerChannel2 > 0) - _Buffer[_Devices[i].PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); - - break; + leftBuffer[i * 2] = recbuffer[i * 4]; + leftBuffer[i * 2 + 1] = recbuffer[i * 4 + 1]; + rightBuffer[i * 2] = recbuffer[i * 4 + 2]; + rightBuffer[i * 2 + 1] = recbuffer[i * 4 + 3]; } } + else + leftBuffer = rightBuffer = recbuffer; + + if (dev.PlayerChannel1 > 0) + _Buffer[dev.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); + + if (dev.PlayerChannel2 > 0) + _Buffer[dev.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); } } catch (Exception e) From 11815a4f89abca35c194e7ed04de4000215fd758 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 15 Mar 2014 18:36:07 +0100 Subject: [PATCH 009/116] Update PortAudio --- Output/Licenses/PortAudio/LICENSE.txt | 81 +++++++++++++++ Output/Licenses/PortAudio/README.txt | 98 ++++++++++++++++++ .../Licenses/PortAudio/SourceAndVersion.txt | 7 ++ Output/x64/PortAudio.dll | Bin 227840 -> 230400 bytes Output/x86/PortAudio.dll | Bin 136192 -> 205824 bytes 5 files changed, 186 insertions(+) create mode 100644 Output/Licenses/PortAudio/LICENSE.txt create mode 100644 Output/Licenses/PortAudio/README.txt create mode 100644 Output/Licenses/PortAudio/SourceAndVersion.txt diff --git a/Output/Licenses/PortAudio/LICENSE.txt b/Output/Licenses/PortAudio/LICENSE.txt new file mode 100644 index 00000000..e0ac4e8a --- /dev/null +++ b/Output/Licenses/PortAudio/LICENSE.txt @@ -0,0 +1,81 @@ +Portable header file to contain: +>>>>> +/* + * PortAudio Portable Real-Time Audio Library + * PortAudio API Header File + * Latest version available at: http://www.portaudio.com + * + * Copyright (c) 1999-2006 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ +<<<<< + + +Implementation files to contain: +>>>>> +/* + * PortAudio Portable Real-Time Audio Library + * Latest version at: http://www.portaudio.com + * Implementation + * Copyright (c) 1999-2000 + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ +<<<<< \ No newline at end of file diff --git a/Output/Licenses/PortAudio/README.txt b/Output/Licenses/PortAudio/README.txt new file mode 100644 index 00000000..21138278 --- /dev/null +++ b/Output/Licenses/PortAudio/README.txt @@ -0,0 +1,98 @@ +README for PortAudio + +/* + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Copyright (c) 1999-2008 Phil Burk and Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + + +PortAudio is a portable audio I/O library designed for cross-platform +support of audio. It uses either a callback mechanism to request audio +processing, or blocking read/write calls to buffer data between the +native audio subsystem and the client. Audio can be processed in various +formats, including 32 bit floating point, and will be converted to the +native format internally. + +Documentation: + Documentation is available in "/doc/html/index.html" + Also see "src/common/portaudio.h" for API spec. + Also see http://www.portaudio.com/docs/ + And see the "test/" directory for many examples of usage + (we suggest "test/patest_saw.c" for an example) + +For information on compiling programs with PortAudio, please see the +tutorial at: + + http://portaudio.com/trac/wiki/TutorialDir/TutorialStart + +We have an active mailing list for user and developer discussions. +Please feel free to join. See http://www.portaudio.com for details. + + +Important Files and Folders: + include/portaudio.h = header file for PortAudio API. Specifies API. + src/common/ = platform independant code, host independant + code for all implementations. + src/os = os specific (but host api neutral) code + src/hostapi = implementations for different host apis + + +Host API Implementations: + src/hostapi/alsa = Advanced Linux Sound Architecture (ALSA) + src/hostapi/asihpi = AudioScience HPI + src/hostapi/asio = ASIO for Windows and Macintosh + src/hostapi/coreaudio = Macintosh Core Audio for OS X + src/hostapi/dsound = Windows Direct Sound + src/hostapi/jack = JACK Audio Connection Kit + src/hostapi/oss = Unix Open Sound System (OSS) + src/hostapi/wasapi = Windows Vista WASAPI + src/hostapi/wdmks = Windows WDM Kernel Streaming + src/hostapi/wmme = Windows MultiMedia Extensions (MME) + + +Test Programs: + test/pa_fuzz.c = guitar fuzz box + test/pa_devs.c = print a list of available devices + test/pa_minlat.c = determine minimum latency for your machine + test/paqa_devs.c = self test that opens all devices + test/paqa_errs.c = test error detection and reporting + test/patest_clip.c = hear a sine wave clipped and unclipped + test/patest_dither.c = hear effects of dithering (extremely subtle) + test/patest_pink.c = fun with pink noise + test/patest_record.c = record and playback some audio + test/patest_maxsines.c = how many sine waves can we play? Tests Pa_GetCPULoad(). + test/patest_sine.c = output a sine wave in a simple PA app + test/patest_sync.c = test syncronization of audio and video + test/patest_wire.c = pass input to output, wire simulator diff --git a/Output/Licenses/PortAudio/SourceAndVersion.txt b/Output/Licenses/PortAudio/SourceAndVersion.txt new file mode 100644 index 00000000..0042f210 --- /dev/null +++ b/Output/Licenses/PortAudio/SourceAndVersion.txt @@ -0,0 +1,7 @@ +http://www.portaudio.com/ + +Version: January 30, 2014, SVN rev 1919 + +Files: +x86/PortAudio.dll +x64/PortAudio.dll \ No newline at end of file diff --git a/Output/x64/PortAudio.dll b/Output/x64/PortAudio.dll index 106610f86277510325f66bfaf73f13835dbd2e1d..fd337ed5b33faa4fdad2e88489972ab570dffdeb 100644 GIT binary patch literal 230400 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�sl7Q0em74nazCKyXv)auvIt?txgwfkGuV0@5jI? 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 literal 227840 zcmeFadw5jU)jvLynS=on&VY$T1sQd$fgr{Plys!bA!p!>Odtwq5X5MZ#%e81W*`dE z#7Q8hn^Cm3>RVfR-`dtz-=ePy0lee_xo{1jT*O-Ndg1^ER7g-c-_P3ToVf&~_I-Z8 z=ljohp6ARtXJ6M|d+oK>UVH6*if&tFu~{q@J1$MLSQ>DrpO^oi|F0X-gGOu^WO=p! z_RAWqf$f*gEWfAHwXovnKdHF$XRfk4@4x@&LDyY(yDCEWyY9K)B~72<`q|It-#sQH zV}RQz`YACm@IBY%CFa#!v94qv-oO52ddWZdeRjz%9)Cs2V%(c6{#^1ozyD{+Y<_=< zr)#cwh2L+!r>vaH`YyMU3vH|y{$pCp#%oshH#XSk}#lXoh+^-|bivPT5<(P$fLf%HS)#5_@&1a?a zj;W}uC_@y-32?)aTXC**ci;DOBs`Rg#K4sWIJE@NN=H!rzu!49AS-j-4p|Ahowv&2 zBQCk@fS+~C>@?fjbl9$5`nc5+VEg5|#$d4={@N-lUL+nbvpvhki48;razu6pB2zVA z{%&D}WU=_m8UxBr4msT9l$#FOMXk|qYw?G>kX7ss9hPmo{j9~W1oxnlx$Zof1>NK2 z@Fv$CE!+6d%fZOs?aObB+~`zq*ECILJp{n4^)9Lp@aCz@AG2Cy9j=@pFs0@fsHhBWkHU z6nGKEsF}Q^t#aML&=I30J9$Z6r&n1mdRyq9<5x#*_yMPdotD{wP>#%Qa!fXL$j>Fcd*!&T+f?5(@;2jownR3qIenN39-fzd)|K$-23Sz)%U;B{&? zaGTsVj^hOMZbK*M1eloZ%kPlub_b^w0kfjNpx6-{TEyCmm<0i$&tboa#{99z|BA5-r&(vr7o4Dxv-YnNf#YaYF+arzR#0X)-@ey@f zLSw?Gt-&Fzd6!z(6iP!gPDbtczsR<`ZdYh<&1s9pY6+caIJsZb>UITFSo0SEmGWvG z;ocF#3UFdeAd>Of5ls_?wYB|AFSJ-hwz5XT-EZsA4pUv)mhfq$O+{KtH24`KQMH*! zW~mE*Y_qh8CmXH7OuYTq4K@p2Qe?rG`UsxUL#cmA2>TU<#Zo_!5L0cWUX>8GG%5A+ zgqR8=^}`8a_a~*UN{E?nqz)#8l_sVBX+q2`M(PC#VK-A)0!mImdU2HOH&F6=0!qdi z1x!dNV5AXNkPvpI5k~1vq+Mo&U7HX#oWc?+51Ex`4%IuYC!unSQGj`GPk1*gIpWcK z<{RA2Fx3d_NeKIh!V)U}1|xyDy4a|AEbg3I(9LZ|0e$Zi4FD+Itn3vdZA(Jf8VXCO z>`}9_l}2R?6DoV$DB!#9%|`sMk_uh?V-9`0QQ(US1>R$1IPX2bv1Qfh3oMq2nHJ0I zxW;8!EdPb;6fQ6Nz+z2HNlQz!;i8{izs3GjZ$jSLxK`kL4cCXb2BVzslXpJSQU3dI zug3KRuIF)mpS*{Wt_#<3T)nt50Pkhr6Xx5H?k-$E#Z`gpL0pgE`aboxA>B?~`*8ge z*QdBX$Mt>kW&@utTsgS%aE-@B`M*zIQzA)hraQ+6&VTI}f-_^xLn)S`vJSayx4-Fd zirn-;$`_*Gv=rHzz7S^P8r=x)Yuh4*o3+r##4fjaXUr03LWtyn1uyh7HNXyop$Cbf z7t6|0cS%6G&s{2v47yz>1n0PSpehE~eeNoMS+87nLT>sLwS1D|XWP}AL23(x`)65X z+vmbq+>~nMHpFyb~-0)#&dwZ=zfZFmURWnK9Gcw-i8yB;7olQ zadOkg0P~}inEnCGX*<*l(euFFPy=tGFuT)093Vc;q2I@$-^-!jOX!qs-$Jply;pZK zv_TSbB)3b*S?bOs%z6ogYJd=6^W9Z4(7X`HExu#koE8cF425Br550UVAkG*Fs3P{8 zIn{I$1{d(3sUIy6h5Lzqgxjb)n^18(YijCoi1jJB_hvWsIK}!KQ^fj7)_`rdNS(XQ zKqV(p&=+Ad54}v}MX1z-TGG8Zi3ODTeMzk1L4(8qmA~wGpzM%IVci(l28A6v7lm!% zkk#8v!0M-_)EAQI@x`y-?Qkw z56(<{{TuYx0kj&pjDaiyW)VOKZ0{0PzMP0kj?eSZXER6Y+4MOQ(3Z93UZy3tQLHOk|m|Afk+C%x{hM;_dz0ueuY!ul(BJLI(!bw3u`@mXud?A#y zgPk@lP}2OiFNx~kJ&V3j1+g?5bw*=wi?!!gYR?}QC-Sc%TgL|Nm%urG=b$Ifzb9C# zHSM8(4Rnj9dYXml&1f<>nZd_)_Mwg;(*%p|eDXHtK!4JG#X2H=x-_Idg{+*6I-MrWJ7U7yg|yT52TcmLLZ z-~Js5fb=o{f%qnYqmTUM!r7gh0EyYP_3@r<`ya z{yn>Y8;}<_l z7RV<56qyCuO1%}cB5z8)$nQ4bvtCRw72za$ij_Ai&Uawsit%GnSm%XI0OOA_o+F7c z8U5h`36yevOY&wq^@W$@jjSt$q*NDEkCZ2fm|X)c7DfVQSFf$TsaIH_3^HWPVM>bh z$WO|g7X;uk#7Yd_k#TqvJjv(L``b|EKX|z-#c!0F56L-rhK{2`ti0z!HPh zfgM_3Wb(!&U{MSK8)u6#cyrGWFNR(W;%EZIJio4=1@9mt%3qjbDU8_t7+8U_c1}cn z+fSV?r!*aQ3~a{}F&6%eKWH}?a0!$q3WIGXpV>s!Ce}A0xgKsGCH#JO`JxizT6^_I zB$hWep*&7vu(xthd7(sP1meK<1qsFcGXWPw|K3@*@cEkyGbj)opTC_9hR96krCyYI z@97ntCh=YpK+5t!nJU{f*z1I~KC7_yc8I+lO&>Z2?#H`@Kj2TDh&7a5Uz2Wew5dk` z7&L+VG~B9%+Nl&2MUoq;J;;*kLr;ry=iP4drlj#XGTzv}{X^p^-rIfXa~7YCxljq3 z$LUiGR`TZY@f2%bV%rV{%03fD5WhnECZm1x655v*YhEeLo_h1XZ0Z@xS^ZI(Dr}86 z&KPq>fD(lgE9$C048>t`lMgf2+5yh;?_B7y~>HVSjV2}wY3ZpcO9 z;Xc%mzz>b_Wt5Y^zj%2~hn#T+cGmbJc=BWX6h*}KQSd)YtCc_kGhINeHO@#s1T?Yn zJxm|p$ZS&cIlDNPJ`OLDM*_SUU#RW-;qTJ>AkNBmQ`JBo$yZT$^M8rIcsa@N@ba1t zW&aEO<;C!q)E?ljRkYGDx9FHd+jv)glE5Db|5qFJgE5?={sm2k90?+*D@F$~d|s^M zpDOBuz9e}SOFy3I@BN>ijX$10+*th`B=~-;Y8npl{vY#Q_%q8(LZNDw5`*W5{}O+r zt2q_MH619cOKzT1Pn5iE}&u~77HxmM&b!1&J*d2(}$SbvOrkVl7Q2X`>I;W z?Mue5JwaTZ8^75}{ShAv$IO=V;^X);6Tv-=x4_R!gIvSwnkbZwJcBupA|ns$2r#z zjPc$oVqlTs74;<12i12W;KAZ*O8)KztK!9d#W4vLCw0|Nkhx9dZU!fWc`(8awwf~5 z3^(7sGf10*nN4jDT45_4T!^*XO|F;;0;A$)lAaE}hRNQ=3ZD8DPdRrA)S=HiPRPP2 ztlD7)1ACvKSLdAW#7k;6;J`h@!S5vm2Nv*9`W^932fU)w1P1t)m5h5Ppyzbz-nK2k z-t#L{9e!novq&k-E>fnt@>+sofHf6Gut*vS zxLq48h*B4ZvBXHPt+nnE2(V~bR-~2LNa+AI3^bpC`EV9O2tE3n` z{J+m1=hvw}xjV%Ks^Q*#K!@2I=$}aHP4U=m+x)Ci$yjrl&7x%eH~!^F#s(}Ki4EjS zBD2n}xeq6X~mfO=80r zPqbMun_V_~!7B9nop{6K*I%|(QijjPi_9|Hu>!5#oQJei^|Zg-E3=I2@tl898BTX) z_&EMg&$PIls^0Vq>bZ;!^D$bK;R7k0D8EZVrLhKc+NbFl7NUc0EI}`IyTqB|ERoNG z)T_xqp-hdWAEj6O&iu?7sUh0x$Pda&NCUWs&Ua~I8+efdY*QvZZ#1Yzm_ zW0AchDOayXfXMzKvakH?TP3RwuXRU-M>ZovATqA?avLnG zJ)t4t2Zm{(wD1EiEtsZcr67Wd!<37{Jz6jo%OBz}Cc0uTE;tfcQ$NNyvhCNJm8_jK zqO>-x)$jR6Sa}oL7oPAY!n9C7H1Rb&q5HY!kBI>00JMn1mvex3ah`a)IJX5p5drqD zRFKM$I(S1}N7Z>2$5pz4_aI?ebXZMWaB=@xThKSy`U7zx7N7-!MHCo?zb5C>x}!Q#{FcO zo^P*l|ATQ~X58l)_a7VgOO5-PyYzhT8~48(_hrU?nsL9>xSzb!sK>akHST{l?)TGu z)t-Ed zKq~O32c5+EnjNC2ap{qU)B~Dk(owv;8Y+)9!#)@ zX6=wisizBUmhgnH@o!mA4HBfLg!u4;!xUqJ#!`3UwXU(s;Yn@6)6&$2GsqKfRd~Y7 zls-5DBl{9h#_#d+5d3^nSK>j&G>qBXWdKf^8wVmhp@!0%Ar9GU4JuMYW|XX~kME!a?af4v`7BHCp8S2=&M?%T~b;u0P>63ZPugtPU zUjWCehfZbjWUK@fLIlbt%Ae`3QV;cVVGB$T;8fK$4^d{u@G`sQmjfD3fZDnyBb-fh zs5^PTga&Y*udX~^&@_P5A=HYflTAu55bZ+kI6OC4Kqy@qlyM*dU%372E&~2? z4t!4-BcS#W!bo+j#ytlA84iCL!QY5*PsTR*zY398@l2XyHSX$g-h>{MTVJ5Jn&%2H zv0H>kCK60=hs)+*3$;GH!#|Dy4yGHx*3F>6x|2aCInoXEd>-uAa0+dX&LYkK%pEDv z6Rv4q?7@GQinqnrqN_^(+6~PEDZiqWxzF1%r3o)}ms^5IsVF$x9SnZxtJ6a7!&;x- z@CBtx<(%L5FhEFK-4avO_FZ0R*nHV{JB3F$Uv+ zhHnUoH{vy*Jm+piwE^~=yBl{x-An_cC@`SB$gw2B$wQ@RAS4030p(S9CxRt7upFXj zwg;}VKDLAGr8yE*Uzgg-d6iJNiQ<8HA}T`O6!`uEbGCPxs$b!O9K%OVXTqg zbsW(AZ9m>I4P1@eIqbJI6#%uvUz(-@*|4S89H~Z9k#&izhrFS7FDq2nVwe+T(3H_p z8gjYew!W%FX+La$}W@=ss$L7ELUfnuzdc+%HibI<_EHYI&Re43ljPFT6G& z8ldFhWU|S{DsIK@@)1V!Nt|6SF|CTtlTQSS91_vQfKqBqdY&@mX(@>f* zRfLHU?>S%R^O)a zM#jr~`1_QX{jbU+{RP$%b*v#O{mhHr1~W5s7BfDxZ+s5G!^Fjm|B|!jpsCIHBVNK` zPKz1;wjSSqfp9DJSx$>l5j~^bd1eoq>7P4)`th;!WSipSkt;A5gEBio=BzSaK&YJP z3LQ^9jrpeGH4dp4%4$fD(Lh2>V(+@BcO=$ELx)_`lL`UU-bCys$C`u0(6`L}6><1l zpiTg^|6k#gzXyC~|8sES{ilW8895yC+tn&aGlX5MhhhH)r(`_`rDv&w5QWsk!m3qCwc;f-K>Z(# zfA#jGnr0~MT!~4{$_t?U65B0-0-KJ**dwfYS7Pn?yCHPMQ^(IruI~?t(=R*0dh-ve zYf%^I4uZ?mQ<+J*8&93|yemw8SF*MFJS`PRI58*f_Aubbc*rIR{NzcPqKX# zaK>KOHJ37|`96p%xU8`Q;>lKfaEu&&or?)eFdZVyQFnBi9fE!+R~d=&O98t}B(-nu z9k;_i3foQoNm@-UA-!TX3Remw<<4QU@{4j@3uWcyY6MEkJ=iqzay`Z0ezQ`$YKW)q|Ibo^Ka9ltL;!dLh+P zI6pdw?n~xJ)AU*yVhgKS;d~`bxI;n0BMd-Em?V``IWDjmM!NhX&mvxAJC#D0IxrUa zD}uk!?PIOLa7xH2p4^-g93Y--vj^>BxIIPGp?PpSsU+L6nI@&UDup>{DgyaiU565W4wbN0;fY42FjH8w#EmN(+lB6)3)`krSWYIZ z``#iGBqkDgBfIBpiepn3>Tgr|8{-|pqkp6aRHI-$#YjDXx=;_u)&r=w^niW{U~OIR z0XYSgRf{q}x-g(&q`m($TDsiu>4-|#q)7V5$Y4>o%;BJ+`o_=z4q8_!$X#UHnhvL` zFCv!qIVoWsqF9<6kj9V61~!#pM;YRYg2+UA8SfHZnWSF%6-Kw-EB*N>f=9DbD4}?D zVJzlzPyqD{dk5i4p{#zj)$D{~^?{F3z!DkgD-qcy6WK~(AOZDCxDnMOTFl=pZ0H_Q z*XR|VXjLkm!kTZ5F8JU!YG=3_=@Ob6Le1fgL{F9kJgvQtL;&nvn{SZrX0g}kjwquCmgDb)gp-T0kPbspNk925;SKnPk#_wn=oVuiBI7}d=a7J8AeFkAfr66qB%vD6ghyosnL=^adG02A#>4e_-W z4mTY z$99?Pk7jw{X6z}DQo3P|57-+0;m@#3j@Ja<@9YWfH!W^vDBFUSVbs@d1Wam^+8yZK zKIZRj%407k1tK{SMH0LeV8R<~KTQqMett`CKlNKuehM)2$Mto-HPURp*Oz~gnt!nv z$@DY0mYYEtze4YappXllss32*IEv~0Vb=4uc(O*@v^4L=d1G!@xg}z{k zy%)2UZXP(7mL(~ok#WM2nVuTUnvF#IvupHpC6lnGIe3y&QfgKsqf$e7Qfk`qpGXkA zJpq!x=pI@xn(208y00%8aU)x?gh}U1$OiF=eYSi3tP6xIv6B#~n5rJbZ7g!-i3LN2 zx?Amr$FJG{*z3ur4ud=pJ)49{J)jmxfW6=KBeXiaBnKQ}PPxQpxC2lFynYr9P7E)} z1onG{T7opZ@j3isF<~SAWv27k@OT9L4FN?gdjnw)`3Qin$MB5tu#bum-=dhH&nO{u zLqhK0H4@u_&Kdzd8M{SktczNctk?&TZQCDibV{D7!zw<4z@u`bd2BCI{{Uu_1*_Op zH;% zR7hRc7`z7Ug=r?fp2qu+)g%4cUFfYioKQj3gKlgLj-zgj=SR;_W~|2Y1qgJfux6?( z+c=LkdevKT0Dw_4q$Uv)V2nm6&9pFRa#(mZ-u!GU*&?)G_uxfT`h|N^gxZUdng%gz zBfkSMvoK|Z4Gp7scGwuH80v#@&1Up&B*CUKnFg@zWK+Fl0DeP{>!ceW0W_X{bw`6a zM4hlt^Z4zF{f)6;^tTuN{Y&bF0DGYt2_Z&;sS-OJ?JvGgJ%EJl7-)Qk48@x$ED(9+ z5N;CdVYfJ7i1M**MQk(qAR6RQ%qBau%|s1F*bcX*P_Jupx947O1)O|90w&R#L@e1( zNx7d&iq1^P;x!&BYH*1do`^>4gv|*^A3^%)c@scjw6BFGM2V+yWWeu(pDkcf zH_?n1=ZbJ7PGpO+FaIP~8))i+@%|ajOV}|9w#ik1I8I+|Mim=4DPsSTr)g0d>&-n) zwPHZz0Jl@!!OK|TFw%5kRV1{_C~Z6dZ4%Zr!x_|eJbI_djsv$HZF&N|vrdSZ;M*$8 zX#_92u80Ua#%~AqVNc*!N&Ly=OO%XTR;dsl*uZ=VTt@GEgB=`)zpccIzz%#+9l;M^ zVol%&J_qLqo52rGf`Ev@5Pms7XqU+9gaTyG3ydcP^vt(&^==KAuN;4Gss5F07!CFES87yhax>1G$tr4?iM)g7pYpU;BQz3t(Ei8re9H z3XVQ68bxA4qLbP5NhSL=VNPUU(#qOP^yqn8m~?`-XE^haek!p_Z|-RjaSyIDvW@#B zMn_1@hPH`s5(UGmlzUoO(`!V6zMJ4>A{E^0U34o<2Z6}OLr4WhBft(Zb3pG1u(klY zF9)0h@~D_$ND~Jl`uj#$(<-d-_2~2m7Susphd?!ndgLqg7QHV2DAjVkpY>wMNZ^FG zf?o&*yO=6bfo)CzzD-y&9mP%O3=Ip4x*@{EoMbyA<$glEjMrgydEFoo6lTHap(q*q zZ((yO4zH)2V0;IJ<n`bXgCy5s`e-P$4V^Rj(m)5!aw+m z6^cM@ltOsVfEQu_z0gSkr#)MQNxe~e-_PGAPqPRe%;>CqiQVg^4$D1(_I`y64Cj?< zq>PSW11Ulmp6obJU`Fbl^^sIi=3V4B!~{$;G5%wA*LKL+Bzcj*E>6V+24@%OE*7Tt zKs*n~ZBzJjG;QQYYUxNm`80>oif@2na$kpdp)Du+mJ#f|CHqo2Z5}BN820vJK9IRW z%UL(sTcOLYCl*Ibey1hddXk|u3)8ta4c%&lzyuo{n12*(f(BP~ARDP|H(t~mP`~8) zR#=WDF6egHu|ho2OD!Ew{tO17p$9P5gTX-LkJK(GSkxopn<@0qM!O-l3;paNz)?`? zU6hxgkLdI$vCSmDrf~7q#>JPgX0vRa!ll=&k5|E z&mg|PzL_Ws{cKBI94h_J%f-1c zND&=EJh7f4!9evVn)eQarY3oGZYiud2CI9Y(F&D|t6EU9Xnn0RHP;7gr-j;SB|_u0Z}Al`}KFK z2Z|=^=V$MDnuJO1G>0Y({H)+PcjezxM@ic91CsX*zk(C zV-Gcm+QGP4CYr`-c$1hyl?QY~33awwgu?kWuN#TO1S%49i9on|pQq*!8tnmafQe@v zf~>aggbF!=gJXeQ%*`Hf*g_WoE9%zM7$V*1BONM{FLkJ|C5Hl5hz^CYXF#X!!J4SV z7$1t=WD1#?1cLes;*+XJe!Y=3)JXN$CwYF3R-Qi-`3cv06Vyt?C*{|THu;SO+zbMX zGB<0)`Mv4%nx`XGW`BJNrHQN?&TG2EhcKx-{6LOHsI5VS#C|a>z(#>{`QT!5J4|r_ zLmUJm>klCT&hG+0jqAfO9bkTJ>La)2VX|T9!vR}VSTh9-tX0=Xelo10ovc4lMGY=C zeVDLj2Q&<~Y#lgq9icG_g8@}872G*&(Y!$9WvUYO`PuEUI?pDI%e-T5UchMa& z^m#e{j5^^0uUp#^@K?<7hxz`w@s|X|t4396R?cv~3x9ll*Yv;Ui@f@1mf6dMK&WNS zr1eeefhu~BchS}Q1RJ&llK8p?+6sw34fd6tvUM6)Ko43uLyD$Z*Xw;TmzIa`BbPfk zVsM4iFe}nQZK6H5`3f;z9}igHQ(;8cSpQs{Y=Uu}=)Ft+?TYA7L_1H+``_F<;b%Bn zuLp)u>_$~zLkS|A3d`<5$jPoDlLCx@TH3 z1nF&9&8;0P%GZ1r_49~MRe7R{&J<`k8iGezabbYsPt z+Dm<&BP)Y(>K^7dw59wO<4<&ez>7f)4 zK$%2JfLKBZ&2Mb8lFN>)+=K-N5pyR$s^fLJaHrC#VA-T^eLsu&wryKOKR8vyU$-?l zlHbYyBO!WQUB@ry1n;S7Qlb8bd(#%*0xyB`-vf2rr@iMcFiOLxy<)uX`+cKvA7$K6 zT(5`!&A8uX+(*&9rg!xed14SpL#Cz};Sc5`eAQo2@)}(0aJ_}A4cAUw`*0DS&0o0p zlEv2nrnjHrFkv%VO0W!EXXV4CxarOdDPTh_4G#Wq=l^I7-+Z=URUuN%!ZjV2AJ-gQ z7HdihIV_~$M;;4_?}oofBEQRHFqeKto0oDn*pM4@ZP=C74|Z_}lBof7Uk=~e#P+CH z?d}48ni0BH(|f;(&(&@dgmcedgYb zFixXM>?|OK-~+8;D-37F`Jiz?cdFp!XP{y(yN49YJh|+%nEi~jbHoJ7*i&?~?eMb> z`QDDPEMRr2&+;+Csu6?Dacja=cmOZFF(MTqY5R>V(BV-31Jik}P1agH8>x<^|4jgb zu;~a$;?{9qMtw#;4;W+R0hW5_Kx}j=`yjxM<4j8!e9<-CVz}Cg?y?52f&+*b30Qq5 z-tm%;7p+O*uYA0fldA(3nxAo31L?9c{UK$!l)F8Ut^(Ipjn2ODVsU9)|Lam<`1@SO z)V3ZubbAOa%FBL?tw?VVuvw&n^@N0FgThKSDosJ~8+tG`OnBsd^sXLdN7R2Is%tBP z0Nii!EUc|hN3L4frvHZkVj0y471`TrInan*0KdSiZ~Vs9C@Yw*UNL}l$>DP;jj%R+ z1fjLSLM1OS!-wGT`fdcK2$2N{(`x7ih2|#2)CCYDDeD~^MZ=wl3KT4H(d>3=jyA(3 zv*F+Lw^>@l79_v|WX3VP$xP`%QCe2VD6B2BjCT>%Wz(zOLGj_HVzsV~Mg_(F)r=4o;i>J}hTAj12qK>Q|ux82wvt7DETtt7Z9w zz}N9W?1*0V1fmhO8&SoGD%pdaw2V~H(21DfbdmkD;3?h}lAmd04vNw1jcnzimyk$e z)kKYK)qecL>%Tx-MR@_<0Dz~#udU7D;bkm^dA^$Z6T1M*$qCt|uK195$RP*cq@ir& zu`Ht#?`VCw+IE;^Lq;Rs36!TfDAy7wtEREq!&E<|V|$92eY{%m0Z;unQXBR13`^gp zH2J&L2Y7sHg;Cm5d?e%RVj574-ZIg{voG!NNBqU?9d+4e-t;GtKpMY(HIjp}{r#wbjEAXm z-4mOJ_kRLJED?of#p$&aDf-fD0AX=@{W0ER^m@JaNB z&)9;OhR>t~FAASY4Q7VVq+#pHnSR)Ma>jwJCuatPQu*32v}Ueaf+w3^ma+G@&|-K9 z>8yIyS)qB6VjCBjGUiM!ki+r{d%Ka0{ zr3UJy(bf-MJ9Z6Eh2e`9y(lBx#tF=M5Tww-%D@UhT-g-CGCO5Qt=!N@Q15NYQmt+)0A@Ifa62?gAd_*yO@y5kE7P#7ZUbO}DcaiPk%?_|ewGzG9 zbt9$~`5o$C5QqMKK93kMD&DWY){N%Qgs_ZcR3KFSlm0H@eG82;9N#d>BS8PRP;&i^ zcAwDP8LaER&tl`L5h1MCfR~7pyav=uu$hV|13N}Qnd(wdGtDhIy6YMx>^hXTz^?;A zyq)S2q6)UsO{K{gAGwk~K2&Xe4QYw{;-j7I`gIIiq5DhImd^8L>ML`*^0 z@f?#(`@QIfo)6 zGtlQ&tvF9^OP!1W`ZZ+3sCqW*THZ+2MrMH63Xy4fJH5h3lP&MW6C5;A_1jc+AzWcH zzO|4bLCG$>bek{82WF@gLY>2;oAd8vZzb?I%m;C9!RyEZ*@ny;@uaQ=Ttt7Vf1;ui zZ43dZ&n)8+3Wo1b8V4Ti#u{MFelT@yHL0En1c}6Vo|PEMo;Q*qUOZPk8E>f=f{%%r z*wJ}0su0(^5RUmXjsXOpg^`d0*P3Gaq5c%}$HTn%K=`y49HI_D(ze1(jBeUYiCr6Q zV!}(}e4^&aODG*gx$n~$QLg48@aQME=n)`3)cOeR95dEG_}&)-tUWaEKFHIAF6R+4 z*35ESg|*H}!rF98?ygWjS!)E|j>5giiPTz)x)o)4_Agx*T}o7r?%UZ47GY6s1TV_V z#XS&79j0N&J+I(z$N-w^r`(bGk~Jzdfh%<9x$usEO(V`eq-)0jEsg>Pp>-?oFjWY|Ym=`!|`(V_j$f&oET zcphJk8u1?L#uiVRHS?Jo>?27tHvT<>JQ$u>a}l5(*svJK+v~hcW`nWFPL5*gpLt{V z!%sC>B!?TGqNarM;lmq|?X+U=k|H>-mvv}a(&Z`C`q47$2ftBD$hje>ZA=y$7E$q> zY3lqkl>Bbe2TXRTTpbgyceu>zd2txPgAuFU?3CMh1%O4@edtsYPA~lI1)TMZeRF!V zoO-iRFIPQC08{a_|C8FZNDg;Ewyfe)JzCcQxa{V zQ)I2VUb;YopgutXz@r1oL zf!yZ!d_%8Ite2cr-Eo;EZmy>B2XGxk{TN>znhvsq0FJ;F67k&M){A8{co4$n4#pr{ zIYfdb;(GFx&)>b?f}>X{%B5xbhLetqNN5h!$?6TSQ-487YFPz{17&!V95!@+UJ+0e z*Y~kboX$XOS-1OOvMw@w(POKYwdWGzk2at?l&xiL9){u4uFgaMHjt{Lk9=xG!r3x} z56=J4<(Fw$3i2TLP%UePo}0Fhnz?hZnGBhejjhS~?~LW2qUS$^?*AV7A@x)5{?On! zWH%!|AU3#w9xcm_W@+u=o=X=G)8*SGT%JJ`(m-E@u`GbE<_OpghH+}?2Qjvr zhY;|47%B5R@;hj6AOgVVh&AG;Wqkxi= znM9o&zcKh%AO8OEXa0Ne9|c7v!EgV!;QzsS;OA~|#x7E_B`rix>^&4C$5Pn-*c1A$ zRMxxR0ql!7Zk!!bF9Uh=cNha_<@2W!`6q1IJ>d-ODGmi3H9LlCV{e%ra zkq1NvP!j$;uwo01jXb!Nirfs!_L#d#VR#9`AaWhR(&)7}BiJl!{gk?{AU5);yp zD&_rOV71Uxc_E0PnlL~y3Gpua(Rr_M(*&C?1zrC5{TN*q=N|+zMWzCN5j(CUg?XHD z7O}&ka*>wx$BR;6kLed0u#v`f*SF|3Gza@byS~IDb$^aJqL+lvqYeyfoCy(O@%I!kAPr+Kj;N0wy@>zZ082dqlJ=rCa& znMr1&GBx-LAV6&Wyg*w&lAJQz$F{3igCry-KtX&3EBf`5Nw#vr*`Z99)jP15L%v05 zpM|XJG)V$C%f24n7T#1Er(zw~^#8r-!vmw@zoL&jeh{ONg0tzPcPN*)S+rGatNI~^ zXdm*(L-v0`9)0NJ()VKYQF0c2Krx13HR+=gwI|R=Kj6rq59$q_J~Td;Or(#2>I+Yt zgFgPu6UOP|I@fvW<0tVl;`DJB%J?4ikS^nqseA3v`s zWN)2ZWF`9031$+ApI8j1lyR^HCR0iYQOdEgeJO8~)>I`W=`E&z*(=`~J9a!hm%XktDTp zfEm|;FLl|#5^>E=U4JQ=;s?W)8K2!35rD9MackJwv-?E-hbc79X?{Lf{p8m)o*4zG zzj~aWw{jh(>kXWB6(0Mu6FZfD8qq)Dyj4z`2?6c$h$cIFa zb8r4pE*y$jH>{{%;Oqu|zD*&35;olBa7ye!Ox$nFt~Ab%xedcUP&Pos@i0Q&8-#2e ze^dJw9!?gfV{ZaY3?+7yeN}L;Ytch8`2hydu_y1+zk zb^R%B+q#%s^RXyV>8kjZ59h)x(~q=y4rTEZUAq2*p7{AVtMEjpaikI8AvmIo*jBo4 z8X%+c$mB*){FFnni-7nuj?JJ9scdR`G=*)4xrab`3&B3fNG!H9d?AO9+fZ|LXjT@{ zCvdK$B7_YK98Mp*-|oj^kMQss6kk*}NJrxzO*H;BhQ?KRisMknUq8YhJi`q9ar6l* zuK~KSHHc6+nFU4wg}c-vV7UZ59k(%wWsV@|)h{^;k<3708{m$iP<;Rhr7U{^SR9AT zMbFV-ImcnNjM_ec_j28zk%|L?&7&s97V}C&Hvj;tuL|{14ja2S9ax&pv9w*s62w0p zOhW2})u?wKN+c;iSNCD7BKv|Fc z>IS{To<^!rHhULaDp-eS%OY@{;h*mUvxtmSaf53bebVO#@Nb~)(@m$2ORSSSo#4E? zNi4A3?&p@04{(?W+cGJ9!*WY7Tk>pOj7_sm1S=+`R0-6aY)CddMx+s1{_ay>@W}k# zter#$Vox29DL-7kCHwQx#yBV!{5WzS!x<_nfefQYniRR&8NI}_cTpzW3;9ImVSwoQ zy0RbpI%?y7G;`hM@a)A56zA0_7pOGfBM;_3`gP>TvFsU0t>< zOZ|*cv1}LW|6p zc#xqGzBAxkIBsQ|nyz;Pjh8Gk{(y$A!oaWwFDt+X^yN5n44a{xh^{?`MHZ8T>xd~)ax8zsX#xT234yl;Y0vmkV4v4Bx@6e zXB)+EV+x#YN4JwfL;Y`zJOE7KEC;WN+7+vkf|CpykrgZI*nW;_Y%QNX!TcrE@{Rf@ zz3En=mSm$CuFAA5ngY{0Kn_k+`jL?x;Bo|vLuNJz!WxH53bj|^jaoZ_xAuCFj;EtC zn~xmYyFsE%+`tbJBUP6*VSG|J2}UFQV?3f2r$m0j1$c#|45F6oP_Kdony}Q>Oj)1c z=k^#vHW1Oxg6gm1Eq#U;ItQ720BeNqMrSPa>91cg_yf< z<(TD2EJyVmi6I{vzRb&pvNTU;aJ=j}RXGHn(6cO5GREL9p`}DGjkiI$P>25~q`d(C zXsXf=H)34H^l>q7AcC0@JkMangaPy392hcTi~KNQ1YtG2aY9X!;2}AUC{Zz z^uYog`Ahg`sjm|Y)7Sr82m#&WQ>GskDfg;Aunue+J02*w(;?LEB}~%yN#{6mh=*LZ zU#KVf?8gy5*en2J<1~z~8xB}>XH~36AJDQov4YEbqC;bm`0x{tc#B715SPH6BQ!&N zolIIN=1Q*78di>-TGl?Kqq&?*j1;9{)#;x&`7G-0ljy(9L~NgKf?JPNayV)gl)Esv zXpOO)w-pE2{T=%qX#|&0K-*-@><9_)nto9?jo@BNQBbM|smICG+D6|$w$P?HOkh{? zwNFwc|3vd@oNbK6_~JqWh7JA;3*`gZ&|a`p_OMV($~cfmR8_*Urwa84scI;n#WZM3 ziOk@3hT%(YFfI|i4%##H9TJV%0XA0U@;{7BB7}e|{5krdt?GU`GR!MS#(L$Z5AFC& z8;){#AG_V;um@XDn4Bm~=JXH9=^Y}=GdM^(=3hdqq5NWC1MULZ`R-y&OPD_cg7E`&|>W?WgEyVkw zJ!hkKnx~ED2h-~8b{pB>uM7VuCp0$vpu-v(gJbzb#d2~|x&w!Lv|8yYC72a1I0I7~ zKT4C9^m5pZF2zBoYZ8Mn6n_~lBN|Xjo-Gw!4HzQa#V@h( zc$QcVIl!>T>hX`&e^Rx({sPJ~(jk5ukEa3<-$?N*;_*5?VEX{%)`4Ilo9zNFA$Bl- z7oFS~ODKg}J0n}5{dPG27~nYo-sJ=x9VOdd@tKa#JPG*R!6D^J8T2#|+u7%V@_`Pc z6b)pu^tjjq(0uO6W;a2}u&nDl`Z$49;09ur`sb}lQURMEiT3Dh?Qf-mzfxBS%U?!^nQD@sePyg4vM_a* z!D=FzUid5W*%3?6!*>+I^LJ&R(UZ_IA-v1d2gwQPa5{%<%gocVY_JN^iQBuH8)VDIQ$zvaKs>F|hYb$B*%03ZGZ0!a7g937m!1l2J{;7Q60G>ro$v?dRC zq!fk1?Fx@esdVZuKakFalvH#m~+m6`oB86N^Eux|l5>L~&&-AI8GbGvXx zyca2aOzLpp;P(!7ET-xvIdWY8nT&!vVl5tuT~Vk9B1CJKJcopb%h5Ny-2|j=p$4Sp z{AiB8T*v21N&Fl8b#Y!SI8Hej&cXzFr(3k}jofy8d$fT*H2OUL*QyvhFv+f=FmBj1YWXKA!473T@ece{L%2d&tYi_g(Q4epd-1t_Lv zVYqf+CDezV_>rfd=SUn#n$$plSu+@@tOPcd$ZW-a#K3D^F>!YQDGbVeYuQye0;0$Lypo_)dx8?I~;xXDsju%Q5Q=PN39t^inW#x2iwapLr?y=O_gS z6+NjBK)o0aQP2gX@j(v&GGW&brit(b2@M6xg}Q601+ew^mptzXwO8OxX3tV;7)6%4 z=>StcFU7x%*_KdCXVA#(5~yPffg+1K%!x4!1TPdD(s|TY%xb!|tRof}VKo5;>*@C) zL`6YZ%9Yp(qFN|F!F+fF&pk#|(1j^Arf1!31;GyYV4S|vWLrTj#M8O7Uv9H#YmBB~ zksjaBGCuaUqC`)*nHMX|k?F;1^M8O{0}?n!O)vMc&FW+8U=7PZC_$rh2MV4gWC*oE z0ul+}r@QMlia&}qDYAf8^XZbhl0)+*Ve*trbdWE~Y-(Gcs@MMmv2)&gAY2FTGtK>ak# z&s9J9BBBe4t)PBz2YW)j1PWm)R=)@3Ce=^HqJCgzG*ykB8;t@j>Rsf^3&dG@Q>?rc z)~WvPX_|b_b&uBfJ(E%D3Lt}z5*VYgZ&p&)&|tx*F`|R;OhYA#!&We^%|Q^n%N#+W z5`AO^BI~LE2UzViwqiA&3V5v{FAa{TxZy1bm$98{I+kq!qML}T4#qU!R}}hNZp4fa znXjV#j1o<}3bix~j}PNV_?t0|FJpS^p6o=;p61HIgoxZu^%{5~8Vz4TQ3X6%XqFs# zl=zRT!BU9o;jcLhi&cqZ_A8)e3=SBI)*-rHje1ImvNe8~b%)i}E7{X)qTSrhZ z=&&{czR*o3+@UGdBkJO(Gz}lpyryx{_3X(W0_@3d{0H&1f=3VGLCY#SP1~WKr8r4> zmLl1s-|(0jh>4D5PkxEFv$9>NXQMbXo5AWxgz79Xl!)d) zhcyDW_Sp~zCOqOkMOBr=o zQB$|8zlEDJ-TyFvG#C`hje)eYjPwNP$+0Ot)obeWw8%`_2R{Y0=13`*D5(!N#-wR6 zLimBaw6xk(&Y7EjhO}2_bn5Q`0QgnGI-Q&S4%m~}nSymsp(Vm{LT-Q^W5)_O*I86X zXLYdm1DN0!;S3vnexfrnV=kX=n-rcuGW!hp%PJHBz0h`JB=b1vj4HtEKrL(i*H$`( zI*-J~-3X;KL|Pmk&Mzz0h*}#q<6>&_7Qs*vR@RXqQ`QlG1e`D7Ce+>s!eH+gJllY` zMc2s;J`5vh1W*-^QWDfOQp!#0Z3GsH~^CdTddE<0U0L!Gy+~) zqfXD6%%lPb1Y&_&2SZI#ckP3W&m%(QxGW+P1SNtBO-z~um~GITK?U$sSl>gujZ?t~ zz=TO|9F0v>tk&ocw~=36o`1`=4$kuFWOO}rJB1c3&NjDqJ-Q!7sPDz%b@%xdDnj9I@G2}P0c_L( zR5|&(^E=SXF7X`?ZoPZfsZ_Z!5d0(?CmbUnHJh;ADn!J8hBDfv3I&gAZ5%H z!5>Wj7?>hZ8YU~3Y>cs2_yu5{?IX-W0tNp`og&oouK@7*3r$sOp8Y~#zj|U7ry44U?a{L4oUmFZq~Ikq5jZAVY2yNwN`t)qf&>K@ z-jsMuEb$Q3R6@G)A5on6`nMo2Bb}DzqD*a^d{Bs`YZ}S|OWo}o%bZRNlFEOX+XL~5Rs$j&?hO%5ziIh zqlx}kefb|wg$Sh5DU_V)B`BgX1#|KY5;Q zN1=;<03<$-2lkGZ)r8SN9-cro4}+8W4|tZ~Zc}><&dEP$NT-`SSI6h`O8ACWgZqpz& zNXvQ@!$N2Luc3@2^T$4vTumhhucHz;7DwlwT!s7;3~7Y?x5o0XPRP%3LirC-exdet z{A1KLe~WLwT^%8*|2v{Gltc-L59lKvTV7je*!M?54Es(`rx57WvMP?51AQJ!8BL{p zx)RQ_G<2g6klc2ey$1hoK$Jutb00DNY^U|@V=e0{o?7qSC_bmc0n)OvKPNtbX#`?5L@Mzm5LQD4#^1X zKO$fvT>nttL>PN=HA*Lj2S)AtBKJwI8J9iF)#Q*}z41?QK!1yf)Us$n0L&OT0B(wG zM```8ul?a|%>UD%f5r?C#EPjz=%2a)g32TN!-sz2LAv>2J)=Xc??!1qa}fJyaOIrk zB$#};o7CrFDABC|@F3@fdH5VXG>F=Dv5Gd(WNHG+SeS4lr z>|fK@k6!uT(btX8IuhxNC@V%^uc9~N^hG`w|C+vP{_+0>eNkOW^kp~b>*kM>=<9ia ztIk7MT%a2CMN(BRdzNd%ps&yVNc2TQ_&ew;$-Z<>`l1qJ^z|;vOQ0_<-Oo>7^)N{p zW){#F6{b&jbox4tZ!E;=i&`6_FKQ#aiL|UU>UrsFKoWiV2mTxM1))Zah4%W@G!Z>_ zJ@^qgG*K*Pf{5n=jmHx_UAIv@)u_i~eox;Ii*do4Bdd@~7zv*-+=>6a6qBM0dC05o z9)ACff1s*YhVxz?)KV-aa{Gf!$8N!xrVidlvgt)P2`7Gp$YtyqH*xDo`ab}%MRlG= z1>m24&!*5+?$)iJW(F%E3Q=!*ABg31K3*?`{x#fO@r)bTgj0wCVa+B2*c^a#Hn4KL z6Cd}*(*8EuVdsNmhVJ|Xu&h0yqwtd;#|QOVd?-Ug&m9yV$w3L+m8lyK>_R`-h7GYW zzG9E}!Qf@IO`(w8Vux3HKN+jxWYoX}2_H36J!nMqD)ZD0H@OV%eKKtn1c_7bLl#sPVbGRx5xIwkkf)g%i8%FY+-3y);ip2vpK$Bbue`0 zM!;z4x*Jr?7vNi=qdv#+`p|rSj$M}rQLHVj+JpYEni7=g^G~(UfS>XCiZ0wq&M$G5sjCJ zJmYTU_b%plHXVi!;Bh*c8Ru2@NQ5kSim28eP7e4yVPohL_Jq5gXV}gOLw)WaL=0Vz zA&f7DbQa8VE*t7+?c{l&3pi{ngn*mnTzW(*@ZntjpSh@Lm+;7K$W+7*(Z)mA9+ueA zyRX5bhm+=nH79Xh4=Z5(a3sP(Nk6kR9k#2BPLXw{8;}UK6~HFYv-@zmvB%v|-AL(Jb2gBaWs78!9T!?$^TNNl zD*J>F-@$V#J~#t=9f3%ZMe$*B7K-+5bhPsb3%eao zL10GX6ZJY9yoODM&bikRxNtEID0i0@!E#|JbSJ?~iWt1r+Whnlgq_5tRhLot0YqY> zyq`hX?Nr}2LR*Oc%*u<%4)uC42PlZ(TEW5j9f>G#N2ikW=ukM1+Jl4H6nA2DbhHSs zCA<3kNvP%t*`k@um#Gxlm7=@_5?m*t=PE_OiMt5j%h5d*nGe{yJsZnm&Jbd7_!Af% z#};gczR|#z3*UjniHvQ&(Q#~P@9Nm%tdsTtw<;m|yRh{E1TR;Ab!;sJwuIUp;6xlx zzy_9%DKih-BO!#NogM%ot(2aPC7^&l_`YV)#@S=1hd@%6Db}2;;rD!Z>nMzT*;=?y# z-f*Ex@f3~#*Rar0EIrN4Tcc8BXG*u2w9q6lq z6rr_|Ay`_tl*~JkN2>6)0T<3k zK>(RIcmmqgt^RH=41E-5q{I0z>I#H~AM#p)uv$+mS96}C*Bij)uvVjvIYW-l8FCEHkfU>k$e$XK(_}mNs92<)AXU|OIMmbz z^*uZX*q>;~3Tu5Reipb!{qiGtmleI?$|HyH2J(Ue9d4GR{p6bF=TUHgMe-rVPJC}l%$LVzVM}~~JkN`q#Jo$P8I+*J|HIp#z(-kKfBbk>h>$o@8I60aQKM*0i`K+Q zn;{dNNTN}+;#T<0POrnerqgeg6*j1}-QQNAuN&+rnkpyu;Z57;#TYW;@ zt%@7-dw z2o6mdTPM!owUW`6eCTHI;G;bG>-D_(6VQbQ{a(Q+QPSRqI^pVH#O$Z<{9Y|&ZTX68 zD{OgpnOND^JNH**trmGg)Yj!8n zhU!SyjuO1pF^3|W1AYUkv1>_1atGy1{|7yTNTt~&jd`7IhHzE?k0}fp&)L@$C0mBw zI+XFO@jmu7UESqECv#ZbIQ`rFWS`*Y6*cJk^X5}Hi4h`?C# zo4v;?ge)U^F+_E59P>kW&3c?&=k$XTn_|gWDM@6xF7ioEp}+V-N{uFG?8E!Aa5?>$ zoKc?qjTmS0H)B)|r;1o^=oozRtRQuEey&yxb3qv`g6fbOkHgMVyaI&Etgh4SKjeRKPE z=-SQ1M-qsy-W#E7h2Zo>U24$=?_ZI`7wKpyiekwc)*w!cm3i(mWbU%VvO0-a@W*zgt2~%zHv}f=8suT@B5l`ZYKw4FjPXk zp0-I`ybru0S{tvJ)jGnHg}(YQM&WF&sjAWBQ40n`>JZZQ=}TX&jwLW%N2=g%zVzyb z+BZWB52Hd7apz&Y9J=;ZtMXPVzahK6Z$vN>qQ0B{r~0n`|Fgc)M>6&82Gim7Ew}of zR}l~DTRvF3puQE`*VmEo@cKT|Q2UOnukAN5IGViu@I>mb;RqS7gakHK@^jb|L#En& zHTBw89m!VQL59>pn>Q;2^KF8DO;9X#L~jr@g`i(p(9yRAL8wFv=ULFcx1dN1q zM+TuIh#~h?mW_Fk#LL+00MauryHrBx_y9R!^0`0`$0Do1eTf~{ljZxSZpc6*d#4z! zfibLLn7UJ?i_QSF8{hs>Q}q6%KeM07?2&;#1RbJC{dY zXJ<$|s`yH^Z%xm=2>&6Wt2O;KrNY-t1hd5vTB> z9=*HWihURAUCTM(Ox62s?)`ARFLv)adSB??AM<%{bMH6vK5!8kFVYKVKK4CPFW=+k zAibQ;OMzY{^YRRG$G{1^+@Y5U%XN&wWYdB-p>_&L7R3*eTai8N0$9?`R=PcTY1B(8 zFJ*c`&$I6*|Ag-&n{g z^<;{BSRbj^1L!G?FvEv!a=Dxzt4wzw=^c9=f1 zBk$tNMP{G=a2qjb!}=oZqC6K#KULcsYU;fy@#>ZN^l@TSn>&gd*r8|Ilasaiw2JG4 zOqcX|D>D@<8BJwkU6anZs`}YSesC1k>r<81#y;tft@w<~R#wJV_}_}3QvOt5e`AO>C zTbRB}k}Km|T{M)z>>G{#X`A!Gb6gs}$N8H%s!b{!RSm5F1;+fyv_iFb%K;G1bJF3T zD+0wT;#Xh#85C%|5RK>?eUhW?mMW_}=*=tqGss9bULb^0CGWnWKFf6_e!z#7xbX>I z=z>B+IlVq~e_!I$!nr5o*1olR`U<}&bbk+2x+m&=ukdUj;)1C!FIjjpua?CtoX9KZ zERu!ehr+&YVFk&;Lx;ll%e-3q`ESy?K;F$i5!rf4E;=i54TBlb_+W(^yuPOVM;mLO zitlCiE6)EM`tiI4k*y0NX<}LjGR`%~W!J|QOlagh@IKlf4lT_?$--|%0sc3?;J1~y zRzH))rJt|#dn&!BR=%K zOXsd_eP?(LUHxdEzBmU8gZ^D%UEun*ul23$99iwLyS0Z^P4%)m^=%7ZXW)MhF|zp* zZ^7va>r1{gtB-v&ehj~{avZmxT*&Q`__Qq4d5sOR!lR&M6oQ4UsO`xfhdnO~o^d?| zMzY~i`ge!`?Il1Z0BUU@^OLBL1mu(8c_iaR-=_!9EA`9(IYvMZ6Oercq!b`=O_ikY z{levYH+b$5zzYS>WAtDo>se}xfxZir}wxYMpGtFGp;#KAIF#P&E_CZH*Kn^SF_L4lc-}>x`og3=>DFIF1$@Ja6{?V@QZpifA$@JX~ zLEo*X@19OPpVly)p163|^44=r+F*;Mk$&?s{nkhxZ+O3bBeXQKb7D&om(p)3g=udo ziyxZUQr@~>mqfi)nb-pqySrjX6B~cEOS=%Ox*&W0+p?~!T<=z;3_qGsHtvNc-L17E z>b;=Fz$knr6vVMYn^NkXP~`vheYB3DrG3+(pV8)V)Nv*@KUm&8-I(NTa~*DU>TnrS zSH`bA5?U(%2Q3BD8@?dDC%PRXTT+6|aDuNmI8oqFp|xr|zoD6Z}XrR*WYh z9z~JFB?Wm`R#>k1NIi;LcelnO)s#~HF%TUZU0dk{#Md7%?9T$R4C<-lm zZ-1o5R$Rr-SDy$)UezPIH*&t(JP1>Z3wt5Gs}9o@HzcRXm%TVR($Itgd9xiEx>^U; zVvAWsFMf;{X`v#$bz{`XgNgZuT@3pkz0LQyZN6)_`3~WZBpY6cyF0SKzm*-Ih3KNu zV6`{DvHWWJP2zVJzYF1g`k!4Jj9aXrtMbCkdbU9ir-jH$oT zE2wBn$-byl3MPz$nmA>PIa9OuM7o8QMQc&id$&JMW6B3)IXpVl@dvQ8UY}l*+gi!A zE)x+{FPNbe@kISoU&@ox>M1Bv&a-@Acl=t%xYdnY>0-&rMWLl9mrhSkE=`Ajx5lX+ zo}i%GNd>F`gmHfXMTVBv=TYk6@^-l=O0?Ed)43-l)PYrG;0_L_p7QBm)TedM zT0(4)^snR%hk=K4eC_DcXYj(>`E&Bog_#DMp@x;OC_PbR*>fdNn)O+QJ<2-|$wbq6 z$}tbMoeqmN^(s&^dP14HMaM{If(rZ*8LZjchX(Jk6tpo7PGd*X zlhxF9u}s$g+@w_6+BF^i-Xp9ed-^e10J(RvOFdF2x681pw@fPzIIuFWNJpKF?b;mC&s_APPC2j%% zETF_SGNuSJN(>l`?prXCs!$e~nk!a8WFu^NnS^z^`HGw~!iEdibL1tqY$ZPM{euOX zb{32KyvUfE2?bY-Ft0WUl8`l%)ErH z&c3yA8YfD&#&1W@Fa)qHQd3uO<)6ip2L93|8!wR7c_j0frFPA@lfL?@fCaLPG>*Hr zDnD#AzrAvKDS5}=o$k=MzgYCo$m}Dt&giu9jHWKkHOH7Y@gc;$&xLwXv|~mw=cT`F zWDn9L)M-c|QmZ&gl}bbM98OSwqL)KCB8yWl;?|WM@zIfPpDybEr2&-^hCSYDP=kX# z$yMi|RVl(M_xIBJgC4KaMm63Ug1Z5Pw~QFP-u`<9L#9nj3|NCTZ3e%WhVbK3ISR=} z(Dn%&f^!}pj^I}!-FZc{LaHz#v#(V6`#d;BxBLw>S?b+^Zy8ouc&}^n9*Ls54-o&a zPcw*b5aJ^o;!Mc}nCF=pUeM6N2C2YJ)mfP>FN-qSZ-p$?jd<*G&aRU!PBA2O}6_0g^EY@+8ceI zleqZ2+<2j`8Qwdz?7wF0I)^xo2*nMhVg)FAar$RvY1aDWGggDGyC7UeD!h~T@k0KT ze$3fMdXx431t$`ix>~XpL7A!Bo>BU^%xIQ#%F^r2X!5>0%lk_o1$*;Ze;N_XZ{c6o z^UtrDj<2@(Ro2$+-W3${Mv!@7kY=P3$E^DatE~L=h z*rgr5{>{X2!lAn zlUxAw^~|$CKfs{>NYJ0etDYYbK5dmbetE zILfP^!GIkRTDED|*@t-b`^aeUq*5pkpDSy`KJbz@8x0$aGLj zlll9B&|vP)bnAYqacfy<*|ZtE&fcZ#&O7e7u#8KAM6NiCP3M=7!7q!#}Hsz|nvRMVksK|A?>Cieio2o_e9fsW-oER%D-%lX2N zbH-h{=+hElVhGRqR;>NfmbytzIakaENVnc%z4aF2ALXF^V8_r779Qi3J?Dt8|v6OGo7~3xEjB+?YCowozwVWX7fq~uH5o@n+>3Q%y=xtI9)$nT_=5Zc7=zt^4h>Fn}Of6E$Nfi+LH%y@s)*CQ`Q0L>I zG+1?5{N$Da#Q6VPwLA7;`fX3|&gc(yzGQXmF#4pHP1`Ff0;4Qu7W1K7MJW6OSbQ@WDhFY0+RjzUg!4oo>oyd zYUo`m6mWx~-qAH$gRFLyc2$rc44H3dkP(mftAq^BA~J4jX|9(@?e|UoH%+CBnPLD; zAn`+wGUY6nU;@L>G?h4flPmUDG)1KQyiBpi;k#d=*ba(~!g;lZ8OGu@p;f}(9cw=a zwF8`NkhOn=ltJMW4eU&THP${|AioC4{{?G57KZLv`^{$Hvps8H|X+UQE(MQ_pqPFkG2@^flQj5+>|fRse|K!0jLp-MF+F*&14uTX1bR)v@0J2A9GBL zCS(SJK2DrXX^cF>8k=cY!bhEV&pejQq7h7)uGijWq>FBWQZ^!CwD5+0&rR1M^nTp2 z^e`0(3}U=K())MF*ojldymN?F1{V4g>q9zjfwZBA18I)Uk}Xo<&uP6#_j+qK|2r?x zx7|z{`N!_poaLL4b0;(!j0t6=)g}-w^?l&MWIUsu)keB&buEr(Rl`fU& zf|k1pVsq9ZQ#0;7>&{)3SbnomjjCAY+_jP{WmOnHgdI-}%Bj!wliKq+n<)bl~;%oU+AJ)tuNos1ld?j8n z!}LnjWSD#@d39L-RvW6We`nFPoKDK_+?gNQfDJl#39$6H zedm@uYMr|Vq$AyBKtcLxX9XGQ-jk2P&NVox8$@Es#N7g#-MM{h4T$^(M!FAjK#nsY z2lJ8X+~2xXXOW7|eSps2QRhw-s@r#NE0mGlxf{SioqGo1$;8=Y@)8RPqjSGW5S_c8 zuT1A2NRaE?7J(nuxl*OD;^%chtE<>yM@sN;2)QHKH94 z|Mg*+0yHM8)8Xsy72r#eL$pNX4D=SW@M7~H%CP)H_Ep+e3Y?xgPaT}fRHrm0Z>e&R zS=6j4`Cn|*-O@rx#CtJTvuFHhA7e5o;kw0&PF;O7k51@4d>MFz8aAZEqrsvn`3J=_ zRtvE|j&9(Xw%9^b%>nTm|LeBq&cxut1EL4gCLX}408To*<}U_BQA0r3;j7lbt+VYY z*V(qegtOGF`^LP+Qi%$jsTNB_k}EY*O$>Lao6(*RV*1 zSY*n^gWs+eNjZk4Qu=2pU~s+2@|P~7SJ*l%DSRk5r?JyudQn z2N~_2Nxzfjk<3w3R=G?EX7yc$ZDqHY`b5hVRMIqj33l#(5@jz}7);3aCSAmI7vXj* zy-LNqh-MdIA)aT83>R^fi?9&Ss~XC&w~Me4&#NAa$a4`EGSn&F^#vr+Ei7CH$^gTk z1K&eDIOd^wpF-QuK(3wzC!UveJ(u%6_RESk2tm52)Ff^g)PX=IfjSHWcd6T;f1A9` z{;7=!eEXyF%=qOX0$oo06dIyU-O1ugV2pGb^{odXoGBnPmx*WfIc8?;OViLm5qbsB zF{CMIn1I>D!X&Z0M|5wn_4dDotyypz*ls2pgk3EefPIEZGvwxN>i1YXF7KeIoVnci zH)#epp8s*029e@98@ZYzTmu9omP=5}nY*uIIBo4;bzWAgHKe-F0$5Nf1(Hg+();hi zqzGui&EiopNm1BzYflK<1EYm>_@FzXD1xWTZh-Zflum4N&tt@Gdvlo^aar_9RjMhf zT18=hbqzYk;4BG)U>}wq*adGTP4Wto8e^^z*-K@|6%L9X+6CW9N~ z8J3MuRw-KEJssYY66jd%eZE5u|CQrOJlr}=`cHC{i^-t19i6%Tk*%-9XGL?~Lm;XB z0eDWs_eXJ`f20@`jCBKhFD5+<_cg8>2jz3lGq}bQb;b;`S#k{10{UhLij-5wy)7$% zSQmGqLGeBO`uMHqM-ekN;q=yD&Y~qS4+sb50d4?Lm8nuZ$5IO`7Sp88OyF#0L1|_e zh{mV6>+S<rG9^e?+v#Es z32G83cX6Uo#nqXf%wp=i4de53Mz*z%T%Lz$J#ZcuolG@BT=`p=!mg(TB`p<` z1KuQSB+^b7X9o|{Ei){|SCj&=`^JhzR$KJo^+-JfTO#8D7o~1M)fE&zO@QdeVBH-Gerv81z_XF48mc>FA57 zL-;mS>al4n*k8T7pOo5PrOMjD7He76rMWY+r;SHE-gR-qsxH)f{4cWqNbtNP>hWJ2 zugrj}{sgoO`TdyRMf@)3m*AJ=cOAd~=JyMJxA6M|zx3L~r^OeY2S&RNV$`zv|22%v z3Gb>dnE?sA>5IOk%zWVQ#4p4z%x`ag2k<+D-x2)A@vGtYEq)FBvfGb-Fq5t^vc}p; z+m)rMNM5GZtObXRSIFr6ncMw0c28mZTW#RNX|I6_>`Mzz&QDa^xnI3Z0mUV|JgpOgbSTqbD(e7*#f!QNkf!mE}Go~}_vj(pMw;Rz4)QFz< zfQ{%}26m)7jyTMSerugZv<@7#(NH+1EXOl!rH&eL#VBHo=DSjpD!rSuu9Xn_S(2UH zq$C4qrHUpISFGYzd8U$sDW}wx(+y!nx)Um=&+nid&1``g@>rx=c4GF=3UZ@B^9}CK z`J)IEY}Dd{yg!id*MgXR2ZQ`mgRB{_|6r@dc9S6>-F%qno{Cfk$c?S|^mT9iT(*p#yj!rMnj&{OYOOfeV_ok=Q%e?MaVc$@ zQa(jWWV*q0Hw3b+z-6bqUFjeRvvKG7WA;$+cb2J}tBm@`XO|%(0A%@#a;!%#$xxsD zs!i>Yyl;U$9@O-OEy`9FAkH@#_cRMKju9Jlw1+#ju{Jr4Yx3S~N?u+WO{)3U>F0FZN9hMInu(=x7qWcmA?HVF^Lbps~KQDIQ9=l|%hjP-FFnf#?c)L0ig z>R79WNHud!$r>Cc6i5MpJltFs2_3)2X#-pyTqsoGBQ$w=0ly;J1Z*xZ^UuMslimJU zO>0&B8{TP{$>CLZ-V_B|1+f=oC;23~TmOrNHju=59`nC;A<4$RN8U2!MQcFbzhlXrm|n3OHkM znq2ynXwBt0trsL7HZ4hfym#Gt0==JERPFoR>GyHzavjjoz|<4z-hF3ud;3vO zYWSV|t%k=ld?MXXP;2V>^do4ERjdAkNHoZw%>N)<010;{%dO-&E%+Xsg73kpjPL!v zml@yq9<+t=3*6ML)qo9e%)kbQ#xw_e7}GaNjglGDA_vB_7+E@e@vm%5mjz?`U&Q(2 zVQ4kKk+-Pq}VzOqVmJi?SRMP6Md-jE3}qus-vTS@5-C<5@+Rf4HK7 z*Ba!)WiP|g=$&zp4nO^iL4wDIksfsfziJC)sD(x66NGxLIgsvGz3ViGa%lv_7_EH; zI)BXn{#tdGA9?ES*58N|_!swDz`*r%pBg7p`!9&LlrDrx{L6b5t$(m+iSIUkL=Kx~ z9juY*(I3;J0~f>+mzU;*I$8)4C3(;KQ`i;^8VmkVs!;gDd~Ft{92?-eZ~qjQbwPu#@WPuc+tiu?-k?uRe7#zP?8BleQ2knVCbeO?~&{dUh2cU-BKiT@%VUvZ5o0NdS z;W?bN(nlEzc43Cd%8yNxeh`SHQSgCCxgoOJAu=Zmk;+v_h0^i?Px6-bW4Pov@fJs4 zw`eWzB~^%wJnATmCgf5cyEVPedk$Ja0ww&hN(^bIOupv+~UV%sG*l`Eu(uem{~ zJH9uyxEs|X&Dqb2A=3SSl~UK- zJC8PupG#x@lmcuUf)>SQx~DcVi>SHfG^v!cYElLGe`6oU($TJ_wPouM{gfq2-ym>J z-nm6VKodk$K7gkCctTi_Sd){XMH{>0deYqJX!t6~wI$=Jf;j`ZFC2{{`Q6oJuD^_Ekj1iG*OtBdcM{Dl= z8~wo5DmC|xAz3T_{r)LTnS0?OXvrEji=xpZ#!`tE5e++{<*}OTSg4^-qfaX!bomx4 z(_OOFk+e=pw@>BSih*?A4YNq$pDq^>HOsfC=)GJYX{4mX*ZwyojnnvKLUAN{Z@VNH zT9U0KQ5*wRDdG1MAqj?<1?te*H|*Q#hMC^ZWfS@^>-!nBRXJVw{Xbh5dN9dIw?{A2 zkuN_;!xd%a)WB;AGSs*XXIh3ET!ud>!*ezx+8T;wQK;kBAcWJRuc@KD8-yP!t^mlt zq(x7K!v^GL2V{nT{KN)^?Wejp79JTjP7Sr*nbadLd-k3xo0}uz}NW;y#|R)kkq`fQHvEwz*E{k3^ib%ORhuU9=^$LzM3Z!(k{NIf!ycGt>CMHz@EzSKvY` z@L5;jKb8|I{qjQ$Z@(Q!kbqG`rNdtsOjD1q^Z$U4LgDc+Mn(8|X~pl_QE(6vYo$80 zW=w}4A)C|-cEjjd=oK#Hdag^c_qr)30ttL+yuGRe_QIKO zIL00h|3F{0DD89e`mO1P=!)*f2hxozY_AVQsw3aga6A)DTf zCU3LLvi%d^RxgJ-b-F9)hSo{JsME#TKH;JH3oWsku!;;WmHGw z&Y4De%%%OFrTw`}TSwY{ZiCQ3)2K||>A2U_MeLFXP1ErQsB*B;e$EGpHO+g^aWsbe z_*e_MnZ7dwB$*F!W|W%?gZo9)l zuf9;6M%tqTt`D|qko?tUK}`@*FWUVB8OaHaY=@O4%FzU>vRIU#Hz+(kO=n}sBz$T= z3C)l5No~YTC3IB>f}zP-UsqfpwKgG5S7TJJeE89gH|$7=mH0DEi2bf6v z^Oz(nyDt=%%O!T@m`p4&4hb%F*CT-dCvd|AxZNB$lidW4{sei62`*ujlK>{i1>c6W zG(dF&g%aW<4|{(%E4oM;3D^nG@}+|C%yAzlKa*L_ktHQVnWD9Yzc*St2reJ#{`+n= zsB-R4r^kK*gJq1Xw+0Rk77Zp3oau6W$c|{F`$d=IiTfbkd}x7k)NOKfEd@A}Pna40 z0`xzfhaoW1Nt*=lTuR>6!MW4mY<6(20!}7Pt&=5X5%(q=1PB9dmUMwjdRA7_(oCL_ z!3$`JmTldACY(BuS&#pcfl&v30h*c3yP?(rZRFe*$vv}Op`)$PB^26iR*i|J@Yiv# z_rGQRWVQXbV8%KytJ%VhboUH`IW7RBtq%$-bg6!AsV;Lhy!fwR`x94;8<`rIo|mak z=Un0#Wud`Qc0NGS5P1KZzDOFkKhe~9fDLu(1QcUk6cFmThmS!Cp}}{9@Sg-`7~waa z^ub`Ss@)Qr-%ix@MaIOKHZ*eE%vdwjc_T3{?bt2MpQN6%Vc;~aMyka4IJV??r+<>O z?mU)??!%o3bme{Uzex8#9lu(1FBR1R7jP8yI0=Ro$U6Uf9|*tJ^V4h4?u8Z}oHj0K zt$|AA%4>qQX#HW(@%?W>WfXJYtyav5R?J3M%%K!BAm+Q+MSjg9pKy`IiqwF()J2Z5 z$cJ3yyMM7_orJR&9bo*+=Bjo6t89UB^6#izU6P||P?zM~Y)>~;O6(bbtumR|6HVUg z*zr?fzpY>~xGK_QT%=`*+fZmKW*pCrPWd zN%rB*_OZ^N@S-)Q7@mKyoA1S6{k?*@U*RuvM3A~I(EHQwy+>)*xc5H2FVlN!(hUEe zIswF9^Gx@=#S+OJib<FBOJHW0L)l_!Nstc~#!;Xe|< zPSMG30TxM}oU0|+XezDv!Wwl0Z@bPOLzp_7HAcolb4bUhhnJRk*1>OMr_OHqmI1nF#ax(itJA_g(9Euj=2MJ2uAe67t>8kUxscd(1 z@8DH~ybhf@y6+KsK!9&P2>Xn5zh7+g^prnaEv?6WZwH`kTr;4DgSyFqnr)!Ibf8MILDg*!Dq&0| zX@-t?+AvO%OlU&k%P>wR+%9aw3QZ<@ATzhZQ*%noI5;3Q0C0@Z!|7NGH=X z_iy$oJx&M?ty|peecH^KRqy?n_esoqS7$v#%~WUJ&(Ti_rN(sU=4AQF#|G=bs1l0T2aRH zmGN6DdVG=AVYitp<=!^wdyMYzm4787UDSJ14xJBaoYuh3#kD#(iv2N{a$nHXA~Nz8 z7HKs49d}Ex?vp#@gPW&~%ud?ul5%RwB|XEEZfdA~tRZy#E9_CU?kCd9}hH4jzMAn`HC$+MbRYgH4NT&}2rZ)U!=dsD0gLBv5S zepd=9if0G!tR#rbBV4jr(k}OE)DiO}PF}Qc)WAfXc+b5;t$3KQP>9!V{1V*b%qy)| z1kuO1M#Gy(7TNGlB)!b9Cz4o>5GI!MEazECK{=K>Qt9=At32E%B%5L%iil9nTk?h` z{ZGXBAMvhImEm8>L<`^kr1eJK2R$5|U08)q6b5k_8{DF^2SsPk{Si9*yB2~ekLil} z7R3$qorelXcORuKxaTC(g~@i;69$yBtzsDe2$w6SZ}sjf`Tdg9C0E(<}`!Cn)G2D(HzjDd;gO zqHPAcCZ?YlPgw-F2%)}W6Z(OC{RqhGOT}N)TCT-M3ouE-OaBvfA(Nd}?0WwDo0f)%3aX2t) z=$)aC$83s?c*ipyLyg{#wjYiHL%fD#oFm^1$A(}y?!!n<+L024fBoZzZHMC+5|BHG z7!AjU?T4eK2!>;s7{iW-qoQ^=94&(3_%_3_VQ4s7aMp0tH)L4OqtP2lS6A8_dl$(> zm3!4_tah&&jdi?=p2y>VUNj%mw}zueu!dtpFdQ3#;mGYBHXIu&Dadl;;CyH}wvpcr z$9cRZZ&;}Ri3R-69*&Fn_Fu%VfRQjb98J%e3cn5a7r7seU7{ajIP{zTJ>`x-{Y>k% zQ!C;O$FrGzaK)}hDW_3vG&aL921lbPhAPG!*=dqxG}=6z3h&SAVrVp;0O8$-;(U)4JC8eS@b595{T@dkQ!OOMe;zO zztdhqKOHY}D%pV%o~MI5s?kUc#UR!L6}?|#`C@uBw>9h~M1u6HJJVfgi85UhMfY-< z*1Ge+xsBYCnrF~oRjLg3wo{Qz0%uxi#fYpUaok;Gf~G7U+-AZFR%KwtkzAew;v_8h zzjGvnv4xV4q%Zqnd-UaR*(i^6-|zbJOZrl71fj`&Z2*(2midip-Pt#GynQ(YcX=) zTSQw}z5`r7HAE2*Rik>lOk)_7HS!rER0O3imMl{r1=1B#PY*HNx#J9$QLanqa~3bo zsR)OjOEUtY^mE*f=xydYBYDb?Sb!33%84RMx>I6p57)bvU%NLYv?%~|7;$0t-C z3O4cVu4X2ch_`_cDYVz~^v^`y8+kyCI}qWDBdN$r-rpm=6St_5BFP^X`HRA0 zt0iX;<#*^k(=vezMz4m8Impy}!RxAEbE=>qeLA|}(1KGbFmTj3?ro_DXNglnmc`DF z7U~Kus2EBlMffb&iH)hIf+GL+TLl2(OoyMpMBQkOOP5rDx+UTK%S9Rhtvk^?nQJ%( zQ_-kFst@N5PgS0QPYM666?5S|n03Z7X*YQ6+mJ|1@5)LQr*_fwYl0#&bdNT%@Old`Cr_UQ^*>R3kz4-nSNauEP>rD(4nOx++OD zkZ)>d*M-crg3*{-SWr%K|93cB5>{;la-YpSkwnnGSnk|t6Of)=#Ov9kr$gXwz0$sk zK?J550yYe3MP;F1lN~!dnJb{7lINL@+20$XP``6m4F%_e4L|Ey4=1i0k|76uv3Sa zjUyXTkQ~}8cYevswR@3L;Rmdm@T<^*A8R7_ZVG}6b#fA09{!(-%(bkP;xE~zcU zud#W99-oKsTn1f5Ywy&25t@I(XVO!DEI_G}#R!R9jPq22Hc7@Xs8C?S_8ViER_N;^ z?QA4tb?o?GQm>{vVj5aAv5Bb!oo+!#*9AeG*D5^Kg2wNQ_Ccv+D)2Q6niSJ_jPD;O zRBXv-Pr4*^wlysF!ZkXD9qd~$>h_hgpP7br7uH_>iOjd;T>7lbqO$kad&)CL2w;`H zR3HhbRte^I#uesq8nhWf zlSZ1gh>7kOJ4?Q_YhozyG;L<2!rvq&(p?MR#dLk`V$3N_fJBh$pC|T_`5O4a(Cc^I z>$tZ`HE>$?M=TH&qp9;p4Ac(gs2X}bXy|pXq1TXmbs%9eAoG?nrtq(1(wr)p%L6S1 zJHq}mCA3Rs!gkel`$m5Zq@Q*E)Y}lP(~(g03*56Ht8btxaul-3o`EclEH43AItz)< zi16?6aDun=yX|keY=vJxMz-FZZtig0H`P>8u8jrl9;U;u|4`F#yn-FHiV<`6?E)la zEp$o8J?4+O-e3!s9c&+p`HYExQZ44O$5swI9mD-A3EYK_=wkoQ9OjnB5cF5)&RN7f-kh4ep()e=PwTLj z#WJBeIeCGs4sjs|k(Wo3b2uG*thHRI^Gz~q5!1yp9gY) z%xV1!cP#IRpBg$$Nwpa3(UW_odDtg#S$y#SvDnrM#Y6 zF`EBpSBxUb*%dqS|FViAeEY^LMu68Wj1p$BZkrnAV~Xw<;*@%EMV2pVj&(8It27(l ztujMPXI60TB>W^MJ!sIztrbUrQIz}VY*mB0WX_y3%6i9J)8D|u_7CuY=jAmq;nm69 zxe9R1MS1w`jU*=&;0u^XkvE}und;7aF|Db33bz)1mFCb$omhwMDiHuVRmA6?qM{S4 zXJk_g^h|jXk6x!h%877|t_tF5CGjkFz$i*Rce9m66R5|k2v|%2jiakinYkP?k?wLr z4aH3HJkKT!VTF$N*I=;Va54IsW5(W7!9)AOpGK1P8-xf)H#cxIk#Ldlj;2fKG^gqb z#jWuqzcE#hyXN{nl^;!=SZ*b9+D6TtDVX=Op};Qx6v{+=o`;+xv2eO z$^0e{KaD-DWnJ3tltuWg7z)caMe3lhY}Cn!e#06>_06g$rJ5D8Kk!AM;xHA)+n1>b zKzZz(W&=}S>u>P<>Kxk;pX%k=mbjXLJ`Y-eZg1oc--tS%dX`!B>s5U`RoC~aMS`l! zXuFbeMEIPpOcVI0gA+Bo0RE%u_{W2lYMUIX3Wu{REQjW?e9LXxuoPZ3p)8 zfO0laVhDXv0}*W2*Ttmoo0&QMIn)}AKW7gyh+pK?h&=LVaE!17@}4&wUvX$AC;($| z;TiEh@?RV=h$?tCcrStKp^dd)#CMB$1r;^N7qyP+e0$!Q+K(3J*=NlRj!nqbUSf5*>{K)ENw&k+;d)0_d+JbL$-ZjLwEsuVw-c5{n>c1sV%`_&)`FVq_pQ?8ra4EHFL(ms0hbs(Z`w@o>(N;cr)Pe`I3&0NL*Tk zg2lUR9mHb9?kUVbdU z2Mxw5bTfrTY{Fsn6RRz4MQFvN7Ms*yhW)?wuD z&Vx(nFFQRLs>~8MIhwm&HN%e$rxXjk$s)d=Qh&cDUn`)F3MFFXM!YYhH8Tq4*2WU6 zN*7T$?gPKTsooaND6~VWME+5{=WL?wJil)0hYKQlnlx|Ic9;t^0Dr1p`E4p^Q~V-0+5dhPR}`R|jeD~ANrYd6dp z>0(OjiT=qpyZ~yXW)GO&Q-58K%M)p{Q5VDwGn7 z+^kq6`CdciX97d#Y|t|`OZR*f(SmqZ3@v@e-!~Tk>|;!Z8c$;V^~MsB{&P*<6EW{` z{{`&0yK_N(`q+(Bp zbt~KiV(8{o-7=)||Mp?#*Z@L7k8nf0zp{g8`|3@6S|{OkdR$NK$xWAys6DwQ^y?n{ zKkGZH@0k0B|5u`wq2y!H^K-rF`P$C$O8r$DVm+;68WTMQk@Sk@+Lf328e|C$`Qf9WgRkEY{zN6?HlqF%K~G?71+@ zs}waovSJ{AdNg#`xp^!_)?pPeIG<&vQdh5F{wfRZ&!8Xb5Wvo;3!?Jfqk{bLebBn3uaavs(*(OH1-a?9nRYk z)%^SFFZg%lk0Z`?5k!vzkmKDF)Hbw_FOMPS8hfK6jjZLS@QiqGJ5HxfW>e%hrH-EP zg3YK+MjOXg2h(Umy^r* z@bxh)U8oZqGREd4F0Z-PrRAfNk4)Of2d^%QpAw`iWt+vyR=P5M05dBcO3%sVVh`o9 z+Fh_}_9j=xYELfOwq)%y0kJB(izA-~h& z`H@ENZ~h;@*vjT;eUT?C#dop#@_$ZPn%roKs8<*R*QbWMHBoa5bxm(L`Vzac{-Of{kTA0q?kW;%xKJn4R`#Le!x zQlsma6>VyS1pdq<$FhAY!uUI>2mTKIo4xE*sQ$nO;=DT<`)~`9Jrx4)sUp9vNHWU~ zQ$g>5&$JYgP|V8K+poS8tc!Fx(}S4F`Bk6O(kvNPPaQg7J-Gh6kd>^~!GRYMk8PeU zI@T}}RSt@h`XvlDM2*5r%_MYlV`_3AMa3Bq43qaA%RHaBhExpYBMU|t2@9saK_;jH zOpd9AR-5|8yq{-?)&z*Qa!i(U7qMisZi9&>L;P<_?##Jb>{*5XEcSmrj#0ZNWkzRD z_rkJ9Z%#Sq*@6|q|G7SQ$_&-ptaTo>`yF4Zn$^I2UzJdWc32T1pQ!}d7yGj~{UnzI z|E?k(zojC7`1C(l#H4G}k5pnV>#bl4DA6qneO%+~ql0xbS(ZE)obT0wh+7Kiy(aHf zox0WnIH3`YA#%4k%7{12v5X_j< z(fx9HA05jOo^1??uSPHUX_-SKuau5Bqgl>L_FkbIQzrkmSn8kE;Uo>?>IbFSE zkY=?{M!E%bvn(}-23IGCtgNeX55yVtSn|3BV5iZ3vr2WkKPGPMxmAbzKe3UwZFDxi zc<%$TeL)N^07CCk?gm13vyjjD+5};4XzZ=;qXdYweuMN8St=lqtSl!=$Re`|@gWt= z-#Ab$gzXl+L%<0s&)+{lOUe?sf`$;|M;;8p<$1ewB>^C?=wzE~I9`_$B7|(D{AZ*Z zafmC#kZy+~Rx8BV6Enmfx>?0M<6p(@t29=ZIm9Fe25f7)@tt@}Tm*a2s90~)_eq7+Z+rBSrEt)Jy;Lbdo-rWT(`4s97^{^Ip0JUR1TSV0n} zSXIMI;;b8_)@%-&se%(bpJgA%$aRd>0U2O$TAF24`n%syg;J}+HgQO|Bhu|NAgH1H zHxWx~=%L$SDHzc4y`+D zRXTAhpsjoP%J>Tt-|~`m()v^WX!Chn=x>5|BrJWpH5~IsD-N%;{es-9QZ&t$56x|A zaay*L#mD7~X*RR<^w(TPd23l3-MC_C8Q?l+DE&E>9=oC(|EK>xJtBFLMDo&XNuEn$ zHink&gs{3ybFzOwi#ABSZ2F?m(n;J{yDHCx|JuS^H_MzrGVQq zzi_bzaG*@8L;HlZyw8zNsYPoID%OG)=z8u~`?PoJ9z*btbdMg`zdagi=o{BFoyG=# zvGdT0&I&`G-2JZQ8S?^&H-^W zp`5YePRDmKmM&VRk?BYN?#yZq8`KY11qv{sot{uIxT-L%m;#gYihAn`G<0ReSHLX- zEbhLEe~FlUcLt46ZPXUjJaC6m-Q-~f_rCw-GnoG*u`-8DcXs6_R#!_2W1e9cgi_Bi zrNZ(r!-d}4c4jtG^CxXd$)8pE6<2bKF`BwO*Xb7!=kLzOTVs*`#NTA~GO5UK zr5&J^rsUpD$+L>GhLw#cZ)KDBRM4sG5PciHQ5uW8aK5-EQY4Sl=KH(#18eEZRf&rW za_4@S&c*O1G3+*VjrZY~CoT|;A8ICbg)MsxE(Gyxi#@`J?AhVuU8i)bXkqUqo1(hu zZ@UDoY1$~ff*>w^zu-i#fL+;-=3rwR?*3J7PXBoL0~cU!m0@G}bV9oA;)mwfP($dg z|1c6X)Xo@lg%XTV0=tXoa3#=N|4t-`)tp%-#clXOG%nq`D$O6Q1bXZD>9a;}Q48oq zyaiKu=y1(^b$^q0Twlby`Z7{-V`Dcix=I+ii&ma3e%6Y=u;6FVL{8;5xN4+)Z z$B@imO)|oelI-a7On5uH;skugX>!3%;mPTEaCsSaK&T&oFOU!BKw(#BfpP#O=b@y( zf(T?l2gb4w!g64a$bdOKv@}{Vk+e+}$I6=bII4N~&(RI7)1uw~`ztiqeKb+jdt2wN zS>@Q3SqM8wjLXieC@O89hThbxt31IQ(-T3+E3nQy3K;#fl!^=KLLItMyLNV&b=s#K z3UHlv5zt+yX(`lLgSIr(IgzAI-h6eBca3_d(Q9*kQ$gK2D%3fg@9m{~(uuU|p0st( z3;-i8A0Vi93Q&r^NTSR2&z^~N0XL(jN?u{k@E?17Yx-dz<)nVJJ1v=_!8k|0!9VJ| zgT2%1Jv+Q}78B=MwbP9E=$pq-pESG_^v#CMO722bFa!TJ1Zc2tI3n>H;Ta&7Ip`T6 zSqI;c0dnvTdgdL>?Sh`EWtJV-&-)0qcRAsqs@L_81K$PFj@?k2y(#+jTm6lMat`A5yub!=IhVp!nE( zr)Fs%oi!I;_OkgeFjs|QH>I(fqekmS^5W6y@MENw@^@8H?OjSg8&|OuP_wiMU~`#a zUe5T7yslKGi(SPM$BpI`rvu;#02~znmPhxQ+frjt3zt2=4bJz05+2=O`x1(Uk!o{H zG){>Um^^%cH?P#rDWCl}SxGe}-pXxVpvGtkW)inKVUFXr6(1f;uk}_u z<&W<3R;=*z+@rufirk}g^osQ0?cafX2CA{dv8Am?Brf45%0s+UiV68f;i*6e5#(Qmef3jX;vRqULF+c ztOw8qmoM9`?MR64=q9sb-7Ouyl(%l_d&j?#52-h7G!2T$sw%_g&;JYjJ?aGi?~^j{ z_x|_rnQx1@161e!$467AV2yQLMYjBaf;G1>u_7;$?rWgYSa*CHS_;2>boz&Po|Gy+ znT)M3#JuAwXtE;Y>jrPVVAVxaXQm~8h3@C(#QPhyEfYa7U6CJ2KN|5?$xHtpieIox zbOEsoT%>kI-=>__zKq0|gb&zQOpuOaTJ56BHN@&jyVIV9zVZkI1xV}#y)O*Z`6<)hj<`eOh(E$ zk(6&^bvq!#yoJ2@hxl95k{alUze4zcL{2CD~WSZeoBX5Au);uTCNQ33ii?z&x_KX6-ytKXP=YNdTrEi3__^kbO-IDlkYLqsZ$C;cN7W%vcb+wtFAZu8LUYJu1l0t%ex za{nr+bI=5ZI`=e|l^?|8)Yv$Ti6XhJ%{5)(t#g~E!%RCsPY8}?BjCcPr^NEF-(Y!@ zjt}nSzamQ%1G<`o>3T%cd@S${#O&UIk-ha|S3po{#ws%wtUk;CAZya4@D_-V=T17@ zfgyu&ac?L5fyG26dpCLzr=Tq`jJq{CgRxCB4-&y?x;q79?$O*p$v_^&U!^->VuUvW zEkKpoq_?Pci89SbrNC?g89at{2(#@QZ-@|>ADjY;1#z&HVlj?e*WbU9@z^@lpO`<= zn<8XudNuq=|8X@uz(dT6K@$+l@im2}O0H08&-fQn+OS^DP)laL9MJqm{|E{eC9Lxg z)LV~{7{h+>FGH{3A|l9?S?J$ui?hLw2fIT5H-v2i!|wNWH>ENi0AeTXh1yrlppl~Z z(P-w_LR0F(3cRJ%wBnjU&H}yqXia@xYmxTAf5W#roD)NfX(;Wb)WvGE$XdGr+@J^aapksRfq$?zB2J-`iSq_hRaEMYYKr zyG6bE1y;Rle#s-2x<-lF-Rf=5XHG|rw%FwpZ7bhp>j09lS3Jhv*sFS1su*u{%{@vG zFRr~^<%SmS!hg*}s4z48=bE4}>68^`O}nKY?X@d)tsiRkV<{J0o zW;WLoxCtVt+`o&X6H)J-rqpfDM$fJqwW_BI6Mt1@w?@1%6*>lUr!~mvpyARtjx2pf z+$$gX>+VJ1e8ur>d7Wf=)F7)tDC%8v;jG^C{xBU7Sq5c(vP4XM>R2T;Skk`9uk}L;>RX7=f?Ndt)mm8UYmN!TVzDyHCFns zY(bL#>h|FmD}49u!*?MZJhZP0ZRfwD{&B;EHJb#r(Hw;aMU6E-z8lC-ifYHHu69x# z-q5`Kn!BrrV#(sQX&j+~XBt{`H(_GKt(9JVRk}W^iNp;sbZG1Rvt&M}X!vmzxpLrW ziPiFweU3!<48PDw4`k9G*Go#BgpS07*6-?5bDXgmCb|nI4ozpqTHP6vCtKd`nzu0%KA_SXsMEG35|FO zb*OS@=i@Nvq?pUG=^sH3j&U9|z$8ADg-g!geVfA(rIT?iktq~wk;HH`e3TmNK;==M zkMLZ{F;TAAp0av+=*Yf{bfokpLZ6R3$nu>7pHp50_rq7EiXY( z{4A;B{s|eZBAjQUWg_`@!&IvHam{=Fx>IO3j(^oXMCF(`H$_w59vQ2VRYy*ICi;r? zyl}kE<4%)e7T}~LP_e<(T62%4*4Emn_e9NK`Usy})$FYtnokV?78hx@nTm5JC5y`q zNOS(mXzevhKl_EK_es=40lduTGbcWe0!l@tPhw)^p>;2KEK{x$3@3HSB;8}>=OKKuf>}vr8n+nGXzhIEoXr}X@ijkYan^9Lz1Kd8)yStYc2 zV0tZED1OisIvfI|psy#oDnTNz^-$JxYJAR=dK{BL#LZBx&#cLwTC~=WhU)!+!X|p9 ziqzIR+k#L_3IvlYGlH8tF6h}F1d+{1@;f0>hdQ33AI9|{oTN%dfj9M<2_{{SBR6o^ zcLwi~Pu{?51hYx)vrygUMh_Fd$NiUHl%BB1dCy(&O)-Y|)GD)7WiUHJ(-H>DC4ZGw zZ0be>W!7>}Fm~A}W|~Te&nF`s=%@#!T>*u27t(a|0d3tv>7NJg(y#}6&(z(g*d zn8U@gqN0G6A6jhs+`|*7RPqK6LLEG(91LdCB4wTvfyQ=JbN~+zDRT>ztiZpK14)ja z0TplZezJt}z4z!*d`t9=U1$}F)UFLB_8e=xk z|Jy&$BP7(Zp7%)Y%X7{$y2c%9`X@_h1~8g#jT7+VL|2vCsP!Ob94r4+{GMnS1+xz0 zDAf5+Qdp)m4mq4ylyk-Y1K)_${$tLCk+CmZ1^@~vm9$7Dx$$%z15V>9)Okw=NKj;a zH(KaCTSd_*p@tO@(s=~Uz{d^jL`*B-F0CUu0>l02-%TvD4sAWdsH1-zON_B@N`Zua zl@tl#OLmPv>iMnd2fu_62aY6OSP`#tNkRPPjhT2H1eR0~k$4n)HbVLQXaN+}$NO-~ z{bev9USN@$D(NDT==Emh(Ms{$S`8dt_B#%G!p?$z8s(ax3GGeHTWD;?zYg;&nU!Lo z^q9YEbI`7k`Qkw`uUV`vY2Bx0v1*H6(rYP~Du|_GtTN5Yz=nd-1g}cQblkpLGqdv) zU}h@8Hk!@B)l}}lxmIdlCfZh$pCQ>B> z>dCFosfRpa;VoChGRZ3G@ONrd84FK`FHp^r_Zq6(!K1s|1?jIq(yTgYvrso=`GE9< zb3C_13)bsstR(^2rO@R%+q%*F()+09cJ*_pgA?#MM#ZKGaSgBiQX9_QR5}=6t>AbHT5O$6l`Q%R>7>_ zK%UJyyTC~+Y^}WO)KM`y3ORGQ%F))>TI6RbnYU@L_(|4Qjxq!7b2@w{4G}cVGI<_o{?HvtN3qeQ!>-@KT>RVO$gs=nNHa`75%nH5?NIZD zYo|2jFW4ZCP;+rb>%NU%V@oD%4g6I$oqMPy;0YAIjbZKC0^K|IQTx zB%Gi`Q$>jy6pfcyyd)0j3{2#VP6Qu$lqxDUO0il+n9-<+iIYf%!w9za!9Mk=*sE1r zwORr3k`N#f5CLx}wZ%*I#8Hd45Kx)-``c$G7qtK9dHqP{oPG9X?X}lld+oK?TDz%D zd*M{Tp9+o5;H5u2!G7@EXY$$|UKxtfx`3M2A1F5s)Iv-~0LqziJQSasnu7IbubwVF zE}0*-2kA23jSC~jTefqoxr=t1sQy{?)A^s3rs9{jCR59ns}C^oaocwPRmmYIuY6p$ z?`7mgzu)@ldi$Dgba9Vq>{835KR^mE4?4|eM4Su9W~7cu`8pPm&H&gLwQI|#dUy%N zBWvvdi*;2X6((M#(III`@b-5eynRN?)tv8p`dH_FZ%{U-ewGHZa@@9D6WNT_xpMak zfosItg{^|FbN7~`w&*?eGr{RB(Rc32*~!niZBARDq74O0CAMU1m`*jeGn_uJP|*-u zTTghhbC*44O0~Lk@$MM6&3e>Sp1V-Bq?=r(=hWF%sq+k-&|{{g*RO%hgh7D{(5==`CFAK}Cw`zH#uje)Hn*|{J0V#V*_WZX8^ zED+=0y+Zjle$K)y5aA)lIs5p4?-iv6te>{R6AOaQ+1R`8L~{pgVa%`vtg#+lYcpBx z+!oO`!PGyIR)|pHpGbjZ#}|KMNc?QS={sY*-*EP`AI#8S*g3-V2gio{%GIF&nw$N4 zwDptk?2vjB*zM&ukR!hK>(S)nl}J}kcP;{9gJbVxI~%M=U+dR{_&xtp2jWluD-Hj@ z4E&S*sVQTVw*(M`1c^r-P32|u84~daQcdOMJn#P0_uAZP)C^|1EXI$Cg7woi&W3&s zG;iZ{+^T5>HKytSGQX-xw+J+85K^Yi8a}J$zDcql0yFv%PoKI}_;Lanl~F%#k@~4< z9L=&(y+lUECLNDv@^}Lg~A-Z={EnJ9V~TU;Vm%MO%bVb{DD+*SK|n5 zTH`Xn_?%+wQ`K}ZK64~Fma72whLb{IND_XlB7spnJ!qcFczVP>_`XPCzhzaL=zy>CIroA%5%9P@1OVAFI*7Frgi>jlX2`W`s~YnHbFKGbmA+C-pK z+MK@qwzI}g6#7HX{1>n&5Aw(NtY{~SI<#IdA`p2ptnKx+hz-?ltClqg%(X*?bLVdc((-s~QX_oGHqC zUwMH}Mz{=x}Zh!E*M^U~XmLpSz^r$f!QtJ_E-7idm|=Wdq7CjtH;^O9Oq~nFi=^!f0?Hj%Ts( z2&|&3BB?N9PnidHw6zcH8%+&08le+q5F2a7z%n)+#AHauM3Hq?D+#i%_kJ3@ADQvs z@99ng808CA&%{L$A3pfagu8x;&(1*lx~Q0Te%}cABTR`UpJ^)krW_ePJm4(Z%ZqQy zanS=XbzHKKms!3kCl2%lZCXxm!p>w|b`}~}oDsa>inGwT;^d8cq0eLI=5)3)=4>>R zZLD4fWcv@>xu`7UTV@=9Fy^>uEHB0Z2$RQNI*(M?&J=u#mKfh7vQ5FKXo>MX>YvSO z9?9eu<^VIxne3Odb74nJSj*x|a=6btFCZ$g(j4zn4E$^wz{xkA9ETT>Q-{k9ol;aq z4vaZMvha4I^1Puu#pygV2IS$0r|6yA$@5p`DNX088j#2MsVdLi%2SrkGt$d*P8t;+ z#?q)rW2_Gq(P9rI=62DcRFxd=z02A0-33&A8da+Yn>*Bl`h4FyE9^Rh1F5xkZjYf7 zA5?P3zp!NtvPGY!i7M`yL^l}wrYNf0j;>HeA9qkuqU1!LJwL|6)oG(J!$((3%UQS1 zPMli)3uP>N>oz#aJ$JUez#{ZBQK_$pXb)Q6=!Qwjt$fxe!e&`FBgv6b(v;Yv50O5|K zUC*vG+j-r(XHBiF1YZhZc&w(;#Ine`C&H-l?`wIFDM0OW@Fh%m8b~`{;M}#;q@UV4 z9}O{~ex2bsQ5D+pp_uH(&ncM2${hO!Rp>qzbeg?E*#z6l_317PUb?1uMNeV?6Idk! zYtNO}YyT6lDMW(%Cg~=rF3-REH2TZzL7WGZn~c-+5Jd%Tso#Ox!>ARuZ`e zOv7$fjB2ms-)#O}E2Z>I>Nv^Np-3}c9U@}#&h%ETANJN0Jt}RH%h??2&6$B!YE3S* z_pEU@;AtwDGdA4&(l*?>J3g4kxJu3GMJ4vsc#C`XXqfL1Z$OqeIpA;KEXMF7di~-p zkOX!Hx2@|PHR1;SEBz-w#EM$zWNlY0E4k|FR(LFb?V)y!|d(q!~5^aRc^`zcOb6}^5A0HazxB`A>i=)-NTxsb1CDGHTKiv&<6zQE%0&^cMX-b)BHPW>S|z-g)(xd|IELl$mA1y&gk~uA_RS z^-Dw1*j7wU>ApOPkVaj1Q_dYJxYF%-o(Jv-R2>>vF@htIXVPP7HTyvXRE1w7C4(Xu zvh@;|`$D_azeY|7IJJ4TPJ_VKOfwfAb0bBLu@rY(pJQNp#E-cat>o7??GOHA+!xe! zC3;etn!#5@lAlm_200>P+gYT_&7d-vm)Rm4+3kaJPi8ZW8TiWFyH{rV6a8_Tp0x-k zCSknVOVpz19u{L!vz@qgq!57dzvq@9k{)d*&K+r2Z0_|(7-YxRL%YF~4e=7v;{qAO z-g6^JeSQt6`wr3VofnA*2IAdIPlJ3%12Gqk*EqX%|4q@!WHqo(Lteq2gF@d%pQh|I z;`eK6a)*Y8z}ue%fxFD{%b?7dj8ko|X;kKrHNwAo{>^vCQEdiu9@13h9D_Mf2J()W zES6+2_nJ6LALcHCj;I7mh#tdf!n9PRIx&^ShDq%m2D$5=@69oSRmEK5cQPR#-Dld6 zW;$XizjX&;_)^I^=}F?X3xd<4B<(-Ixp`ofI2!Oc1_Y0(i8H?fEqEa4OpS&!JgCFy z3*BHEfTRv3mPNcniL+=NSN-VhG;h*)KA~~wH=ZZ;vL!QcUW6XIVoUG%!k@&Of+Gfu zZy`;%|7aCsf6-ld3Zoj*6ipPpJda*Duej}eo0us4C*8?%FC>E3u8@=Jvp2&|j}~B!SI_|Z;sQIjBV1h-J$%(j z5!grLguZi;81tk}PJfL!oGYh^s>a!zo|4%86bk740{z9QV65gV=2JjY<{kzjAMLFwa&B0i@0-`PPF|HqDTgp=(v)pr+IjGvWp9F~N_CO`e+RvLM%45XVyNgfwSTPZ~bGH$}A;)`>Zj>2@LL2w3WkU_eyHskC574knn=8 zgFFfH1mjii1e2}3YZ2iRjLJ2muX%&L8-~(}qTj$TjQL8}2<64GEmDa@4k^72qC8u= z*LlMHCRMVaOylX1ujg^*o~u@48S@v}12=xO#SCNq(htbpFG3$CFTK$ty1rJP*s3Zu z75NAv@fN&iOhj$>=ZL?VhMb=%lXw)W#Fb=kO_jWuqUuD^K3I&i#p!YX^Vxk0D06bU z4DvSRJqTl|gCYkQ4|wD95=&jgacQ#N_~0dPNF&;_AqKVqO6}Dk z*fI(4?%y9bJAjkYxu%lqVUtT6QRSMWTq{kk=z&gC`6Ik1^B9!z@tD*T+WUH4w4J`V z9}E5TuW_x=mN^H@=*RsR1g6R72=x|+U}h^EtbV{)pbVw5*xIpy8JDz&s~@P6Xz;NU zH_-->W>CdM%BQw*Fu}xxf1X4WD5=OLCN%h2ah&93+|8x}gp6De4C#J1<5rKDhhIlo(|h#0)s!X*7`6ZNmuLc1CRpp|+!&x4`EJR}WG+Bi`uxzA>-kS}_3+#z&(c z;gEF(1ObhsE$`>A1)(z?@YeEfh{QSd{`Yzb-eoLp2w*umFpqksynzP=y}XxS?3!4} z)6s*O74gMhB;!O;Gtz#o(`D?d!Xz)Hnp$U97zy)U9u-{vG1biba(>-QpGI>-9AqkG zI*is{;T)2l(=Lkfudmg8eRuH^sv8t=7NA4CE)Uz&22$`JGR|NRAvt@_VE#X`5*cT( zwFe7&q;wfA7k2ut_T0iQS61T|R-&xNE$kO$4LKL0x!dfXgv4l^tZ~;W8A@j2J0~9@ zt-WimsqsG3&t%cKj{$BDMh^l+*Swa}0mOEzNgdXGKLO{qJh*hd?kR$RBN=ET2)-V) zKc!+1+Tr^_d$Z>c)pcbC+8-&af%e^l1nqwU?Tc>X=6=wAgeVKN6Fg|2AzP4%+5|Mo zVNC1@52Wm4M3(~UAEA3p?dj!xlv|~{oZK8WqNlC}lwP%*+3sF;yzq#(Cjn`m(=6)R zTSD@(|Ay1X7m7CeefkHVj1$t*5~B91jVQ~&d;XPYS?)K{h26aJ~um=X@Qy3 zgM1G=@DA+eq^YvEd6(kG5~g)&$x?knF!(O~@kRw}YqG?j1T73VGP=BQaGRz6=_q*fBOP1DB! z6GmEmQS4h^K?7hRe*ZnBFeVRD3#ZtT#(iR7R?~^%FwiP_Z>S(gFEHypFbq`gEIt`n zGL7R|_}0M2gCKbS)-O-Do^ChOrflee;VhwEDk*$9V&*rHR{xmagqc z9D2yrA=(__^3LZ;65(hdlLeV4JNCSKl@%RN{OfXsjuV;;)|9Y@1l=pVmS1WbiyT-6 zVb^JC-RvI!M~1QnW0KhF8LGruY`6)K^_OAaXU8NXT8?uPB|}uQ)BWs0N)Dr>UFWE1 z2w;I}B=HBD(uIv+$7#9bPv@sb7Uf9$2k@5Azy_RM?z=PrQq({TvNxdJtp*-CK+u~r zPu%F#PX!5S-MvENIc{5g;aZZMMyrgD~mNb?TsF6HIIXJ@DTm*X_a{*#%S=HA#mo0-P_Hen}kt0q^#S*qz)>pZCG z7IG41syWARb*8Z`yZ>HQme3q>pS)K_COzKNI+FA1{xj=xN&L*LPWONQK%bu)p_%n; zDWsVbwKTJa1{3xBf{B?Ule{viDrwEruQ;X=G+pjr#`ckKjnm=0Ontg8CNrN7I5thg z>G_leSbg*9J-O1^q)$H z@~PicdQV=qe;e3tW-9eHd{DaKbdz3lktj_c>m<@s=zsxJsH=;)Qj?21F~!8eUWdUq z;9?^fo$~)@qTHcv!Dj9zVPr-X3&$lFc}cr|N74|IoFzi0PHlIu5N1S|dHe>P2GP@Q zomUQ{OdxLFp-&+$O_;a*1%v;hbkE}Egj_RQ;(%`D$s#8L#;NUdkUgN#CV338E_BFL zy5lqJ2a}31oL;ZD&iImN$nERAu^_%sPf5(m%vA82@@<$mD85V|9P<~bYN^%jd7L;k z3p+^%Sm^zNQrY)#eCSQ1fgVRi&cs3(!JxP)AV{^O|L>4}-3ytX3}k&s@F3F%XPN#2 z+0U*Avdau)VjufMrm|_nY42D#JK6`C;Wq{YUUfm{eG3KTqp?(t5X3}RC^i5&B4xdg zL%1ad;gb;=J<%)ZnEOm;>-{nE)v!RrK4&@$HLDRBH1TECFx6S6B~8ZZ++ohCyrFi^ zE2W2IIipaSyAHLbE;iC=;-vyZ2Zuj!JQ$a#%P=`r<7<&AnT| z3AAE<4-t)+TorQeC{s6_2JsziFJfKUR?{ow)qM-4&zX>biIQu7VrIjazow<(wB+3X z3|X|JO+5M-PjcL8Fij&=g=GF<7Vcc!!m!`>BvW9G2>g2YaI`*BKcX4ZDjcyL_-&%- z9~fuLRQ2*l_oaNFN5+zLkC%kA*f}Hy9aAeNCb>J%^Y8xLqxUq$#*HOT#_W6yrH}p_ z3unCLK{}YB>O|3}UgBdUCXXW1`8&QN)26;m!DCalvj7d^We6`AUy{+~WMcMjX&Sxm;#UCTSN`7-E0kVap;P` zg7hKeC;-@Hv&}>otTt*_auGah0x*DSc>P*}iSM{g$p##WRd1&a= zJ~B46Uh-ytT2E&x?#sm3yz?s-P{l#@2s>=mxal@CR2_~#n5K2F0@3*RzwSrl`t)rY zSC96iaq-Q`{;u612Y|1f4P{;aupt&zk)iSJ-sg{J@!8L3Xzp>IJsQ6pkUbioSD;bT zI*_LE^x#3c4N&bx2`ct@b0pO-}z3IAXg)loeC1_`>Z2b1xuwdR`Bl%bC?| zH2DXtX1~&~Z+4HlkHPd)I*qVxx~Tn%p<)SMG>$mtZ9nsr4;m_Wc=o9L=3i#0Jdxj9ll$(YeG@Oj*?Ccp3Li${K6ZQkUkouWXS}*z zFi;pK7>=(rNl%d!dtT#{W!;GiMC=#6RD5!%@F%<-s-5MHmi@5K#0wG1TU8Di||S+-<0-?-cc!OmST zkCw!kDOA%Q{L8^+Yz&C;>=3rKP_So+i!HG_ z5}#By;C%pj$0wDiDcsxSSdW@19?BhV$DIa-XF$>Tr1}Bx1E)ZI5_2L${;qn~kNgdQ zkpD)s1IWfA|E$ZQ;7fjI$p0DiNFMp$a&LzG?-C-NC927NPl`QhC`ME8bTYd~QZUVj zYvaE$1pcUK%Ud@yG=CpSka@8Bd5yGn=VJ5TZOC5wDvX{rUIXcU@}ORv25`gl=-qUn zm)_UcreSb))g9SgN7_ns4*0ApO%ni~5(Uh}Colf3@|wmtS*cY}b|Qy~U*a z$J);E+uiH6I=zhA;wi1f-p-<9@=VTwQ}M}DorU*MS9~%C%jXzp>XCL`^9(`b6t+2y zQU}E+&vcq+k`$jj!`q+4Cr@|oP$%P)uOx)ViGyuR2z$NAaqz-=}-5_m0W4 z)owbYzM6g~ivDy7l-2obLz0a=dnEb6&(kEC-bT6?J|ld*M|xzr7qo+tFjnc9(gq5Ha2}$ z(YUsZqUp;O(xIx%krTCfgR3a0WgI!V8{Sn@#<0_C>K8^mZLB-Jgcc=m5k*$yEFCsg zjZ0PET72Ue&xKtv;5d$U3Qu-tk}rK+bZhZkq{RrwDtvS&n;I#p1DG>RZ5$|?5IY8* z&**}IClyy9&e$sb1tD)(OQcdwpD@ddgouQKsnA`^@W?d@hHh6sT*Xi1^6H1Z!!dTp z&NmCH1RpJaIlvw=bG{{bccB#;aJ)r4VN=8$fw^~&RMS*OJ8FQU<{k>uencPR4|^9= zI5UCQgKLJDZW0v13Xt`I;8#atglzh+92_>K`%kAzFZ9OZGu!Es<|Rt7C<5Ngb*2)R zWuZJ&*F$)R1xGA3&Jl&%LCMr!+E__H>{Pq$`^Ws9#GkaCM1j7+Os|WH+%hTd<>u9l zgHF6M`M7_c4=6-|)-TXJSD5|Ilbxc4VFPyo0(=)eSG3X~iuw;F@yoT6BKG-q+}Z4ffJL zUw!A@>5wQpz=krmZ}WaD*nm;%a$yA6N4XnJ<0iqqPPKN#^wB`-IBq&$zWbM*reNO` ze85Y{L-(?oHAjzRPvNEW%p*1`d47xkARdu z+V_)dCb{sW(Yd}2O5B}yOZ14MZo>A^$&SZH0kRXwi^s~$LqR;I3rd|pVLT>?xmN@; z{f%xFgyHq}C+UU`qW{4-<|pl45t1^8{rvj5ensJh8b2yE!h8O?>wAZO7j>dYL)$kq zLTW$?D64YUeEo+5J4PFA!6pe8O?mNAV~bg<~~j+!i~d$@7(Gu4k8 zV!HW#vb&4>4I zqBCXc`Hm{DOBerygWK3kIi|`p(rIs!#yv_o*aHbe<5Jka0sW*gqFq2oQEQO&f5OlN zKmc5|M;~uj)jPO~5gG|ryw8U}As?x4SMjCSx~vC1Ygln7P&#XKJc^U_2=^C&wQmU3 z$&l;lnIZp&wh{s|GfJ7E(Qm7Vb=|j)G~0i8Gm!TiQyw2Ae;NOt*9fLcVzeZ)<%?+} zh zNtKj%Rh0ErQ9>26Yg&!;MHS&f{e#84gJ{L^Dod3tGnH6P9|N;aiY1&Vz|SCZ5r*_h!(iRe;bNK` z1c29|b`|b1j@i>(s4|$CXSrwp)+E%Z=`CuS>{yM5W!rU+0Vc4LL08jMGFFus8cUUo zG9W~U^){CrH7iJvDAl5vE{i=FO1uVcGkpoH5{}_?hGgEsGD~X+>>_fhs3n+gxMbH4 zz?k}-0gEE=w{**AaK$pjcZATS*1+T+D8Lx3TxPg_s>C8oa!4;|9D)+cFb&ZY97J$1 z{|qH{VU=GaWx7sv!b#?S#~nT5(c6RaZ{#w`rDoZ1HaBlu@O`$&lEb)HHDFBry#3h- ziAx+rf`^AUwOW+HV74GWtOOct3KlVU>%T`er_d)_wS_XNH6muK28|DmH>>A-i zixDEZ49K8TEZntB1~W!X=47hY`9!}#L;W>`%Ns7!d`ZwA_nH|bRIzO}?}CSL5%^uN zieGsWUm$T|v3pXzw(KrE&T87kw+?>+GC-=sU#OpS&csNj0COmZ%pndXOzvOx)#SW> z^|sj%y!-Y|BFio2`vTMAf(mRxI&$b86Z8sV5X~(xu2zr>Yi)Lq-MB_22|1q~l@SIe zbNe(kRmELnO%tdc;jhnXLV5hpIgLpI5zG-#`smqYy(y%EpgEinxHoZHrbB?$2CpyF zRNp144zkb(t-G{IW}?Z9b^5HOA?Hrfc*r@0j$zw%9$&?+owM=EzNfr_Mkt1pQ?@m6 zov+i19YqFpV%*2E=VtRv1kF)BxWTUTgf!V2hvUW?s3VupOujmX&oep-$Lk85JEcg# z|4bdnf{d$$WHxr;NH=;UBM{SuUD$W-)TTLkxb2KbTlu??f-JJDiMiH)`@4)viffr%E{{jN7)V3#t(>RZEgVVdrIE zLWUnlzUSOo59sk*OXHJ924c4rq@st_#BVD|9vr`QWcu5rQa%)NlO-Rx*7z9h!Mo0Zj1Fz}e6K z?wya?f3*Fts-lvARkN(??rZ?A&#m`4r5!PeN#tnH=Y}|XFrJ(agkZx{8$gB-D;2v&BsiHYj2>e+CcJ)yrZRHtY3Le#7yfK;~RXkQ~kh zm5M-!xIE-jWn5e?E+aN|b%_e}dWec0_4g3%Cp`0L_?KEtUn&>7c`O3cr?`Q`n>qre zG@8{B7$u7B2xte9ik!w~xd6m@d(VyY#1+_k!ot8a0T_CBp&Q-n)XR=ZV^xdp*gCek zdjY%W!A55~xgb7ilry=IYos(_>76Q5p#T|QC_~x6q6Oi{`l7hl&RX37zy`mbdm%m~ zj6!^RsU4qA`TU*RpmOIcxJ&dfR@28XAT(>qSD(^!Jb$gei4Xo>pd?C~_-HE_(97QU zM>5~<)c5McBD_P0*iF#YRLNhxT$g#dBDK`;rcne_!`=Gk6iw8(M9FWI9M2!mTdL$n z@6$2fr#arIW6h^ayc)}SSyd`Byu$E9WBXXTS^}sPUN8O&PN6Hf>bVK*l6E(7gI3jr zLO;EUyl%(O?3k=KAQ%K+=O|iFg8M%Nhh5B@M1#lpAWZ4a)6sSK&8U)sGn?NGtxC#e zX8KsSTq_MmzE*RTF%OEos38m;N}ngfQ#DwjF#6J}E2n3VrLVCE(q^dTHI z=YRDwJ;C2xbtj4@{7P@OpASF9!3Kkh)j3L$Yf>WrdXqH9UgafCC+S*}?8FHr=_D-3 z^Ft=-)bFqKa>0G`Pt)hb6k8Sf1y7aP7UMJaH#CMYz^gb$WpEA$G^xE{5%T=IyiJwo zmzvT`9#mfvMGr~Gm&;8e$AaGZ=yyIH_W~C^cI3PWxui<&{G1{hmG}}0PZ*S)-C#8-t^%mt z1~bFs>sAh68^0Q!HMpVQMcD`%VneaD{>!-b%hn%nqP-E{Rd2BjNJ!=G2kyw^0 z+4wIFH_0fZH@oZZqFZpg>8X-6d@$D8QaOCZ}1OCB!NL( z($z@LRLLcu!LV{wl}R1g8vL$q>ngtxmKw8)y1e^-JcZ)pyi;cEfFk5OLisZP$+tj! zo2v-gK9;Z`lNf7AKvoHbpZ?HkEhe*YK$S%&Y2) zO*mCa5sYR`#r0I2F}^TW{2>3ZOz~978FUT%dy^q#9oLS@TK=6q8PHd%ZWB}*VTN!} zz4YV-NrzwRN;oc?e$yRsKhEv(%W`DuhAhgZYqQ#R=Eg6~n-xEM_^kMu9L%+I_P0eN zScy+xFn)Gn{6gGz5uJ=)w;x;1pr>y=F`>x(aOJ0;r03GbX=&)!{7+G^t>lhRJpI0T5+<{A`>b@^60(=85q*rpo6P3wdR>PL}hpCmo(s zV3MpA9inLTPiL1(`E>RuCr}VSyG&}QvoXp8yTt(Hyb+3@ zoB=DCI8S%wZ8spXdcc6k@~=Jv7o}G6K7+Vj9}2!GTJe*BbOLW#R`XB!%TU$3KC`u> zF>^IoY42T6bF_mqvJ!pJ9c4}B4U`cptujtJh5$u79zHgxsp;m??_S7_ zDS~$@8)#hv|9-&w`PzWftym0r#}yj-oyy7FjLX{5!x_yF+dqtXaj9Ol!8yhBw50CPX{$8vq4$C+%3_&OqhKU z#;EE00ptqyqI((z%o9qNW2k+3w! zEn_N4!aGzsM9BeG)>=+1R5gl15^?%kmh*W|R>*h$kymn_?o z$w&B-W!t}%FN#(tM7vA8>yUY&-6fgpko#ba;xZiYPe{R@=jHp>TT^xgoa}IJXGnI9 z%>=u{YHg$Y7T)x1e0<+ni;rYbbRn8w^jXhXrAqF9UpRt7tIwfDB^81we5 z_x6tWZH4zX%6ogVm(&N*QsgWXf1*W~f;j{y-Ln9s%U$-}Lu>q>{uGePg)r!AU1 z7yt;C(rO$i)lZ#2MkKG#FGnkMWqGNt2jnyg_8N3PmC;Lg;=FA452s{hEghF4S6P67 zn7#=Y{xdtvN@%MYuKO2D=!vgpXPpxp?`B1Q44U2UiKQ_vXn)Ba#Coxm@5A-oDRjF7 zd^j~gRI2Dmw;Esx{u~(tE0m*adGb&K|3?oZQ%~2Cuc(%hA5!tD zRGjJ%Kwa07&nUFrEQA-;O_47=yiFBrp00}%W`em&PmN$?O0;L;@&fg=j3E;z9&FD4 zlZUvU!XE*8qkFHoV2_@zgY!Bj2541!1Wb!vcu+%(?CIHag2g%P+`ZK-d0CPG%^KEcr{xy&g;DGp0S$2nw68r= zq~qTfd8^7R@^@9oYILmn(LK4;Z#DniB)#PR{RFb0=RXej%E%bIZVUPBwmtdm5$m=R zL*bp#y4og`JF=6B-uMWSg>YiA2dvuIyIYhOTNEye1-qw>Jdz<1f zP`t3UJ5bdSInq7k-vV1HU^ipU&+#hb8UH@r+#W_knp0~oPA4&tdJQ$P^E&uHlaXae zUUH#3GbJ*6GL5f<-Ad221$vhJA$gfo0bmCDGtQ7c^#%7r#)_PXDX^_Ezk{2k_ip(u zSS_r^3PV!c;FVdREtwC(!|im<1cQp_Uqu!-SYtR*K-v(pmM5kbKpgSIY<)b&`zU>g zJ`P?9+saDTv;9q!NIMi( zgi@z9jaGu5t`Ta(&PcA8+M9|Dd2vIsZgp_)rZhRMxQZ4g{HURVeS-! zsfG!&+r^LaU3BCOXVERR4L-(p{RyQ@nxASaB#H_IuJ4VxXMm{1f6(*xn@-eSt1BOV z$ozMlU9r{P{h{5qmvEmDP}fTW6}$h@KleH0KEE%w2RBH$?Kf(E!`#yWCEI|~c~gb;^bMt!U9q7bJiEL02j=q= zLH|&&P0gvD1`aW8=wmEU+-6x%&n-1@Z16HB1j1{*84Yh2dze}4Y}G(ub0Lw&oqU?= zy0W}XM8(J{ptm=L-5GFUao($S0+lc8lC5FKv${Y-le(R2BW&MRgdlq&v|&V1YceFN z9UQEzlHCt$%@((X?H31f=o?4JPz7bzb7dc!&-HYu(5NY)X1^`I;K}c1!@!#8(LN%v z$lXVa9=U59wBLVy@dj;Q(HqPKj!@g$if8R6nqD;L^LD%Kh2pNCgrE!WzrOro=Z)H7 ztsH?=Z0KGyI5KuoPE%`3-UzGdU3CfBIMo>$%$Ml7)z292cZtC->#>r;|?ca-5ug9n)LI=yb|~UWQ`t)oLEEDW?A9Zm>Bk zkM$JKt?6zXOxXHVTgwP~o&1#kmCgO09Uo!G&u1|>pC#t}QV6h2ALe~Pm-JLHcZjmU z1yrJy%R1cbxr19qP*3u6wXok%nb$u2!)j@~VD1IhQ`gGYHecg+-`RO8C+4FZ&o*$QgyZF}=-JZP1^GCI<_7VI8A^a(( z+kQQ4*B?`eUso@?^rt7fWmiLCc~;jnu-zXIef@|2U_RCzzk-(;MEp>ra9Vd;c4XM1 zyrBTzk_{@m+j1h-EQf@cn==cg3Nd}U+wwRUHc5FVg-}(UpdvqdzW0!;h!lB4rGsI3 zgpysLZm{M(XCCbaAGBc_5QfZf8Ee8m`1;|i417&gg=|8H!t>k8&@k)_3r$XNC_cl} zhV~e|1&H@R-(R7z(Ooytbt=j1$A}o!xHqeq3taxXk_xk|(!8NoX>h2YfY1%R1I9;o zW0!KQ^z$Be3cdEiR{IeCozHEG;i1K9td!SKvC>MF#tJ!Y=va-2(swG|Rk{aQs#B@E zl-d)0DAeexg-~OUeyo^)^hOE|*ns<;z5YWpOGDa=K&kx(hV`K)1;O#m62FVN% zX?eYalo_C@eFGHhf|qEZA-L?m0pg};4G=7-w~7Db_ymXc2ot+#SOZkbSQKl3K-@^L znE-)_MnqpV!=vqohJ4`oa7=WQH$IGohNX9yyzy!4H$LHXd%|yz@C(AjLqYwtp&Epc ztF)a;LmrwobPI5q5z_FT&p?Jf$h-k6AaTV1YkZzI5^Ddsq~|{PHRq$us4#n+)fpD7 zDK&ag_QXXahcK7USQEVna*v$X)EYU*-rXieVf5{D5+jGqYJ4YU&1&4+W8FlgmTYA6 zA+~Q#l#2v)36Wb6dOE}FZ-nFRN`-T`g~qK3HMd9FSjo^S+J_>vY)`c}ZHpY!)QtkU z?ZaZ859Rsb^s~kDFfTc;shf*gGm-1PK4Jcrm^ientF}*uiA~To7+GB1A(y&Cd3NtS z&!`Nsx-Hb}=RwvgIu0duy6ev-FL#lAwq47e*n~5x>7(i4$vnBg1p)L(cEx%<6=01n zn}sNSS47!G+LX{gY=}cnSIF6g5l5Ka2~d^0bJ!W!N1#XhmQ-^mCY@c&fWUnPvE}Jb z#ACDhaZg3C_JW;6X1nEr%6Z9lmbNPETV$1Ly55dWDKKFx5Qn73oEat>6PE;qb^eA5 zlT8JI7>x65e1++M{84pRB7CZ37N`;;4@;H2`zl!5u04RvJ+K5E%)VeRut@`EwgcDp z>Aw5!>fLXTj`WEnr|ljx)du&*$;ebcmT%u+_xDtroMFfI?!0Ld;&GC*a&Ncayu-GF z%*77fG6kW$!GOtt1-P!S&RrMymxdk`>oWEE1o2We%$ z!v}Xyh3eX#D#=s#I^73&hZtUUcV<2$UojtA%m*7K)#^=>EKfJ~@nJSzPLUrF#%)WL z*Z>Al2fM$?6#lbU_*}2BCyAq@2f4601jP#^;bLzI3e)24Y!&@(@%Fakz9rrou{NAo zY}`V61zX=%BikC8HY4C7DQCpnKZ20|O}zc#1oG(Ic=qL7dV_FWfGLObLKt;Hr3s;? z@M&gMpGDFj2~p7x^z{HeqSsl$Zk>q!om>m7JtFIOTl@a~uI1znaTb(~b?4Bzf79>g zV@>O7@$-)oYpINU2cCg3atZ>&BrVq>888lY*m$w|*Q6_`BC*jvZyXzhqlAUxuCcYpqBB z8P0uIw~I|PK@duBW~{yrReX~id~RYCT=7f%7;bznxhO=;^MybjBK%&{&EVBsjPjC- zp`H#AHALpsSMZ^iFR#b`gAucu?_lWMM$WS^+$c`-C_Bzw1T8BysBt;06y0F9y;~y( zISrkpHs`y)W@A*~-h73!u+zc}5)sqT{1SLgci^*2hrffspi+^CMr>058-KK_| zXi3cE$yq-qO_c4QLT^1nqU%<^q#2|vwRfvq*v>2CfZ zBF_rUC3u;|nZa|s4=6Xxl*?DS4c3ZIYejoSTd?ZNa$9a_vR`{Zxco+(9BR52oeo;h zIif385Y9DbXj^2)mDLL+Z}nmGV9r)^1Eo-oMQ*Zv8>2_N57GHPx-~krG~Kq2Nuwn> z9sOJ6RXR_%_n4mUF+FXg^Evx>o~sn;_!{k9vm--i`8G!ALuaIoJIAdRZ&YmOc&I?T z?Nh-lfO^+j&5~+S{COq=A;i2%nds1QFU)eIW6RXZW6|IfAR?QfL z)`~paT0!~b)Yyc7JVm#nV}-bMkV|K8XUYE8*=CXBR)MaAXwIF?N&yES>>jDLyvv<3OJ`)Y zFKII7-}M}_Q2a{s{1*-o+!IDC_sxUdkq9rzjc&9~@AaeIYk`1=gBZ&(XuGL#SStS} zigZ29fVuxXg6tcR6RMs3ACk%m(_ObP%Tk^3{PTIQF0nYXkLJ6Tr_osRj%dC67mB!l zLILWw0CMt2vAsFb3*Dt8^pl}Jtt7h<7Oke^s1CoWd%=^lB~^0AW_{X-L~#&Nq8C#x zRr1^>(qiWpq>vE~a=+kkr|Sz)72BH|9Sr1O`JgS3LLRY~KG{brXsHP-$+77!otV6B z^3fryx@0N(UCOt1y+~2;%=rPZR)(FT_fI4|A<_nsR*a*-NyV zen!dO596=W(xy)w7e-G7mnZX09tNA-GQRb`jHZULb6A6EWk+OK=0hO$GV5YK=Zw+Q zdu#oS>7YpON4@0ifk?TM0Wz$is3dvzMIKZsqJyesr^Aa9i9xDZi7i$#RWlS;(uWtL z|HoEPQsJkfuzYtR)Pk&sw$owR(vgcfe*vMFci~nlwS?hARBLYZEprol2zv0`F!y^u z0((7IajRRZ-Fk|5x=P+PEl(jHts}l=rg+ z%xSsU`#Yf9#D%`a*<9$G|Jd=_S#t*&LX!bWntvN<^UYdGu3I226O6me%>zMVc4guC zp-J4E;DPQJq@_)Y57p3#Kf!Ff2r_{MZ&y^K!SBcV?LC9(zm6KuD%R4l^N#I!M#qx= z6E;r%dqQ>F-EGVu0w{)j-$bk3pOkTYl(_Vuz6B(Xlzc5bH3ruRR&h=`aJ53*K=RJ2 z_5JgvQ{9s&z4{=g!MBSCdyBs)eEHL(nS7oQ5dq&@)|B>G>ky70eLHWm+z-gS`bg^O ziqK6R?rT>Rta`-A*pbs>w`H9Wa=z5XMt1J*<{bg+{&j>u2F z_f0z&_1jmW*w;X|F_aiNK4b-7aV;o6;9D0N+1GauaYr5oeJ9S%squXi$z7kzon|$~ z4ONwqi-Jx~UVt_A=D~s8+t*LZJ|Ph6xpMxYD@Qjc&kyW&+xF%=Yuen=xm&U>$hl_Q zeZkx{WEe_@AEA3O8FG3vLFM~ZjvNPn8sQV?vJlWW@OnyDtVjnRJ%q2`*b zNV;x~xtK>_wUBSGrgQvfL2+%tmeISpp1m#8*6!_@Dt6s|=r&r8y|Xj+;Tx(gdU&wq z@*K}ErX$xrs@>kbz4p*lpz(u!3_`MC{p6gJk@a(Hq#oHVmjmC2(fpd0gOX^|S-bi( zmO#t!Q1hjP)eu;rG|&L#`*6WHwGddeDRfk;+IZQW707Kz9Iw7HcUJD2S%KKvuUj~{ zaPw#(_2R4=-#fQ;>hFB}TLsZN-^isIlT!^}zW&NapVIGjty=AQI=gz#`2G=Ph^X`<~^vfVFeKqJuSwiz{oY4ua|J z3+#U5kk;~@d2@iusfAd&PHB8wWD}}*seb7C$=T?EI&zZ3csjvsg?7JTH|}vk8PWyl zpFhrC`O@wS-u>M#*OuAl_;Rq#`CyxSmYusLkjOjGzIt0J)3IeR9p=<2ohcQ_*%+*v zR&KXg!Iq0qsPtdBzQr|f#mb>B%{4Cz$gS+V*JJH#1I`bysb*JuPuk*0>+$wl=k3(S zfaAJ;d0fCVtK7erg7qV?@JL)fU`ckrJUA=MUxi1@x46Pd5~naB8RtG=3c~~vmklhu z(i9d;L08$g5G30go+)o&oUY1fcd? z_FsLE>gw8`HWOd=?*#QgWV6#ETSf%&G&wW>&5k?0_Tj3+!uQ0&-i43+-?i}BX8W&& z@0cHI98%FE-S2_!?^^gyX0_BMcGpM&_C{vaD>kcMW#6i&fY7I46v@(78O&V|x+_mG zf(UmpgFgg+v&wNFyBG4=%jhj}V|!P(vMl!}ux9b$nOfKi-sUB?w%%LSB+nZMNPO@` z0ra)w&fdOyi#+o1XDnxCo#|WS(FVKYXR52+(WBfG>C*mPjhC8OCkTpds+kl0?Q+Zt zLSCs&W*HZGY0XcJsi8!7o|5 zdqsow|KO!@Z3CSW67lR|YF7nfd#;N7n7=iVEBQMsimMa~3wfE%^eTCXVMyxR4~p@mtle$K*BB%Nm$IQny0W~|XdYC^G!bGk zgbZwNKWMgscH*$Fnz;IUs7A{f=01fURI0yNJLk7JfhN5jVazkaGy0`|zOySU5jfn7 z(Yx6dJ0YV6sxq=-Q+XL*#(hlqG>3z}ckH@1*jM<8;9|Dj9}E(0Y>S@g4#f)Th${Ep z14$6;>l2C6YOFm6c)I8(DH3+R3Ok=;81vx6*b24n%MZjp7>$)3r^%7>skPUnrUw>9 ztSWy_w|~n%f5X0<$RPe^b6=#hZugc4vm;9b-9f9M43p_?gt$&j%yBm`aUr=2_>m2* zEa9l%rv7uByj^4;T+m=O$(Pj~hr%4wYczh-S>aoSutfgh=cRZiYk7-x!hUY-6mZoA?rB%RT+sBI;D;=2$kBJGgi( z8iw%Lum|g+6P|ns+&a@<%?hv)f)5`&H7imUSQI=s+!8LoG_aCdvRd#g2*j@Blfayj z3|Y^;;GQ(oOs7*q%&v;|Q0`jnsI#rRFt;L?+#yX-c!&E}I1FZPR@068mTFIq3V6yD zq-N!G@5yBNPi26>s?6U?8T#XDMeE`fLC@XZi))fEJh6=y0j5eGeHwJT!t{Zrizv%H z4uYcW9O|VFSM~3QtIt)IZ~4bRvbEuL2cc=dxA6lR9iI-bnohaadAXP0|31 z`qQ=gTdpmiLDltCZK@3>YQ9h#z10&>AYJ$S6oo;Bv*+K+)!2Skv8zNphJ!2lt6$9kC6eez%jycxl&m zINYLKQ#93ajuZYeE6@_O!sj?ao;reqr-C|#eGVsomnvyl#q;*$f0_3OAmfW3H0G)z zcuNGo0cz5r=|_efw@}oO>enPEE+`VU`t8J%f?=g8Yvny3{ zJ@muUa4O@^SFZ-UVwa7$VcXb*FDA-#%31fcW>N;N=fU;5{zQ7JWGMo;v%PCMFJcc? zGpB`K&yJ*LrqsXd+sW1nIu~0fh568^H7kBlz#I|in4r!4n-w<~rP0lO>gKxd?&in1 z5&W;+)c9zUoCDDRwySTlwCvZ_v((i!q?^$?k0JM>XlVA%f#+og>cjz^Da3WloGeQ3 zuYc)-MvnC!gzL`j>_5{r%jZ;Ju*na{ePjO$aA3LjKM-UT@(Kvj4whkg)M6A5?`|T?|##7<1cH$x-Pl(UaQac62Qv zW2)pjQ)Sm3s&1pZn9g-AK-&m?o&sFGYl1&AEYL8%{1C3s;Hz6sz7Cm-Wx3Tn#>%p~ zY|<;fkqPx;vldDWYkZxW*#EY$HX=-D@f_&qt@V`?Onkd_C}GSOGS=xe&dxC2({*pe zzSW@5loIu9YqUUib-#@Iy5AftW?55wM$BKEz(4Vt*YSEPc3(2wf zv0d(-ey)?Z+j=fsSrB_WJ6hr1LUq)7L2s>6r1x8u-K&SuKTJM<0(ugcVi=+dx`UMk z*^v8&bpoT1fFvjh*9Of--Gz~eUAHHe+7~_0 zy|5P=q4W(9NyxyKKMSD~j>bIKiv5~r+xdsh?%yDE%)unb-UXpMrenGM1qdxQ2p!`N z>8)&k(A>k*K;6P-YT^t~siNIMyeJ|SBt6VZfw@kqYnVyw3$BJLl$QL>DT1$=wYuL(bWL=YqW2 zI&>HCC3K%>j}7I%j`h9myqK0xUI)SMUNS2xVtcXg%y~cVIupLYY2d7ob8{J*^NLjU zi8oH8TgA?~Uxa;c&pp%Y-n`Rn-=4XJwy$U2;6QgxURm^{m@g|bgkJf2B1h@I2f~BX zv&XZEvW-jh*R{C>tJsplc#M`#ocoxOwM=Lr)U&8%ui;R19?Bl6W>GRQM26m>TWp*n zVicJ(t};URHr*^I&v7ujzY(c2JBqWz`lpv$bOo+j*Z>Dxb2pqdQP^q6hq*`6N6?09 zJm0yMWI&+HzU}kd(-L3rIS}m84~3NJ7^x1uOlv5{O*$ZChc}1%?5)xPDH4b6saHcM zd|wq4-N8AX{bJWGR|E3MeF*M&%Z2P{M{|Z|W+4>Zk9$?ya zzcK=w?R#tfyXnIz48(OpWq<-Bb{!4}`FEX|Kx^A2s5lgx{|z*khb_{rtHvtJ^Q`dRDQ47i zk7n)4*gGXJHdh|Iv&gm7D;GV<41;#IkNm*QWJqD7J9Y;PN0Rk5U9>xiL-34m2p^@d ziebML6OHp|K2=irI1>lIsBaI-rTzDEb)3&ln9n6uHn&a0#{UB&clS$V9hgT!!XDwC zTq39o;ajSRF})mIZF-DE4_Ej^nIqFOPWs&6%C)o8t)3>3*}tgUPrj(}YGvcT-CU7= zp!;htWu{VYS}D|~@=sinowa*XX`%322W8$Ox~uC6#m0Y~6|Gn$%TRX#+d9Gqe=VD` zQaeF35!tE4bIo3akjvQpCBMhI{dLErauw*9RG=RWSI9N2@!Zm!5$TiP%&8}QLji9* zN<|+B8C4pSG3)6oO3~)MIgjo02Dh5q92@IOQ$&M^)s;gCNAa(&m_Pg5r_7TY=V&TahX`l;3k7YBXn4yvXIj z&d*{=2>Z6rn^e^!@!GL-w}>a2pStm;xLTxx=D`8HaK1aOBF zr_Q7X(+9zS5f}x2Du`Uo(Cl;atN9$rT^rA@NJw?~+UGYVE$6UTcufuln3s77I4Gt6v0#B6J2MrzhQIqFSHVm<;JQpd z1<~QeC`pwpXEBx|T_{}l0ajA-84ASS8(n+Nd(&%k%b6&H=s@qRt&JjvE2_*Rgk_Gtbc6^-m zRBNm!C#u@~x+*R=n#W@Sr-x}+7yPG}IX^Y2Fj)*eB~MgdZvE6|M()&FrBb=p;`4cT ziWdF1ctwOJ;Lf?^4=21}1m0=iJXXB#(pzipXLLbRsKR!9(%a#Hv`_<{JS=v5VHR#5 zi7CaYlHsOb=!ZI{dxOg2Huvw+98G^syn)%2$R7f^z_kmso;=>iY~a=LqT3RlA6nx_ zJ5ddwLYQM_R76n(?_nU^!p$ghIUU37r>VSHWSv-Se&zFTYn`5&DtY}8q4&OW6BiIw zhaaAaC5`*X`$%V9^QE^eEV+J7*qJs0b)}xB6YyRyV|%N`HjVc(tVwR7bh1p!L>Jg> zBENa{_r0@Crd{uy-OrqZ^Rim`jgV~eH;9x}jm|Y>JGBD#D zHwY!N-}oc@PSs+_WBbEoZ(J+P=;(hxduFq~!sfbI7fxHO$?}GY`t+GQQY#kSJ_P%D z;^jFTIdMTZj$9MQ2DL1;B{@bHAZ58PK~hq>@0Vu=>Q3n&HCCYVTJS6#1U#|Q$Q-z} zubYQ>(TYtSzU>9Rp^=JIYbbY1tmlNepCtkx$9hKGG{^*OY;SA}LX9hdh?^#c2duL( zdcQZ|1l#f$|JX-k-5+_tMu$KtuYb)v@m6e&1JTzK=BDJv&Dhr=$Ai z(OuZ4j*-a1L-~L+;q9aeA$j4%)MA!X`Gy4u$B}08UOhPNB4KUUtiGjKPVT9!{O2RR9mt@O0+dFM^t0cydk;CoD}qLRtsV>hSO_j+UDGofrwXZtd9JP zy1bF_FM2Vx(IpC6Dt1;X!uiJSAEa0F{iK=i9P_e3w_l)ol|lfK!ceT zk|j(Q@Quswu_}GIN`KEd4zH27FiVZ+F?>&(O5q#a5DBrElkkEd+Ax=j1R4*50Mwe_a0QjYB}z*1_XScDf$Hh z371!Pk|R;GbNuw14zR7~)=jjYTU_uMK_6moTglvjvq9lMBr%Wd0n}Je4cZfvGTCYxV;(Mu{3O;h-D-Nzyj>hQIM(w+tEt4i)mcq{ zpjelJAL;-+6kAsi@~w%SWINM&cr$Wzz*oX0RrrZH*j8rPHZC zD|sM7OAl{By|s8}d^XFtN_N!(GT&$v95<{h3&b}0YZ(0W_ki=cl{f)p2cBaPvbwG@ zc)!Y8Tq50Z&yNXIlKGQu+y5DSc!?qg4{rEM~jRUlUpPwsS50l_^$$sMS_4m z{oWAp8nj~HgIGjjL$GqRnuhU4A!Og+`rJx$MSXO*zu}u7MFVLdtJ44m8u$GMv@bX| zka+G=m8yHmeL>R)?k{$v)pamiU}tx7P~bUb)uco+`P*!5nAa7+1irEBx|RPyzPfXY zD5O;)h&=%PtmMpS4o0jz8d*%4ID|5WMX4>^*FLVb@q-2uBZmcjyVxW;MZchGcdV%g zRSFX?g_W3r{t#?MID0L+UO5I0$kE_CA*ylt2wKFTYoq({nTBYDo?tbHc~FTd|w(g)Fyp z)gN}&vE*_$J^E0SAOvu}vyPaVBYO_W6{vK7BL(Vw9h+Cf$s$o-&w?9l zC&{(3D6hmwL^8<5%fXKqM=14@4kz5h&&$k+==U)=G2eaLB1bDQAhGR%NySv${TXer z?gV^$qkk~qCyz2etV!U;pZs1gL>!E7bg%TXQ;#2dntzC(j$okQubUsU1ENN)*CG*d zXKa4Cb9{qI&#YvMy`#lSN*rb*XNE^TuC=p<>Cjxk0 z6Vin&HbRKh>c_Q8a=ov-jCqdqENP`zV|Ll4?GQ*Pat42AM=JPxZKR05H%0$TG%+l> zq~WYN;KNS6WRc=@*uJjDBIXqxB1CJy^f>R+FV)*1N&{YK7vg62kUdPZ3s%^~ybd zB4SoI7FR7JY@out#GA&DK4U;vR; zqM{KEf|}4EIndFLBpL-BRMbF71ZBx2-GIuH*gBp5&fW+IA( zcQ{?gE(-Q5HG^tdvLU%6KP0%+JP>^pcU&ZEg&f$vNWi}%x=_V@p+t>U#(}(5uQD>} zfW<_2M4875ZNbrvt93}Ra~r74 zT#vaup1T3cwJ-9F$hG;r16L4km`B{#97CddqpTmBILWP2;n!Rgux$s8LfOmdE~_o{ zNU0FXuqYj+=`H%sX3e@bS@lK5&IwZWxl(o62~~S_)rR{T*j-11WbUe*T}gDV5-kw9 z-fwOL>^LM@RU4Gd%vNjF%d(&HzZHOdoBc!lR&Q`PDt1Z3AC!RaL&T=jf0F@- zWd9k*T13aF>Q=tD5950qEGlG>9#Tn0FU8@x+f#HPH2UX=XO z!~T3jqyF5b_?&+4@%k)lyd*8o2&TpUApw*9rrR2)vhTJo6*rs_M?N?EaVhsA9l_@U z`5eG!IVPo?XujBi2A*FYZ0%q18L6X8wc{kKvVR{dQu0LJzH^csfJ+xQg4_JRfO41yk=da$o zzx4q~C)a(7B|#-*qfFF6b{GLT>~96>w=Pq0=Q8854~NIa7)!tK{jUA3Ir@2eQHc$G za2$q4czhoA?uZL@ejeJGhQ+&IDaOd9)?H}z*vyo`Y1S?JOEFS1IeuD4Dr0#r>0GNH zD|X|Qbv<`;ggVUvv8q>aPmZ5Kq!M#nete_%bC@QJ`XMky_CLK(Uk=8;724#X1<^5# z2XBdCt^fFO5kcIBUOf|E)ePGj8)k~Au?bRlR$DBC;hTRaR?iFs<<3NCWSbI{EA}#& zN;vFu=1h$BEd%bCrpEe;Mi66;A}mSGm#r&R)d*lL5n&wn3RxaN1?S>SAuj5jRonEF zdw>f9(^6GJ_O}(Y>&Op;MmcaY{7fPFPLgwx(yRPj7$#XA56Yy16#Eg@LIlnbE3HN3 zrwJkiL=<#h@FekZv2dP6p$hsjB$AI}l<2E~D^)@7eTcGR=O)NYfQlt)BbwU8)UZmO zK?yRQ+f*seF~VE}y%j`)$Pz+3oP7!GDTH8W4n8#+rZae(u68<^zis>Lpr6yZu(OeL z`p~(mL`cQ)+|Rx*9msy@fSed_@evw*D~VEqy>z<1q>Ja4JPx&3s#0gjuO*LGS7Cj@ z%G(D4earAo`2HzA752LL2zgmt)A=AXyMBx4rV(~J1t^-VnLV5E(4jcSUUMHOWhi?x z0e~mg($4&_3t#Gf%tV~~_RAoW(X^3Y@wGQWf=wCM-gH15=3ycQl6Vzy ztGS@@emfG{usA~!vNx2HszZlT+v+TdAFSfTFSPIh5+bZ0=eimxB&32&Qygmqi|{d> zW1omQcR#SY&boN+_rA-z$$sz-gaZ!7b5}5uHiqMm_*0dFs&x~Xp$-fTH?waesnSc` zqtYhyQbqkVo_ju}CG=7=tjRA4DN{DV>r~n<%Gy{fn8F&rZd)dCZ=(+E+R3FSPS9MIP)B-YxLe~Oo{ZTpoe6SMoi+g&=@QWNQw{6PEKoo z%93qx{|n;EPNGlu1il2$V`j^{VFJKBRr9vkoO%5_GTlEUlu;L3A^9?6l=7HtUux77 z`K^T_!}aWYf|>B>WF&i*n&SH@A?&rvxloXc3@|p3iR+26k_{|#_)g6Je zi^rx5{dp`pBsUbHDFajtiN6}_VR6#gW_dJU<#9R8&80hJs+gtp_|900^$%{4RD~fx zse``lq*d0ABP0zwce2B%NR6{9%a4(3^Q;OkQuaCgOP%se?iyrpiNp9hBN%Q)+HtVp zTXsj(T2r`|Etg{30|hJDXL-4g0!P`~xh+_=lv!?e^0`Vrza>=&-+6=kfhVN#=E1Up zqveq~@Wzk1+z&JpCj9Aj(iL-WnfK*}iEC28HL<+pcaPm6W8&RWf4btq({g0AF*Vv> zq@;Mo$K&_DQGd0>9pMs4OrY4`3Iiu{)xwIk&~$F8Iy^2p0d^+_ymw*E#(^-)pp zNpV)Ans~LkOY}(wk%p59=@=!Tqi|&5VW~4x49_0e9Y=gpjlbaCYJBWX6eW;Do%0r~ z6R=>yFb{HwA*q=wL%b>IvEDCcr(_kNQ-5VbH05nIGub61f}bN`z4Z|_D!^j!;$r6@ zA_8obo2?2m0*u+Q-&hZ#8l#0wtoxH*F|5h0agX?AE$2b6XhN5_?<94wp8#)xjHPwy`aaJ2b!^`>)&FGRcw1e9C*X z4cnj-+}<&0Df-nP@I*&gal3%Hs@`m1psLl(Tidu;AttAeAeBSnyW zNr!oc?eSQ4$+GtRwEepW#1FjhIHsn$j7RfGkQPWg@P1O|46>-L0gIsP*-4N{s_}uL z+WgF~DHnFBWG6Ni_HLe#D#cE&DMUCAFjwrXt`{pjZ0Tz_fY_ckSvSZDprukb?c z>Ff$*+iHtl0f)eKwSSb~u@UNeab+n8X4aa_G>N?-56vuIq%N;EMnOd@hx6!Y#b``P zAEstfk8304DS5mo5IEbsA*v-7%nP>Y2(q}02){zIt&%TwLzXFtSh z7ewAK4jhB|x+!6^``n5G?4s?Ekfnkg0jX}YBp)UC13N;UsYx`jO;VdpoE1YJp{<93u1>)kXG#0lwRUB@!Q%*Uk# ziadb)YFM=k2`(8NXii}@5K*zblsrz7gh@_H5hxK{WR>7KSPAOMDSQ@*yU(|}7Ltam zpE~K~hVR>D!vHLwss=9cs)QmUg!9lQ$fF|)JD7tei2 z3JIMTN0LEfJ_#J~RI(s_t>s*L;RTCAPb)iSCXM_r%YL|5+Oi++l_LA`eL(#Gec6vu z$bJ+FQz$9?F;tckoFI|@=x>?tXz7nWt2ra=L{=}7AOHfLca9khy&Q ztel}AuH-+SCq!oV6!IU3*q{QY#cw6gZ{Wz~TMW@v@!x0N@Mp!D&>|q8ye;Tj7tLND zi_!v*l|tM%iA{(I$Q7JIA~UfDrq~4up@~w_T1|>fh_<}D`3pr#(lQgPCov4XrUjt* zBF08v@vxO-JaWEixZw12~WR-CnJNzB21BQH)ZuST834INB07^?q&yc zG9^&4l}{y5A&0dRsCYqn5UBW*@=S0y%PLkv6?f3-(7}XI#otsJ2vzhWp|XQiW@eOy zI+RSsRSB7j%iU`}&RjQ?A{zQ3S>cP^_1cs2a)D0-E0FF{CIWr#b%iivgcIY7vZ(+o z1AAOATQ7F(&r$qH9&e7#Jn*s-ws07kR+%}-2pxlNcuZMtbNi4E?r<5+mb)1_GZC|3 zCPkiLElNyqD4}RB8saPJ8yM_fahhV1SveOZIGq9b;O$!7%;!C@V7KrUmC~_lxbS$Z z+)L&nQ&+P82?kwWW?u;e*#ji`ASV!f`Q?tM8%>K*1wt61sYZ{%D2!fG=$a# zrYez+2>a{mpdGbQ(#_W&OI{-;V*DXi#*phy%BWXXq#`lHG((|?WyQB6^N}MmA1%my z92S|6^?p75KO(#FQVxZ=*L<23=Ll$Vj*{k2@10f~YPkXZvdJi>BGDluct=8{L*jkp z>lwSM%p4;CU|k8QDV}tjyZJrtg{6_P9vSOyG96Vi6VcxZ_-^eI=_qGL-Ss{A&1&db zp&>ao)CQ_RADMY2&T)+v=fKHPVTg0!N1WrDgX%j=#5pn$=b&9KRc22q)0XAfgDl5O zQh&^?UQGyne8A_meD3QlU@jmC1@rj_W~WP>quemJ8u6`3agIT!6z52Dv}_$30nY?od7`o)YKq6%BAV_Z5T>GZOK3-_ik57hj^jSQqQ190e~7 zQmJ=O0?x48BVFhrUAQiITCLCfL2$g?rK?K4QAAUsM$@sM6R#>?bcqpp>2`W7;vcVY zTk(Hg{3FwNDVd%)E~bXm=5iSwh5@^^p((ktOmRbs+{~i+*5OW~KA_r;Xmz0)nhweN z2swwhU>$1KR(Em=E;?Vy2Z)C9Bqc>) zIVq4HmpNb_f3bLlYC#NH78=4UC2T$=G47d4xPu0~A$$29I*W`Mc@~^2O%0r-n<@hX z4kAtc2$WpXP`ZqX-%!INRCA&3AQa+m9wAEvyf6Pb>HCZM%ZVU)LO?|4i1sCw9K@l6 zWr6b0!Rdi9t7nqX+Zs4io#UZ{^W011<#{GGGkOdttu1z|m|(V?>I7#+|3PqQYfkh% zTn?TnZ-A)1sx~wRfsWeH;1z81=t?7Zp=L^EZTY_<{qM=Ag!XG+BIDF3(c(@LJT#v>=@v@XF7`nm-yR*C*u zHBij#QH*}VE{i>&qZb8-l$w{y%2K^#U8_avj$o#RyZTndBpC1Lm()EjQvN$Nc)rL? z{|+7g2H~Y9c_xx*lQdVA3G$@QIE@=ADUV8bvocu77_6M|6IoHv92e#ok?}nk zmi4~y?dkk?@jpxKGDk*V$L8cOIJPW(knH!6|36C&BET6LNJ(piak4DESUtDk=T$Re zPKlzcHo?VIZ$M+i1=I%g++ifq^Ewr>&n!z9Oay(2hwj7RmlQ92>e09$@5IzCO~dMP zyv@75{$H^3ZbsA%ttNF)rXFX&)YVyuTj7~y#*RTdY$lX|Kzc1o?_rw zWXm!zj=0ObI!jrDkiA80jTD+!W2tpBK4{L(`E{JuYp4}gmtw_P4MjlLwEU73(wR4B zk*-LkBMqoRp(MgkIs$?|bN%p5>OL^)@>6GF{hye{P)D?eO2aAL8R`0I*4v}3`GX(t2eo{_^r}AYEQPaso zFr7`&zTtm&Jk>$gzxX1mVx>&Ki&M%sre|}(S(WKPC z5ci5A_X>Zi_t3oD0*q`;ymBB7YV4I>=6J2FU`y~{g0UCn1+m_8_1UYBQ$?f8Rp!{B z;>_#Po1)LMECNG#fFy8MD4HF}fv$>3()w8cRq5=6u`^c56)BdrDxIro%(?1xzIapE z7p}#CT=))`Ke8x?ZEm&Tlk9KNPTb;wzrGzE`6VkkwB(*Hrw+@dt7ipI04|Z4vl!Wd z^GcZo$EU^`3Qnnr_&&`M?Tn(lz_6lQQUe#eSDem!g{j^h^F$c+vVq1jj=vAe?j-{ z1>Lt7bl+Z3eY=C_rf$wDi!AswU3H4-@>SwTB(Y-M z_V=6W1Kr%UV?foJ^wX>-o`wd89_D$!A;=$AjbX1y-T$Cm7_pVolT!9OH-Mf%nGgvn zy%j82&vt`h?y$2RF$do42s>MqCoAlHQ9N&Qc6+d?`sD}5u-oih2s0Cl=)UnewMMwv z|J=Qflz5vYiG8S(HXW7)u<%ThE%Ws|YwXhI)W$oLi3IKTK&h7`{kfGaYwjm!r=)tU zid5=}#26Zh&NJBG*tX)l^kruE;6wW9w4Udf_J;@lYpldNY^j5lt#rOX6ui!71b%gu zBz_0&1+d;m(p%%u8rH?go;vv zNQs#q6|gDLH&iT|-fuo70Aday)Y>&%z{AWtF~wiIrI?{pNTJqGx`ls7`9p;&XG`E3 zscbAo6-hu-R5lT7mQGLGQr0yR;4j#2-J-)PB^jUB>Q5=gx=Q;eNmRu7qAYnh-TgzW zWqhRN+9tRu39Qp4ape9dLtJneC=M+Tc;Hj#4WV=pqzx}^{#F) z+f_`5N8wiTDv6CmC3u?A-;-d=7FGf$T9XWbjB2_*;hOZIc75w1?D|d&j7}dhCTa0| zgsJ{4_*Ze|UNO>`BhO}#Bn^(&eA>v7!qbUeVJ)6AdB9^64Uk^%4K>PGq$+$)_ zV2seF_+DQs$9uO%`ceVPZjIF6U5(V=U5%9Q?u|U{>y7lK@@U{mjZ|SLH`157R9b1X zceKoaJTF7H3>p7X<>u*dhS133$u#p7ONc|f*BBTiFGZgx)UD7+rkhE9q6Gdm!VOOA z@KFKU^)~Sz6YjSBto8Cc60tjh^IS&`Bux`I&uP{#RQwYy3{&H7JJ5sLBQXxFEo?9sGkCfJk z4Hl>+o2|c)yU{y3QpcMf{_4-v==;sBR+VH8XGos!hxG^P44*myx@i|hlWUvpj^$-^f;sd ztG~|pppXTksQ_&k?$BLlpi8D^CNH|1`_TV3LN!8q`4DD|(IF=%-G4OzJ1(s(w81s} z(?;*P!P7CO{b|XHbH(;%e7$MKij6qRT1fV1V1hpbJrehd;S#gW`u;H0@iR_NKrFW4 z0s~;N{|?(}9%UD=XYi*|NYD0bP@U#JyBTAJUU1%z1lqi);x&4E2AyP$?Ni~K39mrP zfp@(|G)p^Nik3%ezCD zPf7-GbKqZr zBY$}Gg92z=;~3c#9x1>?1y=&UqQSu|Rg!1=hW!%whQAszoF4|J`Wxi;?rWIruPz4w zk(6t=0VUvlJkMGWJicOmx`p)eJX1@cs63Lsx2s&G6S7&CdKaat2MTD)=J7O`DR1$G z2flz`nVdLb*(>7#NgTL495VtX(241?diCcWBNE7mx3DF68SQDpCazo+&W5V?=b0i69T4Ga2*0vZi>i=5544zCWZ-W;rj?P=&*Gd~H-nN2 z1=88g1fNah3+a3d{tNk5$qd`|+E%1Y=kQAab%;cTDgJer{p|grPeNJb?gM&t04W3K zSwzR?%6W*U&oweV(vEnp53djK8UA)Wx3RX%KSGj_x+oF3zDD*;?b(tVu@bqx4e{K#T+hMCO#ESLUV;Lw8bDrS&qfsIO8D zQ-us&8CsJ?<5CypNrjbaXXZZo2onAHYdj z!~GW9EY_MA;&Iikj+BcCkz|dyB$L$CLBGI)q><1U9?oyXH4Tixr4W+9n;s)j@FoZZ z8gG*8r+I^Vn5EL%{S#SnJx|t&dahUB&&L{Jr#W-BNbcNjUyqp z!_(%CT`YNEwUYhlV>pmsFQ8z|=~63NImSY%D4c{OdTl@UUPHBW|R} zPy!vFY7LRaADICCVY7M*A&+Gtt3;MIVv9%eN{>$H^@@6t=2bq z$2xg>qt@Vk5TgkRV>f5nCbJhY9WT%~Vbis+KcC5gnYk)u6iI!Kme_g5s`z47@jxUw zgV_vLPve}jbmN?!v71+=+KHfow;HV68F?lm6{YIw7@G;@da$tB1|PHicV#H(}g=58zf zy7QAOy-u`I#V~~IZv3cC4+~d&t$k{^gcr@`SBL;O2d<#Jm1SXvd!>O)W+hYwazat$ zz2H5?viB?DoL%8-FyG|MzY#PkoZ()_P8Gf;-KqqQWpKWJyQ@Yz%^#izD1jhx&6PcC z^J2p6y^1%1lp(F?KcIRtN019R#ly&h+S?V60$w|eEni+0ED6+dz58kek)cD!gIU&U zA3$ejf2c#Sv%WeBqtYFpbi4%mKcVs5$#}sLZN7D>Z_#-@8}vAeKDV`7!Oqz{?20vLa_`2KdjNX@nz5UfqlG*RwTR)_vXijS2TvG+8h9KJj+8~uA#J{71 z39!-tEE{F{dV7V`aSRxTyQJnyw*z@87j03^VDw>%(iYR79?$*YR@I*+LMMnl%U;2W zA8n?96Zme{Kf=-yFh|(9NJuXgq-ZRt+b!qGKEgo_&+SB-O-Pt!ly^coAS+M(KP-v$ zQ6!+BZKeH5`Y*#8yK%{;`ImUJ-+_zSaK2w`QRVK&4_UFhDyo^@#=>=>Hd_)q*INHa zfi8j1?!ux{oV6RxU!W%>MxB%Afd>TJ5PHzW{31~1DzHaUUWL|tFD2QgrWy9ww?KQj z@A~pbiA<81Xncpk6+}^zpApZ!olh1(Pp(jl$Qt8r4nY~f%pEL^MsrqLO>6!4Y?{pjpqEWHuC-aGMhwKMt_UDbxYe}T_C z@M(~4cj!s{h(>l9_I{M$&?yXiUu^x9@+kJcu409e(lwgaV}Fn#W=OuxfQcMTH_P6= zla{@OrVE*Xw>S%vC0V7aY`?bc?UAuY=iwsj5?y6RGU3U_y$9M=%3vi|eRu2LU3-bT zR022+-t3>llWw?&3C6_mGs2%XkBI5*);NaQFxP4Nj-_ZL+SgzMH!mLG&b5+jR%-A< zaFaZQa4|1@C^a}>^;fcdvQ{H#6X!TbW(2)-bc;p6D|dw zgz0R~A`xv@)0}|yTbb-ynM zE6EU((sN=LTc7-1)n;wL{RZ%V>vwwE)B;G-T2A6O%5o?-KPqcIiuL!QcT=-%tbDu~ z_&8-9lg-l?!?RL?!z0)Cw0`{`(9!ib=t}u;+Z^fVq(Y_b)xn43zTsKg%<Zlf`3#WgHaK|7!K@Jn48a)CZ3Mc4mBS0xRpt$Faq8PR! z`>z{5-1NzAZXy-KTPlVlO~Rfa!sSD(zxbKArVSD&TNr<}?m=?kDrEvTf;=DTa>_bd zJd{XPQ$N(o=9$!)UdF zQ-SBI0<#NAX^s7o!ojIS2S?4ln(PB4aHs@Ea(ltnqu`%+NWtYr?-{C-=muJ&^3;a= zb=<7uS90@n&Lj(c5*^_s%*83Y^^_#7Uayl?I9jeZeeEvm=5IHw zZjzjW*s}~^5(~i%6yLzwzQP}e=-KTxT1_~Tje7pU#Tom7q0vW&%huIrwal~iEO@K7 zQT`(#?+W=~OX$2B#u8XHvr`8s11O+mW6u8%bE_dEiRs$Zy8MN*Iu0znv%!5nc;(lH^*;k zgJVo6EVJoN8e=OFjLp4dtH3FYs3&k$7f`L3TkiM%3!*H_cG+M$LcQK*Wz7X$+C`BX zU9vVx={$eOz-eqH!CmVnaZ$yKTv`654+}_qR6)@)qb@tn;~-xTP7?`CXp4ek7jz3GtzW_qmrGkV?KjKA!{_pFh)! zZ|LAgc5l0bcb(ksn7108iIm&ePOJ_>bZyADN<>!o zYbcnq)Nm73a!}sxcmLs#!o6XZ_|fSQv@G5^FAvasq&PJtQYrXsJh%Ui02t6cG&FiP z!6~S>v)-QKMn&Le;con?!yyI7ek~u&g?#8mq;JPbJg*R(!@l+pww|UL>d~F9Sx?yi z;+V?ph+VCWM~$>DzlVh8X7ix6l0}ZsS_y*_4DYd#vh40vik^rSj2|Kc(aTzRzjVDC z8e4UqeYBOxB2M1Z!R-XElU<(H&?b5g8~^()bSU5ILAz|trjy3c8bHIqmCmPOC4nBH zDS0WeJZtJ4CBV1Y$^|lHrEa#~CrF>Ea)_#mIiq%tVyg;gzp9;G+IbB}?JZ_@E8gfq zD5f%A8vpE$dm^9*s=0udf%cm_LwnNP%{`e7<@p%{t~`wij}S~kdmQfOhmH8xgxkvgQJ5qnYi&StkojYLEUJ4{-x@T%Qx- z9?@|Jyei*boMgUO&^qfynaI5YOiB~;9?JBak1Zz?JS{XpH}{w4+0sQ?vK7%XTj8?} z`ICBdkh*;~I3*cMwB?a0JaKYyerym;s?*iZ=w7Y$AE^8@^jjiOMByp(zY@1Kdw#)heR-hQhr+FDPuMMGwbuJQn-w$S+Kajf2?MD3dnA1e1R?;fxrf*pd?36$&O-nQ2Vlou6ssPz-r9GRTBxDd>b?^88K3)|gGrVaxYG}lU5<> z?~8;)dA{|9NZX#Y8`zswhKk}M)*H2H7Rv-EG;%R1D5nyQV9FU|uV*>XVd(HQl$^T4 zCHVYaIEIlsQ;nu0DXa(d7fornzW;Omzc=~}&E@GLp*FQ17yipOtL<}}ufi~$U9$8q z>Sz=0ijbe+t}Mer{qNe;*clSKREJ6=%r>lNQMcT+<=m4v)9Ax+6vBB?&61&!k*iZ9 zW(AoVmTcc5)am3*?>bpIMfxjAn87b683|qTG(!HX;$56>Qqqhmdz(Jn?T4J`s`J3< z>=&Y{N+U$Imov@1avxfNYJ+&i>JW*|$k5072o`$YEu2Dv)Lky;&~J$no8Lp^;~7Z@ zVW4`qzx9aIdW=ulhcMfCYvOH8hoALMj5qh*HI|Jl%3nN+9W+B#u-&RvrPxK@(!I#? z6N?=EpBD+9{};wn+H!_nBz6wBTRrR|(b(B;9s1r0t=z+>X@x%KIjT=5l{qecXMd@y zF|bJHJ71;)deF*k#wviCwQzu=`)#bE2$i0FW_~d@nMGre&&8`Ek`DuCtXYPd}eMHdi!f->lhxdFyAT(!R*- zxX=4$@OrKk_ihlyn5|0x0?xg{)gX?u>tYiYYC--IM*?KwWPqR!{tzUXqp+*BrSJ8ms0Dhl)}bG+=`9^8jWA8(Ksv>F93 z8{XE1y?of7@`WqvV$kuu3%kQ9#s&ne_rn~zyKUzdY=xY~r`xtpmp`nJlncTrUW+ug5*0NI%GE7TBN^tB7hkC~Om%G&$PbQigu@q2y6!-7t$qmIdlTyKA^ z=F4o4Ze`SXwyxa#C#upSkpdXi_3?#+F7qV;FYK&Ad~%rc(=kJCRUt-*62Fi_Gq@Q( zM&@#J;e44!5kd!3Uvr2mu~0>ID+3Om{pek?!K1XL zTg_w%X=jLt(crQpJnaK%Elub2O2@FwC3>CA;hbb=}I z3* z|4%~XPEe8OAHLN(uSUAaerU2En(T*>8c#x#t-Br@c6Vh1txL*yR+b?+$W>_7w<)eU ze-%LBGxdW5a#&Q#0F=a64{ie-HZE+v$_@{9cK@-Q_d0m%@Zn_kiJV zSD1T!=3yQn5a90gc|X#-k@1r3wu`3wSK0gTVgO>^E$p+PaW-UMp4e!5B~!W8mU~1b z_4SsED%TPHZbNd*{e^HWxg^p-^m2yCmWw1Nuh&URlS!#CHwbKRuW+Dr)I~po zfTWzRReeqzC(%Ude+kzbwh)mXz6oRI`Am_F9Ggbhj$rvoWq0IF%tiRkQW~Ms8PX8& zJOC@6o6XS5)^bFa#dhmMuJSBS7OE@)&s4PtN>~Jb7C|M8AgB8xkO^Xz>@`r8TmvPx zobz8~NhM%eTMSY7tE_<{0em9mW*{&xYd{WP{n`>5(hBe|fuwQ@%+*F{v{~FLO*arZ z|4sl)JyIt`471E-^;V>b@i|sc?a8xJw8vu|P>9j^A=YQw17A~lGOc%YK#BF5_V}&M z+EZz@Y0o5Uwf0n5&uhp!%o$a-3P>a6c;&wT4)@U{E+TS96kM?gAe;@7NA%2(k?-u{j88WYCr}+13 zza{>^YyV#H@7Df<;@_hEa{aMdwBIHEzi5As_@C4MJn=uJ{T}f@ru{?2->m&?3@O%p z?T3?;V$Ib467g4QKa95&Yohj7ir+7O`aMcN@<^DX6TU79&G8;W_9OO6@#}TS5JEoDA%D~%>?GMA z>X2u2ND(2sbx1^qln}B_hup72{Df@KAu}Yz?w;ls7b1Wn9X(0>$Hi^rn}l)BdR(>= zib4FRu~<}D#gdp(d`9NSX)HZGwoc0gDV=Dg~T#s#h0cb5=84RE)%VuJu#jhJRzLtx-7VQWiTIuf0wEqrAvEJv3p4^ z$hayh)3?-jdK`V?%GeX_@JV)3qv}|67D`3Df~lIYKf&WMHN zGx^`lI^FNy=yz}8a-nO7j>C0*61%gO6Bi_<(%zu`yKNk$4{O6`YN^iQpZdI87oE*@ z3dD_PiHa`_WKw<_A{zUkIQj}U8u3l`9u0DaZlS$t%T8u)vyYQ@D85Q?L-Q6ALL0JQ zSDh@3qG=6X=SK;mnPU7A{KY__6G5ebS|-#Z5*J4E0>{AMAaocM1;*1|0%LHyXgo0; zPDL+2l`IA=0PzVZc2Nl@hPhK4JL7_Zv`4)H3XyNfnILqJM$zf$0X-%KU$Ec5d_sZ1P&Kwz|rg$n3ssx8B6`%FRlbb!P zAV)j*BFBP#(IO`cgyYa7IL`~*DN~~75d=2%wi^^p2BTD7#>QOb);O<{$yp&|4J`=F z?IV0eOxcsh;5Qv@K68gLxWi~Y>?~-jsQ$uNuzRdo{ujs-KYvThHW&~h&6g{x+jeyx z*fDmAkEZk+8%giseMtfE8@T%Xg9qlvhRYxJlvVHWdv`6k08|Ef9^dyow3U|*K`C46ojz~7P8=q} zU+~7gAk5ORU7cgk@%_bPh!J-3hYmYXZjF?G&tt3-E?#*-8wOTdJJYP9+kjh2PIDYL zbN_G})Z4ZK=WlSm2N(8DjwS=H2XqU$y@%b8-p=qA=qGT5dWNjXyM7aEn;r@W?a&uw zzsqcUQZ9x7dACuOt{--q8&MG2^^vcj(>SnetU0k6rE{}w*BFoV79S$ zr~AE|7k&gdY{^Es!~AEr$=x=_dB|2$>|>V zZ>GEK7ETN2cBI6Ta}{r4dJ;_)s87s~kP~-(tS0DnH9>$@_ZfQm-^|eF#0)VrnxpYw zn4IWbU+^o&c%@kR^eutQr<0kgI?TNe~TL8~xtHKvrtl_o9NV z7lEwferyzg^e_C#%)Td+dz$H-k7K^)bF@Z(qFU^{ivaf;*iVCGOb2)PcwSvC6&dOy zFi>{MYT(M+eY_uLLD)@JYvR>poAtV*%@4CMwi&xV8DPodKW2LHxgGz$wpw5jS-^1J-jLkuzW&?*E6+fKJ#U|35tgN+-w} z@KKNd1!urjG%|4poR9y1!5OgFsm_3haZWe`?kC`X{28zfCEss61O7_nfBOt5H{U4> z-0-sOapo6qJ8Z9{|>g~5P2ir|sRs~xV0On9P}!+jJK zJ%UE~%otyVKJ!a6#{bQbpW$2=p{vp*;GvKMn{jIdcPf9il_EC7_;ljWdu|bW8ix&?H#rrk58}}3%jzh-M z-W86WB+*SE)xvig4;KV3Z9F_Qa8cvoaqdU1r^?2|rHgtu9@cd4QDYFg|F-^C0HYm?v3X_C-6AwejY%!>(`Sj)m`(nFuSGOJxGMB8|*( zFF~{@u8deKi`kK}+ef+PouQ-#wCos_MK>X~b#l&N&T6h**fOT5l<0qug8sOdh-p|I z2LCZCZ=KLUN~MJqoS_Pi{pRGtc=efPFc$iWO2z}*qAH{?urm4~rKpCvAFL+u>zU;; zDg$|m4CI;8j^_CUb#-8wj2|r%t;K=0HQ{KkyYlrOaTsoBzm1MP!m{+-cIQB|ju2 z1Z>AwXW(OOqBEh`Dp1FzGhGAYW9UzaFsX_l4 z(MljVDq5Wk6?GmT<(j)&2Bi=626uPW87(7?sy%e5S74TUE)xcBYz9BHBQ`}E)j=9u zzJS}2}37rS@)GA^T>3wjx8txNS+MZwN>d4vMLuo51Wm*@zR zN7q?tjyS>cS=2x9g{V(di5yKM$&m@@(T^#ZoIhe=+JSc+pZSDq;`nX85M2o^3}zJk zHb0LK-3j-j>$vSU9eX|oSNh?f($oVBq0({#J{E1 zR2cc5*ONTcqjM!Wmgvr>?&-Cq4z%y~4&u8nJ)aiL;kPQ-OZtCzRAdBd;d|xL z-XmOiB_kHE_7%J#)Ht8xAJn(l^r2@n$%l+b<*Kw6T8xsQf$*OAyz3X03KM@&J?w5q z&oFnEI$mwvGpN+DiOXRO4XB?Q?%j~k*-9;6SJDq$UL{t%Q2chh{rkS;qEo^PRH$} zyipd9hEBuV5i|(8nR;%NkMjkfZsqG{vTq1xA+R0Dzf~qQ*1Ohlte0AEjb-4&bF&)F zm|K6{$iAgP9thV<08nae7%WBJh!W<@(v4avp^7ReQZ%s3|EaNlwZ?&W2eb_CaHcfI z7ZWs{7F6+n8tZDwYUJd|Fuj(!t77V=BDz@1LWmjWu39LnN6gKt-q5e6hgBefGwr6zIyDr{`XIFEq&0^;|(x_M!EMX-1aq zHluyq6I=LsQht6UKR=eAr{w1+^7FL(JR?8L<>#mJ^RpxT{Ctc(r3e%mk#U1CXi_`) z7$fcz+z9qLuOEmuXknx>o4LgV-O>qZF~`zzX?z_G4l5PAAD_~%QtxZ-C4a|5_%^q% zt$kd2A#*j@xAZni?OR&yjGl$$T&+B<_#)|qmDWg#0iZ-dC)u&z=w9=|+4VhH~3@L^{8B|&dWXSC#0U_H5yAKpoo*y_KJ4o{P}pl9a$*UC0}&#M(tq{kJ%qyaI+2bYVI26I3~FYKI@h*CE}k!gE|a)8uEmFOtQ} z0SodkV_G}hq2I~YZy=u#`nmW-cHyBX@u^|pbNjqrl5KwUDV=bGI#1@asce?>ME057 zQhu=d`C2ejjq82U#X9Yl;92yfds6I>)}#k}@S75N&M?1{Q-2x{H~_?v^ecSGlX8}@ z#UC$^%wiI!W!04qJ~I4McFj^T5uKIqGhgRCG0c*qnjo7FJ=Rf*vC42I=gI4V^xD$Y zywZX%%R(DCPCiZZdH=N--VP(pk}?X8l*#i0jxVWCA1Bjg=Bg6M$wr1T&M2^)7LC=% z$>r=yy!)$mrs$TD(C@SX?Vf?yXW=e&Q^7#n;T{ z7yzMvTNlh(Vo_x0pq-y{l4KrK2T5yL!7iqVA}KA1bPFXL*plo+SuM4w(yM(~HC>+{ zReC#OBGswETZeLL98{;qM0z+CnL%W~pl9c+DVoa11p+vC%jC)m@34=HyJfn%j*Gh! z#|4J5X++{{>PreqQp-y%pai&Vt-nOhv&#(gHPk&hLZ$ow?XRg4SkGj+)Ha{PP8Pg{B~g&92lgw_b!^5mcq3bfc~tfQ_sWNr@UoO%#jdljcJNm5 zPXl4wTRWJuk%a}qwoffCw8TT-mtwqI-JyrYqgK@e+Lv5V52~72I)b46n*~*+({2fh zl$20`yDzFfzT#)|n+Xi|5+BV@2|NWpCdlVBAeF~)%#T6VWo>clV>3rfW+Ngc>nkRU z%f0e6XxoCSjXf$@r_HizRf`J(GK*^$i_4eVzZBs(o(2MiW^sMA82%fZXlX%=^(E$Q z4abpE?V5N>DdV#gDqE1|376@Q+fl-<)Fxpv)Oq?vRwr&fISbKpf@Ilm-(FIUm z7ToMZy~+-&RW^aH+N(@(vg9gLIGMf5yzOd{&CLH#78wmmE;7BT)BWxBXMtqB$BF{V zPX_#0xmrWuXu@pjwvP0Qk=2w0_?Sn^Ik^PAbadxv`v@4uK8zyBR#hH2`w0iKvR^Ik z%Ta|$-6{{@74c_dk}CQPa^Et$^H-tB0F<)|?h~YTzIShA{+I6S_ZpajF`D)qXMq{; zP1-=lWty!)Y@skKz?dDcmK7Wce#k17wyTXo*7^K}UO9K&D_$jL(WPXD1-Nq$dnG$1 z`($asE^u&)$lOVS#qXb(IWjvH>#yn9Su002{1J=BQM1050sD{fEdmDN9rFjt(-4Gz#- zpV^9(h=cu0Lo><~D9CJ*mkk zh{@iW*{VCpKGACB`Ib)0zdyYYfsqQwE;_l0ms%LIXdYCC3I=9b8o#41UobnCjUk!h zV3yIIR!C5}_sxdS4K>u$Qv`rEiDgh!Q&I>3oo;yXAvC(=`NB2rb=cwqhcJzHZ zdh_?CFv)!gYIHnzupNCH(d7tIhMoHe7k#92sB4K%9nU@5SGQq=loEEnOd2uq=6q2+ z7+!P!84vHG|3xyRlu(Uvy1*UM>b{c0%>J=NAcT^k>gn_&c!I!FOJHRD4RMAFk}Btq zp^V`Q`i79L$gV_g_!q?(@z+R|u^$1A)F2NjeVQA)ic*KF>b3_iv;GjG8j=j*kv}a< zeKzsAc6@K^Q9B-r3Gcy55;OasP_wPMc0`WP+*)D2T!yTqq);}0Ioaz3$D7Y&m*_`y z@4N$vuuqDxnBak;w8sd=0jKgK*Tz;#xK}x&<*+>X5DpI+^d4UyoZ7V_m@DFAX!`^76oVm@u-{jR1&d6=9y|{H;9%@D%b6?!0tgYuNQ~C&g;o|3 zRPiwd>6V{d#Sw%+WfB3CDiMa7&X{0e-I#o*txqT#y~xf6&c)*j@F+`Jj~DJ@*v~3YHVkz{ z&nm%xqQVQ<-&PXHwk}bz=Q5ZK;8N;rm_t+j4k^RE;z0iXR@Q0pSUG=D0lK zLY<$7Hl~Hg<^2j#i!tR1{J^+8 z_{Aw~WE5`}_{|A91^48jrJY74=D7TjmFE4No-XR=GhZhE?`~HU@U74*9-0sx#UT?q z9uEu-9X}pm?QX;NDDZe&8X$lT8ziN~hK=8m)fUTO|7>`djv6jc;LPEOxbxacnl(c7 zdssK_W_gmxk3J@tgC};@OW?TdtP|mFY@=$0PWY`$RP{owSW9ZqvkfwjC9>QrWipsW ztRTo*XBC$IjS{rR-VoWFJceSptVz#7|BzQN*hqVwp%$4_V6K;-1Rm>i%%h6t*bt!= zojXEWCl)wLZt5-+*Yt^Ods<`6biVVJR3utr2(13~d16YJ>KXOwZa{aVG6knbpS7>1#c4yhWRUBF$@!WIl=tes_cwa}U5UyZN z9E}I6!0S0+(%}$~7^Y41slt08fO3}X zsY=gTehNVohG1`r27-5qz6`rtJomd~Rr$U{;xco8G>q#jUYHWRxGQV7Y)XU7)|a_i z^@`j)B3}Kb+N`Yy1JWmK^mYWsp0WTvD!^Jix38{Szx@&cZ7MSlsE4evE{%3UP8hUw z{NAQw85wjS?oo(UJ2B`iZnd6+6Ns*Xzl$_^TX&rsjl0|gqk zy8O84^KOxNjjp?{1W13?-Rxs(jF$w0l%m#cke0IYg~&9{RqA*f`jVN6VR&w?Jpm5#h$+ythpZcPEM28XlL99CZf7&QvxV8o+6mkB&)e)FYQ@ z$cj?RCP|Ch2zP}JudDi;Otx@Hl>nnf=iHOv!&G00%ndO!JX6yu^>FbB`?R3 zPjpNTVWVW_qt^%at**4MhaIJq2-;$(hP9sDupYFSc9l6k4YkMJOWN3bLifAaZ5b^3 zX|`dv@WUKo=nX z&ej({ugVRIdfrs^dz9ZU5$|sD-Jwr%%ENtlLYH%^Le%XrWmI0UqryFQS53Kj)_FiK zt87<8-&*dqDSIm-KTbi*$Y^&+XmD@2NnR?K^DjpT=IZZ+^4S`oPb*_-g2A&x_x78u zRvTJ#@f}u7DbH;b3&3pDy^U3}*;~JmP(jd3Y`EUzudV>Rq1fe~ep~>y&ns5rP?gA| z7K2@LGQD1;qbDblBqL;1S)X2fLU^Gc4R_Rmtk-pT;qBcjHdB$qHeJ^1vWYRer-}=6 zP54?|_UEt39bsp-Yo6%QnVfs@@J&r3kKN+_UaQH!lQQatymMgb+}~TTO<*O)-=4D)>zslUij?rs z!nzb?gkrQVHBp^zMWyw(KPR%tX#d~8|Gguys#pjGAaS;v=*cBl>TsX!PPE-x+nsB> z58Lijw!6Z1U$xymwwqq0%j<8um)P!D+pVOo^QKjZTCjooo2i9ZTAt|ead$8?D}1{d-Mw3{?Bap9ot=G*So|1{=(4dI&F8G z?XI=m-`nobZ1+Cfz1wyt*{%45p)+TRHJ^}fN;YP%BJ*_v`Zes#)G{-+!to04*r z|Hs>OdimWuW~;(CJ{i+^Fy~XWUm)-*DS`({8_nB9WVDERz)Drp&$|;F(uHBT(ZB z%<)j=jM;U;fM?F^nfKc1RY5u(*{6AG>*vgpgbdi%Q=VL&r+UiFnNz1!-_yOYWWC+W z`-X&x{&sJ(G)U$_`rw&8C*Y}_6P!IwH8bUU-6+0m>T74tnO9?nm+4;3JuwtDbv-1^ zzZBFEm{V7$vUG)ag-H!3jAx=zo`$-b>KU~&suLqTV|MKv-5y`f+!@t1p5W{$bEnLh zIfYr!;bk&Kv!~4TbOEpe1s$7`@~tT|0-nH(SvAvSoTXk3FZL8B=lHrgT?1E7${Dkn zX5AXqkFgpi0(0hg8fGySiSoOJPn~g>l;1$g8PzjtW(Pd8YG%!;zgHzKn>n-QE}97x zO_lXBV-6Ev>nXeRdJl_@t~KZqCrp`D2ZRCqv!(>}SO)9rSe*6*B-&p)a|*R}^+y-d z_1&P$sb>l3`t5$t4$hhiY*TeL>tc4zOuOEjW>1+NpxJ;pL!~CHP^ne0dWl{{K96#!?L=2WY$>S*>KH(8Mtx!xux`5L zXJ?z@kq*z2?T7k;4b*!=C~zTbylzVUlv&a=Vig>oP!4ca8=PG&RninaE?xELg~!zC zm3d;Hq}CHw#`oVi-^#q?^s97NZe(=EG2eI5u92SerpZpM|E4s|m{Y-qIOVRI1|4KXbHemF^Ty4Y9jKo(vvLa1Gg3`t>HHaiAs13`L$cieG=29H zPRds*`?%d8UAP<(U5Tz^{7w}Z!8^meMQCp zVed`gqO8_G@H6Zn0)x1KqOS{ziHby~rU9}j#xk*}nZ_V93JT1`42o$rE)}=T$ZWL? z%hF1XY`2Zdx>nvC%X`}kQ`0sh+iWra-{+k3&b;#i=DojryZ`^^e+M7G=Q;a%&VJ^c zXR-^jva`wxOG`|pC1qLJ({nSk$&1cCx4_q#$Kq-{oK6N;PBFUX zVziy06x7$Cby90pM+o#gF#;*&4m6H|irSPg(WQ81Y>KU`_+*>?Cn7|?ik; zP!^XjvgX!uD`dx6Uq@Ygl9JqzFw-XoGpcGKE2S6{kQ&r8`lEAKVQgKDDS^5=4KOsL z&c}FPYrz1+XHk@C9)>qZr8e3VX`RG-+IZB^GF--74B`Kd40RUYA7umrVF+ijEmrc& zYthrOrZLr_;nI3fR2wr@moFh<5IY5ZOil|ds|qt^)m%)7wpwz_EVo1WR;GsafA_xl zwfjFRSUtF{_0+K|BghYZ^!BtirjOp9P7CRyw->Abj`jhd4H*5pZRmbdNce!qN>lJ`i%OFvX@_TSNXYg^xSm48XU>gqersvbJ)mA5R@ zABef-oWjjHA7B5(*xsMr?EmqzqYp33Su<(ZjI}pbjrwity5l)xR%UH}VcUnBUowAc zd2ZY8{zsapZu+>-?D4bT?tMji@L9K7`b@j^nv|c`yWhLvP}|7uuU|Z}@WGrpJx-i_ z^nn>ag=XiBJU3^}+&3?OI_rm}LQYZ4#n^*v-1udSIJ<}@ z7oJE_X+c45!4%(k3bIUvxv1()RAfnZSxyGpgb<3aKi~Wa(dQM;5PrSs$#y~Rnl|Be zm-SbOva3QU$P$_INl(m)Xbxqi&~@kyueJ}WAgw$~3yMokrotkKpe(1bC_jV5t_g>! zwyZFxtgt96yGUy<^HWk-SeBPjG==c#0%=phbMo$xk7SWW?uIhMTG@Z z$}r6f>6Tn%qNu&@YRAbfK=(i+o~4VQ()D$t@?@9s=%@(%lUZ2Ct5)N4g0jR`uhi6I zBS@P}CDTUh9kDA<9FEmA--%;FF0@-Q1Jl+w(X;>e^goD#67U&MOc}gGV3?@-=SCB( zuOEK)j^poKM&}*O9bJ(@$QoZx&sbD!b>`QU@X6X#S7pPFn|4?ki;8e&QRi{O5~Z%Z z0xNCIUsV+jxNE}c94T^ychX+5uvSD}Sci=-RtZzEIIv6iEGzaR*3R9rh{BXwkzuja zDf6&H#p;CC7YXV-O7UkxbX|onUsUHDW%2GSa~(5mi^rx?oOE2l7Gjrctv)*iS>Yd~ zCzrFFO{dL2(w;DanEqmrkZ`sx6Q{olgC03r3ZM&*|ilJ+macpg4DOUUpaqe{x<- zOt1{+GDW+{thPC@OBTfyu`@Pm)NK57)K$!;y?wd8YWCuC2Z6o3Y;jd>nczlMsQz;u zB7CvW>4Vz8Cn%yV^HpGGH63Rn^s14r_(2*1|J(nt0~f>MAG_ zQ(;~n-{N~Ru;4^`2RV4N#!WKb37WA}Y=*F17Ggo?EOl7xE~ahw9IqW6%t^ayj2g8S zOTdjvPMKHZfH!MHMRmOcTV7ZaznBJ#vUybvlBbghVMJ#63In;J0#K$3aDseMb}`Ri z1_Ztc@oQ?*XaCtr{`uzcPt1N-`SjU0tMw;#aThCgIW>%=fkLUME_XPDQ7l*GJcWaT z)65HUARkEet;YWc^NcnK&$p?32JdII%bte)RVMbDbONQf&$2oy>ZA0EsO7&Ndfk!Atn*TRH#wLL3CqdDwJJ{pCu-*i;Ni^C!@u9M0dc4;B?d@}*u~RqJp< z1ZuiePLb(s$`#`WIyiQ&DX()>VuV8ohdAoSp^W+!fn$_+>y%K%qf*<8EVwROpEZ_8 zjv`&kn76%k2v5!(gX8?&b6CRT%Mk*H1nT7RDMW9Xz>mUh_0CaJyiEG@RE+396BKWT zDZx=^;E&5oAMYQC%~MXz_=v_*UtK-YQje402G4lw9Y00Rb@Ig^$d9Y>9n!J{2l}|D ze|gukJfIp5M?7+gixc97VX~cJ9k7h1nNh_>^lg+H&5|J!a2ZC;CFUI!q{usD7svg%WE6ibE~`NZ*gX95Ml=%F=*Dl2bhW zL!2Wy6cLX%K05E5UQ{wrNu(3_>Dbz5q>p#Esi|6(l@B2sM2LUfKcHh^Q zm>U-CGv2Y8HNQ4!%q_3`yRCzJzGd8Tnc%|Em(&D4m={LBI_dYHBpReQDovv+-OTFQnizbKJukiBhwN?GKys~}ZFfHGFMaw8H zpY(qG-ppH(-Z7EhNF6^)$6xYwA(Kqm$yE5Gu*!r?r-RL zduhYc6|46epAEc6 z%x!$Sr$}$*mtzkV7QJb_yBP6x+iYK>W}x4tLp>h~YLEs=d*b{jXPN%_9L zU|-x;uYcvWnepp2{G5K1!ZM3ur*3d>KN^sCY{a-H`i7>N_ZeH}BYaSzU*c~qt8Z!m zUnTexC(eF%ord34Rx|Bp4L@EN{?gL->L&(6KIK9_8JV?vulZ`PabvRJC+qkFYd#wA z_ML9yiU%1xG3fVe%{w2oZoduwy9@uVo1#DIt;xT#CV%W-HSNFcjSH^4Z-ckIu8iq- z=h?mOE8W!;n3Lk=zv{VqW9FOaUq^(z(!cC6VRN$Ay}dsAhR=suChyE2f2uux-Gc}E z9{(irC)8JO;r~+|e^AFC((#9N{AW7;cvjfTk@qf~^8BrnS50?3I_p3`U3xnHppHMJ z;}7fj&vg6|9e*HRm!6J4sN)am_`^E>K!06)I{u)JKQKV&U&kNR@rQK$VIBXOjz6N~ z4=B3ybo@abe@Mq4*72X|_#-<0=pXQ3=-j{5@n7lquXX$}9siAvZ`bkP>iFY2{yQCi z)}E*L#r|+*#*MF){$iaPWk?IZWa#)`zRQ0o;CaK-{fFN%@Ap>?Q){hxTh|wTFvnVb z#qzA76OsUXXUN?jBA47e#uLt7FAhrI_3R70*i1T-r3;v;l)zG z>%VEt&YI`u?=?36B*r%b_uzHcf8PM?K-1Xm|pcwdg{jb`0+qRb<#C*|D zlz;i%GXtl;{H77VAMzk8y=c}wO;=sGYNOkD)gabd_}$oeMX7^U?K5qi@UDTDWs~`7?n}ejL=S z^KU+QnW;ompKVvJ%rDjQPd|B=mT%qWIIQJeKYfujUE_cM{4ZOBkGhRFUyJfRo$$6f zF6(`*d+XpGels-w*`8Sww7lzZ@FFeW{8+|aKK%OCN40!f)0J%}=b8&vfAsO@!Sk$- zw=K_&nW>3C-PxF-#bnAIgep;}R4L_Fj#Ey@*+`l_yfceC9sNa&?E-t+HFT-xH`7kkRRAb95XI-!CYc4N1cKgmk_tT{jH!r(pe%|vThn7w^ z_6Tck{^5!84XX=pJh*6YRyIY~+GZ@sFyd)e3v zwp8uA`5zBmu%YeivOa;g?=#-~fT*7XI=-aBp{FgfZD;@u}jz6a3ztQpSI{sT7e_Y3Zr{llZ@jvMJA9egs zI{t)?|5?ZXqT_$n@xST#lREx)9e+y4vtz#P;pO;HEhUlsrI2(9}99lub=PnmJ5V!-XlZ@$RyWA>oC zwS35tob_jE+(UKzuI+PfOx=X=MIwB9=BG0*{w+G^zPWXe#0~#s`vDdh5a|k;>Id__Q)N5BC)vT{wnR_EX*YdNI6105lUkk=-`LT=B&sE0m zGhX#J=Fj>}SM&DY(~gbsuFr3~<&vYLe?fnJPNbjy^opEsUUeI9c^C7~g@@zKZzmkt zqe-tuH{Y6v4UM0n*$*|BZA|*T+8cknZoV;|S2XtUntjIA_cC+KjCs?db$kyUKTyXH z((!|J{16?VpyS8r_!J#~wvJEL@#pCH<%JJ7R~&E~cfQBWw`LjRR_J(_Zhl>^%$uN^ss9q zzFFWlZg8{aA+N_i%C_9Txn>jgyQ{$)KHP86@qRkqU&ovO@qX~PgZ3F8_#XY?nU8Ns zU$B1GptyaW`pwYsE?s>!FFNa|urINGI)t0?dwT6W@X?BZ-VJ+=*ZQMB)xKeE)A0vB z*17A$>-gsPl-JKcf1h#v&pdxGyqGue>;VSM$B(e)eSUkN|5WGyppFlIb?&$4EVbos zyK>~~=jA-vr}^0#N4Abfd4CY)-KgVVZ~6W8p4W)_X#INU^UEh!|61(7&)8HZ%2)2% z7B^CpzIm*D__ev-{H)OVU#a6)>G-R3{M9=C8Xe!LG;(;{@~WMBd$ch z+$V2ubpNfQAkrM$yLe5^TgKb*B|p`t`RoI)ZpHZowXfHVf0_RJ_UGcBs9afi)1{B~ zXj-=P?!cf?3l1fE-Gg-ef#JISu8u#b;}7Zh!#e&m9e+f}AJy?uy8M`QR{y=r^`o7D-FBW{`k~^c`cogkn4aUbu$M;Rw z#h;<$O*;NU9iOSo&y~9IbMJi-xyu*rGu|WjQ+8eWEM0i>{llLix;!? zMPCij^!M|(o_PAw$hVA7Cc*uQ=O(SW=oMx6+iv6azmfme>y(eDe31Af#)k~FhwdW+ z4Z85IFT&=pnBX=(xgPR3cmC!<)2^=#9|Qgl!4KB)3vTT8b$-A;nr~E z#mDb6ZgYwK*N^KfV^_U=a_Y7Vn+~sD@>93B56ro2qai8#vE_yLJU#c)qnUYoa#y~- zf7$~Ne^<5O$9bPT&@0V8b<)PHmc@qaPu(~tcJ_|4V?F-5Fa55Wt?vx!pAfnCtViay z{P^CKb<=M-o>b87t^-G-FZG}F&6G7}|8MseI}GRFvG3_yPuw~A*_`F$o*Xt}4^Srw~bbtP=m%GAr!=ypNw>7E*Muh0MwGps+tX zNB({$yV!c$fN2{%TZvb?Lc7}$V(k$LU*+O zv!5W;0=2>l-WnVzdo7#aMNRx?@@4QZMjx=Ev_|KNOW9)wZQ+fIpO<%3fQ{9o7M#eFMYc=_a#qdT1Jyx2?5U0ZJ3j&b`tiWGR{ou7bskrse-X-LLyuJ0 zpPjbIQILNoPrruCpT_5M&uH-H}3wC6IM$TU^6lyIo0!D%1m7AAWj(cczF_CuCkZmY4s!}q26q4zyC~gp0!O zeB;IRn3QqKTs$LC=F;2B^13BSxHgF^*Zd+V9vUaA0_h@NZTVEMJRcdB1$d}JEOX7uEfHle4?I{n^VXoi_3)G{80UhE3azC>8>H};Z^Bg zidU#FG;pzzUc~bRJKXP2#O*;mc^NLR>QdiM;{Qbc)c-q#Q`CSHlo@!VTU4Uh@D8W0 z%0hL7cO>#10NvQ|5Oa1 zDy>e^RXh>=TLg9n`Ri0*^t^!U{gAhrNz+Cr>Lxmqo2r6Bv@_YdR7rQp&ji#w-ZxNs zP!Cfq6?}+=i^>Ug7<$ojA$Ag#H;suYA2*NqmBk;<>Hj2aX1-6IIB}$+m;UwWII*w{nF#}$rxd3 z@yw&jW=R~Qwj1dI;gy;i_3=4`sd=?V!`U!g#1;>=hsl_e@cx}%y7B&HQ#xdTMlGH% zO}z9Pf?~rH1H6WV8j^YZdN}f6!rOkR!N4#~4}SQ{hNe%?gvD*hRoc=UInutuFOt`( zie4}-@i+5$^@dd=y;!5%RoiT|B;+3oCsU=Esx1SB4vG@Uha`)7M7d}LQm-B-LgqD& z;pp4+(fX4;uv3p6@`wBHR?M?@E`CayVhxk``f)#62vU=4aRXk>H>F$W^FqNvZ_lv2 zND?4pMyE%-+WCUVE%TU&a)=nc<2SUCkmPkf)N*ne@tlhC7eYpI#;dks8JIBY?0Fhz z=oe8=>yBomR*NVgs*a0B=Bo>LwV}``@4(wDEX2fJa&I|AIXehYNpy;;6*Z_;$RPU~ z^>^HY$0H`i^L!2c(5tv%3f?C}7t0c%Q%HDCLMbsq^WMteE?IfQ6hgxP|3Y}FNo8Jn zwZp2UNzEMEc;pZ%<%Xq#(0IlBh>v22(|AM|LhqyZpBBt7Tn80Bb6BFbGq@L67t>~^ zTE1C>AZ*pP`AeXVq8e#p!$f{nf0*Yz9_)x4`!qfkj#4I35 zI8=QZYCPWdMe7_pNlz~Kc{HAQJi9d-KzLM8BV^%fop>n7g&LPfB5M4=PRpOeb%E%k zNT^rq$v0m<{;=`Dtm3H^QEhVg>O8-4>ERPgm8d;6pY-lUjP&}}Amrf9k7!-`^m+Yi zbTCUII8x!+0tEF=NlnA9jizvgt|JyN#wZ46Ik= zIGI(1$5{)|=h5$}zzGe$?aVVSV3fiF7z;NGo@DXG8=XA~&!|7t2PQDuqFVS&Y?Cf( zI^zAGcRi%qBOKnGi2)xK;fYU;jCv=ne^iZO-f*Z9TYX)Hbu`vUcz7m1s(Yr|-|T4A zc$Kbtphw+Q;RU65gbX*$xFY8jET3qG#&pOxqf#FHnLh%QoH`RfTD)TM~|D$N{B8hvaXJ)nlsZRpq&bnI(C$fTxYOlO4C3rGGY@ zD$mn|uMiu&j^_bqUYbtjq{iE6X*wy#Y5a#VRYwEXh1l=%2f%zGq?S*0=ksw#XH~zW zdWb@6K?-ljn?amKVKpnC40`h=wfRB8o!DZFpsE}*h3Y+zC(<(D>r=EPkzaMGs(QyH z&39+CJlC%;Y5w;~Qc3J^o;6(4F3-rnDyA;wfH9WT7f^J(7bqA|+9r&xoUTZ@qTukITr{pV&gr zgBmEDNO{huq!bddkai$ZOypeMDi1$d=*`5QWj@Xz>9Bxw5YAnq$amVlCwJcQ#;3eu zi$Tp(Q!SzjsZ5F!XOXnA!{XgkUW#+ZGViNjkpa2Aq4|REd?zSX;=l&aXXnwujZ&!^ zY|_D|I;aLZ=c%5Db9boT(rQALWHA4jkx`214->rg(u%MsM02BAKzJ6@9}@>B^yt@CQBiNNQs)0&M@O$Hapr4W>r&`ijk{+_BRptV`KW(yJU&Y;VXr``mAY-#ri(qDW4P)dwvkwB z3(2A3;PBsRbK;l_>UDAOr_L$V(rLWNTvAb81x+_%JS1Bh&#}kGqkN1bI4z>Dgb)rp z+Z@~}s>1!1THI8r#x14-e3M@TUj4}ah}0{g921MTYC85HT{z`@U+jt3A+|%Z8>{_T zhQkU~ZTB*yZ@fB3B<|~u@Up+F3H!S191*_OCd7>zTKW{qc$hbWVnI`i_Izyim)B1sKnGKJ^Ol7$6=m1 z{3p{pZ99{rg1&PuTnZP~^kQ>)+e!-{V+r8@MRf@9~K;8@ku(R=OUDP-_suwdgvc}&=<*{_G2B9oSY1cMD&Du^n_|AT0&wi zPO;QR0e8H|3_{#^Vd)>lg8ZTau)z$Z&pFAsg+UQ0<4iMyL)f{=$umrNt*Iznb!CXT z(u@yd4fY0nLg0f1vyc!#2>yuWpCFg(YS(fX67av;b@d8YOkf~Vxaz8_0vStAc9~p_ z@SQkpoN0y&;gN{R)QEseqN~w`Pz=dbR#t|D1UK02i|zIf@n_oVNSm=-FEI3V2X0T< zFbY`lH;Rt}{3egn-$ixVEK!kq|B;Q>Zm?HB@!$hg28f?q^x>}uua=Fxt|l~oHCR@c9WhOxROoM$l`xSG|Ucv ziRfeEucKQ>o2lq&r~6yQI{x|kU(URL26kqD+89A^#XKRa^t^Dn;q>g!|Qw10d2yYGMa@uw3% z|MKf^Cx1VM2Oa;n38L!>;EX1S|91KR+v)$G<^M+$bl2{Dg8pxpAHT!FH&D1jgu@!V zF_H`RlDxv=Vxi-WTNOhCw1#C_h4~q|1zH=?rHaNTpPkx0ECWB$VYg$~C$5^%Uah9w zf_)n7ola|wogZ7_dl32^0IQOzsQIX_np=nKYuHZ6t0L7)MunN^J6inQh^^L%Z>4z% zP3*&P3?^<6;i3|LCJ5h9K#d*!)Clg_(3cgsd@@Qc7v=Bl?qMU93~x3_Q(=B_ZXOaq z7WoO86US5d^#unGBJstorJht1ff@3qbzxi^ER)ZxR>%ZVc|2XauH} z*BG6=JY~m8AXOgjpmBNgUw*RHR#-=!xjeM#BvU#R8|BfPh(+cpp5F zQEl=BC|~FoUC6%--_BzfG#ZTupzs?%o_viNPvN}f<_CM|3l1Bq%))=nNcg25h;+tC zIawQU`HTO$5Tv8;spOB#sU9gye>M0z3;S*ys#vH+EYyY}|6R*R2BNS0yjkG`LU+*= zG+jU*-0)u(!cL!BP>~#jaFXr0?V&&p=s@TO^|kd566)gef8$Vq@+5P)cG@4TwWvv3 zZ4DGW%JPtZF4s=|m)Fg&C(jN~>B&FuZ~V(%>d@kjggR1DG&KBKdF#ec23J+o*&Mcc z(B)XgOPe`jghwuUVo)T3hM_Ox`&2d&7l7vD&|6%ps29KTgg2wADEVpAz_2iEtjXI1 zh1UjSxK7T0;>oHM&Ru}!q2$p|M%n6ydE7~LuQCgvju$bedVZx9UjN+OS0q5I4F$lzk;Ll1o?jEiz;47~BpugBNJB4Tq5{{(J4nkXI;N4US`VGJDUH8QMXGVv=G{l;ltHsPHCU<~ zUeVT++hxm9+u><5!{ZVCpwrA~+`Gz**?}pkoGyLJ-+A*!B&teF| z@C=`gB*K3qz?{Y17{g@Dhaa$v+Vnt#p9C5Rej*||pCZLawtwFCi7zX|giZ?lH) zX@Ind!C7?#hJ=Z8Rwl7MRPb#Q-4a_Rwn*F}@ivK#5|95Net)$gK*TdsV!A{{B9rKn z;Tj~i%kXx|S4*svXpv}^I9sAgVxGjQ60;CgG7_WWQidXj|Pcw?@Dw_+%54biA@q$No)LWU*yaEJW- z(H6^S!I<(H%K*^_KjMqMqqRpSJh26JO42uVK3}NbWHx_F9Sk_D7R`1(V*ra1iI9_TTBn!7}rT6aT801GJ!u&Zgd^=0f7h^Ltv&QiNb zQ|r$V7Qn*R2H6A60X*MP@mLFh_Vm}4nbODaANjZ=zft`$=YzO^T$>sQ8O0vzF65+! z(fUCc2Aw^wgj%HPkE`+-iv}`c) z7vRSNQt@52){f!_A2#R@@}%{HFs{M)-W9Yu8u9iFVmeVdT zQt}XtL7-g}E;@)stKpm>OzS4YdCJj_#ab{e(t03V-w@XKP&d>I(sUxt)DWh1=j}HI z?bqyQLbjP3;XVURq_BNLSRXYk9(!c~ zyD~M%5N8NBY<L1SfqmT7RAM0Nd%K9U{{wZ;7ecZiT4FLug0L2Ae_-XIc z*2`_^5zKm6db1v>y;u)J3=6l5b*KG2$Pg4BgEHj=v7AG3Y}o!-^u<0*>t=`yW|66V zStP=S*n`bMCZtC)aK^AcmL9B6Ni^$o+}KKTvSS^)1{BpBand;A4DzuvIKr7@e>X-q z?|Pw6_DYFvk7|o(4YzkQ83u>3!Ku+~@Y(_G@ojzGv8}!Bz05sLhPY4`x1v{jOk1=& zsx`vi-5hS}mMqH9TEf`7pf)N)zX;av`ykX!FpJqA!lF<&;m!yaV(E^tC7fyf8bbV7 z$Xe0Ilc7iJdQePH#1R?9A`w0e;R6v~>t-OgwcXl7?IGr1QxG2?+!rzSJ7^|_#nU+j z>Bk^^B*wEaq#an&ooW5>c2yVXR@<^N8^0k3YNYU#r|+Yf*3Qr)g!L$jZ0qjs)~Zd{ zJcqG|K-zFxJ3~|ui$b}hQ0}O;;dZK^eWO0|Ht1)CAVups*k_W7Hqo5l-YY6!}D6i@Mo`zj*kIV?lP| zuND4chXk`|OB{<%jb+h>UaXsRYlfScM?+ZKrC_l73Q^lD;?&ylIkL#lF6T;K=PmI6 zEoh<|25nqx$LA2pFf1j=Y~X#sz+!u#pWY+#mX0K2`}(s`Ln8A_7Iw)7*bPEmR|d0) zj9Ki-7?S7Uh)~_Uz^-D!RtLxL=t1ZSI-5O=*_2Kkq zVHR44;HE;KFpLWzj8%Og&ps*A-=qjOsUd)kt_*}b#tgKjK4>?6b_jRgCaz}e1<;{B zqK%OG6VM*XlldFaQ^eC;Cu>%57)?qBD zHNecrTGRpMfi*JL4`hlJc_8yh&_v>6!&vP10qEm_EE4q|W(h}`!?=HsAKtgR`NYHf z!`uKj^#?=0aLBSdWZ4a}MA#IKEGaBx$n&w9v2mbHlrGt0O~y2KhMpnlf1#`=>bocE zzGsRUgInO|7^scH(VEDTgtCudTKm`p%n7L@F&_+N;qI{35ZN~rDTDUwaej>(;ME<)V`GQ}Y+8XujQPtgWx4%fQzK9LgS4rujDj?L`J#@rUlk{ZL8*>VL6gx+Ct# z5%*(=`%%QbwL{#dKoNKPUD$tZKs}>xQd(qQ1R6p-jZgdYeeI$GSk(80EaXrD(}s;z z(1#5<%-i!s859hIv1OsG%y|KuVVTAXaWWYSf9e>(-A8s$7~qU%eJw`T8-1h4;E1(h z?ICSka_GF&PNyPoyj+!i;Aax+ZAf8J?GbIF9>x4j{_LpB*r8!8#xR0)Z|~L?>h|V{ z+|$XuD5gH6F^Y|EFtU`&Xf^^rK{muPlEtScv0e@%T8B4v3UdN!8c7`a7doge4MfEQ0&FJf9FzjS~u?^ zX=-EcebDpy7P>X1N9}1p_Cn5BAN$yWAuJm6LU)6a(O5<6a;ginjKj4b`@Fwn4KB+- z=33B)#8bHsg>!e09iMAsm^PeYSSaT8Kog;6py(n9{%I&V%vJVd$t-Pu(m~8j@S`q4>gCF z481~Fuacfv|HZIg$3>fo9pC+&5zannd%Y317wdJl@wm6;iFV(B^2QGDme3bYhgmv-$o=odzh@df`m(Lg=)uB)fEf9IM*Zm(6zeVO#^Mj$ByK!vonO_3<7JL z@Esv`v2KoJQScMBBiwF)+`A!eF=u1m?qtrU`bi#PV7o!4fwDfZzR}w8b$m$-+H4Qj zqrA@^n~lnw05xrv8FThVgHSF$VdIc}tx`qFC5lm}4%CWEWyxmc1*Go$m}{ZXi*Ymt<7j8|p&9w1Jhf#Q*v}yCK1pjQ*0}l9P(HRcaJLXLaq&`2)~aN{i|a{j7tXGq^)I<$43V0Hnr4<~mTHp`r|AUJ42zp2r)^ z-F@twAv_LGIP!;em_BZ0je(s9;_Gr=$6{TswU12*#rPK|&Y<|7!@E{(l4XxtYhYJ^ zHc_62g|K0Vn%RI|8*#>P59Y0haF*e9k5#a)Fx<<6+i{*^_cPHr)sAN8Z6h-~Z6htz zMyS2-$Jx-X7{)dj*mZYfj6|A-Zh@@Zr@{6hbD${zbuZQuSo@%#)A}bCYeKOe!r38s z&)CS%Ta2E0gX%GTvw>X+vJ8{*g)FspVhtQhYh*L|w`?)6Ye2V=e_Hc?k2NpWA3pY! z&i+u=4eJwz^+`M8AA>NvDGaqkogGhOZBQFpvRR&Cn2fZ(*@dyt*^R}bt;ZIL)%(_u z3^Z%7@3tD)_-*JrD~V%lC-~{$qgDyt7#RS0h%+JzV}PG6aNhwMuKI}&!+H?wK#arj zkX?L{SPQED?c32_9yYKH>0ihqf`#p%6CB8$=JaUBLJ23Mf5>zmeA>WX09}M|gkmi2 z-eD{@g!$1tm~6oJ22n5Jbdl5Fm}s)wevM9U-MzDhxKbL)~~Txzhd3j%H!FA zcqqQQpyW`#=MG~%vB&M1ihXyHu~p66#$5*NPYkRcd8-C;dDrcX`3bjQX9vanD2dH^BB*kMMP*m(4ZdjEqIJk_j`b{zjmlY@p#+3x5VB9CsRwOhLO;P;RBJU%NQ5im{9H3&;@rx1LzL z(D{Xt%h$)wt;YRp8`{hP1G`aeGt?I_?nNPNR7!ZOA=HnBrUWL3D&3i~E0!tPPbk<= zDA-RZSbsp`ke;_Kxj!|q4?)y^8x8|Q=}hifJ}2<=ZOl=9N`f)R<4idv#xBMc3+A3# zosKKJQDm`q2t_*zK|2aYI|^d4DLq?_e0&H+Ua`I^3iq^`5kEqvplxcIc;CVplhVy@ z?1%j|_Bs0VHdP)EoiMP+em1aI)v$bB7K(Kl)@SISy;FMF4dH$)9P1q;-*01mh_xYw zr`qZNJL(B^RE9qvW-BN}t>Yd67_V_olp@*zg?Z@|##oRVCJ-@A1gT*{LlAzlSH{@} zKQeCL!csT)NLR^G=J&nAJdcFtsd|RjW+=4kqtXHsBK^?~+ZCbC0^XA8}UU?LA ze2eG2*&c}gr8)0V%d!Z2r@f#{Wm&pfdyj)`#F&loS}U8Po}RvOINp!l-QOFRQGBuAiRvmMdagjwuKxEbqrTCd0U!~BbVLHFZmj~Mf4Z_nMGv_Hdnc^uAc zkBdFKIwtZnbmWX^mLiuzL9ijXPVnG@{{W035t9+^Hl-jBTl z+9_p*B$*+Y_PgsvJD%%p=dBY^m!P-dmynNb`|0};%oUI!=7}}~eOH+p#iDnJ@36!? zD$Xd>dOA15k7a;>Y+Z7tTGf9_U@yqutmh_K<2gmg&cC0(Do%T{&-x z{5~%0ISStmM6$>oSjW(r63o#UlcVdz+M48w>4e3O?4CWq8H4#i?C*MH;^anm204>t z!P|oo@NpzKFN?*@(G4ye-Tf(i(&cqxh*Ui*U#X{7_yD5q|XD zXEL8Ji!fit(0O45`c`-Jt#B5z7JC7*tMi$?l4D0un^RaU&RO`ki0<%Kal$0hYNoPq zKLbwdhp#nOAYZ-kog`$^3;F6*7u^=+7INY4sB0r1U%R6Y!ddSkIuY{Dk6$kJV^Pce zyz`!C?*ciidl&i+h}sO~kVttO)-5|Wv%_vQSv||LlOJAB*#DpnAs#nYGG+=N1vmPP zOYs*5{Quy1f7YkTk0~0v_hH9i*ErVeZ^HzCR=LiPZ8^tlcgIA3)_9X2tJK&vPV#3{ zVb|H`DT)`LS0$=`Mx86{vm};CoF{RS#MKh-l=y_iwAEFw^rbrwlF+}3=bdk=d5_e17F7XzL%OuW| zSR!$<#IX{SBq|c4B?d@5mL}7a_z#J%N_3Gs>GoZdr1tD_~UsZo;HbYiFMNbe#x(vc!k7Ti8CeU zNKBD9NMek{-!Qh&=a|HICGM8^gv2cpua@aQFT>B4yjs3d(qDgxVG>Ws{&rMigS5X^ zqDi6}&rg2zfTcR8&T3^-4LSTepuF3cf!l;E6K@u*Q=xFM+REPbhnAJ>MR?PIb9aNh zDaaqn;O>Hdkrf)1q-#PzakUk5a*k)8&teH^e#p)^CbfFzP8}|@jraWbPpB_yw zudAZRZW*l5pZ^L0bO-SZk9cB-0^yTzahcKD+Qx>>$I*w(Q zBZ_LD5KIYxbbPH?B-xelM>!^`Z=2;CNZ9I=qtkex2wZJPLm6Jvt|igAU$yjoNYe$;~U&#nki zMOV2#@@jF+(lIt)?D?MT$oEr5qglUGuZqtN|lY}>^0O<@Y+kw zLrOr2s-aj~{gu}v9`a@4J*l+Y-XZt77RIjfn^J9?TV9<}jb~77wd8nXW*1}^6=dh( zPO612|DWYoWS!3&^99x=tdcn1B&L^F*ITn2P^OHm>Cic;`p;lm%|Cdj0A8!n2W=8I zq8;brx_ zE$9=_^UiK$i=k;Mm(*VJ9$jK>aAvSur7fwpi9-7a1E zn1~TZ%15wltIA7d_G+$glc9XAH>tjnBm4vqWawb)q)&|%n~__PpU)fn%?6A*_4ceP zst?&wRdr!#_tXJco$5!(8+{or_+62@CDf{*u7Al4R^7pmr(I@QozP2&UNcGclSR*O zY)jPS=GpQP8)FMpcTYN=I5J4*82X*+gH(E{!7Ucd-U&kFTL`-dQr;83s*GadOJM_$Y5i<M9tV=$PR-8UQ<{zp{D@D z5Br&Ns-5l7-U4}zs2TeQ>b(LoGTEy5%={F+8`1D-R1b(m)WiA2@d|1uDbYIzxq6vI zE}|OQUA!Izb00UuujZu$V|Q~~G4|uzJ}7=5K9LSN(Y%iO`ujXQ}!k!9LNl^-$S|k*FQ}a$RqA0HxD$h7ObI6HArg| z;>F#u^uHospCKPdfH1dy0XvxUAd`ilt3mgGc7i?z{R--v?axv`MW9O1D$qvI3!pba zAAyd8y5;z@1kkylsi2vlg`mqpH-qj6?F796It=;|WSrv927tzZNmwoqs&D+v=SB_pizt z#-{RV%T%6$ANDCjgUeWi*_5^_Vtg+~<8?qau!@jX=D4w@YUnqCFZz8R?4wja=y-h0#-63tsZNk^oKfy5w^vby#XK#4 zL_q8sJ8>_<0N`Vt!_^F9$w}&EOKlmMOj8?1T4@5&yhXM=u*Tl|(|j^EQL0RPJ#D6a?6jeH(TlKf_B28tuYCU? zax3EFD;K?AxeJ#eB}aP*vXMm)!pVi6=!O!ThS7MT=`Yt(V)GOle#zN8@^g-U`U!f8 ziao!3MqV5ud*YR%@Fr~Nr*Y_a4d6*EhmHD4_{ zzFqY{T!eE;Y?TPb5j?(Ri7tt)67hbJyPG98NoMen zjV`KMyq8xS;JddA{S56jBA(VNfo&4;_KT;d`X_WX9!}@H{fNNyPbB{iM_1$DCH^4o zf07tXD?BW;_DcS*99@mC2)^|tf$1*@WLTG-|B&&kgnh3IEfSk0u9Mg(u|Z;` zME9ej{n&eoevCVLKJ7`Y@S|}4iuxM2{?hu}7;}KskFvtIy{f!H1Qgz)RNq}A$weEa zYoEe}{PV{0M;`y@{yz!)PXb*^AmyG)q9G|9?kXH_^ux_Medi z$-Ngyoo{IFCNr)g;v7cI<1~KxsH(-@{3rHP#wdWspF9z$&Ef#KP2a75as_2mLBl+@A^b_`4K57U4H&u zIr#6!)3vg5k*}_mZU1-k{qIb@%O)V3VwX)o`FG~x|21*_f4oVU=ZO7{!7qS@C$V4c4*xIzU09_{eEbakXGs4~ z!2jNR4&4*S4&QV1o{PJV|B8(~#D&;+Uikhc?<=hA{RQu*boBrByC1jVjrN!;M9uUhj5;aMZ594oWVzM2 zRbFkEOosQ9^+a>4_M`HZ{vtl!h~Z(JHoN1sna zgeZqoqFrLO#7c=4iDrp2C7L8ol{ijfqQrg@qa=n)43QWhkxBfmyU5Q8iQh|Xm-v;$ zqY@8EY?Jt|#N85~mH3!MHU6!V-z4!)iA@q4B{oQ`lxUVXTcSzgIEjf8L$Lr?`veJG z?JxNH*yocj``w`{M7jU3c%}TP{h9JWX?pTP`TFhDDO#t~`ZgVO3XQ@AT#hl6`UCYr z1#~5d##Q>L=)!`W;%fg^tanYtCE)(`k16Z_7Cx#{$ju~?@~X{^p7*#l`=xu#y92%E zUqU?Q^gF{nX4A`&9`lgzqgAu(mfL!%X64!EV}&{3h1dG7NhR~fulKy!_ocTB(v|iN zkK0FV+4jm^Rq5_ICle0GttpKCa%K9Zx4d(6W<=oi!yn#|{__jXSzj-YzG3-_r_*1U z`1kwwp2{82@Y37qwpZI$f9`s1%Fdg%WITJ-!qQ>mum8#3wrujVAFcWL=evIW@`?v9 z%-s0dqJw*m4;gTHs3Vo%;Nb!yK2?HiTW zlKWPlTfXn)b+fK}H(}0Se*R$ogEyb}ZrBU=?4I+Ht2Xbo^|vb5`W2aXiJzwZ+n&Ge z5uabvE}azi&b@Z}??l=x%Xyy^UVm$C^vWO7UVb~t8vE(Y-cRoPHq9M5c-54?Q?|ac z`B+-|{ZCX?KOFenxmSOgcJ`!aCtr5>@9SRp$C0#`PM&n`h z*WLWtYiVnD6`xn1^|zSk?|3-vZ&Gu${_D|K`)@eXIBUj@6JIc`9Mq@a0_)t9D{pu> zXx-(;LnA-F`^~p@2Yht@yL{@S_Dplkd7xP!njdZjJr3Fr`VM472Zd@6RsgD@&Wev3 z4p(dVUVAa{7SLm$w?W52QSdt&ln<(w;b86i!GwD)XiJj6kFHtLL;D42D|FEk(q{TL zmshXYIgZOyFCfTT`otmh{m+4*CuL30py5 z!K~FoOZsS^0V#OrO$hZiEDC0=zFE>c+XoZ;Y}gaxyGxb_vsQO3>6jgbNq-&e3CDs~ z!Hn-SJvwAbm+XsJ2)JQS_!_7cW~~lb(iOV~6a!tZgtveKVAkq|CH=5ZfwEvvi0?vK zD$Mj{i>e2fa4Dz(_Jk`zl`!M`Q5L2MJ*$LkL0e!?cn9b<@&gPSD0ICN)`C8SJ>eqI z9++LgJ3*wUgzylkPqaVB&tVRMxgDtLbS1nIG!gcMw}X;k#`mlq9j>>)d>CYhJ>l0N zGt63@tfaSfEocku3GV>i2D4W8D(Prl25N&n;Z-0v%vv3*q>J^UVK_5Fn;|R*g~Lo= zQmMLD2@63pVNVDZcx)>9!9*DgA|0g)umMyJ`(|M6Xz(yMCF47=G13pPDFr&ZU{814 zt_D$CrMqnBfyhjE+7?PP-EDh7n%jZrPry2q`~c^k2l>OS)vroASR*E3u7y1z{Wd@w z%ycg<^?bBf=r+~rRVDqZ&w;XFPxvY*6=u3W7oR5jlzNYj%1HO=HiF1Z_v*ftW|od7 z2crBdz%*%22b!gsuu+|@nin>F&Ou!dFl>b(sk}J%vX^g!BqA|pD0s4mtDrZPmKuZzo zi_E|$u=F6aR{tyMj2$)|<09+{M}juNtkw5QI$>YD2y1xQ6TS&L3bR(9E9riHe-`B5 z)1PD5Z0HMwS*yd9^t-+Sa>AaFe*eJ&vsPa#>2eLY1mh~~3D<+}gt-~muMA}#iM#=` zKqOl;@HY^ZJ<1GSuplzG0&V3OQxMh;+zKN9O%>1)XTiAF5AgsCL8RY^@F`Fm%!Io^ zZkXLbRqrd|Lsb~ldiisF0_Fgi@!daLw?NdFR+lU3cs*w!#sT;toDMR>Ot=XLzj-jz zJodK;)k-V(d|nnc@UG77Mcr_*?_p57`4N zmtZ`C*$(V;8O9cv72wLHC_Btez;l-g`*h&8%Q61Lz6Drv1>^v;8F&+j(rp87Uykv! z59%FgU4gM3W;<~FO0+AO(}6od)Hhp!ORq*;ux|#c`cw%&0g0n`9LY_(U%D(PBX4Qhft;bxEv<`$r;PnGcQ>(NhOPxu+=DVW=V zs=idh=Rx6d{u~2uKwpKQD4-cc{ghDEn@V_56UGquC$xfwz-$K&ycK1ES*zca^q)Qt z+C=dKUjwa!*$qs&3weWCtB+Kx$CUJ$9sou4_2(FIH)9ND!poX52O+ErxZoa)y|8Zq z8gQoA0CN2Rr%{>Jnp4JFxK?>_cI0 z0=9!_ENXcUen2FXmgmuTT19_x0q>XQ7GSRzAv^e2fG>b}p8_6{X085Dt&ULAA^LaF zYJ?^H3A7Am!jZ3{Kf|01oCl(IqSYBnx(CwvfO zfjN0U#tIPSL95eKs|S>Hf4=e|vIzf#2S883OvpZhJYgn$`(yN}{umR0Ep5U~_%(>) zZwKx@fcl0XH}FRg$&G!A`T>!d@F@`aZv|d^P|ROV!1P1H-V7Y{8TK!TCmGlbBL9TD zKvchU@7{Ps#Hj$&KxCf|%=#Sd2VvGy(U4$bTDf?lBQh6L9o5 z!ki3D2k|(8iQi$)qWl0Gf55sF<|bh8A7vhZO(615`0-C@1Mt%ZyzpnSCfDi_B^{$< zPNI(ChmiDxz6-NfPbldUofKqXLk9SBoDXvh%y!_5!3MDw0;>8#3D1L$ol5v2{44ah zl)y}QK$;1Mgb91X`O-|dLz)RsN;6?zH{oBacT}r$RI6K*^p5@x+KO}uvw9lXoiG!Y zfL6mySPNPPGwyV;kprRoLV;|78$gLLyMgBof=&>awR%5EALu^ND%cZ}-cTpZTK%D< zNAxOC9_$HMgUC-4@H@~}nAs5MUjvcZ1yuEd5{^hPuyZX2J&0W8@z=Zzy!a z!E6V9016q1x&}Ij8Tfk41stAe;PYcL@G%gr(^|=HxTw2y;4{+P3QQaU-5rQWs~dDT z>?)EF2KIzYKuIub^?;I&&?6ux>-%==*`JOOHjnee2vXJ-bvWcQzT)?H1@ZJY;x_}RXD4rJJ_aKUg zoo`?tWk5dgqt*XOx?18EdQNpz8C?o6%n?UI>6She+VZaPwPZ$PDhMy>4 z>P+a;gE<`-aFJ*OF5vGVk_nq-U_~G@HvzwuW_B_94QLg@wg8vU7W!9PfJ^5Hdl&H8 zON6-<*sn~KMFB3fLx&^6+JSF?sElr)s*jZLXV4z_A&jm=TrexZG6&Lv*$jLbM0wNd z5Y_4!C0(QOS75A2@aK5RYUBfE!bVUy%vxQdTAiV!Pn2Dce8LZ51gH^a!gx>v%nDG| zAF9Q-N$M^avSq zyS8yy$J~*2ZkJL|>L#;=;fhpsl(eK;(ppVg%%~=#Wz2$VHB%WDV&g78pHFue>Q((C zz&2dAQMam4fJ&IH(_GXIBW);19SdC;e4d1-mBv$Bn~5B+umxoNjvIih>^x z!yk(0{gDnwOwKd?)Zt*!uWy`!mc{ubUWVti3y<0yrXQAf%}az3S|)M+GhJPWsY{#;`42$Gx} z9G_&|v=yF0%R`Hlb8zP|#)D77N0H3yFx*@A+os@;k@TO3?>6JJ@aAXzoDh5j&95^o zHN6eDA7{+;-v{?2>A&w6Ey~Z3j7^7UQI;Ix@Gt$iaO79?NjwGbe$Jm)5Bx5w5Fdx@ zo~MQ?UU&$}`+DKv3w~TU_-kGZ$Pq5B`27dr`jec0;@$89lKRIN;WNMCEOE`(VfaPz z@xtMknq!0GFLO?a3r`|BKQF<%f9t}6g-OFV*J80NUlF;;i^|zU-DPO9p~v2 zpM*~#*^4}MUu#jcRh%Vw@9V4~J`P_&gZT4sXPq4Gk1=){ybds zH?E1dvPbaeNXA))Kf1)d4)Hu}eaDXrA4d`5S-A9{z7N6*iW3*UjpVUr;L3M>zZ!0C z`aXCBrOD61(`bIp;df?ze+XW8nX^Jp2mAq&J`cki=U5-&%i->SOAUI~2fmDC?p65k z`&_e#AA-t%{62*pNcs_OSNL5zoV`By6D0AU!q2q$UV{TDLe3z393}8sXd-zm;hRX> zHsIT;s-(%8fr}UUIRW^Bc;Z!f8A*PnRaG`GR+TB@J#Y-kx#9yJ$|iJ9;_wFQ@XEd{ zgI!1-cOA^2OXLWjX~uQYfh0lLVRpw}0f%kvfkN3hmsLi>K z$BMv9D2^A7-=xmp%L(6G&RB`h!AsQN%t;PhzQP}y@F~roZ|!rc(%J5hCk%_ILcR?r zKCdcuya^X~s7eDLfOp)i&Y$N9TzreF%t{=-kCyR#Q9`P6e5I;%;7`D}kenZ3$12~i zhOeU-@xZOB@;xN?qFFe*T2*?93$-==n1$_YRV7Kh1Ad{?_YJr`%zU{%^ugP^)cL>9 ziNH^MkvRE5$Y=6-FT(R3&fKOdNAbe`+g0TdZHM8rNXBpizSs0~@S!jH`#ua?sNE@Z zX@y^oaL(}Euz}9ug~RKc`S1qnZeAoFhhwO%lj|Y;2h#AD;Efv?Gk!VTiRAobVD2u~ zfw<5_a`uD|MEyDT!q=L<4jibu#JuE9~% ziywpk%CP46Ie62f)U?D$;S(ss+;u25%PXv*@Var%3HK^ew_NIyix*1Gaq&W_Bc3H+ zD0RCfE|eP6;)PP1S-encEsGaQ4P^1cmdAWAb&#djvBZT^r&zpjThmLuVX65maiP@Y z6)%)pwc>?RcUHzGl)ADK7fNkd@j|KhDmg-_xh-B8ZF=P+eznfG=N<*3%$4r0#JQsK znYRze<#SOnewL^#lDApPMZba4-9I|Y?=c?!ww4|l-aERX{lNacca9DW?HcJHT{E(0 zVE?|+eY?lj4D1`Zvww7C?ZK{gjdDVJc2jk!`M>Qqw0Eryw{KkfaZT$U+s`jTmjC4c zKlXN;-;S1}y9N$OA-VZ}G`_m$3*}MgWso`x2dRPb&0V8cf4K0+ThcU@!a&<7wJ@v= z%by$C`$zBDdvM=FyY{zh2li|l7@)l0hW6e4!=t;}H+FYk?fZj`ulBzn<3o?$-T8sB zc6VN#G|js^udL@rszhz->AB~=t%*d_e3b8{X6!QduWC-4HFL(CHTh;v+FYoD|?UlVL zui{m`X|Lwhy@ogA&3ejYU@|z_HmSsU56CQ9Y)|^@N_(hxC-5 z)-!rm&*^zx*KNJ5Pw5rCs!!`Ry{JI8DS%0M2(mcHxfqD7&1~u z+Q=ALBWL6d-LQ?aF=bSYsxfWUjJnY}{xFq7txnKIL6 z#w@eu89Qg|wr!W~DZ64%N8Y-nq=~AYYE#*r2l3mK#d0RH++Sj!exV8fS H&lUJDq~lrz diff --git a/Output/x86/PortAudio.dll b/Output/x86/PortAudio.dll index 616177439e3e8f0a3230897173cd0fbb1431f141..7f21da7041f10838f62704480306407e3741f2e1 100644 GIT binary patch literal 205824 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ⅇ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 Date: Sun, 16 Mar 2014 10:44:40 +0100 Subject: [PATCH 010/116] Split CSound and CRecord --- Vocaluxe/Base/CConfig.cs | 8 +- Vocaluxe/Base/CGame.cs | 8 +- Vocaluxe/Base/CGraphics.cs | 8 +- Vocaluxe/Base/CMain.cs | 2 +- Vocaluxe/Base/CRecord.cs | 115 +++++++++++++++++++++++ Vocaluxe/Base/CSound.cs | 111 ---------------------- Vocaluxe/Lib/Sound/Record/CDelayTest.cs | 2 +- Vocaluxe/Program.cs | 4 +- Vocaluxe/Screens/CScreenNames.cs | 8 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 18 ++-- Vocaluxe/Screens/CScreenSing.cs | 4 +- Vocaluxe/Vocaluxe.csproj | 1 + 12 files changed, 147 insertions(+), 142 deletions(-) create mode 100644 Vocaluxe/Base/CRecord.cs diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 8afa3d64..33f51fac 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -627,7 +627,7 @@ namespace Vocaluxe.Base /// public static bool IsMicConfig() { - ReadOnlyCollection devices = CSound.RecordGetDevices(); + ReadOnlyCollection devices = CRecord.RecordGetDevices(); if (devices == null) return false; @@ -641,7 +641,7 @@ namespace Vocaluxe.Base /// public static bool IsMicConfig(int player) { - ReadOnlyCollection devices = CSound.RecordGetDevices(); + ReadOnlyCollection devices = CRecord.RecordGetDevices(); if (devices == null) return false; @@ -667,8 +667,8 @@ namespace Vocaluxe.Base public static bool AutoAssignMics() { //Look for (usb-)mic - //SRecordDevice[] Devices = new SRecordDevice[CSound.RecordGetDevices().Length]; - ReadOnlyCollection devices = CSound.RecordGetDevices(); + //SRecordDevice[] Devices = new SRecordDevice[CRecord.RecordGetDevices().Length]; + ReadOnlyCollection devices = CRecord.RecordGetDevices(); if (devices == null) return false; diff --git a/Vocaluxe/Base/CGame.cs b/Vocaluxe/Base/CGame.cs index 176fd0a6..27c77ecb 100644 --- a/Vocaluxe/Base/CGame.cs +++ b/Vocaluxe/Base/CGame.cs @@ -225,7 +225,7 @@ namespace Vocaluxe.Base MidRecordedBeat = -0.5f + GetBeatFromTime(time, song.BPM, song.Gap + CConfig.MicDelay / 1000f); for (int p = 0; p < _NumPlayer; p++) - CSound.AnalyzeBuffer(p); + CRecord.AnalyzeBuffer(p); if (_LastEvalBeat >= RecordedBeat) return; @@ -271,14 +271,14 @@ namespace Vocaluxe.Base if (line == lines.Length - 1 && beat == lines[line].LastNoteBeat) Players[p].SongFinished = true; - if (notes[note].PointsForBeat > 0 && (CSound.RecordToneValid(p) + if (notes[note].PointsForBeat > 0 && (CRecord.RecordToneValid(p) #if DEBUG_HIT || true #endif )) { int tone = notes[note].Tone; - int tonePlayer = CSound.RecordGetTone(p); + int tonePlayer = CRecord.RecordGetTone(p); while (tonePlayer - tone > 6) tonePlayer -= 12; @@ -296,7 +296,7 @@ namespace Vocaluxe.Base if (hit) { // valid - //CSound.RecordSetTone(p, Tone); + //CRecord.RecordSetTone(p, Tone); double points = (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[note].PointsForBeat / song.Notes.GetVoice(Players[p].VoiceNr).Points; if (notes[note].Type == ENoteType.Golden) diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 0966424a..d5e50d25 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -616,10 +616,10 @@ namespace Vocaluxe.Base if (CConfig.DebugLevel >= EDebugLevel.TR_CONFIG_LEVEL2) { - debugOutput.Add(CSound.RecordGetToneAbs(0).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P1: 00")); - debugOutput.Add(CSound.RecordGetMaxVolume(0).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P1: 0.000")); - debugOutput.Add(CSound.RecordGetToneAbs(1).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P2: 00")); - debugOutput.Add(CSound.RecordGetMaxVolume(1).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P2: 0.000")); + debugOutput.Add(CRecord.RecordGetToneAbs(0).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P1: 00")); + debugOutput.Add(CRecord.RecordGetMaxVolume(0).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P1: 0.000")); + debugOutput.Add(CRecord.RecordGetToneAbs(1).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P2: 00")); + debugOutput.Add(CRecord.RecordGetMaxVolume(1).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P2: 0.000")); if (CConfig.DebugLevel >= EDebugLevel.TR_CONFIG_LEVEL3) { diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index e0f02c3d..70798269 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -626,7 +626,7 @@ namespace Vocaluxe.Base { public int GetToneAbs(int playerNr) { - return CSound.RecordGetToneAbs(playerNr); + return CRecord.RecordGetToneAbs(playerNr); } } diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs new file mode 100644 index 00000000..5493fd58 --- /dev/null +++ b/Vocaluxe/Base/CRecord.cs @@ -0,0 +1,115 @@ +using System.Collections.ObjectModel; +using Vocaluxe.Lib.Sound.Record; +using Vocaluxe.Lib.Sound.Record.DirectSound; +using Vocaluxe.Lib.Sound.Record.PortAudio; +using VocaluxeLib; + +namespace Vocaluxe.Base +{ + class CRecord + { + private static IRecord _Record; + + public static void RecordInit() + { + switch (CConfig.RecordLib) + { +#if WIN + case ERecordLib.DirectSound: + _Record = new CDirectSoundRecord(); + break; +#endif + + // case ERecordLib.PortAudio: + default: + _Record = new CPortAudioRecord(); + break; + } + } + + public static void RecordCloseAll() + { + _Record.CloseAll(); + } + + public static bool RecordStart() + { + return _Record.Start(); + } + + public static bool RecordStop() + { + return _Record.Stop(); + } + + public static void AnalyzeBuffer(int player) + { + _Record.AnalyzeBuffer(player); + } + + public static int RecordGetToneAbs(int player) + { + return _Record.GetToneAbs(player); + } + + public static int RecordGetTone(int player) + { + return _Record.GetTone(player); + } + + public static void RecordSetTone(int player, int tone) + { + _Record.SetTone(player, tone); + } + + public static bool RecordToneValid(int player) + { + return _Record.ToneValid(player); + } + + public static float RecordGetMaxVolume(int player) + { + return _Record.GetMaxVolume(player); + } + + public static int NumHalfTones(int player) + { + return _Record.NumHalfTones(player); + } + + public static float[] ToneWeigth(int player) + { + return _Record.ToneWeigth(player); + } + + public static ReadOnlyCollection RecordGetDevices() + { + ReadOnlyCollection devices = _Record.RecordDevices(); + + if (devices != null) + { + foreach (CRecordDevice device in devices) + { + device.PlayerChannel1 = _GetPlayerFromMicConfig(device.Name, device.Driver, 1); + device.PlayerChannel2 = _GetPlayerFromMicConfig(device.Name, device.Driver, 2); + } + return devices; + } + + return null; + } + + private static int _GetPlayerFromMicConfig(string device, string devicedriver, int channel) + { + for (int p = 0; p < CSettings.MaxNumPlayer; p++) + { + if (CConfig.MicConfig[p].Channel != 0 && + CConfig.MicConfig[p].DeviceName == device && + CConfig.MicConfig[p].DeviceDriver == devicedriver && + CConfig.MicConfig[p].Channel == channel) + return p + 1; + } + return 0; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index 662bb8f0..156a5fcc 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -16,17 +16,12 @@ #endregion using System; -using System.Collections.ObjectModel; using System.IO; -using Vocaluxe.Lib.Sound; using Vocaluxe.Lib.Sound.Playback; using Vocaluxe.Lib.Sound.Playback.Gstreamer; using Vocaluxe.Lib.Sound.Playback.GstreamerSharp; using Vocaluxe.Lib.Sound.Playback.OpenAL; using Vocaluxe.Lib.Sound.Playback.PortAudio; -using Vocaluxe.Lib.Sound.Record; -using Vocaluxe.Lib.Sound.Record.DirectSound; -using Vocaluxe.Lib.Sound.Record.PortAudio; using VocaluxeLib; namespace Vocaluxe.Base @@ -211,111 +206,5 @@ namespace Vocaluxe.Base return stream; } #endregion Sounds - - #region Record - private static IRecord _Record; - - public static void RecordInit() - { - switch (CConfig.RecordLib) - { -#if WIN - case ERecordLib.DirectSound: - _Record = new CDirectSoundRecord(); - break; -#endif - - // case ERecordLib.PortAudio: - default: - _Record = new CPortAudioRecord(); - break; - } - } - - public static void RecordCloseAll() - { - _Record.CloseAll(); - } - - public static bool RecordStart() - { - return _Record.Start(); - } - - public static bool RecordStop() - { - return _Record.Stop(); - } - - public static void AnalyzeBuffer(int player) - { - _Record.AnalyzeBuffer(player); - } - - public static int RecordGetToneAbs(int player) - { - return _Record.GetToneAbs(player); - } - - public static int RecordGetTone(int player) - { - return _Record.GetTone(player); - } - - public static void RecordSetTone(int player, int tone) - { - _Record.SetTone(player, tone); - } - - public static bool RecordToneValid(int player) - { - return _Record.ToneValid(player); - } - - public static float RecordGetMaxVolume(int player) - { - return _Record.GetMaxVolume(player); - } - - public static int NumHalfTones(int player) - { - return _Record.NumHalfTones(player); - } - - public static float[] ToneWeigth(int player) - { - return _Record.ToneWeigth(player); - } - - public static ReadOnlyCollection RecordGetDevices() - { - ReadOnlyCollection devices = _Record.RecordDevices(); - - if (devices != null) - { - foreach (CRecordDevice device in devices) - { - device.PlayerChannel1 = _GetPlayerFromMicConfig(device.Name, device.Driver, 1); - device.PlayerChannel2 = _GetPlayerFromMicConfig(device.Name, device.Driver, 2); - } - return devices; - } - - return null; - } - - private static int _GetPlayerFromMicConfig(string device, string devicedriver, int channel) - { - for (int p = 0; p < CSettings.MaxNumPlayer; p++) - { - if (CConfig.MicConfig[p].Channel != 0 && - CConfig.MicConfig[p].DeviceName == device && - CConfig.MicConfig[p].DeviceDriver == devicedriver && - CConfig.MicConfig[p].Channel == channel) - return p + 1; - } - return 0; - } - #endregion Record } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs index d8c07b5e..711484d3 100644 --- a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs +++ b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs @@ -82,7 +82,7 @@ namespace Vocaluxe.Lib.Sound.Record { if (_DelaysChannel[i].Channel < 0 || _DelaysChannel[i].Finished) continue; - if (CSound.RecordGetMaxVolume(_DelaysChannel[i].Channel) > 0.1f && CSound.RecordGetTone(_DelaysChannel[i].Channel) == 9) + if (CRecord.RecordGetMaxVolume(_DelaysChannel[i].Channel) > 0.1f && CRecord.RecordGetTone(_DelaysChannel[i].Channel) == 9) { Delays[i] = (int)_Timer.ElapsedMilliseconds; _DelaysChannel[i].Finished = true; diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 1cb6d368..526cf20a 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -126,7 +126,7 @@ namespace Vocaluxe // Init Record CLog.StartBenchmark(0, "Init Record"); - CSound.RecordInit(); + CRecord.RecordInit(); CLog.StopBenchmark(0, "Init Record"); Application.DoEvents(); @@ -243,7 +243,7 @@ namespace Vocaluxe { CVocaluxeServer.Close(); CController.Close(); - CSound.RecordCloseAll(); + CRecord.RecordCloseAll(); CSound.CloseAllStreams(); CVideo.CloseAll(); CDraw.Unload(); diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index be65f5cc..dc5165ce 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -546,8 +546,8 @@ namespace Vocaluxe.Screens for (int i = 1; i <= CGame.NumPlayer; i++) { - CSound.AnalyzeBuffer(i - 1); - _Equalizers["EqualizerPlayer" + i].Update(CSound.ToneWeigth(i - 1)); + CRecord.AnalyzeBuffer(i - 1); + _Equalizers["EqualizerPlayer" + i].Update(CRecord.ToneWeigth(i - 1)); } return true; } @@ -555,7 +555,7 @@ namespace Vocaluxe.Screens public override void OnShow() { base.OnShow(); - CSound.RecordStart(); + CRecord.RecordStart(); _NameSelections[_NameSelection].Init(); _LoadProfiles(); @@ -565,7 +565,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CSound.RecordStop(); + CRecord.RecordStop(); } public override bool Draw() diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 8a1e3c97..7eead339 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -213,7 +213,7 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { for (int i = 0; i < CSettings.MaxNumPlayer; i++) - CSound.AnalyzeBuffer(i); + CRecord.AnalyzeBuffer(i); if (_DelayTest.Running) { @@ -228,8 +228,8 @@ namespace Vocaluxe.Screens int player = _SelectSlides[_SelectSlideRecordChannel1].Selection; if (player > 0) { - _ChannelEnergy[0] = CSound.RecordGetMaxVolume(player - 1); - _Equalizers[_EqualizerChannel1].Update(CSound.ToneWeigth(player - 1)); + _ChannelEnergy[0] = CRecord.RecordGetMaxVolume(player - 1); + _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player - 1)); } else _Equalizers[_EqualizerChannel1].Reset(); @@ -238,8 +238,8 @@ namespace Vocaluxe.Screens player = _SelectSlides[_SelectSlideRecordChannel2].Selection; if (player > 0) { - _ChannelEnergy[1] = CSound.RecordGetMaxVolume(player - 1); - _Equalizers[_EqualizerChannel2].Update(CSound.ToneWeigth(player - 1)); + _ChannelEnergy[1] = CRecord.RecordGetMaxVolume(player - 1); + _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player - 1)); } else _Equalizers[_EqualizerChannel2].Reset(); @@ -266,7 +266,7 @@ namespace Vocaluxe.Screens _DeviceNr = -1; - _Devices = CSound.RecordGetDevices(); + _Devices = CRecord.RecordGetDevices(); if (_Devices != null) { _DeviceNr = 0; @@ -337,7 +337,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CSound.RecordStop(); + CRecord.RecordStop(); _DelayTest.Reset(); CBackgroundMusic.Disabled = false; @@ -363,7 +363,7 @@ namespace Vocaluxe.Screens if (_Devices == null) return; - CSound.RecordStop(); + CRecord.RecordStop(); _SetMicConfig(); if (_CheckMicConfig()) @@ -389,7 +389,7 @@ namespace Vocaluxe.Screens } CConfig.SaveConfig(); } - CSound.RecordStart(); + CRecord.RecordStart(); } private void _SetPlayerColors() diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 4eb21fbd..20fff366 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -556,7 +556,7 @@ namespace Vocaluxe.Screens { if (_CurrentStream > -1) CSound.FadeAndClose(_CurrentStream, 0f, 0.5f); - CSound.RecordStop(); + CRecord.RecordStop(); if (_CurrentVideo != -1) { CVideo.Close(_CurrentVideo); @@ -738,7 +738,7 @@ namespace Vocaluxe.Screens { _PrepareTimeLine(); CSound.Play(_CurrentStream); - CSound.RecordStart(); + CRecord.RecordStart(); if (_Webcam) CWebcam.Start(); } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index d89cca3f..111f9a7e 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -216,6 +216,7 @@ + From 12ba762cb9f1afca8f1fc80031b69bae5344a906 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 11:25:48 +0100 Subject: [PATCH 011/116] Rename CRecord methods (remove prefix) Document IRecord --- Vocaluxe/Base/CConfig.cs | 7 +- Vocaluxe/Base/CGame.cs | 4 +- Vocaluxe/Base/CGraphics.cs | 8 +-- Vocaluxe/Base/CMain.cs | 2 +- Vocaluxe/Base/CRecord.cs | 24 +++---- Vocaluxe/COSFunctions.cs | 3 - Vocaluxe/Lib/Sound/Record/CBuffer.cs | 5 +- Vocaluxe/Lib/Sound/Record/CDelayTest.cs | 2 +- .../Record/DirectSound/CDirectSoundRecord.cs | 4 +- Vocaluxe/Lib/Sound/Record/IRecord.cs | 70 ++++++++++++++++++- .../Record/PortAudio/CPortAudioRecord.cs | 6 +- Vocaluxe/Program.cs | 4 +- Vocaluxe/Screens/CScreenNames.cs | 4 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 12 ++-- Vocaluxe/Screens/CScreenSing.cs | 4 +- 15 files changed, 111 insertions(+), 48 deletions(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 33f51fac..60731994 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -291,7 +291,6 @@ namespace Vocaluxe.Base #endregion Video #region Record - MicConfig = new SMicConfig[CSettings.MaxNumPlayer]; for (int p = 1; p <= CSettings.MaxNumPlayer; p++) { MicConfig[p - 1] = new SMicConfig(0); @@ -627,7 +626,7 @@ namespace Vocaluxe.Base /// public static bool IsMicConfig() { - ReadOnlyCollection devices = CRecord.RecordGetDevices(); + ReadOnlyCollection devices = CRecord.GetDevices(); if (devices == null) return false; @@ -641,7 +640,7 @@ namespace Vocaluxe.Base /// public static bool IsMicConfig(int player) { - ReadOnlyCollection devices = CRecord.RecordGetDevices(); + ReadOnlyCollection devices = CRecord.GetDevices(); if (devices == null) return false; @@ -668,7 +667,7 @@ namespace Vocaluxe.Base { //Look for (usb-)mic //SRecordDevice[] Devices = new SRecordDevice[CRecord.RecordGetDevices().Length]; - ReadOnlyCollection devices = CRecord.RecordGetDevices(); + ReadOnlyCollection devices = CRecord.GetDevices(); if (devices == null) return false; diff --git a/Vocaluxe/Base/CGame.cs b/Vocaluxe/Base/CGame.cs index 27c77ecb..46df686f 100644 --- a/Vocaluxe/Base/CGame.cs +++ b/Vocaluxe/Base/CGame.cs @@ -271,14 +271,14 @@ namespace Vocaluxe.Base if (line == lines.Length - 1 && beat == lines[line].LastNoteBeat) Players[p].SongFinished = true; - if (notes[note].PointsForBeat > 0 && (CRecord.RecordToneValid(p) + if (notes[note].PointsForBeat > 0 && (CRecord.ToneValid(p) #if DEBUG_HIT || true #endif )) { int tone = notes[note].Tone; - int tonePlayer = CRecord.RecordGetTone(p); + int tonePlayer = CRecord.GetTone(p); while (tonePlayer - tone > 6) tonePlayer -= 12; diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index d5e50d25..9befefb8 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -616,10 +616,10 @@ namespace Vocaluxe.Base if (CConfig.DebugLevel >= EDebugLevel.TR_CONFIG_LEVEL2) { - debugOutput.Add(CRecord.RecordGetToneAbs(0).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P1: 00")); - debugOutput.Add(CRecord.RecordGetMaxVolume(0).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P1: 0.000")); - debugOutput.Add(CRecord.RecordGetToneAbs(1).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P2: 00")); - debugOutput.Add(CRecord.RecordGetMaxVolume(1).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P2: 0.000")); + debugOutput.Add(CRecord.GetToneAbs(0).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P1: 00")); + debugOutput.Add(CRecord.GetMaxVolume(0).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P1: 0.000")); + debugOutput.Add(CRecord.GetToneAbs(1).ToString(CLanguage.Translate("TR_DEBUG_TONE_ABS") + " P2: 00")); + debugOutput.Add(CRecord.GetMaxVolume(1).ToString(CLanguage.Translate("TR_DEBUG_MAX_VOLUME") + " P2: 0.000")); if (CConfig.DebugLevel >= EDebugLevel.TR_CONFIG_LEVEL3) { diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 70798269..c0c44c4b 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -626,7 +626,7 @@ namespace Vocaluxe.Base { public int GetToneAbs(int playerNr) { - return CRecord.RecordGetToneAbs(playerNr); + return CRecord.GetToneAbs(playerNr); } } diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs index 5493fd58..cbebccea 100644 --- a/Vocaluxe/Base/CRecord.cs +++ b/Vocaluxe/Base/CRecord.cs @@ -10,7 +10,7 @@ namespace Vocaluxe.Base { private static IRecord _Record; - public static void RecordInit() + public static void Init() { switch (CConfig.RecordLib) { @@ -27,17 +27,17 @@ namespace Vocaluxe.Base } } - public static void RecordCloseAll() + public static void Close() { - _Record.CloseAll(); + _Record.Close(); } - public static bool RecordStart() + public static bool Start() { return _Record.Start(); } - public static bool RecordStop() + public static bool Stop() { return _Record.Stop(); } @@ -47,34 +47,34 @@ namespace Vocaluxe.Base _Record.AnalyzeBuffer(player); } - public static int RecordGetToneAbs(int player) + public static int GetToneAbs(int player) { return _Record.GetToneAbs(player); } - public static int RecordGetTone(int player) + public static int GetTone(int player) { return _Record.GetTone(player); } - public static void RecordSetTone(int player, int tone) + public static void SetTone(int player, int tone) { _Record.SetTone(player, tone); } - public static bool RecordToneValid(int player) + public static bool ToneValid(int player) { return _Record.ToneValid(player); } - public static float RecordGetMaxVolume(int player) + public static float GetMaxVolume(int player) { return _Record.GetMaxVolume(player); } public static int NumHalfTones(int player) { - return _Record.NumHalfTones(player); + return _Record.NumHalfTones(); } public static float[] ToneWeigth(int player) @@ -82,7 +82,7 @@ namespace Vocaluxe.Base return _Record.ToneWeigth(player); } - public static ReadOnlyCollection RecordGetDevices() + public static ReadOnlyCollection GetDevices() { ReadOnlyCollection devices = _Record.RecordDevices(); diff --git a/Vocaluxe/COSFunctions.cs b/Vocaluxe/COSFunctions.cs index c72b6c46..472956c6 100644 --- a/Vocaluxe/COSFunctions.cs +++ b/Vocaluxe/COSFunctions.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; namespace Vocaluxe { diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index cbf72706..3ead34bc 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -5,8 +5,9 @@ namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { - private const double _BaseToneFreq = 65.4064; - public const int NumHalfTones = 17; + //Half tones: C C♯ D Eb E F F♯ G G♯ A Bb B + private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) + public const int NumHalfTones = 17; //Number of halftone to analyze C2-E3 (TODO: use more/full octaves?) private const int _AnalysisBufLen = 4096; private const int _AnalysisByteBufLen = _AnalysisBufLen * 2; diff --git a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs index 711484d3..a9974c40 100644 --- a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs +++ b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs @@ -82,7 +82,7 @@ namespace Vocaluxe.Lib.Sound.Record { if (_DelaysChannel[i].Channel < 0 || _DelaysChannel[i].Finished) continue; - if (CRecord.RecordGetMaxVolume(_DelaysChannel[i].Channel) > 0.1f && CRecord.RecordGetTone(_DelaysChannel[i].Channel) == 9) + if (CRecord.GetMaxVolume(_DelaysChannel[i].Channel) > 0.1f && CRecord.GetTone(_DelaysChannel[i].Channel) == 9) { Delays[i] = (int)_Timer.ElapsedMilliseconds; _DelaysChannel[i].Finished = true; diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index 5707db98..84e54518 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -66,7 +66,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound return true; } - public void CloseAll() + public void Close() { if (_Initialized) { @@ -173,7 +173,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound return _Devices.AsReadOnly(); } - public int NumHalfTones(int player) + public int NumHalfTones() { if (!_Initialized) return 0; diff --git a/Vocaluxe/Lib/Sound/Record/IRecord.cs b/Vocaluxe/Lib/Sound/Record/IRecord.cs index 6812e7c0..04899008 100644 --- a/Vocaluxe/Lib/Sound/Record/IRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/IRecord.cs @@ -61,21 +61,87 @@ namespace Vocaluxe.Lib.Sound.Record interface IRecord { + /// + /// Initializes recording + /// + /// True on success bool Init(); - void CloseAll(); + /// + /// Closes recording. You must not use it before calling Init again + /// + void Close(); + + /// + /// Starts recording on all enabled devices (PlayerChannelX set) + /// + /// True on success, false on error or not initialized bool Start(); + + /// + /// Stops recording on all devices + /// + /// True on success, false on error or not initialized bool Stop(); + + /// + /// Analyzes the buffer for the given player + /// + /// void AnalyzeBuffer(int player); + /// + /// Get the current raw tone value for a player + /// + /// 0-based player index + /// Tone between 0 and NumHalftones-1 int GetToneAbs(int player); + + /// + /// Get the current tone value for a player + /// + /// 0-based player index + /// Tone between 0 and 11 (one octave) int GetTone(int player); + + /// + /// DEBUG ONLY: Sets a tone for a player + /// + /// 0-based player index + /// Raw tone value between 0 and NumHalfTones-1 void SetTone(int player, int tone); + + /// + /// Get the current maximum input volume (normalized) for a player + /// + /// 0-based player index + /// Maximum volume between 0 and 1 float GetMaxVolume(int player); + + /// + /// Returns whether the current tone is valid. That includes, if maximum volume is higher than the threshold + /// + /// 0-based player index + /// True if tone is detected and volume higher than threshold bool ToneValid(int player); - int NumHalfTones(int player); + + /// + /// Returns the number of half tones used for the raw tone detection + /// + /// number of half tones used for the raw tone detection + int NumHalfTones(); + + /// + /// Returns the tone weights for a player as an array of normalized values for each halftone + /// + /// 0-based player index + /// Array of values (0-1) with one entry per halftone float[] ToneWeigth(int player); + /// + /// Readonly list of all detected record devices. Modifying the devices should not be done when record is running. + /// + /// Readonly list of all detected record devices ReadOnlyCollection RecordDevices(); } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 156b0938..8c9e8dec 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -56,7 +56,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio try { if (_Initialized) - CloseAll(); + Close(); if (_ErrorCheck("Initialize", PortAudioSharp.PortAudio.Pa_Initialize())) return false; @@ -164,7 +164,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio /// /// Stop all voice capturing streams and terminate PortAudio /// - public void CloseAll() + public void Close() { Stop(); @@ -229,7 +229,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio return _Buffer[player].ToneValid; } - public int NumHalfTones(int player) + public int NumHalfTones() { if (!_Initialized) return 0; diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 526cf20a..6676cd78 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -126,7 +126,7 @@ namespace Vocaluxe // Init Record CLog.StartBenchmark(0, "Init Record"); - CRecord.RecordInit(); + CRecord.Init(); CLog.StopBenchmark(0, "Init Record"); Application.DoEvents(); @@ -243,7 +243,7 @@ namespace Vocaluxe { CVocaluxeServer.Close(); CController.Close(); - CRecord.RecordCloseAll(); + CRecord.Close(); CSound.CloseAllStreams(); CVideo.CloseAll(); CDraw.Unload(); diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index dc5165ce..f3789e5c 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -555,7 +555,7 @@ namespace Vocaluxe.Screens public override void OnShow() { base.OnShow(); - CRecord.RecordStart(); + CRecord.Start(); _NameSelections[_NameSelection].Init(); _LoadProfiles(); @@ -565,7 +565,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CRecord.RecordStop(); + CRecord.Stop(); } public override bool Draw() diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 7eead339..1a7941c8 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -228,7 +228,7 @@ namespace Vocaluxe.Screens int player = _SelectSlides[_SelectSlideRecordChannel1].Selection; if (player > 0) { - _ChannelEnergy[0] = CRecord.RecordGetMaxVolume(player - 1); + _ChannelEnergy[0] = CRecord.GetMaxVolume(player - 1); _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player - 1)); } else @@ -238,7 +238,7 @@ namespace Vocaluxe.Screens player = _SelectSlides[_SelectSlideRecordChannel2].Selection; if (player > 0) { - _ChannelEnergy[1] = CRecord.RecordGetMaxVolume(player - 1); + _ChannelEnergy[1] = CRecord.GetMaxVolume(player - 1); _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player - 1)); } else @@ -266,7 +266,7 @@ namespace Vocaluxe.Screens _DeviceNr = -1; - _Devices = CRecord.RecordGetDevices(); + _Devices = CRecord.GetDevices(); if (_Devices != null) { _DeviceNr = 0; @@ -337,7 +337,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CRecord.RecordStop(); + CRecord.Stop(); _DelayTest.Reset(); CBackgroundMusic.Disabled = false; @@ -363,7 +363,7 @@ namespace Vocaluxe.Screens if (_Devices == null) return; - CRecord.RecordStop(); + CRecord.Stop(); _SetMicConfig(); if (_CheckMicConfig()) @@ -389,7 +389,7 @@ namespace Vocaluxe.Screens } CConfig.SaveConfig(); } - CRecord.RecordStart(); + CRecord.Start(); } private void _SetPlayerColors() diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 20fff366..9b58c99a 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -556,7 +556,7 @@ namespace Vocaluxe.Screens { if (_CurrentStream > -1) CSound.FadeAndClose(_CurrentStream, 0f, 0.5f); - CRecord.RecordStop(); + CRecord.Stop(); if (_CurrentVideo != -1) { CVideo.Close(_CurrentVideo); @@ -738,7 +738,7 @@ namespace Vocaluxe.Screens { _PrepareTimeLine(); CSound.Play(_CurrentStream); - CRecord.RecordStart(); + CRecord.Start(); if (_Webcam) CWebcam.Start(); } From 8de9c4c9f8317522787cc506b50ef75e5b9f7903 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 11:31:06 +0100 Subject: [PATCH 012/116] Remove unused usings --- ClientServerLib/ClientServerLib/CDiscover.cs | 1 - ClientServerLib/ClientServerLib/Properties/AssemblyInfo.cs | 1 - PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs | 3 --- .../CPartyScreenChallengeMedleyNames.cs | 3 --- PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs | 3 --- Vocaluxe.sln.DotSettings | 2 +- Vocaluxe/Base/CConfig.cs | 1 - Vocaluxe/Base/CRecord.cs | 2 +- Vocaluxe/CProgrammHelper.cs | 1 - .../Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs | 1 - Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs | 4 +--- Vocaluxe/Lib/Video/Acinerella/CDecoder.cs | 1 - Vocaluxe/Screens/CScreenOptionsRecord.cs | 1 - 13 files changed, 3 insertions(+), 21 deletions(-) diff --git a/ClientServerLib/ClientServerLib/CDiscover.cs b/ClientServerLib/ClientServerLib/CDiscover.cs index 17beab61..d78bc19b 100644 --- a/ClientServerLib/ClientServerLib/CDiscover.cs +++ b/ClientServerLib/ClientServerLib/CDiscover.cs @@ -18,7 +18,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; diff --git a/ClientServerLib/ClientServerLib/Properties/AssemblyInfo.cs b/ClientServerLib/ClientServerLib/Properties/AssemblyInfo.cs index fe3863d2..2acbaa9a 100644 --- a/ClientServerLib/ClientServerLib/Properties/AssemblyInfo.cs +++ b/ClientServerLib/ClientServerLib/Properties/AssemblyInfo.cs @@ -16,7 +16,6 @@ #endregion using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden diff --git a/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs b/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs index 46d00571..14b5102c 100644 --- a/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs +++ b/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs @@ -17,10 +17,7 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; using VocaluxeLib.Menu; -using VocaluxeLib.Profile; namespace VocaluxeLib.PartyModes.Challenge { diff --git a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs index 3858de80..9c3521af 100644 --- a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs +++ b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs @@ -17,10 +17,7 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; using VocaluxeLib.Menu; -using VocaluxeLib.Profile; namespace VocaluxeLib.PartyModes.ChallengeMedley { diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs index 00f99acc..ebc7eddf 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs @@ -17,10 +17,7 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; using VocaluxeLib.Menu; -using VocaluxeLib.Profile; namespace VocaluxeLib.PartyModes.TicTacToe { diff --git a/Vocaluxe.sln.DotSettings b/Vocaluxe.sln.DotSettings index 0a1c7cf8..5ca67d0b 100644 --- a/Vocaluxe.sln.DotSettings +++ b/Vocaluxe.sln.DotSettings @@ -10,7 +10,7 @@ DO_NOT_SHOW DO_NOT_SHOW <?xml version="1.0" encoding="utf-16"?><Profile name="Cleanup"><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSRemoveCodeRedundancies>True</CSRemoveCodeRedundancies><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><CSShortenReferences>True</CSShortenReferences><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSUpdateFileHeader>True</CSUpdateFileHeader><CSUseAutoProperty>True</CSUseAutoProperty></Profile> - <?xml version="1.0" encoding="utf-16"?><Profile name="Simple Reformat"><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSShortenReferences>True</CSShortenReferences><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar></Profile> + <?xml version="1.0" encoding="utf-16"?><Profile name="Simple Reformat"><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSShortenReferences>True</CSShortenReferences><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar></Profile> Cleanup Simple Reformat 0 diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 60731994..fec250da 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -24,7 +24,6 @@ using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; -using Vocaluxe.Lib.Sound; using Vocaluxe.Lib.Sound.Record; using Vocaluxe.Lib.Webcam; using VocaluxeLib; diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs index cbebccea..c2bd6733 100644 --- a/Vocaluxe/Base/CRecord.cs +++ b/Vocaluxe/Base/CRecord.cs @@ -6,7 +6,7 @@ using VocaluxeLib; namespace Vocaluxe.Base { - class CRecord + static class CRecord { private static IRecord _Record; diff --git a/Vocaluxe/CProgrammHelper.cs b/Vocaluxe/CProgrammHelper.cs index 7140589e..e1994ced 100644 --- a/Vocaluxe/CProgrammHelper.cs +++ b/Vocaluxe/CProgrammHelper.cs @@ -18,7 +18,6 @@ using System; using System.IO; using System.Reflection; -using System.Runtime.InteropServices; using System.Security; using Microsoft.Win32; using Vocaluxe.Base; diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index 239edf7b..640b0c8d 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -17,7 +17,6 @@ using System.Collections.Generic; using Gst; -using System.Runtime.InteropServices; namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index 84e54518..e0a37e8e 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -15,12 +15,10 @@ // along with Vocaluxe. If not, see . #endregion +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; -using System.Runtime.InteropServices; using SlimDX.DirectSound; -using System; -using System.Collections.Generic; using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.DirectSound diff --git a/Vocaluxe/Lib/Video/Acinerella/CDecoder.cs b/Vocaluxe/Lib/Video/Acinerella/CDecoder.cs index 743d5747..9203b118 100644 --- a/Vocaluxe/Lib/Video/Acinerella/CDecoder.cs +++ b/Vocaluxe/Lib/Video/Acinerella/CDecoder.cs @@ -15,7 +15,6 @@ // along with Vocaluxe. If not, see . #endregion -using System; using System.Diagnostics; using System.IO; using VocaluxeLib.Draw; diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index 1a7941c8..cd41ebaf 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -19,7 +19,6 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows.Forms; using Vocaluxe.Base; -using Vocaluxe.Lib.Sound; using Vocaluxe.Lib.Sound.Record; using VocaluxeLib; using VocaluxeLib.Menu; From ea0a4bbdc7ed3265aad6f21447fb9ec9842be5e7 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:02:14 +0100 Subject: [PATCH 013/116] Fix cover mutex handling (deadlock) --- Vocaluxe/Base/CCover.cs | 73 +++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index a156fa8b..241ec0d8 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -36,11 +36,9 @@ namespace Vocaluxe.Base static class CCover { private static readonly XmlWriterSettings _Settings = new XmlWriterSettings(); - private static readonly Dictionary _Cover = new Dictionary(); + private static readonly Dictionary _Covers = new Dictionary(); private static readonly List _CoverThemes = new List(); - private static readonly Object _MutexCover = new Object(); - public static CTexture NoCover { get; private set; } public static void Init() @@ -87,24 +85,22 @@ namespace Vocaluxe.Base /// public static CTexture Cover(string name) { - lock (_MutexCover) + lock (_Covers) { if (!_CoverExists(name)) return NoCover; - return _Cover[name]; + return _Covers[name]; } } /// /// Returns true if a cover with the given name exists. + /// MUST HOLD _Covers lock at this point /// private static bool _CoverExists(string name) { - lock (_MutexCover) - { - return _Cover.ContainsKey(name); - } + return _Covers.ContainsKey(name); } /// @@ -112,14 +108,15 @@ namespace Vocaluxe.Base /// public static void ReloadCover() { - List keys = _Cover.Keys.ToList(); - - foreach (string key in keys) + lock (_Covers) { - CTexture texture = _Cover[key]; - CDraw.RemoveTexture(ref texture); + foreach (string key in _Covers.Keys.ToList()) + { + CTexture texture = _Covers[key]; + CDraw.RemoveTexture(ref texture); + } + _Covers.Clear(); } - _Cover.Clear(); _LoadCover(CConfig.CoverTheme); } @@ -178,12 +175,20 @@ namespace Vocaluxe.Base return; var ignoreList = new List(); + var files = new List(); + + string coverPath = Path.Combine(CSettings.FolderCover, coverTheme.Folder); + files.AddRange(CHelper.ListFiles(coverPath, "*.png", true, true)); + files.AddRange(CHelper.ListFiles(coverPath, "*.jpg", true, true)); + files.AddRange(CHelper.ListFiles(coverPath, "*.jpeg", true, true)); + files.AddRange(CHelper.ListFiles(coverPath, "*.bmp", true, true)); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderCover, coverTheme.File)); - if (xmlReader != null) + lock (_Covers) { - lock (_MutexCover) + if (xmlReader != null) { - _Cover.Clear(); + _Covers.Clear(); List cover = xmlReader.GetValues("Cover"); foreach (string coverName in cover) { @@ -199,38 +204,36 @@ namespace Vocaluxe.Base ignoreList.Add(Path.GetFileName(coverFilePath)); if (name == "NoCover") - NoCover = _Cover[name]; + NoCover = _Covers[name]; } } - } - - var files = new List(); - - string coverPath = Path.Combine(CSettings.FolderCover, coverTheme.Folder); - files.AddRange(CHelper.ListFiles(coverPath, "*.png", true, true)); - files.AddRange(CHelper.ListFiles(coverPath, "*.jpg", true, true)); - files.AddRange(CHelper.ListFiles(coverPath, "*.jpeg", true, true)); - files.AddRange(CHelper.ListFiles(coverPath, "*.bmp", true, true)); - foreach (string file in files) - { - if (!ignoreList.Contains(Path.GetFileName(file))) - _AddCover(Path.GetFileNameWithoutExtension(file), file); + foreach (string file in files) + { + if (!ignoreList.Contains(Path.GetFileName(file))) + _AddCover(Path.GetFileNameWithoutExtension(file), file); + } } } + /// + /// Ads a cover with the given name if it does not exist yet + /// MUST HOLD _Covers lock at this point + /// + /// Name of the cover + /// Filename of image file private static void _AddCover(string name, string file) { CTexture texture = CDraw.AddTexture(file); if (!_CoverExists(name)) - _Cover.Add(name, texture); + _Covers.Add(name, texture); else { - CTexture tex = _Cover[name]; + CTexture tex = _Covers[name]; CDraw.RemoveTexture(ref tex); - _Cover[name] = texture; + _Covers[name] = texture; } } } From 532f5c7ac3232c523ea6a5082ce10e1310edb311 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:03:44 +0100 Subject: [PATCH 014/116] Fix nested benchmark handling and close only opened files --- Vocaluxe/Base/CLog.cs | 52 ++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/Vocaluxe/Base/CLog.cs b/Vocaluxe/Base/CLog.cs index 8afe6cd4..a0484670 100644 --- a/Vocaluxe/Base/CLog.cs +++ b/Vocaluxe/Base/CLog.cs @@ -103,6 +103,8 @@ namespace Vocaluxe.Base static class CLog { private const int _MaxBenchmarks = 10; + private static int _BenchmarksRunning; + private static bool _Initialized; private static CLogFile _ErrorLog; private static CLogFile _PerformanceLog; @@ -124,15 +126,26 @@ namespace Vocaluxe.Base _BenchmarkTimer = new Stopwatch[_MaxBenchmarks]; for (int i = 0; i < _BenchmarkTimer.Length; i++) _BenchmarkTimer[i] = new Stopwatch(); + _BenchmarksRunning = 0; + _Initialized = true; } public static void CloseAll() { - _ErrorLog.Close(); - _PerformanceLog.Close(); - _BenchmarkLog.Close(); - _DebugLog.Close(); - _SongInfoLog.Close(); + if (_Initialized) + { + _ErrorLog.Dispose(); + _ErrorLog = null; + _PerformanceLog.Dispose(); + _PerformanceLog = null; + _BenchmarkLog.Dispose(); + _BenchmarkLog = null; + _DebugLog.Dispose(); + _DebugLog = null; + _SongInfoLog.Dispose(); + _SongInfoLog = null; + _Initialized = false; + } } #region LogError @@ -165,41 +178,44 @@ namespace Vocaluxe.Base } #region LogBenchmark - public static void StartBenchmark(int benchmarkNr, string text) + public static void StartBenchmark(string text) { - if (benchmarkNr >= 0 && benchmarkNr < _MaxBenchmarks) + if (_BenchmarksRunning < _MaxBenchmarks) { - _BenchmarkTimer[benchmarkNr].Stop(); - _BenchmarkTimer[benchmarkNr].Reset(); - string space = String.Empty; - for (int i = 0; i < benchmarkNr; i++) + for (int i = 0; i < _BenchmarksRunning; i++) space += " "; _BenchmarkLog.Add(space + "Start " + text); - _BenchmarkTimer[benchmarkNr].Start(); + _BenchmarkTimer[_BenchmarksRunning].Restart(); } + else + LogError("Tried to start to many benchmarks at once"); //Log and ignore + _BenchmarksRunning++; //Inc even if not started to correct right Stop() call } - public static void StopBenchmark(int benchmarkNr, string text) + public static void StopBenchmark(string text) { - if (benchmarkNr >= 0 && benchmarkNr < _MaxBenchmarks) + if (_BenchmarksRunning > 0 && _BenchmarksRunning <= _MaxBenchmarks) { - _BenchmarkTimer[benchmarkNr].Stop(); + _BenchmarksRunning--; + _BenchmarkTimer[_BenchmarksRunning].Stop(); string space = String.Empty; - for (int i = 0; i < benchmarkNr; i++) + for (int i = 0; i < _BenchmarksRunning; i++) space += " "; float ms; if (Stopwatch.IsHighResolution && _NanosecPerTick > 0) - ms = (float)((_NanosecPerTick * _BenchmarkTimer[benchmarkNr].ElapsedTicks) / (1000.0 * 1000.0)); + ms = (float)((_NanosecPerTick * _BenchmarkTimer[_BenchmarksRunning].ElapsedTicks) / (1000.0 * 1000.0)); else - ms = _BenchmarkTimer[benchmarkNr].ElapsedMilliseconds; + ms = _BenchmarkTimer[_BenchmarksRunning].ElapsedMilliseconds; _BenchmarkLog.Add(space + "Stop " + text + ", Elapsed Time: " + ms.ToString("0.000") + "ms"); _BenchmarkLog.Add(String.Empty); } + else + _BenchmarksRunning--; } #endregion LogBenchmark } From 723a76b6bec6277dad1939196f2652d8a99312db Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:05:28 +0100 Subject: [PATCH 015/116] Use smarter locking CControllerFramework --- Vocaluxe/Lib/Input/CControllerFramework.cs | 49 ++++++++++++++++------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/Vocaluxe/Lib/Input/CControllerFramework.cs b/Vocaluxe/Lib/Input/CControllerFramework.cs index 265c0858..74d96679 100644 --- a/Vocaluxe/Lib/Input/CControllerFramework.cs +++ b/Vocaluxe/Lib/Input/CControllerFramework.cs @@ -15,31 +15,44 @@ // along with Vocaluxe. If not, see . #endregion -using System; using System.Collections.Generic; using VocaluxeLib; namespace Vocaluxe.Lib.Input { - public class CControllerFramework : IController + public abstract class CControllerFramework : IController { - private List _KeysPool; + protected bool _Initialized; + private readonly List _KeysPool = new List(); private List _CurrentKeysPool; - private readonly Object _KeyCopyLock = new Object(); - private List _MousePool; + private readonly List _MousePool = new List(); private List _CurrentMousePool; - private readonly Object _MouseCopyLock = new Object(); - public virtual void Init() + public abstract string GetName(); + + public virtual bool Init() { - _KeysPool = new List(); + if (_Initialized) + return false; _CurrentKeysPool = new List(); - _MousePool = new List(); _CurrentMousePool = new List(); + _Initialized = true; + return true; } - public virtual void Close() {} + public virtual void Close() + { + if (!_Initialized) + return; + _CurrentKeysPool = null; + _CurrentMousePool = null; + lock (_KeysPool) + _KeysPool.Clear(); + lock (_MousePool) + _MousePool.Clear(); + _Initialized = false; + } public virtual void Connect() {} @@ -52,14 +65,16 @@ namespace Vocaluxe.Lib.Input public virtual void Update() { - lock (_KeyCopyLock) + if (!_Initialized) + return; + lock (_KeysPool) { foreach (SKeyEvent e in _KeysPool) _CurrentKeysPool.Add(e); _KeysPool.Clear(); } - lock (_MouseCopyLock) + lock (_MousePool) { foreach (SMouseEvent e in _MousePool) _CurrentMousePool.Add(e); @@ -69,6 +84,8 @@ namespace Vocaluxe.Lib.Input public virtual bool PollKeyEvent(ref SKeyEvent keyEvent) { + if (!_Initialized) + return false; if (_CurrentKeysPool.Count > 0) { keyEvent = _CurrentKeysPool[0]; @@ -80,6 +97,8 @@ namespace Vocaluxe.Lib.Input public virtual bool PollMouseEvent(ref SMouseEvent mouseEvent) { + if (!_Initialized) + return false; if (_CurrentMousePool.Count > 0) { mouseEvent = _CurrentMousePool[0]; @@ -93,7 +112,9 @@ namespace Vocaluxe.Lib.Input public void AddKeyEvent(SKeyEvent keyEvent) { - lock (_KeyCopyLock) + if (!_Initialized) + return; + lock (_KeysPool) { _KeysPool.Add(keyEvent); } @@ -101,6 +122,8 @@ namespace Vocaluxe.Lib.Input public void AddMouseEvent(SMouseEvent mouseEvent) { + if (!_Initialized) + return; lock (_MousePool) { _MousePool.Add(mouseEvent); From e321b3d65727aa03da0fc1b5a3169f0988e306ab Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:06:56 +0100 Subject: [PATCH 016/116] Check results of Init() calls Also Part 2 of commits regarding nested benchmarks --- Vocaluxe/Base/CController.cs | 23 ++-- Vocaluxe/Base/CDataBase.cs | 24 ++-- Vocaluxe/Base/CDraw.cs | 16 ++- Vocaluxe/Base/CGraphics.cs | 14 +-- Vocaluxe/Base/CParty.cs | 1 + Vocaluxe/Base/CRecord.cs | 11 +- Vocaluxe/Base/CSongs.cs | 20 ++-- Vocaluxe/Base/CSound.cs | 11 +- Vocaluxe/Base/CTheme.cs | 23 ++-- Vocaluxe/Base/CVideo.cs | 14 ++- Vocaluxe/Base/CWebcam.cs | 14 ++- Vocaluxe/Base/Fonts/CFonts.cs | 8 +- Vocaluxe/Base/Server/CVocaluxeServer.cs | 23 +++- Vocaluxe/Lib/Input/IController.cs | 3 +- Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs | 36 +++++- .../Record/PortAudio/CPortAudioRecord.cs | 21 ++-- Vocaluxe/Program.cs | 112 ++++++++++-------- Vocaluxe/Screens/CScreenLoad.cs | 8 +- 18 files changed, 245 insertions(+), 137 deletions(-) diff --git a/Vocaluxe/Base/CController.cs b/Vocaluxe/Base/CController.cs index ce70f459..604b17c0 100644 --- a/Vocaluxe/Base/CController.cs +++ b/Vocaluxe/Base/CController.cs @@ -36,19 +36,26 @@ namespace Vocaluxe.Base _KeysPool = new List(); _MousePool = new List(); - _Controller.Add(new CWiiMote()); - _Controller.Add(CVocaluxeServer.Controller); + _AddController(new CWiiMote()); + _AddController(CVocaluxeServer.Controller); + } - foreach (IController controller in _Controller) - controller.Init(); + private static void _AddController(IController controller) + { + if (controller.Init()) + _Controller.Add(controller); } public static void Close() { - foreach (IController controller in _Controller) - controller.Close(); - - _Controller = new List(); + if (_Controller != null) + { + foreach (IController controller in _Controller) + controller.Close(); + _Controller = null; + _KeysPool = null; + _MousePool = null; + } } public static void Connect() diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 888ea52d..3afcfc55 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -56,7 +56,7 @@ namespace Vocaluxe.Base private static SQLiteConnection _ConnectionCover; private static SQLiteTransaction _TransactionCover; - public static void Init() + public static bool Init() { _HighscoreFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileHighscoreDB); _CoverFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB); @@ -66,14 +66,15 @@ namespace Vocaluxe.Base if (!_InitCoverDB()) { CLog.LogError("Error initializing Cover-DB", true, true); - return; + return false; } if (!_InitCreditsRessourcesDB()) { CLog.LogError("Error initializing Cover-DB", true, true); - return; + return false; } GC.Collect(); + return true; } #region Highscores @@ -431,7 +432,7 @@ namespace Vocaluxe.Base return false; } - private static void _InitHighscoreDB() + private static bool _InitHighscoreDB() { string oldDBFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileOldHighscoreDB); if (File.Exists(oldDBFilePath)) @@ -441,17 +442,17 @@ namespace Vocaluxe.Base if (!_CreateOrConvert(oldDBFilePath)) { CLog.LogError("Cannot init Highscore DB: Error opening database: " + oldDBFilePath, true, true); - return; + return false; } if (!_CreateOrConvert(_HighscoreFilePath)) { CLog.LogError("Cannot init Highscore DB: Error opening database: " + _HighscoreFilePath, true, true); - return; + return false; } if (!_ImportData(oldDBFilePath)) { CLog.LogError("Cannot init Highscore DB: Error importing data", true, true); - return; + return false; } } else @@ -460,13 +461,17 @@ namespace Vocaluxe.Base if (!_CreateOrConvert(_HighscoreFilePath)) { CLog.LogError("Cannot init Highscore DB: Error opening database: " + _HighscoreFilePath, true, true); - return; + return false; } } File.Delete(oldDBFilePath); } else if (!_CreateOrConvert(_HighscoreFilePath)) + { CLog.LogError("Cannot init Highscore DB: Error opening database: " + _HighscoreFilePath, true, true); + return false; + } + return true; } private static void _CreateHighscoreDB(string filePath) @@ -1169,13 +1174,12 @@ namespace Vocaluxe.Base } } - public static void CloseConnections() + public static void Close() { CommitCovers(); if (_ConnectionCover != null) { - _ConnectionCover.Close(); _ConnectionCover.Dispose(); _ConnectionCover = null; } diff --git a/Vocaluxe/Base/CDraw.cs b/Vocaluxe/Base/CDraw.cs index e888cad3..f43d8542 100644 --- a/Vocaluxe/Base/CDraw.cs +++ b/Vocaluxe/Base/CDraw.cs @@ -28,8 +28,10 @@ namespace Vocaluxe.Base { private static IDraw _Draw; - public static void InitDraw() + public static bool InitDraw() { + if (_Draw != null) + return false; switch (CConfig.Renderer) { case ERenderer.TR_CONFIG_SOFTWARE: @@ -45,6 +47,7 @@ namespace Vocaluxe.Base { CLog.LogError(e.Message + " - Error in initializing of OpenGL. Please check whether" + " your graphic card drivers are up to date.", true, true); + return false; } break; @@ -59,6 +62,7 @@ namespace Vocaluxe.Base CLog.LogError(e.Message + " - Error in initializing of Direct3D. Please check if " + "your DirectX redistributables and graphic card drivers are up to date. You can " + "download the DirectX runtimes at http://www.microsoft.com/download/en/details.aspx?id=8109", true, true); + return false; } break; #endif @@ -67,8 +71,7 @@ namespace Vocaluxe.Base _Draw = new CDrawWinForm(); break; } - if (!_Draw.Init()) - CLog.LogError("Could not init drawing interface!", true, true); + return _Draw.Init(); } public static void MainLoop() @@ -79,8 +82,11 @@ namespace Vocaluxe.Base public static void Unload() { - _Draw.Unload(); - _Draw = null; + if (_Draw != null) + { + _Draw.Unload(); + _Draw = null; + } } public static int GetScreenWidth() diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 9befefb8..bd6f7e39 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -61,10 +61,10 @@ namespace Vocaluxe.Base } #region public methods - public static void InitGraphics() + public static void Init() { // Add Screens, must be the same order as in EScreens! - CLog.StartBenchmark(1, "Build Screen List"); + CLog.StartBenchmark("Build Screen List"); _Screens.Add(new CScreenTest()); _Screens.Add(new CScreenLoad()); @@ -91,7 +91,7 @@ namespace Vocaluxe.Base _PopupScreens.Add(new CPopupScreenVolumeControl()); _PopupScreens.Add(new CPopupScreenServerQR()); - CLog.StopBenchmark(1, "Build Screen List"); + CLog.StopBenchmark("Build Screen List"); _CurrentScreen = EScreens.ScreenLoad; _NextScreen = EScreens.ScreenNull; @@ -101,9 +101,9 @@ namespace Vocaluxe.Base _GlobalAlpha = 1f; _ZOffset = 0f; - CLog.StartBenchmark(0, "Load Theme"); + CLog.StartBenchmark("Load Theme"); LoadTheme(); - CLog.StopBenchmark(0, "Load Theme"); + CLog.StopBenchmark("Load Theme"); } public static void LoadTheme() @@ -112,10 +112,10 @@ namespace Vocaluxe.Base for (int i = 0; i < _Screens.Count; i++) { - CLog.StartBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]); + CLog.StartBenchmark("Load Theme " + Enum.GetNames(typeof(EScreens))[i]); _Screens[i].Init(); _Screens[i].LoadTheme(CTheme.GetThemeScreensPath(-1)); - CLog.StopBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]); + CLog.StopBenchmark("Load Theme " + Enum.GetNames(typeof(EScreens))[i]); } foreach (IMenu popup in _PopupScreens) diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index 5735786f..a52c0c60 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -223,6 +223,7 @@ namespace Vocaluxe.Base foreach (string file in files) { SPartyMode pm = _LoadPartyMode(file); + if(pm.NoErrors) _PartyModes.Add(pm.PartyModeID, pm); } } diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs index c2bd6733..5af44fd1 100644 --- a/Vocaluxe/Base/CRecord.cs +++ b/Vocaluxe/Base/CRecord.cs @@ -10,8 +10,10 @@ namespace Vocaluxe.Base { private static IRecord _Record; - public static void Init() + public static bool Init() { + if (_Record != null) + return false; switch (CConfig.RecordLib) { #if WIN @@ -25,11 +27,16 @@ namespace Vocaluxe.Base _Record = new CPortAudioRecord(); break; } + return _Record.Init(); } public static void Close() { - _Record.Close(); + if (_Record != null) + { + _Record.Close(); + _Record = null; + } } public static bool Start() diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 14b2100e..f66d5b75 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -332,11 +332,11 @@ namespace Vocaluxe.Base public static void LoadSongs() { - CLog.StartBenchmark(1, "Load Songs"); + CLog.StartBenchmark("Load Songs"); SongsLoaded = false; _Songs.Clear(); - CLog.StartBenchmark(2, "List Songs"); + CLog.StartBenchmark("List Songs"); var files = new List(); foreach (string p in CConfig.SongFolder) { @@ -344,9 +344,9 @@ namespace Vocaluxe.Base files.AddRange(CHelper.ListFiles(path, "*.txt", true, true)); files.AddRange(CHelper.ListFiles(path, "*.txd", true, true)); } - CLog.StopBenchmark(2, "List Songs"); + CLog.StopBenchmark("List Songs"); - CLog.StartBenchmark(2, "Read TXTs"); + CLog.StartBenchmark("Read TXTs"); foreach (string file in files) { CSong song = CSong.LoadSong(file); @@ -356,24 +356,24 @@ namespace Vocaluxe.Base if (song.LoadNotes()) _Songs.Add(song); } - CLog.StopBenchmark(2, "Read TXTs"); + CLog.StopBenchmark("Read TXTs"); - CLog.StartBenchmark(2, "Sort Songs"); + CLog.StartBenchmark("Sort Songs"); Sorter.SongSorting = CConfig.SongSorting; Sorter.IgnoreArticles = CConfig.IgnoreArticles; Categorizer.Tabs = CConfig.Tabs; Categorizer.ObjectChanged += _HandleCategoriesChanged; - CLog.StopBenchmark(2, "Sort Songs"); + CLog.StopBenchmark("Sort Songs"); Category = -1; SongsLoaded = true; if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART) { - CLog.StartBenchmark(2, "Load Covers/Notes"); + CLog.StartBenchmark("Load Covers/Notes"); _LoadCover(); - CLog.StopBenchmark(2, "Load Covers/Notes"); + CLog.StopBenchmark("Load Covers/Notes"); } - CLog.StopBenchmark(1, "Load Songs "); + CLog.StopBenchmark("Load Songs "); GC.Collect(); } diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index 156a5fcc..a09ba20a 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -38,6 +38,8 @@ namespace Vocaluxe.Base public static bool Init() { + if (_Playback != null) + return false; switch (CConfig.PlayBackLib) { case EPlaybackLib.PortAudio: @@ -75,7 +77,14 @@ namespace Vocaluxe.Base public static void CloseAllStreams() { - _Playback.CloseAll(); + if (_Playback != null) + _Playback.CloseAll(); + } + + public static void Close() + { + CloseAllStreams(); + _Playback = null; } #region Stream Handling diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index 35180bcb..4f9dd431 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -142,22 +142,30 @@ namespace Vocaluxe.Base #endregion Vars #region Theme and Skin loading and writing - public static void InitTheme() + public static bool Init() { _ListThemes(); ListSkins(); - LoadSkins(); - LoadTheme(); + return LoadSkins() && LoadTheme(); } - public static void LoadSkins() + public static bool LoadSkins() { + //Fail if loading of any skin failed or no skin was loaded + //TODO: implement handlers that failing skins are logged and ignored + bool result = false; for (int index = 0; index < _Skins.Count; index++) { if (_Skins[index].PartyModeID == -1) - LoadSkin(index); + { + if (LoadSkin(index)) + result = true; + else + return false; + } } + return result; } public static bool LoadSkin(int skinIndex) @@ -225,13 +233,14 @@ namespace Vocaluxe.Base } } - public static void LoadTheme() + public static bool LoadTheme() { for (int i = 0; i < _Themes.Count; i++) { if (_Themes[i].Name == CConfig.Theme && _Themes[i].PartyModeID == -1) - LoadTheme(i); + return LoadTheme(i); } + return false; } public static bool LoadTheme(int themeIndex) diff --git a/Vocaluxe/Base/CVideo.cs b/Vocaluxe/Base/CVideo.cs index 76a7ce5e..3dee6082 100644 --- a/Vocaluxe/Base/CVideo.cs +++ b/Vocaluxe/Base/CVideo.cs @@ -29,8 +29,10 @@ namespace Vocaluxe.Base private static IVideoDecoder _VideoDecoder; #region Init - public static void Init() + public static bool Init() { + if (_VideoDecoder != null) + return false; switch (CConfig.VideoDecoder) { case EVideoDecoder.FFmpeg: @@ -44,14 +46,18 @@ namespace Vocaluxe.Base break; } - _VideoDecoder.Init(); + return _VideoDecoder.Init(); } #endregion Init #region Interface - public static void CloseAll() + public static void Close() { - _VideoDecoder.CloseAll(); + if (_VideoDecoder != null) + { + _VideoDecoder.CloseAll(); + _VideoDecoder = null; + } } public static int GetNumStreams() diff --git a/Vocaluxe/Base/CWebcam.cs b/Vocaluxe/Base/CWebcam.cs index dac871aa..0b7dcb46 100644 --- a/Vocaluxe/Base/CWebcam.cs +++ b/Vocaluxe/Base/CWebcam.cs @@ -26,8 +26,10 @@ namespace Vocaluxe.Base { private static IWebcam _Webcam; - public static void Init() + public static bool Init() { + if (_Webcam != null) + return false; switch (CConfig.WebcamLib) { case EWebcamLib.AForgeNet: @@ -38,11 +40,13 @@ namespace Vocaluxe.Base _Webcam = new CAForgeNet(); break; } - _Webcam.Init(); + if (!_Webcam.Init()) + return false; _Webcam.Select(CConfig.WebcamConfig); CConfig.WebcamConfig = _Webcam.GetConfig(); CConfig.SaveConfig(); + return true; } public static bool GetFrame(ref CTexture tex) @@ -57,7 +61,11 @@ namespace Vocaluxe.Base public static void Close() { - _Webcam.Close(); + if (_Webcam != null) + { + _Webcam.Close(); + _Webcam = null; + } } public static void Pause() diff --git a/Vocaluxe/Base/Fonts/CFonts.cs b/Vocaluxe/Base/Fonts/CFonts.cs index 8b561072..1c904e98 100644 --- a/Vocaluxe/Base/Fonts/CFonts.cs +++ b/Vocaluxe/Base/Fonts/CFonts.cs @@ -361,9 +361,9 @@ namespace Vocaluxe.Base.Fonts public static void LoadThemeFonts(string themeName, string fontFolder, CXMLReader xmlReader) { _LoadFontFiles(xmlReader, fontFolder, themeName); - CLog.StartBenchmark(1, "BuildGlyphs"); + CLog.StartBenchmark("BuildGlyphs"); _BuildGlyphs(); - CLog.StopBenchmark(1, "BuildGlyphs"); + CLog.StopBenchmark("BuildGlyphs"); } /// @@ -372,9 +372,9 @@ namespace Vocaluxe.Base.Fonts public static void LoadPartyModeFonts(int partyModeID, string fontFolder, CXMLReader xmlReader) { _LoadFontFiles(xmlReader, fontFolder, "", partyModeID); - CLog.StartBenchmark(1, "BuildGlyphs"); + CLog.StartBenchmark("BuildGlyphs"); _BuildGlyphs(); - CLog.StopBenchmark(1, "BuildGlyphs"); + CLog.StopBenchmark("BuildGlyphs"); } public static void SaveThemeFonts(string themeName, XmlWriter writer) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 154dd1db..27b693af 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -18,8 +18,9 @@ using System; using System.Collections.Generic; using System.Drawing; -using System.Linq; using System.IO; +using System.Linq; +using System.Security.Cryptography; using System.Text; using System.Windows.Forms; using ServerLib; @@ -29,16 +30,23 @@ using VocaluxeLib; using VocaluxeLib.Menu; using VocaluxeLib.Profile; using VocaluxeLib.Songs; -using System.Security.Cryptography; namespace Vocaluxe.Base.Server { static class CVocaluxeServer { + private class CServerController : CControllerFramework + { + public override string GetName() + { + return "App controller"; + } + } + private static CServer _Server; //private static CDiscover _Discover; - public static readonly CControllerFramework Controller = new CControllerFramework(); + public static readonly CControllerFramework Controller = new CServerController(); public static void Init() { @@ -69,7 +77,6 @@ namespace Vocaluxe.Base.Server CServer.AddPlaylist = _AddPlaylist; //_Discover = new CDiscover(CConfig.ServerPort, CCommands.BroadcastKeyword); - Controller.Init(); } public static void Start() @@ -83,8 +90,12 @@ namespace Vocaluxe.Base.Server public static void Close() { - _Server.Stop(); - //_Discover.Stop(); + if (_Server != null) + { + _Server.Stop(); + _Server = null; + //_Discover.Stop(); + } } public static string GetServerAddress() diff --git a/Vocaluxe/Lib/Input/IController.cs b/Vocaluxe/Lib/Input/IController.cs index 7ad6c39b..cd6bec01 100644 --- a/Vocaluxe/Lib/Input/IController.cs +++ b/Vocaluxe/Lib/Input/IController.cs @@ -32,7 +32,8 @@ namespace Vocaluxe.Lib.Input interface IController { - void Init(); + string GetName(); + bool Init(); void Close(); void Connect(); void Disconnect(); diff --git a/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs b/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs index 6aa70841..0f59ee4a 100644 --- a/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs +++ b/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs @@ -42,19 +42,28 @@ namespace Vocaluxe.Lib.Input.WiiMote private bool _Connected; private Thread _HandlerThread; + private AutoResetEvent _EvTerminate; private Object _Sync; private bool _Active; private CRumbleTimer _RumbleTimer; private CGesture _Gesture; - public void Init() + public string GetName() { + return "WiiMote"; + } + + public bool Init() + { + if (_HandlerThread != null) + return false; _Sync = new Object(); _RumbleTimer = new CRumbleTimer(); _Gesture = new CGesture(); _HandlerThread = new Thread(_MainLoop) {Name = "WiiMote", Priority = ThreadPriority.BelowNormal}; + _EvTerminate = new AutoResetEvent(false); _KeysPool = new List(); _CurrentKeysPool = new List(); @@ -64,17 +73,31 @@ namespace Vocaluxe.Lib.Input.WiiMote _ButtonStates = new bool[11]; _OldPosition = new Point(); + return true; } public void Close() { _Active = false; - _WiiMote.Disconnect(); + if (_HandlerThread != null) + { + //Join before freeing stuff + //This also ensures, that no other thread is created till the current one is terminated + _EvTerminate.Set(); + _HandlerThread.Join(); + _HandlerThread = null; + _EvTerminate.Dispose(); + _EvTerminate = null; + _KeysPool = null; + _CurrentKeysPool = null; + _MousePool = null; + _CurrentMousePool = null; + } } public void Connect() { - if (_Active) + if (_Active || _HandlerThread == null) return; _Active = true; _HandlerThread.Start(); @@ -82,7 +105,8 @@ namespace Vocaluxe.Lib.Input.WiiMote public void Disconnect() { - _Active = false; + //TODO: Allow reconnect + Close(); } public bool IsConnected() @@ -92,6 +116,8 @@ namespace Vocaluxe.Lib.Input.WiiMote public void Update() { + if (_HandlerThread == null) + return; _CopyEvents(); } @@ -137,7 +163,7 @@ namespace Vocaluxe.Lib.Input.WiiMote if (!_WiiMote.Connected) { if (!_DoConnect()) - Thread.Sleep(1000); + _EvTerminate.WaitOne(1000); } else { diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 8c9e8dec..86b5f3ee 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -15,11 +15,11 @@ // along with Vocaluxe. If not, see . #endregion -using System.Collections.ObjectModel; -using System.Threading; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.InteropServices; +using System.Threading; using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.PortAudio @@ -27,7 +27,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio class CPortAudioRecord : IRecord { private bool _Initialized; - private List _Devices; + private readonly List _Devices = new List(); private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _MyRecProc; private IntPtr[] _RecHandle; @@ -36,13 +36,9 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio public CPortAudioRecord() { - _Devices = null; - _Buffer = new CBuffer[CSettings.MaxNumPlayer]; for (int i = 0; i < _Buffer.Length; i++) _Buffer[i] = new CBuffer(); - - Init(); } /// @@ -51,8 +47,6 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio /// true if success public bool Init() { - _Devices = new List(); - try { if (_Initialized) @@ -61,9 +55,8 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio if (_ErrorCheck("Initialize", PortAudioSharp.PortAudio.Pa_Initialize())) return false; - _Initialized = true; + _Devices.Clear(); int hostAPI = _ApiSelect(); - int numDevices = PortAudioSharp.PortAudio.Pa_GetDeviceCount(); for (int i = 0; i < numDevices; i++) { @@ -76,8 +69,12 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio } } + foreach (CBuffer buffer in _Buffer) + buffer.Reset(); + _RecHandle = new IntPtr[_Devices.Count]; _MyRecProc = _MyPaStreamCallback; + _Initialized = true; } catch (Exception e) { @@ -101,6 +98,8 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio if (_RecHandle == null || _RecHandle.Length == 0) return false; + Stop(); + foreach (CBuffer buffer in _Buffer) buffer.Reset(); diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 6676cd78..8926c619 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -20,15 +20,21 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; +using System.Runtime.ExceptionServices; using System.Threading; using System.Windows.Forms; using Vocaluxe.Base; -using System.Runtime.ExceptionServices; using Vocaluxe.Base.Fonts; using Vocaluxe.Base.Server; namespace Vocaluxe { + class CLoadingException : Exception + { + public CLoadingException(string component) + : base("Failed to load " + component) {} + } + static class CMainProgram { private static CSplashScreen _SplashScreen; @@ -85,146 +91,154 @@ namespace Vocaluxe Application.DoEvents(); // Init Language - CLog.StartBenchmark(0, "Init Language"); + CLog.StartBenchmark("Init Language"); CLanguage.Init(); - CLog.StopBenchmark(0, "Init Language"); + CLog.StopBenchmark("Init Language"); Application.DoEvents(); // load config - CLog.StartBenchmark(0, "Init Config"); + CLog.StartBenchmark("Init Config"); CConfig.LoadCommandLineParams(args); CConfig.UseCommandLineParamsBefore(); CConfig.Init(); CConfig.UseCommandLineParamsAfter(); - CLog.StopBenchmark(0, "Init Config"); + CLog.StopBenchmark("Init Config"); Application.DoEvents(); _SplashScreen = new CSplashScreen(); Application.DoEvents(); // Init Draw - CLog.StartBenchmark(0, "Init Draw"); - CDraw.InitDraw(); - CLog.StopBenchmark(0, "Init Draw"); + CLog.StartBenchmark("Init Draw"); + if (!CDraw.InitDraw()) + throw new CLoadingException("drawing"); + CLog.StopBenchmark("Init Draw"); Application.DoEvents(); // Init Database - CLog.StartBenchmark(0, "Init Database"); - CDataBase.Init(); - CLog.StopBenchmark(0, "Init Database"); + CLog.StartBenchmark("Init Database"); + if (!CDataBase.Init()) + throw new CLoadingException("database"); + CLog.StopBenchmark("Init Database"); Application.DoEvents(); // Init Playback - CLog.StartBenchmark(0, "Init Playback"); - CSound.Init(); - CLog.StopBenchmark(0, "Init Playback"); + CLog.StartBenchmark("Init Playback"); + if (!CSound.Init()) + throw new CLoadingException("playback"); + CLog.StopBenchmark("Init Playback"); Application.DoEvents(); // Init Record - CLog.StartBenchmark(0, "Init Record"); - CRecord.Init(); - CLog.StopBenchmark(0, "Init Record"); + CLog.StartBenchmark("Init Record"); + if (!CRecord.Init()) + throw new CLoadingException("record"); + CLog.StopBenchmark("Init Record"); Application.DoEvents(); //Init Webcam - CLog.StartBenchmark(0, "Init Webcam"); - CWebcam.Init(); - CLog.StopBenchmark(0, "Init Webcam"); + CLog.StartBenchmark("Init Webcam"); + if (!CWebcam.Init()) + throw new CLoadingException("webcam"); + CLog.StopBenchmark("Init Webcam"); Application.DoEvents(); // Init Background Music - CLog.StartBenchmark(0, "Init Background Music"); + CLog.StartBenchmark("Init Background Music"); CBackgroundMusic.Init(); - CLog.StopBenchmark(0, "Init Background Music"); + CLog.StopBenchmark("Init Background Music"); Application.DoEvents(); // Init Profiles - CLog.StartBenchmark(0, "Init Profiles"); + CLog.StartBenchmark("Init Profiles"); CProfiles.Init(); - CLog.StopBenchmark(0, "Init Profiles"); + CLog.StopBenchmark("Init Profiles"); Application.DoEvents(); // Init Font - CLog.StartBenchmark(0, "Init Font"); + CLog.StartBenchmark("Init Font"); CFonts.Init(); - CLog.StopBenchmark(0, "Init Font"); + CLog.StopBenchmark("Init Font"); Application.DoEvents(); // Init VideoDecoder - CLog.StartBenchmark(0, "Init Videodecoder"); - CVideo.Init(); - CLog.StopBenchmark(0, "Init Videodecoder"); + CLog.StartBenchmark("Init Videodecoder"); + if (!CVideo.Init()) + throw new CLoadingException("video"); + CLog.StopBenchmark("Init Videodecoder"); Application.DoEvents(); // Load Cover - CLog.StartBenchmark(0, "Init Cover"); + CLog.StartBenchmark("Init Cover"); CCover.Init(); - CLog.StopBenchmark(0, "Init Cover"); + CLog.StopBenchmark("Init Cover"); Application.DoEvents(); // Theme System - CLog.StartBenchmark(0, "Init Theme"); - CTheme.InitTheme(); - CLog.StopBenchmark(0, "Init Theme"); + CLog.StartBenchmark("Init Theme"); + if (!CTheme.Init()) + throw new CLoadingException("theme"); + CLog.StopBenchmark("Init Theme"); Application.DoEvents(); // Init Screens - CLog.StartBenchmark(0, "Init Screens"); - CGraphics.InitGraphics(); - CLog.StopBenchmark(0, "Init Screens"); + CLog.StartBenchmark("Init Screens"); + CGraphics.Init(); + CLog.StopBenchmark("Init Screens"); Application.DoEvents(); // Init Server - CLog.StartBenchmark(0, "Init Server"); + CLog.StartBenchmark("Init Server"); CVocaluxeServer.Init(); - CLog.StopBenchmark(0, "Init Server"); + CLog.StopBenchmark("Init Server"); Application.DoEvents(); // Init Input - CLog.StartBenchmark(0, "Init Input"); + CLog.StartBenchmark("Init Input"); CController.Init(); CController.Connect(); - CLog.StopBenchmark(0, "Init Input"); + CLog.StopBenchmark("Init Input"); Application.DoEvents(); // Init Game; - CLog.StartBenchmark(0, "Init Game"); + CLog.StartBenchmark("Init Game"); CGame.Init(); CProfiles.Update(); CConfig.UsePlayers(); - CLog.StopBenchmark(0, "Init Game"); + CLog.StopBenchmark("Init Game"); Application.DoEvents(); // Init Party Modes; - CLog.StartBenchmark(0, "Init Party Modes"); + CLog.StartBenchmark("Init Party Modes"); CParty.Init(); - CLog.StopBenchmark(0, "Init Party Modes"); + CLog.StopBenchmark("Init Party Modes"); Application.DoEvents(); } catch (Exception e) { - MessageBox.Show("Error on start up: " + e.Message + e.StackTrace); + MessageBox.Show("Error on start up: " + e.Message); CLog.LogError("Error on start up: " + e); if (_SplashScreen != null) _SplashScreen.Close(); _CloseProgram(); + return; } Application.DoEvents(); @@ -244,10 +258,10 @@ namespace Vocaluxe CVocaluxeServer.Close(); CController.Close(); CRecord.Close(); - CSound.CloseAllStreams(); - CVideo.CloseAll(); + CSound.Close(); + CVideo.Close(); CDraw.Unload(); - CDataBase.CloseConnections(); + CDataBase.Close(); CWebcam.Close(); CLog.CloseAll(); } diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 4b6cf767..0132a3af 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -129,7 +129,7 @@ namespace Vocaluxe.Screens videoPlayer.PreLoad(); } - CLog.StartBenchmark(0, "Load Songs Full"); + CLog.StartBenchmark("Load Songs Full"); _SongLoaderThread.IsBackground = true; _SongLoaderThread.Start(); @@ -198,12 +198,12 @@ namespace Vocaluxe.Screens CBackgroundMusic.CanSing = true; - CLog.StopBenchmark(0, "Load Songs Full"); + CLog.StopBenchmark("Load Songs Full"); //Init Playlists - CLog.StartBenchmark(0, "Init Playlists"); + CLog.StartBenchmark("Init Playlists"); CPlaylists.Init(); - CLog.StopBenchmark(0, "Init Playlists"); + CLog.StopBenchmark("Init Playlists"); } private void _CheckStartIntroVideos() From 917ff901a9c4ad370a607b6a8af6f61bb8284564 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:09:03 +0100 Subject: [PATCH 017/116] Fix wrong error message and check init of highscore DB --- Vocaluxe/Base/CDataBase.cs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 3afcfc55..7c76097c 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -18,13 +18,17 @@ using System; using System.Collections.Generic; using System.Data; +using System.Data.SQLite; using System.Drawing; using System.Drawing.Imaging; -using System.Runtime.InteropServices; using System.IO; +using System.Runtime.InteropServices; using System.Text; +using Community.CsharpSqlite; +using VocaluxeLib; +using VocaluxeLib.Draw; +using VocaluxeLib.Songs; #if WIN -using System.Data.SQLite; #else using Mono.Data.Sqlite; using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection; @@ -32,10 +36,6 @@ using SQLiteTransaction = Mono.Data.Sqlite.SqliteTransaction; using SQLiteCommand = Mono.Data.Sqlite.SqliteCommand; using SQLiteDataReader = Mono.Data.Sqlite.SqliteDataReader; #endif -using Community.CsharpSqlite; -using VocaluxeLib; -using VocaluxeLib.Songs; -using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -62,7 +62,11 @@ namespace Vocaluxe.Base _CoverFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB); _CreditsRessourcesFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCreditsRessourcesDB); - _InitHighscoreDB(); + if (!_InitHighscoreDB()) + { + CLog.LogError("Error initializing Highscore-DB", true, true); + return false; + } if (!_InitCoverDB()) { CLog.LogError("Error initializing Cover-DB", true, true); @@ -70,7 +74,7 @@ namespace Vocaluxe.Base } if (!_InitCreditsRessourcesDB()) { - CLog.LogError("Error initializing Cover-DB", true, true); + CLog.LogError("Error initializing Credits-DB", true, true); return false; } GC.Collect(); From c99818ea9978a3f7d766ee7bb0b3bb71586b36cd Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:24:45 +0100 Subject: [PATCH 018/116] Make unimplemented methods of CControllerFramework abstract Use the class in WiiMote instead of reimplementing it --- Vocaluxe/Base/Server/CVocaluxeServer.cs | 11 ++ Vocaluxe/Lib/Input/CControllerFramework.cs | 11 +- Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs | 115 +++------------------ 3 files changed, 28 insertions(+), 109 deletions(-) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 27b693af..1b290be4 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -41,6 +41,17 @@ namespace Vocaluxe.Base.Server { return "App controller"; } + + public override void Connect() {} + + public override void Disconnect() {} + + public override bool IsConnected() + { + return true; + } + + public override void SetRumble(float duration) {} } private static CServer _Server; diff --git a/Vocaluxe/Lib/Input/CControllerFramework.cs b/Vocaluxe/Lib/Input/CControllerFramework.cs index 74d96679..2ac282d1 100644 --- a/Vocaluxe/Lib/Input/CControllerFramework.cs +++ b/Vocaluxe/Lib/Input/CControllerFramework.cs @@ -54,14 +54,11 @@ namespace Vocaluxe.Lib.Input _Initialized = false; } - public virtual void Connect() {} + public abstract void Connect(); - public virtual void Disconnect() {} + public abstract void Disconnect(); - public virtual bool IsConnected() - { - return true; - } + public abstract bool IsConnected(); public virtual void Update() { @@ -108,7 +105,7 @@ namespace Vocaluxe.Lib.Input return false; } - public virtual void SetRumble(float duration) {} + public abstract void SetRumble(float duration); public void AddKeyEvent(SKeyEvent keyEvent) { diff --git a/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs b/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs index 0f59ee4a..fc29b7dc 100644 --- a/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs +++ b/Vocaluxe/Lib/Input/WiiMote/CWiiMote.cs @@ -16,7 +16,6 @@ #endregion using System; -using System.Collections.Generic; using System.Drawing; using System.Threading; using System.Windows.Forms; @@ -25,18 +24,10 @@ using VocaluxeLib; namespace Vocaluxe.Lib.Input.WiiMote { - class CWiiMote : IController + class CWiiMote : CControllerFramework { private CWiiMoteLib _WiiMote; - private List _KeysPool; - private List _CurrentKeysPool; - private readonly Object _KeyCopyLock = new Object(); - - private List _MousePool; - private List _CurrentMousePool; - private readonly Object _MouseCopyLock = new Object(); - private bool[] _ButtonStates; private Point _OldPosition; private bool _Connected; @@ -49,14 +40,14 @@ namespace Vocaluxe.Lib.Input.WiiMote private CGesture _Gesture; - public string GetName() + public override string GetName() { return "WiiMote"; } - public bool Init() + public override bool Init() { - if (_HandlerThread != null) + if (!base.Init()) return false; _Sync = new Object(); _RumbleTimer = new CRumbleTimer(); @@ -65,18 +56,12 @@ namespace Vocaluxe.Lib.Input.WiiMote _HandlerThread = new Thread(_MainLoop) {Name = "WiiMote", Priority = ThreadPriority.BelowNormal}; _EvTerminate = new AutoResetEvent(false); - _KeysPool = new List(); - _CurrentKeysPool = new List(); - - _MousePool = new List(); - _CurrentMousePool = new List(); - _ButtonStates = new bool[11]; _OldPosition = new Point(); return true; } - public void Close() + public override void Close() { _Active = false; if (_HandlerThread != null) @@ -88,14 +73,11 @@ namespace Vocaluxe.Lib.Input.WiiMote _HandlerThread = null; _EvTerminate.Dispose(); _EvTerminate = null; - _KeysPool = null; - _CurrentKeysPool = null; - _MousePool = null; - _CurrentMousePool = null; } + base.Close(); } - public void Connect() + public override void Connect() { if (_Active || _HandlerThread == null) return; @@ -103,47 +85,18 @@ namespace Vocaluxe.Lib.Input.WiiMote _HandlerThread.Start(); } - public void Disconnect() + public override void Disconnect() { //TODO: Allow reconnect Close(); } - public bool IsConnected() + public override bool IsConnected() { return _Connected; } - public void Update() - { - if (_HandlerThread == null) - return; - _CopyEvents(); - } - - public bool PollKeyEvent(ref SKeyEvent keyEvent) - { - if (_CurrentKeysPool.Count > 0) - { - keyEvent = _CurrentKeysPool[0]; - _CurrentKeysPool.RemoveAt(0); - return true; - } - return false; - } - - public bool PollMouseEvent(ref SMouseEvent mouseEvent) - { - if (_CurrentMousePool.Count > 0) - { - mouseEvent = _CurrentMousePool[0]; - _CurrentMousePool.RemoveAt(0); - return true; - } - return false; - } - - public void SetRumble(float duration) + public override void SetRumble(float duration) { lock (_Sync) { @@ -269,14 +222,7 @@ namespace Vocaluxe.Lib.Input.WiiMote if (key != Keys.None) - { - var pool = new SKeyEvent(ESender.WiiMote, false, false, false, false, char.MinValue, key); - - lock (_KeyCopyLock) - { - _KeysPool.Add(pool); - } - } + AddKeyEvent(new SKeyEvent(ESender.WiiMote, false, false, false, false, char.MinValue, key)); //mouse events const float reducing = 0.15f; @@ -296,48 +242,13 @@ namespace Vocaluxe.Lib.Input.WiiMote if (gesture == EGesture.ScrollDown) wheel = 1; - var mpool = new SMouseEvent(); - bool trigger = false; - if (!lb && !rb && (p.X != _OldPosition.X || p.Y != _OldPosition.Y)) - { - mpool = new SMouseEvent(ESender.WiiMote, EModifier.None, x, y, false, false, false, wheel, lbh, false, false, false); - trigger = true; - } + AddMouseEvent(new SMouseEvent(ESender.WiiMote, EModifier.None, x, y, false, false, false, wheel, lbh, false, false, false)); else if (lb || rb) - { - mpool = new SMouseEvent(ESender.WiiMote, EModifier.None, x, y, lb, false, rb, wheel, false, false, false, false); - trigger = true; - } - - - if (trigger) - { - lock (_MouseCopyLock) - { - _MousePool.Add(mpool); - } - } + AddMouseEvent(new SMouseEvent(ESender.WiiMote, EModifier.None, x, y, lb, false, rb, wheel, false, false, false, false)); _OldPosition.X = p.X; _OldPosition.Y = p.Y; } - - private void _CopyEvents() - { - lock (_KeyCopyLock) - { - foreach (SKeyEvent e in _KeysPool) - _CurrentKeysPool.Add(e); - _KeysPool.Clear(); - } - - lock (_MouseCopyLock) - { - foreach (SMouseEvent e in _MousePool) - _CurrentMousePool.Add(e); - _MousePool.Clear(); - } - } } } \ No newline at end of file From e1f4b93d03c04f45db21cbc35a4473b834c73ac0 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:27:37 +0100 Subject: [PATCH 019/116] Make chars explicit --- Vocaluxe/Base/Server/CVocaluxeServer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 1b290be4..bdee6dc2 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -170,7 +170,7 @@ namespace Vocaluxe.Base.Server else keyChar = c; - if ((keyChar >= 0x30 && keyChar <= 0x39) || (keyChar >= 0x41 && keyChar <= 0x5A)) + if ((keyChar >= '0' && keyChar <= '9') || (keyChar >= 'A' && keyChar <= 'Z')) { Keys keys = (Keys)keyChar; if (shift) From 542c8a5b37f06436643fc19c6a0b9b6aebb2420b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:41:52 +0100 Subject: [PATCH 020/116] Make cover loading thread save (Just DB part!!!) --- Vocaluxe/Base/CDataBase.cs | 216 ++++++++++++++++++++----------------- 1 file changed, 117 insertions(+), 99 deletions(-) diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 7c76097c..b6592296 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -53,6 +53,8 @@ namespace Vocaluxe.Base private static string _CoverFilePath; private static string _CreditsRessourcesFilePath; + //You have to lock all actions using cover connection or transaction, otherwhise order is not guaranted + private static readonly object _CoverMutex = new object(); private static SQLiteConnection _ConnectionCover; private static SQLiteTransaction _TransactionCover; @@ -77,7 +79,6 @@ namespace Vocaluxe.Base CLog.LogError("Error initializing Credits-DB", true, true); return false; } - GC.Collect(); return true; } @@ -1059,133 +1060,150 @@ namespace Vocaluxe.Base return false; } - if (_ConnectionCover == null) + lock (_CoverMutex) { - _ConnectionCover = new SQLiteConnection {ConnectionString = "Data Source=" + _CoverFilePath}; - _ConnectionCover.Open(); - } - - using (var command = new SQLiteCommand(_ConnectionCover)) - { - command.CommandText = "SELECT id, width, height FROM Cover WHERE [Path] = @path"; - command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; - - SQLiteDataReader reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) + if (_ConnectionCover == null) { - reader.Read(); - int id = reader.GetInt32(0); - int w = reader.GetInt32(1); - int h = reader.GetInt32(2); - reader.Close(); - - command.CommandText = "SELECT Data FROM CoverData WHERE CoverID = @id"; - command.Parameters.Add("@id", DbType.Int32).Value = id; - reader = command.ExecuteReader(); - - if (reader.HasRows) - { - reader.Read(); - byte[] data = _GetBytes(reader); - reader.Dispose(); - tex = CDraw.EnqueueTexture(w, h, data); - return true; - } + _ConnectionCover = new SQLiteConnection {ConnectionString = "Data Source=" + _CoverFilePath}; + _ConnectionCover.Open(); } - else + + using (var command = new SQLiteCommand(_ConnectionCover)) { - if (reader != null) - reader.Close(); - - if (_TransactionCover == null) - _TransactionCover = _ConnectionCover.BeginTransaction(); - - Bitmap origin; - try - { - origin = new Bitmap(coverPath); - } - catch (Exception) - { - CLog.LogError("Error loading Texture: " + coverPath); - return false; - } - - int w = maxSize; - int h = maxSize; - byte[] data; - - try - { - if (origin.Width >= origin.Height && origin.Width > w) - h = (int)Math.Round((float)w / origin.Width * origin.Height); - else if (origin.Height > origin.Width && origin.Height > h) - w = (int)Math.Round((float)h / origin.Height * origin.Width); - - using (var bmp = new Bitmap(w, h)) - { - using (Graphics g = Graphics.FromImage(bmp)) - g.DrawImage(origin, new Rectangle(0, 0, w, h)); - - data = new byte[w * h * 4]; - BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(bmpData.Scan0, data, 0, w * h * 4); - bmp.UnlockBits(bmpData); - } - } - finally - { - origin.Dispose(); - } - - tex = CDraw.EnqueueTexture(w, h, data); - - command.CommandText = "INSERT INTO Cover (Path, width, height) VALUES (@path, @w, @h)"; - command.Parameters.Add("@w", DbType.Int32).Value = w; - command.Parameters.Add("@h", DbType.Int32).Value = h; + command.CommandText = "SELECT id, width, height FROM Cover WHERE [Path] = @path"; command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; - command.ExecuteNonQuery(); - command.CommandText = "SELECT id FROM Cover WHERE [Path] = @path"; - command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; - reader = command.ExecuteReader(); + SQLiteDataReader reader = command.ExecuteReader(); - if (reader != null) + if (reader != null && reader.HasRows) { reader.Read(); int id = reader.GetInt32(0); - reader.Dispose(); - command.CommandText = "INSERT INTO CoverData (CoverID, Data) VALUES (@id, @data)"; + int w = reader.GetInt32(1); + int h = reader.GetInt32(2); + reader.Close(); + + command.CommandText = "SELECT Data FROM CoverData WHERE CoverID = @id"; command.Parameters.Add("@id", DbType.Int32).Value = id; - command.Parameters.Add("@data", DbType.Binary, 20).Value = data; - command.ExecuteReader(); - return true; + reader = command.ExecuteReader(); + + if (reader.HasRows) + { + reader.Read(); + byte[] data = _GetBytes(reader); + reader.Dispose(); + tex = CDraw.EnqueueTexture(w, h, data); + return true; + } + } + else + { + if (reader != null) + reader.Close(); + + if (_TransactionCover == null) + _TransactionCover = _ConnectionCover.BeginTransaction(); + + Bitmap origin; + try + { + origin = new Bitmap(coverPath); + } + catch (Exception) + { + CLog.LogError("Error loading Texture: " + coverPath); + return false; + } + + int w = maxSize; + int h = maxSize; + byte[] data; + + try + { + if (origin.Width >= origin.Height && origin.Width > w) + h = (int)Math.Round((float)w / origin.Width * origin.Height); + else if (origin.Height > origin.Width && origin.Height > h) + w = (int)Math.Round((float)h / origin.Height * origin.Width); + + using (var bmp = new Bitmap(w, h)) + { + using (Graphics g = Graphics.FromImage(bmp)) + g.DrawImage(origin, new Rectangle(0, 0, w, h)); + + data = new byte[w * h * 4]; + BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); + Marshal.Copy(bmpData.Scan0, data, 0, w * h * 4); + bmp.UnlockBits(bmpData); + } + } + finally + { + origin.Dispose(); + } + + tex = CDraw.EnqueueTexture(w, h, data); + + command.CommandText = "INSERT INTO Cover (Path, width, height) VALUES (@path, @w, @h)"; + command.Parameters.Add("@w", DbType.Int32).Value = w; + command.Parameters.Add("@h", DbType.Int32).Value = h; + command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; + command.ExecuteNonQuery(); + + command.CommandText = "SELECT id FROM Cover WHERE [Path] = @path"; + command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; + reader = command.ExecuteReader(); + + if (reader != null) + { + reader.Read(); + int id = reader.GetInt32(0); + reader.Dispose(); + command.CommandText = "INSERT INTO CoverData (CoverID, Data) VALUES (@id, @data)"; + command.Parameters.Add("@id", DbType.Int32).Value = id; + command.Parameters.Add("@data", DbType.Binary, 20).Value = data; + command.ExecuteReader(); + return true; + } } } } - return false; } public static void CommitCovers() + { + lock (_CoverMutex) + { + _CommitCovers(); + } + } + + /// + /// You have to hold the CoverMutex when calling this! + /// + private static void _CommitCovers() { if (_TransactionCover != null) { _TransactionCover.Commit(); + _TransactionCover.Dispose(); _TransactionCover = null; - GC.Collect(); } } public static void Close() { - CommitCovers(); - - if (_ConnectionCover != null) + //Do commit and close atomicly otherwhise we may loose changes + lock (_CoverMutex) { - _ConnectionCover.Dispose(); - _ConnectionCover = null; + CommitCovers(); + + if (_ConnectionCover != null) + { + _ConnectionCover.Dispose(); + _ConnectionCover = null; + } } } From 8ea9698e2df988729ae1a427f16bd1eaf4dffeb1 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:44:34 +0100 Subject: [PATCH 021/116] Remove GC.Collect() calls and replace by only one (see comment) --- Vocaluxe/Base/CSongs.cs | 2 -- Vocaluxe/Program.cs | 3 +++ Vocaluxe/Screens/CScreenSing.cs | 2 -- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index f66d5b75..8afaaf9f 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -374,7 +374,6 @@ namespace Vocaluxe.Base CLog.StopBenchmark("Load Covers/Notes"); } CLog.StopBenchmark("Load Songs "); - GC.Collect(); } public static void LoadCover() @@ -419,7 +418,6 @@ namespace Vocaluxe.Base song.LoadSmallCover(); NumSongsWithCoverLoaded++; } - GC.Collect(); _CoverLoaded = true; CDataBase.CommitCovers(); } diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 8926c619..a90b96bd 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -230,6 +230,9 @@ namespace Vocaluxe CLog.StopBenchmark("Init Party Modes"); Application.DoEvents(); + //Only reasonable point to call GC.Collect() because initialization may cause lots of garbage + //Rely on GC doing its job afterwards and call Dispose methods where appropriate + GC.Collect(); } catch (Exception e) { diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 9b58c99a..32e0442e 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -577,7 +577,6 @@ namespace Vocaluxe.Screens _Texts[_TextSongName].Text = String.Empty; _Texts[_TextDuetName1].Text = String.Empty; _Texts[_TextDuetName2].Text = String.Empty; - GC.Collect(); } private void _LoadNextSong() @@ -639,7 +638,6 @@ namespace Vocaluxe.Screens _SlideShow = GetNewBackground(); foreach (string bgFile in song.BackgroundFileNames) _SlideShow.AddSlideShowTexture(Path.Combine(song.Folder, bgFile)); - _Background = null; } else if (song.BackgroundFileNames.Count == 1) { From 658a3068b09d59d3207ce74cc2bd2c1aa1387e0b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 18:58:01 +0100 Subject: [PATCH 022/116] Add helper function for listing image files (common task) --- Vocaluxe/Base/CCover.cs | 6 +----- Vocaluxe/Base/CProfiles.cs | 9 ++------- VocaluxeLib/CHelper.cs | 31 ++++++++++++++++++++++++++++--- VocaluxeLib/Songs/CSong.cs | 10 ++-------- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index 241ec0d8..fddf06d2 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -175,13 +175,9 @@ namespace Vocaluxe.Base return; var ignoreList = new List(); - var files = new List(); string coverPath = Path.Combine(CSettings.FolderCover, coverTheme.Folder); - files.AddRange(CHelper.ListFiles(coverPath, "*.png", true, true)); - files.AddRange(CHelper.ListFiles(coverPath, "*.jpg", true, true)); - files.AddRange(CHelper.ListFiles(coverPath, "*.jpeg", true, true)); - files.AddRange(CHelper.ListFiles(coverPath, "*.bmp", true, true)); + List files = CHelper.ListImageFiles(coverPath, true, true); CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderCover, coverTheme.File)); lock (_Covers) diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index b4f4ae50..124cebdd 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; using System.IO; using VocaluxeLib; -using VocaluxeLib.Profile; using VocaluxeLib.Draw; +using VocaluxeLib.Profile; namespace Vocaluxe.Base { @@ -578,12 +578,7 @@ namespace Vocaluxe.Base var files = new List(); foreach (string path in CSettings.FoldersProfiles) - { - files.AddRange(CHelper.ListFiles(path, "*.png", true, true)); - files.AddRange(CHelper.ListFiles(path, "*.jpg", true, true)); - files.AddRange(CHelper.ListFiles(path, "*.jpeg", true, true)); - files.AddRange(CHelper.ListFiles(path, "*.bmp", true, true)); - } + files.AddRange(CHelper.ListImageFiles(path, true, true)); foreach (string file in files) { diff --git a/VocaluxeLib/CHelper.cs b/VocaluxeLib/CHelper.cs index a03b1ad9..b10cdb74 100644 --- a/VocaluxeLib/CHelper.cs +++ b/VocaluxeLib/CHelper.cs @@ -145,7 +145,15 @@ namespace VocaluxeLib rect = new RectangleF(left, upper, scaledWidth, scaledHeight); } - public static List ListFiles(string path, string cast, bool recursive = false, bool fullpath = false) + /// + /// Returns a list with all files in the given path that match a given pattern + /// + /// Path to search for + /// Pattern to match (e.g. "*.jpg") + /// Search directories recursively + /// False for just file names, True for full path + /// List of file names + public static List ListFiles(string path, string searchPattern, bool recursive = false, bool fullpath = false) { var files = new List(); var dir = new DirectoryInfo(path); @@ -155,14 +163,14 @@ namespace VocaluxeLib try { // ReSharper disable LoopCanBeConvertedToQuery - foreach (FileInfo file in dir.GetFiles(cast)) + foreach (FileInfo file in dir.GetFiles(searchPattern)) // ReSharper restore LoopCanBeConvertedToQuery files.Add(!fullpath ? file.Name : file.FullName); if (recursive) { foreach (DirectoryInfo di in dir.GetDirectories()) - files.AddRange(ListFiles(di.FullName, cast, true, fullpath)); + files.AddRange(ListFiles(di.FullName, searchPattern, true, fullpath)); } } catch (Exception) {} @@ -170,6 +178,23 @@ namespace VocaluxeLib return files; } + /// + /// Returns a list with all image files in the given path + /// Searches for: jpg, jpeg, png, gif + /// + /// Path to search for + /// Search directories recursively + /// False for just file names, True for full path + /// List of image file names + public static List ListImageFiles(string path, bool recursive = false, bool fullpath = false) + { + List files = ListFiles(path, "*.jpg", recursive, fullpath); + files.AddRange(ListFiles(path, "*.jpeg", recursive, fullpath)); + files.AddRange(ListFiles(path, "*.png", recursive, fullpath)); + files.AddRange(ListFiles(path, "*.gif", recursive, fullpath)); + return files; + } + public static bool TryParse(string value, out T result, bool ignoreCase = false) where T : struct { diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs index c16c1874..a1c4ad33 100644 --- a/VocaluxeLib/Songs/CSong.cs +++ b/VocaluxeLib/Songs/CSong.cs @@ -318,10 +318,7 @@ namespace VocaluxeLib.Songs { if (CoverFileName == "") { - List files = CHelper.ListFiles(Folder, "*.jpg"); - files.AddRange(CHelper.ListFiles(Folder, "*.jpeg")); - files.AddRange(CHelper.ListFiles(Folder, "*.png")); - files.AddRange(CHelper.ListFiles(Folder, "*.gif")); + List files = CHelper.ListImageFiles(Folder); foreach (String file in files) { if (file.ContainsIgnoreCase("[CO]") && @@ -332,10 +329,7 @@ namespace VocaluxeLib.Songs if (BackgroundFileNames.Count == 0) { - List files = CHelper.ListFiles(Folder, "*.jpg"); - files.AddRange(CHelper.ListFiles(Folder, "*.jpeg")); - files.AddRange(CHelper.ListFiles(Folder, "*.png")); - files.AddRange(CHelper.ListFiles(Folder, "*.gif")); + List files = CHelper.ListImageFiles(Folder); foreach (String file in files) { if (file.ContainsIgnoreCase("[BG]") && From 374d075bf660ee3457896b09dba15875fdb8e1c2 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 16 Mar 2014 19:44:25 +0100 Subject: [PATCH 023/116] Fix volume setting --- .../CGstreamerSharpAudioStream.cs | 19 +++++-- .../Sound/Playback/OpenAL/COpenAlStream.cs | 54 +++++-------------- .../Playback/PortAudio/CPortAudioStream.cs | 46 ++++------------ 3 files changed, 37 insertions(+), 82 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index 525061ac..bbcbd725 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -148,7 +148,8 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp public void Fade(float targetVolume, float seconds) { - _Fading = new CFading(_Volume, targetVolume, seconds); + targetVolume.Clamp(0f, 100f); + _Fading = new CFading(_Volume, targetVolume / 100f, seconds); _AfterFadeAction = EStreamAction.Nothing; } @@ -175,19 +176,26 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp get { return _Volume * 100f; } set { + value.Clamp(0f, 100f); _Volume = value / 100f; - if (_Element != null) - _Element["volume"] = (_Volume * _MaxVolume); + _SetElementVolume(); } } + private void _SetElementVolume() + { + if (_Element != null) + _Element["volume"] = (_Volume * _MaxVolume); + } + public float MaxVolume { get { return _MaxVolume * 100f; } set { + value.Clamp(0f, 100f); _MaxVolume = value / 100f; - Volume = _Volume; + _SetElementVolume(); } } @@ -251,7 +259,8 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp if (_Fading != null) { bool finished; - Volume = _Fading.GetValue(out finished); + _Volume = _Fading.GetValue(out finished); + _SetElementVolume(); if (finished) { switch (_AfterFadeAction) diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs index 16fac938..f3742b7d 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -57,19 +57,13 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL private bool _SetSkip; private bool _Terminated; - private readonly Thread _DecoderThread; + private Thread _DecoderThread; private AutoResetEvent _EventDecode = new AutoResetEvent(false); private readonly Object _MutexData = new Object(); private readonly Object _MutexSyncSignals = new Object(); - public COpenAlStream() - { - _Initialized = false; - _DecoderThread = new Thread(_Execute) {Name = "OpenAL Decode"}; - } - public void Free(Closeproc closeProc, int streamID, Object closeMutex) { _Closeproc = closeProc; @@ -107,12 +101,8 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { lock (_MutexData) { + value.Clamp(0f, 100f); _Volume = value / 100f; - if (_Volume < 0f) - _Volume = 0f; - - if (_Volume > 1f) - _Volume = 1f; } } } @@ -124,12 +114,8 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { lock (_MutexData) { + value.Clamp(0f, 100f); _VolumeMax = value / 100f; - if (_VolumeMax < 0f) - _VolumeMax = 0f; - - if (_VolumeMax > 1f) - _VolumeMax = 1f; } } } @@ -170,7 +156,8 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL public void Fade(float targetVolume, float fadeTime) { - _Fading = new CFading(_Volume, targetVolume, fadeTime); + targetVolume.Clamp(0f, 100f); + _Fading = new CFading(_Volume, targetVolume / 100f, fadeTime); _AfterFadeAction = EStreamAction.Nothing; } @@ -251,8 +238,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL _FileOpened = true; _Data = new CRingBuffer(_Bufsize); _NoMoreData = false; - _DecoderThread.Priority = ThreadPriority.Normal; - _DecoderThread.Name = Path.GetFileName(fileName); + _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(fileName)}; _DecoderThread.Start(); return stream.Handle; @@ -428,7 +414,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { AL.GetSource(_Source, ALGetSourcei.BuffersProcessed, out processedCount); doit = false; - Console.WriteLine("Buffers Processed on Stream " + _Source + " = " + processedCount); + //Console.WriteLine("Buffers Processed on Stream " + _Source + " = " + processedCount); if (processedCount < 1) return; } @@ -443,29 +429,15 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { _Data.Read(buf); - - var b = new byte[2]; - for (int i = 0; i < buf.Length; i += _ByteCount) + //We want to scale all values. No matter how many channels we have (_ByteCount=2 or 4) we have short values + //So just process 2 bytes a time + for (int i = 0; i < buf.Length; i += 2) { - b[0] = buf[i]; - b[1] = buf[i + 1]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); + byte[] b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(buf, i) * _Volume * _VolumeMax)); buf[i] = b[0]; buf[i + 1] = b[1]; - - if (_ByteCount == 4) - { - b[0] = buf[i + 2]; - b[1] = buf[i + 3]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); - buf[i + 2] = b[0]; - buf[i + 3] = b[1]; - } } - int buffer; if (!doit) buffer = AL.SourceUnqueueBuffer(_Source); @@ -479,7 +451,6 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { ALFormat alFormat = (_Format.ChannelCount == 2) ? ALFormat.Stereo16 : ALFormat.Mono16; AL.BufferData(buffer, alFormat, buf, buf.Length, _Format.SamplesPerSecond); - Console.WriteLine("Write to Buffer: " + buffer); AL.SourceQueueBuffer(_Source, buffer); } } @@ -491,8 +462,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL } _CurrentTime = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - 0.1f; - _Timer.Reset(); - _Timer.Start(); + _Timer.Restart(); } public void Dispose() diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 48ee8776..d4cb57c5 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -54,7 +54,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private bool _SetSkip; private bool _Terminated; - private readonly Thread _DecoderThread; + private Thread _DecoderThread; private AutoResetEvent _EventDecode = new AutoResetEvent(false); @@ -64,7 +64,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public CPortAudioStream() { _SyncTimer = new CSyncTimer(0f, 1f, 0.02f); - _DecoderThread = new Thread(_Execute) {Name = "PortAudio Decode"}; } ~CPortAudioStream() @@ -108,12 +107,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { lock (_LockData) { + value.Clamp(0f, 100f); _Volume = value / 100f; - if (_Volume < 0f) - _Volume = 0f; - - if (_Volume > 1f) - _Volume = 1f; } } } @@ -125,12 +120,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { lock (_LockData) { + value.Clamp(0f, 100f); _VolumeMax = value / 100f; - if (_VolumeMax < 0f) - _VolumeMax = 0f; - - if (_VolumeMax > 1f) - _VolumeMax = 1f; } } } @@ -170,13 +161,15 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public void Fade(float targetVolume, float fadeTime) { - _Fading = new CFading(_Volume, targetVolume, fadeTime); + targetVolume = targetVolume.Clamp(0f, 100f); + _Fading = new CFading(_Volume, targetVolume / 100f, fadeTime); _AfterFadeAction = EStreamAction.Nothing; } public void FadeAndPause(float targetVolume, float fadeTime) { Fade(targetVolume, fadeTime); + _AfterFadeAction = EStreamAction.Pause; } public void FadeAndClose(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) @@ -228,9 +221,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (!File.Exists(fileName)) return -1; - if (_FileOpened) - return -1; - _Decoder = new CAudioDecoderFFmpeg(); _Decoder.Init(); @@ -310,8 +300,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _FileOpened = true; _Data = new CRingBuffer(_Bufsize); _NoMoreData = false; - _DecoderThread.Priority = ThreadPriority.Normal; - _DecoderThread.Name = Path.GetFileName(fileName); + _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(fileName)}; _DecoderThread.Start(); return stream.Handle; @@ -490,26 +479,13 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (_NoMoreData || _Data.BytesNotRead >= buf.Length) { _Data.Read(buf); - - var b = new byte[2]; - for (int i = 0; i < buf.Length; i += _ByteCount) + //We want to scale all values. No matter how many channels we have (_ByteCount=2 or 4) we have short values + //So just process 2 bytes a time + for (int i = 0; i < buf.Length; i += 2) { - b[0] = buf[i]; - b[1] = buf[i + 1]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); + byte[] b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(buf, i) * _Volume * _VolumeMax)); buf[i] = b[0]; buf[i + 1] = b[1]; - - if (_ByteCount == 4) - { - b[0] = buf[i + 2]; - b[1] = buf[i + 3]; - - b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(b, 0) * _Volume * _VolumeMax)); - buf[i + 2] = b[0]; - buf[i + 3] = b[1]; - } } } From 65d029e3330d992cfaf8969bc7222a85b020ef40 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 17 Mar 2014 22:46:34 +0100 Subject: [PATCH 024/116] Resharper messed up (conditional) imports --- Vocaluxe.sln.DotSettings | 2 +- Vocaluxe/Base/CDataBase.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Vocaluxe.sln.DotSettings b/Vocaluxe.sln.DotSettings index 5ca67d0b..0a1c7cf8 100644 --- a/Vocaluxe.sln.DotSettings +++ b/Vocaluxe.sln.DotSettings @@ -10,7 +10,7 @@ DO_NOT_SHOW DO_NOT_SHOW <?xml version="1.0" encoding="utf-16"?><Profile name="Cleanup"><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSRemoveCodeRedundancies>True</CSRemoveCodeRedundancies><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><CSShortenReferences>True</CSShortenReferences><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSUpdateFileHeader>True</CSUpdateFileHeader><CSUseAutoProperty>True</CSUseAutoProperty></Profile> - <?xml version="1.0" encoding="utf-16"?><Profile name="Simple Reformat"><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSShortenReferences>True</CSShortenReferences><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar></Profile> + <?xml version="1.0" encoding="utf-16"?><Profile name="Simple Reformat"><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSShortenReferences>True</CSShortenReferences><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar></Profile> Cleanup Simple Reformat 0 diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index b6592296..cbd7935d 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -18,7 +18,6 @@ using System; using System.Collections.Generic; using System.Data; -using System.Data.SQLite; using System.Drawing; using System.Drawing.Imaging; using System.IO; @@ -29,6 +28,7 @@ using VocaluxeLib; using VocaluxeLib.Draw; using VocaluxeLib.Songs; #if WIN +using System.Data.SQLite; #else using Mono.Data.Sqlite; using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection; From e1f8bf4843c92313fe41093641eba6938add5bf6 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 18 Mar 2014 00:36:02 +0100 Subject: [PATCH 025/116] Better structure for song sorter and bugfix for "DateAdded" sorting --- Vocaluxe/Base/CDataBase.cs | 11 +-- Vocaluxe/Base/CMain.cs | 2 +- Vocaluxe/Base/CSongCategorizer.cs | 116 ++++++++++++++--------------- Vocaluxe/Base/CSongSorter.cs | 119 +++++++++++++----------------- VocaluxeLib/Enums.cs | 1 - VocaluxeLib/IBasic.cs | 2 +- VocaluxeLib/Songs/CSong.cs | 2 +- 7 files changed, 118 insertions(+), 135 deletions(-) diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index cbd7935d..a71389c2 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -83,7 +83,7 @@ namespace Vocaluxe.Base } #region Highscores - public static bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out string dateAdded, out int highscoreID) + public static bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out DateTime dateAdded, out int highscoreID) { string sArtist; string sTitle; @@ -384,12 +384,12 @@ namespace Vocaluxe.Base return -1; } - private static bool _GetDataBaseSongInfos(int songID, out string artist, out string title, out int numPlayed, out string dateAdded, string filePath) + private static bool _GetDataBaseSongInfos(int songID, out string artist, out string title, out int numPlayed, out DateTime dateAdded, string filePath) { artist = String.Empty; title = String.Empty; numPlayed = 0; - dateAdded = String.Empty; + dateAdded = DateTime.Today; using (var connection = new SQLiteConnection()) { @@ -425,7 +425,7 @@ namespace Vocaluxe.Base artist = reader.GetString(0); title = reader.GetString(1); numPlayed = reader.GetInt32(2); - dateAdded = new DateTime(reader.GetInt64(3)).ToString("dd/MM/yyyy"); + dateAdded = new DateTime(reader.GetInt64(3)); reader.Dispose(); return true; } @@ -1036,7 +1036,8 @@ namespace Vocaluxe.Base int shortsong = source.GetInt32(7); int diff = source.GetInt32(8); - string artist, title, dateadded; + string artist, title; + DateTime dateadded; int numplayed; if (_GetDataBaseSongInfos(songid, out artist, out title, out numplayed, out dateadded, sourceDBPath)) AddScore(player, score, linenr, date, medley, duet, shortsong, diff, artist, title, numplayed, _HighscoreFilePath); diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index c0c44c4b..36e686ba 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -839,7 +839,7 @@ namespace Vocaluxe.Base return CDataBase.GetCover(fileName, ref texture, coverSize); } - public bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out string dateAdded, out int highscoreID) + public bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out DateTime dateAdded, out int highscoreID) { return CDataBase.GetDataBaseSongInfos(artist, title, out numPlayed, out dateAdded, out highscoreID); } diff --git a/Vocaluxe/Base/CSongCategorizer.cs b/Vocaluxe/Base/CSongCategorizer.cs index 74784cc2..8c68e615 100644 --- a/Vocaluxe/Base/CSongCategorizer.cs +++ b/Vocaluxe/Base/CSongCategorizer.cs @@ -17,7 +17,7 @@ using System; using System.Collections.Generic; -using System.Text; +using System.Diagnostics; using VocaluxeLib; using VocaluxeLib.Songs; @@ -61,36 +61,10 @@ namespace Vocaluxe.Base _SetChanged(); } - private void _CreateCategoriesLetter() + private void _CreateCategories() { - CCategory lastCategory = null; - CCategory notLetterCat = null; - foreach (CSongPointer songPointer in CSongs.Sorter.SortedSongs) - { - Char firstLetter = Char.ToUpper(songPointer.SortString.Normalize(NormalizationForm.FormD)[0]); - if (Char.IsLetter(firstLetter)) - { - if (lastCategory == null || firstLetter.ToString() != lastCategory.Name) - { - lastCategory = new CCategory(firstLetter.ToString()); - _Categories.Add(lastCategory); - } - lastCategory.Songs.Add(songPointer); - } - else - { - if (notLetterCat == null) - { - notLetterCat = new CCategory("#"); - _Categories.Add(notLetterCat); - } - notLetterCat.Songs.Add(songPointer); - } - } - } + _AdjustCategoryNames(); - private void _CreateCategoriesNormal(string noCategoryName) - { CCategory lastCategory = null; CCategory noCategory = null; foreach (CSongPointer songPointer in CSongs.Sorter.SortedSongs) @@ -108,7 +82,7 @@ namespace Vocaluxe.Base { if (noCategory == null) { - noCategory = new CCategory(noCategoryName); + noCategory = new CCategory(_GetNoCategoryName()); _Categories.Add(noCategory); } noCategory.Songs.Add(songPointer); @@ -116,37 +90,15 @@ namespace Vocaluxe.Base } } - private void _CreateCategories() + /// + /// Sets the SortStrings of the songpointers to the actual category names + /// + private static void _AdjustCategoryNames() { - string noCategoryName = ""; - ESongSorting sorting = CSongs.Sorter.SongSorting; - switch (sorting) { - case ESongSorting.TR_CONFIG_EDITION: - noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOEDITION"); - break; - case ESongSorting.TR_CONFIG_GENRE: - noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOGENRE"); - break; case ESongSorting.TR_CONFIG_DECADE: - case ESongSorting.TR_CONFIG_YEAR: - noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOYEAR"); - break; - case ESongSorting.TR_CONFIG_LANGUAGE: - noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE"); - break; - case ESongSorting.TR_CONFIG_NONE: - noCategoryName = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); - break; - } - if (sorting == ESongSorting.TR_CONFIG_ARTIST_LETTER || sorting == ESongSorting.TR_CONFIG_TITLE_LETTER) - _CreateCategoriesLetter(); - else - { - if (sorting == ESongSorting.TR_CONFIG_DECADE) - { foreach (CSongPointer songPointer in CSongs.Sorter.SortedSongs) { string year = songPointer.SortString; @@ -156,11 +108,59 @@ namespace Vocaluxe.Base songPointer.SortString = year + "0 - " + year + "9"; } } - } - _CreateCategoriesNormal(noCategoryName); + break; + case ESongSorting.TR_CONFIG_TITLE_LETTER: + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + foreach (CSongPointer songPointer in CSongs.Sorter.SortedSongs) + songPointer.SortString = (songPointer.SortString.Length == 0 || !Char.IsLetter(songPointer.SortString, 0)) ? "#" : songPointer.SortString[0].ToString(); + break; + case ESongSorting.TR_CONFIG_DATEADDED: + foreach (CSongPointer songPointer in CSongs.Sorter.SortedSongs) + songPointer.SortString = CSongs.GetSong(songPointer.SongID).DateAdded.ToString("dd/MM/yyyy"); + break; } } + private static string _GetNoCategoryName() + { + string noCategoryName; + switch (CSongs.Sorter.SongSorting) + { + case ESongSorting.TR_CONFIG_NONE: + noCategoryName = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); + break; + case ESongSorting.TR_CONFIG_FOLDER: + case ESongSorting.TR_CONFIG_ARTIST: + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + case ESongSorting.TR_CONFIG_TITLE_LETTER: + noCategoryName = ""; + Debug.Assert(false, "Should not have an uncategorized song"); + break; + case ESongSorting.TR_CONFIG_EDITION: + noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOEDITION"); + break; + case ESongSorting.TR_CONFIG_GENRE: + noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOGENRE"); + break; + case ESongSorting.TR_CONFIG_LANGUAGE: + noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOLANGUAGE"); + break; + case ESongSorting.TR_CONFIG_DECADE: + case ESongSorting.TR_CONFIG_YEAR: + noCategoryName = CLanguage.Translate("TR_SCREENSONG_NOYEAR"); + break; + case ESongSorting.TR_CONFIG_DATEADDED: + noCategoryName = ""; + Debug.Assert(false, "Should not have an uncategorized song"); + break; + default: + noCategoryName = ""; + Debug.Assert(false, "Forgot category option"); + break; + } + return noCategoryName; + } + private void _FillCategories() { if (!_Changed) diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs index eefb796f..f1703224 100644 --- a/Vocaluxe/Base/CSongSorter.cs +++ b/Vocaluxe/Base/CSongSorter.cs @@ -17,7 +17,8 @@ using System; using System.Collections.Generic; -using System.Reflection; +using System.Diagnostics; +using System.Linq; using VocaluxeLib; using VocaluxeLib.Songs; @@ -110,83 +111,65 @@ namespace Vocaluxe.Base return res; } - private List _CreateSortList(string fieldName) + private void _AddSongToList(CSong song, List list) { - var sortList = new List(); - if (fieldName == "") - CSongs.Filter.FilteredSongs.ForEach(song => sortList.Add(new CSongPointer(song.ID, ""))); + string value = null; + List values = null; + switch (_SongSorting) + { + case ESongSorting.TR_CONFIG_NONE: + value = ""; + break; + case ESongSorting.TR_CONFIG_FOLDER: + value = song.FolderName; + break; + case ESongSorting.TR_CONFIG_ARTIST: + case ESongSorting.TR_CONFIG_ARTIST_LETTER: + value = _IgnoreArticles == EOffOn.TR_CONFIG_ON ? song.ArtistSorting : song.Artist; + break; + case ESongSorting.TR_CONFIG_TITLE_LETTER: + value = _IgnoreArticles == EOffOn.TR_CONFIG_ON ? song.TitleSorting : song.Title; + break; + case ESongSorting.TR_CONFIG_EDITION: + values = song.Editions; + break; + case ESongSorting.TR_CONFIG_GENRE: + values = song.Genres; + break; + case ESongSorting.TR_CONFIG_LANGUAGE: + values = song.Languages; + break; + case ESongSorting.TR_CONFIG_DECADE: + case ESongSorting.TR_CONFIG_YEAR: + value = song.Year; + break; + case ESongSorting.TR_CONFIG_DATEADDED: + value = song.DateAdded.ToString("yyyyMMdd"); + break; + default: + Debug.Assert(false, "Forgot sorting option"); + break; + } + Debug.Assert(value != null || values != null, "Sorting implementation faulty"); + if (value != null) + list.Add(new CSongPointer(song.ID, value)); else { - FieldInfo field = typeof(CSong).GetField(fieldName, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public); - if (field == null) - { - CLog.LogError("Unknow sorting field: " + fieldName); - return _CreateSortList(""); - } - bool isString = field.FieldType == typeof(string); - if (!isString && field.FieldType != typeof(List)) - throw new Exception("Unkown sort field type"); - foreach (CSong song in CSongs.Filter.FilteredSongs) - { - object value = field.GetValue(song); - if (isString) - sortList.Add(new CSongPointer(song.ID, (String)value)); - else - { - var values = (List)value; - if (values.Count == 0) - sortList.Add(new CSongPointer(song.ID, "")); - else - { - // ReSharper disable LoopCanBeConvertedToQuery - foreach (String sortString in values) - // ReSharper restore LoopCanBeConvertedToQuery - sortList.Add(new CSongPointer(song.ID, sortString)); - } - } - } + if (list.Count == 0) + list.Add(new CSongPointer(song.ID, "")); + else + list.AddRange(values.Select(val => new CSongPointer(song.ID, val))); } - return sortList; } private void _SortSongs() { if (!_Changed) return; - String fieldName; - switch (_SongSorting) - { - case ESongSorting.TR_CONFIG_EDITION: - fieldName = "Editions"; - break; - case ESongSorting.TR_CONFIG_GENRE: - fieldName = "Genres"; - break; - case ESongSorting.TR_CONFIG_FOLDER: - fieldName = "FolderName"; - break; - case ESongSorting.TR_CONFIG_ARTIST_LETTER: - case ESongSorting.TR_CONFIG_ARTIST: - fieldName = _IgnoreArticles == EOffOn.TR_CONFIG_ON ? "ArtistSorting" : "Artist"; - break; - case ESongSorting.TR_CONFIG_TITLE_LETTER: - fieldName = _IgnoreArticles == EOffOn.TR_CONFIG_ON ? "TitleSorting" : "Title"; - break; - case ESongSorting.TR_CONFIG_YEAR: - case ESongSorting.TR_CONFIG_DECADE: - fieldName = "Year"; - break; - case ESongSorting.TR_CONFIG_LANGUAGE: - fieldName = "Languages"; - break; - case ESongSorting.TR_CONFIG_DATEADDED: - fieldName = "DateAdded"; - break; - default: - fieldName = ""; - break; - } - List sortList = _CreateSortList(fieldName); + + List sortList = new List(); + foreach (CSong song in CSongs.Filter.FilteredSongs) + _AddSongToList(song, sortList); switch (_SongSorting) { case ESongSorting.TR_CONFIG_ARTIST_LETTER: diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs index 5ac45bd3..015f7424 100644 --- a/VocaluxeLib/Enums.cs +++ b/VocaluxeLib/Enums.cs @@ -189,7 +189,6 @@ namespace VocaluxeLib { // ReSharper disable InconsistentNaming TR_CONFIG_NONE, - //TR_CONFIG_RANDOM, TR_CONFIG_FOLDER, TR_CONFIG_ARTIST, TR_CONFIG_ARTIST_LETTER, diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 334221a0..616a8ebc 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -279,7 +279,7 @@ namespace VocaluxeLib public interface IDataBase { bool GetCover(string fileName, ref CTexture texture, int coverSize); - bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out string dateAdded, out int highscoreID); + bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out DateTime dateAdded, out int highscoreID); } public interface IControllers diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs index a1c4ad33..1ab39a76 100644 --- a/VocaluxeLib/Songs/CSong.cs +++ b/VocaluxeLib/Songs/CSong.cs @@ -172,7 +172,7 @@ namespace VocaluxeLib.Songs public readonly List Languages = new List(); public int DataBaseSongID = -1; - public string DateAdded = ""; + public DateTime DateAdded = DateTime.Today; public int NumPlayed; public int NumPlayedSession; From f9d29b614146d2e39b0aad0a81420fe9eb565d33 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 18 Mar 2014 02:21:15 +0100 Subject: [PATCH 026/116] Fix PortAudio to allow recording and playback with the same library using a base class the implements appropriate locking --- Vocaluxe/Lib/Sound/CPortAudioCommon.cs | 161 +++++++++++ Vocaluxe/Lib/Sound/Playback/IPlayback.cs | 2 +- .../Playback/PortAudio/CPortAudioPlay.cs | 252 +++++++++--------- .../Playback/PortAudio/CPortAudioStream.cs | 199 +++++--------- .../Record/PortAudio/CPortAudioRecord.cs | 74 ++--- Vocaluxe/Vocaluxe.csproj | 1 + 6 files changed, 371 insertions(+), 318 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/CPortAudioCommon.cs diff --git a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs b/Vocaluxe/Lib/Sound/CPortAudioCommon.cs new file mode 100644 index 00000000..d3584860 --- /dev/null +++ b/Vocaluxe/Lib/Sound/CPortAudioCommon.cs @@ -0,0 +1,161 @@ +using System; +using System.Diagnostics; +using PortAudioSharp; +using Vocaluxe.Base; + +namespace Vocaluxe.Lib.Sound +{ + /// + /// PortAudio can be used for record and playback + /// So do some common stuff here and make sure those 2 do not interfere + /// + /// DO NEVER use following Pa_* functions other than the ones from this class: + /// Initialize, Terminate, OpenStream, CloseStream + /// + abstract class CPortAudioCommon + { + private static int _RefCount; + private static readonly object _Mutex = new object(); + + /// + /// Safe method to init PortAudio (adds a reference) + /// MUST call CloseDriver when done + /// + /// True on success, falso if not initialized (log written) + protected static bool _InitDriver() + { + lock (_Mutex) + { + if (_RefCount == 0) + { + if (_CheckError("Initialize", PortAudio.Pa_Initialize())) + return false; + } + _RefCount++; + } + return true; + } + + /// + /// Safe method to close PortAudio + /// MUST be called _exactly_ once after successfull InitDriver call + /// + protected static void _CloseDriver() + { + lock (_Mutex) + { + Debug.Assert(_RefCount > 0); + _RefCount--; + if (_RefCount == 0) + PortAudio.Pa_Terminate(); + } + } + + protected static PortAudio.PaError _OpenStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, ref PortAudio.PaStreamParameters? outputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + { + lock (_Mutex) + { + return PortAudio.Pa_OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData); + } + } + + /// + /// Convenience method to safely open an input stream and log potential error + /// + /// + /// + /// + /// + /// + /// + /// + /// True on success + protected static bool _OpenInputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + { + PortAudio.PaStreamParameters? outputParameters = null; + return + !_CheckError("OpenInputStream", + _OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); + } + + /// + /// Convenience method to safely open an output stream and log potential error + /// + /// + /// + /// + /// + /// + /// + /// + /// True on success + protected static bool _OpenOutputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? outputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + { + PortAudio.PaStreamParameters? inputParameters = null; + return + !_CheckError("OpenOutputStream", + _OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); + } + + protected static void _CloseStream(IntPtr stream) + { + lock (_Mutex) + { + PortAudio.Pa_CloseStream(stream); + } + } + + /// + /// Checks if PA returned an error and logs it + /// Returns true on error + /// + /// Action identifier (E.g. openStream) + /// Result returned by Pa_* call + /// True on error + protected static bool _CheckError(String action, PortAudio.PaError errorCode) + { + if (errorCode != PortAudio.PaError.paNoError) + { + CLog.LogError(action + " error: " + PortAudio.Pa_GetErrorText(errorCode)); + if (errorCode == PortAudio.PaError.paUnanticipatedHostError) + { + PortAudio.PaHostErrorInfo errorInfo = PortAudio.Pa_GetLastHostErrorInfo(); + CLog.LogError("- Host error API type: " + errorInfo.hostApiType); + CLog.LogError("- Host error code: " + errorInfo.errorCode); + CLog.LogError("- Host error text: " + errorInfo.errorText); + } + return true; + } + + return false; + } + + /// + /// Selects the most appropriate host api + /// + /// The most appropriate host api + protected static int _GetHostApi() + { + //Caller has to hold a reference anyway so no locking needed + if (_RefCount < 1) + return -1; + + int selectedHostApi = PortAudio.Pa_GetDefaultHostApi(); + int apiCount = PortAudio.Pa_GetHostApiCount(); + for (int i = 0; i < apiCount; i++) + { + PortAudio.PaHostApiInfo apiInfo = PortAudio.Pa_GetHostApiInfo(i); + if ((apiInfo.type == PortAudio.PaHostApiTypeId.paDirectSound) + || (apiInfo.type == PortAudio.PaHostApiTypeId.paALSA)) + selectedHostApi = i; + } + return selectedHostApi; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs index c69eed4e..13ce9857 100644 --- a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs +++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs @@ -35,7 +35,7 @@ namespace Vocaluxe.Lib.Sound.Playback } } - delegate void Closeproc(int streamID); + delegate void Closeproc(int stream); interface IPlayback { diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs index 38742b9f..86f62f4d 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs @@ -15,42 +15,35 @@ // along with Vocaluxe. If not, see . #endregion -using System; using System.Collections.Generic; -using System.Linq; namespace Vocaluxe.Lib.Sound.Playback.PortAudio { class CPortAudioPlay : IPlayback { private bool _Initialized; - private readonly List _Decoder = new List(); - private Closeproc _Closeproc; - private int _Count = 1; - - private readonly Object _MutexDecoder = new Object(); - - private List _Streams; + private readonly List _Streams = new List(); + private int _NextID; public bool Init() { if (_Initialized) CloseAll(); - _Closeproc = _CloseProc; _Initialized = true; - _Streams = new List(); return true; } public void CloseAll() { - lock (_MutexDecoder) + lock (_Streams) { - for (int i = 0; i < _Decoder.Count; i++) - _Decoder[i].Free(_Closeproc, i + 1); + foreach (CPortAudioStream stream in _Streams) + stream.Free(); + _Streams.Clear(); } + _Initialized = false; } public void SetGlobalVolume(float volume) @@ -66,7 +59,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (!_Initialized) return 0; - lock (_MutexDecoder) + lock (_Streams) { return _Streams.Count; } @@ -82,17 +75,16 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public int Load(string media, bool prescan) { - var stream = new SAudioStreams(0); - var decoder = new CPortAudioStream(); + //Note: We ignore prescan here as the stream does it always - if (decoder.Open(media) > -1) + var stream = new CPortAudioStream(_NextID++, _CloseProc); + + if (stream.Open(media)) { - lock (_MutexDecoder) + lock (_Streams) { - _Decoder.Add(decoder); - stream.Handle = _Count++; _Streams.Add(stream); - return stream.Handle; + return stream.ID; } } return 0; @@ -100,12 +92,15 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public void Close(int stream) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) + int index = _GetStreamIndex(stream); + if (index >= 0) { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Free(_Closeproc, stream); + _Streams[index].Free(); + _Streams.RemoveAt(index); } } } @@ -117,216 +112,219 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public void Play(int stream, bool loop) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) + int index = _GetStreamIndex(stream); + if (index >= 0) { - if (_AlreadyAdded(stream)) - { - _Decoder[_GetStreamIndex(stream)].Loop = loop; - _Decoder[_GetStreamIndex(stream)].Play(); - } + _Streams[index].Loop = loop; + _Streams[index].Play(); } } } public void Pause(int stream) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Paused = true; - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].Paused = true; } } public void Stop(int stream) { - Pause(stream); + if (!_Initialized) + return; + lock (_Streams) + { + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].Stop(); + } } public void Fade(int stream, float targetVolume, float seconds) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Fade(targetVolume, seconds); - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].Fade(targetVolume, seconds); } } public void FadeAndPause(int stream, float targetVolume, float seconds) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].FadeAndPause(targetVolume, seconds); - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].FadeAndPause(targetVolume, seconds); } } public void FadeAndClose(int stream, float targetVolume, float seconds) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].FadeAndClose(targetVolume, seconds, _Closeproc, stream); - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].FadeAndClose(targetVolume, seconds); } } public void FadeAndStop(int stream, float targetVolume, float seconds) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].FadeAndStop(targetVolume, seconds, _Closeproc, stream); - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].FadeAndStop(targetVolume, seconds); } } public void SetStreamVolume(int stream, float volume) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Volume = volume; - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].Volume = volume; } } public void SetStreamVolumeMax(int stream, float volume) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].VolumeMax = volume; - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].VolumeMax = volume; } } public float GetLength(int stream) { - if (_Initialized) + if (!_Initialized) + return 0f; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Length; - } + if (_AlreadyAdded(stream)) + return _Streams[_GetStreamIndex(stream)].Length; } return 0f; } public float GetPosition(int stream) { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Position; - } - + if (!_Initialized) return 0f; + lock (_Streams) + { + if (_AlreadyAdded(stream)) + return _Streams[_GetStreamIndex(stream)].Position; } + return 0f; } public bool IsPlaying(int stream) { - if (_Initialized) + if (!_Initialized) + return false; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return !_Decoder[_GetStreamIndex(stream)].Paused && !_Decoder[_GetStreamIndex(stream)].Finished; - } + if (_AlreadyAdded(stream)) + return !_Streams[_GetStreamIndex(stream)].Paused && !_Streams[_GetStreamIndex(stream)].Finished; } return false; } public bool IsPaused(int stream) { - if (_Initialized) + if (!_Initialized) + return false; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Paused; - } + if (_AlreadyAdded(stream)) + return _Streams[_GetStreamIndex(stream)].Paused; } return false; } public bool IsFinished(int stream) { - if (_Initialized) + if (!_Initialized) + return true; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Finished; - } + if (_AlreadyAdded(stream)) + return _Streams[_GetStreamIndex(stream)].Finished; } return true; } public void SetPosition(int stream, float position) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Skip(position); - } + if (_AlreadyAdded(stream)) + _Streams[_GetStreamIndex(stream)].Skip(position); } } #endregion Stream Handling + /// + /// Returns true if strem with given id is found + /// MUST hold _Stream-lock + /// + /// Stream id + /// private bool _AlreadyAdded(int stream) { - return _Streams.Any(st => st.Handle == stream); + return _GetStreamIndex(stream) >= 0; } + /// + /// Returns the index of the stream with the given id + /// MUST hold _Stream-lock + /// + /// Stream id + /// private int _GetStreamIndex(int stream) { for (int i = 0; i < _Streams.Count; i++) { - if (_Streams[i].Handle == stream) + if (_Streams[i].ID == stream) return i; } return -1; } - private void _CloseProc(int streamID) + /// + /// Removes the stream with the given handle + /// + /// Stream handle + private void _CloseProc(int stream) { - if (_Initialized) + if (!_Initialized) + return; + lock (_Streams) { - lock (_MutexDecoder) - { - if (_AlreadyAdded(streamID)) - { - int index = _GetStreamIndex(streamID); - _Decoder.RemoveAt(index); - _Streams.RemoveAt(index); - } - } + if (_AlreadyAdded(stream)) + _Streams.RemoveAt(_GetStreamIndex(stream)); } } } diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index d4cb57c5..109dbd88 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -8,15 +8,15 @@ using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.PortAudio { - class CPortAudioStream : IDisposable + class CPortAudioStream : CPortAudioCommon, IDisposable { private const long _Bufsize = 1000000L; private const long _Beginrefill = 800000L; + public readonly int ID; + private readonly Closeproc _Closeproc; + private readonly CSyncTimer _SyncTimer; - private static bool _Initialized; - private static int _NumStreams; - private static readonly Object _Mutex = new object(); private int _ByteCount = 4; private float _Volume = 1f; private float _VolumeMax = 1f; @@ -26,11 +26,9 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private static PortAudioSharp.PortAudio.PaHostApiInfo _ApiInfo; private static PortAudioSharp.PortAudio.PaDeviceInfo _OutputDeviceInfo; - private IntPtr _Ptr = new IntPtr(0); + private IntPtr _Stream = IntPtr.Zero; - private Closeproc _Closeproc; private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _PaStreamCallback; - private int _StreamID; private IAudioDecoder _Decoder; private float _BytesPerSecond; private bool _NoMoreData; @@ -61,8 +59,10 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private readonly Object _LockData = new Object(); private readonly Object _LockSyncSignals = new Object(); - public CPortAudioStream() + public CPortAudioStream(int id, Closeproc closeproc) { + ID = id; + _Closeproc = closeproc; _SyncTimer = new CSyncTimer(0f, 1f, 0.02f); } @@ -71,10 +71,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio Dispose(); } - public void Free(Closeproc closeProc, int streamID) + public void Free() { - _Closeproc = closeProc; - _StreamID = streamID; _Terminated = true; } @@ -135,6 +133,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (Finished) _SyncTimer.Pause(); //TODO: Why not use Decoder.GetPosition()? + //Decoder may return wrong timestamps. If you change this to exessive testing for monoton timestamps espacially for ogg files return _SyncTimer.Time; } } @@ -172,18 +171,14 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _AfterFadeAction = EStreamAction.Pause; } - public void FadeAndClose(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) + public void FadeAndClose(float targetVolume, float fadeTime) { - _Closeproc = closeProc; - _StreamID = streamID; Fade(targetVolume, fadeTime); _AfterFadeAction = EStreamAction.Close; } - public void FadeAndStop(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) + public void FadeAndStop(float targetVolume, float fadeTime) { - _Closeproc = closeProc; - _StreamID = streamID; Fade(targetVolume, fadeTime); _AfterFadeAction = EStreamAction.Stop; } @@ -192,18 +187,12 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { Paused = false; _AfterFadeAction = EStreamAction.Nothing; - lock (_Mutex) - { - _ErrorCheck("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Ptr)); - } + _CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); } public void Stop() { - lock (_Mutex) - { - _ErrorCheck("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Ptr)); - } + _CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); Skip(0f); } @@ -213,60 +202,57 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio set { _SetLoop = value; } } - public int Open(string fileName) + public bool Open(string fileName) { if (_FileOpened) - return -1; + return false; if (!File.Exists(fileName)) - return -1; - - _Decoder = new CAudioDecoderFFmpeg(); - _Decoder.Init(); + return false; + bool driverInitialized = false; try { - lock (_Mutex) - { - if (!_Initialized) - { - if (_ErrorCheck("Initialize", PortAudioSharp.PortAudio.Pa_Initialize())) - return -1; - _Initialized = true; + if (!_InitDriver()) + return false; + driverInitialized = true; - int hostApi = _ApiSelect(); - _ApiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(hostApi); - _OutputDeviceInfo = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_ApiInfo.defaultOutputDevice); - if (_OutputDeviceInfo.defaultLowOutputLatency < 0.1) - _OutputDeviceInfo.defaultLowOutputLatency = 0.1; - } - } + int hostApi = _GetHostApi(); + _ApiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(hostApi); + _OutputDeviceInfo = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_ApiInfo.defaultOutputDevice); + if (_OutputDeviceInfo.defaultLowOutputLatency < 0.1) + _OutputDeviceInfo.defaultLowOutputLatency = 0.1; _PaStreamCallback = _ProcessNewData; } catch (Exception) { - _Initialized = false; + if (driverInitialized) + _CloseDriver(); CLog.LogError("Error Init PortAudio Playback"); - return -1; + return false; } + _Decoder = new CAudioDecoderFFmpeg(); + _Decoder.Init(); _Decoder.Open(fileName); - _Duration = _Decoder.GetLength(); SFormatInfo format = _Decoder.GetFormatInfo(); if (format.SamplesPerSecond == 0) - return -1; + { + _CloseDriver(); + _Decoder.Close(); + _Decoder = null; + CLog.LogError("Error Init PortAudio Playback (samples=0)"); + return false; + } + _Duration = _Decoder.GetLength(); _ByteCount = 2 * format.ChannelCount; _BytesPerSecond = format.SamplesPerSecond * _ByteCount; _CurrentTime = 0f; _SyncTimer.Time = _CurrentTime; - var stream = new SAudioStreams(0); - - var data = new IntPtr(0); - PortAudioSharp.PortAudio.PaStreamParameters? outputParams = new PortAudioSharp.PortAudio.PaStreamParameters { channelCount = format.ChannelCount, @@ -274,38 +260,33 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, suggestedLatency = _OutputDeviceInfo.defaultLowOutputLatency }; - PortAudioSharp.PortAudio.PaStreamParameters? inputParams = null; - var bufsize = (uint)CConfig.AudioBufferSize; - lock (_Mutex) + if (!_OpenOutputStream( + out _Stream, + ref outputParams, + format.SamplesPerSecond, + (uint)CConfig.AudioBufferSize, + PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, + _PaStreamCallback, + IntPtr.Zero) || _Stream == IntPtr.Zero) { - _ErrorCheck("OpenDefaultStream (playback)", PortAudioSharp.PortAudio.Pa_OpenStream( - out _Ptr, - ref inputParams, - ref outputParams, - format.SamplesPerSecond, - bufsize, - PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, - _PaStreamCallback, - data)); + _CloseDriver(); + _Decoder.Close(); + _Decoder = null; + return false; } - stream.Handle = _Ptr.ToInt32(); + //From now on closing the driver and the decoder is handled by the thread ONLY! - if (stream.Handle != 0) - { - _NumStreams++; - _Paused = true; - _Waiting = true; - _FileOpened = true; - _Data = new CRingBuffer(_Bufsize); - _NoMoreData = false; - _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(fileName)}; - _DecoderThread.Start(); + _Paused = true; + _Waiting = true; + _FileOpened = true; + _Data = new CRingBuffer(_Bufsize); + _NoMoreData = false; + _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(fileName)}; + _DecoderThread.Start(); - return stream.Handle; - } - return -1; + return true; } public void Skip(float time) @@ -374,9 +355,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private void _DoDecode() { - if (!_FileOpened) - return; - if (_Paused) return; @@ -431,22 +409,11 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private void _DoFree() { - if (_Initialized) - { - Stop(); - _NumStreams--; - if (_NumStreams == 0) - { - lock (_Mutex) - { - PortAudioSharp.PortAudio.Pa_Terminate(); - _Initialized = false; - } - } - _Decoder.Close(); - } + _CloseStream(_Stream); + _CloseDriver(); + _Decoder.Close(); - _Closeproc(_StreamID); + _Closeproc(ID); } #endregion Threading @@ -517,44 +484,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } #endregion Callbacks - private bool _ErrorCheck(String action, PortAudioSharp.PortAudio.PaError errorCode) - { - if (errorCode != PortAudioSharp.PortAudio.PaError.paNoError) - { - if (errorCode == PortAudioSharp.PortAudio.PaError.paStreamIsNotStopped) - return false; - - CLog.LogError(action + " error (playback): " + PortAudioSharp.PortAudio.Pa_GetErrorText(errorCode)); - if (errorCode == PortAudioSharp.PortAudio.PaError.paUnanticipatedHostError) - { - PortAudioSharp.PortAudio.PaHostErrorInfo errorInfo = PortAudioSharp.PortAudio.Pa_GetLastHostErrorInfo(); - CLog.LogError("- Host error API type: " + errorInfo.hostApiType); - CLog.LogError("- Host error code: " + errorInfo.errorCode); - CLog.LogError("- Host error text: " + errorInfo.errorText); - } - return true; - } - - return false; - } - - private int _ApiSelect() - { - if (!_Initialized) - return 0; - - int selectedHostApi = PortAudioSharp.PortAudio.Pa_GetDefaultHostApi(); - int apiCount = PortAudioSharp.PortAudio.Pa_GetHostApiCount(); - for (int i = 0; i < apiCount; i++) - { - PortAudioSharp.PortAudio.PaHostApiInfo apiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(i); - if ((apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paDirectSound) - || (apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paALSA)) - selectedHostApi = i; - } - return selectedHostApi; - } - private void _Update() { if (_Fading != null) diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 86b5f3ee..a059d463 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -24,7 +24,7 @@ using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.PortAudio { - class CPortAudioRecord : IRecord + class CPortAudioRecord : CPortAudioCommon, IRecord { private bool _Initialized; private readonly List _Devices = new List(); @@ -47,16 +47,16 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio /// true if success public bool Init() { + if (_Initialized) + return false; + try { - if (_Initialized) - Close(); - - if (_ErrorCheck("Initialize", PortAudioSharp.PortAudio.Pa_Initialize())) + if (!_InitDriver()) return false; _Devices.Clear(); - int hostAPI = _ApiSelect(); + int hostAPI = _GetHostApi(); int numDevices = PortAudioSharp.PortAudio.Pa_GetDeviceCount(); for (int i = 0; i < numDevices; i++) { @@ -100,9 +100,6 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio Stop(); - foreach (CBuffer buffer in _Buffer) - buffer.Reset(); - foreach (IntPtr handle in _RecHandle) { int waitcount = 0; @@ -113,6 +110,9 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio } } + foreach (CBuffer buffer in _Buffer) + buffer.Reset(); + for (int i = 0; i < _RecHandle.Length; i++) _RecHandle[i] = IntPtr.Zero; @@ -127,19 +127,17 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency }; - PortAudioSharp.PortAudio.PaStreamParameters? outputParams = null; - if (_ErrorCheck("OpenStream (rec)", PortAudioSharp.PortAudio.Pa_OpenStream( + if (!_OpenInputStream( out _RecHandle[dev], ref inputParams, - ref outputParams, 44100, 882, PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, _MyRecProc, - new IntPtr(dev)))) + new IntPtr(dev))) return false; - if (_ErrorCheck("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) + if (_CheckError("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) return false; } } @@ -165,13 +163,14 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio /// public void Close() { - Stop(); + if (!_Initialized) + return; - if (_Initialized) - { - PortAudioSharp.PortAudio.Pa_Terminate(); - _Initialized = false; - } + foreach (IntPtr handle in _RecHandle) + _CloseStream(handle); + _CloseDriver(); + + _Initialized = false; //System.IO.File.WriteAllBytes("test0.raw", _Buffer[0].Buffer); } @@ -312,40 +311,5 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio return PortAudioSharp.PortAudio.PaStreamCallbackResult.paContinue; } - - private bool _ErrorCheck(String action, PortAudioSharp.PortAudio.PaError errorCode) - { - if (errorCode != PortAudioSharp.PortAudio.PaError.paNoError) - { - CLog.LogError(action + " error (rec): " + PortAudioSharp.PortAudio.Pa_GetErrorText(errorCode)); - if (errorCode == PortAudioSharp.PortAudio.PaError.paUnanticipatedHostError) - { - PortAudioSharp.PortAudio.PaHostErrorInfo errorInfo = PortAudioSharp.PortAudio.Pa_GetLastHostErrorInfo(); - CLog.LogError("- Host error API type: " + errorInfo.hostApiType); - CLog.LogError("- Host error code: " + errorInfo.errorCode); - CLog.LogError("- Host error text: " + errorInfo.errorText); - } - return true; - } - - return false; - } - - private int _ApiSelect() - { - if (!_Initialized) - return 0; - - int selectedHostApi = PortAudioSharp.PortAudio.Pa_GetDefaultHostApi(); - int apiCount = PortAudioSharp.PortAudio.Pa_GetHostApiCount(); - for (int i = 0; i < apiCount; i++) - { - PortAudioSharp.PortAudio.PaHostApiInfo apiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(i); - if ((apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paDirectSound) - || (apiInfo.type == PortAudioSharp.PortAudio.PaHostApiTypeId.paALSA)) - selectedHostApi = i; - } - return selectedHostApi; - } } } \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 111f9a7e..047fbfd9 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -221,6 +221,7 @@ + From 6053102b8f8d6aabacf42898fe6f1decbd4160af Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 18 Mar 2014 16:41:42 +0100 Subject: [PATCH 027/116] Rework CBackgroundMusic to avoid crash on startup and assure correct behaviour on runtime --- Vocaluxe/Base/CBackgroundMusic.cs | 613 +++++++----------- Vocaluxe/Base/CGraphics.cs | 8 +- Vocaluxe/Base/CMain.cs | 5 - Vocaluxe/Base/CPlaylistElement.cs | 67 ++ Vocaluxe/Base/CSettings.cs | 8 - Vocaluxe/Screens/CPopupScreenVolumeControl.cs | 4 +- Vocaluxe/Screens/CScreenLoad.cs | 36 +- Vocaluxe/Screens/CScreenOptionsSound.cs | 13 +- Vocaluxe/Vocaluxe.csproj | 1 + VocaluxeLib/CHelper.cs | 58 +- VocaluxeLib/IBasic.cs | 2 - 11 files changed, 354 insertions(+), 461 deletions(-) create mode 100644 Vocaluxe/Base/CPlaylistElement.cs diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 9afc32dd..f23943f8 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -17,8 +17,8 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; -using System.Linq; using VocaluxeLib; using VocaluxeLib.Songs; using VocaluxeLib.Draw; @@ -27,25 +27,28 @@ namespace Vocaluxe.Base { static class CBackgroundMusic { - private static int _CurrentMusicStream = -1; - private static int _PreviousMusicIndex; - private static CPlaylistElement _CurrentPlaylistElement = new CPlaylistElement(); + private static bool _Initialized; - private static readonly List _AllFileNames = new List(); - private static readonly List _NotPlayedFileNames = new List(); - private static readonly List _BGMusicFileNames = new List(); - private static readonly List _PreviousFileNames = new List(); + private static bool _OwnSongsAvailable; + private static EBackgroundMusicSource _MusicSource; + private static float _Volume; + private static bool _VideoEnabled; + + private static CPlaylistElement _CurrentPlaylistElement; //Currently played music + private static int _CurrentMusicStream = -1; //Current active music stream + private static int _PreviousMusicIndex; //Index of _CurrentPlaylistElement in _PreviousFiles (kept for performance) + + private static readonly List _BGMusicFiles = new List(); //Background music files + private static readonly List _NotPlayedFiles = new List(); //Not played files + private static readonly List _PreviousFiles = new List(); //Played files private static int _Video = -1; private static CTexture _CurrentVideoTexture; private static CFading _VideoFading; - private static bool _VideoEnabled; private static bool _OwnMusicAdded; private static bool _BackgroundMusicAdded; private static bool _Disabled; - private static bool _CanSing; - private static bool _RepeatSong; public static bool VideoEnabled { @@ -54,16 +57,19 @@ namespace Vocaluxe.Base { if (_VideoEnabled == value) return; - ToggleVideo(); _VideoEnabled = value; + if (_VideoEnabled) + _LoadVideo(); + else if (_Video != -1) + { + CVideo.Close(_Video); + CDraw.RemoveTexture(ref _CurrentVideoTexture); + _Video = -1; + } } } - public static bool CanSing - { - get { return _CanSing; } - set { _CanSing = value; } - } + public static bool CanSing { get; private set; } public static bool Disabled { @@ -78,20 +84,16 @@ namespace Vocaluxe.Base } } - public static bool RepeatSong - { - get { return _RepeatSong; } - set { _RepeatSong = value; } - } + public static bool RepeatSong { get; set; } public static int SongID { - get { return _CurrentPlaylistElement.SongID; } + get { return _CurrentPlaylistElement == null ? -1 : _CurrentPlaylistElement.SongID; } } public static bool SongHasVideo { - get { return File.Exists(_CurrentPlaylistElement.VideoFilePath); } + get { return _CurrentPlaylistElement != null && File.Exists(_CurrentPlaylistElement.VideoFilePath); } } public static bool IsPlaying { get; private set; } @@ -100,6 +102,8 @@ namespace Vocaluxe.Base { get { + if (_CurrentPlaylistElement == null) + return ""; if (_CurrentPlaylistElement.Artist != "" && _CurrentPlaylistElement.Title != "") return _CurrentPlaylistElement.Artist + " - " + _CurrentPlaylistElement.Title; return Path.GetFileNameWithoutExtension(_CurrentPlaylistElement.MusicFilePath); @@ -108,50 +112,63 @@ namespace Vocaluxe.Base public static CTexture Cover { - get { return _CurrentPlaylistElement.Cover; } + get { return _CurrentPlaylistElement == null ? CCover.NoCover : _CurrentPlaylistElement.Cover; } } + //Use this to set whether own songs are available for access + public static bool OwnSongsAvailable + { + get { return _OwnSongsAvailable; } + set + { + _OwnSongsAvailable = value; + if (_OwnSongsAvailable && _MusicSource != EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC) + AddOwnMusic(); + } + } + + /// + /// Initializes the background music with values from config + /// Has to be called before any other method is used + /// public static void Init() { - var templist = new List(); - - foreach (string ending in CSettings.MusicFileTypes) - templist.AddRange(CHelper.ListFiles(CSettings.FolderBackgroundMusic, ending, true, true)); - - foreach (string path in templist) - _BGMusicFileNames.Add(new CPlaylistElement(path)); - - if (CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) - AddBackgroundMusic(); + if (_Initialized) + return; + _Volume = CConfig.BackgroundMusicVolume; _VideoEnabled = (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON); + _MusicSource = CConfig.BackgroundMusicSource; + + List soundFiles = CHelper.ListSoundFiles(CSettings.FolderBackgroundMusic, true, true); + + foreach (string path in soundFiles) + _BGMusicFiles.Add(new CPlaylistElement(path)); + + if (_MusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) + _AddBackgroundMusic(); IsPlaying = false; + _Initialized = true; } public static void Play() { - if (IsPlaying) + if (IsPlaying || CConfig.BackgroundMusic == EOffOn.TR_CONFIG_OFF) return; - if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON) + if (_CurrentMusicStream != -1) { - if (_AllFileNames.Count > 0) - { - if (_CurrentMusicStream != -1) - { - CSound.Fade(_CurrentMusicStream, 100f, CSettings.BackgroundMusicFadeTime); - CSound.Play(_CurrentMusicStream); - if (_VideoEnabled && _Video != -1) - CVideo.Resume(_Video); - IsPlaying = true; - } - else - Next(); - - _CanSing = !_IsBackgroundFile(_CurrentPlaylistElement); - } + //Resume + CSound.SetStreamVolume(_CurrentMusicStream, 0f); + CSound.Fade(_CurrentMusicStream, _Volume, CSettings.BackgroundMusicFadeTime); + CSound.Play(_CurrentMusicStream); + if (_VideoEnabled && _Video != -1) + CVideo.Resume(_Video); + IsPlaying = true; } + else + Next(); } public static void Stop() @@ -159,7 +176,7 @@ namespace Vocaluxe.Base if (!IsPlaying) return; - if (_VideoEnabled && _Video != -1) + if (_Video != -1) { CVideo.Close(_Video); CDraw.RemoveTexture(ref _CurrentVideoTexture); @@ -168,7 +185,7 @@ namespace Vocaluxe.Base CSound.FadeAndClose(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _CurrentMusicStream = -1; - _CurrentPlaylistElement = new CPlaylistElement(); + _CurrentPlaylistElement = null; IsPlaying = false; } @@ -177,7 +194,7 @@ namespace Vocaluxe.Base if (!IsPlaying) return; - if (_VideoEnabled && _Video != -1) + if (_Video != -1) { CVideo.Pause(_Video); CVideo.Skip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.VideoGap); @@ -188,275 +205,202 @@ namespace Vocaluxe.Base public static void Update() { - if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) - { - float timeToPlay; - if (Math.Abs(_CurrentPlaylistElement.Finish) < 0.001) //No End-Tag defined - timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream); - else //End-Tag found - timeToPlay = _CurrentPlaylistElement.Finish - CSound.GetPosition(_CurrentMusicStream); + if (!IsPlaying) + return; + Debug.Assert(_CurrentMusicStream != -1 && _CurrentPlaylistElement != null); - bool finished = CSound.IsFinished(_CurrentMusicStream); - if (IsPlaying && ((timeToPlay <= CSettings.BackgroundMusicFadeTime && timeToPlay > 0) || finished)) + float timeToPlay; + if (Math.Abs(_CurrentPlaylistElement.Finish) < 0.001) //No End-Tag defined + timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream); + else //End-Tag found + timeToPlay = _CurrentPlaylistElement.Finish - CSound.GetPosition(_CurrentMusicStream); + + bool finished = CSound.IsFinished(_CurrentMusicStream); + if (timeToPlay <= CSettings.BackgroundMusicFadeTime || finished) + { + if (RepeatSong) + _StartSong(); + else + Next(); + } + } + + /// + /// (Re-)Starts the _CurrentPlaylistElement + /// + private static void _StartSong() + { + Debug.Assert(_CurrentPlaylistElement != null); + //If we have an active stream, reuse it + if (_CurrentMusicStream < 0) + { + //otherwhise load + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); + if (_CurrentMusicStream < 0) + return; + CSound.SetStreamVolume(_CurrentMusicStream, 0f); + CSound.Fade(_CurrentMusicStream, _Volume, CSettings.BackgroundMusicFadeTime); + } + //Seek to #Start-Tag, if found + if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) + CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); + + if (_VideoEnabled) + { + if (_Video != -1) { - if (_RepeatSong) - { - //Seek to #Start-Tag, if found - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); - else - CSound.SetPosition(_CurrentMusicStream, 0); - if (_VideoEnabled && _Video != -1) - { - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); - else - CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); - } - } + if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) + CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap + _CurrentPlaylistElement.Start); else - Next(); + CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); } + else + _LoadVideo(); } } public static void Next() { - if (_AllFileNames.Count > 0) + Stop(); //stop last song if any + if (_PreviousMusicIndex < _PreviousFiles.Count - 2) { - if (_PreviousMusicIndex == _PreviousFileNames.Count - 1 || _PreviousFileNames.Count == 0) - { - //We are not currently in the previous list - Stop(); - if (_NotPlayedFileNames.Count == 0) - _NotPlayedFileNames.AddRange(_AllFileNames); - - _CurrentPlaylistElement = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)]; - _NotPlayedFileNames.Remove(_CurrentPlaylistElement); - - _PreviousFileNames.Add(_CurrentPlaylistElement); - _PreviousMusicIndex = _PreviousFileNames.Count - 1; - } - else if (_PreviousFileNames.Count > 0) - { - //We are in the previous list - Stop(); - _PreviousMusicIndex++; - - _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; - } - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); - CSound.SetStreamVolumeMax(_CurrentMusicStream, CConfig.BackgroundMusicVolume); - - //Seek to #Start-Tag, if found - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); - - if (_VideoEnabled) - _LoadVideo(); - CSound.SetStreamVolume(_CurrentMusicStream, 0f); - Play(); + //We are in the previous list and next element exists + _PreviousMusicIndex++; + _CurrentPlaylistElement = _PreviousFiles[_PreviousMusicIndex]; } else - Stop(); + { + //We are not in the previous list (anymore) + if (_NotPlayedFiles.Count == 0) + { + if (_PreviousFiles.Count == 0) + return; //No songs to play + _NotPlayedFiles.AddRange(_PreviousFiles); + } + + _CurrentPlaylistElement = _NotPlayedFiles[CGame.Rand.Next(_NotPlayedFiles.Count)]; + _NotPlayedFiles.Remove(_CurrentPlaylistElement); + + _PreviousFiles.Add(_CurrentPlaylistElement); + _PreviousMusicIndex = _PreviousFiles.Count - 1; + } + _StartSong(); + CanSing = !_IsBackgroundFile(_CurrentPlaylistElement); } public static void Previous() { - if (_PreviousFileNames.Count > 0 && _PreviousMusicIndex >= 0) + if (_PreviousMusicIndex < 0) + return; + Debug.Assert(_CurrentMusicStream != -1 && _CurrentPlaylistElement != null); + if (CSound.GetPosition(_CurrentMusicStream) <= 1.5f && _PreviousMusicIndex > 0) { - if (CSound.GetPosition(_CurrentMusicStream) >= 1.5f) - { - //Seek to #Start-Tag, if found - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); - else - CSound.SetPosition(_CurrentMusicStream, 0); - if (_VideoEnabled && _Video != -1) - { - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); - else - CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); - } - } - else - { - Stop(); - _PreviousMusicIndex--; - if (_PreviousMusicIndex < 0) - _PreviousMusicIndex = 0; //No previous songs left, so play the first + Stop(); //stop last song + _PreviousMusicIndex--; - _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; - - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); - CSound.SetStreamVolumeMax(_CurrentMusicStream, CConfig.BackgroundMusicVolume); - if (_VideoEnabled) - _LoadVideo(); - CSound.SetStreamVolume(_CurrentMusicStream, 0f); - Play(); - } + _CurrentPlaylistElement = _PreviousFiles[_PreviousMusicIndex]; + CanSing = !_IsBackgroundFile(_CurrentPlaylistElement); } - else if (_CurrentMusicStream != -1) - { - //Seek to #Start-Tag, if found - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); - else - CSound.SetPosition(_CurrentMusicStream, 0); - if (_VideoEnabled && _Video != -1) - { - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); - else - CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); - } - } - } - - public static void ApplyVolume() - { - CSound.SetStreamVolumeMax(_CurrentMusicStream, CConfig.BackgroundMusicVolume); + _StartSong(); } public static void AddOwnMusic() { - if (!_OwnMusicAdded) - { - foreach (CSong song in CSongs.AllSongs) - { - _AllFileNames.Add(new CPlaylistElement(song)); - _NotPlayedFileNames.Add(new CPlaylistElement(song)); - } - } + if (_OwnMusicAdded) + return; + foreach (CSong song in CSongs.AllSongs) + _NotPlayedFiles.Add(new CPlaylistElement(song)); _OwnMusicAdded = true; } - public static void RemoveOwnMusic() + private static void _RemoveOwnMusic() { - _AllFileNames.Clear(); - _NotPlayedFileNames.Clear(); + if (!_OwnMusicAdded) + return; + _NotPlayedFiles.RemoveAll(el => el.SongID >= 0); + _PreviousFiles.RemoveAll(el => el.SongID >= 0); + _PreviousMusicIndex = _PreviousFiles.IndexOf(_CurrentPlaylistElement); - if (_BackgroundMusicAdded) - { - _AllFileNames.AddRange(_BGMusicFileNames); - _NotPlayedFileNames.AddRange(_BGMusicFileNames); - } - - if (IsPlaying && !_IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) + if (IsPlaying && !_IsBackgroundFile(_CurrentPlaylistElement)) Next(); _OwnMusicAdded = false; } - public static void AddBackgroundMusic() - { - if (!_BackgroundMusicAdded) - { - _AllFileNames.AddRange(_BGMusicFileNames); - _NotPlayedFileNames.AddRange(_BGMusicFileNames); - _BackgroundMusicAdded = true; - } - } - - public static void RemoveBackgroundMusic() + private static void _AddBackgroundMusic() { if (_BackgroundMusicAdded) - { - _AllFileNames.Clear(); - _OwnMusicAdded = false; - AddOwnMusic(); - _BackgroundMusicAdded = false; + return; + _NotPlayedFiles.AddRange(_BGMusicFiles); + _BackgroundMusicAdded = true; + } - if (IsPlaying && _IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) - Next(); + private static void _RemoveBackgroundMusic() + { + if (!_BackgroundMusicAdded) + return; + _NotPlayedFiles.RemoveAll(el => el.SongID < 0); + _PreviousFiles.RemoveAll(el => el.SongID < 0); + _PreviousMusicIndex = _PreviousFiles.IndexOf(_CurrentPlaylistElement); + + if (IsPlaying && _IsBackgroundFile(_CurrentPlaylistElement)) + Next(); + + _BackgroundMusicAdded = false; + } + + public static void SetMusicSource(EBackgroundMusicSource source) + { + if (_MusicSource == source) + return; + _MusicSource = source; + switch (_MusicSource) + { + case EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC: + _AddBackgroundMusic(); + _RemoveOwnMusic(); + break; + + case EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC: + AddOwnMusic(); + _RemoveBackgroundMusic(); + break; + case EBackgroundMusicSource.TR_CONFIG_OWN_MUSIC: + _AddBackgroundMusic(); + AddOwnMusic(); + break; } } - public static void CheckAndApplyConfig(EOffOn newOnOff, EBackgroundMusicSource newSource, float newVolume) + public static void SetVolume(float volume) { - if (CConfig.BackgroundMusicSource != newSource || (newOnOff == EOffOn.TR_CONFIG_ON && !_OwnMusicAdded && !_BackgroundMusicAdded)) - { - CConfig.BackgroundMusicSource = newSource; - - switch (newSource) - { - case EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC: - if (!_BackgroundMusicAdded) - AddBackgroundMusic(); - - RemoveOwnMusic(); - break; - - case EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC: - if (!_OwnMusicAdded) - AddOwnMusic(); - - RemoveBackgroundMusic(); - break; - case EBackgroundMusicSource.TR_CONFIG_OWN_MUSIC: - if (!_BackgroundMusicAdded) - AddBackgroundMusic(); - - if (!_OwnMusicAdded) - AddOwnMusic(); - break; - } - } - - if (CConfig.BackgroundMusic != newOnOff) - { - CConfig.BackgroundMusic = newOnOff; - if (newOnOff == EOffOn.TR_CONFIG_ON) - Play(); - else - Pause(); - } - - if (Math.Abs(CConfig.BackgroundMusicVolume - newVolume) > 0.01) - { - CConfig.BackgroundMusicVolume = (int)newVolume; - ApplyVolume(); - } - - CConfig.SaveConfig(); - } - - public static void ToggleVideo() - { - if (_Video != -1) - { - CVideo.Close(_Video); - CDraw.RemoveTexture(ref _CurrentVideoTexture); - _Video = -1; - } - else - _LoadVideo(); + _Volume = volume; + if (_CurrentMusicStream >= 0) + CSound.SetStreamVolume(_CurrentMusicStream, _Volume); } public static CTexture GetVideoTexture() { - if (_Video != -1) + if (_Video == -1) + return null; + float vtime; + if (CVideo.GetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), out vtime)) { - float vtime; - if (CVideo.GetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), out vtime)) + if (_VideoFading != null) { - if (_VideoFading != null) - { - bool finished; - _CurrentVideoTexture.Color.A = _VideoFading.GetValue(out finished); - if (finished) - _VideoFading = null; - } - return _CurrentVideoTexture; + bool finished; + _CurrentVideoTexture.Color.A = _VideoFading.GetValue(out finished); + if (finished) + _VideoFading = null; } + return _CurrentVideoTexture; } return null; } private static bool _IsBackgroundFile(CPlaylistElement element) { - return _BGMusicFileNames.Any(elements => elements.MusicFilePath == element.MusicFilePath); + return _BGMusicFiles.Contains(element); } private static void _LoadVideo() @@ -464,134 +408,11 @@ namespace Vocaluxe.Base if (_Video != -1 || String.IsNullOrEmpty(_CurrentPlaylistElement.VideoFilePath)) return; _Video = CVideo.Load(_CurrentPlaylistElement.VideoFilePath); - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); + if (CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) + CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap + _CurrentPlaylistElement.Start); //Use gap, otherwhise we will overwrite position in GetVideoTexture else CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); _VideoFading = new CFading(0f, 1f, 3f); } } - - class CPlaylistElement - { - private readonly CSong _Song; - - private readonly int _SongID; - public int SongID - { - get { return _SongID; } - } - - private string _MusicFilePath = String.Empty; - - public string MusicFilePath - { - get - { - if (_Song != null) - return _Song.GetMP3(); - - return _MusicFilePath; - } - - set { _MusicFilePath = value; } - } - - public string VideoFilePath - { - get - { - if (_Song != null) - return _Song.GetVideo(); - - return string.Empty; - } - } - - public string Title - { - get - { - if (_Song != null) - return _Song.Title; - - return ""; - } - } - - public string Artist - { - get - { - if (_Song != null) - return _Song.Artist; - - return ""; - } - } - - public float Start - { - get - { - if (_Song != null) - return _Song.Start; - - return 0f; - } - } - - public float Finish - { - get - { - if (_Song != null) - return _Song.Finish; - - return 0f; - } - } - - public CTexture Cover - { - get - { - if (_Song != null) - return _Song.CoverTextureSmall; - - return CCover.NoCover; - } - } - - public float VideoGap - { - get - { - if (_Song != null) - return _Song.VideoGap; - - return 0; - } - } - - public CPlaylistElement(CSong song) - { - MusicFilePath = string.Empty; - _SongID = song.ID; - - _Song = song; - } - - public CPlaylistElement(string filePath) - { - MusicFilePath = filePath; - _SongID = -1; - } - - public CPlaylistElement() - { - MusicFilePath = string.Empty; - _SongID = -1; - } - } } \ No newline at end of file diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index bd6f7e39..50314cb2 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -236,8 +236,6 @@ namespace Vocaluxe.Base _Screens[(int)_CurrentScreen].OnClose(); _CurrentScreen = _NextScreen; _NextScreen = EScreens.ScreenNull; - if (CBackgroundMusic.IsPlaying) - CBackgroundMusic.Play(); _Screens[(int)_CurrentScreen].OnShowFinish(); _Screens[(int)_CurrentScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y); @@ -431,7 +429,7 @@ namespace Vocaluxe.Base else { CConfig.BackgroundMusicVolume += diff; - CBackgroundMusic.ApplyVolume(); + CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); } break; @@ -442,7 +440,7 @@ namespace Vocaluxe.Base default: CConfig.BackgroundMusicVolume += diff; - CBackgroundMusic.ApplyVolume(); + CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); break; } CConfig.SaveConfig(); @@ -453,8 +451,6 @@ namespace Vocaluxe.Base ShowPopup(EPopupScreens.PopupVolumeControl); _VolumePopupTimer.Restart(); } - - CBackgroundMusic.ApplyVolume(); } if (keyEvent.ModShift && (keyEvent.Key == Keys.F1)) diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 36e686ba..31a66c59 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -360,11 +360,6 @@ namespace Vocaluxe.Base CBackgroundMusic.Play(); } - public void ApplyVolume() - { - CBackgroundMusic.ApplyVolume(); - } - public CTexture GetVideoTexture() { return CBackgroundMusic.GetVideoTexture(); diff --git a/Vocaluxe/Base/CPlaylistElement.cs b/Vocaluxe/Base/CPlaylistElement.cs new file mode 100644 index 00000000..195be8e7 --- /dev/null +++ b/Vocaluxe/Base/CPlaylistElement.cs @@ -0,0 +1,67 @@ +using System; +using VocaluxeLib.Draw; +using VocaluxeLib.Songs; + +namespace Vocaluxe.Base +{ + class CPlaylistElement + { + private readonly CSong _Song; + private readonly string _MusicFilePath = String.Empty; + + public int SongID + { + get { return (_Song == null) ? -1 : _Song.ID; } + } + + public string MusicFilePath + { + get { return _Song != null ? _Song.GetMP3() : _MusicFilePath; } + } + + public string VideoFilePath + { + get { return _Song != null ? _Song.GetVideo() : string.Empty; } + } + + public string Title + { + get { return _Song != null ? _Song.Title : ""; } + } + + public string Artist + { + get { return _Song != null ? _Song.Artist : ""; } + } + + public float Start + { + get { return _Song != null ? _Song.Start : 0f; } + } + + public float Finish + { + get { return _Song != null ? _Song.Finish : 0f; } + } + + public CTexture Cover + { + get { return _Song != null ? _Song.CoverTextureSmall : CCover.NoCover; } + } + + public float VideoGap + { + get { return _Song != null ? _Song.VideoGap : 0; } + } + + public CPlaylistElement(CSong song) + { + _Song = song; + } + + public CPlaylistElement(string filePath) + { + _MusicFilePath = filePath; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index e978691d..a4ccca09 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -153,14 +153,6 @@ namespace Vocaluxe.Base public const float SlideShowImageTime = 3500f; public const float SlideShowFadeTime = 500f; - public static readonly List MusicFileTypes = new List - { - "*.mp3", - "*.wma", - "*.ogg", - "*.wav" - }; - private static AssemblyName _Assembly { get { return Assembly.GetExecutingAssembly().GetName(); } diff --git a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs index f95f651a..42b132bb 100644 --- a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs +++ b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs @@ -115,7 +115,7 @@ namespace Vocaluxe.Screens else { CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideVolume].Selection * 5; - CBackgroundMusic.ApplyVolume(); + CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); } break; @@ -125,7 +125,7 @@ namespace Vocaluxe.Screens default: CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideVolume].Selection * 5; - CBackgroundMusic.ApplyVolume(); + CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); break; } CConfig.SaveConfig(); diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 0132a3af..03e29b55 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -42,8 +42,6 @@ namespace Vocaluxe.Screens private bool _IntroOutPlayed; private CVideoPlayer[] _Intros; - private bool _BGMusicStarted; - public override void Init() { base.Init(); @@ -99,8 +97,6 @@ namespace Vocaluxe.Screens } } - _SongLoaderThread = new Thread(CSongs.LoadSongs) {Name = "SongLoader"}; - _Texts[_TextStatus].Text = CLanguage.Translate("TR_SCREENLOAD_TOTAL") + ": 0 " + CLanguage.Translate("TR_SCREENLOAD_SONGS") + " (0 " + CLanguage.Translate("TR_SCREENLOAD_LOADED") + ")"; @@ -115,8 +111,6 @@ namespace Vocaluxe.Screens _Intros[i].Load(_IntroVideo[i]); _Texts[_TextProgramName].Visible = false; } - - _BGMusicStarted = false; } public override void OnShowFinish() @@ -130,21 +124,11 @@ namespace Vocaluxe.Screens } CLog.StartBenchmark("Load Songs Full"); - _SongLoaderThread.IsBackground = true; + _SongLoaderThread = new Thread(CSongs.LoadSongs) {Name = "SongLoader", IsBackground = true}; _SongLoaderThread.Start(); + CBackgroundMusic.OwnSongsAvailable = false; - if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON && - CConfig.BackgroundMusicSource == EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC && !_BGMusicStarted) - { - CBackgroundMusic.AddOwnMusic(); - - if (!CBackgroundMusic.IsPlaying) - CBackgroundMusic.Next(); - - _BGMusicStarted = true; - } - - CBackgroundMusic.CanSing = false; + CBackgroundMusic.Play(); } public override bool UpdateGame() @@ -164,15 +148,11 @@ namespace Vocaluxe.Screens CLanguage.Translate("TR_SCREENLOAD_SONGS") + " (" + CSongs.NumSongsWithCoverLoaded + " " + CLanguage.Translate("TR_SCREENLOAD_LOADED") + ")"; - if (CSongs.SongsLoaded && CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON && - CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC && !_BGMusicStarted) + if (CSongs.SongsLoaded && !CBackgroundMusic.OwnSongsAvailable) { - CBackgroundMusic.AddOwnMusic(); + CBackgroundMusic.OwnSongsAvailable = true; - if (!CBackgroundMusic.IsPlaying) - CBackgroundMusic.Next(); - - _BGMusicStarted = true; + CBackgroundMusic.Play(); } return true; @@ -196,8 +176,6 @@ namespace Vocaluxe.Screens foreach (CVideoPlayer videoPlayer in _Intros) videoPlayer.Close(); - CBackgroundMusic.CanSing = true; - CLog.StopBenchmark("Load Songs Full"); //Init Playlists @@ -224,6 +202,7 @@ namespace Vocaluxe.Screens } else if (_CurrentIntroVideo == 0 && _Intros[0].IsFinished && CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART) { + _Intros[_CurrentIntroVideo].Close(); _CurrentIntroVideo = 1; _Intros[1].Loop = true; _Intros[1].Start(); @@ -231,6 +210,7 @@ namespace Vocaluxe.Screens else if ((_CurrentIntroVideo == 1 && CSongs.CoverLoaded) || (_CurrentIntroVideo == 0 && _Intros[0].IsFinished)) { + _Intros[_CurrentIntroVideo].Close(); _CurrentIntroVideo = 2; _Intros[2].Start(); } diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs index 847586f8..8e417a2c 100644 --- a/Vocaluxe/Screens/CScreenOptionsSound.cs +++ b/Vocaluxe/Screens/CScreenOptionsSound.cs @@ -150,13 +150,16 @@ namespace Vocaluxe.Screens { CConfig.GameMusicVolume = _SelectSlides[_SelectSlideGameMusicVolume].Selection * 5; CConfig.PreviewMusicVolume = _SelectSlides[_SelectSlidePreviewMusicVolume].Selection * 5; + CConfig.BackgroundMusic=(EOffOn)_SelectSlides[_SelectSlideBackgroundMusic].Selection; + CConfig.BackgroundMusicSource = (EBackgroundMusicSource)_SelectSlides[_SelectSlideBackgroundMusicSource].Selection; + CConfig.BackgroundMusicVolume= _SelectSlides[_SelectSlideBackgroundMusicVolume].Selection * 5; CConfig.SaveConfig(); - var newOffOn = (EOffOn)_SelectSlides[_SelectSlideBackgroundMusic].Selection; - var newSource = (EBackgroundMusicSource)_SelectSlides[_SelectSlideBackgroundMusicSource].Selection; - float newVolume = _SelectSlides[_SelectSlideBackgroundMusicVolume].Selection * 5; - - CBackgroundMusic.CheckAndApplyConfig(newOffOn, newSource, newVolume); + CBackgroundMusic.SetMusicSource(CConfig.BackgroundMusicSource); + CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); + if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON) + CBackgroundMusic.Play(); + else CBackgroundMusic.Pause(); } } } \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 047fbfd9..0dc33afe 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -216,6 +216,7 @@ + diff --git a/VocaluxeLib/CHelper.cs b/VocaluxeLib/CHelper.cs index b10cdb74..77c8f729 100644 --- a/VocaluxeLib/CHelper.cs +++ b/VocaluxeLib/CHelper.cs @@ -26,6 +26,22 @@ namespace VocaluxeLib { public static class CHelper { + private static readonly List _SoundFileTypes = new List + { + "*.mp3", + "*.wma", + "*.ogg", + "*.wav" + }; + + private static readonly List _ImageFileTypes = new List + { + "*.jpg", + "*.jpeg", + "*.png", + "*.gif" + }; + public static int CombinationCount(int n, int k) { if (k > n) @@ -61,7 +77,7 @@ namespace VocaluxeLib /// public static string ListStrings(string[] str) { - string result = string.Empty; + string result = String.Empty; for (int i = 0; i < str.Length; i++) { result += str[i]; @@ -95,7 +111,7 @@ namespace VocaluxeLib return 0; } int result; - return int.TryParse(value, out result) ? result : 0; + return Int32.TryParse(value, out result) ? result : 0; } public static void SetRect(RectangleF bounds, out RectangleF rect, float rectAspect, EAspect aspect) @@ -178,9 +194,25 @@ namespace VocaluxeLib return files; } + /// + /// Returns a list with all files in the given path that matches at least one of the given patterns + /// + /// Path to search for + /// List of patterns to match + /// Search directories recursively + /// False for just file names, True for full path + /// List of file names + public static List ListFiles(string path, IEnumerable searchPatterns, bool recursive = false, bool fullpath = false) + { + var files = new List(); + foreach (string pattern in searchPatterns) + files.AddRange(ListFiles(path, pattern, recursive, fullpath)); + + return files; + } + /// /// Returns a list with all image files in the given path - /// Searches for: jpg, jpeg, png, gif /// /// Path to search for /// Search directories recursively @@ -188,11 +220,19 @@ namespace VocaluxeLib /// List of image file names public static List ListImageFiles(string path, bool recursive = false, bool fullpath = false) { - List files = ListFiles(path, "*.jpg", recursive, fullpath); - files.AddRange(ListFiles(path, "*.jpeg", recursive, fullpath)); - files.AddRange(ListFiles(path, "*.png", recursive, fullpath)); - files.AddRange(ListFiles(path, "*.gif", recursive, fullpath)); - return files; + return ListFiles(path, _ImageFileTypes, recursive, fullpath); + } + + /// + /// Returns a list with all image files in the given path + /// + /// Path to search for + /// Search directories recursively + /// False for just file names, True for full path + /// List of image file names + public static List ListSoundFiles(string path, bool recursive = false, bool fullpath = false) + { + return ListFiles(path, _SoundFileTypes, recursive, fullpath); } public static bool TryParse(string value, out T result, bool ignoreCase = false) @@ -212,7 +252,7 @@ namespace VocaluxeLib public static bool TryParse(string value, out float result) { value = value.Replace(',', '.'); - return float.TryParse(value, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, NumberFormatInfo.InvariantInfo, out result); + return Single.TryParse(value, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, NumberFormatInfo.InvariantInfo, out result); } public static bool IsInBounds(SRectF bounds, SMouseEvent mouseEvent) diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 616a8ebc..7fcf74ca 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -124,8 +124,6 @@ namespace VocaluxeLib void Pause(); void Play(); - void ApplyVolume(); - CTexture GetVideoTexture(); } From c73f7d18cc99940230570581bf2240fe3edcb8bc Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 18 Mar 2014 17:05:37 +0100 Subject: [PATCH 028/116] Resort members (no changes) --- Vocaluxe/Base/CBackgroundMusic.cs | 214 +++++++++++++++--------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index f23943f8..fb3164c3 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -123,7 +123,7 @@ namespace Vocaluxe.Base { _OwnSongsAvailable = value; if (_OwnSongsAvailable && _MusicSource != EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC) - AddOwnMusic(); + _AddOwnMusic(); } } @@ -203,62 +203,6 @@ namespace Vocaluxe.Base IsPlaying = false; } - public static void Update() - { - if (!IsPlaying) - return; - Debug.Assert(_CurrentMusicStream != -1 && _CurrentPlaylistElement != null); - - float timeToPlay; - if (Math.Abs(_CurrentPlaylistElement.Finish) < 0.001) //No End-Tag defined - timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream); - else //End-Tag found - timeToPlay = _CurrentPlaylistElement.Finish - CSound.GetPosition(_CurrentMusicStream); - - bool finished = CSound.IsFinished(_CurrentMusicStream); - if (timeToPlay <= CSettings.BackgroundMusicFadeTime || finished) - { - if (RepeatSong) - _StartSong(); - else - Next(); - } - } - - /// - /// (Re-)Starts the _CurrentPlaylistElement - /// - private static void _StartSong() - { - Debug.Assert(_CurrentPlaylistElement != null); - //If we have an active stream, reuse it - if (_CurrentMusicStream < 0) - { - //otherwhise load - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); - if (_CurrentMusicStream < 0) - return; - CSound.SetStreamVolume(_CurrentMusicStream, 0f); - CSound.Fade(_CurrentMusicStream, _Volume, CSettings.BackgroundMusicFadeTime); - } - //Seek to #Start-Tag, if found - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); - - if (_VideoEnabled) - { - if (_Video != -1) - { - if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) - CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap + _CurrentPlaylistElement.Start); - else - CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); - } - else - _LoadVideo(); - } - } - public static void Next() { Stop(); //stop last song if any @@ -304,7 +248,112 @@ namespace Vocaluxe.Base _StartSong(); } - public static void AddOwnMusic() + public static void Update() + { + if (!IsPlaying) + return; + Debug.Assert(_CurrentMusicStream != -1 && _CurrentPlaylistElement != null); + + float timeToPlay; + if (Math.Abs(_CurrentPlaylistElement.Finish) < 0.001) //No End-Tag defined + timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream); + else //End-Tag found + timeToPlay = _CurrentPlaylistElement.Finish - CSound.GetPosition(_CurrentMusicStream); + + bool finished = CSound.IsFinished(_CurrentMusicStream); + if (timeToPlay <= CSettings.BackgroundMusicFadeTime || finished) + { + if (RepeatSong) + _StartSong(); + else + Next(); + } + } + + public static CTexture GetVideoTexture() + { + if (_Video == -1) + return null; + float vtime; + if (CVideo.GetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), out vtime)) + { + if (_VideoFading != null) + { + bool finished; + _CurrentVideoTexture.Color.A = _VideoFading.GetValue(out finished); + if (finished) + _VideoFading = null; + } + return _CurrentVideoTexture; + } + return null; + } + + public static void SetMusicSource(EBackgroundMusicSource source) + { + if (_MusicSource == source) + return; + _MusicSource = source; + switch (_MusicSource) + { + case EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC: + _AddBackgroundMusic(); + _RemoveOwnMusic(); + break; + + case EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC: + _AddOwnMusic(); + _RemoveBackgroundMusic(); + break; + case EBackgroundMusicSource.TR_CONFIG_OWN_MUSIC: + _AddBackgroundMusic(); + _AddOwnMusic(); + break; + } + } + + public static void SetVolume(float volume) + { + _Volume = volume; + if (_CurrentMusicStream >= 0) + CSound.SetStreamVolume(_CurrentMusicStream, _Volume); + } + + /// + /// (Re-)Starts the _CurrentPlaylistElement + /// + private static void _StartSong() + { + Debug.Assert(_CurrentPlaylistElement != null); + //If we have an active stream, reuse it + if (_CurrentMusicStream < 0) + { + //otherwhise load + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); + if (_CurrentMusicStream < 0) + return; + CSound.SetStreamVolume(_CurrentMusicStream, 0f); + CSound.Fade(_CurrentMusicStream, _Volume, CSettings.BackgroundMusicFadeTime); + } + //Seek to #Start-Tag, if found + if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) + CSound.SetPosition(_CurrentMusicStream, _CurrentPlaylistElement.Start); + + if (_VideoEnabled) + { + if (_Video != -1) + { + if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) + CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap + _CurrentPlaylistElement.Start); + else + CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap); + } + else + _LoadVideo(); + } + } + + private static void _AddOwnMusic() { if (_OwnMusicAdded) return; @@ -349,55 +398,6 @@ namespace Vocaluxe.Base _BackgroundMusicAdded = false; } - public static void SetMusicSource(EBackgroundMusicSource source) - { - if (_MusicSource == source) - return; - _MusicSource = source; - switch (_MusicSource) - { - case EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC: - _AddBackgroundMusic(); - _RemoveOwnMusic(); - break; - - case EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC: - AddOwnMusic(); - _RemoveBackgroundMusic(); - break; - case EBackgroundMusicSource.TR_CONFIG_OWN_MUSIC: - _AddBackgroundMusic(); - AddOwnMusic(); - break; - } - } - - public static void SetVolume(float volume) - { - _Volume = volume; - if (_CurrentMusicStream >= 0) - CSound.SetStreamVolume(_CurrentMusicStream, _Volume); - } - - public static CTexture GetVideoTexture() - { - if (_Video == -1) - return null; - float vtime; - if (CVideo.GetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), out vtime)) - { - if (_VideoFading != null) - { - bool finished; - _CurrentVideoTexture.Color.A = _VideoFading.GetValue(out finished); - if (finished) - _VideoFading = null; - } - return _CurrentVideoTexture; - } - return null; - } - private static bool _IsBackgroundFile(CPlaylistElement element) { return _BGMusicFiles.Contains(element); From ba4888d63d5acd704d39d54e9f28fca4bb6d6e8a Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 18 Mar 2014 17:44:33 +0100 Subject: [PATCH 029/116] Fix error on 32 bit systems --- Vocaluxe/CProgrammHelper.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Vocaluxe/CProgrammHelper.cs b/Vocaluxe/CProgrammHelper.cs index e1994ced..88c35368 100644 --- a/Vocaluxe/CProgrammHelper.cs +++ b/Vocaluxe/CProgrammHelper.cs @@ -50,6 +50,16 @@ namespace Vocaluxe return false; } + private static bool _KeyExists(string key) + { + using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(key)) + { + if (rk != null) + return true; + } + return false; + } + /// /// Checks if a given program is installed by checking the Uninstall registry key. /// @@ -57,10 +67,11 @@ namespace Vocaluxe /// private static bool _IsProgramInstalled(string name) { - const string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; - const string uninstallKeyx64 = @"SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"; + const string baseKey = @"SOFTWARE\"; + const string baseKey64 = @"SOFTWARE\WoW6432Node\"; + const string uninstallKey = @"Microsoft\Windows\CurrentVersion\Uninstall"; name = name.ToLower(); - return _CheckUninstallKey(name, uninstallKey) || _CheckUninstallKey(name, uninstallKeyx64); + return _CheckUninstallKey(name, baseKey + uninstallKey) || (_KeyExists(baseKey64) && _CheckUninstallKey(name, baseKey64 + uninstallKey)); } private static bool _SystemDllExists(string dllName) From 2e14767e77a3a8567e46cb1a053ad20850c96456 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 19 Mar 2014 14:54:57 +0100 Subject: [PATCH 030/116] Actually check if songs are available --- Vocaluxe/Base/CBackgroundMusic.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index fb3164c3..7c85a5af 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -138,16 +138,13 @@ namespace Vocaluxe.Base _Volume = CConfig.BackgroundMusicVolume; _VideoEnabled = (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON); - _MusicSource = CConfig.BackgroundMusicSource; + SetMusicSource(CConfig.BackgroundMusicSource); List soundFiles = CHelper.ListSoundFiles(CSettings.FolderBackgroundMusic, true, true); foreach (string path in soundFiles) _BGMusicFiles.Add(new CPlaylistElement(path)); - if (_MusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) - _AddBackgroundMusic(); - IsPlaying = false; _Initialized = true; } @@ -355,7 +352,7 @@ namespace Vocaluxe.Base private static void _AddOwnMusic() { - if (_OwnMusicAdded) + if (_OwnMusicAdded || !_OwnSongsAvailable) return; foreach (CSong song in CSongs.AllSongs) _NotPlayedFiles.Add(new CPlaylistElement(song)); From ecd6b6efdb9c8e0d65a7f91702310c243d365429 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 19 Mar 2014 17:28:00 +0100 Subject: [PATCH 031/116] Fix tone-detection bug --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 3ead34bc..fbe886f2 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -194,7 +194,7 @@ namespace Vocaluxe.Lib.Sound.Record accumDist += dist; } - return 1.0 - (double)accumDist / Int16.MaxValue / _AnalysisBufLen; + return 1.0 - (double)accumDist / Int16.MaxValue / sampleIndex; } public void Dispose() From cd79704c00ebbf1a98dd365e7ed42a5eeb267516 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 19 Mar 2014 17:28:56 +0100 Subject: [PATCH 032/116] Bump version to 84 --- Vocaluxe/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Properties/AssemblyInfo.cs b/Vocaluxe/Properties/AssemblyInfo.cs index 861326f6..7a725ec9 100644 --- a/Vocaluxe/Properties/AssemblyInfo.cs +++ b/Vocaluxe/Properties/AssemblyInfo.cs @@ -49,5 +49,5 @@ using System.Runtime.InteropServices; // Revision // -[assembly: AssemblyVersion("0.3.0.83")] -[assembly: AssemblyFileVersion("0.3.0.83")] \ No newline at end of file +[assembly: AssemblyVersion("0.3.0.84")] +[assembly: AssemblyFileVersion("0.3.0.84")] \ No newline at end of file From eba5deba2b9e87ae0b3176dd90a441d305ccd80e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 19 Mar 2014 19:54:55 +0100 Subject: [PATCH 033/116] Make CSettings contain only constant values to avoid accidental misuse. Everything changeable is in CConfig --- Vocaluxe/Base/CConfig.cs | 119 +++++++++++++----------- Vocaluxe/Base/CCursor.cs | 35 ++++--- Vocaluxe/Base/CDataBase.cs | 2 +- Vocaluxe/Base/CGraphics.cs | 20 ++-- Vocaluxe/Base/CMain.cs | 13 ++- Vocaluxe/Base/CPlaylists.cs | 4 +- Vocaluxe/Base/CProfiles.cs | 45 +++++---- Vocaluxe/Base/CSettings.cs | 59 +++++------- Vocaluxe/Base/CSongs.cs | 2 +- Vocaluxe/Base/Server/CVocaluxeServer.cs | 7 +- Vocaluxe/Lib/Draw/CDirect3D.cs | 12 +-- Vocaluxe/Lib/Draw/CDrawWinForm.cs | 11 +-- Vocaluxe/Lib/Draw/COpenGL.cs | 11 +-- Vocaluxe/Lib/Playlist/CPlaylistFile.cs | 6 +- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 8 +- Vocaluxe/Program.cs | 4 +- Vocaluxe/Screens/CScreenLoad.cs | 6 +- Vocaluxe/Screens/CScreenProfiles.cs | 2 +- VocaluxeLib/Enums.cs | 2 +- VocaluxeLib/IBasic.cs | 3 +- VocaluxeLib/Menu/CButton.cs | 2 +- VocaluxeLib/Menu/CLyric.cs | 2 +- VocaluxeLib/Menu/CMenu.cs | 6 +- VocaluxeLib/Menu/CObjectInteractions.cs | 6 +- VocaluxeLib/Menu/CPlaylist.cs | 2 +- VocaluxeLib/Menu/CSelectSlide.cs | 6 +- VocaluxeLib/Menu/CStatic.cs | 4 +- VocaluxeLib/Menu/CText.cs | 6 +- VocaluxeLib/Profile/CAvatar.cs | 36 ++++--- VocaluxeLib/Profile/CProfile.cs | 19 +--- 30 files changed, 217 insertions(+), 243 deletions(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index fec250da..6eb0be6b 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -43,6 +43,15 @@ namespace Vocaluxe.Base ConformanceLevel = ConformanceLevel.Document }; + private static bool _Initialized; + + // Base file and folder names (formerly from CSettings but they can be changed) + private const string _FolderProfiles = "Profiles"; //Use ProfileFolders for access + private const string _FolderSongs = "Songs"; //Use SongFolders for access + public static string FolderPlaylists = "Playlists"; + public static string FileHighscoreDB = "HighscoreDB.sqlite"; + private static string _FileConfig = "Config.xml"; + // Debug public static EDebugLevel DebugLevel = EDebugLevel.TR_CONFIG_OFF; public static EOffOn SaveModifiedSongs = EOffOn.TR_CONFIG_OFF; @@ -87,7 +96,6 @@ namespace Vocaluxe.Base // Sound public static EPlaybackLib PlayBackLib = EPlaybackLib.Gstreamer; - public static ERecordLib RecordLib = ERecordLib.PortAudio; public static EBufferSize AudioBufferSize = EBufferSize.B2048; public static int AudioLatency; private static int _BackgroundMusicVolume = 30; @@ -97,8 +105,28 @@ namespace Vocaluxe.Base public static int PreviewMusicVolume = 50; public static int GameMusicVolume = 80; + //Folders + public static readonly List SongFolders = new List() + { + Path.Combine(Directory.GetCurrentDirectory(), _FolderSongs) + +#if INSTALLER + ,Path.Combine(CSettings.DataPath, CSettings.FolderSongs); +#endif + }; + /// + /// Folders with profiles + /// First one is used for new profiles + /// + public static readonly List ProfileFolders = new List + { +#if INSTALLER + Path.Combine(Environment.CurrentDirectory, CSettings.FolderProfiles), +#endif + Path.Combine(CSettings.DataPath, _FolderProfiles) + }; + // Game - public static readonly List SongFolder = new List(); public static ESongMenu SongMenu = ESongMenu.TR_CONFIG_TILE_BOARD; public static ESongSorting SongSorting = ESongSorting.TR_CONFIG_ARTIST; public static EOffOn IgnoreArticles = EOffOn.TR_CONFIG_ON; @@ -120,8 +148,11 @@ namespace Vocaluxe.Base public static EOffOn VideosToBackground = EOffOn.TR_CONFIG_OFF; // Record - public static SMicConfig[] MicConfig; - public static int MicDelay = 300; //[ms] + public static ERecordLib RecordLib = ERecordLib.PortAudio; + public static readonly SMicConfig[] MicConfig = new SMicConfig[CSettings.MaxNumPlayer]; + public static int MicDelay = 200; //[ms] + + // Webcam public static EWebcamLib WebcamLib = EWebcamLib.OpenCV; public static SWebcamConfig WebcamConfig; @@ -135,8 +166,6 @@ namespace Vocaluxe.Base private static readonly List _Params = new List(); private static readonly List _Values = new List(); - //Variables to save old values for commandline-parameters - private static readonly List _SongFolderOld = new List(); public static int BackgroundMusicVolume { get { return _BackgroundMusicVolume; } @@ -154,27 +183,21 @@ namespace Vocaluxe.Base public static void Init() { - SongFolder.Add(Path.Combine(Directory.GetCurrentDirectory(), CSettings.FolderSongs)); - -#if INSTALLER - SongFolder.Add(Path.Combine(CSettings.DataPath, CSettings.FolderSongs)); -#endif - - foreach (string folder in SongFolder) - CSettings.CreateFolder(folder); - - MicConfig = new SMicConfig[CSettings.MaxNumPlayer]; + if (_Initialized) + return; // Init config file - if (!File.Exists(Path.Combine(CSettings.DataPath, CSettings.FileConfig))) + if (!File.Exists(Path.Combine(CSettings.DataPath, _FileConfig))) SaveConfig(); + else + _LoadConfig(); - _LoadConfig(); + _Initialized = true; } private static void _LoadConfig() { - CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.DataPath, CSettings.FileConfig)); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.DataPath, _FileConfig)); if (xmlReader == null) return; @@ -231,15 +254,14 @@ namespace Vocaluxe.Base #region Game // Songfolder - string value = string.Empty; + string value = String.Empty; int i = 1; while (xmlReader.GetValue("//root/Game/SongFolder" + i, out value, value)) { if (i == 1) - SongFolder.Clear(); - - SongFolder.Add(value); - value = string.Empty; + SongFolders.Clear(); + SongFolders.Add(value); + value = String.Empty; i++; } @@ -271,7 +293,7 @@ namespace Vocaluxe.Base //Read players from config for (i = 1; i <= CSettings.MaxNumPlayer; i++) - xmlReader.GetValue("//root/Game/Players/Player" + i, out Players[i - 1], string.Empty); + xmlReader.GetValue("//root/Game/Players/Player" + i, out Players[i - 1], String.Empty); #endregion Game #region Video @@ -318,7 +340,7 @@ namespace Vocaluxe.Base XmlWriter writer = null; try { - writer = XmlWriter.Create(Path.Combine(CSettings.DataPath, CSettings.FileConfig), XMLSettings); + writer = XmlWriter.Create(Path.Combine(CSettings.DataPath, _FileConfig), XMLSettings); writer.WriteStartDocument(); writer.WriteStartElement("root"); @@ -469,21 +491,9 @@ namespace Vocaluxe.Base writer.WriteElementString("Language", Language); // SongFolder - // Check, if program was started with songfolder-parameters - if (_SongFolderOld.Count > 0) - { - //Write "old" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < _SongFolderOld.Count; i++) - writer.WriteElementString("SongFolder" + (i + 1), _SongFolderOld[i]); - } - else - { - //Write "normal" song-folders to config. - writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); - for (int i = 0; i < SongFolder.Count; i++) - writer.WriteElementString("SongFolder" + (i + 1), SongFolder[i]); - } + writer.WriteComment("SongFolder: SongFolder1, SongFolder2, SongFolder3, ..."); + for (int i = 0; i < SongFolders.Count; i++) + writer.WriteElementString("SongFolder" + (i + 1), SongFolders[i]); writer.WriteComment("SongMenu: " + CHelper.ListStrings(Enum.GetNames(typeof(ESongMenu)))); writer.WriteElementString("SongMenu", Enum.GetName(typeof(ESongMenu), SongMenu)); @@ -730,7 +740,7 @@ namespace Vocaluxe.Base Regex spliterParam = new Regex(@"-{1,2}|\/", RegexOptions.IgnoreCase); //Complete argument string - string arguments = args.Aggregate(string.Empty, (current, arg) => current + (arg + " ")); + string arguments = args.Aggregate(String.Empty, (current, arg) => current + arg + " "); args = spliterParam.Split(arguments); @@ -791,24 +801,22 @@ namespace Vocaluxe.Base case "configfile": //Check if value is valid if (_CheckFile(value)) - CSettings.FileConfig = value; + _FileConfig = value; break; case "scorefile": //Check if value is valid if (_CheckFile(value)) - CSettings.FileHighscoreDB = value; + FileHighscoreDB = value; break; case "playlistfolder": - CSettings.CreateFolder(value); - CSettings.FolderPlaylists = value; + FolderPlaylists = value; break; case "profilefolder": - CSettings.CreateFolder(value); - CSettings.FoldersProfiles.Clear(); - CSettings.FoldersProfiles.Add(value); + ProfileFolders.Clear(); + ProfileFolders.Add(value); break; } } @@ -819,6 +827,7 @@ namespace Vocaluxe.Base /// public static void UseCommandLineParamsAfter() { + bool songFoldersOverwritten = false; //Check each parameter for (int i = 0; i < _Params.Count; i++) { @@ -833,15 +842,13 @@ namespace Vocaluxe.Base { case "songfolder": case "songpath": - //Check if SongFolders from config.xml are saved - if (_SongFolderOld.Count == 0) + if (!songFoldersOverwritten) { - _SongFolderOld.Clear(); - _SongFolderOld.AddRange(SongFolder); - SongFolder.Clear(); + SongFolders.Clear(); + songFoldersOverwritten = true; } - //Add parameter-value to SongFolder - SongFolder.Add(value); + if (!SongFolders.Contains(value)) + SongFolders.Add(value); break; } } diff --git a/Vocaluxe/Base/CCursor.cs b/Vocaluxe/Base/CCursor.cs index 94a1e495..ecb0738c 100644 --- a/Vocaluxe/Base/CCursor.cs +++ b/Vocaluxe/Base/CCursor.cs @@ -24,6 +24,7 @@ namespace Vocaluxe.Base { class CCursor { + private int _MouseMoveDiffMin = CSettings.MouseMoveDiffMinActive; private CFading _Fading; private CTexture _Cursor; @@ -49,12 +50,8 @@ namespace Vocaluxe.Base public void Draw() { - if (_Movetimer.IsRunning && _Movetimer.ElapsedMilliseconds > CSettings.MouseMoveOffTime) - { - _Movetimer.Stop(); - _Fade(0f, 0.5f); - } - + if (_Movetimer.ElapsedMilliseconds > CSettings.MouseMoveOffTime) + Deactivate(); if (_Fading != null) { @@ -64,21 +61,15 @@ namespace Vocaluxe.Base _Fading = null; } - if (Visible && (CSettings.GameState == EGameState.EditTheme || ShowCursor)) + if (Visible && (CSettings.ProgramState == EProgramState.EditTheme || ShowCursor)) CDraw.DrawTexture(_Cursor); } public void UpdatePosition(int x, int y) { - if (Math.Abs(_Cursor.Rect.X - x) > CSettings.MouseMoveDiffMin || - Math.Abs(_Cursor.Rect.Y - y) > CSettings.MouseMoveDiffMin) - { - if (!IsActive) - _Fade(1f, 0.2f); - - _Movetimer.Restart(); - CSettings.MouseActive(); - } + if (Math.Abs(_Cursor.Rect.X - x) > _MouseMoveDiffMin || + Math.Abs(_Cursor.Rect.Y - y) > _MouseMoveDiffMin) + Activate(); _Cursor.Rect.X = x; _Cursor.Rect.Y = y; @@ -109,14 +100,20 @@ namespace Vocaluxe.Base UpdatePosition(x, y); } - public void FadeOut() + public void Deactivate() { - _Movetimer.Stop(); + if (!IsActive) + return; + _MouseMoveDiffMin = CSettings.MouseMoveDiffMinInactive; + _Movetimer.Reset(); _Fade(0f, 0.5f); } - public void FadeIn() + public void Activate() { + if (IsActive) + return; + _MouseMoveDiffMin = CSettings.MouseMoveDiffMinActive; _Movetimer.Restart(); _Fade(1f, 0.2f); } diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index a71389c2..3a512891 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -60,7 +60,7 @@ namespace Vocaluxe.Base public static bool Init() { - _HighscoreFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileHighscoreDB); + _HighscoreFilePath = Path.Combine(Environment.CurrentDirectory, CConfig.FileHighscoreDB); _CoverFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB); _CreditsRessourcesFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCreditsRessourcesDB); diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 50314cb2..06a28e45 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -178,7 +178,7 @@ namespace Vocaluxe.Base if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing) CSongs.LoadCover(); - if (CSettings.GameState != EGameState.EditTheme) + if (CSettings.ProgramState != EProgramState.EditTheme) { run &= _HandleInputs(keys, mouse); run &= _Update(); @@ -344,8 +344,7 @@ namespace Vocaluxe.Base if (keyEvent.Key == Keys.Left || keyEvent.Key == Keys.Right || keyEvent.Key == Keys.Up || keyEvent.Key == Keys.Down || keyEvent.Key == Keys.NumPad0 || keyEvent.Key == Keys.D0) { - CSettings.MouseInactive(); - _Cursor.FadeOut(); + _Cursor.Deactivate(); if (keyEvent.ModAlt && keyEvent.ModCtrl && keyEvent.ModShift) { @@ -454,9 +453,9 @@ namespace Vocaluxe.Base } if (keyEvent.ModShift && (keyEvent.Key == Keys.F1)) - CSettings.GameState = EGameState.EditTheme; + CSettings.ProgramState = EProgramState.EditTheme; else if (keyEvent.ModAlt && (keyEvent.Key == Keys.Enter)) - CSettings.IsFullScreen = !CSettings.IsFullScreen; + CConfig.FullScreen = (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) ? EOffOn.TR_CONFIG_OFF : EOffOn.TR_CONFIG_ON; else if (keyEvent.ModAlt && (keyEvent.Key == Keys.P)) CDraw.MakeScreenShot(); else @@ -484,10 +483,7 @@ namespace Vocaluxe.Base mouseEvent = inputMouseEvent; if (mouseEvent.Wheel != 0) - { - CSettings.MouseActive(); - _Cursor.FadeIn(); - } + _Cursor.Activate(); _UpdateMousePosition(mouseEvent.X, mouseEvent.Y); @@ -550,11 +546,11 @@ namespace Vocaluxe.Base { if (keyEvent.ModShift && (keyEvent.Key == Keys.F1)) { - CSettings.GameState = EGameState.Normal; + CSettings.ProgramState = EProgramState.Normal; _Screens[(int)_CurrentScreen].NextInteraction(); } else if (keyEvent.ModAlt && (keyEvent.Key == Keys.Enter)) - CSettings.IsFullScreen = !CSettings.IsFullScreen; + CConfig.FullScreen = (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) ? EOffOn.TR_CONFIG_OFF : EOffOn.TR_CONFIG_ON; else if (keyEvent.ModAlt && (keyEvent.Key == Keys.P)) CDraw.MakeScreenShot(); else @@ -588,7 +584,7 @@ namespace Vocaluxe.Base } if (_VolumePopupTimer.IsRunning) - _Cursor.FadeIn(); + _Cursor.Activate(); if (_CurrentPopupScreen != EPopupScreens.NoPopup) _PopupScreens[(int)_CurrentPopupScreen].UpdateGame(); diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 31a66c59..a66a960d 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -118,7 +118,7 @@ namespace Vocaluxe.Base public IEnumerable GetSongFolders() { - return CConfig.SongFolder; + return CConfig.SongFolders; } public ESongSorting GetSongSorting() @@ -179,9 +179,9 @@ namespace Vocaluxe.Base return CSettings.ZNear; } - public EGameState GetGameState() + public EProgramState GetProgramState() { - return CSettings.GameState; + return CSettings.ProgramState; } public int GetToneMin() @@ -226,7 +226,7 @@ namespace Vocaluxe.Base public string GetFolderProfiles() { - return CSettings.FolderProfiles; + return CConfig.ProfileFolders[0]; } public string GetDataPath() @@ -601,6 +601,11 @@ namespace Vocaluxe.Base return CProfiles.GetAvatarTextureFromProfile(profileID); } + public CAvatar GetAvatarByFilename(string fileName) + { + return CProfiles.GetAvatarByFilename(fileName); + } + public bool IsProfileIDValid(int profileID) { return CProfiles.IsProfileIDValid(profileID); diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index e73dbd2b..5d928c7c 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -58,7 +58,7 @@ namespace Vocaluxe.Base private static void _ConvertUSDXPlaylists() { var files = new List(); - files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CSettings.FolderPlaylists), "*.upl", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists), "*.upl", true, true)); foreach (string file in files) { @@ -73,7 +73,7 @@ namespace Vocaluxe.Base _Playlists = new List(); var files = new List(); - files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CSettings.FolderPlaylists), "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists), "*.xml", true, true)); foreach (string file in files) { diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index 124cebdd..8c5c9887 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.IO; using VocaluxeLib; using VocaluxeLib.Draw; @@ -111,13 +112,21 @@ namespace Vocaluxe.Base break; case EAction.AddProfile: - if (change.Profile == null) + CProfile newProf = change.Profile; + if (newProf == null) break; - change.Profile.ID = _ProfileIDs.Dequeue(); - change.Profile.Avatar = _GetAvatar(change.Profile.AvatarFileName); - change.Profile.SaveProfile(); - _Profiles.Add(change.Profile.ID, change.Profile); + newProf.ID = _ProfileIDs.Dequeue(); + if (newProf.Avatar == null) + newProf.Avatar = _Avatars.Values.First(); + else if (newProf.Avatar.ID < 0) + { + newProf.Avatar.ID = _AvatarIDs.Dequeue(); + _Avatars.Add(newProf.Avatar.ID, newProf.Avatar); + _AvatarsChanged = true; + } + newProf.SaveProfile(); + _Profiles.Add(newProf.ID, newProf); _ProfilesChanged = true; break; @@ -318,7 +327,7 @@ namespace Vocaluxe.Base { var profile = new CProfile { - FileName = fileName != "" ? Path.Combine(CSettings.DataPath, CSettings.FolderProfiles, fileName) : String.Empty + FileName = fileName != "" ? Path.Combine(CConfig.ProfileFolders[0], fileName) : String.Empty }; if (File.Exists(profile.FileName)) @@ -332,8 +341,8 @@ namespace Vocaluxe.Base public static int NewAvatar(string fileName) { - var avatar = new CAvatar(-1); - if (!avatar.LoadFromFile(fileName)) + CAvatar avatar = CAvatar.GetAvatar(fileName); + if (avatar == null) return -1; avatar.ID = _AvatarIDs.Dequeue(); @@ -474,7 +483,7 @@ namespace Vocaluxe.Base public static int GetAvatarID(int profileID) { - if (!IsProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID) || _Profiles[profileID].Avatar == null) return -1; return _Profiles[profileID].Avatar.ID; @@ -505,7 +514,7 @@ namespace Vocaluxe.Base public static CTexture GetAvatarTextureFromProfile(int profileID) { - if (!IsProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID) || _Profiles[profileID].Avatar == null) return null; return _Profiles[profileID].Avatar.Texture; @@ -525,10 +534,7 @@ namespace Vocaluxe.Base foreach (int id in ids) { if (_Profiles[id].LoadProfile()) - { - _Profiles[id].Avatar = _GetAvatar(_Profiles[id].AvatarFileName); knownFiles.Add(Path.GetFileName(_Profiles[id].FileName)); - } else _Profiles.Remove(id); } @@ -536,7 +542,7 @@ namespace Vocaluxe.Base var files = new List(); - foreach (string path in CSettings.FoldersProfiles) + foreach (string path in CConfig.ProfileFolders) files.AddRange(CHelper.ListFiles(path, "*.xml", true, true)); foreach (string file in files) @@ -552,7 +558,6 @@ namespace Vocaluxe.Base if (profile.LoadProfile()) { - profile.Avatar = _GetAvatar(profile.AvatarFileName); profile.ID = _ProfileIDs.Dequeue(); _Profiles.Add(profile.ID, profile); } @@ -577,7 +582,7 @@ namespace Vocaluxe.Base } var files = new List(); - foreach (string path in CSettings.FoldersProfiles) + foreach (string path in CConfig.ProfileFolders) files.AddRange(CHelper.ListImageFiles(path, true, true)); foreach (string file in files) @@ -585,8 +590,8 @@ namespace Vocaluxe.Base if (knownFiles.Contains(Path.GetFileName(file))) continue; - var avatar = new CAvatar(-1); - if (avatar.LoadFromFile(file)) + CAvatar avatar = CAvatar.GetAvatar(file); + if (avatar != null) { avatar.ID = _AvatarIDs.Dequeue(); _Avatars.Add(avatar.ID, avatar); @@ -650,7 +655,7 @@ namespace Vocaluxe.Base return String.CompareOrdinal(a.PlayerName, b.PlayerName); } - private static CAvatar _GetAvatar(string fileName) + public static CAvatar GetAvatarByFilename(string fileName) { string name = Path.GetFileName(fileName); @@ -659,7 +664,7 @@ namespace Vocaluxe.Base if (Path.GetFileName(_Avatars[id].FileName) == name) return _Avatars[id]; } - return new CAvatar(-1); + return null; } #endregion private methods } diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index a4ccca09..f25ba032 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -33,6 +33,10 @@ namespace Vocaluxe.Base // ReSharper restore UnusedMember.Global } + /// + /// This class contains settings for the program + /// These are not editable, everything that can be changed by the user is in CConfig + /// static class CSettings { #if ARCH_X86 @@ -43,7 +47,9 @@ namespace Vocaluxe.Base private const String _Arch = "x64"; #endif - public static EGameState GameState = EGameState.Start; + //TODO: This should not be here as it can change + //State of the program + public static EProgramState ProgramState = EProgramState.Start; //Adjusting of programName and version now in the assembly config. //I'd use the major and minor for Main releases, build number for every public release and revision for every bugfix version without any features @@ -63,23 +69,20 @@ namespace Vocaluxe.Base public const int ZNear = -100; public const int ZFar = 100; - public static bool IsFullScreen; public const int VertexBufferElements = 10000; #if INSTALLER - public static string DataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe"); + public static readonly string DataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe"); #else - public static string DataPath = Environment.CurrentDirectory; + public static readonly string DataPath = Environment.CurrentDirectory; #endif public const string Icon = "Vocaluxe.ico"; public const string Logo = "Logo.png"; public const string FallbackLanguage = "English"; - public static string FileConfig = "Config.xml"; public const string FileFonts = "Fonts.xml"; public const string FileOldHighscoreDB = "Ultrastar.db"; - public static string FileHighscoreDB = "HighscoreDB.sqlite"; public const string FileCoverDB = "CoverDB.sqlite"; public const string FileCreditsRessourcesDB = "CreditsRessourcesDB.sqlite"; public const string FilePerformanceLog = "Performance.log"; @@ -96,21 +99,11 @@ namespace Vocaluxe.Base public const string FolderThemes = "Themes"; public const string FolderThemeFonts = "Fonts"; public const string FolderScreens = "Screens"; - public const string FolderProfiles = "Profiles"; - public static List FoldersProfiles = new List - { -#if INSTALLER - Path.Combine(Environment.CurrentDirectory, FolderProfiles), -#endif - Path.Combine(DataPath, FolderProfiles) - }; public const string FolderPhotos = "Photos"; - public const string FolderSongs = "Songs"; public const string FolderSounds = "Sounds"; public const string FolderLanguages = "Languages"; public const string FolderScreenshots = "Screenshots"; public const string FolderBackgroundMusic = "BackgroundMusic"; - public static string FolderPlaylists = "Playlists"; public const string FolderPartyModes = "PartyModes"; public const string FolderPartyModeCode = "Code"; @@ -128,8 +121,10 @@ namespace Vocaluxe.Base public const int ToneMax = 89; public const int NumNoteLines = 11; - public static int MouseMoveDiffMin = 2; + public const int MouseMoveOffTime = 3000; //in ms + public const int MouseMoveDiffMinActive = 3; + public const int MouseMoveDiffMinInactive = 15; public const int MaxNumPlayer = 6; public const int MaxScore = 10000; @@ -212,37 +207,25 @@ namespace Vocaluxe.Base return RenderW / (float)RenderH; } - public static void MouseInactive() - { - MouseMoveDiffMin = 15; - } - - public static void MouseActive() - { - MouseMoveDiffMin = 3; - } - public static void CreateFolders() { var folders = new List { - FolderCover, - FolderFonts, + Path.Combine(Environment.CurrentDirectory, FolderCover), + Path.Combine(Environment.CurrentDirectory, FolderFonts), Path.Combine(DataPath, FolderScreenshots), - FolderBackgroundMusic, - FolderSounds, - Path.Combine(DataPath, FolderPlaylists) + Path.Combine(Environment.CurrentDirectory, FolderBackgroundMusic), + Path.Combine(Environment.CurrentDirectory, FolderSounds), + Path.Combine(DataPath, CConfig.FolderPlaylists) }; - folders.AddRange(FoldersProfiles); + folders.AddRange(CConfig.ProfileFolders); + folders.AddRange(CConfig.SongFolders); foreach (string folder in folders) - { - string path = Path.Combine(Environment.CurrentDirectory, folder); - CreateFolder(path); - } + _CreateFolder(folder); } - public static void CreateFolder(string path) + private static void _CreateFolder(string path) { if (!Directory.Exists(path)) Directory.CreateDirectory(path); diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 8afaaf9f..36d0d6f2 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -338,7 +338,7 @@ namespace Vocaluxe.Base CLog.StartBenchmark("List Songs"); var files = new List(); - foreach (string p in CConfig.SongFolder) + foreach (string p in CConfig.SongFolders) { string path = p; files.AddRange(CHelper.ListFiles(path, "*.txt", true, true)); diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index bdee6dc2..19f91e62 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -207,7 +207,6 @@ namespace Vocaluxe.Base.Server ID = existingProfile.ID, FileName = existingProfile.FileName, Active = existingProfile.Active, - AvatarFileName = existingProfile.AvatarFileName, Avatar = existingProfile.Avatar, Difficulty = existingProfile.Difficulty, UserRole = existingProfile.UserRole, @@ -317,10 +316,10 @@ namespace Vocaluxe.Base.Server { try { - string filename = _SaveImage(avatarData, "snapshot", CSettings.FolderProfiles); + string filename = _SaveImage(avatarData, "snapshot", CConfig.ProfileFolders[0]); - var avatar = new CAvatar(-1); - if (avatar.LoadFromFile(filename)) + var avatar = CAvatar.GetAvatar(filename); + if (avatar!=null) { CProfiles.AddAvatar(avatar); return avatar; diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index 11b11c21..032d952b 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -311,7 +311,6 @@ namespace Vocaluxe.Lib.Draw FormBorderStyle = FormBorderStyle.None; CenterToScreen(); _Fullscreen = true; - CConfig.FullScreen = EOffOn.TR_CONFIG_ON; if (WindowState == FormWindowState.Maximized) { @@ -321,8 +320,7 @@ namespace Vocaluxe.Lib.Draw } else _DoResize(); - - CConfig.SaveConfig(); + ; } /// @@ -334,9 +332,6 @@ namespace Vocaluxe.Lib.Draw FormBorderStyle = FormBorderStyle.Sizable; CenterToScreen(); _Fullscreen = false; - CConfig.FullScreen = EOffOn.TR_CONFIG_OFF; - - CConfig.SaveConfig(); } #endregion resize @@ -486,10 +481,7 @@ namespace Vocaluxe.Lib.Draw Show(); if (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) - { - CSettings.IsFullScreen = true; _EnterFullScreen(); - } //Resize window if aspect ratio is incorrect if (Math.Abs(_W / (float)_H - CSettings.GetRenderAspect()) > 0.01) @@ -530,7 +522,7 @@ namespace Vocaluxe.Lib.Draw } } //Apply fullscreen mode - if (CSettings.IsFullScreen != _Fullscreen) + if ((CConfig.FullScreen == EOffOn.TR_CONFIG_ON) != _Fullscreen) { if (!_Fullscreen) _EnterFullScreen(); diff --git a/Vocaluxe/Lib/Draw/CDrawWinForm.cs b/Vocaluxe/Lib/Draw/CDrawWinForm.cs index d5309d25..c1fd96b9 100644 --- a/Vocaluxe/Lib/Draw/CDrawWinForm.cs +++ b/Vocaluxe/Lib/Draw/CDrawWinForm.cs @@ -127,9 +127,6 @@ namespace Vocaluxe.Lib.Draw targetForm.Bounds = Screen.PrimaryScreen.Bounds; targetForm.TopMost = true; _Fullscreen = true; - - CConfig.FullScreen = EOffOn.TR_CONFIG_ON; - CConfig.SaveConfig(); } } @@ -146,9 +143,6 @@ namespace Vocaluxe.Lib.Draw targetForm.TopMost = _TopMost; targetForm.Bounds = _Bounds; _Fullscreen = false; - - CConfig.FullScreen = EOffOn.TR_CONFIG_OFF; - CConfig.SaveConfig(); } #endregion FullScreenStuff @@ -232,10 +226,7 @@ namespace Vocaluxe.Lib.Draw Show(); if (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) - { - CSettings.IsFullScreen = true; _Maximize(this); - } while (_Run) { @@ -247,7 +238,7 @@ namespace Vocaluxe.Lib.Draw _Run = CGraphics.UpdateGameLogic(_Keys, _Mouse); _FlipBuffer(); - if ((CSettings.IsFullScreen && !_Fullscreen) || (!CSettings.IsFullScreen && _Fullscreen)) + if ((CConfig.FullScreen == EOffOn.TR_CONFIG_ON) != _Fullscreen) _ToggleFullScreen(); if (CTime.IsRunning()) diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index f80147d5..5b7e19ae 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -235,7 +235,6 @@ namespace Vocaluxe.Lib.Draw private void _EnterFullScreen() { _Fullscreen = true; - CConfig.FullScreen = EOffOn.TR_CONFIG_ON; _Restore.Location = Location; _Restore.Width = Width; @@ -261,19 +260,14 @@ namespace Vocaluxe.Lib.Draw } else _DoResize(); - - CConfig.SaveConfig(); } private void _LeaveFullScreen() { _Fullscreen = false; - CConfig.FullScreen = EOffOn.TR_CONFIG_OFF; FormBorderStyle = FormBorderStyle.Sizable; DesktopBounds = new Rectangle(_Restore.Location, new Size(_Restore.Width, _Restore.Height)); - - CConfig.SaveConfig(); } #endregion Helpers @@ -433,10 +427,7 @@ namespace Vocaluxe.Lib.Draw Show(); if (CConfig.FullScreen == EOffOn.TR_CONFIG_ON) - { - CSettings.IsFullScreen = true; _EnterFullScreen(); - } while (_Run) { @@ -448,7 +439,7 @@ namespace Vocaluxe.Lib.Draw _Control.SwapBuffers(); - if (CSettings.IsFullScreen != _Fullscreen) + if ((CConfig.FullScreen == EOffOn.TR_CONFIG_ON) != _Fullscreen) _ToggleFullScreen(); _CheckQueue(); diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 4ab37b0f..ef439692 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -63,14 +63,14 @@ namespace Vocaluxe.Lib.Playlist filename = "1"; int i = 0; - while (File.Exists(Path.Combine(CSettings.DataPath, CSettings.FolderPlaylists, filename + ".xml"))) + while (File.Exists(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + ".xml"))) { i++; - if (!File.Exists(Path.Combine(CSettings.DataPath, CSettings.FolderPlaylists, filename + i + ".xml"))) + if (!File.Exists(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + i + ".xml"))) filename += i; } - PlaylistFile = Path.Combine(CSettings.DataPath, CSettings.FolderPlaylists, filename + ".xml"); + PlaylistFile = Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + ".xml"); } XmlWriter writer; diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index fbe886f2..c3db3e72 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -25,6 +25,7 @@ namespace Vocaluxe.Lib.Sound.Record public CBuffer() { + MinVolume = 0.02f; ToneWeigth = new float[NumHalfTones]; for (int i = 0; i < ToneWeigth.Length; i++) ToneWeigth[i] = 0.99f; @@ -54,6 +55,11 @@ namespace Vocaluxe.Lib.Sound.Record public float[] ToneWeigth { get; private set; } + /// + /// Minimum volume for a tone to be valid + /// + public float MinVolume { get; set; } + public void Reset() { lock (_Stream) @@ -109,7 +115,7 @@ namespace Vocaluxe.Lib.Sound.Record // find maximum volume _FindMaxVolume(); - if (MaxVolume >= 0.02) + if (MaxVolume >= MinVolume) _AnalyzeByAutocorrelation(); else ToneValid = false; diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index a90b96bd..74464be9 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -87,7 +87,6 @@ namespace Vocaluxe CProgrammHelper.Init(); CMain.Init(); - CSettings.CreateFolders(); Application.DoEvents(); // Init Language @@ -105,6 +104,9 @@ namespace Vocaluxe CConfig.UseCommandLineParamsAfter(); CLog.StopBenchmark("Init Config"); + // Create folders + CSettings.CreateFolders(); + Application.DoEvents(); _SplashScreen = new CSplashScreen(); Application.DoEvents(); diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 03e29b55..5bcc054d 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -137,10 +137,10 @@ namespace Vocaluxe.Screens bool next = CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART || CSongs.CoverLoaded; - if ((_IntroOutPlayed || _SkipIntro) && next && CSettings.GameState != EGameState.EditTheme && CSongs.SongsLoaded) - CSettings.GameState = EGameState.Normal; + if ((_IntroOutPlayed || _SkipIntro) && next && CSettings.ProgramState != EProgramState.EditTheme && CSongs.SongsLoaded) + CSettings.ProgramState = EProgramState.Normal; - if (CSettings.GameState == EGameState.Normal) + if (CSettings.ProgramState == EProgramState.Normal) CGraphics.FadeTo(EScreens.ScreenMain); _Texts[_TextStatus].Text = diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index d3b06914..9039f293 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -330,7 +330,7 @@ namespace Vocaluxe.Screens private void _OnSaveSnapshot() { - string filename = Path.Combine(CSettings.DataPath, CSettings.FolderProfiles, "snapshot"); + string filename = Path.Combine(CSettings.DataPath, CConfig.ProfileFolders[0], "snapshot"); int i = 0; while (File.Exists(filename + i + ".png")) i++; diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs index 015f7424..2f647bd1 100644 --- a/VocaluxeLib/Enums.cs +++ b/VocaluxeLib/Enums.cs @@ -290,7 +290,7 @@ namespace VocaluxeLib } #endregion Config - public enum EGameState + public enum EProgramState { Start, Normal, diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 7fcf74ca..433e5fc8 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -71,7 +71,7 @@ namespace VocaluxeLib float GetZFar(); float GetZNear(); - EGameState GetGameState(); + EProgramState GetProgramState(); int GetToneMin(); int GetToneMax(); @@ -209,6 +209,7 @@ namespace VocaluxeLib EGameDifficulty GetDifficulty(int profileID); string GetPlayerName(int profileID, int playerNum = 0); CTexture GetAvatar(int profileID); + CAvatar GetAvatarByFilename(string fileName); bool IsProfileIDValid(int profileID); bool IsGuest(int profileID); void AddProfileChangedCallback(ProfileChangedCallback notification); diff --git a/VocaluxeLib/Menu/CButton.cs b/VocaluxeLib/Menu/CButton.cs index 7a9726ec..1a9a8a49 100644 --- a/VocaluxeLib/Menu/CButton.cs +++ b/VocaluxeLib/Menu/CButton.cs @@ -276,7 +276,7 @@ namespace VocaluxeLib.Menu public void Draw(bool forceDraw = false) { - if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme && !forceDraw) + if (!Visible && CBase.Settings.GetProgramState() != EProgramState.EditTheme && !forceDraw) return; CTexture texture; diff --git a/VocaluxeLib/Menu/CLyric.cs b/VocaluxeLib/Menu/CLyric.cs index a1c72daa..68b26136 100644 --- a/VocaluxeLib/Menu/CLyric.cs +++ b/VocaluxeLib/Menu/CLyric.cs @@ -224,7 +224,7 @@ namespace VocaluxeLib.Menu #region draw public void Draw(float actualBeat) { - if (Visible || CBase.Settings.GetGameState() == EGameState.EditTheme) + if (Visible || CBase.Settings.GetProgramState() == EProgramState.EditTheme) { switch (LyricStyle) { diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index c64c9400..af2e5443 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -968,7 +968,7 @@ namespace VocaluxeLib.Menu float z = CBase.Settings.GetZFar(); for (int i = 0; i < _Interactions.Count; i++) { - if ((CBase.Settings.GetGameState() != EGameState.EditTheme) && (_Interactions[i].ThemeEditorOnly || !_IsVisible(i) || !_IsEnabled(i))) + if ((CBase.Settings.GetProgramState() != EProgramState.EditTheme) && (_Interactions[i].ThemeEditorOnly || !_IsVisible(i) || !_IsEnabled(i))) continue; if (!_IsMouseOver(x, y, _Interactions[i])) continue; @@ -1043,7 +1043,7 @@ namespace VocaluxeLib.Menu private void _NextInteraction() { _UnsetSelected(); - if (CBase.Settings.GetGameState() != EGameState.EditTheme) + if (CBase.Settings.GetProgramState() != EProgramState.EditTheme) { bool found = false; int start = _Selection; @@ -1070,7 +1070,7 @@ namespace VocaluxeLib.Menu private void _PrevInteraction() { _UnsetSelected(); - if (CBase.Settings.GetGameState() != EGameState.EditTheme) + if (CBase.Settings.GetProgramState() != EProgramState.EditTheme) { bool found = false; int start = _Selection; diff --git a/VocaluxeLib/Menu/CObjectInteractions.cs b/VocaluxeLib/Menu/CObjectInteractions.cs index 57d86b00..791412d8 100644 --- a/VocaluxeLib/Menu/CObjectInteractions.cs +++ b/VocaluxeLib/Menu/CObjectInteractions.cs @@ -470,7 +470,7 @@ namespace VocaluxeLib.Menu float z = CBase.Settings.GetZFar(); for (int i = 0; i < _Interactions.Count; i++) { - if ((CBase.Settings.GetGameState() == EGameState.EditTheme) || (!_Interactions[i].ThemeEditorOnly && _IsVisible(i) && _IsEnabled(i))) + if ((CBase.Settings.GetProgramState() == EProgramState.EditTheme) || (!_Interactions[i].ThemeEditorOnly && _IsVisible(i) && _IsEnabled(i))) { if (_IsMouseOver(x, y, _Interactions[i])) { @@ -553,7 +553,7 @@ namespace VocaluxeLib.Menu private void _NextInteraction() { _UnsetSelected(); - if (CBase.Settings.GetGameState() != EGameState.EditTheme) + if (CBase.Settings.GetProgramState() != EProgramState.EditTheme) { bool found = false; int start = _Selection; @@ -580,7 +580,7 @@ namespace VocaluxeLib.Menu private void _PrevInteraction() { _UnsetSelected(); - if (CBase.Settings.GetGameState() != EGameState.EditTheme) + if (CBase.Settings.GetProgramState() != EProgramState.EditTheme) { bool found = false; int start = _Selection; diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs index 1610fd52..1e71a262 100644 --- a/VocaluxeLib/Menu/CPlaylist.cs +++ b/VocaluxeLib/Menu/CPlaylist.cs @@ -416,7 +416,7 @@ namespace VocaluxeLib.Menu { if (_PlaylistElements.Count <= 0) LoadPlaylist(0); - if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme && !forceDraw) + if (!Visible && CBase.Settings.GetProgramState() != EProgramState.EditTheme && !forceDraw) return; for (int i = 0; i < _PlaylistElements.Count; i++) diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs index 93d0bea3..039533f4 100644 --- a/VocaluxeLib/Menu/CSelectSlide.cs +++ b/VocaluxeLib/Menu/CSelectSlide.cs @@ -710,7 +710,7 @@ namespace VocaluxeLib.Menu public void Draw() { - if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme) + if (!Visible && CBase.Settings.GetProgramState() != EProgramState.EditTheme) return; CTexture texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); @@ -733,7 +733,7 @@ namespace VocaluxeLib.Menu else CBase.Drawing.DrawTexture(texture, Rect, Color); - if (_Selection > 0 || CBase.Settings.GetGameState() == EGameState.EditTheme) + if (_Selection > 0 || CBase.Settings.GetProgramState() == EProgramState.EditTheme) { if (_ArrowLeftSelected) CBase.Drawing.DrawTexture(selTextureArrowLeft, RectArrowLeft, SelColorArrow); @@ -741,7 +741,7 @@ namespace VocaluxeLib.Menu CBase.Drawing.DrawTexture(textureArrowLeft, RectArrowLeft, ColorArrow); } - if (_Selection < _ValueNames.Count - 1 || CBase.Settings.GetGameState() == EGameState.EditTheme) + if (_Selection < _ValueNames.Count - 1 || CBase.Settings.GetProgramState() == EProgramState.EditTheme) { if (_ArrowRightSelected) CBase.Drawing.DrawTexture(selTextureArrowRight, RectArrowRight, SelColorArrow); diff --git a/VocaluxeLib/Menu/CStatic.cs b/VocaluxeLib/Menu/CStatic.cs index 5051abe7..24b9b56c 100644 --- a/VocaluxeLib/Menu/CStatic.cs +++ b/VocaluxeLib/Menu/CStatic.cs @@ -227,14 +227,14 @@ namespace VocaluxeLib.Menu } var color = new SColorF(Color.R, Color.G, Color.B, Color.A * Alpha); - if (Visible || forceDraw || (CBase.Settings.GetGameState() == EGameState.EditTheme)) + if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme)) { CBase.Drawing.DrawTexture(texture, rect, color, bounds); if (Reflection) CBase.Drawing.DrawTextureReflection(texture, rect, color, bounds, ReflectionSpace, ReflectionHeight); } - if (Selected && (CBase.Settings.GetGameState() == EGameState.EditTheme)) + if (Selected && (CBase.Settings.GetProgramState() == EProgramState.EditTheme)) CBase.Drawing.DrawColor(new SColorF(1f, 1f, 1f, 0.5f), rect); } diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs index 94c2c01c..711cc930 100644 --- a/VocaluxeLib/Menu/CText.cs +++ b/VocaluxeLib/Menu/CText.cs @@ -457,7 +457,7 @@ namespace VocaluxeLib.Menu public void Draw(bool forceDraw = false) { - if (!forceDraw && !Visible && CBase.Settings.GetGameState() != EGameState.EditTheme) + if (!forceDraw && !Visible && CBase.Settings.GetProgramState() != EProgramState.EditTheme) return; // Update Text @@ -474,7 +474,7 @@ namespace VocaluxeLib.Menu if (ReflectionHeight > 0) CBase.Fonts.DrawTextReflection(_Text, Rect.H, Rect.X, Rect.Y, Z, color, ReflectionSpace, ReflectionHeight); - if (Selected && (CBase.Settings.GetGameState() == EGameState.EditTheme)) + if (Selected && (CBase.Settings.GetProgramState() == EProgramState.EditTheme)) CBase.Drawing.DrawColor(new SColorF(0.5f, 1f, 0.5f, 0.5f), new SRectF(Rect.X, Rect.Y, Rect.W, Rect.H, Z)); } @@ -493,7 +493,7 @@ namespace VocaluxeLib.Menu // TODO } - if (Selected && (CBase.Settings.GetGameState() == EGameState.EditTheme)) + if (Selected && (CBase.Settings.GetProgramState() == EProgramState.EditTheme)) CBase.Drawing.DrawColor(new SColorF(0.5f, 1f, 0.5f, 0.5f), new SRectF(X, Y, Rect.W, Rect.H, Z)); } diff --git a/VocaluxeLib/Profile/CAvatar.cs b/VocaluxeLib/Profile/CAvatar.cs index 1928c915..9418a034 100644 --- a/VocaluxeLib/Profile/CAvatar.cs +++ b/VocaluxeLib/Profile/CAvatar.cs @@ -22,36 +22,46 @@ namespace VocaluxeLib.Profile public class CAvatar { public int ID; - public string FileName = ""; - public CTexture Texture; + private string _FileName = ""; + private CTexture _Texture; - public CAvatar(int id) + public CTexture Texture + { + get { return _Texture; } + } + public string FileName + { + get { return _FileName; } + } + + public static CAvatar GetAvatar(string fileName) + { + CTexture texture = CBase.Drawing.AddTexture(fileName); + return texture == null ? null : new CAvatar(texture, fileName); + } + + private CAvatar(CTexture texture, string fileName, int id = -1) { ID = id; } public bool LoadFromFile(string fileName) { - FileName = fileName; + _FileName = fileName; return Reload(); } public bool Reload() { - CBase.Drawing.RemoveTexture(ref Texture); - Texture = CBase.Drawing.AddTexture(FileName); + Unload(); + _Texture = CBase.Drawing.AddTexture(_FileName); - return Texture != null; + return _Texture != null; } public void Unload() { - CBase.Drawing.RemoveTexture(ref Texture); - } - - public string GetFileName() - { - return FileName; + CBase.Drawing.RemoveTexture(ref _Texture); } } } \ No newline at end of file diff --git a/VocaluxeLib/Profile/CProfile.cs b/VocaluxeLib/Profile/CProfile.cs index 4e27b4bd..ca8de4d6 100644 --- a/VocaluxeLib/Profile/CProfile.cs +++ b/VocaluxeLib/Profile/CProfile.cs @@ -38,22 +38,12 @@ namespace VocaluxeLib.Profile public string PlayerName; public string FilePath; public string FileName; - public string AvatarFileName; public byte[] PasswordHash; public byte[] PasswordSalt; public EGameDifficulty Difficulty; - private CAvatar _Avatar; - public CAvatar Avatar - { - get { return _Avatar; } - set - { - _Avatar = value; - AvatarFileName = _Avatar.FileName; - } - } + public CAvatar Avatar { get; set; } public EUserRole UserRole; public EOffOn Active; @@ -62,11 +52,9 @@ namespace VocaluxeLib.Profile { PlayerName = String.Empty; Difficulty = EGameDifficulty.TR_CONFIG_EASY; - Avatar = new CAvatar(-1); UserRole = EUserRole.TR_USERROLE_NORMAL; Active = EOffOn.TR_CONFIG_ON; - AvatarFileName = String.Empty; FileName = String.Empty; } @@ -95,9 +83,10 @@ namespace VocaluxeLib.Profile if (xmlReader.GetValue("//root/Info/PlayerName", out value, value)) { PlayerName = value; - + string avatarFileName; xmlReader.TryGetEnumValue("//root/Info/Difficulty", ref Difficulty); - xmlReader.GetValue("//root/Info/Avatar", out AvatarFileName, String.Empty); + xmlReader.GetValue("//root/Info/Avatar", out avatarFileName, String.Empty); + Avatar = CBase.Profiles.GetAvatarByFilename(avatarFileName); xmlReader.TryGetEnumValue("//root/Info/UserRole", ref UserRole); xmlReader.TryGetEnumValue("//root/Info/Active", ref Active); string passwordHash; From fc3a95b6484b2524981f1fd00d3dd083c0d83cf6 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 19 Mar 2014 22:26:07 +0100 Subject: [PATCH 034/116] Update SlimDX to Jan/12 version --- Output/Licenses/SlimDx/License.txt | 19 +++++++++++++++++++ Output/Licenses/SlimDx/SourceAndVersion.txt | 7 +++++++ Output/x64/SlimDX.dll | Bin 3718656 -> 3707392 bytes Output/x86/SlimDX.dll | Bin 3383808 -> 3377664 bytes 4 files changed, 26 insertions(+) create mode 100644 Output/Licenses/SlimDx/License.txt create mode 100644 Output/Licenses/SlimDx/SourceAndVersion.txt diff --git a/Output/Licenses/SlimDx/License.txt b/Output/Licenses/SlimDx/License.txt new file mode 100644 index 00000000..a976ec46 --- /dev/null +++ b/Output/Licenses/SlimDx/License.txt @@ -0,0 +1,19 @@ +Copyright (c) 2007-2012 SlimDX Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/Output/Licenses/SlimDx/SourceAndVersion.txt b/Output/Licenses/SlimDx/SourceAndVersion.txt new file mode 100644 index 00000000..7ad52997 --- /dev/null +++ b/Output/Licenses/SlimDx/SourceAndVersion.txt @@ -0,0 +1,7 @@ +http://slimdx.org/download.php + +SVN r2171 (Feb 4, 2012) -> Equal to Jan 12 release but recompiled with VS2012 + +Files: +x86/SlimDx.dll +x64/SlimDx.dll \ No newline at end of file diff --git a/Output/x64/SlimDX.dll b/Output/x64/SlimDX.dll index e2304d42a62df7d4ddd8fc3e3264d565deeb23fa..36d058d15d3c4d0fbdbd0259705d907a29081fea 100644 GIT binary patch literal 3707392 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 u9Z_0DTd_uL7u14A2(={3?JI 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 z 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 oDE z$25M*JJOIU{S}7GB^H#MMt|D&CsLvrp(I0HYw921>+zD1yp!8v6#2%xNKJf*3p7OE zZsV{WZz4TU)&(;M;7YedYw>ARXDVdISliR`m=DIRk{Y)HmLo7|3SqW5ZSI0r4ifQ+WG)$*qI@x0+L){Ez66Sacd zj@y?|dzvy19NjeKJQrB zB3P8YXe$`AtAV!u8Gh`xl#kSS(RxrvoMO^2f9lH?5cTJ)R|G@I*i0M)CvmOwQj7U) zlkfFIk0PkCWs7mQVo-jOgDnKLyIFd8x$;s+=O_bQ>g&9heg^LsI}@_jT&+l9E$;0v z&I2}d1urd@lyh`bA4#PZLUZrYYLIqw1*v$;*Ba~TiHuH6fD8qjysj?GVkQ;a9YLf$ z0nO?4C3To~Pw7m`jeH|~1g)RCzDY9UJN}+?cY2`OXtB;)tajR3(I(j*9`)>67*|?` z922!0HCrvPlyA43&GO7_0x&zpd+}Y2lxl@qy4wAdd&`{U=Y^+Ur<+KBZsNfR(!+3E zdI+eEAn6a-kRa`@po~R!)752$@{Fq9xa66axt&DfH6N9`^st4o3rUGUjf_Sz8+^EP z9fvg@h{=-%GY>3GPm>%V;mp(1-@Bw$(;;|d<2+BsL~@q5uPN@|$@uH^t%9jK+AKsV zCZuf6x>2m7Q@%VaBO+CA{i`_JLdU!otjE2I}-ycBaw$bNj5Po3xpLNJv#p z)%EWK@9*uMfdS6)HS9&uOSUPn6Z}`KT7%=FZC$bslAg@bRWK_06gJE=`A?k_IO%my*rh#k-t(1hUy! zn;+2;=kL%bjHLEdTok}d-IvnUmi{x|pZ8g$U01s(cU}hjN%a=GjM3uoaLB-Y17g(WH~6nZUP-vSwi)BCtBD0UvFJI1Bhki ziaR?U(Y%Mv_}pDQVW+wx61cmxhpl3ZCl2BhUNqip1~CSTLmv06Aw@U>l!Mc$U6{pc zE{q~s_wUYNHe5Ccf*9GdeLxjzq4Dsg)5>+0Fugo5*Rm|ey!(yu+v4_E@j{d9T7*|R zqLdFs1K8KyHrzue&iSEVS351-Zg{iK=!$utJH!Si3?Oy4$jS77YR-Q6JRSallN#k_ z{jR*NjmEI1gr1JyxCe(n#F0EBn9&^7)MR#!5Nu8=-uOEGNR1se7nnnodPWqay>NlY zi2m1K^Q2|Gyf|dHU+x}d!ji8lCBLQ0B z3uVv4T?*U(W+P2~&FfCVRN?9$ntxq=wesiV)^L@^0e0s2 z*j2&s=p&Dh(;r!3G9bJTtA-)ysAK|+zo%3oQv#c zK}{&&o*BEjL!Q*+^ikuZ?#BA6m&4Bfmhx-h72Opjj}Zb~O2ky;njVS*9*=LsA2f}* z-B2GNAJYi~XutMxBG12qPV~DY)5F`s5?VHwjxzUB@d+(+XhVoD9=o#(%P@S}^Mcy; zrSjWQ5ouM#VHdg$QK8Of)15+6kL1iC`w4l!6zGbx4nup|xzk~#79rWB)lufbU;o8~ zeOs1nGrQE~r$cu#iP;`V%(%OEFmy=6-EGL*$8!D_#4m2=eMclEV`Cy^6pa4Bvq+cw>N^mzt zqUy7_>q)Op*oyVOYI8G$o{>Iec9x;cvQ@bQhc2!Y7z=jRV5^Rc?@_+k8D2YaKI_3P zlkCU|e;}|>xtT&{@ZnZ(gPmsDsTFVdnuYp@TX$`mO$&D5$*)17HjD0uMwp}d_yP_YW>a!t)Zu|3%*O4RnT3D*66=(w^tPz6vs%M^aT@l$o z4gQi|@hiI=UONo9dKcWYy&#QfI*9cjTw_@DSIBP7cFkGb+@$aO+6eUYelAPl@;3`{ zzE9Qcpdd{m9?K?+qd#^rc~e#&9iXG*>PpnVuz%{u2JP=Rm+~Wypa-}VZMJUgX7~?h zO?iK8l?@lfTtpBfH}_kwyEZN(TiD2YN~_q)5nCfUPeoe9PHmQ+Wqn@oy?6}v198lh zRYCEX11y>>`@P@CH=RTlWGz9$RZ=X)@%CMJ2UUA3ins&gcf5HpKtLvMMa-BEsl;Ej zk9|TL9Uv@xROWN}&am16Hz!Af@O`ZiKD*v?G8V4{e-z7uP$0%+Ncd%~(7=71^|Kp` z9NgCqrJ=6ZqFphWqh=m&p8Wm#58g?{ZG1Fe3-hfl83>224-wuQf`0|4;ss(c0 z(4|DnGcg=QPfyQ5x-9(G^so|_evMeW0AdW%KC6no=+56*di2Qx1B{0j2DeGe{TQo>rat_~Lte7=3J!5M#xU+Mh`J>&c#xaB4ga>i~x`1p~z7^wLJ64={ z@X}|0Uoo4le=jyX$@k`V6-`XLHZe^OAu$5hNhoSa&&d_^^~bhaL&>o)&^;gxj`Ziu zP)co5z$+fk+JOWuIwd^3yx0H69bdn-p)%(>zW)3PH}p8r>8h#bgy%l#k@J%L0~7Jj z+ax?ZJi${H>q2qPFEh1k8Dl96ii`a(=DnG`yy_<-nHA+ZSF8WL8_*$7j?|LU49O-} z+k0YBp6xGW2HoovB z(<>BCChmo9VQg(8_Yz+jJg4+-x%)4vfNgHH0tIsOeg}q(rl{)#aL*w7kFTHgV z%`3Su$D?K)0J>{n<$-E@1cmQ{y==oe!(%(u$M1q2L93ZF_Vy-4Gfm=*DwUj^&In;O zx&c4iMCKjE&h_QoTwh>6ZTw4%i!T(p&9WrroLRLEISwTBm8HKfkb)81w>}qs`mzjJ zlkuT>xt%w&!2Yq3O=xJV-R^Qx7aC3f$sg=vKe3P8i8{!>#&1jQL%nGHUW&(#oZTG;}o~5S(t{xYg@ZFy<4YfF`HlZ#2zcr zPtq-5^i5^9QT{}ta^yf?&Q;!!tgI|DRT$xvd1mgQs-ul|VHCh-Q7c^DOsO1_Xulj< z(s@psITazs^N=qXlk|SFmzrAH8<9h_*b6peP@W1F{!TH@k{BJJP)<3LXnx}$vY(Vh z%DnZ@Z}Rc2@aogot;aJ}#`xat8((m6QZTG zhOJ0w#7;BCiZ;kmJok3G>iz%J$F-Dk@Je0^|##-0{9GHp|3?n}S4NJB{xUFdPEz-rdIf`tFP9qZL`a=V+zZ2#Nc0 zIFMsJ`}P|*U@#kNg4I&h(9rPSE$=j&s(a6^@%53C%aQmJzTk&PNei!LU_$xqkNk(? zg}eIG2xn>zvbbWz&L0I!rqL%$wmyZWz9=X!OqPPFx(T~i&HsRG#X7P2b8QIya-R*o zdz}_Ge653qyG{_*T<0wG`rZ(I&fpzXQAgjnA6=@=MdM6QxMfDYNE6d9Crw!RRQVYt zdC+hoqFd*Z%z_X6zJyq5AV>h)K)BRhtk72Hf68Qau21B0=rY0d>@3L&*}$Jk>b2z) zee~El;Ihuni0d+FUTM$p%dC<0&mY$o33H&7(%jysSzoR-9S#+ypyYm*RN`af0LXJQTgrfa4&s+$9+bS-{e%8 z@mH|Jx9^*9q+doYDJQJd9QiLHn7*Itlz@l|A}5GenYbF*#2V1wEFeE_y=+%hSTTRC z@_o5pTj|VGml|V9blfMON0x~X8v_bomeZ=K^QzJgO5fs$G51r1fetI;&{$@hcN1W5 zjE7cBj%vjz*O82E8g|4Ee-;98|E-tZD3@m)E^L>h7EJA07T)ORoE#IJHV?lqI8mu1 zDtkwOeWvTz?}qN8_)}5AA^q62oOCU^5aJ{xx@dIBZxp6W3jBmy+) z(toss-7<|#>>7D@*0q*T=SP%)SFAz?zpM!jKYo8MYDK`fkt+H=SThLG`$@!aWxZ!o3S zrTfL_fEHFc<>qF26k|5%OYsi~p!)W^U1iBx6bIn*nI6<0NJV)M&YEbw>F%bWqvj_J zvY<)4SJ^UFe`X+#$XxeKitkmZ&9t$#`Jy5>8*}{mWW66*4`N9|p)Ime z#+#~BI4+oeOY;4?h1DuG)%AWB$Aj>$ z%EAf@^(jr|UfW>zCcsHpxO{MIOp`WLzyuv;I)YFU|COrB6%x%#oEBXcsDpiQIv-SX zR$*|$e;Cl^ zf>ZUab^{@O3+p3W)#uMicYGjz(dYnn@y4T$(o{9)1k*-Es6UTE6-V*R6Pb}IvTJ5G zMY_`v>E9DV-uw$r?a$I*)sD65(OIq<5Ws)XoRm`B5*Exq*6CBIC?(Ri9r*Ub4F@gp z7Y2q61e#9%Nt)Z4FFm6x{RG6{o=m~F+cF{!7yA183N^5Bmw|NY)qo|^Eg?pL*73{s z^*mpTYrnjKgs_eDD`k1%M)dh!td7BtsyqKeIHijoUa-vulgo;eRaNQ#Squw*=K4cg zyQ2X6(w@Zor54F)b3`Nd(|1C6X;NcaNtBGC$k^I;La^*ZWgUtB*AVivYG;+R%U+5$ zcOs%5)s%tf_b&d{FHM$PXE-@IshBrN@EN8FeKgU+P840LoMsH&-p#|pD;j>9G~9i7 z7F>=!jwSVv6r{J{DB&#`>fCXQlBC&ci}Sn3t>quhRD;4?Msf%X`&S1SXF0PAHJ(ok zE)D0N==n(rKZti-&f*}A4tOxG!{a(18vU=HQn-7ABx$F*W$M%04%S;d_e3@_36Gm5 z0=TxRk38L`97)*o?&kw8O&Gug=5xk=h3L!qSxXhjs*F6+&7s*S$yYm!=I7>F>sh$mV*d*_DC#p$-`ldI&_vd`^!5qnhF%)Jn zLhxW35S^e|?3=GU(5_)F;=|-D>K~d56hJqBL0MBEUXcb^*1lqsBjg@4v zGv_Qby+>`B0B2>Y5$XG~pcZjqt4DL6G>eVyD@y3P{^N5Qhv~{B;ef<48#?92L-bMW zVGFTr@V}BzRLnF!%)$f&RLhpOrxd#tW`R@Vhga7}efCG#(4AM}vrz_C3A4V!!V$x! zG;14b{vFv&V=Ziy0y3N-nQmnLO%e_Ya|U~4Z5L(b_Idk5Q_^TSJw0a)MJ>9)U+KR`kOXcw(Fe(k;=5cOE(*P&iim#B z4y4M$DVgG_-`@K1FcINw_y7L=pJs;iPspDS1^1t zt!vxsFFJ7p%*?C-@k=_Y778_0R!@GJ)FlfCLI~cp##0WsobTcv4yzB8>tyOb`q|zQ zr-lIHzR{555}KAhuEzUg-N8Q1C*?9`0vGx$nA`07S-Y6)KY4VX(V{opm!ieY#lm_&x1m z9P4v557O5BzapKxJO6@pcE;!8zDeBM1n2%H!9!6| z{lnb~Y)>3ELL=7`*M#PFw~c3#+5pCDEy=+@O<6sZQCM)e^N#rSFKy{XvZGumtILO_ zPWPvUq5g-mzrYG}fEi60#ig(R>y{66Rc!UQ?u@ySwD*SEh$3J>4Q$gB;DK!ZOOr%4 zS#QKB{0MJjV#E$!@R&^HM2ncft8kWEIDYKMDUOU*VA9+9*(mP0u9 zK(?im4gPFHMg1wm5Ea)B{F9XkO=pdwkqL|t&Np(C-NKIX-A$4l=fk}cA**{U%XV3} z6nlO39IfAUtC|ZgL@zcE=dZl1S!>h3eIe4#|JxgyrSokIEB^TKb*2W*_7WkgKBA>0 z2?`4B>#PX)R1JK=q%VHJ+~Xs5iN;96lS}tMgYYz-kY1`QL8gwgeX0XAJiJivgTq>n zsJsjDG0oEN-~7&-gRc+Qzn4BLV@Nz%$zsns%;)N8-40^)c(gB&(_zS-F1_Wfjio$K z&;n1xGSs)*e#Jk!beS*fZUtj8B|Xwv4;Lvx^PM?;WNplV*Z8i{v1skfV_9)9lLE)B z;g;j&^3cEmvN71BD78Fcz~e03SF39c*##JyYlWQ%{Y7K8dS!dR1}TRUvg2RjrIv`@ z0U5sL)2$KHlZzV|^eGEXeJ2m5wBbtq95thAuuk{!=PhA)nUo7fb>~=fLn_4L86s$b z5w8);Sv2|H-z`n-51P}%v-aBLjC7R;DMSd*sYRb&71da(Ud%Ss{o$Z^Q;IBQdyETz z=j=@J7&lT3cmWJX0D7xHDkxtE@UOl0Lr#FTzDtRsbi0A{n-wtMSZ@)>gm|ZhczVa8Iq${yrWX%Trlj0}XpKmu!JQ$H%s>Tp z^HkEqa0#QQaz9$pbG7ZK^wYig(0sNN$-&KS@G8USZP=-!BmZGV#tr?yA5WFU@b?uI z{S_9R@tF2&+MX!NI}qC_#VSUrA9RZ800_Ln@AS*wolx%AE<}GMd&nVjdpiaymr6xV zY%lL*5Q3bk)BdQ*AKb%`cN@_=Pnte~v}h~}MO%Omus#LGK^$CBS$SHl)UI?K+xb<+ z3K|zic^eKTicV4DO`!0^Q&tA$eJLr0dmZDY3k12j-yt4X4-?WMG!!CNEHW6ehO6yf zAqk0Pv8%e%+sYh6LsnTJwp|)AyD1zNZPlXXw#KcAKAO$Z5MlEr*ngbT~jPJqw#_uuMn$XoOP$Cy{!K*7s6NgZ)AC9R*Dt2lLe zRylR(z9QmHQ-v8Sa~0b1>S{V}+(wf0A;b^dI3fgeKN`YiMJiXlYyPK=1vWT2sk&Af zTpY>VQ@YQl&{OJXBo)K^kC{2iB#^A0+Eycj6l863)f7`vBV9c7{mPomdqZOvm=jt5 zzklB;m5~$4#@xD5F_(!pLB`vv74I^gXFF0mowi2F$Rh26VeYT&8Ol}nWpvP{MMOlh zrRJG*ew7(i4Ugk1?x;zmlFBTIXzWx&pH0w*z`1?Pm628pylD(X|?!8ZPb!Eki zVkY#gI9YY{h-GAATyP#ES?!h=VF2&}cZxVDP!0OvHfVo=R%k7Wr`{A}qGP8PCI)w& zwy;@c3c0h6sppFkQ4y3K2qkD+%0F0L-ArLx!IgKK`%5+;eZg7lyKz6--sC_fn@zyz zxv=)XAh??YHCMYK`+X8+*&kCEuNravK6c{yuFxrE#{NJqtnFtr2N&$rKNQYFjQk+F zPBpKb-xcd`Ql2qf(M>$M&~B!U)HG2j;6bMNQr2pVJvHRmad`Xosn=>(`~gA?(B=c9 z4yQ+v@^Z$OD8l+rdspT&pB)xZ)D-M3?7$)Mchx)QhKRdz9qe{gjGw!dn>q5x%7pRN z)E-*&CObw|M^owF5xws-beLuJ{IE52!GEFQ_@~Y33gIK+NpAnGn{byhfh=mVPSNJR zP0QiyZ0^a;PzGPJaic}2QX|VQ%QK$o=UI*PAYZA=bu_5HO-ZywPG`@qxX97>jYM8t zlZOX6el=U?)?KA$UY=6W*myI0;CE4v#qF_|QxY#@1V$f%jGFiP?q%m({b#|I5WGH! zw!!O-??M4RG8CX#xzA={js%{=nmxT-A}HyTZON>t;(z{pQF6L$xJ{f9ue5Ym>f7L@Er=XgkzyoQE)`_J)uDB! zWt5L}^zx#UI-g7^d9L`1=vW@ovS)~gv6H=yr`Z@dyG4sLUg}(Aq-`QhUEIqaRTESF z%(2J_&$$iTN|FWy=W0+}ug?E0icbFevlRQ~v(@?hrv20Ej2>?z#FuyyiQj{wbfnhz z-=USLhzGNm(cUgcLiXQsFvB~`^}H_Am2VL`e^c+EmdoU{w6w;W1M#smiG&I-AP5!u zL(ut>?rXI`t?Od^pn5<3gN79Q!Y{3#kpt#ua+-oN_dW3jMV`qmoJH+Bd%dayV;ZpX_E$R*slpbSI0#J|lQe-CWO;qOyC$(%Dyr7`Z6A zTn@G~q7Wm2`GJZ-6F>zU>?6s+1%BR}y_uSRvl!`@9!&rBB*6gcB%fOC<3 z+uwnv?MFcN@afX%=*P+0auPZ|Ly~+=7EZwaZF~{`$-CObg;+@2ahs*HpsA zMpcB_LEYc2F?>*rwH*%{DYci98eq?q`ioC)EQRUAm>hziKC3k~kK71gcr}Ft!~Fge z=J1=5OdB8~Ad4AjGeMZ3X&<6=wWQA&VF>z1^JNK^gwB1qDER8LjrAw)0_He|*5=5P zZj}&Jbb#TgKUL(Pd-vWD@tIXJgE~82ihwEm0dP6|m9?MyvQNz!l^$el$T~sXt@E!8 zeSPD2$J=Vj*;}e%fmUlC%D*64dc0CBkva7QY6zHjE(B?iDQ1l={hL2;w;g2*^v~1$ z{;;&-;_YeGgqb%{r9Rj%lwt*t`r_}mt(zfncsimrBmOWOLSa1<_z(km>37zes(L5m zt6LYj_NKayLjf62R6us33dM+*`^QRZUAZOp8gmmVjTe;)Zxxsv!rzm8M=oTH%YN|Z zmDV|ooc5?4X1a$zul-jr1)jDJo%}_PODrTI@M1%`RP|$2p>Me-j98D|Uz4QTIF)=1SBwNBjWTr2%^9l`WJT2TtC_&3Lj+Y_R@T@#8u-$lYSDSbtt+xqj$frOX@JPucF6 zG#fSwlHglLyd!Z?h)$mP`fkexI26ZW0VbP4kgmcvL3<^;?L8w)k(o-+Q#v%kCgxuv zPxH~tH~1xFb^BQB?4-Qw$8Th6S(DQj@?8>IM0bE*pA z7jGd6wRCD!0{pI|^Fl|LCB*-9Y$oN7Y%cy*Yk^?NitzFJ-yL@xCV)%`DC6L7O?ahm z@I0#+%(zVZ`q~hnzeWXoO3`t42nxyo5W+aT)Zg9?ah7pb6D4De4%F~Ff-~}gm4|Yf5QT5Pt<6vk);mmiG+8O30EN#5kzw{PA^5(}mf`Mv zxqllsEvlaKurS{$tf=gKu^Bd?A@`4+u%hNx=3HMkO1mD7X=2S^oo+Vt=;K5H>J?M; zfQ?~@h5AQPzQ}i>qdby?aIShxS&x%`2DMqC>z|Q3LJN$AFiG=eY?H>(1W=ETw;3`UfBx&wo1yuM5e>;{B(^~GerHx!C&`V3ovnl zeZIYX;w3F{4H6goY69Cm_b4{#1Cz$_CK=uDeEIds^+M?{*dnW#I=yiZQQ^4D?`CMj zi=<~!ty~B?)S_P_mp6xBw0rwYG*S{+Q5!+$S1yS+dUr?wje5unT&Q&ULAVG=9PH0F za$@6D1Y`s!R!$vdWh7%@yHxfFmgJc@M;3N{6k~IXY)=WcMwHB>qJuC+QV08a=X&`E zaK%d?`x&>07#^gc%B?qfV*?qTY^2bKJ~s1LBEBitHTChD`0z;<$DbitbCN8n3^gtP$1*;9^=_$XnZd4h8qBZN9^CORG?YJV8R+_@ zU*7qBo5zE^@{@Vi@}W|5Yxw7EF1oBR8}M9EisS-N*WCc>K-;3fTdw|mw?{qWE-kwp z5ZCGvsBt+)Zv6=SgmdIb4TSKdQyrA|*Nfvf%0CxZOc1Q+64IYLAp;BULO14_7_pj2 zEt9S}?o})?-WqxB0S-YulD&0Iy;oJZ z!10R^heuy8Hbt)oeFW`}0T3LIg-Y8yFWI%tSf}t0-BeUU3llB!5(1JF6L-!3eteKt znO7Y`WrV|pS#mzQpoy(-T4g z@vnsVS2?RT!>@%4-g?+{oz&nPWwPNFBL#P673DrVm$&R;J zD-=e`fI48Vw4H9@l$M7EiaVcTW(zPf%H?+!j$50a^N zoJ=~a;+r6ZH*^v54zq8P@?si{b`TS(|KPwZCcAimgxZtu@y=-)07~12Jb2Om zyHisC$B6|BSvZ6D`$-ZZ=}EYX03QWy%zrGS8Mx{=cSJD+tw*%5Hx1fOc-5NvfaywD z7RH|PU}p<=`KQ50?5?lK+FgiwC-%=;8%(C!6bW0Q6`({N* z(CADVXHt6sKDZOa8LjDYR1#Q1sA5m$^ScbR2YvbSg+r3}4hXSH+uPsdtgO)34y@-e zh8oVUa?9R8#-5f{crU4w0cTgOo69G5EKJjY$DGn9wgFa&kDIUA31u<}z!%@NWn2T; z9|6MjsvmLhC#Ixe^OvLBujvGhHKq_kjByKzs$fcSj+4TsC${1m?+Twl>QW3tW`{j$ z%Sgg5-Gm)1mInsPH29EqGC9nV|cjcp6! z`g3Zaw+o&U=!S^x^;T(Ayy|_K-@Pj;Y`7dNW~-<6KOD4>XYiW*b(>`}(BGfC5kUKM z3UFNnMKCN`4-bmcQXXK(LsMz53nLtQRZ3Nw_~uHV%03Kv#(9Fw_p@=>RoY=3SCh{uO3G z9Co-)G^-6JT%T+bwY}2USMuB`kaj(KyB|8`dv$&F;N8oeR5YSckDiH^5=Z-xl7NSa z;+5Ga7TuyeYk%K5*rCk_S&hiC60Th>Cd+)!Se;t~R#ieN=1jJ6^#{Md3S=aGeNjaW z67pnV0~t%;iG%oYF%v6OLb_R_7va3e%ET(e;zD+hKk_?w=1opLdi8(=1vm;DJvBPj z{K=0X{Rj62SwJ_7MJNu~cKpU%5AsYD1Y+PNYmcix%w3&CL=X+%Y%^`=T4aW{w{IL2 zl)BGp&|l$STiRQws_kc;JX#h@zr=?C4A9^8%6?RS=Yq)`*T*>==-3eni%+vWIK}Q| zM~fcWFh9Mmpl=W@>kRSZ6NQYrx)F=HtGi$Z9j5VJEbZ#@E@rY8KeM8OMKfJWIUT}> zxND0$u0hE9kZy6KDZVU*R9}$B$L9n3B9L4L{Zd_>_-By>k#-(-@g+nYa5l*7f=Yb} z+y^_6c(1+g-LM01)A{9cXa&LKVi8GOua#tGG z0q(C9qt#v5)NFuVD z!A^nyr>kYAk?67B$isjrDM${U!$Q*y(vfeS}<3HdBn5AueHW=3K2y(p;;|Q|~g{KXF0?-Z?scXI{p} zjKR>AmUGEZV2}Wgckkxn5GZT^2LbSD{~vpA0#{Sp^^c$CkxFT#j?y4$Ry5D0(m+V_ zq@pN8n&*i^B4jL~$q+>}sFW0TXxc}EW+Mc7E`*z&*t&XUmd$Gt#7efQGVO~6c@h8`FH2{H72dyb)8mn!tYr8#{-8jhl}jA-9#q7 zjEN6tPu|%4@Pxma`IUp6lSX1?bowFo8%yopoC^Q&L44$`ROoEfu$ffCwI>3tN$)>p zGN)}e4Y!NyhB*e#(q^WnEGCp=bKL_8Hz>>$DAQWw2@dY`HdmZ<&CR#gEAlWAPY&Li zq;n}d&>}g~j{HPKtwu{&Rj(qGse76)COu)h z7AT!|VTz4Fn<@F$rK9d1g>5Ob{k;pZx?3aDMd^8#GIvdm z+S2I`HJyBZIK+I!Jf-G%5n-q|kk+;Kl(weIEsmgzF&!#9yQPai-!rOvBHVPuPm*Gj z-6I$MY(|Zi(azWXJB@=}moe<3D$81(q1N*1)xN?4ZbG{w0Y-kCqAYdXCXLr<1eI12 z99F_a0mZjm!^ zeCb%;%ept%{8Uy^pYn;agQeSMd0uQ>x!QPZ)H^8~F}_oLG+23bLhD|t(wKciI~N@^ zBW$NFz8D*5!D4~w-xSzP;HI6&K7aeClfJJ;mBiS?v$ezS66huQ!gvYG=-?HW;q%srG?sAfg#l%Jy8_$lgxN)hZ=k)eZj+tmHw7SX+3blYlpt6=of>ZDg3-0lOKM^v&+3^26S8`gt1^%K<)AnY0| z;^ZM*eN1@SOfYUqE&b>k^^MnO85-vAXVhQ_ z6tx^Vhx)tyZZ30tU!CYH=ES->ZjoVZR}D{JKL3`r2!ZsR0pqQc8j~qhW#g!=t@7#9 zr?k@56a-%8GR7?;4tHknzr4NUVa}nXBo3$9xz7u&oG4?;d!^n!d(UUgC9o<;qH?d6 z)Dh*ButYnL7X$CvMuPOHBocaK-Qz*CE2a`v4@Ae%9%&U% zFBUo8KRlnAHSKJ>kmk0*(T2V;>DwbuFB;yV4$<9M>7BkHVGi@PKySgPokfJQFnxlE zi16#Y+dN?{w5G!;=~FC}1aDU9Tq^H1VS(+so@w4{D6a4$h> zDer*6dwo68EoT)85zU!wenEzOo`yXG)*~+(oz?2w!|Y%BmOqj7wUiob(7jiC(7*4I z&F$GXQ$rgY+_bjVi-<``gpZ6wU8W=`6t5jnnWs7?X&pkhX3cPCp#MWcW^*Ll!e({~ zT5gKu69*7oL(^6%ToYI`6>$thr7m~0{BM4l5WmCS1HvA03Y?R{E4DH`pd%`W?TEg` z<-WHBZK>sc_+>TsgL`KZUsbWau&+ot>U_t#`|^@=RBFfDBq`n*RhSDzV;8OHCMNb# zS;Z{jmzgYXzv|w-n(ny+>#C$B$09<8dNEbBedX+rT$`Syn7=8UYHekG%MmpGk*Zs_ z_po;KwRg;!y#?~|@*qx%V`4w6zzLX~WeD>18cisgf(gqCC^Mi+$RqPXarc-8+bM4}uy<@d! z6}1DBLbJ*|#!mKiFA<&RwNs-?`p$s$wfJp%MK6QmECZkMm31uCxuO=&xg^@Qh(Dur z8%46Tf{W0~m9xA@`d)ayZV#+$s+Yv{a+XtzjH2zV=mxP17bK2hDapx*=Usm_#?-e5 zq*cr+vsZ^V0^62 z@KoE<+3FlG(4DHKbERVUgzUYnbfu-kpmf2|cByO1S%SU0T{9%;1AIo?FDPq$STeYf zPmO1HF8kgD%~ei}8-^#l-AZeQt|vZ-TK(Bu{*=wt{CwV!@fYh*7RcV7)jC8_9Zt>i zp<)!+W8U0i{_1^kJ7#Ja)qTP9#KHcLXoY7ni^$7R;))Dyj*x4L8uw?X(lfbU721p% z?sABPRKB$ILXr29YK8}7B!%y4M9vqkVbvQp;C&EG5#cE^@#5$!`%{k?cCYPMQs~*o zpmJIMnY!K9vdECg!k~!0?ZNgYC0W}~CLJlOq?8t3Z_;DYINrGW@)lc)2E~TXB5#Gx z>(AYXT0L@ZGGF&L0#3Ixp{9M zSM5%!Z$7elV*7Hmitzmrm%Q=z-l{!i$@xr+Kj+H^r{oUrdgA|Bce(8cw1mp~1Wjw6 z22rE6ax&fIBt?<0`a_F|B^+$rJu%sYLORsT%~U$^wzl=*NyD*MN9IwoUomNkCNN)a z%hR0{=v1eAOLd7i%!$&>XCTE2dqz!A^-aB`NJQ%_{3>E*wUiwTFSev-lwmpkw%mkP z>zR$Or@_lBwP$%B?9Cq~P7SmmL~OB?^6lTPyL@TK zlP(){qr@ zB+yPM%TJtU+<)+3q;Oe@|KNuwEVmlRa=fwd^RM>s6L#fMU3*MezFsWw)&bP5j#(QT zR3CG_!YZ`j(fh8IKJ-KGJyNVA0mj7za%r(`@kjUWPpM;Z8H`8Um z_v3MoZ6({D$?fO4>34#L)lYezET55yN%S=i!3p^@Cz{R%#x{t#3p-vni~9tVvO@Z= zVlG`W(GA;g-=irPp{yyXc1F!$yq>V@KAILg<)E=wDrxO!)1{NX^zo}*Qa1UfDy`Uc zNznlo1lgh{ZnuoHD^DK_|3IBg!L(!H=Kj_5%NkEz&6Jrl<+J-{dSq~2RcOfr2KB?oifM95{C1j%C?uw4`>oU9tBay1tkN_n$l& zUZmFAJStcBr0KK+#Z(N_c%DfM&D~13$8^qetOReKdGmrg(H0+4;r?Bv^n_Fzg4L$5 zQ;K1p6viX#E?AfLD6ih0;Us^+Lf)eALpAI3-LKN?rJg9ve!FP?Ww~pS6yg436MEO! z?Lu0^tY6-HWRuo+|6GBE5L$qnkC9R^DYf{P>HXKul~TV|_K}>}=LFS`hFBJXDZ09Z$s_Ec zVYHJ~Z#Gg86mF&xeJ*LNpJiDZGP&>E{lg(k7t6)haXWvsT{n-XoIh@}NVL0dkb1YN zN90_Q!4QetyM0DOY&uh|!ksL00ytBwMkb-lYt(Il2K`Y2f9S1p;XXS1F(I^|VBcfq z8e;-qVVaa(F+qL2DIv9_-@CV{SWxPJNUDZR5(^n{BSFSe+LPE8c0p2dz8 zU>X}HJE|-KQ)_5x{JE)CqhjgK?#55scA6;A>_MA;7lrN`SP&#pR+T7i8KXY2zdREQ zt@aEnZ?{|BQ?hf29^1>H_Vg`P{G-NrV|3|K7UO6V>Y~w3b&t`2kB$=1Y<*vUCZ)5p^VS6! z*FB+WQ?;h8Xd(F~&QvaT4T)6L8#K&?TE`2bqNtrH9Ctrts#H+V+Hs$laMz0Vj$W5y$Q#GLgO@#xJx$?Akzk;#dA z_j>rIc5D01^13-lE6i2tBvj(UHRN`(MWC`!VBAl6_A7gipbHesq^0|&7oy5xXkqxi zDLaa=hjfMnR%c4TaXDv441Y_!e4c8WHJLqL;Gq_z`c%F-c0an_aNDwaw?*pU)d`hh1R;Eu*o8mPO~qi{0(y87``$@Z(q+s_n8 zy+~_nnYBW-Z=C1V-jI_*t1Nq&hEI4GRAdP}<@=b`+racOwxm~zsqD^T9&-jc<~dH! zq!qm=9&kZ_?E@bA;j;@)t?PSrQ@O9F$g84YyMUIj>5-bl6GxZnv_!{!KHki-1WQgm z^l~^7HeqA)`!Hp7N4@@Y4)YsSAkvYDsc;8=-jniV`tU0Zwly7b@VE=J!6^YGO{`rZR7j4BC&U%1I>MjYlQ4jx9ue#fS|uhB>Go3Hr#3m$=$G(EvNxEZ23D0;@9^&(|wjm>-9IaquK(&Xo zZLYcJEzU$A`pnlId#98~&Xwp++RnoFmfur>Lz9%(yG&PNZ}a@92wrzIuK4ZhW~;8P zZK*z-0kMm?an z^z=k?>E;gv-r9hGfL$~WF>PZpyt)kAuBnEF*mI)+)3PA>;fbZ}Iit5xBYY`UiST5d z{M08Fy}k=vJnt{Y5W@)~OzW>WRX&sUWLqDW)_$#Pjz||u0yg_-2?Xsk$9QCfI7TzJ zyy-qaY%S3zrFcatfn9ID$;-48K|2L9Cej}AioZG4vXhF7eZSl6T#u7-fok2&qufb{ z)|k1rd80OtITI88wdJR^z2+#NW~^Dz$DG_$)g972sJQ)|F{x-^n?wubHZxhbx;WHU+nwnRi%Si`U7aRU)j2PDTY0Hm6lIb?(ti zX)1d8uO4tqy>#g?fpC+mSxoE&Rk0uK`y$qYk%1wjU8V#PZNI&ln7@XCr2q$ z3+KoY%G8fO=dJ$J8qBLdD-+q*xY^c zGHp5Aw0u&mM|6YjPuxeV)9r)R&z4{EH4$Azy-kpfV<;(Uk(rs9v8EOxKpDLi_o*f1 zqj{olUb++`NQ0JMqT3lxZdpU938WqAU3-C!_};3UkfLfewRIrp(xp3brEZ$)Eu}~6 z1uRl->Sgd2P(QdFHWC*XhpC8qJ=`KuQs2Q?P2c6d<>~`{3L{ra`~8opOx><(#)zNk zO|GCE)J7X{J*TD1o?oXd9v*2hKKGXDrMTkPnZ0{Id)Qf{@o={!$Tpwu#$yU<3TCcX zSbK(}QIkThlTlMt`T5zcH}!`dRfE)){me5==7@CpZ-+u zJk@}K7LAP~{R(4Ug;Td(ISC_fauOPCY^XQX9M%M53`V=rhTqh&G}I_;v^OuFL))6L zjdxL_{zr?#dXGqfS66PG+ex=$){7NfPnr7IHkP_~GsVVBvA!U%%z53T>Dk$Nv~M9* zII2R+m~qc4@-X9XYr5vtR^Kw&L$p|HcO)O}A+@TMXdWWaL}5oI(xmyU1-9*cJ@oO# zI!!cUbLvwbI=?%`5c=RU!RPs9($2DuJ;epJ4rXRLm&1sJ>WCW)MkZ@Gt4;fiJA%`e z@P^oKj!v+eFTH0`{z=K_IjfTnt`2#md$M)GgriK)Co2V20Y-+Ozx$CkG~` z()v8WkP3zs5=?dXxmfKjEpNEpDyIpJh!I@9mBP`Cu6T0=i@E3M4%fvN(ru#V}Hth1lr1+OnXyUBLFfzvLTTMwObp6zVYYIEAfU_e=!&&<7W;Q|I8roH>4&VDS_ z4}RRx@G_&e=IBwmM-$nr-3mKw#^yc1219$9m#OVvd3#E?PCY=~qWf{!=*q!K7XylV z{`=hFF-*0tEa;AwkJiM>1m8$^T{?@)BwwkFQ@J2GkQJ@T(a3r(DPIoc53 zc{;CYwUC=|yj)u`D)jjM^&0gpHOyhlDqTylY9ZO=_@g zNyy`1y?-S)-%^`!u0$i15=}!w!|YMpkme&6tYsM6l+?u3Ja-Re7X1YN7!>Z^AIg;# zIE-#De{L>Y*sZc~UM$}7#ysYu>Can; zwhjN#zv5_1*Q&6C+edjRYg8@sHZAQIAza?_QhUegM3*W$>2k|xk7t+47UvW*pFH_- zhfVROclq(APhzi4)%S+Jy>}?Zws1#hPU`Hj#B<}%$0l{-XbFuS%$IZKi#=toeu?&4 z-;Ng0j%a#I(7)#$cx@~-zU3&!-z~{=_LiE#8J%`7(HhLvYqnzu{Swoi>PZW#CMMFV zYdPOCTOTvps@~bye1MWU!AF*MjWsjZ!x~E+*Be%iMZN;^^78AM4|cn2PP8~Q2I%W6 zPqeY*9GKMI;N#fj_tK0?n)O0S34hh6=eyZOL+BD~q}V4btwQq;hn_m&x+(K4;ou`j z4g%Uk?#;SOE0%KEOMIk9>m&4!D{M*ctXR47!DF#x&p?7#-*{`JZ`)qQ z+2woro=I#pSW))fv~+aiWv@DFfa^dYvwrn|cww zyrLq8Zh7*?RAw*7d0PLbzSxf$@v*JSmDf+pFXrgpej}7&URQ0nhyBWmMx9-wpY-?T zMRC6n;C$M(UF5S-)nS)KWp|TD^0_7V^qx7lLA3kDun^k2|C7#`^qhTEFC#-o?=vjh z@t!a++;Vo(scC7~s7>y~8*%mbLtUMnqfgKdB)9!S*(+L@mz|jG+^+j+pUWzAxAc?Z zWl|DxS14-Nty|Z7YaT^5UEz|?T_tkVls3g@miI~)TfSmpaWU1vbT}t^%_xd}@3TDX zHCe4Kaz3FdL`5P$<=OC>!S}1`E4h}M8I(ugzkg&^Ey0k|=*ZefS6{lYkE;(3y^8W} znG_i5s~D!IA6S3rSffn6Y~cl#P{l!(r$W+cwHP6)Xu_hVwqvY+ZRne(6g4CHUV{;d zgOn~z@t^%Em!q3#8Nu!(0`}tRn*touJJjD$Ep4Z5Ybsmfx4%2EDzCM%)oH}p>s9lC zc1uo=fP2SA*9WQR^d6VImo;V*aG^>!WMiO$#;(l^-lVXIiywXz6#nsruU1INX}WE+ zT4>dJ%h2FpSyxUe?Zt~#Sr%m)#DVcTBTAF8!&3GpLR0kprPA{9QEBS66UA+&Hm!2$ zO#(zE0&6Y%%ZOr*R7UpnRT`^TH|XU~QXV~X7@ zDsft-_CBL>W%9#X8(YtJ9d5zd{gJ_w1s2;sRf^B;8zSV>Z*;B*;1#HQ^m*2O#T3tS zjF0#2!&9m#1N7lmQhF}I+8UYvUXHhL#HGgG#>V)~WDdGhjo1A7^E)&y4);^2=jy8M zX%1nl<@q?yrgok=!gvm=W>^;Ga#)jg6YZ6JL{Cqzd@UoVy^G+iP=mnx5}H>1O2dTTm|aksB({TnCH4(w56@J)K->yNwlwnw=C1X zIajdPCnc2nSHDC1kqOJ!D}@|Ay4FI#tJ~;UycEM&u>5AbIrQgPq)rbJE{I(9Y%=6s zl( zPdRimjYY-!c0+c3Ezh{8?v&V_!Hc<^5>^(Y~Q}!C^&f1R8L=jW4@*ASwc-;;GSKRCw02j)elfn4a?Fu z#Ad&G&5}fOP1M5AX?FZ=lsI zLVu}u>je6f-b>lp0Ss#>;*z!=LzrJu%O88LiCubyU1x`LleGLP#|OqWPxON)OA0=} zG-li{yie!;+1*YeQl9D?q1=0 zX&)szJ6yH@O)u@>l!Nrh2Q)eBchlZ=pkc|!2e+|;7drhmTZ;MG@-i8#Ip-$QFqpq- z-8Wx(Xf79*dN_mj7U>%dVJ`b^=dw-a1vPjdlE&IC{LWdQ8g0@#kyhP16jyx3rs}Sb z?Z)`E-m&++;u9kZ{Qb>rubnWYvSjmha+2L~jyjV{u31^{bv(7>MQwSLM;m%~Wydk- zIEnk-9*mNCQO6SU>F!Lp&Ho?BVg>4YM$8{oAwJM2Ag(p=Wl1Xg-#ao7pl znp2oNAa^92Dn3XqX*8oc!Q1nm+r@y$n%X&5$;nl(D=wDpzZzeAC?9PTc2<((ia*01 z8uq5i$1C?Gp2{F_m)H>xjy3j%8Ai+_yx$X%{3bySL$ic8si>%Kre6A3MK|6jss0T8 zdQ+Ne{W~k!971XCeoucHqxnR!rpD&x3E9J2_=^->Rh^2TP{;(XbO}jbBHn4yGAxl7 zs6pd!`vuhnCqYWWWoL_L`^_Ia5KmOeEprYzEL(G)B3n$;xc6dKR`|n*4?`!r^J*m{ zRchANd_Jf4`t3{1=b9bj=vWgjeY_0a8%QAQ{Q2=w)EvCAb*12*2uDqE zxrW2@Bh>cquk1Kh-P_*Ck$l&AV|=tuvSHbfvEhDOZ9Nh3$kk!3Jhn;nYpzfj#T_m? z_I#=3Gpyys^XHdyb29t8UQbjW3btXJyx6h(t;_MQqm5J+MTA_qEp%cRPUMxJO)e*rhnu9LCGXBBoHA;XoGR z7QyZuC!DUezg|cqJ-@+es%gM3`KS>=W_{wb_?jM{tg?WXyg>e4qdRXe7kRcck(0Uh zO(@mGh1y}6@?(+J6KBqxDP4|kadMp1$*&|mMf|S*orz0vQ+r;|A{eB3m~k##xSCF4 zMe4b8Z^zLlEK)@Jx}(I0tHQdK4^{U*opfHlHsDfhvNEr37x>OCO$d*C*7&qf21HquLzjkoA{qcid*RP4!#yGJ6$`%O{H5np^Zf4lnXI z*P=G$`hhk}XX@Me-O3YJDpzH0SCcN9udQ3*ZK6sQlwyJ<_?|W?@!GPPVuiqHMV&Wu zzpyxE`moamfkTZs_xcW=8!1#9Z`fMov*5VLab6n#;{;)oA8Fv(UvQ7Rl9WKt?N6t5K8yf;L! zGVs&R)n`)0&BSVSlTV&JS&F6^xtJIkPu=O(yf0OA^RSNGRj#mG54N+{rw8*}g(yE& z+iC9-vSTo@rL+E^sOi-3?c3C}x$kX)vk$yta11%CLrL)H*VGDPydq(?OG?J%BV|Zw zsRJs;OSN}&sBd0Dxp5J3!;7o6G}6)q`#Syijk)%Q*CgCkZ6Ed@K(h_w=;nhm=l4Dv z9&P7epUQH4bj>X_;>IfDPqc(4RTn)?yE)azUdj<#g((;*#TZyw{Z1KBTFl=S>#Gsq ziTrd$SD}B4`}3<(dXp{fy!HIf0jD|(f&@5cqf!nH@6VbgVMTZoO;D!r>3r2pYvl7^y8jgfUYm z$M*&5>gr0hrk%NP!~OkUe;Y<=m8W;PSDjutuHxPppPrC;I%(9+HaI6zrO>o;B50S_ zs$_vhi3H*+Q##7RWfb+xcHPo4rKJoH&YW#|jrw(U-J<*5vu*tJm^*|MTUv{g$8Q8W z@OT+_GtfqIxA$}ESdFf!kt!TJfTG%NTEeGO;=`$umIj@?bLcZEvL+37Y?63AXdUd0{tlKDc;mCgJGdbDWjKLG3TfDqNogEwqT)nJ3_MFcb zFMi*~gN`VIjwpqWsGPc;U9XW=!Ryt8@ro69joyne=P^a8)m&r0)gAN9r@vVT9W$b= zY^0cb>~`S(7M7EPZXP3(4DE#_Cy$%1trP03Nl5Y}?BA`x=g zt+XdUJj#F~rb>xNTO1uG*EYy}*KoGliNUR1Jv~!{-4Q2q*V}W9ZWtU_y*puGM<6sU z+i^=vc7+DBz-+4ULx?qHU%VK+tv*c`Z3ENRuJc}U3mnd{*5@FPvsn9rQ&O9&D46#o z?2fKKL!jmu-FkG3&DAsL{-768_GwE|a7l`(>k!Qd8mojAP9Y0(2w|QQBE-~H41#CF z(H=A>^!feUv(UYHkFZi_9wEFwQ&B6*Wnb*-pHn!3T(MaHn{BqJwbXz6rcH(tjaj*$ z&mRa-xsOhilF;PmLQKtGM5GF*C%SLi6ma9xr5-M0;r-F9@gJkJTSOZ!A93drSlg?~ zC9owWbZWWe<58LSJoa;&&om6HR-!{t5t@>_H8gDYSgf@sGSj2YGN`EOOID-)X}WXa z^{wt7c2CTvd>yY1ynqV=3pLL)EoKqXdY8uT$x5Jy9 zRjwPvE|hX1Xr1A%3Bhxegz7t4c}$sIdTbz^ro5$@Sq9ck3Bs-Z&HFjGhDhWdiL%Q+9q@AGOEcYAs`UE+J$p zH7BQ6CooWXY+!@j&6DA#b00g4ex^E0=odOCNXWdi<%6*FA$q}uk+b*|JOu+>m_{9g zBPni8W{uyeN%G7J8}iRoD7|}aWo_jlzq*u!Jhf3QsIjG`CE(NR%DmK+&XukcN%@~& zn2S?|c}}SG=jHE~Pt9ek)}UZY@LZ^ISy);5#R2*gNrL@a$A=z7md`IJC`kGw$t*tppRiJ6=+PGTxbLZ1{Z#0QP?u+!YW)rgAq_53-9~O3m@oX4ciGSl%CT+qy zuJ(pPDtc;E%UI#o6W#jSy4deZXx5?aCVP-@zVpXWKA==5e34wY8OojCE$X^|Dfq zueY09b|$|4__I7U)Bafmi`q&f3h@Mr98Mi7T1P&Lh=4SH6$?ANDG3&8J2N)-lq%aG zbeFrNPe(Y|-r29BMkKsc)M?7Ud?Y0-WT)@Ffoxe@m4@2$>r*mD8IcC%)-V}|Yq-kM zQ$^L(7&FU-?0SEmubO#C-j$zLKazv_vPif|l&>?VsW6wohrt^Q-n^MYGtnxBw25 zjP~HchyAP<)L05fa`SRKw^_COU)=2E^qSc`QEh=-u;^){R5#DL{qZry?mPkx6f)|M zv?vHK`#*G3?bL8c6Hm@$<3ab7-mqrP8kRYqt}CFK>ZM0#31~@|UC_x#&dQg=&t*_} z+vvw8wLR4p&ja3PRH<&Mo}hmGkbQSYKicJQ$Kb%g#3Uj_k*v#|ySSTmG8Ff|vc9~h z*8Ma^SWkiOi?I2unar_;nc9ciSw9tAxNzYH+A?!4MHFwj%KhC@msNy>&TwjmZ63bU zd+YWH^(?Ji>+!M=+nYvWFD;kIh^}1P$gk)Uw9S}{r^Bbb?-@gdJ-UbbP1$A3mN9=m zYNdGad|LkwT2E>Pbt%%@*Wa#V1MrB zT9#I$n^eEGV!w6%f{HWzraivVp4Y3n$97$Pq%4d2I;5rRUbeKFoDBL#?A%Jv7&GK-p!jfXJSZ zsi_2e4tfPpy`zf9Fru-W|GhV_#d&9u}WJ4E2!t#cD-E=0y z;)`_X2s>*l4LC<#=?H{vB0jn69&~31R&(2)YoR*JqaN`H-AhvKcu3-1oln*ol9`X` zu9)sD@snb|Vn4{U@y@%vlS+hCuKPX&nKR2`)a{FpcpA$Z%9Wt6wVpT;7QRI<|M;y9 z!Qyv1#(e}!_l@#oaoacN)r!Bf*xjk*d~(Z9U%}U1V-2^F5}brG4us!xEi1`8{$zt( zakmv=6N8507Cm$sVsPjd;zp=+XZNy{NZ480D6Hz?pA5nlbbKhTxH)etDBg$g}WBcVlt zOi!Rk!iaOU(f)qM_jLGJ*f&pTXb3 z-^2Id`*0jM9vl~r55EJy2fquykK+ON4}eV^3%Fk(zb^Fg|2<}C0M`$0a~MOQLwuZr zZo%f@n_(RCA^|(Vcm>;tBLREKAOX8BL!yL46^S|$O(fb#bdcyF(f^LX`|vsZ9sE6f z555n_f#bn(;rQ@7@O$vP@cVEca6WKeaDH%}aK7Yz0j_5z7SLP&zkmG5?hHsX;9FUc z%s~R<40H@Wc_9)pB)Gj5&}*;}*h?GbF2+1OJZ^%5f)V24;-?f96>q4hsN6^L97%_= zvT~o2lF|q&223KEntmQZ@AaY2;PdB5?!))s`*0jM9vl~rKm9xKd+@tB9^ic7yx{!c zJmGxdyy5)eI^cR}k^CPHkP^`2uk4PGb?~t;zJ!o~jwO-6I9!fI4T%mL8=E!QNI^j% zAKm%pDYEg9oV*++At8aG)wTbWXTc?;b92j;wh@)<-_m6@51j-p9h=|oEMxQoF|+woHv|5?i2nG z2mi7=*dP2Mj0YGO_;?4q1IL0fL_`8URsspcX3()ZB_*W+vXQrxlvKK!npzVYzZiOr zft?l#FT@ruT!;xR6vBjrgfKxNK@8c7B!B@D4t|6I{x29H;eZSSfCIGGBgV@+E$B7; zhODeChI~eoBr09O`M`O>`AwfEoG+X=oIeo>Tn}6qT;KO_0Q$fMz5HMKz^@NtJZ^V- z^cwUr)9#|^Js3+%k*FZiK|XjRx^Z%zhK5EL8iN?}&6udDC`rKf!Xm_fr< z!T<>eKf(ZU+7AeP@dMxwzWM?j1M~PWzyJvc(-=VKg5ko4K1VmF0W5UM$jaowdBXWl zpEsO8TnAha5y?y(!1d#C0rZ0F2)+DY^T4kOt`EjM@Oijy;PMb3!9U{T9rOg;TM>ym zJw3fCvT-6B=Z|5WODvHf=^FHnZkn$N3#T=D`OpL!ymxvM4Prt#;%qF&P;dOj=r+B!B@D4!(zhAH{>e%L%6Q13VrO z|3QvO?gt=8_)$Cn3~+LBl5$YQ58C0n;rgfb0Q$gv0iGv--avmahW;Bk0d9Nn_i)bO z$8diSagK;Y3<=a))tH%?*CNhbhH`dHR!)|bPa*#N1p_jF!~n?`ki~=F%?Th+1U~Rv zIRVcXUWju7JSK2*a*})&%45nv51@}}y?}m*NI+lY@c{G*dc}2&Uj9ct@be;%^|-$W zZZC)g;vMiiZIqks($v!IgfWkNB8Kuhl0eM=0|un0{Qw>h$T09f84vh>AxE6a2}r&G zVF3IE!ayhDB)dQ_)A|8DfxbX*csziygy#piuF+fn5fA))aNFat9`YOT_rgdZ_fbaq zkO{JJ7UFjps@K7_WAaPozhD6Ie89n1Uw~o(9uK5uVqhjGz~jO1<^=zS9Fg1?fFHnp z0g825pdZlFw7x)Zpg+(fj3v*>-5nYMYX> z64X*L1x1Cg7$D&Q{J=~M{6su}ngGcU;28KX$`Nr+02qL}Gm3|8peNARwBA5}phwUr z=oROM{|T{RrtN{RKs^I;8K`|jER#o~iTqm(vVAwYJ`D9#k>nc;C@lTf7yL{-K)i4! zCzu%z{%M`y@8pQztr6mWy}AC0TK=%7RfcpZ(3Gn>jD=)+`fai!f zH~daK_;1eKf`8 z3I0xw2zA3htsCR{!SBiuXY`ej<`40C1H7N)&$z(!oB{Wr)QE6C02n~mmWgzX#{$qd z=pD}u|J@kC{XXCfYLZabgW3e-r;wun&(}ud@-*6d0@Kjcz)&s!Ul>qV`+@_A1-Ks| z!vOF>JO+@SaSY%&BJK{3cdU-5BzwLZ$RDw`3KY{p*|&y z1oC@L#8nQjSg`^FzmIBrn5L%Y_c4ISgK16xu>f*HycPsw9&!SB@0WALzY!09b}o5l zUkQv&=pg{xgPqvf*)h}`_6K2QWyQ#ag@pyf1?Bu0xxo8y48Q|!e>gVGbD_NEFz9<) z@1TFM1K0!X^6$tC!Tu2QfoA~cgx`YtG}I`euBQh1{mPXqG4T6Z+FIXY0QUtD3vfSx zV*vRBB^3>lt%2u}YQKoz0T#Yu0QUv|p*bShALjPJK43HESeR|muQE0^?uHy+M@NT*0m%8j;sE>rjsct#AROSlP+r#&Q&2Z1<^K@Fp`HhE9BP5U z1xbDY#{eD=5I+90X80>PBHmX*)?fC$-XiEPgt#w;{?32+7-Ry1HMMJ4Hp98p@GKc1PThR4<&t5rJbMUfni5UjTU_*n^x4 z{Ej$)kA3j_c+7_$g@s694p$q+>MSE;BTP?U4+Gx!6$7|0Aol|}25?_M77vzdnPdFc zrI>`C7bYbwOX}-`@dh>le+Qg^ylzb51wR=NewZWTb4X;pML%0Jg#JRv&4KrAad*ca zS65?A4<7uoJh*iWTY<(9jC-&J8q&e8RjXHF1_lNgjDLN7eG(4-fC0n_Nb!K27vdPe;{mD@$m_dd+)mFi z(G{Vjo-gR#104e|gSY_oVaN@>i3bP+|CSsPpF{diZxP@UI3VcX2wi&>+H3AtZU6k? zL+tV0yO^Vm&DTETZ{`lZ(^~}o0rUcM>0pm(yAaVc*onL@fZGzi{nHQl4(|7%KNZjQ zp!To~dKOl#TGeT2WQZB8F!%!oa9{BEIDtC0#3TyibZ)~0O%7vX60%==F+k_g4+eGN zuYO=AC-^(@fULI&pF{fDc|uIChuFTBb z3^Oz|#8w!tz##AYii2rCfMbBf2~a$M+~6Bth{uC(>I52?@Y-`2$A%9Wzxf$#;bM7G zUJd*j#vJs5LafJg1ClQwpG(Fu@SU3B@8~NLMSaF_9ujDN>FkLU*o)s_d+;4c_U*$2 z5tjg)Lmr6>tS$J81B8q3#RK3VsGeR1cA2&h*a_?fb_321cKkbWfPCx&=Ytv()b@dA zsvy4?h3;d8LEJ~&4+9_Y2Mplx;Cr0lFLFc`Eh9|8x&-5J?ZSB1-NcAXw7%*9dbEHa zLZ1lE3unfIf7d)Ba8l?i7eTRqH{$uv?%)5VaSvl2d`I@_)0j9qHrN_pdjiim2H^P* z7?=?cAQu9=fPJRz1oi^Ef&KoD4q211pY;JV$3EngL?poZ)Dhn}YHe+etu$GQLA}R#<@Ygw#{+U+_)R?cUY%e@ zJdicoj?Hy>i~K-0HrJsU<5}vAadPvLxH0Gn*8lt=H~0xoKR4}&!ZP(#3lAD=_`leGum;{*^JksJj(P1}ozp22=U>jQo? z_My(K2x}LR-|t4e4>K__`33{HFMwEp`vDvScz*DAb3}DbZA^UC0ptTZNf_X8dW~_Z z1YjIo^GG!@7#qOFpf?cwABh)|%_IJn91-ahazYWbu1FQ-4}R2F0+{+z4_bu9qT1}Q z`g_v%5q{z#A~0d7A0T_^$=U??H|LToLE|MD&^z z_Yv1hb#`&a%vYIX!2KZi!*Kw9U?v9sG9LUOMZGl!kT3xPucSA$%i zlpBB_nCT1tqHYY|h508q&KiXG8pQX0b?k%ff$J-wzDKAXK@9CcBn$ut1RRk2 z0UQIkFM!+t_X9X5z~jL`$q_ZQv@y{&r;**ezQur38^)%vl{8-pbEUwip?4DM{$J+} zW@6w^azw}}z>jF6`H8~Imw%b-gYBV4tdDXY80Ro|@LSfWPxly+*9yS?AmH<0{{dt} zydD7d1iQjK4n8k{UXmWOWurj|b$u5XZpp z&JopgR$>A+W#8DJ~_ zBjkp#-WV{DcJwIr0@?0Y$9`R9C1$;LEy>q|?ID+dyyZt20Dtha@!&`6(}A-h9`G3K zH*H6-Cq6F#F`hgIfc=5@f$zubJ!0tfa#UZ~h#nZ^{J{MH10+9yZ~(CY_X9Wveu)#H zdeP71h)M=_Uur|sF@QWC%+WuEv2h8Kas#N5z&=0_$G^@SkjDeW3CMFq$R8kfN}|69 zj`llhyHC)Zj<<&g$=8F;!7t$g|0m%9`~i}`j0ZR;_=)xDkXJze71$5#hy?73=Yn8o zus0q9aNiH}1$eEO#QRWPIWI6U5OZ*Fz-;YoF&kSO%*x6NgZl59wQIim0um?qvv@FF zE1DS(epomDi<+VQN*|2VrTve70L>e)o9AO}{PJIN15_`Bu>^S$jBObE->g5G&JUnw z47?GrvenZQ1H1j|xQFjUKL?COusPmehW{Vl`%4V`!uoW$UWDm9WK*06;x%EgGkFXE z`-4va-_M0)Arg7m&&t)+wJRnz2HU!AE9Sk`8}s(|#=N|}uq|F&u+3hZG0)AOnEOU| z4Bfkigb`~SYiup@b>I*FQ9SrTj`+R4lEoH>|5Y2B;S1QUYB4rpJ;V#=ka!`C2dLrV zxdC8+JRX35fPBvaoj26we%1C6H_jY8hT@1c$@ZjmXsBiloD# zzln0}uIYWrho*tM7 z@^za$Hev3Y+%d=(?dW1ohn7?`M!f{2nlXy~kQd+>0N<~Ja*UFzSAW^>1K-QPZ~;?9c?Q@QaQCH-@Ynm5 z;GE!}#DkeNL*Nk*1Hg{R-rtJ>cpd<;0C*wnV+%ZS2@*Br6VsCpC1E~3KG^mh+c9(t z6Kw1DX+MB`0r&yH0Ld3@`Qi&ak?#Z?00uU0+DP&ZkUO}!yOHn!@dJ1S)C|6tAN(*L z{2)hE)n9}0In@0a15R(SIZ6Qt1Kgw@Yv6@o6NvMq++dmyfbFx;JlyYy`DNFxVY=ve zFuq}~lGI;@o_`hte~T0RNsb732Y!RDH683ZZC9`_*ct2%cE^1`)O>&+3L=3$O?A-N zZAv_li0$y%f$i9_;~Na%@qmN@JRZ!z0QiE99^YcX&CLySb#uiwxNg9pmJC>cxuoya z41YF9TxPTp<8praLkw`Zyu;?`CSz=z|Ed|o_yT_qxdE(AOWL~^Yy8E!K8*X?iVDmU zT@(0uusiUHpY1F8yYT?uvj*~gh;JZY=a7)?!Tx}AR10VVdrsRG>}&e7IU>X!;7(vquRQ0XZkYF@VPd@B=so zTsF9n;)A_|Jt?mMZh+T{a18v}JffEF3QW{8<1aD5Zh`L9O;q|r%^2z>zT388^(a^W zC)^L}!?6+JUu=!)2T*qa`G38K8TdI^hXwWoyH48|>a{wVno~T z)P`p8Lw4IIsAjzOYi04dHnKJhMBtU~?3eNk>MrjOz)*dF@Pz=yyy z2w>rdYY)D|3H~kl0pf&kPAGN`P2ay@W*q?Memn>d!2On?nxR{4Y%B)cKOiUo3kVGO z7Y2|o_?dV>sulf%91-V+kROo81Hgb2>bryd5pqX79zYKPtTTuD9r#w@-QdfKdQm^D z4Uzi+;EZ!tq+x74A{eZ>1zresScuyuh=W`_d-jL@-S^ANFza>eNPZu5Oxn8&-?IkQ z5^)TWaDXuNKfZ?GBa%1)iU$x2a6bSTaBy_M)~;KNVuBH-ZtRGu>6jq< zE0AI){U zc85F?1nNj69DpCdF@WZizwrg%i3k7A91-$Rm`f+)fM92^H_ids&}-m?i;<`zKXmF; z$|-Dj+-@u=IEW-93?N@XiU&X71bBY%)A8VMf?`;NU-E0PzA6C&1&u3{HU8i+(jn{Hu6i>*$I}I2R)uLr(w_ zr~yE~s0->7K|RA9cF%s={v=-L@DgK_av=4S0561^D)2(EFXVU7x0#IcVl}jW9o_?O zh0Av_fX4$ePVm$5fD8j*Lx^pp`GdciAApa7+6vl-=?2($+Rk8aybcJ@L?qBJsEKNF z_tP`dv8b3REF?7K8w|i)068bX(-v&OhR1))&fjo= znfW2=GoGUyLh2=e{WqY`7;46_XO#y!nx)jdW-O$0*D2;AHXp%GagLmiT@}^ z{K@s{fEVB9bnjRE8f zzKI9Zyb#C0Z_g2@=MQG)h$L=EmLmcuFmZ~+cs9KLZ5ZHi=|DB(qo|i)!Ph=xsHK3d zfNPTM4|^Hn`x*X4UkQm9{23?sH|${saRkm6@=@s9LcKW8!M@XW2780u$?N{4ejk*p zcVuK{U=fiKr21bN>U{+a;J)A+4B(sqj|Zqu@Vy-In|Lr|F8OQCaPyZrq`zA;B-M*h zo~Z783gg_+@%u0Ubpo@i7#rVWlpAo6as#NlLZ0!pr-&Q_c#j#134iDb7yaolwhj|v%o6~{p4f6nCXYzRfm=6$|eqRsSsxLD$ z6AMT2E*$kQKn)l$K=K8D5f8rM1b1U`$z`nKu z)r^;;n(>@(`iz0+L*4kBy$o>-;C<&fH~h1B05v116_CY)AJ&cWdBp#Zy{`bMDrx^7 zY}Za~z;4AtOpLW#R}lkSR7~u30kI3gb}ejO6FUK2QPEWtvAY{|S6!3y{eE-rTo2a^ zV(c6L?>)QY<=lJbOgzs#JryVlL*K=Ws%&Ddd}mMM$jOb7Z~i36N-MF(Qh0?-D2 zPyHYv{NNM2v62a3iy}QI-;w?UbADjVkwUq|lFZ5eIk$CYT-FC8{FMz*zy3||_w@9P zS-W)Z>7jALwO*Pjtkeb#~*g)DiV@B~m7^6juU&EBQaiM;(`WhUxDr*UVGP zdK1P}93%mryb%^-{)b0{$@xfj`&(+TYe{lc!A9#*Q1SjTvXefw=g=XJi7U zAAGTnn1Hwvu6^2sTOl5~Gh)q(K~E;{tmaf(E8J=k{5&^}@_=E#i20iSs(av6j^^vM zLiW|5<;u=T$FZQXC0?{r^{@qZ>97zc}U^cwf@e z8g-g#HZHp%3vdtlcccMEK9RHiVa?vjS;Bzpo<695I?pxbIj(26r;3TznCYMj2iPa> z-NO2hkN*??)C=msp8ss!x^>e3Gk*Mdi38)tjgxdBq5R;RbwrQY@x~?{QN@)Ywv0Am z`T<5EK7skSm`h{Lk|mM`P*B^!HdW$X3Qs#dQ7d*H`>hNk?sfKhyTuBBW6Sej^dJp4e)7+B}br7rWSS2e>m zo~=OHQzvuq{d_lLK-+bY`#0i~|EUj3{l8zoe)kD~`hRHy*5iPQ7U<+cy-e`0&=KAH zxy!hL_J|ql1^R#D;6an0mj2q&BS*?uIO;-#MTO?SXjxpDON4m@zJd;PJf~$X=p^@5 zaX$&yAZa^c&ivM2oafq{UdN#$a{a1yDATZ1s~%4tW$+wJ{D3}E#$iMMv!wrjV*f+@ z#U;XjA@;jZm^8tF1Hc3Ff>`{3IFL|&@V#_I#1>H&bnWb_bwr%TUJLv4xZkRIW5fbM zKBv6wRI|2Lo zwHJ+cWYP-OAx<%#Ma8w4aw+R_=1F>^Xo2E8MtVbjptnmi&RXVeXxh}0{ZILSY_a~O z{U36|al(J;vZdO@NfQk?FcEY>hXbGE2PQkgch(U>n+Gy8M|@IT@fnA9@75{< zMoJc_S+|*H+jgfx7Wi7bK$}p_+OCY;UrPHM;l(%v?tS9ENK5Km9+{0T=@!aR7K=q6L%*bhIFrOb{18_*NYeF@}sO?%1iLHe}#HE#mOuIAO1F z;S%IQZ}=tbut$P>uDCABH~U%3*zpo@;45VT$o^RxuF$gQ&THT=(8b7;8Lw=@0SmOi zA`XBq$T;UX^5@C?D2Of7?|maJFy{w)nZW$49o{pRmL(4Vzs2~UUl;tUt>3U-n>lNy zv;%yC17`fdgaiMOj>s4y#sT$!-!F9U-Z<&Lg1!1=tWHPZKVy7pA7xId;y=xi@t>dD zFA%3~0I>yGYWr*1a~a~RsFzbVBb_I$Rr}=4`9ag>#=J>!<<7DY=NyX`AkJ0E1lZec zpaXh-pw~f+G6CbhXdmPHk0bskIo3bpz+%P!`63@B;s5KxU$x0oC&$8p@5K)isv|On zgmk|H>^xgxm;BN_`Nx8Twfc~Or7Qqjc+GmvkW-4X0DJ^rqYoJM|18zVN}r&5FV`ja zI8qj%zfIx+`2k`t^f^;v(E`Y+`h9S*_yOXax#uAk4gj9S0ZaUVdI)KOo*yv(0@n@Y z|2X3Rk^%Og#Q%avzuK^2gSG-Zbjq|T+LWnNBo0hQ9F#?w;B)-oEB%O!Eu_BJv112q z(VRKj#dvtWTJz?gjMLq`dNuSmLrxdU*Y#SvYdN|=C;SHZXNFxVtD}dOBWG@z+krYd z<~JyYMIc;A><8bDN==j!1hkWj^}$yz$#P#9W%gHlg>-%kPVrX8J|RL!Ds{uiJHo zX5E7{;2Uhi-R@~w%lDMF0m_-w*(tv>4~E2n)e9A%MVTOh{J>If1SJzFejstcs3S5il6e^DBa3JM zFX2xaP{je!55PTuwUN{1BH>ROKpsFGpk5&H0Q=>oOz;K#AR#*9FNh~0-R};Z^#%S} zTFYPh9eqRN5xYbi81)F|D$(yp3|UjO#I+G>xj&`Lp&#LLoZnc7*|7~Y^Ue_ zggfD{mjRd~tT2ir^Ty1YHA~xsGfwCa@bmZ6ru)Z@1E25%Wj9WM4~em5vl!(JpuFul|-oyy%(&!W5 zo?vqvFv$c7&=JjjNR$Z}TS|GqCv?4qpf{Jo6P9~HzuxtK6L)AMrrt={QGz~6 z98hs3QYHYs?1MT@d(YIeeXCu7c!K!TEHx)-IdU6vJ=69;eVy=OJZ>B3HU?TixlqXj z@#%>0GsmeTHZY#S1f7reK8}yRQpAI7B^-_LBwPt!`uz3z|C9`%^gt62fX%QM^S}`P zlm+L`ohxy`AMsY?1qqP};?fZrOF-Wt?ZAD&rzXO8^rg04J>1pb^#A{iv$Pl+NZ51l ziQ0dn@|Ey=7PU_Fv8KJ<`#~1i{9R-L;y~8Q!*RY#9(hgy<8w)$srwQBZQ7y$7Ze>Z z=?7owMBO@6%SS$zJtikh_fIL zEMKwQ0DsT{6Al0mq;3!&KTvjKosLNOGfsfGI&#=h?Idz%DHwk3C;9$Z$dTlG0|pH+ zXqMXLqp`403l zfsP-qtXlq!g$@?V0u zI^w{_jT@ydI0N}^$P41-2TCTepd*qG_>A?D@NtJOzJKf1Z|3==`*R_qQg`GUV6GbG zEwY%iCILCjT>E%xwmmKa2fiX^%v?_Bd`+`1*$Va{LvC`$>CvXgm;u876C6z8j@+X8p3u(ZN znKNWD$AN_K1KN!lKfpahy|Kr0!^)Mh@+*AJ+9&L3E20cRnoi$Ati5Q!1(~bj3v!sb zLw;`Bd(QWf1&9yQMp###=fije#`aN9r|d`gGe)2MKZ2S7D)>z6U3(@f*nF%*(VGJeG=R9k*bqer;^PO(ZcH7Kej~<=ajr*W|KJ(qQ}~+ouIdo> zv=z{{Oa9HhCZsFz?MJl858}`d_)fQegSC=whrb&RWTA~PUwL`f7xTW*K15nhc++2N z!U0SAfdziRxDwjTxc{DX5AxdAoc{wbn`}YK9?TqJwkV7Xbpp>?#+X3j0A;}i3l_x2 z0q_KKe&B1g6HrGa4ItlV9|r^e-)iF_4p7z~h4oJTjk#$|F^147Bo3(kh~KzBy-UAe zG@G8W&mT&NEile!TJ6)a+m(`MKq>nWZ3EN=Bn}wyAeLOHWCG}jlpUr22y}q)eS|%6 zpELmbzLpVQM!4DHlWIH2PP<~T6bcdFbgz&QToHMFR@rS9$&~ z{PK4Qe-`qA`3vT2v*vt?14<^Ky^w34Yt#>)U$fTrb%;9~SFM7MV}w0mZrX!no}(ZE z`_uJ0qLQEE+MnL1|6r|@lm)&I{AnMusXtXKUBe*Yfl{}KtzX#izM+76{X0Q+jj&cWJKI3W4J+}Q>kmZ3P3d76~`{jc7ksISNd8V3xB+&5=c!0Q7@0iINKy4k(+Uc@DE~{k=51 zp0o>mCmaATDA8)Bvz4SDI{sP*L7&pY+krh*? zPThLguwf6kV9zxR>C>)3-6TnWmc>X+X51!izKcXr-;7^bRHpLxrl@3ES5uQ6I17B?TQbx)SjTI(L8wV!%;YpuF_Yc0EZp?GR7x*AIBE`w!U zB6D6dR)ukDpWp!a0qy#V?hyxI^L_;YK+wKA9gsTf7K=7UB+ZNcjb9 z@i%3`YRG*tk^Ufs1C#~0Z-l&obigDNKrfsL9GIaB_<_GH^dI?Z(*e`z&<|LAp(C

tmS3Vtya^1>7r_z$Ki-vRfb8DmZLdy~IpFIqzP9(<|I&^)fh(m6Pm&OM;*jnJq|Ett$jxW9iV-mxwzDxJKFjYcRZ2sFv7(apUTd!*1m!ze)^(|^+-3AUw}3t z?h_$>VXmlJh^1f4TtNy47%MjK*Lia9xS|C!6+ehiN3`HW(%TFvKgQ)p)Z>7RF#}JC zD`$=3my9!0G6Cu5_tFvdJ|q=WUm^nnzt4HsrO0gApEt3*kdJ z>FxZ4Ny&!hu-)0Q7*i0&^YFQf$$; z#+7`QAAF6DXn`L{TLENJsVBl_sOW&g0TpXXJDocJMB#wSVP>A^T2BiI`;o|Np!VO6 z88e1lH- zgt_zP#>RnobVTC9x5Skwe!#UMOC0%1$TwL`b^_RpNDD0TgMVQTGvWYsc}sb&i3hZC zsC{?D0X+YN^UnE4AslQ`2p7Uf(fu!#`B2s3Mf_2GK=}qJU*<)jZMYh8=8vcEPmcq% z6)PNwB@@KM4-^h0)Q>3lpr|;*fAjuy)7f}NI$$1W7-tSM#3(6R@Cgn;CZKJX{7;RQ zJfHK;c{k2K;Xrth?h`)Bzxyrg9iMT^RME12p7G)|GnUk*Gl;FebfiIXP7)j$pZ8dmP4rpd1ProKtL=UU@kf0#V0uM zwfrESxDr#20<*nnQZ9twkufKql?lxG!B^^tpU4D=J2&5Z!1EE+IXH|}RCIuH0&UtV zwvsr&d)SDVa-NOz&3V`Je8PqBA)LM^?D0Bz@tx!YY(vQcv<>D)q5M$+r8abeHH;CF zyue5Y*00B2a_WXgIuMH=z)oatGgPwSC;UL|KhejUBBsDZA3+BcpEQp({oH=U@1Ez{ z<1;zTu)mFRp}BrQKEb}4cp%11`zF@b8qTkAo;lx~ch3Jm!SnH2io#?Y$@v_kH>n>E9ciZ&z$dnO5Ve(H5fd*k@&oQE z)$;=r4t%Xlpyvm)6)AaHFBh801fSyv|0*4k@z2y*xz~zC@j|w5tWCN{&&D$ zA(kEoD05Qw)Z>8U1^BKO^#b|;w{F||5f5M^AU_~|P;?-cOz@p_#Dv%kzr=2AZZrJS z9A@S^BI7o==1pTa;s9+uhzXg)`9tAa;(V%g&w1v2|5LI)UY(#TJ{%x_qKrblpa%6- z*jQu?v7Q#te@I)AMOu)6xDrb?!#HIEJuQF@}s+PoF-W{@$BLyIwWpym9_GkDO1%@BiKF9$krb>2W~G zgw#o>n@~TcjiMAvW!kHen`SNj16vWtVZsC80P%qSBiaunPcZi*QctwtL;7#f5gC_F zyVGo(CCR)hJX@JGkA*luIS+d+*Bb5lwCQrbIB%RkrQ`iO`8~Q3?`4hyDeyFLfHor9 zr)Z<3otiRiE&7fbKfoMw<~Shn0RDc)6A%v+E%?WEMDPUVKZvCx0yffS_?0=#2wRSU zd2|*pUaaw4b%g`;i$VW?$ob&B80Uxc#QEa9asHHk&$achl=IQt7hQTBP&Ojk327^) zecBd2=mGN(lRnCr0t+&M(v>Xvko0>G{*^h*=uaYl z=h~)>OPWS}mN)=BAPx}6un#cA7`s7w&w1he*rF(VKIe~XiSzlN4107>UJ3`4osc$3 z%BsWx@-Wh~{3s<+Dx%b4+!|z_J1bVM_=pEa_!9>xBXaNYD#Uz}ZkpmsbhaYBy-4u` z{oVtG2TC@S@dWYci29g<`1AvF9g#34K61Y#?Hr7cCjRPifOv{{k2}VAJ+67q1LuSD z!ujDmalSZj%BIWtRC9|z|D!L}PlW@NSID~*KVXc4EedrS%7#^vB}>+bvE|Tvp3pWR z>46yz$XLU`K$(}6^Ge>SbY;Td5)PPbsIVD*f&)goaYA%N!d1oGnA;4gM-b<@risJM znW>5i2bLRX7<__Hus3Ty$IEdW$Ip4NMd7?Cde8adym8(CH^Cm=HC+l1NVmwlNXHaE zpf00mL2>*|9k)96nYBXB>SfTgqh(x?jvuI4Q-0Ep$U^yHCH9YU?#V~=IAGd;5>IT= z*Z2_$Z`vOz!*X47FB}VFU|Gy@fbu=`zG&ETmT`O>r*XU-w_5X@53YI659jGWo!6s_ z3Az*x=xG7znxX~dbF^y|L?I2NeCWjehTL-so9YwNPbCj1exSzzi3^*tCk^%_`k4p| z@>27NPvz=exd9$l-ZUqUoP|F)343K7zY+hI6&HjINc}62^zrha9qam zahx14$IbDpHLq+s|IKS2!};XWX06Ae=}mZBiV2EpW`r&hvVY-Y*9E~j+^7>Jm}Z_ ze=EJmFyg)Rct9K{f79~>$~}5K;5sRfLOxlWxlEXk2=?;Fw3iYW6i@gZ4v;pmP>xhN z4T%?g2MhU#ETA9U&!XV2|CBfYJdij5Jdij5JRnV=Yymy)F>*d`HRfEYZR|Ju&vEGC z&T;B#{eL^3$8ZvSDIDM@X@SB6$~#In(BlE=B>5!eL`RhB%uB|cX5go*5C?aWaZ%K- z2w%ku6fMxxfzRQ92@ezwSil3~0O3yFKX&X`4LLS1f={htf7mbf&)84)m;Gk{ZBdBV zdbsQ5JI;fCUU2(={!-&5t&0l}NFT``Y5UHHQW%A6sT>M%fjV<-<~C)1Tf`jffL?VD zvg0fAeCl9?mk9^R6Fx%+OgI2~KsrF3bN>AKG6oB}$t%R+o?~uowr9+#%5~0uus`e< z`^SE=zw9^r&vB^rZVvbVtF#_NPSEu^JRpChd_?(}Ylt#aeiY7e2^8k4rS4D(g=?=? z(xgcnfd=;^jF5wMG4dquLag+0(27fluegtR%4fil*NFG|fLP!d=VoaZ31KHtOl@x6S%u^qO@cG*7r!Tzvc>>vBd{<7cfKk3^4;EqX%=ZXst zQlO5~7r2JFmaI`Y$6Q}|QAlHpq9}aeI;@C77*$0fUerJ#?6_X*pwzWc_&tB;b9|ol zSfB6V`}kf3Z??yF**^Qh{;*$aty8~YzuEs}C`nKfqx}EA-Z2I7UJ4KR$+_a3Q5WVM zaxN(=b8d+XnNYaSNMmVBARO#axDE-MA}GaBh!>Q-OQVo4v(VN`c&fsC^&6k#^Q_1E zd=KBp_wxO0hwZUlw$FaBKkS#1<=J1Q!|P$rasBT~*bH#4SU7(yTtj+X;QAtMO^c%N zfif1?A#G_nQ3xl}WLp$Fl)NbUjD_%2MSaKL`J62Z>#;uH!}syMe7}M>+hzOubAxkExu2! zZv}6*%l6q1_DA(i^%YY3{3nLDkbTq_&kXm;)qRNJ-c-SGD}7-O|LgLaO30evVo9~_p-;{AMa&@x?47=Yfd(3 z8V#SbiPbzr`&iA(4(Pfg?{Dbej}C?C@6jP|{XIHlejn>+;T5ZU=%D$1tnQ-2=J&eU zyYFhx(-MNrt5&@Ke`61^L@Goz2yDJ z2IZ}0YCyhTH$o$SG>yo{@Vx1TUdHBiZV21>ue~DYqdqmYb7O^j+pjM69Gd(;YGLTHbtlalW^mJZFbzJoD@|_CIINobqg5z=LNXaI6pUIS;U_ ziFfBmAr2BBIalA~;(Pc$&QB5GM-Q9}9f3U@G0gAEv!{6;SdpTJF%&9P$TSAbvu2m~ z;}{eya_0IthHTlgX}~w0DfJY8`(tj(qaETEb(wF)DdIU{niFuY2;5i&pVs>_Wy@&x z_V!vSoSQ4hfLz5K1JAZ&{&J3iu*hE^zdZjIb1d`O5)Nt%3KrROWY@A~H;jQ}0e+oD zOhjw6Nmy{56YgKLF4%X@feqGN)3W8to^`0`prQX7&)PstnPy+co_prClBG&&B}$ag ziWN7Ef%sIYuwe{5yER|_e5N&l{%Lt^KCTHpJ}Fq_&Yk-O*2XBbP5U6%_m_@A_1%^+ zpx7&Sk7ouV{)y+d$T9FdS&o5c$1q1M&l)dLvV_DZ<_|Zmi9#ROgv2M^njkE4<&M23 z)EF?X_gG_7(f49sI0oW7aV8J?-U{d3JzySdo_8n5P{~n~aB!#~&%{MeVmSthPZ+}| z_*B?{Pozs+*BpbwC-&dcT0p8SI^f7z#M!DBpH zr5X*j;Gj0&xA2AJX^3O&d@Ml*BJ9zBW)#ru!KikPo_2JpvJOiBPG4sr~;?1UL*_y7_a@rP@bcbWm2W zCk^z+#Iw~n_z7I{=lr5@ed=MrxhHNF1%27Vb7Xk-JkO`(7))o)|ER~Onp(cLI18!O zel4qQDan6{M{(g3X)JMR4ssSScdP2J`s8<05I13GXDfNOB^nE!@)Ys0HPKJr1OG07`CG|zo?74x zV0D%Y&vB7wx;1Pd^T4XJz7;-Is@GA=+VzH(sWVE6HnLsv1@Z}rPZ$qz$rd+b z)UxNYk-W?aG3{W60EGvz9e?VJYV=!+u1C zE9&$7@#9)woFUD1VTr~{IabHB^>Qp^mb>UPbs+L&(w$NH}#*$+#=|va=$3eM@bpf0C=(`>J4_s=&eSq9c$Q*<`^Hh#u6mk$Fua_R5 z;u-_jLz8ALH9MDGvFF~@f8#hBtkiPZ7LxSU5wbYs#E(4NT#nW0MO@=j&V_u1SX_QJ@VDOg*irFwi)V_@!dMV}Nt$vjt}O&(Yy_Kvl+?42SlkD=2Q zElY>fTJBaGwDOf|$TN~ERjwrGQ}JxICZt{jo<<#yFydI%Gn6CI|Ha1sXGSb`eZ+0P z#^BTTKlaeFbiMt_7&5z@)N&Q7s8y^~MXOV{ zo}^inXOY84ljA@ii5u)IbtURe^7m?0<(xwglzg4^4m4^O`frPpA#viwm9W3%CF5P0 z?~;2}xhLrpeA2B6?l&iWVvZ>!Vlkb)aA@~#tpaFE(Pq=of3tNAT*~}Yh-O!)l$6PN z)=cvj%_T2UvX+t;O>&mfpQr-@Z#YiMXP~2_(RbSUXwxZ;9A?+JpMqmxelCtd;gehw z-iADUiarsaxE7|2A1~=TX}T(_5W8<*ww#u)-HuOSz_pyE`4%mIp<;%!7ICHm&_ z#j}ut;yCBZ2Q;izdpCLJ@Tas0V`#WcD_pdM>?_X&p`69@V@+}|Wi9e| z%Dj}@se1tLsej-csK05eM8B!aP~WuyKbg$^4UAWp=docAq#A=cK5<=pfUg~fo~Pzq z|9SfGVQnaJ3%ssnugO~09^eUPbcnK2*4n<1CrikAr)Tk+57n^8`OAE%AqEwes9XiBHr)h)+1fP0EY)fKSi^nXeb}!$S0#I)Jh> zat)M(%y5Q#O;qj@IR@-S)UOH7{X*<#j6Buwj znX$&RSL`EcJJ&O15rt23O(m?y0|U9JZjfX2-(gyw9#<@n0rEwTGHoSor2fQnGWaR! z6V?QAhV%(B`Gie4`bym4oKtt6)E8s#;Uet)Ux>Y* z3kV~OjqAdk#+qb69nV&BY~O)HHMjo5wH|$kYTfz_(Yo~V&^q@VsJZs&uXX6wS99&s zU7i!bGa`udl#3x_tU^a=2i4=f>bv?ROh{7;fmi$UOkeJwp=`=Et;eVMXe?zwy&S7x zp=7}LbUVc2Yu&nall|r=VT$uE&eH#Yeo^0w&z4RY@ORokOCz>_EBF1F#(>;mrZE`z z{+iR+SUmd+kriVohx0yma}2~K z?qgQ@@>Na?J&omlb;YyUw&HhE?m#|sOL8ppPSM_>w-rda3UUnA{sYi@`eJNQDCa18 zi9h4LI0mi}YmNbSpsn0r!+ny>d!h0)$hEDbv5IHQF(g2aHK(!6m&dX4y%^UWqr#$Zlw@KwAQ$I3Af4yCysARoQq{xRklAS}$+1Yu#0Ph8h}IaV(N>TLyt4fiJT zy~y=+7&=KEv`sqyHGM}lc`00?t*#L163&LWOnlJJa3M77Db^=k!h{FV z3BusdSpvUMci;(q)df%(KTkX-oWIwc<5h89dU%i@GVYr+t}sez>eI9dz%J9Awi()& zXd}aKv{}+0nh%Be%@}av_`j;(Xe!plad5r}6XGlT!tt>WD;QJXSh>h5*s|=?$TjpM0~I5Hb9$E(9KzGyR&M=nbmL&l~*22;?VLN(k@O zCwl13d-ch`|HCeCV}Il)`WeD|^@(xZ;Jy09IMul2JlGiL1@j~43G=1#dHiFV#~YX) z-lKvIKk=X!K8dilC{8F=@-O`H^%r_9@q%lSYr+4fhTrc!{N^7Jhw%b_!7K19Z^tvEKtmaOr1;F&(haU1 z+R#eFN9qS3z(Z;Ohpkq|urQX0@hgn`fbWGqF#1yI+eRN>f~Wq5Sb>^&2j`1&8^@B6 zi_h`-oES?_*aYrLUj*#KJo}qIcgE6~`ha*QTRVeKk-j+D2gc4IW(I%1LTuR-yemHn zX~5_Dz~4FFb{N-e*c?C5rcV1V?WM~1uk7zCCP~GQ&?l(;frxXHeZV|0t|}P(xisEO z9u!|6IBr|`8w0Aswn9dL*>06ziLp_P$Dw~x#o`bi^sDB`nM1;Y?K55i zeK>CHLtOKKRVcEZPKA?9XWRPLHT_dSEKya<~ZSi`Rd%hz19hOqAToy zEKacFvLAp)Fxnt2I8Ob=IZ2BcFc;rJ*6?iDu1>wMpV^5Fo zhtS4H+nC9|2OFibvzBT)M$6n{x0Wk^DLH=SU!f11cs(;(iM2+JF-=&j zzoAXi2hIWEZVQ`eIPF`?Rx0hi4H}qYO^6c(+pN(txrA%k3sseV68a5@6P-JB(Ab{7 z{b8_!$~6kV6n(X}x-|-#_0mYAxYkl2Hl#M}2r<;R=nJI(53;_r8Jge$8(~fOVsm#4 z(=v6sre!VBQpOTBh5hQJneAyd@)X6lM!8NwA4Z{V(&}`;C2!h8r2dWb1Zb0yzG3(y z=|6(Ltg#=odsnO9RA0Dh@BMH7a8u5f1|T_5y7eMahHrhtr-x+m7-9(AG(K5GQDFrVW8U zZrX_pyR1k1u+i$y6VB8o6h0(J8Fyx)nV{Q>X38~MyqLrpt{KSMAJ8^=cOKYoPf}k~ zb~5U3)IpWKRl$SvFdgS))T!54%LP2l+(XxgR{OMkjizgkRjNz>8~s&kjS?Q@A)FiO zZ-d_r>y08G<%b-w?F3JlWbo}M8xi4QjuWHt9oN|o1QwBb9XE}$n1PXD_*9u^fl0LLZ6z9O@Z%<{u0tt(s#gTE!vi{34A^d z$bI%k*(sD?fjHrbIsXm$iq!h%XZWE*+HmxVYt+qsfR?XkWUM}9X}MdoFYhSVEBzjl zrW)xw+olZ_ys!`2r#wj-oC`RxSLU?V+0{7@bCJVK-!^>&<8i(T{gi5ry1IL7*?QcK z)rYK2)@lxpl{ETZWb71td9?SFzrc3(kn$wjCEw$f8oa3;bZ6-&qP;`fG2yR^3_EIS zpMI3NuptpI)%s9tw5j|2*tmeTX+y4y31`w|;1odKh^hFY=%~h@03; z+k>=!VIGc!gqYgq9IS_KPZ~ixi&~?w6PReGWAEM4r$)aTV=h<I3m0BWQDvl`B`ik-0i)mj(Rk_maLA z_`KvAonY`|o3ByQZ3PcK&15_Z=M3~`Hrk-Qm9o91i{D#=cMd`xpEtA}(H^Aikz5~^ z)~FsHl4c^7LD5XoZ}u6oRRG>?hhi@K;j37e>;vZkd4!%aPaxL?ZHm%{Wwa$unqu&W zbBz)n%J!ycCg*~7Ud-ED$ZONkf-MSRZa(k$>XVCo$VhxZY}j7pNQ|LfiFqm62fgo0 z(M+C`MtG2B(bh@$VSS#5-0OmOkigthoEjj6xuzwzP|QiUDBysq?5o6574uvuvY~G=TBmu!;!P` z5PWjKfya4Mmcz5QDCtp1U%q6_cs$OF^T9c!y_2+qF92^6akLrHuC@5TF*!%UG5ZP7I3rG;2&WWby# zTNEq#FaAi_l^pOWnm&E{zR+>~pexUSz0(8V(Z)n20mq$R{Wtaa^=XVEyev-ISpDxe!zM7xGNXSPI74R%zg>SvT9D6|=8| zm`yhsFT;3R%JgbHn3oS2M;Yi0ttg+9u2C*$Y#-wpiZ<}lGPgahHFfSIV{u#IJIel) z`>Fp>*3OhUlLzL?gS<=X8SpKUK2x5p*m=2>Wivs3D^#U}lo=^2Qm>>A!-77{z;^>l z>qzHF<7E6H`Z90EOf65_J(Bn5Y_t$ER&5za&zPdhRVwo=ERMwwI%s3kEy@(6QGCZv zsY4n-W&r4b21oXDCpxu-u$hT_sSufv_ zrQ=zxb`!)&L+?VI7v(h4Z2|j*HT*PZNb_caA524ED6f+4QcfL$_?5l`JhYy@`)Xag zOMmGdv`reQE-TQdBACN7^tVyYQRCs9P^KV^83zNu-%YHoN~lP>qra@!59ou_z?+{k z$1Qmz=ay$SA(!c2kg*oRE^dcP=5_V&Ny0e=UNwduJrKOv1Gv(Pc#4OVTxNRyS@QKY zLK3g9;cbN?*4Gf9De^fy%R0}}t*?>FNzw!EVO4Y?H9Ob5ELS(^V9x2-kAeejS$-K+NNK4kEq&hEu+n+@sW-m7cF?ju_D@6)|s z)h?yW_9)-Op@+SFxALVsm+hRC@6QzbwI%C!?ca~hrQjd6I}h$G|7h83WcTDr5}7~D zulX=bN>Y!c@6qkJo=Q5bSGU1#$=tg4>ghHZEu>&Ib){qV1<$ScE-P?TTif*bOd=lO zeieQKh~<4@blMlsmM+cbQiwHRnmZr_*xDNJ!BjfJQGmzg?`{B4G6D*hm9Q0!Az<{g z1IhO`+!sz^CH8Jq@3R$a3J7s~2cEPw{JsY7nR3O-_&!_VhPKK+wK6kXiW zDE>mhfBcI7NEl!i-~!?29L8BH_~DkcZ_y_%&-{QiyQo1 z(;lo@wxIRD1^ru-l;IlJ-+)W!4iPs2aSqoO=@x4J)N&1Yy6 z;txd;iX^X%BG5B~2$cMWQ49*vi9+5$U-N?BDdr?*xnU?2b(kuJqK*xER2^+#TRk@L zzebz5Vv9XVMEsXGkQz?_ujL2+#h(eq^W--KuP6x?k(ThsH^4#-$euRlZ(`gHprbD^ z?FP_rB(RV(^I$ceNT;XK)8$X zLcRjL3^bj?h^%BjTy9-y>&ceAvH{sNBplH@%fau<}i|E{?n?RVh=;7urdiU-l`nmTO zeck&CkAeM!hsQuMc;EmrYQ#|S%g-ak81GS{Lv2)BZ>X^Ad0FJ|b4?WQe^pc+dPZdJdP`*Oc3WiWc28vL{z$;&C}8Rm+1wtB zT)iKQ9KD{10{!j?yS|S^@ga{z$)Qh#!^j7s#_$MH@0YWpzt2+9dBR~)f9yTcZu(u( z#_x$3u;7;PTJuZX8 z7c3A97qToAOBekrmMvZ=RxVpCpk|3x%a@9kD^OOh6q{D962GlkCDyN5A=dr2R;*vQ zR&3m`UIcFZO>7C=Aa-rrB(`kXEVggkCiZL(6#KSs5qoxR7yEbb5W)L)h`oFFh~WKu zMNn{%IIw%CIIw4zIJkeeIJ9rC_&s=^2;IL=9K~-3L-vc%kRWjsW#0OeV$t?%V)Kp= zv3*~t2-tR3Ok8_YOy2xd_->67n-5$STaG>zdrwA*(BBV=&_lnA0|yU@!-o%vumd6D z#KD6iEHp$MJ90?Cq$R?RhKfJJLdCITVdBJbloNl5Q-?#v>98N;%Jr)k#kH$f#I396#I0)=#GUIG@p(nuy>Ut0ym3w3yLCl8 zxP47LxN}W}L_~?Zw{MDjcW#P@_il(s4{nJk4{nP`5ATVm5ATYoC-=my`%lH~2hsTM zfrx(m0N*_jkDo@1sHacFv!@Tm^XMny&u5QOo{ATLMu|V4Kf~uU@#@8M@#@tJ@fzjL z>sR9K+t=d#ySL)~`?uo5hxg)H22K2FuZb7UHSuboCjR!<#G61(ygN<4YT&0ikpZ)W zXa;Zo0MSDDiLPR^7%IZWL^!qQXVAnddrfR>u8D&KH4*Nwi7SDcczpU}{S>I57WK2B zeooZ4L;ZrNUmW$TWzdAPy(R`W*TmF;c$dE>f&(>i>Ga3?@zI6^{q|E!Xf!`1=uy$4 z^NgJ#2SUR_!$LOnZT-1A9arxQ3JMAdIdC8}G%W1+vCx4nLzS>@7AthvwqwW6ojYX>W1lb#Hu1+I3l;io!}B|K z?Aj^YkQFd&R5*qjJ3pDMzT38K+Y)H1u;19Hoj3wv?Zyp(+s!KU#L)~}HcVg4KJAh% zph8H{R+lXB*=Eh!Z0n9#U2+NBjOTy*rJXN3g+Xu>`-66RV3!WAInzUrFV|IQxqru& zz`!kA#{JmPJ#fcPRbk(-ISb_VbI9?q>D=Z#te0(E70pQJ24Xh0dV}%_U#JU>Ak~dzs4Sm|R z*4^;>s#oh+(XAe1T68e(`*0nBn>GQ>RYgVwIq6fr0fME83;(5#T3#GjG@q zBRa8(_N>tQ^eI#@R5=i|GjKy4M@O3^Z4Iv z9E&7v!pR)GT7r()!3x{?{FKxB3Maxw7sy}H(V@6i_TdYrE|$OssJSSDLJsr!O@`;$ z2ChF&jIUI&BAgl(a%OfXB#gk8`1gl1o*(mf8u`-q31kH}fn^$Y>;xC{(KD=IXdyiO#2+)76tw5l4&_SM znjC0YMLT!y<8nU1_XnSm6;MUa(~4>HGS#lY3PqE3e3pHS&zCaR#FfpJu>Gm!;L&BgcFh{8fcebZI@GcRp))99=rK7+4UnV8Of@ z$0k&9;3VbE@+%=Fp&N3n7oQhLBMlYKL~J*{-Z$)2_!z^S=FYZ)kE6nYkZ{8S=zTWQ zP~#9gkN1xX2CPrklNBoFYP7~!Av9RNo*iO^$Z%j7I`~A$ zwc=;W3K6sB$-(+og|S8y|Kr5zkG)}~_Gejvg~;)- z1x#!>mr=w_^=jj%>sefQT-A^*s8w|8%xtsA(ZZQ?#u^56iohTY&xfBrW298EDmfoQ z1yc)n-1vONnbTckJ!rZa5PANr9D@-7*{6szk?Z5+!p<|#o-;IJ81)%U!5&G}Oz$-N z!@2iSNN*g8yw3QOg2aD0yAE1;=;XVD&>>P zD8Ih}<(8izP*nNpjmG$i4^ud%*T=9!RD%X9g#3ha0eUT7Wc-9t@&@nCKNG{w!tdky zv@-sl&`%5RxnX?2{M5A{tAFUH>Ob^wIS%<*J)UsN5aYbyMV7)U4O%SbOI{y8si)ea zIH7z_Pp$3ZDOz_KDqMR0EPD4JCc5_|8^kSDqCJ%Mm5|U4rg-Q{?P< z*Q7IM@AX*N^nD`o_IoI*dfpdRy`G5PJ59`=HA5`;b-q~i>pbX#^Tpyt3&pZU3q-(TgFd)o z#d7F^E5w@BE1~;s5Surw5rLaGLhlO{+qMRZojbOQ9Xp`&ZQUw%L+=aPvjd;I#J;_| zMNrUwaUf{72o2gR4nxm7d~lx#3keo8HeDCXHXaZQ_dXSS4qp+g4@QY&2cf$`p9?$k zyEqYgP@II0cI@a8aWd?%I04-a+e}47*iosoMVve?&O=`_=xoPD#HkbF-073zLgYzt z_>T)B{8Xek8*v)?T7GZR|jr!RerJubMn;Q!e-VSRLv|byLL1>fhg|?`<&^8Se+5vx| zMFa}%?rD>rRtoE>SrV|PWJ36*6k;=+tl@BQK1+-Gwi$(1&0c8jn+t8^K%vd`7ut?M zp+TPo$^*N3&H=SFYiMb9(9()QORE4a%?Y%jzR)tb2+e+g(3+1I+Q5ZE^WP%0z@tJt zeO*`I7WFHjek0WHg8IWz-xu{)p#E0W4?_JTsE;=Nub}>2)PH8GUmQJXh&S}Y8z$fl zEAa+s@Zu)k@PA29EnlT&Pq+3pE6PbX|EFx-QC^;-NBc~iIBAkw1@m7;tzpAQ86Oyn zCwiBU^+cIoLx&=f2cGa6?c+0+?{L&TU_TH$JBJR(EATt6p+klY8%a-);VLt5kVm%$ zgN6>{D?Git+LwaE&)(DYhCbM1)we*oK5PTWi4X=k6bM#P;L5;E`X)|=#Fpqj2yL9Z>2Hl)Ei9y|>+C)6yGklOo!K{hu z4j$Y9wL3N+g_-afD_<~n+O#Q?CZdi0w%M&JySBs6Ej;8v#!~#KINjIRciNOGlY9nu zwaJ;H6n<~vhHiRtGBE^4{45`sGO=;moVijKZR_G{7$_e25r@0@AqoW7lqu7ibX*HB6ojzh}(X z36ni^7=E5K00-CcceXLjxnqrVIdbK)PTZOA#+b)W?1cW$@W&JIwz;9__PGY{231rm42SV2PXa08MEGN+5|g1kfGQRzQJb_ zeioJR`;6&rIIZ2M`TCB?g9lO-AI1lq`Ma2o7P@ytbr<~X>)Q;!=lY=xMnBPjhLvW{ z7|U6AnKE5YMPazrbEkLr9IfQDelw?fdwc&f4emz{bSjQc9yfmS#4+;i{Aa=pMBK2O ze*T8Z1iYsB>X3ZGjG1@f1)K2ZzWUlsE#Oemd-kk*9}=$P)%z>^UQEj{r}|Vg#j;M}hghb~*#8g?SJ*Si zidsfdRkIiEwB}-jHc%k2N^I8xMWptT&t^vbyv^YM7(lWkM5E0@v_<`%&x9DRWe}55 zeI1pE(3%Z><9nuW+B$1{=sKLoJRc%sDBOhZ=?Q0)Q?8} zSGxM83PMh(0XYG(g&#c2n|&cCtc9HLJLH6j3_`nLFSM)8g?4A4&>s0?t5=}VUY$1a z=~4(%YL*xEOQU`@)c>EH^4}(>WCjRLS0;O>nzicI$Zq_?refvFRh??ptWjKkk*7l5 zLXMTII_A!n1Mn7EYdMxll*_Slfno(K*F}}G^=nlvnJi1;Vg<|BtPKUMQKJS8YNtz_ zpDAq$!V=)U*~&8aHlKBU|!RR`!*u)~uUVG;7+VLD6D4Q>RQ@ zwPtM)XX zgZY~^LjW+^G2Eg`Iet@x4}WsScmdDTLBEA=83K9P8@j5g;Aw9b-FJM3&$151g(68)n1MCb6onlz1Wc5}VgiNh5iI;^IURXLs2ERe&ts1%NkGC4ZhZ__PReCet4R)i|dA?H6FcfQZL1zgJN*g z!9^d>p4G9zq?b>625mY1OY2Hm>*Z>9e2B-gJHf}Zi}H8pzI|fVD{=bY>??Lo;WG;@ z4^LU=;p{rSi;T1Gf2P;#v=h%YEE41r;#bPW*3mV4XoKRd`#rzq-?q@-xtqOiH){W& zzX#Urc4w^Bse%W5Uko}H)~0u$&*K8;9{&_ns@mKPfdS_OHFj4Qri4W1qMsy#xZhfZyGd=S849w6ZTcXxYvWcZhmcMSWxnq@se_1zK zx_wmZG8r3;7fuT*2jq9@9Nao|uFLAXTZj95*vv{a<^4PVJx6Y{Qk`u@gIa8EQvdYI ztYeN{Z!qP?J_IU0Z(AFJQrQw&8}7O2-lS}fY3JZ$$-E{1dXpx|dhvw$IyE5}N+vgW;w=Vgu z#!;BO^N;LUFY|uy!Xp=lbvssI^5R8v=2Y0+|GHhL02;s--Up7Jkt?%}+41%7C1J$*v)eh#~?lpIj0!>PLu64mW#eW7xt zfc^W^{JNlBK;YU8kNQ?vQ@GTGh=>+$?(S6@rLMK%_nT`9j$b-C+xQ>4SRd=tySIBl z}TJl%~8(nnV(&)fd0XresdQjf0+HD-;6Fvx8!bAu&Z0sWeYY{X+F|z=gwMv z8m79CBS*lh-+s+DE@R8*bHDffUSLWOsU(#1lGuHV7pvn#hSr{r51%~p8UJ=<;ZmEt z$0Sd8a8qzhy2*b>UynR@ZbxuXkY_3XtLfKVDLFfMw%?dv?J7ofO>$(6RWqM=OA7}% zKTMo?!OkYnyz*vPc4K+OnKO0$rWbM@d^)tyv|QygCQF@7T)gOr-GFxE?l;^yyLy#9 z-gO^7dNTIcOD=^S2PK(2dFa8(S*kzn)4%`q%co9lo|0{1-amKe9^0T)jO)qL6HnLN zJpRTm`$R{!Se;t-+NH&?-p{J0U6EyR$z)>=3_n(6^};%JUbKAo^6{{{yKf&pu*N^% z(*DibDQ^HH(^FZi(5rAAK0_K&(akux}~gb?0`Umk*QvQ1ZD$hw*81S1Rt{@b@*q0e@s0-Svb>lKAhHb>4THeeI~{VeR(%+7oXrsWI#Q&e{*d ztN!&z+0GCAmiogIO65p z_c4E$ejC|xX~5>D57zE(cIdIq+FyR3(`NI5;B{>}ZW!WIH!N!98T&qi_f;KyspH~) zy(YF9o_h5etM1+JHrv)U`TG~Q2VL0N|N82?ckeEkp38Aiw)f*hR&G8Tn(npLp-xwQ zI`&QCn>2CyV{1yCJYVe13!mnT5%zQQ_qrM8d7T?^f6=fvBW@r0J*?28M(^KFJ$h}! z`AxT8^u06d(Bmvm^1bYs?C({*FXS9{dSJm?M@DrE`*BY|c%ff<@9r9T{&J`5*M8YN z@?}xyy**B}xRuBK%GRDuGrXQAG%v@&wiA-A=$&EI^jyAn%AD)Q*)S>qx_>6h;{MUxa-#BRN;<2i#NVnAb-KJTGZ=fC)3=i^5fi5xA%42T`TFZ zF55R0O&%HOR^xuHbd^rFcB{1g+~e&#cb=JbYkZo=Hy5mI*akk0^`(jyy;QS;qwT5m z&(iqJm=ch=c#`xv#-6hANL{ag1<~8j_2d!jV!^|=S!>ZP-?wa9^=0a1ukUyCc)I;| zc%{e1vsD~mn{8U>v2WHNd{^gHr`fwNAKMhPI_urP8@xYo%J*TR!-eZ*A8R{%NvQ{U zaygDlQla0K6jQQ#22IZ9v%T`rC$E!^9q)83+tJ<0TCB)h!Y!ap_R-heM5Jx-x#q4B zOOgjiyqn{nuWrnErw;=&6>6L}UyNhv08NxWl>OkKvJ0zkT=C53L-#gy^8C53NN}4W zN&6@6gH5^*+Kx&8zI^h@m!JCNtLqyw{$&NL;Es3Xq?Qc{+lGHf^>yx5%vXCNM3x}pS^h=sMyAmJJay9q6)c?0Sc4Peh8CVb zyXuYT6`gm=gAop^lSZQKaa|l_eSz`V}41L&BnR@6`ygbvi@;>YtQh% zE94AJT{Bs?dxRDHWXu|bK@#%VOW0hBS!I#Px&YtIR`UlRn0@`Rn^$^)oWcjn(jviT`T-yHl z^4qr~)25j?ZFGwrPQFcYovCAcF16Feox7}6#uwC%0zh+w3uyISVt^J^$Z3;cP5R|*xJNIfWrYy-j zUhGbsHbuE4EuLEyDcE^a=|q9u#I|Jbuu50l>RR_o+3+fVg*#jsaJvMEaYmQvHd9}$ zxmC7M>V8`KS5JOAW^4Z5Qvj1{7dQxWBHGZzgKiqDUt=eec9EnHUHG|XU)zH`7|0+0q$lDipxklbTIKAAt z?}ent`i;Jj{>2aZ(x>7wT>0m_D+f14%*^#NtV^D%BVSyo{^4QM=^cJ~d3M0Di5V_! zI%a(~UC9%f58dqE`jw}b>rc;rDp__gsG4WeG*)9$ya-4&{OXabMGwAj3lM}W&xL%6H<(6b#9-cpN z-qtN!2G#Y=_2zu?Jfoid2?Wk~bjgZ`K6&rnf9G4u>(-4|={koyPk8SWJt4)LvuRI0 z?RskKc&AyFW>v1!u3gR&4xYESpPv(TWw*yb?8q!%Z@E>qnSSB6t@>17_0+zO)3WZu zr@80A4AXPnS)EUV#MvZ|L%%EQc3vHtbK$E6*S!w}EFC^!%)1QF{u;5`ukFQmcERuG z)T`xrFI8`+&|)2}QqM2!J0V$QlPRG;w%gfvoTJSjQ2k?a&NJXum3tTGp0hy@o93ddf4T`VCM{D-@V8cQRrMy z{{eNg_Ip~wulj=pZ6>@QbS&I@YN~omtsD<5UXiNWyVR+sEG_{)mwI%`(e3Bh7M$j^ z4Z`%S>#JYC)*h~2;(2<=`3_#%>^2=zA}`gWHW@ZFU(#=4wL9r9TsdwV{OEkS!omH^ zPf3M?c>g9TS@A0Ni*Y=Ir)c4|+yM>+=3$FP8c=`^1w!i=T3}Ww1E7Yb+?VT8< zwO319ySA!PwIx9*wfA1NTdh%)8lg6=-I}#(7DddE$T#oL@A3Hk10Hf;_ul6@=XuWa z%8lRT^Va7CC~joMo#>HX_41*yHJ?YnuAM3WYx&bKa%alCm#M?VHdt?#7d`x9;_SQ> zh;3SYO-JLptz-9j&TcMXxqEL8+Wy7oPk(K9EsnSXrk@#FneBTM;70#lMq_jr4@A&8 z=SW=ZR$<6#$NBGoKlj*dNJM@y|BSOshe=hdE-RK9)r2jtB;H=+^c<}9U3Aq%G#PAD zuv5E|Pe0T7Aue8rsVuVVSN1}-`|r<3IkKciU%0|Y$-Tq7tGL1or2tRTZN+~KSRj+F3o}r(j9^MizRu&b~*8_6>MT zCS4kIfzFoXcOp?q6{7mAH4nId57$~b)buYk5}yxTA-f{dvzLq}*IZB}E>>)yQ29}l znAZsp`XrM{q;usTT1Y3XnuQ#&Mh$sOp5D3P_tozA*H?#_IEmZ5+ADvEh2 zj|x$^?gHD*3(+>MCs?e8b%cVdutCt8?^pZ%U}E&&(QDi$z8 z$TI8+T|j8X1;0FL2`-<(fbnS+-Bu`AZx&Yt!;v&cvdCKxV*h_FS8c7lq02dXc zKPt9Upn(gk!|v{FQNwXnCZ(h88<|gw3KiVm-Rh7R9Y)^jW4rkMY&`@dkJ^HZzn))~ zD=cT3Zf?K~ad@U=82N+=vt9fY6>T@n^j?r+=*8-D%M0w5rEdI7W=sOg{B5$BK&FTA zWC7Ktbx@#|F4m-sGdRW`23v6%8Xg{QTYD?EsdBgy`BtDK#r)bb8VAe^;aIo8KS?(Y z{jD=~n{j;CDapJY&At@+N7nMI-_8$WV)$WKFZd!{y$IIYHHz~ji|UdB zgLAC^53enT{OdTcr(hBsJUfgte}C}*_s^{IUNWqVE43r=I;DpBCgl`gucEcT>pU* zlJ}QFR78=Dyy%syyOh`_waWX6m!=WYOm|7OG<20JWim1z9$@dA1DT&Yy;_U z0q;n66*XAJ@-sIukXHhe^P2UB56(qk;g=L!Mab*lQ$i-T^?1;8j+ncUzTxJOnHPZ=Sds(*yH&I-_$mBm*>9jvnn~-< zfX3HuV;a=rwuJ2C%Jk)=+c0;)sNz;WTJ3b&?2A?4#Jz?wWyUB~;@_pwQB7G(>j*68 zQ@nA<0bq6VdC2v3U>d{v<=YyoRz|%Tms(qNA(U<>T$>(IM%zWDOsC6T427JP~mMY2aC>Z!3{IjCN8k*f27{t;HfX6L@b{a1?lGAjcV zqR~0*0IRaHrjInNVb{bD;jJ+#zLG>X$U+-y78%M9SUC2J6+u(j<#O( z5HiGFl)T|iEvS;tjzRaVq7oAgt3G}#{lP)+PhsOLLM@P`Hb2eu2v!xo2;=%-g&O(__Bxef@29Vxz05ry5`wkyO zUMtvd!3fw|p--)6oRWGO=h5^hngTjt@53(p?L9yB;9x=VA?6#6WKnnFFRDI2)HH1% zh0yHL`DpWbI!445?#d46fCeJb%M;Xv*05BI`NY1{@2Axl+9lYl-}H17^%ssPVtO@- zZ%0(k;SciPU*Cv@KWAQM3b#{Vul*1ll3E)bHM}5}%etOJbN^eW^(9R`P>A5%I?&TVDDo=XNptDJRZv(#Lj}yQyxM0S zT?uk|G}ge@K$Q7TojF{x1_F0K$)dy!Rp164IEV=L)T~0k!0$}aWkiKAo{ji^uCn6W zy0SfCDlG8<;^7YAw`3fW3*ZlVEvy^b9>rb`sd|4WiuoNbh_tm={66oDQ;9afmRw1> zz%g6l7x999gDaf8xspQwz<+d0s{9^|5xNVWM}*w;OUMBPo2lG;q0QP+0_;-$rod#| zC=3(I=9IZw1Ag;*vDgBvFhsn#&Xx73OQT-~+%JcegCf*RP{!1#K;m}99)po;8?cRZ zGepRYb$~(ZYCo4iUWi|1q=XAVl705q60Lwh`S|=Ishb;z-7UI&XwJS{_XK!isHEqL zM^=>s@50w4qPZ*viN_&Mp9EU^ae(3(}!yRbRZlFWRX2Rf9eU6M}FN0kb zc9QJkrA^snml%y`f>f{{w^w@my|&-&w0whw9RW1$jO%{Ccr&*7Bl6tk2ad>#+6ZLf z+VJ=8##Tx-9Hg$Y09`j&^*=RSbfGzR$UsOxTXJ=G$gHBPSUnOnHg3>B#|e=404NP= zHvXLHN$C;j-O|1FNgGMoH$h%ya6(VfZ35mYk!^ZtY-R?WYu!ms%K%rqxlPlr>GkjN zE&H&_JdZtPE^;{r9fnFLv~MJ=1~=NXB#i>DF0COfK`!C)yfnA9j+mIzcoY>m7*iR$ z9c896{TlC9Wm4Q@kt@Ya1)_TI5@k`6sS3mBdvUDR>PwIL$&aeP;aLCpTECX5B#k8g z20z=@E~xgkxJzNsCKMWiJ8C0b48U|@xEGsOiVgIMjs6Y*;u9OipPCa}KpDN~|G*+5 z)h9Z~hafpsap#vR=H{6u0X#6G{9kzYUQ8*~JLa;)VUDV$(Z9!gkJUp7@_=Fg*VyW4 z9iF$c!YXz$JW>&y>|wb5LDqr{URa&lA^<>!NT zc6Lb0%Qc?_b7J$=7bYLaEJW|AAvopXGQu!?T=r-hFBV9uFG5rNNC#);7v}AWx`GdJ zs@ygH9{o1u{fXD*xo^A~51+Zo0-op~)kmROR1)onpLV7yZRH%+2T_r4@-b=FL%l!+ z3qS(E_u~Xh)u&GpxuRSrJJK=V6mPgq7;EWyGZUBXbwfkxda!A+(Xs|ecB(o>i?6H0 z@tRHi%q(=xpzt>=+y(0a*k}vJOt>??u^_v*|DdkyE)}h!S=aqS#ji2H%*DcBzQnsq zUWiR?VgzjOBJ}!v8?M`2Twy{5^**TBn}2v zTG)U&CVQVS!M&H3A|yH+MuOw8w0K+cJjji7MOJr1cL2C`_ zI$7Y&A9+-tojb2iMhledOC?=M%7Q5%37|%HKx;dCe!Ix~sE>`Xdn&)&?matR0wkmJ zKgkjr9?~jkCB}!P^r_@z-lT{5)Z(+`WOV-`qx(69 zg}=YC!eH!!#~m1)Ar7j2LbL08BGG@y5SsCo{d2a|yQ+cCB{j#&HfMZj~x%h^)8+KZzBsI3qZGZo=349{RI z{t0lsi4TLUOq&_q3|S^Zl=agYYdVNey7XXI5#zeWe3mabCPI0(*zTDblexu16TakR zyC^dqeDqfeqSh0t{vzou)}=xA z^5G5dLpu=i2@iU*GoJx&0RVfQp3=y08=Ke|tk`g$?8>8jj|&XRh`YVa%fo{&dWXDa z@#eS}+*VF{#fVO~yue{-xpK`X+~q(tde1CCVKV|DYseQml??P)m@FBwD-luse()?g z$s|-8+nNr|%GjaU*wXqG(A5nlTU}04X>`Y8Hm1~LKrM~MoRrD>6z@3z)j45hnCpl^ z!haN$x0GNeZ-tEP-9B*AL2i&S++IH){`ZgN5d7rnQ&(ep6S${=st;*29D(5d!L7wa z;Vm&+*m2KJYM0nD<2BGck_M*=^b(i%-Un5Ih3>0k>cf9ltW8_OLQPuOEcxY!Lyl5(5)j6DG&Wf529NJKX~dNBbdy^HJF1!#-l2ky)uM8womDK%%^SJP zhSYskN%}G(a%ljzSgiDw_prp))iU9d%gahww*F1#1k8L;B1FZuB$yJHf`Re@ji&)OdnCFx*0#o+`O0sB8Vz zF6dld0u|6RaChsxtwYIjKAHBI6BFaW(XAD$Hsn`UIXnizCznP0@FKp_-K(4drT6ga zdjjQXyK7LEf%T{vxEgC02k_{-MksT!D50~)JVg{umTZmAN132F09sc79+ z4q&zyvd@3KZB73UfOum3Q5yj72UL*~F2po5y-p>d>K^1-jq7!j5m>HL)SJSd1J?h2RFa zlVohm@PZCCQLjE5AC(t*I`W{`S>J*{Ph;j5_79i8EWK_mLiipK%g7n{8A-1yc>PH% z83}lU8ujGRX!0CJfL|2!V0ooiVXSe|}KYDI#Tx*%aiq$Sy>Zd%cAp)XT zFWJ$s;T`i%T&+0A=Crfs#{m%JS-TOo{^D%|&T>QN9o+z?R0}%y_WNMc<=WIL^D|Rn zyPnI_S()`IqOLv)cCtaaOB(+GxVoL*3qyYRnfr>^%lcj<3~R%-G`THVBSjjSG;N@}P<2DR;LS2@OR8D?kkvwvc@_|O!WX9s#VYks*!{gVz4 zp19LpT;;b|bdW9mJODTLW-i-K7n0jfyTDBB*KtgCcqfFk_^X2Zn9ko+I)6($lQ2QtSfMT-c6+82^RgA8dsNK>@Nw?J`<7F6OH$mmR1FXttA(}{Rko!MpnxD^Mz$E>k^h;9mMSuvHM}Fvy`C(Gr zHQ&+J#Fu5n)gll~Mu}ve*j}DWw%w7zz2m(jZ29;xMFz{yQh{P01rd2$>EPpmF!k z?FHzS1?hHx!4W72FwX#viu{`9rjp{0!h=3ViOm36*eojpJq*=KaZ5fa@dyVh3jZO8PQB15aB0j?D^K`0hp)n%AyRP$R+>pE0Hl;1rSv% z@&gh@f}bxfM{M{`ON(}yzHuG+KY!JyPpqONVkN)-p{DxtyKS5sjRAZY?{4XK7e;*a zG#Ez$=MSh(S zRi6y#%+uTT)i|XbnshdLFNe*P706iS>Qa|on8wl!N(6{Io84H@SdwUJYC60? zL%TOikp6AIJ&VQJg}uS+)Tqoy%YG+NS@-F=^Tm*ZsV|GZafff`-l9<^pDS^A9uJyv zgVnUxoLqITRk;;pW*;9*dau}FCfQ5b>Flh4p%k2)&%M{Tc`*$GcV)rr8~vFMo!V-v?UI+?~ z*PwWdX+oZ>BdYOk2>^BA+A}0>;zl<1U%X4)+qZIXJ6+@IsFpGyy$+#|DHMZ8I$m0i z!U#BJo8X-dv4MO!ZEyS3QY5tz`iBt3D|<5&YRX>=#SIN_Z~sir$RX2wQ>dSyC1V!( zeK7)3_j6{lGh!#Fx|jT=qDp!>qzS;F)Cz209x&(FJ8)rf}IEuJNJLh@t&L8aZPuo|jtMgN2WTr=s>_ib8_!Gn3uD_^O zj_*NP@rZb`>ACkj@~|vUAmyvO(mXTmQrRx++kmm=a{W%2_MqB}`B5?8=1-??br&fP zmLDn`V`mS~v6hI`jcHYtzhII|9OcgeRvE`&dtL8;i$-?+3!Toqx(_3OWjxnY$$W%C zZ2|=jjW5r#`Re}Nt&-x-AQ|BqJ4S4Oh`1U2{Kgr7=jJ~7&w81juFpQcyu8jouS#;L z^ugnOac2qV<=L*LG&q|(J>P|geM5&NAW%B+Q75<#`D*%KibNGoN9l*;2SGMkrBsm# zvJdp2H>8WCsDEOhzb9WBN}6J(j19I3-ddtar z%%$%=W#Pf{yK!`TQ3|DOlvGr1st`_K+62Fubn#(+UG4JU^RBk*((Igp18*0V+s)-Y z{bzpBYa^ma$ihg{&U&6fUMSB5*+LlhgW&0JG+@;%sRdoj&nnm7la(Xw(na>!86QHl zHa=BX#%7p<}168kyiV#ufBW=sd+whD1uJf?y1N5Havcp)RJWzm;qx}M9n(*L{ISl2UZ)vYM{(a+nbx&^`u+m#O=y1DMMc2-UlbN0$Wp%-C zBG3DHV<1G>hHB}+#&J;1>L2|Kt3zMr=t0yIN{{;J9jpkQ#g?gM}^hVYn7c4~xcIO*= zUhJLqEXGbQ)WFX6-s`QxAWqiX7kh%37mrYN*6i{*t^ko3*y@|jljZEY&-#~%!`YJX zo|DTYY<=AXOX4rA#a-6`_CtpFC}id2;131*!OtbVyNo&Mx^ST~mC&s<;H(8=`C8TP zz_sL1~M(0u^=F#nB(HAjEv*hcN{_b@x5{)g+;+M$0{Q#1ZR1f8qvJOEp$a&&puX z8mEjTE6`tYMVRlBDySEs%ga-40lzE&qr#|if*_{ZL69}-cP})y&kw9Amb@x~GLN*b zFx~$qdj3{0Th3=wG%b<*oif`PyI(2Nxu_zz{bqPf7E{LL&b}U5P;$Qpju25drEjL& zf_jf+iXZMx8Hrmpx&M4_T%QvW=KjW)7$T* z2ZGVF=K2LW{0wBt$nYkFoxi~UYda{sg=~(DRv?ZieEAc()?Wm=lsNi=5j4!d7>bkV z)UxF_T+EHMBla2bPuEYnbQo`SHs4%`m90BMrJ71|uB|psA#~1r-gmfC%43B`)fT6% zjI>Am1a%U{`{#%&Di-qLEIgp^DWDAz6KrP0f4S#sgc|$XP&{2g0%6iT>SKp^uIGq7 zUyqGe@05K~#Tasp=xVAbd)5HFo=1(2-U<8*GwRwZl4$96{`^p#N8EBza#~=Ep!Wl- zvq~6D;T!u(H0u;~5UpNOutLELsIrJ!YtxhXq%rbjvVU=8<`30hImtSfZA}qj>z)Y|yJN+kYF(`i92FDoceYqnKjHo^L;g%pNjq|3bhQLUf+`Hwt}ocnaD3 z*C2HpR(5e~L_&E)-plq;Gde|RbXQ36nODr@R842{r-T4F_!ao|PFIo|j(#aD05ZxS z@08~o3b5@lR=FYCzSs*5C4tibHVH+D&AGfWC~PUf^v-2%cd5k^=d)zne^)k1FmBXN zcV^}zS64eF3f>38uv#cJyQHu?six(L!Td#=d(ZP9vOng{@ z{(5pVRgX4r`;~1+u&jQbk`rwbT~`1Y6in*-zlu7B6_VZA(yT=vZIWufp*|{@24nWn zmPSXUA8siY5Y|MTQM<`Y~;h2pcr2?RKzEpH)m1-18%gc<6tgeOwG|@~Z1S2=55{KD_VyE*gfNn+NPka zj@p1B$du!nO=fOK2{S={&;ywnNsP0d!@u)==(^mkr1u&JLQ+bd0Dtqfbx$7u%BQ$g zVESQYoCy_0HWzL8)Zt9aUG`{BgHAODC0_aGhbb4%NHSAR7vjeL9AYC#2W!3xl z;cBE{*I@cB?wGP-(-p;LF9Hj~vNK(ZwHj(rEOR+dN*ZOHoJZQ)^prR33UuH93(5ql z3Pv$6*T!Nbo)4A`lE$jJ)+BFa8BB!*5lf@=Sw#iu=D6`pww4ny0BCg?RPc?u)lE&6p?ipOU?bce%w5~H(3w;v<@EfheThZ~Y% zy$8xxzXkU0CS}9n`-ouL_q!{S07Da?&V#ir$e7a3VOgS4cX8C_7rih4fAWTJBZ-po z4e#MYGhPu9fjxfS8w^MJEE!I9fk&Zh!8cBSM8qMazimf+0}blQsXv<7N`8bF;}33o zCwJM_u5{7K%Yty#ed8{nd1C)bwm|N5&n2G&ZuQ;JPaY+?SOkm$ynO(z)BsOF@J@M_+UclrJ0<+qo%QPvS}94ggAzfZ z^!?zyLFV2-xPdsayWxyTO)!gJ?0w zJxJ(Hy%MD5y-H8d>;@Cs>BPWAVEfW>lsCH9_2jE@aM!^xT1$TM^6MkK=H*QW>?u16Dp ze5dSrAF{r@#wz9{Pt~za%Kv!HT*`KPJu4A%5|EsN)bn8cE;MYrVaQV_YeUqM6LCRm zZ)^P|(8Wcj-!%~8B5LBpNfCXv6peRKbJelbDuk9lXFbF#qJs{X0}#=zOY;JxUlP*J zMR`5Hy{3pGRt`aNu?-tUIkSbA;Zb$m$;ko{78tT6kTo_nPbiWR(?P|bD!4DtIP|qQ zZ#N@gGMXzz7d=!Szi=dC$mejc?w_ z|F#r@kmk7=(+hF9dF`W?uQzW$seg0K5RLIIby%tY@LqIfL;}W_d?5Uav`V5NMLk0V zT@3I|FdP)UW;IRvBrseX_jWmHth%KKWIHQm=aQ8%x}d`ql$uhMS1&IlG^TUZ7fgr| zL)M~j#SgHp5|;Ykz7>n46-5TU+**2UYU&GM4hFBx_@vLIf^ffo2P{itn-{!}3wrs~ z0e=%})b`(f!Znr%9zM{}cd?Hr<9R@?OtI4rVOOwYH}EM5Cx1lGy6|_`ZYZm$r!Y*} zEy#=UV}?;_&`a}cTqFOWQsa%u#F}V+3$biVG_<^u8ld(j^5#)piy9N6>8Z#_lAgh( z;6DEgUAg_W5&ap@9o9biOkQLlF056re+httuaF&}=?;E`o)1~K`Fld5%!~7ZC4+G=Ksf3JlO$QB8YN#5h zWmNWwG+05(VcZKJ{je^#3#lSv7!)NU^S$U>ozH9>K z$a4vA`pkO!a(n$sSvB~g{SFxMd??Bb|X){?2~7 zLc+P~-LTW=%kX~WnV5TxCgP~b=j8X{7-ysVsc5!b6f5bEH*h(gH=rsi6y>LA0HY6W z7aLL4dOy{Fp$NG13!r6e*d)w2`KE*VQc&oNS_lmB4kWk*fQ3F#=r*U)`zb>-(p z2L`lj69+{+UudQ&3|%{tm{SC|Zt|oO`7gkMF}Vw16?)W1*Li)(#YTHmZaRRGE&NL^ z@0WGTpEP%g9^+ZfQm0aN^-TWW+8e#a#ib))@FiVIoh2=)q?@Gb4W&kCW@r<=sMv^z zIIEeHmB(|(tBpzljYmi4$$`%dZr+*`6~SW_FFaxP!-oNtDrMzN-Wuh-@T%C(#SoQMWrgY4@+1nT@T7k508^ zZ2*eQr=5hLe1YCx-;a(Tz)fXVUc+#!bYt!KQDqmqdmNOWsnzKqbL*0?yql(>xIZEZ zm!^3wfha05vigodrl|*2HH|kI#UHWXb&#Q9Ujq!v-@fQs8;nUy|MYb10uSj3|8?=K z(`w~>#`8@hepyp0^Kxx_xknwgxBdCOBI#1?5V*3N-wx~Kv}LRrwa$Ngx9`+BE^2h& zCAsus_^;c=2ElVsT33zE9M=<4f z7g6f>2Zlmcl90GRdIueZYmvF$87*}Sy+p9LiYB7m;98NaJ}tSRnQcH3B04O_t18PB zO|6*Y&+4ymD94JnW-2C6n(E>Z0p_@CD5sfy zxHwnt&~D`LSlQL&j%(6h=k4Kxv3KF{7vECviz3g>LX}p9T0L&fBv$blj+NaB0b%r1 zSw7Eg=P3~9htmFQ-G#QH@n;J<@FjqP0+>gZMqwGiZ-c;Yc>O4pc7cl?%^A~|5BUQ4 z3FD0=Y$8a>PP(?-jzFP)aLlbQ^#xHmXKPKwb08_Du?f5`zF(`o0naLV_wGig&DUhh zQ^pF%OpA5RA+>1#!TBb3Q&B|JYlY~&skCwE!Czw?mC%J`$b#}mJ6SHCa5%xSxr>Ye z4iQzm`y_DR%E>l=lu9X7aFhR#-zi)^@znm6=}&~}&5fA~+?vPK&a1{}5^_7^u}LKe zQ=0Qz$QNlt+b@kQtzdRCu z+_3I%TnrZD03d{ldp~^o`u9%~3@;;IxK9!<0>8r<(q3^9(ZbLz$T=i9mJ~tq33BITehG%Fm?8EEKnUcl!6n zUuzdPvkvQx@G2@Mz^~NmJQrAJaU;R*JZpn5x4xW<@*t2lI*KOOwLIkr+v&HV8X2SO zp;a6hGFNdG@Zyjnz0NpoYLw*f*kO&72%GY2n0qp;kr~RVaHB-vK!{{eB2&Tlc_Q^| zj&efVPXC!i=Y_*9at4&$H{(&jVF=K7Si&24eK~`^Q>g4!7`rHp|1iEBlGy+(e3;p@-jO3uV``VI4ANuR%n~|gP(ZWfi-7S zC{lQBJg;QZihRKgNhV7X=GqT_pkaBQBLmNd{e&*wv)RXZccrR3A|#{=*r-GUY;9C83=en-8FN(iQH_X)diW>II9A& z8E2<+hPKAz-N~~zf1Rlny*Cm z4#$bM^g~3xF3keM{uNKZJiD_Uqx74SS%4OA-_~+vNR3*-I%R)HcdpJ`0=^v(kjL*hMYgKo`*nNUe56xVlv)kXv^6unZVzY0qRN!@u z#>)Jh_1PRc;I~E?=w-k=<;k{~4@%Zua(C2t9=U%cg7yRTcCW9Uhg^WaplwS%0Z%~U z0drAiSjO9Eg;aV7De>V-5hK8qVhcCEjUgLR5xF;qR^#Hm%VSX~53UZaLp?IFYB#rzr;j%*An z6mrFlkIw~)q7(P&sTCg6`2b&#kCKivlT3eBhgX{EgWgK6Tc~B@jvo5Ql5V&Zf{*3R z6bDb}yQ=%!zTQ~zQB+^HBCYsQ1jnT$*d5JQV+MSO>0Gel0okhq{pJ^)ijj$%+cQG^ z{8A((C)DpR2B~|MfPP+eFrKNaA{qea>ucogii>qx)*8&Q#iUZ8>h0ONU!@xA~w7SWlDYE%Ym@?u^`}2bS2e> zcXqxOf0$ss5fJ?9@TD1Lji8>71!Ew!ei>AmRp4{^$SfH>8%}>0l$z$sIX-BJE1BB8 zRfjeR{EK|)UJ`iky8DX~D+?6M^YI1vc71vGWWS&H zPP~j~EUEf~#w#z*oBP#cM%3^p!AkeQvv@XQ91^WSNVgr(eQR_yZN+J9uS{r9H@vas zg%ub`ShE5+CN23~dFIB2%VdDZLcM;8%qh;DkT`(pKmV65X*3PxjVll)TpD$^xp8A< zKWM-V>BvV9uS^UCag)vhUd*CM73GP~G=jV-q&Txj6hW>grDkQI(wBUU_nj9Ie-P?qSHV7SjRNscsPj(L zrpej=@b64mDzQMv=);FchF6Nte}AavjoHk!tL?bHjM98VQ+m+M6a;9Hz!H;H0lgvK zs(}{Y0Sa}Wo({y8`30UBPdkS@CAb}Wgh-vPDmp_8*0^F-Z?ChFTvegH-c3Duc^mDm zfw-KxTZIG3$&6C6Y|+vB=FxNXel}lO!}lE?YSOv7Q&hByY&Wvmw*PIsTRFir$c3_5 zKRCC0Yqan&MQHvB*?+AD+@;g@Ky2~K?-F#PYTO@?<|!9$oIKs$ zPSjWHUv`-dtHP!K)Jf;wx~(s$4To+?9I^ZwIF~}gZV*pjb)y*Ud}vS_6bi0${^_1A zwV`O>*)3~CjT!GrT10LqvP4qtwOi3v% zaJF2^2IW09D_&wch&$m6%Q8Iele&^z$k0VlTx zp?ej?Nc6v}mGMZsp|Q30AIUEXR+`DgtN_%xQ(1Fr+Add!tm8VG%UR|0MEZne)*H1;5lBoi zzL#V>sJ;U^n4c@Yatikr+h<6Ox~WeGk)Wzq(c(?`Z9L|4qs_^A%K5>zw??jP!B?`D#-=9qdk;lS zt`+VZ7?nauCg3+__>!eT^_19qLJ6$vS@Mob4z3BEL+XM?2-;1=Wp%}ndSos)t{`B! z+{8)-a7PBvvACSXxvo>f6iv^6`h%+27N*>l>fbK_FO>(n$Gn?)wNu~a$Mx(nT^uToc-9eBGLNi%K*PVA+| z>}D7LEPwM=j?7$sp`@aT$vs!Oq`rsrBdvU6YSDKJ>gU%68dSKxClrz2_kXunz)PfY z^c%LsZl$TqyQE)w_%O`XA6KIwyyNWeHsOAG_esdK3q$U?MYi>f|?5vWLL3%vs7JLAIP~l z|E?Cc{Znc8+nKzAheN1qfN-Y)p)n!wku~5G&!F%B1lQ$&CB@H1MV)UUJc2m9rQXre zouwa%(UzMZ#B68^?~X>L_=&{j)sB8{k}SxT-OBpT-}9{v z=G2gvlbPnG=Skc3A3w7A@6Q1rhzup?BrrvljsKwv1{lXSqoEzlMf0k08Bo$yn3NbD zw+bLh^>XmPZn!F0{MySXcqm&J#dB%^OFY2_U^m7`Oa!Kzm}Zzj&RxVx%G(`9L+d+fJt(m_9by_voXOL!I^j@}miuC< zk)p6jDQIXoL(C;2nRK@A={Rw2b{CQ4-Akl>uDDzC`4jH^PttPGPC2sJ>ob$chng2R z#FAm&uL9GT_xra5)(tP7Mk>cPNOu5yzDmCKo~5em_?U1;agsd2jI;!sB=UD~Ar|Vv zhMo(Qf=Q)$GlJ=!o)m}TCf6MW55`NRk6k++z2750zdM-(0VJs32;WoqQ$NQ}m%}l~ z{Oy?z->dF5)|)p}`~c5So02o~?zMu`1@);Z(QGUA+XrN6YiX?ua6avS;zJGo+&i5JyjSU$(> z1MSc+y;Xx8sLf0{%D9C=*X8+1eHW^RFAF6fKBV0=$Z?l6k5Bt6-;fe_u+dtqnWEu-lV}jVlmkT9x5~*MMbSgamW}kKD-LJb(_X(%w+U_G zkDBUoBqOWI6gmdV4e_AlYuQsS6t4*`r|-V}Fw?h2#{kvX3P59XtoclI8%r8Zks;vg zMhnKVbdo6k{{8`L1S^q`_j3K1j|;q#^n18!uKPl^5!{ie2QcZZ(2Ka zxRicCrutO@#aDU#9lG{tdF$j8^x=G4`n~#ly_Kb~(RFV@xB=nPOm6~mNQ$HXSgc{X zy9m2jDE!Wv{7lmErqa!h9cvjy7mVZ%YTL_kxSPFnyTOCk6roYn-cgzy$uQFEJ#^g^ zY|T%c)qBv;T?7|nMNGrPp|hBa&^)C2viT~9E${5hgXWH<&e%F+U^Y%T5~O3)5E#YR z`EtG9ig3LX_1z7zH}e{gNbRN_*AWYMvQ$F5Non1KRS(x}G&~H}SaWu7+|X-0WScwF^7B?1~w}+c9LmjEs z5Fe-ReX5|&C%1szKebs-w=2sCQ#i9J5Y1SLTTx7rtR7@ai&`6Uk5X+w z#MGXdJSSW*e&&oBPNZs?Qolgo!s0YE>9Od63%MEmdbx_<@J9fxWR300kB~HC2x1@zU7!7nxUjDQS)2{XM()IpP zT#Y5q;0@pAC2sFePceKmISBimzqqIc@gvz)Th_1v#yyfRERh^@{Pc2W`Z>l8Ug|*# z!)FE*WCr(o>9)qIaHta2>4dq%GQv$P_~dWQf0r@tn;Bti3bJIcvxB2>AaU(67fozo zA|jAoeY&4FNxpVPR+oZ+UWTpi0bTeGI-~xZv1dIs7eC$&Scf_@6Xx_%paPq)o}QDg z4`@x%c#wV2zPKZ@UghY^rjpKA99jE?npj&IV;~}A>iAsu2|6r`o=m8mSvH;lX}-%{ z6>ORxtH&FqLq9KN`AJzlTbHL&BMq#%Z-7f5z=(N`vktDti`W076&93;BXH`_A*F zmFM0<+YH~c^}$><=mqX$!bSW$_ARZ46aBf~nyx~hce0Y+O!I0gxCvZ44pmK8D}2NE z2E$EBuo+<`$@ub8B*!B9{d-lCr31uZ)IEQc$Ta_%dkhzi-ZY!T8#Ye$eM^i*{m8>n z0&nehC2!`#4~cpY(?W^UjyET;oP9#6kd&cMpF>tY)_-$g=1qdu&=oGWWsr zHNvq(gy3$jbE3dDg0*k=#ge-0W?bF+KErRDVr0TMOe1=d6AHCCAKiLs+uGngj{9ir zy@H}D?(tkTe%ucwN?%TbviMzD#Q8ayR;I*_SjxDd$VbTbkN9O&79B3!IW5|bt5sMlRfZ|VKLjuAp_nnZ!Ibw9uXtY zPgQzDnt-DY;l)Gd%k)t(Eu$E>pMQW(SUC2H2m2#p5@hUvP_lMf>ml}zLRs{*F}b@Y zJrWnBoKGrtv&P5AvDH_RAjFtb1n!J!O!(o}V3K*d>@g!+VlX3F%6dl%E9O1Lvm={( zVGN;)$IpQMo*b!t;jRv>kCsLzLZyiJ&O<)x2F}n@_0UR$9&vqdUQzS$(Ftsw)R`KoXIasJLkhi95xxi@@aSl93$?sqmy=T zAMpg;GZjG&L(myP7Uv;IuAaY5`vv!^@)O&s4X9;Q{dA~~%LXNBe(J4bsZyksxE~NT zPojHS@FsBP8zHfFP5Rt7WHguK^!>sYs{SAGD0^3p%waZ*ZGFUbQk6b1Chg-r>L$X=)~7AeuFMKNgVJ)` zmYAx@1SZNcEwv$d&cgPRg$+E&B!L}YJ$9z595~un5NMZB9r4@KqEY=`fRkj!{>$9z zu9N4e7Cu<}b6X>BA8{ ziV$QN0WmOt4TF%u)AO6>K@SvhypmmGJrp;fdeDNTo)Iyh$=)O5OrV&5#P0s^GLJ}k zFQ~=Qk>SyB53P zHCHeAD~i*$^XXC>6y;<-N*1Jew0^h;FY+v|XRH-uaMIJ$ZuV1l%I)J6mmRl#|Lay6 z4czyF$(}fxD7byz)JN|yE=`z8dE)HBMSMz{x@$+%D;y;=|5m%f)zPh2x$f4}s)&KQ z4>XGImgcvfFSgawG`f!G#|pEVK7CC*Woc4*gieziiUTvEd=2ynrIGMZ(KJ0rw)_S> zY=xK-4K4MvhtnCn8wJU~j+v)_*yMRMpuuKOxf5H-omuzX^JLQalZ|3MkvHH0q-SVR z(o1Gi(P&+FFBgF{Y4*wMgnkbxtZ7{2*-)+@=yzI>P)iN@`aggh{o!QSz=%IQ&hKT) z!NCmMcX4aso4r0J@qq1iJc=*LzJqW}8@a3oT3oq1{@z3#s+)FhR_`{aH-PeU|A$!YsuD_He-I9TCr~5>rjen{}q2fl0M(zg&S3=<3fWWAAi#2A}Jty zB-?UB&!f43W?JCXK%xhQD{OVUHz|ed@$^D(y+tnK(gAt~z=?J;?w0hpP$!eYDF~?@ z8jr-Ihk97{W$fcBm?1ZwqtA;nqzSiYM#rh`t!b8_T->l>o>jRn+&K8Xhs$UMvM3B8 zD?v10)_p(d#`S0pqPpJC&rV zjy^9C_wGCrCYd)svH12twWCV8sF)2%T_2_YxS{6bc#S4s*yq(ix8QF5eWC@VCm(1P z6`aY4J9@;ihrhnA%<(oVQL{rcx3H+69!5er!}G1KmPzHN;hHO;Jtx}ao>sxtVj(@| z@-2O5moQe;%z{dae_EFdXOK@E%0@jst)e>=CLy1#iRYhd8lx501y(mBMP(wq4{3RB zd1?dC_i|A_PC^Vy)c4aOnU&*qhZaBe$g1kos07>06+!W>n z#B~TVo*PqnYxnLKna-q#I>IX1DBUgZqL6Dhg+;hiZ7Ll^xbVydSVG>r7saH|u4QY} zXTm34+U(g|2WijXqp3ydwMd_HKi7{fc@qJ<5r2qKC1Xl3gG@p4DC-;3Q80q&hg|5m zp{ZG7FP_(PnzLO?Cp8e!aeEw1+Y^K*W&SyL_B%__#YhG;awZq=L!!sqxw?RIM|RBBM)%y z=D;zuEtt>gtjC|JdHQ`_Q(sI>2#$|cliGNey(}Z_dDeub`~j-ULu~HV?5+*r7fWtF zl4i;+A4@CyhE6pDFY3dr~_|Tqo$= zXg0pFbDW8P>PJqGpyD-^YYI4kTvoqEtA_Un+m7Vv@ROG+B2LjEAAU=6V)4?xc&5t+ zgu*B6M^x%gQV|&hNkUjy3a7@H`wL1_(sUjoz$^|tXBU*XaxV1FVKiWTY$s8 zrU(tCz4SWT-OXq@pM9S;wB@NzI-@NyL$iWGyOw;*qy!F1_l%An$?J{r;@_D#f%mTmfewBE8N)*NX?M_c>AWPc>UDq_-pSAeEo04*eR zR`B&&oov9{^v_wu#l`W{=ysRVd6cu|qzf}f+IM`Li+@JI? zSRe@ZM9d%TLpvk9n`@BWEbD>IH80P_cD`*~S`;M90cYdM(Yn6spcQPVW!6d^L|=&L zHXMT?#ocr7vum+eWq5cA>_qj%>w$)?jUZfL)KtaDVrgM*G2A)ivUdGzi4G+>H|uC` zuasNQa_e&nn+~(~A05w-EAJ~Hvr_DcI3Mz8YR1Y~>f>|KKkxU!Vvh`I)_)r|L8oex zVWfya9H1Q-wF09^Wx(JctrRAL$pzuXddBTwng1cp(=ctwy!&j!7wZ7ndGRhE`?D`h zjga*7bBV}#Sy*5=G>J_Tu_lpbVdeQ@iQCf&fvuuFz4+D#&3-{_%b(EA+&DAINlCseQb`^|N^yuet*8B`MF2x71Ml`-G5l z7UOF3@;C#Q%M|XBE6~WjCXS@}u$b-nUEwKrOWOtH!Njg`>x+df)#P`Th`YcUsP<`G zu(lI~8|q_06gmZ@*GZ7K$Uh`bChH{N?U^HC*$q-FHu3W$c{Zc;Mn}4YbsM_9_GLNx zM{_?MVf``q6BChXdgN-+REln*kGTul$P*RLzPG1o@7h01&+^?rPsyTV9hF`{5(&|< zf5=3E_nboXDX_I)yb~hBK*V>X$O>`G+9?S*7olER$eSNu2QG**ze3s>p6cNta#r}% z+at9Am^(To#+?rNzGJfD3EOfEpR#*;;Bs7C@8`zMOn^y{8nY`F6fiBPH2J1S?x zK!9BeNx^h?!}7Peq%lQ^aR&UuP6SO?7!vuW;Z{OO{X^ zp<9#5ujr2TYL%+QR&LG2Rw>Pk*mUTPPcf<55NlJnwZ7rW8a4b3=_4X0#>A3~P`AoS zD{w&wi&gQL>~wb(y!o2DUu#u6l^maZvfK?v?40cExYm@FUAuAjQ3v$JyxOOIHFShm z1LVVk##4$~RV`7;!)?RtA)iH;qTM-W>BuvJfWkcA$wQNdAHU~=-?>kR{mCaRJcsCFVFM(v1#w8`VA9!N2SNJd1GFKik{14a1{7Yj)v%f{0&0<6v7)F8oet=yWrMP_gI0!T5TFwM z{OVdz9tH;Ey{zs;4_`F7HeAbhzUl9$MeCRogVe^v*E{RW7X^0Og;E<|;$jDdw&-+}&(Ur<-reV-dQwtDZxNvUZIGq$qG z$~1~6JnkAhgOuXZWtv-B`X<_cHKCEEW54asGo+)L&d!4rQ&nWE;@YKw>s?85u!ES3 zo-v;5LFDA+iQ~lBBcf6~IL8bkk?x!*wLtn9S%F!hgJ{57=$f87SijQ7a<=J%frMfe zHj>o+J08L?TDZY(?I9Kgx^u;fAl`X>Tk@RsawxX|L1t=gKvzDw5!C#Pyh>fprmT~J z#+WHayOpHwC3>d>+Kx<5vgP9+)bd_)=|t__Ix;t+pU}Hf)S%rL|K?grJ%0N!{cRzt zn>TOf5TKo5#vunVs>+aX?O5cUXRY`Y)Wx!M@a!Ni-Oi6MhzBz-&BnNS5-+26J(T%S zr+bxC%{!!C>=8!F)3LB*?*;?A9Zjhu*0C;5kX&4HeT#=PORni_9-bQd&a9OOP0lpb z91f-H?7lF?q+ZAVFy`8;n%^~S(SI1s3t#j*YN>|Zj&eKpgf|);U*}v$FFm`SvhjeGfeSivij?11+sLxSWEB{sfPN4ru<~3pNzNDW9FHom!8J1_F=L z+oFQqaa?!CnKOgblJj`{%1w{xF=2;_PeP!gKK?tF8-d;f4)9gU!%^91sgDvknkjl2 zOg55LHulqX3(I-E0_YCJuI(q@G1wBQP*r&}ksf4KTxM*QAvSiB`)^m0+ zCUN1X)qbd|x_(RhA)$Y8j2Ff2Ixm5H{fT)6`p6~L#sv%eRttiAYrgP)jMFb)>^V!Vk)jNI&uO$r+E8Po_c*MZAOBedR4`=ZUbh zw$uvQh17YXo?OL-Fe#6)vd8PE*)JJP*4h1K=W32wbG8oBK33ij3b^-4DpR*mz|?^7 zXpLO_JRG*h-okKc69?n$(X5NBaOrwfLlNzb;`{yh_(;YS!x>vhT0@pZ&R1SqYZ&?N zoW_bE5!S4h^BnG1T*EG@JJvbsHkcAD5+9ePgLP~xf_lWYoCq}2?@k})Th-F5oYDJT zb|rWiuATHSO4Z;>O%AF^~h0ggo?3j;xT~P#99$Z0&kkurn-^@4pL zf#^rVM#wibNmtjlnOF@aeM$WNZ-yRp`&bV0^~%Ua>z120KzqqEGDBj#APo^6QyD+% zo8w`NvAn4PS#_T~qbZI8ih&cO-?Y#UuUnePT{3Os0{@H` z;p}MVeHy#?&ydY1caQc17M)&1&0#HTue?R6=*V;`%Fjnzzi!$8Qf7{5PLplbv>4a% z&N}XHRvT})!8p&F>8alX$2}MB&FMN1gq2hQY~b-lWfnA;{&R@ho*n^qxDG0C{`u<^ z=d-m`$&%CHS)~e22ga_fFxZW)p*FGk`!2-DlBZsTbJ;~F!p;f}EDWF2ZQ4-A&;4Im zM`51(iC-v`PxAmquKz3*MaA{A_5f=gm*%7Qj@WOoB79a^NvTQkD{*27(Ro+x2GT^a z)>)r?szsfWa4=MT!s&Lc1lb3*(=!{R4!5$REtFYu`r-ERo2Ki9HR!tKwMX5+>U6%@ zbNEE*S#D^mO{hL;n)3B!u*0^NICD1K3SaWW4Tcm}#sJ}G(kj+xX3hYGqohZ$j+B)q z)CWgTzjtax&A_>@(4c*oBM(mB>Pcg_adbdN?1=qA9UXVugMJ+ZtU45oZar89*-a$<{f7+;ZI6cH4s6_gM-yEwCMDz*?ey3kvtLQX%$bF&5#*M;%w za>v4w4d)m1y6PwC4TzTJn%o92RVC1@gzF6vJY7on{6*QM@L3bVhc6B zJ<@2Kn=#1(;34|4GGB;F!aOq<-PY_fE=^ZL!)8b7&gx>-l0?4XjH*JNT`vWhEG;M@ z$-=XlkQX1)-eHA*KL$4VY;%AQ9L#tw4xVmKUXmmw&QP_hoe)f+^&~LNx*U=U|PE z_TXh{#g6lNyQfg?TYBCGm-D7^n+HaG&^!~`{y=D=w#TK}V9(MiTFytpY-Kure%tR^ zT)O(s@b4kB8?>ynsW=I+sP2VjorJ!T%v0=meIx2*`WNaXrI3z*ra3Ja?yr6fsMnO; zyxwC=EcZXjd3DTpZPnV=G^&ITzge=maC^qmMo_Q0kRIc@95b-LIsIFiWW8h=7>_h^ zLy0V%r6qAPj_El@AYMLyHwlxRN~uh8RgmmW5zhB!|K4i|cfrZjIV?eVMts?rVJ zuvvR0PMXGIPw@<5WMp(-j?~e%)7FE)Cg|=hi}}dznN=S9gCmKr(J7(|nB`n=C^Z!d zea7{L%?}hXDDpCb@4K;1ESRg69Q*qw5Ie#sm24}Oh##n)-gE;iM~7<%guoT3G$p@D}Ub9thV~vM+2$eZI}r_NklX zw{;*aA!QVYnV(H@x&CNzXU?oH6c6}Fkaka6W)X!#)QnTWTNG{Q_-LSAns>NiOc`>W z&y;k*a3!*&{ zUIyMS=Xew;WO(^^PwGR$pX6+yeV%G%jFo+9v{E`#n8$+`jJ1D^8W4|$a zvtm5bI8U*}po!x3U^f~GS3>u_gVgkH1Xp+>+_9NEITJ`B*RyPl~V7Hz0N<54dqfMbU>3i~;8d{Ed4i^Nj-r$|C0WLDFYBdocmS6p1cGVnWb zCWIe8W)1kV{s^NaJVX-FvLmmxIbcUc!|20pYEY=d`%HQm4pq|)qMeBTthBpqQP>FV zY9R#d8%2K@OI)Y9m(95=S}>FfeY|m*Er4_HKBPw_F2fTzE4f-FQP>0F6+lZ*Ej0Lv zS#k->GWlrMb{=n6;)DhlqsMPqUN`L)V}L?cd|+yIm*clW-V|Ca+W7iBDccvf3W}}X z%DBJLMkl$S`JgD3r@M+m^4+}#W?WiJ|K3^5_O7ls-(K_zJoO zcIFx}7Tj`Y(H=dIKx5>uKV8F z@4vanaIYaCY|N$4Es9t&W*HloCwiF}`_Xv8rmeuD>E%O~#d3dG3$q6HQy5Qt8$KYo z8QoK9;SV28dK)v%m~7Cjr0K2AFfD~AZ{Acw0dn(%GM(1(;OETss=bYoCoTTpd?l*h z)LQ|oo`#IuLfs(G8?~2VBy)9f%StMH7(7V0Ql|!7_dPAB7)e&kpLZt|x}RDgTn!Xd z3u>iBk@pj`EJ*Kl;v%pbRJfl!lw(lo|Qa(BgxDPmG%Cop|5(@4M=8+gG>4%;~VPO@8)dO0!;9I{xeyeykvMq6GjJc@ZS zloHN`c*u?#t%anO=NW{>$jJCX{M+0YgBjrbw7_7sQk&)l7WczLTdQhZcSUy;S$eGA zhzr!oJ$dcOh2-N$8zZ?5{bPz;ZK?fJBWwW29ucrFcjb}vZ`9yokEG`tB%yV!62PqtZ~-&&RA=kkgRvnkDv-{p$=(+XTrNZZuxj<%MCy zlKy2+ZIlI+p3dRe5wu{?dVUvs_px$vYLaQpdC9HPyLyL}B$cb#%3Q$>!j9IbSCLub zvrK4a`O<&4m-RDF{Wyl1j2#s*4`vs2D)+km_VkutOc^sKehQuqmd)Tqemont*V?4q}Ci;{eEUR!UC ze>E82pM;8++MQyD5RHey?r%F-)u?7w(W1*l8urGilTtzw@(7QOO=xeQ(RF1%`xXIv z!I&D$_U1`lH588yT4y{U{G}JO<9wAZ&`)7J#7~j8iO1P96c^`HtA9|1lt$QHlEQah zZqtUUnV0UR9pTrxZq6@otvVEGimkiO&#z#gdFsS{{~nux8uLKioKa+VOcJ)$S=ZVj zS?D=A*j9W}^44V(?d%{mDc_a}Q9z0ol_jl(Ow<8sY--A^+pR|_gqB|3Z|~4E87g}9 zkcLWqL0mxU#(V$CYS!3R$2YEfy@QH4`tK1>Z%8saCwwAjIIXTGZDH=d=#p}ec8PK2 z4Im(4>>VMPl9Nma-U3nu$(^uv{1&mk5nxl& zo0%DOe0=Y(QDNa@WdX5{wZ0dFqAuyS4)RXz0siKArL7W90vW9G;=>Qg2a%~$X^4tt zmA0>sw2)prqt|lcjT8ZPPkz5w??Z6;bjs~SwgYabCtDT*^NW4r8;dE}M}Rct9D#(3 zkC*UyY94!5g#z;MaE@Kd7&i5a#hqMePZWFqU|W$@fY1DpbTiXWu}_ae;~j}idf98u z#td?LcKo*1&2;kK(0Tru$or_f*X*F}sMbpaEX}l`g48m8R4DGX?xo9V^33%6M^DGl zM!&d;ZI15s34hMb~uaB0uv2ux;66PEi&wTKgJz-qQ0G)_xBmy|zHUHQ@dHu^|LgN%37Vi#;}PhhzJkjUdm+Qe#$M^$|fAo$pvOaHdi%l76Xkq`)UL6?;L~Viy+R$@4jPOmwu-bAyjvh0802d7H-M zt5z-V##|*N&LH}WbQfKnomCDOnb%VczBu3D+B7@DTcvZq?W2J1Np)$I(Ec>AwRpkm zK04_}dr*g@^9`)Mo;cVj`NIWDKIWIMVJ||EWEKNad+%c|pj#g)Dj}^u>oxa$m*BK= zwr0?Vm3K~h4OtHP=?%q0NQ>IzFFFZR-_7uHa;xM6J;s8W%Ip^O$g7#I`7JUk{5Pj@ zYEh7hcTugZ4AzMPdufv!!$lqYKX)VZ$;mSlBMhcb4>*{Zm}tGEcKegutLbR3?M;xK z>GIkx)MoVyw7({P8ic~kSoC_Sg9VFZ)OQ{d^P}w9khaTrmAhj!jxl&gvST+RMpDrOPx_uEyO{W=vM~P5oU08OonI+disIr=o|a&V1>xkq=|X z^k*g)`i6`1U8YsJ7P4$6?bB)t2_S^lq)0!dk>fz(LnW}C#7GD|*@RPE!jH9ZcUn04 z#7BFAca8mE<8DXV$zoy#x`hwaKa+$rUprzZ2^K{yBV;a0H`}TiB+Xt?JtVAidfXO= zk&U|;o3y~w-m{j3c3P<&&SNqzcO#^thvq9xU|WMXx$9sRhwC{eUnmw?bn50fmX(#; zhO7*{Fp^iv_$<1}fbBr+$y!^rB8E`SJ?WIp@GiMk;A~ujM~^B_``S_*KbTFqJ!ek) zI=)Jg?ByW!#RYxeR`Er2bx);t2mhBO9Lc>2mm$;8!Fdc~gk|wQ$!OgLa2lo+E7I`Amr|3w$ZLyqp&54)6Bz@}ddvJnx^S ziOCGB*gr^egD}&h7#=k|z`hsZnZ2iB0(rnF6%VJhT{q69SY-Vv+@>&4= zcDvHaXEhHM>G|@2pfEM~=4ny2nwXTkHT9lx94tkziYNIbz!x_2J`eujS?V1aOceQb zW$M>`F*$&%6)dyI_oQQ-!pWq~o+8UF@9O~jt7#C3m%1}N#^{wZ6Wa?T0oHijJ?}g} z!<lTKeT|uvsolBriD`+~i|rF~%i8{j#W&9f zyWB{SF9cTx8{GEdAZpZxyhwd=u;!I*55s}ag080Y&vr=IcEtFF>vH2^FQZTNkoWm- z-PhK}aKYN!ftiUVoRuL>RD~(RACMaW!<*}qs!|^2%2M5GQlF^hOw$8)E+$v%N;Ayx z7#V+P)W}NgUzYmA;h_&hIh?7v7f0^Ge|W=3KNo5?)v7r(ZR=I_emBK5Q#3&4Vk8uKZuwbO$lkD2Tus~vs2oeSK>TuJT^vC)IZja_c+8iI4(^{`hQ zB;mZ?z=_AtIJC)X)QgHS_xEFMZ`*M$3P-~G^PFLY1+!Mhif4{Ik9 zDYD|GzHLW{;-c!!G&kV`L(1X-tRXiRtLXi^4hrde_wJn)!{G*bkG@iA<>@O;2|TpY z){rYtt=@SH+L~DB`5SLI3G)vBW$5?2$8Kj>t_oV0Buq>c{VrI8^mTl}g`Gro>#kzy zR)WlQ4{`UO1gN~D6Bid}7ZW@G(&I7L5P*%v5E%Flbz1lKUN~(Yv%7r;ML>07- z@mO4TD8Om!VFfxaJtdvm1>U8nl-DFG3#tpPh8%LL3(-y~R~})U+D~ThCGEAJFZjX9 zJ3HrQFMAAkfMXx=>*|nohe!Ahz7RW$B*RWimM3|4;~=@yo(XrP;*qZ1nU;+4aqnqxe`J^+u?jHI$m`*5#KkhAb9C+A{81m+rBQ z?w4Jn9@OYXCaC84viDAmC`s-B*F9BLci1HcZEc}p%RS7nz(MLp&8QRme19R5I@R{V zNLVt~>GkVWbG=>{yCVcMGrAfYB@4jrJtLl68zqy@I{1?2S&|SIBB;ml6Jt(i!1fu7 zq)@iEwGJqHedEwm5hzGW{@h;M9(PFImhM9XQh-f-0mye7{x+kdIl zl+L@TXkDpROc`0(CM*U=!)JZ#AxZ~0bPOD(_hj6U)i;&lS0?2?2X|tXd`*GBiP+SW zfmMwc-Kw}f8SB5d{_wbxdhft=;8Z09%g{I;%ju>U-(Jp|i>2lEz8?$(Uj zF;y#Nm!>EDon*f6Piso44)YRM3=WvQXix+!Rmn3arM2*mU6!j4f>>L~?!1f()b8BfDwUy?1Uj(K?OA3Y#*)inh>Id+O zqI|P@y1Kgje2J<{P1g7tQDdb0t4X^li?OjMQ1*50mc{|@q}*Ew@;Y>1Z&FZ0-;iR? zc~oU&%!{|v*U~W2a=49r@Pv0cC82gx)j)b|?yO6*9x)2=q6!NO7XnK>+;54QHfWP` z>tN#?>;nx?#*OFJ&7BGC(<7pv=7n^cm_RjWau+L!RTQ86o|1v2{rX^bW@hHSrIf+Q zu%*82s3R62bR~D*?JteX_b=7l%yA7s$jVDtekC9~}GgNrec(wOjhgmqh1x*S##a06hE;e?*`yC`K^25U_{ICEqg z4k0!|FKl(@S9(e}ge(q`A26lACo0NAyOu)-^yQ3yB#Bz=$1Hi!JM=wm*QDCa?ZFO+sdPg~oe=<{c6i~TQJE`nRNkLh|oyg#WtxcxoB zt3*wOQC&%>@d0T^+2-bE%l-TJb7Pjc4az-vyf!EO6cp+yd*y&_@!Qzj$Rx~(>XPXY zzC?8qyFDqQc&2Kp{>F;IC&EHPG;G}5iiwgIA4eYS?j<>w(n0GP=>WS?3w@p&EyaDa zND3Y28s{S_O3F$;tF_{xcGP0q*9|i>sl1;l+pTKDf+9}7q^(xkn$E$;_)S`%?m56A zK(IzXoNOt#k0T}XYUW&ZT8Uk_o`UXdd%<-_X-Fxdo-L$2dv|DzQ2pdMAH_x|qr{uw z;NXnlo!+AW9 zB~n;YAHR}hBMC3ND-Z8tOYv1vVytf+z{}x9W@9(x^92qOq`pbTsn*l(ia8Me>^&F# zi;-HkNA*W5oG3 zTZxuLR=o&9y(d8Tm2{T^NlDuHGjkVkND5QtM~1|~ zAh9R)%_9Q?DADAdb5ETpr+}%5<-ND{SQ6vNx3h(s--{2 zp;9No8I(iCu_KgwY;L~ZKRY|iL>aHcF|eF1YwmoTG5dpxOFNW?#9(Mi$@)_<@~wxO zQcg}fHj0XE@f_L(N$WT9O0}I*P{I;eW}@_uxJ(__1yd~R>qj3w_2TN1DkD+|S7`Q; zH*sNS62yD(U`6(|IeT*pOS^)g@w{>2*~s?{efv{BrpwM)b}uP-`S&-WgzjWHh1YQ?^up zwUdbwI{ui75{UuOO&TN|t6lCOTQ7DwKL*addi9E&ot^y$;G&BrUw<`mwuo|Zo|UX8 zz3KjaP;Kpb$fLAaqM~B5gF}ogHIM%Hk&(7CGBU;OBZr6Yx=#0k?uLhlW9|h7@wmL% zE#=!Y!gYVO^)RQ#nXDipKVyD=X?l8EX=`hX+``d2m3dT`H8}F%OM-q3(RBY7U{LMmvU-qYGgWV+!0zx>%QF# z?jLXVXfLz>F7JBEy@8w~-5&^1&%2^aeP0QoT4eb*4J7yoZ}$?zm4C5zLm*cW%|CJ69C@Osq^)Y4of21kba@;`mrdtzWPGXxx5 zOeF)4O-xMGZFt?H#b7PLSEIjE^Fj&sG|>`QYO6N-8xog7y$1DXryKj>J}oCjMMbl# ztE-HSgv3~~fd|LOp}~QH%J^aLJa>2R03jRl8sFF7zptbHY0-N)`VFgj*?}j(gBD=N zKZyTexqz_73iZ2M3rq9QloS*dcQG%S>0#sk{{9yE`S~~M^*;@1y-smRNsv(s-bKoy zoHYHq)&UvZo}p6Uq4BRL;c&!k;^O1u;}jQnRW&p;1RlFsmBz+uM`dT5qMjxTh>66# z#q~9kn$6Q8q!0<_Lz{%Vx;3CT!9?*v;Q?mkJM2t!lysHRs7k3P{xYIclsV?jbGkwoM^1Pr?Zd*VT$7JV~&f`*uAgg zxG3SmHSeStr69HQ;Vq<5@1!@xaEyx1?jIAp-RbzU@gi^N!ClRJ85+b47Jf0?0|$Cx zYpS;k?ni$)*tQujqeQQ_1Pz;4`fj~*knWbNV54x(I|3;v35Bt1sExaBC*~l9cgn#L z`{8p;1I0um$a;5LajHB}BB~(?my(C!77Kx24lgACocMa@fl4qEq$p@GL2bI@$A*vm zs`x35q5m!yAZ70eF4cLoT$b;Q`8=|ktNOO_g~3=X&1lbg=qu%gsu&SS8h+;xMKi?; z^%^4D?MrL3Ilphu3x3@Cv*&pH>benMwXBCFY37tpa;4n`=gF^!?MA2ek2+qn**E-_ zP^|jOz8rl%cPsV9d!Z&s>qwqFx_Gjeqq4HjTT&@u9^#C zJqUN@kKDsBDPx54LMbJ>Ve0c<8|4tn)zhu#EtTdMXaD(8vqUfTmZNM@BrZZ34Y*J;1_`ZzxodRJMizp-+{je%K^&+ z%LU5^?*rZsyf1kFD|@)|51?&c*}|1y__bcZ*Z+I{fq^T2u5=EzA&|qXb`Ek2>KydV zU^@ik9jFJey@I-72LS4e7XYYN5dgOVNC1EWkOm+NKn{Qc0L4E6_&NAJ_;=vngTDiR z50(R#2bK$#58em7A9!Ez{-7M7JfK{le4w15yubPdus(mZ1>mFq-(UYo?^pmcpl>Ar zKnwtEXCTL*Pi6$b3gAlLLcn`aN1(oBfl*0iN=iyopcmr}3@W84D=Sr)m>73Dys;nm z_w!ka2oK$jkBfn&rX*dYrzKy4uL*Inu!!)mU4K8{6-S3RFz8zX!_!%LB^= z%l~;F@P6QZuj~Po2b2qx50n#>7nB>6AFKyhA9Mi!YX<-c!1eFx{i>~lJ{D|W3;;lm zZvg zpj@DQpq!w*pxmJRS3co??clF^2lWs7L$E!7?c%DvgL(&ZEU*pH0RVk0Cjc-ugB(MV zk&*9EQ&U@u-M*b=Z)ZD}`zZ_Yqq7aMx-^T}T3h^yCB)YHU$DIn=pV%Ib^z#q&SXScmZQ_1Tb?mM#J11m*oH zHz+??53oLT0RCtPVEwP+0?5l1N5I?vG1pa{!1{r09?a*#dV{$<7#~6Zc-7uPp1|B& z7yuL#6H^Tsjg7E;Wij}*xDYWrHHuhYnL})>%>Na?>K}an4{QMR2Y>4amjB!j{AoP+ z#Rq`?;1~V>#SS(R`@5Tn)#Z6aRb?5%+RAbelpB;EtjEv#fc5&-4#0YY^#^$X`2cwV z`T3t@2fyn6s?CFWF_<5N`4Jc&!JG;7lVCdm^)3ZGaCs;yDw_5-(0{Z0dkbQHc^1Ij zU-5S~0NBH?cJMbg0K|l!vEX+b_=oY}FR|dayxyaT3g> zp#V>sz^sLg=*Wnjk-;B`wWS#Vv%ldlHt>rb{ChUA`j=SnUmXuX{a@JtXa}>?6JYMR zBOxJ?0oD(!=g<0r^#zW#4>UC9jkv8y%@=66?Z9vn-f1Hc9V z%#*~?(b1KKgaqTmL*H$V4E7*a7XiJ4_)Y(RwSl$Y{J<|Z0QiKBzq5mXE+_ci7yMIs z;UD`4|4uykgAE+)ZXxD?zDRV``%NJsp?I*qV7-6VALM}!0LaUgF97-a@8}EusCx{c z9-zO!%I~h)Jm>>O0LaqO(fPVKJ1+KsIsD@EAMnrFz~AQt{}1EA?=}GT6MpR<{QG^x ze=i<@KHx9d0$#TeqayP+eiGH zyx>oK!NJ}ZqM@z^@$jK$J;(#d$4_2Be&_&zeEk{^Kt4fUuQ&$Y{!3j~a{U_Xulzlj z+usBL#yc>-lVxRP34Hf9aBX6w53w>o`Md6~?BGvr;7{Vgznc?){e)lh!hfTGu>E)a zgJ1o?AIAxPi3k5+oZz3af#t&bX2=eliACM=IFOavZcmTGgtNy_i*T6^r z64#YHSGvE7^vEjmy`We3AFiTK<^-a)Bitd1Ha`3|3psk_wnH0 z$_f6YfAC8@_|vhX|3Dw{Z{h*q2S8uYSYL}!P>}xw@&oeplP{1rkUx+|uq}bS{;S!* zuet~G6;MWe0ALKe0RZgpf;pZfK0dy_z3uC{;r=ef^4tWVdk}xIfxp_pU*o{P=?i|h zf&X|s_W|Hz2Y&6$ZI#1g3cEBvVq{FCwEAKJh#{e!>j z8~kU*gTFpI_($W$|4cmC1jZ#2;$k+LnVI}S-hT22@(A(?@(S_`@(i}M|1WLe-_kue zuE7RC2!Jfm--*fpoP}7L9S3v|V&ZRY;5T3JM?dgS+Q6UW1pl4;h+r%LQC3=v04DIo zfc*XB5#$r(^*|>OTPe&2Y;Uzf_;Vmd3{9C2HIL05mHi8=^&3k`2>0W)doP`|Eu$XKhr%Jmq5F` z(!DSe5|V2J$BqA0`iT9#-3SGF`5cf>fM2lh^s5bA zOB1;Q_?myLa+_+5qTRL7qXrLEb_BK|TCBMg;u#Kjr#A?0pA#RmIl!;i@1a zh=?dQLQxczi`Rw?q)1V^0tzCC6h%dmVnadcqEtb8@6wxeLP;p0lR`r1B?(Cgy{I_< z`_5i7+2`b>2k*V#fA{lD_MA88>^(DU&6>5=teNpgd)g+{PpPA5ng7ZwRcCD5yuqP8 z>F?qJf3kqsF?@$fj}MR!zV^X?x{b)#0`kVGm}4sD_+iA29F%lO$B;0NIF@KQ=UnJ)m$ph7@Rhxk}He&(Xo9%9F!|TlhM(&f(=#!*h zkG=`or?gS1=U2h}{KQQg)_~^wyy>3`50E#G9o(mA7aWM(tMB|wKJev%|5O{1bSJHj z!F~(dvqNnOUavL;u7*v&THl$sY29kIaorm4gxG-~ciIrB$NpVAwyHzX`|#`&ng{mo z-k~a2t~8PDEbYy9XZw>5qzCCj`WRXvnAHKD~OV-o3s@>Y?-e?3H@sbMKyBsV_b=_3PV9Vg6Ii`E{n+jyaK& zkR6<3pr2s#ri}{o;=|eA((Y`3(t-3KU9N{+NcwZkr=CHblkcK`nm$VU^(s8{&_liF z&6x=qzR#v)`ll`nDDw|Q?Nd=YZjyRl_$Ls5f4(FNyh-sUa|a&z%}KdPB8n-b{Vt02Emdr9w!5@H>0ssyj7>m#k#5<&4DBgbIK~)#F93P^sb8SKYQ*rN36$G9 zWr7Dt|7AhZYRmR8wPWi>wPNW4HGj?wwc@u0YG+8WIv5qI#}R8M`tujTE;PPE$3}#m zn2~uzjK5i(L!!?x0WzO`bMLNgYWB>jYSQRYYTWSQYQ&&H>X(57vy?^*9;7CW7@@`v zAEuTroR7W{VRZnv-xx8=3F0TDub6ZQK+0)-khEtqa^F4XQ~!9D{%XwK9yy4y+tQzW zkSY)O$O7no;rpUg*U3lJ+*Nzg|Cg(o(7Pki zux-zNRio!gHEi}CwRpi?HG0I)>gT~fsTorzsGxPLv`*lq7v}JI;NM2{A7{weL&hW> zhze7yS1eUCCQeXcTehgk?c1}R_HNpwew{W|?cNch?EuE4r{*_4arBUS_0^g)Ne7_^ z=|cJ#U4V4U>NsHfzFY3o#}j~57OBD`k37;hIA|T>Estp%-{Ap2e2}UvaOs5@2NtY9 zph|a$Q{Rr=rGA}0S^e}wZ`HTgcWV5Y5o+zqrHb=LN1!WOIgn+a;h}8!43Fs;#KX`} zH$s=6IChlUzJ7hS=^nLXhYH`iRn3|@S#5=m$8m)*h&r|;l~_}b2U|A>Dbj)T5V{25 zPCB{$0*01=GkozkM(#5{)!2IUJ(Oq6!pIT7#GQ^uOf6F4spEPcH#x2|8Ru3vRg!-ot|%a+Vjdtf6Rjt)^mW^u4_^~QzmW~NH_O5fR7ovNPEf+)A#Ayr+!KKLR+s&)22-V>CZ6qH+PP&ndgCIoq#;> z{x8SWoo(V({qOgv-aiadpMCO?>d^i}Ee{q#C)gPhqz=M1pzUb&!oOiWVEplkBhiq} zThy%SQ`E|Z3)KD`pgsHkiUspAmiz{LKN9j3ap{ab&R|^0shH!cY15{Gq>IppbRxY- zH|p%9V`jzyci*SZM;{Y?`_waEWZc@8%^M+~5HrOjGQiy9p)b+)%c@Qg79OQu?R8QW zZj+$OcaBt_bseDEv}&o^wr;6p%u`YOLZR;+bJnDJtwl>G)-)+Wg>2od zB%bg^p%dvvx{-dFkpb?$Pg~OXc^*Rk8OE*l>(}S_nMB4zflnYYZ8u{t}n=Wi)Hf>*6nb7xK0ena|!8GD-6dc@@MAbI@}^+Wmv ze(2ZlxWpCH4^Mg-zYyt|Q5oRd_i0lGAW`S5h_wtO4;_fKv^PAU`9Q}^Ir@N+1+m8u zWPt~q@nFh|gX-RP@mdbt|Nb#mtL+f@QQlB*HEyW7bo^9}9W`97gTH7W)(Oyum@W@w z(MF7cFX13`{S9kZs!3xjElWmE>F*7xaWewJ$&CX64Oz_H0Gr_=wvc)-tia4P1o?xUF<4-R82 z>^9|yy6b(12a2{msa|?_tg2PJu6n(GUG>Sw?bPt01J%l93svaut* zjEam@4f~&fKA528z@2SQsmGhoQ?Jyht?JZ%O?}X|l^XbCUyPr#)voQEw9h!DUYM1* z655Cdq3cIt9r-3TW6DIeY~DN-nFIZva-aSp+K)#LM(Op6UTc#xu|C~*JcxrXNIH>T zNTgc;QbuI}>CbV(J?@*n-*D=bNl9D-r^o(uc);Iypl!rs(V6CfZM*lYXTFNn^rucp z9w_zBYE`jXeH_DFO}+Q-JE~95?ifd>!Y*5{=MnW>GW)+tetm|i+laImj~&{t!ghtg zA3ameft=0>+DC!*i)a4|nYBdwk50jtl)0FKk&Cel%S?foty+2&=7P?O$Lz8 zz85jt2-Fpg&L4oh9``F$cxgh+$)mDQ0_73(l#K9zpYb3oHsaEa(eMqOvOGXOxW9Rb zdbV0~#K%-oZ#Q{Ub^GQ^HGRr>wK-^w;<^IO1Mc~w42}n+J$2W}uw9CA>QkWaWmngy zu0Wk()uM%J@%%aPXYSViV;yIN`Qyy3JxJyOe>P$)WB};}+PU=rw=Lk$79{=Y@1ebD z?0xExPs7Jtchtxc3Fpql!zLx|O>*%7dBMspZ@nOW8!`Ry;3)jbKg>F;?iO8u^k*vC zGD1C3vxBNqxsqz!@OAZNmyYnsjZ_;0SAc#y6@TZY7iNG5Nc-r0&RoQV(IeE(jT^JA z>yh>wSFBKTf1LqcWjpMNLwetWM2!3F|0ZQE#MqFZ}G&kJYH*L)99@B82Y=(R$(W6mr17PC(jI*Wa{pt>&Yk zl`FEX>y!5M5zj_!z^-kZwGTG3vi5gj{&4V^*+jeF@A>$O0>i964Zlz>WvrV}aHS{pbW-ujR}i`xy%$!`<`Afm`>hM?29s zR5sldLj7%egX2uQOFm@AkCjW zL(K)fa>BP85fY+iPo1LH!*_6Kf4H7E%;MT2<8?{=y#JztQuFTZ0ixurH-vNZOOXIFG$-@qDfCaV{>q z{vG-WXy>h3wpi;ET&KXkulKIuI#hSUSdbiZ?q@u3tw+@B)2*(R`ug;w)A3wWxCk^g zdZ6(Mlg{ojfb^$KpzOa3sT9&v+|O#*&p*dsxpYBYyl^Htokw2M1)N^bv4L^QT1FVY zFt&k}11bFk*|ib7PJ(Z!tsfqMT)4YMsQT9{tyR@3l~j{A8>y~eBA#l(7#&N%SVN;1 zlJ?XOIhU{wu_x5`cEB%}UE1%*n9up4rP#A*AL2MpVm{K+9yXuD1AgL4+&Y0vH`IDz zsyYGNHl@$-!r9Ym(7*xlvMvHz9Fyv?-~<|v^=ODuh|7Lvz1jt z#Nu`S>=QL+NmvJY}aEwb%JAm<-U1s{0v0Of)=A6$fNU~=;V$0^d?o&5R?z2*`9 z=mn73+jd8(r@u`04f*oIovn_mhwBbh6<@Bb>eZ>G+JE$cjwM+68+^uyF{NHeoo~mM zAhlunvTW0ye6uYu5OExnpmPLkeJ>Vs;_1g3rZpZU^FT_S0PX0H2lV=MjL%7l@C8(u zMtTZeNng^L^d{Yn?5EF%`e6wq?rB=JPoLhASFc=3ra$>0OFTfC;P3$Xz~P0{dc2@5 zY52e&4`>?^zPq$+#Kjw;)q|gU`-Z&upmmHY(QvwY@#X5O)@wD@`)%G+I9URIm|tO! zVJ-)Ah{3B7W0p<7KKniAhNe#(ueJmQYP*y32j2Tv{k?mbah(4CyY7*sr_h!3C7nrc zGX`+oKmjEB2p&RuhI^Z?#r`B$E?)rsT{1xPfWrq~IswN7FInI#2OJ*o^W5Jy z=Hv-=`OvFHe(HWErH}(T zI3Bopz{mvJm%hGZ$3~>iMtvYc&--)kpD8?IpI_gQ>Hp?__q&nmpEWwD%9SdrMhzRN zFFJpwCX5-WW6w7Qu2OptgG*VS5k4T@sV^>HFduV}b5z8h?b^?z;|=W^1b3XFBM1EL zQIJA6^cQ#Twhz+q8z=8!7OO6tKdWljuDulWrX5J#&aDH`4x~NEIl|&d9Q&*E?AbH? z_p6sJ?F|oTTfkQqT<|j(tQJ=YIK zA`WE9x=>Z-v()uL!vjU$JE9(`-B;^{4eHm?F@__D4MG21tb*38)c)Fx*a7^`>cxvN z_c%?*1=6mJfvuNvp8_`zWGvP+EgLb}SCFh5re-5v1bwjITsY|}^d+51ZxbKtW%qNR z`{~oBT}qAq8Rmg(=mc&aaO6RPwjteoKpXL322!*)06|GJ>!38Va(qFpE2W4 z^cq!JkK~sJ{EP?w*B*$E!1@ZZY9GWv-%e7KCr!8{=NI_;0gUcf6#PKluRMH)ZFlY5 zp|t$Jlq~<b9&x6r_ycwYVZG;+Nm|!G zgmr54B~k9XlRqAyAJA7X%-DF477wKEGt}!w9ba%;(pTtAdQ%6a4nSRiXB;thT&vuV#!wK-&$UVqme^Z)O)ct`vD z-g^68^=Ql0srrU2{WVX-J3iyejo>q`0-tdc_>8+E#(R=l2Vc?FKyRPWKG=yI_h(O= zjCg&-|6}~o^NWlx)XAF%v@QT$(0fgyn+LK#9;CI08T~+qymdg*ne;X~;O)p$Cwvs? zB^(1g?$X5zF8ad;pdFAV4_sdx(a_)A&%?KQ7QT(~E8}!*P=&7#sTVqIRWG!hq{=tw zs-CabRJ~B`O?7XJ-5KNo#1a^van&l|p@!<~FFUKr6GrQ`N1N8Hw)!A_yUXU!)%qf1 z432Ss8}xn3el7nEA7nrlB+CI`9>}>p%yf*%nbV4NC4Gg?q&MkqbbrnbP&cgDxN+lU zfBtdR5B)RA10oA@+D5cI09g=wDp55XYUTks7Z9)RY>lxWsmObW)Lkv3GE9HU1pel+ zSHDCI-OGqIuBSS6Xs_2Iu3EN8ZCtfNuk#DSedpF-y)M-&?pWxbX&%Vnc#ze7uFql~ z=<1crs!^jx%Sd0LGwE&ofV>AFFX`Lk6Z)_d;7`XBm?&0aP(os(k3W}RHa|PzEOYv z@jLoI#{eg3KG0);;ekxbg6nD{o>r@NCaRL3WS{m{FK8XBea0`mTtn4DECJUZ4d~y; z@fpLfPkoPb#(wuR^c!oM!F5R1Uzm;YKzv1{y`Hy+4Ndy@?bADo^c6aj-lV(R@2}&1 zh7TVW^XH$W|3yoG^1*fCfgG|C$>W0-C#rkeFk~d;Cw(y z!K;lMH}*_2{d1THvTPruZ6neqIGvcFnh(W15NtZ?0k$vuv->iN!AEdUvk>)kl_siM z)yk@Alg8@XufI^!CXG{@u(#oUS%2p6fKPmx&v@{6>|sW~5dEfRO^_3}iI7ZtHOu}EDYM^ z2oHc)=rb-`vlI8IBzeeL8JG`uo`y zOl}@v|DQB*!WGh2=gQRnVNtp}o0ZXPqDm;{kb`d**R}v<;ZU z898&KD&BUVx}#N0&dCArK#}*3s>kd0Q`M^1P;WMVL(dzK2R0yX$Q^6`@6ZVnF=t9W z-z&LzfOMQXW%4zlzwrUO`@g0CjOo+?%(1b6V+O{Sf3=vcTE5ptb^5HmUVFA^-Ym6y+a`5b_9S3DnO`2zvLI*o zx#k>!KC2AWd!9-#cch;>0z{>ljbZU2YP$lsadEeDdvgUs59j_)}8;{oH_ zSoi(=!qoh^zp8=#e^9O7Yl*Y>KE~c5BUOWMgH_>{M@1jVIlYkU&tCj&tLi^^v|evS z-@x7-o4x68c_3|_z>Wu*wGlCAoQQZp>Us3XF|0dGDqJa7*2 z+oXRw<3H(7yP(>5t^fa_IR8hxQS*QgA9%}xzn2F%pT#0)u$9bB0 z)2699wO&(iz1bM&v3{=xja#gWwa$hv03EU%u8R3Csogi!eqV#nF z_WeYR`4M4zG3Pg3ZGg=8jn!cc<_E1?A=dL%_0fkPsF5Q_s@J;(t2^F3l4V_>X!AX) z{3}fnNAsHc_@j1e%&1?mM$n1zvZ56-cjecd-D#i!(h z6g)s)aOngW5Q{_lBc9iv|If_-1fc(G|9_V*@c)DUe~|uH4ej0ce~(VUwI*kv&mO@3 zGfNg>ZN;29DQItEwl*RD{>?@WRsDK(RhP~k)#&ll)N`Nhbaa6%`UUQNCqzA8^>tOZ zZf*5hhfmbR@uRW--Ueq)AM|h&x9`52*#3Cz3r}60{n?4@!Dk)o&-fkC+9W?T&kzr! zAqyD)L;82>)X|^+-_YNC{*Uy>9KcoT09Ft1;eo$PC%|~XIYjEQ$Fb*S;M!Gc{;U~x zKGx9OeWy%V1f8%pbb&V;H&Wkq|5gngGhaRUepojA0`aO?lNIWvs&!R^`t>wlO~X3T z?IFQ>4;Sv`;HJHAUa$4$njVvM{2tE@aM7RnEb>5V*z+BGIBnko9ylO0mrWdjC-MbcVa)_ z$ylR>Sp5vf=aNS{e$pPXT{YDEZCk5h!-lD*JvOL2Tf#@I=Lxdl7eH*mgKtbwmB0gU zVlT38-+ry;V9hZ10Y8B_A4jfdjR(ABfnEoZQU~yr4{7NHXR$Znr~6;%~jnxwNCZR- z`T?{rz)gSVuLlpfV$4W;+Ac>AA5^PWEK^IM@44xk(LBe2C9`L%2KDNxcbmThJ7|!a zx*$kB_%Zhq$vXYH=ftCR`lzZ^U(shi@a&GISU_WmWOY19ITlcMlK$}h zr569|H~zm@ub$zW{?Gvo{r&Pl2J8dsp57^ae-YzIY3s$DJf?y-u2(ZAPs;Mz9P$bG zo5J|_uoYaxRMSJ{C2s5d1@{m#b*(BV_D(Up>(GvlGATvJE&UWYa$2d;n?BHQe>;)msYM zn%F=0`kxzs8y%1_p=FSC47kw&sROuWfPXoVb3DKpLhfA=iFqBKfwXyba_p@?x@H6; z?RQ`wuX(d)>9f>$t{Uf$PQ;#8HTz_b{lR<#Qc)}$BrI$>wcs!>1<-Z|AD;G0q;iMuK!(!b?lA~;5`PodBMv*)cS#2 zC(MXm=xrljLX6=#(B%;3b(St!gniK$WP4pMX-^;V>={_2wQD=(i%)93i2GD9?T9+9 zp7}~-a1rbNF2nX;g+0vD zSpQ4vb`3h9wgWi^c#i{y57OrW;REOaW)6{eU!8z!45+W1 zIB`_1g^%Y~?3W8&6!FsEU4&T^@*6_cq(2 zp0840+Zr7{ZLh|U9fdR7)~h3jqBIZq%Kg+n`?n1o9>|DJkOUtv%KM(VS>(oi? zUCeny>XpfR6)?~F#3c3Y48-`f%`Oils0W&^Q7=_~4L-uUsx$1($rH!HZxsYPX1^l` zVEd&;cVFB;AEfUyWIajya~K0~hV(ShxB?P&JNMX6x|9BH9e{g;J&g1m_l?=NZ=a^W zo)6OfKXp0aS1-t*jYuEm>BM*y7P<#(`KGDu8`fvZ)-!bH`Yh`Fs}?O%tFe~z=-~tE zEd0mxBPP?{>{;RPz;WmTwfbhC{){^;{^nv;u}V#S{vXfsn}M}rJK-Zd1|Q)m`2FLv z%>!wV2dpFMzjx2B^!EP&sqG#xUVZ@X8--Z#c=mrS1Ae~(e~_WSxjViAGZy&efply{ z?k`3@jou%HIG#Cb?b4;$*7a%g2mXe0H5M;W2QgoC2KuCy`HU}25o4IVK7HqYtdr`J z13Unouw#AO?mPGIn1{K)u)VwWya8o?X7(^U3w`kGX^A*@ zA}4qtMwO}CU%m2*+ef%S`v`e{mf?Y%8V@)pM87FxEVpjil+pb^Nq=Jpa13Bvu!#q& z+P!=CP%{S5A54FM;ekK0q7%q?K-)Ai;S_AL9a`Vp1s{)_j#@F zJ>!bfi7hg^L0o*2s@p&N^rvrtapV7d?dxP8A@&|y@f&=E5qtGn@Hxo?j^0PT|D5{f zo35dtV^t)^b&;N=E9pynkMt(p&Bf1@3G@XPLZY7d7}AT6J@(k(xH!xQ>M_8H3-RKC zEa(JRFjsU2V}9hma5WqB;yxOb+gYVKf5+c1o-PbK9C(bz%xYXH)UOq9yzEUdo08I ze}l|kc0h{#|0hnEkdRUaxa2@4c;E_bf(!6T9>%=RZ}7!ZN2k7)UD~f)xDdXM12%Xr(Q6q+_AnZMOC>lP(lZX$?A`hH~-^BF&__!EVv0}vupqboD3u0qcuAK%ao$^MB^dnVn>1fVKq;?ake>4brj?sPiSn$2mS8%;|+?AdV+3 zxj>oE{hAlfLo8rqIOYwUK9D2(l|Xl(J`j5c!NF*iaZdHI4AahlYD(b{yuZuH+>)Lx3Y5n4;g^;r!UC(gSkgo021RuU#?oU z>Leorl5GJ)dvi~n2S|JFM;jKp7iV}*&yjt$83#5Gb3~zgcd5k0Q;;p3@65qH3dBa- zcO)rC<_L@&x&Q5rszS8}>UHi*-Km3`GHJZphCM}&;>@Yc@&Mz3Y~P0*s8Xf!B+^Uh z7JxhHX!<_sOFH|zh*J+tO$NL%W5$eRJ%BNyTJ{^-yYJq90`5O@9O#b(#z2O6A{CAH7CZCz{VDZ+|s@TUlBnRLlEP*(}O4VxX z7_zUw`drP#nddvV!AA&RbO`UmTf` z5byW{Xb)I>&`o=jH#~3|WxD{s*D>h4E7bz%``M*E<^B@*3O5C9P~5AGbKJBiQ{S(I z|4)k#(qDT({_QzC5ob{45D#E1c(}=IRj)xq)fTadKmO2H{kCKQ&Ia3~^+8MjGVE<;elNW6!bs52J?>|;@00etQj-A>;eY!4-yuT=A5Yc;(vkt>14j>}+z;Km zM=eAgR(9v~$UAG6E>VHlv-`wx*m<1i)U;2YOU~N*6CeA)kBu0AI%jo(JKMymO6_K= zFTd)lh7KO67B8Hu<48}^N9>jXet3X>U(WFw`VaW&$DBC-*YJQ_51{Ty-=X#g@SN$0 zh=^nvkmfkxtRYH>KZUb50`**MTKZgi|6{*r{4eKpc;4-K`06-+;5(O`x*W*lzD0g) z#K@yb>glg@P6qI-`&K_}Q7f>Hbz2C|FvWZY;|IB(z)J@Bj0aZkqwnwDxjm=O|2FhD zdH{XG#vf1$dHRy7v}n;H@Dk#RtsF>W9Jqq{g9A}GM-}lmoRee!&1zyC#|GGqM~@uB zd>+=dg7zk+z?%n>WkF`w9%Mu(`1!X)oI#bK9_bjLBk9qOr_`hshatlcBQ6c=x)HmT zfcP)Qj5tYj0pS7upJN_V66Q_cY1S-|bP@WHPK@Ot-AF&`bEIc#dLRCk;&ST&oG+kH zka0td9WQ_Dt+zIsHf?I0p})2VuxFq@eem4bGb$uFNbT9OMePLrcKA&}z|&8R+vGg4 zk@>zc=l#9- zY!_c1IE}RstiPc@&U}s|JxCX!59vgDk#4l*($e|yZ@(Am&qUrK51Dy^0OY9)Rwz@Z zOy9^zCq96DVAc%!^1!7F=dnM_3FtJ(b&A0~=EO0ZP9DcOkTxAf-hVP&fxw z*JtekZG;rEz{LYzenasUIP(WiJb{TXbM9&HU*+D@l5}?`uH`g5z_q~iNg3Mj*}YSh zdE}A4q=(QY0C(f(H+|pG693B7#otkGn0W!l404?aD!2A{xJFOUly4Dp4#2n=h~YGj65R! z886ePcdsLCf6@Vo^e}SY*VmI(`s0ya_8{d6#{uIPq&@ILfdU2InLBrm^$Y2-APs%+ z`tm@=Vok4yPH;WP1CB#xyrZoYeaY7Fw(I%|)(u*$+KM)6)(MjNAhR~2Ba5&9c%W%-)?LDf&Ugv$Ak3ZO8nXfnH~=^U?Zk7hm^ukkWO4ls`deFNUgURnU6bZU$0)>*=$#~ue3AU z`+Dhncyy|lku9_dsb^5%D1bzt1Lp|1zVKO=m2x2ESnx+WbB4ZhAejf!iYqa;qPx#H zdCGrx`nzpJ&d< zu@Bt(fXPEI;GB{xT`zwT?YiG#%lqoIj9taqOGm`7S3%m1?ZL9;(L3`t~j;_+eO-k?ZozCyRrR@ zeb2u2ck20gU8XKK4;UX2{e<*Q(mx%5#IcNX#}yc}z&IjzESZ}JtUSojTvB#qff)nb z_q4`>WWRA*^N9Q(`7Why`*vJ^zzwkK*ae z@PP3X(kDq>l{~;PjPk4$Qdy+(NL3h5$e2=hT(LhsNMAq54iDtic!0hRnZo|fGc;4u z{wn6}W7VKRgO0P_tiQAa+k@@G_F+32f4=eQvOP`PBKseGnQ|H)puWPf%Zvw%Q3yby zO+(%A#oW1b*J5lr*BAKH4=q2?UO>EQ>b&sp;DL+K=U~Hu=6`_Zq`NyA9ypV9T205i zE$hkpvffgEwnG3C+r`Lxwinxt{rV4r9Eu$}(X$9fboLzm$Jw=CdzU}OQuIr=poLZS?$e)uxlsUg>#a^106 zdv0Zb&_2ayBO5s1NS#6Rgu@5v>4quvLKhD>wi@g;cmKva80Tb@A0FVklnLX z59=lMV?9}4)|>S=ect$V{+s(es*~b!^MG3xFg}(34B9u;bpw!S@6z@mA5?@rRG0e? za1RRZLt^%#NkRM6c!D^`3!T_coy5IOja+u_{4AJ!$DytHt+~5s?xsKU_#M|d?cA|l zb?^3VD9g?AvmR0(){FHEKw^DaZ`Pmf;O_JPt@0k#Nb_>@0ePI`n|n;4-s9#2_LHZP zI8IjOUNqc~h$R=Gujssj=kl7j%WE;PL@~7&GNGz zZo0FcZdw1|KF*^$8NLh;@J?A^_<;J3(GA>uKsm{Al6vBENENv+8TY2ERH@Q5?oqi8 z>xwu=Q08Zt7t-Vb(J`&u@a6^juw!FmR3O%&^y$+llI37|ST2@N%E|Jw+$?_p68YLq zcej4Wc5t@~KK`G-OnoWqQsV>4M~;v5eV0Uf7>Rx9DJ1d&ZRV=n+q6W965n&r>R!Ei zg~Nupvfr5Vom@O`qUD*HLh!Sb+NEFa6s^0M44 zKkH%oyD#1UugZEzUei=SIX8ibZXQoVy|0;n*8CwR)@B{l{c_h;4B_#4iB_z_0{k0lWbw7zX|IhF7`}`e$&*$)Y ze6FE4-^cgz{VWH|!*ZFvPWy)CX8Cg?-H3Dp(*N)M9ZittW%z)1wiVlqwlLd}ZAo33 zZA)Ib1Bv~NGM2ss(xEsK`ypxb2-2fSs-S=X3ZxK9|oo^yYi{es@1-`B+X< z=3K}#{qM?N3z&8^?Mk`8c4j}zgJi}DBOeS;+>ZZ|UQCqD?62u1e$V`dzb9|;d8U6G zdh@+}Kg+@Ln6jC&0{Y)|om#-Ov1xO|4@N#1o-lktnvplyU(-wc9=~ts%x4%{oBsWO zg5HW(AZq8yrL+9=7e7MxF~Aw;a~|_K(D`hC;C%FWx;bC?(|j)Ge3qZ10iDl>&Hrz3 zK6f{tJ?KJ0!z3KZ!6i~@Cce@20PKYRV#)6J`RD4_3Wui~P>zMoyK z$0y(B``N4bsDSV1!`|h&A-&Im-rvua-skS#-}hwpv(L}}_wj!%kgXQz?(^%+eh&2h zeY*UA*!%nG_AlT5>HFEYfBSy+l@Gq3edUYqXXRbqZYktfcdsv`lz)fa|A&0^ssKg| z-_KqZfc*6;FyymW0V^uyRlsie>@E;Kx&^WxA6x~}ehE7F|IWLsf48BxIchIUkdFk`p&3>QOBmf#b^Cp z7vIHqQtzYg&+?W;Dhog0%lF)KPs?YXdHOq?Fa9&m_Zauqn~f*nOz@GFE4|#WRH;(! zG2dGY-+dCPG}3)Y^aZjmY=`Sv4?dgi&2kq+VtbY?bo=d%-*~x%1dRl=}=NCB!P89m0L(4(yNkbJ2o%Cpvuk$pXZpcf{Prvv>~cPr6*Mda&%& zui4)BW6jgQ9(%M*C+wBJGkV|NzfPSzqT-n`Xj&6tcMnIhCNl=s-7 zeYy_OSbGtOgPPWSDU{KWsSUH+R2-Mm@v+sShj-HGS5glyUfc@?Mo_TJq)F5FqTF#9y+ z5@n&k{>*yOzf!7Zjp_p_N66nS|52Yh%wKmvz1t^P_58lOTKU^T#d?}LB=-p)ev&@H zvzIrlU4?T$gA~t#^Gy*UAu4#?8qny3Gfs$nnlNrmn8;R+5B~Uwef;j*Zo93{t{q!0 zo{q=(gG9MP{_&~)slrN%FXh#?3>rFQTsx%*F5^RK6j0E@H1vNYSeH9%1V97 z(13Jc{=wF*TTMNSJ^d(?O&v5X^!V?b`y6}xfLEVbw{^cN{_!b&me4bGzffJj?1H|x zPSeYb6-UrNR-)|T*caWjxBJd>5_WCd?8sS`U)O>BYxEAId&H?Vt5(E`&c|_$;}m)4 zcJ_^RfotORzH}Hr&Yg+Z{YTeD^HMTDor*c^)hEU-IjHVz8?Oqticya@7@$7>=mWKO z)lxl9aNJn8YMG);ahKWTd8XIqje*!d5@)Jg9ng`n$vR-N-obuQrpzN9QD({_GZ$C1 z*aHu=cJ@!?{(NV!kEV0xo8E^F`z~^9=YES0Jx)MAfS)j)k)Jr8eLDIm&H_Oluz&l5 zjizG##=C0KyjdzLY^T~8w9zlmbD#PRYgTAEm+F`ey~CHEx^(We0A;8BK)#_oEs6Cq zZ}XTVW22+?shT}csyk4AreaN2s``zZtBGSr zs$Gzk{`%~?mDp<;a=_|G! znc5$*Crf(lkwejcVr@<>l$&yhb$D{!y0x*+ULV*4OzOb9v)@V)ra@)57!#A6l4wC>L(#{`chnIGqe1@qTBkld4?39;#!9_G%^0 z-DIDzx-71DSv&! z@Kd)LPXBe6-Q)|mKBXRcW2AzNR?8O81K)=y*TL8n>FBYvB{-IGuTI1sjYQdtv;4Q* za!Z3G?1QiOE6+e3cwVV*pP((f2K%4C)Mc;b9aDC5r)(Q-@US zBJMM5#$lHK?YEmwK-o)3`Rga0PW;PR7man0x(*I4(&Z$Y9?(7=EH{7l(0y@{@9(<)@9w@;7bTWSo@0 zFk-Q5#>K^8*{!p-&(uTj{U-cG+3Mcg&B!O7B^MF8M};8PG!%O9Cm(&NKKXv4x~omH zEH&+4w8dUkyKx)!E6yB0axfBnzhCPl9H&nlNw!UCkJ6T=4r=Uv>T|3E6U+bl>kWQJ z`2&z{zu|@(o(~TTyJ+{bLEN#agIIE*t8orpOZC<_%Rz&< z6m+<+*(UX7vsP-=@+Ih>u=TZ#jPX|N8htJ`+M8|ej9W22b-*6gXfvEg@g2%eKOcQM z<(4j8a*%5x-E~ObvzxpmecR9h{W=l$#d?v6EW1hbrcHwm@v*A(#hw)9CoPIKU9H}2 z*-EVsTqS$y)6O?_z<8_ezq`yP&wdcH zIS4+s1hsOG)HzY9s6<=pD{@cNS;ZHy)Id2CN6i>!%v@Qhj^()V`Fo z>Ofg^D)!`GcieGDW0aS?&$iEn#Cil&sZyo4USEZNkfIKt#d+*aAB1+Njcv;8zHhK9jKz3&Bqm9f#rfN&?cI0k7tc5NLJc1DlRhKEyAIN~!B6DJv13NmiC6b%qG7bHq?Rrk-Bd<3yAI6LmN}D@@K?EVlO&q_6zA2QG^ABuu_eEa11GeQe^XJdo?>;ktYo~TY zruaJ_h`h81vWWYhd#}0ougCHXXZD5r+Qs`#k9~4LEm;+Wa|xVtH+k+Nb*q>Y$NogT zcN>(EW0t$^O&v@>xF0_Lcd^Fcs^O#aIOpQnp@Y!34!BY@^3Z*c9o1u7@>u8WA&{0H z8=sh@j>SrfIjxTAl&FrzI4L0!_A2ZO%6gs|!t<%xwrMjB1*IR<&G)A4=1!VWrk2K9 zhQVA%l`M};pHAM3-+QdX9tpBXjvXsx%uZ<+rEl9gc7=0ZInFK%rXz3jP=q1b@?-{$5OAk0NqR{jPGoRpp6?&7A#n>F3NN- zQfj_W{L5af1N{<3P=}{__Uy4-*8yX*_qs$w4`-h!f3(naaMd9#yU1-*(Eq`+G_coL zY>^^G=(jC~L_NpIOJvi$SO@lzyI2R(fxP7I(?&k|8z+no=U0Daxp&a`I`?Riu7cIb3dM$bKeqBa);(5ll z4$zyt>>|im-7myGrOaiyFJoQN(4j+uVG~xvyD8_hQg-}IUxt_Ht1C^pMA^#m!CyU6 z(1PXH$z@OY@DuCAa`U%QQTr}pPs)L4FUt6$NaUH!wmW{}b+HcY)09j1b9~?!XU1vP zL!T=l>-@dyfO4^HP8}RtXc?u;%QgCrJiz%eSHAk{%Z2pa;~k}t*j}W4M)@6IP4i+M z*beOf)VWJg*Py;cosW7e*P=OfG4*k+JLY)K`jPJ>u}(oj8{$8B|NW`-d*hj9kf@V! z4#ntY$mZz9dhprQHCT@Tq_Wh#X+QMp)pG^yxbX0>i`e7$kF#ga{B;&%-|57}YljaX zy0T%z`q&X8Mr?Wa-4^4)i><*YoU48iiShH~bJ97d+8mEc^>WjL<00d|DdQeSDo1;o zJ^}Q>`t;4vzeFDy{zsoB=R->(k-r%OP9Fce%8gffU91P&i!>p>vMj6*%T*YO{JFnIf7kun zB^4`F=n5YOV~@-@lU2FFzC#~cx!3F08w9^r9DRm%E{T2!#(r=<4|68Q2g>-Nh_F2u zJ9X?Z3-Yfrp27B_-p0CQ@j?k)q{!NeueckLY)=3NH1#}EDb zti`xi4)5m}lvWv7?|_yqnoZ!`J$<;G=c6Cj?Ym8mXK`YR+_5;M$#Kko@LcR;hog}{ z2;adWHG0&D5Gg}y?SNkBDO$VMt3Mry4zqC`J9mYu;PtDtPh6M5_`xMM$h3o|2mCra zwr*0RejciZ4)_u2C-pPZxKShY*{uD4=(`s0AT3x=_r*3TP&^=@Np$4i-*sGx#Fm61 zF5~Or8`Pxnqt!vg0{Eqe%&$f4-2va*1}|Hleu@1Np*Cire!aTn2lAx5Ur^>hG;8M6 z2+r*%#2(e{ZpyJDI9k2<@hbKG_dPI|y(2{#NRNY2VS4___&s=&d1FV?-_^Upum*_qqtd@y~i$F(2a#Mum)2Ood)Al2@Z&(X#~PD})8ftWMK z4sj05{q6|(ytZ!&(tRYkkAgShzr#G~EWDHQfo(v#2TYzcVdt6CW_}%IkT?hW+)Wu; z4?C`kwg^>?T6R(ERxbm8M(Gr^cBSI`-0$BCUm@q7z51xk`=ei86d6U?b~DgmL| zzx4bvY(?6*?7y5NCq3fP-x+7bx!9M!jlrD$5mmLxw`%^J87gd7h>o{$zdK}opl%bx zo4$RN&#hdkQdhj2vii1HU#;2Q*c^_35ND9lW`(WFvYbsirRl+b7`$ztD$$;Ed9mu5 z#sk#IVM8##vDwyr`-b&;{xq#VN_zC{@!b-RFqc&>4 zim|=m-!gtuZU3SjbQy3Tvywhvz8eYWaWfTfx4 z?F>QRpuF@cgP{lck$vFM!Ts0pZjRj#Or1JqhhvX=&!=#&akr0;KK5Y5vwZ$VSM_-N zDAXN(Vrhe7&4blDy*DAoafg=MEQ5|S5qW9m+w@!;-hVJUiYg!VhkJ$%8@87AShBAx zc}~ahC4KHYwrTdXOqW_R_%H(@@j*k??$LLpLA7G5qmAK zajuSIl5ZJi|2i`i?+!r9k2$Z7^m`cpfVNHbT%ALYc<1n_8G)aKZ@uhCwWhmBcgZi#VFLey#aJ;|NIc|r#?v;eBa=~ zgI2N)Y#A^wa0xzy?VG**>h$Y|fya{l=V#QO14*jb$KGWq)pV&EIB3+MV+#yD+9*(EcR)X_C+Cn7-cef1Ccm zdzq%QFt0EY;{f$FhYsv}O`5zl2=AmFW^^HrK@SWXG;pQ1<57mh_&6_qV;T0~-8{$9 zJ?H7}qo0gV#GG2ZS9<-+W$0@W4nM-@8?<5FNzsEi_PDQGps!Zkw=W`*bU25(q4=1S zkef`1S46r1UwT@7ls0`_LXwJ$XF9E7PbK2+oK4I5>G)GI*Z%p>vTgBF+M%ZIrVQkR zLS@UAZ3Dl+RmTs=`HEzJW^(`V>7#PS4%@;lw~frC?4}%f=bdK5@DBQ0soVRzh~M?% zi!Xcz-%C1WFh0DrWhUkKCHNjc{^+9#cy@6lU)>Lo*QLwAb|5V{_v*BTzjiP((@z=D z7L;EJ@o~Q+w(uvsApnUq_icATDK3_w5cz>T$$nwV;pIm&^Qc-@ktQeylCvlFWwmJG zf(XowG{Lht&a>Vbc{jeMFY*I*#0S_nDIc(}lJ>LevKYS}`9l)h33D2M&73)7C(aP* zjNd+lM8607S5`0nmU8Mo%1O#= zRGF$(D}UU!O{+oeK4?3n)@!eJgwK;cX8IvhEB8O(yL;%HufLcHo8@=Ch5%y}byDh= zr(%y^8#-j*GR$Sur{~Kz|G4|^yPjXOV##spHjYh9n;bDYTF+qo=Lv1=?cTX9>5+#Y zrr+2;1HQxJE0--gLS24&Am%4`Y|*-^6W4PX_Rc}X+^kSb=gd*d7S31Udv_%jE?k)9 zU|nwN+^NGD+5@yhBlktBx4SJ@t5+`9pHIRL+Kn?{I8M;+ih<2bUF+u|gO=g9dEv*n z?_l)4^VH=TLmUTR!upW?>WL46)U=s%Rp<^U2AHv@hp|qAaW7mabt>lAwL*n%|JM^w zlzYR-SI%eAE}&lX`LIpuzLtAcp8*q`n3cUdb=;@6J)}+G`|pVJ$U2&NCSzkzE`K%Y znAT;fzkTxEM7%pp*T>PD8KZRqvh%|sIP0JTbyPj}QBQ}Ra4P1wT0Cd2dg7yPS`U2j z!xdQP5vJGfXnhm3;JEW)yAKAzc~qOag>x4C1SO2&ckSOFmB=xO<=6+^fWHlgP5|3Yt=f576=|EGZL{7(XQFIa zuLZt3arDsdhzX^he`C9L?S7(+;+!va3EGVDIFsAxxP9mG8JK@=wO`FyvR>;>y?TC6 zJ&khP0~+47YURqk7tWv4}I!>f5$%K7MPye3XIa z%7wX%NB9huL+d#r!;Sr6^ofwIn~&Uk@4e6Chm zC!M6fhwt(?XKtHaiH;|ar}FEsR?a1Yfg-)jQ)SDQeX`t>Pdvx}-sJfRe}DYsR!_-q zJ)SGLZ+rA+Ps!IiefB~7wjKG6jiU>DHrIulzv1hiAL9#a$yKs?!f(^`2E2rDWlnyLy*2fkq*KBS_@z0bFXHrE5W0Z6$$6D>B^<~AaC zMF01K&E<{5FojgW^924n|1EgXyzK>GwUKgr+S%OK$o-wYhT0vCM@$HIX}}+xd0moToHJj;&F^(+0WjNCiB@ZElg|a(lKS7mk$M z6OX@6+h0bGWiH^!mEim~x94u;oVS%i&UsrI!E$>l*<2IkocexhbD!JXxAuEKS!@V$ zqmgoZrdw>5%`LLI<&rDlS%(~Jl-m=ETs%^4&o%sYD0nN_-YLNyHdoB%O50o&n`?-i zL#<{O`vf`X$z3e=gUyYx|DA4g3vF(#{a&!m?MBX_%pr@Nvbh^in=%(g&UtTu#md=S z4apVq)IrXnLPPuCrZ)G!&3!Am0-m3dbNFwj&8@V#-I9CK6ONqIlTRY&^r*AQvGh5rWAysK|}JQMJ#kY@q@I&H8NIp?=)k#l~r2|4E%kv4bI<}OICkmnENoTuc1I_dPh z0?6^VMLb22JE!~B{m8w5l-u(f{yL?9-(ue*$6plk^hb`*E980NCG+GD-}HEf0MG4N zfxk{}J#s8*Ay26MqE9Za(m7oM;aCKTt&`l zgB#D|cUnFdLe6Qw;>bC5E03I0xB3=qZ*xD{+%%h8YjaUHchTkwTrf{AjhsWH7my?0 z=k_#1t_xCb&mjDD-a8sOhk_H4TdDth$magExtlMV|K5t6^V>&}bKX$_Ifus^+FWa! z`w=;Z!$wMulE4}Fog6ixf?9vL6F^bVj=cZKlQ&mEZA=o$@7bOAhCI3Olal!4d?ze# z(LA{V3hGTwi9F}opZ5`sRKll*NQFJodCTST;5lvaiC11APiq8fmA>+N4hZt2MGguw z*&>GoSz?jHf^4zK5kbH*`pWA$DhS9U$T30kO6Bu21i4_5tAgYgt2nRccR@;6zXTa;5hchMNO_CgAxLG56c(heMeY>jEsGQpq_suv669lx+%3o#7AY!7 zPmA0m$d4AeSCHWrxlfQ;7P()LRTg|fq>1UDBf{eAu!-CAV$RmO*vq%|1wpip*K_V^km>_2@^0**> zTBNKXx8yN3{ih(MEmBU9CoJ-WATL_vUxK`9ktYRt-6Bs3(%d3X3-Z22o)P48i##hx z4~vu+q`yU;6Xa)$JTJ(2i@YGnuNHYxkmVM6Ns!GJsUS$WMJfvNyG33W4MEmfq^2NSE%K@$doA*sAO|c` zOOTTmsV&GQi_{S$cV1KXx`Gt3NIgMHTco}qPg|scAk{4Lx*+u}@`fPIEYeVrb{1(Q z$mbSmEJ$yQyeY^~i@YVsc#AXgIi2SFNI|OwvPh7(EwWgU_7+(pNH2>l6=bMIeiLMxMV1M&!XnEB*=~^)f}FC*Nwu-zC{8BX>O5qg0#2DdO^Ok$Ob_MSY)FhzgQ$lkSP`k7G$MG zHVLxFBAW#{WRWd`{BDu0g5)b?S|db|`z^9fkbhZZyCBspvO|zJEwWRP_7>SCNOz0u z7G$(V_6Rc9B6|f1vPh^P`z#VBNUTM|1-WLC2tjh+VQRWhkU|!T6ePeRQGz^Xk^O>{ zw@9=g)h%*Bkhd&yP>}W(IV4CoiyRi@CyN{rWVA(&3NphY#{^kok>i4Fu*eBP!Yp!9 zkXVbv2y)dTv4Z3;Y+5W%kfIhjCCI-l5-&(qizEor*dmF7w6Vx(K|Z%gk{~}?++7P(E3(iSNwNO_CgE=Wy_6cVJlMeY!!i$w|x(#Ilq3Nq9pMFg2-k-G$0X_31H z*<+ESf*i8QJ%XII$i0Hx%BgZ)_xl7XZjt*1dEO!q2vW@=#RPfVA_0Q5vq*74zOhIN zL55qTq#$!FQc94G7I{#RFpE4SNQ^~F3zCb`bh=&-3sS@)j|lRzMal^BwnZKlu*ma*EU?H6f&^LQML{Ah@{%Bl7O5b}Rf|*3W6!-toHEk+L1&h2bNG*#r6Qs38 z-VvmWMVbrplSNtxGQ}eA3bMo^Ed|+Wk@o~SYLQlgT(L-NL2hL$6u7FwjeAX_Z*i6Dn8@~I$67U>|!?-uz? zkiv|~(lzZU$b%N?B*=3X=`2VCi*ymBgGD|Uq_0K35M;PTz7%AtMZOYbiABB^WTQp8 z3KDLSZv;uS$hU&r9-ym5|BoOgEz(_(CoS@wAg@^DdqJ95q=z6MSfr;QT`kf}kO3Cy zEyy&B^busaMfwV|$0Gd%iLuBJg5)pm(N|tie?cC!$d7_NW09YL+>ANs8iM5a3=pKD zMFtAe!Xks@IUm~R3>M@&iwqIu7mExPWS&KS7G%9eh6xgGk>P^GTI3f&@{}+&9U;iQ z78xnX6BZdINOg;h7Nmtm#t72IB4Y*l(IVpnnQoEsf~>O01VJJ!GEtE87MUbSzLKUE zlLZN|$P_`Iwa8RK-m=IvK|Z#~bU_ANWQHJ9EizM(zOCW=N6eSNKYU`^>-Ek z$%Q9R!zY?5c|8jSS#FUfKvn*ynx0(ln*ujD7Uv&af5 z&u2gy;yXn>D~TX7DuVqKV3)@ zjokc@^Q&$6PFsx>0#XWTs%KZe?s@YTFX;IfKCxbiipke6FXLohkYDBZ?9De=Bd=K` zGT(HKG_%P5d`t9`KLg@C`B=W~`pMq|ah`lUU%38GKOk(?z&x?}^4-E(3=*WM=S;qe z8W}Ihg*<2THMoW4Su99?&$)bW>hA>GUtP)9S|j0t1m?M#@8et8sz-ptA$dGk^L4+4 z9QCIl`GI_|pPaX}^PT*jKl1g`&$$zbQ^ITchThT_zq$_yul$~C`Bv%YJZzD_fbctI zEuw(1?>q;Db;pF(tUMK#(wt+%8C*MeY*hPmA0u$lVW{CkF^p%p$!6dDtTT1bNyb0|cpP zks*TAv&aZRnp%K`L2fh#<8rGD(mo7Fi)kJBzFr>To5GABG&}D;Zak< zJOvzXxzi%~1$o3Gg#~%mB1HwMZIP0Kd|;8Xf^@dX(}MK2NChC2q9cLu%I~Qv$TW+* zBFIXMR0G1^9d428@|`$~)Bs|7t^%6ZQ&SN3TnDKo2z#!BG!le8*FoMEggw_m+6%&- z>mZ#3Vb67tuLZgNF@y9Jgnilh&HzE!mmOq~AneNyGE5NmWd|842>Y^wj1`1^*+C`> z!oKVvQv`X;mS?sg?A^|H<_l8UerJ&&?C;KZmI}iD?jWlKVSjg!4T8L3pR-AjE*9A; z$WV)H7i6JDb_=q?BB6p%k~r_$F9;=xgB%oulEgvI3c}v)AfDSC-eB)`koyE-?{<(< zg0L?;NNGXX-yNikAe(Fn%Lx);krxDEUv_@=vLNis4pL1J_GJg@APD=igLD#vec3^J z2@+%9H9!#dZs$9L1!3=YkY5C0?{<($f?TrCnQor*xcSbng4}MAxq?svIL}!s$bI%Z z8w8;QaJ~~P2ql1n>=dN3{Z*JC?^+~EkZ*xduR}z%AcHLuBgiC+BnUFsB4-6zVUY`h zY_Z6_1s&cvZjlm#{BDubg5)o2%2Q5|q852YkTMo|O_1j;(pZo>7HJ_!ON+cGNN0-- z5u}GjMhY^(BI5)ZXOSg>%(uu2K|(AN2!wL=7!XGq2Mh9#e;QLB@EsnYap%swd6J798{hfyPISB$kVF&q*veUO&0B zMNR|x4sWMr$JPkUlO)I>dCuWmk_t}MPaZ4CaUe4_GGCAj_|-c7n&H-WjT(ih|`A*>{bk$L>3-X<3Epkzi_bhS=2-~nf5Z2;Cp3Cx_3HCcz3P$Mf ztd#E@zU8VQTV2R8P1A5eV8<0q(nzdDRKY*>b8h&T^RC0U2iKzQZ% zW?yM#oCR8w&gD+W?_s6JX*nU(bp~S2mQYtVmTM{*UAfcI`STcJ&Yw)KA}s%?xLu!c z7yWZMGft!{nQL4S(-r0Vj%(Zyv%+Xsyp#5o3u2B&j4PLuj!!ie4}@wus>F(Xq7nz8 zeNBbX$WAL>YSw6t*Hy$xJN+6$?>$ciB|@m{xOOGFs<2#8$>nO{9Eq;`BG=OtarNPG zo{LOKTgEkt*ZeQU?4pcoE=zC$TgpOc7hx*pq$WnCJcL%58$w6SZB-B{452k24XW%~ z#5JWwR;I1&+Qe(F0x^59>^i{GLZzDPI7@Gp>aHJooXHZd_7GI zS5+P-gNV~=;i}7B9+C5DTe(`Xctx&2dT>`>?P}#3%r(VC+*SwIRF)bdH`8=<&F8L` z+SSpunrjAWS7+B&mdPqzT-#Z`RO#wE#IjALo9kqHI(tt*=;E}xyMAH0pwdI+zDiG# zw<^6v(iF1C=`9kW(nln(N?!<_W2II4iPTf+525!U^a_@4wT8mwgEW=cmKxn6PRK5`TTIEZTn-H_Yr6M6k z|5wVS5L!=th*=?Z(R$iL%zBo(5_$F^D$7I`s4N%Rrm{lhjLJ%pt17ERoI)8dV%=ts((7rwsNe)`?D#kMAJ!!`~oenWOUGM6{vPfkEgpT}1m5n0D zR5pn`RM{+&uDCt&7LmLvTSclv%-**_Xct2vW)~zh`wZ>c@0!dt%e3YIgldjxO|okd z*Id<_!w{-@tu^1dwsTEr345;ZAyktKVvfdn*AINeDo9Oo&;^m&B5vz~>lz=iR@(Kz zl_3L-(_7^sg!VOFx||jX)hy7Or>j~MxHD76sC*%j7{eX^>J>)jeeo7^W$PJYw zk>FDHPJIxXD<>oq&~4=uDGs5%Pe_|Pk4WV6h)S4zCW4LRyN>d1REz_=M5b8RlHSIzcbJsPM_7JN1 zPo)Edjz;D(X7=-GJ3=O)CK^H)r`0iJE!X5MW1okeAXJkdLKmmiDdYgxlrCeQ%}1o` z451ZP7jashLr$=CRp}jaoyQpgp^MY%7xEXca8?-xNPm%SDj!2=0giKxh|# zi2Rl2vyitu@=NXdEF^6R?cG(@;)~N70ioL>pUOxGja&!P4*xl=QPS04YsQCU4x!(K zj**&-)&vN3eXd;-LZU)wJu5_hx2A+7am`+>nG)jT8v5-d&6ON9Eu;|F9M_s@AvIYp zs>}#!!d+53y0g3$@ui;|(j$a!oiyd_oz4vz#*$TK9)wl$=)chy1T5AGB&GFf(l1AjH%10vSRN_Uht0am%Q1OY-Pt45h zc}3{=1x6~0ywa{ZA|IBwYg&nfsk9YIQ0X92K&6XFDV3fg)m8e4(9bH(dIpQoZyt?| z6ltnm<3+ltOcm*;GDBpv%I6}pR91`7?=;O^8%36D%~6p}DknwutNbN$O69)D4VC92 zPgMR9d8_iTNSX@vdaR7*+{mDkN+e7rlL-Aj#q1(ZBt~npizKM{M3PkUi{w=)DpE?N zrU-pdnVGA;NPU&IBCS(P-^`k>BoX?}tdaa8^p^%k%8QKBamI>FP?;byOJ$14B9+-9 zt5g{Qt#a#Urj$WJN zGq(l(p2&>j6v?4AQ6hy@;zY`-6cDMYvRH)P^_!7biZs)jZ6Y01c8d&9*(Wka+nratvZPa0;VV|Z7DMsCXMc`M?yT7}PG`KX#XhEA(}_|l9M zFjowOE>5dQ_#T!5Dm_K2sPqzPq|#fYi%K7neky%M#;Ejz&>6KvrN77;2%QN|>tm5^ zS~Ec8sLDW*izd~hC}EWc2xNkfEU54$5dvA$FrPNSsGq}<*Lfc@OmtdRn~`h%0w%CCE~WWgb(DJz#8`K+rx*kq*vJ) zK90qsvNwDVO97RG;mdjCN+NFSNcc9EiP_A^$w8^zWy9!xLBD}Aj{vFN&sge9R}WWO z_q#CKdutszt=pBE)=avP>6oTQTk( z+(mx}YmR)p`zXs|9VgL!j%ABV4)+z7V=6h_f3aLp$?JZRnRa?tBsr*rJ0yG=L1{^q0EksFraz zWTC&gC0Xh!<8I3%N9xFB-3wR>s8n#T;;t$p$w9TZ70wXp<7(;7%{7a)rlq?n*X+`ocJ8h$N8gj#+;vL3+PM#L4gC#+ z*?R}~cP#YVZ6h7s?^x(J*G77|KZ>CH@@0%e7yPux9nJDmWuVB1wd|TfA`vQsMUqs8 zh!j^DDpE`36Opzm!$bzD3>TTM@~Ox&mCr3e)%2cVTs4`8Yp~`gWY6~&v&kT_vS~F8*ipngJgDSH{ zzEhba@~g^Rkvl5$ME+CxTqHvsd++l_;#C%ilu%hH(nMtugpOEymBk{Ts4S5#`kNfH z_b(uHznFj;lBKRMrR#I;`qEvBZ?E+#OGS36EE74ZvK&IsUq7gm8&9$Relq>p>hpEKiPf-p(7ua z{<=uU2LCT-BIx-dkBHN{?mov-R^^fV1xsy}C+>hq+IuSqUGNuE?vGgdsXT|!$YZtZ zh1AT`nt$9;T(eSZUP0(=*)P(=_15jj9asjd}+LLzrm3X7y}WUr@)NP3#qEbDg zdla4FokZ{+HewV@AC>wM(|DZmBFRBbBbG+dyV03CPSc2Qxn{A*$Dz$5&hweD0YVq2 z)iUB=mi;QNAapAqS7|MBNyc$nZA9*AO%0bMddIt!dtMpmx zba7fFG<$!Qjv^CPI*ELt(iuWWbt8n1YI0B)2#uVqHC-Y+S*Yfe)VQs#BA$YF*Pw_h zTtj~|V8$5~(JTv%^P7${D55LNLzTf0T617idly4QB2|WpR8aXuq?O7rk^U;fMJB0y zDzaJSGm&E|BSg-qj1;-1GD_qL#M~C6MS`2zyRap*${4BfsEid!QW+;wP-VPG36%*V z6;vjQG*Fo&(m`di$Y_-*A~RK{imXtXCbB_gI)u&y`b!LRE6;$?J&yifg2ZXfh#1W^ z^fwizW?{q>|lQS0konrN@MV z5OaL4My%zoO4{`sgm&6YYpzFZXBnY#141J&m#*ZX-yt;eS6cIX#98jzs`7`(1(lm3 z&sF{uN!!XkTW&%4R)&~YG9a!+I%gf33&zR2$?4@8`;?V5)WIzB~I9*I;_c`VXa zy+4HZ<+h$c=+>E{HBTenv20LzCUOd5?s3mWZfcD!soK~pd?7XQ5YzQiq(lm#^)!Ic zdJbfu8roNP2wj}k%ZQL@TH*LM43K|B)~URL&^X^g%s8(hG|n}xc^y%d$9b*tMkKne z#TTdbuSi*y|3uoUycHRt@=j#FiWO<*TA|_)S*sEta#AHwn?NlF`Z(*@0z{NUE?*kzJ$d z5owNy6E!_~oV6luD=u;p*X+}p_{a@hb4+UzBe$~9&rZ#Hk|Gar*U#EjIPw(N+|aHP zkyp9qf!0)vyv_1XrCQ_@?)tF3J#wu`D~8q_ErM5!k!e`+s5FoCuoPEm6`4I|B#tWm zESFZ89MmQJl~6+${FWiIVGJGThSC*mbr9*K(oJN5N>7n7Dt$y|s0R8E|qg4Q7RWi zVpKXunIq;?=`T`LWw=OfmC+(?ROUeF5ug{u+!l*OMyM=?(Csx}Wr@^mRQW<=x5}3y z$5fVzTvAyk@>FHH$iFHpM1nioD_kj3T4fc4?z!|+YjcjRCc&ENcZeizYjso~-ou$Jr>-Mr9L(*1QQqYu;;Z z7CEA_C2BeE^k=!wxazNyy%0ZFGDqoAF?`p5`kVtNoWRa>Whaq$;H-wnm^oU4%kuqU7qOSAaduZ2< zsK2>uuy*|}GETexjC##o(;?>h^v|fY9-3>FcGvah^iV?DwK7vZU+wzmni5rTnC!pY-sPaelJYPj;se+SeJ# zPxvp`q7{-{!T;T4xi4#ejQ=yccpwtg{eLCePYU@-Z9nM*=^szW*&eyC);yHCCi%$< zKRMth7yRU*pM226p530SEyV2fk<32CPiFebS{=vkO5f8S`LT>sM&)mj!75Kg4yrsA z`Jk759zGLsLd+3+E)u5lLL^$dUW#N_`9~zTcD;hob3sX!*HTkeTMsN4@5pvNiC9~5(J^W z7g708YAUM)i!@eABho=7t;jHybRu(AoFW@k(nA6;`%Va5f~}7rbe#8#IIRpK->A4C z^t+oAesWGF1U2+Hb{S&MmQWcdsE?V;X=N12sFF##A|a+L%&#l6Ust$v)zmJxUsr@* zSEO`J)vhSNt}K3CS*2^Qc14Q>^tIOVwrDm$uloL6nQeGteV0*3#BGD;?j#y;~UGNz}s3B>VLTJss z{kj&WsG+VcDTKOC_{k%cin5-tA@=N*L<*}^7HOhVMP#r_Rgw8B)kOBFR2R9ZQbXh) zm6{^qL+$m{5-FlmTcn9f9g)E*bw$2}m|MA?$QrGwFS1XifyfE%YAABiPagQmJBWED zV|Qix6qd#Ws~ja_bybX)JP1rHROI5OeD^6?v{Twge2f=V~T3A3;o4bCCo; zDW+X^OuyOKq0w zDnVK6u(VQ%%vzVFk4pBe^;kx#6wO+nWu8jatPNP!s5H&mkY$fbx2%m=zEzo!wK2;T zl`pe4VR@;tH)~Ut)FbV^pUv8gB|_z1*5)iem7wSrEag?QMz>^Xp;9oq6-ytL2GOlq z#;A0UZo@K9Wq5R3mQ5-%qua53tFj`xJR6F8LLt409a;rRz`IsL8DniV?JDq0$OLGWa@YgI5 z`Uy-Y>BRANPLs>DHP7mp$4H)8RSU{40?gE97R#1cH0xyA)CHD1pnuJLG1 zqURr$M3p4ZJ6>Tvh*@)9Pkbyru9kY@m20+3&2Y<>BO=K`dpv){PC(c9+I7Yg5=Z0wBsKVaHj!Ie^Mgq6 zID0*3MM5Cvp8KOnbwAmlT~tG}pGYAz`?VB8x8OSn-KI|K9J)v{jJM^2Co4-9m5ZJn zEO{YS@SoHA)l-P2fyzx!J(hMVw>&N4mf^_v6T$DGJzZGFz9-$dYc9mB=Z@#&xRK~u zE#kHwc!tH%Ex18sxb@JpkmaDtBhM0+pSA0;XDN^TyNJ_z?b*jQ4@3$?{pUH(x6Uhw zITJpJwc_bsK<6{nfqLo}h{Lnlp-cRWgZGhM2Q13_`a>YX}{U(1 znqsfVE0WJoYWPW;6hil}0T4Rt3PjO3bmYgpR};&(=^{VbtCARNYEJvfb%;3{c1@$H z|0_rQB=xlSYiNZZL(B?k99rQB2wj|3Vr(|P=hE*Y=Rn;?V(>RP_&<`2kfeBetlK6+ zU3pmcspN|-#X`U9r!G8G$5vxGsx?Jp8?pSNQarXb%MF#%vEAZn&9_C|R@vD8yuv3U z!B)B0Pgzn;H**DB6-8Vs)kLzW)DfZIq|*w6t@?M}rD%(YtsO%8gq_R`wjLI$u&3+d`J9S#SrRG1aNshe} zp8+)=&9wJ*7(%~^$f|M#LO=H_rt%Ghc1nLMVm|5dD1>g)>RNL&_BBf%m181PRE~>m zRQVP{Bh$Yhq>)broq*8&^qAJ1h)t6~`=Wn8X!i9Tgl7LqYfi^zV);|$41`900imuF zK|erfoOdEl>xWoR0?idV%RU;HV)OAh9+h7qG!A|8B#m=1%Vh|470{Z?v1PcXEX3^M z3WREEXw8+_T3pjYYKEn~3Za^gT5~nFC1$|uObERTXdCbwgl3-%nSuY@*0tD9yuzj0 zbvt$h?`xCPI4u(D+N)i6VkdFeG3|ODyMk*jYmF^`sHBcN&RzGlD{b7bEN@c?%@sV` zUST@a&^<0hB-nDs{mxw;5j?+(~Y#cKE#?cLd+5CBod?2S){T` z7m+q9T}4K#bQ4*i(p_YeN)HJAJ^x{qo>Fs7r5A*L>v2z|x755-=>ws2-Zj_WMPHH3 zDTH?F^^ferT3&6pBwZVz#gYHOIxj(9rp!Gf01>8^Ws*qj1fr=nisb^8$CwN5OG@b;`Xt8 zrLr*YJC=Pa8{(d28;LXg2OVcq+&?_>Ws&gc&2b@Kx)(frPqKRHwg~*(zAZM#`B+>k zTSVejwnFHL6@k!B@x4?c^bW|#E|J<=^Q}k=l^;atZwpP=IT8BI86!W7^wF+gMFy$- zCNfdwPmwQF9*b;Jc_BhSD=>3qiZ}bBe_d`Q3xv+YWOUKRX~l?~Q1OWTtP(47P3Cf1 zaU##OCSD|dzWr0{1PC2fdX+-6yRB?e(*!kU_H6N$cs;{ZydsNL5+QV(ZdS<-p)=|T zghqB+Ii%|+t;rwXhR=;_Qj;8107BzD(3;}$qj>g!1@?MMh=ij+_(1) zrKXkEG>+fPHJ!Dl351UP2(4)me}Y#yU25zHR?P?$Y z7k6FNuJ-XCB+^{}sB{nsT4?XIBZTI1sdR$S$Vm{|S8`BisVSv3o#P{U z%0dWrrC((4YY~LHq9Jr~TI=F_aaR$Q^$_Z+qFoyx)Ky<=_Q#Lru1+ckAk@`IyADFA z>r<`yC4Mn?%~81sp{`}xbqPXUo3!Ry{Ce*CM&&w$x_;2E8xZQctTi7boa3(NDybpV zm3py#G=d=16#+3vBSXR;+?7Yg1);8z+7$w!uBuv-HQ@z!wO5ITP}j%W6$7EJFx7$-7x*uuRfhyM^!QBT zhVCrFsmqzfH`3b98LLeUe=d|i2tY;~pHBA%t z@yO*wl7m_#By&wu?P`&5o~5Hor-Z*)`l<9xc){b07D*23oA8ch)_amB2d!|CcJ)mN z&q3$dS6b6QA&OsE$2`jnAvD7|dQxbM?O&XEppy>(wxh9j=Oi#GM60I^b;TCr#Y1iz8 z2P}m|GJ0kw{L5WsA#@8mt=S31ljvwP7C9QTFrjJ^-OBCXlh#Re47+OA!h}vNeN~nu z^k5mKvLazHk4*pCl;%1bvnF8_*DTbUH3@ULW`zho2|QsT%MOvFG3yi7vK$m~TN@H? z@i?b-ob3rOxaOvI?M(>q(VG9(n!O2ae6-VmW%hawBy{%CIUg(%Y#m6Lz!Iu*Sj3}p zR3y8~w<7sePKlIK`B9{W%6XAaDwjq2s$3VDs`7`(5|!H`YgF!u(6WitNyu zCnCuz&qe4n8%@_gBHwGx8CQcPsLN^y}TDkVhLtCSQusDgL7e8j#} zDGi}}(=QNuJPfwVh|rm7q@u_zt*IjNOr@HLW2N0yPb7oNa*-@5>qT;^Y!)f1vR{Ng zP1LOCkVtv0IV;js<%URim75|%RQ?i~rSec@mC6&5?J6%sj;g#8Ij7?AnxopLgT3Zd zBGzbX+_?sd?fPGDtnwz2)!zZg3!fjg+b_EkW(eI)D%$(7pbM<7U`%GAu>oM zQe>1$6oek1r$fv$Q5Fb2J}(wI8WZiE!t2?tUD4jfyyhQNVnlvd@jz(gcQTICiWT{2 zwLMq7cPY=6Ad<)9^{(c*@MOJ6Jf3{sUwNExh*@Di?_(Y(uS$Lhbv4$m0uZ`Q zJ8Mk=?>p`qrcw|>T{ESthNlpOx|V58A#b{zbhhkLDJ=4hN)ZT+b4JH03ZZeXXiZUX z1dsCwV*UoNm`Le0_ABb*B26Hs#+JT*vQDLhbRF}PtZVIYN=i)^l~NG;UBEnuIjXj7 zN+GoO6Dhh#UaORradNJ+$FZe)3ZYxMJH(vxR6{aKrK~qAAH%64=VK~)6Im9D)bLdD z7UiS*6~wH$lD8_$UX{uax-Cv>R~4zbsx?)-jkxBS)>MVi?d4o=k6hK;o^P)tm1+;kQNvRmLS1#Wrn{e+aazdr4$Ssv-BCl1NL+E|n zha1hKdPb`S309az1n;f9XIbbNn)fL!yw_P0->Z4fQuIAZm5atHCvq{ag*TLiJ~PA~ z$CHbWSWVQ>1>YLxEzHtdrKQLal~y7%Ra%QIQ)wfzU8ODLL(FwZr5$7$R(KLZ>#?l% z5V|*A7s0>p7I~)9*;|Hpk!q8@i|*d4EUx#Y3GX5+gf93VF>ia8d@4O4w4O>TJw;ln z^n%ba`~+f-SZ^6;n%4C8_Tri~TGIzYM|GFh^zjbkxlXF|h1l=bX=Jz6j|6jF(sBBE z$MNyGD`KH$4vV$fK4Sg6bGa*nNODj=?>wG83&iZbpLYdIL6!ax+Iv-%k3~AF3=kOy zF^}N`MJ{U1Ad%m-X0S-~7Q1VRNOzT?A`|@NPnAzlLyzj2w%WU}C3gy;T~vpd6;ch! zXDY*FoE_R_%lQ;ST`y9|1W1}~_UyxD8f z%4i6k35Ou&tQ#Y8{yo{mx9M%|8sk04dv|QN*F09FkjglbMk?b)2C7UDS)?*iWQEEk z2(558#H?^KgpSw=t(ojS!8O;lW(tIAo@&h$?@zpD=MMW8oGQ{#WtzyRD$_-hRc43; z@3hC6DUu&T7pFA~LXR!wA?6mGEj6{ZX0i7cucxh!vqWT%$`>N(cG+`%Dbhh@smKUF z`3_>%vrKAkXw7nw#NBqy3X#$fbB3?9N7kBEB6GB6wa9KiiP>Y1^Oe-}Raql4+fQDr ztVIpoD|7F)S7=ME6hil=-Vn29sv$Y3vQFfRpOoBZcdeJXdPC@fPjC{MoI+^iwJEwt z-l%MluDtv0acrrZLa3`h#H^WWNH(f$6uG6cNhIok-L+ZfY6PK+)3W806hb2}_v^Zp zqK1z1n-oG_(Fgx`u4a&wbB#zL)U_ss&^`A6#N2bYV9gUyb5d)zc>m_T-%!~qlHqH6 zu5A!{-I51F-};@=+D?LT=;zNQZpe#VBQY0!-!VyY&~|TdZkoM!p<+8|ml`9ZB8uX2^ zW*1i>bj0qV#_Zy{_b*=aOYOSuea2n%4YsE1h6sIMt&yAFx4h=yL-s9r$D1Y(?IKF$ zu1HapdmhAi}5v_}5*wqc>~ zqBZiLw-*b27p;-E-eD{!unQyaypve2s91^fSsto55?Aw1=^MSND>)$`aWB_=Cj07= zEgV#gQg}naRb-T_Yazy*us!~|w!^0L|oK_K$EGk7s z@~IRPsSYu}i!2VI+mybm*BnCWX@@Rbg7Q&KA6tSdCT7e>NB&ct zt72k2%S@F@BCAv?LujXaRjP=bQmHEPRHd3o=n;GG)kTV`)DY>YQd4A>N-dF{Dz!y^ zRH-BKRHd#+Z0$gH(kvVD{|Lh z?P{LbkdMz)l@<`{S|j5mC$xmnT-&v#Wnw#?i@xKVM#i_LK&XqpSc?2uHq!5~mz9rerMO`HHEy=cg&a>A-7hUijmx(J`TB~${ z(77>4rK`v?m2M*6Ld*)gi#$&uG&_A)f|;Fa=!nG~vuE#~xRqB(-KOU8Sc;ca>fu<5hZ#%!8N}_7T~iLTH8b-3?}Ts-fAh={S87Px1;gmoYU3vh{^f z%@eKZn|P6Ha!L)}n?tC^I&SZ@U*ZEkH_}09E__cYgkDFvMS`tCiO;zvQEQqe87Z&Q zBI%7eVj{^wt&*(#G*?RqU2xVVrDN%-(i-w1YCcnG1EKo`efO(bPg|*3pf#P7V)D~p zHSAXD0--MY?pM>*6+$Cl(3*Zp#klLKN`DA-(RaU^u8$$q<@(lM^TebU+?7{l5`?;H zLrm9X2zB++nz>1Xxof)0JP6&U8>K5b=yS*fbnVlc&y&XTIHy(Si@Z`<0HN7EC+yi5 zN=-2cU7XhPq$NBTeUCG(&~2@N&f$QbDL@tk$IV&0|>$G56CT2b?3=I~W!Nv}0YzJ@Gg_&se=50rJy_f)?V8-a-Yf-F z^7sa@)K|&t8_ql3A#>s1FZ)KCab)jP5{vkzv2@q2qQ0dpQ&o!j*08KrDel|Ea!jR! zZx;)F4yU=@OZpD*QN4^Bb1x|6JI3--rL;)oDZ8eONMV(-BK1|uiS$+}FEUA`g2+ad ziXuO#R1$fvQW-+$SjN-#da6iGUX`jMHC3vK3{1C@%_P4SEa4UCo1hAG}m&u zr{K2?B70Q2`X2K*%e1Sz?-k2-l^zfp=M==Oxu?|pt~G;vX$n!z8?6}(p*4s6VDIY_ zUq-G;fS7THiBwb>;mcBp?v*`6l7q(hvK5+uaYpJmV|`V58-zhtN3Nb({$h z8fTBzOz<_~nxk4X5kfWRv}U5OQz82K&uz#H{Fl+11fiVd^wvHrXycXyK?3n$kJ9N7lhU`PP&{{ZV1i3RK#r+$T^B< z->Y2(bB^b6eo`p}p{^&|RTx4e2VJlq`HSV8!(CY*ba7f`b1vtRi>Q=?P*)x8DlawN zw5CeVP24pOVm|q#Duh10YO2%(Th*jymUdMaS>`8)Am%p+cFlP|x$h^ApZ~Wji=Pzt zle&J=$4|!i$ud9LcjwMAB_ z)DhXCQWrvx2}dF3Y_a8}N9x=$!verGeBu)UJji|7cAkkyID$<^ny+{Fw8M%WmX*$ zwjB1WIqN6CtMrnQU#Rqk&`*0Dm+igxfzb15v`Sy8DXG#=YMQI`htTuR5S5QbCaMe& znX58TWUa~|ku55NMUJZsfzX;Ss0@YBnxCqCA~min_P&P6IJs4ZiKY8vaL09d4jghV_Dq}@TsEiY-p)wvq z|5p0{KVxA6gnldCL2D*T*8qq)8k0oEY0YGjxhhjc)@he5J5to}=iy6Dur(E3B)_Ok zlX33qIMYQQr4S3RwKDu>SrPcJs5OJeffRgCwz5A$ zH8QhbP2ZR=1gY!MrEGJZz`XQSl8^X`65Xw3q*>kEEK7yvPh(}%3_gGDoaEb zt9&7{TjfiUb1F+kZm291d8D#jffAaYq{qsYH1n?y3+u=o;eZ5GL`vPGn^%2tujRJMssQ`s)ETV;pH zb(NhW!N1$H?-I$UvRkCN${vw1DtkpXs_YZ_S!KV-JCy?>!GGAZ9~8-_^0i2Fl|v$9 zRFXwDsvH*iS>=exJC$!l5^vhG9~G&qa!h2X%5jl7D&LB1RXHK@tIBsGf2({i67i=! z`$>`VDyJay{M7?uo?%amjP;WxezFTfk3UY!?n?HPGk)?Lgf94mJ(=qz#LWJKNXRX_ zhJ;?PW>PsTH3<+i`;QQMcSE1)M3-QTg!YvSHD=^<5PJ5ktmBZ-vu8(@pQL8A%6X|- zrgA}Q4ypVsHCI)Bk(xIu7a_DB_icMUmmu`WpATZzOhP-YCW6oIldfhEv(w9vlshG% zk=tq46_LIwS4GCE{05ui{y@sbsbH}Hs|2TMNVPd_L~4u_ z>bQ?&R`o_xcyZgjlENG%k?8aC!W=u0dUN^*X$YrYB?7D|oNgg4;Z&ofeeHIn4Qw%` z0<2`DP)AiHGjAJB10{tyrXzjN9jB0f<@6NkCa2t`1FUD9dLn%=iB`1$$y|FJ$ps5_ zyh4iQ*Rzy>EO)WGH)HF`hGEF-*9n*A0(-Tdp%G$F5&?`aMWR zIXy-y|q0ILzFO-P+N{fjh^Q|Iyl);Lb9kY;fDs6v3Xg3~8RJ2+iHGULTp46wdo z8-ipy&LjN-3w0E%WUsldq%cP(qy9He;S^Ub!0N)O8B#w^yO73k%2++Xn#-vT(h5$Sk+yTXhIEiq z&Kd#M51fW0UFWnP$&B}5%>e5mTXQ7Su@K2Ih1Pcs$()JLC51UYs1;yk#I<3LkCEaz z?Lf-KDYkZiRff|nq`I6QBemv~vkvYboEjhv;WPtjBBwJ*3pu?)TFEJ)u08S?q%CZB zkW6n_J=|_E+-H!?N?S<^bM!$v&mE_cZgNUhAN%Fh2FaRA`}i8k#VJh#``X4x(QNCG z@*#yfP9f18VU8DYlZfUos53b4j|nSQBK8M1z1(hwMg|j9YyNE=?zjZPNiE1Si_J)9g~pE@mr2Go$V(i`eesY$5W&Q zoKm$3u)g3_N>gV|Bav3|wcC(3aJsD))HcA{%9ey=>PjH(Vyla^pVJs5vzDbuM_^%& zb4cHDD%~!?y27a!(j89IkX~?lfD|;HI`Xx*(_kd}w97EZL8L64{zLL|s@fsI%Fk&! zQYlWik!o_P&@sSj&S@r6Cr+t51z3YP^+FoU>3gKvoU(PcZ4}Znw)<*TyV!NBkxXx3 z*8qz?wKB}n1?eECvq+~n73>yZUFP%^(p^r^kX~{s+a33h8Pt0S$(#p;dtkq8gOIXv z+KrURDY7S?4LA)!s=#SIQbVLr$8{ug>|bj7u$QqgM`ol>+|eItD5oEgrXgi;*S>Z>(r;`}k^VN<_6xA+(-Hgy z<>dGzz?#LW3esZk-G^k3`1hLrkc6X)w1GP!hGD;)${-o*hP0pU64FUd?%_BFoW>*F z=JXQjA5INF4X{$rrk$@w3gh$(QVb{WXSlUE4M8f;X)jV;PA`z!a>_CyfIn9eukeuQ zb0EVUpCe7-^bOK{PS(f(YYita(l$=*k&bX$hV&Ds(@57iy+AT&Q;|{jK0Zf!z}NnZ zWL8>oG@ke8(7a=i=rbO}99xk>*={14*<54r>V~ZXQbD9pM;9b>#0N?WbBseO!`B`` zGLO%y;Co0-U||l|IGp#K8X@)O zG!$tVr%g!XI624TEa6lYX$_}ININ;5L^{MN?*zO$SToY~r*6X*Z{|)A7v2X#mo%oK7Q|YqQP3-e94Qu}Cyq zm}5558?HNx6g-bC?M$2zocbcsXGw-RE+ZA-lzUcyRSpTy(?|{379lm`^gB`~PGx7~ zbvCD2NaHyDgfx%SbEFlV3e3SiIQ2r>&1ntNVNSP^&Tz^$H^92cX#&z;oNgjL<5XuJ z&g{==rHhf$aQXu&BT}d%$LIFh*$l~?okNh!*||;AuSn+XOfw(PR@_?($yiIIIJOZ; z=Iq>tlxSu{%FU_N0=z=z)B~vor&CBRIn7=eV2$MT0BJg>#*1*Pa$143j#KpF0Bavo zsADdYxo;&SnbrS_WLBSkiJkHynU%IcI?lb5)m9;$Wcvomto||5S)MKG3%ujw)D!78 zr+G;9xsPFvRA1upZ$70VNa36=AZ6newG^*fI88$;j}+>7jbzrGu*_a_X(Y4e{+i|? znKd6qGHZUUmS(xV=0qg3=7vbMdA5;AjX0e{>cr^{Qh!ckSKz%Br?8a))|Z?{X?lRP zk*(4y``T4V``PXzo#51JHO@MuP{;R3=00;5=_X%W^D7)7PUDf@a=L?*VF4Yhnrra7 znA4X?=GrGnxnZG>>TB)sx*?V0y17WTIUPi5!6|-SfYpOj8>E4pjw4OrlxsbXE~ha_ zUvc^qX*Z{=8*o43^eNI$oUS9?GbvCu}#7Oh>^@c+b9&_Av!1oYOX>L{1lw z3UYdfREblj%HQp0o4d=89X(Fe8 zkmhn)u{Xe4&8f~l+*+LOA)VkfW`BTniBpyXc%9AZ52QDo)*r;{u*I~uwqN5t1gA`g z@UsF=-yxOelqVTy6Q>?XO*x%I>dvXyVLWqknt?Ql({rSSobnvOPa!zXLE6RXHPW}7 zYJG!O8Js2~{mE$?(j!g}k=}9g9mRcN39YmVl3BrKq$sv@$Lu-UBIRZ~fMiCwgH(Nw6TPQ8&@a@vE`nUmvN9C1$7kv`$H4QVo`he&fdH8_F$2d4u_dpL!BhsPXFdyy`4 z%Jn^V#OW~7YfiqC0amInXdj1=+?;Zp!m|OV(Mb6@?LjKZDZ^*X?Ybk(P4Ga~7{!IQ@zAJ*R~~+H?GYbd4?FIh>P78607O5bo z6G$aE{ex7VQ>LE-tZJMpBh}^97pV!SX-MY1{Z>ssBbjH7*J`1^*v}uikj(Q(15G0| zZPIjE(|?*g7wzYnQkvQ#wdA!-P}_)PUX}i=_8O@j*Tr74M=7qU5mINqb^wxjj+&!s zucqsoQvYh#c{G(m>cOKNM(WF{*=5@sTXX{v+t1z$Tv(`rrUG`-dobHnba zq^XCdnMkX6yaSqUYI6Q=Ut3U9E2ItFFyOjAcqQ#I|=bX`;Gn|7~H zQ)5k^X6U%V&^O|}cl6ftftaaCr%p=k(y*BhO`~I67 z$-FnMhO`H34s#4e`i|2Iq+dCmM!L=ECDPxVvfsh8B&Q}wX_r#(D5OlBzCnuRls zNEbN8JPoku^G)$vD5Qs+zD9b-sroa#epyb}ZbpjX6!hF4xfN0p+hU|5obDi19n-j+P;v zXM2Nmom0ivxV1PD2ic`S9_}v|+JV^ODbwVn|=^9ck zPF4Q1Z7!0rb4bnk+WSZyIi-1vpV)9JgEWNG5KY^V#> zHlz)lvRi@H9!{;1j+r{7pE>PDy3Xl0qz9a$9D&w5PIWbnMhad@$K_`v(;FBNXobN- z9c7RbId#`GPt##d_cdh>v^&ZnnfHygk#h4KQ;~{uI*wG4(_5t4obsm%v>I{hf@Exo zrXP`7@wKTxu&*tK)Cm^qn1f^nQp4zvy-g*qA_ znKchbGHYIhWY&CI(=#Nq<}7Ift&`ka4ary+q_b?3kj$EQB3&Kamb`svi<){mAJXB>F7XFo!499&ZfNW3~rKrlUs2Kr3)H)on!zt-QsfrUE$L^8)JgFDdrhU^f{*t(Sg=ioN6I$<+KNhKBqOz5g!w1o#*r^((jxO zB0b^sC(^&1;yi&?x;50%9w`f_nMh{5`$*Z@YR1|f!;nhALLFO?YH~V*WbU=MG(AHy z_gZJ1opNfbtf{A_X_{6cnS1gPB=frc54AT)^?2UQ@pfGTQe(ElNah~jS<_Uc7JTgi zr1nT*jvGkbIAu$~V;HCMNaHzmLz=^BC(Z+C#Jy}S^=?PX%qb+hJ#sls!;yS^?LJK}k&3bv&k<-<;`A9( z9ZvU<+Hk6y6lnF}G#_aQr)x-~&9%NjYc{8YnzH8%l)rWuh-8k&5hQaoo@?^v3bejN zZ>Xa+l6glz0?E9ipM_-3g9Dm=K{B`R9i$E1`%Wz;H_kt{ib&?R?1Hq5Z4#1sELnwg z5EkaRfb=b=N_lYJa~h8H8>erO9&?J!i)VXI1Cc`3QSW-Btei6D!~K_2eND5GO0rq` z1FagIN+C7nv{X}Ifk3MdTQ8(BoPI-(Ufohl$L;A_Vrt>$zBX$z-3g#xW)PP33s zamrE{&sLneBi-Wk9O)lUBa7g*%6i(z8zgh>z@j*Z*j^&#;FPtPohl#|U>k!}k<(hF z+MF&Twcr$7+)hQ2IWdWW_y*}yPIr+;b4p#pzNHIks;jBLruj(b*583NfqT!Z zy+NAFmaU|H>$lM~2g%%%Pb1CZI;)iZh?yWM%uxnu0j>>m3`APNX)DrZPPt3teBm@0 z={%={ngYw|mNN+gBmbKGlq>v3X$G=F~ICU&%&-S%~$o=JLY8l!2RrY)Mj z(R4x6eN91??eVf{Dx;~nrv92{YTB&nJ59f7dZy`vD)t{(qp78)A)01tS|cgU zu@`9~AFGh6xMes^L|V(~0@8L)^{WM1M>(xTI>RZhdZ2ZgQ)i^xNEsZfk<8Ej|3)&8 zLm$=%wEpJ0o=A?3bVjT}O3Nu-O+2r1>W7qz({UtoZDcJxo5DgJ1Ch*l(~)X(-CZR5 zjO8##Ozl9cE2p7IpK$saX^OeFj(u%+q=m3h#{nc7@BKBO7sFppY06O7KH`Nn)zQ>b z(FU`d=a3ZUsED+Y*Sr>KFQ?~7-|?Ee*Eb#bYXYPTeC;1d^hwWQ zjv@^Lt*4yEA^pcGt|9J&o9No(NO7DBH43zHa(a$bj??zW_U#tb#9mcqB=g#_98!I* z+k@1D(;ZEjn+93~+4>=k;dBOR7E-9AbTfOrT1e&<-Vn6~VquP>Nc8E?p^l2p?T%(h zW(8xB4)Dn7TVUs0Hwwwze?Lbubw`ly@wEvp?Q6>+nR$DvO;X#bc1G=$TAEgNZ$Tt8 zTP?LAYLmsn9J`R-@=9~I4zx0Drei+^$;&CM4bEpyQ;`~QdW6)8Q=7Jd)^JW=BhBCx z(+;m=Id#{x18Fx~eEUG_G*YNzBhoES*OAOhUm}^~659dq=(%GQ(i=|Kkv`Z$>ucCC z(8|bZACkE?s#BmvpFfRP*GN82?~qDz+SA!iy}RID8{3aaO*q}|8ff+A)V`ZN^7lxi z*(Ps`=B506`V$D`VYyhpnd;9D=%OBBT^Yo**^}ns&V=r zsST$}1Mu9#>06{>oMHyzl{u$nnr9^6EXCcLKs`g2sRfN+qqz0TmABOjhoQ4j^s|QYhAT8mv?9)K&2vVry0+KmP z?jf1`N7!e!kw7IISOx*F&62j>GFKPWzG0a=Nc6Vm$W2HW}$YQmEq*k~yYn zC)mfJ5RyD@s0~qDpmtR4H!=LR@I>sFM=pwFMyZZuj_yFUnPOp%14zL;Xf2s0*&Rtp zrlXPCK(%FR`^CZ>w~)dyN|+=6WZXYEjYP`D=`>PNp2IoCo+A#)%u!3N)Bmw|*I`$b zYya?PaW8IKM7l#dq*0L+K^hfY2ntBIga}A3x;vyB6r{Vm8%gO_xT7z|%q+x)AT|%N{?!~!*Vq#4 zHpawmkaR>9$A&p$CG{|Ao~Y> zhB;A}@_4sF#V45_%p)a`)Yy~hTwc_Llvi|uR9F<866Sm=dPb_P`KHoUk?1suzvfPN zQ>GdHK8fz#>SOmv5|NHk{#^+5FT_ta<6Y|?L{s6Wtsfn{7@2U2`d{+V=kBU(W! zB^oj-%=uFD{YXbx(G}8A5*;~bo3(BYN!Q|E5&Of9(eL|n=%_1Y`;)ebwvi5qvdpFa ziH4Bwi!PBgHUGRY$G@Cg8$r@7`A3qrb_B7jh{d08@?|G!zN(0|Lu@)p?<5>2>0PF0 zB)z9lV1ZFXl3rC#ASIH%97XI2Nq@J0bD_DatV+`7^#+rYQwcg=E}}bLq6VaQMPo@N zM9)Z-MISCU8bYcmvE!tsq7+NQoHn9GqyeHlOX(OT>OuORL~s5rGjs4JN%sfkNsA<3 zKhh@AHqt>+zRBDD5`Wg9fDLk~)RdQFN2kN0fIv-OUp%Ce09~+!5w177Ze86m2E#6{Xv0RGD;4 zVs}WFMCo_YG8fGxIjeZQPf2k^Z|x3ql8U}0r4`L0+N%ztWi58Mt ziEfaBq`1B&`^*~Fm84t69MVY1mw7+^9w7RTG*^`U0R3Je+DO_j`s63NizC`jx+$u7 zkj^$m$4RfR=5f?M6y~HB-6d(+PKW7Epu`@Nii&z1F|ntlPbAjhXqZz?bcEDc^!_nA z=81Nbx{31rOjkRiNu)8NILB#!B^pIqBsxOcAj*G&mWOBp>6j?m$uQ@Fs2Ayu=rKv# zZFGw6&`WGKDcTwyTf@_|)`{|*F?veMBC*D2>G&oZea`eM=6Tc8cBHbBx{6dq^vwmj zXD<5iBHe`$MZ09QgVbMQIWN=F5>@=g^nN`_N0jkbx(6Vs^++p439rzvc%rkUlcLYB z(sC0WBspt&M3b)>HN8&jpTtg)l8R#Aq-7+UMA8|Ge~ZqqBzBebsi@&?Iztg{Ch2Sx zxc2pZsQKZ97Tx<-1R7r=<2L%@alYovwgHwMjZd zM@hRR_Vj^?HGF7h=m6=Aqy`?*I7FLCx*p_tZ1RmG{UNEhNc^u2^hWLzI{Jy$kkX0j z{1N8l7o8=Q6xDiabdeO0SdVA4Hi@2*z7=(RZuAGKm&DpSes}JFBaN0==13+sfu!r? zYhiw8j-+-c>GJr4q^V8(erLI)9wBWLWsB^0m&ZiXA&Er^_d6FvT}XFCXGl7eWuo|< zClZ@OioTxbAazu~lStHoltz>(n%{X_^dqUbC|7j9Q&IFYse$OT7=EX<=p?DTs7Fj1 zr6^J?zw^Dups25zk#`_1k<^EzO`^)N{mvfIYSIZ&sn`9^CD9M0d!p=d{LWL+Y0?`T zcpNp~@H?qQS4eM(K8ovi3W&~-w7!h-Of6rLG<7+tgyfqW-|u`X8kNBB)DaC$=y$#r zJs|ZK1rqt4@uD@Pg`(bx{my35M@jt75s@#c-?=4PPx5W#p4Ls~can&bB=Is8s8 zRZhS2iD+^zzw@Q2UT(khl_+H%liHJ{sn@Os(uUdXn_6$i!RPa4oOQb}s0%mM=Nt-2>sh}BUAJP$tRV!plTp?+` zCWSRMuI~v+uN)E<@w;c1?~^nZK&%U56A{~q*hR!*7d2%wkupx>bBjtOy_)Do(yNKd zB)yvW8FJqDyH^w0NxxF>9wuA-1d@EijtM1eX*z)sgP(3siY`-dB5|yXe_CT=su~vs7VD{3ZnU>5u)@T`JEp` z6G$sW{*P%7BI-ywCfZ0kFUtRk-?=YZObXw|{YzHS@5C2%CTZ{Yk}^r`%}Stdl9q|$RWYe;NLwiu*LRkrJ^0;K0^jRZ{myYI(Uf#mG>!C|$oZV+WjoJH zby7mnERv=^Af=O7=`Z}wJEXY2o+NE!JTwnl2OV^kz;~7OzSL5q8tolLQ%GNk5>%&s zr>H-vv*0Yr0k-Yb!Z%-Ac_BhA%X8aNmGm0^*gmFM$gNW zbcWVId!Wmt){?JnJ-^dYw40>+-3L&b`X*KmYD?0d_91nbvYSb|f4)Z2Cjp<6bWfeV zfl*nK-uL;Mq)!e^Kx`ptu++Dcqb6=}67StHt8 zh^mrKi^h|#iO!Pli%K{4JCS#CeRD~1L^+%IofM+Qq>Q2oO=%kxb^XfklozcfeL;%r zdq&cEPTb5WD^v`s41EiYf~G*5pj%Li=BDNnP)(>MGys}TYAXHPfY@Q^4ivqGsrg-~ zEL0on0ZoUtKsTUgP{x*~=J%iqP)BGSv)i9~uBHfObHqp@&eij;6j6P-CbYG#NS##p-0rmW66SZK0viOlS?XANm!F+S$~c z5h?_I0@Z`sLt~)D&{60r6dp8fq=E`Vb)eSJP-rT&0{RL174mhV^Cnq0QjzqyP#CHX zwSfjeOQ8$U6DU_#Q(pZ`mBeVy)0!1EVYEDiXCR=R*s4CP3 z8VN0h4v}=fb`^>~*u>I9d7&~;U8ol{16mIqg>FOsA%6GW(oCdL()%We4JD12*mCG3 zQp1Ou)T|_ZL-ixX8bc$YmB@D)@(nY!q=HJ4w7!Oj4JA#HzHCG67V^a(ZfeO*(y~>c zj?iS%OsVAvVvk8W%CsX)+49ggBuyQU*e1lTL-9tMeD9L92LZ%7K{H9(gNum8{LYlf zLDJSLAl4q5jMSabEhzRVQ#Kz-dr%dzPKZs0_CWWLFXd=cwm8%T>QB=CEkNuP6lIJ_ z%}R3T0I~LnjU(y0b`r5jV@=u2P+903lGZm7+KSYhh{YRc^1Vyap4NeSLGzIBAoLJQ zFy7Qs1ZqUm`uZZa6tOdig-tN|(vh^!C7?#o0B8Ypn56UKn`mlzi=^v)Lz31v45^C| z+Y9}M)Z~*)Ek#LMwjMM9T7-Nj5Q{R|l+6x(Leg4VL*tOT3b9Kh-J3<8Vw3_Z167AQ zLL;FA&}}H{R8wC%sFq)yr(Wd#GqoR*V7eq@)cSSL#8&xOy zcX2HfNUw`7l9GwuoI$^*h#HY{i58Lyi4uJ8cgl&HKH5{UePJi2cq0_=&qk=AgPXMI}|pT?*B=w45^)H4ylhQ z<~+aiov1!(x@anNiZoARh3C_+D5CF4M@1PI(EUGAHSk!Bw-^nAo3)NUe zclabWg;ZX2l2lccbg|#5Ckl`>-!zh@UL&=X)VxdRKBlNHX|QM%bbvHjVo8=#??n|z zD@bvDokAvU;>6z$*jeaM}UaoHhDX!=MDTOF}6ZJs!1u2JU z9_fA2Ba-&zgUv?$pp#JcEvEOaNu{OicIeHmCe{kt0j1hzQrkkCNxTFT_!4b5effr@ zu|1?p(njGO^h>5_BB`P197%id=1!xpNLscxskP)=OX?>2jWj^?!7jfuRy2^rZwV#v z9ffl5rtMr(>q8Sr{7<2DznyeI6uyUkj}m=M;#gcKNV+B(N4m-KEkW!cVppLkd)<6a z8j`Gu&KIQnQu7GXBawd}?Lqc&4{AXxNl_#gXTKSF6_PH?$%vhU(jGARYD1GrT4F!s z`^m)ek#tU*kYY(|-y^n@lulyTNm)ek57I9+qIXG}T8E^y^do7$wa9m!^uCro;xW06U%@H;`X{^NFCruH30@Z}RBF&W4Z=epOxf1I};{Q;M>l=gE zWYQ{$EhB9qg*yvU`<#8E!xU4UBk@0}`kXCCbP4*L-K4knJ5C(uASsvVxSJZsdHWds z)+Vu{B;H%Zaq2={pjpr!Qg5KYPM|_JsfJ3IEv>{54Oz)FH8K9g{0jLC25vm5&hgv}GpzhEBXf!khnguO_ zRzaJgJ0NpA@rd}i8VKg2RF*fj zD8=~b90-Eur?VytQy&#>zPQQL1VLG|g4$bFLSUZ+!k7vF1rq^HQpX6)|1G3``uJ;&0o=Z*et2Jeuc=cPEkIM@p4n~l3{tv z-k{h#DSH?C9g0-bq{fF*LwTU$P&Mc)s3$ZAngOkV_Ci;o=dQec=JTt?(q}%aQt_FV ziqEf9No%PhmR%ubxrB;qQE^#SIx5TZmd!-5wNf@aln2TWeE^k(K80$z^48ptVwMh@ZLq|tj+frX@C<~MWde@b=EcfNUlr2Q5s#4HLuDm5`QS7mlXyVG7+LB_=CAAAQ5}FTf zfsRA>q3HEYElHsCP+_P#)D@Zxt%oi_{`#io6i^;l-f{4}_;2$O=LwBQRfO`X#?W3_ z)v~P7he)jeRfcLn^`NFuN2nh(#+A2MGbk2Kdi5i;2wDkkf_6d&pi|H}=ojcFbRT*G zg*7lecnyjRrGU~y*<5+Yk&|Mt$vE;t`JtlFhfn~j2GxgJLLH&*uDtE?ti_df2T`hO z1T+Df3eAQVLd&6b&{kIwTT3LZwV`Wi)d9+%%IfC@uppif#IkxG*Vx4=o=^qZ7Jip`S|QmOY}qPFlY=k6`Bn#fL1|U zpk1!K{o`#lgY@ryZpRg$X=#klv{VPEtcv&YD&DuNMnV^n?>6LbWXdLi@eUB-YQ|gP_SmjOS zqjNq<{*fwH^umgOb$o|G*@sjP^pMI^N}rK+mB^5&~gvEq`i6Eqx}2d#JI zEqj<^rKRjC=o<6@@;5R0;zB80dF$i7dNAQ}msEdKqt~EBke|Nwp!qW7H7bBuW;dU= zW`JTFb9 zY)R_9imxD5yzQ%s4s~38=H~O(!bg&pQcFEbRW*m&y7HFbd1-?_tGLf9o);DOUd8jG z;(1Z=yr_6=tcY!NKpQGH$cUA15|uBK*e_hRD3r; z#diZ#d^bSFcLP*>H$cUA15|uBK*e_hSl&MK-GFJ*XTFYC@wL5*ujo~LH-P0W%S&sf zl;v7fTvo;PskjyuU&*n&weWp`xl#+?7f|ti0TtgDQ1N{M72g+7@qGam-xpwcYv%qf zlA4Rq+NmlH)q;9LBcLCkHPAL!-Zp-s*zySN@)i9WX_v3)ReVLS;wyTVw-)Z{Mk&GP z2P!^iU`5QgP4e*-y^62sS>AknMZa6}@fE#_ujpCce0)WJK=SbwJt7XY;<2h#diZ#d=G%-Ez9G*C1v?;fQs)1sQ7Mxith%f_-+8pTMPH#H>rj1 z2B`QR04rj?N0Kitjf3S)%}lXplA7I>H}!3bh27yR>tav^SKfS|Q!J|FYv{_G+LmIm zB()nf5E>0lh32^O*24EP-jG`OUIxpX%J(u7N-E#WQ1QJC72nHH@x2Tc-^)<(y$luK z%TV#X3>DwYQ1QJC72nHH@x2Tc-^)<(y$luK%TV#X3>DwYV0nAb%QBhtp6_6&_zs4O z?_j9-4u*=)ZB=}3tKvHtDn5p)_zs4O?_j9-4u*>FV5s;G1}kE(QcJJ+>`=u=L=_(q zReY_c;_X+(Tdj)EOH_PbqT*{c6<@2V_*zZH*J>)hR#WkDRmIn8Dn7!h_*zZH*J>)h zR#Wk{nu@R0RD7+bT1M-dY7Z2)-n4Pjjd|yVuj$guyzn)him&NZd`+j~YdRHQ)2aBH zj^(Y7uj#T#eSA&F@}}~-kwa4Xx{T#b<-K=aN##Adim&)oe8s2YD?XOD>>o6?{8Bb{ zbED)?Rwxft1S$`G4mE%}y7IQxi(-YPwV}``Xp$>$30}uPkP^I(t9Z>;@%5XEuiseS zvV8qkO3L!}n~JaBRDAuW;_EjRU%#pN`c1{xZz{fiQ}OkiYC82pim!iFeEqB9>tEG-)B{x& zs1q~}+5nw_{NI?eX`sScjZmx>#g>ZI+s#a z3!$aZN@y*#!Iif@p7Eg6$1|?t8CUT#SMl7dc$uqsnX7o2t9Z$%c*a#*s9n_&SKc1* za_b>IxJ0QeZz^A@_mxyW%T@7}x{9yVReYtc;wyC(U#YA3N}c7cnXl9bNzJ@3R`Hd( zim%jFe5KCvmgPPVm$KYv)eR^ioj-HTTY~3#w3Og^R`EQmc%D@}&nlj070)TlTOVJ& zPmuZ^QM;-rt&I}9@|NH}Pn8mxC{>joD(@;{i65jyLrPVB1M&3&$Gj!_Q0g2hagv@e zV|i2gShi47`Rq_NrJ50+9cpY4)uNgVEra$#m!W4+f;Oh?TTlt8I@B5(2z?K&hkl0c zLNVH!Hqt@`p#anj>J3eXRze4%>rmuxO&ckox1o=qhEP{%EVS5_cPa3CuuPW19!gam zgDyZfA-<~QeBN4keO@iKtfMD2Rgb8Iim&Kd-V#o`$j$~S5e~(Kcu%OQyq{FXLF#X` zzGy6=8}ru8Bibr8^OdVAHRV&~fQmwuphi%8XaqDDS_$ofPC+-J80}5Fsi53Y38)Ix z#FckMohY_TM$`uy3(bMnx$>6fJ;Qz}%XPU!>uo~mF zNyWd1s(3b3ya!hCepkhNTNNL{R6J{{ojFZvSS}-8cQth^daw%l>Q^$Ue4VHHUjM+9 z<)eYdCZp_3h>r`J%0~lLSvn_Fbv;H)Cc;`)vNp_vV1?k3t)Z|@rvIgNN|@^lf340KK+gLZ5Q+QK#-)rrwn9C z>KMenhZd7YNNVh^wEq*OBE9%qjJI9e7w$o<`!Dv-zOQkrhk0M)9CQh~0^NY_K=+|X z&{N3Q)6^UpiU!4k;z04C#IE#hj&~lK-bWlSkFDM#lltdN!Oq6Z#r4gJP~U`JX35MW z={qnhN#8!^cDIo9O_05uPu?ZF0`2H+Qjd`~ONn2hdnDePhOlCyVh-^nzhgT1`j{+=5y?t_!Fh-IL<+4eeu4hl&+syz8RoQP!{N4 z^Sx>Gv6N6zr~%ZS0DTXwh7LfNUH$p|Mcksk z8*2JI1)4|FJ=ca|CiOJ*kkr)Av(a<7K5y%DHj?~dz&lE*OJvV~8nQLp5rrCu%@;~`J^goOmoLkE9OPe(GDi2&uTcD}k&1scQt_`w zD*n}o{Z3*i7GyiRq+|4itp2?_&$w_&vI3KmaF13M%JINyLNy7 z;wZf(c-!KqaeYqjary*=&zS@*hxU_nSzaY+eKE%CGw(hp8%dA9B}tmE7WCpWvVF1r z`|m1Z4?0gUBkBu{gr-3Ap%+JFdmpjpKg*{jT23*?%f6(;v3OaIBJn#HK4&U4kHqh0 z_?#7p?SPIW^$O`{sfF9szJyQHCt-X}0w@dg9*N&t&^1C!OqgzZHJijwru&>VB+a)2 zsXvo+zjh6JMjArraXu&d3?ti@STm>_^d0hzLu@9r208#;AnDldL1A-DEHRV? zDhhoBRfn2E-Jn5`UDpcFGc#F+#7~~ld$=TiU&!awAo05tx<}_H*}O~N)-rOS&-wCo zp0%p;BRh3PO`*0lpSs0A9UR$dB&nS#^{;IKN6VTL_V}@Ap*|Vxb5@hIzU?HP$pfTl z(&rN-eoorw@O#_IMK>tM&usggXCys_+7a1x!?tF7&}orrttVuAz(+rwD|<8@O8NNN zL7y{$#LwG$XY%E3lwE9Evu(WU(y~4Hf@;w-qq>l7*Vb%DWXry4YoX@v#hC8RHep2e ze8~32&hyKAW#6~|d-@lu2X;x@zWm+uV(ZJdMBftfIVDKCK7S0^C1cl4s~2nGXIyZA=`%4i>>jqoS|Erhg$6Xz3Pa#HG8~_sA9{_c3z#N$H8x*(Ih<% zE<@}n^aoN?t}sWY7%L+?aT4=BEGbF%AVr`T`(pQ8s-G#Jel_A2Nzb&Rt}=6<4k`+L z34IHVf)+prpqKaHlhvlRnot|4FG=Tb6lCkWhkQ}jm|9XmJhrDYFI_37^D-txYKOJ7 zUrWmK_p0^T61Fc!-ZNyr*LRs}4g`nwptB57eyD#16T3n^;8btfyA-=7CE~18c~kjm z&D)a7&uFUnxlI*6t*PQ?K3U$f*{HtzQuZCF2viCRxbl|eJJye-Y+XuKHF4$5*OFq- zC0|FV5A+>0)s?p_|BmfX#sSBtLjq$Il zDtY@%Qdb~#Ewsgzw^!VkXi{PirK(OscU*Z(@Uu*>NeObS~AyOpEN=<^-ReCl!M|In_;)K6|8Aw? zy?}~;w^H$yzlyK-ReVLS;wyR;|8AvfPJL0egStZlA^zP(^YQO4sxe6Y0b1tDJEBtb zg`grbBHml5Hc>v7H{VW*6__`FLJROTJT-syYwx*f{1b!Aqfnl;B@@Rs5^3 zihsjZWuxDTRs74X>I&7YdIrVaXkz?Ju%`0wx+?x%SH-{Us`z(Z75}oV;$Mta{HwHz zf0b6HaodPEj!H5P-v6oIrhKaM(D-g9Ru!?jPz$IhG}cwb)~ZNrb17A|7+MK!fQ~{} zpg*A4n@laqpo~yw#><;~Zg zVofDqH)tfp`yo#CmY7AUEv3X#SKd@!>)J>vA30UrQx!jft=dFoRR^HcuDtc}Gfy3) zK7Qs&#m_vcZc+)Av)PEBdD0j^^Q7Wuo><M3P; z&#L0*rBwX9l!~91VtLDEq5Aqs*&MFCsqav1u%s4&K7`6cpF&@_^43z1Vk4xM#!zdh z1Jn)b3k`wBKvSXF&=P1Zv<=$t%G)bmH^xY>ex_8_73dKZZHr0er)@Z2#9AgwEr}_g zik~J>Wkrn7C^W`LXH@~D@)?E3_l*#&qSag=c)G)WUCstKw5WRZ1uW#J}`wY7WE-KxLq+ zP(!FK)C(G7MI+LhdA(BcdZps^O2zAyiq|U@uU9HwuT+yz^Gs+dv<>^5)x3v2Bv?AT+YC#=QA>Z@XLa@%xA>ejicA?<1=CeMA+% zkEr7J5mo#?qKe-~RPp0?L}UEz6BU2^M8)4e zVR^^F^L$Ij!S5}q_}L@X)$K-n?BSTVEXRJ6vi#i?6@M*7#a~rX@z+vR{H~=c2XuG4 zi9Ldx9VQk9dJT&2%G;OQ^tF#i(wAhEs(RCvHy_`Vc_#Vzj*W`%*r@n^j*7>|@|NZI zYr~TB9T9%NR>kkvs`&j{6~AAr;`eJ+{C=&9->+pwtT`%bR&mWLu35!3tGH$r*R0~2 zS>Bp?`Noo(Gt+FS3PPVk-$1>g@z4@z19Tj^4LyTi+i6-$3}tcU?H`|Gz9IeNw-HqQ zhJvaG?KfE75+6`438h4N=rgDm)C6kn%3Dj2V#%bIz7Wq9$GrK{(lvH!$v2krvAn6j zMDaQ4C6&)mSenYeRR)5*XUHO{GpVd?1f_y9LAjuJph8dysDdl+Tm>kWS9;Iws<>Shx2xiIRot$M+f{M9 zDsETB?XtXc#b<8$rL}65s%i-F`Jcx4>_*iZslB1W&}e8D#Ph6W*CNJGYiewx8}rTq zU;7o7UhSY%)j{ZISKbomDE5JrxCuRiV(m7msi60u3a-5MwWL@nsjnwA8k!4jgpNR0 zpvO?GJ*K{l&^u6hs2fdM5 z?s4d%D{nsj!gDprcau_8kD$nVHRdhBcNc0&34VuM#qW@_y!rT^LVd{>hiXwJfzm>` zp%0)+P&KGN)EsID^?}B?^7e)IwoRljvnW-y6yhy~W8M3B{3E6H&py3F%^GFOvPUkQ}LI?RQx3| z6@N)g#a|Lr@t4F@{3S7#w|_fmHu#sbK=3eh8u|sg4LyRKeWq+o=yfOolnhD(Wrhks zC80`C4X8Hs71SE)1a*UYLj$0p(09-{Xd1K-S_^H5eu9odC!urD73cx<42rVf%wJq6 z5tJIr2<3$eK*gZ4P(>&J)qom6t)PxjPiO!%2AT*>fo4E6p}Ei^XeqP_;wKAv{qwGq zmFU@&_Oi`Xb>&Uv{ZLR+cT+8@1FpRJ`1gt)lJ69ys`$+p)h~$gaaCi#xiN1oe9yA4 z)WY8lP(7o3D&D`SVjeKDL{LlGk~KA*8}ru8Wd}*kxhYju7%B}_hH692pmtC%XgD+p z`Vm?IZG(R$P+{m}s1DQy>f_4W170%A zqzC*BAr;>lQ_Y|fs#(x{SKeBdP;9l-vI^P^?Sg91oZ`2;%RiXg)p@RQV4X zC4sU)MW9MheW)`u#+A4CfhP1es`Q?}x}oB)Zm7P7_^TTl`;ls4d22~PZ%S>IS{{92 zlpHbsE`+A?cOg{#T?iF_7ecj+YF3>G#n~6)3p188}s&b zCB+U)Pk+ut@1Tkr6f@e0)P2wysN7Ujwg6NHwOm2IThK!&(h*ZOHk1m=4804z4^@CZ zgK9vHpl_jG&@gBcG#gqDZGtk+Fg@Le*eU1&bOpKv-G`n)zN4nTC{QdYE|eHb1!aKV zg7QKIpkh#2=u@Z~)EMI5D|G3%L99140a^m>f~H`7Igc3MUC{dOBK91LbIhcsf!>1h zLnWZkp(Vx5+SwSfj!<8S_nq2>??N9! zpF+){?$9u3Dzp&V03C!bLHz53_VfW_yv1uQ%5kIaD~!H^s=D&-57yF~G{IHdt?%r3ddperI|}WEhC->RrsZQXpEm-Q1P=1s=IDJZyWqH#yx3+pT=N$Q~5cChmy+ADX9241r4#Z!h)6`{%ZHD$iC!i~?ygl`wjO;{_p2mVwLb;&| zuDoUW?s-fpTZK|pb)e=IOspAV?I8Y@QA_kdY!Jl1JZkD##HK^bpdHY0=qBWxGPT5n z(m?M(A483xj?idmI`pmEzlgID2eYB#*--IpsCYJ1JR2&W4HeIZif2Q`v!UYIQ1NW2 zcs5i#8!Da+70-r>XG6uaq2k$4@ocDgHdH(tDxM7$&xVR;L&dYf^3KKrN=+cMu^!q9 z9fB@EH=qYl%+scp)KEUC3{(Yb2K9u-K{KHF5O34mQ*ZBAQfgA^{U&HPbQn7A%KN?~ zKg%BRO#$(0^@IQ7cs93)K^T}RA+&eWV1Dn-%~ z^`W=Un^-y0=?Ek5NwHsKmGC_a<~N&)4BK7ayHGpGkN1zHa6g)T!+p|}@K zpEE!Op>j}ls2S7+>JNPfO@@Ai)xX?DhXADszddlR!|Tc0F8lufR;iVpgquW=pu9rdH^}UnsLO05*p3nejBs39P1Z{*) zLieHYtLPP!0V)Pna^*d$@wbq!%f7unrK*}i?VyfOH;DK5TB0{%{h?vdSZF#l7g`Rj zhBiY7pr4`3&^^exW_lkBN(8+Ly#>7s@q1%Bj-qbNJ41XI_KwU@aY|KHfT}|Eps%40 zP)}$S^dqzsS_kcb4nk+4ThLP|+I7>vgiu{2PHP8&dN?MW9kp0ICf&hdM#S zTzThjCdK%?BoLefErQlS+o2=S8R%E&jw|n3P`w-G{G~aG$L4eTk&2{bb@`Zntrw-d zY0igowe`7YWc#N1oa&OAnNs=O$LACz>9<+RLa$m&sIulPzV$)h<00vn8s!bj`$X_Sw`OV>fep&D7hA^Q0>}Ot5Eqg z)|>vtUeDn9%0b0*#ZQXSR|P1QpHTBTi%I!KJ4pN_TR!IkX{F5bo-*|ACcWbr?(nk^ zyadCY_P%hpr~l5^dKOVF`i+mR&3A#bzC&_(Iq{!j&WEXv3g{14>S}4@J&6kiGsunv+ zJ2pGs&%(_dG$-lU648qWKbID4CUizaDC20Xh9Uy(|x4!GP_qeCfojV5Q&TW#8EnzgH91!Q@UwHqgd>c^0wrl&sweXYQKIhH&;qsKX&v}Q$Pip&| zawPth(dV=zr55!k@$+FmX9kIX0rWZBNc@YF&pAhmD)J==m#5WzPAcdFlBU)n@f}j1 z(~-n?#%NiR_<1S%E)H}WikvW9?i2c)3{V9UKfB;_>XUS?dO|axEzl(>dLmOI14)-^ zQK&l94jKh5gAS4SUa8NyMdEijXlqRzE_YabPG*w!sshxS#BXWPJ`u4M&~eB~V#;PB zY5$5NRuAe9O@P*rnrG!U&LS2ysflGKX?+z){N$t0X@uBtlJ&YshwyXQa6#b#2qMQaufT=RUmjFi^c-Md(d;}wX7yJsVkpjzkk4c zF8*ae_p$sQmCvb?EnJ>r@HtIM{G^G`=}*$WgxXt-$!=2TLK~nX&~?a{!<2Z{zJzKw zK5AJ?>hdo4bREZJAF-RH$C*uc~%xV+KqbGnf7hoP4D>*q>dw0>dX5Qs>F+DEn4%F z_rjfFrMOq=3eYi+6bR-ZacUq~2C4@&gW5tvq1n)SSAS2shJydg~gE zsBCGTp=I>syedFvUo3AvesAYv$;a>VsD7ieEFFh?X8FRs>%Y>gSD6hxLj3E9UZw2c z(-&RCUOY#)F{@BLwW+VFm-pG$Vq4Q#PWq)#Rp=X^yN^v)$ZUh@NP4ZCkEDCxqEK0q z?vbjJw3gaXGpH@pv~alddl_C2+LHbtz3Bu=T6S>JaHnKBP906sBLtV|DzQ){^1UDK z+@aJ!@b_Y7tBwAF5kG^*H3xz-i<{UI-rGuSwHvc*gm*38MX5b2aLtkK(L3p)SkR@r zCe{L~4wZN1t#2>Y*H3CWScBeY7j>n4EbT$WCBtiu&dZB>`I6RDzOvE!W`1bSmNr0q zy`ZUlm7qF`)JIU#k|wnvR0HY)O@+2Vzd+BR6Q#^L#K%?sCJ}uJkdAqJN95zuCbbzU z+ec-4*0h!c$_?3T#Oa8wCFzpc2c3nIS1_shpbDe{6}eZ95bFxrHR7F*Oj)}|R6@+I z5q2&4Z>$?l(Stta!ri-N!z+b5@dG@f38bW=8Kl&r>m*%*uR6O?J~cJl_2vJDbV+kx zLLD3JUclzFu~5={6`uR#t5QDa`2EOEx5_+|iz|may+xZz14Mksa4X4s$1vAt;c|B{ z%z2-*TT;uBbnbhS_{%)rdl~l5M9M1RPVvt;H6Mw;THXEgjWwVcf9=EPbRg+C zdVWrlv*Dd|{;b=6sP*7KvD`wX7`2GlS;oek|K>G$idBNpS!f4x>qPci;(iq9!R z(kqc#Bt6o#gC>!*zO5vFQrqX8Cuv_^t7-0P{3qtX?rkHE{KeK@HPz;Oxk9!3=Oye{ z1nqSI-~HwHqv$)atIRpg%vxr4*OB@|+YC$1oO(tdKuw|X(C+#s z-z_M5BNHnP^@KJ+kD)6~Oo@0+jS4}Hp^44RY%C|~{GErML#dma)PhiDs1q~_S_U12 zR<{gyVtmQ##sTOC6!mM9nieVn)q{FL!&{lLt%CZ0V|qFjS`8hB`nERt=0SEnu=fD= zwlVo^>R*?=f6s5c>N(Arwx;)gy}nl~5ywgKdt@hVEuQgLEAgMs7i#bGD%-g|)^_R; z?w;FDpJ>i<2T@Fq&J#%5#>bt^RaSMV5yVIFoOO6!+E7eObSCLusy~!ysQy|{ccLlA zzdQS!DJ0#4>f>IKb!_zsJf;BVBb)*I*ej9eSEJdO|~?vCu4N zEwmRp1KBw}(#y;#Uu&$E9$cl^22u3hMs~)p(Qn7P+<0l-m3)gSpU%}P(gTTYLX1bG z%V;;n{*csT$ajSlsUFYd5UN!{bho61j5jFQwo^q!&W2<21plQ6F6X+xH`ET@i_vi$s{il3ikdGlSO`ld*} z+t5=e#$c101j^{jTgy8XKhg8O z%=256sw(O#Vm{td0>O_cRaF(L1GR+Ox{6o}?`Z--UWZg&DW7U2#P=gKc9*tG)$>~P zpO{j%7|o=rB*e3;vAj@9C~9p}b}ZVM4E^XTVoztwyey?u73X6`%(p=Dt)f&FuUD*y z`FL-uBUg>;MsIdXtRB<~;`LNhH&M;1oe+N?L}U99I|ls<4McssCTap}f$#45n8b{5~^7WliiM#7`k<@A=7Z6+ii{;wQgVZ=>cy zP;uxZs2cPoR2ymvwSl@q{h%RGO1gWYJ@^i>2@ro1K~rZP@w>V<(2Vj2a zL(8C*&>CnxvUZbFZssKd?36G9oFd{7Cf5>y*%0kws?K)s=N zADi`RAYwhjO%FyPHUnA&t%tTjKS3v;%h2zTZ-i+h26X)GNbZ^)2eE`uGAJXI70L${ zfl5LZp)a7CP(!FS)CKAT4TmN`Ga&w^32&j^efBI$T_yYMh0sc9BeWCx2|5m)hps}m zq2FD3+x>%Ld|eg@MjL4q8{*#_G&LS#$)Vg(dFWGD-ZuEGWxb4zTT^jsDsDr?ZLqv$ z`OKHEP69zbJ5;5kvk_I_hemu}tTBF$TUC?lQ*obF+-Fr2=vye-VEUI?X)TD@NN6%N z*Oj-Y{2ed8QVIk&(b=4ezvHD^O(j(PeEEK@*{=(D%@fB(BA~?#`G*Pq#JV*lOsGt1#zZXT#^Do@~~QTu?E{YzuZPv-&&l z&DkyLzrWV~o#Xg-d;g!A-G8@N|CeUy|DS!a+lSSEcd3SI*T!Bh+tZil<5ar^ysG|u zjrgBi)3X0_zCbYZRNYU~vx87Rr~p(73P9DMI#3g+71SQ;3iW{oL*GFYpy|+TXc4p$ z+5l~b_CZIW3(#%oDU@!SnT^~~QHalcc~0pr9mHq88moYOm7zvZM`#E%6IujqhmJz$ zp}WvCDE@TQgVaz~r~p(7stVPI+CqJyanO8dCv*^SV6#x5ED!iJ9bGt^@DG<~r5v2*$*^8M%f@)g=>4ZUjrI-$h> z&HfGkKiisJ-vZ^0QJgLGkGK04;0B;mkDkMTKHOaiDlmA}9rv2Fe8GfZm1*LB*l6 zP(`RJR1<0d^$9Uo&5+s!>IDsj?7rO|vH8DdBF@V=l(5Ipd5A58HbA?e{g6Ex96{_7 zbPo!3^b0l0NVCk+vZG9bm_4USh1ko-n+f@HLiRXl*AjkCOJ~T=hTT5wC|~th5$dcZ zA9_#}3N;61k!t54)RGRhv}~X4*g`F7y97fm-v<57YsWO z<}Y8;cD!~8+O5LQft?{cayuJ#NxyuQ?QBn>P|N&P*ZYyEWjeHLu~`bQy0(X!gM{>7 ztGZ^-Ld|x(b~fxe!vf@62Caka4DCQ{FBEDW4>bq&oZp@+huRj7q2`y*OQ>=j?Ah7! z9Y?4>H$uBF?=yeHMfbq`G=Zu!%65nPLiQfdV8rZ*Mj_UczMHJ|{X65Bg!)2_V<}SC zLR%o)XS+7-Myl=e0mOcW&O-UqP((BD1sp{P03$nBmr{WY^SPDF{Bklp))8e6D+Y^Xi;t1iJ;-S5st z|3Zz;&a>U3>>9fXW$p6aiI^Sb5yVbFXQ3<54an}Z|DJXCK57m%N;{(HbId;C4an{- z>^SV$k|JL!C=+D&gn##lvZIYq%cv+)ZBIk(MN1%GsClu=yaw{wxw6NoP}{j}w+_lS zh3t}k)%7`4?^~h1P`&SjR6CCDi1mW{L&G84`!R^wCHQymUnZlCP~)(BetU$l#{l~a zmfZ$l-uuO9?e8AP8q^$W9Cj_)hkSNKb{zj(y+4Frh3dUMzS(iurC^WK|NBefmzR#i zUR(W!d=DXe+_Fbvd)%_4w9CkzZ@lUe%wAu<>bC!?$Fk=bhrJGnJJ;;d?Vc+!V%2aZ zXZI1Ieq#x>7qIsaLX9KTm0>Eh8)|Qs1F50bKf5<8h|qs4vtgMr?<^nvz?bv%lFl; z482brU3S~>IsC5+yiWQY`!;34c{=w#rxHn@^t2_4oiQaQAm1YB9u#%Hsl}GKgIK%; zCiQKo3e+BYPU_S6#b-^;v!M~6ztVBoRQs;^>-bje!y4wRtTr_neWi-unhtkTLFu7W zJxuC3=mvBLdJ6e^n(rfVU+h;^B5KXTaA#~&erkLRN%stgq4UrqDE1||kcjc`w%Cc}Lz0?;UO6$s-k9);q3j}jhswzKJevpavEo@W_ zsb!(6P)(>l^pz`byKO0!McVBK4TMHR)1Z0KN@xqTA36d30^Nh2Lot?{9wda`gt9~L zK_5aDp&C$Qs14K&8U&4nzK0e;>!4lGQRo763;M&AcXoNH=8)NqwIW;;F*UEGCZtqV zN+=&x#8t$y`K2u9V?|6YEU6_ZmF065k@R~2yP(S?UfX@nV^RlEnl(1{3?$u`98VR~0zlo2WhRV6Ku)UG65v&WHi&0gZl zyPcOk5-zhA2v&6EO|3#PUT%S4Bd8tJADRd)h4_1xy3F~k#jc6}UFq_*=WzdxzGVNI zz9ZL)m)5%^{mOrF=o6BjEmeaWK&@N_fT@4FnxJr{*36g2Ngb^`R0R^OhJ$G43<%W1-2= zEQsHX<$T_~l=Z^3vC{NM1_FlqNC@#+xW@P# zo#h=Hm*Djv5abdnE}`NQDsDr??W)3QZBjj=HCDx=RPiWPJW3UhQYGK%kal^L8hZyd ze+X5EYC|oc&d@+;0yGcW03CwPLARmjQ0&vDr>US^P;pn@ndG&Ox1&I?3Z<%QLiJsF zOYmC9+gl*W|3a_gf1y|LztF4rU+7uhYcSr!>Hg)DX3&6z?Rl73YxJxQ<2@{_vW z;yq1qk{<23FZTM^?&bgd=yIO+b$VX%6W1d5C{97YLieC&q-%S*-S`)bvO({Y{=7Br zpY4^^%S%K|-B;EuqodGG(oFit8lTg*Jbl+$&V62NO>6njjhBxLZDo0cS|eT_t9miq zd9NL>FJE0UYea8o3bY0~2Hl3DUN&XlgzWc*7bBMTin%XP0{W7q%cCnalca0Y9_S7f z^QuYB1XY0ALX)7?H|RV}M!BD)-&ei{*?;o!-!!SoNZNz9p~@t8%|UE1N$+&bLu@y6 zfwWZGeFi1CWny`tPoP)rpB)h|U+pQM7e{IT;!&e~4#$Z_u|RO}ZTgoT(MV_#Gz*$d zebIai5L*lFaOHCb+%dB;o%AKu>~l7f>WU7N8i}rwnu(&{r4q7z>?Ey~*lE%x(IZZk zy+GW1rUbu3u4VZha#g7M`cerkI|W)sIu)T^{uiKo61zvKy7!6ooAxS>^Ud1GPKORY zCyo>KK7DIfl#bL-RG2h^ME}F~yJ@Wo)Ew#$&4zYDg>u}%W#VE8W9MNgQi2vpzW@_WqG{3mIQ+PC{=X~Is;vS?m&M)ksq0|aiFA71}LX1 zZx0GkjMvyeupCqaYVJyp`|du1`W*52@$!8!r`obsww6#an;KE~{ZZT__G^)ivO=Xv zT3<_OJhThC0VNJMB}zi=pt;at=sA=%iYZ$e>H#fLL&MseoL*ha@QWnZ@L zdbbq*rE7I3-coK;S=HEa^nE>wdGql$&GScl73zWN36)UsSM^jmplZ}Bjg^IRLxrH^ z&}+~zv=IrhNbya5382ibBKCBHjEKK1sLDb4RPRCDXEzlp=B9e@G=-ME3+$Eh!(%n~&#jzvSyosj5M)y!p7k!;)_trK;YccWGJPe0PgG&T+}d{Zn!O zR5PI^5MR-As<)QalzK*L*$VMLyK0R8yH&;i@v7o~c2)7exT^SHTvhzvt*ZTQecsl1 z4lYV-{JWp(Jmphef%x}9j(N-S{je)imj7c|b(2b{9zoBbC<#pJ8&EPR1C$$j2Py;= zhdza>L5-mnP+O=Y)C(F24TmN|Goi)MT4)D!5IPP0>dHH7JmWWI)_A>F@p`Y~ZB=!X z%Br40ZzR;1w?1BO_oO~vMyx+ShW@pq-^=z_K4(tiDDHK@Zj#n~1B#g>ihE9-0pfF3 z-e!Ex`xMg>p{^Y4Q9Mdg-FF6pDM@^e9th@wibDYs*B1yjL#%_VKmP^c&yV)@H-CGy zUzO7A$In2KQkhsrs2tP+8V;?5&Ol+QO)cr6vQP_X1hgDF4TYsKwPb)wL(QQPke%m4 zY0XjhcPP{m(U!35#{6_Eg0nDh79)NNF& zrZrnrPVG2_avH>GB&P|S=5qRq(^gKWINhZ5sv_}F0BcoGIOTuGveKNYb85_~ z6Q};1MpF9wyz1|H?^;f+=%l~?jThHche|7jt3T?UkRMQ|(oH1wOu_XFm-k`f?8K{$ zAnV-%^IfO5Om=wo9NL z=ia+uJ76I(X`Ieedi4?d>oXa(mwz?aJ6*5Zs!TkqQtz1TYv|P4P8LU8{0fyg6Ll@4 zk(1spyM?5VkfX7c%5tj9sVk>vNa|M%UvFZi@|>zPvpNTH>ci<1PO~_zES zcd(MUwUmk94OgAT?}n@7x>dz*iz#z;`4e4K=OP`g?iC?1U-z`uH?5abOPeG1Z7tGqnOw7_!BoHNNNRn#NZ-mj&v2*qolN4_jC|uo zm)~KPWGdR*8c~yz_`Rp9a%($S&Hr&k-bXHR->hA+8kL|j#DpOeG`_q?hrm-k|67H zj;oY+tGHe#&XSOr8>g&v7_$k>TbBV_BD-9mly~bn{DSjJx%CRRij;TjP1stw^**J% zTNh#l8|Bu9l=5yB=j2wo^-ev!+bq*lbWutC>bXj`{>t)>EdblaokhyKRUBt=-wKH- zfjW`$Zmj_mk4X40`kchssq8(nyd%!#XxctGTN`XusVk+tbz<~p_F&4Sc`b<42fxjPq(R*fi5bE#|ZVv`q!&Cue$E@|2E6JmzS_d=j1W? ziPIfUPbuXc@d2*F{vb!_1DrDD-I^bE1zYo4QJ8pM5)$(huJfx@ob7E+&Bj<;jTQJz zf*c|4Ga}{fR}&+|-{g>(mYn)>8p~-mr`4QxaXP{22Tr#+iCbUI@q(@JKx^L8oGNju z$*Df4R-D2(MRJ|EGY)&sZc?_~v<;y9MQ*%xsoceM4h*J!w8Jre#TF)t&(-BVRIQ`7& zAt!yXwLT9{r8!mQRG(82r|z5vbNYnS1Wq$K&E>R&(>6{AIi2Nnh0`rcdG8Kq>FMqRU-5uUM5z9s4?D%3BwOIUdTo z5u9Q;9d3i)S5sZkPo*z-t5~11uQ)B_B#w*Px|P#DPA54X<}@5DRU^hx%DYl=#GlHw zOv6@{7IIq0X*;J>PRBW&$NvIWW6!hw%;`5yW~4PoQBH4hYQU*0rMxQ@kC-pyO8a1| zNO`vohUp8$Ir$N%v6S-G#ljr2E}oM(2FjMPB~r>eb_cA09J_~;_}`Vn^45uG>mIUh zKk8IENGWgKVOSAacZO2ltzv(R%dO(MfJ#52PNfH&y5N>pW)88o{)try`+L9AvR`S` ziIjJ%AIw*7_2(q^O<3N#I@nrC)-|P+cdNJ+s>-e6R!~XY3L@pL6GvRUP7aAVgE>^{ zfPNz7trO4IYs!8h*ecS0zAEH;7NlN9|MjZS-%Y%4s$N0%KetNey$a$&Yg!@ug`~adesU>M_F}qIqgAGU4G#7so#2nHE2N8&#H)#avnp3-*Q#EX{&|o7d8?Y^RoAp!SEEjiu&!kN+iN_3 zJxg3GaIN08Z?3Jb&w&ysj*CbkXpzz1Sv?S8*%t#TLx9ak9nmWVOev@5Rb2@^g_U#5I=S<5=b85sXg40AK?+4;9*g{SXwpe4^AVtcp zosj0@%8Rb`LOLYVlm(_XP;R}1eG@APiK*M!8vCCf8UB96|L61S@3-6XAMM)Ajq;Hd z-x5+=#rK8&UUzVgWmh=mBB}2@if=3Km-}%XNsayFbL(3@m-zcVu5Z5lb)~M^{%ulw z9)Q0KD>jMMyOL{IhLdK$-BJ#u}=Nqm<_nfNXbCEj|4ldH@BCcWyLL!WK8j#|(T zE2V6+(!V`(T;D$mLl<=>_UAMX`_W0BVd7kCCzER}uGuE@T3r49?FwA|T;GcN=gzKg zO8sxrsbTHIb|TJv-npeHAjIZ zrnXt$L*GVH&$C-1sk%O#{^w)hTJwLuzyDW9#Nr(yHE-59>y!BQ80)WT8BPs2^`KNs zJIMCW`*u9mdc3-bq-JxSL+$5V)}7NZq{{MEh++HZIsWh4s&2P`?lgUbrEl%%o>d0vTr_r2da9YV}7pD`Pu5fz9$!(&wf|8tSaB9IRjMH#VvpDVKl*vh- zWOXjXsWqpMInCv?lhYMW&dFAnN}O7A8q8@9rxZ?CIQ_w?%oM9%5T}nh&EvF*(@9RZ zIoV^aF6B8j;M9}TC!FSU+QaD@rvg*0es6PX&1n#)DV$buI>9NMQ~qgIzY3g!IYn}s z!D$PpQ=IN`D*T1juRf;_IL+de#OW-jN1O`BSzYRJ>dk39rxl!1IsL@RHr?t{hEros z137)k>1$3mIN4`dT`F*D!D%3;S)6uq`kvDhPM$NZeziDtAX(y*EoE&qkvDG+r z;`Aw}6`YQ6ddR7Gyw#-%r$|n-I3;ts!pSz*8e5H1S5Ct@&E>R%(?w2CIC;;r`nBLR zjMF?$$($~8a?H2J`f_T@sXwO)oHlSe&FMa;HxsOW4LA+sw2sqNPDK`2BRX=58(XpT@Ox+IGyICEw<|3;WUiXdQL|<-Q!efi8Zzsr|z64bK1@6 zGAC`RHTG>z?{k{LDUH)JPX5cRvHdtL;B<D#%VpL6P$kKRNyPC%iElSImK|=#_1v_eU&w~BBvId zhH{$2X)CAmoSt*?S#9-e#%Um@8JxCoI>+fZP9@h^UEbpq%4syGWt_9}PRBWAand(iol9`4%PEZ0a85HhZRT{8({)bz7OQhvPVaK+!RZT5 zn>c;P=_#iYNmjoqoEmWo;q(EgnVi;g+QsPrr>mSCTdg_#IfZeW$?0oOnVjs~tg+=e zHRm*d(LMaB}Xj`jzL@lG6}Q(>Sf=beK~X zC%2teKR-?_I1S-6htqyeS)2;(vbxmf)Q!_rPN|$SIcdACv86e+2MY-QeVt zY;|eIsV}EEPHQ-&ar&84{ykQgikw<<8ptVu(?L$xIB9#WE+skD<(=|@7r&#@Jaq7+~n$uEFM>##^RC2%7r3t42oMJdF z;k1|28BTXOIS*LX*8!5oDOmNg_GCUR+pxnhH#qBX$z;boE~#3muhus&ncSI zDo)2a{m!Z4K_1H~iqk?)>71T$DtX8nTbolTr_r3&aXQNBCr-JXUjN4G7r?1KrxBdu zIc?_jJ*VF|6;HGJwdXX6(^gIwI6dOzb=Vpkz^N;zv7AL;H6P)gGDtyA~ z@(!mkPGdQ(V$oECH1%jqXhj&$zAsRO5vIW6S0kJB|y&Qn$w zKTeG~4dgV9(?(9GIQ_!O{MPDMl2a{CT{wNjX%46DoKA4M%c;m|tMfaYdU2Y{-M)32O<<7A$*R#l8sMNaQ> zYR4&@(+EznoEC7}#3`B62~Jly<#003TWcxJsWzvMoT51`<+PvEbx!v0t$r0bwdORG z)0dnMaQcQaYOIHyUR)^hrm(|t~!KUiJrath-# zlT#|EN1XgFS!0KATE^)+PQP&~aoHNtlv5O^`J4`My2r^k(;7RF(;`mCIX&f6;YVvk z2Tq@GTE^)Zr@NfqxMGbBLoMv*`#_0m5-#JyhW_4-7 zX$+^eoX&E3$*J0PYixH;6F4Pty2h#CPu7SgoIdBYgVP;OzCT+dnsXY$X%?qcPIoxH zal;y0g;P6DLpjB9+QsQIC+()yr81{bP7^t8;dGgjuC=`7)Yi-QIr||c$rOXMOQzR< zacU1_^5gW+@1?rFseFI0seLcsNf-b3?Xpar&_%st{K-D+ec}X8qOVLp#7N>ojt|O@~zq6Ih zvBoy!G>Fr5BsF3k+bK>DIhA~1b!md6M)YQz!f7+7%baWvtr4Y=)P6ML)SuH#PCJm) z96xi?9$90{b85qB6sM&~YV2vYY&Pd(Yin6fO*n;f`kd1uPCGcA=k%CUu_spNCdqgN zIVC>-*Ar=(d<6M~(*mT0(sr|5;PisGmfnN^ognK9;1TJ5s<`z_h{q<`xgjUl`Ql2B zRi-vg-UEtqs?4b_lKQNWYsAvkR_BdK*W|qWkyPDr-ueTQ`b^**PA`!b92D!zzs5?g z&LtB~?G3pWKcu6wb4?_*A8nA-<6l=K^{JN#PUE=lOHL~|?d0T|?X73l_v3>(MRQul z=@_RRPM*)Lv9&mbar&H7A}2AgdSoc`!W!F{lWVK^r59DV0$bIdySBdSQ+2LSyt)1w zxE`}zpC)yEf@wBB*VjiL=cPy$WO5xB*KDpNetTufH{x~^X}?UvUs{i5^EvJ1bdA$X zPGW44G|{DcD^sg4lWUIulw5x=|Nh7-`dyS=T%Ry)fzSD>5i$7G=|7M4KWyz$H%<|p zws1Pd=^>I$9s|b_YixB+-8n_c>Y^q(Ebbd^{7E2qbt ze&=M`tt0scr;q3UpXYV$(KjL1R@c6{_WUq+`5Ea-DX|~A>89D_s!AZelxKTAhc$0F zlB%1?wvMfqo11p?xai`VLnPO6aizbX&l#Pqds%EgH#(chk4p>K8qAt>0GbNP55K zMt{NlI0Yc7E~|dG>Y`z4j>(*6b6U=6gu7L@^@TOIL9|X|kJt^G?Hi2vUhapZpqutW zrs7C?y4cH-I2x5@>IUJ4Ki)uU*~E8Q!5SS)R)tToMMpFUY=&V z%*l29POs9nOgTq0536%mr0df9AgL}ol6gw3K9xuk#VY1a;g z+_aCe6~F#MDeqSC-N6Rox;u&v;OnJAi%QodL6B4rvW5sP060?_6Dy6(5#2j(5pIE6#dAEu^`ciHc zd!&-6Q%UTRN@9;x5__bQ*dvw194e(z`un}xbx&63kaZiWx_@h~F0S;dv97JJO0E&F z+N!KUsP#xA{msT< z=n+J8IU;S{o7No1INjo87Pq#R=hTeT08SG*E#vexrz}pdm$3TP;S|p43rnM50jFI^xw7sm(jPLJrQEbfGF3oQ zw{I&>QJh@2f_U~d>Ra)s@*aM<>7h)nt*+$yD=GdGFO_qYDQC@*hHq4<*~GKHOLD8| z-0igJ?CRo5V(V17H3eN}$~5XT2c=j2-G9~J_*Xp_aD4;HHJdBB_T#}nuKrK4m4D61 zb^j2r#$1mZuiiJ;Z2wEHHq&Gv6QyGFb!xxT6L zs;&QQt~I;X@~RQ9+A7R-cDj=5uS-Zwd0+LcuR}~{O1jn?$t^?t_Rm(NKh9`cVQm*u zA(*Sn|DRrcbpQY3lJ~g$=f_0XS^U@Y^goYqo#X#=a@`89et);WuE162N{JQhnmGG6 zJ<+ti`NZ`~_sU9sfP4!vw3Z})LNcYCqfu?}3h1$vERtamdwwxWtEl?Shr9`~X^Z`o zoPqd5@H>Sx>KY^vg5UCJrfMERnnCbtrG=8RPc`j*NIosPrIHSifl?x=W+r4Tq=4qp zT-Drz%$4FxB06t?xNA*G-ptjsLy&@65=ju`5~Prp(o6Lj0J#AvtknxwG7gdp@zi#Z zBtRSmghZ3U~ZWwgXas&hlg zA5zXy&4-Y}?wVFk%cMTyI!t9LIeFIH2;!@GB&a^OQ45vPM>YCeTB^6&_zodARh|cC~ znpQ)rM-q%0Z%BX^dO(f(91;Mjt<^iEBm>d}5~w}?M#&>cS4bUg)nO$?|IoDlQvB1D zG=hwV)YT%W&lJdPDKR8#AZsD@v`89t2(k}SUyDAX`don=my$>|#!F4R0%@Raq(1LL zev^`xXUzo)YFb0>21!TMlz}wX?6enR_CQE8&6ng8)U<=N(3a!>S&DOi0i-{qwdQqQ z$zjMRkT#ljQ^^C!6e*plru?6pwiwb@OQ$|#Av>hpAXyDL4r!;&qESa6KSJ7T=cw~9 zkULV+sm243S1%zQG>@xl_NI`cuM6=d=?keKC6GkyMIA^-EtDh%HSHmtwP+Hto&k`q zS^`NDYDPoe*HUYk@@Slg%!Gt#aREwlAzwjyXtUl?QbO0Ytx}FrO>@W*NG~m$`oux5 zNU_&+b$$d1*L+DfpeCP(ruETgk(`D2K>BML_0*^vkm^!8ljJvatvO_%wu8h6(hU-! zx#PNtxJ}=M422BR5^|ibq4;%YG3qv?5@duHNm9^` zS9Fk(n&;1|rWzzjN(|Kmu^fA-Y6e4k$r`UmN+yy-Yth9Va;^oCQK%WMwVbBp8_4I7 zPc^TpN}fVyN~uQ@V(Qv5DOogX1Y|p8jOL3gJz_87AqS;I(5SPJAEb;SxevK5C7vX| z1Lr(stmc-i`n(M(@`k3xXgM2|jDWla8Lx$Jpt&G*r9_def&@ufMREfY0hy?E-m6A= zIxR`0xtc+uWsSB;)r^6}LMCa!BpV^~q#Pr;2U!o9f=604s;rx??T5r_zDY{DL%xSh z(-OBTSqRC7e4%-7Q*s&d2P96j?@{t*KHT36YuXHLIn}%mc?&XA3*4@1(jW~Xv$bO+ zW`0#OSKCN^nnOZRlc0s}P@~3C%>pfl*#p_5`TwqJW$>(>N_3vi`HJ9|2ekx}YN#mANGpq7?Lnn4a}=Sr)Z&rs72 z@{Jbft7JK(4@DI77Wp-12T0;gyu4``Z)9jEjke{?FBuS9zQaY3T1X&~{aETiAx+m_Zke{_M zl1h*Rkek|Yk_J?BOFMQ@jS7PtMNO8r@vxFu$YscF&5lp8i#^=|xh*A&YO)|NA$PRL z)Tdz)Jl1&$aX+L+ML;S;vNhi$N+v-XK<;W6sq;!mTPfjGa}?4Ca$gIiK6+6+w~-P| zQXDc9lA|rAQ8gf6K^|!0)AM4@tsz^bT%?-8kTl36Z4C993(1r+i)0<-KIF0Hc~tfJ z24Z_t)1GKC_@un({3E20lwhj)6XFYbs-;k$D#dWSOUWP+XHt|yTsq2?CEp=XeY zJ^dY$PtPGqN6qWS@%mJcr?cf(h%cm|{sNz-5c~c+q#C4<{uuAt33<&+*P1}y(8u6C zR3X(NT_A<^S$HQ?NHfR)DJ}7yrI108;ZoA@9-@$akOYXAo<@CcKsG|&)U!xD-o)Q! zDIPR?J;+HZfh2t)*C569Fp@7IIZ|RsoQm5L*GzA`hShx&l+=b4gjCdh7bppbl!f@|*-Mp7 zh4@Per<%QxW{|h^VCv&uQrCJ&iOAFWBS>XEmZUmrVj*wq7uTxJJt4~={(4ZNl1Y%Q zkm`CY$wtW6QqoACLoP`1BJsxi`}ZI<^eQ9`AhwdYTA^nhRhgZX=mDoz-T$Q4oP*MXjUWyk<7-W`|9Y<8nWXMt} z7fF&JTT~xf^CifBDSjk>Le4_o)q_YH`{>$FQld!aLLN#+vsx=TTAuNP0o4Lh9=7XI0HuNCPRc-zhl==?1B<&!U>pvbq)zX{NhV%|b{bq`BUd zI%h*tAT9I=l5*vA?Ua;RBwZjsL0anW->bP|ArGa*oma9AVlS;}t@M6Wa}rWSirWQM z^SZCDy$xxjZzSmiX$EPlFQz_IAn!xk>8T`pAcLi3k=%legS6MvE~?I+h^e zAS)ojy7v#NrYmHdlys7>AQ_NO`j|_q<_6>*Bt*AgR#LWtlCF9jNiT@ugDX(FXQrxI zN;U86ooV*dkfNyRrbmEeip?;C%E7asKt7#wWIoWFVbVwPmtk$Y*-iyGmL>W=IJj84mdh5~KUjr~{CFQUXb?LNXwq>rphy zt%|PQfQ;8u>Z;DwArGZ&q?$euw{m#3uJ@xpJ0U(&qDjP>Ye6RI2_%GZ^Q#DT@haj`{M3UgD z*i$Lm09CUA@(W~+?n81J@&qzhZ%X2*hQCCg8B@FxK$7`hD02V5|DNJ zVv;!2REKQPQ%J;qwS;WeGf9$B(-V@UzaSAS90A#`d(*!EjGC#CoqF(RYK8e~E8nRJJG|A_Xy;9;xk|D>Wc#Tng?n1tovYcv)1mg8OWRE^^ysD`W$(52xHA5h; zRmAlTy(#tC4=FFjYn&Q&9r7+DMGvEzvUPCwLiX$RsOED>FDVnLCK)mkazGEKn%Cad zwTV(TQcY9HBFNYJIg$mCby6nMsJ)Q=kW@W%f?CgI$Vn-wRAaA;*9DM6x;9qTG>7C$ zc|kROA+P!2>Wc0~H3<-3NSfY|L>$8!Qo>2@pr$3{h#o^ytRD6ha$H|UG7>TpazZ~w zauPBfa#GJG5&N|YlCHbck@u;O+Z6JxUWKF?H&GA3FId|CM}=bi!G?>0lBIB?oe_HG6Zr<&!&C9 z3Hek?@NQM()=<~tr1T@H1X&@)jU)t;0{KM`SfxgdgQP>U^p+$mA(y1=IHYQhK<-F6 zMv?`=+m09&N%C4FJpMp#>#5YIHl#A-SN$AGcSs#6iQlNsVwCu^pfJ6rfO0l zqakc0&-UmrBU@E+oeR3bYwY3G5~T=)_5FNePSVJAouiC zb>!VvL9R*(BuRxlgWT8C>8M_W6t05nKYC|68s(bcuMFgY-Y;2o9tsJRlDSXG9!N*X zL%mpM=+=FV=FAy=iVc6-Yiai~K8pBAV*{ip}ol`# zJ_})FQ_b&?Qc@DB#;X;sT|izlQb{^M8bAsf9uB;B~Bl(skhs3|NRpUlS zYzCy09CeY7&pF6Yh=<`vQlJgqYl9Rr8oH^uN<+k4g^f^>u`E#}S6Rk5)u;wR)~E!M z3oI>ZJs-Elt5Mb2S|MZ=#M8*4^_+(sfD|(lsHRXmJg0@cY2;E(L&zOS2_uVY`axbo zyp4+_!ys&T{ zkV-}joj>9n3x&L8Xw)HF1b+mP=d0fq+&UfgRpq(qUt1$hRkZFoIXed?3cG5n~e zHN@tRYbi!&lA#a}NIj#9_(%=T!%2`*kotyQe1HbB7*Ye$(74e}$uUS{NFyU4RLKKK zu$0FnB|6|aq?D-lRZVk9e@J7)ljIYsX=-ewQR_&W8U9pr7BU2*nj7g=9g-s@XRwmX5TiP-(ir`yCKpmz$}Ez%J1gm6q>zM> zbTqO^ra;PJR42neM0MT)sV*guO2WjQc48X?19vP^fWT4PoYpeyO5HV zXU)AJy$m;6PaV{Zfb=%}NW|=MkbXu>k`GX`5;DL@n5Jf51la=_WQ0#vas(o7oxw&R ziTK>banuYpmXq8=&5w`|j3APV@8cPxl*s9-PY@)3OYc0MZ4ivmQs(THe|Sz&Lm>4sgMti;UpobSqAyosFI@Q z8VlJ48EG`!PqRZ#Kt>tE4=6bWxhQ1})%*du3;Dzdr9Q2?I}FburKFOGy_g00%(zC<5jATd zF@{Ec#O(Va6AT}c&rov?GRb)SuDiS!tbk-gVvV3yO1^I``wGTq3bQCA^DATx~N?NsOAA)iXALUWbw ziR%)OSw;%=X%AT=CBy2B74Ct2Y2=U$M9pc)9K)kE?H4-Vg3L4gN#>&FIV8dG>ZNLS zLSC-x7#j~>-^=2=;3VD8inIsA;?OjX}GEx z3ONEfQuwj04cm0W;ShwL<}(D8W=X$skG1d~+ii|5!R`d zpW#Om%;G&rjT#O45q62|~M+mVtx zf%-rKAZdm-)trR1f*dhCXs$O0;xQ9)+z6x24IslICyd7=(U577bR&J3>b!#Fl(9;D zU>E1uNyq}!d~0<6P{~WkX2@y7?NcRXBk*hxa>nR9MoCAKbB6nPB@-YwP;j!$|m8)ucnj@wsM13|Df8B|1_`kwN(DiBZ>##Uza(Ri&hn41?5@l1(xn(gAYa z@Sr1~3h6DS;Rx0FIb;OnCu8|oB>{u+I!?+Msu>AMfZQ3kS+(-=&3$V14lMiNOBODM_b5aV4@lTLj$KuSTfjTDl7kSbELNirafAoq++ zk~<{#jYJYN63>KDlVik_ctLtf@tUjly(#2FDH-uf21CY4iJYut9%Lruf#E4W%#E|< zK4cx_H=`a&sUf(>L2?bxSXI-OL&s-7WSo?iB=;ckkV3XBI?g^(c+?KUh)p&o5M}8@Gk~Wa(5N}%)jamR%EhRQj=e>}UwnUN?)MP+P+irZT zI{yOs1ya@)aau{f;du5ADQCMzQW=u3zK~TUT_B|(qXtZ6FnFElGBx zrZ>dT7Fhc=c~AKf5)G+r3nD2z0V+#sVebOK=r3@!2F$&)jdQa3OkbDFw2dQNXo1jJ& zj>fGlC6lBFq$i}V&HGDLGoGZrZ8_CUheV*Jfi0P2J7grJku4@q=c$mUwtmZ0pR1@@ z4{2eW^_7z5pI}cRt!+^xDK zZJkNtAfb>Rwi{oonqFKKspe0}PRKx;JJpo`6j$&dAK0qU?9CvL zAVY0#B%>jo4e_~m+YK5uk7T&bpJXSbDr!dB7L%A`@E$$n6I;f4wZfW^4N6MeOx8rw3NJwNH4>vdGgRkl zG(gQ{TPR8S7`(oal1y{;feeAf+I*?=GRS9AGO6Z1M6743Z56G#{^z(&Q8U$+Ofm@~ zYNpwOsLx5r1SuI*Q*by(HSDv{Dm!-=2`+dikdi^N4l!H2Du=`mn8oL z+$$k7Y!Nh96UYlGk+i34AzqE~n#eYhBp32FFNCaeqEuK0Tor+i4kWID#su8o#g>18hl8D*2LU!4b zXw(#pItkfpi=dj~({Kwy4%lXqL_nNP@mX|R5=lCw8sw-g>#ADeFOWu%W44rQO5DCs zl5R`9t)wudEow4sX}L;jL;66@*s45J(ibuo@|~?A$!CxWQqGagf_x#x=eZiS4zfr} zG}Y{fd?n=u&E+45TM%-|W~Z7VkZX`kTMX4)gXC|9PfgoakrbGYYaozcY+)poA~sfezK6W9T`Z<#7vu)yr7gLHlDm*+kUwp?dBkXr2KGR2Rb$T3wE_^`9z{|Z;t9da z<)*5pB%~z7X7ATb$!17RNCA5m2|j3pZ>QoN7W?v+s%9jlC#0x7sI?Mf7M>?SO4+m9 zDrpUwD#fk6lG%{?QsU|=xdd4QDQ#ax;`1dQqogF0^n;{BeC(bL)u<_uE08kwT&fYD zZO)bwSWnfgN6kw}S$i;zIt%e=f#*o}ls2m7Ii!@743b8(Es1DZN6p*z6p}w7`CAG}rM-A}KAxpWNvE1mAk`q%?1?mcGNhrDb2RGp z1YHY*RJUi7^nrW`sbSX|sXg6C5@64v&Yla@p4PIv)mJq=A=5CbmOX{$ng&@43AE>u z9EEI!)UkU}XZu3DgDJ(E`t*kU2&roiAlVCf2&reULZiGE;oj5=@8;MeNE$;*LEf`B zrBM?hZ$lc`J?Pxn45_cAv08JB#duW1Q5iG>V;G_zNsQMVv5ke2qx)VcK%e9{2Y z#_s=~>hlp~E2OQxA<1G$Dx{sgDRs_-oP`A2gQ-T$eizckKAc3%p072&Noo(LQMH%i z`7@-4eInIlK$<{$+c%PwU4|=5kbd@AA!tLB;w@rHbCkME=8TSx`SaQn61 zN{khF6#yAwj|x{(9@0w6Dv}Q%{UM|5{{2+VGL~c1`5a_~tjVFy1yO_rl*t~k}7NQR}V7RevI}s1~OZU7Ohrz3?lYop55&;C5}X0+k~2V zc5jmRAfjfzJ%D65M674NJ%>84g`B{s`SxI{`4N%{Szw<g>J|-$9TPPknkp z4no%1Hh<{Rm=Mvi?A3*lmeMr(F!yzg5 z$JF^(NDSnF-Jfd2>~kUC*gKPm*;hl3+CAxPDYpghH$hI?`%%qQ$SKHadmPCg$Q8(0 zyWeEBo}VF4As6j|BxRHE&8c8~y3gK^Bn;vKxn%cQqDJk4l!p9hf3aCf4x}pNn*A}2 zdTT3=59DY24)O08uZrYZT6YF^lrNZ#0vE1am&%(MflrUhgZL^s2> zDp>^i8e*6MGnL$joRV^l=4!A5*D4`4Gm1ui33(*NGg*!L8KQR(H9^$pot-$U5WDHO zN!5tQ%<>S^v@cUK0X4ND4s#-PJ`HIpC3KIfDX|OJDy4)|=Yf#^5U06nud3Ms84YnW zgJ~|?Zna5CAp9tko;x_NvmW_VyRC8Bwf}d(3-O# znNlKlsXle~sH5R-PNelrhlnHgnz@|%T!B2tsMpMiw4MTc@qDbKkVKNPkn)g%W)`jI zKBR$^7bNfQvm}W+Pk?llHQw9QdQL$GN_k8x^h!}j)x%7t6%K%iBVWi&r#@RDlQ61~ znM~`s44Ee-lcdFdybA+)!}O!ubUWmPlwgwl2k;mUDQtRvrPk9EqIJUOzDz%ott^=| zyYV%yx5%1oT4861pOk=&s?SK*X8gWoFX~JEh{8IcnZCUyvMyjFgf~ zbGaYHxdAC*de2gQIzYs&T*7QfE8GNGC~G>C*bb>0Z!?M>CAvbyt?X?!r4=SZc4L&c z8A+pFKu$qQnakWk_>=|nsR0w?Zpm=I1|d5ooO%rgfzsca^^)E)%FO^ zA4qxg+IF>`MM5yDg1L%j&xQ;{O+_<>r1nuf)=BZDy%-LOm6A?1J0Xi8mCR^5e}02( zloCjzIv&F{JxFCUm}EU96H>+ON8)x|NmVnB`V4?PL5;sThHAcscyz&QG&7#W^91g3 zkeX&9$uN?4%;nVQ1mr!`)HZWy&1Fxjb2ZTPUZsvk4CH;(1e*RN7pbO>*^iED)pYe3 zRmW^eHJ?L9VpJW|cc7BKZv> z&gc4OKa$qp;(H~s<{0hQr;u+U4NUuTHP?Q~HAq7)gCqYgp7hJ=~* zXjJ|SxZNQ=%+4frAXlVBlJtk%lM+K`?_9`BDT_%0FXG-5ig#+vWRmlcvXH*!H99_{ zf55&&2AJ+E)Orp>T0sVx^+@tx!n1Bjq?x%|)pUh?3>ju-lk9`ULOwDR=~1iHWqhU` zGQxa8HD5yZLZZzys(Ao84f)i(M$$bK*V!PSnGnf+5q)aH<)61=mR+GtDTHd61EiS*EsD zjk*Mx44G}lP)+1jT$P2)H)oM7hHQi+n7K463z7m^Xf~zWT^#xIkY#2Ri8%6iAzzux zNyL#iyWv%d8Ap#u;>eeTY%mv-h$H_FWQ%!@Zsp0>@VXMR-P}ku;>Ztz>^5_#rs{Qk z&K$DObf>@OryxrpUz;g3D*7ip!-srhUL;9@oP?yAk4gT7{0KR0M$*~R;Ad5H#2iDi z3?gcdnsFr0Afodzb2%Nc?l+jW-7@>ND0VEGbd5q78fAZA?c=l zy^>FF;<_m0tm(Z$N#R@g8wa^)E~eS{K^8);n8_r*zu;4^kZa~Sk}n`Bke|#9x-GIH zryw`XY?6{$c#jow({x*`=4uOh0J&xQl8lCk&cB!eBv&D#^KG*!$$PiedhVDWbWd3g zv4!EgFlJ|x^1tF05ahm@K(ZK87xKW&pyN~ej#|$n^BPGcM6BnrnM1N2BKG2msl}@` z8`531P)5x2#2Gk~7uUV?mtn%_+ystLKPZk?BAG}VlUOh?V1 zW@p;d{P*yh8e%vSNJc@@Aa+M4$z{kjh{NH1LangPeZ2PvadV`Jf0>6@cCipg54?78 zc#-UactP?zLXWAM?;w?=#F6C7!Fw(ccSkIBuFaB5eFi|f$QnPA`H=pQ*BlK=4nsbc zl1QEFKfsLoy(5I6UmH%RMdiP?!G; zuCOCf{F^`Qdrinq)D(3zEuo|bBZg!O#Ox^~g(MSFQc4!}(I4TFAL8YBK~fRY z8uF&Y%UgAB4e1Ff?uaX^WC$cuN@uD`fQ*NDJN$~NnyZk7QtFYsgd{;qI%d(RijQ%- zLrOWq%c)Vpkh4Flwz*k9E zNT8IaR5Jt84&v)bq&{~c1Ei#oc>RX|vH~gZh@nv}A+sPA9B$=R=V-`MDJfKw1la-c zb7WDULQnBbPs$6D`jDR>l^ot)s*gDG&mmPD^+-NIO`&l77f?qSi8zLpAk`gXNM@s^ zA*7~bF^M=Dp^#dR6q2t|GYk^w$RrW_H3d@F@q*+bYL-IkJCX;f^;F2kdt{J?j$$0eY2?s`Dv5zylwyxmvJ-L-(!_Ct`glCU{j|4`+&rDVAx#}#gVm@ysHq8Q?r@)~ zWH6)+q?M!LG$qp^y&$a}(O)P@f((%|hH5TD#zTS}fz+qWbDW1#g7b9V0%_}rB58=4 z!;tolj5(_FKu9K}qr>Bdl2}N#lz5We5d3ROt&_w3rmDFGDJUg_YD)f&S9Xvtj(Q}Y zLh4HCoTqazB*ZbCWDRNtKtdh9O*}MlfByk87Si4ExS5itkQq|ywNO&_1-{(?33EiW zQqmTZBqf?^VjzbhJsm#cUu2^5_mCf@1d#j*xho}zM9gLM#huO(NmAhtJkmmXI|7!e zK3yQyApIOWNXA2&K>9nPmaCdAkPcFEsOAP_AY`B;oTR}^Jb#ulJWuDjkO)USNd#&( zLIykPT~?hJK++&X9R7Eeq(RO>hB=b&D0v9E1&MN`Q;qp29y6s(yr*g^L(G1nM$1t$ z6jBK?!l7j=nFFa08R_sPIS6SdC5YrcBuvV15--irK7@>NB#<(f#^9!hZ&avk!C!>?>1aVxvs#;9kI(T;jbv=@-V z{qd~Z5lT|pFtpN;F^(vb){ttD&+y1E`)I=;^&v5iM3Oa-c902xd$m3`v5_cf^q#f*gb_ zbR?1Fk}P+eBXPGI+9lMiapaKrKz@a+bGZAe6$V0{LpC^kNji{hbTlOC4RH*>HGD@H z$%l|4kS&gAlBtlgkgbk*k|mHDknN5nlC6*ike!Znl2ec%$ZkhAiLYsBVUT_JyQ5ZE z9})@K@9-h%0EvbiaMU9ShfIN_IzmZ4rcs9+!$~GV=A-5tM?A@D$XduzM-oXYWH;ov zBc0?1I=x%5I<)m$x28jq>?j;dtFOkIc_9MxJw1m`hW|KUJbb-`%x_zZa6@1OmdO-r65hU+I`b(*@O4W>mjDo!D3?kVE z5&K@(xt!!SNj;~}YBkEcpsK0w3?q4;IAcgoLByUmamJJU$r8Llj`Dh^h&nz^oWV3#J;**eYB)(4Bwfm4 zk};4=QqoA~L+(PFI@46=hDRa4OL5yM=W3Wm(%czDq7^kX=U{yP$LY37?L|dMIY?V) zJkX%QWrHL&d6=5&wNNTDe+WuilnRa2FV|g)~E?}x@}gY z-Y%wYolvJgNgs%~7lb-vsq;LldEXgCHQ%rdCwasYM^f5Lb$;Kuilj9}bbjBNM$(_8 zn=_f_8c)*Qd4p=cqCR2HT#_S@cG!zBXH1gX3->qGZ5r;(pgtua{ZJF`^b-FJ9gnM( zAQ4jhw<@U*`54mM89+5HXjC6(DAn|YhqDMMdF`;0_K?>j#q33CR5-+6N@=PY z327#!I>}T>S1CzXQU;RTgY1*?1&Pz!(7u(jg`^bZx|Ag( zEg-fbV$DxUhCzI#+$5O}X)dMbJhi9mAwB)YsPCv|D`cRoIY@FCGD1rH5jE;3$W$rg zN%WF<{v+k#eRaEgLeiz=l9Ym6kdi+~)l`K1A|?HIB{d+wNqI@50wFJ@*lAQFNTH!( z%^oCeAr+)}A5$yr3JH|r|ErRrELpph#6X(LnksaTeF^C-#giln(nCrGl4Fp*QhZ1* zLq3pFoFo@ALP{N)>$Ot2e@U^Cl!nZdQjw$v*F4y%R@fAxX1_|(1Ck&|ogx{=HASrb zf-ILc&q?M$Hc7cPUv(D$n?>C#-<_vK{BIU@VvK6Ba$WiVjM=)=Tq z(V65oNKGk?NxVuMT8NYZB-J5fq(qZ6hfI|+jbtEXp_Jc9K8LKAa)V?JWUrL7Bwsfl9X;FFCpJb zX-V>WSv=B8nML9QDfzKjPc4#KkXBN9(pm2`RpG zPniw5E2R|4B8a*#`_iaH$WvM4MK#Hg62rv`-yk^*@l!&hE<)asqLE}l+Do}dD|`m& zFC~*Ce>t3EQcjSRge;KaM^YKGO-eFJ6Uad+Ye>379!QBN84B?pA=X@!Bo@+Iik)O3 zWT2FbwB~h?DN>G*?1$`@@`B_f?((DB)7}^~vj{Rz`5|BdCqR&Sp{*cmA9@D7ikXllH zBI(N#PNT*_TFaUYs#yr>A>{x`5@dvwjU-1PGo>sfxdGWCr5$yC201IG9*Ji~T+{nR ztobdH3Xu9zyhs{D!lg_k=>nN7Wgf{;$Z{!(B(adaQalf+rz^i42S5Sin#(wrbDVp zsX($C(p}1IlC=MWtNV}7YW)8Ie#+)P_kExHzR!K%=gg|f)MPZZYHA-=hRLuP4Uj!=2J+CltG+12w5&=8cP@Cbt#1` z=DFyFl&g5Ibw1>%lv`LXgZw4sNp5u`M4csi@g~bu$oW!MvlK#ROF3gJ_5Df6Rw+k$ zw){Ngpp14=VQg*UD2$?HI+f03545^ax7iV7Ul@6BA zAaycxJO03!80*>~EmG21`ox7~9LpfcA(@F|8QUxUSu%S?Wy$N6wQ9R!C`M$%niq1vxGy zjO7i;sdL0Sf6lT65-FvQWe;Sil$TllfQ*+?&f*=8`@K@;vYZ26NSbbN4dH z=d$uwJpQbO{30cSKV@%%{2?WbWeX&1uGoghxYf6i2q|qWzd~ZA)U&wbF>Xj%%Q6&l zm6YrGF3kmyNm8b=r1i=XUgyb>=`!;z%l(i=QV#G;rWmq9%3hWgkQymFS>Awbl+w)d z5#&=TZ?b#~q0h@XybU`b-^ff+935lFAm2;LP9TXGfmTvdICC~+;00ofm0nJnOCX+k zLW(Ak+zc5irSNK!S-p~cCCN%in#^>wya$;orD-T-_CN}ybnw!DgV55aaHj7_e6Ez4 z=5wi44CEy#d1Fb&L*ACMnKQRRwn<56SpeBDrHJKa$j?&Zd24L#&Ai5Uat=UxWM&0R zH>7{D*c#hd+@nI74_RU%BV^_WmP;V1QaX5l-3pm2Guj`KD5FUaLm zj6Z1X9gu*}P1Ncb$#BSYDG#wsfV?Or>vzgbhI}dIN|srWU!^3nEQjbNVhx9|tcMJe zVz7Jxxj;%0OFQIRDbraz=i@%MlxJAZhm=dHX1NaXnv}O$rb9lJ(#TQ@`A&+WjO1XsPb;uDZb$qnE2ci3Q z)xS~Y&me!w%ygDkh^tg=jb~U6K?X}HV)+AdrIc8{vyGo0R%T1t%^4lCNJ=Bi$XmS*c1o%KS;#z@*$27Lq07t?rVxlEoT?5M~rQG7eYlmp1*Ir2DTK#o9WI-)ou zL}VUv)XB;v>LAD;kVhO%EJGnDq{RLrDwn7Uy;97Q0{KT~Hb|MHPJr}n7IpS=<_3rg zdDPL(lFd@+NR;bSq0WG4$jox!bz&^5LVXnCmlDmgfThThEn6K_mO{iD&U4hTtb~YO z%yYC;Wo0d-AL`6=G*G6Gkin1=M~bX`P-f17lsY2izIeL#+2}$?Ym-TmR+1FcQmv73YmH;G9HlG) z$V^D3V*^VJL>zU?9BJ||JJZqoG&0K^F*bP?vfR-lw=-o{LaH3iHWA1CbB=N;#d52@ zh|F`2JgTE!_HCH*DrA+TRLYj*42a0Aa-{dS&KMM?NmXCX71IstP(!}yxuXM14?+(=o8z6d7 zp`O_*(JUi+C5h##Udd$1?v;F&M|x#3%fen+$MQn2G_t(kEA1>hd!>ivK(9nb(K`Rq zD+w%p_k{YD&JyUAQh7ElQO4~JQ$Cg3Fi#2{8)AR0ab(#xbinYJi zIbxJku??wCGg_^8RQ@YREqO$>Lf&u`oV273veA+Hj}RJH4?*f2du?(IQtzniu`)f7 zj~pp|#Iok8^U#a1ZTR~;j!c$kdL^IbWr$m5^21~+<=x)QV#+8D5TDF6%U;Y=wn0Qs zKX#zoAB8xWEl#{MrMbjNUqNo^?Zo9g6wpZvs}!w%TdiTfu+?EFPF7N zodgkE{#!>F%bmRv$ua{Xmi4Wpj{2_7hTIL=?P!tGpgaY+S4z_9V*4~G&qBmH?{TC{ zDN%3uE=+kEnLUndmTbtgQVK}qaVTW3BkgB#L|NCAeUA1HA=YTK&yheGWhv^2_kZ>| zx@BgG@)BeX>g;!9{v=v0Q8qy~K-wG|ShhkoK@K>2Iz^^J-3$2$((Wk7`b0xIAWc&0 zSh`t$bnKPuT&}wJhbgVd9CY+>CI%u}bvU92Qk~H(KRHq$_%#vrDsFYy5iNUBp-zT~ z_iZ{IVTa}VDAOTg4LcpHS!O^)FMe^XK0=v?A#ISO4t#;=|81Y6j-tOP<8H(CeY?oy z%S?q54H0k3{pM(883`GL%rS?7uN`4)D3?KoLVkA~Jx+2HWF(}^QE!tJ$Z<#Z3Cc`E zW&-3-M;uEbCKYYbazIq{m_K`iQgO0mw;5H@A8VnK=+e)&8bB zpFuC*>Px(Gfc?aTEt8DTS#Ha3MF_8HJ zqN^IO^Er@jAbu6=g#Wg95+LHd2&na+iS?P=JO2r&&0k1Su101zS_Rb2pIdSOVyN9V z`2}*CT5W4}0@6>7VF`_X{nhBR@Q9+D3krlzud)GHdx4u}{xhN;mk`ypbK7^Y^CC_h0SMV;Yl9?LPv zTu8iH$u4c)HERj+w_vsv^5F*CR(Q2*CH1r9L ztE1HhxpxlAkyd2JsF`DF%P&ByO4J#n#*8Crg494RP_xIAxPA;%UWZ($)?7|91@a+e zoSHC^X!(6Yi&0qYmM^1G!2qV#$RJfLyJX&!Eg&$WX|&>Ry)Jkdct<)VO(+@pWJvgG^Kl zSW+QZKyFYQSe8R>g50F)#nkEmQ`kbBfFmaie7LUPrlg;d9J1XmEq zy=wA&lJSslAk)>nN|Hw*yCL_f`f`#_A%`I|)U5R+_{kjQH^@x2hGjgY&klS$M$O(p zndJ~a)Jc0lqW3)PfSB;H?f zzC)f+!_Fs}0C@uPq^c&7%!NDyc}nfPh~$093y^2jLoJR$2a*T*L5;@O-^5n^2T}w%sOGX<{#Tf? z81j=^$MQ5}HKbDwyPsO^g=~QQs;09H{ToL(da$FgN=C%$SY zx9U5P2@t0OKHL zAd*`kTOk9T*(_@zyC7#eH?SOl9D>9+W6q{lgZhRme?rc7=Ca%jISGk%*0L;xgnx_K zptFZ%D@22w>nyy9>ih!s#AS0alEbl@tfQ)o@JV}{9 zAs0hNIWrcMToe|rTnicP)Eh`ia&cwbX{Z9>7UW1HxmX9S#gVaJU zcczRZSq*7`Tzv`r z7|5;8xM5D&_oa|=kjc&hmYtBRA-6l5CQ-)g3RkX&+~KUfnIr>pC*&??{v9MwL2@Be zoiW)YEs#RUG-vM9BrbQjG7oZ(GwKmVON9&~2OzkXP*EPymZ9k;+8%A5Yh^H#FatyK`@~E?u2^PEvzNKQabhm<(e_K=+G4Oe0y z3!FVHcR~^%3!SA0C{qEs5b}gG@duKxAy+}3be8@|@-O5%$WzW1mJ590%I%P6oKYQ= zxd(DLWQnthWi8}kNQJZL2xay`iXhKA<2y+r^>Ae|WVy3b{?>ZCzCD{qN2J)V>gJrN8 zu1tn};55QLvR{)ScR@aMHn7w}9)x`COm|VH3o;9WKhW$ZxgsK5Sp?bQEc1~(4k?Fh zbtdT~+acAE&z))niFR7J@+#yDXC2GUkoO>8IkWpwrV{com&VLi)N==kU@Yose)>IZMBR;Ytrgb+xhF3emp9 zoWvD3ms-_8q99&Z0n49|IEdfXz%u%ba3u+1xb%6{Y8E67a+)injHC{d1?lgqV(En3 z0U6+GXBi$Hu1teOx#AX4t9v2$Lr!<)v%CZ;fDClivvfdaL(Xu8JxQ&i&%{+2675Q3 zxe>Ama;B@CWhtZ_GRU=;c19kPjfSt}>RG!QslMkaJuuEVn?KAm_RwS5d3QkZ&MEUHPj?jzE5Z z40Gx7Z~c@j!(zgf!;s;w>@}2`3Hb{$($%?+;7UD6@*JcY za-*x8gB{0vEgOmkK0lo=Hl zu3QSa$Cc_Qc@i=aGTn7FNU{ww338t+$0Qka9?n6?3|IY`B)38Chs<=TgGkmu=0F~F zWw7)a7Op%EdDyj@<$B2TkV01{%QDCtklC)p!Bppa$VZU5uDxfGoIX5U*#?>KiWx$3 zBcv5l;>u-N2H6i;;HqW$7IF|$>gr+f$A>FFLmqdfoK1DEf^=BeXZA7>-0P?hJ9m_<>AjmVW)uSl$6yzMp5?6Wx$sx%9AQi6a(In@L z3|EpN&$=?kkURuQhb(txjU}mt+z46Ws$o$_g)37bD_unwQzirQ5afARBTG5tF~|$9 z)LSXj44Dsk(bdfomk_Qjg}m&Fzl}0^kSfS4F7WV*w>Xbs>hwO0`vNS=ygnZ}9cTpzt!f<6D*`)ROfEUV8{_y4$E7RQIKC;wJiTaE`|K& z>XyH&R<2w%4r3Ig%auHk>XbkxLH=-+vV07=4RYMoJc=?WAvusgT}25bsTX0M0Qt+6 zc`3;}$ZW{pE;WT@8{{d-N!Q+MNxaGUv<~^#RdyXo2IOT(Uw8FwB#R)gK~8aJ+)lCs z@;>BLcj7b>-^KW}4sp1PS+0k)KwR!*`73JW${I*J#N#eyIRH5V@wzh#sLr5Eum>SN zci6)u(;$7@asS7?SpKqExl#>rLW1tPg_P-n^n*mW8!AXfUW!lakkj1x&yo~E;vxOr zQ7@5ff{cL-a5u613Ar3H(5=5lne$TcX&rKgdo#=3kXs>x+=XvY<~hinkiqV_H%Y#S zJOCNu?%7Y$?=sAUA!obSwUOKbDTAErUN>Er=jlqw639?@)_o-VATL6OxpO}z35>_5 zb;xjc)F&iakar;?-5pINs~{giM!74$B-stw1{v*+Y$owsj;jo0jJuI#5~Krif&1ug z%2Yspg-;a|)E_bbac7$(*QJIl5s*vVEd#@lsZi6ez&#Mi zrS48CC8~H{nIZ*$z6u$7-$p#4yVPCNDn2ilDA{Nw-uk%IUHGjObvi`6m3OJTfu#^4 z-sHK|-6-o=&yG{vnNsGVa4?znR(BSbt+zS8}5TlaVOYB zJORJmJ;k;Sh1}s@Y}t*2)}?seDvr>A-D#kR}{WbSvD+WM6Qnd#28iFmUA zfV z$m8x5*;DI{sVCg+1H?TddMi&Xz092yC1i`@y9#$;(5lQ`z!Jyul)IW`JfsPkXWU0m zr&gJe-H-}*{Xmjz$d8a^?k1MmkWR=7cgz`-d5$yBxf57wA;*zfg(JZ_#+-*RU&YZP z#Cp59+C62o5PB!shfKA*fJMBMEaVk;6SoSzfxOloM;Uqp8JV^2Zpz3vkk5j=<}Q~R z>kZ`B-Hl&a>l25}8*b%mA@q)7B4ndGheYX@hWkH|x82QBO4Rcp;%Ir>-Oe%wBHj#n z+uhA_F=sZpwPv|2HH|Zy+|evILMEbeojZ|bD&!_9X)F&xra<0tPhpu0xl2ku%Oc3V zkayjsEH6N2N~vPm1bGDVo_hn!Cy*j34N|OqQSYwbZtaT&$ke-ASj4^%@}WC^o5&ng zLi^%lcM4_XzIYm$kKGNFk^AB~$fxe3GGpzFt?rC(`{q9tjzae6)?ssRgxUa^Ye~f-@?tGRgh?q;Xxl38jgNQNndv_H} z5=4xd2izN2u7X^NrT^e=V3`C-m(t2|H{?c0yStNRCgc_=an;uT%7*;tPGJ%IO9&oJ zydW~x{yO5$e^IuQ`)fKfN8GiPk^Acr$S>|GvW|7E9(5<3klV2Lt-NFIdMVaOd(7R< z5*lg$aL4>5T5VB6BW<_4>u-|KNZaEsJxLN8Y5#RsvV=z3KAQ0_WkMtEDOwCmXrv9- zq6WFJEPP`H+vh#>Le;XR%u}>$@M#_5)Ea^!L)QzjPn}wkOXXO%6gd ztu$cO`5EHTGHucY@oI54`5WTbN)6dcIS=b|%1`)BOD&FNG{h-o1IsvwI1WusH>uTS z5TDE>vRnf(rRVo(ASK5pLm`n`LxiYPp-e?9k?F6c+eBne*VdgznLN&%p(WZx zWCm%qk(7BDnK6(UE!rljkXUVVKg!HU=6c9bE!8HsLC({HGk{tN5t$3MjMJs4O%TzGv0BnVl2(XVpNq6c&iurg zWUZDn-7J@AMQ2beA#>0wMT@nGSk`#0S{`+DHGcwI& zkQ=mmn;d}LsO8C4*7YJ&JIWHe4rXdqXUg@FW6Ke=%G8pj9F$|rpOBliR=G8-vE>%c zC=_#AIx9~iGg+&A)Drh$d{WS&Y+^#PwRSlhv_3Q5sWm=geNGXh@tsi*72}dpJF8i`%BDVXJ}DnvhV6mkZWY7infn>C**o58(0b;H%ng|WxWfTDaBy<9P+S~SeAW|*;3M2euao{PR-B?SVEu8 zXJ`#9q0iB>rZH&t?n7iYYLQtoBfrbJ74o(= zg=Iws&4}LCib<4LAYUT0N!!d)4{3qaY1%EcHFj|39W9lmjpbdffaN!C^`2J8(&u`r zQ?GTin2`Cdvc%W%jcDb*|&Kz^3e#&Rj-cPWvRsZJW?gp_oa>mmP2 zDP_4865c76UV0m~ng;PgKGdevK%s8 z%2Cd&gN%WEqV46(`;f6xD#wUARQW1MgLYI(iTV{XV!ryR7M3WNrM5xD3}lNI$X=#*^*Oc3lY0~ym zMqX2MaPXF+yodJgqHbgb^s5=eTF z)ty>4OXyhLrB$& zL+fgFSgVvmSF0V!9M(2Z6KnXiau@owS4!SJa*HYJAiqO?(^gBVP&PtNNZF7pG9=p1 zcv_()vV4Hd>5v|+$tEKpeLbmM=QCt3g*ZH=oDp&(#N$C({I?~%1(F8|^vXfVEJ%cB z9rZ#U3G*PQc^bK2oya@^>E~&be@CN45v{~1+RxJ<|K7wB<$C=8WinGI|7yk(B{DNy zc^xvq6DI#k1qF;GJ(hK*C!0l_J3?YS(Qj>{DRrLr&ccAI#$Pdns|$eX9|8~#(9$B#j@yF zjg->H8F3f=e~?s9WDITj2e6&R=$GnAW|_}&g(rt4G$vf>S{o$Rx=*UsIu=S zl50IhEN4N)Oy)XIGH+*b4&H{!*LjT5q7|Kkk3nwsblYSZExy~^3RP^gPPc7FGBKq~Rr+`}t5&c^4$+U^+*IS2-#9~?RdGe*uIuD1`d-5+3t?0~6gnZzsmUXPF z%txMhTP6jWk3CJ}L@WACbPc4zv%x0f+i+VvRZ{3Pk&vyPqp~ucr{X(wjhH9mLn|pF>5(!bfsWv$q66TGzRgQ<8>eXzS zDLy&>q=6|eSlt2c1yA-R{O2|-etxYyUMtTcu@;M~Yn`Dz# zNRoFoui-3gL$N;NyzBm@WeE}MGu~Tf6R|!Myty_JOTW&WW)rdWo4j#05lf%!)odb` zeuuZ~1TAY3memHi)0@XV74j?OZf}N7dLX&pXq)uy!qYcz2UixYbjbbQCYwY-^1Wr; zsuCH|>H%*wZw(=$)x%y~6Xd=SB3c!CHF=DcsNxr9&V+%-K?kC?jP! zWVScQCgMt6Bd@fkvtzsDinTl2myc<|9>&-NAKw*Yr4Kv3IeoW6f=z z@wP~zp1zDsxwl73iQ0|z5uf#zdi6`F@8NT)r%S!HQfLj|LaU|TCKj=VLMpv6Qmi#x z;Vq(!T*LQ~S>a8ijGTRa23hIt;8vk0Bdfj9*U6>#UYlOH~vPFv5>=%m%Ifm6Cl4qUiPL?Wo0s?8}f>`oaI@Twcd7?jgV9Rz%xW|rB@T@ zg<%FniaH&$K`CK2xeKzxn^r-sL`Lk3o!%UlOw_p# znVsHxmWLp-A-laBmQiK#n;7$?sFjv1f$Z~kRFR0M10u8Eo4mpjkvZV)UPCeul~+O9 zy&GyQSqC}fO}SJYhZTy*ybbxun`p~?3hDI5*)lsJzj>QqvFaRzba@xsq#JU=YgAhq zv4;P6i&k4A)==>^yiQWaYuMM9x84%5hT*=pb(V-a4qxJ{mWVnoU(qTO@%%#U3(Z%s z(h{*RyuPfrNW^mx=W#6Dr@vuIe@M{R@ixhGSf8^Y5x&J6Ex8CXz!&unNe435LeB6d z*I6OBpNceL1KONn=P3R z8S3l#fMg&t1(5T6(eGPQ3>ogrYakhc%pypb*+gX4 z_*$B&P82d-kk@_roDrh@iFZYO`sb7}@J!qZdDEBhnI$Hq)>qVMi8wYk`f9gYB94uB zd}ZH|oQKK-(W>4TwcV0okPm%bTSzWIMl9o2aVp)y8 z(xvmtH1Je#b79P(*=^lnCG6Xa*#Ud{;F2I=zEwaI0v;#s5^k^b^cIY1(wSBiD+ z@#*_X#4}Bi`N!9|k7OI_h_UWpU-Vu}M5d3fv4|&_KVn&@=ncCmBSemndi*X+L@S40 z`V)!x)x=-X%Binr5%V7*xOMu2$XL$@eR|lBB%$YnKE3FWtRrVcC(z2LCm)mEBW4_xZBfTPhtr@?dq==vxJ^@_19DWv#bGn zmTg&SSk?eN??1~Lpcfb7Ov5Z?0(vn~W(pQck+ZM6q_jS6$xO&VJ@GQJhSoYq>y5H9 zed?cuOtjuKUSzEM0E6{nTjp_OV)UFVM27AIltYH-X*T)r8(c5+=v0xR`v5}D(IYRX zR^n5?_??_{bya5Q&cI64IZr=o%e)F1u4{6gt@{A+dW;m>7aNg@*VCU6J$+i4gso98 zrHrKz@&#m+-oUaLvIjC+kCsBeCfW(PKu;bz zCZ|Cz(K}eg9jZZ)6n(QzMnF>a9O^~y?ENY|O$r^WS0a<9C&=wng5L?ICp8oFV!545 zly@N4Au~bGPZL{}impW`H)P#-X@PiZqkcwG6ynA&$LM?0USR7*4C>6&r`Ti!WWFAAtyq@TuM#~;3iazkWJ>htqas5`<`q(Eq?D+=cNp~g zkYF#1<7a{1%#s4R0j)~)c9v@);x0|8-pz6^L>y72x`tm15+m*WUdcU1YbdU9S+Y(s zi@3%Kc|wntt*p=ZPwG8V=n2bR$ULc+Qbu0UWW*$E`@qpjLcF!^>G2ODSZj%v7>G3t1s$9m^WX^HMgmZ0eQLKdipLA~UO5 zMBjxh(_3UKtM661Mj3fEe*>8+y|hczp*t||LsseaGGq1qd42V9+0)*$@PMx}(Q6{JQ7@KDw`M6D^&Ba*mj@&Bwq8RS zWe%?4;>g^jH{UMShcY9O*`&waA*4hN-Fd6ilUbhNR&{y?i+DS999q@sIV_>Ob9H(l zOC?%~W4=yb%<@LBXm`r(BYzD$Mb?R75&K=pdwR8OW$pJ5^vZ16O78cok@-N6l0y4^ z667O2S=O=k`zQL|LE=u1bsykTZS`$#Q%)DX&q?j!Bg<5)uXky`b*b4A8l!#(;sDb}5?J$eUAXbr#9 zjiFRIw1(g7?QtZbHT+TEdmc$>4LkHsme3j=)^mnYCbWi~dI3vl4S&&-r-|7z-Nl-U z?fjcw$|CM!o$?r~P=lB`&VY33kvGv^j_Q>ZmLa{8#}eNwRV)|uN+U}OBzu~u zY|zr>xh&ps?b2KCmTM@b088)ISKFir@|T`(lgA^x(<9zpH>G7IzfSfsFFEJY>mO$QXaYqa+)+&INw`5lcj!WdD>|B;syZ z8ssv6L!l+NK(6pNKSuI7>WEC5zk^!|5t(#<^=!)QfJ}o-^v4#Fe8+OVzlP-(mK*)W z3n+68l8;t5`J+lKnFqPqUt4U+63DIo%z2iqf=uzJ&$VPd=lUC2LZ9E~`tzxk9QnUPtGWJ2DKzpQhRpXX^4_~O@-Ogb3>KBGQR{JkDNAV7 zTIg@*u|u!vEMB!wk3B9-|Qsj?h@PL*|{Y$8URC;jy#y`#-j z{tlMVX!Df6EnaRhIofEb^OV2QCXtY*{d$b-m&}OK<{5vL6dGI3MCKWPmQ6-LminX5 zqRL`y5t(QGZJZGzGRyr@LntFgo3W58e+Rb`awTMyznVpiEuzlz{%o6wI@SI%t|LYp zQRiiUrcFehHU1tJF}8@FzUptZiRkHT{&i>5`iQY51G3(qV3TQ(TL0p6C?iIjM8hkWQSA4(!dn^zzWe*Daf9My%q2Wj+2okt=@8&T&Ae{7s3qRuvd&M*=&+I$Y# z>DO(t2eR9rJ)AOPY!R7#{sztn5t;A(D(_P<+H^qL{pl=Xv=MU9U(O;%8zCM3mh-8y z7!!^`4*P2pEa`I+&p7<$qb%`5e)TUNY02r3-~7!ZEQy2s?pJM+1Uc@{{2yhm#ki3Q z>Go$QT5==gFMsYBOQu5p@n>B~Qpm0T^>CX$an**DI-TVA$lNsoNT3vkxd*?fj}E)#KthBoY$A@;(*jj2Vq_E2FHnCGRTd-LEVLRBXkif}n~;HlX4%Rb+0G0^%ZxRrJu^^D zt>nnI0Ikjpq)|qGj#~nW2^{5Cp=Y&20?Bd?Y0Vg81M7HJ8Jg3^20BH~@%%s)OK8S8CZO_MG&E!UUm%htG-JFlur66_A8YI#7wBLK zjlCBIrtl~##@^NF>BWI!+t^D|V;g%(npnh)k>n^#Xf(b!P)f^^qp|o_)Wv~Jo4kx= zr34aeBF5+Ofw+t1I`@vxmj|+0LgVx0fu0Px-{si59(67cwAxiQYa%vvI0HaN{r8<&aHu3n}|BM1s?+g@;r;He% zk3;SXv~Wg<_Al;G1ro2Ij2NF!huj~CzTA@0kcR>>X(VDaz5-GhNW03CTOdV&xT{IT z_$=zo3-oX+A)?OXfz8)YMvTw7kS7BvHkk!^CeWEq88I4*%+f%tO+;o{pz2!6i1B$L zq$+?Pu#(pcF+K}f8JNN%#%Cd`191~6vjQWM*zzv~syQP>Z26Z08GN)n&zV;OwcJXG z$gB;-Pog?voG(Y^b%D*9mb?gAAIQAXlD8ml1Uhpp`4I9}ApU0hye#T`1=$#=nrdaf zgVY5yTjnU_{Xn9vav!CS@=+lA2CJ0;*&2wx-jW!|=K)QAwyIFX^&%e96v*MqLN0=Q z6=>(B3%LfeEs$!<+y>bhD7}>`i_8qj?m+r2mduB=1+*+nmO_3Ar0~+kbw@1y$G~c? zEJQ5*P#})Cj}Wo+!+|1OMlAi;fI5XLi;P(M?}5z8mWZXF2-NTzii}u#PoS1tIdND1 zdC18?tW7pS9Ko*JsLpWC_=4#+5t+zf!X1^ z2@#ptU?XMZbx_E;!J<25D|sChXKq|DhDBTlMdrMqb{A#Db?`H+&+uRaXM~6`VMH*R zGvYcZWK=MpwyM07^9@>^A1q@L*FhnP!5rDjx(;3#Y-S0~@GlHz@UbDTar@Bf!k{LF zX81or#szC+Wow3?99%8$_E`76E(sP(q5E3L(dyD*GJV@Z5zhj|(}9#=*InYgD3Kzb zJ6sm5x5-Jg8XqjSiK9;+*LO>{_VFvcd4kSl^+v_7(OG~`NbLu*;FkgI~m-9l&$ zM?=zrsZy*vZxe!9EdRsNBJQD02YDDwIjs&a0%P?{Z`5^b~Im zBsW+|qU0d+x|BHCszeb_>cl(J_Xe|8;gccn(@&APH@J>O{;I%s$n;>3loE9Y@6+i) zeYI#+qCN@{-wK}|jA1F}%zeQ`mNL%V7ffR*=S*I33d>5)>mOY%A8BBUX^n#AVHuN+|ZJ7p{DID917 z{Jd->kHf>rJQAEDh0gcmkXgYzS;smKX9qX%9`rB5oh4-E1RGffK~Cu_WG~Ao&dd#V zv0TBKxj}WhIHF3_$q;dV%?n1c%z%h}F)tX;GM_WW!4#I~I8z+VWZB4>`N3S4k2y0x zSj6%*XG((QEC)GL60BkQhcgR;^(_6Kr1e=4Y-TwhBA+D%+gZkQrZm{iawEirt?_tJ zyN`N$J4BZf!*VZY76ubp9_7r!V7e6R+<79H!x`~Cmsr$!A{hCc*n>-yjfs{$fW2t~Ffm8*{rBo=@kY!RD zSy~}4K~@F3Sbl}P1$iN;b1w!wjr*&Rmx5X6%B9QCAm2i2f|^Z^LS7H9KF7+0ozh3y z7)-EVB+7_7F&YMH^E90buuc8^I~Uk z9ZN1moXb0dEi4anW>>I-rIa(ff_e|FPw1WY)?nKfc`cB8P%OPQnE8O{DP0G}Z>qEg zJLFcSeNlz=`8HTOUu3Mkvo~06%hVvVFW9h1Wav8h7G!_0#wOzL6MY}7T`0Gze1<6G zK(Iwtrt{)|kRO6oGDGq{>KqIf+vIadM=(yVvvn^26iksqd#44NpMn`%WlxpQdHehn zjBX^^4cQ|z4J64wLJmL<2Xkz41ac%;$8}sw=$C3bgGX7;fE+`nGg#LC|F`Nd!DK1c z7W*aGBYz>Eq;D8z=0UZ@+F~BaZ^2I98sfL|Zr_8uSiyvYqB6}KgmeX?q|o-c4)RB^ zSoWRdG}P%1=Gr6%@>j6xKU?hYV6AP74MXPdAb#`)%PLV4&@XY+{T)n|%PLVWgPboj z*_2VQg@|_sdV;wxi(`!DewQNiPq0!-iF!BJIT>8XQratDrDv3g+`4b)1m z;S0zZMm1&R40b)_G$TgVv1ShajC?7y&hH^Jz^IW@qE=viwm_nddX`lXu}`CoW|q)1 z@o1x+r4AYSomr!sMT}!4X|Gy)r%6`MW)b}oGT6}8ij38-Ax4`NdZS|}GDD0!%E*2l zfSh9#$vRfQh8pR!tiAIqGUpi^3M~=u>BSq`gVu=DgUm=HMxIU98F#+XD35RwHN1~9 z+UT*3NI^)V(Pk6z7t<~o2LSu{gYhTwH<+2wf3sL8KqtGVLLT)tH z{ipAlMuV;I&m)s*YIwdFkR;GS*9JJ&!WyB6ChB-e)s9S%E$41?t=h`3fxF=AP6;LL4C63cCzxy`7h%JRzi9V*{$Xv5{!koN%&LGCnS zSi~_eB*#dXb*y9l9-~PL9rM2-bB|F<8F|eA1DS3l%R1IEpJ&9pB#vh~mwl)9QDzuv zQc9F1Si{pGGmV&6M5aV}0WuJhZ!G4_8;}?&bu3>)hC&`N+F9BmBcx<;oqr)okOHIh zWvcA0z_S3zqeh%fCPHQzmE7t^WNwDcHuBIO>numeX^=TaiyQy%zUGirJghMjVhMy__qMPC^0s${D^-alhVM_jeo_m78tE8{%2`f3ye-F z73#T=>}hx}&WNL)$|Gt%>XaIt7-7*lO5*e|qPmIkhFF?ey8jSSUWGm%u z$Q`KDV6?n$$#lpTBg~e05VF;%w`GbTpBbIBhRPqPvjFnBk^L6cabn9Yl2Z1c?fivN zZQIVzBlCq(C&l_y`-M>}?|77`$*3b{j9(aSBuWNEdU%>lpK}^v8*4Y6tdiX zHNF7~*=8(e5x*FDR7$$M!qQCdPsny7hee#ZLUtI{vXyn_wi;2Ck!NlnwU5$jbWlcK z9XyadMzPFTXYM{D+1Ar&WcC|zQmpO#J-*r@_7|Ol=OXjH5hKqg>pX2Yn&jRg8I8=3 zMy~CwyclxGNVkdj`>;P5MYi))$YCSTcAnl1Ib!74&dRG$=NBX0CYg|pcC< z$dy9p>Fvn;W;9Sw<&5ZVDK)QKds*}y8Cy>aA-@}?|LN&*qsW#iMdnYV+SacnkP}9! zO~l{5{o81;^;AfY(PHcA!;pWBb+&#zhdPQ`Zj-f;zNY%H*cVn$PcfsVP)}=-ImIm6 zBKxH-!BHp9&u&m-tm|4&A5@*89W|q+J35T2QEMsu36m`PQZkEvR z37=|eTWRT`-xEI7jAnTimBm|v4l{wJ79yS|JIqv;_c^1QSu9&PqnatSEP0Ll7(I2G zVKx!J#^y6qJ`+o)bEgTJpqa%YKTSX)%sg4ydcxAr>|_Z&Vd-bKG|D>iY}$!d{mdy+ z=+oZ;NR(M1D_dvNKr{YBv3IPIKibTcQlkEfUi^$!XPSAR%F$0f0qKGaGL6krlv8lc z{7XtTwUW};iBCXg)Mu0#jEoZ!V-|0ASCp;V60is5}NamGn-jLbN+E=0g2p( zPoVNeX1<)E(UG|XaepjtxfJTx0Q6$ES+$&6iGB@&6q&VEB%yv4nZ`3Sj3Z>iBghS?!u8U3G%F&&N34+MM@4! z5oapRLY76GsWi)3mUCtq&M#W}E1X$oZf2>4h%4H1vxVgoh`6FHH#=CiL&Q~hh1tW> z0TEZv6{fzFDxZW*#Tr(bF)SvYncOQSiA6l05x>OpoSDIr1Q9d*=gb@y@x(@~&q}k9 zWmdC1%$ZeYN{?6{8l&>D^wnk-ix{JXylCc}5E*NXdfCkVTegzp z&tu5EY?l5dGjis+5VFQBkaetU<*R0oTsmDrUPR_Kv%XTavSyVV%sN}JT$Zp6cGf!qn8c^q5Gt(y9AoXUlJPWM3 z*865Aofq$b4ez@^cgQJreS%+4Uy%OWf7>@4)Y+m@)Fx7WG|7qnZ4=)%V}f_s>jC zW~lFjP^Zc4+F)gdL%uQ_2FZFaX zWSf~O*T>q+EoPW4a}P2*%v4)XAB5~O<7^U%etm1^*m^2tw^?oLX&=ZQGu_tHBGmcL zOti@&NSj$Emu~g+d$U>!_4HX}zBkKHwdM&cr8G#Po>oiQ{DIgS)UWp;KbVU@u_XIP zoHJ&jE%O;Nhs+!~i=%zo0{O{Iv&nGu;)t0gXN;&GWo6ofXFz^7Q)GtZJJdO9 z#@XZubCeb}F7z|AEZ!rlMIr?U52Mg?ido6PcP$(JvaY2SENXJ4xh- z9Sb>b#{W#m#tEDSV)Q$1rm!e@_A5re<7Os{10phinz<|{XZ|#cSO#;Z+bm}p!I^He zhUFs8oG|NIuHnoHvzcWwXZ|wVS?=S^UuNX5Vx4L98;xH4ZN{^R(ND-pvs<>ZM!!B0 z^}onga`a0^rcXqc6q=!>LBb-^WF2etJ2hhOw{rW)`Qb!l)QGxPA$(pyyb^anb?SEoJFFQ zxcj{iGBhHazc^RBZOEZgb+f=ghmJ< z7DC8J2qAo5@9TP>`<(guhsV?Fy3V<->zwQSygTViDX-5%5PDXUuC%ed1eq!_OU0HT zw_XP_Pig(v)|;WE`Z9Bn*;g6&ZL9l1_E!dcaw@jW1C&J3KXU6OS*Qd)qcxP<>LSR2 z%BXK!%|<;3EB!t>29m9`h^2d5@1aVUZ|gk;nM0LYv7h4a4X%>g;h{>46!De?-5Weq z8DnwZXFF6G`J2{fdEi_02HkZ$RB4z%v#6XQ&l5H0Z6`#`ke5RiDSdy5ehzMjH@WEU zXDjV2?{nsCrH5q*Le~!GD1$7& zLFn4y9L1DpDdIWfG%WpGC7p%(hva-^OqBBa=RZpKM6Z7=Wd5U+36cG?C!|El6ZLrg zbBU5NS@ecDqRmI9RB4tXw)sOKmnrE%%2Wl*8s#>BnUceDBZRj3%asC_J0ZuQ)D=nz z%cGDJg;cV1La6O!N*zld)gz>tWf(&H*Of{K%Y^&nvaV8kSro`=sCk((#4-bNrjT)# zg`6o@l6H`-IF2*rN(xIc~Glb3<*D8f96E@20+?$nBmShNB=iaPTv+Ti{bxJ);7H8He zEi5NNXnoczoh&5~TAy2#K9-f7*`N%w)N|%mB`{UC>ru|sDakCabLKWBmE{Z0{8!0j z!OIC^S+^^-yND4KZd9_jD%M%-rwLPWZLZ`Bk;m?xArC4U$&}%9(J%1}8YSq<7|1-LWKXAzJoDTQ z@~D#PlTsX)A6Jrv$YVE2t5PXymdEZQ$P>!APv)SWHf7K!nUH6cTCsHR*!`^1BwHcQ zJQpGJtdc!Vv@8A>z@Ak~rFegxTd8L`e-r<`Zl#mulDHI#b(T-kmx!9X6slS7DW^c% zm70(cF|!pzo>Ox6AbENFRj6kT{$j~`aLpY`F-s6{MN!Q!DithFTeGjA(JEVppx9i@!r zLC(CZ)Udq3nO>!Vw)E|%?^k6!%8j-eL?aSl=@yNWT7ue zz9FQP82l79qn&mr4pOAW%-yvHeKPW9MiI3p#F$(Eq2}6b9djfTdABQd+bKYzL0;EdY0QD2MTFn*$7z#38-Bx&qH#B^s~IjnF;DB%Xgfa zpa#?AvL>`(i^5gXc4~xWCkWl6-cC(tnGRWitH|xu9F{0#FFd{7UM*nR3qt1r32F(; zLI|A$B&gY@DkY zzl36{*;2%NGF_<0R7+UsJsG-}VySg3^o24h^`bYb0v2lSK`BceSs-c-q_fy++Cm{> zEC!GXtNjOf@+V}5n&*>*UGVH!&EJnQdY1f@gm7kGsM#6=-dq1SIy;8^lsQ3)RU>E`y>;xP^}kB_r~i$wN;3` zOS}k~1Jy1e@>d&238|L7A>KK;0CI$yvOleJRe-)Icd?KjnF&0AK3oAgT5aLXW00F6 z$Ep1+Z?PP&HXbPJ`2=zsGAF7nVx8rj*$l~7iw+W*p!;sdNopC3`)Oj>pMr z9*g^q$H{69%Qslo)2R6rwSi?6@`8|7mVY3$=N714EK?qndv1Z+&k};r(eqSwge4V1 zN21fzgoEWe&x346&8Mpx%OXg(kXbAzLf(ZGs#z>&Lp~I;goVDXJODXEEoPx_D}N=V zoaIuK`W|woTFX)e`B_LK%WV*PU;Qk#jpcp_y?1(+I_pqcXL+pr1Eq@8Y!;g5NzPTf zMJaEdKVPlL7Nx{IpRg;g#MQ1tNaQ@91o@9zDC+U%`HR#>A##-GA#<^+EuvELs_kIN zC2EZj?>pd^s0}Rcm|mi`vbfvErD_+8yKP*m_Orwumt$J0j|)CLBgfuL{oR z%w?*^lFgaR)LAU;=x@)KK+4q? znGwhLt07mbT`V;2Bo%6Qju_MUIns4%CuSM<9BCyo*QqH&tfWqY&DDZc>L>+-+lxI?m#5 z8*9`g?6I_sx#xAYY6^>cURSGTu(;=SYt>v9_q=YcTFBy_*WIj^vbg7UH>=ew?sm9N zt!Ht!!*yy4i@P1JS36nU?Qp%?$18$?1~o_2<85R2 zsOBkReZ;Z*Q)C)d`YI%PUdS+HqnhB8-ysjEJ)$0Y?B0Ibgg~>}a6Far&b1ydu`GG)HXx6wgC|odDNp0L+^VMKlgMK?$rI|Zs97GnH$k3M={tW^ijLhWsOM=l z;FGzKXVv86L_P6eT(+yTgvev}{>ZeeSwiHo`(PpKIYaM;9S3E z;0*m;>qf}i>L6!G9*4ZA4vD322;7D3=LJZgYA%sWzaR1j8e^tv_o`%p?_p92-;{HDOH+AS- zub$md&u?l$kth2={!o*Bk_GuoEj)uVa$i0I@{ihbmM3&(zMW?JGAAIjz1A(3CHLhs zAQQC~pY&kQovihoP4&pVni<;%W+yU7^YZDnM7oeU*t-&W{ke#(gv2^due5%$i zMDE=ykeRCW2$6gD4MI}Rq@~MuSN;pxRqK^)7yEL9kU_C5xpzMdQM4tpRDAE&wXSny zD`;PS78yeu=XQ~FK`bp_5Vz5V?hty_rP-`_>%9Bn{|+}}SEl3pTO zDz3!8gPf;z%H9zB`;S8U#j@o7{tx6oT9GUj-``8Lj#AkQ+Pf1KTz_e!+%6IwQmQ42 zw#)t9fn2U-a4Fi~=R&U3@;O6$cP3<+R?ZocBO%vn)ne&#e?JkjLThKC{rxP+^;+E( zv_5k0z8X@kC6);hd-p2H4O)c|Z|}ZAThHR|-8X1WEbiXDN^56v_wH3%4~u)wf1@_Y z;-2&0sEx6>GeC`&c%|%lcLu1@A}sFSy;@6Warf@kS`Lf5=ia0hu(*5fOB)y;qUQJ@;YA?OK+o$J=x7&{D6Vj2zP^khx16lOo3SB}jwT zaV=%4f^Hu+XuT|MA2w)1EOag0gHm^E<1BP7{JxN+3R%x6wkSH6xJOH2nec=>m$*kO zWZ4-)nR~TTmKbO5)iPMzS-nxqWpQWqMy+ExElbXRpJ3_tX?-lzha^o}wJ7EF;e%R{ z%!oex8kq;R1R=5ye}+7)jY<(2dZy5#wOr@*VL-+8g*I3zMD*bl$m81B^|I}5A3m-n zR!MRD@Nq4|LVXxQsa7qWh59fmB!}fv?w=>L0+#E!f1c1vSZ?LalUgN96K9^(>R8;d zcuH$#amV5*ZHUDki#BbX#T|<_t%JoKi>I|-7I!S3){<7rmOjnv^Ng0lvW3^@87+h5 zGtNA#<+A+3nP;`a8>k*Rrm5(ScCCzs#+2j*tx%Nm#`Gnvt6G#2TVJu#xx)Dx;DCo#M>`k*Mb;1|JB6nn#n?AdJamx zp{23Vm@XBP&Ek$}x0cW1j%l|>e<_J-cE@y!R>9(q=@zY>W#yA{-+5E(VYwYb=jv~2 z>sj16^DV83#ho+X(h}FoWx3oq?@F z%9?2n<$aQ$gan1imi`X;Ny~hA+m`;Kbw23HL=A6EYc-E}Elq-qX(c|Hj=z%eho%XU zEhYI=s}?oOmQI9>YXL4rEj3WjKiZHlvj=2?o-5YSYw31+k!*!%>0D&C)5lrf#J+v~H$`cws{Lk>l$1bsbc9LSMEx}*f=Lg;zZ zM7^-h>mS-SCh86NfA02kHcCy>yPqbJ+eQf_sJHm!5cI~5dZrNBVrnf^)J(XoDMv30av-C`sJt6c~o~4&QN2TOE z_6~Z?)@xX39wUkBouXI0c`QZGml-if^&^v_cePVJ^0+eu*+Xv<8E+ojQy&r|=)K=N zQ&07c;14J@Q?HdGMsOT5OV8tVz8j@!1ZU|*EYCt{1ozU*Sl;8zY`unMgfnyWL{W29 zkltO{QOA4T`oK%H&T{*)g_Lv(5lf#5nX3Fq4;ad5ug z!{QzX=j($k?s0H|KE~o62N&pxFUXd<$H5Fe!r~qWGxT(pb?99>r`=c2VQGTUad}_8 zfaN*P?5CHoyuq3M^z|KLS>hO%iyqrwAC(y)CqWkKZ7)*ByMoTrTSP|6S;!oucZxBU z^Vo%uL-Zz}oQyf@P<_1+IggPn(i1pCv(^!i!}M~Wl%bv@^dg^J56RUl#nQcb>?pmS z+eNh|1E;%fF zLw3Smuvjl(IXEu0Z&A&1?|u@?TC6v*(B4gQj9wy2d3*N~JzZwR-ra%B61`Vu#92x= zu2aDi+kODhMvaaUU#3VXS2B1-Dm3gEGOp5UOh`+%5pA*w$-!r3KqJS zc^54$($}-lwakY?npwU;Khv*7&(;e=JH-2W0GYG(G8XD*l45;Wr;OLn7w8R!C?)#& zTVyWKbA`xR^jFA*`g&21*Uu&Th{(w8Cura~wcgF^vlw#~&5)Pr11zUNXokF8A7v?q z&=z%t9(-H&>SYjW`xW~5L&10}l2LP+p8T*BY6ZzMoRg4vt++<-lBGl|Y-Fy%If=-K ztz`yext=EK@mg`6UM)m!Epw5%UN05m{k7+ndZAcDxp(i6%t}4@KCQDi1FX_bU*<4m zZqyU{C?jWpVc}}lQ{#jRxjgHG$$0Gp7na6PtJpE z&>O|ly&2$Ey`6iNW`IkPxmC}8oO+{5yia?TkOV1#_tEneLed@)nZO`qC8SOte^km( zhhlvpx9OQaxf^n)UeV%ZS|Io6xjuOwa-UuzYYr~N?7kUtzuv^M7}6~yQI-mx4tYmN z-(1=W8A>KCjh+ZKxVjI(uc|^~Z8L^G+26;>$;!^JSN?P^d*|e;6fxj2y zO*v$q)U)S!?OFtRN>AlAbmx|*^h_3aZh1=2V{zw}Hob_&om<-UG8T7kd0MYwap#t& z^#&HV51-LnS=>H+M(<{E`|w$PfW_^@XZ0}_cm8SD3&nWJd437n)vlMZP_L4_px27F zd%gOSUYaJxLiFls$h@Q{3z75B`H)xi^`ahc&wW+z5g9rET#U?XdiT3xl*P<{HKbcF z5F+=}O2`&{>A&{e9$oWgYLR(c&-CrNw?p35BR;9dUiqHh>)Ufl-q+iFd+x=M5A=55 zetIA3`ABc{$zzayy+JJ9+jBqB+hi-mRa-kUpXklKqFsS{>=!Q!De}n{$ftVNdvXhZ z2pO7JKh?)%CioKMU6D!okTP;RjM!8vU$m<#=>FxCt@=_H_b;Dp)hk%&$s^S~ps!~+ z3PLmXfZoLN%cpYbpXu!^+i#V#`e%9%%PtVA=W~6K#pcZC`WVYh$ay$ke4!_ab;h@7 zA#~07h2HfMwL)%VbI^)GeSn3wF_N$K3Q@}2#=g}HWJYXb`y%tLJ|r_@&pj0Ky*@57 z-Zu7wzW#tIqQ_|d$wlTzy>>q-v@f3u`AN_EnAXSprNGbn5+Rkr%~eMwYK2%Y?MEjB?Gt=sheG24u~@=z}afL#UsB)yG&I z2#wdTdSXAVb5$^dGr#E(mSZ{do1V_H6hf^S({os^g-|QT^a7TfIrF<-!qUi@-}S`( zsmC@?coMP#rT)-ch2Xu@yKs~d5)u6@$8@!j92Oc=lE3tXOi@q#&8vWsC^KSADHAYi zWJZkXt&r`FLXp`lGIS?-qLGhn6yvp>`^%2W#!?~c0v~^d-yx#ZWTRKMLd+yIIzgk7 z+ck&`^+wRBV;O@`Zv>5Imc-BT<#fmnMhA-pc~MBgC$#j<0k=1HG=^kG^v0{m>}Zr? zbloj{i;#L2>J5@9MnBi%{)MX~BU`jWzN=4}BqJbXv*?WvAk&OiQIFRf(~Th^UT>&I zXO`T;sW*N_Db>hcNaAg)no%f3&b`}(@%0vCT+~w)93RFnh#|U>gz=_rEb)8%O&%es zEGEQ+7)BP$3`k7K5|#`I^>fH5W;q%{{TwpNS=_NOjan9WEKH-~K)JQJ{cITtLgZGr zCzfRyJqJ;SXA&V}EMg{sM2tbM$L(jwXc7G*`*{vBj*%rq_Vd1w-HoJ!<^l^sXDyNz=j1iWZkRoIlWuFN!oEN91M7Rx0NT2`hpBQZf z4lrt1ZiP@Q78==N1ikTEXe4FRn99EkDl=I*Qrz)cXw3R~+wsaWiVvrZH(psrice^~ z4mKJO^D;DEhZr@7$eNd7ooQLwMia}*xYYAD=8jjkG0NhO*CL}`l=8;wa3hh$9j{y? zg~c7OTq8@g!W*xnj64>1ycQdUEbe$6ZIsD+;^UQPWU{#9m1h*PxZ{;)l!$t~@jAw+ z6ylA}F~%^9J37Z2$&={%eR+I-KGvuZvLUbz{c|4ni(`#cmOCNzuIv&clVv011oZO~ zV+qTnEXNzoEH6PWMm;AOOIf-hS3>fQK9&zSbCQuTdE50l#Yh#hHuxDb6)1IzQ7B|X z@Owy=kZP7cbNXrxjin`EDyw`k>%;Qbg*>CrJv=~xQwyf6JNvR9poB* z9+xzh$MAO@WV>=%u8L=hS$>VzT*(rRXBt>m#igAkIO6tUAItQ(jIzv$OVW;V4YT4h zi{+@e{)M?J+x zu}|KBoNv^KrF&Oo7Z{B~$bTXKgOnKMKKTn$ zYV?XyRe>gC=!saFF)TB|haia&-03pLeQgg5Y5Q0IEHm1CnVHCx8~wiCm=C$e=palI2E1O!g|>S-K1Tv%=`~^+p!zx!!2@$x)D%M%EP3&+(^b)keM$**_;D zQ*ER?FMH!jwCgk>%`7iK&W7Az6!~N+WR($kL6nO3#*N0%b5gdT6rBUyXtaoB$?c~c zrEWA#(F*Tg+)c((U#1$FHAeED-uAN&vep>$_0JUa#yTUihqwKZtT&2%{qqR==N2O< zGIIO51NGDyBfkE50Py2s_`qGD#Qm)7Su1CGm&6yoW z<(=Dlqe!f??A151tUHW~fAw>N5%Fa{LgsEG*VoTqLhd!ve3Fb_z0WA}^)t!+Mz^n@ zUqC-^G;)3Y`~&KFz)1JWIHcKV5=-~?(}#=>Uq4TZ;x7;ySz?Rw_S1)qLAi|u-2L=1 zqr)e(pFU}%b;z+;fZmvbdY&1|%X*aZ~v~9?K-cyts{8vA}VD$R>c^)zyMy0P;vmh@S#Xbq4S38X+Uq6$)Vx&28 zFQEPXE%ftdqt@4}N1&e9j542`2zkRO5Nqi5bGK0{L~hS#Ak%F$JWcId9yk+iFBX#C zCgnQFrI0s`0B_HCLav7N7z3hIRe0&8_Y=$I-vP9dff=eOPuB1>uXUaIUOQ?b~D><`Es93gCym#7-QoDv~S?Hbv$@EbA zX6n_=fmz@rz7p5Mw6#P+qcRh4ueKtgN;PqtZ7dQ>&`351-0!VNLRl>C_tu@zQkF$WV!!w* z5ZFDGX~-&U?|Ddn;%Dtcr ze>G@+DAOl@4&g3Ds8Ps>NmJE5Xxtn zI3}O59uO**68}#60ig~S_dDqagffHjTWs_V^hsFO0ihJ1>Yz2MIyckj#YUP%aTnQ-(jVH)VF8A2Ep+28b zJ?DioCd&+cHNFaReyDenC+i^p2?cyYt+*(pP4qI~NRZf+exhVA-9m@8}uaI@229_(4*&zkzw4vH$S?XN0 zlzO8+leUBB)tsTPbyKD})UV47{fc&XEdAloC=1P^B#(yjMLphEAzDLyEbc7Y z8mg3~#M6N^lxhv73XxA9Ga*lfk_=jw_f+WVQ2D1cKg+w{M09yd7#5OZQsQ8%iDUT5$(5y`g@Y5v|w+ z`5=`11!cTed>ASbrDQ9fMdssB%fDLDAL{&9EBZryzE;pY|4C@X*NUw}B>7@l^65Yq zYW_4-!a`#~@>!@!EZu9xU?}A?uNChgGZ^ZV8PSSQAzz1T{?&?aLQ6#{uNB{g5_Z{k ziy97TEbbOH9Gb;KV?nL>K9tQuV?nL>KGfrD#kW}c|3X8)R*?J{Y7|TNS}_`m$ng?e z)F?8ep&!2DcrH-$VJl^z#-^3`|Dm&(Km9`WDg@A(br8kID0~@lZX> z+YmY*8xOUxJcYM4s9k@Bx>#O@P`myL^|K736lMMnjk1hFDD!tHxU1~Lgx}@1`cEjr zvI~T^)qg_iQsP%+0W(L4cfAuZ3%L}%OJkrF0kc$y_ZQ#;W_>^P#^wpPqvoi{46!@} z*&Q;$O#MV=o`=kYY-g6T3_|8XCYt$T&)qy>@*fie2S6s9qcXFDd!-pPHJRBVgbY35 z4VoD&vmpngRM6}eYbdWPj}cNN&h)(dBs-bazRan}B%1BMtH@%=&Sry8Vz`P-GKa+# zqI_qGWEZo=cU`#^*Oj}Py}ql+OHj{rv)w1xLR2$p8jX(E&zhMkL|#`?KWioefoXwB zVsvis$vG2_MoZT~49=W0p#X9V#Ei?ukh>v~|5r~mo}qf0ka6Nd^|V5Eiwo7$3EA`i z)iWcWp?bC;Gb=7s&xerNadGR}+nl9{EmO3MzH_vXSs~gkN9P-qT3~klYrOU|Gkuv~ zklEiH^^HzocbsRMeLmR}qjR8{Chl~}@gm7GlT&Ev@-Eg77_Wm&jqirhoq-)uPqrEG zi3(X{cK&O;4m10G;}u2bFtb6lYkA;#w4Kf~4>N~kOS9gEq>4rW#>Qfv=nlTnJw12DiDL@Lyk2EIkNzAI^;Mr zqRV9+2{{L{#LQtSf?NPO-Yj9c3UV>zM6;fy4YCY!irLBXCS(QVG;^3`E93^q8K!2) zW&O%>j+xCebsSf|$XsAn`lKGR)LashrDh{@ALK%_lI0Kx-3h$NY-TwM@(?l?nFB0m zLY{Fo zv&7!yJ+HjZ9O3;U^Kbn2AFZe~6Ov^;heLi8VzSWR;G%WD-b`bmzrjW8e7%{?asobrxm3^MqQnZZA1B*Le^=2!JJ6?B~T`cZ+-C_2# zxZ`!FIl|(O*PUj9oHK*&c->`cEbe$Un3-ZMG^8_hwP5$AQsK^`zmc$D3DSDMXoF@kI3Po*C=8--K_hfkDm={#(B;L|_ z*z9JZcMIuFo=4097J9dk-sE}29A%*`;T$Zz#SG4oV@hAxTq-2OqM+tWA&;8rEK$gn zLULK?*X0$E$IL<&`gM7gkTRB8C`G?QdfcpG*&jl`LVDaxdyvl1RiY;P?UrK;k06cen$y=1AMP^tu(1gmhCC)YwIS$#7+Sp(U@3he30?U0?Ujy*hi z05Zj@-rbXDAW2s9Tq!4Doi{^vwFc*S@(v`~D&5DEPa%qxnl6Rz&iw!hSv{N~8Hd=` zfXs;dNR#%&`Mg!_6UxM_Q5L!*l!Q!*l{in-9Hjk}WDhHSZxZj0&@_g4V>SmiA4uK?1mS{CX`-RqdRyT|Lh1U7j z0E_#D*7;V~5u#noOzg)FH4Cza{)>nW(~@W==nn+M_A(`P7J8| z%D>un`?Pjn>u?*;CReVx_zgV*+Fk-5$)5+cvFUWHUy1EL}`h=X5dMd)hsijf2Kg1 zt!$q8-D|6dt*kGplswO*J7z6bsSx=rAQ`1vtZ^ygSCCQ2qgE@gGadEj2W1N(J z7CNFy8DY5%Ej?V6N|-Nuek0^)AtuWcoO#SjV|kr3k6DSgixpQC@mha8jThnYXRr z0y$oXLtYXRVL28;^TsYsP49F|p_dDkjnspHJMRtd}foawbHSzhE!uQf8o zJJWj&OMlM_?kt7cPSR(UPbTrsZ9cZrf+8c@{w^{fTm3R4+P)R?sg)w?@!CFM)$!7) z?Ze1?ZZ)$|+kX<$$>O&C3#*UCZTlD2FpJyvK`W3U`_OIspq0$xw*5;hmBnrQmsTdr znjK_6e`V#dG(o7Jzp{$CH|QGVcdX&pR)w#BNWQfyL~nTg^S!lX2d{s&pNZcgTB9-} z`e!O+#H#;S|NLaNh*ENvFp(Lxig#gIR& zJeGqXON11&oB}xo@~2hKaz5k?A?sPLgcL)@ttOUg$b~{WSZ;+}2KmeCWqAm)Ovo_H z%a9e2zpcQ2vK8+@s)cAQpF!3@{;_7U{0g~6NH)t(c>lc~60q}G!jOA}l(6i>nF)3! zOD<<7*!3)DLugss*)1$rL1_V1Z5@lwRUB)sKLiJ3xYgi8B%w)Tf|l?xyaD+HrFOKFGG)8^AYTYcW%&|9GvrQoCd=q;qDPUCVMPXOitkmVC}6+ifftaAvyQ&2lYgrrQH7>o}v>qb&DvMzMnnWlNue ze2WoOZIk6y$cT`1mJcAmK{PvuyI$aWEZbyxm+P_YG?uS9 zW82v*e{sgP^I4`P$#o9fOIc<^Xr04$18)M6g!H8@;-_UCDAHBt=La%SBwz9(FTJ4cD`W-NCYn>q)hHSvt6$RC|c!0|@oc zp7uD)j}YpgJ?*4}WJ`D2by8p^mOjHyVF^Lz3dv-d388vs+IcKTK&YOXb`i^Y5Ni7@ zyNqQ8gvNB1UBhxaXZEriSf1d_UUnlOnb~$f%j9X30vTAtIra#P30Wv4 zc(82OTnMdCnr*Ti4x#l)v(s44fY3ZY*Un~H2BG7{T)Tkf7RaHfd2hRvM!b0)){l`PMV>1^N&~o^+_J&6g!wL>WM!~DzGC$;jl zkkjpwS3D_)oMlJe@#F@`xpqWezXzyP9b~E9$@P52%evSeVfisGx%bO@emXP|*o0CS z+tv4Z(gwNA?rQX;6H;d9`Go$e(p9$U6KeZ1JNq?RivFh4TPU^6?q-=7noPMP@&Pi}*h@A_nG5+8a;=@ly?PMjOGt$sd{JidAj6R5_F#*YQz1V?R@lux`2%vD zo%g8BT!PH@v+*v3t@&gpNR{2rvI3dukZQZqCl+LtJ-{P)2Qqs=YV0I#MH6H;WVIc9 zTrTTvNG4>hoyF@+f6pohvfeId8Aaw8$Od~!lPope!95~Kot@&7b0Pn=hq-?!Qv#{C z+kJ8+oHk#He?m#Zo8i4G{}0$y>>Ut1(4ezjdtE9S!xBO5wg*a z_~c>81NI27A!VL{JY;wHWHY42uJy?~kjL$$2V~8!p;SNQNqc~6CK-Y}ZMXPj6w+>2 z_~dWM3wAqi8^5Ada1MTbW)HJWNx|7W-n;0uQ=XU0G9gou*=#RinFG-vU3TTCGLr!b zLteAfvuOsX3Y-8*g}h~wF_CcLaHF2*$pf| zK-NOOvmw=OaH(JI#*d{;-d&a&vy(rO z;y|d>ANF{*9It~QFG0rb#wTQkq#N?LJ?P6&&u-BYq=5^AXvF85`qrF(>neHm)$p5Y9iP)lcp3w@=irL)61KB1PTg=hJM zTDo^Q*(cP}^ziVL-uh5W=ZEWkLM`1doaYm2>B8_B_dK6FH{8V%+GA264{~(4nq>*(RLJq+5}#ZEIVqgY z$I5e&DT5S*BR;8xoD&}BQk2;UxhP!FE|>lyg!<=-aEec!L*~kGH_K<7DG#srNf$EL zgcErG8byZo%H`pjHd!;h5Bn}ME5gG(f+U|ot`FxuEi=17=$Nu9+|8v(enF-tT+11H z8+X!NyeSvX;C?B;GeA3p*7=Tb zfjs{S_CWSS=FV_~TvqTiNS2Vuv!do8{SJPSkP4Q`c!M}sNSio^tO_cS;~;m1t6BDd zoFpXhnye=SQV3}X4|8TQtg(C!(RLuI<^K5zLVs1@{_r5nlo@gj z?+?%7noS6;;l^+a_fHyx&MKS2JuHVn=*q4sJj!w`gs$wG!n5Rf1<&A8o5JJrXcb%r zp{tTj;X=;b0$Gi9ejr@Navy|#0s26=j^(+yRCCYwLe_~=z4CYw9ERK`q*d;@!GxKU z0u7J{!v%8B4JJYE7n1pg93A?u{X>xEa2?k}-?e{SNCju;JMzy!9tsz5hQ1@;A*7Qt zCTe~a@^H9W%u(JO{tt&c<*X(Cwqfetl<5=V{gUG0aLM_>_|?Q5ktsWmq$=<_YNlso zkA!nC5EB1erjLY&xn_FjmPY51aN;5{V+ZM-Tk7XW!f7n;pq}}txg}gDYYtwB>lEte zmhb>eIfVWeQ%g8cl=52fXtsGS%%8JWkz10Ttw49QuL)^OX0QnI+zQ{jFg8v^vrpb})B3a5%vQYs+N zgo{|{yMZ;3_HdI=>LDHB25!aisJRL9a=3%#V#vcn23b}^s8>6~35UsEt&d9z%fk@r z=gx4B5burXSHjhtasT4z=5RfW`xi$yhg(_bZ5A4xSHoQ_^ft>&LIzmqJJ0~FM%)MZ1DW1%S%t`mdj*sB!C7v&Q)Ij+YafOqhg1K^tNt)DABS_q)w*{d z;L~uwSVJi@k=Yu~^W6uS5BV&d?vtHy)&E5}$9ErqWH7wmcOM`R_W`~Pr-_Vwr!))o z423nH90mC{TqM@e+vC0qmkW{i0Zv5byKv#9)Y7$qbMOZ8X+knCmy$ReXWfur!WkEm zEDtPzJP7$aTr28X9#{gQndG1F`im&DA#f_B4Viz!HKLT1Es)8PK#9z3LS_K6b7YV+ zBtJuvBTG5+JlCT~GP!0FswWyrzgX7uAtWIkUjU5saVZiLGB=WViOl>DvNvSkNDG%D z$$?}=201fvj;v=PR)$Or?_M;YvJ`dWEdVz&fWvZjX$J@xrg& zAqydQMOuAwEabjOnNQA#G)E#=%6ev^R28H((p2WjdPrMjoR>wJCdl)VJfCzxUWpW5 zB}>s)-ufY1BFR4a2J&{Klb1!AamWXeBA-l~kE_2(_A*&dCYCiD@>L|@lLH{%M(Vj{ z${Y(Bi6oWFQZ$EO1R0BTb19N#kUt`2K3N6%D>A^PXjZ=iG9lXFlTDC>Xr52nAi-$s z)wHat0KF0a24qS!&nF*1rbd@sBQqBwL+AWS(Q=l7-L@0&OC&`*Sl)*Wpj1+Hlw}1< z<>DM^m#8Ld7GLH23YlG^4PuY;js?3!2Y6q;q(&a8ca4s+EQ8Rzx@$Cegq*`GIWsM4 zvea;9S~QKNi8IO3Y?jA3lN`-wY3I!J=u(zfIWs+4!Lpt+N_0KTot#mkO)T$lMvbshGomN87b%1q;pLB%!EQMHz1nx1-}i$4p6(VMWO0wDyG6%Y+~eu)(WE0~ue!(6-J_{2?(uYwXeNt$Jl!L@gvC9c zrbdfd+~a9#w1UMw4(=IU&*B~j_l!2NxW~a6(RLR1I5;EP!{UCCaAtIn#r-1T%xK

i~hz@W)Bn^g4x5 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%0Dd7DH}{m#hy&Z`&ol=z*I_nlXVj5G4X&g(<9 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

@2`B4bRjU$&aF$jxCCXw5qh};IH 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 z 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 mwjhz_R+2&_T@B(Ce!HUwJE! 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≈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

7-O}1?hCS&_&wNPk*U=+o1B1rrf0k; zGve8o$b7E1a7Kv8)ag+#$&7fe)$Tan3f4E5SmJ|xr6;k7w`WD2Z}h!fS%|3foxYdr zh$mE{&UQW5CZf&{deJIbSv-9bJ>9Jjw2A2Hk9z%TnTbVDBhYHE-pm;xeIUQ+scU5B zcF17JZ+c0oB`J_U^!~3)IdvXy7D0~d=4+Nb205u$uaz>5>zvV($}JIf{?$v@NfA%O z7DF5XhfP*P)PVk`%shoUBI5}}S6Cu4{=gy5EJdaQ5)5R#B{MIwn1M!?bu66&n>WbJ zddPcd6%k0SvgC8fg@KlLEZG6MD6sNvOMZrQ3lvsb(hTVy$l)<2Dl32EldM2`wahd? z#9qEEQ1-qhVlVd!G<+asH)pO4=r$3VK7pJMDMRlh3yBS+eo&Cy7F<8v`jaLoChmOw0vn6;!Nv4~kq$_$q9jC4z&LRO~PW(3tKw27E)ZVklVCi;cnA?Mj< zR3MclJll*4WKN_lMzhT*)EN~>w#hh1QXr38g=d@F0?}h+D>2*Li_C3-M#{)%?+-ze z0~MSRbBoB_8OXGW$lMhuzg^Z5v(00W@qsLx6hI~hVp+u8BI=|Cnz@b;QRm)3M6#?S zW*brGzQ7@FB}CN82rT4`m~BK)rv{R3B6^w`h`U495pzp1WLlt>GeRmL4+SE}%8Zz8 zK89omD!7%9osju~sJmoF%r?J6o(L4ASaJ^XRG@sE6fxU~I?n{ExRnr5r!demUS`B> zqqX2uk3fk{E`mHCXik+GG24htNg&B4B2yYDnjkY`wz&ebCa{-9%r-(^4Mg#N7qg9! z*8^$y%2r}d=nq*Nh`+~@n;`1~QIjmW9r9KnGR=~^A(esDyDgaxc_&cB%Mz96LpB5s zO_mv7WJl#0$oqlj`z(1L@80`5Vt#jM_+$osK5}uzs1zR4c{Z8|9GwO5-?zKrPL=6^l ztML5n3MS5wt;GD?@dQ3O3N}+l&d(u;7Ie&%88JVLj4xQut%Qh7Aec5wX2ks59byC{ zY|;nPIatGW#B40;LO=+e9+Jxv^Rwt_k6^q_L{EDL zv$JGI%*JtOb!o7kGeSl|t_;S`kr^=?-wlZkM$EP(8!{jmIZuk1pBF){4<^jDWHn@P zuxE}GF&m3ILxL^bN{Fa4B3S*X%!v8d`QV5}mTZNr4mzH(?*x;cwL~nvI#|kUC^BN{9|bG8 z)fUJ>$j8Abo1B4c2{t_^>ojrZ>);5Rh|CYcm?bhJ&Vyq7><_Liv_y=JUxM*VrHJ#O z$Q%k*a4R7q^INc1X6QU9GZV6diK@M7(pVReZ`?wdqYnVXNP=6d=?-+9q3@x zjtL(`08mhf{n&4{7zM961oPoj=yB(R7rFT`(TP%G;4GDFuJFG4~_8r8A3a~C6bqF6)QZ?hOWiF{J}3R+!YRNo^q*0a+{ zqke)VZy|G$G4MVi^7D%iAl-~8n@sx>cfLk^y2!|9r$Txdj(cS*@qX{EkV}kc%E+gw zpP|lWhHjGvNVJhmYiKLVvPuv2RRdK#IVfe zOkX3OC66)>*&2s~jFr3xzsAxBBNJ~_vh0TpCE3i<%$XaFy)2zBmYExk zW|l~Z*cU?#$K7I#Vedf1z8GReunghMO-2mMIL_Q;#IwxeOoEZj@)&0lj0~0n&I~nj zSk`c6s8PuBA!mjeWh^^6Gt8)FInJ5kMmrI0cqk4s?oUe52-chMW zCdG(aDMTL2pODm$OM50XzBS%dmQ(3C^L|jp0D~K z;+=ty3}uZNnesZ}Nn~n_7?OPTGGs)ZkBxYip>2}Pa$lQ7mx(&^oVyft(27NzbA{9z z8Pv);=YD21lE`bn5@bFz%4CMlx#f^8Mk>{@&bf6)DTzD^-a+O|ql!fK;seMwqh1PK z?QDV68;!D+dda07mF*<0ELTHBoq8kdRjU_!AYU0pETR`e8VsGp>c#g)ipQlv-K+`qjvi8R}OAGQS!Q5_t#I z6Vhmy<)X5+ca9kS=L(T~r!O*1Mp3pU;yt}TjaC}H@@N`_%wI+n9Zl8|*J4!LGB+c0 z!f3J0NOwR^8M|z99P`f^qs2By2{~(I@^LDz)fYkjG4|SKq`Oh)ydnNlTKK5UgeYb_ zwu}9UYiFjA$T{j^WZIc~Wl!mR@hC}srPb3yk|djyLOPn;*ISu4A*xwJV)fl^mfGZf zWISf6ZMNA2@tS!ynO={3E3@Z2qOzQAgy^P5BIlNgkbs#-y^vCmI;NRvliiTcX32m0 z-o>o4_5C0+UCiXSsTb-_jJhKvalCZ#D;dosxtGh#Z^($>YPi@eVmS`EpjAjY%Q=V` z;oZy{7WFcDuIy$uuow`Li82qdT+Ep$GgS)B;ZdmE-K>hHtwGNLdO>=c^(X@(_vkqHI+InGgA&8ON2kK?)$( znR~gFkmZnp<_KIg?;U zu*~I5f*Hf|9OOgvVyGF<@(QGuB$;Ic*BNGJuzbyRhM74e#p-X6xOBW1XVxsCrPGMo ziaNv19GmQfj54E_TVw2J$n9o4ix^`laZNgmeST(ptz@F?MO0T63eoVxJS(*l6>`J9G!W{%r}!? z6`6eXd&nZlW2U}J%I^>{Rv$AnSUU8Q<1p7OXSoQn1g&z-0BW1ggj|h%T|=B zhUA+wY?)1vh300thRQpr^9AH-(|ldl*#h~7B zEGLos)NvlaW@FY#p{uw67tB zr}rSU%B&@^wsWcJm?HLqrLvr|*?!wXLV0AoGry_n)3_Ftco#FOhlAEV1=#2c+7}wTbwYd`92Gz)Fg1o_l#{ZCIfndVeFn&=(ZlgMl`7k(y3T@pr}IF>h= zB`kMB#PPn#tYk^$%xC6imU}q!nYoK4{CmQi%_f%c?+I@nJGXLT|2UD|&_%*h#&BQHY zedMv@L*_d(orUfuAUn)#s%(A2vde5?34g+}%iQ}p)uE#)0VPT!?v9v^--8T*{A||Cj8Y33NRn!k1jsLD?I+Yq zIe^S9kb`DZjU}ShK{MukDSsd{26D*U{+=b{AitV9o1|QNWk+Qa(cZ2ZrW@~0VX%RGflv$@@NTr7ngH>+*p!*S7K zIvy44BkvT1oG|;(6(Y~n+i;|uG@ES4MG5MhF}K@fE#x1wl9q1G39V+G?MQhSnO4kE za`cKh;X{%`&q)d27qptES;F@Pt)^BeGvRCgb7mAv_?rKmStnc3Hv9^e&zqYmBS+>A zh!SdL5hGJbhfseKYgX?RDwG)-hx?J~6iSsDn$?d&T%kC+_Or&JCzQQeY%yybdPAio z`E;f}j#j=5hMl@8S4L)%zO>$54kv`@zM`M z20^-qn!c8q_AwomVUSBgwdF#rzF!txR%S64|c_=*6JWfdbh|^eY`QI8?q^O1NKxL&=3w!u`52q%4&Z?$=Er z?P)3Dehm#(ERz!M*YHpRXTtruIh4L!X2ShS4CQbp+^^B0$Q3dZ?$>Q0^DiN?Us+h^ zalzJshM$z}On2(C_3Ln~R%K*SY(YN&$6)myI5gitL@1VpUQgwS@D z%Q-VK)W|Y`GZRDECq%#G9Q7WSes`#lMa)q`?g^C~7a41gx-V4PLak_yszv6$P|e?z zp*gA^k`bz)I@TODH55;ySDrzBMJ6+(EE27(tI7vMt+a+x{z7I(sDQ?^ysB)4%nHr0 zNes>xS)qD53gj6?$m~!eRhDOvNXWyXD#}Rd)UKT}H&kL11M)~HkJivSgXDxtbWD(Aw1zPcVAcfBu)%HyCM4*9dR_!_m(i#|lS=B@19z{J*2ZlVd7vz~hCokP?>9c`8 z7B!{^A@gh?bE11jbT~^fi)v{$OYi?^S!%{U3(_7)`I?1i?294K2MSnlmW%$O+3)#4 zsmQAkn*E*+REcy+=7m6m$VZZSA+StjP%ix|vb8|o3(yz567m_I?*v*rnP-vtFwpin zWz_cbDr8N7zMtVpBeso?14*BesO^X3lR!V$thS#D$fp7N!Vs0B?dL7jvo6r*kv_;k zApJwGC-J0jeIT1fZ9ktQvp(QoLmAv_+JL{VVo4KmMsR%~N5mP6^??$RE*YKmfm$WL zb&!o*PiY_5>>Gs8U$PGd8bzjNs5gtg2y}_;n~)KalM-Tmtm>INf?wlD&0hrkUn!wq z=A5wg1mBl|mQP&S0rI~|5WNm$Vr@O z;w?dKz2`$l10(<1dVdQPcrsTYGZq;3Y^#-!KLR}-c?etPcp%5K^^$A}%veiHSKDeW zu(7nMV zEsCv#+U~s1mZYVQku3227rjBx=##X*KS25wfFJB@&1H1ldVzVNo;oACMHSQ-o%05?!m{rMokB zP)p;{Q8RW@(ga^nEBl?+N8Q_*3bD0*uE(9RBbv2^N04Xiy^x7%`AT?94}rwBIu^Va zmpRdw!_q8rB;-Vvc9BygGfnFjxmYsOv;mO?l1bG@L>5UVRZIFyZ9k7f=-Ocy%@Apa z(6z%ZTAn&f;pdE}V(GhTB_h;6B)e{=*&TF^A*VKuMH~U{<#H`sg+DnXBP(?ptku;tx_ZhLfiZSTD`~|$RdDs8sYm~vV4%Ylzsr6X{X-3V5XqLz~kQSB< zkv}DKsFp1<^+1(5R4WkK1+pBaW@u$1`$L{)sTMg>GKXnRA}31bFs(C*)<>?tQ0j24 zPlU$n1;~+F8<%p&D;qxz!==>q7c$ve;npN-d+vc8r;TvN9j}>M7oXRu@ft?vc&&UA zl~PY#e}Uv`qbxQ40}q<$+j=62e;dlw_>YEc%VLS-L8d}Z&@x2Mf@mz+A{RqwEKbx4 zL~0;37PGZdk);rtd-Jp^kv0gOG3IFvBCkQ{y89$;naGC_y3RdG>l7K1%*k4>$QH?* ztPP21)7AQ%qK%2{1)=rH*OL9JrP-1>Rf~$8A(_*(Op(hZbGnuza;sztv_g?)$(*5; ziM%SAGqtYmXjy99ZS>e2Z9s&^o#bq-noGIkevW3S43GP6$eg1UZA2iL5Q)Q>^RwG1gmXP#G}o@+J3Bl98GX(<6Z_DM(sFI~MOw3uri-+^jYd&+~5dD@B; z7M|H2hg52nQIa>dJ`VMKh~L+$)RGLfKJ*lQuB>klgOJ=s!D4Y8B9oz$aq4AMCeOHw9Zx9m`M0gwayE) zWV~HLGr-;uTIZXzRFPv7GDBo;Lg<%nsMP#~l#0|tXjwODRU*w0>Ytmn29Y+&RBOvb zR!HU+ty82|GBsMS$k&p&RT~l+mrSiTCbInuwXEB;Lt^l4T~(3%)Q#U$O_3U)~1HkI`>NEKU%61zS>%eF>Tc9d3#nf(pxMo zA~YkBJfKbIQmYfcp}jxlGJf#(gybalnrBq}9vNz;utx9AQB$H(b*MZKgeki0( z8yBHIBzaD2;8O0a{(@GkGTcAMAoGHj#-e8RlOQi?#%@%zJFCBN(sj@<`mP4tx^ z^QuPMC~cWJka>{Tv}}>nAPZOuM2aD`kk_>`k$I4XEY%|SNM?oBB(h90E3`I|*C2F{ zdZpGa(hZ?|)GM_Ck&htsdwQ$15s}X!^u?=HTGAeBoxg+7Ilvp5A@V1L&H>)gin*m~ ze!drL*rm}kQM8n|pEn?HX=N|og>;Jshn*)KXd05sl;{t$}M+N3>TVYc#s+`qKHP`rSj#MMKR?FLy>Z$QJLTCinY9o?)Tr%slO3AE}%sOqEi1Q_s z&$LZS_&u5Ju&mECBb{sZ(R(uVS6TyFmI!^JOo_$)Q{!8Qns-8}0c{1YOR+w_%_8fy zy6G%D7I9=g*L)s14Dzj3j`J{QypDxz(kgJp;*3rnQ;5t@+UOxv zO3pwaqgua5hAe;x8pdOs>50e&^i`L+=-H-pw%dCK2Zy z4^yXOEtchX-tjQ?O(KtBS%0GDpzgzwgEG%RCiqEGL^>g~=Z5q&k#``p=Z17T+EJ-~ z2pt(MJx}C+5ITC=da=k)5I<@T>lGqfAC2G1VW|^Ifdn8Cy;&p<39+<`(6^Q2kf`1* zLf=+SV;K<1K&gEoF?~ejXvhI9Nr$O*J`FM?5?M=sCoWmNV>j)>v8A#z4au_gU%>li%f=Ip@h#x zt0DX9n^M@+*yDP6lX6R`mH0~rv=q+5z9rvU3RH>Q%+Tv|wj?$~qcg|JY$B<+6 zY_7*0_v7?h7IjASB{DPhzT>Hsx?2AcGE0vhtJe7jEMW^vqZ0q^km<$vJ4AgMi@R;i z(mO?*{e70+E8=V$$Lm8P&bD#9J|^O98@YP&akTUrzq4)R>QRx0uyopfPS7(&o`KNz zbAp~D;%ply>V+cCwsE3fCgPme&DN_$ob$TbdZUPQUYDo0ia6(WdHMTHLn=&2&kc6f?DUE~e4l>W9fU(Xd;1EIey&DV=W zzLLzTdb!B2l7Zy%nDREZ^|pAcL9Y{`ZH(j$y_QS4+gPFAJWFi}w2e(crcm#mNuuT! z6Eas{#`U<{*g1OZsoX9;c1MvpPjAh0WpBs@da*|ig-D@Wb?h#LT%nhHNirnAKpONMUixBRA!dsS+fDHON3Rq)4>AREzg~4ZElbTLyFnh*hn4UV zBonek&nw_oB#t0U^kNZbmRO=!h&X%hLwcQvv*$jfH;Xt&hi1K9#5p=N>)j&G-t@3O zAmZ#z59=c$&J3_rPdY=bp)&(4)eRA626#kI7jb5QNAxTaX9j4|^F^E)phYhcab|!= z^-2+E26$Ajn#1G8d*xB+vB&gA5!x$Bmh1Ig%H1nl^|3R#6d&<(k!jUSSkzuw0C`$( z=X%_|@)^D2cWx=~m2;7KPVZFWFU6SBy!yP}D{>8lwz}u_F%jqQb6?PX=ehMlu>&($y<6q*R1yCtsvccFK3iIiF)4EJ3R6-yPi`u*2W$~TGE#))w0mz4Xo9YeTm%n5g=VhtAdj#^ao}o(dvp?$Retqy9)e73X zw;;1tPw~ihlW~=#r*qrYnL`TXbG<+^w0FlLU+5K*p?!HT$X9xkWJqQ}zR~k}>1yxJ zfqbXeiqPJj5BXkC;XYjKTL?J^GNNxPrZrUidllptz5IL@-rw(p{HiBipnAi(3iwqw zM4bKoS3O0&k}LY3Vze`MVvWdOfL~}=7cf5QpA}Pe%I?ooH^lly+y>C6aLUU zM4UO{54}gE1n2WtevUVO^&ye@kP4PD5og{Q*OM<)Ep_INaXl*H%o|(uOc7_^*rMl% zIP=C|dZCCjZ~Uc~i8%Ad-+Hx(GjIH@r(8@+S9jGOK+pS(bP<|2NVYZ_xs*F^Ofm{C z;!-?sJc`UDqoIUE%^S}^wl#9N9(UfDY*b#sE#-Nm1DPpC^QEq=hDFNA2$YkRuI?$6~RM_V-62*+%76v_5L@ejRe0 zF`|U`?jA^vQC!X~O&ra0j0zEF@6IvmM4Y{QrqL|o?Ai8y=i2}Zt%v*(^@l!!Qc?ukaF zh_mO;HtI#3J$JUzBI4}1c}9nbv*+d+BiHh{^AUd?di5m3U!jEdT#|gFhfBG8?&(H> zD#d&55HhD59oJAPwdamN&NNcF9(T_zG?K5Uj2hG5kU85JP{L!HGzDkxM$0_P)cBn~ zoNIK5IDI(R=n68(oHHu zeRvj1U1b;|)Q9J>q>E%6tNO6q$PzgULVZ|n=4zuvL}*N(VrdX@ z#`F$jnTRu{cNm=_&Y0F2y&}$-))~ons`be}PHh`^8c~q~2yGj88beabnKKs}V_~a{D4f0F|?F2>g?io$YVygN3w9{u*_&@QD+w<%Z*gY&|Uou$m2$nN4DM`&;E>R zk4%L;ZM5>z-K&WgmF_z@zZc8&+nwGikIu!DZ(fhb7^bMnS zqrj6n4w>hTXsg@OlOZn}Ngg>Jt$4|3eS$Kor6eyK7K=J-Iu7!R(cqCn)bpBA>5+>d zD~v&2y4%u~#u$q_kGcw(l}5d4mwzF))$3W>L>_`vu?&c`$rirK7#CS7Tlgwt1uwnE z{}JR?lzPKR4erR;Ds2*E` z420KEZ5!)YGGyuWmjZ(Q<}<9FT;{lrKSao!I7#7Gx$-VXiL$P#hh4*k?95OLlP?KetAoVP>!jcSp@ zv2=RNbgj`SategrL|tpNiIhlYozW$7lVsKz10qe3H7NC&F(T3qp|?XnGyKwrJrH^; zZ@{obzJ}0Sc>_k}%W5p>7sXT1W9y9u5t_$H28|x>Rd*iy$|zD9p2xz-d}Z{$MD?h7 zY!ArSMjL0`d2HC|<`Hz?@BPk5@r>ZUDD|CDr-VoFaL7g@L)Q81S!x6~8rdQh5E{Wv zMuEsZlKI{!6?sxJKNy>M={0_OcO@4!|7Z-q&RYx5t3@moD_MBymqJF2QEr8M92_zH zuTZAO?;Hn5jHn152j`*GW+PLCj)MzWaz&iu;7>-8h;tnL$tV|bj)OlNwIa@O@Moh* z#5oR*8f_xZad6b=5^;`$zZm@@&T;S;W0Qz;9Q@Vrb*gqb$H8BX6cOh*_?wX?;v5Hm zGiHe79j}hdV@96H`4BoTj~T@x*GuMiqe7%sGQS&5ukzA)EEb~2{xHT>hUEds7GuS0 zlyQ%7e;XZ~QSvAlziW!!$= z!)(arQryq!$n0Tev8Y*eI%F@img{l*c^`9#Giv*ph0MNYzpT&X6V(ivX>JlRAT&cB zVEW!yeYgvRwy^`v6p{TP)b<0-86Wr)tvC%eA7qw`P%B6dF_*nh8MhUOnSPbwRumy~ znAxW?ytR}xHG^^ zGtHB^4VhWy)Q>5nW`G7rt~uK0${X0bPc)lY)C@o}+brUm)tSsAkUXO_Hj%3ecDczdL_O^CrbJHso}( zdJUKIZFel*mVy+RD?W1NE67=9l1F}moMZNW=w^I7;?96Ms%rNCiJJY8^UZXX@lT$O z_drw>HVb=7HcDM+S|W2H zvsl{Ca`%*zASLD|5!%K`E-`&9?lyLrS*0?(jm<&kGBa0YcpJMAa)p_8w%WhwSuMQ} zd6n662FW7dD`>@a$XsoXv#55}Las40WeuIVBH;Iq+Zp}&ipgaEaLG}^Za78 zYo1vlLcK~d-^@8v^^f!0EDOx^IXo8JtIfzPFnd&nd$ko(Z8mT{?w(s?)^aH||2&6G zt=X^EhiCrRA$OQ1ENVYp4XHCL{SWOjVW{p>qqHokhW z6G@pzc7Qx+=6A2ORowu8`&{gBx%^6cfRo@TRKWCesW&E|l}`;vLs91;0UG7pZ8Xd5GW%&g;5?w-5cEKwQW#^xcj+#FRI z-o|c)w3_~Ys@dJfo-!-0ox(jv^Up$L+RU7CCA2R;1bN2HCaqOl!XSjk;(5~$`9(4>nCT)r;5iRvUNEync85?aUNrMXWnGUmydu;WDs~}w{^^#e7HT5ChJKYCI8J12KHKrf142jT~l60CW*HEd|iMP{V zH#2y2)Z6KldEIPM86MNMkX2?jXIAsL(`?*j_I^ga@y1rpUv{iEhgcT*8n49PA)?f3 zb5ON{XA&Bnx6FEJ*TcwAZ@gu;h&&IW-gwLG5P2K&7o^+l5m^V>IzUpgj+VaK=k&(g z=BUbWZ)}Uq+vYH5RB!CSGL_d*{azeNkD0~d_QnThr^;|kDf59@tTNmiCgdY?(|}sK zb8PA}qwD|K8=sgd^VAkjy)hl7J~7iOc)Sw5@u`{3qUPRgWIi=Bxt<#TOSp4?5~SbE z5qTSOI!lqrTFBXuwPuCLH;`hMI+0%>)X(e8W|8Fis-M@H?IO-td}elwIAigdS$v(^ zTAY3!Fo#tuxSub?LVvBi z(d_>pWz@VunT=+HM_&I5Ul%n~xE__EtD7Ip?hUHuCs7YA>qm1)azzNfK< z1(n`2yRwQmii1~O_+6`{Avspj9zG?8J*W61nwj&Lhh`+tJad%|O; zPu1-IOXPQRs>pVismvc{rK-oTL+HBlPcus-o{(aZeIT@~Kg}rDqwbT?+%j%vio7{r z?UmzZA@_WjFBhfgs$|^k63K^9E4G;VJc90cZ84+sX-w7cf~rj3O-h{c+G19XP#?PE z^|x7ZGiBWI`rFL(2#wc-VEY0$L*unou;~U>^Yk0lcx@f*5XnwRt88P=cx@d_;>>EF zGhP#eJtEF{`Gb~-GhUN}nIg`3O%672E8Ou)4z`Fm<25DNF5-;W_Q6_JPhz}w2=!!*D@Eo&=v~>JgY_cxD{+nJ=beMgL@pCa3Hp+#=Ec4nA1G)a=}1VaDrLO35m#*I;oe0sY2rUy z8VnjNi~ZlB)QMcKLV@m~x%5t)O6 zdE3!CtKK+=#o$)B{c}h#*^{{xnL~p!JpEGvIV>3UNDg}Ah~SJ=w|_{og2kTx`2ziO zWH6O8s()@mJ=wuzkK6@0HrT*RcduBF3%0VT{<#mCMe4(Tg@?S_! za8xoRPeEn|>s2Pv8?%BHD&xN$89E1;6-=7!_Rni5H7i*8ul_k9xWdyv?;vwxu-wxd zA4Bqj1s<7=-Z(i}<>?=iQ-a-|{@INF$q$xzdSe6XIX#%?kxh^@f;qf~ZvUJaEMigp z^D8oE2K(3lvwzME&KOYAf|k;m-ke~S$Z`m6Epvj#=bZ7kLAIctIl*Nrljxs0!9fxF zoh~}Zo)aup%i>?LR#G7KIN$Y{6Ks>rYSc_;Xmf%co_?OH<1Y?^ga7L1xxsQz#zLkj z*y`!k-5}=%>pgNBdbK#%<>_aV^MmP88dJ5^O@LewZ1wc&zNqJ-V1q{vhg=dI=cT*- zTpCPCrg~IA=O9xW?By-W-A_w{6ar!E|~h2>UpPE z=LIu|lsJ7jFE}chiMLGj6`<6-V4DbiV}*JirPgw(#CglSU@5P&+Pg2|QrX-a?*2YM znC8h`i_DF|Ay2Q~1X&R5_Q+Z2!<&PCo*~t}Ws>S(y{DgdgxnGw@$_mP>ZuL(d*nXI z?ZGx)y4%lp1iL-`{0K641gC#S?ONcApzV*dbaP7=__83+L+%VVa;C;N2l6`Pu3&{n z-h$Kz2i9@_aOMNZ-N6CL%tNWQkVU~p)rY=1$k&j?!AdFh3WWZ4@;||JkNkj4V{lYT zQRWxOeZeNqEcU+#iFf1I1%vG(UnZnmWHccI-1eLOht=Tsat*vE6C4ql3E7@y1<&d? zC$9A#2&Vr`?ONnJ6&Veg2ZE(PDY*g?g){|?5hc}-bjXrm>5od5LZ(BSgV|iq-M-f$ zM?;nddpA+Wy^pj!*z-Nf0-yg@b?vY`==(v*4hc#7m1MC`gA}2j<-sJ6R6w2%HjTQO zddTy^@^6*wj#B@Hyb>JR?8*y}*Mph7EPRUunQll|u$tRd<2w`b0p!i#DEH4|Un%4h z$m(E*)Kd-F0C_7|IIL>E7xEqC?O=ms9)oO#yb~=zk?(BE9Y7xZzv@ZJUFPt^Q=Fhyi?E&lGtB*_)AA%4gQ!8+Aa|LzcK z*9XBO$s8b=-r%5QvL(|S?BR^M=deBM`7k&tLiZd<`hp!St9>U!s9m21Q@^9$aPRhf z8mwngcOj_Mr@k_3#QCgnZQ7j&svXr zAi?B3B{9fukWE2L#QEO(55Yze=X>iT!DS-O_tt+3cJDqpv4$_>SA%{DHhJW*4Y&&t zOxlAoi~XB-p6ELY{qtuqmj!=M4Vi_u{~2r$c?sin5=xB+J49AN=o#yHa6n1oJL%)W z=$^cE-;NK}ALS|y9HeHn>xfJ3L zwMvG*W_}%HyHJ%!?t)AW4aqvwx74YgK&ZqcRF4tLmGz--g*QWjp>C1u=c<-kp%#zO zI)_88`>FMzubDp%iG))2b>$Vvv`}HDl5KBO_3Rp&?h&ddE!23R%FtKiyCJ)WGClG! zBt2AgfSaLK>>a9*dZ-k&V&71fj39jxomHFd~Mqf}8S%OljQ=Y|Th-3*l~4*8E&LSN9P%mtxRk=sxYWlBQD$Egf`t($uF;?S^U z=xg1Sxg<1WrpnOUVkKDmrJ;Ngnng*`&EdmLeq1o)Ypk82v>!MSkx?fB}!ct zs#O`DMdw4V36*ip?o*+PP;nAHuT*!x??&eOP$AEmHU2#GABe&i=--4&r5e(adRknqWk=G88SDA zR;UcOq8(Bbs^)s!R@8>_xs+fjrDAc7g+=`8m#i8+kwW2Xpz@=0xwjgtV zC~5mibSy}W#RDNj#2JeRLg^yZ3YzDeLfInJiWp1Qw(eML7sAuhP=N@I1xa(Lo|o>n z;*n7DHf}3Yka;AuLS?uWQOIMVa<0c6i)EpFF6Fl3@le6PTJc1v^k1!bB2@LSRQotS#ZizKLYw~8ijGjL zES-KUcqTG0hgOKtw~%JD^oz{HenIDBuY^WK7DDKJ?3GZ`4r&C;@wNtyPG`sxse;hx zbcQlS9!4q3yc)_8c?Lq6S3`v&DT97|C5bDt*F#M#?)A>=p>`=n zZ_^c`6|aZ7S=?WMe?3&W6^;Aq2?e*~`kga9A{RqSAS*)2TdT}G$fb~#p+b>|A=g5> zLRq}$uAa~Zxe>BDG@vruI%m0Wg?uWrZ9g*fg!ipbRAeKh8l~O}rB0IKJ4Pnu~o$>dP^iA4#J#xW>KROAsGjeT`7$9?&##c7git+`tO>s1|5wkqi44`V12P*E zLiL0o-zUVWXLG1}XX-I^MtwSdDeI?Dzh}JmM5$jxY22&seSqIX4W7(F$ovt?_l(X_ zknzxTk6ePW_$yTJ884E*L*<_F+85%pDmGMUB^a z$V{@vxLpf;^U!uW&zxjsrEp8L>LC|%rdA0*hrJ5ox2gi1@iifH10>m+?vZN96l*}F z6`4CA+gnMRD)la85oD^>!s}e)+W@&AvZIwHnNi5Yke#eb5q};2RtU1Q)glsuJPAp$ zdPEL_JO|ONF_EhwuR?-WR98#C1JVVttsIdi$h(lJRW9$aJenXgYH$bgUk!K*Z z^cmK$$eSXESt%j4tX>GU^l&R%k{Zt#h{3B(gI~QRWz{O~i&!<`}C>gr2cd z{~T-ei_kOHL$Iu4txY1kp%h)`9%uP>QoXT1gr0!sSjBsisQVH}pwvvOQiRTSNOG-| zJt*UzC(O3SSk(FROk`$TwJO8s38z9%wi>w}_iQKMN|B}0ebMugIn7FQ)@Kj=B0Wo% z2z__!AguH0R=&tbkO)hO$N+@eUSL&ayb7&M5of&4vT{V6@jA;Y6miDu zY^zMf8Lzok)9&tg-H0_Tvf4#xyhzTo%J^8|j@Jd&Xd0K|^SaxRxxmV1QEz(R3%SVZ z<$B!ly2Kjb5xhI`RQggYDV^%6@h`{OGQFj9sbz?CqsQoNs7tMM5qh_fGM8CdBJ^${ zWiGSwMQBS{hNWL_m59(6HlJdt5?O@jp$TmQ(vvNeJpGhjMRxaiC z^Nm*5d+P2bz5nwqGB;ZJEUKS>f!t&jb3JZ9S6egQahJYx7*}mp_FmM_>Kq^pskNeI zuFy5(9hT3N*#nt6tLg^IsI#~OAPcQxj~w+rzEWxxT}K)9bb#b;tCVY2PhqaaS;0M4 z4ri1cfqL$>GCYzC`Hxl0OLxx-8m(p)byjd1GL2SQH@D0G*4?;A#L}7b&pV2ZR?19u zC(ya0*l6X6ICm5uuqs8IJBmxJO|$-aM{%jubNoN=C_ZWph&Xo?|7%T`yO+)##pPCx zh;v8r32WKObgw{d2|-*RDvoutw&%vJ RdS{)A40mV`T|$hL*B9SPIqM!q{lK&b7dUz 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

%> zBd`4`@~W*Nm$86c#v*bVOUPx^k!!V#+|Mf^Y!x||HRN2@k#lJx=dyuZgH7ZbY$4Zv z2RWBrg2az~K&=NxhwqsV29A(t_ZTt*(bi~@2QMdUI{ z$Yqp~%a{zBLhg-ep;#gj$B#-IhRi49lZ;ANAC&o zk|AC%a{c;{^Xo^hUkdq2B#oT&Ao8={5c0EM2KlTvj9k+!^7G6H@-C1=-UUXH=f)Uv zkB=kwcpkaO3&`~=BG<2kT)#4M%O{b`okGrU8ac&Gh*v>w#~gC~=8;FCik!BFoOS`Z zj78+M^$@RtT<2xvI_>=R@S2kI{wNvpeq9u0b3*UIIB@CvpwCgL;s6`6Ti#--n!{AGt*X$oZv_>oOSP z4TY=2LD_IMhn!**Ilr+GZ#=}yqt=W-tr>w_=W@^la$P2oYdRe?6XMMV&4sJg5LQF( z@df05UJUV;kjrQw*JT;G9V^J~SPk*kkn6IJT<48&bu)x*A?LCa!gi6DD6I*a^#Ifs0Lnnym-R*}y`HRSWq0`l|aBJ$aG33<)bk=INEwPp!w z%@X9ETthyEuOqj-iM;kVkZ0m1ax1rxTeOYbq8-$FCPuAiV&ppSqt-Jqa!n7BYkGuy z3O`0Zg~!tEQ+NmRDLjsR3Qr)P!aI@IM;CJ2x{-Ug2lM=Uhh4c>=i|lgMRE zBj2}XkXv3sUW2p9yVM+V&hyAQSCMnBA?Lh+obw`b?du_4Bg9({@m4~-HRN`zBad$r z`Ha4SJieRAy}ONkM&Cj1=UwD}-b3!^edO97AlLp7x%NlMwLeC#ee9fe?K_a?ZXEe{ zumtk&V4cXngLNVQ4%UtQJ6I3$?_f!ErGCrmMY~cTx?1W-*GL2CIw^(xJ6Ia|cd$X^ z-@%5^X?hEhK?!LXoi1h3Eu;~2Ybl44(kQy4G=|QS#?jeQ9;KuLI!7v^bEOhGPbwq- z4mN@OJJ=-h?_g8Nzk|&n&w~nb@6Ls=dE~iPMV@Ol3To2rGnmrJ!=SIvK*Ikb7tvxrb(u`@VwQ%30(Z%psRs zMION#@(3;hq-wtva zyU2CfL(X|0Ip+i9`W+(I?+7`+*nQjTK+ZXioFajoq7%8aZseNwgsVy9w7tkV_aoP8 z06D)Da(-##{05QJ4k4$_AeWI18bMBxLryV@oMJr0%OjUj2=R&`UOB{@K(60ph&L7D z&4hTB5H=U$&4;ima;<8}bzVRz?N^KF9BB!iE7j3?QUiH6TSnf^R*-kIRpi}l4S5}{ zBmb)3ME+HO1Nm3|P2^wow~&9!-$wo|e+T)u{9WYV^7oK`%il*n9UdT`4iAx^Qjd_I zQjd{OjIqJ?n(jc}6XVExVgh+j>_pxZyO3vgH}Z<=L0(Zwfxj1+P| zr;$?(B9HkH^4!QE&y6hd7>yvO&4qZQA>KH0etG0_3&?Y~h+IYqIlnS;X%on$O(NHR z8o9I??{XJVMJX1M&y!2YdvP6kFK!_3#mmTh z@e1-BT1DQA*O1%0j@-5;a*H;QTeKD8ZHIU}A>M9?w}(8^2jS`=a$g-G_r@`D&awNo zXG90`jEE!8hy-%|I+6Rd3wdO^kw+#O)EnaUg?RnQZ5u$YOA5J_Y2>;LBG)ey!iGb< z5#)85LtdAo$bCA7yavaS*I*ubs-a7JGuZhl5iVbwOw24yE7CJ}TM(0X9$h+e%^6t2YygTkAf30+Yyu%$L?`B8H zJJ&Jtn8(g-k8cO^_$H9s+ZnEQg{$4jecyweOA@)S`a-<^aCHDVzZ7cCCggA0hLA@( zgIt4Q#sE2UU?)~oM zT-`vf!6tGUwV`$oEgU?nfY8P@D-N-rj zAm^7v&aW?o^@p$&@?1+J=Q4<#%Mfxd8RT5D$aNkGVY#4D

8eERUR`5Uv)()iQEv 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℞?j$jilLu{ty#h)ZL2>6eJrv3m61 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®DiTLLj}TK39~`H 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 R~EL-8K4;(JSP*|B< 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

k%@Z|%p_TRbx8*naSo6jgsN0ZXG`IF>RfjT(9$ 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 z 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 T1on@>{t?(e0{cfG#|ZpCP#aTR diff --git a/Output/x86/SlimDX.dll b/Output/x86/SlimDX.dll index 3ff12733bc1d6a0de7f75b7ab2f29126a8066257..1593c2a69cedc7d0240555ca8882b3e2c4e88bc7 100644 GIT binary patch literal 3377664 zcmeFa4SZC^)jxhWdr2;^vI_)=u4SZJ+07Tic=!wpJ6MSx^dy)|bMsjh5D>Ni}E+8%*8*_srb8 zyLlxm0ouR2`DEwbnKS3ioH=u5&Y71jzh$drmLy5We>5sd+Y!>o!@r0AQcRLG?xJ6g zleUfi?ey)YIlrC0XvLRTJ66?v^-DFk|GVS!x8Hf^SN)F9eZf%^xYP0FI~~RI7CQd@ ztINM|)p_TQaq6hoe|z=b{Ky558UL64&jXLS@xJ@U1CQOn!&e@=j)$*3R=~r9k6nRq z+2nnXeFkCG1J68mJ;J>D@A34!`Uf8SG~V+g_Q#653GU!yKR-#~tB=j(`CjJXf-ir5 z1<^EWSWzNLb4;ToDdUQTMqHbeHhrvVtR!uiAW63AJbFwcJ>zjJLVBX-G)YQFKs=<7 ze-5}r1YVE~P63c$W1;@afhB40!mFj-^z6AtY6En?PsKG-#a|_}NUAY6nn;p35{=BsK}*L)svysoG-F-e+?FyZ4N zd^KOVrjtGs;XD)z4jX0iZF79chpRf)Llwr zvw!SLiR})roi0i3X|86rK1<7JYz|~RKTgW1Z@(lOu&~|HfD)d$DNSOXjmPV3(Lg4% zhMTUE`1{%k%-XoeZ(*kS(F!G$LB(3eT9>jvFWHeP?d6{Z^P`i(TPN5+a3@7nJ#PUN zGr7|O6Vw)2-65;*%B$boj#ihJ?sPRT8p&sR^aQ~O#qvix<9r+P&(EW;3i?`wudi(tXukH89v;xcP7%(^0?@3P^mQ|R)!|Ef zSfpt*CeZsEdKeL**MUf{hrVvZS3|vsZg^Y|oAt0w4@n93;pX0c{0y0BGy*3@py0)5 z88nP|%M?KtXQ|gN-W(!uQoveb4c524LZ(Roh~pPzEFv)Q3&e5!^`8lO9g;)=@Kca2 zg4}5I-e}01hu~g8v@bo#C#$r$ni~)Lm4=g10M?G$UXA|K*jzV{l`9LYT!*TW_-VG@ z_WVak&UrtlJ19>^@4N6m*}AFOKc&g!ogL^{_N%**Yt~Y>vuXUTOLkbK#)EWtBY(pZy3g)j|217Z6H0FZ!=#0i|Jw2^7sQ=X9b3 z)9p`12%>l#a7LX-W*Wo+lIOPB1#lc=9~ z+DgYD+vENSL=f4a9U5NVg8nMVDRI1Bm;sM{M4)=l8m&e^SvV>|Rpg!l*@ zdv!JQJPqAcQfujs0ospLTqBZ~>`)}??+dHIt*NLaE3xGqLqlC~pM4xSH@WG2Z`tg? zyGvWWQE5AIPj4sx-DYO3OGA{u;x|`qZFreS+R-aCX$Zs=9oFz)I!hDk_nE6d)%sCO1w-jw< zv%9pi9%jkY6gIm@E0ft6txO4eY{3P#n*whwTY4+hX+ojqvlqkRT(e|E8KF@j>oeZ8 zs%q;qYt1cfww8CY8s012y!&=@1o5VpHiaHcql$PG3nAk9r`KNhy_^%SPS)BIKJS;L zkaJ$kdEIp&=VZ=DY)8)fEn$l*l5>K9ZLUsABgj#S0A>!bzvZnlu44qy@~+kO+A@d? z3P=3vP77Gvl}aFkk4j50D#dF=iDT81lLF~H5ox_^MCs?dU-nzolV<-I^`z_{H3anD zy#zl~J(=#mQaw4Pfr*eD!38KT|!a5V~oEZWN(AKY_TbS?!js z55-DB_)682qx}Wy$ua)x)RSZV*Qh5gg#J82KaS8_3B8Tbk0oP2e;J|wR04Wl zzC!inMTE*hsHPLDiwV^wgvv>%E+tgigz9oabp@fyAym1EsCbj>{F~S>K^F);J#(=1 zkg5L9lWoRG>>YCaASt(2H`4%S=bD{Hj^541+k35?78uXGc6W&q7%kcy;|p3H-zpN3 zgf@y$8%3y%BGg6^YNH6XQH0tkLTwbGHi}RiMH1V{kaY@~S5_k?zoJIWelvteNKqWZ zpf^>Gq!C6Eq6i65WMGj4yg6X0U+a|o14<<1W38MZAO`+YH9|5HAsLB~j6_IAA|xXb zl933>NQ7i0LNXE|8HtdLL`X&=y<{X_ddRcRuR=9KG7}-0iIB`hNM<4=GZB)R2+2%@ zWF|r~6Cs(2kjzAS%M9TQSk$%lfveBy@$^9?Dwcl`iQ@c^%_eyN$Edwhg0c=f^34(- z6cQ@fSAc|knMlTHw&#UtW@0Rf8gSe1P->eJWbRb&%%nlyY+9krybi5UVctBg&;qH^ z3T@1rsTF22uTv|`V%`~Ap`CdZt@5F>LUe@zL@LOkUkpI@oeOau?iJMv4E)qT5YLT>c0 zh9}VL<2We4H;Yv&OmV+lGl6+zbBp`H;5hoqgKjnSHUNa$(Nzo0#=SJX7W3uoR&QQ{ znps%I-mDI;cDz6%73MS1Yon9u_>@Q%GnHViJTGuG>eB8}w0kVEM9r<;BV#m;*F;p4 z#;1;~?>9etwaxV#t)vIcU07Aky0wyU^tw=~(1)em(uv^`mRYEjiXgd;vyw2|AD!`3 zRd_$%*&B_A>J*>)kzDhac4yU!4sEh6Skkf5RuQ%xk47I# zuXaV561>-DeWp17qhRJ{3jfj4mS#$0B|SF<{v;+G@ea)KV-{**Z-z>GsKTv9c~WCE zFa|R#nwwyfSH(^Q=bD1wrPTYC#;Hi8b%ke@61(TFqVxuLM+Mv$g3W(n=+YR%ByEil+i8odFY4*5ciQh9H;^ zF`;kIMmlWGB3nzFY&Ju%$)GJF3HK<`BE{7V;C3_E4=y)Gt(#hrsq|7OI25bh?l}^VD)kb!>8H)U-m!%?@PPh6qpL* zXu^Gkrt7_?z&LeBn%a^EE*)_-w~w0EtnM~7HnUd0S-U3_%@(uZ(f(D{E3d+wo^=bJ zvrck$91o0XExiCeiXg!w-$M3>;7z8j_nC``^;Ik6`zG6R-i%J_5Y7s4KI2M?YtO1$ zVL_Ofa^aN}(|G7v5>{*Rn@!6uxV5R&F6QpCRJ9@#$-&aR6=cX%gm=Hs`_cAM9;yCT zQG%Gx;_^xsP4&v_qt|NXJ!CVHsIUkXI~o`rlW_NqfnxMMwI%QQ3gG`GAU65AmrvCr}N=k?f zyhrLnCyq?zJ=W)?iWT*!1M0$gG(Y^rG0r1i)I{(>>+5&$y86%O^*lO2Jz+qbX6dz0 zKpA5_e-QfUO?2iec1&B+6Ra}nDxsR)K$XsUAGY9|P&=+@MO4(%Z=M@?mo4c*ChIfu zIP)=)unaOYwJOG0ttbm}wp7=nms7vn42>LQtN)@5>-LGIyym=F$$0xM8Nj%_*8k9bv%@5(5J3cl)%wwR&9y?-# zC(r_yT}($CbPX<{Y_=)GoNsgN!e0|Z6MN7RhD=*O9Pa#mIQVGnTRB7hlKfF{4R}#y zjCF|vVW^ZdEBw@-cy&XiWgK(qOc4|lY^c;D-U>uu=Z?72Eb*2tf*ArbPrT)dz(L&n zVyM&!^%`0hN~hR3KdF2xXdz{IMLbV0;ubryaQxhz5fTLnmO7uMBD9azwLgo7JUzUm z0@x!Qo*v=w^pHl7LLM6ht)5J4(BqgD_$^8qFCWPtwDmwDsQcrfzrEyD75-8uJ>}BZ zjF4CG$~zP2;d09oPBw>l{3gc_PRb0q3J3C%ipp4v$%FZ`sgpf^4as z6DoCxpn#(;6(uVbWJ@_&$a|<%Z@O%f3$&a7_CSwDL#4$C?&U2>p2Rq(gaAWd&>-rS z4Hq-D$Dkfekv4z_lY1B`U#^Gsf_JJs{IC?R>pRs)qa&uEMq$nYrm+Wn^Vi!PSo0A zob)EAhRKMxZrO$2Wqqc8My_OwIvcYPp!wmaMx-x`01)wbqZp1IS;5VAN+QvZT{>5L1>at+FG(I;+;l=Gk3`g7R3` z@%&YCZBB5xQ(_8iFY`Xu(h@eC52$ZtJY_oA=2OxD>h_P70bFyKRdy7rJ8i(?uFk4? z0XQp_{Avf`a}vJu`{3&t5TDcSKOgwcCwz*)r?{&fF?`vCFLxk(kpc1L4u~&1hR;U$ zG6%xfH6Xss0rA;@@37{F|*b6g2c)ca6 zPV;W|a?4-M=J&zNpPLT8txV=wJnlld<{;*gKH_9Raj(g%`NdMh=8@q`rb(ba^T53B zsmmqX0{pMVf9@5M?QMh^2o*@UWJ*i#`$3#p9wq#vMkY(D^c z7Oz>W&cXBTwA z3h)UvY!wf9qG5wRp@zqKNKa43o~RSjC)DticmPhC1R@Y~bZ>!pD;B{V5iAnHViBwp z!EzDY!GnfP6yOtTxL-Wr>7m%uBgT{0PfvYkn8eHi2@Sl-#yhJhiM^}Z9zD8!L3@cnr@ngD=9^#TOq750Lf}o(X2owr9=&92C z;-i@~Oo3$uwezdEJyGgmbJ9H+0>_JOJ*?CdDo*!s0z8d|$7yVq13_jCgcYYNA&-Ng zU||%ymlf1J4Y%A*s_)9^it5G*w&mZa)C#qu01j*2fn5016@6c6W1ARJ2P-Jpb< zwCn*A41KB%Vnxgptn6H{!U12${HTqs?`(|vuUeTGEZI&zkdh8EH^O^g;Wj>e*1_`a zp^^i{C#~dFmNCCNT2ZV%PdFui21e;L@`rB7Vi%A*9;hZpuZzA?E&K=J%HI(hg*{IV z9P)7q0L-WB@3lz&@dSw$6R@rDwzK`ZcU||uhf8iZN!4L1$0D=mNjO5A4Pi+J(UTle z>#IUUo^Rub3|Rvr8`~eAiR~@b;r}#XNa{kH36eg2YjzI@Q*=&*HXAZ(-Bb%b1yNYK zsP^An(e`xVA7{Rs*_;epf;{+c4i#tE2z8Mf^0=2SsyRft=G5lGRUc)(ioWm_G5Cg% z1MT5nI;Z9h%2Hf=8M64w`erDLWl%$N+)IlEfyK4iuIN_gyR9$yZN0%413a4l{3aBz z_KK~H`@)!IJ8Cdd7grt?lDAVGO5Gf?=5@+Lx}o-Rwwd%*pDYv=&q9DA3n`IWSG%G+ zWI*rX{+TH%o|&?U%%pdS-s1@S(4(k$76Rm1HY~4oG2aSii3H_{+MT}UqNp=y%g0Do zCMUMhicoPxMkds6!}6Nn61V-eaAAUfb!^T|nxh;2+gBGVo@pUikw*QyR~lC?XzK#^ zQa`K}pem@n(iJu21NtJP7e45V42}a!*gOf zz0*hZ@`)@1y|;{&cLGLC&6VH-yOADV=QT;e2dF8---ib;T5AzqQ@BZ4dDn97JVNwY zF`?QSzD}|Y_D>oXlY3){u1c&zg=f7ibV2J<*a%3k-vAvj$$%m~K$=Ht1xdCq=BDLb z3*WHBBvpkoI0n-2z##Ov@tq{TM>)R#Js{Muq{!Z;r=Fz_Yl52J*-$~Y2J8J8yZ|G4sq!*hMX;kmx(1s~TJad@sG zI6PMoz2F~*tO;cihv)i%;GrL~d+CQv=!eG(4E+$x0j0oIu%CKzTqo%1aYdj<7`^{@ zM53S;UYYp#facDk{%_z`cNV)h6x94B*69tTypy9F#$nML6qIeSf9fNcKVb8kt*W~5 zP{0CbBUwj$pB;>y5czr~_TuwTZJBI)fm9C0ACo&haFL3g#jUdX9(ER!MQ>&bY$q)K z!DC6A>z-YOHAcP>c`HkEn*fh($jCxFkq3eY-8Ax^P+p_s>LJR9WgwWq9{7X@n7@hi z=qzlvkOQNcX{9MzF-L4I;uw&wc37}v3a{6aF0C?>zp$V-P=#f0UB4E2TzkwRc-ivH zY_)SSMe~ru_h5d7T$@Ylb7czl_T}5Z#+GyezsCZbM}r%<$WzFQGXUzYkZXRAH8;d~ z%^`Syfy!NGtNCA687YK<21)nAf|_sX1}C;a_WC4KzARBb`|!&L(1FXBl|=b4zhv?G zWkbhPm}A5?NMJW-b+1|G)Ad-c#v(Lr3E-Zeqld=87#9=6z~5-3*-G8-2I(otQ%1G* z(Z)5j&9y>~33R_vEciVduQZN>Wh|`L9$mq+%+VU}zyqzU*MbOZr zZN65rjb(&NXh6i=xmg6eD5&<|7Akp;hNWl)Bliiv44(}ohuu{X zENE_dXB5XiD~Tdk=y)4iX-JEqZZ=B2nB8@oQR>-A;9VSVfe$lCuBg~x#|r{+{jW)= zCI1*UO?z||9^1!+8Y!gKW%E7QF2;6~&trE`zE5jhhZOe#>n1YROu= zn4_-Elmb3=Z5FoQg?tgparAZov%<)N=+jg_=CMWZlA~9PYD9lV?H@gWR@d?YXXLpO z&$O!9xCvPZOQ^9)f5Osb<3o6+@DV+HLJyxr*xI-a-{?C%ly4<+-cRow$5#D`?*kYJ zx$Agz#xH_FqFNQc>kx_yw_x3PzPswrqD7820F|-L>M(7y`tJjL>qBcvyTrG%2YCtf z`A7XsZ0z*R3Y=*7ft`hXYkW=%-}?~^Qb~grQ_cbZr-FgQ!G~$LKX!!36X9vMitQ1K zI9-74^RycR+tjsRbCm>VrA&eriqtSS;`3*!`Z7mi;&b1YF0&C;6f1oViAU)+e6yoKi5{OQe ze~aC^`Catm1pB$rp{~nNB9-B`sa6Ah@I8Lv( zU{%E3VlCb6K4w+dQtsmG6(RQ_nQ}?N%)e8|GarD%cL9cbB~;u=5fb~XgB80iY8}>O z8fa`{O6?b`qJFmx^B{Ya7h6=q*B&%D%lq%gW-l0fl#zN^u6nb;*bp_j7I z;nO+E6~NJZNcMPpGp;Bx70wf_?M7>Fv_lZs>^k<1<#=$v=)Ve^V%3&{kOaRkeD{%% zM>GgMDKwh%I13&m_ltppqK9Da_YIQx{E9s5W*>^@IwYnLn9r8YFu$Y)Nyn1L#4Zb} zRfrFrgv7e}ABZ4$t{tOnz6I-theCxMF8>zAy7@5zh#K}xp~W0xt7eAkX_7;@aFoWW zK2Q5iB-TWcA+GN6fURvo5_*kCvsDEEovv;uI~ANqz!jVd?he2?)EiF)wrY4_{$YVV zRgZcN3v$)E;epi+3yiaSdSO;kLx_wuHyUOmZ!zAqtT1ajb}92#6=LR5cRIw>P!~2Y zGF*hl&?k{xUc{^kYuyeZKSF5SkfM#dNKNtCXCEI(d57z_;f5ECeY<>ltNqZ{<37nY zu2iz6;eRUr9q2_^%Mi;J@ozKifrbv+R}`CJ_h3s3ZJ%=;ug{mNwQqEh!~`Q$)Hj2T zJqZ1G$L-@FtdAD!CfW{q-`M)@TcHBL4p!r6#do1SSm0@SN9MDr5`8{l6G(LVy>I;W zHtY;Nh@GMHP1je@&d`=LwK;9m!CpH<{dToA&wV1$%xylHKdAKm&l{CyypRHKyHel1 z#P4ZRJVo_x$=Y};`g<@)#df#&tyHR(3Y=kjf=Y=qu>PMc!*mmia~x%U3?%>sKJ1mG zt(9yX6k)ZNZt{~F8CMk@PjmJ!;Uy8x`@c3y7JZsC?#1v75>tQ{P(Ipl?fR|S zEZ-Uq#XyCbhW1!;6caqdY{NUY?!!xSm!mp?nK!^lH2BGO4ws2G!Niwz!x_5>;3SIg zwWSh(9zR@08*-(s|%?fUV0`&F2(pHJ=AoJKo) zd$(WUD?uL??96LEkCnQ0<x(nP{I}*Fun}O8n7)QaFI{lk)^g|xlh!*4pW{q9j^o{wY!V#{@JnW0UujvXDzNB z|1E*1fxn2ynRq-zk3Wh8Ug2Rz;3bjdK~l5p#S<-3J)WNFg*|#D%5BI0?m3d}PJ}wY za7MOFrgKi|`VpgU+5dOg@tEIbs_PZWKW>)wr)8O#>E`fFUwDW+7Qk;B2Wls9NF3bA zaveNzm%1U|p6m9$<&Mb-3~{(MMk34{BZ% zy^5ckhH&D5U7Nftr*&yiZb;nQYSb4bJW5M=lGCYgF}@^s24z30h{lcds5DDzfl1_Y>x0 zHU4t!twI*;mN%R3Q6TV9|5xJv$c==76+8w1MFul#1y8k?v3VBP!SMT+BK`o5uFgVl zqcc6F{7g?NKQmOyPyCeHU6?hsnXbmko>G3YXP%kCw4rKr6~RI6KMvywCd;@)GK$31HpJ6WB}M?$>#-;C zB1lkBE}?#15q4uifK=|-b6wBZDs*h|Gt}uR8pvt59#UHnZWuWKR*PU`e!%aQ&fnlu>&gGukuI6}~qw$@csv znU<)Y?FEwa7-g)OY$n!Gi#|Xg1GVV0H&D&MTiRjsJxERaC|49mmocQV@A6C&SrHnr zO*HD{c$2opoAd~~NoHofNnr+~Nsk1}-(WY(FJw^xmPE8AZ-npM3AQ{yC0dz{-HqX^ za32F7^}V5Ve(u!RgwKUGc65o$ZOE62e8yriybtg&`0OE{lVTy%*yVSaW&$TMwZMTI zI#`oV2W#kb^ zcQLIERKgqHLwUg`e>STO&u07UE}kt4(*J;Ba8}mZw^6L9w!u!Pcs@@PHlHIXds^De zIKSUf9p1c+_jFd$1x4J%IbG6u;x1V$4`YAuN(=HXCqmtj9PT6jHAd5+u?B*H{6Skgu!{LJOL z2y^*u!~ViR*U{^##FZ8{l@-cRGC^5&zp;9vN|QJhIMkgK>wcr=Z>;<LJekZ{25-<4GuVy!l(;uwZ{>GCPaJr>}rc*Zh>xK zS&%&IGnI#|&y@V04#B^j)$mt-2>yWe89MTAMz~X)fj_`@AmUkm2L46YZrW9Q-t(kK zbB^V_&riF*oU@P4yIXMH{Y3({xpq?;L5>mtlx#-wJ^?UB0JI#nx{jeW(9*3`a}%>{ zr3s1qYSj0$sPAm5SpWKtqv!zEK)TpcyZKG^9;}Vt#8!i$yS2dX@CD5}Ls=w&pPBA_ zV7&`iM-Pm3JF3(RtBqr|1^A1AMx4dJ(v)pmC+V% zpToNGDQyF;}S!dR!?JYjV~T#APU0OiTe@&$tBI&_&8Zz zhFXPk8+%lx7@XcMX@hD*hw)jC9yFr1BZ`${*-kSZ{V~xeIEq9}k>zM--zeMB>!7yd zx>=uJsU5k{&q6y}!bh%vYVO2Ps|C2>(N1!T9cJm^2b2>D3j(gcSp5;a@Qj$CRZ!{V z@SDg_19kJWq^YgN-C8>4DWrNg5hgIDfpW1d-G46L6!)9fjdX>RIAHsRRb5Um>pL;_ zRx8|h6D-8}?`&(~KG-qZk~a8yYH}c9mzAk)J#-gENte4+UX#VHTbXTse_>Tvc?v^j zNf!o5tyF0r4L2ZlGvLGgFmMFpYttkYNZpw&`dSke%IEkc$YP%2fdSI;mKkS#TX1O* zq9ki!WfxH{?;y(8VB7=uxkctM(> zC46?cvx|4o24!)8awEu_-=ulLCBH_4Qhx$!68%{=S9GNftR$WJ+EM7t-4LuXTxTM- z{W9!6#71}~F?p-z#lFQhEGVM>8q`(5qM2Aami3}OtXo-|$a#pCIC?J^S_@Z_FNJ@0 z8I&ZAax8$Mu!)wGUgm&DAjC2MBFR`7GKS$zt)o#zts?~$As*GP6w1jXloP7KW@5a- ztS7waIlVfVk;fI|_^rl#JRtg7r>+YjFm=`780m$|PU>s!LJV3FQhhsWzQ>kWjPW?J zn_YlKTX!d>Wj7jqjNYk_(OElGsPTs0^A_G?-r(J+gSt_BWAFK*K7W~$;H;=(Em&M7 z)xZ9*wtjDZo!`3Ik5)rNRUUx9ZB-pBo}6cX|3`8l^G6;mx%p1XpEMVDi=$tbCQ#lfQfcX55uWLc$-f?=#j)4wLBbqDTd0SPu{4Mw)=jNFhcvZd^IKAqQ0+wPk$@x_k+anL{1>$3<5wxUKD_S5UJ~norW1 zX0ATC-~D)r1-nTbzNkc_FGSlj8s>7DWkon4VP{1+AmLy|PC6}7lud^vigIyQf)(Xy zzC2bmL-WmGMKd+uOjcB&`3kUCK*KhkqGHWg%!6@t}vzpj)qu$S->6@ur`7?bp^&$RD-%Nd&Khrl;AK}mR&D6*F zGkr7l3I0sqO#Kmmrf;TF7t{DoG^TFD^L(~X+e{DPDOkB%h-v3%I>Bo`DRp3|397p( z$0lbR0%l&Q`JKx{o1C3^qYoZC#1j_4%doTlv&N7-{}SWEy~!Z~Di#H>B0#Tb%VwN) zK@Pn+e*tx*6+6MoERwJ2DkVJXelfAPHhmL`D@}+m4j=e0BeDUJD3PE$Nl(7(K_mHd zNY<^l@UDxE!dM|qzkQ2fK&+rW9a?dnvw-$R2&tlDqoCu&@mV}cNSuLxNBB*wR12=W zi)cXD!nAlTq7ES{R+8lg(RneVqe1j$5apHL+y>})y&uDyep)q%a|0FB1W&$aG(iJW zc{IMVdD?C0ob6-r>a188{s5O%P!Z}DqxuAa%wPa7R$Uoh-p55F9Kel1ZjN(i{sRYq zvGz)~nVJ`PQz(=9ISx(+ETu%KB|C35Xq`-o zK*&{5xbxE{%9ST_IYr^XT|HNxkcK{5F8oX6N|^KZo}TLGH9}sQQyTcbrfiXxD}p=` z%n-p$5fq4EjtD#=C>BAP2yPR>A`#pyg2fah?st9?BFd<>cA^WkQI|4=9XajE|v%DPz&q|zwvX(V>yk5eD0;2X6JK%KIUJ-lKNo=Dk|)q zU(!Um@u0P-iQ?cdD5n`1uyufjyVPFu9kzvJA2i7T>L6bgOsxKan$1Jl=BV)4>SB8(llP0F&Z8*Mb%21Ax~ z6_NO0dt$l84PI@06SF*>bC^9}V{nekPib8O_w3-FM9IWGvHs+7{A==Wi`<`o*%Vh= zHz5DOre6FjF!+aA^6TKAdM_r2B}YigtegLc?Fr-{jBI74Gt8}_5(~xC_6_Ui9y}5M zI&}VJ>ii3nnx@@S0n>1VY_(V2`SG z<2aJQ(izwR+X}hNFT-wz?;#Jd!=n2iJm`$rm0V}DZtf;dksie!S+xa9lq_8^X)l;#~Br&@=7N1N%aDsiPtmmly2{Mz0GW?46r`;HRBG5Hdt!Z0w4{@GxV}@cv7zM=;BnU}NCF$J8@H2@3!Pay!w^`g zOp6=Rx$)o0w^x3|tG1$jFnCAY^ROA?GVEZ(4MaQm;wVYlO z(@g=uCz^O<>lBN6FRpYPr`~Hf1+ZaFfeyv>^cY~=RrZ>v2)Dl$Q*>i}+E-TyAiKa? z7o1gqH?B2tNCA(B^#pZ}(xteo{5AVfrA1DAepQ}zGx^C}d*F9*MMK3Vy*S*6!K+@R z8F=JH09gJy6Ew^(DA&Ol{TVnhQf#t>ifsl0{nbFAzZyvBHGi>90fYE?xEVzh6MTV$ zh!xv_XeOUqfF332QJtb5iBaK%C^rz+{DQ&!Lbg(Mhl4CJHx+l|E!6)}W3bRcHFu-t z8{q}O2u-JS3g~=?aU|!`-sd(EPn!lk4nfI-gIfwc8fSG{+2#Xyg@S;C0zGa4{A1i& zVg*gX%qE5l8kRXQP4zpS?myt{JT7VU$Yxj!Scp-?GH?47{q`k2qudnoaK?GvbDWNv zr^K=!Opsz;23*4``r1@?sPKso^_NX7hHT@>{h)!lW+0U23)MhhW z#O6+T9t+>Zp>+qlSE1fRXkaI2avH18W7pGSydd}i2h(BP2Lg|QId-rH$5+Pl%gv5D zX;OauQQ8A!I0*74!q2l?h0h+Q7<^oljq8}WOofEi1OuJyR-^~U{EB?@N54f=TQGy8 z!Q~-v7>B14D)0oz8k_Oc9T{-p|6VgS91+@!kRL6=sc!PgPuQN+*U&ZeM6g!=u zB^iEycoN`$C+9og$&5l~aRWr6fP{@~9k9i&u7i1Nz5gCeX~hoP7SLv1XeYfGnI5{+6gDpvvgK_vbf9^M zdk4RZ!CD9rrquxiXe@N2TqpA`=`3MLQ;FBipn5D|CbJheM&eEd zl(8aQo={?R&6#?sL3jq0d<^~ zEit9<2>cs;b+Bc?)xqr~Jvl8oJE+n*FZ0F1t3~}Ya}MZhggJA-5V1~(;$<4(e7!IR z{4#;ln&FEEI93e}a9TNRfzn0p6MiQS^Eww998&Wou+kZ*H2grNHpBVk43TWW-6KR? zc)~&+i-_c!mRv-H4bt1}UquH5{23u}nHd(7u{h$z{p2=u@^Wpyg5z8B+31zF@YsFu zXwf#98&SYwt^&`($J_D*Js$^!xxs(bC`nI0urImkO>O@BS-<(&Pv zTfO%JGt$HYGY6n#5|;h(1!e${n84-1LR?6QD|~@D3k=HTi?&`&;(kDtPnZN7{Qo}` z4>nNaF{)t}hW;+%2;Qjbc#ZH^u*CzWIkDVi-S{3&)JVX=cc2AeCbXxMbA9ziVm|Cb zpT`OT^fzyd_t3#93!0)afb3X;!Ei**#KL!hjH}6MR2qIW01BU_Z9W3Z*mIH3F9(=} z%K>6H{6f`Z@EYiX0OxeNAmH7H#6jNv7X&1QYzs&BeFIq=h=w-vnGv2)GP)#S;@&h6 zT(84y$O>&HF!}&sYQI8PhZhJ?zK{TU6L%nBv)S0A^Jx-^=_Xo^=9|#Rd>T2AxV_kE zLj+%_iC(SWpNo!1Zca|DB7E{cc%9*BtdKz1?<|hbt;T|JYF{GSN1rYLiK)4(= z?RA$Y%29@WqSh^!Ly=&wsQn(vCbW$cI$%opcVl&pW8IVi2)6s^cM$OV(x-&C#}ofb zJ$(1kA0sjR{dn{%BDxjPI@YinPkmaXzCnn+c9bK>y5;+b!(oJ*Q4SO*w@-0=@yvB1 z^GihW-{R4?i|8W>6vxL?i$v=2gwzkl#A?XZ)b67S#z3RAzl*14h`du1QvWxedX((X z-A8j1QokKfeMzL=n2>r;JoU#SwIU&PNj#N%;ddYXTtez+;;DCuy#9pL>G9NsB6TxT z*(~hLZE3rpC2~QTb<k^^ry=sB^G*Ms{(ri34jW7rQ;;0%>Nyg43C3&Dt{35P*;MLhL8A~i?_N2#+~ zBGZJN(ozisV^bf&xH6t~naH{kSsUJ>A~tkORK_V`B@T3b9Dn$j600o@1}M}I;)UY9 zV1FFKBp|i{BD_5wjh`N)jKA%Z@tbjo-2&neWxO{Y{WB5Wh3J;IvRb;Q%~HG39lwKU z96f)iS2ZVweMUzAI#7F$aJgbpUq+M#Q&63qDEY+jq*&@rNWBoL;j~!POhmc+WH^$c zGXvN5?mk*h8D5S>Wgv>XeVcc}c73r9x?+uF>#CJ(vk|KJpNzN#_@9CQ2;QH=|C4xr z0ROA-|9gT#rHp%?Mj4+m=^4tXQDekWiP8KsYV;@`KC)J_x$YMKC-JP}d7J+KXM~3B zO`+JX=asST&ugKt%#fF^){d&T+dm3<9bl^zG8IpoViT(h!-Mbo#pI;m<<{ijdrl+= zfBzqngI|0gIr!(2Ez%$jwc6S@cZQ8m;W_6_}pE|!7qOzIry&sNe!$ZU;LNk@IQy!+mh*z%a!EdJ3`5o$Npk+@C6qpSDu0&B!^!m3^ z|Cc2E-;#rW@^{I>zxwm!;2-)w$-zI8mK^^(jwXlSpQQZkotj*E9@?E`c`i;4|0COz z!~g33#y~dy<3S)R`Rok>`_xf8_n-;JcFSFHcNJuDupZ$-(zzCI|myS90|& zwkL;w`A?F=-;w0_c=)a4@LNVFSN?|{PY(aC$;sijhm*tqTz7KtJ?+WCFM2IG_~nO^ zgJ1lcC&$l%mgMjsIWIZdmH{~d@7SHaas*HqWvjpZvI{eLO? zt9mrSeTO1`k`SR$#NYG?xYdO_lYW}Z`b@p_Aa`fJ+KW^*fh03dfLv^cWmg;V&dav{A$p2@&L=3;!u0g4XoH7sK^q z;P^2`+^$Ek1$J8H&>e~7F)Q=?;Y7S2PxyU7!LNHL$Gt|59SM%ZnGA0+$Ke$xc1Rw0 z3^|j1lOb?1#s&by!MxbzpTG-@|1o}_y_UyPlfmNO`i}>A05j-Dtx*A z!jJajR`%$`AnsVdU$VW!B-^D37vTTL_}`Cz+}Ue;1pjyA{}}$$0NaL;;r~~V)@1y2 zPb04rdFa0f&$lAHNB{pW!Xf>0#!cm>8L_$Pu;9H8@LURcog&B<0bdUenVvjo=oP|6 zpF#b727RwXU>Fde{N%{uyML^qCq?OoQ9jeI*xYdh>Jzi8hE0D+{>=E^$nt0Ln56kL zWcjwm=1n70-#ey^Z26YQ{G20GzU8rTeq`_+{;v^k-*F?$zbE!3T|U#Mj}r5oo_=`f zf|0Gy9j1}RXNlPv!Cr!YBoWu}=+EfYhfk0Gk>vHWspnUTWj;OnPW-lJoR`C^e^1QU zF)a9@+y9Nkx(o}SY0jI8c}}nXyL#ao7X2aXvo5x7Nx0~9dgXg$Phwq%h0pZFtBH9| zkACrgC*m3w{UP~N{L7KW=ZyIgsBH8(z4{)B`N0IX)5aI`Lyru;O*=-Gf0kn-i*Ikt z?>I8`b;j1oMh4%a*t*HE@tJZbChEx3ldmT_MwZ{jv30m%*JtSd`B>8BGg+Dw^PC=k zo{Rb6My5X7qKRcAoTn_GX;Ew~Xjt$=^7DyFiLx^+e5NN3Czkn?N~St{mr;zu9UGTbfXwX^ysB%JN?I^6 zoHCm>+s5W*;fIIS?x=s9HaipfWt4?5hYI=8x&Hja-C=HTcFpMR_LpVor*D@SYWY=I;Er4|z^m5F0R zp(u`X%(dgE2m(F0Dzz$n81+pQ!4aW1WyhfO?&wdiZ{^0sYfs|AFM{sCc@H z)jRy7Gzp!sUwhNfQkVi`vB|#vt&Dn58N~??bYC-F&RNz6J`M15xa`G6BT?QG;PJcV z^{Bw8?U|>7#|_!|C1ol~T?~}ulYVbYNZ921IxKM7=tk`AWq{G8l|PH36MUtz-GM|l zn+h%CzP^N7iF8&-_|jOJJy5E4kM(s*lk=f`1dizZEfn{^^-W&x)n< zZr{6q)AiMH{>;R$PEskSQYkN>QeH@-uA341NSv zXn-s9G3Mfd#+Z5b>To+QNfY`mK{v()5arXyn?5A`=jrgh2c5qTI_SKQt4GD4(@KNR zyx5>q9sUw8L+^=?UWAdO|8<;)AB6rp|4BR;jK28U`=z)aFveg1*ri-B@G}XxuEH3U z+K>BiXTzVx(6stu{woFv!;#vG;pp1%-5ZVJXbOG~fhHsZ3m=XEV@_u`@zDquKhNa_ zE zpy9ftR9Ha{R^}wVB5a{dvW2Y3$j|*7pguXrYg?uj+VlvnAw+#}LkAAGmnci3w_A90 z?5kgTuhVrg`zM~?8OzEahBIE@Svk;1C-4ycVc4@dgP{=R?>#^GXwl&G29*b6Kai;d zd*44f_Uv=m*LcqC*?YfxX6)H-{oEMZ``NP=BAGCh9_UyE8oF#kq;wOzkpr1Yat%ruPCr8Mh-Z41+DMQj9VSDy} zRvW|7sqNVf|3QpN*|Vwfh+NIW|C;izCfcuk?W;lU7h%t4{%BbCtPgh#rR-U54}T1M z_Itj8M!KZz*;@xgG0=E<)nLFNIjB6u?Ab-Q%j1({&vvkLXwUu>zdCXz)@MWiWlSyl z*|P;ia-{9qHBSsmZ!h@Uhu%orvtRy-F@YF{JzIeCr0m(${2?`e5RU1-^M$_egO3-c zJGPCGJ-gvELywOo{}T4>_8SMP#X#fp0|P>yA$#_w&1cD;UGS(e2=udOLyc#_o_&9C z`lUnCA7Oj;_sfmp=+yS?Pw<0X`!Vd zl>V9_>5s5IJEqDQj!tdQ{vnXEXH(~2dY_L;t~$6cTO zD0`rhPK;lJ`Ws^Fr84dZ`{dY{&)sj)Z*4Y)+J5$>g-DLHeObC?P(&+&kb@uG_+zUdvS#AwOh&z^?qu5?J8cd)PCBO zeoyK5)70-`{c+RFF=Jq;^~d9%PuXh&uRosJ-r9!ytv)&S)|}hVp}l4O+?lbrE?a91 zmHq6kM^N8B_Rr~`w|sqYdb$1SjkLYB$72l0!?3p=xh-XHrS=1*_5;y1Yjo9B-~B&* z-^F@V{GNpow_nCCIZO7-1izsa``IsB77t}VjFA2E^TFw73`u{4?U(Pk4Rv{H`{mAC zi7_erC1t;)?3dx`%R%SY!hV^9AF3S2degP|X)>Z0*Sm&Ch4k?!`F@*0`5Rj=>cVd* zd~)oU`xl)<`(<9`nXzBKbcZoi_p@IPqrM|a9$4-RnM=|AW1H|#Av zhxW^ZWoO2I`Qb8SsP1RK*okDqPKo&b2hLY-Mzhv+-BxprrbQ{V2W7pg|DE%#k zL)lLwY`;vs*ie_JwqM@$rtFuL{gSd@M$CTMW*OG{%QH8m?3a&gzwE+qa({BxUo7r( zXus?S@iTEB#5)U&p|YR-vY1FFjMO7yzkF-qp!7Pf??-Q>?H6sTF(41aep!t2r0kcJ z{gSd@{z>eYm##fa_RGO?LrL|sUrKoy613u(uwQEC4oW}t>9c6R+%m~fm#4O0uHpqt z?H^0&%apzxp1vG(f0I~$$&JP)*F&wp9M4PHFCW)_vEVn^KRNcxoU6{E{bK#MGh@G8 z<}-%Me)h{FsPBl|FRu?yFSkFvk+xs>nF@#aXgn zCU^~{*w231a`{m9!$_Tf8JvE`kn~4*{pCA~p)OBtzucKkj7ixqDf=a5zl@0e^4#!# z59?ZI%6|E{_REoRu_dlg!2YrOr=LUnW!}YS#(w!yzA;qyvtJIQz9VkGOu2qgdUy1v zH`4aYXp=D@55s;r>`2)!Df=a5zx>nKFE?Fqmh6`WGYlow&wdHn&w~B({^0aWhonEk z_RH@-{3xpKQW~2Br?y{yGA(7lr1p=c_K%I&{;{r$W0UKl)?aF;r0kcEYrk~u{Uoiw z?9Duf_RE8l&W!!?!(3yi?q|Q)iDbe~i4oa9R(<85^qvHN`_LO{`(;*_F(41aezBuG zsr_Rqe`3m?I6QyinLqzxJ4^P<*Do`aR6qMAgO?#eE1rq{W7lL4N`H%WDEn!I?U$+V z8S3)X_RG8DQua&Aeo5IcBWAzc@j`5JJ(T_O%$St@@^S5#BhSQG{0Ufpu_))ze%TM= zXXO0LMaEFs&wg1P}*6vUv7EZP?x8+U#{W>OYI*^>C2S9 z9G<>B#rc=aJ+aC4Q1;95f0$DDCu;-!Ugx0vjoqK@Z;!F~6JWp0`H)5xWyuZ&KZbyh z?r$t}ZeKq08e8KYYe|a`TzyCzs<5@kbVlr#%O)B_Wk37n5!83Y?U&aFrW$iuK- z9yw`B*)ItaP4Zr;utJj9G*)I0l&amM{RL|G82@!@_gMcmYPZFIrP_U-KU?h{=f6bl zw)!tryKVmS)$Z~BOtpK8->P;`_K#7!FY}L5yFV33XMBI!_6qc$1VVcM=|`_n?Y@Xe zIf&GBB6Ts5x`aqMiPWV;Dw{}MPNc3NQaMB_H%6*BPRi)N@$q(|f7JFBF@XN*so&2Y z>i4sCet9fimmgTlW3E z%D(Ss+aB%HEeQv1hJ z`^QFX|5)y?W0UKl?3dajDf{K)+Aj~i6Jzlwz<$~L);Y9a9(?=E*e^fqmawRl+1Tvw zXTR8qWP+!0MC_O9lY`QG68!B$Z=~&)SuMtZJPiBAj`F1TkEQ&HDSx6^Q0Z&0^nE|$ z_6z%eXUTr~dY7T3`q?iTybK9i@l34$T=Vxq>2Enal>Icq_RG}g40U;G`{mt3Df=a5 zzohJ!5wl-*Jr$c=4`shR^LomD8Q6YVSXIrAg}*sXlA_nL3+lc$!4`eRh5Jb4P`ZRq z$R|^fzd@VVRC|>8(34EQGu~J!Im*UQR9KvR0Uf7be7z5o_fGoQlND?!Ul_wLnJ@N}G%QNPU9jLj9YG@tDYH%^qK#^$;XHdkTk zLAlAif0;H{;mMpWu`il`jAkWDP;TH87Uoq1<8+9TZjXOQnUginRqji1}bk8@3S++#UmTj8^oS zkk>{%Mku`mjHplj28-mMgud9jpR}SU>RnIoPi)`Pqq(RF@sm!F# zlmg?_W?3`2TWdN6w+7*2is+3A;wDJ+`FUgLf|U zk2|KEx;@wu8@e63$4=2bs#n^yN?W*Lhe=|Q#%N*}v0&I_l{O}C)k-bYOXfjRE!sue zJcW(Z3ciM}vP|?9i|CdE_LpzYqTL(!7p%XC0`2crC6y?lNUs^NBYIuop1F_s#Fc&UZzswH)`_O@Va2y%{r$ST;7x zF=P>jOiYz;@4r0%T4JJr)+G7qEnmsX)8P8lbpLzgo3M+4!=Tz%AD=<`#b&zO@Z8bg z#@Ck59sRB;=eYjO=eGSfy?t)!Kk?^tOMejt(sL>QPwYIm^esO^O1?6AUD6wMiwb$4x!tZkN&RTlmMHLQb-S0zYsPVd4X2`Lz0xMZWn^z` z#?ZN1@u(4d&9U||Ohjl)6xSZM^Or>X#M{=bExf%>yg7FF{IKhNwApU7nO5Ef$I&?M z5{uys%8yd}R;-lfhkvyOuIB4lsjTjT18lRqbG1#qQL;7?gxV^*J8L>wWv5ozm| z!lEqAb@0Ro3~qu9xOKHkB=#T?hA+ru@(iobBOwW7h}<8rC7rCKi^&gbg>Xl9X_*hR z3{;oB3?#@2Ebh+0kLvH`PQvTrPQnZ-VrwZp6v&jJEtBzV;-V!O!zLg7BE&U;m-IOD z?KSFbw3pgB-1Zt^nc<)+0vcb21VNd4}E+P?5A%B#Qzs!V*mBMkAc50y}s}L z#>?9V94{BrcsZAkm)6xj7Q%vwK3YE8G4N<9(`dPgqtRkGLdRoRtw0QK)S>n7Fw1*_*z~VbUQ0!|^z4j7M$Fe}s-sIY&ek89eWhI#`U{RZUTEb~+tKtb} zHj=<%rGgz`zKA9>=Ib%1vHH2FUY&HLQ1 z*L3wQD=}QO-xsZS^7gad+T7P$*{2B!9_tAnv}^7_E!e;P*pke|7OWnMEy02&S2No0 zLwVh;xOhR`+0)XVrtVORf)+lbWKoo~FoI%2tmG~9(t{UsYjA-r7SqXNVy|8CS99x4 zf#*>k_e-noKo1@TITHCkz<5bg&8_a2YW|kMC{dp(h@M_>G+e`gO&ZLECWe@}==|5aj=CNbjRa3Ic<-NpzBMYlbPCl^??~{$ z#b0=@iGL-uk4>^(HOh&cj~(AtjLvqCMJ(8e-Wa0NCH72#BUWE$wch_w;l%bEviU4% zKCs|2Fc-x>kBSW@s|6b+|0rvAOS@SV-Qg~rE9>}aC#akc})#6Yv0-c1-+#=1Tm&Uh)> z6JwJ;{u;9$FQ4@cF_TCbGCw=eka?B|Owqn)PCp3zXo|sx%);b`Ov0zP&&Sd)Mtx^H zs!<}0mHp;V=#E1*-)Rn+2L0jBPfkyt4XU40<0bF+r$64L#>;YL040n02~_Yb?1)UT zCXM~1%p*h3!INu&hE5z#`TV-KJ=w<|8M1ToDg7b;`LrRFtOc51=E@IxwKU8pU#fXO z!BEh(zUYszUybn%-APB!zQ{Z@PaUR zE=V+YB;DF6zORSdI~@ttpz;sMf3Thm_TJo2;Qt`~KgN%kJ^wNIKPAq8CO@d9(QN*u z!R^`P?1!nn>@}7avlhDgTMLH0Jb-+HKk!{a0Kd_k$Rw&iA740sPP{p7Pj8>ci0}tK z5<@;w2Khmh!4T2+655tTRM1Oie7>*`e@?tHEpAbD_T|x_;{$|qp#C|qzWmqiKZDkP zkp3}n{gY{*N~&gWiAah zKhuYR$$A(2BJ;a;rf!m<#87^$jhvsgPPB1_ty;IpN`Sj zy$Gyw5OX5P9SH~hmxBU#yz2^6&F}4d|Nq$g9=JHFYyX9vgiW$$Ho8Vss??&zZmLA6 z1{Yu1U3MW5$dUxGDoOw3`D|)igxv&ch)D(#CfBj?sjv3czS=(9*Vo#oudO!zsb#@t z$shAi8x!@X(dOwOsU?Oco496w-*abX{{eycueOEHXW7}AJNKS@?z!ilfA?HrJsID7 zMl`C(XPN-BUCV!B4Pbh`R4gQw!=e-B{|NMk}3;xex&~<=O z{BNftKjoR?dBtDz>lG6q*o3~OWT-{|!A{^2`4deG*7n*U=YmR>nNmQMA35d8c-+iTw^ zOV{v0{OO~iU#-1S*J4~)0@Ae@|OvIu20~x;z9oI_<5}s@O8#4M0YTkZr6nm8r!ksK4{uy#{4;XLj zWzkfZgHh>(u<~0A*(-`qaJ;NEM?-IA`jq)rrQ{KcM3LK(@x!`NY8y(GS4*Q(i8=L_ zNotFx-YFH*#oSVh)NPYOwwmBCNL~v@uXk>3xyW%+5$deV;;7 zk`sAhJ|jOnsv!5C!Ry*mdPBr=<&3Nl zoG-V`rU>;O>42G?a75T<$IAng6+K?)nhCjhYHh$1k@ZWItE^Xe#ap)^_< z{L|v=3%i$SXp3Kvc5B$n7berm7gDg-fP;0&daX{A4rF1=fl|c7^gtYJ?tG!Kzeb;4Q~HihV6&;CvcBnR`ffA!JUJ zGnhMy{r@oVyDZ9F8@wYm!B;ox=J9v{P<*@rvXuc;gNO^e>w#zl8DU7p+wTHoMAod= z5mx34%D19GdO1$4)3>%LEd-nFjX?784Gq)xTv5^krwzN0{3$kHbl7c*qO?sOe%k^9 zmp0qx2fs^$?TsvP_Ox7v@xt`7u5;|7c->Lj0f|)x{|I`gJEQkB8Cb%hHDDgi#8Lnb~tN%X`Ar!+^S8)P?0 zP)$ReY_gGSg1zH7E@Oo!3NYw~h~_Gc9?{K0E5?uL<`qsiYkUU9fX+sum^6aX)_dfZ zfQ4Wo=MU~2!L~cx;_jDN<+*GaX0V zibqgNh(CZij=(`Dr}Mkuq*A~QO9u+$> zaSxHf&GQvsOj#9Egtbb^6P$QYfFEyWC&7-vjE^|p2A+{)g!MqVJR+v@<4lbogApM; zl~%iRhba97hzA?zocZfYo0&Ls$>WY^d5gj3gFLv$;oX-Z?PRB9!0``Lm z)8q4&)^QsaPd8q|TI9FZC{-DbFea~J|98duZP{!0v3+W;0{zra1JX$u{)-ZX}8Bqbt7yBxI0jhr6;kLZK! zj9V~)PhtU)Xr^wCg8dNh+2>O#Fn>9*V%ob;Z^b|ibb7=qUonOU!n*j1(Swx_D+Z$5 zEzXnR+gL}@#UqYE#k$GyJgpeBhgF!Ntr&O(#T6@u)Ewfo+fMjvw27Uc!~{G6z-u(zJYKU z6Po=>IcBru99%J#U#)ZYwtS9-*-nzLPCEJ=?_exI#uO#lOAAs@@`5yZ(7786QjpRU z=`A3Pel}M2&5HHk*fCI*<85ZpXVOwt6MUOjN-r{R)I11m%$0*gOJe7Bz{RNa#OD{M zr?D_n&L9zIR@E@)EVS#x3yH$h-0`l zHs?47;mHj8qj_X~j5a3N@A4Vzw=tWFN1sjcsYKo9Q%US>L-)D=C4D}n>yu;so{-1L z-aH|Xak+mS@>sfkbFANS`D22=lSVMX-xI3H1b+{{%9l1nR2mO|$9%$iPa6U?-6d_G z0tD5#jR+?21p)v%@7!MW|HiTx)#Q>+oN$%I zS9{owPS0fYBhdF4CL_?-guQ6OUc{{<6ZRr9zE0SS41eu}|8By6H(@U_GGI*j119_d zA4`7#*7Z_`gEJg^51Hf3cSjf+t>N3n*k#51x1}3vo-xiR@AY z&HU}9um#1+f55|gfgUB1%3*YGezgtW`LGTC*s9>ONltlAk368^y#*}!j2H(kUJn5` zUb`OSa2R7oUV1AJ#geNjSZ*W29U=&KkZC;YtxA=EIK@Vr(xgRye&i7k$O%{-bw&{M zfXTKCK_u2E#)^30ub?=*`{u(j#3VG@;N%xOFM_#>Y4Hx}@gncjzyF_vEG=8%$JxI> z68UTS1#A>A1AYdl2+TgWS{x@v41V(Lds_jyb&5Za^#6s>!qIM(S!MNjhMhqr<5#y0;Y1P8MK=>4&NZ~vy z18`VT;26NsBJ$iy6#|?2OdXM9zt4C)1gClJh}|im07t~*J?7ZWb|5Bi?x^-wJywlk z@+bg|=$K;it^pCJ;A^aSjP&Q4JT$RhBX}kynEm6rUXK+Ik^Y>&p7>l`2OXqMpiM$^e^kYH=!_S@YatWOn@95M##i+JNepnGhu36#jFV) zPSrqAAL*Bxiyg~tlA@jDg4BW(jCzqVwLL;QCIzZ85=Nk6E+iFm72oENP%&BTqwqfP z{SCT)iOBs~ntC~C=(nTzuWR`JhPaTTqnPl^?F}EJ{R0#FWy=1mQ|gx=oPY5@h_I8k zjidz8Y9Z-=W&dKFcH_GxxIC*%)}vwqiYDR-PD{m{H5`o#z8ANGA#K zi^<1GPC0EqIltt-*SNoi@2`5#{=JWzKB@VWY0Fr=OL8!hmYjl;7sPR%mYm{JvJ)gH zr$`TKHIh;wF@z}5!8}G%isq!G6xd8TEGb2l_A~^el$1i>@B4oD9z@`|ynsBHT5by3 zPo18eVhNH{=s7)DEPkm|0H3dhvm#})^T)Qv=ifkX|eb{7dlN+^t#y1!a9Nh=W<)@FE{O~^Y)4%2Y&U`$^pFdzk|Kn#)mrR*ze?Ysz}|L597ptI7DzN~rkJbL*5#Z&zZX&7~?p8p|-K|iEkt=BVjTi>FTbrGVTT_7_R;>Ta zb5m_?`83;1yTErq!0d6na0&(ZWXpv}&V`7!V~PAyBu-9^i<7!*Cb1l9@ro1rZ%T5; ze=z;`Z_S^Wq7RSi1^vg_Z<^4Dt8z(SOk$JqeH6FytXrq868|z)B_@CPgg*TK<54H{ z;qm6vo6v_pVEJq;{Wtyjgg!hxdGkM#e2}j1j`e#&AD+;MC+v@uRlBi=!uB-&Sqq_T zS%$v1bD2rg1Y<}Q>dK8_Tj5-*YHx&x;c0uy-a*|zN&5$vWh^tHyk0nKalCM%{#ejB ziz5ahkV}3kE&TEZ{iUR6LJnUo-b534E78J_4RBHl1EBG@x7GkMr3$=1QhWC-840+Q z_D+qzz!&2v(LHUr0UayT<#VGju%a=#N z-w5mZaD4pc`Zzw)`THpCbsBG^_ivokm!i?`RVK8C5b+a$4&n&Up z3hYz0E?LaGr#-_~=gn-2EH2T?>Qf%$gW4=e)D(YhDt~DS$qR__u#3B~!TDAwaW z#=`X2_)Tf};{Y!|FVDg%_~FesjUh0ZWz@#}IIez}w5iE=biUqcme(pzJ{UAX@7j5N zr#K%P?Y*D(DSWU2b7nG|T#s(?*@fda(NU3i6q8K|!;p!HhH_zvT#&Ls4&#{uUpjh- zo(f~d?e^tWL@)J94$p2t`>p{t(&aY^iC38Q0{l2bYc(ufz}xg%%URi`s4QF{^$N~* zdvh;8ElE=kX#K)Gx7UNcycj4#6AelUZ^58P8VrG1vyj(8wmzI_%ZD&X=aJ@DQg++$ z@teShu6q#)0>2aZn81f$n3yjU{DYQ&34S`UzI?FjttJbEUKPv`3Q7es)Y)(vyIOnV zU4)xA_E=#CjQ^3m!DWYd`T8|0yM!kD6*i@)D{vv(p%x!~7fF-O3!DXMV6i5+a1DWK zVl|LEY;uYehlFE^CPt_q^)jDu4K)$Sy5fHCx6vyH4_JC^U(!2Lrt+`9|=B~LHtp>AUUmb=tj!dsD4ZXU3lVrR2 z_$1d~q}Bgft^P}R{ecUw={W6XPC*aJ?K!pfinR7VtF?CtZx78@yoY9iKj~m(&7miW z7p4;8LM5jQG4+<>j&)^6c^jvd`Mt9lU|f%d@G+-X_wX6s);v zC7TI7`V&JN&$Pv!m7cbs$ds_pT8g&^3U2Dc)7X{C4_x%%oSW`Wd60!S+|*uKUbgHL z@RcL`EaIbOdHG#F0wGWK+34q`UB0uEI{UkuEz7%-e$$|j1OIXC_fwlG*vFW3?W4OI z)|#hp;`WF*c0Cr3-O}88ZMbsTzRnlLE(2MMfUK23)<4Ph*3LaTvbG*hMpgs6h9m3w z(U6t&AQf5qgVRG+Z=5nTBZ$$H12-@5vWvr_KWJr`ci71leDnEr% z-=;S_7O6GI6iCMwr_=jTU^F_l8g#1B96#id)0|bFtPumzTqE12b`EMttkr0Z(_Ji( z_rVaIO(QzHPIS2%(SZgz(S34kqKjkG(1$F{XJr*wMK;k47QHx?G?33~1h$LPvF$=c zzZ80s?_XgvkO5+{)L&K+9AZ6KY6KI1hhJ&*oW@2H>)(<0xc>c_aQWe{e{WGU`ufMO zKbrNAH#M>T=`?xj^?YLedvELCKr&08SpQDF{=J!utcmsS|Hv|_$y}$g{`G4}{99Q6 z;BTb8(WQ_Z0+Wxraxwyw_>#smjUt72@*21?b^VJke{{h)81XMk%G=FVhDl_rotJ^^ zoM}2*Tt(CP9eI>+()||JAcS6@bhPXWAtQJNE4N51`vj9>?F&p>vT0JOX*E~vSlJae zI=CKI?6LwI)@!n3OY;hZ3_7zCX5-1sypRmv3!9HOW@~TEhq+(A zVYUtTu3r-Fn4N=#pVs~qiqkufrVcLM@* zvjCLYj{1a*fRoiw(-*Rg2DF_6KiFb+JAb8cyZY(A=_XP&tS0f%NxS5kHor12&#FGM z^W7L595_GLoC6*7zrK`V0-B~m3JRB62sml8{V@{pkNg-_+0i=8>e~yu)qP>3y2N?~ zd-6!~lLPXTV($*UHc1La&07uoJ;_f~*7WD1&WhmSVItH7{d~OW=Z)VR1D--Z!Dl%A zT)^D9Y)7mqM_syPyd-o_yhb7+KL1DMKbPPLfn*v&{>XItNn=48KLPXk+Ln1^G9ROT zYdt&swWIU6Bf3HO=-E%%>@F&fTg zN;NKX76sE0kIO+85uQaNiL+F1S6|u+!oZ1VgO8oT*+-(3#%f9$)9D1IiQA+Xr_SRK z<2ed{$>sXl*Y?cg?8R7@=8dA4X|?I}M)s@;`p}oo(^{V1H+?+WHyVA!S;@KAp9YB} z(TCqcs`*hL2{4b-e8SI9!P3jNVyva^s5wOW(z&TvQs-4de-DkUzr!WME!Uw}C!bn) z(dZL}xp=@1bMa;JUxR;?jKx1VZ#%-p7XbL7@(;345eu0`EF|>$WUvt8AY#YQF(w)p zIWx{h;!Ff0Vz?~NVn!K!Tj~3VxC(b}6!+2{PObR1q9$@cMG;Q8sSn>u=49zm-pqa^nzb42xZxPK~GrR!%Q9Pk{Jx=rx@1yvmnH zS2ntuMOWE$RYX^bN|Wd{&EBN(v(RgkQ}|iwIQZEFy(X&yr_Im)Ug$N>K=;*spd@Q7 zo%}nAen;oGV4Ugvw)7PImb+cXzaEp8M=}9enicH*Yq5E(CTF2J>{nlbrIgh}KDrv} z*_F&kd_1l~lDbAZB-Azd4a=_PI;0O8;T&xt^g)N5BV;7$k61bu&9Pw>nZc$mApNlh zrHi%FHC%rzw()4jgu79bXH(@#^WLLwzylRlXVMlZtQL5eo*~Y|=I6u$W?_MP5djaC zbskjKQz??>gd%A+6v^wkB1y7VdI%fFi!>9jVcJg3>m-`{xW zE@X3aXvh!!>90HFgkP-x$@;@sn z=Ek>F46+T30^PqU%;(b zkq%t0)MEi~6$j+X2&)*BE2GRJPh}N08HX@b9F!{&w>l(O!jmS*l{Qvkmn%_=DpzK+ ziilj90}q>wbKfhn<;px(aY(MrXBAPoau%zw%9RDIB1f()0%U+M0o=Ig2h;-k0d0^W zfzuBtDo#J37SIo91M~wL1O0%a;`9S*0sVmLKtG@{&<`l;bm#}vB5>LO{eTicKcJ{M z{eW6PKcEfJ4`>YZ1B!~%52yw71F8f4fW|;Sps4plKR9j)2c2=s8RV2Q#OVUG1S-&J z36uj`0-b=CKoy`RP*r@0osd;D~YtIi(D7x&SSK z3Upcm<$#tzC!i%z1!xJ>6{jUo4rmE<0$R%Dw3NqbDWB8QEYQ*f{Y=o$M@~Nz>(|8k zb&BhC!nqF*i3tvp41AZ8r^jVUv)O3; zbRoM|V5Km#83)dXUdzN$(CqC7?HGsG%{(JDd&hBH4qBKX${EPwsOPqTJvyG-0yY4}I<1~H*$|ZN+#$LThyEy-uM@PBm;eWk%hr#cFfTukZDX%E za7;5mp2k701jwijQ156davZKv8mx*d125wwdiw?>HurI@9stiFvk(V(st)i1TTL9` zxK$?!UMmt?HrZe`$8H=k4&57q`CA%vaj?!M3oVDswlNv7Y8#-s2GLMDU>J`FN!c%vG&mZZws3OrNNA|yDi+e(%4J%Bpt$OEplCi?Uw6?I`@bj??Smi z5(pl@UwCx0H;Q04vEyY@IbxVdEYQF?g`BdtlP}-BMo$)vyLNbRG@*Ru|_5U7Mb~Z>EjKHq5x%hL`u?<=Tv^ z{q%Au6YqEINqQNFVTg~u*xAj27R&a@jW`?wH(A|~&l!w}Yj4CU769O%$WC2tHCyCr zs{(Uf22wxBxP|Xr*&FG<9L3lyMpHJ7DF10yAz4)JalXvgKuiurE(j-jE7?i}VBjOBX zeHi^W=(85cqN$a$=5^C*lj+#Y=O2|`e^=U!{3zl>UhdY!@F+QJ3%3;R!6_>%%PI7; zJqnj5JPeDDcOE{~XZFo6N2@~HNmrT-Mt;L9Q4 z8lwc|13YE}))C<@H-~a40i`z9^dILNg~aQ-3%h~%OrRb4y}RY45lHS2R<2P{PWUca zTi9K=MS4eA`9)S2m3pJ00nB=fN3nh%^W3DvgZA7JG>GPe_4Ff(ALh-<0)&0&cLw>L z_|KulPxI!g;8TFYxveD!ZBQ?HCBg=jap4Vz9u(UhN= zDZktTD6=Z~I}jZR4s>@OjRYq;lTLGG8={=*4kb}tVt&a}HM%hFr2jrme2HitQ(w;1 zhDMvxapKhQbvpFU>&uJ}_3-*YhFipYx@97C>cg@9=Wj{w!)d~A2mFQI#R5Z}#*qIx zdC13CUwpovMfk|%$JHC;sxe~&Cu7aWvF7vm;EB_7Vm_gZ=@UvHw3PXz)qg5}a01Lg zv4Xxw<_E>8>_Awb$`8`VD}6jqvws}l0^!71~=LS`+sJU^-JQ%CSiFXmP zvjS_Kw*5LGzG?b|jrX6u0F9zLDz3W}t0B6d+-C$#*ktb@u`Wc1)V~+ zijE{xN*>3lWP6RPV}P#7sHdjjXPZH^=C1h=mV)8mGdAb=Qhwnth#N`qOM zpP|_QjgEU81Z6mmvG&0lm@6P(`j~r2c0mv=rtqIAg>Pgc`bU{-!&(Uw3J&B%J?2Ij zK2@DMqQUh#W$^ic6bk!62~fPWIe{gnLl{mJoFHrvPZ|>E&tPIi1o8IU(PO3Fs#FQ= zWk+LFX^H|ipHf0+E+VMd<{lcxeO*!97p4un58IgyQfNA}cENBmf>7kLV74Gg1Q9l* zaAM9tbE~#HBQ2M+UGd{$ZNltf6=p~wp)&Z#_$xGbf`fCRyJGgp)fn*H5hf7FmtCJf z^>Sl`9hR$y#C1>eA=l;*(2dg{qZni|PRU*jx_w}>CNFB|Yph0TI&ZRy&YPUiXOr~~ z=OAX&Hk|GkW;<~pkV8Ljau9XUd6R>uK5sGtZRnEtDU$>R zpe0uyI@V(_XxeuAa9up5?g3|281^15fKP&=)~>;>tM zX5!P0gL3;2mLKz=_|PqObI?-wVsYc(@=vh3K^(Ak5)`1@(#bFlwv571BVK4JRTi2R z4>;_16k#381*485#9rg(>8z2>)A2f3^`TNJTnf+tfD_QIUCyVIZjnL?NS*=mQ-Bu) zWZo-2REzb+(x5(JMJK8c`J|@>ypN2J2U7GFjo%pf88q;-jkAHzyy8P&0H?ID zw?PbSuiSVj?p3&yg&nsF;R&mqa4#qy4Yy&jGQT4})Mhs$39^Q? zIL1D~UIBsalj{y8dtn+OWkS+D1T1|{$CA(mEIHaEKolq}J_ko}5pnE9JpjoGkk)>E zB<#$hLDu;B2>3ZRh42#{8$Skr>M;0|C8SRK`{qyI<4;#*ohEG{d0;!luTt=M+4lIxi9Jr~A$^wDj- z;8q5#C+YBL+bj%tKDyl&qrsyGL+Sn)+LZFq#M6xro{w%f!T8{rz)w0o>%mY4{d{Cw zn?@V2zxMo+4#EA~z}j+H7}5|aBnPqzk7CJ(TfPqR{vd1&6kf2JWW_p*f_+2YC_Iz! z1pkw=(4s6M&!mS9>W)d~J0QCw3?6%Tlud@)-e<#hC}lY|dD*ITm}WDBA{u3sTit%3DC z^;p|g|4|qt?Wr0TE}QD+0Tx>7JAccZnKziV%!wRPR9-yc`>8T zFz+wi2lH@m=zyhg&~ei74%>{og%QUqj+d!`6_1ah0E|*7V@s5oL}jRi+3_-!p~q7l zN2mZ*Av)eEgt;^#g{+cl)nKX=JHG|}2`W{E`Ggdiy5cLbyv~P}Ok^T;O${B$Hb-zV z1+DN4m^&@}B8wgk;?ZP!L>H6j5nTxUKP=waP^KSsWl{mU$e;qa$T07tj_7?oRZktq zw7zmwq<520K?TgbhHar&rxqS2T!r2e3r`w3dV5*y^XSW!_L^{zQS)nqmW-cEHVZV8XpFiy4c}2o5EtiOk$DV{;T8Q}1 zaqGGzR=}pHFF*Ni%lM-$Gja+7|A8 zy}P@y_xvr=7DU;=@j<_|s`&r8(s75l{$ao=KDx$sXQmDF;r@-8woL?j?fO#rDHhgB{lY>twK1KLk zjn6!MeE3|3&qes;^PQX zBrT6;c}xsArynHyu_*ow)N*`-rL<#9@VKLgHCU923{Kff(G2I|Fv2eJC%U~+gu217 zN#4-{n80S$NUukoD})uFior*K07GjmXpv_uP`|T$I)JdsD-aWol!i!Rh{PGy)+HJW zw0w}--2^zae(3ocj~5>TrM_=6Yf z?OvGDu9hyO8i_uV+T}NSt7s4Mu7zSHgOfOdlsaUFR}aGZiP%zkdK%IQU%TtEU!1a+ zn8Srfonf9eUUcu!p*t5L9cL>QG3nK)vrf7{xLC-}B>zAZS7_wODn>?kpLg|(#wtb<0I%POy>jVDs)a^b=0p$-lf9eAhK`-uS_MQ>GR+^ zayEu7q&KaPkq#fo5W{4tH}}A!>+E@o;>$$$F_J%FSHu`y4h`K=AsxWNZ*jVW6&JGE z=36WaVukhUZ2_btB$pigQdS}m7jW}Cj+>*v&JKk9mh}<2%F|NYCJ@m6ve-@MuRGJW zl)TO+|C&Ra@KxWSCENVHU-1qt{ZD$r4l7D2RtR+qxSNh0mUqs)uU*<3<4^CZ#0m?HteKOyig=}$&b64}U>y39okTpd( z;A@6lU$Xl1CY%%&Lx@C$dv(bSQ}8di3GeToRyW%TKLF@}{QVm;TpiuuFVz;-1BWyw zNyZ((1~CS?*tvMlikVB~#Ut8C6G4PoZ$213_WQOF&e80u>OG%4$o1!8N`_(@wR&&Cq8`aHF0C;*#2pKwMc;9 zK|@q+lMyH$oQ_Cn;-j1zttO?~TB~@98tPde)GYO9KS9Y|=;t@-Ts6z`Ysq1XVVJ5E z@!81ACR4^A1Syy|`|&`jDvA|NR(p-tuB1?w3?>vPO&N$k*ZJ>e;wA=w<<53X^G~^R zCE~0QR+uUGLytc7QwI>^2R7br*(7&$b+M})x3sdkxyRlz?+u-p1P7yfp}EKD3N$D3 z@d_q3x0UAzcI+zbM$`$N@R(RAjQYTg&slS#;B1_FvUJS}l}~t-P&tSoX{4i$MwG_yhz%HNf1P|{Eo9U=sNyC+bs2h@D;C=dHQlHR1 zO$IDSGYeyE|C$p+S6yKfJMI8I)7FV~_-0!jjQCFIc&3xB#zl*rc@Xv9gdJ3xT);CR zuWq-Rcur)Ra{Lafx&ceamOwG{EOOccIX=*&^KkQ!v*iYkWziGing(CkQR7`yIjd*_ zvo-G}O0tYpGKJmf>pd7w;hK}CIY40m3r7>ezwRVf3M)%)=tQRTI|M(#{x;oQf~v7L z@FU3u6DXY1y7ZPcjm*mf%}F`KKw*8@G=(UW^42Bjxzufy&06Ya!DM`E{Fjes6nG5G z!g%I8*4$40q9M(6^6R8gW%5QmM0_L#r6v!o-px3D3?|h_uNd{w5|UCMtt8{9FOpOr z)nU{}t5iyT_m8VS#~Nx^uf(-7rH0j~sKMx;V+}RT-#0s5OOxN9dy`@f8R#K;CBcCe zLfFJGH!LMvz-NxV$;vU(X0|odf1!D+vm&R(u2|>N!6--+GffM~BrdW3el&wo`4e`P zAX0BnU^+7u7X<9^whPX!%?KdoqzU>JOxQU%h-#Ox)qQwrF$1|{(+YnSCqe^$RC$qO z%>zasCOKUNNqq<%m}EwFp|rV6mGG4^a2~c&baQ`e@xwO>=hyML_FFm=uQC6D0%r1NK)S-ik`aU^Q zeVd_%>uRb|H9x}#?f*!F->yFNUMhJB-JwXlFF@)tD!MVLqP&ry(TxJ>03FclIs|iLcG)A&6EHyfhGgwe|2xE?kRUPm(vZ zDwoOhvf6aOxc>n6l3GdRssdL1%f2XAIi8zO|};aXZ{$CaC3W#ej&ac}))RMJ=B^p%P0FXGo$*{dRh zBFxc>chIj?t6}dU0zd2>qA&H?*8r?B|q1itKtu44S#S2e=ukGgLCP@DnW-)ZXYz@GvUGTyKlZq zcZWFC)9F$eaBt?5r;*N|qQif{uJ zp%Swp%D?!JHDAgj^He3wP56R+O3;d+Jt}F{zOuEi9PP`ded%VQS@cVpThewH=GRfs zrrgv@;JBcWFi$qfh_%k*u+Kxm6xetC5U}^j)x-?Wo6ion+Mvx`D&Z`P&GY8B!DMQ| z+s3S|sG!+4@D6I7jOtp8fQ{1h8dr`~<2fBvW9jf3ucaEl8?UhdHBtuO6c|5~RO2TI z#Z?KUG>5uXGM79oF$b+@I+9C#lkN4FBs6_4sK0|03`I35*hy ziEZkgR7Vvhc_Z)5v$(I}r2-Aou%+~3DHR5l1U{ot$i+$x*KaWHk?kI`U`Crhk1zCy z2GiR1dVDbRX)ps+y(gRSK98`3QYrNd_v`gnYxP$o)xYtbnN&YsF`b$vQscU1RGFLG z)*A<*h(I`eJPtw`Kqy1u6cE-Bcj6O)LjE}zV%P0-Sp$V#$1n9)Yi1nq;9UcrxTRK~ z0=e3=JnbuA`E@6{pSkf^D2q?*nf zv!?s?no6~ru!b@}oWNgPpx%K-G=6?XCayeosr!qvr$}+%k3dDwoUo?^ubR|j>`Wd4v)Gp-b`lXYUy0LQ zCU$o4>pZ8sLhNj%>veR;>CO*+ow=_ydu}N9-5mTfTStt>>GlU3K(58UrNQ}Z-QE0F zNwAEq=Fq$D)9`+tYa|0YND+AqaZ0tZC}Bh_A&VY>Zn)$=et07yG71| zRqK3i(@MY+v~U|Nz!=z2kDC1I-o-G~R^`G(s|mQVU^I4>di5V5Ly@J_o_H5q$B=mi z3zY|KBVK?s9qo_nJM&m*p;A#=-=MTYBBWgjsV+X8!+_1jVehY3{~uO5 z?$KwS_Ny0?6`fYVt_yIVc?7o5#;QoBmc5&p z$12wyl#XY}b$x81o$U{MRWJdV!5dZNdyuQ2WZT4tst+O(UG_dLb&JvgL{4va_KBU_ zus9v{_K9L=2v^R!L*jb!ud$xOJ;#o~Y}5HO`qen7c(B{ZEUy0^e!>q|@Ngy_K&4a& zsATOr+^ki+2mNfPy7^yGo&y@BH@yd8TV`{X+2rUqt$1DQ8C^(iu9_Alfmtn#_6 z@j2Q%IFy;+-P^hfh<5JMKZ*-PvZgYrdt05mB7Pkc*vjp%y{xc?a6^pgd(4yW$8}+fzm|} zc7|Tf4jn%qV%#0A^x*g;QTZk>VGdZ2g-xXxjn2hXlDehZ^!|vQQ4Fkx4KJQ5UX_se zzjvY_M`8iJ(x^f>>wP>MnBZ~*S4ri@=eUJf&D;w$c@Szh*eImHOO=H&@?5lDTnWmh zj7U5g68(dyW+zQRnVa4A+Q1~f4$xBk4I(Z$?gjIFRI$!7VI47?!a`#Mda?>C3e0-3nSt`7Di$#goSF9&fgdXYjH7IxJvVh0Mgo2gFkbIo0#X1!7GL9z3z zywxG4SlssE*gVkpaX(Dh+;|rxFTF1I$-t#;Cl5+9nSLHW%;a&SN{y6YcSGNSf6^) zSKsA%6tEtV7Xz{%P>(!a-d}^cgD|m8ah3N;T=26`yid~=oqgg(P7dwt6Yq0$l^dJQ z2z+9z>Mx!F^B){IlX(vq9DiUE=bnHl?zU!|)w;?c_-d+bU_GFeH4M^4f$lu+yvBy0N}t zq54!kpC5=fG@p!BTZ01_N;FwX?d&98kd7Z?@y9nGe;7N-`a8csab-J0;@V#T@y_yD z;`#?@1eWB>AI@KxM+JINi3dkLb|C;Cp;h)}58!a`Y~szRkq`+s<;#(4 zta3dvyxYuF262jX;dI-@^^@_s)FzmNm#=QiGX*X^>MqC(eu~~LU8)Gb$GU35k=C#n z@`wO*tekj8M#WOaXY)g<*s1;p7uN_B5}p;G-5+bQ;QqS!{r@6*fDE?~+4aEWEau%# zKbmH^?c6P{mGE7Q6RDRA>J@b)ogqrZiZODN`yUR%SW|YbGQUVYdjqNgGFq=wyb*ff z#}l>_5fb$33gUqDw1k=hRlBl-vp7lw#W%~Z`0@#%w?O^irDhVsOLOAFvtUXUo(Ry9zN*j;DW6%2K_L*w$=OsT*jVk zf9y)EuIg7`jm2nsPN8x>i@CedQy?A4ob4%KHJ07|IIO0ysz7?Rbaqt%j+2o+c0|xJ zGP};w7X(OLBtqAsPrra;O!nYRQL%%xiPW+46ydj2x)dR}R+z%UNA1M_8GGu}zvAj1)UFb!5f~FMtdIN^@SIf6kP4PP{1IeZ$ z8G*%8_erGZ64%4OjFsJ1Aw|v-*F)|{K-cQPqdcH%DZapFkiQWEdynQC$L|eug|7H- zBpRT#(Tdyyl-MXyjMuoL3boy<)z*ct{VrjD`$hxS~mIMEb$@*52xhHJ|snYMm>_T#e%mE&YrbLyWd^Bml#a&CN&Rwho5 zH-RH9EPSz^n6{lAZqPS@H@<`+&csbj{h9*!eKE!%BF&#-Dm#7PM?WB0c~!poxa=#y zvfd-NcXLx+VJykCv_oxxvPw>BjB%hqsfl4`ITW{@;vEWKoGZ5;l3NGmIdZEYw+_jz z5xF&bqkJurROYrFfbnS$#XjIz%%JUeB%sIDCT)FtnpXaLGU?ZK6M(xyf1HF+f^(nZ z?50kYB2G~{MpCSGHA1hQ!ZX=3;Q^Kok_;<6lZPL&*||Arj(J~VNT0A8H*L5Hy0}7I z{}f7LByAy17lYjh^usJO-6(r<2HZEIs2xRb#Lj+xr(jd5@$lkJ^Nh>$Hqlh(1;kBd z#$Dk?8A-B`t7tVV`u!}_f?y3n{0;8mfC%CD`M4uKw1c)ThiJ-HB6?PFLEXs`*OS%_ zb*BtKVX;@L57tWEMazU(vy~z)cBykZ(KTqGVwXUjtlmZ11&((zDMAmly|w+2Pa)^- z^Q-?8FZlxQ!NzgTUg9MvFLvwzq|%%WvGZ|yRK1TPJ2L}QNa5=IFWdsB$9n#KdT8dM zo#MBDnnlYxSgQ%x6UFuS;x_^v~y)6h+Zr#xE(5qQ975QY=OPW&DzSzWtx#m*h_F&*qopHt#XAYg z9_Tmd%x>P^{|o;55SOKzvGKM@&FnyF{@yBj&pQ+g9>S>}>ef5og+Mh(EcT1^V4K?a z93ee$6*O8_Wd&X{#ZGdi;S449_CKI?Ks{Bl%Aj3>N$kw0haN$m+hHU_9Bc{Wrpbg!)~$2>?_%kbX`Kjr1Pm<} z0}_kCgd_dWkd9CEc7W5HB~EXBYw>{hl&=}pySOsuJrFBU-_;+rwkHstG{cEAZ-=nEKxOQ84vQ&;>B%J)l%SNUM%_m+XB|@jl=W zdmkoThrJIF3krLGO25>*zKpr?8&8hxy-)Gp2XEVhVekF?$yYa%1MW$>r7F1AP&t>x zt{S*VpLDux;`-0gPe@xpuF%!LgmmK|hT^%}Wi$>-O_AzeV~oOdl+}jdIXu89tcX9N zoHay;HMy$$+i^PFhr3BHGzqFV{zfSAh7E5ZdrckKxY+Rkflx`*3KsDl`Y|_0GdD=b ziA@{_n^;Y^F=1R*snuc<*EP{^98I(hiG^+I?%f)%85BGI6Bt7NV;XX?vyw_xPs_npR5;W?pgqdAM~WtgMAwz+*2s72)qtp8>fZ?p!;wAe&#%{}*#i(-Ks-cuDbtK@Xwz(mx@9jRSyo#0(4D)Zs1&8+)Eb(eg|D-;i7^7 zUq#FB1ymhmWym?-vRHzj;kDp2E)D^_Fi0Pk?~g6djV;enUyTFtCo&n49{O}COs`I_ z1upYyYyaa%W3k_5z=)8{E}<49e;8t8#EwVlHSbFpM#FM#Hy!#-rtLGEGHn;)^D3@S z;xh%;c6{!9f@D)uRtEj?`2WnztSpl`6T$!dC*97-%*@Etitut785_TeccYKN9`ZQ$ z8a$b4>xS4xpM_6ppE5iv#%Df0>+rc1pUd#c#^+P`{5Q&`f0}UrI(+^apMU>drmY-h zeu8g;@yodOw5y}bo``vE9V z$nT}T@dj~9vFis^OXC43?$1JX|I!v(>I8Z~VinEYxJB0eCNS6K|@{0gXP8GNM{yUs;pq?*Gl z3Rcl%QB^Q%g2JRh!RsS^*kd7MwL2tNza&>bO{r0^`?Fh>>opF#6ssTLf(1)UHC++7 zt|Cx~N!Qw-75F&`H}i85n8R73>jpi#6U!iUy(PI)_Z+GBhJmkZWgzNe@-EWDNE2m> zq~1jXbG0&P5oOBs$k#-fSyFG=z{Oe_V&Kd*PZ6L_AgawzHV(bH0;zW%Y++>aG8b-f zB8d(}<(H_3-lxgRqEvUQ+nzefk#PjF2c|wu3(gFTKmQfUn5GGvWI)&V8`NMgLv0SM z4v>4)|G60}ELqJ-sd%?Te z6PHnCAXaq3g~+M%=qJdG+`F`nY?Im}P%65BqOkWRRD$K8j+$7J%j!#*uN2{mD7IC} z>4Fvy%2nJMvaf^&z55+0a;~_(4OTkp{hz1xzX)Gpx3)~3z>8Q)&P6S>7!iT&R9ERe`!~D>whv)}*06q3)ll{p zihsjwp(dBleu6;Uh}W?Q#R3;Z@%rcW*Bj_{%-*^oZ4o*|i_jlv9r0z8{|<`~H~=^a z))7o%Z3)3#$0Bl{UWFZ1P)>Ic_yNf1QuiBDWRkc(g3*V@cN2BQqb*@YxZq2e0~dS= zy9gJw6k~Ps@U;x9o16CptDBp@g=vMQ=_RK(BCh=(l4F8{NtU-`=o(FgZxgN6?Q_d@ z`{AD=ZWhtrk~Pks-$YAM(i+QA))5Fe<7K?0jH6!WNYa;$ecEExL0yn4Mcj|at+Qm z&=z)IZO0Hi`HV)J&*2v3!f$@6pW@&E?j8T@^E%0brDQL7a5p{hvjB;QJww2A`yC<+LPAa?YzDF74Q9Mj||Nw zb?0LV>>R;0wRe6}dwy|!7H^NFx_j^Wek90-Zd#~cX7wz50+gp;y+3bC^zSU* zUhC(Lwn|rA&KSMJr2FwdwH>-U+qx%kxL^UfA72c;Y7%$fX;#ax@Q z_cEMmy9%FbT({xF-@)F=Nojuq|6{R>QFbamUq{)?@O>6OIrwn-WLA=V(*6>wTqIZT zgCCIi-Ccb6;8@`D$!h%KHfByXNj7F6Jk7CyGuMgtgAXY=3+T+3Yjwv0a-gZcS2U{r z92Mf81<+S_Ts*lzdlyDCtR%9>s(5Vvu!plos68P6SlGi=0?xj_yH%@9CFJYk35gR3 zgz#IW6Obr&Ls5jljc|b>vGYl-7^}D$z5uuY9>j011cF*Se!w4QJN?&+>*4z2s~1xL zX?r^muYgJ6zZqt7LQNl@(;A`(d=HeLI|>fLCytF{OK8duit8SrI=lxFOb=m(So=#@Bgp** z7}tIk_*6V_Q+V>p_`VgK8en}NIszD_>a5!*t~~+L)m)JAKpkDc<@A$-{IB&qLaXp7 zjKLA^q(GcjHO7$~+k?!L%k8|ZsmOeoRTaosfg!{~;+>BoP7h4OJ{t2|$u#VNvkDt3 zDbB-Z;dWuUJ*uh5+td=UNNyLdLx9%Y)>_4F8JMQ~1_-}%!=(|E4S}MiQJ~%wrhf=j z7ql;|1N6(PeevjZec>kKF~xK4k?XCb+V!G{;uHL_t1uK-^=TCLJ=`Qc3PDMpT&Z;q z6sm9ImfSRl2B)xFK{LG7$E+`qf+U0)IRo1PZ5UuCqyK zewiV!YQ(%kAf=qpm0d1{atV`2xL7^tY(-odcn?Jo!qVY996TQY&@tBdT?HS;JUTI1 z-@umQj}r^i2BT3Q zjGgL30bqWdAAFrM23;3x$=%Fj5mU*%GT6oxgjbGd$4h@Yhw~{%XBa2oPjx4yo zOss+YZ06kxhuj~7-UH%SC+m&1HY+^v&abTNLTQ>_U!%7GM{5Jg;z~_fErfCq4*CM+ zNKn7`x&~+KRnn?5%ZgcGIpB~o#{#CVXA<>2>=Phb1NRZO(iAF%tmUssqW*OL|pH<5m3-g-DMQJN}i5BZhDV?MnC* zpp?xtD6L==xQBVBF20h_7{&XNKei&9jJs%hE=Z7|YQ2u&fm^2m&tk!sVukAe{67sU zh&A4Q&hqTw6)+LFrC!9h9&*;H@U6EG^%oN(YEpWY3>3BC8^fRI_dYt z&_ZI@5W@-1!~i@G^%tJA;8eT-H4X4#3WUowgKPO5{4|Bj^R+Lo?1js7wO z_IA))#rLd4?c%yF%vN202ME8VOe+APfgv+Oxbr6b;%|30#jm~?zq;AD@^U^HtIcMe zMYzX)I|u*e&Ku~uvw*ID8^C`lGHrzuD&qZba25G>`g(*nSd|;@T!|9YmfF#VDYQ$z zhpLB{bqZzzcDVv(K79Q@ITIL3eU18~R;RwU=NLjZa6hmG?+2e&VA)crJN;!SJ<|J) zaJR_byCI%@2R2?FsssZnH~aKBBP-Ub(K5hQM+MG6@+*#;{$pr?)LL%sr~XQ`dkATie3uq|#a+SUZ6qwx9r<{G4UO}V-0RQ%|Ba_sXYN5 zG_fN>Br+U4as4ZJpgsl=X`bz&Qr^3nN#+ALurRGwLX3JdY9;0Yp9K|%%|P$2x5F6` z*WZDgngg$cUs1olMFr7!>JH;020yh@eIFdVXsrT=pLLP=xfa#KMQfd_%zc+F>Jt=e zALG;@D>M(By8_>oeoNzR4&LnC)$(Pf4JrL0&{|4q8M0TCl-FisE3BA8#7BPxN*+Lf zhJ|H?g)Z8z8!Jcn7oIX+p;md!B@|=--X_M0ZNQrROlt2k1;2sOV_Pv?rG7QW8xgxs z0u_WQKlzlc3jiq$J1D0?D!U<02QENZCwhd?eN9L+c6RakH2`OgR+xJJ5LKsjHNzYx zQw*nnP`AH)}CIFKNFyA*F1e6W6XiVv?NsT}Y1Z$;7oK|kysB3!+U zT-T+(=A~kUneU>E!fWv>$~=@(ubi7y#kZ&mB0;HrBg`p$ng(tpLcA3>fp(_QP)eZ+ zx%zJ4pUvhY@UKcxWA>h91OE>W)rAyDQT> z(3IQ+F|+h0=w3<_1J}pv5BO2{Mx*k;u*%O$uAC5>UOC;Hmkd9vyO*`Eh7xnHQ{%&H zSCK~oBT$;_XO>uPg`Q`GX7lr40$9R-ORJ~2ZVP^K{=vMf8{if(-avS47kEweb0n4b3 z`C*(7JV$j~jJi9mxMIJx;lJET^IGO}T8dyirs372op#)`7$?TBCeN8Gk2>@xnkDEu zg8cHS+pc`53b7*igLk=QZwIiVe)ASEr#@LBf})9KqH=W|Yyl1&j0LJ_P3SyCp2rOA zg@A5p@ynd}NWTRCqbK~`!aW0du}27IG@+iGR_o8G935jw$~c`wc{k_#qPvGZ59ro! z(4Lcy4r#tk=zjxrhF@?9e-n>Zx8|9|j(^4#MGPf;r-nxOnVZnhdx+67s7oDCpwGmi zh>+9HU|Vqv-p^S(ZEWKU!*b%RwEAEl3-5@WrFc91O4TB~sQ#}TWBv__v5rJwVbGG% zU~Rl!{w>k1KEHT}DT@t_7e|S=L&HZ8-ePcFpi`cWL(1Pe+rLU{K_qeo$r95 zHrRpCKyZ>B>YHGfe5F`!tQ7K8Aj%Fa2%C(Rf)ZrJeELcOxHwR>Ow`gc!TV{<@$SI< z5gL$(HIPpY*mwhSNmrusjaqds04`T=#MYC?%)DpdkF*N#dF9roms6WwYkwHUpj5AB z-UnFw(=xWElkGm2d4DZqK6tTVqkwfT0v2W09J!6QkA@$o6(=5!CONU^<=)^TV*~xg zKh`sW1@ca9TOd?(y%aKephdbB$1Y_V8|I-1+$(zobCtzeWoe!-S6OiI4R#ydi{0u2 zUnX=1T-v6}5~aeLV&9g;YCE}o z+iYWZ&-cK4>0aPe-Sek(&#HCLt#$7j>Yi0M-*A3=+WoUr|GrO*t1WkU|7u~7nX;5) zbdJ_!AvHP0*!@TQ%E!PbVx2f5Ia4j-4dsvA(EVTG4PCA^^cgh7PNRP0MiD!nBVO1> zv5{$XNF6DC&-Fu3Dlek?15|(c9PC#mmJ+9Os{J*Lj9gwqrD{-0x(!(p){zQIxi~Q0 zV0$k-x{=*xHzN>$3!`1kB8v!qafBe9l?%hG{5GnjM-UlCczO#x-6NMsUmEQmyB zBW&IudxRA5*oqRh>yzBJsoyX%yuvVe6Ilw$NC>|zq(7+Zu8Xj>XEUs_iTse)!+liv zjG9ePkjfB_g1M%p&t=-ahtG@nZ2trD)#AhR(Pj#nn-*fJJ zGjAr7e-*d=ZOP~JGVk7Z@44rmd+xpGo_p@O&~HlrakNh)UiD=}?TM)r-a7Q9vI|l! zwZhf(z|lRq&hSPxyfF04-{KT3_5gbqv|vU)`YX(46q*k)ysDgZk~Uv9Km=>cn`DMH zoPq7@2%Ib*XU)h}cd~y#!Lcy%dbpdG?r`sQ!h0Y22t8nL5mwQu`Y$ATuk&9}yjS@z zSbcXut(N4wjf?jKKca>Mb{z${!@LH2TpBhJuzQ5{iu89nRKt>(qtZ7@`=xzjbj4-+ z2zfuf1;_Ok)}toSM`6#S3eIuG<+yNhRoHj7IrQj!G$PzJU}F>AXoI2G^MK>|OSN$(iu7g#=bAsscEW9I{u155wb z0we`;aG(1vYQbP>5dY~K^+PyLPp^*3z7XMwGcvvr?6MHHrC2l<8{}ntuOg%G+m%Ov z?`Ui23dZ-Ws2NY)uowava<~*C@=%}(=eHeueu1KB{rW}ximFj;djzlvij@s~<(?nD zCfImxB{pitM14W%`A>t*8$$x{&&ekGEM;o6*LmLRIyn3{q6s>&0_>tzz(O|GH!kcK z8$(oso53JA8a0564iy$eFV#2CPPp^>!x#U>Ww9~=+ZF$%m!6@*0E9~aQqXpvb zEjVgQ4Bbw5oTUeLQFlD^12j;uin|m?K>PHtw`Tzk@z%P;cSU(`*qi6VlOMW{7O}i{ zc?~)vKG*pVF81_#VS`ocLbl%go|{WfNcm9arF=zr+#&Wy#d*(w%VpkTPj5cw)s4UW zy)+*t0UwOtIJ_lcl!m>|96Zj@XK4AzFg_(=&=8*Vfrymw!*p4n0 z)lPfZt0A{Wds82X1Y7p49p=V*IPu!*8%!6;FHMDLnIskeb zvS7ez(;%nUXvwhLCjKvjfeCd0I@r#o6Hd=k`Cu;a!`ZT?EskAZK!n~t+qTg=mT16C z_UPw_w_=cdnEdTZf5a%P@I}ld!Ml@`gYam5&^$!KTpnF^5fCp0;z%07y-nS8rC7vR z!%%P}T-+M^=Q$IiP9}-K8GzuIt=0ua?^zE}-QI?FjCi6kAEq_tBe%3yfe)fqvAKZG z$M=n31F@{r>)7>k)QxIAs_Xm8d;J4>3J#K=rMl`KV0l9L2c$IoFQbJDzdKZOilSmC zg~n4nD?rVsc9o&Zw-}?;DQtdkx-RU4Z;`ViMZwPZLJW~jp?!H&;ZwK(n?$@Cnj(y; z42lT2S)k$df2W{%s$8PJH(23P4!~eDGanKI`^Vxvi!GD@yW(r$p~!{FdNH>BQ7KQo z*RkDAd`^Cocx8{sIrHgr{&(3IdT3OdXN=)1`J7-Jof^bwMxy4Y^6%gWyw zb-9ZY8+Fm;CZ3KON0mW&H0?Y{PV?Vsm~|!ZKtMT2M?0vAHi-jpJ#NU0hW~L?tDX!H zV5J<)Px8E~+npTpA5{JCs9o1UFt~ClhHx6c^DuJvom{!9HT17JR4bNQFly_y!jO3! zqaJF-cHMm=0>y1Z51uos*+#+y?2h2w zq8tqu0!=DtLRR4IohMQVS2$V;(5R=oL9#R=?P>OQXKa0#tc9>?>)Q3bFmct2DvGM2egN`3H({x!GuuJ|P;n zTr3B^4U)A_5^LYdQ^JEqVIM4UPr++X7BRv}RD`?fDe9(I%9_F^v4o(u;FcgKv5I`Z2XYqsC4X!6d*; zltZl2m}U?vfDHOW7f(Cpu`co0aGdbG2?W$H$l$R7Bg1hxCF_6ybh0_LHj_sOuqFvW zF$2U14G_I6cyPege5m&+|J%^TvbDZMY?%h5HJppvSOCk3&;Nt$KfU=R1vj1s@|a(% z1F(gH90@+y{(JCxWLc0%{wRXKwiX)E%OPO3qEfwlv-X-(WldnCw^BhIkVBq@!B^@8 zSSjJCi$**SmkRm@DqY~BFMx_M@Dxe@(T8}dJKaYT-k5{>JE{H{CB_Yq==`)kexBCH zl{v)x4^#OKc}8itl4XYF&1V}Z6(aeODdl9xKF4+N^n8||L2u!Oh> zIdRDlUyXFP5tCtu&6` zPEvO(0l(d3;vw#KJX0>O%lpm_F(=6=!S)p(eDxbo7d0)YsXOx$s_hFFSy9zUdw@Z#g z@UR6xQFL2DWiKDiz^PO!ItcJ}p3Q34XXpqnD&IZ^6Gu!7F!aERal})FU8P@PUh{9x z1Fc3Rt?t)pbr$|d*XB=7Ef&E{)Z)?IOs&&Rq5rTGwNBD#P2=ZjvkW$lT0bN~YblN* zfSu4diP>qw0wI5(z-3bwsB!b~WcWc8h$d)OdsdOZ)p7LSA}( zr65C1`V8p)J`xJwCEZ_6o2oz)-Cu`zCh2}9s17L%=FhMm4&AL!K#n~xA_bH2ClNAA z)|E8G1{K*T`Zv2l!;oZMvZSVNe%e@HY{u30=ajdogcY*8$CI)T9f7CV7^Y$!tfEwD zE5k4$BqxY(rs|bDPUn_cXf-6(0p{X5?(=or=jl8k3PiDqxtL`SQ-Q~&(pN8#r0Ay5 zE-ny~#|RgAa$L8mV`|nh7yl~>XD6`L?AS%hO0W)%BOeQ@9|Q9JZ}D9z?}rTW7o@GZum<3D4M9d|sqBt;)_E;B})IvR2O1GxQZ1gAy&cv(nR z^;Hn{9oxG}aD!?Tf<*h6Y`qYg$5VyvDstQ5-&~B=J1tx9L2A7LjIa@Z;bL z4CX)C{}$gVvjB~DJxv7cOC2H=-OI!8MoXlNZDf>5a+E@YKIzsf$)MohXyHV(AFG1S z!*h2r);S=qc-66;+?CM0v#4h^%!I%y7MgVO_fLPuaTx8-GY*y9OM1CFPw%3xy~JdY zd$F+TI|sehDGvm{?I~DH8*-y@&PwW&o5kHOn4v6%7H5>S>K~vMSXzwi#_iE2{Vn2*FkBi!G_T4>(*)V69ZB_7#n^lc)VwUJ z$a4S|Nup{Qs4G1L&^oJ%ybjQEu!>z2pjm77imD9|fNCr28g=jAVz9b5}y%aG52bP0BQxF~S9fqf6e5B~JMwVbDrKhO9MihpR=qt_`8VR5S zHD2K=#dv)=`idPt85^vXze!Jgmg@dh{{Lc#e9Q)O=v30*QA}C4x94go=)o^ly|q|4 z=IHs4%I~=C!_)2U`Wel1&z3DMcI^681R9N>`=jIM+EN7@f#1ewz`}*Zv};P$Ive1! z>C7dzCXi=9%AZT2Gs4LC!2zOpY})WfEED19JMU`1YW%i>4XptjJ8(%zaA^S`WbpS5 z0bkZ|c-?`8Bfd613xqsCa{EJ=3&P#Yf>ljTp(+4L+RfEpS}phmwQt;y(XLsnt%q}9 ziBC59*^3~Jj(RnO6#t-MR3~sxveiHnmsT|Rek~gJ!!N}W!14_O2MJp_6wnJ>O?#}* z%93iu+BTFV#uYM876N&20{G<&{}924u~h^(EAG-`~vx0O?6%Pbi4|EIrn?qp>W-~0KflA{5O`SNBnkv3$nmo(e zkI?cOH$hs6Q6}?nE+%D7{){8$JQ#{|O2l#Ta#pPcU_8pFvzcoSmX~+6*Pragk*|w|;~HB1m4PI; zL~t4)np_Vjij@!syRmZmc2nqA;aQmC2Z%0>hd~hmm+eqlMe!P-MWA!2W&p)opcxuK zh_G7->_|~4mX`W*!0dO?0m$+P`~#TRu(Ta!Jx}2i+;Vl8>lKKr_4gT5eJYX$)x-K4 z_!rrzsc%1Zw>np?e{gZYw;$cjgMFUu*(7&KMsNk{?h_R*qZvl^W`KWQ6Bi_C25gd# zMw?;u0%{EHC;ASVAP^@+B`7S2B0^M!i|V! z54gC)W+PmY!UK=uOQrF>+<85$6qXi%K9z+l5-xyS(T=9|uQOH}fj3s*@ElHgi8aqk za%&05txcEQEMoT%xP;gy0o%s?s2Vh7kTv$Bp16|EvE4z9KpYqFJgW3b0nsd={V>LQSQ>2q{$E^ta&P6%q(Aap6xz_W7!%tU;5CQm}J?Ow? zbyI)N-Pf~c6n5(%its%xDmnwZNoWui8v?tx(Tjm-8?No$j|d3E^E`(f zm2386fj~Xl1!VJsO|%>9{~63|JWVQY#l@}$hSxx|hK}2=4=7m6m92sKd?#rLDmtm? zJ`^4HL2_}0ze?qXJ3B*X-kF7#L??*ke%2-Q4I z)1Dlhqk|CJ29>p+rNNO)quSs!sXj&Y)3PD3o3>DddOIJ)Q?E!?Q=Vf1sYu zSE`o-J6`JFi*%A`@C{biDexb78Xb~Gj+4OCLw>=G3)vHJHBdbnMfLH~$xuCMLbZud z{gFL_YG)MHW&VLCLiPD83{?Le>2y@v0(D-2>viK$JmR(A_BsM}TSA}Tj=_^D|601m zA^~lQ0$S%ExR(HZg@klY_AMksmd3hhNul;4Y{#Lg+werAsW@*|X%zr&yJ zGNkmht?PP8&%L3i@JY_u>0kUYjIbZ`W>N0DA2V{VktJ1m+BS5(LYb(nGE9WKoC<6# z*}lKk70h2k{&MbdiEcZrNZ~y_-?5V%I>G$YyU;&6*IVQty#j`tqw`?6IhqgCq|p>_ zo_|#HX8T7k_h!Je7WrMCSTEnM+{yo1`T^=*a1eQ{SBPf=&)Ar;FUST0qT zlkTNTJ(G$^s*+>pN%Ug>XsUOye>BZ|8;nvY;s1JOU?+dBT?uYpOY>+0fDvMIC0JdV$l5zdOksQ5!5RQ>Qw~wYJyro zP_HGZZi0F}LA`;X782AVUkz3tL@-h=Id-&y?o?^=Q&afF;{Z+SrN`*SsA(xaiS0Bl z>$SX^B9_BwQ}r#@fyrB>({x}~21YX_0efN_UL5}Cpl%SAojQ!4AP$ak9Xo04h4AN_ zC#nNFE!!0x#`zp(xRZ2aT&$|`Wr*BKeY;~CzEijlVM*xeQ71cF4^ zr4j@U4#t8669tVHjJR$W!1jeNhO+1m3LaqA6I{8}C=KlXB&s2B`7u;J=1Jh?K;zT6 zcqcltu7O0hG9o_iBhjXkTsO*f=icVf?%(Po>pq^Zo~HTgI_`WCZyc&Tcx(35q-vOHWLPuW*+Nk`RF)5CTntkSFArkLA5vZ`khaCt- zE5p4AQS;0Of_%AO&C~p4*Y8v;7O-^KKa7dm*w28hhqK1ZiZ$iX2cM@^A}^$H(z6k6 zoJA+Bp7+6PV9h=P5p1)Q1T}6Ct(~_!7NG%3BMq>ZWlMdLTf%Ex8`Xpa24F}lK7Ea= ztIZ)NV~MMfl+0S^HjtA}oUYl+W>Ms}83uVG9TX1i$Yik&y0%47-=D|1x|)Ihx5(|i zmq}WgE=Ylk+-EzDLIj{LHbEu7`rcd6PzwuJ zY|yvvz@0I>ckte6K$Tl}^%0OC)2(!CXaJ~Do2O!R1c3Cg z8UfIx1K41~i6$rSeR5**uIqn`CMECc{GfR z-0?MLA1)sIlEg^g#birV>HMQ%uuR9m`$xmz1)81}e`wnu4TE}#!N3-b3mArfzQq_W zZ=w${XH)!xy;A-fihRqaZ4dQVLp|T%z*%D3 zC#bhW2C2?w9o!Mj7o^iY9J~jdP1`&01Z1Dv{}x>X;VlKY;=(7mOX}blbj@J{Vir2B z*hW(`0afRUn#06cK7f@TQlTZ&x<19j+$ahV?Z?ae4-ifm_Q?zvCR^K+$f|#k*3IM< zxjFRVeAJC6j0J!r+Mj0C)sZT?UbOvb40E2lk?V4@fMtC6 z3VDth98LCA6dM?)LP@M()`21gh#mnZ7|@09D28)#c&X;P0_ zLP9VO2xCrllhGUt+^;+$nW6VuSc%~qgl#+7wzn1F*aAjecw%E+FFQPQ)Vyx&njPSC zT)T4==OcKY!t>8~nsOC7$0c21M*l1Nc`Y2&U|$Cz3nmzNI>7k{`+7dC)q;9xA_IyF z^~2K`<|@(Sm9}AHYJG4}Rd@sy;1fUj)~Tj-gtZTcm8msVL6B5<(GO zD+woyxL5&B6qG^b#g4#oZ9McNM?@0p6e$hi3eDIWd5VLB`yFr^TD)KODxTo41xF^^oIv(Ox6O$e?GNp`^jGdoz#iSt1nflhUO z0L{X2l1P)ouaNLd0ACzr`SY>N+nv6-JC1p?9$T4odsC7x!#{}q66=m*zSAWG!^xKq z_zx$cQ|Va1$KvEz4C#K0h+Oc?z!cD38i9I8j(|BrdmssfZ;jmUHw3mrTInfqeN5|e zdfB*NVUBrN1rr?WU!CPysp})8n zM^lfJtN9byuE%vb-pj&0T2ph#^4csDH#-CK0*|U4>$y{^mJWUFThES<(NALrGcca4 zFFAje^_Ag6kudcaQbJ6(zsUTbMh*!N`DeK=`Eixy#C74N_AT4us(zjiEZIE$AzcF~~;O#yMN)}$tM+ZzMBX*D0Wfcm%qpGC&%AEg7db6Eus@EKK~(mD~3w)Y~FsltljR| zbs1D4v;;h>pZ~&w3;cv5YXKOD_G*K_Ovbrzb+%_nKQQ$jeZxBDybl<0J{gqW+8XY( zE5B_C{nd}K9)%7;9tb2`)^D)l^E?j85x3zAW>}b3+Tomf&qp9Ez#y`$0f!aod^*hm zA<+eo-&ke@?}39cuMPXp*VpDGwZQ9Lj^{g$?e`!ZT+HH{8UG5rk~t^t-YX|Ig*q`D zIWhACKB2?*xB8~uD4(S|0joe#D7x6m!pd-uvo-Y9lRD0)Se+=%nI+m-Q{i|A4rw0< z)Z!{@#~!)`9_Fbn_8vFg&MVJDG~xuoSX1Z>%*b#Y1gVH*kmT%L(D$AcHo6S-iGM|} z@vg*Hl4Ex&K4UY$eWQZo(|IK)Sdr)0L6#Qkc*PP!re zGb%!2IRNy(Mao6TjyF&SspW_9i_`F|WQ4L&*IpW@1W3uK!#jY4#wAO6XP!m~8$Vm$ zkA0xNRnVmP-lu~nji|h7n7}`-gD1@>G^BCLQPzwyy2JNJG^2D$bsMM@tj%i*b;8bK zxSsDKg@&V6rMuCS@z1x_4~qtBP>^=no-yw%46uJCDtRXXH{S4;LJ}Zl8IX3tJcLNz z+W`5XMbx`O>NZpz=SjdxYtBhCzY(yN2TZp86XZ{V4r85#y*KPbu~&Z9Q)4GT?xSbk zfmVpI#(;2;9ZT5h-2G)}B=3Ug6Tmw?yNeX3S){;tF?oNR|DN=>cV3--f1@j4jsCU) z@6+jTv?m$dPM)}_%e5eMQMz2Uf%Y`I+-oR&qAu5?x4&c008&leTVuGlqA1-o8opyD9tIdo#a@SEk?J{_y#2@kO2Ae(?Q^ zGry(ktv=oPO}izwv;Eo3Z%_W^#hTwf{r>p*t>EE_J6g>ARvy>OCYaxTSE@Kyo1PEi zot_Vr%y52tZ~EKi-}~?AZ_6%ffBV3(i__met~dU4`&;j#Khyr^f(QDGBTwG?zWDz3 zv~QaIZJP4r`_V|>zAgH^ig$W`aO({F+vM`3edg;oC#~PU@Zz-k8?S{T@+4N1CVA31 z+4@b&lRF@DTvU1T+;^wnNeA}4Da+b+>REkE>MLfd@nqq@XIGgz@NtZnCX3+>D^8% z0X;pfj|?CM#tZx$NwC$%%YFLGC(fGS;O?VHUbm65-gs#k^<~h)(anxswt%x_ zp#9*Gg?4H7=UP*?wI4hZ+0RC?*q>!xJ#WnFVB)r4N&g0T*uKUsR~4$B0bmU+Abnq> zK}!w=KFUmEohP=#?H1bPR^AS@Xr8yb@;q;C%7Gz4jT0wYw7{d9v<0wRq|;PRFA8)(ya>OByyvwI-EMx;hOv#d%)onnUM6a$t`JGZAR!>=;*73h*~8meL(?=}n~B18Zz?BB&Sfusja zPI^+gMA|`wdW>3tOHS0D#-3>fZ(5jJm-o|Kv7w=F<~(ZmM|LrAOxOuKq!VD4*3j=> zAf35N+n2;B(Or4DAEIYpZqEL^H|4>k&`D%((Q}2qB%zo$MusY!;Aeev5>1Z!k$#{2 z^lrt)k~e+L;=-Kts(^ZbP;P+1vwrAwB_C#_Bk=>i^bTV)6^0OXYGDc*So0hd-*Z$R zgSQ_4cux0r3wQ(=@Y&(~mn>XZ_fLgIuew-aZ^1rs#D?^)kAh$ZhM%g?k9AHPL%J6d*4~ervFfqwg>`>K->QaN zSEf9UHXP@&ngi?A&<0r=Sy&8szmL0YANUb)X$skfcuNJ=J4yya&J5NOSvvx@^L%6{% z+$>Xt++YNJ-x>A|u3y^`)4h%);71-gnO*T2m?QccTiWp8%e`$f= zQY3N{*=wAIZ-F=S9?N&&s7vOaITiJ_IODx!`8OUxwqeK4W4=@)U@bWT!wRyfI|zDN z0}J)tK%F)DhuspI_FHNEZPXr2BLCG()X*1k9L;EYPEX%4F_f!hv#hm;|3WiEGv;H{ zcl#9IW3<@`^5;yEKQH!s$$+Uc_{5WlF?mzC2qwle2m@Zs{$G4}9DLe#GG&q9osmt- z#NlWWiQ)aR^G}7}RNtq<|J{Cnugm}Mh96Ilsmh<}_jvg6;i=%or;iW+sppRhv5EUz zJpS?Nr7S}ukIesGhvVrxRd_0V;_Ek6`uOjEy7{LZ{}YbS@%4EZVYXi~<&O_@`4iJ~ zO8n#D#fQCd^ILp4uKw@3yl3Oeiw|$mdiIz^(EV{?k|$Q$%hqUJ*>J$C94M>Nx>H#w zArUCD?4z#6e?!SMftOdzcJfSqa44Awuwya8^rDByN}^#hAUk~1S_kG)x9(k1s-)UhtiMUcMz7CIhq)!k1p~oqis# zjE2b|t%%ao3%=9OeUx4glYv@(Il}aU@AUJ@vS^qL*49z|=mp>DXW6aMFd49o+=(!~ z;5+?zi9ULm4BF0BBTO&&PCtvQqTwwF@2EkTUhtiMK1ulK;bMfB5qx^Vclvqiu4uR% z;R2!;z2H0jj1fKc@VyAXO!(3ZzSGYqOQT^Y!bQ{`^n&m7vw`r{!^Gek;Y%<0P7Jt@ z=t(aKpT^_pcStazQlQKuYk(e$!;nKuzO1vJB}ptRB>daA>aSgBu`_G52lG)S%b@a12Wgb z*ShERt^qV3xoj)X6PoAMuK8G;z`@b+?p$^oF`NnYLx)iJ$y;4=;KT&=50zent8#HT z%lm$mEgEwIwYVoKx&~&)ECj)V5q9PBcxHiJY9Nq%8`M7M@KWfF*O~;1eK|$r0xyXbDaw5H5taR2p zzEqJ@coaESIs+{(IL!~#79d}J2fS7}cIUzD47P^$Hf(dO%qO39R}79`QSZIF-aEVA zSJ3}6OF680U$AV0mD8^>0xjyW6DOibRf^Nv@@SN($R9kFH#mBEJs@tn9?0-TRXzF* zUS&)nS4`;2m=Mu7nh)OKO`)q|LUUq5q=}5?n->$B9}{xNgszVX-4GKhj0qLRgcihv zZj1@t6cZ|r2`!8X-5e7tiH4qhW3}S^`5M@D;`th$b$A-^G~=njlii{?uf%f`o;&a? z#d9~F59rVT!S5IGd;`z(cz%HA7kJ*llhmp>9e7kQSRH=X;3>mXi02AC6mN$2VdU}Q z@#FbReBX#?E1n>pf57uOJYU809G>st`Kjso4c>o`Cpvy%$7U$$2!t{mzw3l7CK!V0|JDEg85x1EV-~@5I7?WPC*86j)j(NX6r)eW;wbafZsdD-T&l7XX!V z>SdOpa^5APl?AQRSQ0Vo>qsuUm|+s9O)5z_z8lm)`LrH7U|P?|g^}Lhhgm*VR|{hc zNUCR@Vu=>I@X}bAY7$*fCP;)SIa|3Ljmzxj_seHm=G5h7$nsL| z*lScz(%TYD~=U?dD{4yvb<7R z-U3HX#R8XBh2gCM_o6!XTu1R$8l7{nly&CA z6M+A}EZ)ZD-s0uH4~jKT&r=1T#HTLjw`db3a)%?z05ER>Hnv*`TEXzmlz4SPefKM| zUtGg^@=JC1v$0?DB?g}Yc;U-|;et!7E6Bm=SK4p%trN=%oS`RPpnjF?TmHZnk?U+0 zSCCvA{vJ!VzEtcImm~LZ@dJDC6$e~RA1dg>><6BT`2a!4jwKnHX+S80oL`WSC57Xe z>H_y3h&I&)1&~=Nc>SK*%S@I17L6gMu)%BeYqSTSxtOp$&>DJ6{1=taE#Z!7i4zph zG%Qa*?J5n_#`zdmi_GMb#QQX5V&Xv-m9-+`wc}#3)z3@Pt&~J#0*1W>7l(ShR;xy9 zN$R;I^*~If-j&m*-puJocKV6vcbej>uyDz@_y#2Bl1WhlS~BP2M4aT@DG8Z=_)nUU z;6JR+(B&Z+(0oigg-vSz+cb6fQphKjWq5i2+cbqBND}7oUHxy<(2gL9ro+YkZ}XU& zvY#Z*;Vb*!=CLqkKM91xSvb=BO%hZ4-=?w3QGIB=KLkH-b2i-%cW9;WV|QqI_<AJ^E!ovv_aerVZ9%yOOA(~a8siee4c3Iw&F zdzRrg*iG;vMaWT-%7;E+L_1$uta;P-J#HSW~cO6pz;Qpe5Yp7OM(EZ$tR^ ze;cO;zeb{?qXyI%lsWYAb^>^2U@Ijo^o-CjRu2<{8!xX;Az#Y+eC;VP==sVb>;A{_ z!gs&gn{iK@-Ulm-{HLt`!=*3Lea|`ri%J~d3{;?p$aQjsnS;yjarMlDO6fdqX|61& z64i_B!L7wgXI@}qzULlS*RNm;Q|Sy;xcmbS|EaTqiUR%CaJ@Z5MFChUIoPDaQRgvk z7Z+Nav`R#3G>|gj-vY7LJ1nXXM3gUb{sKKwDCNfz0Qm=?rUB(1EN%*2h--aAzcW$# z<-d;Q7DNAXzPw2Dj?=#sK$)aG4~>mU@j~>i(WXeB6J=c49xbA>__I#$O(o~cx(a%3 zgl-NOl;K{3vI3CNUtgSr*AcPpljtRZ>aw$*u7a)~cMRL$nkGWZqn#dMwxsjyZw9t_3egr+E-0Kh(i{7NQQn|&e>`OX$^FTxm z4S1waI$v9Ch4PsM3#n0BzKAqRtu3MNyfPNXSJmeh%S-(atFTp!*!Q8+z(A)$?O$HJ zgGK_WS%Ct{CQ@3%O)5_Q!meeONLv+N37-QzbVQ6LhlB)U0R)(9sB>DeBqDUU zYp&7)bQ7nIAz{H1LvO;rRn!)jgg}voOXRT1#MFc8I%?+b~E)kSKv{*VOAi_Xbi5O=HLG@w3Ef_fK8Lw^CVu|&m5?Qbh7O!dXJqC$$oR^30=R+ zwttS+f%_e=D0r$g`sbv7c`fwcg?7*cduIiX zg-g&;_ye&e_8i0}C(V9`JZHP}uouE^>RLiiRbiSqM4L&!20Ef{1IEMoqP`q7%HvkH z(;ZoGlU-ikB(yMev~bj4SBy&+#0qy{X^vQt7g(AnR^$hk=EIj3{c4rBv0(4Z{dA=@IQ3^=kfD|ss2!x&=AuiK17Wg=--F`@;&rlHF(`c z(L>uPn*MmCHqV#Fb6`Ev+WA~>J3r+H=zlKa(bB>q>@@malez^))81l=Up_&lCAPu<&CT)4mDS9ax z(C-Dm-%~lSdo5Pt4S8r$<-4IPpT!W!eg)rL2=J^j*lLwqZ_`(Kt zeWSy;>dJm-+cG3f8qVeSCH$Vo@AdSK3prfm2m*fnHsLtMZLkoA4+sC&a;ypM-jqYT zIJbW*lz<3ucK_DJ9N_$z1ZKncIyl_f658<%1Gz1zgum~s1-pPNy!dEu34K8S*!!3M zz7hV=DL*VXJ~a6ILKY0HPi#YO`R!)o+l~Id)0}CG{4mG(aGAgFl*Q)|D|+!kYYAES zL*(2(Blx%GTfDcEiReRRqs{+Iow!Wq|DDokRG!T!3u!SZ)bxYHRraw@i`nBZxEM|$Tj{jZhPQb@06x6Yj)v&gdafr)t;$X#o_&!r1XWTIHq7k?>~5{= zr)*=ZS)@ZW&4T=q_Pot#&pC1Jc^P)9UDTLoCT~oGKL3sFIrig8+mmc8h+Mor8`qcy zzS#da+Ovk*(?6sNYR4k9<8&KP(`_dXMO%*w=f)xvit$ZH>_q$o`a=@Z=WFx|%|gSq z_|RUo_)3u(UZu+S^#KR>o~ZGbfqw#ed#V5Aqvwc*qCmY}G!zGLVROR<^eD6V$^4A< z3g(|mZ+B+Qr96ZQo1?_>o19E+hQS9d@TAOL13bLHX%_3fax?!fvAh?fX>enn$e4i@ zioMQ%XfgKJU+7rN#Y^Dm^h1NE)WV^TweW4qaXS5s@gP6Ca&|H9wB9x2uBVT~pHju) zpC7>=x1j-l=Zx_$*71)3hYPt5ps&b{Y6VKI0g#^@rD@uIvoKlJR978 z;X-&TDty^vYQ_%i!tF__Xz-m`vY!tWWZ*!7roUsUjq?N;@a6}15|9VCz;q)76}N6! z^;J)0KhvPw935mcbpE3{-NzGVF<=|Y9{PI}ji^S@X%_34(Vr5t?oWbQuunbw1 zgOoTx^q*@(?UBUPuErneA$v0^w9%ZIa?eWaqA)lCQ=xQ3t7kxZgP)7L(|Fh_Wo9Pp zu<^}D{g=jnST7mm!Fhj{ztD3>xHo4EF( zhvW29621waKQsS+(q7!O-Jk&$sJ~Xyfl7Z8b8ha&=kiX zm-^q#`WyEzQ~$iw|6<3ROY>hWJzR19?Na}Hcm3^B|BL0XOY&zdJ?i87+ok?@ar@h) z{uj${m-=5UJudaXSpOdJ{pDhZFUg;={C7$IjHSn=`499kt=BH~zgYg*5+^Se$A!z| z!uQ67FU^0k^t?3xU7G*Q`nEr@{RiF;)$dy*i?f;Dw@CY==KD<(_^TslrM2YCz&S=2 zcFyenRKP<{I>jtajAi)HJHHRhFzvUpbI3pZezed0CL?ll;kf(JDt$A%AMMY5zmoU? z_lMe-4E|IlU$(GhfnUIYCQs=er2TRK2pp!+)#fh+)|}gU%&~)90>j*a?X^nIAF3JS zyH0+GHW#q?a|Rdp4E|D8`n13zu>wbdAIrOaE?iKYz?H0RNw?plyP!B=-Eku3N>;~? zzaxG=@2lNbR^Y4H|Li~JIz@O|b}yoR%<;^Lodb-tqxyKDeGGmJ+Q)EJPp!u{>e!B3 zO2R;34XP@R24T*V1n&&klGlQ5V}W+uCZ%7KjM^)eDzcGZ5~OhjYDUk@Aw$Mic%{sN z>zIx}rfAILf&vTW4S?)%lsvuQqyqj&w(9u>^n-sH-CsruPDxM_-C4&%GE-XP^dHIz z){X?M@)FMR?lO=B7CmGUb39TM$Sf=Z)=4!v)Mj~sMKCNOGeL%LLV?>ahc0G&HB^qn zPE_RP4WM!cGSDGP%7F21$VP&M?wJ8cF?SpWwEi$%azmn;j%+wza(ZMbH zz9I2PN2zHmQ9kzg6ekoxuxska9emWU8!9&+Vw55<}9429`imZ+DC#*HF+PJr_5W6 zTcYgn1$_=JK&u^{nA8o`at3%VU@PoZ_dnd*+xzBk2H!R=*y_L`(J1keSS<5v!Nva2 zn@`Z0K%1A^)C4hbr{10h+n}Az{7^hg=ZDTeJAQcoS1txWtl0Xe$q&B_@)^;Y@`Ec~ z=Lhef9Y3u3^2OkXyZZh#`QZnG_#tJc{NRM^7Md@Gl<@(5%2;A~Pv(oE0P({WGvxip3AXU7lMeBom7gJaX5CO>>;C-Fo6bofDD;F9}HI4l<(QO{3* zSXj!ZaA*hjM=+094woFms?#&*@OQx*T;bv7B`t$zl3Rnl&Wb?a7%o~Bb>~Ws(T$Tk z{t?p;UHQ7yA5tAVXCt{t5pe9|^3-7om_p$StnD;-wtwui7}OnKt;_HnzI@>7!N7JI zUSW59>97LljCEK6pE(M6453pMb)#h!F30wNqq!gk2ren`)N7XyT*)91f`>@amgD%+ z-xEj$&NnyN2mj03|62GiWPK&jp<$`9AD=A#pD8_;i+2j&3al9sssr~NEKwV9`%B-L zsDTapsOONw-v|_7!QZ4T58C^KIUgx(9|bV~pjta@)9+WVJQt`K6Y3mXX;V3dv)ICl zGycIP&fqHNa^FwSqys`(El^LP+O#ry9opcpto=V@jD8zI=QRTzUj&`yW^@iX{NDuH zg-3&(N&}%&`V~UwSAR~UOqG{5V8!wD1K~!j{?37=96LXc>m79GML1n>KrVHSCAD17 zzuF@Fw6ql6PMim@hxsHwu0~TX^zSFA_}hjBV^@wi9J-xWSv6xroCb|x@x0lcKb)eU zZxe#xw1hs1xs}fQzS;F_S+=f6KzWc6n*F^l3)b+j_uMY(3*b@VZWV_;Zj?t)(Njck zCsv*0?^7)FyxB8Lly3;CyFF)tK#f+32J(Eb>lgaXC@OCIkg5V&_fviRUz4Y!rE4}; zP>79m#rkuN{ut9J@E82UYq9T)0N)H*hF`g>V7(%deU;b+MSa&#Ux#f zq;8q?N=|yY;G~2vC%-Z#c{!3_FOy%z$>G|SAhW)S)4vWfMlspY+=?7ai9|g$qLau| ztAhH7yj6Uho2f?=Ydhun!aF_h^vo9h98Fa6<3^h8PgCcp8LRXkQawj;yLN>anU^rc zs#u7nW{7m2C?UN2;^B3^J9vBvmkGcAZD1OJtYs9-V^LgaMlmsd-$wSB`fdTR8U}V( zEU;oTFr&WNvGnWejl%kgsOX(uT|Zd>BqaUf;kixlI&kE5J@MpFKXEB_Am(0<>sXs8 z*66GB+ai7|ULx-cNnY2Ef!=%p$69GkO}L=_K?_{G^k}QXA07ZqxEQ!Vw?gs!V<&wX z^p}leG)T4PKnn=Bz@(Zv;5pj8x$r>!U`Qhl8UfJ=M|vjKlvQ-UonU@jjf# zN3mC<*!iMP7Q0CnyD3ua2Z}G?1XQi3r0Y4{{)4eCTmqL#;qI~UmkCPvD8Bj+I>U|U zd>;i$q9ae#kshua3zzN-{SI_P zvt)?6G2wtSWOxq=s9)xiH;s1vFnk**9^Nz>-gGX!kFiIM%eC-PxWQiP`vMOQ;Bnuc0jBZaAor4FNC zo4XQv+6TT3HDb8SF8o~QE?hnnzPTy~Mlw3WFZI2f7K^$?L3J0} z1@08?V15-J;RZ^f_`?imYzMK+}WkaLCaAP%RM4B*=F3Rh3H zSXqGM_>ZWf5`MAI;mqL8(4T{zXdc;Ec=ddpn&hQB+Hkmyyo;1 zMOE<`R^wpg05Ul~KDa)xqMmLKn{L)7bJi#5Uc{N?Zll~NHLzmwdX%qc4WHkuI2WRl z58-(c??f<~Z~IAf^VDcvX+!*q5S&QJGi~PaLA(k^hkV*T%JS#m0V|R}m$3Xfm*mYl zkd6gV&9Oa|A|Rh>0U@Q$x_P?v>6hUZ`7C{+gF~l(=KFvq^ON|gvH1BpAYuX$kv$mz z$)5EPJQ=zm!81Q1cq*@o6*(k*=3z{Wmp;$MNS|O`@YNVepDTbu;o0TEW_w}#7$iO^ zdIod0*NQ2m&dZRKrB0r>TH%2t2P0RE)TyHZSlaX{Yy;Qs1=7=m8UJh6ntn2jo=t1Oc5k|6hZ9W2Sc()GHW0I}b+{vh~~&d1Uf zjo%G*{0=)+wIrEc)r9_S!EI^qcLWg*p0fR4qh4e2MQ&*nwIr9#ri4FuhY~L4ghl>` z>n+|NidquGGU@Br=qolYdf}_%fT-Po`0ELsXINgCCz=XMp2sML@heNL(u9@1{XO4L z@M0Hsl1Y?WKykY`{Z*#)xkh@&4%(s9^ZZ&o+Sv?fWqw?Y+2h{|v2LDdr9$o@sW)24 zJ)Ge?U9bDM7F&AK#EMc;TkT2OR4G10ZH(b4!(V3cmV`co!_2_q2C)qv`RtIT+pq zf!7(pRhxo_>|kA<$ZTp^8U9;xIwR_c@&%Ni|&OmFCoB>zSfcxPmIVm;6 z6_oU5PFgMj!WDl79-|6oPgv2(hBOlpN`diLigmLilaTSqP6glw4juDOTAj{W-`7{w-E~ zUu+$!8Kv(%>%>-j$@!rDHq7!X?Qj|}AeK0>CLgL!(kOvgT3RWVIqahET(I0Fwv^dD zt8cR-eb)~}RVfC}FeIndNtlu`ijMXlBDW)+Wma4PpL(2fdv$VSFkPd8hPp#-~128FnPY$nbJiKy-w>koES;1 zXV>GlR;d>C!exrZV!eUlZF>BpxTiq9;RvUV6V|YnkL*>m=XW zCi!;vB;W3tb}Hvz|disW86pY`(!p9g27u!Z82M9+#$2Ph+)^Z(iJv0sgUWz6P;wI0Q}u1Eqt1uF>-= zMNX@GEg0*^bF8!7aKD>&(qeV5qX^BKDypFAI{(T541&Ytn!+;Qp zkLee=4|R^?_00<+xJLU=A4eKI4sgKda^QuY)lCp2|C5Cr{XM!6Agu1WNZO&ty1hwj#}DRUXPi%6J$z$CX3j#A%}CMADebp}2A7nEL%rjsH6{%=GAl`Q3p>`&oNiS9{Xf*zd zz({ugQ#=sz2yMV1oHOwlFbLmBJwTZM5%mDECaXs*?boHgd)n(T-VN=Or^4AveT@Hj zyx9!2f9x<=1;Y%n%ncT5>xssgnE5m(*PWZjLjlG@^E_>iH}M7-Xfm3{^8KGMk7Mwi zydHAQCqi45zQ4o(VO9I?)5i((*g>DJY`#BHI*yFx%|C2hpmC4p zEjT;Pw9+`~#z>ZCYm@WVMIJN2Y?ISdwYY%`9IIwpc|1(BWm#Ks%Gjr1;*d_tn9Ha&j4Q%beH52`<$eMFQN~9+#7>}<+{zVbI(^Hg`hWYu(j4?Me z&9(sPZQW}k{Z5v5JHEM5w>0G;P$Vt)2}C5>W%=nT8X&j;0V97L1f#sgape^wHQGOt z`hmFe?wGQ?Qb2%o90$QD54*^EyU6+#AT>4^BdIIn$}69;JU1X4KMTXGOw*}l~ty*S};uWACfc} zaYp}F=G|j$Xd}Kfk0At2B}mBxg?JY9w=4k)R$>RM8x5Q0?ge(<-$Eu$Pbtb)XLl^H zTd!%D2V61fXI`6fgH`En#E73}Q{DTJltj1)tfh%yy)h}Qj)`D3CW3WtQdk=%g0&(M zEJ(VO)NvzNCt)2|CW4hbDXhO656fzSSSs7ED91YQZl}fC;QG;zFg!uB`&=@n!x))) z_CqwOTHROxkjzJ8a{+R%CR|u%+ZvIWAX?kp{~M`I;+t9SqANdWtcuEA<~dh&{|mBG zn-GjYuEwwhY)1M0k_tAo_Dy+^Bw zyT$EO3F}XD?AFLE_HN7gbfo@P%k`+>8sZgvOtCh& zKTFJ~_vx#NF!)of4Xc&8Z8X%ZR_3)4m{rzX8c*v*z|qqBRSbl1yi3CRa4s1Q?eZ_5~(JUC_5uJdsasBg5=!nSy^-2GSl!guPrlu z)sHhS*f0RtvU1!z&<#&o@WNrFYRJ6>@}`oN)sUT%uLN)4?4L zcpz6>9>qiY&xastQv5zV_uxqbQs(#|;-12DWn6q2!XyjbnIN9#y5*+$^x_Q5DunOn zcFy2-O*XgdEHq(;joMX3yV_*Cs=3+eSy>rcR)(ov)3{wzvogoEt1~MT?dn9krs4@@UkQ%vl*~Msj9K zrka~&&q~jAf1X-5L$+=@x9+Tr)YO%!+_ZMB$f`Y(Y1f;U+mM^qp|_zUwrQPuv{N>% z4NaRIX<9u`q-piUnaNNR8EuPY1Gnwp;Md%SpFp@B&+p^n`w*t{jbewnE8adh%bMbD!%M2E#ALn1%;c3f*o+00W-}wD8cEcZ zEZb#R9z?zVip!E?k9j$kE!j3^IAXTt;fUB)AC8!9vr%bB0=CT>$F`XmSypFdO1906 zW!r4Y5SFZLIUFIC!M2%_ZJja05wWc^!nT{ zH{_Eua^if(w^R%54Q!yk0D;)luPpBWi=K@BLj4%3#zg%%H#a9INAL68hp$MS4(w=3 z$g=MwFlSje6BxU7Gv!Q&M$U!N4tz&HZCQ%` ztLneW@;5EZ=DrdMY`UK2FHzRUNLh{~F0y2WED}K~xujf{j36OUvQQ#`AmLGRl|%$V z!lxu#B7`8}Rie&LE41dO*^W_ttvnA$%Tr`=4YD{zmbO@yrpUr>l!Ym>ESD@xkws<6 zqLgtZ$^AX3j`+`EaU{9#Gx~}DDHV6m33nn`k%+? zABWxZ5m|)KR^?%eyWZC#7%}@=sZ;5w&AdJ@-Qdlb{l5#SU(EiW zmB&9Km$c_l7R0Q%mA)$o5Vd)cPE$SIM5|CV5@x70BcEy^c@APb`T>E0-dwdcpfg|J zgE*+oA+{IJ0-v)YIxWk3;j+EZhiNxJldigL>7+@QZAv;X8XF{>YZ~Ge>7-}%APv?8 zF=f#palLP%!oCva0uskIHbm$0T}S%1o)6{e+GaE4*I%fYouOMUrowjkqsz&;6D|qxHlL=+tK=(9lUL(43(*B_%N1;9;a@)ebG0pZpMo;Ws`V8h z1=My8P;1Ons4qePcbPTC_BXS0yH^3>?%#t5eODqC_fu1SHdEp8^CO`VA15=%&eeot zd^$o_#(``3&$@-s+xQN~ZyuwX5xblDmde50N?ROUkpc%V(f zaHpagZIO9bPQz_!`UGsuvzq{4&U;ihOpf&9zKUj&_14W)CgSLa=3XiSLHeP&mry~F zerWC`ln|sJ%)QZiIFh38?lH7MQQX{%@=Z7>CKT?LC@2zxr4j>0B5;R9K#}F&B+FN1 z@mHFPS0*W4_Mw>h*a-^i`&zuA{mr~bALIFllkqq}dl<4EDGuyF$sf7~?U-ee5*FpPTCR(vqXcL!`XSkf zvLQ%6@v;%1=&&iVBC|lop|r}l90_PT$Eb6hj6?BL(UhjM$LZfVno{IO{xa8qpKQSv zBL87^1Vgi0{-6}c$5-p|=KVl7ZI8mVpbWK=w7M(;%Uwa=3_(Dqkn<9)p`eGu{7kWF zHV5rW--n6i2}ELI!6p%zx`FmKrv3jyG_)~K19x;^nI|Pz`4Dn#K&}s&bH&I?7$7F! z&o}W3?}6Q5iOCPb%ryVIl^Lrpg3L%TV(Nj;I@5X(-y8Y_Sla3BeEXE`EK|sKu0%Wk zGqv4dwk$Ysj zn`I2uJz$c1u1D#Rjs9Eq@R(+k%TPK6S%&%&(`ynLDq0V7{c=t9Gxy~|U51h}@MlnG z*ud!gl|`e?1K`1rM|m*b2IgrV>!@7gI@|-(|DJ?N19Axl_^qg06t`UOZyzOrmMlziihT1YJVf1bj_W3X6x|@WJbu7lBx;5L7tS~ z(lG|pL8mW(28!xX+#dmHljq(uuPs~6R9%F}EqR&h1qU{N(o)mH|9107Nn!I z&{dR1Jkd56;l1N&o1B?!&^GykLlTf_D+!ni+CoPU+F}SwPm#1unMYfVsae>%Gt<`2 z+f3D=P!Eodw#a;|H|0^EMOHR^OwsK=n`I+*zPf3G`J;ruz5T9z=^~YI1KY zrBKPuPDup;XEn5CrmRk#-8L&zoelm-O}_c4>~-8Iv-C!xIosSQ(QYtHr|K+8)if~s zbm)3N=z76KZ(6%XWf}+y?nB(4$HzZU@!@M+tbZ)v|8D+Y#Q%%=e<}Z8#QzuLKg)#U z=SI(zbE8Zl=SJwAEMGypTQ^f|noY4axON~8w88cz&5a;Cq#%-kNT2Zx@kq`E+X6_Z z-9`B4PQ~}!C+;M9!2lwKBG=;*&X;20$n|_&nJjkwUsFOu=K4C7m-_^!@ObcMnajX2 zF>G&KWenI{mxQR#--0aT@OGm<&jKGB!zHz740r93)%;=<`)gBjFIbOZ4Pay4Se~` zH@_Eki9ybgX_uj#i;NrUtnwL-Z=%jviCQc%wBq^h2{WM#T$Ui|w-V8bTOM?x-&i{F zsQRHOuoxm4^2{8<0e=x&{u!JHz?}B3^`-t{J0E_zW3}Gc(Ftk{Xnek$@Xt^^mAzH5kEfr`DMbYB5&K-dDGQo=1 zsXjO9y5l6k#jQJ}e)g3_untWMD>MkY1YkVe&PV&KGH1v!;@8m=`98qjLts z`Q=1#m=7k0qjLqr$zUFc!N=5Yki3m{qxA@+8~!8vzi7O9jrW}1hfQe#!)TXy7}0n$ zj6(@wMCopV4LqXpW*9>{jAWMkUq#;_IYl3tc(F;VkZ&U%LY*-%nGalyfWDZ&W&R%~ z$WM#agA?b^23;fhPbA1s0{4N5^PiICC$b-rlux`qobX$u6%yx@Es@|G@<|FO_!gml z;`w9Al=Fv7A!YA{;H*!?ro-6%bh-&FSZ`b(HWSl*j1eIDHxGD6(!`K%f;2HCn=Fli ztdYiq>kr~_#hRW7h(GIveEO=W7xIak$!=%>*SO5cpJCP_{g`MhpJF9!c`HI|oJFff(omvG@(IBlId&?1jzsSL$ab7xjC{XLl<%Kt zT8hc{wz<4T$oE>JeBU0I?;Uf#dgS{>qI|TQ7+c;~%=ze8-|0m8j*QFqdvm@bY#_`^m8#&`sR=Z}w!*yB#EM{O!85@Q*?=RJ>>4YAQ?k;> zDT33o(xC`WgCaNuKTrh!KlaW9PO_@H|26e$>vg88dTIt3rkiDkn&}w^8IVCi1`)vm zk)_oJH&j&6(P0=hj!g^x-L)AsYE+`e7)^}-=wIWSXk4=W-S;GFl(-~uH)>oX!vFU@ z=dJZ#S9ddD%>QG5y57C-yz|aI_uPBWJ?Cz(VFSUI-EgG4)EZ^ywbn1vZrd84ZVmT3 zL9^PMygXaaGy*;3gY2wwzj;!4!DH90TetrbRZIaigl>d~!@=HRquZ=#Uq?8vac|{a z(b7}(lfzbuWc577d-{Dg1;1_6ZX1}rmtD`b>-l!Q(5^Ffoz;~(9F)%0yZps#V|p?G zZT)~Rl{wFDSzLO)#cXlueLbokVEzJ+N;S{lPf_(BDPLd?Vzjd~42u0QX!pZNq#s6V z{V+?`+T$aYkLOt1=UuIH0bOHtV8{g_;c%S`=`Eb3p7j8io<;YbAiHk1Y&;vN zqxS})ACF!C_v6+|Tg7h^UDvr0J6ToN`3|Quo~g%T{$PfA#`t+p`+aziwO`AA?{vMV zJs8d4;NcI^=2D5^>izNwH9HVbN+b*%{-E51_?p!HrF?4rIl~aokd5^h3*TJAj zT@tvyl}3e@U<7DXXzG?Atx=(~D?>-C^@ZbPq#$`;OZIt93X<2gWS_fa5h64)`tcNV zDf9Xf_)_|j`nbR)ryl|CvnRVE`Xi;Mi}x*(U645srd_pqmf6*&lfYP8G^Q=AohDm< zhB{idv8vO3v!>4L+m0Tu*5$fT1CJ9uvj8p|QPRIi?Wn1Cw7EeY zZ%pjxa0jnbt^*hbjsXhNdY>Ap!k)Wk!Lqdc-a z2$JTZmgS)i5A`$;bsPJbMkcvki`}QfD)oCxd}@zbat;lNYI|qYm~;S>ZJI*2ir>th zBCUwL*6Gws_tdlPdM&eqaYOMAMo&GzZPDTAx4NDCbtT$8x93vr!MF#nkf*1?Q+Dod z(EiHTK3WZK-&a)st=%^wcrecc z!IJYf%hx_;Fwh*l;y~Z-3Xxhgp94-Z5v0kqH!MY8|MfMC(A) zC<#67+3%;fN7^i0G`bkQeiZ2W{OH|9FE`ivFKT^@ukk!xJyPLZ>uE)_zCMuF^ZRLK z=SR^G*TouTCG(12-syR)O7}xHV^ugm8rOzHP2Vu=(yizQI-Oz*iAvVC-@w^pzwNcO=YuL*(%`aag-8<*03>2h-&P9EcWqMX0e zO2hR?3|Fobcq%=4nuB!hZ={U032+e4{qp$9BJxP!DR~?*nD%d^JPsesbEbYBwlr>R zmxcRJek1d|esDgrJU@I~qr@vZ|2N;ZLmDfvYjSN{3*QIT+bqw&A^J!Y$AfsLFI|wv zz7qSw7hl)P&D#DUNqqid*;OI1T5eYN-wog;39wRbR`$OQ;7kl0D-Z3z5zzf(&}g}_ z{~drH5Q9d__5B|N^uQRTdFlNh2Q({?`CpS^Uy@z#sgt_pprwuxv@?B~_o(TIkI7tl zLqD$rfsN_SsPhWXBowMkB(_KLBr`OnQfw|Yp;;^4PcWT_6VmJqcRHP5@<@5KZE@1FzRJLjEdP0qh|KQtZJHl zANwdKgH64ur>wFOm0J?=9`1g@RvHn(;FRkq;9yKPCbjpSb0=m)rHww zag9&g`Tev#>`CU5_lahdBg@Lwp4LTzlezBu)WK^}25V7dK9%+hF8eiZ`??#XidJcNSKU8{&>31# zX{>tfL~ZZMdi;7`P7ev%n0(!2HK!EAoQHcDYjp-0m8%yj3(D2`!f;t#D8SQn*D9~p z1eB`l1K16w`29St!+Fbd7kXTSfx5Yfn||_EB=i9yejdcJzjF1PL(qiKv(()-l_y|- zPO$ryMDsa+$LZivdBUiIqB zJ?V2unzM}<2Y;4sLe683tDT_xN@dBGQv}_YD;jif(p5B`>oo2i(Kt)@&(_Uq9iott zLqbibD=dqgwJZ9>=OjF_1gxjC8G2jJCPm7#Zr@wT;#kGAqs8y#Xu_-6{=Ysv5t|aR zvkWUZptV(8z;i`0Q&UvH z66;GuS_IDw)AO~H&o97595cc^!!VOEoCR7V!mEfMC)e*Xz2&SzH;>OBBM2UyeOn><3&xQlNxuzPdHW;Gi8&iN9eOjQwDC-$70{2m$649 zn=s=m%R~B@T9MlyMPo5Og1|d{<23Q;LIH2Fw;tQex0APz59H0g`C{JuSpjdc=X|KV zeIn$oAdT2lJ=8QlS(pZX>2TOyKG9($89{XLOz_ zR$8y5X(aG8jn5U*h}wUKwzOgbPt*8^LK;!~?x&H!(=`6EkVe#g`)MTbG>v~Mq>;4G zl&qDP1fHhx`H)7n^tWn@FQ@HBXXNTMhU?Vf$f;^p!uA+>LycC$y&;)Ko#DECTR+F` z0eXLIsIy}*KS;GXo0Cd))zWt5=l8`=Xcuakt+_g%6IjG{>q#)A>Vs%6YG{}DNTq(U z_nnQ>!-e!3-nEeqr=VjUhRrW|x2DcE`@l=kDrtP@|0J$YyhU{VcqRJu%|$YNmC)-* zNXtJe69POtQ#mE@w&;?_|7p0|jCXL`?Tdcm`}6%;(vdtSQ> zp6R_spXoiX(Z%mA`b_V6EiQh~pK)&fT{VpII+fq*RjuvakEk|n?zE5Uv?n_4cBd_u z>d#ab?Pjyt+TNOK9o1<~bXx6BtJQ4wrk>~?#)W!2s<+!(+alk8^47KAlL^|K+}fPb zfh8l&ktsW{WMgyW*41{3#dx#fXO=W|um+I!n(4{rh^?q@*PHciI;g}?*J$c^4Iu3` zt?A~Prp;OFWD`y=+1SweFYO~+TN}NZMrTHMy4V5zTUuMSuzHIYRv)QA3#&IK3#+Gn z{d1``EgIW~Thl#`L#j&LW?6}QKT+rt!y+rtxXH$~iTa&9-p+$sjQVbvOIj(OE; zZRxcpTAO>VcI%j)D%eQL4t$$_ zC+YVM{a8=RxE}DwsF47de$BwwmK}Z{g=zd*-7`+|gFg5h_5MTjtE;`H@qa2@PIcdy zf@5z^3I4}wnNc4V?z3do+3N+4G_Lf2&DIDE98=}Y$}N{bt$0Ay&e5v*dCS5I$5ijW z+%Z-ADq3bh^$4#WsR7jl$G=U8Y#B>ET0h2wm3`8;Ic7Cw`zz1AwRlaDgEdBz>fh)7 zycpNPeYkHc#&vKXuIBu0d^}mRX=|Vy+=u&)7#F{lKdnYKV3yZ+7U3B%i}$V=FSGv2 z!IpNi=I!0WP0sO5rOyM^leDb|+|PeyYmq)h;U^&wm?jVSA-BGF^|) z*#lviAvfE!_hw-*23)f_fwvoeGGnBrDUM!QXNyyIs}=sKy@4&{@4Rz~ci4#bhQ4>+ zwZuEKdgo8#cT(lF;_86s3%{ASjQ4yk+6R>H+&HE_r#@i( z>u2V>rM{PTKCYA0NWskY-{p;D=hrhqY+uN_@>_U_OV81ym4fC6S zx|H9X$SW)yd8YlcKFk}T&6wf(sdcQ44Hx57`QjI;d?`e%)quPklGt+s}`^4fiw-G4%nluDbeX zl;B9Ga$@=B9UQed>_;uKluUK+v{*Uus~EaQJlP-0t$p`PMl5yZ0s3LjK3_lV z(5Mc*Lh%dqi|k*oLoUA$nfz$BccA>FQE#vOtlFjIXLT$uzb`2}lHdO>mftU>d5Yv` z#1r{(d#LjJu*r`jTkk;m$>_Pg@{=8=4bI*u*_+J0YspOg`@G9fo=Z{vv!gx>>You$ z(d+TQE@x2s~zhg)jPNy+mWbSg8EGi zE`(nwY=&R5tA@?DS)B>bM*XKm>=ibJtJzORR^lR!d24d6=R;LMwB_H`FWr{^Q1_SU z_u~{CU5G3{dS}Y=4sO$jF3ZSzMwSH)`w(UMu{%?icX0bYbXi7T1+pw?W;uFtjWf?Z#zD>m;Ee%^B;KksCh%zK9=Kt{AO;x=wRN*vkZ|zC z*E=uTy<9ois=|(DUrvx9oEhx=u6UvR`sDg{m+NQsB;4`Y>7JzAnT(k)`G%fEIVG1? z8t?VDKB;FmV}gx!QKd0ct$APFq3xB4(di*(W1u}+cR@9}ztUZJ18!}$*S#$ZstUA9IdIvW_$Dn5Jk&9m``iIz zFwn@1!5p>J7);t<^L-(|k@=WfDj!Sgm>XTkRPDQ!Ke74-Xl#huHq@K?rq`11>q%qV zXd|_4IoQ6gJO{3n5ekPx48JF|>5bm@`ShJXZdTIIt$kKG%f9qeuX{S!1jNyXrtbo+ z_e`bfPe$rB8da1+ZChrp(bqTb5WSy4Z=|Em_MULKST{wlzAZBs+VF9)J$m=Qcy}y% zcciZNR&ABF$o5}d0^im1p>3l>83`N~rPOIvwSv+P+y0Iar>F8V$YNLa3aNBkZ1VRtr4_9y)e$PTj#M)(ieKn))|9Ra*OXfJCA3y$NMhrBTA0d-&Bpi6 z7Y|w>h1`-7li&hA;FivOpXgLS_)gRXtw8^W6K)K@CdGVj&CcQZmFF#@>jm7ZsEAXU zi;Gy_Ul_nGG+EzrtMi&JW1mS*k?dntrR-ywyYzmk?Bk`Q(Rk@-#Ya!WwVYDl>Rr74 ztW!a#R4B1rgfy!5y{cvOGfJVOYVCDcb99W0_Zz9O(x(zm3N7#aSCY%sU8o~H++q;qGD3m?azO!6%oZu`el z4YrK2RN7ue{PvFv11}gaRX)9R3!cR#U+_%td5IQ0i%XkvhhK@8amh~Kl=1}(K5lb6 zK7BLR)J&XA{&3_g`t;3cZfV1azDP6E8qv~*Aq866Fl-~QCgku-DW%p}m;2xb7V`0R zVLBO>d;~huucOoXroJM^!`h(w6+|PjBR&HATB!~#d(jAN_^q43M_?_H5iciwGlyG7 zz>;wr>;lGZuGf!oo2a~QRGjfy9kCh1Z`cNJe>NF>W-Dn z4Mfd8o*RfX>~H4=4qcW}&-2^4fkT&N)Fa=qa|5hxUn@n!U%AHzAocCXUYYa$y7G62 zy&q5c?sg8y%FfSVzw(IeA=V=D7q4Yo!TA}`$c%w%QR5-5Lwk8-r!haV(d;zMPXP7# zi6_diSub#Ee!?Fz92h-xf45q?Tr`dna%+_~e?L`L>r87EV_n^AJ19 z?%}OvKu36ox0VI@4&kk3f`Oriwp)x2>7uVL>M9eVN}%sw64aV?0*#O!Jmbl?-F91) zq2OSP0i-BPmT%6lI4+X$X{wx&jPK@glkwd>?lL}=o2(?Sl_V#SB({8&Z(EkO7RWL} z+jTIK<&LXcH5Z-MqDXXFmonDU3VUT(-qNbBF@)&s&e$-~*{yMCqO)7$%Z0NB;jA&? zsCW>Lf~v&9%nbESGcyNUHOV4kNwP?_$0gPqHpD)E!Q^`T*zoOpcTM>2f6scuohqN) z_}!L)V{Vf+29p}UD;N)pHONZF!(0!g#$vPw@hkCo*spJVYm3TM>xX_V>kUo*gU7$Z z(y;NbjZ2MxCGtwkQELQaIi|<1z8a2Qxj&7b#s_sxY(D4@Bnma^b$Y^h(lIsyMR`9@ z4|JaVoj0DONt^U|61V;1Nd{ZScoOxhXgtaLPS4B9cV=ERSdz{QxBYoB*dgYnU>r+j z<|SY7Ok-UBY(#V7I(eaViewNRWZRLp@eE6;sTxhP&Ew=GG|Ca97iYyQ~hZb*YqEYxx?LoH?o| zyRlkBt#+@eX}BMICDoRerY5R7&7o7uH(%XRKdi@9&BV7?*V^N?_E@bwTGMBsTeV(O zBWt~;J}KR6j;Y`2HOJL6T+m#t&isPzvt=UaQ^(e6w^~=zcl$Suqt3OW6#fWP(fDhJ zBV}!4FFj87K-!3YFVK&1vZx;3r1*>Uo0iNYIAw5!?ss`6!dzfo)o}!Tm zqN1r66wR=Tre0h$!>vwpSQAZ2(X^~+nyt0DqM2x|RnbhSXqpOCG_9m)I#JPd(nX^! zU|Q-h(Q9gsI8`)Sa)2n?4V8=z&RphUX3zZlP;!KTVi7Hl zou4VAYUvo=-!0ot*5uns?xWpFJIQ^tyU|)>?L?MxI4m4}wR?4LSa`g(T7@yL!q8W{ z$5j~q)ox{=)>;!4#+okonRYU6?d0dmkCb^k-A*o6Y3O?{<2`+9rZ*&s>jUn+A>?f? zN_&i!fL+xZyP6I-SjO(RG=>G1Dw1ZS0 z)DBGahu#hly{o7dw*$*~svV?6pKb>kwr@a?sdlh;8SOxYt;W#1w7JIHf=cSrt|qOA ztrb`SwY`9%R)9m&q!qj_E}*0pz@}P3GNwPM9k8~#mnx&%Hoe70?cZ+KciZ*7cKv`| z|JJS_vg^m}`YF49&aR)g>zC~M6}$ecUB9X8vgQDO-+jwk>5s(MnY6|2N0jG);;Z4T z?NKd1O%HZGQy5a9S|_HT)<+PttJX&lw`)Zb<;DVY?RMN%uEs6+Y;RCsV2i&hv;N6@ zTLBi#M$g}<=RQR*r{W_K7ji0mtyjbda}Z0;ZM@R+<+j+_mapvIEf9QeV}mkymM{j+ zZ8&;3x1k2ToVkt6I~VGmWz214-Z@|I^v`XO7wk$$G`kYlP?-1BlVongK4$tqZf=8I zWya=T>3RF@+(!S{eDT~yPJW+q`TcfoqhEf-a~nDNeaz+e+qsQa@@>1!92;{P>HQ$i5ouU@TT3C?M8a*VuYITrNFDHR_dU#x)T<|I4@pjzQO|=cO=~2w0}dwQgHxXuG1d zqmvtMUB}+6#^i?C(Ym%E{IeZ`k^V5178Lsm7r8fk-uB~nM|rjNoN zvZJuWGlxqzkLm2;zOxd}S6;;HIr{C^?>YJf`XM*qH|ST^??(O7aL!9SsNYNUYv||Y zT5#qlQ=T)dw#82I|B5T9d zWn}YfJC2zCx?hT-&sk~WB8zK>0CVarYZuO68oy#M2!BfW=k?+HcMYGTD(v+k`ew7x z>GFCRbk*?z_~)(=|AZp^T1hH1n_t_kb-9r5oiO7EHl_>Q)OKNzEk#n`}TkxlYZYN2%uAU=H6#a z%8nIZM*54skD+}i@1L~X_wOqHAD5Hg)b#?3#18c?VK3e7cMm+=S^EjJKq@_F%5DFgslj~KW8gV6=r-)n{`~~Nqr5!+&dkd_vw7jRKQ9J5 z#Jm*D@y0E^;F(&gYk`7iaqBL47Ps&bwMFJ`u9obAgOd}?gK08p3Mb&?_08(7t8?>U zbxlg@!wm8@a`RyI)@rSAI@rC3q~izEjM%|6!>#e$JlL2ftY%tc8Xy~1pn0$no0POV zvpSjwTg?nsO&d35yzkJ&aI?}H>&*s3H=d*}R^va@(vh53IXQ9bx}kNpN=R$DDnqj2 zKj(^x*>AlQ9BfKG>{83PPtr2l4IFAqG2D=${TSTZv`XnrDJkmQ{q#d$Jwrd{7o)n! znHP`L?6}rE92*;rD|%xU|y>GzDy*cQ`l2K)cnB59w7VmN5&-l(5g%=cGTZ zBQJ-CQoV`Q31>t#Gny}#YbAHeFJMecfg zq}m*DQcZ0$X9Co|+1(b$@psR(;Yp98S9Y9Oy-*X^Mq46jN<3=J6)g~mU(n=r`i&Dm z0d38)`q#g0;G;cE8#hrUt30@E4yXNZ+A?+N@AXT!@qf_$2Gye?F+@23K95Rd^Y2&GeJb+7Ur?Uo^%+fx!;X zl-Fkh`G+Zc&t7+$jOp;F^C_X(hX?T-o&mG;NIHjSz$_ko;?IEimgwyR zw0Fx#yXrzohj*CTdXfM z+S;0rRCez6By>yWcizQQ(k%(@Jla##EeY>zd&;_nft{6g!_(!?aP2dat@EDH51jmI zPCjtz$2;}FiBCE4z-hOfcF<4Sd~OXH+u!Pv7E_-pjcj9aWvll*h~b@ESA8aYhP}#P zu)W;b8gw^G6y<$%!V6sNzB?)4Ha#u}2LRgR?%g8#1!H}T)rpyCt+5sXm*(j=M^j#f zor+@W;#%)FmGtzOipSKKPQ-82pRjISXa6PcgktOD#X_0f2N|Ie!88J1ob@)BaMC-Y4pQLryoXw{V-3Ny2ZI%Pq%hK z8fpiis~v!$DSi^!dyBGEo`d#YjS~z@LBQkQKwB4Q<2K?=W>)S)_o!6cxKi}J?(&Z6 zH^EM=GbcIS66`$N6Vff|?Yyferd!hN9!*tJdx0~-2xu>Gs9S=*_VS2Knt>;IKTk67 z6wmY&15a?LCm5vCQxhVgz>`xGBAuW=HFR`x4zsnDU;2hl;Pf5*#qg!t(Eruw{{oj> z8v?k`p4<}A5A1wI=&Nt=YIaZY=pDpa7Ndi>m&L4uINPIi5cl@z#Oyiq=Xi9jqUS1V zZ9HA~AlhGlAm0xop?(-C_QOcJ9|jNoFlPoizEXL7meoXv}2PwsR}kgEDt z7q8Cn5Tsa8?npau4tmZ(;0&lUA?3i+S7$=PfhVt)K)Qjau9iTuL4V@8b}%$r+?N1f zsvUetvR~kmYX<=L*^^|=%{-HokY(kDq6 zX?c!lXrx8zYg%qfB{YiDQ)YFaGHaCAb>FK#;Y-Qc@yvN$q2FWmi{`u{-kyIbyq)H} zJ5lj>a!rk2}xF z_t>o$$eL?b?09=Up|9lxdqwGMIig;t4rv}l9?dm6Ufo`$W^o`x;;bDXw63VV$Qz*Kn-ri8Ly zQJ4}6NsRlOY$P>I!rIn$Egaby`t2I5w`$?3PpJo0veT;inNjIC#Qm|et%@HY zm3lBnu3Ld0CKb5-Q7-*L`FbJpHip|$q43!rO1&s=(pYWRolB0WKn57oNC0D+{L6?S z@6yxcPsVg_;bJx016(|68nv~mx3C2`7mvE8Z3V?IC^L&asP-1_3Mnog4N29ya_?lp z*Tb;U9g;CK+Zu{2`C)s2CGUOtKS~b2YjPlKQnCcQ8Ab3+3PN6YvsuuyD+syX&FXT` zxgZE&_wxiYkk^ zgk=GX)E{ja+%vRir%oxe3MVMxNMlcZPr8e+K7s{hNge~w;yaCf@)mdwUvB`i7I+3< zVgPGxp1)@Z5G;|sM|k!E&z&ke*$O;!_l`0bWb>x}hb*;)m&)4us4W%dEZ6`1NJ}Wp zmg%#@fG^emOyJ9K$@M<~_t}&GjOhEfQC>!!iDo}Iqmm`PvM>BY%U=*O=V?~WW_vlf z+efbXgZN7i`dU)Z{i2YfukLE7+~E^I<2a_L#rRAPA!b_yR!^^m27&Ai5?XHnOrXra66glaZ056n0>Xra66mjU5VCQizIo%?_ozg}yuUi5RRhr(GjM{i#@|q0a zL5l6bxqe#Ab&z8Ean5w$JU_&F4xD8<4)7W{$MRxfHE@RI#lmUe{BCl717}y~cfw~- z$Sva}FBdDXS3L@%p$#{t5UwmJeXx2S2`Z{(GxJDK(QS&tjiM(g3M-0g+H)R06x9^V zJkly#);q%*Igy=n+U!`pr_cV$KuBtNBU8(VYP089J=Zq2k=n)+KdHJNl%6FX{}>*< zn#+hfR`mwH6zwVsUy5#16uuNaK~eZp^dv>$OVM45!q-g1m~(;wgOtW1K1b`#O6^56 zjoR!`?Ijnp2R-EH8?oIKuUQF8mmCEza-FwU{PO3icp8DV=}P#$!_?Z9@O>+#mlVHm z&rAzc!t;Oo#vY!p=26t=0bi=mJA*!tORmoYxX+%vAfg}GImeba+2S2iH@C=y6 zBgq_|0ke3Ph5mjl&et`{mFsn0UC|%SjJO^imug$6_AbW)m&1j`x zIXg}tT&W}iMiHQ^TLMNA;7+#$j3U61ZV56bqUH0<49&nv$}odg;1s8vV&DWdFaV`s z5qk2q?a#)-Zi?zrpKS(wsd{=Q^^{Alo&wxwPkuk5?>5m}t$$=KqgJLww%MBn4d;^xk#-XfG2@ti%AU%HJZJvX9&IZ68AV&Ga4Neuh&lPJp9P}hD~=5zwfWBp zV!HG3O8;G?U!EgXZ+oQbZI4vLwnt)$G7m&z7YCC~MM>=9^0k&i&^@U1q{$~{>yvA4 zU01%AWF$(!@?DRetpP4*za*V&ZwAb^HyF#|88C|n+c`V~X7R{V4$pvDJTjcaGhh}E zY2@$>2p(&6`Ezkul{EdwxDbD`fsvzNXU3;1~&rHX?D#LT&EVIbnSq_}zC&wHI&hVAaaNzu2=KKcE?)lDc z;N0FL#cj~f>`^IZgM{xzc+Kd~KUZdp`g!0>>Cdy!pImbK6W~63^0tV+>(BR5=lXry z_XueE^BqD?^yde_Ez+Ow6k5Oj)Orhi%J=FW>Cfo`{b>hUpg&)sQurHa%ij10mAb3V ze^iXAw@_EQ&H7LF*i4VldsJhC^I!0&4uqKhB5yG&7`}!o{%3>9X-}!$FBxnqhA}Mo zWrN8c4)GWryjd`}Rm!EuiBJBdXJOOzENr@-g||@8!ds|k;Vm2;gf~SQ9fTzzY)}+V z6rEBO1{B5eC0(qftZpLNoNh8;77wO!cm~Yk!Ez4IfLT29lfyG$7LUy4@C=y6LlQYW z17`6MQx4C7Sv+Kz!!uwO4*}=!44B39QtunvFd(pZsSf--^>q$WF?5P37&;}Z44sk{ zhE8D>T@EYK<)kEC4k77s%56bs*_01(=~*?(0xW{A7#2b)Y+lR z)@X4!8k&rbPJuV9Z_D#Sw65V#l?T`9upt#pu$$E}|q8BIq04M+ZA!>mH^uovFMfn+ZFNXmLPAtYFsVFci?O@ z80%~Y&NaJhymSI*`mxS*;53GQdjm0P9m+k6w;HuWqcY8Af9 zEj^)E>z~j|e;@e1N{{ss*lo_Q@82o-4z@azEiFwaZjL{Mz1Uu=)cOr4^96H8c9;FO@mNpMT4_9L)WTn*BVN@}{}3 zDA<3V$juYe!>`5wVgh_E1`reA>k8(%==Fb%9}?5Ue~SUc1o-zDKumydD46G>_&4K+ z#02KP1jY@gEWA zqWFIj=c4$JiE~l>C&alZ{!`*yqPFrRE$scY=>fIO;ozLe`rA=%?l5r&lUmIZK@TrC z4>u_WlUoz$VddswCY)gM%mli=++1&23?}cHK-ZO<>nyXu zH`kf~g2}UEC`KZJ2qy2HfgzA!@|+9|!36qTTSSp}5l}FBp9~B^1(UrD41ooc=Vf3B zZvFnA1l67>Hz%z2b=t$7=0x{C0`AxqXc6u4&EuQH@oQ}zze6R}nPNxmJy%H0Vd3cN zV0-Vxk58^~s_k;KJx>+xw1+y)c0~2C+4lD4_U2GR_1Lo2d98Fl)~RZdKI`=z98wKg zZIzp?d76RNFn5|QCwgiy*`950Yi?^c5~|0Pt>Ng{q+^_FLsT108C<-crP?evoAb1v zjuxbAy|oEIR6Dcn>E?8^o=}y=0iKqpAMI4NnweG94i2eC5?E7iu9>G5YF}`txh5v7 zvs$+{x9T{ws4Uw@m95=2Yt5satj3htl;Gejv#ZO^)$=rEJ6~;eOtm}P-qPHngYaUi zGB?1};ZRdf)z{L?wgjA|I$my$&!YqEWWDj2>h!EOA9S0Qgz9A3w1$>dPdZgwZQYcm z%IhK3NCac$=GZ)%MB6i(V@~y?U~>Cx`?%(DsXDN+Y?^1NxzT8{O+)3+i%#$}Vfl}i zo1^n6BCY>yj>hy(pKWh$Zcdf{k!4d{jpmU?Ph~%?HoaGGZZLYbhTTCSy+{ZBq+BX}Mmk7-9tvKgWNYP-p{y0%swj$A(K8iA zXDWJ6MNyfGo~0-nQ_*`Vio#U%Y(-HMir!mMw1cAOD2h^0^jt;J1&ZEBQB;7UJw<8x zik_z^4PK|f4RyS=?mdTAzMWRyZno7P!?r!N_uhJNaWig&w0J{4@$)n~Z9$Y-oNBQ@hDUqGy`AOKqw)38rCucOCwx%gMQ}~P&H$5B1 zO=X91)Ba)H`VosSV;suIr)uFiRXq%S7>ZST{(LwLN5XJ4497gwj#7(6<5usHjD6e+ z736N%?$-_o+7;6!zUAbLatsl0o;%9QsIuqGjAQ+kLSCkV# z*ER2&oTg&%{{u^%vgG@bGL5iqrL9AW5+^8YM{GzJ9}Oa z-MQPTu`z0+yLUS^Hb$Lv2XE(;S50^Ec4};l8tP77dL)mw^4oH>#`-_J98+T~DLt6X zg?3l3(J&C@9ru@k!ED46_;IR<{H6Ds^^bBs@m!5-?Og*Y&4<)V?-Tx)rDt2Uj`oAE zZ`CR@Eo~aD>bh}uoEuFLjdQD+?(y18XEfNp%O|Zc=-%GsK z|1S%x^S@MRbt$m3QbdM5WBwAm8T~ybQvFrmS7C3n5Tq9p$k;S0344B1(ryQOE zvv@F_!!uwO54Li62F&7lrjb*kYdj;so-P^u8*R$+Aqxo#3)`4ZD;)*=-^S2Tor7G;{-}u6`P_ffH9h4b{MDtDlBw z&`(GcBC^c@YYkhNAz?YiCI!`)$flI%3KLBu_Jvlm|-=QMwPwQ!(DdtrFpG8oe zf3^bSA=UTHfs(5?2F%tQXyot=n8ou%`s$Yffo&6C$8s**9Iwg{=LvIAQzeXW(sjd| zJ%qqi6?pHide6%V6qO|bB@G$f5>V2R(=9=&qx==jb!Jr&o&gVaPWJLUU``eq@Egy`s)Jc- zPWE1^YyW{BwZ30Vyv;_@D#Y&FeeU%xw{PzCWYN`k!Ay5MUzO6N?$c*2u3mMO3>&S* z+43DXY)ES}ZFezT43|7E?M3OOY$mgqu&|iZmFWlJ{*5;sZ6x!wWU^%V(x<*zeH5Kr z$;+xQ1#`UY5enyS4Qa7COjjZoKjkzfI<6CjON2?w?n_pEUI1^U5bnYiH(_ zsb?BOx4*L4k%66EseUl5OV`DVJI#sO}fB)BaCL;6cR!)QG)5B7;`Sg>lj0Vi7Cvr^7 zx08}@s=w`i%cLHi$M#>6`JHyQ-1$1fM;qv#DUI_bh1~X^$7Zl)oX1A}(e!feY&qZs z^Z!~K;8H1grnLe7jB~&Oxstz<40NvAm4|w++PIyorqwBZ=cH@hQh zr>TvGr>U{5<=e_%s4V@|E=wo;=&%lGb~(#J#~Sj5G1eD8Of**o()DKR zY25l+sEw7ch1#f-8_~C_uA1Dfodi10dg!W+M9!UUc;v#_`c=01U=GUKb#VEtj>1zV z(c;)EG&qS>rCm~oYF9nN>fWJ!j~5ylyGjEAgY2r{gwYaf&&DL5&gl5?aBW+oD@#N^ z!f-7-V>L(y55^ngLv{60?{I@lqbA9jNd3b}vWw`(kUWDl11f>T2}iSd;xoy)mS7GX!X9sAP3j zD^9(I11QxCPTa!c7B7OcsOYt%|?C9jw1zP!@?c4#Y&s182T za-NLqX*}8}l>$GR8`xlBL& zK5u`crRhFiDxIkpsykTMS*K5gRhOoTjec|=%^m$T!{NR0I!$VPczk4Ox>KUTI9$Xl zHX?q@dg@;^UQ4}>$~LUm@%XF!|6AAIUlp^lRYSRz?n5M2E~mFwq&*PBkE1 ziyNv2xZ{SZVeYu0GS=PKP+P97AHY}CB$w;YP;6ry6TSoWMTBbDp!I2qDULwByje*# z<;^;%pw?q(T^9`?>gG}#TX&d$({70TRPCDvhm)U-rjhP<-JxULq&Q?~j7p0riKxQI znt-th>{@HvgYDX|rJG%Qz9c$a8(`N)bsigTNc8zD%X&-TX}k72)S( zInS%%(T<`zc1biR*D0!#lZdXL-7kY|cz#5;lus&;bEFF_Gj?jgEFPTZ@C=y6gZmtw z0ke2yEr(~oEFRg-;TbTChb(e<2F&6is2rXFvv^1`hiAYn9wN@+88C|%$vz`z10s9Q zb~q9}GKWZ++ouRLw~s_Lq)3J}a!vXRr>TcMz@=wV8)h!gk>r9tZ(2UUrDxG-beilf z=(C*V16+C*jh-Q*1%0}OqR}&oZQ*pDap_q!dIsz95ot%2eBa=dh2a^R>>C6S z&DFnAdE7_6w>)Y@ldSH3v7nw?LCEy(ryGQ{1tHjZjmtr|h=a2okcVywINO0t=$3%9 z9mub42{_vUsp*!0vmKC>ZV5QsfsE*upes!{y!hD;#&FQe?nuh_-I0_W1I`v8DMi`eOj3$+Di=v9 z%Dy|2Qj~pnB&8_(?no+kCN4?k+PML}aaJ`%ZUs zG;EtVI+{_tb*+~498ure(kEiOPf<0jb>&43J0I^CtpoC5%X1VD>!lDsIu-Fsry@P+ zRD>g)3a<<2q2##qENV*5E5gDVJmS)`Xr%uT*+PeBTzVFbo*|~EP?oKvgJIImi* zs)x18=h}vqE&l9Wix)+@uTQrEUrM*mqFcG-bSuDp_T+aX`a$V>OVxGjT4mXFYsX^f z)^!#$-MZeR=+?tLif%pJqv+NnJc@4J;8AqzksjsfpN$^n=$}cC%JZI|QdDC(Wjph7 zT5@fbZe4qsm~EBT&chQS91+3~AUiEFPto!!uwO&#F|v-x1fdwj6%f;S?o0oT5U9QxwwSNLo4^ zK}v^1f8i9AF_)f2Lmdvu!beg=u)mlNM+C(>ygY{(3m1@xCPlH>DiMmac$LUX`-Kln zC%E24K2pvEyZ>BJmy{p~Z1-yng3JUV2+!$2e1Z^!y$O;Ogn-@zR&`52Z$hqgOF(ae z0CY=0Z-T6JOF(aeSanN4Z$jbdmVn-b0?{o&x;Jqh%aYb4Ux8=qPvUF^o-1F`N_GOz zl&@$dH-YELyC5BrkHg?XSFcM&pONY~&(6&2^1kC+xc3t{dz+W!Gb8Cx0cRuH9_2>k0aZi?4fl zZb(-v5H-uPS=*8*d^dwBbT@;Mj_g^?VC14GW-t;_6f+ocD2f?Ou_}rgj35-n3`Poy za{L4$P?Uq$$iJc-yhi5DPVQS5^tPz)>gyYUFV#2FsVs2G^^E}c*^{?J|F%st8d5pb zF@O0jhrGWX8tAroEk$>!F@ImXd8+!+@WiRlC`YLiQ*0UM)Rc6f27-4AP2*x3F-q1Y zq{sR-f=Ju(^IPtQ%@d79a{d)78&0IdX6@*wl?-b~D<#gW%Z$ehl_7Qwi!o#`dOk;g zn(ni+1<|BLz55q#M!}fTe3EG1L-^5pR2^&D>ApKbipN1~w(xapJ@q}9QEgG;p1DQY zSG*PSdM!wf%g8S;Es*fz>btdpolcpA*~{3hcvYBYDq z+6kSnlb@G(kZSSbYbV~L0_s~kQ7+X&UW3YIWezVcm=lO=+)CyIyxykAK`Y(w#&ZI` zu7;%JHLRWP--^G1vvX2Ak?d8h{k=y=jyUl=u4Hg&E-I`m1f7}u?Ve|X3c2rj`)I`kS|U~ zS!p)WC(jeDp7MC7t=pNEsghc^!)^b%9fK`n-41%CXx$F*g87)JI$56<&9jE*eW+G? z&E|}oj{4jCQdeD1o%%z`q}jYOa48|iYdH9R2pP70Ut4E1KKLpQlv4cG9DvWCZy zPPrLPJJd_5T74YN$PR@|sfLW|&5LVb?bnb&i`*ZipE`XzqmVT_QF**t@pJY2cm2|E z`mefV%l9TDoqgM;S(_Gnuw5^=>lJpr(yn{#dbM4jXxFFc>UPPD=<&x`^HDNEeLUo7 zi!mN@jKyp`D0%GOQu*hBf5fu!g)0U<_-> zD~e$ac||d-A+IQgHRKh=u!elmIkzN{^Op^n^_O8FhiAYn9_;1t44B1(_Z*%9vv_1I zhiAYn9=Xop88C~7NOE`v%;H&bsLdvJnN}9XW%M4E&~t1q2~lZ007+;(fQ)K90D6TE zx|hRZem(3i=DU;SV&C2CLGd_3zhBQcv!<|V!|%yGUHNc-mwd=ACcytDKe{Er|0Z9$ zCBXltoODZo{|#@tCBXkC8@eUH|3(kI!(HePs^GQQ-+0-7&5q-5@JUlPWa^d&*M^L@#x?Ll~mvKxL^%H3+# z;?=r;>0Yg|Yj(xys*?{zUj1w3A2HD1`;ls1#@{RO?cy4+65r12QP#KnzFF(|kA=S7 zFU8BUeY>cxGsczn?KC4-?S2lL#}7(huz?L zs@u2M9&UB>77>;qRqw7=Wt3BA_cg6j>W&FuuHI-g8Zs0)bX5&?u!{d8kqFyDG7BW< zgf)=8#$_WGwyM2)?BDJGmeTXS>s0uGhrzyASo-FB{ZKCt^u40;>G!=7c-r^+k41d1 zUxhp_)Au?|zSn`^Ye`e~>Hii7T2ntUTeDU7_$sgKZ&d_<|iTQVn4}c-hG?uV(vS`q0407A(%?}PVZ74 z-B+QC$)zC(XFSQRAOzuzCm9!nAe`|;27(aaalxE!3FL8E>##bYZx2xH7Vo}Q3~rOh zMJ|O*fX9VEbW4E8g;;ebxV-;xF{zLd#3UbcotqJpch!+Ie4}KU_I~*JjnoX z9ytGxasC5m|I!ruK|lBM(O^4p=H;Wob>O_qM}z6WS(lFn&q0oJpR3LIXh+N7l2Rg1 z86OS!Qa+kGvGM|!oR0=@pFKIo>HkLhXj_-(qg|u+7|!>dsodn|`?~5|WS2f(XtGOp zEz3vSPaE%_@7p7w`DnY9%pLBd!Pt^M8c27(kLLS-o`ekg{VsKi1LoPbN-#_LU2&-% zs^9g4!G70H@v>sS>w!`LX}{}a{H|AOek1L7y9!<2cfpeT#7xSZ z&BK`P1^Oj+PrY=l?tjPX-brHLe6VvBkq>6~=7Zgvj4|D|xDWO?kqGO0pARPEDe=K{ zlXb*iCaS7~J_lyyKiCfoYlHb=Tg28tKP)P*em^XMr~3cy4;S&nPF6DXZMqc6t&*X>s zGyJgArMC}QTW~*Yz3y{<*v4k{*41pd-lpSa-4$zU7Z#9|H|CC-d1IlYmYO{pscR;< z-OzUlZT6_%o2hqZbf*im!mX9e9u0@y*u6WW4g9WZ?WUCaFpyj^0ZoV4z0`>AO_8u7 zqam+iwC0Z4dqc-8Q6&Q%vji=ragzC^hpSAPUwWy2X&>x$y1z<4=8@8He6!;PJ4wGp zM`iaUoGd%WeY3k-4BzY&i%cJ;ar+SomqPuyNd7`^}6#wirkK&)5uBhAUmx~Af z%Wj7UmR=8Q;6QT#BHQWQUoq;h)_NGj(m7%=NA zz(@|yfLT1)%;6a@i$@-Ecm~Ykk-;3E0ke4IK8I((EFPlC;TbTChum^_2F&6mQtobt%>nR#_P_3iJU6{ccW0U(vY^6Jv~JHaZ2<{f3Hf z$*t9O5T=$Wp+!acI=9TU87Hyh)2j~4je$1n72@Nu`q8emUO;OsYqmz~8O!8tb)bzs z50VVRPy7tWT!!ar-hMVSw(VZ=hcg}ViG4Dq`)3-Tsktwy`z=os(EO^)#29{6Q2Hz3 zT3zkT?^ewzcjnLZ;GP5;6ubxZNj)}aX`G>WZQZ43(_xkMqZ2zpKNiSQa11<7?0;%c~9Bn#(GZo zlb^ovIP#XmGhnulfY}_L0ke2;mcuh(7SAP4|B~u+3<&Hossg^Qfh5$|@I-wLgw)rN zk3!||Wwjs*BAwYc1_gX6ovbmF z@&cEfP6oKoo;=p+M|yT)nYyf4&uS1EJ^KO?kq4}EB<@f>d*d>BGd=rw4**#*+_3T-rIw7JUG{b`w&R$o~1C-y7y8XtxI!b z+4rP=$Ln{Yeh=2~9r`^@KirL7Z_&k7swLy{q8x>@M{dy#g&jhRL$4Ei_7zEUh zQ4WjrV~BpCM?c1;XVKz*Eb?!{V69$nSuOvta99gNh(v4c62FJ!)mIUOeh;Y% zLV({xrgTey-$UMXOMu@)7IjNNH%U%)OF%bChILCoH%Z2IOF%b?0CY=`>L#r(OZ*-f z3!FXod*CZ@?&SBtR^ZI3`omS=yvgr@slZuN7Yk2;bEYm9mI7x?T`U|0&X>Aa7z%Q1 z<@?xYcppd|z$Ub>gk`a``lF%oE7#j5U&Dq-ynneL3$yAM?Ss&LMr-ksH5quOa{$Tdx8XluDv z?f#{o)f$x6iQa2Pk9{V8Az--AL}R!g(EI4Sz|I8wBjH$r(LRnpQx*Sz;-=-9oCnK5b9Tjn+5@fmJ@D7qy+s1Dw~*^1_7 zqku1EM`;Vmz=b&I;ztBeCDXeo(>^Uo(3ug<@~!pi&t zVQ2mZ4-P7jP37MPS^oRuH777$pEnAgcgEfLQ-1{y-B-vG@`*`!@s0&{!rlXp!afD2 z6lG!(#uQ~@64H4;8`8OYW58^^A2!v zES?LPGD?l#hUM0OPEon^49VZ;5Xma~85X6V;XwMC7p0%c-y-@M78Z7^jve6Av#9H5 zFV^@B#wl8tw*Pv#$Qg{kBYs>rQ$%WLRx|9_Luq7q6pR3k3|G1(KqJGsZVAxHlG6tO_t}#z5&cH#{mS#7V>@aN?hn{*VRLZf zOv!yRnUWjsj8_is*xDK%(e|`6&(`Xtn{XKx$FB@rKztZj~d~_TEiptUiamARQh_h2+oc)p!4l!RsON| zM@-wv2~8nv%S`q)eT5oltXE6-P+s^8_em=YFN(8J4yxU<+?wwFMZ=?e_b7T*rF*LK zkv;}G);K@mw4(5&xb|2^CxE1>z!aK!JXY^D5LIu-c^>Ft& z5~9pKpR3hZ3;AeaZ_E8PEv%9|lai}y{L4y?JxrBG_ej0g)ai(Nakw^d>#DIvZD{}9 zeX3Y}f4y{2X}_Cv+Lcdj)WLT}3284?i!-44^3FSi8z$z5t|UonO6k_M&=}gf?gmY7 zuF`3GN*fkxoyNi`g1k0Kh;W?z}4leYTXa` zActYn{|3gRm9G_AQ0cxugCd-=eFx{Sp!c}pa_26G)uf3_XIvIm2*K7}x~5d_obZj> zo~z<9n)eBR@EFbel7v!YH18)JAE6oPgkv;y8>1<8x_^~=#l}l~jOGJ+XGLQ)X*xbe z!;(d_X_)rrFFMDDa(uJyKd3a8*hlv@wF8}+qxGAevGC}I;o5aAt-EgN3ryY)Iy*+L zSyz^7)x?fY5n(Zdt&yO#)okVY`*}eP4RlnLEHm&l!8Q7=({Fl1x%*KymaSz!*QDIF zEp}yJ;d#w`OnSoVXvIcG{uR_wMs|(vueZYUy2Jh`%dVm=2DtI zwyZ&`4;vrR$rV6s+ZPdAcbMVkwoTW@XCt6z_+y0Ua&>~f=I!AYW9;J*7PA47M|za? z1y^{KF_lLtYWXYMemQ8#euR{pj*xQG5mKS)2&vF?gj8rcLMm@BLMmrx88B;Skx&lL zfLT1)$l)0&j7r5l?HGuo<$%7;MHS=TB{foXlA$3A0^i`cY;fbN+ zrGo6w`xqGqwC`TjPZd0;lZv0$O4^QC`VjTR`Ut(x&Sd(zQI3_`f06V+IQ%|btJ~WC z2A`aZ7*Thu-O;v*`jXf8#E3b7h)>WWo1)$x{mfDXJOKT zufERTD0rq>p5z(bCV%vKbJ8W==Ur$B( z-j(hKUAh|#boZ3&ZZ*hZ?N!X4^P-a?LLE)IQmh21U1;c*0JRG(-4dkLuGxw^Gc*Dx zA#KXLfm4t+<<%fZ0RA(+@83nbu1}W&UrLwi`-kNPE;(HaaGyQ-`-Fb1i-P&5i8<3x zvG1cYGhkRBqdFj)128s6CvQXe8{{cZdsS(J6QTd2O7F1@DF`#E6HkLB3R;{n=o}>WVQHOt>Felc8^_6xv}tXESy=KKp@hj0kDi>f0%IY4HVw9$ z#w}8|LV>*}_bNSZL0^@&EBn453@e*m{}j;DMx>=^$%Tu)MVz8lv2lifGuhZW5EsTs ztseTw|Ds1SoBS2}+rz{sf3aPP#VNxr!ispr-uVV}`|X{l477LNybOCMF7ZRPcYfSw z?-;*>?VXT&vv=OKl)aPC&)Pc)Jf&y5KMC!fik)HmP06lrUk4t-SCaCG%~))E*+j1! zU@v)!#rBdvi)`xeQfA$U%QY~I`u>V+PTELlQ(x{j^|zdvb63zzmawVQ^1!a&T8jAk z5915i0KOjVe0|^f>fI51J;ZzyxAlKuJfzl3Ve5ZSK(qB{Br5l@B3niM?F*&G)!)8I z0sUZ5YFq1Zo75h%)Fysjw&5O7WaseM$5wb<#!l8Ih}W3!iz69w=0NM1c80Y)n%bxV*oT1hvVvjsWu zS7fDv8|2<7@cAEt_v-LWp9g%YK2IOTE-!G&^?3mI*^`Gx^wVv((rxj@cjY%L_ihs~ z-zU}>W9jE{UDe^`ola1hoYExsU;99+I)`Z=C67N5p7BF{LZ#e2LKIW8BI*9+Or;@> z9QQAU>2lukuOVIek*WL!+k?(@IP=sQu5@%J-W|-teU+XjMdG~ErWo_*FY1%*tDtI{ zKUF!T`=kG&T>AT?|4@l9?tlMKmQTk2rrcQpXS4?Q6(MEoD}G>f7W0iY1@KeT-qh!` z4*XfD(}$S*D&1oIBVo^JN2B$tHPGFCw+^4#92R(>PhYL-elV$Q^b>1DXWRPmD*Xg0 zT{K?fG;O+!i>4dn)d>M6F7ng&od#-??l=17`8=ALB)KEa&pi zJ2)$Yxd#;EI=Bz_fyKBE?!%oe#&vKX?xn@J4(`LftQgn9eYg*baZ~=P0kiUYND-a^ zvv?0J!ZYBZ+V1Iouu{QBNcDqQCcjeUw0`jGGK-QiuNt`hZSJW9ZNT?0!v;Jms+B9T z0X+{{eg1Q6Vcw6>u8rTp?K2y2Y1fFj1zc6n2?j8L|!(^9U7Z9Ej z^sh=abxM$pb1t~;bE}F$2D{W`GR_$qh?Zo54Jbw6+!Q?1cv|$VoaouP2dkcKA1!aZ zVNNAE&z+g4l zwG?(l6V2U^#MEjxl4z@PH37>W>N*Euq_*+I&qunRzHx+f%5zY68w#TOLOEPHRp%|F z7IZ(V2m0vn_O05*hCUsJnELGJ~F+?gL+rmfsxh*b09Vw=6Qa)^6YjhvXEg) z!1`0NtXl%spOSOk5-?hX0CY>hXc2PIEdjG-$V0aT4BH|X-4b8{Q+~Q7NL#?pPuy05 zebnXdS5yU~@`=VlSC@heJbEXBho-Ljm1J#TW_$(|<$}o&mFXk1WD7U>5I+B0K|T@g7x# zXTU7pql@qin8kZc5uO3FcvlwT84$eK9y>nj`6!!o-$8%OI;`{<4gRu@;OYK>!jve_G%whHUc~KZGb6*j;^|2#8M20DO818wpDA03@v^3XW-EPLj3u_x25|dr zrKhWvF7BVm+RyqYl>f0xS9|xvvb#>j>m#IxYAgMh)iBpx*hAIg1CUbQkxwo?i+o-7N1NOhXM=y~eX_bdiaCt1lLST4|Tf@1Nw zX7hUUSP5gJ>bYziM6SJ3NISb%YQ=K5{ZfcsrVg9L5&MkE-R}{W+fImm#^mm+*vY?M zVz)Q~2;c9=NAAUxkoyWKvA+riJz2I)S*p|8{tmb=-RXN4gQqROmX$Pu`alGZIIe`@Vgpf)0pIo399oiA#`x6j*q_EU2fVNS z3-+@19oU5`Cilomc(=Yh2fyLnVdXiv^1JdJDUa3;Z!Bm= zc-3pmb0j-bJEHFQUFrDYYu=&dhgwywsFf4z%Z{QSu_UqMNenxlWU%8&Kz6**4oPZ+ zNGULZN|5{Zc(i}Me?Qk_l$P7m6rs#qf}NLmlDZ}3o%iyTbqfPKPj&`$3m-c-J0p8^ z4?}x)u633GklQ_Js~LGeJd7!2F&7-M*q7JEHjsIGKhU`;jRu# zr)wb7MJc=glsuk+3~!6&Rti=t@6~ODdn2TQV57Qis9fnjL)q8&5-Z)OrficV2fY`* z6pa-`zP3wj+qQD|nWD5!^@MD#d)RihB$7+5*wwBqAk$ObV?kA$h2?EBxA3s`K2Vqa z576bQp2q*-L97o4}M@L6z#EjdF&gjfI^V1m}HT=HcQ+4mHy06~r zj=|rb`S+*aT~3`kb*fI)xu;HT%hLHv*fkr76Y$=?LAYg^_2+d+GN|YT1&%AP;kUDg z&DE(5EQ^;TWo(M}LZnc|esG-a?3xDc>4h7#gOa``dkUCWhuWs}&cjG24Ps6?x23CS6}q$1G)%^%e0^Mch}kF=9!gex9`GFYDXULGMRoo%?nWzSy_p zdGz7%()H~iaGQh-C-hC7do_5Y+$?=9KwH<(y6^;O<85`}3DCydmf|I4Amcj?TGQG1PKpSt)g(tuR^@*G;K9L}8%gQGLZCQ-(hUT&y zE2dwCZMumc`6dnWo3!(rj!Amux%|qwN)9%^Bh8yto(h~RuV=Y&6*z}`O^R!jtpM$^ zz1D>%KpXEm7oGrZyz5guD?bXH<8h}OSAl`+WpgU#$vW#2SyOe%mi@!fNcPVk)-8KY z<3MD;zQ64G-Mkug=8@E?G1J4UuGtTus^Ji(P`>ch=q3`e7WEIQn`oLaIp28$?&>)=M#`2}K6%wbtYZmtzqTO6BFS_^EZtIm~x+0gB$ z!+wo@{B$QF#oRmsMGIC;H?7zH>t4c1AifblIf z-LU*MeyyzuO+5&cRMyR8deBbe4>}FDW%?DRe0$iqo~&Elp-Wr*ijR=;u>6XOj+AYG zI=ZBV&em=^2A}XMCS_sU%qHCU_Qv}pR~9a4WO+4c!z-D=O&a&7G-wO+FIxklxFP*q z7^w9OOF3}IQ(V}(`pBlkh7h2Q7rXETXyf6Sjc%JnfHvNk3r~Q=OZz4_tOMS*hvM^^ z?}IV`Fu(9vl-py`&Zq@2{*2SwJsj|iP&{z<9ht-<&1v$1N7&Po3rq`3GwIEgo^%8? z5-yNxN!e7iO&`bhJ5OS?dr66QFUi2}C54)oacC?CfnM!v{IV@j_dY(Q5BrtLY&cgX zgIA`u;Z&6xUYY2I4JuW z=$q~9jRLgm-8gciJ_d)T|5u@8I*D@;pzD7I=Xd2G`lEQ2lpo#D@u!-4_U< zed5b@>zkP748ob_8%X0yyuc3xtadSM7UL~=*FZ*X2iRI;&lMTCgWfI!s-0-h`q8K! zmP;>>F?^&VagPlhUW)b{_k%D-PPLDZ>w}&oZJw!NG5%YSK4ys2(eIyd_vU?cBFJ&xZ;kl0!OhP0*( z8SHBk)GS3)XWYf}KO+S^?&o2-6VD>&BHHo_d2WZz@K!q8+fmq5 z!tKJVaYjza6QfTkCD|8fph76?vMPErZW$85nYzZ?}>*Wa$?L7X6Za7l(km z4NJeezKaa71Op}L4X!dOU64`)64cf8kV}-`@N&XQ-9t3ij+nMLvKdwkTX%X z7f3r<4j2xr9Vm6;Ph-~WTDWHk^5$3KijnhrG`k%_^M)1(@aD-IHeslT30RnA+dm65 zk3e6*pRNp7g9+3fW6S~COXW3{ zm4p%Bmvg!=fvo&sz>i-Blh&L4J|oWV#dY&^@%W|{t%t30rxSkxjE+~gqjqkco1?ICj@IaT zXFcXI8*c-03+H!Dj!r%0@uzIu#n;m4ua7p0wA#4TgnQSldb!ZxXjE-9c zlKLUXSD;raJN@`t+$L(#I7U$1Bi!r?T ztE$;+Js{&sb4VE=HlR8^LLpU`pe&V)08<4m;tV*{4w*iu5{LX0OIeE9{J%3Ab9f za%%MPr$2ra4HL6D!aclmMlYkPvphRMl`>#GVcjf&^GpM%BA{NjeV{CN?uPv}yMT~? z(`Uo)$e>Y1E*imp(zt)kF6>8i|C*cSdW&3l<7(L$+Ww~xlxx$jgiLOPo(i|; z&AkM$*_Yy?z!d?9v$p}_&EAeH=X3_rFS!~tJ;)f_g(YL*@mf@wcn{E~@p*4$AvJ)k2Q~3RNBDP{o&b+J(Z_Qx##o%qN3aFRcstC(cgyR<} zaIMrzYq`Oqjt{}aVuqNQZ?$7W^V%MjnS|QQ!|gE6{Xo50oHE^ zm1Y-+q}jMQENqPoF3Q7G^>ufgIClU2_v;McE7_6E&fbtx(UEUKWaz~#4^~}Mb31vt9+$)hrH<#HlstfpM;iQ#pNF!FUoF^dtB+OS z!ra{e?V?7Rdo7>XVCV3GsO%Eu^BO!2?F+9(Tv;HBfvw8H zll?16zBg@*qVfC?M%=Ntmi_((Vr3ScZ8zG%EC{D&(p8jmotj145##iPVZ-V~UkjLS0}HXeefQIX&}pQHS#f!up60;&T)fsueJ)2WF{O-5@7l9+j|3W z4@&1S#x*d*>5Fk)9x!u})llgOH5c(~Xx!;sL^bb;ekz4n(Hng$SvEnRe<}>_YSMD< zvBLnI_@;xIkCuvxyb9Qg%Yq`G z!iOH^`J3CtC_G`bJbd(Ud3bYO+;hd!)EU(hF^>Q7y5evrlu$Whu$NRcQ4G*Zf;~!=Agh@m`Iv11ZP2j>6})S@O@{ zH*9Z7$}+9X_hS?5b!8z0|ysGA|Wgs=U;Asq@m{ zWnk)z_``@u*D7fHVn;q7JbOYf{t&`Io9T>Ui1UMZ)f>`6J<%(X_+;;dJ-|O~fO|UX zwbXdngt@ z1N_~rM^>*Lradqw!nr@kZKpq33AcE&@5i$@`#xMZA6wo2GqNo0B%B!Zte5Zs-E$3FdpK5?ht@j4CTQMy*wC)Isa2M*YOJW+U5g-NiQ4ESU=>I zBY!g5Jo{cS6Ja#NpFHjtWzng~nT+iO9+EGW5*~}1A&4j8I+*g2jSf+cWiG>sV$lya zZ&KfhqdWxy zqxHw>=)R(|jYM|yqUrq^I2cdKeG_BKW5bf4r-0rb%4hc7K=I|OsVdO=hr@;nXWxa; zXOm!SnXlfu$PXxPg~V}RQb|CU1nD@7H@@1`Yja0{rm5G)Zp0T$?DIb+j^W!`VJ1zB1=0U`jm{u_p$+7@c5r=L#~nYfQBvzi>J5`Il{wKKl;f zjn_Oey41GlS>U~=;=7^Dj871)F;F;LR*EP@6)8iH&jnKac3jN;)t`y|Y`tj8{?E-u5$rGZN2!96)xr{{nY#Dd5?UDd5oTNAYm|TJR{N zQZhrGb=8+~kZmYe_>f_0$&qiUJ3%@(o^5+y%0t1eUxED2fUv{Lfc+?i ziLGId$C12hZ`7mw6H+HKT1HCqfjpUU$y2YmS(1n=h<03NM8!n~l0V=bg-MUd>lkm6 zNv_k)%1t=Cj+~u_i^?Qvm^_h0FP^ekI;~uOn6C0w!2nY{DIYIP4NRetJ=TXYf^job z7mellh841~hORwA66C8FVuFSj#?)<{AS@h-n@qVykyq{;LrSLK^2vC=5I@=g8&KEi zx7>o~SFlbCKf&-8sMe2@3sL`#V0?8jU5#XPg1b79kqeF;r9x zVa?oHVB)9_Jp^VkW%6_Z(!V6f)As&675`|Sq?E7@Pk1XX%G=Yy$F#*;ASe3066F0u$)J?fIkO@>mfOqulv-F(?Y#pLC=fW0cM+w6&D9QX&t zpGSfmA{l3y-N0-7Ie==I11H}aEjKFEiJ((iH-v$K&)_BgEH1t%+VjySwkQ!;Wv|A4 zO=eAAcYv>*_$9nj&$HZKO|bVnJ-pGK+}zZXHzv!P?)r){3mfIxzE zR{k33XEL{?!3KAR&}0z>j-T*k^3-**Y$tYC>nta^o4 zW6YMQm`#I$B_R~feGQ zl!6=|cKUi9&9g)uCZO5_)bpHM8(rm$Fu=5gt=zqsHwF{QXt(d zmGg2<{X5HK%o?l~;_pDs2wpaKHvU_xo_#(i@KT>7?K1whz&!;wY`hqwNRod~d;}+9 zzp$=To%dls!6^PN5lNG_Z6CaEEfMdV3eV&PUkB-rsqZ%Ph-^qcV4BI_jfcVQHnDp9 zFVR%)9Yr5obw9p}h;v`TWf#K*Nwt@iI$j*K3*q)w75>z7fj0YPTy{WFER%Bb)3sa* z@0cEVE?(98y)ybMaK1jddd)53q)p_)Z-@@t)FupNEEuILjs z-6w2opRgnQgk8`l@5PPU>Fp@bnLac(_n~=ZpLkE|6Yu;!VbAPCbGCF%saKuY(kI^K zeZrpAhvp5-de@h0`^3AhPuMkm!k&^Z7wQ~U=R3XfJ(Z7Rw39>nq}(>%TxO$Ov>o{-W^Y++f0rNFQ)%`$xm>3+b$D+7dXR{jqqt}9;*$l;#Y3zq>o z+=mg@B?AW7c{BP1sqTi8v!5Phe$#%X?B&Qa6&{58e35)SD0#+k(vr)5{t*u(kP-&m#uA1w*M{klGk{|5AUioiE0Js#j{L<#UvM|$KD<6~J2l1&b|j)vx*2GY=-ft(ZhJ)mXdo|W+4^@$%rk8$1$ zMCDkhgxg;L&)~?4S=ee7J$Vq*{nP^RYEEUhgw`m1BmvA;m{CCXEd# zmMJG$G*;sDES@2)cvphxi&wysN6AY{u{sq8Jy;H+{k9M)E0=1(+jRnaDG8_St z8R%?>`&PXayNyg?D1fcE8P0wUz#u*v4QTixY|39=w=ArOBO9kQa3z5y0Ba$p@o3-* z0wVycD(32oFwGvp*b_l^hT&|PW>m)N+Nc?*vv93k(B~Hv4o5zIVU_`#y*i7GCrrHC z&bMj95D_ECCjtwGQC2#nTPz%5(@l1O7R9p>QQl<`CO+p9UE-bz+;=Py_i?~|`x0@_ap9`@rYJV3 zQ6-DfTkrx@Qyi3WSJ|RD->gt~n3C&-yG!A|&E$5Gy2Bl}b9E<>ew`&Z@Nrj0Td(1E zoV9lnsJ#`bYdJFGXWj>;4BNCC*3PPHg4`4zQPXY+Ms_&mb&&YKMWs)-ussy2QBB^7wJD- zv<~k}>(pMf{*Q~+5q)W$*NfJ#U9{HprFD5PTL0~$wYD#h=4He@@FnjTb+Oo`=3Yrb41-np zb)=Dc1rIchWxdl#y?6(jhSxg{n3t+&d7x?dz0)}Ufl4FLX>hENetrIV!{X~o2caFZ zN_+eVn#W@AJf=PL15G1L)9}RhV;*I{foG!T?;XH?1Jc35HUqq8YXp7Zv42H>joHt7 z7~Vx+TC;~R8!27cc^&BN(Arb>Cp%W!zGI&=(Utw_Xw4~fPU%HQ^kjcJT5AfOb9>Pd z9oe6b)|f))8NKL;e(X<2YfGVXeJ?tq8~fAIno{VTF1pN7&Y~Cl)6rT|=sdNXj-kh} z6I-IksCO}bCVyO+oxx4tT_iQo!Uc^)Pg!u#$lxZ8l9NWFhw?NsxJjezq><>EJdF%) z(x^CTWO~Fdj|^_os5)sRx**R-1~+NcoHUZQo~Mz)O&WDgqbTd4e$Q{G-VGD|W*Fk9 z!B8@M0G6Wy>OwQdv<7q?$oBYCHNg><))GfpS}Po3Y0YqiA)b=BBMk9+h9RDkvO8YS zFvL@mb;s)&hIp#b-0^ybA)b<;J6;mz72XFq{DE?ur<<~k=|prx@{BaP8F@w;U4uMZ zfv!L9`$yLv_x+>m4m0-X2gMFwbT!HuX|F;L`+8m`ck`N_k#-N^yiD%qRUd5TtMkj? z)cH2L;#1fV8%{dhLw%1lyrk}xRyiI80(Z<-b7$xs+b8^!5iF17ZR4$gsvL2_Bq8$x zVcr1YZ3DK>Wft+u+lHsAJm8gC*??mfB;yR{L%kWylxH?PRFwlZpO^BemS&=v4cLR5 zg#s9F+=H8CgIC^+-Nr8Pb8-d#-NcwM}4D*9`%hw3EW~5^O@lZoZS6R zRxe)EV_LmbwF*>q;)d(2U#LFJ1?e#nzdNaJ`MoYH-^6AW`4PUD z{7#_!claSbm0lm#(QjvXN-lMv7o>x8#C?4xp5UZhx>Rpt^((9&rWfTJPGhX$M&Wl zfcYh)!E&IT&cB<^N_t21^BLtM-}W4AezPlY0<_}JpYOsGppAEd3r~PH-i0na0or&^ zP4Nu*PcA61a2b%py|@=H19G^R5Z5)<&VU^5 zrM++&Ah_AM>eC5Aeyw&TK)bvybKwcl#(RbfPk=VwjyTXMhKpPKh z6T0&&KpSt13r~PH-jyyq0or&oDV|l|6xeQ0^H;fX6*z}`b&6}$O99&H&${pgXyaka z@9y#uppCc9g(pB8Z@UXmfHvM-if5IN0_XC)!;P!Jf}6G7X93sQb{UXsH`nySWk3%1 z+FrN}$l+es3zq@8_IN!($b;1$1!$MoPK{^i;rV$7>;?yHAx*<7YX#1g^^I;^1>d_IUa9GaSa{?Xw!V53r~PH-ius#0<`g7?7|bEjki0+v+|&tH3$jm$-2iIEVXEH?9Kba9`%eRp1=% z%iXvNoWp&E8&`pIxUY2MDsT?>Rc>4b&f&h=jjO;p+&kR33Y^2e(~YaZIo#K{aTPd+ zdzTwmfpfU8b>k{<4)<<1t^((9U+2bE;2iGj-M9*z!+nDrSAlc5Z%lEGb}2x+UB1bM zCqNtT%`Q9v+IVkq;R(>jd#ejifHvOSTzCSs@!syj6QGUv4i}yPZM=87@C0b%-Q&U& zppEw~7oGrZym!0s1Zd;^S&C=rQw7e|h4;8|6*!0cUN^1+=WySb;u>{KfHtr1ci{=p z#{2UW&&rbm=hFT_ifg1TK%3?VU3dbt@jm3j6QGUvVHchNZM=`T@C0b%ebj{~KpXF4 zE<6F+cz@x-6QGUvaTlHdZM?s9;R(>j`-BTmfHvM=x$p#N<9*VFCqNtTQz@QRXB0SB zXZ||HHR_B2ZJM8U;R(>j`-}@ufHvM|U3dbt@jjR0S$R?5TwXq(;u?7opiT1&DV{}B zfrVz)|N0_uw>cSJCjrTPdo&asUuebebb>wcJq+PI)5PzL6@Y-RydZvO&p7Ys8RzXu9Ai&VKNybRn83Tzf4!pB z1^-CTG(Oyu)`xn=`Ct+!$Jcujcvt$GFT)3W#$qxu`~iAx3&-}l=E`yQC>pPt>*k(s z$BDI^bli8o-63$|%b1VB<75699^q_e#loNR{X2N(Ji}EeGBX z(%?k$G~AsAXRs&b!o6>j`Hud0#WCwe?ZxCFU!3>Cdl5hCp~SzQ`C`AF>I+M+DsWDx z{jD2UfpfUuapNj*4)?omTm{bI{+%0FfpfTjpW+%iSb(<9{GJO>fHvNJE<6D~D0S=U zi?s>6{y(tw>ie#;5};kCdtG<}wDJDIg(pB8?*}eC0or&!bm0lm#`}>APk=Vwk5fFW z9Vu|GUjD?5tH3$je{|z2a1QsM+_(yy!~JQBYqSjk+WGpK3r~PH-aotW1o)tA8>jt$ z**5+~mzDY5{OB-^8LLcV1?yV>Ot7qf{tG-TzW!P1e8Udz%zm1QS!vDxn@fHIwDJDk zg(pB8@0Tt-0or)~;ldN3jrX4}JOSEx|Hp+VKpXE@E<6F+c)xbx3DCy-FBhHwZM^?> z;R(>j`;7}vfW*uCI==;;bF6{^xxUW-^ulF8u0H&ZAk;^r-uMdwwE6tK3r~PH-XBst zOFt^GUGL}jxp5UZhkJjDYv?fn+UetX^6vZy(8gQl!V{p4=eh6%Xyf@VJOSEx*eJ=> zw^ZOzT)cgC`6;+24??An;X#?FlNZaAsaFqj$xDE?TvxjA z1Zd+O?7|bEjkn5$CqNtTkQC2qM+%&48>`*83Y^0oapNj*4tF%gHQJm2ZC(#`;R(>j zJ1oVs@}$7Iv=2{ljkE=5(>%h3CqNr-O^Rowt-!go*QU5e+5%jp-nY09*wsfPZ?LQNk(9LE zyKL$29JJrI^n8<&$8$Rn;M zFDSscju#$g#XVuL4z6%{nopc(g-W&&860LMGb^t6Oo9S7Bq%%+VN!R^{kO6f018~s z+v%df`gsZBZ%Na`&SqJ;a(H<;g8G!}Wofzc$tc%vXXP4y2haMfE_ePoqR7nHMODIrcacv!YDQtR)P(Mvf)uKtTs^UaGz?nsRGYMp(lK$8d8o)jPwJ9H<%i`wxbS;87&#hlGXygp6NQLv|3pOhUUi!8gnL8l$vhu?`;_N`wJ3H0$QIOT?VwOwo0 zP}e}MHaWUW$tp+)h9DT8xY8z=t85z*g2{%3)n+wp7D2E&IkFW+ow8R1wc?3vl135a zs$I$+4&oE`DzG=20jO2dZ8ZIay#NG*6X$J$x!Sm1v!^!#ZI_$nuncmjnR>rDPssV5 z`hA`Hx??rEwp-ezW+^NMdsJmOziHOiy?&>5U#FI89Q_jT#P22QMPUX%zH^L< zcYf;*#qTfiGvWV=cj8x3+$Q`HcqjgaIrxk5J_`6fxO2`}LjPlUKLYQ24LEfh?9svk z@|tT$(oYHG=pCH(E=TXAo2Hh^D&xWV&_3>VknW%gEzLbm)jnu9A)T)M>~Ju4pFP#S zfkpk+K4=N8XS-;f-GV zx$fla78kAUeQABJ7p)h$XwCJdwYL|o-7Z?!_N8?KJUGrg?s3t&zAvrWUbJp^(c0OU z)*ZcQz0^hPhQ74E){EB5U9=YZ(hA_gaF*9AU9@iOOKT`ki@q`Hl}*{cgl9oh#kb%q zvOjyoQBSdLmqCkvoGs9houJg%T`r9?AE-12dZ&@jx;)T)4E9drvHQYQ_ZRo6I56dvc|-DIE1^;{(N8yLb7gBd`Z5? zYOp_LwW4<#sptGa(>SPi8mSlhK+{;M(_p*i9+zT6_1`m5TU4@V;=N)&Ird%@`>8)2 zZA}TC$B6CZpd+?Ze>&Qd5;|jI>p19$-PE6swxWd2?Y-!T&D5WcwxER0X0b~g{D{5O zpN_VkgwAJs(GgpzKOJp337zlvq9b-ve>&P~5<16={ou%#*hu~9Xp2ecT-}R~*hl^8 zXlqI6yt)@1v5orE(Uy|X`D!mZVi)zNqpc*N=F_+V-67A|NcHi`wumotN#G*&rjBsNH%Mg})&9O9&r*%(G1!AAx+X{>hA zFztlQ*26pw!KQD=q%q>8k$lhddCA}=jZr6!3Da(n!9Sc^Vnqq_M_HBl#ZYX=HGd##$$h?0aX|u?%j~ zI8xJ4{@+)jKa=xg)mLb=?hn}8gv^vFg;#+?8l4#$jXg3$5t#ZS1 z%GtxI#&Cq8r73OV2urnuBP`VvjxfYi8o&{Tcs;`qPqlh?yq;l*r&_u@Ue7SZQ?1(_ zuV)zIsTS>y*E0<9R4aDJ>luc4s^z-l^$bHi)mq*0dWIpMYN76UJ;M+$so!075OVJs zhIl>eF5;=M1D!8(8GHeb{>Lfq{zw150crWil;vEmH?dh_dQd6GOkr%$S_zX;fMyXp zhz1=D0{ZdyaUNJX-UI(dtrTAbM>|e@@S>f~U})|#SZ8{S3>}rin?X-Gq%nDee(73R zlH;_Fhm#d5<_!pka(S9LDiA*`>iN2!b}GItX-(exCC8bb=CKeZG(FiBVrJ?N-&#@^n|kMf}> za6!W>y{0xB1cvvFNY%BlJPH8gkCaUYPvtm z(zRr~R;RlP;rvtOfVws0DnmzIUE#uuM2{?5XM*_2&<1i~+USXj&RwZ|wMG#Bq5`&L zD7>>!X?hc7z2O|qdnkyC%C(PE4)0T^98%cnDTmNS z;oK&03SKzJdlvEDjd*H(QoTH0E3cWv>;qXtvDTj`dz}R?QCb&|494FBLDZIN=zH;2 z%muCOt#)dAqcHw^1l;G91T(39iXtlDDpeYb(v_0$>XdB`H_p(pz% z2p)nHSh7yaUwyteiCy3AwQi&qkW!IUSiW$!6+Xmr;#@s19t01uoGvok*LTjZN6rtg zd^$p_f1guRmOkgxT|R=eFSU9qhVM{(c;q#O!=H}hZZ+Jrp^r*!XwIYMpX{G9JA;Zb z9lun4@{sSY{Y7qL5X*{w%QMq@gGx~j6E235GCm48PvRH>q%nT5Hwmm&;p)v5ROau0 zzfjmP5XMkp;kpPShAvI{=l70(zBjqaUpWO?;J$i_WX|(ClnpMcr#k2PTyt0{d>j?* z6RchB0gNj*ibFA|>}$UCqmJ10P2`mMpqww~4G2hA#u_G@5>yT#K8_99AiAU*?W zHyU^@~DfDkH&`D;ojA{C^SoX^38DU6twC9GQSYNL})M6#j~Jv@%rlJGbFex2!r;@gjc@4`gjX@R)5@h_8aY8&T=paNG-b zs&-V7bN1H3Uexg_UYNzgCisklHd&Ez1UKGLf`&F-k#j!tctb-&L54-WSt-B>EPRqY z*M{2BP!)n4s{62(Z-v^7fF)kB*i3)I+dDN%2G(e zRK75f*iCoDO*bu*Zn9|*%ZhdOuk*YfqG{GNuO+LLy)cMp6WP(e{j{ndbz|--V9``HqMi<+c`ZF{PIMPN9kzywiJC5IEj?6g!2W22N=p~1rJ>FP zD4}jG-RjcP%~lIqx~a5u)7H{jEf%03MN0!K(bCOSOE(9orNaj1(}|X5zp*)JYUy^+ z!11i-HUm-8u&2E8&Qy73y1A*9aMRY!LmE7k=w>v$RC($+sq)mw&4@PCDK{v6w*}9v zi+AIf=pX9AcjJeSZGl}u6MhO{_zn~f&%rs@i27}#15VkWW5BEEYjaN0=X=Q-I$;r6 z7Z;Va{v!XsmNm=?{Y7@j8gs&2V$QyiOB1vGjqD|6d?S}2a_zYRW2vuP(YP-a)so?%SE0b|-& zHL=#=}s}}5KfuWE=u5> z$Idjr2$`y0TLoWYSm%R4LKpB(%3ArdtP|JZ5R_r4B>tE3@qYrMh<``#_~P`vf6WKB z9Xojcnvcl!<8u9^Tt6e%FUa*Pa=jPV2gb*EVEc<)hL17FtKg53zndl#4<-AFW*>{r zLH19g!g;{FSIX!vz>F_*Vh=R~KSoEa0)HgdA$ai*@L5qcvKqygqWg}X6YN14S+56y zp8KFY8tI&cALo)NKEncG-$>a?p_u`TZut5+9mc z03^PV{G5L62l{fJ)Y?+!Ph-FRTR`aQx4)@xzkTfz=Dekn-=Fy&N-lOEeJt&xE8l?d z+ut{!xfkESn#IPWGx}z_oj8M=^>&?b!+JXbHSlee-B23})LnJUtwy5LtJLWcdeV(* ztBy{rVUd+Yr$?)nJiTVUb0+!6GYVI=!xpp+c*!EHYpv7Fl(&jc&1OG|ez- z1n8)vOHXU8qO7q%Ds;V3WPh1Ws3v_7tOinTDCwM6wZ&Dn4Y7s>H^dMt?2UB?R->mj zn8vf3WIFHrB-B0XSGdYjog3i!Cj6d^-?ww{HF*C#er%hGjwZebIe56!6`Y6DcSiT7 z38(+(V8G~lPjmt0c@*CNm&@}(DNE}2Z{TOjfU^8Fe$-JWd>`H^OOCVT;glsmy(XNp z90qI@KU0=F@&32cHfycHqzTp%vud!`8VFi7qX|}}307K-t|nM-HP8g>Xo3~o&;+Yl z6C6mI;DBm^z)G56eG-Ry`pt3)jjz;-RO73u#;3j}Xnb&3r46teiNmTW4lAr2g~KYO z!zwebbc5IJJ#Ax|AL~bSSYhiA!(pZ4e;pQAZ;j|5>4LH|Z(Jzqrti04`6?uF7peWv|_4x8Mg4A2ZI32{HZ%N}< zLcxarg}88N^}rb#@@{U7+9t(#4qy+7sk;HOr5J<=AKweak-N*_zwXtQpzZsBJ4 zDfz@E{%ehlWxYv%m}}12{+@}S+5WD<`;+kdat^)<@1MgDiCOsngLk%%`yFt$j{&27 zP)_{De)oTuoS;6%8p?|(Q<6&)k*y?qi3mz^DKa_-WlMROvZIVXg&+MECY(BwGNP>V zaLTA+$cSs*IA`PUAR`Z5D02=7XMgxI_k*=Lo%_M+o6h}6EM(3lnFk#Vf9Crob*u+g z{#wg@sTXM0O66umbpz`ZeXd`E2D-&xB^jBU0ArMMPO6O{I@j#z(dUHE7iTz~+YIrP z%;_l?c7g`Rb(hFTy5P0kEP{vDvW|-lj(ep&Kzz?t7qDUV0fiwwF_8TghnmI z4^Q-a*W4ogAy(t41Bl1JY%PfDg>X!f`WId{j74)xVxG;+Er)S7Gj|lm+05L~m}fJO zLd?-DzPdQj+n2W~tl5_bIl!B=9tT<&Lu=y9WQnF?NAY2ZHGZs00bxvt=WH_}yz<7= zmYE=4c{5I1CfzeNUEe|WXhqgnRB@~_$@z*Xj#VZ#-$k8ZxXpZ+Aebl)RNhXqUX!3=50`p{FZQxLdpTS6a{C|{*;7`sE2bcIxRK~sG zF%`p?cv%09G|atHXFtV62usJvCqjRSh@P(kHT{D@`v@9 zi9MC_;fsvAB(>vGNJ>-ZK2{tz{2^&e2ORATFJWhWHEuz1%pKG!z%3MZyM?U%aaV%| z?LkPc@KEtz`SOfcjQfvl+&9egbNs?60r>O$v!9GXb_~7azIqBn@3>u5o%QhBvjorWITkz(oc+?}?Sg(LM zjM;g(hns-$U0|@xAX}+-L-7wGHTK3)?NAJ?Oq*nGhT1o`$6OJ7LMoUtpvr$GXu0ux z`lTx>FH4zw@?hl)Cr%@e{9|6|FJ<3^f0SQ*8;!1kec_97hhSCbjt>N6b8?7Z)j#U% zr=!kruFwg1{uk860PeLKquq*VerfhN3}Ws*IEM8fa;uIiKWTf*Ye$O^c4co6jdjM< zevLHJ^dI{P{0-uV?|H(uz}5m*#t(I4+5Kzole)t6*8}!*wuL0=*$r9B^icOm`4l5v zrkDK8bO{^9FH83aI^AO7Mav3>e?z*h%D(02pm_!(M@-d9?PhDRboP@u>7&G!!f78R zHkH;O%DNn$kG{o}iyE z!}H1d`EhvOpr0?s^CQ*sWPBtZQfW3Tv&U1OtEDEjtF5XC6rFKhm+E_A7ojqh+4nYN zdIjXeAN?n$ObMf(B$Me+vbqHLe^937eaoK+nflnaYyV_gYLy|FE0F_#WOP4;8X;~J zU&UgmL)p^%BHEVz7g4vZIs~coExLA6heE^&<7r9n7*>Q@tICQ1x2UQJaG$D*P|Yer zRmCkLZZV!^dSxhlh+rF@lag3=vT}!v z>^A(6KVcjGMVju(NcUHicYsR1Zy4s{(N#=fOo{+n?4cPSeYBXF|54E7FR#N0I|jcj z|G!N6*aY~0fsf*?;AmO3QwfX5cfytD2k30?^V$J+2@38C@g-dMPbqKF>?6qAD%CEE zt)hsho-~Wv-k^+DQ5rLOWAosTwu{*&2s<6WjJIEc{5=Hk{N>Aru*cw+@i&z6=PH{=|4GYc zg-+Wqa6ZN#P&VF8n0+Br!7&v7BG|iYX-QYYcn_Z=KiCH>(5+A$|!mS@+AGxCGx%`YA05dh)g6u24P9a;tve zYa{C{*jCK?OZXG<%j(B{Y5gFt_vd*%X%Svm*t`<`Psi&IQhD*)hRw6t&t+G4`4p$I zPfm<^l`aW#BE3`_3P8GQN_fD}yTVm$aNL2?5nGO_BQs_=XoR-+%r7EOZ;%?kdNXUtk+TSTdsX? z#HcDn?R$fFjj`cfl96ukEyjec9?`1x&2I%omd}xF(=0oGg zvAcQc@}Uv9O+xO==>Gt;J<4^S$5vrB|2&VS!i0%=9y^60(s>>$g>4|`d2AGR?wjXP zPwmi~=W$$cYVx!##Nts}m_{w9XVLS?qoeBB7I^oY{DOBqFY0mj7?g9%pWOXM!g*1T z0-tIXCwISr0lcV36`Lag^ zoo1f5lK4~~_BI3}Kxch#BSo_t4^Udu2? zj-Hq1$X6NKk!HwO`MF%>$5+{zQrYoUZYEW3e3hA#RAzjY7kH4F314MpRAt3iIYI4b z7X0pvbk+YRl$!YEaz13j7pwo=ntC@cUG<;9Z4%PT=+hrwl={!(?ND=XNYAvZdpD$K z)}f;Fm^^y#pMeUMdGGmVdheN+t3fkV^^B1)0Ki*W`R1E^Urc`7@_08dUGgJvn}qyVM*nE!we+u_4CEnlT-l%xVJzjaE;$swnGnCP~wb_`@0OhIXy>K2&yich;`EFS4bqG5Yx%4gJi`6qSv748! zdPd+j30a=d_X`(-|3UCIROxJ~c@x#`j}Ho4=P(PXveO@ryxI5RiHn71-;alB)HjU! z7UJ9Jl4p2n_8$R{CYFbK6;-GfQK`H|af2yQJ{&9JpEn#2DwtYh++^9|1OxJAkEvHN z_hvf&u~CvGDHCJdZvG6&g<~-$>`VvjtQ1yLY!tj3CIQ=qp@C&G{uCwf`NyWX8SHTm z*yA0rvmLM}IAG^EVCQO>aYp7mVVw=K6kd<{aefy6y!f9{@SWLz!4<`lD}zlA`cD+t zfzEkP#%?(F#lJu1Oij|T=Ded4E_U8ZCW|Mh<&@Sbe?fqDJ$RA}Pk?NKp1&XYka+-H-%u@F0=XPXT`6PK9qiuDwGUYKuGfM# zB1}BNzR?$AEVx76H55M+nl@ciVhv_TGML?nCL*YwkARNMtyY^_A{}!-$n)?{KMm`Z zDvxS`eT$CY0!o<98rm#vWh}8iS<`8>HxN7;4%r9t^TK-m!q`TQPdAthz z%o#j#{^Lb>AJ=;HSvhTP%4h+jKDRyr{M8z@(z&J1ZG6V)XH9)D zuri>wm0ylV75k}|vD~WE##-ifu~}&c9lhCjGsspECrmcO>1H$y`_o`i1_(t`SWmoe zIo4_^E>Uw5F00&!d_Zja6Icdy&1sEigD5^)Ma_^FK`C2Wog^MjcXBDGbp)m3N>_B! z0QW~OJcQ|{E54QXG8TO&X>>a185x;NC5{wIj+`N1)ofmhzkK=fpi^AFyc53-qF3LS zs`#8AiuAo_eF9~U)fvO`KOaA(V+INz$MeIaoC20p zAmvmqKm1m}IY&ThR;^V@$^w~3j{q}wr69ue9Ev6mZ|GvMS(@%l!+bZ(p^Ob7bWN|J z9Ez$Osw{^{l|xj+(FnP6D2;jD<=m*nZ)ffk9TkJ;?fBh^Uy?_*nOETb;ml*5S@b1~ zwbH~4x-?~#k0RE5YJnD;-1vr@7$o(%QSC4rft3xM+mmFYifmwWtuDP%EvLDN#=KG& zRil2_WFG^tiNX6$UaQ6LPTN5(vmN|S)=)Hpe@sorM_lcM*l9ya@f%Vn9)YsKBKG{& zVy#lDSW1be3$m7Ds>MXzrCTN>W!DU*%hPCmKh4x}J1x4fQ5!mUXbiJLrSPy}Nmd6` zyKfXOMwy%>`~^0D^+r{1ER^n=kR*y)2Wgo}a-3Nz9aK;vD?2&=m_`96L*bE3t8OQy z(<$WzgYxvPWE{HGPKEZJTi3lmmGRPaU4|b@+dc(+2NST?Bb@cYFI8eCsA?TX(^CK9 zf64>_y&Gn>ra#2&#UIjqaNPAKl*ehH+ba5Jb4o}2T+E?q7GYNS!P%JnqX6X^&wl$I zrfandMKLMDdyfMH>ewCV;mQuaHiOdaChX>1-RrO2%QK_q&khR#=jP$@3G%p_kLSoE zhGg)3E}zvn0az)pee-t?er(_HgJ4e8sQC1&n8*79z#e1p%h@L~@5kghNPsTBH`sjh zm3&Vf7~j;ruqlw_=O>9@xgKj+9xI7zW2x({=SMWF&`7D<4vVmps zNnm$V3p-We`QhrB8&<`bs7^S9h!^Yzg4vDQj21Jsn{Kgi6zD!y=0V{l` z!3q!AYiF!*H$hbn^xHii0bOfiKL#S0{oW3SFPf-f@@BdZ7<92ecLBOYxxK8^zF4S< z-Lz8Rg!pDl>T)AhBkx#_A$ z$2c5E<6ky6U4_}av7dDl)Shd9|NZA}BIPYAycB7lM|t8*EL~49vkT9vo?u)M&#Inq zo*!PUdg5c5L0E*~c?jt8Oz>Hk2AUkbhEJfS(7rqr-b)M^onI@iylnWQZ^BW9GxH{K zGS<{&Y0GfbnR_CNeD0qI#h_%rh2yPHq^xztM1mb2c)7pn1xrd#t%a6)+J7yyuC=lj z`h2NZjy=Amj`pXcYpl?DO*b9G4*>swS*OaZH28xZV!#a_SA4Wc*{YYIk;&em4H_BT zq_JMpC>D-GTAM66up@gWq~6M;ZuQ`BXu96?+fmQc+&IG0967?$95}+#T+lbeZ_ks+ z@BAoyAM}AAiaUJZhvNnx_+hvuV+}31yy?{L_H1{r^dRliL0kE;NgLi~-sqZU5_si} zu4$%$SKjEFX3BWw&2mlSJK@QGDH%;)k%Y&Yw0uPo9%qvB6+w8MNy+a)&+-)?ri=xq zV~t4=zL>9=J^$Ujboq)2+$JH1C-faYvyG@ClZnqPkUbZtAQzk?X<0$KeZ#{56Da_(=@>JX=&L6`($5ZLUBv}mG?G|2ak*nhV!CU<^M#0GC8YO>38%4fA||>U$q26< z#NnSRpH3GN+X2+Gs*kcy^m*HDV zUarIQ(=%RbE)O5LQU0_XJK4v_^77^UY30P9=48<14`P=+OB4S5V@fiX^bGJvoBBF5 zghr_QR?43?fSzf~$IgzJ?@f_fr6e9TMuJCenIB(>*3()R#7~oZF}_&t@Wx%L9)kEX zJjlMxgR-y7hRJr-mFzhCLipzm?SMLD|FWnV_Hg*HS+k z93$Gf&@P+3%X;Q?!`@WzIh2>?Uu#rT51YYew}(w}3LzODHrkYfGG>2;!E4m0VT%r| zzK44+Xh!v9@0K$B6kWagW|7VU&n%*L36oMX?;d<$z0-aM>cq5>wo0?uKTYvZ*hyjq z#8Q$(eodbOoCJyUZ2@&dWY^oLKig|`Yt&Njn<@Qn?;Ax>V?{j>?^~l0-^6mV{cqGU^sBM2N4=By-(H6IPaANS)hF?O zrIeNJf4dFv)c;mb{BLzEmDmse8wx{v;LNh<_Q0_$sw|8B_rSpec_T|8(QEAIqHihw z^d$dmQ+EJ1!+hF4xT}}!gKN~Z7tYK|>Pn*9T)c3qWf}TsF)tjPh`Q>cE!3r74OU%# zxJEU8F0(3lZ6e_hcCyiEvhc$Z*2@oO{_{ykIOrYEkRc;ZxDFubv9?1lZMtA)QVKU}SsAFfeVo;WkfyeH0)9Lje<<_63% zy(RkM;H0HD&P*!jjq6USr|!ENh;upV->bYF_!?MK0B2&TV<-|N2qmW$X%)OTI* zIH%h5-wcR5gdP+Vli#hP_;TkEKkL)7M@!eq(=w{*XiSAuA1;QqP=d9fp5!3+_y+c+ z^%?Fr>SvzezDqx&yFM8|CwUpf%gxEl5MG|2yx>s#_!hjRzM3vS*R?3;8=q$Qxv(-Z zv1;Vo)6>uOuO=e<^C;NDHCEn>1KxDvLAW@}e`drf55h~q1Iy$EWSjm1mk*&;L;)C% zgjdy-9*ATg=Ulp}A7TGe?e-+NQ&qBNzxi4#ze&IOsaamFt_nCnKWK`V>g!!;gvU|o6EdB!J_Xg@|a^qy1t^09xuuIia2__r0Of$ z=<$-MpC^qrm79xwMWPpS{awNr>+jMo-_1)`f0w{*5;Cpmb02t)tKTH@(^I`lD?9Yxx}Vm zUygP$+jzno$1b?$=Q-ew>gyU5VgvP7+CJ|qClh&fpF-ZZ( z3&=wdkKwL$RzudFJr`;8=@(67(gFHJzjh?0`b2WzGY7Ylo`&eQdg1Zl|7OtEeIiVe z*8^@?s;Ig|m0D&kV|GJ$F1Bfs!5y!hAKNcQ@uO7rLA|YuPvChO?P>$#3SDFMaBP@y z_^r$DrEYg{uv?Ulz%)3vkjGE@4+$py6Dxt|w1qHkAD^n2u7cjnf%kmyj6KWDvFM2_ zvO+Ki9jmP{9iR;L0A&T^H8P}Y^WDJVBf>dm0CbHl>oIn0!sH%fKAjwL{TJto_ATMGd(XlTdM<@CPrLB`0_Lg4EO~17Vl;84llPLFbyeu?VksR@*0Te^vffi2 zU8!mvd5`wwI;2?9Boa&7(h=Z?>r#?2w9C*xp)4^#QMiSCR>|iw;S*;U9fjTAIntjm zPA%Rj%^|cg6u@on09qFv8$;Bu-SXo$5Q}PlW{2=wv&!a z$@pd0xD?GSn%@rEM}hXz#xVIk%EmCe?BYkF#BPKIkdFWUpR98Aw~PPNM5I5Fb6@m0 zoNtW7`NlY$Z;r$Hu{{pQ-Dt5dA~Ma9v4yNavkyG&=pdc~&(=s>quZc0ENDFx2l0ht-J=eMQvqc7msj&Z1M?XbBkPZ|3#dWX7nlk%PQE~&|g35C5V=8WljmC?gF|AI6v@h zSU4i{af8CKNavM^kl4m*$9(xhOuBWt{@M|`*!j#@%|Kbtcr8PVfYRW-4N zDJS0t%x+%%3_z;5V~}!{l_WWBQBg_y8m~g8f<5)}t&c*bss*KT{0me9SLtH5FmaMe zg|I$hcJ4t6$0LPecM3}WOXl;$-h8r6y_!O_>$y6QPjRKq3ZBO&Je~A_@U#(BD&09_ z*^#GrGRV!-sVvR3GAf?vvYH@kO`=fPw$xSDeHTrk-E~{^OnERdaH7$k3 zub}53NZs&2@^xo#zBtwHPsJB4tg<6}_|B;EdQES>KHw@Zno7Qd;C_}Dms>obd~s;k z%~v3OxVw>0`W3c9e~rX0RpPs#CHV?};_Ayr??;8b zNM6+A+|P+~x5lAw_4Rm8{iFv0oqvm+1>z&=%Ot>c_0;fr_`3Mm(3ulLS!{U1d{Bg(abC;s z2qv#Qp%DFOIU|#}az-Xm&p2_Pzp?C^I zoj0ZX_AT&sI(|>VkG2nOhX8lN*-zVw-!OiJbI)Y%$M#mEJ-}r62<(J*iAQ;rk~JW0 zoEOwAVQ`{Z&%Uudok!Q8_VU*9baHYTqFg=2(dJRQ8%|i!4EGJ-xQA+K^ebP1)rw8| zu(Mlj-9cE2@GjU%n3Y(K^-M^E3J@r8I$Zg<>M!?W&lTywI-)=A}SvSjx?ymMagrI1x3)BD%NvKz>_T#u3K@p3&;t|!TL zBd+}3nDg0!cs-mU%C0cyvmGr^w!frJVs7FDf%*93X?zQJoeTF6?1RiKSdH$~h=ubU#|UNsaE_o|@?xK|B} zn0wW*2)Ty=i->y|un0Kb#Vm6ECbIx?MTN-J=K^2Uw1)jiPnqP~av9_f2Y z-^==5(f6vp*Yv%v?+taY;LtcGzzq$U_g6z#y*tbMYV`Zrj@pMbSI;yLnb~+P!gYD9 zLYNfH!Oc}O&4Xt)ULavoMk^5}4+k|@&NL62*?6*qNx7{+m^=(OSIjhrXEyRoHC>h+ zgh`<;Z+2#y%V#$73_e}HLkN?CZa0T!n(dj5uw)P>W!^%VJT#lFnPzilXZ zc^GI8&NK&RHvYMUiEJ7OlZSe%Dr(~M>|oTa4P4iP|cG>bDEj!|-N)3w41fTe&lAaszb z2TWY*Lum#?vfWiEqZgt~Od0vMho{y5q$G64v z2PqPf%8+kM=SLExq~qJd`Md-v;rO;}-X%dwHoh&Imq?Hjjc-eas}6PRs`$2GuoZ{M zqvYFic}yY~-xdo-Ybgy31DR4;p{3$Gg`)Q_uYe2w$sSq1#>{toKq)WFmqqwuzO1jo zD%s6TmoJOJZ4&Zd34QZBcmp`^`VI=v)_)5rUcxi&{RIUE&nC?qQ{2qHSP&q;`B+j> zc(3RSCgaVM1Qa5}XV-`xo80|M&O_%#J*pj6Dzb%Ex{r#n2M!5=1aH|MIHZdv!5dwY zq>oqLjK-nmK%TgtjxRK9QlpARUr~ZI_1ermplpF zCLvxz-z@u^z+9I+1!&7?mkUpT>^t9y^7s&B#MRpOBEeSCQ(eUcl43^&c5iSi*}#hK z(gGuPDwxuC{AHbLDZGsV=;cgCQ@V%wThu)bj~Flo67lZvAMSjqMKsyTy`@q~^u>HV=Nay2`SXR(3`L|L|^-i_ppRyMiP3(+b30H1b<=>9V z(QQO%Mk2v*Qe=k}#Tpzc5!Nskb;@msj?Rw`lB|?OqS%TU#cztV8;2OpAQi8Ppo1_n ztf&>qev@;RY-yK!vMfcz407^Jh>^dx0xrLmVk_8at=tfj;z4 z3LVsLSy9_6U_7&+mejTi7|$%IHMOk*DBwjF)sn`UiiThK0%&|%wR!Sa1?Fi}QPL)} zOt-n4`W9@q9^Z}bHyV2ZRjLJ*uy1&vV4!ij`xPl#)GD-~YH~Q7pFWe~;LsfmkF<(i zXdH9CIzg)g>lj$$d8``X8>e8jZw2O)RX_MS$kS(8E|??oHxL;0E(PbsuO;so@qq5) z2J{~CAh3F?Se7mDJ+LAWDq`8#-b1ni!J@)QZ9QM~(yiy4#Y!s-7gz;aAP3jA_y8AJ zmN?;0>D5nxpD%zPOUG3FTge+HRYAwR0T|5+(yk=?_=h8-n-#lie}1wXjtpv;+IOFO z_G3XQ^Q1P_=SKWMQvBjT`E0X%kkgyx!>JOKqT85uGZ4l@90Q@)uIqrZ@UPUwnW841 z0X4yGu%zCNg4-`LKbhR2ESP0c6Bx$Z0Y=nbny|WcmMj!FR}L?9<0^0t_eE}813D;T!#@b*_VoRc+e^~?8RZ~AyBuEX!V{p4_c9lr0ByXN zyYK{Pjd$kKsfHvM8E<6DeFKtVg?uSgI9*q_3bnbMe zBS0JPH7+~>60fG)ws*r_z}xm*H2J(O#(YowDI2R!V{p4_cj-v0ByXtyYK{P zbr6;ST``sXfs0_0hS%Qe6LcxCSZ)}hO8 zDcG8V_c4TVzO{!t=ZN!O#E;*n#72qm%s+4b1Fm!gX!H0%7oGrZybrnX1Zd-Z*o7xR z8}B17JOSExA9djg(85di+BD~HJxJ`ui~HA8j`?qb%znatkJ=x!*1*0FlQ8m=?Y1~k zKAOf(mNB*~;)L)W<|I068l&1bK(+*x+LNxK<$9OX@p~+ONu6QZeE+8`Z8OP65z|d# zY?+cIna;Yil2jX#8cAAvkaGUvsYaUgQw-sqe`*elA2+fj(1wb#Ug&4wDVgm67aCRs z$}ySg93@{S&Tz)f*MX_a#F{_sr@QEsODitDI@z#C_nkBQlzXuvh08z+hDkz7>5QW6 zo$+&|fb}%rqezl@JJGbyxp!L;>uVVU?05O;xPZ6Dk6(u_+JaIA5=I}_FC=f6;W*C# z9K4J}P-Sjkt)%H=4O5I$Gs3m%;APG86A*VBSo9~#-jEPocdEB0e%JqH?@Qq1II6o_ z(=*+3?d*2XYIe0cb}d^reCXr=x zBq0umArK%T9Qnu>zQ7l3AYi}{LVys!iaA3#op4|B_y50F-Cf<&Gb>qkKEf|6O&`@& zuU@@Z$E#PbULlJmmxuwO1VY6NEG2LwjDDGiC*X06nhWC=>Mn8MjmFq?KyhaO@?GLJ z2&-t3#VO8rJvnpodq}7G;Jh}!TgU#9N22#_R*k<9@%!LKj-8l%rk?3PkQUzMP(>Cs z<7#hctZvAv{MO8DLd&LMSnZ4L&oE5(&!&Zw z>WR)twNNDB)vLe-1lsN%m3wfP9?#>Ph?E6MT2_oJ(-Z!eX2ktg3I|0#hq7ONw!b z=OK(+no%7H)?pllbK!*-E+(AjVZdo7aE1Yge}`+|^&qB8Y{m*;ns4e$ZIO?3qtQcy`^l(B(hm;y*JpY~@z-~p^fd*3|D+Eb49E0{0_TE$aHRhm49E0_ z0_Xev;7H#$7>?-)14Y%fn(ect+GjRbU?u#95s*0ZiL2jbM&l_i5{Fe6Yh> z+Q&j$Sj9djlBN=kScFNu9g#4VlrYtx(vL83`D;<8R!u2GVq$e&rZ;PBGRYY09$RzX z4!m(jr1H=2WuX{S!@@aXBX(a!!xp}Yuds)bkuW~*M68N?sL)Wpda}2zN!%N;hcnbT z)U;AGlp>gJ2&2EZxSm!0e#C@OOn#mZy7a)NpLK!XJVN+`aBmzT?2630v$zY=^&U*E1u_8V56x1dbzxJ-Vo6#YV|c&p%LyN6kY(ys%jUX>9E4 zQ}e6PkBm52pm0Wsa}#}7!Nhy0W>37+V+TAv%>><9Il{TH@pKpq`o@#J*AkaqJiP*a zv}{Yl`d%RY`_@)%irYsn>y}D5azh&_`{ohuU2zr@ADBE-+b}>2(2ESlQ5zTAA%LA@ zEyRAHya)$z?X(cVPniv30W#3MNv}>^S;!JcLK- zexi;@v)JL%@isoJgAFcd4`OGbMgRfE$o5pw3Rlg{g;SH~92^TO*zr;cTG)M#*cETn zC-AM^_62R9{wB*)qA|cu8K?}}BSd^8oD4<`;*+p>!xpMZ!D}L%1m+VOG$BEgKpJs) zmG_mwLhB=xlNr>9I{yBRn>y_wzb5u=Y7JE(;wyroa3v65G1)vgRvVkc#wM5) zwTEi{{!RagFYU109mai#E#i*f45Pe> zx%L=jgkX%w%>>mL3^2rzEma6VJfH^=<@<^MEQv9S3#)=UV%4iC2OLMD9Ip??)-4oAIOm@U!@}@Z;Q^;ZMOr$41<5#oZ34 zzo!e(PW}o%JA4M=Hz4ezRybv>I>Pyf)%uC31j$;)S>Jgw!d6HhS+UfEO{27Ab!r$D z9uE+r6|+&(!W}VBSV8ylORKv{+=$xJlj^yA8Pg{vud zTQX7>d_y{&aTa_-I-N-td_y|@)<99NLqD^IylS`NJ*nu*F_Ns96A|HrqjYsaLJGE; z`qL||2*rC&{V)tT7Xx5SFkcUD>DJRB*?QUxgPyIYBVmAXY6Rm{6F1nA56RZk+sSvc z$S_>K>d=1Y` zZpZBH6IjQHJNaSky%N{V!{yPf5J|Cw`wNs~`e=;FrRXp5s1jAJ+b995e)LT&IaRM+ zqp$@w5B)zrs5t3FlI4JRsk;;Qbikn{Fh22$(ip z$h4*~4b_(1<6WiNo`YjK9BgRUF$ZjT z$a=8iVJBt-C^PGIX3>&xk-1Mg?4SqZuw(ULeTJQa9xNSOYAzfYRKr#+9Ex11IeG?_ zD%u4b#R=tLDB6#?&DNlm zKws1|$fxbWFk%SaE^R*i7q$cX23eV*eO2aqP=BBu;6LWAP-@iKDarYv?*0jS`oM6f za@crKJ~%vtL9V8rKCowR2q#{^(??mPE_DKO&pn9~5HDPe{&|0dp3%r#v8#{Ko{HZN zN74VZ(f`2JM;jGiU42l9hVv2emEz!m@7#;Bf8%o3zfI@wEq~$?I0~5yTC>~?0w1!Q zzFO(h?1}z3E zDFo3$YlamZ)1)Ri}Aim_|SL|TE=jW_SmbNWARqdj&ywyel}fSiFfKYer1JI_xcRb z^@QJq{@)g2E0{W@^S^p#Xh4UA`Cl?Lz?<H8FH( z_jNl5_EtQwx9o`pnhpf1Sa*T}0;U7acw!-~#mBrN(^eYj!emIU#q?iQ>!MLKbs7-| z#*LzBhUccv!OMy7^g(lQ_FeRG68CBByEgph(;MT%gH7#ptQbV^XMo-vi{AIIew=tc zJ5R2&a-EawljM52T(6YtGv&Hnu2;+TTDd-7uDj*BSFSh8^(MLQlk2T=eWhGqCD&KW z^>(?wQLb;1>)Yh|PFyql2j>44%Y$6YwCrc*-&+v&zJjp-TM+hlCM>g`Ujnmvd@zZZ zti8}*iw5WL`A~6O4bH{=`{KA7oQwP6ByJV_<6p_$BY|05Ka#}D;Htqnn0FP&)!2T;qdo~JWbXtj%;5sVUWJbUdX3ojW4pHcc{b06fAU`;z{k?>J5l^l?|Gi$!^Fe@=s)i2}87hSW~SPi<=nK}7&pd&5T1fSEN$2X{tJ8_1HB5T*j zcbaw(R;1&lYp$(x-MU$`BVY=1;wSBZWDQ%qW{NkL05&Eh4k>Zs@0(|2XyZO2xZjCb zTwd=!HfTgwVF9^~m6NU?)OSF|1Xm9H9&KkhBx;1$?C@tX9I^w#s~SGKhY3paA0SvN zFYz-eh)?td$lj&S9@DS7vX5#@!ppixgvA*K9q!26@ec!i$iV7c6hiSX{&VO`0f*!8 zMr}kDti&2Fq1Js#b>iJM*xk6!CqeboZTPGuXOk-me0^uACeW?wA!MupBy3{@B;4}| zAwO#f2^cmZN9WxAas2@Ls8bcQON4dolIcZ@#YTfREd+Rmn|>*7kgGwiaFc63^kqaFAT+LdG4F$QSIn}UVSgDGg1c9g@; zOyHYJ{c@?)zNysD)k@v=JgM??L!BDUF<>`Rp|h!=0!oQ3N8IFKgi(p14 z>txggx0*L`G5N6>!{<_1r=^SWo&-ymaurnG<7Mzd@;TT01KsZBZ~8`VT$z7Ast?0T&QZvhe;D@} zsOjxK$W^~Ry?r>_r^0{<8qVsYom4s*p?nNXVNDU%h@tt^oGWpTWSvC-(u z=>DRw;8HKaiw#W&XR*7Cah3w+JK)m}ewk*X<@n%5a4%fvAr*JxUg}8sN^;&+aXdG= zmk~`negxn>mSxWGkvfPb+JBGKpMmIwd!!y;1PeQl2f+Gb9#+9Vp+wp_oc%RAX4|&! z<>(}_a#wqpqfz!*&|77?8xrZ{Nb@+^%3}laIF~f(Odfr3yaX3V;Mm_{YP`mCqxbQC zVC10pUOe!d&RR=c_rl(7+G>UPQGUj&oNL4~-M{+Xn2~51{vP35319X!Pe#!fG00(~ z%dwthNS{j0s%D7g!c2zzrWtyT1C37OfbYo=`K6LCW26szJ-4$0SW6wHPxKWB$4t$& z#1b9LrEeQeL=to{iQK~GlT>&-zHk%Dq+Q3Tv<~b}l~#zd#Jby6cxJiRPdQTX{LJR|=_J5Zf+Z9EC9IJY9r`Jh)P7BAS}jM0^(2pbeaWQn~#y~PAE!gvxv zdm9XA_323~!jjF92orH7x&vu&K>a0kPgcC?T+7=y0R#0+Z#(l^j)A_n=^M1uEy>vp z(iR8rXE7~P_OrZ6GRo{{Q8>~L2g5O~Qs8_c52t~-2J0OE+%BpP$vQoP`41lsz|^J# z27O8Pi^D8Xe4=pPG>Tu!7i&J-+40**DC1TQarjq)+Bt5Il$VllSP!M)R{t8EA}uQu z7ck=XmI()pG~9;qa04Utu~ixq+)5ETU$|pLKU-vzr5F`_ORz2YmS9)#EynQv)$b8C z!~5iVhcs>J>(TGapSEp`Bvdh!#`dW8LH8Q>#G%TeG(I>ERS=~mnK;9cw=Q5mGEWyW zZQSW1rj3E>^}NIP^&5DH?`yhdq3>(Da-r{Qx?rL2Yr0sW?`yhHq3>(DNTKg*xLwhxYq(ymhmzeVxTxH_O=@EzY`G#;WISWvrX!t9ss6zPeeqs^@KG ztDEJjdfry9x>=@jvCT9-c;3$N^egg7dFp0a`Vsl0EOoOSr6r(gwJkTxP%fmJhTL?s z{8Z1|%1<}TPI%r{cDh+^K3dy;+jFH4NF1WW^R_b6mAm03q!8hyTgXc3FDWnZPy96h zJH}|~%hP^7317&U;=e-n-N#FhFGU9KlrP^(;h&22q9j?>)9!$^`k;oXtnrsK~tW+-hclSKfGTHFLr%Z#=n=IpUQ! ziZ09K=!@Po>>kcS064kgP1us2Lp*NuwImFllqR_qiw2g!{88X<`IF0u98CLYgJ z>xowupCnfTZEUX)*F!O_;df|ek|$+ZG(yD zvY#}iNpGGBQLGG8q9plLY@!hEsTrE|!i|Yyf$bp*Wo6EL`KNWo+Sy{{^Pca}KgyQq ze&35oVHC-+aE`pBp_n}PqeNqX#rV+S~vc7RFV6$}ca>nh$XOAzm! z@|{N`{d4W~>a@a%Iw_2Fe6Ilr#}NRk;sG5e_GCGsxYaROzr>uG9lK~6~5Z^cl;H2bsTug7jMT;@utrjZO7Lckfb&_u#Qk)$v+pBX=;(_|R2BF`gmwLj7ySSat+EwZh43Vy(r=cWAt?d$ zd3FJ$E|q2PFy{=Ndbzt;u~WjhowDFj&u90a$WGTU`oV3WzxW*TRK5uL{{x9mCSA(w z%Wi%8;pMT-t78r&WZ!H^u;X2bjZtT=J{^|FH=kj#5MddP)=Hi*YkDqbZ2>2zA8wZ% zvtFX)mUrC8Yz_>svA-U0a@8PTd{TRz>hww0SKtROi!Jyt?&pBptT!=jOlDH!;yO#g z?!~AdJgeiyj2}8z%iSvIp6@ds_Pr@A8&8E*ma|U)&M9|C^W6I$AY`#GN5VYX!f}rO z682Z>cNBY<;r{a&)J?26WOjFBFg$}b7}of*yIV&??(PU?sDajF(Wj z@VFfl728c{vL@mI50Qazr_T8*3`F4hkgcN&Z)gm{%a&;TLmqM_(5`w{AVmKN}y+}$9$)u)P zO5OHlj)9F#@MmHqn*>(H4@&?=H?KFOplk`LY9LWQIR-Sj1<{P?m-=djgSc1W8=$-} zg`)E66v8vQ1)Qxkb(2QkZAGT+$#tq*5e6(VP^my$_P6F`SxU-9AVh}Z8cZfX6pvdV zjV^$0 z3$h(Mu12^#cI&fTJk~6iU7O3|z-1D+jDhOb$J;L_Ws7It8cz3yV;|!mXKCUe2X1^| zbrq@~pT*%)n9DELpv3}xDOTDMhgW%D9xTqe_F1Y6^_FX&{q*fK1WUraYo7^hXIl;r zITMy^pCOtX4#Bk#47mK0so^hh>oZKZKEvS>c*v0h^};2<5pI2!2u`En5}-Y*L8B71 z1PCJzukyYOmMaj$EVn*OGHAzceVV;)ea5lDdl`@(Pu%)6p|Wi^#jTH44Y($11sxO( z5xxCEYi4S%*3x;flx~`^#=d{!YV2=BoS<&m)HPtqg>8PMK|N@I1_!tUGWO(yW6_tv zMvbOp#*1OE8?0W|f^yEb!Q}yky!evMu*la{i%s zV%|%1H=nEc;+1G~iG*n5l{YSt5PQ7x#w8M#0On$CrH>26P znj2P3n2oEMVgAfqT+ItBCd|autgvFjJlvj~RBp$RBY(0s@;X{fXgK-Eza)I2`SY(h zf99oU{>;Fg^5u4g&%W_Oz3AQHnGEUzTbkT+>7 zhw;&uwYE1W`3{+EafBgPJr-p$O@v=F%we3Rq`lP!?HkY{ryY+ny(NKdCKP2K>kpu! zRh&d;hG86nyur;Ao#R`P9+M-k=Oki=TiqsVKWaiTA)|D@*Jiw^4HXRVC|-Nx3f0@u zUQJq&S2-{0S$pFsZq|*MNvfMeE)RI^t?Wd|>(7CExai>GU!rh2p46ewhmB9AlU6oTQR3{|mir8z@Ot3q&s@vIMeHAVW z{HQzzzx3AwK=d+H7X*3HEA*if{eeD|qd$^|TJ*62k!y0%cQ*{5qz_U>7m$TK|8+|n6u7NrM zs8GxNYDBf$i>ZEVltf&z;qoc<*=E^9kWOa)sB;O@(13(U+e2Dk$<^n4`UTfla&;=7K3!iaiLUCe$*1`bLLz}+_aWS% zPyKt`u!b?S@1H5h@uH6^-z}Qi_kM=+qL1bvcS?kB2Vsjh ziek(cue?zdWBz#M%@)N(7TcVG;VKA7SWN3G1V~s+>h=JjtecUqZbrXXBwsOnA^C~} z$v$3sR)zzT&-$^@0R|?k?iRLm< z_F}gYU3pT;3r|}{>#K4NoDy%VL6lmdqSWtjKqyxA4m^YEDZqicUdoC}hlfQ`@7@P5ak;By9;5aZLy6X%f8$>_nU z=cV4+#^;H6zq1G*O9^h6M1z|QQ4+y(0ixJ?Z_4uLTR2b-ER^rqKO6Z@>O+#*k;!*O zx=#*eMpk21g)$wr&K&-;@e0Njj_HHO6$(Csz8~qhL%Dbm{LHwd=N^5K{Lk;{85+0` zr@WjiIpye`XzZfDFW85Z^csh=M~3Z|a$XH}gnvBU_f*Ty;4ujMkknTS3Xm^jdfv>A zg_b3jk6@@ADYa8X{2Qc!+(G^(6H(4bRBkQHIWT`;2$v0!aCuLrIy5Oc2Vif}sY)+c zjvprjSE23Ty%mPivbVw&x@PuhShRq7K}riN9J>S3aC`s4Bh3DVn)7<#@?n(EtgOJ; zUL-9`KsSnB*cytWH$JVxGT%`xY^z+|8f#*ypryQ~Jw&?#Z;jP$P|EsH%Ti#bfbrgx z^6+R>)2WPD;bl(#s2Sz3$ZPOt34A|d;cIg0#Wz+=C&rEjmom@T*cQN}OGnJD@~Fg? zlU>w;)H8Cd0+xBw9|DKF>^c#*%?F267!VUeabo$m7NL?k-ylM9E=T>uM+e|IfIO9y zIQi_8!MBh&%=dN3_v03S%-JSZZD|AbKv%N1_Eff;rB%V?kSkn#ZbN5eR)k`!S7XdH zSU-{GAJ2rfqBh0u3u7w{rt)R82R+UR(lT-V+MMXMw{oti*xk>NNL+b5$26;@D&jg~M#wn-$kkMQM*d^t7q{T4lu*<;z!G z;o?`i+{_)JGLgShvIwx^d8`_(OtG-*uFgv< z4q^ODAq;RsU~~=%2Jt8l!sDnz!=o35g~vb`CD|KFLQPFM&fdxCXo}QI?DVa@qHZ*a zPr|b^5&sKP{(pw6&juV=Ts#EN1@6X;wW}bx-H3M3hK}eKeuZNR-b$-?z&hHi&h5a0 zx+kaCx|=>DdQw;F7IhHii0w^7N*Gu+6>;P+#pQ6@@6YHSnpS7(zu!g+6=~Zdr}mv7rkh4u|9+0 z3+Xd1gs8obmmYlv19!@o7pL%_4qOiit!@Bz7+QD#HtsuN^0Ekuq`i2CBI$Q<6GhS& zNIza?_VJp~?-LB?Wo93*sz`zb6lT zv%bghh4^(5`Nc~QzZkevzPvJq?>Zfni+`ob;man+uW;cT1dhuupK_f0ua5h%7`M{c zWmdTB1WbrOcR9lEoAfWAxPoAqOvVp;UUwWDu7ulT*_oIE<;J)9PeDh=FuUFFk-*G2 zIRB4D@gy)C@6$=Vq#X2(roqU^!e{=UlDO2H@DIDIB`_QBGfBJ*ObyP#{A?1}f+>Mn zn4e4HWngNsz-%f?PHFc)Bd)Y5^o1EZ@dLu_GJQUQYvnJ2*?9j_6i))P@xGA6%iyWO zxw3z;IIafg;(jTKYvCz@+5GQG;$`yJ;3M{L2Ga_xJ0F=&l`x2NJpSLXZ6TeiyLJ1TnS*i8@I-6_);W}=r+`n!ju7T(S1uBpNuy5teGJWO zP)EzM9)#0icvifq7P#_?=+D&XFT^MUEsjLz+H1w(n2(cH1GhVs(M2@A%@5P#S?!;8C=U1L_bU6tOFbqUHh#{!cUz0TCPMdK{*J=7ugdhtp=@f z`IZ%qvotA=Tk#JrV+g=LPQk9Vz;Yf#c_4=aZJ}FOteiSWlfZ*ZiV649C4DybMV2v_ zjt|3&ZW5G$Q$u_P0W@`LG-HmVv}z_2<8TgzS!U4k74K%NR=EYmvI?LntF5Zv;_=Am zDMrWG7_qOfiHu^Gg9l$BU!-{(a>0ypO+JmA_z{WcwNr1@sAxAyfhpTlkITO#-dpej zklA>?%%`$A(1ul1f~)P^X_H7>A^zdhYc!42k+&j0Xy}3v5=L|?1diDdZmsZ)EggJb!RLqTGl1g-8by47 z*IN_aMf8%1?jm~0M0Xjzq|xC|rtZG*S4bHh#05gMKMnD>QO<;U2y@LI!zK)II~^3A ziqj00$XDNa$FDKo!>+i%D#V_+W2cLAI%!@@Xb!(_3C-aQE}?nNrg=4?In4PInpZ8F z(~>WyIS!=*skzBG`UM{3v}1T*sbh!lW(Ym)a`J_$BYuI=Kt;Z-@w%QTo(OrAa+Yyb zFsateGLFown%-roR`m@5FyHROzly_ksk1>ai+>Ly zcWqr*(kGbVVd@HT-H$egFhRi~#;}Quj>EH@eOhs*kcZvwTsHf!ArQG7mF6OS_*w)% z8e#E9?6j|>L3lwTkr^w!HsQminSKd4R;-Wn*~k9(1&_p#JacGy^&1zO+V@Ra1rpqT z{o=3c;m5E`VilF3|2R0R<(=#;Z$J1&DIN&?qk8b?xLgFCeN?4j9LGw~)H?wM6>vo! z|H8V|Hv!>y0qM5@hIV2+MI>!YG!&b9w`R0F%}8v;Qr%z4opMObaY_&Sy$$10~1W(@SdW=vJX5CAI=440T9-Kzpt;maXz5tWe zn9gF4H+2`jf}cxM96@H#q}d`RO@Sn*M)Se`f^!LdAn&Rm6wM(AL#5|u;J zS8V`<3lOg#?T|@Xi#?uZB6;W@<=G?;?!~8QE7f3T?N}N;(N1!KQmp-0riz@;dg0)_ zxhw$0J1H>9yDVuhLa5uV>AFM1<~jS>w<+3-)1+&xv`-kA_G(Q#TAY?R_s{p$igG)j zwjy?>7b94C0v%`vBK_wzs{r9RBKfN7bvJD;bzq*Vvx1m(kaEVR7m3dd^*{2&1dh%q zCbB{(#z zV-T;n+JiNNAZa(WUyB3dX^9`}h|A7$X2)w( zbe3_u)wvnl;-$csZSl8y+TtDfiUJK;G#%I$->31LR(w<6&cm0-;Ml%!Q6i%)vShSH zmW;N@lF`zx0kyfSWq|9DY#BJWBJ50L%*%;-!$QT6_My#dyIY4eSzc?){ic?nmPz(| z@qDWy^PfXar+o9Izsse8sW}QXqBvFyGUIr4eS$@~UcH{^90Tluq)hIHv=@ z%K%ThyPMBN?V(Kt?}<$X%*Rnq>>(#Fyfp7*zLnZ*sE?7$5vSZ;Qr<5>H;i6$X~Vht zn%}}@*X0nYukSRbtFSoJ%yQW*(`+hfHp**AhRziTjO&MRTCAPR2t_CHf>=-LIjk2~ zBD7)_CK_cJNL`Qb#%vfpyzVibMS)yIG_>HJhNt5dd*b1S2To3P5QdSlgAVT1irFGW zi2DF<3Muwp)^#gmvz~ZrzO0_CR;j#0J;*bVq*xDfyTXKKD5nRpKE#=k4!V~5Ohh*Z zwoM$5hNa#DX`x(!9)Ow&bdF@){i%v3uG3qA8~4tZE5qdooBq7==s^#{czqY7sCx8L zv>3C@mBdKMUzxbXpA((IO$z^)z3?%0cD4am@cInLS=4Bi$FFE&cXUZID**L;1@#LH z6x+}iz*@`E{*k-4^pIpKgP-AgZKe&t^Dwn`0yGmB{1tA{>3Wa=lMLS7?9nbj}rXM zDgpDSj$$zW1qqElg!0)n{mV|9#ofsAr&gBIW-mp$T`Y4c;c3a@Y02Vg$>OOgotaL6 zJ0<9zzFNafDe)2T6FV!(i}NSW2l9zK$a-+v0-f)D0EPlJQbASL5NPl9T$TrVE3R#t zys*a#6ricwk5aU3H5Zgyj9y)bjaZeL=%pCR`9#gu@AG+4SmEYfh~ZF)`O(ehJEw}# zEqJNP_+A#DLC;Ie2vbN<XodrE%J6I8Bz zKFS}D$1(j~C?_f6eM-~)XNoCh4o~*>6sO~oO;IZC6It(z(`kNpYkvQ6c=;8jVt(bG zH3is)Pkl!7xHhGQ%9GS>UeCG+#@+-SYC;R$P&kF!cwdSawHM68Ui+hh2BwO%>$WSp z#4FxIc^;y^(?XWd7{R4zMn8{3a4fU8J6l{Y|A? zE0kV2<)&%yzo)rKAHqCxbM2|4dw86#S?)q}O6eu!iZuFh>PhzZA>|7GmR~Osr=#_1 zzXSltlYd%AqAtRBLC-)pO`vbj_v!3+rKgSa)NKIf#s(VT_t)@_vgY;gdl0+_G%CqF zsvP|RREuf9XjZu@ZuEZmYe;AD?sNylcAmMYjIj)}y}0XJ6Abj`PpnRaLyD`JQL zLg3;qJ>=~2Ahj5yQVgljN1=Q+U9f%zVth%7@pX&w);PM?)Jxd+*liZ+?$vZ(OVhE{ z9-@BkMos+HG_h$5lqWgvCwj6b^mEN(Eu;9!*{hJgVnNFE8?a}Y)6xTf|Y?&L|AlxAp$X7xFToOa}})A~T0e=bh9K(@f;(DUt0TM~PLAE2+JkrECt z^4#$&>eHpg^^&KKNk9UZ#qXf#EO%^sTSDl>T$!K7NR>X{Dg(a#8m80zJTGHg&hO_L z8MvS4@%jBcdKs6+DvI?7PBYRTijR75zP5G#0l@Xu!_4{k12EfPd^m)HQ|F#OKm>244>dZT#i`m*Ilwt;T|w)kAwGsnbs+Lz#iAT2Tb8e zTO16>v`m3>X)heB?O?w{+;*~U$_}?|2BR%zFIg5w+BU3k>}W{CZ5Xh;5S@Bi&V>I1 z_AMd<87r^LRbrY(xDgAIv7NeKpxhz=&XbP^U1u#lK1`Y@bjhZ?uzz~2_%OZZZ>JZD z?REf#e1uH;365h)uA{UkFETrct2D!{kVU6sXlT3x8>7ctNH(1|MXblP4oYgeEN54`fv14za&o2 zwenZz()0AhwO{U^xXZ-gF~_8rBK>QSz5|tkE6Oi;Nkiv7c0O3`&di4By{Qu8(+ZxN zhCUr<8%RuEMRI|E1@`icE3zD;o_+pUoo>SJgisDE_!}`^d)CpaU-xz)jkIVAfhq5dm&X$F*`LamZ zgH)E+J(Oknc(yEj&6h>O9;C9|{!o_XQ`xfcHD4A9JHoPX9E#<0vo|gor3$`bl+h8a z;2YBE2vqPb8J!wf=lVFhf;WM7#+RA5AM>FVblc}o@l3@NRs{aR;Wm6kbX!4r>Tc*V zW&8PcvzFM&6vx1n7P)w+$E2ywHpARMY;qjM*ywY>e&2SBSP%mmMF2QVC*X^(`9 zt249J&Me+=5nqU-;bJs@x=S3vZN*#=oS(Gpj?&Z#JJPgqUTp_pHy(%cqp`<&bY`vv zw~n`k?PwK7`}S}!JbBW=v7iD6gm8_CexBz?Bf+Lmn{ClJaaLBcp!36e9sq=`0Hz3A z(4(yf8O(st4#QA4YTK?Iu$PK?U)gE+%(*>;b-&w!A<=(sK=vBil+Y$MrQIa3A%TsV z2-;HTrfpEhky00w-E%gi+cX6Xih;UTs;2an?U7rcJoj=FE5TA^` zi*mxt@U#23+wuN${B8s9?QjkYC4}>sZadsV7?*E8fL|5Q+8@@OJ$Qc$h}NpCk92(G zfxgDd8B{GYb8c1kPmZvL@$hA-VdFvN;ILL8sa{%veAF!{tWdXbPH&^Cbqm#{S%op_ zaNq+@^bypphR?dy@L9L&VauPH#ZjDi!$s=WP}oA<8baNw=~A!?lr1}7nEqf9THNsw47!>Dx#jyju@BRK8| z{0+)`?Hjo(Aag9|SYitjK^N^_qLxOTpv&S>)vB>Xt z;b-&j4!pk!zo%Jz<$jJA;{C12#eL8k{oR8X2}{;x-PsCT`?260kqw6(U@CSV`ktG z15s__w#=|5!Qno;R-Ggc9YsIf5`A3<_<{zc% zPvZCV4F5c*gZIBcfyxtXQ0S54230O-P*pT2tOgb}s45y%wH%>uhffn}PM&E_-ps7m znZ+9}gPM~J_EvM!k)4`*jwCK>H+&diRSXEDW*h!FW-C`8Xdjm zcghnTxu*?-uYre#5zBdx1MNuHz4+O5 zy#?<(@H=RQH?R)F^F9Ca!K3RxK5)8<;9=2KrHmfB?pC_~sxMtnDT~7iL)URbS3}R= zy4?`;n=wHp+mxVuB|#5`o=`eDKPjN++aEl7KJ@kU#)axB=t--VVtSgRip!f4diJTH z50sw&?b`ia3(@m`+I?0$ImCAVp8sk059;`I$3pe=|7W|eId@eY=iTT>-O&i*d%asr z77sg(@K|U|j>SL?S#vzxh?k9giSV)^_Q$`0<9N7%136?VH~JZXwAY90Wdl}tY_tgr zs_RFlDqEbr@jPh7^x5IDl!+$C!*0Y4>+4U`fNoRoQ3Zi(@C*ZS3Bz5(vVejW?d2!E z7$Za2g>X?1yAZ12L0{6XAHvZB5;Fe8q3K%3yckD8?Pb9-uQs`ONw}yJESs6S6+j?G zd>f-3{oHppo_eSl1+BPT%Y)_Z#rN!l)D;YSm%!cs5M?NppH}J%roGLeiD_@sOnV{m zGo-zAdX>fyX$s!*8;I1<8A{MVB!sk=hSR~)U?_S$#!k+4C|0cwXiL*RI$Rf2W@ceF ziyv9SubuP5wc$F5#A_iEAB`JC;?*)$xg8L~=~yJ5j^usgWF#EMNeLSfa~L;pY3u^r zT62?AypI4fj$;FNn$@U^8zsc`7al6Ds@*EQrEDZ~{ch9R%DE=P*NKxj8eyU%wIuSH z&#L&f6AXuIXHXlX4TJ+1R;wh&nxJz^6Uk~I{b(?%OPAGPbo`3;5+1Cu1e5P2=3s>g z^cbBDBO%esFan8ILKTQ$K0#%OFHjjqsM!ePRbp-kRz{x%<S~~hub4TfXR3p z;&-Pz1||emq#O^zpf(4gdM$+N=@DeF!RGt=A^2k(p8|mUFQ1);#17v;-3tTk1KoIT zP+z)nCR{Uh2c)kH!ZqV_Q@6iCo+j}0MtNG6grOx#yr4dQNw{Y2F=N5V6_<4z0cz3I z-o1MPJ&?m6s1gE}n63lQk+F+`bI=J)6c+(CE$>JRNYZsh*ecggi`xqeEnpONe5<@zPL-YeIy z$@QCZ{f=Dklj{%V`ct|7Qm)Rmgj|+uRjy6Bj>vUXuH$lDCf6ys9xc~Mu3fnvE7#-Y zdXijEmFpI{o+a0FaOHXtB07z zm0@D8KIMQ9@O(t*o`hZem>mei={U>;P5xV zAuM&K91nBSajb>u(-`)zYnBaPvoU$@fLogS1qfq4CQ}nunwR|aO;n5H&@2kZoBkHd zb^pqD&{#0uhl?(hpmFz*$5R>3<=T;YbUG5!MU^t?j|k_AP%T--Js%1XUgyL34Z1 z*uG_6z6s~*_$CjvpuRn*ZQp!_VPzE`gr_*yXM5mp=LxLBTb!4m5AnIE$11bs1XkgC zP~HweOAPZ7ot2Yn(5D>>I?_~9x$E=Qod05@om>ss};SuQ*}=7O7L z0uI+9?Qv|2wmjv*xZ#0Y%mQf>bs)h%IYZ}6*j}4HgX0bVlJJFmZ_%)IA1^(=w-~rn zzMPf9e=1XLKhoz%#oOHg}v6qrHV|T7Nli z{gtHkbG&#n@_QfhL#s+N^h)Uq#(in&RIVdZiinLBmMR#j`$WV@u%n~5#@bH^s3K;S=3~_@XWezHTwP zy>;oiDX%kiiQx;?C2oM<$4gILV&G2sa$O1^s$}Qyq+h=nB<1jP3GNtvo=6Ip=AVQc z>kH(jI_e8=ut3l|9qKWFqXg^8qX26sB+b%1VSzim@uVz*#4B$+o`In8${RfxG7G%& zX7_SB{+^zJ=_*JxS;BG^B2H@{C|3c(T^=F1ec)xtnJB7|y0Xx$9S-6AF+i?S(pN$*nTznQrh%+*Z&dwkwrpS?uYr`Bbm>u{!xFnpml zvXyOwm!3Alz@75t{1kpB->0SFnS2?(P`>9gUtW6hW#CTv^7IrwrslL^3S8{+D9zI$ z;VhkFmBg*1SkcbY>!aA!iu=e}w>wPg*7gv0B*T7~J;WW4$KsK= zhj@kq4B5&C=TZJ1`iMjrHW}?9;&_C*W)Bg^czDd>y|WJHv5Og>)8(9yC? zflhk`D;=Ny2Jd%)Zo7_#EeX$XXTFj-o=G6d9na*pV1Q?O@f0-h%(4nDcqR#i4tQp1 z1v!h|4NobC&n&#)iD%*|$l{qS6NK?h;tSSzCiR5{cqUDy2x1dka%MoJk4m3OhF6bE#^iywH=NAm#(bbgZ`c+tmr8auP^tNg%=KAI0+ zzYp4H&*AvHqa2DRHFK}4&)=|NI{Bu#59u9dFllGcKCcG4(oZke4bDRC=)zx2$&H=? znBCIYI#;TSR+ugKpc=VSUzGS;pzcEeNvQsV35PcwZ@sCxO{`Urpj= z^48#7-d`(@tHHUrUoVcU!MV8KD2}Vaxw!w9#I?#VfxnjZ>Z*n6Rns{iZQ-9W2DBR3 zbyAIBij65)-7_8xY|pN(TB}~gwC#ATsbE>}X6!FbHeT9RoAA+idu-2NbDjhEUjY2v zKEq6ALvZfkS`JBF%OR<2J0x{&Zw(E<3U_h=5Dwwq5=XntOrDBm%Da)7=uSNKUxj`+ zbfAETE6kG+7p>hBwJe;=yn~&P^e=k8%$F9#6L1WkSV+XPnkHg75zlIrSb@}pmy?lI z;%6tpvr-X#^5tB2igCp;td$wr^e?;p@p5rUAR2bDAl<^bELTV9HQ4Sey?(i{w^}w8 z8_#!Sjh3rVTu5kZ3*sIJUfn|)WVmA-8G+ocP}{7TmDI~#nwQovs1V@_3nMoc^@ka$zFf}s%!eyPS<+c1)mAyr)5xotxu}!5j z{==6dEhH_man^CQ={yGSUnLI&W;t@PzSG(4Pu&Wc3T_|Y2N9obI4Ut5$6s`?FpS4B zxI`{T6+HE3naPvuep{?Oxn7s}-V>AH;fk!;ncjilDPw#MIE9PSexy}t`e|nZr54xu zk~9_ZkNpzqdk!vU%LUFAOxWH9daP01ZrQmLaQ{up%JzaiY4jIDzYDA@rp=`Lu*5Cy zdelU9i_0ha!JUa-44AP;+?&iZEogtwJhL;2_VJ~{Syt>wcYpkObnfiv*7#*HUS1x* zbnx=Z_+<<)e;B`v&+U2~I1#-H0r0@9`ZaWVj-3qtloaij6<(asE5!d}pIAEmVHjGClFnafx zC^m$X`<7r-@GZfh;9HEv{i`2`g;~Q7>{EBX$@(QSBd2Z@|2TD{$i}G~MKVs^DC}|S zM!}0yHwsmpx=~=l)Qz$brfw8;8azq&%bZv7qK`7KqQ3E44Ch53&3p?}x9{=;FZyUc zVCwc^e&9tP(;3=V_<@(1eZ1-if5$3^6EojT%&Iy8!$fV0;dLxQ@*&nCzXRnzP>IVA z%^0QREwt`dN+5&;+45ouAq^11+m>r3gj7NZZ=0W{#KJ3Sw)rBZ6<$fQ&1Wmg@Jh;U zK1nHuR}ygZTBRUfNyyC;co0%5Mg3?caPH>Tj#>l+RR@UB&nW#n@GZk5PnO#dnE27+s9RIX&O2(HhYyFg&AgWB5Y) zHuh`#ct4Rc})r*vM5>Kv33BLIiDW&U;IlSB~TF;2laS z>!x@VA_YaSBIU~6;54qZ!^&w9N2#vmiOT83p zSdG69$}8_ce-b)yn6Ml%yy%O#Hc*ua3a$}!UOv$`o*UiEh^B3f_l+09SxjB(A7$WQ zH@qmrUI@H?Ogi5HYaZyPC*~S{^mQ5lVy`d=^Y480-RR$V_jU!8%)ZU%1H%WsZ{Y#a z)IN&=-(bLm2`H@t?ATTxWENR!GwvKKF^5a`3~$2wSyuS{tKTStAMv{y;XkwR6QsU_ zY$EJ7sYfHYa1VJ4_w}U%YwgUSvVa@M;ORzL#*vVrnK zV2)87sC*Mq-SRF>0_w1SbatGNFW&m5SdzBO_k01Fd(yr>^=&kvXanL!e}_x=G2XQd z8ETbl(M1qSXIqupj_r8ZHXF7ME(SLig+m_pO3so>%@&--u^}YbG=rfXb>K67f!B#{ zMY?8n3HJ@w8-6?R+YRVYKa98b2&S|nx_r^9RQJz@buVZr&{_{r7{v%sY!p1OGJ-P( zY&^vt!Ui9z2kL4d+x8E*L3Lf=uM5hkK;#4e*guScrc3aHa>IeCo^%;;_%y=n2*)_J z=>FAjGkhpJ*C6ay;6vygT>NZwJmDfYE-7j^S>cD?4rqGo-N?M}fIH&)nwb1p3M4;v zTtGs3Qmcsn3dNrXixU5#12sjzc>r=f(6@013Q|{CU!dnmaF4^Uz(Wl`#r>VY{r=VO zmg{@u`aZedA=eMd^)9*IE!R)U^)tA#|7M@HopaK8kNsw8-p5VEEl-6m(`TK4crN^4 zV02UIvPXgQ|;2jrQ zJeOd~`FRk}$l9z!{1ZE!bHQ^%uZ;Y|@P)>|XL0=FrDyzO;7<8+p2BB8S4TxI)#&fR zJ>_M{AI>_$;dleWuo!3$i-C449EJgR3#Qx%FeU zWwUTi_6m2-FC+F9H0^xgfZor4m)`xOGJjCmqMO4ws51ja6DB``L;f)7LB1A=%Z$JE`15Io%) zXb7J5w_#B`sIc$567>Lto5GKFG*82i^>78s9*48<_#ONxU&P_)nH>y_&gby6<1>66 z!tTQ_j(`8^FG=NZKp%N2zN^m@>Vb6Qf88rbzgmJ(hNFl$VR;KuL$^^zWrc3z7N~O) zCoTo*<5GFgMsT#R?&w_PNg0H?Fq8%BDSggRhVoc^U^l!$zM)z3Tr4tP0R8 z%`R%k;t zn$r`vW8h~o^l*4m3bnH_v;TwIcF83<1l!;~4&0list}4w81@HGM;SbpLG)+n6>zRI z_Wzo5o!$KqX^9&^zPuj?+|DhKToyIx1vJJGHTvKfeB4p9-S_;^b?YgFsZMrNnJ7e`UEREzxtG7 zw0!S5W1U^+D{8`n4S-|$yX--c6^XSQbPk>~hQt@d<#L^ENIL`^I%e~kRWcrk=SC+1 z3u#Ft4+LUQO1J)DweIHH&GQ%)c&-EQ?Q%6JZ|g~s9O2GJvu;%D%^~D_;$i2TP0=S` z_MiOgAyRY#GSoGVWPQ4yqc} zXoMr>=w39LHJwIzRF4ZBX@tWrb`U%ol8*XFsEdz;TG$%kBSFQ8pf3CPWaPB=^2jV0PW4GI` zaGQ~WG~0}ZL>gl7S5OwrZq!BA2z3dVx2+qc^q))(qt5Gt_}Sr*P@KQVk5fB4{6F!IIZxsvAcn(mrh)D&iBJBF;=TRfg+J`(3%OH1 zOzxD|jSeluoZ2Dr=6ulfPW)^hkj~`S=X2rr;hjAFVL>>ATL%kU2^{($JON<^W2w0D zliFJ}n3@W!{hqE%0gOGK%Boj%j}EFF7nnEytT7jHqA%&VQIdId{(JOAO;3LwQ^0#v z>d+8+XJb|1LqP=ZBN%t@m8RZgQ|AGbK{FgdYqXkr!?;5k?rG}DB!=7fF)cCPg`^#t z2IrvV$vdYnrm44P;CiDO)T))Rip7I1Z0JMU(0ys>JRmbDZv}Fc5a1lCRJ%T?#%*1k zo+wPys9V{#9+==j+q#FgUP-D`OFt%U-9$!@5Vv*ChmXha8Ti@th8t5Z#P8#|@MU=a zFn;J*GVy_bhm_y;wd7v%%5!04!nmoD_zk71wKf*hCM4s638BQKSd6tAzettN@`pLJh2)L}x zg#vEU@*Bt2oksy~M|j6F&bX>*mhglLE2k* zkT!CFQCTFlA~X#*EE=RuntWtY(Ixfb0`P}z_a*q*{QN__UxFX|csu-5yt6&q<1XvV zB>2O6akRz%IGpw3cq^RzJRR?2zmfbrghBn#xS1K$`!G}exfz*j5HG2({~msMUVao| zFgwYFFULE1cT_<*$JXPla2LG19AV?&W!x}Ti{;u4v(ht{#7x@bOggCGoHI_RwQUR% z0VqREATR!9$96qpJ^Ds019;B3Mk|OHeO={%zH-9X_?^BkACGb_kvck@lLK14U61xg z*{-JmsptQqQ*At5iK~L8+5(emcM$q*@To}oU3#REiaBL@C4`Rh#&j`hZ z7Q}^MD1c)^$_#M*$&P0@Cp17Ew6M^S&IB?eQtFsaCJ0%f!K6w09upZt1Nah;N$g+P z_w2{du9vUD`xEi|X)gRsyx)zVEeEikLIov#PuHrKaX9-PZu5=dldtFCed0HmuL}zq zhsM&ZkkOB&>6~v6KQ96wet=)h2l9vf#M)X$W?(q?zjG`hU+wq|CqGZL!g=;0=7i2t z_CHx2nlFts(+z3Qlo1aqa9h#|Fu|=*8qsz#SR8?#5ZCXtpbR7U?&iCVI^OwB66Ti>p!oP=i)`xukVK~#k#xj9J-e9r* zzYTACqy;mdBM+osKQz{4WCfEX&&G_bFi1ahE@+C?^n|8tlce(<_Z)STM-{L~x*PJWP8 zCjbAOmv04)+4tJKx7mxBIX1;%Xa3|%l z{IeOfqx@5(H+ek5sdLNohwbtUx$wi$k#Y^_F-X6H+%(JUCt%MKF;ygfq8**{2-|L5xQ8jmM|m=M(7=TW(=vaqN&P?Az4ch!dc1+z6W(! zR1_4W1-*zYz`?_E^}uQV%_o5*ZNJm(_{T4=!WrB!Jy-`m79VEBLhB8%LTFa~6Tb=r zsVWB@$t|7ZN@i6oUB$L#w}Q^B_aDN~uHXNJckH8ZHi2?+`2DNz6+54=$@QCZ{f=Dk zlj{%V`cquhHfJN!uadgGo^`u4-^HySI%n_u94)eW(MPe!M)9X0e;S`1#~|%at|3Vx z*a9&v9TN}~UU{>3g>qeTbta9gN#Id{aowI2ietQ9E4DUw$G1GAjJQFlo%X%ty4mj^|b9wUV z)1}F$4JGy`(2C5!%y1D7bDi7{jzr24XyyiTq*Y$;m&T&^VExbHioFl(V&u(sMxMal z0sURgc_E(H72yM))n+p#Ok%JoEGUII5HgQby3?n?942(DVt&{{|9$m|$g>zr=msE! zP@eSg+kxM6@r&`~*p;j;$94qAf-(&>TGUliM%RhT;@7W>^6(tl&!REtdNt3@!cnQ> zG!tzgP9*1y`VPn3^+E&M6Eu7m6GCpw>>`U}QsS>Eucz?`Y`CS!Yw!SfWaWBg;>xkh zK8-fpta(?BRTDD-Y1^*=>2z#cpX*NpgRsNOS zJrbDRFaGaE@gy)C?^{W{xNNegU4v0(JMV8Najm>1FdOeXNxTe94Hnz0v~8LFkkRY1 zoe0Whw@<NeWJZtPoK78kj&MNMm<5FZ{&}(r5(=xYPNaOzXn+R z8^?8`fmhx*t`iNs z^2TwU$l;YYj_bq@ue|jg*9q8F@EF$#*H!2k*9q2D;275l)m7LS*9p|kgGRf~?aBNI zYKGX7=Eik~FEp;R8SdkyXIy9CPWf_I4Bx6h^WOz-J>$9rX2zrW?-j+9z-+wlC-E|4 zum)$xxcU2%xEz1@2bn?wvoQZ7iI;(?!ACr<>-^xz#&yCV&dIp`yoJYgjU_h*iVj7T2!1hDBp$HpJfKjcy#fHOPrt3 ziNcvEJ;oOnQtEy2*vUcGjGYp*a6IIQZ^lCdu6W$!2;UP=$HN(5Gk82aBgHp29zGI{ zOvgh$>3H}RG`Dy>{F-^@c=!!IXU4;Cny)e*ehV*|@$hl1Bl)x2PeV5S$HN~1#zNy^ zQbP}CJXGG=<5D>~CpR7nzJtd@gT0K0KNMUCjE5q0T9pfRvx(XcQA)&eo8{;8?x_QvOHbcinxmP35vBkmRWkh)hOesr%Oc;?(Iu$=QbT-+=waN4V=xLHgd zt#rUiPgz7zUlkEo?x{-!!NV;?qqn{WD~jtY!xyTrXRyBV(oq|9SlGLQG3 z(+pH*=enQ`!xdO5-35eO453GEUK-OSCpR;EA-bPQy7SUQcLwg1FUw;1Hr;=Q!u8Ny z0<(1gc~LwG%*OjgQ9KFE#`|SaJPFLk`&Cgq3C#8rM49~rQDQ&AEYVL8BKip?c;Nkn zz-B)o4^}@RnX#Xc2dkf8?$S@lgVj$EAE|15NUIw0V^tG82lf++ip@Ve zr@l&Hw%*)d6i))P@vsG@7oG%W<1H$RCxNVo)IDlHKvY=&m=)?DA))>;V!!%FFZdj& zV*NgC44x!?n80H7k_W4L5x7(@d5F0RFF(vqsuv&9>c#9?y#$S1^%A~5HJ7KG%@XxU zvvlyc#W_RlY#|H``R$uXaE^@!mM)uTtT9`Vvsj~KX9zMK-nx9d>} zBGB@gy)CuTm6G0<-bFqIeRRjprA|lfZ1eYEe81%*Lw~#go8n zyn0bQ3CzZ86vdOkY`kVsJPBmHCh8~uO1p;;Z|9@ITiH)->09^#VRqbBzqtI6i#yye zE25=eUuu17zO zeYT|ogW^KGQG8ylGy=L>8jb$Mo~<{od3ys66PAXKcfE0DY#9OormdUeded3>kuR4U zeSU~%{;5(5mQPeip>tKg#BQ>GGWpKskjsGRq3NlJEb50RXB9pJ$y{?@d*Z3L)2U+F zom#6)@flX#fj73HK|?F1UDH|DSvMwmdCntT$9X0qb?QCXG^-OAKZ?5fAAnZ$pVTQi z&ZYQ00by^&?+k>!6hEG)2qPtDFMcPRIJ9@%fZs_MBj8h*0W1|SQ=gK#20qlINnB2T zIKED8uU>ak{Ui+7c0>`5(}-aj(a%Q2D8EQOSP8^`2QmiY0X$k+i};d4yd#bH*V%~R zsSWXuvR|%t}5&z^Lq4FS7rZCA%;A^B$X{1ac zlNW6L6-a-fkurr(Uf>WwBE486Wr&izV4pW5b*}_MHl>p1ntneE-)-t8&swJL(fFQH z)S|8yC-2jhe&|RmH>FM?slEr?-32K1F^QAVhP5Gii3#;*5+@-ID@pPa)9H64PC^;h zo#Z7Z(^K4mR64^QNTgNn;m`=fr2NSon(F?Wm;S0?{*s1Q5o)t}0M;kqeUBuQ{1P|WQy}3`#i;U>NqHlbB;-I z8*@xb)0ksYSY}(B0ur&cEZQ1hlU3*Z>0##ZFdjss@oMI-?v1fZ-H>JLxDB!cSKBb+ zju|CyTW&|FmI5Ix%og_FS{{V3SX;316(KAcLU^MCVHOatyzziCmJ_eM@qjWG7q7fg z?axxyyt`^|h zqyVns|8&J4t_7J1&blJr@F~c*8O7dJ}ek_J#%IT%H%4#D20zoZFH)f2B5l9%3n~Y%DAG5;6tj3U|MP- zcwbPbsxVxclcc%@0pS)y=%Led({g0!#PEgaL}6f`NCf$I&A^@V<+>C;25Dy-j;bil zb9%$}$>|H)Cub*UpPYR3YoGQ>h%CdS088sAVS!$}vDOnLUU_4!CuqF###+xT@XDKA z>s42MdIqMeAW<0!%TKvYITa{Iu`^q;?*(jh}ZPYVX_lrQ@gKKH&X0j~T@Y&Z|Y4)h!dl}CEM6k%|l zoY;#ze<6Dj*EtpV&U5@zzky)fS!yKmYRni@+s|tbq*LR8wx8<(kLxg;7b`wCU5vju z&U=l$1hY{&x*#6?(j7`X&a->sm1X_uC2+H-l6@U3g|rc&<;U|;Vo3icbIS0n$Gvem z2RPKYGy=)TtvHyQ=Hc?x9$I8R&qji_n|%kWW!vISI&g*Qj7-RdzJ@zo- z9)B2dPdbdaryfS!Ed_D)Or70Qe@)%unL^J+KqGVxE`E0jb~Da4e{##gG5S7KThJFW ze%|)wv1rl#ZC_r2R=$w!OVZj7$Mz*|BQ?|${?Qh6CTII1_zt#xG1!ak%gY7V0k$tG z{H*Ou8gA+4qsJQCmmYgf*m7!$V%wGUTaR9hwI7F2#^-g>-u1V^ld1cmlrsAU>)s8c z=)GX-w8+?X?L~~vM(-NPf>*Ee!xCKOh9%iZ$Nqyh=1&2f9RTY_Ct~nfe`?gm&Gutp zbY0D=z=p@#01-M>wM)JM@Yfvpf8@OjoE%4W??0NJ>3Qz#&dh3dCCk$KA-N^3BwLcP z02{B3iOph!A8WHV1{>o5G6G3nLk#1!odDq_%Y+afjsaudZvswuKLZIQ1`IKQV50yb z7ji=q?hXHh8$iC_->L4N?wQ_Q89)By|DVris=H2CovJ!jb*k#rsZ(C3dQYdiah2m4 zwUUM8k|E@3;#wAH1L;Jvz?Hlo!~YcijPVy= z(-^9A>l;tV2S=(lnQOYovF>q;=_@-oSr4D$w%lr;c{(Z5v`Hb;9F)k~m1;_cse4rO@>9&^2 zeTH1^1j>371#L;goQV#`fO4y6d4HsPU#a&;xOa5g@xY0yGoc>7v*-IN^+{YMjL%+8!}(FCa#P8@aM&cj$-==+M<@hhs{w12V9forywcs0>G zvC!VkFgA*u@XL$K>;?ag1fX_qg=XmkFhcV+fAcH zu?p~hDrNs+Hy-c!y4?>S(W+6t9@bQ~0!D4V*E*ry0?DKb6qleJlB%!Ps3h4wTcA9& zS>5P4QFdi{#o}d2)R3$DYPvlB0_9OVSRk3~viN;vNhd5iE>NCi{nQ_t`WZ|nyG)DM z&*`+c*Fyb9c@tKX%Z+m9rYC5w(x^Cp#reY-mA|V|^6WC!T@6k<2h(m1DQ;tYuWEaO zuM<8$_zzAg*Bd2!)hj(mHL*ZoaAdn>K}|Y;z^16%#peIhf@fSy)I^^?QYk z0vE!-Lw;m6z7z)MJasR)WE|Dpg{1q({plVPqe>@NNR%@SGMI>$2;|audREysMrkZk zwunMe&_zoY1$Jr5j`Bdcj*1cWmn(|ANU5SA!e6oTY?ol_s!?+77$fp(*S&Vk{Yj0Y zE;KFg3Lcwk#ui`m$XnE=3Rba0TqkVpIl4Td!R?@2n&3<`Hhe!gF>1$^oMa=5#>F&D z9CtL1YUyquuJr+zF6IgQ`;R3`?_pV%NOPQc+;xPmfL-oDKU26)CkiDS2ER*~H>BE9 zt+eU1u!QYum{hw$*~-BaX~nzP|8VWODcc6sRwXJa_K)2P3X6pif^vkQ1hJWJEyL<^ zX(-<;ltdUCp86ZV2W^1K5O%X?^a^ z;L6Te+*Kny`BID74M%>GnG&A$;5nJSgFZZAyiTbz5X;d@Joz@2CCyvveYA@y6_?B% zW(#>xiMuTPGDKq>Ju{g#s}IRm-=Z}7`GBoaLKIk8@;j}3KLVBQDB{0WG)jf<_*|ph zpB(8GtzEy3@SS>54WLvE=K(Hx_Ej977FSr4an3RKa-3Sa^zJk%n*P$;g|iki(Fn;h zk8FEM94S#k5{LNkI}ArMGUu6l=`R>pedL{@LCWqWmp-^AUT{UMyJi;^u~sRRR4c(_ zdMViaq?kJ%eD4~-7se0oH>s5iC6z51Tl5Wx`|iQGu22@K(-+6tXn7oCm~6B>na&te zAhgjEEl?TvZiV-ojTYZ*3B8AO;;@B|hhR;D-T#@rG|W@hhcS57y~sXGtyP$A6|k3E zzH+SO%(Tq?(}+#eXe)kBOU?6?FC^{ZdK-gVyt_5F&)R!gxc2t7-d^U`+i{kPEnl+n zzC85~MY6=t2hSi&YFS6|#H!B4^+GRu#c7!x7|34c*-nY6!#x9$iK?Uw1#6q{P0~pg zdnBfQIlz#lal`gaxVNFT%q>Jq)*cGEqoG53FTu{YgGe&$m-P^Z?dJx zV*!I~BzR!`!P;2TeF+4^Z1kq}W<3E(-w~A!JselP1VQPV@jVY?NjG+*&-jU~0@V&J znf*?AzgEn*jrw~yc~f=jO!uz+Wo!@ZF7ot#(V_dD7W=2@KisV+`VaT$iT=Yk^+f;S zZ}nt<^;g%__IPBqr{91NDiaGC>fti!>?8hu zs60_}Pbn}>sOau~U(I=(+)(8}@~4NiAXFT@dPoaGrNXO+v>;SEyn09rLZ!s3hxUU- zD!h7VKUfsQtA}?11=p34dQ$jXA}GJ?QTIq(+9N0of&XL>m6qPc6I%u?{BWR_w~`{fMCECt+W zUygJ5H3xkXY0jBFl%72rHe56jFFI3R&!qK#(Dj|$=&&(&&k$QSidm+-;<+V#A$K-^ ztu@O0pB&CD_wxQHYV&R{G-1BW<-)9Y^<|^SoignE7#nXzatseEY<;~D&;d}Z=3 zvG|a8i4+m<(pd6g@~?5>TLa^Q*ym*C z2eipVdY(&;KCg5S@mylmpHlH$TGXEs@mx~WpVIIKQp%{mYZlIQ6Y!gl@s-)iTYLOQyzP0+5#z8$n}=#g_@lkR zJ+5kVzS~JtldhNWv>D#T$w_HA>uVL+3r);SUpu6ksqVhmHIOEnAdwcveM)t3u9=;x z>Lp`8O#8MW-xf(6->#UPgDgUJ@!&=Y8R{-cp>~C0s3*7;heeTW;cDE3V|c3&!n`^9~vBiy6tUKBLAn#Fc2_?cFKLUre$lw0 z+$o)9i+3jRzMwoWA$Lm2d`i}pVF}^}!Q+#J5M8x*@}0z@-9pX4~a$_dN2pR9V01|PJ{ zMY5kS58#g!10*o&q>yQ@_F*vn6>;+2A2B1)di=+FGI#nXJ()ZGgPzQte#n!#(?9ZH z?({!+*nB!`d9C&M17sgJntz4UFXmxx{T-cIxQhI{b+_`#z^jL*WugRLJ(ANh+FaiDhkNOJE_qhgO4oC#GfPvlo=cor zno{*#+RW0FsOOSqmZmhZ-iN!5S(=i>dY^oSF&0Igs{akA;}o?|TUYOo+GpP!Tkxgk zXqss4moqR&6L6n>xiP};<>sOH9cp9w?(HlAX1vuD_Rs8XC2xOfZ>YBAyB~G0bzVQB z*L?S5JPr(1Cb-f5)Dw%9@yjhk32We@ocR58hM#JWtFx=^3(ImlAmYZHm@xCd4zZK%95X#w%xq4#4BpR z^U9KVzI3F;@BUtWz}D%AYo{rB%`5FHqVt6SQoZjT%&+2(om!d?s4u7F0z1I{DE?Z1 zUtw~Ag89D}r$;9ynR9x{^t7ad7W22c6?TAlFqu?3Tfi@yH&Hs`VUi<%-_p@MFtoLK z7IVgf0Q<`%W;HtZXeeoCf+Y|CK_V_TxTQF$8Ry-Du{ldw+PJJ^V`$0J{RaX;Ns7L# zj*OpSby>tQ*%3WZE`dzy*nihUX8M3DNjE9$lu%jX(r*(kQqB~wQ+a;~%ycr77fJO} zQ4*5Mek+j#eYRxhtp5>UI4+Q%P%RYws`Y={3muOQL&c*>E_Wej4`6mRC6iJyzKf8-=2|!p8PwhOoIyefeE%kiRQ0TN@8u@z zQa#tpts*L@mk{z2C!SH;O|5`ns^he`F|N|RQEeUht+ja$s}@TuE=RYyGeccARrA^4xVBf=upOeJm-`Wz$*UB%>$FEb|S>z8n&gu5O4QY1zG3bxir_803dTC!f(%T~lcqM~U{m#NDPb6@a` zzr=2Da|tV5r0?mrN8TjPdp{_`F22s?F(a*60>)`&<2r{RpnuQ8v8mDOA=~Z=4 zBpHmAZ{GHBFOZ#PN;i2#ewr!VDu4AwReyToyWi!A%CH~2i;-+&DL);& zlb49*$5=@ze|~z#V}ulyG-eu+Ix0WTYIM&T)x6_}a_2AOeo!*iX;+GL6ogx@Snhqr z#pdHiTlA+?+;&T)vo~(D845XWd!#wSQBzxnwo9(RwTGLf=5VK3X||fpRs)r_Vr!`7 zH`xce0z!N@L5Oy%?QWi76*PJ-cVf&m97RSqG`OJe#_z)p&TS4Qui~k9s@x#D{mIQb zyVK|R<=}V*lH2rpbH%b8oD85->r}RHEK_Oi8dvggam_61APN*blFub8NV7UUQxa>c zoOHK_{xTI+C)tzU&J{nMU@L0m?LuLa6*EV|{|f?bEHlyszu>J=tdLc%+>}zgT80{T z@OIiQ7k@eWu7tk-X7nwmNm}CmK}X1u1R;l;!|YW#LZaU<{@Mn8v(agmn8Br;bjIf}>PcL+nwlRh%4Rpm$BN*=(1|SVYi10uDpK;SSXYg+^$KL)`dS zZ((+7dX08N?#XJ3twxEa=+hMGnW87eEHw)uG3&{;Xv8eg79nP-M@(LCE~MIGVT)^v z31TWxvMol$ENo4-#R6@y7!q@+I9aV=cfeX=sS-9sE}tW(w8Y{-ORO-aG;(T(|I6sB z{z==7x;7VCMPy4*RPC@7l2LrYwL=nsj3sM`j)=8pagc~{LqwfP#Iu%&?TReoRn-zj zyecYTJ>v1Y0P!kni4|HRYFT~6D~By{ka)Ee@%%pG6(C-Pb{O4d_P<3Z_N2X;7A&-Y zs{w;Ko5!uZa8N<@wwgEbRjv=UkaERZF?DQXl)~B=rJ!e?H&)dpSwBa66e-_};Mw=^ zl(+vbGlLz*U1pl!OID{b{VDvl|EDuE(Y${jb^afe#jP`n2Wlk-MeZeon@{A3c;a}o zd}!ERJ9ft%I+wkAcBs;>Y+M1Sd#~0><;hyv#+#Y)YVP{t9;H#;NcMlobQN`oGuy*< zBUz)>9=MUL)oMed7IzpocyNdDu-!;z#UFKr%e6+W{GE28Q`)k*)24T~TGO*Mm7C#Z zTVT=cq2|z<@k3+H!q_Y#VG1xys6uJ$HwoAdcQ^~pI+g{_Wro?Vg6KGmp&&>mK+~TU zTebnR=_@XLee5FL9Mw7T@0-E3kU$k`j%GmGFk}BNqP)gApt4BxiMHsFYR0H9B zlimG_yt5woW^x@++T|S>&Ic@6eTE>-8-7kG8e^D<){K(l-s|FiYcTGvVK0iVS>=DG zqBEXmltt_Cfjnk})6ym*T!;MV=f(uetd%b36Pq$AWMg>te11E@K1i^zbn$$C0H0Qx zhk;LP^DKM=>l&?vmRM_O`5mq`MEN*x1GprGSYi#N4Zv^>v^Xv;mX^S!6>1i)Q=tE{ zD*U|v?C&{?p8fr(ou^&=9+Ah z#PYhx+20=i^x5AYJaI-dc)aCC>sIxrFQZrN+V9{!Fsig@y*z2MspQ>*S!ah`it208 z8j=HeEZwWz0~38K+L&CR&N|UH-B6{|l6fximOLM-lJ>ou)Z5AH1DUo<+)-!QrDwEd zR%7hjh0G)?x{t`(?(fvj0&~86?pVtF@AN%S63{g#`reAmk?Af+hu);1S`4xxwi%0s zFNO8!t+u7}66@oKYK`jI`M?rljr??t)qiR8I!&i0SC&{4ACX)WvqNZWVwBRgBwkQd zpfje|Gmci(mz)fCQ|+p+E#rvt5YQKd5?S5xx~tZzb{w@@Rjr*{Rne=k_CP4G+NbKd zPExDj%cGbJ`#3agA#&z%eycJ*+reEqyQXpwNe2BUk zYLzQta^;n?{!EK`7qK{Iz+?*D&=yd=G4dGm&=?Tq2Xr&%x8fc^GnNlI1 zDY-PlB&(LB&6JYx3wj` zllB689)FGP!gKH1RW=ivF!xw<19K!?di|&NZ8L34)(Kzg8i&B_y3Lbz~s1B z(*tWQ%f7aj^~Ra|?@|Og?lrpaF?e*SKJ;`wr9Pw=ZChDCej536`$oziyGwd#qe|Jt ztA{qKluNvNXroHG#jA%ls+4QIdT66cMZ>E{|9;VvQ|WmwId-O$j^|QiXG+O3b@kwm z9{$zfzRhe0T~((x^W8ZfRc5CXP@YpWN2w;lyc|bZM}LKdXnKf-ii1~=ei~{IyBEiE zQJ{swdIK>sXmKJtIa#z2d?{MIoEElU&Hyb0+-F}N7U55hxzc~#kQ0xcC;wwHkM-cO zZ=!RCJa#lVgPTSsYgetT$1wH@jsaMQ`>fex} z9AVp5OP%|F4tctozjy;{X4WHaZeVvZk;7}^+=Md)mkF*=WU8()n;X!@4V42(OW$&O zWG?_Lz15dOoZcKmn-rR5wtLw&z14!P3(qhc2UgB0;?Klr+`xyygz~tFw-g^q|b-vCJH(?!432F z!DAKUf+JAj-33R4!aKSPMD-NhbHNejRtwkt3V3h`$2K)M<54T7VE#tLG@-&4;~1(E zlG^v@TJ$OBSV#QE=6kqcbIHuyEARhF-cJ+FD>2QPXT&r|k`vRslB9V#ra7~QnC8qK zVw#r|G-sdcm(UtHo*(>z7n`GMj*Di;HpyGi@(aIc`l&CNt1a5Mb^fI9@3~5W>ztHI z)l!*Ss?^gpR{~ZJ_sWJUWptbjU#sXbTOO!D?elGe1~Um=Oi$;=+=6vUN}VDyHeAojIH$rWfPZ&JZcqb zCHtfHsg>1m{i?+1w;AhsEhfYDyah6zl@U&B+`|c{_3Pn;6Sp1+=Xm8#wOe?lHb>LE zQVjN=8Bs&>g}ic2U)h}>@b*?2b0ICCBMlUnUe;E)AzoSv zN4MEU_h=Qv?}g}l!F}h5?5=17*$qYQg3o>;{i7I(fQ+RliYESW5&4`@K9Rob%v;Cu zS&Q;H8s?Kh6wPzXCKDKw^M`j0vtN$>7TFBNRQ-uqJ1W~A=~1LZ5u+mHqax&cMNkn7 z3y`4DD)bd`$gf}t9tN;@+R|0bx`UXZisCI6cWHTm+Q?#kpYbWTj&i&8Bfb6t*X!SZ zA9{VH$Er2UB>%1aH7`NVWAhU2+G2desDLidc zbyhU}nyrblhuTbPlUrPTW>&rVxoB5@&e+)8d0H7PH2#P`hvS7}yKn{5gV+|Q722@U zSS39dlbtE_I={2U>s+~^{G2Er3K+TVaXjYNn)|9rZ|>zV8l5+B*8KXd1w=T%jlg76 z8AB*``TTVsW%6S6QLsIn0el*OGw@CNE@p%$b6gfbHF@_oj-@ZtwHDSd#RE=EH>ih60dvskm8#cHcDu(LSSY9Im|VrP*R!Vo))HQQNiN!T?U?JN!l@`pu0kk=ZT zrVwE(?=M8XRd=G(;wV-%Rua}Y4etoi4DV1V(Hb(e&EkgWoW!+iXZ)e7$)`?+cT1l2 z8UByuUxuENLkO<=5uYE>+fvU9^|n5gtRFS$(sQiOZ6)4dyHJA;+eIp3$gbjcQ8eAv zM^JZO@UkR>X82e8QrCUBYamPD5&wTAAqV(r%t{?6Rd?Re!x%5tlR1mp>&b+R_-Nc- zPwGYPZ?6T{+-dI>$wzXh5wvLK(sZg?wB8r|nN}XUb7NVjYPn5nZ4Nm)L_&G^O0j}E zPXolPL$ZqjgQq?2DN`xH-X>ruVp z(Y^|H4rPG9CHST2aKHJbnpwy%llTVtrQ>6dCXWN{;*?&-``d*LQ1H?F$j7XTV-DujL{7m`nZ?`>uw#@c4AQ?B(37^};dyM))_ZTGL?0Bv4r-RqR!W|&^ zjyAeF^ZIE0nEj62ZxKFPZMk5qu+TMnl3SuMt4W-PU)#zbtps~c@Qpen>9Vpxg1gy~ zEp2GQaVqxC3{La!y5jH)vvCoqNk1V6?jEZwSsB*3pxRdv&_zj>B5#3%*Hf&Su-qCm z^>cw&&h~WGJ>$7&#x&tTRImv}cDCny*~xbKi}o_}-Q(hX1P-P0A)vR3?HCab{SEZ& zM`Di`JR8-cnZEL@3-Kh&xHg0pZ4Pjj@{~Sn)u|OHOGR5(*9w+cz2dR34leA~MPE8S zx*<+eS+W1>vSy}FSZXp$)wDE4TaT$74cc856Fh?ullid?E}mxzA6n-0G#`Ogl3y!QFh;u<$va`3{w*HoJ1c za9;2|1q|zWe8F(RJp_X;`P|`zIoy0b(BYzer~I08W`kkYpJBOr@MC9#5eJvNa5LpS zS8b%Q=A1)gidFT4I^Wl!>f6xs;K(6=h!?|X+qQWY>XDqFMSS62#eanV9(eJ+Ys35w5%2hiz%POLmfRn(F70Lu}#SOS2xPnK%A^p2`#;xu~w0 z3GRj=F}<&%JzAn9)q{xb50*;CsP4)8#;H)N4LjS}Qb%{4@T}ge`eXjOtsry^V{~2} zEk8Q1KFGtmbdN6L6;1w<6RO{fE-79Vyej1NiM|`d+`jJ&Wf+*#vZW{fPztcP$g)Ig zH-2AT$GR`Ds3zs5x^il_NjQSOOgNIj5bou)KX@^D7_H?!_Gqlxoa)Wi5izg!j7QkcpYo_Q_4796I~zRP=Ns7V zyZShGJ{_Ad{aESrJehoo>mum%*Etfw0xs@xG*fh~@D;FAKH#*5k;lp#wP(>td}o5c z>d@6&Y9C$|9XBpG^L%f_0DUkr=S)|`Z*?94@F7mr-epI!Sz*~>Y2d(Msb z8V5#$?^2(Ws~nN52>n?VYbVaFQQptF94bHsb?jeNJBfCI6+L*3T1;0YOnl{NqaY)> zjkmZl#50>cm#giyS^pMBhiHKzL!$+rF+0sVzR4M{um!TzdJl*_9fG2xGt(#queP?y zqT~bi1zkgHwVoe-sRZxiLo{a1QpTr|o|kuHR_&^nZ;dx_`%A+ZrqWbLxd$|EzLPb- z=36Ud(lRSE^FSfePQ)7(O>rpS;w z+v_M=uR6&?VYI&S7`DSPM2fEZ z@>2BCb3Ix?S#ptTNunGUzm(tY@P+ahj#_XKrB%gND&>D-qWonxNla;tX18&z%3ti2 zAAN5tKSJb5&fGW(45^?-fl5dL_C3=SsD>Yy5gOB}Xberz;2O&H%0yWs8oUA6yAp8e z;fiMca$09LBY3Tvw8ETDm;qUBhRsr0;c~I!6@*zq?ZNL|JHp6%@7hsw$IV@3?u5C= znj4rqY3}jnZZ~&_xhI=DW$qccnkOyG9|h)vbG|6=NY zgWe6``o@WTe>QDmZZE?SN85rI@bnA8wR#kTtM#CLJkOrR;2L}S!F75@{eKu7>R)rO zgMz~G4xToqu_LAo@be~p&o+;Vq_KPt94C zlS(CXIu6^|obCuc4-OylH8bFoYnPhR#q+D=oKAGP(&luZw0e`iz1r4Q>Vs7_@`Qq` zb$!polY9PE%CZNK2xx+4UZ}>iez3A`qBxbip?0ud-awzxv~Q-fp+utU1Ns&Dclc{Q ztT`QiBVz>L2ux!$Jc9YE*kan@P$+!o@;psCrODs{PaQ1!$2suag&k{xc3-%{`MoP%8yj@~{(F)s0s){qcpO{5`?up5dZAs~6>j zroUp_WOgd=R+Oi^D7zKqvp7{wdZE8@0?}w z;csa-%aye&FK+m=({HSdaj?kW`Y)sHQlm6E-Y6wV#6i1Ga3(ozmvT{iat*xHta5y` z+$`<+7izX$JGjQ0db`nT1ZwN;p@UV|*xU7k!_A=$jWTC;Z0+9J(5&0Ir}lIn^)e;xVs67=*UdPY?A_x!tMu82}qkBAF0_beKUwd&u`PX*JyO^=4>khgo+&X_xE z?j`14hWne-#(&q^`0ILYoJp3AtDB=Xt~J$tY2$ZU`82LR2YS3vZHIbz811^I^R-u| z8aPVZwD2t?!GS}6&(ElyQoB-WmrIj=$>t`oEVcSb&n;^5y7Nc;X($>1>jw)JntVAi z29tblXZY`L^MYT>zgJ)1PUZW>3*Gwjjl=MPKO9=iPe zg#6sQ_NV6l%-o-w`%7H$DQAQ2M(8#myX)JJ)}H5n!lAeDX;yU6esp9S#c&-@TRA|O zXwT8@jcYUb6}_0L%^RnXq%|P>`?*&Usu=4&d4-B8ok&^b<-Pd5&8h+G>(blX3!YaK zI@-T!c}{DN6FSS+Gvji3tCg@J#GX!`ZJk~0=t`O7Wr;MBw~o#2K$uYV*EE7HyuizX zZF+JMh#uwOBt2Nix_uRr@160KI@FsG_`704qYRra+SA2&!-Do>v{(1`p8Xi@X{2=2 zLbaTil6$v4^h}QX8vNc)t_hjng!Bh#qmtLpOwtd~8uFI7ylC^g^6o?vey23xaYkl$248?JSm}=^M6{Mx`QKpW zQ9LrOkNeb8RQ^Lm87%*s;_xcJ;`PcOM^B#a87$8r!*p<$hZnUgcK2Ub*AwNmQj^4Tv(! zoxtTKP*Lu~!!%g#ZRE$=d9U7k<=)Q6zH%!(nbnuWD!0O`+%SPo=xO2T!Fd_)_U^ zRJw8o(iL!@ed+Y@r_!D1!Bgo9zErxCN>|Q6x&rRAFGuz8r_$ZngQwCJe5rIdDP1`O z=?b{dzDzp&l8MFpQon|siQRDS`)g-HI3zPf9mRgvzn&$8Q|Y9gC1sxy{A*kwLKv2& z$Uav-r*TR@Z?bxDI6oGAl92c0JNDcFT>ChZ19<%Pl8Zp_n3s$(cE=K9tkgr_1#`20lo9{<e6^Ig;hWWOH1;WFL5fLDg?xMqWNl9X)8ak4|7Mov?i* zZ@=v$gE=|5MAq@XjpTNZ;r~Sb;$Nyi?b`_c6#kkwOZFett7Pf=g*F*jb-L1P4%_z) zdkyZJ_Pln(2tJ~AYP@S;Re}98*-=`J8Knu+b3V%64-HFpI@xFzCQRMA$(ct%+Qp5l zEP!b}J4;J4-xpe1Dz-4#RSLF3hq{jQx63--k23TS$NiBj+rfT!uD^~_@=U9a(sPLi zO3!6edNztS9KCXgMdin$R%y#AKBxQZ)3fZS-DKmS2YTc*qiKoXuX z0ub2%kS?!eRd3^;tmE79zl8rIshcGHT>Rp_=l8*NHsr~`p2k1o$r@7-<>WqUbt}Ff z+OW~uMOCFLm0>7Xt>ew&0+z8*=E}B=HG-_VV0GzCV?_$=!vhNJjn*)A*>DQ%jaY%* zs527P<%p3j+(5-*7fSEa!9N*R{%*<;4k7KK){v_Uw(d&@r!lgo+HTAAVY9GhU8_#> zBkF9Br^cI@Jk;k_eXky7^{`pk`kf|%EN!b=4#L(HHl}7Mr&V8jDu30_AMsDt!&~vs z@gIY}5ggl8FVfn*U~bvmy166fj+#4;n)c*}0wMoTTFp%uc)r+R>~&>zdV{FEBGvJ(cVnK^jNFwiq?P zIb1|q`)GXqi?}bc32d^G-DKl4y=<&&E#nN0TCT39BmJVuS^km`tvpBkjHmGwH{&Ec zd~8{$u;@-QhFJHev9gZpZ(r{2zrPaRDn}k0;Jc9L2+wvUdePBogOs8dv^TozSxzC- zDRnn!ebp*=H)?&=s&prLa;~#kxKJnaE4Zs?%eb`5(uFc6!|MoYfKgV_u|O7b4tf1_ zj{@YiIB0WMhw82&pvUDyFap(>qff!+t^M*9RCv~Z5}Yo~VA-EXU3^7lR|!{yWj{h? zS4r)~k6w^0buX%^q<;5eo^?w8B%U1aq=@WGQbYznO32{V;<$gRgk>^5MQ%QkD50xY zL_2A@kji-V;g?ZU>s}dsJKy+KQb~|kC%`UAC+-^9F%;F^edy;>v^X}T#kz@e0l@yKz1*E{FL>jBqa{%)|p zoK5W~*pcfmLy7*PIr?`7<7t|b=;SWmcpUGcvK{u&rK5G6)%W7-xUlwZ9oJcE9oMU$ z^g6BwPp;$6O|9eZrcNHTb=)J;>o|G)*Kr2BpX<12O?uCRS(a1NWs$ePEC#!uWyx4~ zvLXdrcZHN1x)Bqni0V;LFk6;jBl0kN*C!#Ck{T zqqFgAJ-V|GuJx#F={<%2qU+IUto?7a9(^W^K3tDlW&EbDN2T9SKhAwG9;@25X3gVD z0JGk!spC+ExduW2mdTM2z|T0uUd22%3ViOEOZpUhwbg2JNgr|wgqD)$4A~*}dW(bS zGaP!6^8O4Tu;@6_Y9a#|K?YFgfec{CBh%PEN8fIG z{in!rICEXW+4}V+N-mNISZ+dz1SYcOZKA{?y)CtOc2`XvfB-gL_Y3|`{@3$AF3}Gn z`v1cq{iCTn^dEUZ=s)%A)89se1pOWB@29`y@gHA|{@RJjq`#&>Mt_BX{(8jpAL*yR z<)%k}dG9a%|8bE1(Q@Ix5B+DCqQ7>eGU>0Sp3z?+puZju5&dhqzhQ9rAJD&Wpp6u{ zJ%p8jc71R-Kcd-i9RUXA7}4rx4GA+sKqSoNP{NE@SdeyW;~JD+#g1e?p8%m~}t5LSAWE*x$uKY0Da6duXO|o5e*+%F}fTA-8(nLxkF>Jfp zI=b0x4jD5=;0`k#=cvncd#rU-iF+P8Gx%_fnNGBhBHI&WdyEI!9`7;JqoZse?XrDz zoNeAL+jU26_-mAHY?mw`&mV#LI};`Y!u*len&wEeZgh6szhm5gd296m_dl|=nhYOF zhL`go!<`|(Ur;__CzN4iv7M+Wl7%zq*TPZ;x$Lmv}@kFn6r zHe?lY&RLoB_jCwj z8!*XGCw)iz(|(SlB)NYw-pve>t3{bYMS4q$hC(rGG|_gZR0b!k&v58Ot)+PZ0B)U9O$eFMD@)&(BneTu>w(&E51&` z&ZD=9B-nYrKF4{L>ipxwh=GNeKPU7u`hjQuv7r~T$@_%RyWM$r;syB*`D_zk3SiS= zn6q4%bMcB!MYFZ?KSigmV4T_YuY+{e4V=yJuUn}%B-Lw1o;L9{nAfbo`e|mW`%=ts zQ(>0|D+m$FnhSRB87OKGqB$o@&r_;}`58Sp(l<9nwauR&r+qYG|HaZ)Kork7eW|d> z9VHL>37?z_TPWw-O!$8V7~75QTD&k;E53#Nr|wF(zfi?Ra!NGZa{ty#D~#i$=$fAV zGvAmVDo$j!MP}`(@7tF`Dul=P*t$Hga_LXF&+L{bdWQ>Uv8QXAsL`YF-eb^m>$AL z5%rKkZY7OZ50OVXz^jMIqm1CyL*!A0@amBuk7)CR6n@X4#{#$TdJa335?aq8hf>1o zIowc6NWFg4(7llRpqI=2r|1;+lj-^Wgw0E3bN)tq(+#Ny?2X-z>G_-7E2^RMuXL}Y zy#9fE9q08`?sXNff9PH(czv~dJ(kx$a)k88 zV*Y0LN^hM1WA{46>n-l}3|`;hURhwxztO!S0iA!7du4BC{#N(OoO%Au?v=^t{B7>_ z5?o$YGAS)G5Ud9TJ>$u}$W?=tT- zc+2@_dH&tzy%ujN-z?3)N8X7Ws8%3;zUj}u*B~!)kRoTc=HCY-?}f7d`S&~Deg&AG z|A6zo()m8?ndPdeWxobR*F_etkt9Lvp~=}mmWppJjf{WGj+ z{!=c%mt62qJKtBr;CBoJ{|o`Vi8}?~Ih3!=f7V5~%SHd3ef_q5l{)h0-PiBAuYc}* zKXkq?INy(*?~Bg&6X*L2=liMi{iXB$%=x~A57p0!pUb;z?-N;+5#cD@PcyTkc7l%;Q9alXL$zUq9F&i6HZ#)r3%3%r_=?b{dzI>>Me?u{s`!8sPQHfJJ8MbyrI?o6=b*R9!p(~Pl z=1%>K0mK8nuH3163?NSEb>&X|wE@Hry{_D;j~hT-(d){cdY1vj8@;aFsn;1m9MbE` zoqCA@#3#M3+^OdoK-|*n%ANXc1BhpOUAa>;1`y};x^kx;Z2<94uPb+Is{zDCy{_D; zqYNNk>UHH#jTk^2)$7Wgx|b0l-xXi=%$@pI1BknNUAa@=HGp`m*OfbUhXKTCy{_D; zPZ&V_*6Yfhdba_@b-k|Ksn;7oyw~f>ox=D&$%+Ge=1%>N0mO&BuH31o8$jIH>&l(F zzyRXOURUna83r)U+?6}E%>d%f?T**A=kjJ}cXRpfsd4)xKHVPmy7p{0M|U^dyQhA| zJUrhO&u+Io_v9MX-Oc9isUO%U@$dGC*R|(xb7XgOc=yy_+9xsccEju1bEw(a-5lCI z^&l&aiUGvuy{_D; z#~VPb-s{SpI@ti?_Fh-+)J6k{;d@=VQ!5Q1p6_+#PE`ybw(oW2PW>Ea!)@#akURAw z1Bmgrt6tZhm1cE!v$A{Y4*R50!0XDL`h)>A5O`g=Q|~r_#saS^ck1;9&~V^&BFB2-1!S!nrpCg5<{oc59~bR6Y<) zg!zzVI@xkPk@75m8`#)*+Z`;e!cVu@Fdc&*m>6yrA*bI>YSXjL|T7HIcWH0?p6ugL#gE@ zsGxdygxZ$c0v7uR+5)(|G_DF);W}Jpj;_aZE?1uw;mK-K;8FXG^AzJq)~C}G%(`2L zvzfYFXM!Sy;*r0M#3R(BXZ>lr$rrF%PzW!C@q826I6b(c*+5C@MM+Y_@^k&KAd<;w zO1X{DA~XF0M$@C~eSS%Jge_4HA|0-3Tn~~3>Bf!$F%Wt6?S8wO=#)o%jTR#}HlW_x znb2@^XuMB@jb&^k+);X2!X5Qz>BZ}ZoN7&{Gd6MF)(cM$o&`Iyauv+nXR_?WPIHnx z)=A(Oy#iTyCkx_=1LQT&;r1!XK=$xN2C|n2GLU^dk}{Bg(CR_X^nST%8OVaNAmK)S zp@)PWN&>GQ5_Tvlyn0C3p(OF@ks5NKX;Ky>WS&FG5GGun!^jXORGve~5GG7sCccvK z+=l9Nj|Ad=Onz33M3(w0+oPFHt8@saMmD>T#=Hjpn-VbRIsO&m~O4VLnr zHMpVT{pW0KOs#J=m^jYLlv>{i9{07p-4~$xPL7BBl#%^%2G%zM+UHcVt|wEgj-Je$#`Hw?IIbu1u?A0~4a-XtY4N0qw0YFIJbV9} zN%i@1+^bts;(3eUa@=d!SPIko->wgG+^hRg+H*{f^Sq(_Y?i|b6Xq|4&vN*zgwLvb zRypLLfOaLG(NlW{2RYtMBMLLFM=3a(P!GSAkFF$qR)MAt7(}E2qQ}&=1`&~f=&|kD zuF!Z@_H9pbg~uxz=(;^o60aVT?unpy^-zNsUGeIn1~2mB)k6(lRK}}Es==$hf0(SO zEM7)YUK1C^b0v9kToTU}3IndDb`PJ3Zs=8Zb5Dtt24V^n6RL*^H9T zeT1;^j-t&MFXyvuE2k~qFNV1SW=)V*WMg)E$tP1khm}W7_7=>euRG9lM{2xdULZR3 zmAOWlYh$pLP%~au6LnFxIPD)W1i6AU-u@Nrv}aC%d6h#~-oUK}#o!$fw*pPvS<66CnZG%KBC0%O&9UlQxsr#5n1Kvx}!u@;G+!bc~2bxSn>?I#y)zem%aBlr}SLTQz9TJf#{h`CPJ1`5^&xU;uYy>m78+5&P@y_2QEGJBIH zi|XVfi~H@{xp;!V#c4NOf^7_An&!$78V^H0Tg6ne)&na^qqgI8QcGYxJ&ko+hy&|< zhNIr}n|0qM^?ZfhsmnCZ0NV<~CP`)j+oQ6v6+>*bX0cg|uqo_xv*>0=E^lv7W79=p zi4wDMYI!Pz*tm0!t6+w`W?^~_g8B91%F)K(PGskvxz-s zv5#{>>S2&Fsulz}v`VDr7?vjC9R(~{FD%9ND1FVf$U!Ffc;D*r{NmNH;Uh*5`PhS~ z&P}R1zf247+#~`q+J==G=BUlaKbjP!;(_LnyN!Lh@^i4zX_xNdzvI=5*6%6B&P^&y z)XfkoIsC0=z1c!T1H5&oX*L?+^}*}!I5~}1nM>47jJFu(H@s80-E7vHw4ow+(Yc#~ zesO+_;4SX>;i7dO<1K`E!)wZ9s;)VLRTJ=5r`ODaw;koT0N%om{b{^?P2pi79YV7$ zZTPOW2`t?;hy4mzX%^>zwPjen&d@!bp^c9WV}-1_T@GWRp3`J;RXpGt%Edad7dMrI zUZ;Lfr{33M$X%p6v6J_Jzs{g&t-lM>>Z#r!_*eNS;fF%_I%*^dzYxE|U)KkJAAZSA z?&8V1F2*k%4Dq=p?KXmoZ$2N`Q50K@buWC{QC|14()Af`*WcvMvWpK#(^?dRxY!g#F=e0OR(n9%r`2ks?9)QoXP5`dJ|m{=^ID>|Mk8gP(LnyF&(K%Ot=2SUp|50> z1&yv)@T9+Wqg}Jo zHmlv1t55+F{Zo0H)eXIK*b+IiuFl=TzrjChqj&TE68@J{R}ozEQmvnlrVZu0Lrk(* zDAqLX>eg{4q@}^j#D)OC&;@O6t2?$Xwpvm*_5*C+E>=zaX&j2x^*STwX&Rdhx ziizx&q|PGp2EvDJZXN8>dWYIIdjPp@d>c4x_$fFD#@XA2u}cv*t(|6MwS@}#&3kh% zp$VpJtB6nP9Gl@<{2W_|+0L>3zTsKO9tn-Y3ybA;D(*pcT5t>=&<&kWArL zeRjsKG&XN@i_{n`_)=rE8s&aD17oy+`|QiJdibNgP1>1je^)~$*Z!WXH_dC6zbR;R zvb8S-KyIq9Rq5VjH5fG{iPHNUnA4{`F0M=AqQ3P|^$RCnJrdP#>5FGOeMtrOToh_m zVZDJEF3+iX&l7uPPSI5GrD(ceG?g?mDxs7&TCVt|Aqk|R)H~Em}Gy}MQ=>ng?_;EP6rRqRduI|Up8apXJ z^5cD$2~*gfUVl0bz~+wbF7n6Vb&JV(tZ6M9BlACV37qDFQ-8kg^({3?ZSGwU{p$ZB|EG!e zm6-P2rxMei8+~KiSCX`ssSrnd4im++=TK5i`*MQz*pm7sIpO*NKllYNn7Asrymf+Y zOs?D9j1qp)jX26R_vIAr+q&4kHg^@&(lzLAnMv26YPB48o}r3eBQJamIh6$}Qgb)y zQ~Z|t9!>g~BT?e8so0ZXK%uk|mSeNUi4oVKrU)FhW+GA8>0mPvd6xiV(!EXxX#5Mt zgeKU)Yt-;1U(q|xmF_;u}iJaqOX#7i&GdP;}D z9whsNk$r{psLlt?Rs@IQlQ#e4?YFOBFeeCG)aKu1p**zT=AYnESSk%dw%T@yH|`v8l;wBzt)x|Ly#d z(U^Snval`RjGv(~_nKvC_X2hM4r5NJ>USFcZIagM zCb5nmyp0ukLV6R)ZhYb%$zS`DlHFWp{ibZPwF_gM!zJd2Ht=O(XWre9K9=POzxEwA z^H1VG3cr3X&v8B*gP3}9CgD;)muxGEs{uW*KNgmsYFRU`-jO!k$c2Tq@SHR=l6txA z(=VLiM#Ld$n+<+zsHy4=9#3y}=XNV5$}hL-1ETyI#xQ4EHTne#bT#@##rlQuxS^9DAYao?E{W(T6w@g=kln zM9n3EB8$9<8a}*sCV9fY^4D7JvatP$&N}*7gswe07jyps>=Nkg9at&)QU=F;#+!u< z!uHQ!cH% zSX8EB%&et%VCz4GyD8cWsZDza*kVquqMXS~!`-8+yfS$i+ql>X9n^1skAISGe}Mn- z{0}DJvT^Zy(D7Z&r@aS^Z7;{}M;6x}9pKt+IN(gH?YMS3&9#?Dt#f(IwV~e@$F$qi zv)na#GyGLk-vxL!6um2?C@h;jtqx2&Yc{NN&Ih(!Dvk_d4l=-y8wrLi;E;erJ$@`$ zU9ft@js>X+LT~Hm#$@F!?nJxoS$$5!QakJ$Z7W}D&x(1J)#1w$btRsxy{vEWzmhtO z>Q;4lBmO7T_6rYK9WwM5vg+`DkGzGr4jKHogKdd%w?G{ZFQc9l3maLHpy6P;X2I$t z6{}7Su#G}rb=s&aV4^w&s|yxaryw;!GOCkY4OC}(XtnB$`{ZKv`CaN$HUgshym#$x zJD0!L+^fyK#@uVoy}{fUnfp?6_nZ4lb6;)l>&(5y+*@%|X9>EP6tTUrglxNu;m85l z+6)+GBnQGBHwd$HwHw$AFPQz)r_we#)o*9X%fTdKPYFfuVUc_FTT$t#mGXPIvJ?qN zX`(oly8%NF)#xUwDyJCi4r0h;`x-2bb0_fEUJ^9pzQ?yxLdkRLxh}A$krs0b(?Q{` z!_k0qlGVx68|C2pyj1-mKiEK8p(2D$K}y&CF`GXPZojdGycUmUNji8cD}6HhIU;Uc z?O2J6&}med!6bvRvi>^aJjvm!HU}Uprc|pLj)IOJJ@%2W?+AVi8+xp3M{_^p`xWF> zGJ+2Bo8xq$AfwhKgKMZkQ*YLp2Tn3W3<20zp-2GAZVBDSa!IvO4a@lWM%BtVRA~=a ztdNmnRXEW?(WB(MvevMc3?-`+y3#6h%dM_{ewvCq?1~$z6D4DI8a2w@7d|X^&#W`L z3e5_Z;&g*#vplCu0-7cFU>-g9NLT)r$#I^(c=^$fKxja569nPDT>zm-K^C#9aUDN4 ztYgYQ5|$rPkc0%3A})D_5?aaqRy9$U%T@LfSN2fb%EfY3JrFi3x2|?HOIE7lb4NF@ zmT;v#w^@y-P;tc%i4jx5wb@l_DEy*XloMSvDq(v$-O+2&Hg$#zlef9H;fm}(sH?L# zuHKz5&Z|S`8-;mw;(VhxZyi^1ea#mvo;QC!=b>aVLXYD71$q$ULOqXGkaA<>2O9Cll3IZ5z@*tyZ;l&=vUpyOm-P7p?p^b-;Z2-*=_z9MlE{2 z@qAbL4Zp3(cah1MN&X|Jo=cI%}T#z#W+mr#@oB`wJwt=_|dIPW%3?^AvvO*%=*D;S8AOBirL}Dyx2Z z?!TFL;6C2T)p#M!R9FY@3;VD*Y=S=-Fr7a4><#AAfa!2t*Ebl>fa!1#&kAS2bht-k zg)?9}+#|EX88990X(r4tIK1I0L4` zofU>l_T|TBz@{@`kIR6aodJ7%25e^r>2SNU!Wl3f?#iri226*0Rv0eXMs{bw_Qd#7 zkA*hKp@U^?x6S>X(r4tG^nI0L4`&1Ho%U^?8@S>X(r4)@%wa0XPkUb}uC z;r6`)IfTuT6J^$iKK}7LSvU=t#(9l!hV!yiAJ7NG*-QWV3VS2lBK_&>LtpwY5QzFp z;WS{n?A@$z226*$HY=O~6)v6&-LmvtDDL}amtsRsa>-{iXStR&zMIqCc>`s%lQ(-d zBZ1LH-Xw>4M^pu||e}<(B zCkxkn=?MPXJCe?j_TAabvhyk0LwE}REBLFv-P~{R-kOfoymgvkH-!i@6g~WCt{M_RRe;qJPLQa+gc9u8?jP%My zXUS%Qje5CNth5U3J?fO@l?1Qp^oR(zuGHD$U-wbsZD6VPQqpwoMl|^VXA99tb@vnd z!QBLs4!Y!A`Htxj=k0E~G4}I4lPLv1;9C_%SCgI0*gaNGkN5XTbU=?+HNCJN?}b!c zN{?6b|6|D)Yu2!>^k(1p<<1aSkIB0y3c*aKF7G95n{3FbA5ljA7b>TPK^-e+6H zI4rg47++vzTu8?l$xts}$^0ha37#HY5Z;wh()pF#OQ8AOCP^`!RMTn)qv_H>Qg51Z zt%FOquX`gsw^h(N+!0#HE+U5QBT`G9ER1qqvuyhk7ef^q%Zu0+yN9QU1eJPwoZ5>$ zk^g!8wZ;{_b$;+SEl<+Xj`VDL_bEDxXME%Cir%*h<PwtzHD@6BqebTLfo*k#8dl(|Ex;%P&H&dVd~! z^j{EPX_5SSi+n3C@-5$=k3`#FzR0)5;$7F@z7sf$i{NbZf9ug?Jk{=c@C9kLSUS~y zdWeU(KE0+EB^1dt9lR5PZNAw{e{~9;z*CPt2v4H?mHxC7-4sUmPz_&Iby?h4K8woprMOE(`+Ha_8pEHxSN%>2OhgQspvWYTkFt;`6@yyT|f4 zo2w42)8bU`3!f7%wb4_c&3n{F`|q6m6VnP==p5+Dw20LDQT2N~xZW#Vi}OZdW<{O% zH{|C|QOk<@iq(_T7P#~M1TsOz-0fNc(DwY?lL_#Cwf*A6RGy`3FOU~J0YvPcT5OJ8 zun-H*0ki_?!46hkZz3A2E==9ThXJuVfsKk6GR$E7XBo>jb>;9Lhs0hO`#m}(FuV+v zGMy9{UWRu4dAcIn#^k7daVYdYpH1k+z3=yx7DX(6`DqX92QDwsc<@l2YxwojON?>w zMQ)A}Yk`&tIIF=P{Qq0$C)7{YQ*S5)JgDb1M9-*xdh2gT)r@a3#iKJ3AE(1SXy-eg z!;pm%gA;OifxP`^A`Iq2EPB2}d`xR{>3vI{xR<}i-H2DdjQ3AGm}Qwumqp(GvKZ_E zD$6Gy%(7gQE{nYVWii$u3^Zk)2toX@?JW;-Ejw_U3|;g@Wvn!%-x43t;GiV_TT-kLUQ_5dW_uh zxDta@meF7jl{v)G%ro1g9M+s}w_7VJ(=(OM3_cvY6K%Y;0%h=Vl)>9P$p5J6(pz_3 z=_);kb#VF7m~@CwmNs;U`_O{Bb)TGWZac~^?RlKY_YMkgvi9~E$9%?gbv@U(H4YAS zaLU|>`5lQl%dPS0SqK!xdY?#Uz|}GAJu$4=n27?u3*ho?EuxoaSI@4Up2*#MZ|<_0 zjVohFGUV4+Uw)ZGyD~=mR-u*df0;_Dmt2WXJ^tQ%@1>eXXTgIU_mLE(jUr_02w91m zWHxad4Y%FuU^~gh*s>0rQfNd|j%h1XlM@>>+>}3f zglVPEJ)POd3v?RDs6Fnejg57Aa|g%M@RV3GciOd1E=f?+BfO2L*5eUx{5t*(_N^S@L2#;jX{|1gPLz3m;8R&Ma*;+H&Y30V6 zEoa61%_10@q5)a+<16KKxs*RQE%N&QCa>vl@cV899B*`BkmqR zcWB2Ny*sqiq>^Y?SCfpp0I*{h04{H>9Jl}wJNGp96*PA4(_2AfclYTTKR+UB>_-HS zdE0?kILVq(x(NGY&5^8vjZ9<5tbl>CMBT zt*!#`wti{jL>QzElN;JEtWA!3Oz($zF57b!n6R!lwC7B{INlas=vwm6*heR@&PtOs znyd($8*rPEu$FGmGh4*}+}vN9n|rZ@ z0R?l*=GM&}F?ZD5adTIhJ7Mmz<_6|YntQyt+s)l!?#bp(nR^DV+1xvyyxmRS++K6R zIDcp_lO%T)FIN`S_LLJ>!BV>3$)7W6XGErwl|=dxSuNi92zqUmBPDur zcY{6at)gbn#g(%jF7v^{0X;`&eLYvt!n2Far^>zJ>xPcY$l;y6;`dBDYi?nA%Gxk4+S>0!#0}t=k}BFc>(iXxnUV%J?JH5KXiBdc@tOAoqF~q4p+b9fem-~GOJ#` zS1~f*_k0hB<-V_SCh<)E3+Z{#E|=5=IqWbGULKQs5&M~SNQWf}JCFf;Wd`iEA?%@& z2Q5k4!`8)Fq8<&;LnGr_x=gYK{7l;2f6@QvP_9{0U+218nP^}{E>zdKtH)d7!7HJz z!_n=ex{lg|J1eO<+>!h>x6>R?b34sdqWt_y`MKzD^7H06KWD@1{$}y~yfB>~wZ*0K zQ?fIgC}TF~X35V`CHOv~6{pXnLy6Al(u|iPSZ^Naw(d5Ims10^7Ej{NKtG|%1Gtym&F;(5pq!(soI^|W50~lwMSQ$!h>0s zSEb7$Z+}?~cE8I~Fk1>G%F=3g)*Opn$o86J&AfpP(c#p=7HVyoi@BE8@prTitv|yB zNo+Fa5peY!@tOR09*yDT@ZF8|=3XLc#Dod%#wv$~GghtR6%)^8ELxjQEFB29!xX#} znz;4rkeRxuw?+omufweo)~~~?U+X+rzYdvr&RR;-(JqILZ}YcNnso_Kd=@9IVTrO# zj3JXdZ7pfDN*^DlZM15KmcN`?f3wyu9z2rMx9#Acm@YM|cVSwyjDS zsghXZ{wZxweDI(6M|@E2@#p-X!Cx|{2rhZj7W@_J&^s_xaRMQ-?C3n+^fL%86GnbE zr7Nvwvr;jEkRvbWHIaVS7A0@Zk+*K-HQ`5syz&>Y1lZvoJnlJiG)4M{XlPj0*Q;t+ zy3IsFuc%SQWGybohREZb&2{X&$j->{^lWgQth)?x8^ujkP8+s{_UaMaT^|kYu79KA z43JosdbF2U21p{A!a2}X^nMZlh_0gdABM28K6-QTKUXt)D?eEj9}vNnV~P)m;L5FG zCwQ!rH>6T9k4)H%9)TJSGU_qqj2=^^{>s@srrKKGtYUfO4`YrLT~jbR zP=7t^FoM+{0^|1y>oM|U+X#~&CnD|?=fm(w<)#DFA9h8KrFdLA(6GFR#*Iqm zVYdYvC|kc;jJjKNZ3E)dCZz=r_cw6a#$Iaf>*C{ejMFHcfUc#l#aZeS)J1J_Vma@bg^{;egO$bgEq&(5y+*{3ktGVwq_r2zR(A?Y2{iwO0#Ffk-vBv3sA=H~m!u~u1_LU6ST^X>u zGhkoLfPE?h_UR1RXEI=)&47I_1NQk0*k5MAzLWv`at7?LGGKq50lOmu_SFp7*D_#t zX28Cl0sBS<>~At)-^_shZ3gUH8L)3>!2T`+_MH%xH#;)cN4lzW?+?W5#4BSS*!_zb zet&hS9%E~;`={?O9QQ@U2B)K;Eu+fisw+L}qq$W9XP!1v2QyXLg3xOw^l&^5$V#w8OGwy}ai5lm2yM+cyqV zNrXMQQ)?DV2qZT*%vRgP4WK;fCmW9ys>u=GnojAaQ>mJ<^ENhoYci2vO!u?K#>^hl znM7?<7m@BkB(uJLd%-RxnPfE47B3^iw~>0rcY`FiD3Uv{(b}~P-iPsj6o0+Dc2YEd zN9hIsqRRItM${N|Lqlp)DNZLe`0Jg+-pKcfVcSWeEVB*XF>sAm!a9_f^^DCMoZDv8gm>yjm=y3JuM3#6dy{I1DDdc5^%HFSE_*F8t@cFcVG(r`E z53)xd&V3#jy+>CkNnNu-Fx#i!ZTVeXhcV2(>39Fo^16tAcMpFu-A*Fi#5nqY*?SXk zxsK{ww6%B7eWvb~&N&*aKDLq5?juhcECDt$25c83^mkl&h4pycc{N(G+>KXUkH-n&H2di`?z@bNVs+2F4Z-Z% zt1{1OMfNvh*Bw^IOG(j3QMTo0$@ z4LYLHVy5kv?uFbWA7}kOU*LD2{2ppw_@sxSFJvC4(iifKn5%(&ST}dHl)s$m1l^dgU>3vwnHJgY_Sl$DdkN9zXC%$zyAm ztX#wmEkp8H@UAY89eT;*lWWQ2H2-Y5)0uKJ{MWy36?tqq70Y7_qddk0bLo44^F$u= zfNQglnk*7qGcf3pO@!>DFgtdN@_1rpc|3s=y>UWtY9G~+JZ^V3jmYElJny!h=iN!C z!!qZ2XXLTE86FD?d0g1hbTNmhid8mt$AUbDxo5X^-}6l#KMC?!jMQx+BMjeRMMrbR z>65W;?Q9%uPxZfn2IlpxH$J~ePJbM7T4VWa&w=B%C8u*^`C&OtS`2cU<9p4uB(ftz z6H8xknVgxsiI?S>m)&11iYL!}ye}2SlV?8O-z4$Uu@U`>#!UAo{tvaEc=E&0PcV;D z=_kljp99~_gKuyp%q; zKpM+944XsTzd(S&ka+#pP~0scE@z=EZsPSLLvgo;xUWy*2Cw;7hQSn(u+1aRFIbMr z_fxa6P7ASiS*+yy42>`QZM56`w7I)jW2$=mej8NIHSh zWJP!Woy$J4zk^f;Bh+;c&Nd^u56*%vKzfBPFv*Ol3!DYVO1i+Gtw$F~BCS^!AWqh= z3*gA!QC;9OtLg%$2}zH@*v#4^+b81yj3He>@UE^4IP}s5wh7i%#%5{$*>a~d zXz@Iq;4?HA-al8qxwW0Re-1rK3rRnXeJ(qb^jW>3KW}j}_v+5^7=d%!(HxJPIJXgD zBI>Wf)q`jnE=<rf z6OX#aH( z)`*9yI}SpzJ9{q$5b86lX!&{HJEmFQ$X?6H{0D@whjRGme$gEp1BgEjYDqv$#)UP+ zC5%&e0*pDlWb)?tk$g<2Ci4MBWfEW8@er2p!Sisz(s_ho$?2nh#{5ct z!OrlGzYl%7&21$9f474F->%^Q)fN1|vV#AYSMdMR3jSYQ!T$>@_}{;R|KF_Oe_!68 zbiuzUgU19npU=ll{K5X|Sz?*<;UFLi{hvH~h5moJfu+b5q`1NE{Y!#nq zSNS8X@AHheeMr~j$#%f+{8`oM^DxFn?5TxYo{j+l>9eAJ7c1mHZCOvJSx>Dy>r>Br z{M7P(1MqSM@e(^;aK$BeBI0&Sz|DIt3I6moooIGpdaer8ot)*xD}4y;=6PGIvqw77 z0&d>Mc&d2~@3F$^5)9h)6(pWo0J`f;g9FkXtxz+8R-VpxA&L!1MW1qtIGlKt*K^`w zs^^wdtLK#~)A=YJZa%fVpMkueCLZc-1W^<+P=?B9R?K}@UF>rZH-^}{ZKd=YTzMyI3>XPHTrm5nt}Q5OJrlw0AD9(3ETF>XP3CVR8=BZ!z&ZLIxYP zPFB%g@GDn?A>Q2oJ!H|Ujo0ip5|!fjk2rf{CAp)~4(mC|LX?=xA}2G$n` zMX!riq_+wXq05U+1(xt4Kh@LP3W z0t53+nm#}mOx<_;$r;XEY>2Yc0?8P?Xzqez^d26rIqb$0#^?|1cp0FhJ#Jh&41fNu zK1Z@PEQs+njDR$`@=N(?gycThQ-P7NKM@b-7Y^b{VSle+r)}zE;s1QJbv%3h&eNkU zhnpBRRSz19`ftP09P!NcJFC_H&%%kry3_*ligd_DM4N{PcHD#fa08s$%ksS5^PE$j zTbLy$V+yjg$(CH6IO~@Ha!#g+{P`D`4`Cz|9g5usD)=Y+4?#m8Qu(pYE#w?igcJvH zmiNv^e6XCkq=@-eEnBpi9rjHcjf3Ao@@rJ$ni2oF)`9FlY%o=H_TNiTKg{jN(Ls>a z!L#?{v)um$)KKunx+708AZ-8xYgh5X92{$w`B9XKa|iYNYgWGD_hqB_<;>Ii@QXUZ z7>?PAHv=y2_-RldD*D?9;k+8{wqA~Mrkmydad2&`hN}VZ_!&f+-%uNm8~r~(iD%6; z?G!rM=Fs*^r~Z5-#iSk`0kaQ`59Sm)2}g?o|sM8AQ70fY*E zaqjb*`BpVPEK`wBvv8jm+@P~ckPS}nH@i{VW%DnW=bB-$ zc%87UUarx{Eb-CL#Y=X@M>%P_Fo zcP_mu(ZTWgC>kfc2OA6Vg|qHE2H&x0M_fN#?td0l9z-xA|0_6lp5L2NmQ0JCby2Il zvr>!87@H%H@}Uq~jv(2i^1`$ZtRqacDZ2?UmCuQz`8uFxq9J>;d}`Kr7{_txqsZqL z){QXJn6imWZjwRgv1l6rvUC71~tks1C+JFZ{YY^n= za{mi#==rBdRj>D@y{VX}+*^qc0y{Cz9m?aOy0ccRmlvvriE5I!VWKKbWY=gydJAV= zSnS!EAKHx;fooHG}Dl z7lI5CjN-F$X%TT>2e^AD3G#JRZ$7Bnjqc;&V1KY#PX~@3qF7zIwhs9q%d6;PCwEX7$tHxm2e1PUh)$li*6} zc&%^iYts0XEnKJmEv(!xqh5VjfMUm1dwk|aIH;=`_aQ)VtI5?j~GF{`s#1sr{D#ji3K2Txa!P%;mt1{Xf7w25cnyFoLR{Y~w7dioDum z{ZGQ@thgB?f1U@{r4jWx(L72i@8j*;ECoim6SZ!q)@|3iQ?+jOz89;A`=0ChPmbh2 zZrL|2`)J0bH2`=eK)bJVmV*0#ioC}gfaktaV`p@7%YBV@v(bmCarNH&O850MvAF9@ z@o?N3BjPAG>>u-(AmVL-h$%Z;l${WFH5^^kqQLXwBiyu#)3hd|cJ&a7nuz-U4$8Wh zO;JU^Vp6f{q(g~_JzOA5G^gx9Fwa>U;DdUA%r@Mgeb^rOQ;%Yw#rQvuhigOsf#)fB zu$-WLz`CU$#&fmj^F+L<)6)MVcwkv8ohIaS8T{DK{urJ=#q(x7)Z5;TcrCnt0`E{R zbrKwbQ+hUZo9Sk}b7E7xZ!A^=+F7bCMb9-os zP0_(7TBeR}2S?|i2QiHh$nH%#w#yNboYnthMKZn&dVT6=I7AgoCKFfxrj9a=xNjs} z%@{2|5tk1hx~~rHLk*9H3%Uo}fcT^iOdXo|AMVp0YJLwjeHI>*J;U|S^bv_THTlc2 z$(z(Z=bC(_j0}naWGU1MeM3%0(DBi!RiR`=GXu=n=GKp$m7oUxzO>Fi((fm!EQayI zn^_LV3mM)1*TH9}pnHCX*&#oq0^Iz&<7YwlDD<-k;h5?<@Oul&f$ll8`|S9RpJVS4 z^v%|N7q6giay!Q_BUfsrtrfM>%s$x;${`HY<$_L1{@d^VoG%Uj5A3*C$hcp>U-mkf zKK|BGoS>UH6`cH?=a<3B2Ms4*L&&f`{&I-fM?xQeV8_=Tj!1esst?3d``-!X;u!3X zPr(P{F#q~v|H`%{V|ZViv@heKeg6%)Kd|Fl`u#8cmfmi(V0e7H331TH|h6P`hA^#Z`bb| z^!vT~eY<||)bID}_ucw^kAB~)-+T1?0sa20em|t&59{}%`u!FC{+fP2uHWC*@9*pP zkM#RV{eDKjpVjZZ`n_MjU&b%{D~?I{hgIGu@+_wEvaZyWuFU=yJP6x7NN$WImSF)} zj%JoG$E#A-L5Q-my9%n%@@4Q8?M0=&azvilbd{ZrXtR>e*P>ZDP?%D2?(11dQ#3~x zEinpa?J(SrmRK_8y$DCERxn$4pDirsX6q>L9*O+J%$?=Wt%5~!cL9DbMmhY$vv{mc z!7QHYf*b{^*+N6{u6u8e+(QwC#)po7It(A!{^^+l=N;5$=K&la=8n z&zxfZ1uGpZ=l|gGGP3HC!^_J7_xGWHz^X6ixy!a@i#6(i?-6>&>TOqR!QeSrkznO=Yh;et{a=7h9S=+-9X*(GI}f?ssPtmgmwzq~XYYCf^vh-L(~Y*6 zn|u1Bxi=urU07h+u*|*K*>CQ_jyxUr^#?ci?gw|++YehmDBX7fzfpW}ncIdnAG^#Q z!x79;4laL8F3z873v#4+q-AbDh7(9z=GNmVp8GK1!525+y!4y&Gq<#K@#)iwt9Sh*1ou*9$zrFVi>p5@Zaa6~$8kjGcqzPL4h zx)sm;KBJCB+D={5X6QPO@)7)pah%T*(VhC!hYjOC{AAlCpE~Cnd#r1-yFN5M9wR55 z;+5HG-NyKd`>@;KhHkmBW!D!m(8P{w4$rF#m+#yjX_Ix;E&d~Iv9>Qv#ca!lV)8B% zI&-z=Mnzk@e#yox&~Zl3cux1h{-k}gdzxCOW8G?%&UGBPK3Te_2* zEI;}FV58s1eLT$@Uyh$<^+wz`)ZDqXdL!-$YTn8y2hmE*rGDc};WhvH``Xo4Zvhu! zas_9Q-wf5|UOVHAW6_K7?7;IvJZ(HrL`3RA9G~(pS|SwjjW0n~HWto?5v+U|<^)RL z&pIjHjYp9zT4FRgY2kJEdHbsUb57^5Veb18``lh!{ehhmmY`-ZqXtZ4Uuv-U?p>b< zU5R?=pQ)mJ_HKo z4t`aYF&g9A9sj(ox0_t!-j>MS+}UGs_gK^r*LHJ3Ipk)osIttxSRv6!1{_0^u71$v z9XEoRyi;n)J7z$38e3@9z)a$W>pxANVs}hG}L)&`>tO!_|MA2zd~KX z3*57!z9_pcOWoS?flGhU9FAFj;03w)8^fc;OV-CAAOekqIh|B_?^1o0T_u4TY=eoi?4aWrJjV_)|csLGcvTxvd51!lb;LJ3wZ9W%n*8drJuEFyn zJlEpch3Cn5NL!!7gOi?1FT?}WPu=%<72ap!IUCPTJm=xri)TNc$K&C)uvg;!hj_k< zXBp2?JlEry!^5@T)9^eI54uzBEyKy|rPttrpeS8}=S%Rv9q%{e{XRVJ$MXR^KZECk zczzzwhw=Opo?piEt9aN8+=Pc`IrZ?IfroRDurn{gBEGa4&*Shk@r>h{!c)Vu56`{+ zJPGe#LtY=l6a3cm{!PUH9X#xM))Sw-XNdQ*j63-8eW&|#@|53yf#>)NakJ@Ga_{hb z7`}k#RmkhDc(|f62rRX^P(W zczi5uE8TD7eXhGN_V=6chHOg8D$1wG@9CcAPXNo0!Hp{cl*j!J8-$_0e+b|2!gCqE zKZW-@J-jGS`u#n^xu^96-aLcgRy^6bAM$TZwUw}-T*7XT(kJo!2A+@L`A?+#8lHc~ zv;QyQF+G?W%nmjWwhXoowhc}jY#;O*gI;scYYlp1gWmX{H!a^pHbu(3>0dP9OBn81&8@^d2+l?HKgV z8uY$r(CZI+XAgRVL2rK0+d1f+Gw7W==$$v{oj>SZFzD?X^mY$=dj`F|gWiRM-o8O^ z|DgBSLGN*c-s1J1Wzf59(7Sxld+MNf z#h`a^(0kgT_w+&U8H3)HgWfX-y{iVjXAOE+4|>-OdWQzRXAgSU4tmcS^cDua!-L+D zLGQXj@418C^9H@=4|>-RdM_CCUO4EzXwW-4m?QBIdM_UIZW#1lGU&Z@(0kdScWlsm z`Ji`v&|4hzUNPvsa?rbR(7S2SJ2B|pJm}pr=)G#td-b6AnnCZigWl@~y;}#p+XlU* zLGSiKZ+Xyr{h)WpKwZdS?v2cU?oIlokQvNBr0P!CxfL-LRI5p2Dt~vY35E6VDhPuDMU)>EPLjhja5>58Z}` z{qPxhcHrsbna6W3o(u4>-`$7jad@~EatWR%;kgXY6?mSG=b3n}#`A1E3wW->^L#un z#B&3lm*Sy5`3gKY;bC9Qb<;cW5Dlz2tNH_Y-i_zS@ccNQd+_`;o)6*q2%i6m=l{g> zf8qIcJRisNTX=pK&nNKw5uQKA^JzSPj_0#@{unuXw(R=fChg zfF}aG)bX_NOyJpwXA7P=JZIrK8xPOD+>7V&c%FcV>qk$bcksZDqXZj_(r56H)jx;l^LW05=c{E$IM312F-10>ktNbDu{$4CY7$gSj8(FU8aRVD9~LKW;GhE;%4XZXL}1nWBAC zzif1hGnBu&Br%x)PCqJUKYK9ud&+nEOF}{)m2mU%$Vg-w*5eOZxo>{eD%yf3IKi=3wqC`u#ipLI&QvxDS_r zL4q`I^L+va8cRkT?<#xx4Qj?<%4ik=fEJP>oNO0vwRJ{G5b6%2X$n# zt@u%l9dMuQLE4-3(MdODTTv-(2jBd6jw^f~TicYD4>R{z+i_6t5&IegN8#%_e8qE9 z`tUdH(98$Wxr>PCUkvIL8=qc&zJjju4E0uqaw$W( z(hMt6yR!TOrjF-cU_iZ4c|1lRV^RICB_L$^dU)bk*ZQ6Vv5b!wnw;q3`Mkma3>Iq9 zk|Mp6@jJDf_~JB1b^AiI7SCCJ`#yoSrH$|4T0&WSPkvnEFhI8aA_2h_&*dA;$qAOAv;^bN#$N=Ss$>ThS7|s*QuSgA=w)tCH4(q>pTlR-4Fy4+WB8_ffFSU#H`bNkWBnqMobEe{k4qy;*f zW8ZQ8@;tmmO*`p`=MFN#70c(@*Hi85e0|{%rxH_O;W9VZVI|vMZJ! zYhSw}$Wpyx6`jval!E*M;_Vk$vs4ugBvnj6=5r{;%Mwq-bdgzG$}F@oM5Q z2GqOR*`OB(t(kS=P~6E4dhPC78hkQo#%xn*cI48;mZW1z;*k_q4)rAdO_nA% z^mo~O6w9aH#J|LUI@qK}vN2&8tQ%n1(MPqK(Fq=Ue5X!6=6An`pPkgo;#=vd;QsEA zf00c5u3vs#w+;+a4u2Of-^IZ|XKX|El|Ci;{azf+FmjLCbY}za+IlM1f&LV+unq)u zr}${P(TmK2O;QzQJO$6w@PGn2hlIO9YNcave`cucZh11sTI3kG`m8wIa9s`;ss%U{ zXB=@(4Iq|{K^nRc*}@#b`vrIcOkA@9Y^A>dOjyp^@0SSRKDTlVBtYt){U<3B@{3`2 zK_J;;SbqX=`JG`Ejr;x*i6%Ed7^_y{*uTz(u-o#FLwKe}Cf`TzOpBQaozB^RltN;0 zGj}2hZ<%}A97`+4+ll;I=mgh_2gPtS-Xn9@)%hsO@46zz72I`IE}f3H+Fgh3ROU7> zV220IzP^^!<}7cEvc}(gV2GNu0FR}GzI67v@btQ;2h+YD3V##(rEG^6`>!#S$G>Rq zff%Fv8_>>}Gmg`>jMxHR!T?{BJ`M5TwjnKZ6WOV-{R-Op6yk0og%;);Yo7OWAeW%j zP#Jq2`uffWEk7E;Qq#E=p3-z~c?{~ld>cNk9_6I(j$4kSDuqCMwWeG5)%>ztLRZ7e z9^rtUZx=AND>rV$%WhHQk{-jfaUV;0V^q=vU%est&We-sS_Xg-`h(_KYIvUm=x`7V zG->KAvG|^PV89X4aR_+>9n|)oZBFWd*P4@x-*e0v6vqX88onaU(cTA~M7J{+A){M~ zmYA4eGv#=+#B8yc!-TC)eDKcq0vosT$DB8wkGgj7@e}mtk2&SP&?y%uSg752CemSq zQQ?ic&1%s97E$l}0n_A$6sWNbfb~9R<(t^RAuyp3658GS4O)B>=-p=<)c7RuySKn0 z@U0fL{u#_7Yo{J*&Wh#6s}}ntD>k-L_gbm375Y6^Xl!L}j#n*GdTUMxz1I%<8PP%M zzm^Wl%OLOMk95+k4oc4x3i*7^>8=u5@7yD|aaDN9riS_OzdAtoTrJ3%pmtGA;iVjnlv z;8xZ4I6jGM9;v+ZD%_^tZ4kS-UANuP1tbqV@W6q+)pmXMMe`dr^?w((<=q+^qfH5> zR+3S}I422UsS4b8Hub+X9AhI6Dpibb70rR;QvZW7 zNJ=PbiA}D1Umk z32HEasHpd6zHQ{ozu4O6S&;i|w`YYuV$yRDNrI*5wUB=7s z2B93o3th&`@oGUinS;0u!+hw?{N&V<92ES7gSxkk`ux> za8`gt;FGWHtbmR2pP0)twk*%JEMv=Y&T@<`L(Ca4r+9_@a`O5C5CV`iBCqMcmb|8L zx|2U6@|vC}6jD+XA^*%ccv?!iD^YMPHD4sm?@&0>JJbC8hy|*ZyJoE8>yeOVL^YPwS6i=SHc$z~u{@-Ne zoZ9;w2O~n-EaGLd2m;dM1liOHX_gduiE;b4278)FYoCk~Wy9aHM);4c5&m;)g#SSZ z&+u(OPUJ1uVgH$Oe9O5wLgSX(5F01(9uyOsJW2OBZjpSkeb8S=nk}JQY}BT=B)wuJ zsc;C1v$#$7ai#g$e(dzy&SpCGZ;nm)7bW#7Ymd;ssDGML#oih!MyX?0+fc4laVFfs zWl9b@q~f)zwPlKknq5#cUR~nXSc4Ya2kX*6yl(6d`3L(2)U{l?9qxZcnZ2oi80rgC z8O*ToL(mSQB^G`NYCyEa!qGpo5Zq_zDokVcMcBT)X^eV6U7C?cF`zgsVglU5L8#gl zTy{p)h-2$aAIdQ6gnefn`-heB`(WE+6#ud2roWNF|9b-dDOC;sl$(ZsN=9t`1+>c) zeu3`t_>D`K0KeZ{6~D~<5K$5>F(X4Tb2p^3L=fg$bh#ECt`|>5c$q^TzD2xj7g>HV zpoPNR&_Z!-FhXtDU*Nm5@%8UWyFHK>_-=cKx|oMmlzET?t-S*rMLf7xU5CSq>mKPm zEdmR@js1uYw(7qvhFgipS*S|IE8yj*#)6?f2zi>XV{yGVd*tvrXWsIMNZ6|1#Y~#D>N0!f>hwGLIo`ktEHgDfvoDhEC(wuf zlacO5deTcQTOUj)LhqM9Ml3LcWz^>T2nE&Z2Er! zhHeG7lJ;g%AQq4T91ZIgyH>q>*Jm2SU0SzTa@G2{z^B8!a;o3PTe7%bK-RRZ9i7%|N(vs?COsY)1eu=M$>t;@-0W8tSokJM*nB z?wv;FfMoAP4Y};CR~H+Ld$H4e7JJS4PkPi5;HC=Pbf!*jBDrGjbq=cZWa)O|056u+ znd<)o2pc6cO!PnASnN#6wRre=cQORAUSo9z(Z!&N5G3Gh45Euctm^5=u-Tqi?2ff3 z7rU+Y_+qzNUBr1EtsO_&V>^y4w43-jzSwT;IC3G@)&nZkYB;|G^ zfD$6-@TIpQi0x5dJj{8k>f(jRLnhWHz!owAhOP-YSnB|pW#+K=@x)_g@i3B}ACjsL zNCxz7t1X6v?#q)!Sdfry{ll98MU6DLK}Z`5`4CvP&P(e_Ci2>QEn*UmR){HtqPUCG z;^eh=Ct|YTW{Bxf?Cn;QJmtm4r-2sbIN_-So@nQZ=)(WR9jt}jpIzpKJ&C2N4#M8P_aVO~^NTG6xDly!BDfMNX7iF7P!>K$W6VcGc+Oe(fC?lhze zk5TFWMqbph0Gp(QU;}|95^eDSO>PmK`XD%sdok>~5>^sQLTY{NdR|Bx!jx1W=RYx& zs``d>`q(!Y(uFXk)5qR)IVO=yw2&MlPHL;krP_#G0wE_-DG^wL4gq>Y@K6k^$yGc8 z^hN+BGH7-Y7ojdv(2`^poAn(>Abl2U5=7MQqzUIxp0Y0hrpADzRnzKmH zKaY3@l6ekvE+|eim#VDAr=S+LwcPz4V(vV{atNVpiA-qP8XD6?vH_Rgp5_y$PRsK2 zOqQ`KQk*08@|>>xPeGR*(v|7Imaa@eaVLL9bY*&;P{=>0`Df;{+4|7+*uJLM{xt@` zlccxE=nd`mcSuQVFA%QipalXrj^$2#rvfApx%lkx@nyc#D5E@rDD+IDjIslw&=ZsA zF!ZQGL|quoVx51uSn zQ!Z8s9&+2RQS6NI`3E3Br@-gK+>~-Ox`BEK4g9N6Z)52CE&u}SD%6`-xx<}2 zs_0D0&|@p;IoN~rUyUWpd~r~5*i+np z;K*?dq~L=Whiv{LoO9IR{zpzr0xQ`G)B|W$m%Y z7$K|ourj9UM8*qM9QrS%r++h$^pmFl{8L{4*@`lMU2~O$yBQhDQTKs8IR+3-Ur*kT zc&4wg7;ElK)0@Jw$qHWdR$k0Z9ult?j^+`k*t9G*dKR(i2bmn$HWi)oF^hUfHX+2h zvSZQRIJv!wmGBcbj`<>u2P>E{)m^O6E{s%Zs%frHsZ+hOgLMr2Y+tz2h9VoPMh+NK z5fvEpjObPWu)TN=lKyMyRb=uz`7@$d(es2t{xQv;>stK7di4K5*AKnw1AJAMe+n-j zmz;<2EyTqVqhLOnQ84SrD4b7b^ML}?icO%0j$j{f5z^YcG1Ice^xlm_2$%~!^xlm& zWq$O~JJTY>&tvoX#GcJ#Je$~aL9;4#Jd%m?Tuy&Ind+Ch{R8x03(udU{>q;bJk#@p zLLNx-$0h^)0ng8>3eQ*aRat%}UlZl!tMGPwpC00#fxU+ZEPlMK_+^V<3DL#R$3lE; ziNK!4=4)IG+<)UG*B!Uy2*EDpp%CSWkk^fb2q=WSb|l2X6wU4q9MN7;*@54OvKFllY(|-+` z%=>=IT#OmHA5M8iOM+>MY5M;G+Qcj?^_1rm0Q`->@QOLE-5(i&o(L$eCj!<}&!ohBJ(KeC^-N03*VD^de?5<^R8IsH z*AoH7^+dpW>Y0?7uV+$TzMe^G`FeU;!}WX{Xb5vi9MiD%#yeaP72P%#50|0CLA_MF zA_8kSrU-OVi$w(Jw^naNU@cpUKo_-GM8NpO>W>JlEiCu~J!8TY5vbk@4{e`Md5gnj zR1J`vu7@BpYycpq?;&^$D*(sodSE=}hT@BvPn-RRamDd_wt(c`&qtSVI4b zu>=resVP>B#ZY7x2!wFm4Y(d-xMCjTfnA*FTXl7km+apChX=q@%=ry>fBCBiFf(ic zJ6`<}d>rQhk`;qmkNIS)TA2$~#GDvK^(Z&8UIMzT;eUul2+2;8+24=Sb_izz&H2VE zxo*IW>abS{HcSRrWfZQ;C|s2hxR8Zmj(DSe^6E5(Dh&%(d8yXyZPixtqRVxPE0OPN zbdu&8Xd=xtw11N4P+PCu2ZHk1dZT^d2uqx5U%zshi5zf};|L}%eGouoF+lG`4g}-{ zdF*l^=ojB9nYVIXK?%k99U+lWR|MnYJK?a2grf_D2~ zD)9S4f!`Mk{Jvb^_Z9QAbrRD@amf=rtxfa(pI^cMz7_oMUBUma6aO;D+NHA~Yqr=r zRgfB0oFSZ*EZHTM>r|nltbz1MMxy&K*1hdD+|niH_`}_imhKCcJJ}5U8UKL`32?dI?Qg&FDPSIT1N9t=Tol55hUenVJ=&_mL{7MaH~Iv zbWT&B{Q`q&clHjpdJ%JIc#S#y*jAHS@wPGhD>M7Ytf#V!oQ|$hH#Tef#Fs;~qDBn@#Sa z2HL!j8yT=g3R5OHyz6{dalU?_hUw>Kw8Kim-0g9J0}p{957mzFaV`2EH8w^EBG5qR zdZU};Tm7FBB0z5h@NIL<`;zotGwh3G1(VcZ_bJc=ShmR zG}9%E%EKhzaCz`rwY(%rQl6*Cmlx?g&~v~GPH9KA0>-S59*3-|d%-m?&3JAe^*dMm zL$DCh3OULJ_?o4_4rpc)ccO%*?5-=O<3u_s&CA3TbD(dGAuAfuPCDk`F@YhhQ!WxP zSFZCr-9vFl0x0fCz#yvao`9cqtu;~KN#R9t&JRgxW#f;0VU{7vayChdDi@VBQAw%_ z`HS@hOst*9y0)yY0E*i`VWmJrw?)EuyxVXL$moT*#KMnNe0I%yHgwR5t-4ag4<|ALIZIl#?t{5x{CFQ2+wL1hC4f4PqdPD)5poK!XTLQUQlq zjuGHkdb?%wi7#?|7vnj!f+4qCapab*;m0d#|3?F^jp)VjxHK z8kdHB9AWS&b16HGPo`Qp4gkSu$HzK#Zxb$JA8}Db*>GgR+XQHZ+ofSW5wl7tY3d2h z?Fsea3FWqgbi!hkb^cqg^S8CGhTcxyWjP@?I0==9zX<%=-tC z_b$?A#gJFlI^TtLy_)kI`Hhoj`Hcfh=cDp?gZAI$gj`d4Wd8wcnj^=jLa#p7p(Q6d zKRc1lZ|D1#A_%J>*H8(5w=1TD(r}#cJv?xQS{eocUPAZDG&`X)3<5ZB{2|z24v^vR zSm*KXPURp6v8wao;Rt@AE0u1L#yd9???R8qm0rc0Pvf1JiMP+=aS>SYcBb*p z&&1pB@wldJHtuDeE1#{0lYtS7l)zAlIITlGRE2mc)F56;DiAN_;g6RB`0-K#eY}(h zK3)p2$4d$5@lqCYRPiQaoV-%jdH?&+4$(QSn}3-@W|{Cu*hzaABWaUBHM4$!kktIaFIPh-#}ys;x!J)fSOdTSZcBEmE$wh@{#ol4@&_ zvbAmFwg*BD_Tx+Y7#au8$3Z8Wh6fHRr4Dq!{iMZ7r^O9RXLnGa+G2O2J+TA*C6$o@ zyrhHkR$6*ePR-L3`Z@QyjKPzt$4>fTmYXBbyRKM5!-4l-upv`K{eEGNSV znaV*5k^iKG_%cbnJqc#d;wK(K3z~8SD`>f4q@bPF!b!lrF%IShDGeU2m??KAorT0h zJp21`1w6zvdW?%E40Vv>-P78qk$A=(bLT0#0N%}xjjRk6VBP&Q_gPJ58Ou9o{&BXdy>-Q$=Br-`WP;F z2k{K&ihT^@1qlsjBBJ5WNiD_;LK@CQO2eHMTnS3yAH+4BiM)o}MA&su#>;gvBTl0% z%YKRar_bxqi)?OQWSEBP{gt755A{h{Sr3(7xlcl*P~(;RBt#0;U9nF}D!Xdebjmfw z@ti@O5D(6S2QP9S{N1D<<4z;>S$9()-^G5bTOr+-FZxd)DNC0_U0KbM1XfwOD?_BU zyD~&tvnv}$l1d%v(XKl_-l;W=9IDviME!?DF((Ili5%oba=^V}>Z?0d;YyufyL_NR z7Ll%8)_o7zaf0iBYwKZNC}-3Hp}?82hRrkDxb84eoh@UC9x+i?K#w8+LOQhEsmZuX zDH@>Of3efReF+UjceiTR^4#!PJMWf6q0dUCKnfIC((wfnc+FeiI#q^J!&i+Js0v%4 zFb;KtAi1_LjMsME6?BbAcN#r`G6{C~jOe;RW+spFy}Y;w5`P?%8L<4RHVUWHDB|~& z>o`iS2Ge<)H-(YBuj5!{C#53xR@ zrHs~RxQuLl9{L)}LtFoNF!SoM?tD45wT9gK_pf4nra6OCUqdMC{;#=o|Dz9*v8!P%N#*22(4uj@e09#lRv6zkli(k&hAI`IEaVpt3=c~3{S3L`Bq+8?Ju(n!# zY`V587$WUg!V)WOv_VUe&i`fdc;^6VPb*Ao0L@Qfjg=MBVyiNc42w$xq`!pn+;&4@ zXMr}9fhe?ls5!D-NVte~57Ii*C37IpLRq#B%l$%O9rlSy#~jvS1pzf`L+}m*O&)5L z9R`~`ym=re;}UHa%)S{CUzwn7^oDB7x7H+?1<6)#1n{i@RTu$!BYK+dRl#;z zS;j*-I|AdOd>xN*E>|w}@gxAp<;rkl>9rVc1Qf%KfOWy02Ifo8du%(RP{ zTmoc_!%R}3m{$=@SQZ|J30}i6!E1Gxl57%~l3Ws)Jd-R;k?xSZ6tcmwbX3!(EZ$b4 zS*li|8xCgOVXHYnlu_J+^d!j_Rs{(S2rW!o2H3S!w+!N%We``D0qzShF5w&+FKuEz zJeNY}tr&-ob>hI|SeC?03l>VTvcj@3VhhX7{6r-PI*#KGypPErB*5Y&5~#7@!BroZ z2}nQy0bY;^$tp7vFbGpTApt*mEQNIBcjxL15M5Rz5ZX~NLjW2OfX_up0-o;)&qHSr z063Q{32fye(6Atq;IdL`MYxlVxWrr>amlqHPQqcAepvmcEiSQ!wL=r3*xPGp#Wr56 zPItUBiFpi{-dqtgJ6}|utIL=R@gOZPk8{!Z2&YOg^+7DBv9-XQescXAankf!V;;vE za}#ajd1?VX)2vvrG>NViOSUF2oKUlNF~f!VnGBrCn!Vsm7TyKtn8AsO6K`B7@o7@5 z(?aaEx}k9Mh11v>zm~5Hjz{f(ct7}gGn1SLuhj5Ujf+f4LN|M^=^%32%NPpg83Hz)8$WTi-A43fEQVG|hArz))T3-^t{)*(wMIvsEz0W1D?Oh|Uco#ed1c6!Va9DN z8XEU^%k#089BF1zNxJ;3VsV%UmbjS(A;z>~O86{a8wxYX!ifeh`hfqWav5Z`6hSq} z)Q{hsh2*$_=dxUZIy`K!8`8%E(xF6T0XL+xNrdzvs150Ck|K~b|Fr;k4+36LgBmp; z$d5Qtt^p@Jbj7KL19s&J+YQM1F{oiY&SZ3Uf;hS6ktzc-8O)zH-28KrPbL#+%aN-T zgq?L@3HT6s%%fc5>55Ow(4N;1>Z|vbq2|;Wi51WaDvo-C<-oT-en%inWFN~n&v#*{ zt#F6IJnYsW`p~zcC4D5XN$esxykGMsf9j!_{m&? zoxO@d6XBq})6`AOVWZ-~H|T*C1csm^aBrc+J%xHu(4isY zFj_>yPQ8FYd<$9f5Uh1h$m^52vZo+?Zv=eL0DLZ!k~%X9jP>;bidm+i44zDnZyr^X z4k4P@(&+iKIzVtXiv$cue8?q%2j~JkIoqJW!em-v8^k$B&PhZ%zNN`+trTr>pRpX* z|AIJI64w|@bLGx)&GVHA5{ZeRo21qn4c5wlWv$(^hHziNx)INC=WK;IS`G_#a3;nl zaPP{b$*t)!O<2E!GqFX1dv_+yKDwbZXqB32f@KPv$wD67dopRVb}DvmWVzHppZ^cq z!(sL3tOxOswuNenZkFgk69@;HhE?TJr z{$>%zB5mT<>{-Sz4x1zv$JJpR@4`d)L53DErM}{LSEnH(Vnd=44$4SHtsz%As-2C2 zS2hM-5p$&Yfi8eHI-Dq{X55m{9#92DEKujq;}v-8RzUvB&dpwuOgP>ZAS}}B4G-JVR{>8L)+3wJ@~_(P7$|S z#0A(qf%H2F*=#8ecW2FK0Txb8qP;uaIn#&$3;FC+jLRzFi~X4FkQBxqWV~}GD5-s# zI_2#+%Wtv0Ef9bOZB@_~1#J%PYC$s!npMzrXuZyv8GhO1#z|*pjFTD%o^ zc^Otqrb7rIo}|5(Bhl_@veG?iImDM-x1^Hzo>X$(lLosc+!I+fLl)Rmm>~;!*@oQo zA`gkZZGwbe^b5Tdn?$eqB3s%#Ja>O z=JFjR^AC7)Lnw=%U@hMzCP?$XP{kxDi%m%&#zJ3+J)jR6VP%}0Lh7f^Slpl9lIc(X z2lTL^H4XC6gVV#jUDu<2`5MxCv@Tm)g5pFvAiVrbb(Qt$Nd{V)YJK{VL7ApnpI&4D zuZ;hjGx&c!>Ox%^wg#AK?BiH>9Ej+GA!zK_+~bslB?pXNVk)4d`%Wr#U8ZD@r{oHU zbX7KJy1G1p^%d;xJAxl%Llz4<`CWkJ8p4J*PP zB>+DJ5@N9Y#ZizZ>gn>d+WkF%?GRzZIqQUtFn$#8NrDJzlfhcdHMQ#;P>i<{kbS(G zt_b6_A3#(X_2}>-CvoO*`a&g6ciaGj72?OvEam#(vorW3tb`G0EE$YA*+eSFnjj*g zaJLQ!5!H}53LwDq1_VCsVh!t)><-~;32Vdf=_H3GHfv~%S=H@pBD^|Z*1ZA^Y^@{w zPHZw}BbZ?;T*jEK(U3q#OahmTkEuW;#%v8+V{O}*C@S3o{5=OSd8c0YdG7*9F!dxr z3`?|jD+Z%%P#A{BY%~lj>J)~ufk0keKTa;>;=p=wk}*|V1t*EI+Nt3r3(4v@Nx@hV zCjo{GP99l%mPgL!}pA zD2t)~!Wpm96a= ztvXTeKfqZm>LSeN$WT6?TO%L#U7ioF?pZmXZzcJZ3*pJ+Gj90|o#}$Zx2#_ux|@Oi zYuPO_^E>%7Vz)?7JBJ#Fty%t+(njFnI^jXPV46`}ou2OF7BlsW71{Sam*E)OW^DG+ zgLB3!y4$YkvQ!mh8}j9v$MZa0*3LT{ANPzTXDgkC`22&#B!~BSadd$fM-+H*f+O^Q zv<>B7Vn?YIphTL6TDr2OtK`y=5BSG)q(UpnDcI8CgY;*q%buF_OPg2z1^B$2ip9hk zzz!he9<->X_$g(kz|+7pg=YrO{I*DgDOh5%ig>Y#cqs=v7-tt)*bc@a9!sb=^QFw? zUz%?VUu;2QZ~if`(Ih73v71-5nLh&#WuM`j=@ zqS=udhKhW481PDxw3D4XYxB5}{>l{1uQ!xyzNKw4OG-7p5x}^qPiWP}^+Z5%JrPh` zPXw%|o=J)MdM4%N>zS06ucw!_{(7S4FRmv7itCAh;(8)rJ@rgV%-1t1FJI53w0u3i ztl@gnmN?&@Qe^TqlvloP^2*mrUfKH4#yU@*obs`(LsjTwIfq)%$1)BTpbzt159}C| z4Z{wvVc6j{3_HBmfIZ1Nfj!ANfj!AMf!*`X!yf4zh!;Rcy0kcI%gcn*Oj`+_nYI!t znYQ9UIICL2>r?ki)Ex34*Iy{v%ectPfR(YU<>}&=r!Zj%pd7L1P#7xLEJtYmEEW3= zGrV6e{VCd$d1v-lGP#{qOxGfoATTch(*oE?1rLt(T?V4EEXU3+rVDG7siAD}@C5us z0s?Jk8PkO!TWTm9JUjtEk${lf*~WBX0+9*q#XBY0jrVk z#zYM>6*A=N=;HuAV#5w4*{B&}GuWs^Cm{#W5gSG+Ws}6IRV{;!f^;x)fZHlk4n0uF zo58S^OB##zlOKVq@FKQV*R(4DtyP-Tu9i!ytfH=Pl!Jz#a?lb~4kX8Hdpd=JS$O}D zxoRtX$y~K<=Bl`a6BG1AQX1RLYLmn?SGCmv&rK$wSQ+3PsC&t(mOwbsz+}(*O&uXb zbYhOedbaKqz-$IsP!`sAvS22Lr~(r!5$L=*tI>2Ylh_7k@<}ie2T`+NPK|<@AywTX z%I1R=u(da4N35sCZs{%-P&_Y!nHcN{n~62Az??KNu@32Ek;XPKlf(oQaj;OC1rsZW z!`RF)h%6UKH{*bk?=b+$cXt9nCT7GaDZvI|OfVr3u}%q00+BX5l|~hSNkYPh7)e?+ z_QWW7EWX{9{#PmeoYQXs-3F3&V#TVXQLk}m7nZA!8rn7a(8VgK2o@(z8R6P`$D@L7 zok+1>XjE&ms9Ul1mq!K78ijUYSRjfu`8QU1G|(%=Za33MMx`#+r(T@)>)mdUsU579 zVoekCZyoOQO{FduquVqzZg;2V<3@KX2)s!o6}e1sU37v;CurV0$yrndU^N|b6iLUs z2&i|tTBBCv*?V&MoybVqqojlXb!p=NnhOM7f(Ds`q*aA#1ILR&)*vaal%0=p2~}rfd&(4vjqNehBsR8PIoSxUMU0Khy{Vs!JARybyUw&D z*a;obFmfCvlg>#asBumk!HnYrN97gc#mRpJElztiBf3$fxYT@5IH`2Ze!<38n8O2Z zZeX7cyED#+Q1+P}Fl@6ceikIJH%;X{0LlvM{6TQEP7J-x$8`|g7<|(75Yz0ZVHsfF zhoKU3YYoLGG&7nI%IWL6a%)}J$C(iRuGlFVNz#+a>B;2wWO7?FI+cv=;mPFmWO92l zxh)x;N=BmcWO8~kxjmWOmW)onr?_0Y1bEKdS%2H`ODpJrUPm+mcZ3q|bamWu%Ot`Z zTEwUyYBrN3h)q||k%YcXBAh9ST$V&mD@D!}r%WPzDT!Q`L{3X0XNphFU%zubV*==c zGB;+;UApDR0Ei&tZ36EyEU)t;f{eEbwM(kJj*kd3-X@Hu)5oP-0h^tT&4Ou0EYxSr zi1}?er5UkfIWd0bx5*8f5j*Y}ntewro+I zLfgFtb$V&qpL6m~c!oVVcLb@}fLQqPuu>HUKfT?STt&c7Z`zWhXB~&uF5_`jD|>h6 z$XqDSJorw)kj$lCf%5q`T;HUF2uOid(opr~ldC+s48v{CZulT3X>)eNoHvS2uoslw zFdcE9v5=VK^%`XO&|C!Dg0@s_pP&hGkjvstSOl9Oz`LqVmB~2fqdSt;YgT2+2!@gc z3n7%Ys%2Fwgq3W)R#mAW4s#g)jyB5T#JR(`$Yok7&EQsgNfS&)iwYQ!H@U9_Z7s10~ zZ!N>?1=w55RQqtDy>%iPyR^41keZ}}hh%R(D|_piVSDRP8by^cOR?GYRc3b0`G#LY zpLh&>)EToewd)5u;Z*{{XGk!e(dsr}-`4ClI%92H7(ryp4jIGAQDB0G$W;xx5SjIs zF`OJ6sYBvsjN!%_T3>N?=QNIbk*pzFXUx`K+G93fLR-Qz`!cCDUD)ui1a;Yg_AU%o zb1Q*N3o(ZIoQUhkqsDt!9%4m|d0;g+0<5nSS--n}T*F#z{kYDWwylY4Ojdy4R@-t{J4FTCsR zU0IVr&FQ9hy;;F|eZa@rL$-ly-}T14lHoS*dL#Js(3?hsgq$9F(`b-D(?joJd%vi} zaV&7;4LlL@X;pPy7?rm^$=s@=z+#J@>{TR4+xw{YdZg=m5dyl)%hkLKP_rT3D z4b$$2n`0HaFM^w65R$TJ>6?biQoQ-nzk;*8`BJXT$6Jn+7oI|^H!KV0EZ}HM$NLO+ z;@OSoad@7H=c#y}iRW58&%<*Ap5u7tZ;G@v2sUy=4_-tKUc?GsL-i ztUO+7diJ<+=9C3)H`4eyuPxCK>gP5AX9uDGa z{#rPQt@&rbL43_W84hA>{_$`SXY;$@AlBy3hJ$#UpIZxMkgGM--{g1{Pxk>yHHv5a zJ?rnydS~y6FPAO`==?(}U-9SzdM3sv#esj$;*-+AKR4r(!a$!!vpE>1V=HsU-?RSS zZ0{9dn2vKW%ZX;WJF^L`~HN!nS*`*s=k?vegB-kNm2O5k)A)IZ&HZY5arSiA(PX42#gS zdsBB^S}JX5R;LXE_f%(0QruIWHCb^_b+Z9~Pj!pQi+ieD4L$c%Q5d=5p6Y1^_C3|@ z2J$`CUc=ypt7*~$E=hLN9616mm~0VXxF!r*xBxftdymV>xWqGPU%_!fvwCd0 zdaVDp%wDp~5%x-sdHj4r-nl}9ZSIviy9`Tf80H`AY&h15jv?h+kun@_$P1PkgZKY1 zg>_i8C%PDd=thl02uBxiv;DiM3GvxQ-B=G@dV#&XGOxkB6K1;6+foR0YgQ{;L1hfA zB4e%#F{UsNj19u0^lSxz^&O&EicoAWeQ0E1~#cLV3m!u3(GOA%QI}k!f@rn!jZ#91PnwH zB=^8E24a`DX50{nj1Y()%c_@qFXCD!T7u`yseF#RD9|d-qu1+BtAO} zZ)+bTOlYO~)-fW6cfM_msNtP&86$Fd=i9~j3EufuG1i24zDSe1m{uzCl1S-yoovZxC=Qe1qskd;{+y zzJYfU-@v{zJa&3 zN1kusZLN{#8+cn=3UO zFzFqTU_v|Kz+`nmfstCkfKgaLfDu-xztK~uzL8O=y-`o7yb(>PyU|Lhx{*kzxlu-_ zxDkZan+I;C^0QoeTU;vLM7?m%_sp9n(CxXF(cSKPNcS}Kh-A_3HaJN0-K_{B8+NzA zhm_jg3?Fh}ceXRv-iDJ^pnGj!Z1UlbQUnHdt22fH(HkkPx-aFBDl zo8TascQ+!dY0C;%O>Jiux@ijUjf=>QSurW%lW$>NY3h#-dm^`W+wdW4z_xY{>t2Ei zhL_5!%}cA0)l|re6+(RSdUp~IRc8VYa;Pjc$xb-5d5+5=tRM_Al@(5DQdU?lF{qdn z2vG%TbU+~llXcUebb+%G*w2Uip$)n&N4SDrzY|EoyXHvk0p^ z2~apG1Ab_?gdf_n;D_2R_@Q?j{F0H1M)(m;@FSYwM>K<9GE>nAKcWeKL=*goX7Edf zDjMN;6`i`i;72rrpU?qFQW0%HNTIX=At|sq*pAK49I6Y@QF%g+ya+g|V{l9UG77*( z6he(C1R7BcX31hk0mz6#h!KSVBZ|Q*xy&d47g309L?N(?j;X6WQp`BeR7~EPSHOSD2K=XN zz<-tv6Pg_6*wnbsBr(UP1-vIVMgxhB(OkyH-!a}xN6E%{KEB2XxPb2jJ6J%lg9Qxs z?-<`%e}r+ixX$_`G{P{?5o)jkfd(rW%->d?gYe4rhXd#XU%~u2jDafWoq2K_`^xH( zRxMgMR*UhJ7moGc!g&?h!BlpA9s?2D3>-$f6X-|dyPMJ7Rh%5Kz`5L~ zIgO(}6Xo;H2^AU(4w!k@7LHABIM%4=YBo{c^=Dy>^|+BSFQg|$key~hm&VQHe)FPB zUgTu+qDx-nO7o&iUgR+I60gyykUg1ssZXO9doA-a{TyE8Ve_I(d6DAHOSI2~>{ZN5 z{R_R=gP5245_*xR%!@ANMM^X;(IjJ06q=XhKD{W`%u8~fULQzP^? zQ6&QMG>HJwCIa%5=_(&rUGwyb0MRJ|@>GfdQ7Z!Sw2A=HECTWrivUqB0`hc=0MRc3 z^3;m}Q85DYG>ibzG6M3Hi~vzI0`l~X0MRu9@>GogQ8xnew2c7KI0Et%jsQ_Q01_&&+hn=ga zmZ6vU29xK`IrI|8$V)s!FG+KGiCgF;E|Hh`gkItgd5J^lCC-qSc!OTz33-Vt=p}BD zm-vBR;sbe!6X+!lke7IXUZQ<@iTdd!s+X7Oo?fDNd5PlbB}$iXwh8(+OKXhE1nw`4}>toaJM@xyBJu$90!Zik6ii7K# zOz@+5iD-=HnUAO$BQnLoX~5P8AP!NFJCGPhkbfyjnQo?j_95H#JTOJ z$vE^u95xS(37L-=0E2GD(aszCAPyT0Cpj~YI06H5#nEmk`XCOQuv=3cu?Pmiilbdf z^g$dpYPYI5;u#Fm6-RrK=z}b%Jnw4QPaJ!Z?&Mim4_Up&~{x&6pe! zN{cAQgo^N4L@z#`BmhO!62_SbE}|9Cdrq&s60-c&ls{M#r&PkOqOCYO4EtexjXbQG zm->GJODmjDPN{$Y7cbm$U{9mc-@>@_o5Q}muOFx__FuiB)V%Jvj`YK|QaEa}-2VoW z;>CLo_zhz>`9!$DU5ACK6qIH$J|9^Bb&dEqHa2?ZKO^yQo0cnou!g^#ht8>JK2}JlhwiH zo#YPO-AT6a0JfPsS(Vspg1F=Y4`Dsr$!fThwQwgZLFcKqP0fZujxK8#K(KnFSUJY% zR{c>nuiEI*GdA}A_Oy*v$??J(5v8j%N?IFFGu${<6%S-hzRhh@bxCZf9&H*_FV8G1 zwTbx~!x>Aa(k zX@zEtxzbtCikU)JXv7E0n6krF2u4k?Xh+X0b{Qv1FzcJ5vqAQbZIldJf`6cZ(O@EnalDc#-bFi@3yzw$1mT zEtklPnWn5pYDrT@v2>^Q^JBap&gRQpTD8vBE3e&n*nXF^T}F>DXId^(?m8O|+clGR z^Gw-nI5sG0HEiZf8ZA@6aGQB*HkmuwV(w&vxs&Zhr#Bb${Id44+|E8R?CA+M+cD(+%3-Vy#wm0++P&$Zc)6uMeyzxz0>XbLnur1U5b2}BKB2@vM)lUNV4^{sPt2W z7Jrqr3Uqo6+{p^KlkmHf;L`~R2)+9fcy|(ZcM^1W5^_2naQ7wL6$86sP*)6SkIM0} zt*u6-PXfG0H~w9qr;A0&=u~T@$?!D4bA+_TF&zKc?Eph0Der+aGO(r@?orK`?cvGP zTbl1fQA9IC>^L*RhC8W&7pUeb=8eb~t_&QF*qnw}=Zo01H;=o1o+z8V_jJY&R<`85 z`%B)tTk@W6Ae4s5i{yC2>GG7B!)f@Gxx?xGq0Mhpw9havw~pc3gJYA?vB~&Y|9fR2 zW9?WeZH5fE1AS3EULLEoCNNAp7B!C5kJUV4h{rywAkQ*$e6#1seMi%X_Xg&dBnk>=I#UPw4ADgTk>%S=jXHEM>--vvpZZ*c0kKJ-*e4;!y0g$Tz zxsCsoW9{-W2VH5k-;ks|S{AnC5f>9>7WBqY5Mg8dH>sR5PM}K*C?AWN_XO*r1gcB9 zw5>3It4se4mNWGP-v01r<~tsbm0LJ0E`X{y?C;me>yCBgr8vy1qVk679mVBJ|Mgy3 z#^L^4?n$#&PeOsWmD4Y;nqHy8dl9{$gbAE=*uOo=qox}y1OuCq5T-HK%x7uMd=z8V z`rMY}QG^eLuA2VVRnseU)%34hHN8StP5;_e(<>C|Yo*oN<26YhE47DWteMZN*UU#T zkWXAXgfY(dg7$cvmkmw(|Fp401LkL820>Hqy0%+i)M|7xl)k7FVD}(7_2Wm5V-)GG zR>K|5P7QNFID9=BiDGc3ZmEV@1Ni%l5XXZ0l7diUY9CWFJytM%P{~yI%H}3Dn&}lw zN`t4DB8~JM72D7e$@L*s8foy6%}S$2Pt4vJD7YFZ!0K=flMI|FGxd&NoE9@xn_uZ7 zK9hR~-8LJD#{$1^rMwYZqbyea!;tD9YvVL7MroYIXq-i;tCLjZnKnTuQxss6X%l36 zTH+FE6I3E;f=R?LK%^%m9-%!Fk0}O&M}oxQk>D|_Wcs|y4Z!2uNT)5Q(+x(a8w{gD zBDW1(gA&KE3ZGIhXE(2gFOP6e=vL=8AA&FDKruhX-Ky9QOZ!?hG;U;WH*m8=t=+^g zE~~>YuZd+fc;Q5cw=V;F86=3F=^^Mf#N(IfSpztJ387L)aeE$6DR3nI1|i zBITEoN_%YqIwcjG@JmIC==p_o%1DGv4<(hd+sg2iyTu>wW;1nK4JpIzmgK@B@Xfmf zW1%_DU>OG_rO3tZWa1XeKnAxkzGgEBmw=H#V}~!XEg*5bb-PA960r~fon*i0$B^d^Fn- zU{*dvI-;l+B7WjMcpwvHOw`2669Bq8>*S`FJWW(if(ol-WLY3{)ty zsV}^pGNl!xvz~?~WV_g@GviE$Aw3J^Pel5t3}3{et=P~EmnifZ3w#lOsZA$wmpA0} zaRFiyWvR&~@s-+X5?85lCJ~jl$n^06av^?F+e^x*bPP=_rB;?iRNk~QH+K8NNWIOf z#j9|DIcW^Cd$Hj59huvuOt_Q09yn)yl23fL=a<`{|XZ>Fkd zkm5BptB{sYhdq7g*%?{zg?E%T11NUxj>tUa_ z_8A6=#XPzdc3eE2LT?1{t(jPgY6j?y0KOGKdCUO45x}I2L z-`JzFzhi*j2;f^O*r72%Zv^nI0QSKQ&>I1KD}bFW1N24!-wL3j!2rDxz_$X}O)@}l z1n{i@_UsJM8v%SPKrMv;y%E5-0@yb*h299@TLDy77@#)-(mB-Cc>qzREfYy<8J)^_K;V;CFGTF19|1KFRwh_<(0>{yz;n~S02mq%HvmFdCbZyk5hT&u_>=C z9@nP#FqTfRi53x7|3CKL1kR45Iv2mweQ)>OW;FNS(Vfv^X(U^sC5>%aGG4&ggKe-q z7_YJz%YaR=4Ymg485t5Wy2xR(fw9CMV+a_r*bqp7uy0{YLV`(zNeBUB%u9H{g8(7y z@TB*B=Tvo9_w89^VZHbM|95}C+smn{b55PAbE@jp(g;Y)6aiA-5s;QF0;IkpAT3`6 zNPR~@TFMBJ`i_9KtPvpf9RX>HBS7jq0@89vfYf&cq@|AlsqY9#mjME#z9S%A5(tp` zj(~J|AVBIn0@9^|0IBZ?NS6%)q`o5{T|x+u`i_9ZD<@1=r)xbhNjV`Pznl<|Urq?f zFDC@#mlFc=%LxJb<%EFzaza3UIUyjwoDh&-P6)^^Cj{h|69V$f2?6=#gn*=+{@+<1 zI>%Kk+>UYmOEGrDd2IpDYcp&A`*G-Lf3yYP?~bOhDt5nF@V^M3JYSRovtqXT@XhnS z6qwbr)r)gadsARm%2qvC+N`I*tdgx-u&h~2fmtD2)nIwEngX*rwkp9f%}NT)%7~?E zE1KmLm{qYA;?%fin1Zt=VkO(kYBNZ|SrJ<$oG8~UrQocGts>5s!+LaAF06*VIBX7U zsa-HDVI3#WWxf#4DpEC3>t`(_-5C+!sga^HNu*)j%zv{yW~ zSK224sgU#s85=+Eo zcGPUX)=16lpV_>{2+i!4*?g{%nK?j>#}SLD%*kmyj#wmRw!iQ=ViAo&=0%iU!a9e5OqBJiuoP1J6TzrWEkJoX^ZYo`?C& zeB=2zJ~P93j`+-~f#(rEvsU1FBcE9z@O(0#nL#|C#%E>@&u8$N8QU6v2dJu9LC0`W zPjsgqjKDgq zD5gf%a?5EburZGH?+Lpv>nWh+gaM!Y|VP8I$ld zpLg*A(LjukbXJp}lJJB01WG7VFcdy|gc2D-32Yd9|NrvOGjrYY_e`<-S`EBuEqq_@ zaoJ;GcvAMh7QH`5$$O^YJ;8c7Dsy2yNSVzVtrUd+hEa z)SEbV==gKD{B~7k)XYfUa{cI4^|INiRJI$Hu;YLdX<~m4t2FM{X{AK~D|ge(x=9^0 z&#ZAgrB~s&Oldmd$$(;(e8Z8Z5{3*Y=7--zOLV1JcsBTYE#-wB zm?AIF({eT&$3#-*StR9YIWO{*9rUO1Wng{wc)YU8##2tP`4FEw*JocsDHGinT9k9> z9}4YaLfSkgl#2;r^O(@(>D5Wz^Ym5Qa4|x&YHQNY(^)92XsgIK)(9#0+4c2sX{c}w z36-T#m``61n~ovjr}*#I*CWH5)>psqT-3kUnfmua4A`v#p)11bHn9yA%&Hz>EE@ED z_&rJLAa+AU&xgpJR5YR!+febGRIJ39!DcGfKc?y+mEE7bGsApq4YRVd7OIZV-n8-+g*Ow z;*Ua(rIkt3&w?L7+0Z=04~Y{Iql#R!4In_z38P_j3@oRY&;M4 zP=8)@8zQwg`|S-qgHj*eu$Og()sgH^X%hSvt z!sig-s~aurQ_wT&64sE3J*o)q0}rI9`F?NfajP8JSRNxCFX%ImWNWaq-A_) z&G1W4>OZvRIJri09g*usxt=W7({N>7SOK2-LpN(3mW+8=$;4Z!!>zDh9~Lj+Zp!yW zjVeAJJwAkSU_H26P}AW>wzf!Wo0xPSg|zP8FuUK1MC~&v+h-!MJ`S>A>)08V2iec7 zP0#UgU?PgX4C^jleQD{&UA)|K)@FZjLr?oYd}xL9-$TIj4wRKwqj!bh7zuBHmZMF0 z1!{)Qku%QS8poU$f;b+cIdM)woU0i}SeSs(XO1S|OJ)ux;7ca=bAMO+q=$wh{*K2u z(tpw~G~(5_Ui5d^pvQyOyfw;?tZXD_08m!C##V}YjdCh6q}bLd%L0(nXZb~-!Jk2h zqskLxIH_D;m>fqh;0hTR3ok(Ydt%vOePVHrbUm|amaAA%r*D3SDK%;2hgoCnqk!*w-Ev~=5j6KqI5FIorE>v5&!==Q# z%*uey zQ=i~bHejV{su#S<2FyFSk+0`y`w}VOzckP)Q>|WNgb90erXR%d>d-E2fLp5Cl}n zm{K*=02NxMPz@4%iWlHUrzTS(Pu|r?MiDR36}vRlJ_;Z%WIK zbtKwrJ3X`k>|ec0>>;~5SSBl>tPjP)YY_Hl2y0gK+fIf*qx6P3(Rw_SEm3{JlH2MKCj3PNZy$0k&JDQ%@{V5f+Gcr-DB% z5$um2I`+p_&cvMB8mbUx)KpW)8c|*^!^F{hC@=WxxmP--i9;5)bKyNp7an`9pR&B3 zH5dMNHB~KcDIt1UNiPrd$uk4Jri#|hT5&yU0v6OP7nh9(?denxCNO5T zW~d6EFo9(Q6y>PG@lIgT072J6!jT1f^QMwdP0K0Jln8gVYamM1oT()W3 zYE8^csPUAg;YtG_(F*}71%QZEH<>7YfTXA;7N2Aif#m|HTwxu`B_=54p_K*az>^5t zb|GPu8G9Y*KTqqje1eNajTS?&D(`2OL{uU)BWzSf!3WVAlv)r3B20LfFnQ82J|avq zAz|{QVSL_(ZX;dxux?~u7s2u=X~p4k&9>hHV)o;{h9+cY zZJW(L41Z_<(wG5|8XM!aO+<_p0AfmT+IIBuz?aMSVfBmfeV>?5Prj>4KGBkp&jt32 z6o>NFBj2he4)~0}gt38{+x81{j2#R)ZMaAn01*r7qly~=m`#Nd;Rwdlio zFZB@fb8PD{UtWm*1*iGQoZ4C2wxbm`b8>i);{@wXALY$KWdpMHFe89sp@-0HkRZm6WZsuks3o_c5QC3(|bb0tU{%a|r~G zCE}t4>_Wr7G9EMAsx{yV!tWd|;lR0HajP>fr+MNq#UhV9Dx9^=Z3Q1ZOU8DbYSPs- zxXV(HD@E?28w`^bA-Kz06b%!hF-%ta;4UjrG>iqW ztRYYAlXAdqY*rf1HrSxa7lP~}xE_2X#QXvr_B7?;M z(TSusB0v~7hmI#z@w5-4D<+kZV+*N_oNO&S{G=*lSAqL+ks9MAHPMhWH0l2gWoPadG2BI8&g8Cnm()zDix$D$ScKq)BB8@2Na#8&)j*5$g2^S!PL}nFSv^N*=18q26wlq=FYt4hQjw zP0Fgt5B|?XKR)Y}Rk4xbc&pYZjfC799&Ye46cYG!vkOH3GD_Witd|mjV`;wnLVi8LP}-k%$J%BfI9N zQDZPGjY%z!8Z1?b!K^|iSROT4Dppy1728k-9}+t)*zGve_EMFl1&lcVuaSAlI6)y& zlS!2cWsfi`Zqxltq>V5uYts`=M2#>jXwxZ8I z7)JaLvs_?2^;jXgN8{6Z;7OJED8o>`ne|cXk?Hety$kz<_S@%6Zs(hP039<5I3mb7 zC@6Y4$Oi3w65khBZZN2Cp1uv~n|>sn!x?Gc=l6fw5o(wF(2h$PAR@KZ*p5aSAo8>o z*o;B#SZWskry+=*vs;x7H9&=yDMdpHP$6W>&(P64{{Ll6@5|c0bltSJNXDSjyN*jS z9;eD+S7mDZ3v-NrbH>FLG$a<9Op7 z7Y?<0pktEp!^=iKL&MZS0l75hulLri8B5IO%9`!2dXIoKRa@^7aCo$h3M9F-w2c-> zfRve)t5F0A5UE<)Mi*4JUg7ueYtS`vYhkyR+I2XrX;@j)&aA9qdG%r$PI_exvr)$? zob<{X=AnjFINd92UiGMCWsR<@I14uRV3G5wN>~jC#wvnZO~Y(!X)s!j&UV($JQ28b z?F@0T3nO=~jFIYQ3xX?SQU$=3F)6`k*Qj_h598oA4H(zHXie4|*S-j5W8%2>MGza~ z){Qr{w&D;xHPTjP_8JgA-`WZ`9y7djt*sz%QbKS_nZ+Nko$)*STJVS!JFmb^`?-f8 zM}8M!QDHZMa$qlHC#TkkhXkgH0qQQW%K@&DioGR!+)xzjS=;E#Z z} z7?Ah}9pW5x6spBwtDIq6E^NZ<$DtqbA$`g5eudp+0WG;m>4q>UN3TRfZq^~0a{RJa zD0~9x74PaphxY8jf?h|iMwHBmNMqvI^Z()#cmDKWo_FTSXWE=FP-fPUo3~*7i8`(} zEye&0kh@~YId1~Du^i)0GSEnIiLlUprh_V$p18mhq(FHkzZ#6w?Ng`|cm<;-44_V_ zH>xchGmk^A`*FOrx)7qBC{N7$NIs*R@q%-d!iiIy!gZ=nHouRye6fr%cW84fMZRf3 z0Fqe&h&yQZ%t{<&mR`8H7SYWwd6iJO6EGY_R@qBW5XWGSHZe*>PRsZ(K-elb7GZEw z4ooh?aLydE#?6{T24X;D*^%10X+QwNhydovp~OKB`JHLWp&(76ggXi&YUD7mIg~^( z7$;A2h56RsWEUZa!d zk+!}KuFumoAxu9CXeEjP5@I_9BGf?-6s)bVINR&N3qI|@~FOF*+cB7pe(snjzdtyDJRrs*e{$S8kiy&{h2zAMsaZ|~8FRo4E&qQ2}WCjBt z$3ep@aDGGDC_yb>HCoh@JVz@Lb7Zw*u%XPYe*Z{9omIWsKA+Q#)6b$@<)HK>Bl#FP zPU6{H^35GNA``3X3em(eIitiYq}sxrgeniIb%un`*A{-AZ6PmRZ6Se^5^}S}Uo0#I zPd|j~v&j{w(S4Yxz~_kA+HpM`nQ zj90D25*bbv`3yWw8oXXe9>9q6kpcK-JRl_o@@w}9fL#Pcl&?wUYf$-|Pk1z-g-vQ< zKQ8JgmUdNUFSqx4yD5cAhy00&!2y>FD|g5w{a3I{HHC#8a%xu=LVeh$kgRd0-DDqn zwQc;m?M9%qJzPhp<%TGi0RwKA>un2esggv{6@b~|knuC;!uW$3Ah&TpgE+)E2vqnm z1k^$ZSY!(@DJhf0&pr!l3?SP@?=MyoT{NVmXn;~QgqB#L6b+#zV8P8*JgjpZ5AbKP z2u`r{P;hf$5M_D~@O=h#)Hz&}iyRX!F@KQoR*U->u)Va$u!&A>(9(5N!^UoxN|6c@ zh9!tksUXR^1W6THqtX?CXeQ^w?*`AGrCzz^C<|s1wq^5a!nor?<^_#&>PlUll)sVU|0{iuO@XYy6!fl2r z680&DTasX(D`uVD6BZTMzds6_ots6m4XCFwnV`xphZ7iOm&q9_JEF)QdN7DlIH@FQ zW!t=_l?fJ;RwkoNTG=zNX~|TQRwg?%txT<$w4AFIBLli}tbnFvabn`m93-I05vzv4OQMI2hCC}IXuRa z!*eV-Jm*Ue0akK&j3tNXSaNvImmC7DsiFxU8| z?~r5}U;i1BeB$f8Ly}8;f_F%=h>!jZN&c_`I@m{k6D`MLL>I(*+M9x~_SG$fRRdoc zGPPk)^r*2|n$kvlg7vX6z}9mdA1GptG)iM4HZ)>WBlc^=MJA$Xh>6&%5&JY^T_e^^ zL{W!9b`j9Xq5mLM%NoaS`j@&NXvUg@Qjo#mcoiS9IqNqE4;^ZtW5;rR9!ls7v?nG< z&@nn}xJHxTY{GhpCP4JBa85|S-UJ}WGIX+_Pl8V&@jFiFqyt7r3#-HgKD~q?k9>#> zx`@v`0VWT9=;}xqzV^iKK8C`&auhR^7E;5L1XY1u9xB$FQE`*wyQQpbkQ7r>Tq*b3lj}1!&Yyl++S`%0D6H!{Ql7g!^u`H8lBrV3?_@0rbb<0fP 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%0D6^D01lH-=MADTs~Xm{TqftcvUGS3yb7H4@4% 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%0Da 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�}V&@xr77O9}R7fmnwIkbe;c+3===@iTJ$Q*~I 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

Fe%Oenz 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 z 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%0Dlr4$40-W;&Gr-P24c|Gbzh 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 z

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 z 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 z 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

8vQ?62|f9s&XHKed%eCrH3AY&Hj2M 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�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�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

    a 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 z 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�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 z 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 Date: Wed, 19 Mar 2014 22:26:25 +0100 Subject: [PATCH 035/116] Update AForge to 2.2.5 --- Output/AForge.Video.DirectShow.dll | Bin 57856 -> 61440 bytes Output/AForge.Video.dll | Bin 18944 -> 20992 bytes Output/Licenses/AForge/License.txt | 18 + Output/Licenses/AForge/SourceAndVersion.txt | 7 + Output/Licenses/AForge/gpl-3.0.txt | 674 ++++++++++++++++++++ Output/Licenses/AForge/lgpl-3.0.txt | 166 +++++ 6 files changed, 865 insertions(+) create mode 100644 Output/Licenses/AForge/License.txt create mode 100644 Output/Licenses/AForge/SourceAndVersion.txt create mode 100644 Output/Licenses/AForge/gpl-3.0.txt create mode 100644 Output/Licenses/AForge/lgpl-3.0.txt diff --git a/Output/AForge.Video.DirectShow.dll b/Output/AForge.Video.DirectShow.dll index 2d14556ac55d79bcb7e11792c7140c6bdfbb9ee1..e3f806f345fc11b4633c7e5826d0ed04354b183d 100644 GIT binary patch delta 31405 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 delta 28165 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 SZtI)+C + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Output/Licenses/AForge/lgpl-3.0.txt b/Output/Licenses/AForge/lgpl-3.0.txt new file mode 100644 index 00000000..5e5be416 --- /dev/null +++ b/Output/Licenses/AForge/lgpl-3.0.txt @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. From a9ff5f60046e7f165d8f41f676804f2f6922bb36 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 02:27:54 +0100 Subject: [PATCH 036/116] Make server config catch errors instead of crashing Remove Security.dll, not required and causes problems (name conflict with system.dll, DO NOT READD) --- ClientServerLib/ClientServerLib/CServer.cs | 15 ++-- Output/Security.dll | Bin 27648 -> 0 bytes WebserverInitalConfig/CConfigHttpApi.cs | 23 +++++- WebserverInitalConfig/Program.cs | 72 ++++++++++-------- .../WebserverInitalConfig.csproj | 5 +- 5 files changed, 73 insertions(+), 42 deletions(-) delete mode 100644 Output/Security.dll diff --git a/ClientServerLib/ClientServerLib/CServer.cs b/ClientServerLib/ClientServerLib/CServer.cs index 51a6d2b7..3403a092 100644 --- a/ClientServerLib/ClientServerLib/CServer.cs +++ b/ClientServerLib/ClientServerLib/CServer.cs @@ -16,9 +16,9 @@ #endregion using System; +using System.Diagnostics; using System.ServiceModel; using System.ServiceModel.Web; -using System.Diagnostics; using System.Net; namespace ServerLib @@ -191,10 +191,15 @@ namespace ServerLib CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, }; - Process p = Process.Start(info); - p.WaitForExit(); - p.Close(); - + try + { + using (Process p = Process.Start(info)) + { + p.WaitForExit(); + p.Close(); + } + } + catch (Exception) {} #else //Required? diff --git a/Output/Security.dll b/Output/Security.dll deleted file mode 100644 index f0c2c5139f29056216cc34e9e796ab0aa761fd4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27648 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 3 && args[2] == "reserve") || CConfigHttpApi.IsAdministrator()) - config.ReserveUrl(); + Console.WriteLine("Usage: VocaluxeServerConfig port isHttps"); + Environment.Exit(-1); } - catch (AuthenticationException) + else { - ProcessStartInfo proc = new ProcessStartInfo - { - UseShellExecute = true, - WorkingDirectory = Environment.CurrentDirectory, - FileName = Process.GetCurrentProcess().MainModule.FileName, - Arguments = args[0] + " " + args[1], - Verb = "runas", - CreateNoWindow = true, - WindowStyle = ProcessWindowStyle.Hidden, - }; - + CConfigHttpApi config = new CConfigHttpApi("Vocaluxe", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Vocaluxe.exe"), "0.0.0.0", port, true); try { - Process.Start(proc); + config.AddFirewallRule(); + if (args[1].ToLower() == "true") + config.CreateAndAddCert(Dns.GetHostName()); + + if ((args.Length >= 3 && args[2] == "reserve") || CConfigHttpApi.IsAdministrator()) + config.ReserveUrl(); } - catch + catch (AuthenticationException) { - // The user refused the elevation. - // Do nothing and return directly ... - Environment.Exit(-1); + ProcessStartInfo proc = new ProcessStartInfo + { + UseShellExecute = true, + WorkingDirectory = Environment.CurrentDirectory, + FileName = Process.GetCurrentProcess().MainModule.FileName, + Arguments = args[0] + " " + args[1], + Verb = "runas", + CreateNoWindow = true, + WindowStyle = ProcessWindowStyle.Hidden, + }; + + try + { + Process.Start(proc); + } + catch + { + // The user refused the elevation. + // Do nothing and return directly ... + Environment.Exit(-1); + } } } } + catch (Exception e) + { + MessageBox.Show("Error while installing server: " + e.Message); + } } } } \ No newline at end of file diff --git a/WebserverInitalConfig/WebserverInitalConfig.csproj b/WebserverInitalConfig/WebserverInitalConfig.csproj index 2f48f927..5405cbe2 100644 --- a/WebserverInitalConfig/WebserverInitalConfig.csproj +++ b/WebserverInitalConfig/WebserverInitalConfig.csproj @@ -41,16 +41,13 @@ True ..\Output\Interop.NetFwTypeLib.dll - - False - ..\Output\Security.dll - False ..\Output\Security.Cryptography.dll + From a8fd4091acbd032efdc84de76849af4079269a68 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 02:32:51 +0100 Subject: [PATCH 037/116] Recompile PortAudio.dlls so they work with VC++ 2012 --- Output/x64/PortAudio.dll | Bin 230400 -> 229888 bytes Output/x86/PortAudio.dll | Bin 205824 -> 205312 bytes Vocaluxe/CProgrammHelper.cs | 2 ++ .../Playback/PortAudio/CPortAudioStream.cs | 3 ++- .../Record/PortAudio/CPortAudioRecord.cs | 3 ++- 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Output/x64/PortAudio.dll b/Output/x64/PortAudio.dll index fd337ed5b33faa4fdad2e88489972ab570dffdeb..033672a27caa75e09dba9d7bdea40f7474aebc7c 100644 GIT binary patch delta 43845 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 RGmL9C?ASeSt#Nq3{{vyEao+#{ diff --git a/Output/x86/PortAudio.dll b/Output/x86/PortAudio.dll index 7f21da7041f10838f62704480306407e3741f2e1..0367aa1e05edba8f1e4334c0589244d65489dda5 100644 GIT binary patch delta 57250 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� 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 z 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 delta 57359 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 Dt0fo) diff --git a/Vocaluxe/CProgrammHelper.cs b/Vocaluxe/CProgrammHelper.cs index 88c35368..800b907a 100644 --- a/Vocaluxe/CProgrammHelper.cs +++ b/Vocaluxe/CProgrammHelper.cs @@ -105,6 +105,7 @@ namespace Vocaluxe true, true); return false; } + /* bool vc2008Installed = _IsVC2008Installed(); if (!vc2008Installed) { @@ -118,6 +119,7 @@ namespace Vocaluxe true, true); return false; } + * */ return true; } diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 109dbd88..6d372560 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -258,7 +258,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio channelCount = format.ChannelCount, device = _ApiInfo.defaultOutputDevice, sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, - suggestedLatency = _OutputDeviceInfo.defaultLowOutputLatency + suggestedLatency = _OutputDeviceInfo.defaultLowOutputLatency, + hostApiSpecificStreamInfo = IntPtr.Zero }; if (!_OpenOutputStream( diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index a059d463..914435f8 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -125,7 +125,8 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio channelCount = _Devices[dev].Channels, device = _Devices[dev].ID, sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, - suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency + suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency, + hostApiSpecificStreamInfo = IntPtr.Zero }; if (!_OpenInputStream( out _RecHandle[dev], From 154a06821a20fcce04f2ca530888f79c4461152b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 02:34:01 +0100 Subject: [PATCH 038/116] Make all projects build in correct configurations --- Vocaluxe.sln | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Vocaluxe.sln b/Vocaluxe.sln index 5d225110..347f685a 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -108,7 +108,9 @@ Global {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.ActiveCfg = DebugWin|x86 {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.Build.0 = DebugWin|x86 {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x64.ActiveCfg = ReleaseWin|x64 + {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x64.Build.0 = ReleaseWin|x64 {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x86.ActiveCfg = ReleaseWin|x86 + {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x86.Build.0 = ReleaseWin|x86 {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 @@ -126,7 +128,9 @@ Global {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.ActiveCfg = DebugWin|x86 {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.Build.0 = DebugWin|x86 {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.ActiveCfg = ReleaseWin|x64 + {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.Build.0 = ReleaseWin|x64 {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.ActiveCfg = ReleaseWin|x86 + {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.Build.0 = ReleaseWin|x86 {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 @@ -142,7 +146,9 @@ Global {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x86.ActiveCfg = DebugWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x86.Build.0 = DebugWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x64.ActiveCfg = ReleaseWin|x64 + {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x64.Build.0 = ReleaseWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x86.ActiveCfg = ReleaseWin|Win32 + {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x86.Build.0 = ReleaseWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x64.ActiveCfg = ReleaseWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x86.ActiveCfg = ReleaseWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 @@ -152,18 +158,23 @@ Global {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugWin|x64.Build.0 = DebugWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugWin|x86.Build.0 = DebugWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x64.ActiveCfg = ReleaseWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x64.Build.0 = ReleaseWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x86.ActiveCfg = ReleaseLinux|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x86.Build.0 = ReleaseLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.DebugLinux|x64.ActiveCfg = Debug|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.DebugLinux|x86.ActiveCfg = Debug|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.DebugWin|x64.ActiveCfg = Debug|Any CPU @@ -173,6 +184,7 @@ Global {55F89808-4E79-4FFE-BC13-48258913F5C9}.InstallerWin|x64.ActiveCfg = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.InstallerWin|x64.Build.0 = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.InstallerWin|x86.ActiveCfg = Release|Any CPU + {55F89808-4E79-4FFE-BC13-48258913F5C9}.InstallerWin|x86.Build.0 = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.ReleaseLinux|x64.ActiveCfg = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.ReleaseLinux|x86.ActiveCfg = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.ReleaseWin|x64.ActiveCfg = Release|Any CPU From e9955597b2fa3d001200153f067941c8bb577333 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 02:34:26 +0100 Subject: [PATCH 039/116] Fix BackgroundMusic not starting (missing defaults) --- Vocaluxe/Base/CBackgroundMusic.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 7c85a5af..c06c0b2c 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -136,16 +136,19 @@ namespace Vocaluxe.Base if (_Initialized) return; - _Volume = CConfig.BackgroundMusicVolume; - _VideoEnabled = (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON); - SetMusicSource(CConfig.BackgroundMusicSource); - List soundFiles = CHelper.ListSoundFiles(CSettings.FolderBackgroundMusic, true, true); foreach (string path in soundFiles) _BGMusicFiles.Add(new CPlaylistElement(path)); + //Set a default to have a consistent starting point, use SetMusicSource afterwards + _MusicSource = EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC; + _AddBackgroundMusic(); + _PreviousMusicIndex = -1; IsPlaying = false; + _Volume = CConfig.BackgroundMusicVolume; + _VideoEnabled = (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON); + SetMusicSource(CConfig.BackgroundMusicSource); _Initialized = true; } From 713f49230bc43330093d3631e117a8996820ecf1 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 02:34:56 +0100 Subject: [PATCH 040/116] Do not crash we we cannot create a directory. Just log it... --- Vocaluxe/Base/CSettings.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index f25ba032..7c57abf1 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -228,7 +228,16 @@ namespace Vocaluxe.Base private static void _CreateFolder(string path) { if (!Directory.Exists(path)) - Directory.CreateDirectory(path); + { + try + { + Directory.CreateDirectory(path); + } + catch (Exception e) + { + CLog.LogError("Cannot create directory \"" + path + "\": " + e.Message); + } + } } } } \ No newline at end of file From 2f1b2d604a27a6bb0ac4991a140458f1d3dca2bc Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 20:09:54 +0100 Subject: [PATCH 041/116] Add Length Tag to songs --- VocaluxeLib/Songs/CSong.cs | 2 ++ VocaluxeLib/Songs/CSongLoader.cs | 3 +++ VocaluxeLib/Songs/CSongWriter.cs | 1 + 3 files changed, 6 insertions(+) diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs index 1ab39a76..26d1d6fd 100644 --- a/VocaluxeLib/Songs/CSong.cs +++ b/VocaluxeLib/Songs/CSong.cs @@ -130,6 +130,7 @@ namespace VocaluxeLib.Songs public string Creator = ""; public string Version = ""; + public string Length = ""; //Length set in song file, SHOULD match actual song length but is more a hint public string Source = ""; public readonly List UnknownTags = new List(); @@ -240,6 +241,7 @@ namespace VocaluxeLib.Songs Creator = song.Creator; Version = song.Version; + Length = song.Length; Source = song.Source; UnknownTags = new List(song.UnknownTags); diff --git a/VocaluxeLib/Songs/CSongLoader.cs b/VocaluxeLib/Songs/CSongLoader.cs index 8c959583..7c18a981 100644 --- a/VocaluxeLib/Songs/CSongLoader.cs +++ b/VocaluxeLib/Songs/CSongLoader.cs @@ -192,6 +192,9 @@ namespace VocaluxeLib.Songs case "YOUTUBE": _Song.Source = value; break; + case "LENGTH": + _Song.Length = value; + break; case "MP3": if (File.Exists(Path.Combine(_Song.Folder, value))) { diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs index 1e3221d8..a36e3fe6 100644 --- a/VocaluxeLib/Songs/CSongWriter.cs +++ b/VocaluxeLib/Songs/CSongWriter.cs @@ -71,6 +71,7 @@ namespace VocaluxeLib.Songs _WriteHeaderEntry("ENCODING", _Song.Encoding.GetEncodingName()); _WriteHeaderEntry("CREATOR", _Song.Creator); _WriteHeaderEntry("VERSION", _Song.Version); + _WriteHeaderEntry("LENGTH", _Song.Length); _WriteHeaderEntry("SOURCE", _Song.Source); if (!String.IsNullOrEmpty(_Song._Comment)) { From 9054f529a0681ed1be0636597a36c42484071797 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 20:23:47 +0100 Subject: [PATCH 042/116] Change CPortAudioCommon to be static class only to allow inheritance in record and playback classes (later) --- Vocaluxe/GlobalSuppressions.cs | 20 +--------- Vocaluxe/Lib/Sound/CPortAudioCommon.cs | 40 +++++++++---------- .../Playback/PortAudio/CPortAudioStream.cs | 22 +++++----- .../Record/PortAudio/CPortAudioRecord.cs | 14 +++---- 4 files changed, 39 insertions(+), 57 deletions(-) diff --git a/Vocaluxe/GlobalSuppressions.cs b/Vocaluxe/GlobalSuppressions.cs index da284174..8a667a11 100644 --- a/Vocaluxe/GlobalSuppressions.cs +++ b/Vocaluxe/GlobalSuppressions.cs @@ -38,9 +38,6 @@ using System.Diagnostics.CodeAnalysis; [assembly: SuppressMessage("Microsoft.Reliability", "CA2000:Objekte verwerfen, bevor Bereich verloren geht", Scope = "member", Target = "Vocaluxe.Lib.Draw.CDirect3D.#CopyScreen()") ] [assembly: SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "Vocaluxe.Lib.Input.WiiMote.InputReport")] -[assembly: SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "PortAudioSharp.PortAudio+PaDeviceIndex")] -[assembly: SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "PortAudioSharp.PortAudio+PaSampleFormat")] -[assembly: SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "type", Target = "PortAudioSharp.PortAudio+PaStreamCallbackFlags")] [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Vocaluxe.Lib.Video.Gstreamer.CGstreamerVideoWrapper.#GetFrame(System.Int32,System.Single)")] @@ -49,19 +46,4 @@ using System.Diagnostics.CodeAnalysis; Target = "Vocaluxe.Lib.Input.CHIDAPI.#ReadTimeout(System.IntPtr,System.Byte[]&,System.Int32,System.Int32)")] [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", - Target = "Vocaluxe.Lib.Input.CHIDAPI.#Read(System.IntPtr,System.Byte[]&,System.Int32)")] -[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetVersionText()")] -[assembly: - SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", - Target = "PortAudioSharp.PortAudio.#Pa_GetErrorText(PortAudioSharp.PortAudio+PaError)")] -[assembly: - SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", - Target = "PortAudioSharp.PortAudio.#Pa_GetHostApiInfo(System.Int32)")] -[assembly: - SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "PortAudioSharp.PortAudio.#Pa_GetLastHostErrorInfo()")] -[assembly: - SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", - Target = "PortAudioSharp.PortAudio.#Pa_GetDeviceInfo(System.Int32)")] -[assembly: - SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", - Target = "PortAudioSharp.PortAudio.#Pa_GetStreamInfo(System.IntPtr)")] \ No newline at end of file + Target = "Vocaluxe.Lib.Input.CHIDAPI.#Read(System.IntPtr,System.Byte[]&,System.Int32)")] \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs b/Vocaluxe/Lib/Sound/CPortAudioCommon.cs index d3584860..a3233047 100644 --- a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs +++ b/Vocaluxe/Lib/Sound/CPortAudioCommon.cs @@ -12,7 +12,7 @@ namespace Vocaluxe.Lib.Sound /// DO NEVER use following Pa_* functions other than the ones from this class: /// Initialize, Terminate, OpenStream, CloseStream ///

    Bqb%~g=0wwe6HQdY8s71v=ZMirtYh-1rA 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 M85*zSQReHg}MlkIuiE4DXm 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

- abstract class CPortAudioCommon + static class CPortAudioCommon { private static int _RefCount; private static readonly object _Mutex = new object(); @@ -22,13 +22,13 @@ namespace Vocaluxe.Lib.Sound /// MUST call CloseDriver when done /// /// True on success, falso if not initialized (log written) - protected static bool _InitDriver() + public static bool InitDriver() { lock (_Mutex) { if (_RefCount == 0) { - if (_CheckError("Initialize", PortAudio.Pa_Initialize())) + if (CheckError("Initialize", PortAudio.Pa_Initialize())) return false; } _RefCount++; @@ -40,7 +40,7 @@ namespace Vocaluxe.Lib.Sound /// Safe method to close PortAudio /// MUST be called _exactly_ once after successfull InitDriver call /// - protected static void _CloseDriver() + public static void CloseDriver() { lock (_Mutex) { @@ -51,9 +51,9 @@ namespace Vocaluxe.Lib.Sound } } - protected static PortAudio.PaError _OpenStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, ref PortAudio.PaStreamParameters? outputParameters, - double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, - PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + public static PortAudio.PaError OpenStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, ref PortAudio.PaStreamParameters? outputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) { lock (_Mutex) { @@ -72,14 +72,14 @@ namespace Vocaluxe.Lib.Sound /// /// /// True on success - protected static bool _OpenInputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, - double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, - PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + public static bool OpenInputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) { PortAudio.PaStreamParameters? outputParameters = null; return - !_CheckError("OpenInputStream", - _OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); + !CheckError("OpenInputStream", + OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); } /// @@ -93,17 +93,17 @@ namespace Vocaluxe.Lib.Sound /// /// /// True on success - protected static bool _OpenOutputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? outputParameters, - double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, - PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + public static bool OpenOutputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? outputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) { PortAudio.PaStreamParameters? inputParameters = null; return - !_CheckError("OpenOutputStream", - _OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); + !CheckError("OpenOutputStream", + OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); } - protected static void _CloseStream(IntPtr stream) + public static void CloseStream(IntPtr stream) { lock (_Mutex) { @@ -118,7 +118,7 @@ namespace Vocaluxe.Lib.Sound /// Action identifier (E.g. openStream) /// Result returned by Pa_* call /// True on error - protected static bool _CheckError(String action, PortAudio.PaError errorCode) + public static bool CheckError(String action, PortAudio.PaError errorCode) { if (errorCode != PortAudio.PaError.paNoError) { @@ -140,7 +140,7 @@ namespace Vocaluxe.Lib.Sound /// Selects the most appropriate host api /// /// The most appropriate host api - protected static int _GetHostApi() + public static int GetHostApi() { //Caller has to hold a reference anyway so no locking needed if (_RefCount < 1) diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 6d372560..62a2f9f4 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -8,7 +8,7 @@ using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.PortAudio { - class CPortAudioStream : CPortAudioCommon, IDisposable + class CPortAudioStream : IDisposable { private const long _Bufsize = 1000000L; private const long _Beginrefill = 800000L; @@ -187,12 +187,12 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { Paused = false; _AfterFadeAction = EStreamAction.Nothing; - _CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); + CPortAudioCommon.CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); } public void Stop() { - _CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); + CPortAudioCommon.CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); Skip(0f); } @@ -213,11 +213,11 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio bool driverInitialized = false; try { - if (!_InitDriver()) + if (!CPortAudioCommon.InitDriver()) return false; driverInitialized = true; - int hostApi = _GetHostApi(); + int hostApi = CPortAudioCommon.GetHostApi(); _ApiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(hostApi); _OutputDeviceInfo = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_ApiInfo.defaultOutputDevice); if (_OutputDeviceInfo.defaultLowOutputLatency < 0.1) @@ -228,7 +228,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio catch (Exception) { if (driverInitialized) - _CloseDriver(); + CPortAudioCommon.CloseDriver(); CLog.LogError("Error Init PortAudio Playback"); return false; } @@ -240,7 +240,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio SFormatInfo format = _Decoder.GetFormatInfo(); if (format.SamplesPerSecond == 0) { - _CloseDriver(); + CPortAudioCommon.CloseDriver(); _Decoder.Close(); _Decoder = null; CLog.LogError("Error Init PortAudio Playback (samples=0)"); @@ -262,7 +262,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio hostApiSpecificStreamInfo = IntPtr.Zero }; - if (!_OpenOutputStream( + if (!CPortAudioCommon.OpenOutputStream( out _Stream, ref outputParams, format.SamplesPerSecond, @@ -271,7 +271,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _PaStreamCallback, IntPtr.Zero) || _Stream == IntPtr.Zero) { - _CloseDriver(); + CPortAudioCommon.CloseDriver(); _Decoder.Close(); _Decoder = null; return false; @@ -410,8 +410,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private void _DoFree() { - _CloseStream(_Stream); - _CloseDriver(); + CPortAudioCommon.CloseStream(_Stream); + CPortAudioCommon.CloseDriver(); _Decoder.Close(); _Closeproc(ID); diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 914435f8..5515b8b9 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -24,7 +24,7 @@ using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.PortAudio { - class CPortAudioRecord : CPortAudioCommon, IRecord + class CPortAudioRecord : IRecord { private bool _Initialized; private readonly List _Devices = new List(); @@ -52,11 +52,11 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio try { - if (!_InitDriver()) + if (!CPortAudioCommon.InitDriver()) return false; _Devices.Clear(); - int hostAPI = _GetHostApi(); + int hostAPI = CPortAudioCommon.GetHostApi(); int numDevices = PortAudioSharp.PortAudio.Pa_GetDeviceCount(); for (int i = 0; i < numDevices; i++) { @@ -128,7 +128,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency, hostApiSpecificStreamInfo = IntPtr.Zero }; - if (!_OpenInputStream( + if (!CPortAudioCommon.OpenInputStream( out _RecHandle[dev], ref inputParams, 44100, @@ -138,7 +138,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio new IntPtr(dev))) return false; - if (_CheckError("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) + if (CPortAudioCommon.CheckError("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) return false; } } @@ -168,8 +168,8 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio return; foreach (IntPtr handle in _RecHandle) - _CloseStream(handle); - _CloseDriver(); + CPortAudioCommon.CloseStream(handle); + CPortAudioCommon.CloseDriver(); _Initialized = false; From 3bc8fd516f89d9179037ddd8f626dfa6f579c2aa Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 21 Mar 2014 20:36:36 +0100 Subject: [PATCH 043/116] Add a base record class to handle common functions (avoid duplicate code) --- ...PortAudioCommon.cs => CPortAudioHandle.cs} | 98 ++++++++--- .../Playback/PortAudio/CPortAudioStream.cs | 33 ++-- Vocaluxe/Lib/Sound/Record/CRecordBase.cs | 148 ++++++++++++++++ .../Record/DirectSound/CDirectSoundRecord.cs | 140 ++------------- .../Record/PortAudio/CPortAudioRecord.cs | 165 +++--------------- Vocaluxe/Vocaluxe.csproj | 3 +- 6 files changed, 277 insertions(+), 310 deletions(-) rename Vocaluxe/Lib/Sound/{CPortAudioCommon.cs => CPortAudioHandle.cs} (61%) create mode 100644 Vocaluxe/Lib/Sound/Record/CRecordBase.cs diff --git a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs b/Vocaluxe/Lib/Sound/CPortAudioHandle.cs similarity index 61% rename from Vocaluxe/Lib/Sound/CPortAudioCommon.cs rename to Vocaluxe/Lib/Sound/CPortAudioHandle.cs index a3233047..0406055e 100644 --- a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs +++ b/Vocaluxe/Lib/Sound/CPortAudioHandle.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using PortAudioSharp; using Vocaluxe.Base; @@ -8,40 +9,53 @@ namespace Vocaluxe.Lib.Sound /// /// PortAudio can be used for record and playback /// So do some common stuff here and make sure those 2 do not interfere + /// Basic lifetime: On Init() get a new handle, close/dispose it in your close/dispose /// /// DO NEVER use following Pa_* functions other than the ones from this class: /// Initialize, Terminate, OpenStream, CloseStream /// - static class CPortAudioCommon + class CPortAudioHandle : IDisposable { private static int _RefCount; private static readonly object _Mutex = new object(); + private bool _Disposed; + private readonly List _Streams = new List(); + /// - /// Safe method to init PortAudio (adds a reference) - /// MUST call CloseDriver when done + /// Initializes PortAudio library (if required) /// - /// True on success, falso if not initialized (log written) - public static bool InitDriver() + public CPortAudioHandle() { lock (_Mutex) { if (_RefCount == 0) { if (CheckError("Initialize", PortAudio.Pa_Initialize())) - return false; + throw new Exception(); } _RefCount++; } - return true; } - /// - /// Safe method to close PortAudio - /// MUST be called _exactly_ once after successfull InitDriver call - /// - public static void CloseDriver() + ~CPortAudioHandle() { + _Dispose(false); + } + + private void _Dispose(bool disposing) + { + if (_Disposed) + return; + if (!disposing) + CLog.LogDebug("Did not close CPortAudioHandle"); + //Make sure we do not leek any streams as we may keep PA open + if (_Streams.Count > 0) + { + CLog.LogDebug("Did not close " + _Streams.Count + "PortAudio-Stream(s)"); + while (_Streams.Count > 0) + CloseStream(_Streams[0]); + } lock (_Mutex) { Debug.Assert(_RefCount > 0); @@ -49,15 +63,37 @@ namespace Vocaluxe.Lib.Sound if (_RefCount == 0) PortAudio.Pa_Terminate(); } + _Disposed = true; } - public static PortAudio.PaError OpenStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, ref PortAudio.PaStreamParameters? outputParameters, - double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, - PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + public void Dispose() { + _Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Close the PortAudio handle once you are done + /// + public void Close() + { + Dispose(); + } + + public PortAudio.PaError OpenStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, ref PortAudio.PaStreamParameters? outputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + { + if (_Disposed) + throw new ObjectDisposedException("PortAudioHandle already disposed"); + lock (_Mutex) { - return PortAudio.Pa_OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData); + PortAudio.PaError res = PortAudio.Pa_OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, + userData); + if (res == PortAudio.PaError.paNoError) + _Streams.Add(stream); + return res; } } @@ -72,9 +108,9 @@ namespace Vocaluxe.Lib.Sound /// /// /// True on success - public static bool OpenInputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, - double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, - PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + public bool OpenInputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? inputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) { PortAudio.PaStreamParameters? outputParameters = null; return @@ -93,9 +129,9 @@ namespace Vocaluxe.Lib.Sound /// /// /// True on success - public static bool OpenOutputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? outputParameters, - double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, - PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) + public bool OpenOutputStream(out IntPtr stream, ref PortAudio.PaStreamParameters? outputParameters, + double sampleRate, uint framesPerBuffer, PortAudio.PaStreamFlags streamFlags, + PortAudio.PaStreamCallbackDelegate streamCallback, IntPtr userData) { PortAudio.PaStreamParameters? inputParameters = null; return @@ -103,11 +139,15 @@ namespace Vocaluxe.Lib.Sound OpenStream(out stream, ref inputParameters, ref outputParameters, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData)); } - public static void CloseStream(IntPtr stream) + public void CloseStream(IntPtr stream) { + if (_Disposed) + throw new ObjectDisposedException("PortAudioHandle already disposed"); + lock (_Mutex) { PortAudio.Pa_CloseStream(stream); + _Streams.Remove(stream); } } @@ -118,8 +158,11 @@ namespace Vocaluxe.Lib.Sound /// Action identifier (E.g. openStream) /// Result returned by Pa_* call /// True on error - public static bool CheckError(String action, PortAudio.PaError errorCode) + public bool CheckError(String action, PortAudio.PaError errorCode) { + if (_Disposed) + throw new ObjectDisposedException("PortAudioHandle already disposed"); + if (errorCode != PortAudio.PaError.paNoError) { CLog.LogError(action + " error: " + PortAudio.Pa_GetErrorText(errorCode)); @@ -140,11 +183,10 @@ namespace Vocaluxe.Lib.Sound /// Selects the most appropriate host api /// /// The most appropriate host api - public static int GetHostApi() + public int GetHostApi() { - //Caller has to hold a reference anyway so no locking needed - if (_RefCount < 1) - return -1; + if (_Disposed) + throw new ObjectDisposedException("PortAudioHandle already disposed"); int selectedHostApi = PortAudio.Pa_GetDefaultHostApi(); int apiCount = PortAudio.Pa_GetHostApiCount(); diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 62a2f9f4..cd2328e2 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -15,6 +15,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public readonly int ID; private readonly Closeproc _Closeproc; + private CPortAudioHandle _PaHandle; private readonly CSyncTimer _SyncTimer; private int _ByteCount = 4; @@ -187,12 +188,12 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { Paused = false; _AfterFadeAction = EStreamAction.Nothing; - CPortAudioCommon.CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); + _PaHandle.CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); } public void Stop() { - CPortAudioCommon.CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); + _PaHandle.CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); Skip(0f); } @@ -210,14 +211,11 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (!File.Exists(fileName)) return false; - bool driverInitialized = false; try { - if (!CPortAudioCommon.InitDriver()) - return false; - driverInitialized = true; + _PaHandle = new CPortAudioHandle(); - int hostApi = CPortAudioCommon.GetHostApi(); + int hostApi = _PaHandle.GetHostApi(); _ApiInfo = PortAudioSharp.PortAudio.Pa_GetHostApiInfo(hostApi); _OutputDeviceInfo = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_ApiInfo.defaultOutputDevice); if (_OutputDeviceInfo.defaultLowOutputLatency < 0.1) @@ -227,8 +225,11 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } catch (Exception) { - if (driverInitialized) - CPortAudioCommon.CloseDriver(); + if (_PaHandle != null) + { + _PaHandle.Close(); + _PaHandle = null; + } CLog.LogError("Error Init PortAudio Playback"); return false; } @@ -240,7 +241,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio SFormatInfo format = _Decoder.GetFormatInfo(); if (format.SamplesPerSecond == 0) { - CPortAudioCommon.CloseDriver(); + _PaHandle.Close(); + _PaHandle = null; _Decoder.Close(); _Decoder = null; CLog.LogError("Error Init PortAudio Playback (samples=0)"); @@ -262,7 +264,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio hostApiSpecificStreamInfo = IntPtr.Zero }; - if (!CPortAudioCommon.OpenOutputStream( + if (!_PaHandle.OpenOutputStream( out _Stream, ref outputParams, format.SamplesPerSecond, @@ -271,7 +273,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _PaStreamCallback, IntPtr.Zero) || _Stream == IntPtr.Zero) { - CPortAudioCommon.CloseDriver(); + _PaHandle.Close(); + _PaHandle = null; _Decoder.Close(); _Decoder = null; return false; @@ -410,9 +413,11 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private void _DoFree() { - CPortAudioCommon.CloseStream(_Stream); - CPortAudioCommon.CloseDriver(); + _PaHandle.CloseStream(_Stream); + _PaHandle.Close(); + _PaHandle = null; _Decoder.Close(); + _Decoder = null; _Closeproc(ID); } diff --git a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs new file mode 100644 index 00000000..78630c90 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs @@ -0,0 +1,148 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Vocaluxe.Base; + +namespace Vocaluxe.Lib.Sound.Record +{ + /// + /// Base class to implement common functionality for Record classes + /// + abstract class CRecordBase + { + private bool _Initialized; + protected List _Devices; + protected CBuffer[] _Buffer; + + /// + /// Init recording + /// Child class should overwrite this to list devices + /// + /// true if success + public virtual bool Init() + { + if (_Initialized) + return false; + + _Devices = new List(); + _Buffer = new CBuffer[CSettings.MaxNumPlayer]; + for (int i = 0; i < _Buffer.Length; i++) + _Buffer[i] = new CBuffer(); + + _Initialized = true; + + return true; + } + + /// + /// Stop all voice capturing streams and terminates recording freeing resources + /// + public virtual void Close() + { + if (!_Initialized) + return; + + _Devices = null; + if (_Buffer != null) + { + foreach (CBuffer buffer in _Buffer) + buffer.Dispose(); + _Buffer = null; + } + + _Initialized = false; + } + + /// + /// Procedure to be called by descendent classes with data that got recorded + /// + /// Device from which the data was recorded + /// Recorded samples, assume Int16 and interleaved for multi-channels + protected void _HandleData(CRecordDevice device, byte[] data) + { + byte[] leftBuffer; + byte[] rightBuffer; + + if (device.Channels == 2) + { + leftBuffer = new byte[data.Length / 2]; + rightBuffer = new byte[data.Length / 2]; + //[]: Sample, L: Left channel R: Right channel + //[LR][LR][LR][LR][LR][LR] + //The data is interleaved and needs to be demultiplexed + for (int i = 0; i < data.Length / 4; i++) + { + leftBuffer[i * 2] = data[i * 4]; + leftBuffer[i * 2 + 1] = data[i * 4 + 1]; + rightBuffer[i * 2] = data[i * 4 + 2]; + rightBuffer[i * 2 + 1] = data[i * 4 + 3]; + } + } + else + leftBuffer = rightBuffer = data; + + if (device.PlayerChannel1 > 0) + _Buffer[device.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); + + if (device.PlayerChannel2 > 0) + _Buffer[device.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); + } + + /// + /// Detect Pitch and Volume of the newest voice buffer + /// + /// + public void AnalyzeBuffer(int player) + { + if (!_Initialized) + return; + + _Buffer[player].AnalyzeBuffer(); + } + + public int GetToneAbs(int player) + { + if (!_Initialized) + return 0; + + return _Buffer[player].ToneAbs; + } + + public int GetTone(int player) + { + return _Initialized ? _Buffer[player].Tone : 0; + } + + public void SetTone(int player, int tone) + { + if (!_Initialized) + return; + + _Buffer[player].Tone = tone; + } + + public float GetMaxVolume(int player) + { + return _Initialized ? _Buffer[player].MaxVolume : 0f; + } + + public bool ToneValid(int player) + { + return _Initialized && _Buffer[player].ToneValid; + } + + public int NumHalfTones() + { + return CBuffer.NumHalfTones; + } + + public float[] ToneWeigth(int player) + { + return _Initialized ? _Buffer[player].ToneWeigth : null; + } + + public ReadOnlyCollection RecordDevices() + { + return (_Initialized && _Devices.Count > 0) ? _Devices.AsReadOnly() : null; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index e0a37e8e..61b54b23 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -23,39 +23,28 @@ using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.DirectSound { - class CDirectSoundRecord : IRecord + class CDirectSoundRecord : CRecordBase, IRecord { private bool _Initialized; - private List _Devices; + private List _Sources; - private readonly CBuffer[] _Buffer; - - public CDirectSoundRecord() + public override bool Init() { - _Buffer = new CBuffer[CSettings.MaxNumPlayer]; - for (int i = 0; i < _Buffer.Length; i++) - _Buffer[i] = new CBuffer(); + if (!base.Init()) + return false; - Init(); - } - - public bool Init() - { - DeviceCollection devices = DirectSoundCapture.GetDevices(); - _Devices = new List(); _Sources = new List(); - int id = 0; + DeviceCollection devices = DirectSoundCapture.GetDevices(); + foreach (DeviceInformation dev in devices) { using (var ds = new DirectSoundCapture(dev.DriverGuid)) { - var device = new CRecordDevice(id, dev.DriverGuid.ToString(), dev.Description, ds.Capabilities.Channels); + var device = new CRecordDevice(_Devices.Count, dev.DriverGuid.ToString(), dev.Description, ds.Capabilities.Channels); _Devices.Add(device); - - id++; } } @@ -64,14 +53,11 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound return true; } - public void Close() + public override void Close() { - if (_Initialized) - { - Stop(); - _Initialized = false; - } - //System.IO.File.WriteAllBytes("test0.raw", _Buffer[0].Buffer); + Stop(); + _Initialized = false; + base.Close(); } public bool Start() @@ -112,81 +98,6 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound return true; } - public void AnalyzeBuffer(int player) - { - if (!_Initialized) - return; - - _Buffer[player].AnalyzeBuffer(); - } - - public int GetToneAbs(int player) - { - if (!_Initialized) - return 0; - - return _Buffer[player].ToneAbs; - } - - public int GetTone(int player) - { - if (!_Initialized) - return 0; - - return _Buffer[player].Tone; - } - - public void SetTone(int player, int tone) - { - if (!_Initialized) - return; - - _Buffer[player].Tone = tone; - } - - public float GetMaxVolume(int player) - { - if (!_Initialized) - return 0f; - - return _Buffer[player].MaxVolume; - } - - public bool ToneValid(int player) - { - if (!_Initialized) - return false; - - return _Buffer[player].ToneValid; - } - - public ReadOnlyCollection RecordDevices() - { - if (!_Initialized) - return null; - - if (_Devices.Count == 0) - return null; - - return _Devices.AsReadOnly(); - } - - public int NumHalfTones() - { - if (!_Initialized) - return 0; - - return CBuffer.NumHalfTones; - } - - public float[] ToneWeigth(int player) - { - if (!_Initialized) - return null; - - return _Buffer[player].ToneWeigth; - } - private void _OnDataReady(object sender, CSampleDataEventArgs e) { if (!_Initialized) @@ -194,32 +105,7 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound CRecordDevice dev = _Devices.FirstOrDefault(device => device.Driver == e.Guid); if (dev == null) return; - byte[] leftBuffer; - byte[] rightBuffer; - - if (dev.Channels == 2) - { - leftBuffer = new byte[e.Data.Length / 2]; - rightBuffer = new byte[e.Data.Length / 2]; - //[]: Sample, L: Left channel R: Right channel - //[LR][LR][LR][LR][LR][LR] - //The data is interleaved and needs to be demultiplexed - for (int i = 0; i < e.Data.Length / 4; i++) - { - leftBuffer[i * 2] = e.Data[i * 4]; - leftBuffer[i * 2 + 1] = e.Data[i * 4 + 1]; - rightBuffer[i * 2] = e.Data[i * 4 + 2]; - rightBuffer[i * 2 + 1] = e.Data[i * 4 + 3]; - } - } - else - leftBuffer = rightBuffer = e.Data; - - if (dev.PlayerChannel1 > 0) - _Buffer[dev.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); - - if (dev.PlayerChannel2 > 0) - _Buffer[dev.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); + _HandleData(dev, e.Data); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index 5515b8b9..76b952da 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -16,47 +16,33 @@ #endregion using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Runtime.InteropServices; using System.Threading; using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.PortAudio { - class CPortAudioRecord : IRecord + class CPortAudioRecord : CRecordBase, IRecord { private bool _Initialized; - private readonly List _Devices = new List(); - + private CPortAudioHandle _PaHandle; private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _MyRecProc; private IntPtr[] _RecHandle; - private readonly CBuffer[] _Buffer; - - public CPortAudioRecord() - { - _Buffer = new CBuffer[CSettings.MaxNumPlayer]; - for (int i = 0; i < _Buffer.Length; i++) - _Buffer[i] = new CBuffer(); - } - /// /// Init PortAudio and list record devices /// /// true if success - public bool Init() + public override bool Init() { - if (_Initialized) + if (!base.Init()) return false; try { - if (!CPortAudioCommon.InitDriver()) - return false; + _PaHandle = new CPortAudioHandle(); - _Devices.Clear(); - int hostAPI = CPortAudioCommon.GetHostApi(); + int hostAPI = _PaHandle.GetHostApi(); int numDevices = PortAudioSharp.PortAudio.Pa_GetDeviceCount(); for (int i = 0; i < numDevices; i++) { @@ -69,9 +55,6 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio } } - foreach (CBuffer buffer in _Buffer) - buffer.Reset(); - _RecHandle = new IntPtr[_Devices.Count]; _MyRecProc = _MyPaStreamCallback; _Initialized = true; @@ -80,6 +63,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio { _Initialized = false; CLog.LogError("Error initializing PortAudio: " + e.Message); + Close(); return false; } @@ -95,9 +79,6 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio if (!_Initialized) return false; - if (_RecHandle == null || _RecHandle.Length == 0) - return false; - Stop(); foreach (IntPtr handle in _RecHandle) @@ -128,7 +109,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency, hostApiSpecificStreamInfo = IntPtr.Zero }; - if (!CPortAudioCommon.OpenInputStream( + if (!_PaHandle.OpenInputStream( out _RecHandle[dev], ref inputParams, 44100, @@ -138,7 +119,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio new IntPtr(dev))) return false; - if (CPortAudioCommon.CheckError("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) + if (_PaHandle.CheckError("Start Stream (rec)", PortAudioSharp.PortAudio.Pa_StartStream(_RecHandle[dev]))) return false; } } @@ -162,97 +143,25 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio /// /// Stop all voice capturing streams and terminate PortAudio /// - public void Close() + public override void Close() { - if (!_Initialized) - return; - - foreach (IntPtr handle in _RecHandle) - CPortAudioCommon.CloseStream(handle); - CPortAudioCommon.CloseDriver(); + if (_RecHandle != null) + { + foreach (IntPtr handle in _RecHandle) + { + if (handle != IntPtr.Zero) + _PaHandle.CloseStream(handle); + } + } + if (_PaHandle != null) + { + _PaHandle.Close(); + _PaHandle = null; + } _Initialized = false; - //System.IO.File.WriteAllBytes("test0.raw", _Buffer[0].Buffer); - } - - /// - /// Detect Pitch and Volume of the newest voice buffer - /// - /// - public void AnalyzeBuffer(int player) - { - if (!_Initialized) - return; - - _Buffer[player].AnalyzeBuffer(); - } - - public int GetToneAbs(int player) - { - if (!_Initialized) - return 0; - - return _Buffer[player].ToneAbs; - } - - public int GetTone(int player) - { - if (!_Initialized) - return 0; - - return _Buffer[player].Tone; - } - - public void SetTone(int player, int tone) - { - if (!_Initialized) - return; - - _Buffer[player].Tone = tone; - } - - public float GetMaxVolume(int player) - { - if (!_Initialized) - return 0f; - - return _Buffer[player].MaxVolume; - } - - public bool ToneValid(int player) - { - if (!_Initialized) - return false; - - return _Buffer[player].ToneValid; - } - - public int NumHalfTones() - { - if (!_Initialized) - return 0; - - return CBuffer.NumHalfTones; - } - - public float[] ToneWeigth(int player) - { - if (!_Initialized) - return null; - - return _Buffer[player].ToneWeigth; - } - - public ReadOnlyCollection RecordDevices() - { - if (!_Initialized) - return null; - - if (_Devices.Count == 0) - return null; - - return _Devices.AsReadOnly(); + base.Close(); } private PortAudioSharp.PortAudio.PaStreamCallbackResult _MyPaStreamCallback( @@ -275,34 +184,10 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio numBytes = frameCount * 2; byte[] recbuffer = new byte[numBytes]; - byte[] leftBuffer; - byte[] rightBuffer; // copy from managed to unmanaged memory Marshal.Copy(input, recbuffer, 0, (int)numBytes); - if (dev.Channels == 2) - { - leftBuffer = new byte[numBytes / 2]; - rightBuffer = new byte[numBytes / 2]; - //[]: Sample, L: Left channel R: Right channel - //[LR][LR][LR][LR][LR][LR] - //The data is interleaved and needs to be demultiplexed - for (int i = 0; i < frameCount; i++) - { - leftBuffer[i * 2] = recbuffer[i * 4]; - leftBuffer[i * 2 + 1] = recbuffer[i * 4 + 1]; - rightBuffer[i * 2] = recbuffer[i * 4 + 2]; - rightBuffer[i * 2 + 1] = recbuffer[i * 4 + 3]; - } - } - else - leftBuffer = rightBuffer = recbuffer; - - if (dev.PlayerChannel1 > 0) - _Buffer[dev.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); - - if (dev.PlayerChannel2 > 0) - _Buffer[dev.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); + _HandleData(dev, recbuffer); } } catch (Exception e) diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 0dc33afe..fcf7e6f6 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -222,7 +222,7 @@ - + @@ -264,6 +264,7 @@ + From 15e08ca8314e4813455415c3b4e2a473d9cab624 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 22 Mar 2014 01:40:35 +0100 Subject: [PATCH 044/116] Fix wrong initial values for weights Add a test for pitch detection accuracy and performance --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 80 ++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 5 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index c3db3e72..dd264249 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -1,12 +1,21 @@ -using System; +//#define TEST_PITCH + +using System; using System.IO; +#if TEST_PITCH +using System.Diagnostics; +using VocaluxeLib; + +#endif + namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { //Half tones: C C♯ D Eb E F F♯ G G♯ A Bb B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) + private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) public const int NumHalfTones = 17; //Number of halftone to analyze C2-E3 (TODO: use more/full octaves?) private const int _AnalysisBufLen = 4096; @@ -27,17 +36,18 @@ namespace Vocaluxe.Lib.Sound.Record { MinVolume = 0.02f; ToneWeigth = new float[NumHalfTones]; - for (int i = 0; i < ToneWeigth.Length; i++) - ToneWeigth[i] = 0.99f; + Reset(); +#if TEST_PITCH + _TestPitchDetection(); +#endif } static CBuffer() { - const double halftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) //Init Array to avoid costly calculations for (int toneIndex = 0; toneIndex < NumHalfTones; toneIndex++) { - double freq = _BaseToneFreq * Math.Pow(halftoneBase, toneIndex); + double freq = _BaseToneFreq * Math.Pow(_HalftoneBase, toneIndex); _SamplesPerPeriodPerTone[toneIndex] = (int)Math.Round(44100.0 / freq); // samples in one period } } @@ -70,6 +80,8 @@ namespace Vocaluxe.Lib.Sound.Record ToneValid = false; ToneAbs = 0; Tone = 0; + for (int i = 0; i < ToneWeigth.Length; i++) + ToneWeigth[i] = 0f; } private void _Add(byte[] bytes) @@ -212,5 +224,63 @@ namespace Vocaluxe.Lib.Sound.Record } GC.SuppressFinalize(this); } + +#if TEST_PITCH + private static bool _PitchTestRun; + + private string _ToneToNote(int tone, bool withOctave = true) + { + string[] notes = {"C", "C♯", "D", "Eb", "E", "F", "F♯", "G", "G♯", "A", "Bb", "B"}; + string result = notes[tone % 12]; + if (withOctave) + result += (tone / 12) + 2; + return result; + } + + private void _TestPitchDetection() + { + if (_PitchTestRun) + return; + _PitchTestRun = true; + const int toneFrom = 0; + const int tontTo = 47; + Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(tontTo)); + byte[] data; + for (int tone = toneFrom; tone <= tontTo; tone++) + { + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data); + ProcessNewBuffer(data); + AnalyzeBuffer(); + if (!ToneValid) + CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " not detected"); + else if (Tone != tone % 12) + CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " wrongly detected as " + _ToneToNote(Tone, false)); + } + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, out data); + Stopwatch sw = new Stopwatch(); + sw.Start(); + for (int i = 0; i < 10000; i++) + { + // ProcessNewBuffer(data); + // AnalyzeBuffer(); + _FindMaxVolume(); + _AnalyzeByAutocorrelation(); + } + sw.Stop(); + Console.WriteLine("Analysing took " + sw.ElapsedMilliseconds + "ms"); + Reset(); + } + + private void _GetSineWave(double freq, int sampleRate, out byte[] data) + { + const short max = short.MaxValue; + const int len = _AnalysisBufLen; //sampleRate * durationMs / 1000; + short[] data16Bit = new short[len]; + for (int i = 0; i < len; i++) + data16Bit[i] = (short)(Math.Sin(2 * Math.PI * i / sampleRate * freq) * max); + data = new byte[data16Bit.Length * 2]; + Buffer.BlockCopy(data16Bit, 0, data, 0, data.Length); + } +#endif } } \ No newline at end of file From dbde93d50c9e02626e50aca579bf84028fd3377e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 22 Mar 2014 19:22:01 +0100 Subject: [PATCH 045/116] Add auto-correlation function for sound detection Update test-code to check also mixed sounds --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 127 ++++++++++++++++++++++----- 1 file changed, 103 insertions(+), 24 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index dd264249..fe9b150c 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -5,6 +5,7 @@ using System.IO; #if TEST_PITCH using System.Diagnostics; +//using System.Windows.Forms; using VocaluxeLib; #endif @@ -13,10 +14,18 @@ namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { + public enum EAnalyzeFunction + { + AutoCorrelation, //Faster but strict (All right in set range, more resistent to noise, but does not detect tones outside the range) + Amdf //Average magnitude difference, slower and more heuristic (false detections in set range but also right detections outside) + } + + private delegate double DAnalyzeTone(int tone); + //Half tones: C C♯ D Eb E F F♯ G G♯ A Bb B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) - public const int NumHalfTones = 17; //Number of halftone to analyze C2-E3 (TODO: use more/full octaves?) + public const int NumHalfTones = 24; //Number of halftone to analyze C2-B4 private const int _AnalysisBufLen = 4096; private const int _AnalysisByteBufLen = _AnalysisBufLen * 2; @@ -26,6 +35,16 @@ namespace Vocaluxe.Lib.Sound.Record private static readonly int[] _SamplesPerPeriodPerTone = new int[NumHalfTones]; //Precalculated table holding sample# per period for each tone private readonly float[] _TmpWeight = new float[NumHalfTones]; //tmp buffer for weights (gets copied to ToneWeight when checked) + // ReSharper disable MemberCanBePrivate.Global + // ReSharper disable ConvertToConstant.Global + // ReSharper disable FieldCanBeMadeReadOnly.Global + public static EAnalyzeFunction AnalyzeFunction = EAnalyzeFunction.AutoCorrelation; + // ReSharper restore FieldCanBeMadeReadOnly.Global + // ReSharper restore ConvertToConstant.Global + // ReSharper restore MemberCanBePrivate.Global + // ReSharper disable FieldCanBeMadeReadOnly.Local + private DAnalyzeTone _AnalyzeToneFunc; + // ReSharper restore FieldCanBeMadeReadOnly.Local private double _MaxVolume; private bool _NewSamples; @@ -37,6 +56,10 @@ namespace Vocaluxe.Lib.Sound.Record MinVolume = 0.02f; ToneWeigth = new float[NumHalfTones]; Reset(); + if (AnalyzeFunction == EAnalyzeFunction.Amdf) + _AnalyzeToneFunc = _GetAmdf; + else if (AnalyzeFunction == EAnalyzeFunction.AutoCorrelation) + _AnalyzeToneFunc = _GetAutoCorrelation; #if TEST_PITCH _TestPitchDetection(); #endif @@ -128,7 +151,7 @@ namespace Vocaluxe.Lib.Sound.Record _FindMaxVolume(); if (MaxVolume >= MinVolume) - _AnalyzeByAutocorrelation(); + _AnalyzeTones(); else ToneValid = false; } @@ -156,7 +179,7 @@ namespace Vocaluxe.Lib.Sound.Record _MaxVolume = (double)maxVolume / Int16.MaxValue; } - private void _AnalyzeByAutocorrelation() + private void _AnalyzeTones() { // prepare to analyze double maxWeight = -1.0; @@ -169,7 +192,7 @@ namespace Vocaluxe.Lib.Sound.Record // too few samples -> use a bigger buffer-size for (int toneIndex = 0; toneIndex < NumHalfTones; toneIndex++) { - double curWeight = _AnalyzeAutocorrelationTone(toneIndex); + double curWeight = _AnalyzeToneFunc(toneIndex); if (curWeight > maxWeight) { @@ -195,7 +218,28 @@ namespace Vocaluxe.Lib.Sound.Record ToneValid = false; } - private double _AnalyzeAutocorrelationTone(int tone) + private double _GetAutoCorrelation(int tone) + { + int samplesPerPeriod = _SamplesPerPeriodPerTone[tone]; // samples in one period + + double accumDist = 0; // accumulated distances + + // compare correlating samples + int sampleIndex = 0; // index of sample to analyze + // Start value= index of sample one period ahead + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) + { + // calc distance to corresponding sample in next period (lower means more distant) + double dist = _AnalysisBuffer[sampleIndex] * _AnalysisBuffer[correlatingSampleIndex]; + accumDist += dist; + } + + //Using _AnalysisBufLen here makes it return correct values among all analyzed frequencies + const double scaleValue = (double)Int16.MaxValue * (double)Int16.MaxValue * _AnalysisBufLen; + return accumDist / scaleValue; + } + + private double _GetAmdf(int tone) { int samplesPerPeriod = _SamplesPerPeriodPerTone[tone]; // samples in one period @@ -206,12 +250,11 @@ namespace Vocaluxe.Lib.Sound.Record // Start value= index of sample one period ahead for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) { - // calc distance (correlation: 1-dist/IntMax) to corresponding sample in next period - // distance (0=equal .. IntMax=totally different) between correlated samples + // calc distance (correlation: 1-dist/IntMax*2) to corresponding sample in next period (0=equal .. IntMax*2=totally different) int dist = Math.Abs(_AnalysisBuffer[sampleIndex] - _AnalysisBuffer[correlatingSampleIndex]); accumDist += dist; } - + //Use analyzed sample count here. BufLen yields more errors return 1.0 - (double)accumDist / Int16.MaxValue / sampleIndex; } @@ -228,7 +271,7 @@ namespace Vocaluxe.Lib.Sound.Record #if TEST_PITCH private static bool _PitchTestRun; - private string _ToneToNote(int tone, bool withOctave = true) + private static string _ToneToNote(int tone, bool withOctave = true) { string[] notes = {"C", "C♯", "D", "Eb", "E", "F", "F♯", "G", "G♯", "A", "Bb", "B"}; string result = notes[tone % 12]; @@ -243,35 +286,71 @@ namespace Vocaluxe.Lib.Sound.Record return; _PitchTestRun = true; const int toneFrom = 0; - const int tontTo = 47; + const int tontTo = 48; Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(tontTo)); byte[] data; - for (int tone = toneFrom; tone <= tontTo; tone++) + int ok = 0; + for (int distort = 0; distort < 5; distort++) { - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data); - ProcessNewBuffer(data); - AnalyzeBuffer(); - if (!ToneValid) - CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " not detected"); - else if (Tone != tone % 12) - CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " wrongly detected as " + _ToneToNote(Tone, false)); + for (int tone = toneFrom; tone <= tontTo; tone++) + { + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data); + for (int i = 0; i < distort; i++) + _Distort(data, tone + 2 + i * 2); + + ProcessNewBuffer(data); + AnalyzeBuffer(); + if (!ToneValid) + CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " not detected (Distortion: " + distort + ")"); + else if (Tone != tone % 12) + CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " wrongly detected as " + _ToneToNote(Tone, false) + " (Distortion: " + distort + ")"); + else + ok++; + } } _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, out data); + ProcessNewBuffer(data); + AnalyzeBuffer(); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 10000; i++) { - // ProcessNewBuffer(data); - // AnalyzeBuffer(); - _FindMaxVolume(); - _AnalyzeByAutocorrelation(); + ProcessNewBuffer(data); + AnalyzeBuffer(); + // _FindMaxVolume(); + // _AnalyzeTones(); } sw.Stop(); - Console.WriteLine("Analysing took " + sw.ElapsedMilliseconds + "ms"); + string msg = "Analyser: Errors: " + ((tontTo - toneFrom + 1) * 5 - ok) + "; Speed: " + + (int)(10000.0 / (sw.ElapsedMilliseconds / 1000.0)) + " buffers/s"; + Console.WriteLine(msg); + //MessageBox.Show(msg); Reset(); } - private void _GetSineWave(double freq, int sampleRate, out byte[] data) + private static void _Distort(byte[] data, int tone) + { + short[] sdata = new short[data.Length / 2]; + Buffer.BlockCopy(data, 0, sdata, 0, data.Length); + short[] sdata2 = new short[data.Length / 2]; + if (tone < 4) + { + byte[] data2; + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data2); + Buffer.BlockCopy(data2, 0, sdata2, 0, data.Length); + } + else + { + Random r = new Random(0xBEEF); + for (int i = 0; i < sdata.Length; i++) + sdata2[i] = (short)(r.Next() - Int16.MinValue); + } + for (int i = 0; i < sdata.Length; i++) + sdata[i] = (short)(sdata[i] * 4.0 / 5.0 + sdata2[i] / 5.0); + Buffer.BlockCopy(sdata, 0, data, 0, data.Length); + } + + private static void _GetSineWave(double freq, int sampleRate, out byte[] data) { const short max = short.MaxValue; const int len = _AnalysisBufLen; //sampleRate * durationMs / 1000; From 2d441c347384a8cbc39fba4776037019fb545ea4 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 01:06:58 +0100 Subject: [PATCH 046/116] Improve detection by interpolating and fix test case --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 165 ++++++++++++++++++--------- 1 file changed, 114 insertions(+), 51 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index fe9b150c..880f819b 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -5,7 +5,7 @@ using System.IO; #if TEST_PITCH using System.Diagnostics; -//using System.Windows.Forms; +using System.Windows.Forms; using VocaluxeLib; #endif @@ -16,8 +16,8 @@ namespace Vocaluxe.Lib.Sound.Record { public enum EAnalyzeFunction { - AutoCorrelation, //Faster but strict (All right in set range, more resistent to noise, but does not detect tones outside the range) - Amdf //Average magnitude difference, slower and more heuristic (false detections in set range but also right detections outside) + AutoCorrelation, //Faster, more resistent to noise, good value for HalfToneMax=38 (higher->wrong results in test case, WHY?) with 38 no wrong values in test case + Amdf //Average magnitude difference, slower, detects everything in range -> HalfToneMax=45 } private delegate double DAnalyzeTone(int tone); @@ -25,15 +25,18 @@ namespace Vocaluxe.Lib.Sound.Record //Half tones: C C♯ D Eb E F F♯ G G♯ A Bb B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) - public const int NumHalfTones = 24; //Number of halftone to analyze C2-B4 + private const int _HalfToneMin = 0; // C2 + private const int _HalfToneMax = 38; //45; // inclusive, 38=D5; 45=A5 + public const int NumHalfTones = _HalfToneMax - _HalfToneMin + 1; //Number of halftones to analyze private const int _AnalysisBufLen = 4096; private const int _AnalysisByteBufLen = _AnalysisBufLen * 2; - private readonly Int16[] _AnalysisBuffer = new Int16[_AnalysisBufLen]; + private readonly short[] _AnalysisBuffer = new short[_AnalysisBufLen]; private readonly byte[] _AnalysisByteBuffer = new byte[_AnalysisByteBufLen]; //tmp buffer (stream->tmpBuffer->(Int16)AnalysisBuffer) - private static readonly int[] _SamplesPerPeriodPerTone = new int[NumHalfTones]; //Precalculated table holding sample# per period for each tone + //Precalculated table holding sample# per period for each tone (actually we may not use the lower few entries, but keep it to avoid index modification + private static readonly double[] _SamplesPerPeriodPerTone = new double[_HalfToneMax + 1]; private readonly float[] _TmpWeight = new float[NumHalfTones]; //tmp buffer for weights (gets copied to ToneWeight when checked) // ReSharper disable MemberCanBePrivate.Global // ReSharper disable ConvertToConstant.Global @@ -68,10 +71,10 @@ namespace Vocaluxe.Lib.Sound.Record static CBuffer() { //Init Array to avoid costly calculations - for (int toneIndex = 0; toneIndex < NumHalfTones; toneIndex++) + for (int toneIndex = 0; toneIndex <= _HalfToneMax; toneIndex++) { double freq = _BaseToneFreq * Math.Pow(_HalftoneBase, toneIndex); - _SamplesPerPeriodPerTone[toneIndex] = (int)Math.Round(44100.0 / freq); // samples in one period + _SamplesPerPeriodPerTone[toneIndex] = 44100.0 / freq; // samples in one period } } @@ -161,18 +164,16 @@ namespace Vocaluxe.Lib.Sound.Record private void _FindMaxVolume() { short maxVolume = 0; - for (int i = 0; i < _AnalysisBuffer.Length / 4; i++) + for (int i = 0; i < _AnalysisBufLen / 4; i++) { short volume = _AnalysisBuffer[i]; - if (volume < 0) + if (volume == Int16.MinValue) { - if (volume == Int16.MinValue) - { - maxVolume = Int16.MaxValue; - break; - } - volume = (short)-volume; + maxVolume = Int16.MaxValue; + break; } + if (volume < 0) + volume = (short)-volume; if (volume > maxVolume) maxVolume = volume; } @@ -186,11 +187,12 @@ namespace Vocaluxe.Lib.Sound.Record double minWeight = 1.0; int maxTone = -1; + // analyze halftones // Note: at the lowest tone (~65Hz) and a buffer-size of 4096 // at 44.1 (or 48kHz) only 6 (or 5) samples are compared, this might be // too few samples -> use a bigger buffer-size - for (int toneIndex = 0; toneIndex < NumHalfTones; toneIndex++) + for (int toneIndex = _HalfToneMin; toneIndex <= _HalfToneMax; toneIndex++) { double curWeight = _AnalyzeToneFunc(toneIndex); @@ -203,14 +205,15 @@ namespace Vocaluxe.Lib.Sound.Record if (curWeight < minWeight) minWeight = curWeight; - _TmpWeight[toneIndex] = (float)curWeight; + _TmpWeight[toneIndex - _HalfToneMin] = (float)curWeight; } - if (maxWeight - minWeight > 0.01) + if (maxWeight - minWeight > 0.001) { Array.Copy(_TmpWeight, ToneWeigth, NumHalfTones); ToneAbs = maxTone; + //Console.WriteLine(maxTone); Tone = maxTone % 12; ToneValid = true; } @@ -220,17 +223,22 @@ namespace Vocaluxe.Lib.Sound.Record private double _GetAutoCorrelation(int tone) { - int samplesPerPeriod = _SamplesPerPeriodPerTone[tone]; // samples in one period + double samplesPerPeriodD = _SamplesPerPeriodPerTone[tone]; // samples in one period + int samplesPerPeriod = (int)samplesPerPeriodD; + double fHigh = samplesPerPeriodD - samplesPerPeriod; + double fLow = 1.0 - fHigh; double accumDist = 0; // accumulated distances // compare correlating samples int sampleIndex = 0; // index of sample to analyze // Start value= index of sample one period ahead - for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) { // calc distance to corresponding sample in next period (lower means more distant) - double dist = _AnalysisBuffer[sampleIndex] * _AnalysisBuffer[correlatingSampleIndex]; + double dist = _AnalysisBuffer[sampleIndex] * + (_AnalysisBuffer[correlatingSampleIndex] * fLow + _AnalysisBuffer[correlatingSampleIndex + 1] * fHigh); + //double dist = _AnalysisBuffer[sampleIndex] * _AnalysisBuffer[correlatingSampleIndex]; accumDist += dist; } @@ -241,17 +249,22 @@ namespace Vocaluxe.Lib.Sound.Record private double _GetAmdf(int tone) { - int samplesPerPeriod = _SamplesPerPeriodPerTone[tone]; // samples in one period + double samplesPerPeriodD = _SamplesPerPeriodPerTone[tone]; // samples in one period + int samplesPerPeriod = (int)samplesPerPeriodD; + double fHigh = samplesPerPeriodD - samplesPerPeriod; + double fLow = 1.0 - fHigh; - int accumDist = 0; // accumulated distances + double accumDist = 0; // accumulated distances // compare correlating samples int sampleIndex = 0; // index of sample to analyze // Start value= index of sample one period ahead - for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) { // calc distance (correlation: 1-dist/IntMax*2) to corresponding sample in next period (0=equal .. IntMax*2=totally different) - int dist = Math.Abs(_AnalysisBuffer[sampleIndex] - _AnalysisBuffer[correlatingSampleIndex]); + //int dist = (int)Math.Abs(_AnalysisBuffer[sampleIndex] - _AnalysisBuffer[correlatingSampleIndex]); + double dist = Math.Abs(_AnalysisBuffer[sampleIndex] - + (_AnalysisBuffer[correlatingSampleIndex] * fLow + _AnalysisBuffer[correlatingSampleIndex + 1] * fHigh)); accumDist += dist; } //Use analyzed sample count here. BufLen yields more errors @@ -273,10 +286,11 @@ namespace Vocaluxe.Lib.Sound.Record private static string _ToneToNote(int tone, bool withOctave = true) { + tone += 24; string[] notes = {"C", "C♯", "D", "Eb", "E", "F", "F♯", "G", "G♯", "A", "Bb", "B"}; string result = notes[tone % 12]; if (withOctave) - result += (tone / 12) + 2; + result += (tone / 12); return result; } @@ -285,18 +299,17 @@ namespace Vocaluxe.Lib.Sound.Record if (_PitchTestRun) return; _PitchTestRun = true; - const int toneFrom = 0; - const int tontTo = 48; - Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(tontTo)); + int toneFrom = Math.Max(0, _HalfToneMin); + const int toneTo = 47; //B5 + Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); byte[] data; int ok = 0; - for (int distort = 0; distort < 5; distort++) + for (int distort = 0; distort < 10; distort++) { - for (int tone = toneFrom; tone <= tontTo; tone++) + for (int tone = toneFrom; tone <= toneTo; tone++) { _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data); - for (int i = 0; i < distort; i++) - _Distort(data, tone + 2 + i * 2); + _Distort(data, tone, distort); ProcessNewBuffer(data); AnalyzeBuffer(); @@ -313,40 +326,90 @@ namespace Vocaluxe.Lib.Sound.Record AnalyzeBuffer(); Stopwatch sw = new Stopwatch(); sw.Start(); - for (int i = 0; i < 10000; i++) + const int repeats = 2000; + for (int i = 0; i < repeats; i++) { - ProcessNewBuffer(data); - AnalyzeBuffer(); - // _FindMaxVolume(); - // _AnalyzeTones(); + //ProcessNewBuffer(data); + //AnalyzeBuffer(); + _FindMaxVolume(); + _AnalyzeTones(); } sw.Stop(); - string msg = "Analyser: Errors: " + ((tontTo - toneFrom + 1) * 5 - ok) + "; Speed: " + - (int)(10000.0 / (sw.ElapsedMilliseconds / 1000.0)) + " buffers/s"; + string msg = "Analyser: Errors: " + ((toneTo - toneFrom + 1) * 10 - ok) + "; Speed: " + + (int)(repeats / (sw.ElapsedMilliseconds / 1000.0)) + " buffers/s"; Console.WriteLine(msg); - //MessageBox.Show(msg); + MessageBox.Show(msg); Reset(); } - private static void _Distort(byte[] data, int tone) + private static short[] _GetDistort(int len, int tone, int type) { - short[] sdata = new short[data.Length / 2]; - Buffer.BlockCopy(data, 0, sdata, 0, data.Length); - short[] sdata2 = new short[data.Length / 2]; - if (tone < 4) + short[] sdata = new short[len]; + if (type < 9) { + int newTone = 1; + switch (type) + { + case 0: + newTone = 2; + break; + case 1: + newTone = 3; + break; + case 2: + newTone = 6; + break; + case 3: + newTone = 8; + break; + case 4: + newTone = 10; + break; + case 5: + newTone = 15; + break; + case 6: + newTone = 25; + break; + case 7: + newTone = 26; + break; + case 8: + newTone = 29; + break; + } byte[] data2; - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data2); - Buffer.BlockCopy(data2, 0, sdata2, 0, data.Length); + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone + newTone), 44100, out data2); + Buffer.BlockCopy(data2, 0, sdata, 0, len * 2); } else { Random r = new Random(0xBEEF); for (int i = 0; i < sdata.Length; i++) - sdata2[i] = (short)(r.Next() - Int16.MinValue); + sdata[i] = (short)(r.Next() - Int16.MinValue); } + return sdata; + } + + private static void _Distort(byte[] data, int tone, int distortCt) + { + if (distortCt < 1) + return; + short[] sdata = new short[data.Length / 2]; + Buffer.BlockCopy(data, 0, sdata, 0, data.Length); + + short[][] distortions = new short[distortCt][]; + for (int i = 0; i < distortCt; i++) + distortions[i] = _GetDistort(data.Length / 2, tone, i); + for (int i = 0; i < sdata.Length; i++) - sdata[i] = (short)(sdata[i] * 4.0 / 5.0 + sdata2[i] / 5.0); + { + double distortion = 0; + for (int j = 0; j < distortCt; j++) + distortion += distortions[j][i]; + distortion /= distortCt; + sdata[i] = (short)(sdata[i] * 4.0 / 5.0 + distortion / 5.0); + } Buffer.BlockCopy(sdata, 0, data, 0, data.Length); } From f6499efd38478d75d71a2e1a6e541f4fcee46ac7 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 01:23:58 +0100 Subject: [PATCH 047/116] Convert to double upfront Introduce property for MinWeightDiff --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 880f819b..7aece259 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -1,8 +1,7 @@ -//#define TEST_PITCH +#define TEST_PITCH using System; using System.IO; - #if TEST_PITCH using System.Diagnostics; using System.Windows.Forms; @@ -32,7 +31,7 @@ namespace Vocaluxe.Lib.Sound.Record private const int _AnalysisBufLen = 4096; private const int _AnalysisByteBufLen = _AnalysisBufLen * 2; - private readonly short[] _AnalysisBuffer = new short[_AnalysisBufLen]; + private readonly double[] _AnalysisBuffer = new double[_AnalysisBufLen]; private readonly byte[] _AnalysisByteBuffer = new byte[_AnalysisByteBufLen]; //tmp buffer (stream->tmpBuffer->(Int16)AnalysisBuffer) //Precalculated table holding sample# per period for each tone (actually we may not use the lower few entries, but keep it to avoid index modification @@ -47,6 +46,7 @@ namespace Vocaluxe.Lib.Sound.Record // ReSharper restore MemberCanBePrivate.Global // ReSharper disable FieldCanBeMadeReadOnly.Local private DAnalyzeTone _AnalyzeToneFunc; + private double _MinWeightDiff; // ReSharper restore FieldCanBeMadeReadOnly.Local private double _MaxVolume; @@ -60,9 +60,15 @@ namespace Vocaluxe.Lib.Sound.Record ToneWeigth = new float[NumHalfTones]; Reset(); if (AnalyzeFunction == EAnalyzeFunction.Amdf) + { _AnalyzeToneFunc = _GetAmdf; + _MinWeightDiff = 0.01; + } else if (AnalyzeFunction == EAnalyzeFunction.AutoCorrelation) + { _AnalyzeToneFunc = _GetAutoCorrelation; + _MinWeightDiff = 0.0001; + } #if TEST_PITCH _TestPitchDetection(); #endif @@ -163,21 +169,16 @@ namespace Vocaluxe.Lib.Sound.Record private void _FindMaxVolume() { - short maxVolume = 0; + double maxVolume = 0; for (int i = 0; i < _AnalysisBufLen / 4; i++) { - short volume = _AnalysisBuffer[i]; - if (volume == Int16.MinValue) - { - maxVolume = Int16.MaxValue; - break; - } + double volume = _AnalysisBuffer[i]; if (volume < 0) - volume = (short)-volume; + volume = -volume; if (volume > maxVolume) maxVolume = volume; } - _MaxVolume = (double)maxVolume / Int16.MaxValue; + _MaxVolume = maxVolume / Int16.MaxValue; } private void _AnalyzeTones() @@ -208,7 +209,7 @@ namespace Vocaluxe.Lib.Sound.Record _TmpWeight[toneIndex - _HalfToneMin] = (float)curWeight; } - if (maxWeight - minWeight > 0.001) + if (maxWeight - minWeight > _MinWeightDiff) { Array.Copy(_TmpWeight, ToneWeigth, NumHalfTones); From 9b31d674cd41c53d5f0f61685f12668742644f1b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 20 Mar 2014 20:35:45 +0100 Subject: [PATCH 048/116] Remove obsolete values --- Vocaluxe/Lib/Webcam/CAForgeNet.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Vocaluxe/Lib/Webcam/CAForgeNet.cs b/Vocaluxe/Lib/Webcam/CAForgeNet.cs index b07c9f46..c83b1d8c 100644 --- a/Vocaluxe/Lib/Webcam/CAForgeNet.cs +++ b/Vocaluxe/Lib/Webcam/CAForgeNet.cs @@ -90,7 +90,7 @@ namespace Vocaluxe.Lib.Webcam { var item = new SCapabilities { - Framerate = capabilities.FrameRate, + Framerate = capabilities.AverageFrameRate, Height = capabilities.FrameSize.Height, Width = capabilities.FrameSize.Width }; @@ -174,13 +174,13 @@ namespace Vocaluxe.Lib.Webcam if (config.Framerate != 0 && config.Height != 0 && config.Width != 0) { - _Webcam.DesiredFrameRate = config.Framerate; - _Webcam.DesiredFrameSize = new Size(config.Width, config.Height); + //_Webcam.DesiredFrameRate = config.Framerate; + //_Webcam.DesiredFrameSize = new Size(config.Width, config.Height); } - _Config.Framerate = _Webcam.DesiredFrameRate; - _Config.Height = _Webcam.DesiredFrameSize.Height; - _Config.Width = _Webcam.DesiredFrameSize.Width; + _Config.Framerate = _Webcam.SnapshotResolution.AverageFrameRate; + _Config.Height = _Webcam.SnapshotResolution.FrameSize.Height; + _Config.Width = _Webcam.SnapshotResolution.FrameSize.Width; _Config.MonikerString = _Webcam.Source; return true; From 26f0c82db13dcb4d01f19a1138a29422e517f3f4 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 21 Mar 2014 15:47:31 +0100 Subject: [PATCH 049/116] Free writer --- VocaluxeLib/Songs/CSongWriter.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs index a36e3fe6..a458fd70 100644 --- a/VocaluxeLib/Songs/CSongWriter.cs +++ b/VocaluxeLib/Songs/CSongWriter.cs @@ -177,11 +177,21 @@ namespace VocaluxeLib.Songs _WriteHeader(); _WriteNotes(); } + catch (UnauthorizedAccessException) + { + CBase.Log.LogError("Cannot write " + filePath + ". Directory might be readonly or requires admin rights."); + return false; + } catch (Exception e) { CBase.Log.LogError("Unhandled exception while writing " + filePath + ": " + e); return false; } + finally + { + if (_Tw != null) + _Tw.Dispose(); + } return true; } } From ef22f8557f95a2049997d869f27b26ded693411c Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 21 Mar 2014 16:40:43 +0100 Subject: [PATCH 050/116] Add better line breaks based on YASSs algorithm --- VocaluxeLib/Songs/CSongWriter.cs | 38 +++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs index a458fd70..19f8b237 100644 --- a/VocaluxeLib/Songs/CSongWriter.cs +++ b/VocaluxeLib/Songs/CSongWriter.cs @@ -122,6 +122,35 @@ namespace VocaluxeLib.Songs _Tw.WriteLine(addLine); } + /// + /// Gets a good beat for a line break that is >=firstPossibleBeat and <firstNoteBeat + /// Based on algorithm used by YASS: http://www.yass-along.com/errors.html + /// + /// First beat that is possible for a line break (equal (just after) previous line note end) + /// First note beat on current line + /// A good beat for the line break + private int _GetBreakBeat(int firstPossibleBeat, int firstNoteBeat) + { + int breakBeat; + int diff = firstNoteBeat - firstPossibleBeat; + float timeDiff = CBase.Game.GetTimeFromBeats(diff, _Song.BPM); + if (timeDiff > 4f) + breakBeat = firstPossibleBeat + (int)CBase.Game.GetBeatFromTime(2f, _Song.BPM, 0f); + else if (timeDiff > 2f) + breakBeat = firstPossibleBeat + (int)CBase.Game.GetBeatFromTime(1f, _Song.BPM, 0f); + else if (diff < 2) + breakBeat = firstPossibleBeat; + else if (diff < 9) + breakBeat = firstNoteBeat - 2; + else if (diff < 13) + breakBeat = firstNoteBeat - 3; + else if (diff < 17) + breakBeat = firstNoteBeat - 4; + else + breakBeat = firstPossibleBeat + 12; + return breakBeat; + } + private void _WriteNotes() { for (int i = 0; i < _Song.Notes.VoiceCount; i++) @@ -129,13 +158,13 @@ namespace VocaluxeLib.Songs CVoice voice = _Song.Notes.GetVoice(i); if (_Song.Notes.VoiceCount > 1) _Tw.WriteLine("P" + Math.Pow(2, i)); - bool firstLine = true; int currentBeat = 0; + CSongLine lastLine = null; foreach (CSongLine line in voice.Lines) { - if (!firstLine) + if (lastLine != null) { - string lineTxt = "- " + (line.StartBeat - currentBeat); + string lineTxt = "- " + (_GetBreakBeat(lastLine.EndBeat + 1, line.FirstNoteBeat) - currentBeat); if (_Song.Relative) { lineTxt += " " + (line.FirstNoteBeat - currentBeat); @@ -143,8 +172,6 @@ namespace VocaluxeLib.Songs } _Tw.WriteLine(lineTxt); } - else - firstLine = false; foreach (CSongNote note in line.Notes) { string tag; @@ -164,6 +191,7 @@ namespace VocaluxeLib.Songs } _Tw.WriteLine(tag + " " + (note.StartBeat - currentBeat) + " " + note.Duration + " " + note.Tone + " " + note.Text); } + lastLine = line; } } _Tw.WriteLine("E"); From 3dba30d58ebe0b990a976496e77b534f281076ef Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 21 Mar 2014 20:46:06 +0100 Subject: [PATCH 051/116] Fix typo and highlight current tone --- Output/Themes/Ambient/Screens/ScreenNames.xml | 24 +++++++++---------- .../Ambient/Screens/ScreenOptionsRecord.xml | 16 ++++++------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Output/Themes/Ambient/Screens/ScreenNames.xml b/Output/Themes/Ambient/Screens/ScreenNames.xml index 4efddb2d..5d17ebe2 100644 --- a/Output/Themes/Ambient/Screens/ScreenNames.xml +++ b/Output/Themes/Ambient/Screens/ScreenNames.xml @@ -1155,8 +1155,8 @@ 8 2,00 - - + + TR_CONFIG_OFF @@ -1182,8 +1182,8 @@ 8 2,00 - - + + TR_CONFIG_OFF @@ -1209,8 +1209,8 @@ 8 2,00 - - + + TR_CONFIG_OFF @@ -1236,8 +1236,8 @@ 8 2,00 - - + + TR_CONFIG_OFF @@ -1263,8 +1263,8 @@ 8 2,00 - - + + TR_CONFIG_OFF @@ -1290,8 +1290,8 @@ 8 2,00 - - + + TR_CONFIG_OFF diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml index ba0ce824..77c04934 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml @@ -782,11 +782,11 @@ 230 150 - 10 + 12 2,00 - - + + TR_CONFIG_OFF @@ -794,7 +794,7 @@ ButtonColor - ButtonColor + ButtonTextColor @@ -813,11 +813,11 @@ 230 150 - 10 + 12 2,00 - - + + TR_CONFIG_OFF @@ -825,7 +825,7 @@ ButtonColor - ButtonColor + ButtonTextColor From 50494d902b18b8de8d5585e67b44c317bd957a4e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 22 Mar 2014 01:39:18 +0100 Subject: [PATCH 052/116] Fix equalizers showing inverted values --- Vocaluxe/Screens/CScreenNames.cs | 2 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 22 +++++++------ VocaluxeLib/Menu/CEqualizer.cs | 40 ++++++++++++++---------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index f3789e5c..945e6731 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -547,7 +547,7 @@ namespace Vocaluxe.Screens for (int i = 1; i <= CGame.NumPlayer; i++) { CRecord.AnalyzeBuffer(i - 1); - _Equalizers["EqualizerPlayer" + i].Update(CRecord.ToneWeigth(i - 1)); + _Equalizers["EqualizerPlayer" + i].Update(CRecord.ToneWeigth(i - 1), CRecord.GetMaxVolume(i - 1)); } return true; } diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index cd41ebaf..a0c072d6 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -223,25 +223,29 @@ namespace Vocaluxe.Screens if (_CheckMicConfig()) { - _ChannelEnergy[0] = 0f; - int player = _SelectSlides[_SelectSlideRecordChannel1].Selection; - if (player > 0) + int player = _SelectSlides[_SelectSlideRecordChannel1].Selection - 1; + if (player >= 0) { - _ChannelEnergy[0] = CRecord.GetMaxVolume(player - 1); - _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player - 1)); + _ChannelEnergy[0] = CRecord.GetMaxVolume(player); + _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); } else + { + _ChannelEnergy[0] = 0f; _Equalizers[_EqualizerChannel1].Reset(); + } - _ChannelEnergy[1] = 0f; - player = _SelectSlides[_SelectSlideRecordChannel2].Selection; - if (player > 0) + player = _SelectSlides[_SelectSlideRecordChannel2].Selection - 1; + if (player >= 0) { _ChannelEnergy[1] = CRecord.GetMaxVolume(player - 1); - _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player - 1)); + _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); } else + { + _ChannelEnergy[1] = 0f; _Equalizers[_EqualizerChannel2].Reset(); + } } else { diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index 5d75a478..58680d90 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -22,7 +22,7 @@ namespace VocaluxeLib.Menu { enum EEqualizerStyle { - Collums + Columns } struct SThemeEqualizer @@ -64,6 +64,8 @@ namespace VocaluxeLib.Menu } private float[] _Bars; + private int _MaxBar; + private float _MaxVolume; public CEqualizer(int partyModeID) { @@ -211,17 +213,31 @@ namespace VocaluxeLib.Menu return false; } - public void Update(float[] weights) + public void Update(float[] weights, float volume) { if (weights == null || weights.Length == 0 || _Bars == null) return; + if (volume < 0.001) + return; + if (volume > _MaxVolume) + _MaxVolume = volume; + _MaxBar = 0; + float maxVal = -99f; for (int i = 0; i < _Bars.Length; i++) { if (weights.Length > i) { - _Bars[i] = 1f - weights[i]; if (_Theme.DrawNegative == EOffOn.TR_CONFIG_OFF && weights[i] < 0) - _Bars[i] = 1f + weights[i]; + _Bars[i] = 0f; + else + { + _Bars[i] = weights[i] * volume / _MaxVolume; + if (_Bars[i] > maxVal) + { + maxVal = _Bars[i]; + _MaxBar = i; + } + } } else _Bars[i] = 0f; @@ -235,30 +251,22 @@ namespace VocaluxeLib.Menu for (int i = 0; i < _Bars.Length; i++) _Bars[i] = 0f; + _MaxBar = 0; + _MaxVolume = 0f; } public void Draw() { - if (_Bars == null || _Theme.Style != EEqualizerStyle.Collums) + if (_Bars == null || _Theme.Style != EEqualizerStyle.Columns) return; float dx = Rect.W / _Bars.Length; - int max = _Bars.Length - 1; - float maxB = _Bars[max]; - for (int i = 0; i < _Bars.Length - 1; i++) - { - if (_Bars[i] > maxB) - { - maxB = _Bars[i]; - max = i; - } - } for (int i = 0; i < _Bars.Length; i++) { var bar = new SRectF(Rect.X + dx * i, Rect.Y + Rect.H - _Bars[i] * Rect.H, dx - Space, _Bars[i] * Rect.H, Rect.Z); SColorF color = Color; - if (i == max) + if (i == _MaxBar) color = MaxColor; CBase.Drawing.DrawColor(color, bar); From af941e2eccded3b4590ea3237b1dd5ab9cb638eb Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 22 Mar 2014 01:39:43 +0100 Subject: [PATCH 053/116] LogDebug logs to console in DEBUG build --- Vocaluxe/Base/CLog.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Vocaluxe/Base/CLog.cs b/Vocaluxe/Base/CLog.cs index a0484670..f90b7043 100644 --- a/Vocaluxe/Base/CLog.cs +++ b/Vocaluxe/Base/CLog.cs @@ -164,6 +164,9 @@ namespace Vocaluxe.Base public static void LogDebug(string text) { _DebugLog.Add(String.Format("{0:HH:mm:ss.ffff}", DateTime.Now) + ":" + text); +#if DEBUG + Console.WriteLine(text); +#endif } public static void LogSongInfo(string text) From 6a51e63be40883f61799df3250655e18d86f818e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 22 Mar 2014 19:23:34 +0100 Subject: [PATCH 054/116] Add Close() function to IPlayback to fully close the driver (and block till done) --- Vocaluxe/Base/CSound.cs | 3 +- .../Playback/Gstreamer/CGstreamerAudio.cs | 5 ++ .../GstreamerSharp/CGstreamerSharpAudio.cs | 10 ++++ Vocaluxe/Lib/Sound/Playback/IPlayback.cs | 1 + .../Lib/Sound/Playback/OpenAL/COpenALPlay.cs | 46 ++++++++++++++----- .../Sound/Playback/OpenAL/COpenAlStream.cs | 14 +++--- .../Playback/PortAudio/CPortAudioPlay.cs | 24 ++++++++-- .../Playback/PortAudio/CPortAudioStream.cs | 29 +++++++++--- Vocaluxe/Program.cs | 1 + 9 files changed, 103 insertions(+), 30 deletions(-) diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index a09ba20a..d5fbd50d 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -83,7 +83,8 @@ namespace Vocaluxe.Base public static void Close() { - CloseAllStreams(); + if (_Playback != null) + _Playback.Close(); _Playback = null; } diff --git a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs index 66a30301..2b6a663a 100644 --- a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs @@ -45,6 +45,11 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer return CGstreamerAudioWrapper.Init(); } + public void Close() + { + CloseAll(); + } + public void SetGlobalVolume(float volume) { CGstreamerAudioWrapper.SetGlobalVolume(volume); diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index 640b0c8d..f95c2c91 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -27,6 +27,8 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp public bool Init() { + if (Application.IsInitialized) + return false; #if ARCH_X86 const string path = ".\\x86\\gstreamer"; #endif @@ -41,6 +43,14 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp return Application.IsInitialized; } + public void Close() + { + if (!Application.IsInitialized) + return; + CloseAll(); + Application.Deinit(); + } + public void SetGlobalVolume(float volume) { foreach (CGstreamerSharpAudioStream stream in _Streams.Values) diff --git a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs index 13ce9857..47fd10a9 100644 --- a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs +++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs @@ -40,6 +40,7 @@ namespace Vocaluxe.Lib.Sound.Playback interface IPlayback { bool Init(); + void Close(); void SetGlobalVolume(float volume); int GetStreamCount(); void CloseAll(); diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs index ac7b533b..558ab7ee 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs @@ -16,6 +16,7 @@ #endregion using System.Linq; +using System.Threading; using OpenTK.Audio; using System; using System.Collections.Generic; @@ -34,10 +35,15 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL private List _Streams; + ~COpenALPlay() + { + _Dispose(false); + } + public bool Init() { if (_Initialized) - CloseAll(); + return false; _Context = new AudioContext(); @@ -51,6 +57,11 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL return true; } + public void Close() + { + Dispose(); + } + public void CloseAll() { lock (_MutexDecoder) @@ -321,24 +332,37 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL private void _CloseProc(int streamID) { - if (_Initialized) + if (!_Initialized) + return; + lock (_MutexDecoder) { - lock (_MutexDecoder) + if (_AlreadyAdded(streamID)) { - if (_AlreadyAdded(streamID)) - { - int index = _GetStreamIndex(streamID); - _Decoder.RemoveAt(index); - _Streams.RemoveAt(index); - } + int index = _GetStreamIndex(streamID); + _Decoder.RemoveAt(index); + _Streams.RemoveAt(index); } } } public void Dispose() { - _Context.Dispose(); - _Context = null; + _Dispose(true); + } + + private void _Dispose(bool disposing) + { + CloseAll(); + if (disposing) + { + while (_Decoder.Count > 0) + Thread.Sleep(5); + } + if (_Context != null) + { + _Context.Dispose(); + _Context = null; + } } public void FadeAndStop(int stream, float targetVolume, float seconds) diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs index f3742b7d..ca76bd3d 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -9,7 +9,7 @@ using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.OpenAL { - class COpenAlStream : IDisposable + class COpenAlStream { private const int _BufferSize = 2048; private const int _BufferCount = 5; @@ -70,6 +70,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL _StreamID = streamID; _Terminated = true; _CloseMutex = closeMutex; + _EventDecode.Set(); } public float Length @@ -372,6 +373,11 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL } _Closeproc(_StreamID); + if (_EventDecode != null) + { + _EventDecode.Dispose(); + _EventDecode = null; + } } #endregion Threading @@ -464,11 +470,5 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL _CurrentTime = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - 0.1f; _Timer.Restart(); } - - public void Dispose() - { - _EventDecode.Close(); - _EventDecode = null; - } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs index 86f62f4d..ce029c63 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs @@ -21,29 +21,43 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { class CPortAudioPlay : IPlayback { - private bool _Initialized; + private volatile bool _Initialized; private readonly List _Streams = new List(); private int _NextID; public bool Init() { if (_Initialized) - CloseAll(); + return false; _Initialized = true; return true; } + public void Close() + { + _Initialized = false; //Set this first, so threads don't call closeproc anymore + List streams = new List(); + //Get all streams but do not modify list without holding the lock + //Calling dispose from within the lock may deadlock in closeproc (if a thread is already there) + lock (_Streams) + { + streams.AddRange(_Streams); + _Streams.Clear(); + } + foreach (CPortAudioStream stream in streams) + stream.Dispose(); + } + public void CloseAll() { lock (_Streams) { foreach (CPortAudioStream stream in _Streams) - stream.Free(); + stream.Close(); _Streams.Clear(); } - _Initialized = false; } public void SetGlobalVolume(float volume) @@ -99,7 +113,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio int index = _GetStreamIndex(stream); if (index >= 0) { - _Streams[index].Free(); + _Streams[index].Close(); _Streams.RemoveAt(index); } } diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 6d372560..9701e59f 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -68,12 +68,15 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio ~CPortAudioStream() { - Dispose(); + _Dispose(false); + if (_DecoderThread != null) + _DecoderThread.Join(); } - public void Free() + public void Close() { _Terminated = true; + _EventDecode.Set(); } public float Length @@ -512,11 +515,25 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public void Dispose() { - if (_EventDecode != null) + _Dispose(true); + GC.SuppressFinalize(this); + } + + private void _Dispose(bool disposing) + { + Close(); + if (disposing) { - _EventDecode.Close(); - _EventDecode = null; - GC.SuppressFinalize(this); + if (_DecoderThread != null) + { + _DecoderThread.Join(); + _DecoderThread = null; + } + if (_EventDecode != null) + { + _EventDecode.Close(); + _EventDecode = null; + } } } } diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 74464be9..5ee3826e 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -268,6 +268,7 @@ namespace Vocaluxe CDraw.Unload(); CDataBase.Close(); CWebcam.Close(); + GC.Collect(); // Do a GC run here before we close logs to have finalizers run CLog.CloseAll(); } catch (Exception) {} From e5b2e3dffabcf87a9391050bb12aca0fb18a1024 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 21:47:53 +0100 Subject: [PATCH 055/116] Fix build warning --- GstreamerHelper/GstreamerHelper.vcxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj index cf79bf57..1c6e02b6 100644 --- a/GstreamerHelper/GstreamerHelper.vcxproj +++ b/GstreamerHelper/GstreamerHelper.vcxproj @@ -152,6 +152,7 @@ WIN32;_DEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) true Default + ProgramDatabase Windows From ba4ca57d603b18054b984bfe5a47c2e73543bdad Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 21:48:04 +0100 Subject: [PATCH 056/116] Fix wrong dll import --- Vocaluxe/COSFunctions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/COSFunctions.cs b/Vocaluxe/COSFunctions.cs index 472956c6..82dd2eea 100644 --- a/Vocaluxe/COSFunctions.cs +++ b/Vocaluxe/COSFunctions.cs @@ -22,7 +22,7 @@ namespace Vocaluxe [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetForegroundWindow(IntPtr hWnd); - [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)] + [DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetDefaultDllDirectories(int directoryFlags); From 251e2f09860fce2cfd11b51911c77e98507cd53c Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 21:59:27 +0100 Subject: [PATCH 057/116] Reformat doc and include license in headers (important) --- Vocaluxe.sln.DotSettings | 2 +- Vocaluxe/Base/CBackgroundMusic.cs | 6 +-- Vocaluxe/Base/CConfig.cs | 6 +-- Vocaluxe/Base/CCover.cs | 4 +- Vocaluxe/Base/CDataBase.cs | 3 +- Vocaluxe/Base/CParty.cs | 4 +- Vocaluxe/Base/CPlaylistElement.cs | 19 +++++++- Vocaluxe/Base/CRecord.cs | 19 +++++++- Vocaluxe/Base/CSettings.cs | 4 +- Vocaluxe/Base/CSongCategorizer.cs | 2 +- Vocaluxe/Base/Server/CVocaluxeServer.cs | 4 +- Vocaluxe/COSFunctions.cs | 19 +++++++- Vocaluxe/Lib/Sound/CPortAudioCommon.cs | 46 +++++++++++++------ .../CGstreamerSharpAudioStream.cs | 17 +++++++ .../Sound/Playback/OpenAL/COpenAlStream.cs | 19 +++++++- .../Playback/PortAudio/CPortAudioPlay.cs | 10 ++-- .../Playback/PortAudio/CPortAudioStream.cs | 19 +++++++- Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs | 19 +++++++- .../Sound/Playback/PortAudio/CSyncTimer.cs | 19 +++++++- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 21 ++++++++- Vocaluxe/Lib/Sound/Record/CDelayTest.cs | 19 +++++++- .../DirectSound/CSampleDataEventArgs.cs | 19 +++++++- .../Record/DirectSound/CSoundCardSource.cs | 19 +++++++- Vocaluxe/Lib/Sound/Record/IRecord.cs | 26 +++++------ .../Lib/Video/Acinerella/CDecoderThread.cs | 21 ++++++++- Vocaluxe/Screens/CScreenOptionsSound.cs | 7 +-- VocaluxeLib/CFading.cs | 2 +- VocaluxeLib/CHelper.cs | 8 ++-- VocaluxeLib/Songs/CSongWriter.cs | 4 +- WebserverInitalConfig/CConfigHttpApi.cs | 2 +- 30 files changed, 314 insertions(+), 75 deletions(-) diff --git a/Vocaluxe.sln.DotSettings b/Vocaluxe.sln.DotSettings index 0a1c7cf8..661e1a2c 100644 --- a/Vocaluxe.sln.DotSettings +++ b/Vocaluxe.sln.DotSettings @@ -10,7 +10,7 @@ DO_NOT_SHOW DO_NOT_SHOW <?xml version="1.0" encoding="utf-16"?><Profile name="Cleanup"><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSRemoveCodeRedundancies>True</CSRemoveCodeRedundancies><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><CSShortenReferences>True</CSShortenReferences><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSUpdateFileHeader>True</CSUpdateFileHeader><CSUseAutoProperty>True</CSUseAutoProperty></Profile> - <?xml version="1.0" encoding="utf-16"?><Profile name="Simple Reformat"><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSShortenReferences>True</CSShortenReferences><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar></Profile> + <?xml version="1.0" encoding="utf-16"?><Profile name="Simple Reformat"><CSOptimizeUsings><OptimizeUsings>False</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><StyleCop.Documentation><SA1600ElementsMustBeDocumented>False</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>False</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>False</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>False</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>False</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>False</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>False</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>False</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>False</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>False</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>Ignore</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>False</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>False</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>False</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>False</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>False</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>False</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>False</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>False</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>False</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>False</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>False</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>False</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>False</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>False</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Ordering><AlphabeticalUsingDirectives>Ignore</AlphabeticalUsingDirectives><ExpandUsingDirectives>Ignore</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><CSShortenReferences>True</CSShortenReferences><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSharpFormatDocComments>True</CSharpFormatDocComments></Profile> Cleanup Simple Reformat 0 diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index c06c0b2c..09bddfcc 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -128,8 +128,8 @@ namespace Vocaluxe.Base } /// - /// Initializes the background music with values from config - /// Has to be called before any other method is used + /// Initializes the background music with values from config + /// Has to be called before any other method is used /// public static void Init() { @@ -320,7 +320,7 @@ namespace Vocaluxe.Base } /// - /// (Re-)Starts the _CurrentPlaylistElement + /// (Re-)Starts the _CurrentPlaylistElement /// private static void _StartSong() { diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 6eb0be6b..6b6d7bf0 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -106,7 +106,7 @@ namespace Vocaluxe.Base public static int GameMusicVolume = 80; //Folders - public static readonly List SongFolders = new List() + public static readonly List SongFolders = new List { Path.Combine(Directory.GetCurrentDirectory(), _FolderSongs) @@ -115,8 +115,8 @@ namespace Vocaluxe.Base #endif }; /// - /// Folders with profiles - /// First one is used for new profiles + /// Folders with profiles + /// First one is used for new profiles /// public static readonly List ProfileFolders = new List { diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index fddf06d2..5b52371b 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -214,8 +214,8 @@ namespace Vocaluxe.Base } /// - /// Ads a cover with the given name if it does not exist yet - /// MUST HOLD _Covers lock at this point + /// Ads a cover with the given name if it does not exist yet + /// MUST HOLD _Covers lock at this point /// /// Name of the cover /// Filename of image file diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 3a512891..7721f663 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -29,6 +29,7 @@ using VocaluxeLib.Draw; using VocaluxeLib.Songs; #if WIN using System.Data.SQLite; + #else using Mono.Data.Sqlite; using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection; @@ -1181,7 +1182,7 @@ namespace Vocaluxe.Base } /// - /// You have to hold the CoverMutex when calling this! + /// You have to hold the CoverMutex when calling this! /// private static void _CommitCovers() { diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index a52c0c60..2fd180c1 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -223,8 +223,8 @@ namespace Vocaluxe.Base foreach (string file in files) { SPartyMode pm = _LoadPartyMode(file); - if(pm.NoErrors) - _PartyModes.Add(pm.PartyModeID, pm); + if (pm.NoErrors) + _PartyModes.Add(pm.PartyModeID, pm); } } diff --git a/Vocaluxe/Base/CPlaylistElement.cs b/Vocaluxe/Base/CPlaylistElement.cs index 195be8e7..3b6588de 100644 --- a/Vocaluxe/Base/CPlaylistElement.cs +++ b/Vocaluxe/Base/CPlaylistElement.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using VocaluxeLib.Draw; using VocaluxeLib.Songs; diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs index 5af44fd1..97b9bf16 100644 --- a/Vocaluxe/Base/CRecord.cs +++ b/Vocaluxe/Base/CRecord.cs @@ -1,4 +1,21 @@ -using System.Collections.ObjectModel; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System.Collections.ObjectModel; using Vocaluxe.Lib.Sound.Record; using Vocaluxe.Lib.Sound.Record.DirectSound; using Vocaluxe.Lib.Sound.Record.PortAudio; diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index 7c57abf1..3de72e98 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -34,8 +34,8 @@ namespace Vocaluxe.Base } /// - /// This class contains settings for the program - /// These are not editable, everything that can be changed by the user is in CConfig + /// This class contains settings for the program + /// These are not editable, everything that can be changed by the user is in CConfig /// static class CSettings { diff --git a/Vocaluxe/Base/CSongCategorizer.cs b/Vocaluxe/Base/CSongCategorizer.cs index 8c68e615..282e62a7 100644 --- a/Vocaluxe/Base/CSongCategorizer.cs +++ b/Vocaluxe/Base/CSongCategorizer.cs @@ -91,7 +91,7 @@ namespace Vocaluxe.Base } /// - /// Sets the SortStrings of the songpointers to the actual category names + /// Sets the SortStrings of the songpointers to the actual category names /// private static void _AdjustCategoryNames() { diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 19f91e62..c25462d0 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -318,8 +318,8 @@ namespace Vocaluxe.Base.Server { string filename = _SaveImage(avatarData, "snapshot", CConfig.ProfileFolders[0]); - var avatar = CAvatar.GetAvatar(filename); - if (avatar!=null) + CAvatar avatar = CAvatar.GetAvatar(filename); + if (avatar != null) { CProfiles.AddAvatar(avatar); return avatar; diff --git a/Vocaluxe/COSFunctions.cs b/Vocaluxe/COSFunctions.cs index 82dd2eea..d8aec79a 100644 --- a/Vocaluxe/COSFunctions.cs +++ b/Vocaluxe/COSFunctions.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.Runtime.InteropServices; namespace Vocaluxe diff --git a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs b/Vocaluxe/Lib/Sound/CPortAudioCommon.cs index d3584860..96c1431e 100644 --- a/Vocaluxe/Lib/Sound/CPortAudioCommon.cs +++ b/Vocaluxe/Lib/Sound/CPortAudioCommon.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.Diagnostics; using PortAudioSharp; using Vocaluxe.Base; @@ -6,11 +23,10 @@ using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound { /// - /// PortAudio can be used for record and playback - /// So do some common stuff here and make sure those 2 do not interfere - /// - /// DO NEVER use following Pa_* functions other than the ones from this class: - /// Initialize, Terminate, OpenStream, CloseStream + /// PortAudio can be used for record and playback + /// So do some common stuff here and make sure those 2 do not interfere + /// DO NEVER use following Pa_* functions other than the ones from this class: + /// Initialize, Terminate, OpenStream, CloseStream /// abstract class CPortAudioCommon { @@ -18,8 +34,8 @@ namespace Vocaluxe.Lib.Sound private static readonly object _Mutex = new object(); /// - /// Safe method to init PortAudio (adds a reference) - /// MUST call CloseDriver when done + /// Safe method to init PortAudio (adds a reference) + /// MUST call CloseDriver when done /// /// True on success, falso if not initialized (log written) protected static bool _InitDriver() @@ -37,8 +53,8 @@ namespace Vocaluxe.Lib.Sound } /// - /// Safe method to close PortAudio - /// MUST be called _exactly_ once after successfull InitDriver call + /// Safe method to close PortAudio + /// MUST be called _exactly_ once after successfull InitDriver call /// protected static void _CloseDriver() { @@ -62,7 +78,7 @@ namespace Vocaluxe.Lib.Sound } /// - /// Convenience method to safely open an input stream and log potential error + /// Convenience method to safely open an input stream and log potential error /// /// /// @@ -83,7 +99,7 @@ namespace Vocaluxe.Lib.Sound } /// - /// Convenience method to safely open an output stream and log potential error + /// Convenience method to safely open an output stream and log potential error /// /// /// @@ -112,8 +128,8 @@ namespace Vocaluxe.Lib.Sound } /// - /// Checks if PA returned an error and logs it - /// Returns true on error + /// Checks if PA returned an error and logs it + /// Returns true on error /// /// Action identifier (E.g. openStream) /// Result returned by Pa_* call @@ -137,7 +153,7 @@ namespace Vocaluxe.Lib.Sound } /// - /// Selects the most appropriate host api + /// Selects the most appropriate host api /// /// The most appropriate host api protected static int _GetHostApi() diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index bbcbd725..c566c9b0 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -1,3 +1,20 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + using System; using GLib; using Gst; diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs index ca76bd3d..3297e49e 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.Diagnostics; using System.IO; using System.Threading; diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs index ce029c63..96e6d3d7 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs @@ -301,8 +301,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio #endregion Stream Handling /// - /// Returns true if strem with given id is found - /// MUST hold _Stream-lock + /// Returns true if strem with given id is found + /// MUST hold _Stream-lock /// /// Stream id /// @@ -312,8 +312,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } /// - /// Returns the index of the stream with the given id - /// MUST hold _Stream-lock + /// Returns the index of the stream with the given id + /// MUST hold _Stream-lock /// /// Stream id /// @@ -328,7 +328,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } /// - /// Removes the stream with the given handle + /// Removes the stream with the given handle /// /// Stream handle private void _CloseProc(int stream) diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 9701e59f..1b683884 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.IO; using System.Runtime.InteropServices; using System.Threading; diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs index 17b92f45..ea854457 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPt1.cs @@ -1,4 +1,21 @@ -using System.Diagnostics; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System.Diagnostics; namespace Vocaluxe.Lib.Sound.Playback.PortAudio { diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs index 2b405c9c..1b4eb0cc 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.Diagnostics; namespace Vocaluxe.Lib.Sound.Playback.PortAudio diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index c3db3e72..f9e8944a 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.IO; namespace Vocaluxe.Lib.Sound.Record @@ -56,7 +73,7 @@ namespace Vocaluxe.Lib.Sound.Record public float[] ToneWeigth { get; private set; } /// - /// Minimum volume for a tone to be valid + /// Minimum volume for a tone to be valid /// public float MinVolume { get; set; } diff --git a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs index a9974c40..91e1472f 100644 --- a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs +++ b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs @@ -1,4 +1,21 @@ -using System.Diagnostics; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System.Diagnostics; using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs index 22a9fcd1..b52911e4 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CSampleDataEventArgs.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; namespace Vocaluxe.Lib.Sound.Record.DirectSound { diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs index b3a7d5c4..50858b15 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CSoundCardSource.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.Collections.Generic; using System.Threading; using SlimDX.DirectSound; diff --git a/Vocaluxe/Lib/Sound/Record/IRecord.cs b/Vocaluxe/Lib/Sound/Record/IRecord.cs index 04899008..709a77df 100644 --- a/Vocaluxe/Lib/Sound/Record/IRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/IRecord.cs @@ -62,84 +62,84 @@ namespace Vocaluxe.Lib.Sound.Record interface IRecord { /// - /// Initializes recording + /// Initializes recording /// /// True on success bool Init(); /// - /// Closes recording. You must not use it before calling Init again + /// Closes recording. You must not use it before calling Init again /// void Close(); /// - /// Starts recording on all enabled devices (PlayerChannelX set) + /// Starts recording on all enabled devices (PlayerChannelX set) /// /// True on success, false on error or not initialized bool Start(); /// - /// Stops recording on all devices + /// Stops recording on all devices /// /// True on success, false on error or not initialized bool Stop(); /// - /// Analyzes the buffer for the given player + /// Analyzes the buffer for the given player /// /// void AnalyzeBuffer(int player); /// - /// Get the current raw tone value for a player + /// Get the current raw tone value for a player /// /// 0-based player index /// Tone between 0 and NumHalftones-1 int GetToneAbs(int player); /// - /// Get the current tone value for a player + /// Get the current tone value for a player /// /// 0-based player index /// Tone between 0 and 11 (one octave) int GetTone(int player); /// - /// DEBUG ONLY: Sets a tone for a player + /// DEBUG ONLY: Sets a tone for a player /// /// 0-based player index /// Raw tone value between 0 and NumHalfTones-1 void SetTone(int player, int tone); /// - /// Get the current maximum input volume (normalized) for a player + /// Get the current maximum input volume (normalized) for a player /// /// 0-based player index /// Maximum volume between 0 and 1 float GetMaxVolume(int player); /// - /// Returns whether the current tone is valid. That includes, if maximum volume is higher than the threshold + /// Returns whether the current tone is valid. That includes, if maximum volume is higher than the threshold /// /// 0-based player index /// True if tone is detected and volume higher than threshold bool ToneValid(int player); /// - /// Returns the number of half tones used for the raw tone detection + /// Returns the number of half tones used for the raw tone detection /// /// number of half tones used for the raw tone detection int NumHalfTones(); /// - /// Returns the tone weights for a player as an array of normalized values for each halftone + /// Returns the tone weights for a player as an array of normalized values for each halftone /// /// 0-based player index /// Array of values (0-1) with one entry per halftone float[] ToneWeigth(int player); /// - /// Readonly list of all detected record devices. Modifying the devices should not be done when record is running. + /// Readonly list of all detected record devices. Modifying the devices should not be done when record is running. /// /// Readonly list of all detected record devices ReadOnlyCollection RecordDevices(); diff --git a/Vocaluxe/Lib/Video/Acinerella/CDecoderThread.cs b/Vocaluxe/Lib/Video/Acinerella/CDecoderThread.cs index 2b254b98..0ff06799 100644 --- a/Vocaluxe/Lib/Video/Acinerella/CDecoderThread.cs +++ b/Vocaluxe/Lib/Video/Acinerella/CDecoderThread.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; using System.IO; using System.Runtime.InteropServices; using System.Threading; @@ -170,7 +187,7 @@ namespace Vocaluxe.Lib.Video.Acinerella } /// - /// Gets a frame + /// Gets a frame /// /// Referenz to texture where frame should be put in (can be null, then texture is created) /// Maximum start time for frame diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs index 8e417a2c..8f087207 100644 --- a/Vocaluxe/Screens/CScreenOptionsSound.cs +++ b/Vocaluxe/Screens/CScreenOptionsSound.cs @@ -150,16 +150,17 @@ namespace Vocaluxe.Screens { CConfig.GameMusicVolume = _SelectSlides[_SelectSlideGameMusicVolume].Selection * 5; CConfig.PreviewMusicVolume = _SelectSlides[_SelectSlidePreviewMusicVolume].Selection * 5; - CConfig.BackgroundMusic=(EOffOn)_SelectSlides[_SelectSlideBackgroundMusic].Selection; + CConfig.BackgroundMusic = (EOffOn)_SelectSlides[_SelectSlideBackgroundMusic].Selection; CConfig.BackgroundMusicSource = (EBackgroundMusicSource)_SelectSlides[_SelectSlideBackgroundMusicSource].Selection; - CConfig.BackgroundMusicVolume= _SelectSlides[_SelectSlideBackgroundMusicVolume].Selection * 5; + CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideBackgroundMusicVolume].Selection * 5; CConfig.SaveConfig(); CBackgroundMusic.SetMusicSource(CConfig.BackgroundMusicSource); CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON) CBackgroundMusic.Play(); - else CBackgroundMusic.Pause(); + else + CBackgroundMusic.Pause(); } } } \ No newline at end of file diff --git a/VocaluxeLib/CFading.cs b/VocaluxeLib/CFading.cs index 0b6761cb..e66c10db 100644 --- a/VocaluxeLib/CFading.cs +++ b/VocaluxeLib/CFading.cs @@ -43,7 +43,7 @@ namespace VocaluxeLib } /// - /// Gets the current value and sets finished + /// Gets the current value and sets finished /// /// Set to whether fading has finished /// Current value (between from and to values) diff --git a/VocaluxeLib/CHelper.cs b/VocaluxeLib/CHelper.cs index 77c8f729..9d37b818 100644 --- a/VocaluxeLib/CHelper.cs +++ b/VocaluxeLib/CHelper.cs @@ -162,7 +162,7 @@ namespace VocaluxeLib } /// - /// Returns a list with all files in the given path that match a given pattern + /// Returns a list with all files in the given path that match a given pattern /// /// Path to search for /// Pattern to match (e.g. "*.jpg") @@ -195,7 +195,7 @@ namespace VocaluxeLib } /// - /// Returns a list with all files in the given path that matches at least one of the given patterns + /// Returns a list with all files in the given path that matches at least one of the given patterns /// /// Path to search for /// List of patterns to match @@ -212,7 +212,7 @@ namespace VocaluxeLib } /// - /// Returns a list with all image files in the given path + /// Returns a list with all image files in the given path /// /// Path to search for /// Search directories recursively @@ -224,7 +224,7 @@ namespace VocaluxeLib } /// - /// Returns a list with all image files in the given path + /// Returns a list with all image files in the given path /// /// Path to search for /// Search directories recursively diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs index 19f8b237..7d5eb4ca 100644 --- a/VocaluxeLib/Songs/CSongWriter.cs +++ b/VocaluxeLib/Songs/CSongWriter.cs @@ -123,8 +123,8 @@ namespace VocaluxeLib.Songs } /// - /// Gets a good beat for a line break that is >=firstPossibleBeat and <firstNoteBeat - /// Based on algorithm used by YASS: http://www.yass-along.com/errors.html + /// Gets a good beat for a line break that is >=firstPossibleBeat and <firstNoteBeat + /// Based on algorithm used by YASS: http://www.yass-along.com/errors.html /// /// First beat that is possible for a line break (equal (just after) previous line note end) /// First note beat on current line diff --git a/WebserverInitalConfig/CConfigHttpApi.cs b/WebserverInitalConfig/CConfigHttpApi.cs index e16f3a44..e13a9cda 100644 --- a/WebserverInitalConfig/CConfigHttpApi.cs +++ b/WebserverInitalConfig/CConfigHttpApi.cs @@ -128,7 +128,7 @@ namespace WebserverInitalConfig CngKey key; try { - key= CngKey.Create(CngAlgorithm2.Rsa, Guid.NewGuid().ToString(), keyParam); + key = CngKey.Create(CngAlgorithm2.Rsa, Guid.NewGuid().ToString(), keyParam); } catch (PlatformNotSupportedException) { From 8eb42b5a5f274c1c7fdc3ea5ecfbec031da1cd08 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 21:41:40 +0100 Subject: [PATCH 058/116] Add a native version of the pitch detection algo as C# is to slow for exact real time detection(Speedup: 10) --- .gitignore | 13 +- PitchTracker/PitchTracker.vcxproj | 178 ++++++++++++++++++++++ PitchTracker/PitchTracker.vcxproj.filters | 27 ++++ PitchTracker/pitchTracker.cpp | 115 ++++++++++++++ PitchTracker/pitchTracker.h | 17 +++ Vocaluxe.sln | 23 +++ Vocaluxe/Lib/Sound/Record/CBuffer.cs | 115 +++++++++++--- 7 files changed, 460 insertions(+), 28 deletions(-) create mode 100644 PitchTracker/PitchTracker.vcxproj create mode 100644 PitchTracker/PitchTracker.vcxproj.filters create mode 100644 PitchTracker/pitchTracker.cpp create mode 100644 PitchTracker/pitchTracker.h diff --git a/.gitignore b/.gitignore index 6413e521..a12662d6 100644 --- a/.gitignore +++ b/.gitignore @@ -14,13 +14,13 @@ Output/Songs /*.ctl /Output/Registration.xml /Vocaluxe.suo -/Vocaluxe/Vocaluxe.csproj.user +*.csproj.user +*.vcxproj.user /Output/Config.xml *.ipch *.log /Output/Playlists/*.xml -/Output/x64/gstreamer/GstreamerHelper.dll -/Output/x86/gstreamer/GstreamerHelper.dll +GstreamerHelper.dll *.tlog *.suo *.obj @@ -39,11 +39,7 @@ Output/Songs *.Cache /GstreamerHelper/bin/* /VocaluxeLib/bin -/ClientServerLib/ClientServerLib/ClientServerLib.csproj.user -/ClientServerLib/ClientServerLib/bin/Debug/ClientServerLib.dll -/ClientServerLib/ClientTest/bin/Debug/ClientServerLib.dll -/ClientServerLib/ClientTest/bin/Release/ClientServerLib.dll -/ClientServerLib/ClientServerLib/bin/ClientServerLib.dll +ClientServerLib.dll ClientTest.exe *.vshost.* *.userprefs @@ -63,3 +59,4 @@ Output/Vocaluxe_x64.exe /Output/VocaluxeServerConfig.exe.config /PhoneGap/ /Output/Profiles +PitchTracker.dll diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj new file mode 100644 index 00000000..73e5ca52 --- /dev/null +++ b/PitchTracker/PitchTracker.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {54A48AF7-515C-4EDD-B395-2BFFA096050A} + Win32Proj + PitchTracker + PitchTracker + + + + DynamicLibrary + true + v110_xp + Unicode + + + DynamicLibrary + true + v110_xp + Unicode + + + DynamicLibrary + false + v110_xp + true + Unicode + + + DynamicLibrary + false + v110_xp + true + Unicode + + + + + + + + + + + + + + + + + + + true + bin\$(Configuration).$(Platform)\ + obj\$(Configuration).$(Platform)\ + + + true + bin\$(Configuration).$(Platform)\ + obj\$(Configuration).$(Platform)\ + + + false + bin\$(Configuration).$(Platform)\ + obj\$(Configuration).$(Platform)\ + + + false + bin\$(Configuration).$(Platform)\ + obj\$(Configuration).$(Platform)\ + + + + NotUsing + Level3 + Disabled + WIN64;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Fast + + + Windows + true + + + xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x64\" /I /Y + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Fast + + + Windows + true + + + xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x86\" /I /Y + + + + + Level3 + NotUsing + MaxSpeed + true + true + WIN64;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Speed + true + Fast + + + Windows + false + true + true + + + xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x64\" /I /Y + + + + + Level3 + NotUsing + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Speed + Fast + + + Windows + false + true + true + + + xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x86\" /I /Y + + + + + + + + + + + + \ No newline at end of file diff --git a/PitchTracker/PitchTracker.vcxproj.filters b/PitchTracker/PitchTracker.vcxproj.filters new file mode 100644 index 00000000..aa287032 --- /dev/null +++ b/PitchTracker/PitchTracker.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pitchTracker.cpp new file mode 100644 index 00000000..72904102 --- /dev/null +++ b/PitchTracker/pitchTracker.cpp @@ -0,0 +1,115 @@ +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . + +#include "pitchTracker.h" +#include +#include +#include +#include + +void doLog(const char* msg,...){ + va_list argptr = NULL; + va_start(argptr, msg); + + char buffer[200]; + vsprintf_s(buffer,msg, argptr); + if(Log) Log(buffer); + va_end(argptr); +} + +void SetLogCallback(LogCallback Callback){ + Log=Callback; +} + +double *SamplesPerPeriodPerTone = NULL; +int MinHalfTone = 0, MaxHalfTone = 38; +const double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) + +void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ + MinHalfTone = minHalfTone; + MaxHalfTone = maxHalfTone; + DeInit(); + if(maxHalfTone <= 0) + return; + SamplesPerPeriodPerTone = (double*) malloc(MaxHalfTone * sizeof(double)); + //Init Array to avoid costly calculations + for (int toneIndex = 0; toneIndex <= MaxHalfTone; toneIndex++) + { + double freq = baseToneFrequency * pow(HalftoneBase, toneIndex); + SamplesPerPeriodPerTone[toneIndex] = 44100.0 / freq; // samples in one period + } +} + +void DeInit(){ + if(SamplesPerPeriodPerTone){ + free(SamplesPerPeriodPerTone); + SamplesPerPeriodPerTone=NULL; + } +} + +static double _AnalyzeToneFunc(double *samples, int sampleCt, int toneIndex){ + double samplesPerPeriodD = SamplesPerPeriodPerTone[toneIndex]; // samples in one period + int samplesPerPeriod = (int)samplesPerPeriodD; + double fHigh = samplesPerPeriodD - samplesPerPeriod; + double fLow = 1.0 - fHigh; + + double accumDist = 0; // accumulated distances + + // compare correlating samples + int sampleIndex = 0; // index of sample to analyze + // Start value= index of sample one period ahead + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < sampleCt; correlatingSampleIndex++, sampleIndex++) + { + // calc distance to corresponding sample in next period (lower means more distant) + double dist = samples[sampleIndex] * (samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh); + accumDist += dist; + } + + //Using _AnalysisBufLen here makes it return correct values among all analyzed frequencies + double scaleValue = 32767.0 * 32767.0 * sampleCt; // Divide also by Int16.MaxValue^2 + return accumDist / scaleValue; +} + +int GetTone(double *samples, int sampleCt, float *weights){ + double maxVolume = 0; + for(int i = 0; i < sampleCt; i++){ + double vol = abs(samples[i]); + if(vol > maxVolume) + maxVolume = vol; + } + double maxWeight = -1; + double minWeight = 1; + int maxTone = -1; + for (int toneIndex = MinHalfTone; toneIndex <= MaxHalfTone; toneIndex++) + { + double curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolume * 32767.0; + + if (curWeight > maxWeight) + { + maxWeight = curWeight; + maxTone = toneIndex; + } + + if (curWeight < minWeight) + minWeight = curWeight; + + weights[toneIndex] = (float) curWeight; + } + + if(maxWeight - minWeight > 0.01){ + return maxTone; + }else return -1; +} + diff --git a/PitchTracker/pitchTracker.h b/PitchTracker/pitchTracker.h new file mode 100644 index 00000000..99b477b0 --- /dev/null +++ b/PitchTracker/pitchTracker.h @@ -0,0 +1,17 @@ +#pragma once + +#ifndef dywapitchtrack__H +#define dywapitchtrack__H + +#define DllExport extern "C" __declspec(dllexport) + +DllExport void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); +DllExport void DeInit(); +DllExport int GetTone(double *samples, int sampleCt, float *weights); + +typedef void (__stdcall * LogCallback)(const char* text); +static LogCallback Log; +DllExport void SetLogCallback(LogCallback Callback); + +#endif + diff --git a/Vocaluxe.sln b/Vocaluxe.sln index 347f685a..0298c529 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -9,6 +9,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocalu {EC5167E4-CCFB-4CEE-987C-CF816F1062A3} = {EC5167E4-CCFB-4CEE-987C-CF816F1062A3} {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} = {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} {5A4053F1-5AD5-441F-B254-D97A088127B6} = {5A4053F1-5AD5-441F-B254-D97A088127B6} + {54A48AF7-515C-4EDD-B395-2BFFA096050A} = {54A48AF7-515C-4EDD-B395-2BFFA096050A} EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VocaluxeLib", "VocaluxeLib\VocaluxeLib.csproj", "{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}" @@ -25,6 +26,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerLib", "ClientServerLi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebserverInitalConfig", "WebserverInitalConfig\WebserverInitalConfig.csproj", "{55F89808-4E79-4FFE-BC13-48258913F5C9}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PitchTracker", "PitchTracker\PitchTracker.vcxproj", "{54A48AF7-515C-4EDD-B395-2BFFA096050A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution DebugLinux|x64 = DebugLinux|x64 @@ -191,6 +194,26 @@ Global {55F89808-4E79-4FFE-BC13-48258913F5C9}.ReleaseWin|x64.Build.0 = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.ReleaseWin|x86.ActiveCfg = Release|Any CPU {55F89808-4E79-4FFE-BC13-48258913F5C9}.ReleaseWin|x86.Build.0 = Release|Any CPU + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugLinux|x64.ActiveCfg = Debug|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugLinux|x64.Build.0 = Debug|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugLinux|x86.ActiveCfg = Debug|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugLinux|x86.Build.0 = Debug|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugWin|x64.ActiveCfg = Debug|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugWin|x64.Build.0 = Debug|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugWin|x86.ActiveCfg = Debug|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.DebugWin|x86.Build.0 = Debug|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.InstallerWin|x64.ActiveCfg = Release|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.InstallerWin|x64.Build.0 = Release|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.InstallerWin|x86.ActiveCfg = Release|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.InstallerWin|x86.Build.0 = Release|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseLinux|x64.ActiveCfg = Release|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseLinux|x64.Build.0 = Release|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseLinux|x86.ActiveCfg = Release|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseLinux|x86.Build.0 = Release|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x64.ActiveCfg = Release|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x64.Build.0 = Release|x64 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x86.ActiveCfg = Release|Win32 + {54A48AF7-515C-4EDD-B395-2BFFA096050A}.ReleaseWin|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 7aece259..70334af4 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -1,9 +1,29 @@ -#define TEST_PITCH +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +#define TEST_PITCH +#define USE_NATIVE_DETECTION +//If defined, it uses a library with native code that speeds up detection by a factor of 10 using System; using System.IO; #if TEST_PITCH using System.Diagnostics; +using System.Runtime.InteropServices; using System.Windows.Forms; using VocaluxeLib; @@ -11,16 +31,29 @@ using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Record { +#if USE_NATIVE_DETECTION + static class CPitchTracker + { + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern void DeInit(); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int GetTone(double[] samples, int sampleCt, float[] weights); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + public delegate void LogCallback(string message); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern void SetLogCallback(LogCallback c); + } +#endif + class CBuffer : IDisposable { - public enum EAnalyzeFunction - { - AutoCorrelation, //Faster, more resistent to noise, good value for HalfToneMax=38 (higher->wrong results in test case, WHY?) with 38 no wrong values in test case - Amdf //Average magnitude difference, slower, detects everything in range -> HalfToneMax=45 - } - - private delegate double DAnalyzeTone(int tone); - + private static int _InitCount; //Half tones: C C♯ D Eb E F F♯ G G♯ A Bb B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) @@ -34,9 +67,18 @@ namespace Vocaluxe.Lib.Sound.Record private readonly double[] _AnalysisBuffer = new double[_AnalysisBufLen]; private readonly byte[] _AnalysisByteBuffer = new byte[_AnalysisByteBufLen]; //tmp buffer (stream->tmpBuffer->(Int16)AnalysisBuffer) - //Precalculated table holding sample# per period for each tone (actually we may not use the lower few entries, but keep it to avoid index modification + private readonly float[] _TmpWeights = new float[NumHalfTones]; //tmp buffer for weights (gets copied to ToneWeight when checked) +#if !USE_NATIVE_DETECTION + //Precalculated table holding sample# per period for each tone (actually we may not use the lower few entries, but keep it to avoid index modification private static readonly double[] _SamplesPerPeriodPerTone = new double[_HalfToneMax + 1]; - private readonly float[] _TmpWeight = new float[NumHalfTones]; //tmp buffer for weights (gets copied to ToneWeight when checked) + + public enum EAnalyzeFunction + { + AutoCorrelation, //Faster, more resistent to noise, good value for HalfToneMax=38 (higher->wrong results in test case, WHY?) with 38 no wrong values in test case + Amdf //Average magnitude difference, slower, detects everything in range -> HalfToneMax=45 + } + private delegate double DAnalyzeTone(int tone); + // ReSharper disable MemberCanBePrivate.Global // ReSharper disable ConvertToConstant.Global // ReSharper disable FieldCanBeMadeReadOnly.Global @@ -48,7 +90,7 @@ namespace Vocaluxe.Lib.Sound.Record private DAnalyzeTone _AnalyzeToneFunc; private double _MinWeightDiff; // ReSharper restore FieldCanBeMadeReadOnly.Local - +#endif private double _MaxVolume; private bool _NewSamples; @@ -56,9 +98,11 @@ namespace Vocaluxe.Lib.Sound.Record public CBuffer() { + _Init(); MinVolume = 0.02f; ToneWeigth = new float[NumHalfTones]; Reset(); +#if !USE_NATIVE_DETECTION if (AnalyzeFunction == EAnalyzeFunction.Amdf) { _AnalyzeToneFunc = _GetAmdf; @@ -69,19 +113,32 @@ namespace Vocaluxe.Lib.Sound.Record _AnalyzeToneFunc = _GetAutoCorrelation; _MinWeightDiff = 0.0001; } +#endif #if TEST_PITCH _TestPitchDetection(); #endif } - static CBuffer() + ~CBuffer() { - //Init Array to avoid costly calculations + _Dispose(); + } + + private static void _Init() + { + _InitCount++; + if (_InitCount > 1) + return; //Do init only once +#if USE_NATIVE_DETECTION + CPitchTracker.Init(_BaseToneFreq, _HalfToneMin, _HalfToneMax); +#else + //Init Array to avoid costly calculations for (int toneIndex = 0; toneIndex <= _HalfToneMax; toneIndex++) { double freq = _BaseToneFreq * Math.Pow(_HalftoneBase, toneIndex); _SamplesPerPeriodPerTone[toneIndex] = 44100.0 / freq; // samples in one period } +#endif } public int ToneAbs { get; private set; } @@ -98,7 +155,7 @@ namespace Vocaluxe.Lib.Sound.Record public float[] ToneWeigth { get; private set; } /// - /// Minimum volume for a tone to be valid + /// Minimum volume for a tone to be valid /// public float MinVolume { get; set; } @@ -183,7 +240,11 @@ namespace Vocaluxe.Lib.Sound.Record private void _AnalyzeTones() { - // prepare to analyze +#if USE_NATIVE_DETECTION + int maxTone = CPitchTracker.GetTone(_AnalysisBuffer, _AnalysisBufLen, _TmpWeights); + if (maxTone >= 0) +#else + // prepare to analyze double maxWeight = -1.0; double minWeight = 1.0; int maxTone = -1; @@ -206,12 +267,13 @@ namespace Vocaluxe.Lib.Sound.Record if (curWeight < minWeight) minWeight = curWeight; - _TmpWeight[toneIndex - _HalfToneMin] = (float)curWeight; + _TmpWeights[toneIndex - _HalfToneMin] = (float)curWeight; } if (maxWeight - minWeight > _MinWeightDiff) +#endif { - Array.Copy(_TmpWeight, ToneWeigth, NumHalfTones); + Array.Copy(_TmpWeights, ToneWeigth, NumHalfTones); ToneAbs = maxTone; //Console.WriteLine(maxTone); @@ -222,6 +284,7 @@ namespace Vocaluxe.Lib.Sound.Record ToneValid = false; } +#if !USE_NATIVE_DETECTION private double _GetAutoCorrelation(int tone) { double samplesPerPeriodD = _SamplesPerPeriodPerTone[tone]; // samples in one period @@ -269,17 +332,29 @@ namespace Vocaluxe.Lib.Sound.Record accumDist += dist; } //Use analyzed sample count here. BufLen yields more errors - return 1.0 - (double)accumDist / Int16.MaxValue / sampleIndex; + return 1.0 - accumDist / Int16.MaxValue / sampleIndex; } +#endif public void Dispose() + { + _Dispose(); + GC.SuppressFinalize(this); + } + + private void _Dispose() { if (_Stream != null) { _Stream.Dispose(); _Stream = null; } - GC.SuppressFinalize(this); +#if USE_NATIVE_DETECTION + Debug.Assert(_InitCount > 0); + _InitCount--; + if (_InitCount == 0) + CPitchTracker.DeInit(); +#endif } #if TEST_PITCH From d67d58cbc3bab9ff1b3dd9ebc45fdce8ab271741 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 22:34:22 +0100 Subject: [PATCH 059/116] Change note names --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 70334af4..b7f84c54 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -54,7 +54,7 @@ namespace Vocaluxe.Lib.Sound.Record class CBuffer : IDisposable { private static int _InitCount; - //Half tones: C C♯ D Eb E F F♯ G G♯ A Bb B + //Half tones: C C♯ D D# E F F♯ G G♯ A A# B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) private const int _HalfToneMin = 0; // C2 @@ -363,7 +363,7 @@ namespace Vocaluxe.Lib.Sound.Record private static string _ToneToNote(int tone, bool withOctave = true) { tone += 24; - string[] notes = {"C", "C♯", "D", "Eb", "E", "F", "F♯", "G", "G♯", "A", "Bb", "B"}; + string[] notes = {"C", "C♯", "D", "D#", "E", "F", "F♯", "G", "G♯", "A", "A#", "B"}; string result = notes[tone % 12]; if (withOctave) result += (tone / 12); From 2021ea94ff6d0736cee392d5334e63cada10c46a Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 23 Mar 2014 22:43:00 +0100 Subject: [PATCH 060/116] Update Newtonsoft.Json.dll and move license --- .../Newtonsoft.Json/LICENSE.txt} | 0 .../Newtonsoft.Json/SourceAndVersion.txt | 6 ++++++ Output/Newtonsoft.Json.dll | Bin 420864 -> 481792 bytes 3 files changed, 6 insertions(+) rename Output/{LICENSE Newtonsoft.Json.txt => Licenses/Newtonsoft.Json/LICENSE.txt} (100%) create mode 100644 Output/Licenses/Newtonsoft.Json/SourceAndVersion.txt diff --git a/Output/LICENSE Newtonsoft.Json.txt b/Output/Licenses/Newtonsoft.Json/LICENSE.txt similarity index 100% rename from Output/LICENSE Newtonsoft.Json.txt rename to Output/Licenses/Newtonsoft.Json/LICENSE.txt diff --git a/Output/Licenses/Newtonsoft.Json/SourceAndVersion.txt b/Output/Licenses/Newtonsoft.Json/SourceAndVersion.txt new file mode 100644 index 00000000..a61fd5b6 --- /dev/null +++ b/Output/Licenses/Newtonsoft.Json/SourceAndVersion.txt @@ -0,0 +1,6 @@ +http://json.codeplex.com/ + +Version: Json.NET 6.0 Release 1 (.Net 4.0) + +Files: +Newtonsoft.Json.dll \ No newline at end of file diff --git a/Output/Newtonsoft.Json.dll b/Output/Newtonsoft.Json.dll index a1c39382a08153ac6d2f42ca8e5eb51f343eca1e..339e470c33c888bdc289ece964d6334f175d4b80 100644 GIT binary patch literal 481792 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
  • aqg#7jtIW_|@O+#XkI-MTD=8W>Lo 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

    ().apply(data); + DanielsonLanczos

    ().apply(data + M); + // Combine the results + std::complex w(1.0); + for (std::size_t i = 0; i < M; ++i) { + const std::complex temp = data[i + M] * w; + data[M + i] = data[i] - temp; + data[i] += temp; + w *= std::polar(1.0, -M_TAU / N); + } + } + }; + + template struct DanielsonLanczos<0, T> { static void apply(std::complex*) {} }; + + /** Perform FFT on data. **/ + template void fft(std::complex* data) { + // Perform bit-reversal sorting of sample data. + constexpr std::size_t N = 1 << P; + std::size_t j = 0; + for (std::size_t i = 0; i < N; ++i) { + if (i < j) std::swap(data[i], data[j]); + std::size_t m = N / 2; + while (m > 1 && m <= j) { j -= m; m >>= 1; } + j += m; + } + // Do the actual calculation + DanielsonLanczos::apply(data); + } + + /** Perform FFT on data from floating point iterator, windowing the input. **/ + template std::vector > fft(InIt begin, Window window) { + std::vector > data(1 << P); + // Perform bit-reversal sorting of sample data. + constexpr std::size_t N = 1 << P; + std::size_t j = 0; + for (std::size_t i = 0; i < N; ++i) { + data[j] = *begin++ * window[i]; + std::size_t m = N / 2; + while (m > 1 && m <= j) { j -= m; m >>= 1; } + j += m; + } + // Do the actual calculation + DanielsonLanczos::apply(&data[0]); + return data; + } + + template void ifft(std::complex* data) { + constexpr std::size_t N = 1 << P; + for (std::size_t i = 0; i < N; ++i) data[i] = std::conj(data[i]); // Invert phase so that we can use FFT to do IFFT + fft

    (data); + constexpr std::complex scale(1.0/N, 0.0); + for (std::size_t i = 0; i < N; ++i) data[i] = scale * std::conj(data[i]); // Invert back, and apply IFFT scaling + } + +} diff --git a/PitchTracker/libda/sample.hpp b/PitchTracker/libda/sample.hpp new file mode 100644 index 00000000..a09bbcb6 --- /dev/null +++ b/PitchTracker/libda/sample.hpp @@ -0,0 +1,82 @@ +#pragma once + +#include +#include "../compatibility.h" + +/** + * @file sample.hpp Sample format definition and format conversions. + */ + +namespace da { + + using std::round; + + // Should be a floating-point type + typedef float sample_t; + + // A helper function for clamping a value to a certain range + template T clamp(T val, T min, T max) { + if (val < min) val = min; + if (val > max) val = max; + return val; + } + + constexpr sample_t max_s16(32767), min_s16 = -max_s16 - sample_t(1); + constexpr sample_t max_s24(8388607), min_s24 = -max_s24 - sample_t(1); + constexpr sample_t max_s32(2147483647), min_s32= -max_s32 - sample_t(1); + constexpr double tau(6.2831853071795864769252867665590057683943387987502116); ///< One full circle + constexpr double pi = tau / sample_t(2); ///< Half circle + constexpr double eps(1e-10); ///< Tiny positive value + + /// Mathematical sinc function + template static inline Float msinc(Float x) { return std::abs(x) < Float(eps) ? Float(1) : std::sin(x) / x; } + + /// Normalized (signal processing) sinc function + template static inline Float sinc(Float x) { return msinc(Float(pi) * x); } + + /// Lanczos kernel of size A + template static inline Float lanc(Float x) { + return std::abs(x) < A ? sinc(x) * sinc(x / A) : Float(); + } + + // The following conversions provide lossless conversions between floats + // and integers. Be sure to use only these conversions or otherwise the + // conversions may not be lossless, due to different scaling factors being + // used by different libraries. + + // The negative minimum integer value produces sample_t value slightly + // more negative than -1.0 but this is necessary in order to prevent + // clipping in the float-to-int conversions. Now amplitude 1.0 in floating + // point produces -32767 .. 32767 symmetrical non-clipping range in s16. + + static inline sample_t conv_from_s16(int s) { return s / max_s16; } + static inline sample_t conv_from_s24(int s) { return s / max_s24; } + static inline sample_t conv_from_s32(int s) { return s / max_s32; } + // The rounding is strictly not necessary, but it greatly improves + // the error tolerance if any floating point calculations are done. + // The ugly static_casts are required to avoid warnings in MSVC. + static inline int conv_to_s16(sample_t s) { return clamp(static_cast(round(s * max_s16)), static_cast(min_s16), static_cast(max_s16)); } + static inline int conv_to_s24(sample_t s) { return clamp(static_cast(round(s * max_s24)), static_cast(min_s24), static_cast(max_s24)); } + static inline int conv_to_s32(sample_t s) { return static_cast(clamp(round(s * max_s32), min_s32, max_s32 )); } + // Non-rounding non-clamping versions are provided for very low end devices (still lossless) + static inline int conv_to_s16_fast(sample_t s) { return static_cast(s * max_s16); } + static inline int conv_to_s24_fast(sample_t s) { return static_cast(s * max_s24); } + static inline int conv_to_s32_fast(sample_t s) { return static_cast(s * max_s32); } + + template class step_iterator: public std::iterator { + ValueType* m_pos; + std::ptrdiff_t m_step; + public: + step_iterator(ValueType* pos, std::ptrdiff_t step): m_pos(pos), m_step(step) {} + ValueType& operator*() { return *m_pos; } + step_iterator operator+(std::ptrdiff_t rhs) { return step_iterator(m_pos + m_step * rhs, m_step); } + step_iterator& operator++() { m_pos += m_step; return *this; } + step_iterator operator++(int) { step_iterator ret = *this; ++*this; return ret; } + bool operator!=(step_iterator const& rhs) const { return m_pos != rhs.m_pos; } + std::ptrdiff_t operator-(step_iterator const& rhs) const { return (m_pos - rhs.m_pos) / m_step; } + // TODO: more operators + }; + + typedef step_iterator sample_iterator; + typedef step_iterator sample_const_iterator; +} diff --git a/PitchTracker/pitch.cc b/PitchTracker/pitch.cc new file mode 100644 index 00000000..d4b9d9a0 --- /dev/null +++ b/PitchTracker/pitch.cc @@ -0,0 +1,233 @@ +#include "pitch.hh" + +#include "util.hh" +#include "libda/fft.hpp" +#include +#include +#include + +// Limit the range to avoid noise and useless computation +static const double FFT_MINFREQ = 45.0; +static const double FFT_MAXFREQ = 5000.0; + +Tone::Tone(): + freq(0.0), + db(-getInf()), + stabledb(-getInf()), + age() +{ + for (auto& h: harmonics) h = -getInf(); +} + +void Tone::print() const { + if (age < Tone::MINAGE) return; + std::cout << std::fixed << std::setprecision(1) << freq << " Hz, age " << age << ", " << db << " dB:"; + for (std::size_t i = 0; i < 8; ++i) std::cout << " " << harmonics[i]; + std::cout << std::endl; +} + +bool Tone::operator==(double f) const { + return std::abs(freq / f - 1.0) < 0.05; +} + +Analyzer::Analyzer(double rate, std::string id, std::size_t step): + m_step(step), + m_resampleFactor(1.0), + m_resamplePos(), + m_rate(rate), + m_id(id), + m_window(FFT_N), + m_fftLastPhase(FFT_N / 2), + m_peak(0.0), + m_oldfreq(0.0) +{ + if (m_step > FFT_N) throw std::logic_error("Analyzer step is larger that FFT_N (ideally it should be less than a fourth of FFT_N)."); + // Hamming window + for (size_t i=0; i < FFT_N; i++) { + m_window[i] = static_cast(0.53836 - 0.46164 * std::cos(2.0 * M_PI * i / (FFT_N - 1))); + } +} + +void Analyzer::output(float* begin, float* end, double rate) { + constexpr unsigned a = 2; + const unsigned size = m_passthrough.size(); + const unsigned out = static_cast((end - begin) / 2 /* stereo */); + if (out == 0) return; + const unsigned in = static_cast(m_resampleFactor * (m_rate / rate) * out + 2 * a /* lanczos kernel */ + 5 /* safety margin for rounding errors */); + float pcm[m_passthrough.capacity]; + m_passthrough.read(pcm, pcm + in + 4); + for (unsigned i = 0; i < out; ++i) { + double s = 0.0; + unsigned k = static_cast(m_resamplePos); + double x = m_resamplePos - k; + // Lanczos sampling of input at m_resamplePos + for (unsigned j = 0; j <= 2 * a; ++j) s += pcm[k + j] * da::lanc(x - j + a); + s *= 5.0; + begin[i * 2] += (float) s; + begin[i * 2 + 1] += (float) s; + m_resamplePos += m_resampleFactor; + } + unsigned num = static_cast(m_resamplePos); + m_resamplePos -= num; + if (size > 3000) { + // Reset + m_passthrough.pop(m_passthrough.size() - 700); + m_resampleFactor = 1.0; + } else { + m_passthrough.pop(num); + m_resampleFactor = 0.99 * m_resampleFactor + 0.01 * (size > 700 ? 1.02 : 0.98); + } +} + + +namespace { + struct Peak { + double freq; + double db; + bool harm[Tone::MAXHARM]; + Peak(double _freq = 0.0, double _db = -getInf()): + freq(_freq), db(_db) + { + for (auto& h: harm) h = false; + } + void clear() { + freq = 0.0; + db = -getInf(); + } + }; + + Peak& match(std::vector& peaks, std::size_t pos) { + std::size_t best = pos; + if (peaks[pos - 1].db > peaks[best].db) best = pos - 1; + if (peaks[pos + 1].db > peaks[best].db) best = pos + 1; + return peaks[best]; + } +} + +bool Analyzer::calcFFT() { + float pcm[FFT_N]; + // Read FFT_N samples, move forward by m_step samples + if (!m_buf.read(pcm, pcm + FFT_N)) return false; + m_buf.pop(static_cast(m_step)); + // Peak level calculation of the most recent m_step samples (the rest is overlap) + for (float const* ptr = pcm + FFT_N - m_step; ptr != pcm + FFT_N; ++ptr) { + float s = *ptr; + float p = s * s; + if (p > m_peak) m_peak = p; else m_peak *= 0.999; + } + // Calculate FFT + m_fft = da::fft(pcm, m_window); + return true; +} + +void Analyzer::calcTones() { + // Precalculated constants + const double freqPerBin = m_rate / FFT_N; + const double phaseStep = 2.0 * M_PI * m_step / FFT_N; + const double normCoeff = 1.0 / FFT_N; + const double minMagnitude = pow(10, -100.0 / 20.0) / normCoeff; // -100 dB + // Limit frequency range of processing + const size_t kMin = std::max(size_t(1), size_t(FFT_MINFREQ / freqPerBin)); + const size_t kMax = std::min(FFT_N / 2, size_t(FFT_MAXFREQ / freqPerBin)); + std::vector peaks(kMax + 1); // One extra to simplify loops + for (size_t k = 1; k <= kMax; ++k) { + double magnitude = std::abs(m_fft[k]); + double phase = std::arg(m_fft[k]); + // process phase difference + double delta = phase - m_fftLastPhase[k]; + m_fftLastPhase[k] = static_cast(phase); + delta -= k * phaseStep; // subtract expected phase difference + delta = remainder(delta, 2.0 * M_PI); // map delta phase into +/- M_PI interval + delta /= phaseStep; // calculate diff from bin center frequency + double freq = (k + delta) * freqPerBin; // calculate the true frequency + if (freq > 1.0 && magnitude > minMagnitude) { + peaks[k].freq = freq; + peaks[k].db = 20.0 * log10(normCoeff * magnitude); + } + } + // Prefilter peaks + double prevdb = peaks[0].db; + for (size_t k = 1; k < kMax; ++k) { + double db = peaks[k].db; + if (db > prevdb) peaks[k - 1].clear(); + if (db < prevdb) peaks[k].clear(); + prevdb = db; + } + // Find the tones (collections of harmonics) from the array of peaks + tones_t tones; + for (size_t k = kMax - 1; k >= kMin; --k) { + if (peaks[k].db < -70.0) continue; + // Find the best divider for getting the fundamental from peaks[k] + std::size_t bestDiv = 1; + int bestScore = 0; + for (std::size_t div = 2; div <= Tone::MAXHARM && k / div > 1; ++div) { + double freq = peaks[k].freq / div; // Fundamental + int score = 0; + for (std::size_t n = 1; n < div && n < 8; ++n) { + Peak& p = match(peaks, k * n / div); + --score; + if (p.db < -90.0 || std::abs(p.freq / n / freq - 1.0) > .03) continue; + if (n == 1) score += 4; // Extra for fundamental + score += 2; + } + if (score > bestScore) { + bestScore = score; + bestDiv = div; + } + } + // Construct a Tone by combining the fundamental frequency (freq) and all harmonics + Tone t; + std::size_t count = 0; + double freq = peaks[k].freq / bestDiv; + t.db = peaks[k].db; + for (std::size_t n = 1; n <= bestDiv; ++n) { + // Find the peak for n'th harmonic + Peak& p = match(peaks, k * n / bestDiv); + if (std::abs(p.freq / n / freq - 1.0) > .03) continue; // Does it match the fundamental freq? + if (p.db > t.db - 10.0) { + t.db = std::max(t.db, p.db); + ++count; + t.freq += p.freq / n; + } + t.harmonics[n - 1] = p.db; + p.clear(); + } + t.freq /= count; + // If the tone seems strong enough, add it (-3 dB compensation for each harmonic) + if (t.db > -50.0 - 3.0 * count) { + t.stabledb = t.db; + tones.push_back(t); + } + } + mergeWithOld(tones); + m_tones.swap(tones); +} + +void Analyzer::mergeWithOld(tones_t& tones) const { + tones.sort(); + auto it = tones.begin(); + // Iterate over old tones + for (auto const& old: m_tones) { + // Try to find a matching new tone + while (it != tones.end() && *it < old) ++it; + // If match found + if (it != tones.end() && *it == old) { + // Merge the old tone into the new tone + it->age = old.age + 1; + it->stabledb = 0.8 * old.stabledb + 0.2 * it->db; + it->freq = 0.5 * old.freq + 0.5 * it->freq; + } else if (old.db > -80.0) { + // Insert a decayed version of the old tone into new tones + Tone& t = *tones.insert(it, old); + t.db -= 5.0; + t.stabledb -= 0.1; + } + } +} + +void Analyzer::process() { + // Try calculating FFT and calculate tones until no more data in input buffer + while (calcFFT()) calcTones(); +} + + diff --git a/PitchTracker/pitch.hh b/PitchTracker/pitch.hh new file mode 100644 index 00000000..bb543be6 --- /dev/null +++ b/PitchTracker/pitch.hh @@ -0,0 +1,132 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "compatibility.h" + +/// struct to represent tones +struct Tone { + static const std::size_t MAXHARM = 48; ///< The maximum number of harmonics tracked + static const std::size_t MINAGE = 2; ///< The minimum age required for a tone to be output + double freq; ///< Frequency (Hz) + double db; ///< Level (dB) + double stabledb; ///< Stable level, useful for graphics rendering + double harmonics[MAXHARM]; ///< Harmonics' levels + std::size_t age; ///< How many times the tone has been detected in row + Tone(); + void print() const; ///< Prints Tone to std::cout + bool operator==(double f) const; ///< Compare for rough frequency match + /// Less-than compare by levels (instead of frequencies like operator< does) + static bool dbCompare(Tone const& l, Tone const& r) { return l.db < r.db; } +}; + +static inline bool operator==(Tone const& lhs, Tone const& rhs) { return lhs == rhs.freq; } +static inline bool operator!=(Tone const& lhs, Tone const& rhs) { return !(lhs == rhs); } +static inline bool operator<=(Tone const& lhs, Tone const& rhs) { return lhs.freq < rhs.freq || lhs == rhs; } +static inline bool operator>=(Tone const& lhs, Tone const& rhs) { return lhs.freq > rhs.freq || lhs == rhs; } +static inline bool operator<(Tone const& lhs, Tone const& rhs) { return lhs.freq < rhs.freq && lhs != rhs; } +static inline bool operator>(Tone const& lhs, Tone const& rhs) { return lhs.freq > rhs.freq && lhs != rhs; } + +static const unsigned FFT_P = 10; +static const std::size_t FFT_N = 1 << FFT_P; + +/// Lock-free ring buffer. Discards oldest data on overflow (not strictly thread-safe). +template class RingBuffer { +public: + constexpr static size_t capacity = SIZE; + RingBuffer(): m_read(), m_write() {} ///< Initialize empty buffer + template void insert(InIt begin, InIt end) { + unsigned r = static_cast(m_read); // The read position + unsigned w = static_cast(m_write); // The write position + bool overflow = false; + while (begin != end) { + m_buf[w] = *begin++; // Copy sample + w = modulo(w + 1); // Update cursor + if (w == r) overflow = true; + } + m_write = w; + if (overflow) m_read = modulo(w + 1); // Reset read pointer on overflow + } + /// Read data from current position if there is enough data to fill the range (otherwise return false). Does not move read pointer. + template bool read(OutIt begin, OutIt end) { + unsigned r = static_cast(m_read); + if (modulo(static_cast(m_write) - r) <= end - begin) return false; // Not enough audio available + while (begin != end) *begin++ = m_buf[r++ % SIZE]; // Copy audio to output iterator + return true; + } + void pop(unsigned n) { m_read = modulo(static_cast(m_read + n)); } ///< Move reading pointer forward. + unsigned size() const { return modulo(static_cast(m_write - m_read)); } +private: + static unsigned modulo(unsigned idx) { return (SIZE + idx) % SIZE; } ///< Modulo operation with proper rounding (handles slightly "negative" idx as well) + float m_buf[SIZE]; + volatile size_t m_read, m_write; ///< The indices of the next read/write operations. read == write implies that buffer is empty. +}; + +/// analyzer class + /** class to analyze input audio and transform it into useable data + */ +class Analyzer { +public: + /// fast fourier transform vector + typedef std::vector > fft_t; + /// list of tones + typedef std::list tones_t; + /// constructor + Analyzer(double rate, std::string id, std::size_t step = 200); + /** Add input data to buffer. This is thread-safe (against other functions). **/ + template void input(InIt begin, InIt end) { + m_buf.insert(begin, end); + m_passthrough.insert(begin, end); + } + /** Call this to process all data input so far. **/ + void process(); + /** Get the raw FFT. **/ + fft_t const& getFFT() const { return m_fft; } + /** Get the peak level in dB (negative value, 0.0 = clipping). **/ + double getPeak() const { return 10.0 * log10(m_peak); } + /** Get a list of all tones detected. **/ + tones_t const& getTones() const { return m_tones; } + /** Find a tone within the singing range; prefers strong tones around 200-400 Hz. **/ + Tone const* findTone(double minfreq = 65.0, double maxfreq = 1000.0) const { + if (m_tones.empty()) { m_oldfreq = 0.0; return NULL; } + double db = std::max_element(m_tones.begin(), m_tones.end(), Tone::dbCompare)->db; + Tone const* best = NULL; + double bestscore = 0; + for (tones_t::const_iterator it = m_tones.begin(); it != m_tones.end(); ++it) { + if (it->db < db - 20.0 || it->freq < minfreq || it->age < Tone::MINAGE) continue; + if (it->freq > maxfreq) break; + double score = it->db - std::max(180.0, std::abs(it->freq - 300.0)) / 10.0; + if (m_oldfreq != 0.0 && std::fabs(it->freq/m_oldfreq - 1.0) < 0.05) score += 10.0; + if (best && bestscore > score) break; + best = &*it; + bestscore = score; + } + m_oldfreq = (best ? best->freq : 0.0); + return best; + } + /** Give data away for mic pass-through */ + void output(float* begin, float* end, double rate); + /** Returns the id (color name) of the mic */ + std::string const& getId() const { return m_id; } + +private: + const std::size_t m_step; + RingBuffer<2 * FFT_N> m_buf; // Twice the FFT size should give enough room for sliding window and for engine delays + RingBuffer<4096> m_passthrough; + double m_resampleFactor; + double m_resamplePos; + double m_rate; + std::string m_id; + std::vector m_window; + fft_t m_fft; + std::vector m_fftLastPhase; + double m_peak; + tones_t m_tones; + mutable double m_oldfreq; + bool calcFFT(); + void calcTones(); + void mergeWithOld(tones_t& tones) const; +}; diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pitchTracker.cpp index 31e82059..4d472ee2 100644 --- a/PitchTracker/pitchTracker.cpp +++ b/PitchTracker/pitchTracker.cpp @@ -19,97 +19,102 @@ #include #include -void doLog(const char* msg,...){ - va_list argptr = NULL; - va_start(argptr, msg); +namespace PitchTracker{ - char buffer[200]; - vsprintf_s(buffer,msg, argptr); - if(Log) Log(buffer); - va_end(argptr); -} + static void doLog(const char* msg,...){ + va_list argptr = NULL; + va_start(argptr, msg); -void SetLogCallback(LogCallback Callback){ - Log=Callback; -} - -double *SamplesPerPeriodPerTone = NULL; -int MinHalfTone = 0, MaxHalfTone = 38; -const double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) - -void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ - MinHalfTone = minHalfTone; - MaxHalfTone = maxHalfTone; - DeInit(); - if(maxHalfTone <= 0) - return; - SamplesPerPeriodPerTone = (double*) malloc((MaxHalfTone + 1) * sizeof(double)); - //Init Array to avoid costly calculations - for (int toneIndex = 0; toneIndex <= MaxHalfTone; toneIndex++) - { - double freq = baseToneFrequency * pow(HalftoneBase, toneIndex); - SamplesPerPeriodPerTone[toneIndex] = 44100.0 / freq; // samples in one period - } -} - -void DeInit(){ - if(SamplesPerPeriodPerTone){ - free(SamplesPerPeriodPerTone); - SamplesPerPeriodPerTone=NULL; - } -} - -static double _AnalyzeToneFunc(double *samples, int sampleCt, int toneIndex){ - double samplesPerPeriodD = SamplesPerPeriodPerTone[toneIndex]; // samples in one period - int samplesPerPeriod = (int)samplesPerPeriodD; - double fHigh = samplesPerPeriodD - samplesPerPeriod; - double fLow = 1.0 - fHigh; - - double accumDist = 0; // accumulated distances - - // compare correlating samples - int sampleIndex = 0; // index of sample to analyze - // Start value= index of sample one period ahead - for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < sampleCt; correlatingSampleIndex++, sampleIndex++) - { - // calc distance to corresponding sample in next period (lower means more distant) - double dist = samples[sampleIndex] * (samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh); - accumDist += dist; + char buffer[200]; + vsprintf_s(buffer,msg, argptr); + if(Log) Log(buffer); + va_end(argptr); } - //Using _AnalysisBufLen here makes it return correct values among all analyzed frequencies - double scaleValue = 32767.0 * 32767.0 * sampleCt; // Divide also by Int16.MaxValue^2 - return accumDist / scaleValue; -} - -int GetTone(double *samples, int sampleCt, float *weights){ - double maxVolume = 0; - for(int i = 0; i < sampleCt; i++){ - double vol = abs(samples[i]); - if(vol > maxVolume) - maxVolume = vol; + void SetLogCallback(LogCallback Callback){ + Log=Callback; } - double maxWeight = -1; - double minWeight = 1; - int maxTone = -1; - for (int toneIndex = MinHalfTone; toneIndex <= MaxHalfTone; toneIndex++) - { - double curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolume * 32767.0; - if (curWeight > maxWeight) + double *SamplesPerPeriodPerTone = NULL; + int MinHalfTone = 0, MaxHalfTone = 38; + const double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) + + void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ + MinHalfTone = minHalfTone; + MaxHalfTone = maxHalfTone; + DeInit(); + if(maxHalfTone <= 0) + return; + SamplesPerPeriodPerTone = (double*) malloc((MaxHalfTone + 1) * sizeof(double)); + //Init Array to avoid costly calculations + for (int toneIndex = 0; toneIndex <= MaxHalfTone; toneIndex++) { - maxWeight = curWeight; - maxTone = toneIndex; + double freq = baseToneFrequency * pow(HalftoneBase, toneIndex); + SamplesPerPeriodPerTone[toneIndex] = 44100.0 / freq; // samples in one period + } + } + + void DeInit(){ + if(SamplesPerPeriodPerTone){ + free(SamplesPerPeriodPerTone); + SamplesPerPeriodPerTone=NULL; + } + } + + static double _AnalyzeToneFunc(double *samples, int sampleCt, int toneIndex){ + double samplesPerPeriodD = SamplesPerPeriodPerTone[toneIndex]; // samples in one period + int samplesPerPeriod = (int)samplesPerPeriodD; + double fHigh = samplesPerPeriodD - samplesPerPeriod; + double fLow = 1.0 - fHigh; + + double accumDist = 0; // accumulated distances + + // compare correlating samples + int sampleIndex = 0; // index of sample to analyze + // Start value= index of sample one period ahead + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < sampleCt; correlatingSampleIndex++, sampleIndex++) + { + // calc distance to corresponding sample in next period (lower means more distant) + double dist = samples[sampleIndex] * (samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh); + accumDist += dist; } - if (curWeight < minWeight) - minWeight = curWeight; - - weights[toneIndex - MinHalfTone] = (float) curWeight; + //Using _AnalysisBufLen here makes it return correct values among all analyzed frequencies + double scaleValue = sampleCt; // Divide also by Int16.MaxValue^2 + return accumDist / scaleValue; } - if(maxWeight - minWeight > 0.01){ - return maxTone; - }else return -1; -} + int GetTone(double *samples, int sampleCt, float *weights, bool scale){ + double maxVolume = 0; + for(int i = 0; i < sampleCt; i++){ + double vol = abs(samples[i]); + if(vol > maxVolume) + maxVolume = vol; + } + double maxWeight = -1; + double minWeight = 1; + int maxTone = -1; + for (int toneIndex = MinHalfTone; toneIndex <= MaxHalfTone; toneIndex++) + { + double curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolume; + if(scale) + curWeight /= 32768.0; //maximum abs value of a short, would actually need to scale by MaxValue^2 but we already scaled by maxVolume + if (curWeight > maxWeight) + { + maxWeight = curWeight; + maxTone = toneIndex; + } + + if (curWeight < minWeight) + minWeight = curWeight; + + weights[toneIndex - MinHalfTone] = (float) curWeight; + } + + if(maxWeight - minWeight > 0.01){ + return maxTone; + }else return -1; + } + +} \ No newline at end of file diff --git a/PitchTracker/pitchTracker.h b/PitchTracker/pitchTracker.h index 99b477b0..961c436c 100644 --- a/PitchTracker/pitchTracker.h +++ b/PitchTracker/pitchTracker.h @@ -1,17 +1,11 @@ #pragma once -#ifndef dywapitchtrack__H -#define dywapitchtrack__H - -#define DllExport extern "C" __declspec(dllexport) - -DllExport void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); -DllExport void DeInit(); -DllExport int GetTone(double *samples, int sampleCt, float *weights); - -typedef void (__stdcall * LogCallback)(const char* text); -static LogCallback Log; -DllExport void SetLogCallback(LogCallback Callback); - -#endif +namespace PitchTracker{ + void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); + void DeInit(); + int GetTone(double *samples, int sampleCt, float *weights, bool scale = false); + typedef void (__stdcall * LogCallback)(const char* text); + static LogCallback Log; + void SetLogCallback(LogCallback Callback); +} diff --git a/PitchTracker/util.hh b/PitchTracker/util.hh new file mode 100644 index 00000000..f07753d4 --- /dev/null +++ b/PitchTracker/util.hh @@ -0,0 +1,45 @@ +#pragma once + +#include +#include +#include +#include + +/** Limit val to range [min, max] **/ +template T clamp(T val, T min = 0, T max = 1) { + if (min > max) throw std::logic_error("min > max"); + if (val < min) return min; + if (val > max) return max; + return val; +} + +template struct MinMax { + Numeric min, max; + explicit MinMax(Numeric min = std::numeric_limits::min(), Numeric max = std::numeric_limits::max()): min(min), max(max) {} + bool matches(Numeric val) const { return val >= min && val <= max; } +}; + +/** A convenient way for getting NaNs **/ +static inline double getNaN() { return std::numeric_limits::quiet_NaN(); } + +/** A convenient way for getting infs **/ +static inline double getInf() { return std::numeric_limits::infinity(); } + +static inline bool isPow2(unsigned int val) { + if (val == 0) return false; + if ((val & (val-1)) == 0) return true; // From Wikipedia: Power_of_two + return false; +} + +static inline unsigned int nextPow2(unsigned int val) { + unsigned int ret = 1; + while (ret < val) ret *= 2; + return ret; +} + +static inline unsigned int prevPow2(unsigned int val) { + unsigned int ret = 1; + while ((ret*2) < val) ret *= 2; + return ret; +} + diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 9c668741..46c3c59a 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -23,8 +23,7 @@ using System; using System.IO; using System.Diagnostics; #if USE_NATIVE_DETECTION -using System.Runtime.InteropServices; - +using Native.PitchTracking; #endif #if TEST_PITCH using System.Windows.Forms; @@ -34,26 +33,6 @@ using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Record { -#if USE_NATIVE_DETECTION - static class CPitchTracker - { - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern void DeInit(); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int GetTone(double[] samples, int sampleCt, float[] weights); - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - public delegate void LogCallback(string message); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern void SetLogCallback(LogCallback c); - } -#endif - class CBuffer : IDisposable { private static int _InitCount; @@ -67,7 +46,7 @@ namespace Vocaluxe.Lib.Sound.Record private const int _AnalysisBufLen = 4096; private const int _AnalysisByteBufLen = _AnalysisBufLen * 2; - private readonly double[] _AnalysisBuffer = new double[_AnalysisBufLen]; + private readonly short[] _AnalysisBuffer = new short[_AnalysisBufLen]; private readonly byte[] _AnalysisByteBuffer = new byte[_AnalysisByteBufLen]; //tmp buffer (stream->tmpBuffer->(Int16)AnalysisBuffer) private readonly float[] _TmpWeights = new float[NumHalfTones]; //tmp buffer for weights (gets copied to ToneWeight when checked) @@ -211,8 +190,7 @@ namespace Vocaluxe.Lib.Sound.Record _NewSamples = false; } - for (int i = 0; i < _AnalysisBufLen; i++) - _AnalysisBuffer[i] = BitConverter.ToInt16(_AnalysisByteBuffer, i * 2); + Buffer.BlockCopy(_AnalysisByteBuffer, 0, _AnalysisBuffer, 0, _AnalysisByteBufLen); try { @@ -229,22 +207,22 @@ namespace Vocaluxe.Lib.Sound.Record private void _FindMaxVolume() { - double maxVolume = 0; + int maxVolume = 0; for (int i = 0; i < _AnalysisBufLen / 4; i++) { - double volume = _AnalysisBuffer[i]; + int volume = _AnalysisBuffer[i]; if (volume < 0) volume = -volume; if (volume > maxVolume) maxVolume = volume; } - _MaxVolume = maxVolume / Int16.MaxValue; + _MaxVolume = (double)maxVolume / Int16.MaxValue; } private void _AnalyzeTones() { #if USE_NATIVE_DETECTION - int maxTone = CPitchTracker.GetTone(_AnalysisBuffer, _AnalysisBufLen, _TmpWeights); + int maxTone = CPitchTracker.GetTone(_AnalysisBuffer, _TmpWeights); if (maxTone >= 0) #else // prepare to analyze @@ -305,7 +283,6 @@ namespace Vocaluxe.Lib.Sound.Record // calc distance to corresponding sample in next period (lower means more distant) double dist = _AnalysisBuffer[sampleIndex] * (_AnalysisBuffer[correlatingSampleIndex] * fLow + _AnalysisBuffer[correlatingSampleIndex + 1] * fHigh); - //double dist = _AnalysisBuffer[sampleIndex] * _AnalysisBuffer[correlatingSampleIndex]; accumDist += dist; } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index fcf7e6f6..fd3f9ab0 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -199,6 +199,10 @@ ..\Output\OpenTK.GLControl.dll + + ..\Output\x64\PitchTracker.dll + False + False ..\Output\PortAudioSharp.dll From e54892391fbc6b7c496031b3a6f5d8fc3af9110f Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 25 Mar 2014 18:41:25 +0100 Subject: [PATCH 065/116] Fix Testcase Add commented implementation of new detector (need to decide) --- PitchTracker/PitchWrapper.cpp | 9 +++++++ PitchTracker/PitchWrapper.h | 1 + Vocaluxe/Lib/Sound/Record/CBuffer.cs | 37 +++++++++++++++++++++------- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 6c18714e..5677550e 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -27,6 +27,15 @@ namespace Native{ freeFloatArray(dataFloat); } + void CAnalyzer::Input(array^ data){ + if(data->Length == 0) + return; + pin_ptr dataPtr = &data[0]; + float* dataFloat = short2FloatArray(static_cast(static_cast(dataPtr)), data->Length); + m_analyzer->input(dataFloat, dataFloat + data->Length); + freeFloatArray(dataFloat); + } + void CAnalyzer::Process(){ m_analyzer->process(); } diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 617c24f3..603ec470 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -38,6 +38,7 @@ namespace Native{ void Input(array^ data); void Input(array^ data); + void Input(array^ data); void Process(); double GetPeak(); array^ GetTones(); diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 46c3c59a..ef905ced 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -24,6 +24,7 @@ using System.IO; using System.Diagnostics; #if USE_NATIVE_DETECTION using Native.PitchTracking; + #endif #if TEST_PITCH using System.Windows.Forms; @@ -72,6 +73,8 @@ namespace Vocaluxe.Lib.Sound.Record private DAnalyzeTone _AnalyzeToneFunc; private double _MinWeightDiff; // ReSharper restore FieldCanBeMadeReadOnly.Local +#else + private readonly CAnalyzer _Analyzer = new CAnalyzer(44100.0, ""); #endif private double _MaxVolume; private bool _NewSamples; @@ -173,6 +176,7 @@ namespace Vocaluxe.Lib.Sound.Record _Add(buffer); _NewSamples = true; } + //_Analyzer.Input(buffer); } public void AnalyzeBuffer() @@ -180,6 +184,19 @@ namespace Vocaluxe.Lib.Sound.Record if (!_NewSamples) return; + /*_NewSamples = false; + _Analyzer.Process(); + _MaxVolume = _Analyzer.GetPeak() / 43 + 1; + CTone tone = _Analyzer.FindTone(); + if (tone != null) + { + ToneAbs = tone.Note; + Tone = ToneAbs % 12; + ToneValid = true; + } + else + ToneValid = false;*/ + lock (_Stream) { if (_Stream.Length >= _AnalysisByteBufLen) @@ -360,11 +377,12 @@ namespace Vocaluxe.Lib.Sound.Record Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); byte[] data; int ok = 0; + double angle = 0; for (int distort = 0; distort < 10; distort++) { for (int tone = toneFrom; tone <= toneTo; tone++) { - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, out data); + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, ref angle, out data); _Distort(data, tone, distort); ProcessNewBuffer(data); @@ -377,7 +395,7 @@ namespace Vocaluxe.Lib.Sound.Record ok++; } } - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, out data); + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); ProcessNewBuffer(data); AnalyzeBuffer(); Stopwatch sw = new Stopwatch(); @@ -385,10 +403,8 @@ namespace Vocaluxe.Lib.Sound.Record const int repeats = 2000; for (int i = 0; i < repeats; i++) { - //ProcessNewBuffer(data); - //AnalyzeBuffer(); - _FindMaxVolume(); - _AnalyzeTones(); + ProcessNewBuffer(data); + AnalyzeBuffer(); } sw.Stop(); string msg = "Analyser: Errors: " + ((toneTo - toneFrom + 1) * 10 - ok) + "; Speed: " + @@ -435,7 +451,8 @@ namespace Vocaluxe.Lib.Sound.Record break; } byte[] data2; - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone + newTone), 44100, out data2); + double angle = 0; + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone + newTone), 44100, ref angle, out data2); Buffer.BlockCopy(data2, 0, sdata, 0, len * 2); } else @@ -469,13 +486,15 @@ namespace Vocaluxe.Lib.Sound.Record Buffer.BlockCopy(sdata, 0, data, 0, data.Length); } - private static void _GetSineWave(double freq, int sampleRate, out byte[] data) + private static void _GetSineWave(double freq, int sampleRate, ref double angle, out byte[] data) { const short max = short.MaxValue; const int len = _AnalysisBufLen; //sampleRate * durationMs / 1000; short[] data16Bit = new short[len]; for (int i = 0; i < len; i++) - data16Bit[i] = (short)(Math.Sin(2 * Math.PI * i / sampleRate * freq) * max); + data16Bit[i] = (short)(Math.Sin(2 * Math.PI * i / sampleRate * freq + angle) * max); + angle = 2 * Math.PI * len / sampleRate * freq + angle; + angle = angle % (2 * Math.PI); data = new byte[data16Bit.Length * 2]; Buffer.BlockCopy(data16Bit, 0, data, 0, data.Length); } From ae9f8bb30a6df37bba0694d61643b6c7756c84ee Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 26 Mar 2014 19:52:35 +0100 Subject: [PATCH 066/116] Remove C++/Cli version and replace with P/Invoke wrapper to support all platforms --- PitchTracker/Helper.h | 23 ++--- PitchTracker/PitchTracker.vcxproj | 15 +--- PitchTracker/PitchWrapper.cpp | 85 ++++++++++++++++-- PitchTracker/PitchWrapper.h | 117 +++++++++++++------------ PitchTracker/pitch.cc | 8 +- PitchTracker/pitch.hh | 2 +- Vocaluxe/Lib/Sound/Record/CAnalyzer.cs | 117 +++++++++++++++++++++++++ Vocaluxe/Lib/Sound/Record/CBuffer.cs | 11 +-- Vocaluxe/Vocaluxe.csproj | 5 +- 9 files changed, 283 insertions(+), 100 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Record/CAnalyzer.cs diff --git a/PitchTracker/Helper.h b/PitchTracker/Helper.h index f0416375..f9700a6f 100644 --- a/PitchTracker/Helper.h +++ b/PitchTracker/Helper.h @@ -1,9 +1,6 @@ #pragma once #include "pitch.hh" #include "PitchWrapper.h" - -#pragma managed(push, off) - #include #include @@ -43,19 +40,23 @@ void freeDoubleArray(double* floats){ free(floats); } -#pragma managed(pop) +double ToneToNote(const Tone* tone){ + return 12.0 * std::log(tone->freq / 127.09) / std::log(2.0) + 27.5 - 16; // 16 = C2 +} +/* namespace Native{ namespace PitchTracking{ - CTone^ ConvertToneToManaged(Tone tone){ + CTone^ ConvertToneToManaged(Tone* tone){ CTone^ result = gcnew CTone(); - result->Freq = tone.freq; - result->DB = tone.db; - result->Stabledb = tone.stabledb; - result->Age = static_cast(tone.age); - result->NoteExact = 12.0 * std::log(tone.freq / 127.09) / std::log(2.0) + 27.5 - 16; // 16 = C2 + result->Freq = tone->freq; + result->DB = tone->db; + result->Stabledb = tone->stabledb; + result->Age = static_cast(tone->age); + result->NoteExact = 12.0 * std::log(tone->freq / 127.09) / std::log(2.0) + 27.5 - 16; // 16 = C2 result->Note = static_cast(std::round(result->NoteExact)); return result; } } -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj index e17ebdcd..80dcbccb 100644 --- a/PitchTracker/PitchTracker.vcxproj +++ b/PitchTracker/PitchTracker.vcxproj @@ -170,20 +170,7 @@ - - true - true - true - true - false - false - false - false - false - false - Default - Default - + diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 5677550e..44ffeff1 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -1,10 +1,82 @@ #include "PitchWrapper.h" -#pragma managed(push, off) #include "pitchTracker.h" -#pragma managed(pop) - #include "Helper.h" +void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ + PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone); +} + +void PtFast_DeInit(){ + PitchTracker::DeInit(); +} + +int PtFast_GetTone(short* samples, int sampleCt, float* weights){ + if(sampleCt <= 0) + return -1; + double* dataDouble = short2DoubleArray(samples, sampleCt, false); + int result = PitchTracker::GetTone(dataDouble, sampleCt, weights, true); + freeDoubleArray(dataDouble); + return result; +} + +Analyzer* Analyzer_Create(double rate, unsigned step){ + return new Analyzer(rate, "", step); +} + +void Analyzer_Free(Analyzer* analyzer){ + if(analyzer) + delete analyzer; +} + +void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt){ + if(sampleCt == 0 || !analyzer) + return; + analyzer->input(data, data + sampleCt); +} + +void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt){ + if(sampleCt == 0 || !analyzer) + return; + float* dataFloat = short2FloatArray(data, sampleCt); + analyzer->input(dataFloat, dataFloat + sampleCt); + freeFloatArray(dataFloat); +} + +void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt){ + if(sampleCt == 0 || !analyzer) + return; + float* dataFloat = short2FloatArray(static_cast(static_cast(data)), sampleCt); + analyzer->input(dataFloat, dataFloat + sampleCt); + freeFloatArray(dataFloat); +} + +void Analyzer_Process(Analyzer* analyzer){ + if(!analyzer) + return; + analyzer->process(); +} + +double Analyzer_GetPeak(Analyzer* analyzer){ + if(!analyzer) + return -999; + return analyzer->getPeak(); +} + +double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq){ + if(!analyzer) + return -1; + const Tone* tone = analyzer->findTone(minFreq, maxFreq); + return (tone == NULL) ? -1 : ToneToNote(tone); +} + +bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate){ + if(!analyzer) + return false; + return analyzer->output(data, data + sampleCt, rate); +} + + +/* namespace Native{ namespace PitchTracking{ @@ -31,7 +103,7 @@ namespace Native{ if(data->Length == 0) return; pin_ptr dataPtr = &data[0]; - float* dataFloat = short2FloatArray(static_cast(static_cast(dataPtr)), data->Length); + float* dataFloat = short2FloatArray(static_cast(static_cast(dataPtr)), data->Length / 2); m_analyzer->input(dataFloat, dataFloat + data->Length); freeFloatArray(dataFloat); } @@ -64,7 +136,7 @@ namespace Native{ CTone^ CAnalyzer::FindTone(double minFreq, double maxFreq){ const Tone* tone = m_analyzer->findTone(minFreq, maxFreq); - return (tone == NULL) ? nullptr : ConvertToneToManaged(*tone); + return (tone == NULL) ? nullptr : ConvertToneToManaged(tone); } void CAnalyzer::Output(array^ data, float rate){ @@ -98,4 +170,5 @@ namespace Native{ return result; } } -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 603ec470..2b9783d5 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -1,63 +1,72 @@ #pragma once -#pragma managed(push, off) #include "pitch.hh" -#pragma managed(pop) -using namespace System; -using namespace System::Collections::Generic; +#define DllExport extern "C" __declspec(dllexport) -namespace Native{ - namespace PitchTracking{ - public ref class CTone { - public: - static const int MAXHARM = 48; ///< The maximum number of harmonics tracked - static const int MINAGE = 2; ///< The minimum age required for a tone to be output - double Freq; ///< Frequency (Hz) - double DB; ///< Level (dB) - double Stabledb; ///< Stable level, useful for graphics rendering - int Age; ///< How many times the tone has been detected in row - double NoteExact; - int Note; - /// Less-than compare by levels (instead of frequencies like operator< does) - static bool dbCompare(CTone l, CTone r) { return l.DB < r.DB; } - }; +DllExport void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); +DllExport void PtFast_DeInit(); +DllExport int PtFast_GetTone(short* samples, int sampleCt, float* weights); - public ref class CAnalyzer { - public: - CAnalyzer(double rate, String^ id) { - m_analyzer = new Analyzer(rate,""); - m_id = id; - } - CAnalyzer(double rate, String^ id, unsigned step) { - m_analyzer = new Analyzer(rate,"",step); - m_id = id; - } - ~CAnalyzer() { this->!CAnalyzer(); } - !CAnalyzer() { delete m_analyzer; } +DllExport Analyzer* Analyzer_Create(double rate, unsigned step); +DllExport void Analyzer_Free(Analyzer* analyzer); +DllExport void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt); +DllExport void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt); +DllExport void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt); +DllExport void Analyzer_Process(Analyzer* analyzer); +DllExport double Analyzer_GetPeak(Analyzer* analyzer); +DllExport double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq); +DllExport bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate); - void Input(array^ data); - void Input(array^ data); - void Input(array^ data); - void Process(); - double GetPeak(); - array^ GetTones(); - CTone^ FindTone(); - CTone^ FindTone(double minFreq); - CTone^ FindTone(double minFreq, double maxFreq); - void Output(array^ data, float rate); - String^ GetId(); +/* +public ref class CTone { +public: + static const int MAXHARM = 48; ///< The maximum number of harmonics tracked + static const int MINAGE = 2; ///< The minimum age required for a tone to be output + double Freq; ///< Frequency (Hz) + double DB; ///< Level (dB) + double Stabledb; ///< Stable level, useful for graphics rendering + int Age; ///< How many times the tone has been detected in row + double NoteExact; + int Note; + /// Less-than compare by levels (instead of frequencies like operator< does) + static bool dbCompare(CTone l, CTone r) { return l.DB < r.DB; } +}; - private: - Analyzer* m_analyzer; - String^ m_id; - }; - - public ref class CPitchTracker abstract sealed{ - public: - static void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); - static void DeInit(); - static int GetTone(array^ samples, array^ weights); - }; +public ref class CAnalyzer { +public: + CAnalyzer(double rate, String^ id) { + m_analyzer = new Analyzer(rate,""); + m_id = id; } -} \ No newline at end of file + CAnalyzer(double rate, String^ id, unsigned step) { + m_analyzer = new Analyzer(rate,"",step); + m_id = id; + } + ~CAnalyzer() { this->!CAnalyzer(); } + !CAnalyzer() { delete m_analyzer; } + + void Input(array^ data); + void Input(array^ data); + void Input(array^ data); + void Process(); + double GetPeak(); + array^ GetTones(); + CTone^ FindTone(); + CTone^ FindTone(double minFreq); + CTone^ FindTone(double minFreq, double maxFreq); + void Output(array^ data, float rate); + String^ GetId(); + +private: + Analyzer* m_analyzer; + String^ m_id; +}; + +public ref class CPitchTracker abstract sealed{ +public: + static void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); + static void DeInit(); + static int GetTone(array^ samples, array^ weights); +}; +*/ \ No newline at end of file diff --git a/PitchTracker/pitch.cc b/PitchTracker/pitch.cc index d4b9d9a0..85169769 100644 --- a/PitchTracker/pitch.cc +++ b/PitchTracker/pitch.cc @@ -48,14 +48,15 @@ Analyzer::Analyzer(double rate, std::string id, std::size_t step): } } -void Analyzer::output(float* begin, float* end, double rate) { +bool Analyzer::output(float* begin, float* end, double rate) { constexpr unsigned a = 2; const unsigned size = m_passthrough.size(); const unsigned out = static_cast((end - begin) / 2 /* stereo */); - if (out == 0) return; + if (out == 0) return false; const unsigned in = static_cast(m_resampleFactor * (m_rate / rate) * out + 2 * a /* lanczos kernel */ + 5 /* safety margin for rounding errors */); float pcm[m_passthrough.capacity]; - m_passthrough.read(pcm, pcm + in + 4); + if(!m_passthrough.read(pcm, pcm + in + 4)) + return false; for (unsigned i = 0; i < out; ++i) { double s = 0.0; unsigned k = static_cast(m_resamplePos); @@ -77,6 +78,7 @@ void Analyzer::output(float* begin, float* end, double rate) { m_passthrough.pop(num); m_resampleFactor = 0.99 * m_resampleFactor + 0.01 * (size > 700 ? 1.02 : 0.98); } + return true; } diff --git a/PitchTracker/pitch.hh b/PitchTracker/pitch.hh index bb543be6..ec759d1f 100644 --- a/PitchTracker/pitch.hh +++ b/PitchTracker/pitch.hh @@ -108,7 +108,7 @@ public: return best; } /** Give data away for mic pass-through */ - void output(float* begin, float* end, double rate); + bool output(float* begin, float* end, double rate); /** Returns the id (color name) of the mic */ std::string const& getId() const { return m_id; } diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs new file mode 100644 index 00000000..14ec16e8 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs @@ -0,0 +1,117 @@ +using System; +using System.Runtime.InteropServices; + +namespace Vocaluxe.Lib.Sound.Record +{ + class CAnalyzer : IDisposable + { + #region Imports + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr Analyzer_Create(double rate, uint step); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void Analyzer_Free(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void Analyzer_InputFloat(IntPtr analyzer, float[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void Analyzer_InputShort(IntPtr analyzer, short[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void Analyzer_InputByte(IntPtr analyzer, byte[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void Analyzer_Process(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern double Analyzer_GetPeak(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern double Analyzer_FindNote(IntPtr analyzer, double minFreq, double maxFreq); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern bool Analyzer_OutputFloat(IntPtr analyzer, [Out] float[] data, int sampleCt, float rate); + #endregion + + private IntPtr _Instance; + + public CAnalyzer(double rate = 44100.0, uint step = 200) + { + _Instance = Analyzer_Create(rate, step); + } + + ~CAnalyzer() + { + _Dispose(false); + } + + public void Input(float[] data) + { + Analyzer_InputFloat(_Instance, data, data.Length); + } + + public void Input(short[] data) + { + Analyzer_InputShort(_Instance, data, data.Length); + } + + public void Input(byte[] data) + { + Analyzer_InputByte(_Instance, data, data.Length / 2); + } + + public void Process() + { + Analyzer_Process(_Instance); + } + + public double GetPeak() + { + return Analyzer_GetPeak(_Instance); + } + + public double FindNote(double minFreq = 35.0, double maxFreq = 1000.0) + { + return Analyzer_FindNote(_Instance, minFreq, maxFreq); + } + + public bool Output(float[] data, float rate) + { + return Analyzer_OutputFloat(_Instance, data, data.Length, rate); + } + + private void _Dispose(bool disposing) + { + if (_Instance == IntPtr.Zero) + throw new ObjectDisposedException(GetType().Name); + Analyzer_Free(_Instance); + _Instance = IntPtr.Zero; + } + + public void Dispose() + { + _Dispose(true); + GC.SuppressFinalize(this); + } + } + + static class CFastAnalyzer + { + #region Imports + [DllImport("PitchTracker.dll", EntryPoint = "PtFast_Init", CallingConvention = CallingConvention.Cdecl)] + public static extern void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); + + [DllImport("PitchTracker.dll", EntryPoint = "PtFast_DeInit", CallingConvention = CallingConvention.Cdecl)] + public static extern void DeInit(); + + [DllImport("PitchTracker.dll", EntryPoint = "PtFast_GetTone", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtFast_GetTone(short[] samples, int sampleCt, float[] weights); + #endregion + + public static int GetTone(short[] samples, float[] weights) + { + return PtFast_GetTone(samples, samples.Length, weights); + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index ef905ced..408ff5d8 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -22,10 +22,7 @@ using System; using System.IO; using System.Diagnostics; -#if USE_NATIVE_DETECTION -using Native.PitchTracking; -#endif #if TEST_PITCH using System.Windows.Forms; using VocaluxeLib; @@ -74,7 +71,7 @@ namespace Vocaluxe.Lib.Sound.Record private double _MinWeightDiff; // ReSharper restore FieldCanBeMadeReadOnly.Local #else - private readonly CAnalyzer _Analyzer = new CAnalyzer(44100.0, ""); + private readonly CAnalyzer _Analyzer = new CAnalyzer(); #endif private double _MaxVolume; private bool _NewSamples; @@ -115,7 +112,7 @@ namespace Vocaluxe.Lib.Sound.Record if (_InitCount > 1) return; //Do init only once #if USE_NATIVE_DETECTION - CPitchTracker.Init(_BaseToneFreq, _HalfToneMin, _HalfToneMax); + CFastAnalyzer.Init(_BaseToneFreq, _HalfToneMin, _HalfToneMax); #else //Init Array to avoid costly calculations for (int toneIndex = 0; toneIndex <= _HalfToneMax; toneIndex++) @@ -239,7 +236,7 @@ namespace Vocaluxe.Lib.Sound.Record private void _AnalyzeTones() { #if USE_NATIVE_DETECTION - int maxTone = CPitchTracker.GetTone(_AnalysisBuffer, _TmpWeights); + int maxTone = CFastAnalyzer.GetTone(_AnalysisBuffer, _TmpWeights); if (maxTone >= 0) #else // prepare to analyze @@ -350,7 +347,7 @@ namespace Vocaluxe.Lib.Sound.Record Debug.Assert(_InitCount > 0); _InitCount--; if (_InitCount == 0) - CPitchTracker.DeInit(); + CFastAnalyzer.DeInit(); #endif } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index fd3f9ab0..d0c8f9ba 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -199,10 +199,6 @@ ..\Output\OpenTK.GLControl.dll - - ..\Output\x64\PitchTracker.dll - False - False ..\Output\PortAudioSharp.dll @@ -227,6 +223,7 @@ + From b1bca37bf883017ce4b802e0bf271412f47b84f5 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 28 Mar 2014 12:40:04 +0100 Subject: [PATCH 067/116] Little speedup --- PitchTracker/pitch.cc | 10 +++++----- PitchTracker/pitch.hh | 29 ++++++++++++++--------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/PitchTracker/pitch.cc b/PitchTracker/pitch.cc index 85169769..076dbc70 100644 --- a/PitchTracker/pitch.cc +++ b/PitchTracker/pitch.cc @@ -30,7 +30,7 @@ bool Tone::operator==(double f) const { return std::abs(freq / f - 1.0) < 0.05; } -Analyzer::Analyzer(double rate, std::string id, std::size_t step): +Analyzer::Analyzer(double rate, std::string id, unsigned step): m_step(step), m_resampleFactor(1.0), m_resamplePos(), @@ -110,7 +110,7 @@ bool Analyzer::calcFFT() { float pcm[FFT_N]; // Read FFT_N samples, move forward by m_step samples if (!m_buf.read(pcm, pcm + FFT_N)) return false; - m_buf.pop(static_cast(m_step)); + m_buf.pop(m_step); // Peak level calculation of the most recent m_step samples (the rest is overlap) for (float const* ptr = pcm + FFT_N - m_step; ptr != pcm + FFT_N; ++ptr) { float s = *ptr; @@ -133,11 +133,11 @@ void Analyzer::calcTones() { const size_t kMax = std::min(FFT_N / 2, size_t(FFT_MAXFREQ / freqPerBin)); std::vector peaks(kMax + 1); // One extra to simplify loops for (size_t k = 1; k <= kMax; ++k) { - double magnitude = std::abs(m_fft[k]); - double phase = std::arg(m_fft[k]); + float magnitude = std::abs(m_fft[k]); + float phase = std::arg(m_fft[k]); // process phase difference double delta = phase - m_fftLastPhase[k]; - m_fftLastPhase[k] = static_cast(phase); + m_fftLastPhase[k] = phase; delta -= k * phaseStep; // subtract expected phase difference delta = remainder(delta, 2.0 * M_PI); // map delta phase into +/- M_PI interval delta /= phaseStep; // calculate diff from bin center frequency diff --git a/PitchTracker/pitch.hh b/PitchTracker/pitch.hh index ec759d1f..fc431733 100644 --- a/PitchTracker/pitch.hh +++ b/PitchTracker/pitch.hh @@ -34,35 +34,34 @@ static const unsigned FFT_P = 10; static const std::size_t FFT_N = 1 << FFT_P; /// Lock-free ring buffer. Discards oldest data on overflow (not strictly thread-safe). -template class RingBuffer { +template class RingBuffer { public: - constexpr static size_t capacity = SIZE; + constexpr static unsigned capacity = SIZE; RingBuffer(): m_read(), m_write() {} ///< Initialize empty buffer template void insert(InIt begin, InIt end) { - unsigned r = static_cast(m_read); // The read position - unsigned w = static_cast(m_write); // The write position - bool overflow = false; + unsigned r = m_read; // The read position + unsigned w = m_write; // The write position + bool overflow = (end - begin >= SIZE - size()); while (begin != end) { m_buf[w] = *begin++; // Copy sample w = modulo(w + 1); // Update cursor - if (w == r) overflow = true; } m_write = w; if (overflow) m_read = modulo(w + 1); // Reset read pointer on overflow } /// Read data from current position if there is enough data to fill the range (otherwise return false). Does not move read pointer. template bool read(OutIt begin, OutIt end) { - unsigned r = static_cast(m_read); - if (modulo(static_cast(m_write) - r) <= end - begin) return false; // Not enough audio available + unsigned r = m_read; + if (size() <= end - begin) return false; // Not enough audio available while (begin != end) *begin++ = m_buf[r++ % SIZE]; // Copy audio to output iterator return true; } - void pop(unsigned n) { m_read = modulo(static_cast(m_read + n)); } ///< Move reading pointer forward. - unsigned size() const { return modulo(static_cast(m_write - m_read)); } + void pop(unsigned n) { m_read = modulo(m_read + n); } ///< Move reading pointer forward. + unsigned size() const { return modulo(m_write - m_read); } private: - static unsigned modulo(unsigned idx) { return (SIZE + idx) % SIZE; } ///< Modulo operation with proper rounding (handles slightly "negative" idx as well) + static unsigned modulo(int idx) { return (SIZE + idx) % SIZE; } ///< Modulo operation with proper rounding (handles slightly "negative" idx as well) float m_buf[SIZE]; - volatile size_t m_read, m_write; ///< The indices of the next read/write operations. read == write implies that buffer is empty. + volatile unsigned m_read, m_write; ///< The indices of the next read/write operations. read == write implies that buffer is empty. }; /// analyzer class @@ -75,7 +74,7 @@ public: /// list of tones typedef std::list tones_t; /// constructor - Analyzer(double rate, std::string id, std::size_t step = 200); + Analyzer(double rate, std::string id, unsigned step = 200); /** Add input data to buffer. This is thread-safe (against other functions). **/ template void input(InIt begin, InIt end) { m_buf.insert(begin, end); @@ -113,8 +112,8 @@ public: std::string const& getId() const { return m_id; } private: - const std::size_t m_step; - RingBuffer<2 * FFT_N> m_buf; // Twice the FFT size should give enough room for sliding window and for engine delays + const unsigned m_step; + RingBuffer<4 * FFT_N> m_buf; // Twice the FFT size should give enough room for sliding window and for engine delays RingBuffer<4096> m_passthrough; double m_resampleFactor; double m_resamplePos; From c781f5427fcec64ccbd97c5f434116f590291c73 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 28 Mar 2014 16:56:24 +0100 Subject: [PATCH 068/116] Merge fast detector with analyzer and use it in CBuffer --- PitchTracker/Helper.h | 4 +- PitchTracker/PitchTracker.vcxproj | 2 +- PitchTracker/PitchWrapper.cpp | 42 +++- PitchTracker/PitchWrapper.h | 36 ++- PitchTracker/pitch.cc | 8 +- PitchTracker/pitch.hh | 22 +- PitchTracker/pitchTracker.cpp | 50 +++-- PitchTracker/pitchTracker.h | 2 +- Vocaluxe/Lib/Sound/Record/CAnalyzer.cs | 22 +- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 265 ++--------------------- Vocaluxe/Lib/Sound/Record/CRecordBase.cs | 2 +- 11 files changed, 141 insertions(+), 314 deletions(-) diff --git a/PitchTracker/Helper.h b/PitchTracker/Helper.h index f9700a6f..27c18e8b 100644 --- a/PitchTracker/Helper.h +++ b/PitchTracker/Helper.h @@ -9,7 +9,7 @@ float* short2FloatArray(short* in, size_t len){ float* result = static_cast(malloc(len * sizeof(float))); float* curOut = result; - for(int i=0; i(malloc(len * sizeof(double))); double* curOut = result; - for(int i=0; iWIN64;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) true Speed - true Fast + false Windows diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 44ffeff1..45a29b18 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -2,6 +2,22 @@ #include "pitchTracker.h" #include "Helper.h" +AnalyzerExt::AnalyzerExt(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step): Analyzer(44100., "", step){ + PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone); +} + +AnalyzerExt::~AnalyzerExt(){ + PitchTracker::DeInit(); +} + +int AnalyzerExt::GetNoteFast(float* weights){ + size_t size = m_fastAnalysisBuf.size(); + if(size > m_SampleCt) + m_fastAnalysisBuf.pop(size - m_SampleCt); + m_fastAnalysisBuf.read(m_AnalysisBuf, m_AnalysisBuf + m_SampleCt); + return PitchTracker::GetTone(m_AnalysisBuf, m_SampleCt, weights); +} + void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone); } @@ -19,22 +35,22 @@ int PtFast_GetTone(short* samples, int sampleCt, float* weights){ return result; } -Analyzer* Analyzer_Create(double rate, unsigned step){ - return new Analyzer(rate, "", step); +AnalyzerExt* Analyzer_Create(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step){ + return new AnalyzerExt(baseToneFrequency, minHalfTone, maxHalfTone, step); } -void Analyzer_Free(Analyzer* analyzer){ +void Analyzer_Free(AnalyzerExt* analyzer){ if(analyzer) delete analyzer; } -void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt){ +void Analyzer_InputFloat(AnalyzerExt* analyzer, float* data, int sampleCt){ if(sampleCt == 0 || !analyzer) return; analyzer->input(data, data + sampleCt); } -void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt){ +void Analyzer_InputShort(AnalyzerExt* analyzer, short* data, int sampleCt){ if(sampleCt == 0 || !analyzer) return; float* dataFloat = short2FloatArray(data, sampleCt); @@ -42,7 +58,7 @@ void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt){ freeFloatArray(dataFloat); } -void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt){ +void Analyzer_InputByte(AnalyzerExt* analyzer, char* data, int sampleCt){ if(sampleCt == 0 || !analyzer) return; float* dataFloat = short2FloatArray(static_cast(static_cast(data)), sampleCt); @@ -50,26 +66,32 @@ void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt){ freeFloatArray(dataFloat); } -void Analyzer_Process(Analyzer* analyzer){ +void Analyzer_Process(AnalyzerExt* analyzer){ if(!analyzer) return; analyzer->process(); } -double Analyzer_GetPeak(Analyzer* analyzer){ +double Analyzer_GetPeak(AnalyzerExt* analyzer){ if(!analyzer) return -999; return analyzer->getPeak(); } -double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq){ +double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq){ if(!analyzer) return -1; const Tone* tone = analyzer->findTone(minFreq, maxFreq); return (tone == NULL) ? -1 : ToneToNote(tone); } -bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate){ +int Analyzer_GetNoteFast(AnalyzerExt* analyzer, float* weights){ + if(!analyzer) + return -1; + return analyzer->GetNoteFast(weights); +} + +bool Analyzer_OutputFloat(AnalyzerExt* analyzer, float* data, int sampleCt, float rate){ if(!analyzer) return false; return analyzer->output(data, data + sampleCt, rate); diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 2b9783d5..09298158 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -4,19 +4,35 @@ #define DllExport extern "C" __declspec(dllexport) +class AnalyzerExt: public Analyzer{ +public: + AnalyzerExt(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step = 200); + ~AnalyzerExt(); + template void input(InIt begin, InIt end){ + m_fastAnalysisBuf.insert(begin, end); + Analyzer::input(begin, end); + } + int GetNoteFast(float* weights); +private: + constexpr static size_t m_SampleCt = 4096; + RingBuffer m_fastAnalysisBuf; // Buffer used for fast analysis instead of FFT + float m_AnalysisBuf[4096]; +}; + DllExport void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); DllExport void PtFast_DeInit(); DllExport int PtFast_GetTone(short* samples, int sampleCt, float* weights); -DllExport Analyzer* Analyzer_Create(double rate, unsigned step); -DllExport void Analyzer_Free(Analyzer* analyzer); -DllExport void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt); -DllExport void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt); -DllExport void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt); -DllExport void Analyzer_Process(Analyzer* analyzer); -DllExport double Analyzer_GetPeak(Analyzer* analyzer); -DllExport double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq); -DllExport bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate); +DllExport AnalyzerExt* Analyzer_Create(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step); +DllExport void Analyzer_Free(AnalyzerExt* analyzer); +DllExport void Analyzer_InputFloat(AnalyzerExt* analyzer, float* data, int sampleCt); +DllExport void Analyzer_InputShort(AnalyzerExt* analyzer, short* data, int sampleCt); +DllExport void Analyzer_InputByte(AnalyzerExt* analyzer, char* data, int sampleCt); +DllExport void Analyzer_Process(AnalyzerExt* analyzer); +DllExport double Analyzer_GetPeak(AnalyzerExt* analyzer); +DllExport int Analyzer_GetNoteFast(AnalyzerExt* analyzer, float* weights); +DllExport double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq); +DllExport bool Analyzer_OutputFloat(AnalyzerExt* analyzer, float* data, int sampleCt, float rate); /* public ref class CTone { @@ -59,7 +75,7 @@ public: String^ GetId(); private: - Analyzer* m_analyzer; + AnalyzerExt* m_analyzer; String^ m_id; }; diff --git a/PitchTracker/pitch.cc b/PitchTracker/pitch.cc index 076dbc70..85af7d5f 100644 --- a/PitchTracker/pitch.cc +++ b/PitchTracker/pitch.cc @@ -50,7 +50,7 @@ Analyzer::Analyzer(double rate, std::string id, unsigned step): bool Analyzer::output(float* begin, float* end, double rate) { constexpr unsigned a = 2; - const unsigned size = m_passthrough.size(); + const size_t size = m_passthrough.size(); const unsigned out = static_cast((end - begin) / 2 /* stereo */); if (out == 0) return false; const unsigned in = static_cast(m_resampleFactor * (m_rate / rate) * out + 2 * a /* lanczos kernel */ + 5 /* safety margin for rounding errors */); @@ -72,7 +72,7 @@ bool Analyzer::output(float* begin, float* end, double rate) { m_resamplePos -= num; if (size > 3000) { // Reset - m_passthrough.pop(m_passthrough.size() - 700); + m_passthrough.pop(size - 700); m_resampleFactor = 1.0; } else { m_passthrough.pop(num); @@ -133,8 +133,8 @@ void Analyzer::calcTones() { const size_t kMax = std::min(FFT_N / 2, size_t(FFT_MAXFREQ / freqPerBin)); std::vector peaks(kMax + 1); // One extra to simplify loops for (size_t k = 1; k <= kMax; ++k) { - float magnitude = std::abs(m_fft[k]); - float phase = std::arg(m_fft[k]); + double magnitude = std::abs(m_fft[k]); + double phase = std::arg(m_fft[k]); // process phase difference double delta = phase - m_fftLastPhase[k]; m_fftLastPhase[k] = phase; diff --git a/PitchTracker/pitch.hh b/PitchTracker/pitch.hh index fc431733..f153ecd8 100644 --- a/PitchTracker/pitch.hh +++ b/PitchTracker/pitch.hh @@ -34,14 +34,14 @@ static const unsigned FFT_P = 10; static const std::size_t FFT_N = 1 << FFT_P; /// Lock-free ring buffer. Discards oldest data on overflow (not strictly thread-safe). -template class RingBuffer { +template class RingBuffer { public: - constexpr static unsigned capacity = SIZE; + constexpr static size_t capacity = SIZE; RingBuffer(): m_read(), m_write() {} ///< Initialize empty buffer template void insert(InIt begin, InIt end) { - unsigned r = m_read; // The read position - unsigned w = m_write; // The write position - bool overflow = (end - begin >= SIZE - size()); + size_t r = m_read; // The read position + size_t w = m_write; // The write position + bool overflow = (static_cast(end - begin) >= SIZE - size()); while (begin != end) { m_buf[w] = *begin++; // Copy sample w = modulo(w + 1); // Update cursor @@ -51,17 +51,17 @@ public: } /// Read data from current position if there is enough data to fill the range (otherwise return false). Does not move read pointer. template bool read(OutIt begin, OutIt end) { - unsigned r = m_read; - if (size() <= end - begin) return false; // Not enough audio available + size_t r = m_read; + if (size() <= static_cast(end - begin)) return false; // Not enough audio available while (begin != end) *begin++ = m_buf[r++ % SIZE]; // Copy audio to output iterator return true; } - void pop(unsigned n) { m_read = modulo(m_read + n); } ///< Move reading pointer forward. - unsigned size() const { return modulo(m_write - m_read); } + void pop(size_t n) { m_read = modulo(m_read + n); } ///< Move reading pointer forward. + size_t size() const { return modulo(m_write - m_read); } private: - static unsigned modulo(int idx) { return (SIZE + idx) % SIZE; } ///< Modulo operation with proper rounding (handles slightly "negative" idx as well) + static size_t modulo(size_t idx) { return idx % SIZE; } ///< Modulo operation with proper rounding (handles slightly "negative" idx as well) float m_buf[SIZE]; - volatile unsigned m_read, m_write; ///< The indices of the next read/write operations. read == write implies that buffer is empty. + volatile size_t m_read, m_write; ///< The indices of the next read/write operations. read == write implies that buffer is empty. }; /// analyzer class diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pitchTracker.cpp index 4d472ee2..bd075c7e 100644 --- a/PitchTracker/pitchTracker.cpp +++ b/PitchTracker/pitchTracker.cpp @@ -35,15 +35,19 @@ namespace PitchTracker{ Log=Callback; } - double *SamplesPerPeriodPerTone = NULL; - int MinHalfTone = 0, MaxHalfTone = 38; - const double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) + static double *SamplesPerPeriodPerTone = NULL; + static double BaseToneFrequency = -1; + static int MinHalfTone = -1, MaxHalfTone = -1; + static const double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ + if(SamplesPerPeriodPerTone && abs(baseToneFrequency - BaseToneFrequency) < 1. && minHalfTone == MinHalfTone && maxHalfTone == MaxHalfTone) + return; + BaseToneFrequency = baseToneFrequency; MinHalfTone = minHalfTone; MaxHalfTone = maxHalfTone; DeInit(); - if(maxHalfTone <= 0) + if(minHalfTone < 0 || maxHalfTone < minHalfTone) return; SamplesPerPeriodPerTone = (double*) malloc((MaxHalfTone + 1) * sizeof(double)); //Init Array to avoid costly calculations @@ -61,13 +65,14 @@ namespace PitchTracker{ } } - static double _AnalyzeToneFunc(double *samples, int sampleCt, int toneIndex){ + template + static T _AnalyzeToneFunc(T *samples, int sampleCt, int toneIndex){ double samplesPerPeriodD = SamplesPerPeriodPerTone[toneIndex]; // samples in one period - int samplesPerPeriod = (int)samplesPerPeriodD; - double fHigh = samplesPerPeriodD - samplesPerPeriod; - double fLow = 1.0 - fHigh; + int samplesPerPeriod = static_cast(samplesPerPeriodD); + T fHigh = static_cast(samplesPerPeriodD - samplesPerPeriod); + T fLow = static_cast(1.0 - fHigh); - double accumDist = 0; // accumulated distances + T accumDist = 0; // accumulated distances // compare correlating samples int sampleIndex = 0; // index of sample to analyze @@ -75,28 +80,30 @@ namespace PitchTracker{ for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < sampleCt; correlatingSampleIndex++, sampleIndex++) { // calc distance to corresponding sample in next period (lower means more distant) - double dist = samples[sampleIndex] * (samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh); + T dist = samples[sampleIndex] * (samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh); accumDist += dist; } - //Using _AnalysisBufLen here makes it return correct values among all analyzed frequencies - double scaleValue = sampleCt; // Divide also by Int16.MaxValue^2 - return accumDist / scaleValue; + //Using sampleCt here makes it return correct values among all analyzed frequencies + return accumDist / sampleCt; } - int GetTone(double *samples, int sampleCt, float *weights, bool scale){ - double maxVolume = 0; + template + int GetTone(T *samples, int sampleCt, float *weights, bool scale){ + if(!SamplesPerPeriodPerTone) + return -1; + T maxVolume = 0; for(int i = 0; i < sampleCt; i++){ - double vol = abs(samples[i]); + T vol = abs(samples[i]); if(vol > maxVolume) maxVolume = vol; } - double maxWeight = -1; - double minWeight = 1; + T maxWeight = -1; + T minWeight = 1; int maxTone = -1; for (int toneIndex = MinHalfTone; toneIndex <= MaxHalfTone; toneIndex++) { - double curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolume; + T curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolume; if(scale) curWeight /= 32768.0; //maximum abs value of a short, would actually need to scale by MaxValue^2 but we already scaled by maxVolume @@ -109,7 +116,7 @@ namespace PitchTracker{ if (curWeight < minWeight) minWeight = curWeight; - weights[toneIndex - MinHalfTone] = (float) curWeight; + weights[toneIndex - MinHalfTone] = static_cast(curWeight); } if(maxWeight - minWeight > 0.01){ @@ -117,4 +124,7 @@ namespace PitchTracker{ }else return -1; } + template int GetTone(float *samples, int sampleCt, float *weights, bool scale); + template int GetTone(double *samples, int sampleCt, float *weights, bool scale); + } \ No newline at end of file diff --git a/PitchTracker/pitchTracker.h b/PitchTracker/pitchTracker.h index 961c436c..a03d5926 100644 --- a/PitchTracker/pitchTracker.h +++ b/PitchTracker/pitchTracker.h @@ -3,7 +3,7 @@ namespace PitchTracker{ void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); void DeInit(); - int GetTone(double *samples, int sampleCt, float *weights, bool scale = false); + template int GetTone(T *samples, int sampleCt, float *weights, bool scale = false); typedef void (__stdcall * LogCallback)(const char* text); static LogCallback Log; diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs index 14ec16e8..676f37b3 100644 --- a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs @@ -7,19 +7,19 @@ namespace Vocaluxe.Lib.Sound.Record { #region Imports [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr Analyzer_Create(double rate, uint step); + private static extern IntPtr Analyzer_Create(double baseToneFrequency, int minHalfTone, int maxHalfTone, uint step = 200); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void Analyzer_Free(IntPtr analyzer); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void Analyzer_InputFloat(IntPtr analyzer, float[] data, int sampleCt); + private static extern void Analyzer_InputFloat(IntPtr analyzer, [In] float[] data, int sampleCt); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void Analyzer_InputShort(IntPtr analyzer, short[] data, int sampleCt); + private static extern void Analyzer_InputShort(IntPtr analyzer, [In] short[] data, int sampleCt); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void Analyzer_InputByte(IntPtr analyzer, byte[] data, int sampleCt); + private static extern void Analyzer_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void Analyzer_Process(IntPtr analyzer); @@ -27,6 +27,9 @@ namespace Vocaluxe.Lib.Sound.Record [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern double Analyzer_GetPeak(IntPtr analyzer); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern double Analyzer_GetNoteFast(IntPtr analyzer, [Out] float[] weights); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern double Analyzer_FindNote(IntPtr analyzer, double minFreq, double maxFreq); @@ -36,9 +39,9 @@ namespace Vocaluxe.Lib.Sound.Record private IntPtr _Instance; - public CAnalyzer(double rate = 44100.0, uint step = 200) + public CAnalyzer(double baseToneFrequency, int minHalfTone, int maxHalfTone, uint step = 200) { - _Instance = Analyzer_Create(rate, step); + _Instance = Analyzer_Create(baseToneFrequency, minHalfTone, maxHalfTone, step); } ~CAnalyzer() @@ -76,6 +79,11 @@ namespace Vocaluxe.Lib.Sound.Record return Analyzer_FindNote(_Instance, minFreq, maxFreq); } + public double GetNoteFast(float[] weights) + { + return Analyzer_GetNoteFast(_Instance, weights); + } + public bool Output(float[] data, float rate) { return Analyzer_OutputFloat(_Instance, data, data.Length, rate); @@ -106,7 +114,7 @@ namespace Vocaluxe.Lib.Sound.Record public static extern void DeInit(); [DllImport("PitchTracker.dll", EntryPoint = "PtFast_GetTone", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtFast_GetTone(short[] samples, int sampleCt, float[] weights); + private static extern int PtFast_GetTone([In] short[] samples, int sampleCt, [Out] float[] weights); #endregion public static int GetTone(short[] samples, float[] weights) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 408ff5d8..edcbb9b3 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -15,16 +15,12 @@ // along with Vocaluxe. If not, see . #endregion -//#define TEST_PITCH -#define USE_NATIVE_DETECTION -//If defined, it uses a library with native code that speeds up detection by a factor of 10 +#define TEST_PITCH using System; -using System.IO; -using System.Diagnostics; - #if TEST_PITCH using System.Windows.Forms; +using System.Diagnostics; using VocaluxeLib; #endif @@ -33,69 +29,23 @@ namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { - private static int _InitCount; //Half tones: C C♯ D D# E F F♯ G G♯ A A# B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) +#if TEST_PITCH private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) +#endif private const int _HalfToneMin = 0; // C2 private const int _HalfToneMax = 38; //45; // inclusive, 38=D5; 45=A5 public const int NumHalfTones = _HalfToneMax - _HalfToneMin + 1; //Number of halftones to analyze + private CAnalyzer _Analyzer = new CAnalyzer(_BaseToneFreq, _HalfToneMin, _HalfToneMax); - private const int _AnalysisBufLen = 4096; - private const int _AnalysisByteBufLen = _AnalysisBufLen * 2; - - private readonly short[] _AnalysisBuffer = new short[_AnalysisBufLen]; - private readonly byte[] _AnalysisByteBuffer = new byte[_AnalysisByteBufLen]; //tmp buffer (stream->tmpBuffer->(Int16)AnalysisBuffer) - - private readonly float[] _TmpWeights = new float[NumHalfTones]; //tmp buffer for weights (gets copied to ToneWeight when checked) -#if !USE_NATIVE_DETECTION - //Precalculated table holding sample# per period for each tone (actually we may not use the lower few entries, but keep it to avoid index modification - private static readonly double[] _SamplesPerPeriodPerTone = new double[_HalfToneMax + 1]; - - public enum EAnalyzeFunction - { - AutoCorrelation, //Faster, more resistent to noise, good value for HalfToneMax=38 (higher->wrong results in test case, WHY?) with 38 no wrong values in test case - Amdf //Average magnitude difference, slower, detects everything in range -> HalfToneMax=45 - } - private delegate double DAnalyzeTone(int tone); - - // ReSharper disable MemberCanBePrivate.Global - // ReSharper disable ConvertToConstant.Global - // ReSharper disable FieldCanBeMadeReadOnly.Global - public static EAnalyzeFunction AnalyzeFunction = EAnalyzeFunction.AutoCorrelation; - // ReSharper restore FieldCanBeMadeReadOnly.Global - // ReSharper restore ConvertToConstant.Global - // ReSharper restore MemberCanBePrivate.Global - // ReSharper disable FieldCanBeMadeReadOnly.Local - private DAnalyzeTone _AnalyzeToneFunc; - private double _MinWeightDiff; - // ReSharper restore FieldCanBeMadeReadOnly.Local -#else - private readonly CAnalyzer _Analyzer = new CAnalyzer(); -#endif private double _MaxVolume; - private bool _NewSamples; - - private MemoryStream _Stream = new MemoryStream(); // full buffer public CBuffer() { - _Init(); MinVolume = 0.02f; - ToneWeigth = new float[NumHalfTones]; + ToneWeigths = new float[NumHalfTones]; Reset(); -#if !USE_NATIVE_DETECTION - if (AnalyzeFunction == EAnalyzeFunction.Amdf) - { - _AnalyzeToneFunc = _GetAmdf; - _MinWeightDiff = 0.01; - } - else if (AnalyzeFunction == EAnalyzeFunction.AutoCorrelation) - { - _AnalyzeToneFunc = _GetAutoCorrelation; - _MinWeightDiff = 0.0001; - } -#endif #if TEST_PITCH _TestPitchDetection(); #endif @@ -106,23 +56,6 @@ namespace Vocaluxe.Lib.Sound.Record _Dispose(); } - private static void _Init() - { - _InitCount++; - if (_InitCount > 1) - return; //Do init only once -#if USE_NATIVE_DETECTION - CFastAnalyzer.Init(_BaseToneFreq, _HalfToneMin, _HalfToneMax); -#else - //Init Array to avoid costly calculations - for (int toneIndex = 0; toneIndex <= _HalfToneMax; toneIndex++) - { - double freq = _BaseToneFreq * Math.Pow(_HalftoneBase, toneIndex); - _SamplesPerPeriodPerTone[toneIndex] = 44100.0 / freq; // samples in one period - } -#endif - } - public int ToneAbs { get; private set; } public int Tone { get; set; } @@ -134,7 +67,7 @@ namespace Vocaluxe.Lib.Sound.Record public bool ToneValid { get; private set; } - public float[] ToneWeigth { get; private set; } + public float[] ToneWeigths { get; private set; } ///

    /// Minimum volume for a tone to be valid @@ -143,21 +76,11 @@ namespace Vocaluxe.Lib.Sound.Record public void Reset() { - lock (_Stream) - { - _Stream.SetLength(0L); - _NewSamples = false; - } ToneValid = false; ToneAbs = 0; Tone = 0; - for (int i = 0; i < ToneWeigth.Length; i++) - ToneWeigth[i] = 0f; - } - - private void _Add(byte[] bytes) - { - _Stream.Write(bytes, 0, bytes.Length); + for (int i = 0; i < ToneWeigths.Length; i++) + ToneWeigths[i] = 0f; } public void ProcessNewBuffer(byte[] buffer) @@ -168,168 +91,24 @@ namespace Vocaluxe.Lib.Sound.Record // voice passthrough (send data to playback-device) //if (assigned(fVoiceStream)) then //fVoiceStream.WriteData(Buffer, BufferSize); - lock (_Stream) - { - _Add(buffer); - _NewSamples = true; - } - //_Analyzer.Input(buffer); + _Analyzer.Input(buffer); } public void AnalyzeBuffer() { - if (!_NewSamples) - return; - - /*_NewSamples = false; _Analyzer.Process(); _MaxVolume = _Analyzer.GetPeak() / 43 + 1; - CTone tone = _Analyzer.FindTone(); - if (tone != null) + int tone = (int)Math.Round(_Analyzer.FindNote()); + if (tone >= 0) { - ToneAbs = tone.Note; + ToneAbs = tone; Tone = ToneAbs % 12; ToneValid = true; } - else - ToneValid = false;*/ - - lock (_Stream) - { - if (_Stream.Length >= _AnalysisByteBufLen) - { - _Stream.Position -= _AnalysisByteBufLen; - _Stream.Read(_AnalysisByteBuffer, 0, _AnalysisByteBufLen); - } - _NewSamples = false; - } - - Buffer.BlockCopy(_AnalysisByteBuffer, 0, _AnalysisBuffer, 0, _AnalysisByteBufLen); - - try - { - // find maximum volume - _FindMaxVolume(); - - if (MaxVolume >= MinVolume) - _AnalyzeTones(); - else - ToneValid = false; - } - catch (Exception) {} - } - - private void _FindMaxVolume() - { - int maxVolume = 0; - for (int i = 0; i < _AnalysisBufLen / 4; i++) - { - int volume = _AnalysisBuffer[i]; - if (volume < 0) - volume = -volume; - if (volume > maxVolume) - maxVolume = volume; - } - _MaxVolume = (double)maxVolume / Int16.MaxValue; - } - - private void _AnalyzeTones() - { -#if USE_NATIVE_DETECTION - int maxTone = CFastAnalyzer.GetTone(_AnalysisBuffer, _TmpWeights); - if (maxTone >= 0) -#else - // prepare to analyze - double maxWeight = -1.0; - double minWeight = 1.0; - int maxTone = -1; - - - // analyze halftones - // Note: at the lowest tone (~65Hz) and a buffer-size of 4096 - // at 44.1 (or 48kHz) only 6 (or 5) samples are compared, this might be - // too few samples -> use a bigger buffer-size - for (int toneIndex = _HalfToneMin; toneIndex <= _HalfToneMax; toneIndex++) - { - double curWeight = _AnalyzeToneFunc(toneIndex); - - if (curWeight > maxWeight) - { - maxWeight = curWeight; - maxTone = toneIndex; - } - - if (curWeight < minWeight) - minWeight = curWeight; - - _TmpWeights[toneIndex - _HalfToneMin] = (float)curWeight; - } - - if (maxWeight - minWeight > _MinWeightDiff) -#endif - { - Array.Copy(_TmpWeights, ToneWeigth, NumHalfTones); - - ToneAbs = maxTone; - //Console.WriteLine(maxTone); - Tone = maxTone % 12; - ToneValid = true; - } else ToneValid = false; } -#if !USE_NATIVE_DETECTION - private double _GetAutoCorrelation(int tone) - { - double samplesPerPeriodD = _SamplesPerPeriodPerTone[tone]; // samples in one period - int samplesPerPeriod = (int)samplesPerPeriodD; - double fHigh = samplesPerPeriodD - samplesPerPeriod; - double fLow = 1.0 - fHigh; - - double accumDist = 0; // accumulated distances - - // compare correlating samples - int sampleIndex = 0; // index of sample to analyze - // Start value= index of sample one period ahead - for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) - { - // calc distance to corresponding sample in next period (lower means more distant) - double dist = _AnalysisBuffer[sampleIndex] * - (_AnalysisBuffer[correlatingSampleIndex] * fLow + _AnalysisBuffer[correlatingSampleIndex + 1] * fHigh); - accumDist += dist; - } - - //Using _AnalysisBufLen here makes it return correct values among all analyzed frequencies - const double scaleValue = (double)Int16.MaxValue * (double)Int16.MaxValue * _AnalysisBufLen; - return accumDist / scaleValue; - } - - private double _GetAmdf(int tone) - { - double samplesPerPeriodD = _SamplesPerPeriodPerTone[tone]; // samples in one period - int samplesPerPeriod = (int)samplesPerPeriodD; - double fHigh = samplesPerPeriodD - samplesPerPeriod; - double fLow = 1.0 - fHigh; - - double accumDist = 0; // accumulated distances - - // compare correlating samples - int sampleIndex = 0; // index of sample to analyze - // Start value= index of sample one period ahead - for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _AnalysisBufLen; correlatingSampleIndex++, sampleIndex++) - { - // calc distance (correlation: 1-dist/IntMax*2) to corresponding sample in next period (0=equal .. IntMax*2=totally different) - //int dist = (int)Math.Abs(_AnalysisBuffer[sampleIndex] - _AnalysisBuffer[correlatingSampleIndex]); - double dist = Math.Abs(_AnalysisBuffer[sampleIndex] - - (_AnalysisBuffer[correlatingSampleIndex] * fLow + _AnalysisBuffer[correlatingSampleIndex + 1] * fHigh)); - accumDist += dist; - } - //Use analyzed sample count here. BufLen yields more errors - return 1.0 - accumDist / Int16.MaxValue / sampleIndex; - } -#endif - public void Dispose() { _Dispose(); @@ -338,17 +117,11 @@ namespace Vocaluxe.Lib.Sound.Record private void _Dispose() { - if (_Stream != null) + if (_Analyzer != null) { - _Stream.Dispose(); - _Stream = null; + _Analyzer.Dispose(); + _Analyzer = null; } -#if USE_NATIVE_DETECTION - Debug.Assert(_InitCount > 0); - _InitCount--; - if (_InitCount == 0) - CFastAnalyzer.DeInit(); -#endif } #if TEST_PITCH @@ -393,11 +166,9 @@ namespace Vocaluxe.Lib.Sound.Record } } _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); - ProcessNewBuffer(data); - AnalyzeBuffer(); Stopwatch sw = new Stopwatch(); sw.Start(); - const int repeats = 2000; + const int repeats = 1000; for (int i = 0; i < repeats; i++) { ProcessNewBuffer(data); @@ -486,7 +257,7 @@ namespace Vocaluxe.Lib.Sound.Record private static void _GetSineWave(double freq, int sampleRate, ref double angle, out byte[] data) { const short max = short.MaxValue; - const int len = _AnalysisBufLen; //sampleRate * durationMs / 1000; + const int len = 4096; //sampleRate * durationMs / 1000; short[] data16Bit = new short[len]; for (int i = 0; i < len; i++) data16Bit[i] = (short)(Math.Sin(2 * Math.PI * i / sampleRate * freq + angle) * max); diff --git a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs index 78630c90..074a7711 100644 --- a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs +++ b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs @@ -137,7 +137,7 @@ namespace Vocaluxe.Lib.Sound.Record public float[] ToneWeigth(int player) { - return _Initialized ? _Buffer[player].ToneWeigth : null; + return _Initialized ? _Buffer[player].ToneWeigths : null; } public ReadOnlyCollection RecordDevices() From 980644108e3359a7b49ff628a7460d714af030b5 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 28 Mar 2014 22:13:52 +0100 Subject: [PATCH 069/116] Add FastAnalyzer to the class (split it later) Fix some bugs Use FastAnalyzer as Analyzer seems not to be reliable by now (need further tests) --- PitchTracker/PitchWrapper.cpp | 15 ++++++++------- PitchTracker/PitchWrapper.h | 4 ++-- PitchTracker/pitch.cc | 2 +- PitchTracker/pitch.hh | 2 +- PitchTracker/pitchTracker.cpp | 15 ++++++++------- PitchTracker/pitchTracker.h | 2 +- Vocaluxe/Lib/Sound/Record/CAnalyzer.cs | 12 ++++++------ Vocaluxe/Lib/Sound/Record/CBuffer.cs | 19 ++++++++++++------- 8 files changed, 39 insertions(+), 32 deletions(-) diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 45a29b18..992b6c10 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -10,12 +10,13 @@ AnalyzerExt::~AnalyzerExt(){ PitchTracker::DeInit(); } -int AnalyzerExt::GetNoteFast(float* weights){ +int AnalyzerExt::GetNoteFast(double* maxVolume, float* weights){ size_t size = m_fastAnalysisBuf.size(); if(size > m_SampleCt) m_fastAnalysisBuf.pop(size - m_SampleCt); - m_fastAnalysisBuf.read(m_AnalysisBuf, m_AnalysisBuf + m_SampleCt); - return PitchTracker::GetTone(m_AnalysisBuf, m_SampleCt, weights); + if(!m_fastAnalysisBuf.read(m_AnalysisBuf, m_AnalysisBuf + m_SampleCt)) + return -1; + return PitchTracker::GetTone(m_AnalysisBuf, m_SampleCt, maxVolume, weights); } void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ @@ -26,11 +27,11 @@ void PtFast_DeInit(){ PitchTracker::DeInit(); } -int PtFast_GetTone(short* samples, int sampleCt, float* weights){ +int PtFast_GetTone(short* samples, int sampleCt, double* maxVolume, float* weights){ if(sampleCt <= 0) return -1; double* dataDouble = short2DoubleArray(samples, sampleCt, false); - int result = PitchTracker::GetTone(dataDouble, sampleCt, weights, true); + int result = PitchTracker::GetTone(dataDouble, sampleCt, maxVolume, weights, true); freeDoubleArray(dataDouble); return result; } @@ -85,10 +86,10 @@ double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq){ return (tone == NULL) ? -1 : ToneToNote(tone); } -int Analyzer_GetNoteFast(AnalyzerExt* analyzer, float* weights){ +int Analyzer_GetNoteFast(AnalyzerExt* analyzer, double* maxVolume, float* weights){ if(!analyzer) return -1; - return analyzer->GetNoteFast(weights); + return analyzer->GetNoteFast(maxVolume, weights); } bool Analyzer_OutputFloat(AnalyzerExt* analyzer, float* data, int sampleCt, float rate){ diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 09298158..37fc9444 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -12,7 +12,7 @@ public: m_fastAnalysisBuf.insert(begin, end); Analyzer::input(begin, end); } - int GetNoteFast(float* weights); + int GetNoteFast(double* maxVolume, float* weights); private: constexpr static size_t m_SampleCt = 4096; RingBuffer m_fastAnalysisBuf; // Buffer used for fast analysis instead of FFT @@ -30,7 +30,7 @@ DllExport void Analyzer_InputShort(AnalyzerExt* analyzer, short* data, int sampl DllExport void Analyzer_InputByte(AnalyzerExt* analyzer, char* data, int sampleCt); DllExport void Analyzer_Process(AnalyzerExt* analyzer); DllExport double Analyzer_GetPeak(AnalyzerExt* analyzer); -DllExport int Analyzer_GetNoteFast(AnalyzerExt* analyzer, float* weights); +DllExport int Analyzer_GetNoteFast(AnalyzerExt* analyzer, double* maxVolume, float* weights); DllExport double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq); DllExport bool Analyzer_OutputFloat(AnalyzerExt* analyzer, float* data, int sampleCt, float rate); diff --git a/PitchTracker/pitch.cc b/PitchTracker/pitch.cc index 85af7d5f..760dc9dc 100644 --- a/PitchTracker/pitch.cc +++ b/PitchTracker/pitch.cc @@ -137,7 +137,7 @@ void Analyzer::calcTones() { double phase = std::arg(m_fft[k]); // process phase difference double delta = phase - m_fftLastPhase[k]; - m_fftLastPhase[k] = phase; + m_fftLastPhase[k] = static_cast(phase); delta -= k * phaseStep; // subtract expected phase difference delta = remainder(delta, 2.0 * M_PI); // map delta phase into +/- M_PI interval delta /= phaseStep; // calculate diff from bin center frequency diff --git a/PitchTracker/pitch.hh b/PitchTracker/pitch.hh index f153ecd8..ff3d982e 100644 --- a/PitchTracker/pitch.hh +++ b/PitchTracker/pitch.hh @@ -52,7 +52,7 @@ public: /// Read data from current position if there is enough data to fill the range (otherwise return false). Does not move read pointer. template bool read(OutIt begin, OutIt end) { size_t r = m_read; - if (size() <= static_cast(end - begin)) return false; // Not enough audio available + if (size() < static_cast(end - begin)) return false; // Not enough audio available while (begin != end) *begin++ = m_buf[r++ % SIZE]; // Copy audio to output iterator return true; } diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pitchTracker.cpp index bd075c7e..8850fb1b 100644 --- a/PitchTracker/pitchTracker.cpp +++ b/PitchTracker/pitchTracker.cpp @@ -89,21 +89,22 @@ namespace PitchTracker{ } template - int GetTone(T *samples, int sampleCt, float *weights, bool scale){ + int GetTone(T *samples, int sampleCt, double* maxVolume, float *weights, bool scale){ if(!SamplesPerPeriodPerTone) return -1; - T maxVolume = 0; + T maxVolumeL = 0; for(int i = 0; i < sampleCt; i++){ T vol = abs(samples[i]); - if(vol > maxVolume) - maxVolume = vol; + if(vol > maxVolumeL) + maxVolumeL = vol; } + *maxVolume = maxVolumeL; T maxWeight = -1; T minWeight = 1; int maxTone = -1; for (int toneIndex = MinHalfTone; toneIndex <= MaxHalfTone; toneIndex++) { - T curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolume; + T curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolumeL; if(scale) curWeight /= 32768.0; //maximum abs value of a short, would actually need to scale by MaxValue^2 but we already scaled by maxVolume @@ -124,7 +125,7 @@ namespace PitchTracker{ }else return -1; } - template int GetTone(float *samples, int sampleCt, float *weights, bool scale); - template int GetTone(double *samples, int sampleCt, float *weights, bool scale); + template int GetTone(float *samples, int sampleCt, double* maxVolume, float *weights, bool scale); + template int GetTone(double *samples, int sampleCt, double* maxVolume, float *weights, bool scale); } \ No newline at end of file diff --git a/PitchTracker/pitchTracker.h b/PitchTracker/pitchTracker.h index a03d5926..3d3c2de0 100644 --- a/PitchTracker/pitchTracker.h +++ b/PitchTracker/pitchTracker.h @@ -3,7 +3,7 @@ namespace PitchTracker{ void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); void DeInit(); - template int GetTone(T *samples, int sampleCt, float *weights, bool scale = false); + template int GetTone(T *samples, int sampleCt, double* maxVolume, float *weights, bool scale = false); typedef void (__stdcall * LogCallback)(const char* text); static LogCallback Log; diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs index 676f37b3..426572d0 100644 --- a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs @@ -28,7 +28,7 @@ namespace Vocaluxe.Lib.Sound.Record private static extern double Analyzer_GetPeak(IntPtr analyzer); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern double Analyzer_GetNoteFast(IntPtr analyzer, [Out] float[] weights); + private static extern int Analyzer_GetNoteFast(IntPtr analyzer, [Out] out double maxVolume, [Out] float[] weights); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern double Analyzer_FindNote(IntPtr analyzer, double minFreq, double maxFreq); @@ -79,9 +79,9 @@ namespace Vocaluxe.Lib.Sound.Record return Analyzer_FindNote(_Instance, minFreq, maxFreq); } - public double GetNoteFast(float[] weights) + public int GetNoteFast(out double maxVolume, float[] weights) { - return Analyzer_GetNoteFast(_Instance, weights); + return Analyzer_GetNoteFast(_Instance, out maxVolume, weights); } public bool Output(float[] data, float rate) @@ -114,12 +114,12 @@ namespace Vocaluxe.Lib.Sound.Record public static extern void DeInit(); [DllImport("PitchTracker.dll", EntryPoint = "PtFast_GetTone", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtFast_GetTone([In] short[] samples, int sampleCt, [Out] float[] weights); + private static extern int PtFast_GetTone([In] short[] samples, int sampleCt, [Out] out double maxVolume, [Out] float[] weights); #endregion - public static int GetTone(short[] samples, float[] weights) + public static int GetTone(short[] samples, out double maxVolume, float[] weights) { - return PtFast_GetTone(samples, samples.Length, weights); + return PtFast_GetTone(samples, samples.Length, out maxVolume, weights); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index edcbb9b3..6b4db2f8 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -96,10 +96,10 @@ namespace Vocaluxe.Lib.Sound.Record public void AnalyzeBuffer() { - _Analyzer.Process(); - _MaxVolume = _Analyzer.GetPeak() / 43 + 1; - int tone = (int)Math.Round(_Analyzer.FindNote()); - if (tone >= 0) + //_Analyzer.Process(); + //_MaxVolume = _Analyzer.GetPeak() / 43 + 1; + int tone = _Analyzer.GetNoteFast(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // + if (tone >= 0 && _MaxVolume >= MinVolume) { ToneAbs = tone; Tone = ToneAbs % 12; @@ -146,6 +146,7 @@ namespace Vocaluxe.Lib.Sound.Record const int toneTo = 47; //B5 Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); byte[] data; + byte[] data2 = new byte[2048]; int ok = 0; double angle = 0; for (int distort = 0; distort < 10; distort++) @@ -155,8 +156,12 @@ namespace Vocaluxe.Lib.Sound.Record _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, ref angle, out data); _Distort(data, tone, distort); - ProcessNewBuffer(data); - AnalyzeBuffer(); + for (int i = 0; i < 4; i++) + { + Buffer.BlockCopy(data, i * 2048, data2, 0, 2048); + ProcessNewBuffer(data2); + AnalyzeBuffer(); + } if (!ToneValid) CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " not detected (Distortion: " + distort + ")"); else if (Tone != tone % 12) @@ -168,7 +173,7 @@ namespace Vocaluxe.Lib.Sound.Record _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); Stopwatch sw = new Stopwatch(); sw.Start(); - const int repeats = 1000; + const int repeats = 100; for (int i = 0; i < repeats; i++) { ProcessNewBuffer(data); From 6ad9f6a1ef93fb8ae9881035e67a8d55d64e965e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 29 Mar 2014 17:47:52 +0100 Subject: [PATCH 070/116] Improve robustness by combining AKF and AMDF --- PitchTracker/PitchWrapper.cpp | 5 +++-- PitchTracker/PitchWrapper.h | 1 - PitchTracker/pitchTracker.cpp | 30 ++++++++++++++++++++---------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 992b6c10..ffe6bfac 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -11,12 +11,13 @@ AnalyzerExt::~AnalyzerExt(){ } int AnalyzerExt::GetNoteFast(double* maxVolume, float* weights){ + float AnaylsisBuf[m_SampleCt]; size_t size = m_fastAnalysisBuf.size(); if(size > m_SampleCt) m_fastAnalysisBuf.pop(size - m_SampleCt); - if(!m_fastAnalysisBuf.read(m_AnalysisBuf, m_AnalysisBuf + m_SampleCt)) + if(!m_fastAnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + m_SampleCt)) return -1; - return PitchTracker::GetTone(m_AnalysisBuf, m_SampleCt, maxVolume, weights); + return PitchTracker::GetTone(AnaylsisBuf, m_SampleCt, maxVolume, weights); } void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 37fc9444..bd9374fc 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -16,7 +16,6 @@ public: private: constexpr static size_t m_SampleCt = 4096; RingBuffer m_fastAnalysisBuf; // Buffer used for fast analysis instead of FFT - float m_AnalysisBuf[4096]; }; DllExport void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pitchTracker.cpp index 8850fb1b..85e8bebd 100644 --- a/PitchTracker/pitchTracker.cpp +++ b/PitchTracker/pitchTracker.cpp @@ -66,26 +66,35 @@ namespace PitchTracker{ } template - static T _AnalyzeToneFunc(T *samples, int sampleCt, int toneIndex){ + static T _AnalyzeToneFunc(T *samples, int sampleCt, int toneIndex, bool scale){ + // Use method by Kobayashi and Shimamura (1995): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 double samplesPerPeriodD = SamplesPerPeriodPerTone[toneIndex]; // samples in one period int samplesPerPeriod = static_cast(samplesPerPeriodD); T fHigh = static_cast(samplesPerPeriodD - samplesPerPeriod); T fLow = static_cast(1.0 - fHigh); - T accumDist = 0; // accumulated distances + T accumDistAKF = 0; // accumulated distances + T accumDistAMDF = 0; // accumulated distances // compare correlating samples int sampleIndex = 0; // index of sample to analyze // Start value= index of sample one period ahead for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < sampleCt; correlatingSampleIndex++, sampleIndex++) { - // calc distance to corresponding sample in next period (lower means more distant) - T dist = samples[sampleIndex] * (samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh); - accumDist += dist; + // calc distance to corresponding sample in next period + T xn = samples[sampleIndex]; + T xnt = samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh; + accumDistAKF += xn * xnt; + accumDistAMDF += abs(xn - xnt); } - //Using sampleCt here makes it return correct values among all analyzed frequencies - return accumDist / sampleCt; + accumDistAKF /= sampleCt; + accumDistAMDF /= sampleIndex; + + if(scale) + return accumDistAKF / (accumDistAMDF * 32767.f + 32767.f); // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once + else + return accumDistAKF / (accumDistAMDF + 1.f); } template @@ -98,15 +107,16 @@ namespace PitchTracker{ if(vol > maxVolumeL) maxVolumeL = vol; } + if(scale) + maxVolumeL /= 32767.; *maxVolume = maxVolumeL; + T maxWeight = -1; T minWeight = 1; int maxTone = -1; for (int toneIndex = MinHalfTone; toneIndex <= MaxHalfTone; toneIndex++) { - T curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex) / maxVolumeL; - if(scale) - curWeight /= 32768.0; //maximum abs value of a short, would actually need to scale by MaxValue^2 but we already scaled by maxVolume + T curWeight = _AnalyzeToneFunc(samples, sampleCt, toneIndex, scale); if (curWeight > maxWeight) { From 4c597cb4f895e35d171a7b8a75d6dd3e6ecc8cac Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 29 Mar 2014 22:54:37 +0100 Subject: [PATCH 071/116] Better structure --- PitchTracker/Helper.h | 5 +- PitchTracker/License.txt | 2 - PitchTracker/PitchTracker.vcxproj | 14 +++--- PitchTracker/PitchTracker.vcxproj.filters | 47 +++++++++++-------- PitchTracker/PitchWrapper.cpp | 16 +++---- PitchTracker/PitchWrapper.h | 2 +- PitchTracker/{pitchTracker.cpp => pdaAKF.cpp} | 4 +- PitchTracker/{pitchTracker.h => pdaAKF.h} | 3 +- PitchTracker/performous/License.txt | 3 ++ PitchTracker/{ => performous}/Performous.txt | 0 PitchTracker/{ => performous}/libda/fft.hpp | 0 .../{ => performous}/libda/sample.hpp | 0 PitchTracker/{ => performous}/pitch.cc | 0 PitchTracker/{ => performous}/pitch.hh | 2 +- PitchTracker/{ => performous}/util.hh | 0 15 files changed, 54 insertions(+), 44 deletions(-) delete mode 100644 PitchTracker/License.txt rename PitchTracker/{pitchTracker.cpp => pdaAKF.cpp} (98%) rename PitchTracker/{pitchTracker.h => pdaAKF.h} (74%) create mode 100644 PitchTracker/performous/License.txt rename PitchTracker/{ => performous}/Performous.txt (100%) rename PitchTracker/{ => performous}/libda/fft.hpp (100%) rename PitchTracker/{ => performous}/libda/sample.hpp (100%) rename PitchTracker/{ => performous}/pitch.cc (100%) rename PitchTracker/{ => performous}/pitch.hh (99%) rename PitchTracker/{ => performous}/util.hh (100%) diff --git a/PitchTracker/Helper.h b/PitchTracker/Helper.h index 27c18e8b..ae13e309 100644 --- a/PitchTracker/Helper.h +++ b/PitchTracker/Helper.h @@ -1,5 +1,4 @@ #pragma once -#include "pitch.hh" #include "PitchWrapper.h" #include #include @@ -40,8 +39,8 @@ void freeDoubleArray(double* floats){ free(floats); } -double ToneToNote(const Tone* tone){ - return 12.0 * std::log(tone->freq / 127.09) / std::log(2.0) + 27.5 - 16; // 16 = C2 +double FreqToNote(double freq){ + return 12.0 * std::log(freq / 127.09) / std::log(2.0) + 27.5 - 16; // 16 = C2 } /* diff --git a/PitchTracker/License.txt b/PitchTracker/License.txt deleted file mode 100644 index 0db6541a..00000000 --- a/PitchTracker/License.txt +++ /dev/null @@ -1,2 +0,0 @@ -Some code is taken from Performous: https://github.com/performous/performous/tree/master/game -From 25.03.2014 \ No newline at end of file diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj index c77885a1..a2053137 100644 --- a/PitchTracker/PitchTracker.vcxproj +++ b/PitchTracker/PitchTracker.vcxproj @@ -168,21 +168,21 @@ - - + + - - - + + + - - + + diff --git a/PitchTracker/PitchTracker.vcxproj.filters b/PitchTracker/PitchTracker.vcxproj.filters index f122cd3f..821a397b 100644 --- a/PitchTracker/PitchTracker.vcxproj.filters +++ b/PitchTracker/PitchTracker.vcxproj.filters @@ -13,47 +13,56 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {a47c9d33-78d2-453d-bb59-e5724cd85f67} + + + {4c72400a-ff2c-4842-8c20-54deb5df606d} + + + {d71782a0-47fc-4fe1-8569-0a0ce8fe9b45} + - - Quelldateien - - - Quelldateien - Quelldateien Quelldateien + + Quelldateien\performous + + + Quelldateien + - - Headerdateien - - - Headerdateien - Headerdateien - - Headerdateien - Headerdateien Headerdateien + + Headerdateien\performous\libda + + + Headerdateien\performous\libda + + + Headerdateien + - - Headerdateien + + Headerdateien\performous - - Headerdateien + + Headerdateien\performous \ No newline at end of file diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index ffe6bfac..31271e82 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -1,13 +1,13 @@ #include "PitchWrapper.h" -#include "pitchTracker.h" +#include "pdaAKF.h" #include "Helper.h" AnalyzerExt::AnalyzerExt(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step): Analyzer(44100., "", step){ - PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone); + PitchTrackerAKF::Init(baseToneFrequency, minHalfTone, maxHalfTone); } AnalyzerExt::~AnalyzerExt(){ - PitchTracker::DeInit(); + PitchTrackerAKF::DeInit(); } int AnalyzerExt::GetNoteFast(double* maxVolume, float* weights){ @@ -17,22 +17,22 @@ int AnalyzerExt::GetNoteFast(double* maxVolume, float* weights){ m_fastAnalysisBuf.pop(size - m_SampleCt); if(!m_fastAnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + m_SampleCt)) return -1; - return PitchTracker::GetTone(AnaylsisBuf, m_SampleCt, maxVolume, weights); + return PitchTrackerAKF::GetTone(AnaylsisBuf, m_SampleCt, maxVolume, weights); } void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ - PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone); + PitchTrackerAKF::Init(baseToneFrequency, minHalfTone, maxHalfTone); } void PtFast_DeInit(){ - PitchTracker::DeInit(); + PitchTrackerAKF::DeInit(); } int PtFast_GetTone(short* samples, int sampleCt, double* maxVolume, float* weights){ if(sampleCt <= 0) return -1; double* dataDouble = short2DoubleArray(samples, sampleCt, false); - int result = PitchTracker::GetTone(dataDouble, sampleCt, maxVolume, weights, true); + int result = PitchTrackerAKF::GetTone(dataDouble, sampleCt, maxVolume, weights, true); freeDoubleArray(dataDouble); return result; } @@ -84,7 +84,7 @@ double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq){ if(!analyzer) return -1; const Tone* tone = analyzer->findTone(minFreq, maxFreq); - return (tone == NULL) ? -1 : ToneToNote(tone); + return (tone == NULL) ? -1 : FreqToNote(tone->freq); } int Analyzer_GetNoteFast(AnalyzerExt* analyzer, double* maxVolume, float* weights){ diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index bd9374fc..f22771ba 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -1,6 +1,6 @@ #pragma once -#include "pitch.hh" +#include "performous/pitch.hh" #define DllExport extern "C" __declspec(dllexport) diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pdaAKF.cpp similarity index 98% rename from PitchTracker/pitchTracker.cpp rename to PitchTracker/pdaAKF.cpp index 85e8bebd..460a74b9 100644 --- a/PitchTracker/pitchTracker.cpp +++ b/PitchTracker/pdaAKF.cpp @@ -13,13 +13,13 @@ // You should have received a copy of the GNU General Public License // along with Vocaluxe. If not, see . -#include "pitchTracker.h" +#include "pdaAKF.h" #include #include #include #include -namespace PitchTracker{ +namespace PitchTrackerAKF{ static void doLog(const char* msg,...){ va_list argptr = NULL; diff --git a/PitchTracker/pitchTracker.h b/PitchTracker/pdaAKF.h similarity index 74% rename from PitchTracker/pitchTracker.h rename to PitchTracker/pdaAKF.h index 3d3c2de0..6341e973 100644 --- a/PitchTracker/pitchTracker.h +++ b/PitchTracker/pdaAKF.h @@ -1,6 +1,7 @@ #pragma once -namespace PitchTracker{ +// A pitch detection that is based on the AKF and AMDF (initially from original Vocaluxe/USDx) +namespace PitchTrackerAKF{ void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); void DeInit(); template int GetTone(T *samples, int sampleCt, double* maxVolume, float *weights, bool scale = false); diff --git a/PitchTracker/performous/License.txt b/PitchTracker/performous/License.txt new file mode 100644 index 00000000..9a031336 --- /dev/null +++ b/PitchTracker/performous/License.txt @@ -0,0 +1,3 @@ +code is based on Performous: https://github.com/performous/performous/tree/master/game +Some modifications were made to make it compile with VS2012, fix warnings and make it suitable for our needs +From 25.03.2014 \ No newline at end of file diff --git a/PitchTracker/Performous.txt b/PitchTracker/performous/Performous.txt similarity index 100% rename from PitchTracker/Performous.txt rename to PitchTracker/performous/Performous.txt diff --git a/PitchTracker/libda/fft.hpp b/PitchTracker/performous/libda/fft.hpp similarity index 100% rename from PitchTracker/libda/fft.hpp rename to PitchTracker/performous/libda/fft.hpp diff --git a/PitchTracker/libda/sample.hpp b/PitchTracker/performous/libda/sample.hpp similarity index 100% rename from PitchTracker/libda/sample.hpp rename to PitchTracker/performous/libda/sample.hpp diff --git a/PitchTracker/pitch.cc b/PitchTracker/performous/pitch.cc similarity index 100% rename from PitchTracker/pitch.cc rename to PitchTracker/performous/pitch.cc diff --git a/PitchTracker/pitch.hh b/PitchTracker/performous/pitch.hh similarity index 99% rename from PitchTracker/pitch.hh rename to PitchTracker/performous/pitch.hh index ff3d982e..1108e0b9 100644 --- a/PitchTracker/pitch.hh +++ b/PitchTracker/performous/pitch.hh @@ -5,7 +5,7 @@ #include #include #include -#include "compatibility.h" +#include "../compatibility.h" /// struct to represent tones struct Tone { diff --git a/PitchTracker/util.hh b/PitchTracker/performous/util.hh similarity index 100% rename from PitchTracker/util.hh rename to PitchTracker/performous/util.hh From f1a885b95e0b91dc3b2a32551286a44510231044 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 30 Mar 2014 01:32:25 +0100 Subject: [PATCH 072/116] Make an own class for AKF detector (tested for C2-B5) --- PitchTracker/PitchTracker.vcxproj | 6 +- PitchTracker/PitchTracker.vcxproj.filters | 4 +- PitchTracker/PitchWrapper.cpp | 90 +++++++--------- PitchTracker/PitchWrapper.h | 44 +++----- PitchTracker/pdaAKF.h | 12 --- PitchTracker/{pdaAKF.cpp => ptAKF.cpp} | 125 ++++++++++++++++++---- PitchTracker/ptAKF.h | 27 +++++ Vocaluxe/Lib/Sound/Record/CAnalyzer.cs | 77 +++++++++---- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 18 ++-- Vocaluxe/Lib/Sound/Record/CRecordBase.cs | 2 +- 10 files changed, 259 insertions(+), 146 deletions(-) delete mode 100644 PitchTracker/pdaAKF.h rename PitchTracker/{pdaAKF.cpp => ptAKF.cpp} (57%) create mode 100644 PitchTracker/ptAKF.h diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj index a2053137..47be7dd7 100644 --- a/PitchTracker/PitchTracker.vcxproj +++ b/PitchTracker/PitchTracker.vcxproj @@ -95,6 +95,7 @@ WIN64;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) true Fast + false Windows @@ -112,6 +113,7 @@ WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) true Fast + false Windows @@ -169,7 +171,7 @@ - + @@ -177,7 +179,7 @@ - + diff --git a/PitchTracker/PitchTracker.vcxproj.filters b/PitchTracker/PitchTracker.vcxproj.filters index 821a397b..efd0974f 100644 --- a/PitchTracker/PitchTracker.vcxproj.filters +++ b/PitchTracker/PitchTracker.vcxproj.filters @@ -33,7 +33,7 @@ Quelldateien\performous - + Quelldateien @@ -53,7 +53,7 @@ Headerdateien\performous\libda - + Headerdateien diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 31271e82..4fc47b4c 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -1,58 +1,23 @@ #include "PitchWrapper.h" -#include "pdaAKF.h" #include "Helper.h" -AnalyzerExt::AnalyzerExt(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step): Analyzer(44100., "", step){ - PitchTrackerAKF::Init(baseToneFrequency, minHalfTone, maxHalfTone); + +Analyzer* Analyzer_Create(unsigned step){ + return new Analyzer(44100, "", step); } -AnalyzerExt::~AnalyzerExt(){ - PitchTrackerAKF::DeInit(); -} - -int AnalyzerExt::GetNoteFast(double* maxVolume, float* weights){ - float AnaylsisBuf[m_SampleCt]; - size_t size = m_fastAnalysisBuf.size(); - if(size > m_SampleCt) - m_fastAnalysisBuf.pop(size - m_SampleCt); - if(!m_fastAnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + m_SampleCt)) - return -1; - return PitchTrackerAKF::GetTone(AnaylsisBuf, m_SampleCt, maxVolume, weights); -} - -void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ - PitchTrackerAKF::Init(baseToneFrequency, minHalfTone, maxHalfTone); -} - -void PtFast_DeInit(){ - PitchTrackerAKF::DeInit(); -} - -int PtFast_GetTone(short* samples, int sampleCt, double* maxVolume, float* weights){ - if(sampleCt <= 0) - return -1; - double* dataDouble = short2DoubleArray(samples, sampleCt, false); - int result = PitchTrackerAKF::GetTone(dataDouble, sampleCt, maxVolume, weights, true); - freeDoubleArray(dataDouble); - return result; -} - -AnalyzerExt* Analyzer_Create(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step){ - return new AnalyzerExt(baseToneFrequency, minHalfTone, maxHalfTone, step); -} - -void Analyzer_Free(AnalyzerExt* analyzer){ +void Analyzer_Free(Analyzer* analyzer){ if(analyzer) delete analyzer; } -void Analyzer_InputFloat(AnalyzerExt* analyzer, float* data, int sampleCt){ +void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt){ if(sampleCt == 0 || !analyzer) return; analyzer->input(data, data + sampleCt); } -void Analyzer_InputShort(AnalyzerExt* analyzer, short* data, int sampleCt){ +void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt){ if(sampleCt == 0 || !analyzer) return; float* dataFloat = short2FloatArray(data, sampleCt); @@ -60,45 +25,64 @@ void Analyzer_InputShort(AnalyzerExt* analyzer, short* data, int sampleCt){ freeFloatArray(dataFloat); } -void Analyzer_InputByte(AnalyzerExt* analyzer, char* data, int sampleCt){ - if(sampleCt == 0 || !analyzer) +void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt){ + if(sampleCt <= 0 || !analyzer) return; float* dataFloat = short2FloatArray(static_cast(static_cast(data)), sampleCt); analyzer->input(dataFloat, dataFloat + sampleCt); freeFloatArray(dataFloat); } -void Analyzer_Process(AnalyzerExt* analyzer){ +void Analyzer_Process(Analyzer* analyzer){ if(!analyzer) return; analyzer->process(); } -double Analyzer_GetPeak(AnalyzerExt* analyzer){ +double Analyzer_GetPeak(Analyzer* analyzer){ if(!analyzer) return -999; return analyzer->getPeak(); } -double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq){ +double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq){ if(!analyzer) return -1; const Tone* tone = analyzer->findTone(minFreq, maxFreq); return (tone == NULL) ? -1 : FreqToNote(tone->freq); } -int Analyzer_GetNoteFast(AnalyzerExt* analyzer, double* maxVolume, float* weights){ - if(!analyzer) - return -1; - return analyzer->GetNoteFast(maxVolume, weights); -} - -bool Analyzer_OutputFloat(AnalyzerExt* analyzer, float* data, int sampleCt, float rate){ +bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate){ if(!analyzer) return false; return analyzer->output(data, data + sampleCt, rate); } +DllExport PtAKF* PtAKF_Create(){ + return new PtAKF(); +} + +DllExport void PtAKF_Free(PtAKF* analyzer){ + if(analyzer) + delete analyzer; +} + +DllExport int PtAKF_GetNumHalfTones(){ + return PtAKF::GetNumHalfTones(); +} + +DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ + if(sampleCt <= 0 || !analyzer) + return; + short* dataShort = static_cast(static_cast(data)); + analyzer->input(dataShort, dataShort + sampleCt); +} + +DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights){ + if(!analyzer) + return -1; + return analyzer->GetNote(maxVolume, weights); +} /* namespace Native{ diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index f22771ba..d3039bc9 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -1,37 +1,25 @@ #pragma once #include "performous/pitch.hh" +#include "ptAKF.h" #define DllExport extern "C" __declspec(dllexport) -class AnalyzerExt: public Analyzer{ -public: - AnalyzerExt(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step = 200); - ~AnalyzerExt(); - template void input(InIt begin, InIt end){ - m_fastAnalysisBuf.insert(begin, end); - Analyzer::input(begin, end); - } - int GetNoteFast(double* maxVolume, float* weights); -private: - constexpr static size_t m_SampleCt = 4096; - RingBuffer m_fastAnalysisBuf; // Buffer used for fast analysis instead of FFT -}; +DllExport Analyzer* Analyzer_Create(unsigned step); +DllExport void Analyzer_Free(Analyzer* analyzer); +DllExport void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt); +DllExport void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt); +DllExport void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt); +DllExport void Analyzer_Process(Analyzer* analyzer); +DllExport double Analyzer_GetPeak(Analyzer* analyzer); +DllExport double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq); +DllExport bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate); -DllExport void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); -DllExport void PtFast_DeInit(); -DllExport int PtFast_GetTone(short* samples, int sampleCt, float* weights); - -DllExport AnalyzerExt* Analyzer_Create(double baseToneFrequency, int minHalfTone, int maxHalfTone, unsigned step); -DllExport void Analyzer_Free(AnalyzerExt* analyzer); -DllExport void Analyzer_InputFloat(AnalyzerExt* analyzer, float* data, int sampleCt); -DllExport void Analyzer_InputShort(AnalyzerExt* analyzer, short* data, int sampleCt); -DllExport void Analyzer_InputByte(AnalyzerExt* analyzer, char* data, int sampleCt); -DllExport void Analyzer_Process(AnalyzerExt* analyzer); -DllExport double Analyzer_GetPeak(AnalyzerExt* analyzer); -DllExport int Analyzer_GetNoteFast(AnalyzerExt* analyzer, double* maxVolume, float* weights); -DllExport double Analyzer_FindNote(AnalyzerExt* analyzer, double minFreq, double maxFreq); -DllExport bool Analyzer_OutputFloat(AnalyzerExt* analyzer, float* data, int sampleCt, float rate); +DllExport PtAKF* PtAKF_Create(); +DllExport void PtAKF_Free(PtAKF* analyzer); +DllExport int PtAKF_GetNumHalfTones(); +DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt); +DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights); /* public ref class CTone { @@ -74,7 +62,7 @@ public: String^ GetId(); private: - AnalyzerExt* m_analyzer; + Analyzer* m_analyzer; String^ m_id; }; diff --git a/PitchTracker/pdaAKF.h b/PitchTracker/pdaAKF.h deleted file mode 100644 index 6341e973..00000000 --- a/PitchTracker/pdaAKF.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -// A pitch detection that is based on the AKF and AMDF (initially from original Vocaluxe/USDx) -namespace PitchTrackerAKF{ - void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); - void DeInit(); - template int GetTone(T *samples, int sampleCt, double* maxVolume, float *weights, bool scale = false); - - typedef void (__stdcall * LogCallback)(const char* text); - static LogCallback Log; - void SetLogCallback(LogCallback Callback); -} diff --git a/PitchTracker/pdaAKF.cpp b/PitchTracker/ptAKF.cpp similarity index 57% rename from PitchTracker/pdaAKF.cpp rename to PitchTracker/ptAKF.cpp index 460a74b9..fd272a6f 100644 --- a/PitchTracker/pdaAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -13,28 +13,112 @@ // You should have received a copy of the GNU General Public License // along with Vocaluxe. If not, see . -#include "pdaAKF.h" +#include "ptAKF.h" #include -#include -#include -#include + +static constexpr double BaseToneFrequency = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) +static constexpr double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) +int PtAKF::_InitCount = 0; +float* PtAKF::_SamplesPerPeriodPerTone = NULL; + +PtAKF::PtAKF(){ + _InitCount++; + if(_InitCount == 1){ + _SamplesPerPeriodPerTone = new float[_MaxHalfTone + 1]; + //Init Array to avoid costly calculations + for (int toneIndex = 0; toneIndex <= _MaxHalfTone; toneIndex++) + { + double freq = BaseToneFrequency * pow(HalftoneBase, toneIndex); + _SamplesPerPeriodPerTone[toneIndex] = static_cast(44100.0 / freq); // samples in one period + } + } +} + +PtAKF::~PtAKF(){ + _InitCount--; + if(!_InitCount){ + delete[] _SamplesPerPeriodPerTone; + _SamplesPerPeriodPerTone = NULL; + } +} + +int PtAKF::GetNote(double* maxVolume, float* weights){ + float AnaylsisBuf[_SampleCt]; + size_t size = _AnalysisBuf.size(); + if(size > _SampleCt) + _AnalysisBuf.pop(size - _SampleCt); + if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)) + return -1; + return _GetNote(AnaylsisBuf, maxVolume, weights); +} + +int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ + float maxVolumeL = 0; + for(int i = 0; i < _SampleCt; i++){ + float vol = abs(samples[i]); + if(vol > maxVolumeL) + maxVolumeL = vol; + } + maxVolumeL /= 32767.; + *maxVolume = maxVolumeL; + + float maxWeight = -1; + float minWeight = 1; + int maxTone = -1; + for (int toneIndex = _MinHalfTone; toneIndex <= _MaxHalfTone; toneIndex++) + { + float curWeight = _AnalyzeToneFunc(samples, toneIndex); + + if (curWeight > maxWeight) + { + maxWeight = curWeight; + maxTone = toneIndex; + } + + if (curWeight < minWeight) + minWeight = curWeight; + + weights[toneIndex - _MinHalfTone] = curWeight; + } + + if(maxWeight - minWeight > 0.01){ + return maxTone; + }else return -1; +} + +float PtAKF::_AnalyzeToneFunc(float* samples, int toneIndex){ + // Use method by Kobayashi and Shimamura (1995): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 + + float samplesPerPeriodD = _SamplesPerPeriodPerTone[toneIndex]; // samples in one period + int samplesPerPeriod = static_cast(samplesPerPeriodD); + float fHigh = samplesPerPeriodD - samplesPerPeriod; + float fLow = 1.0f - fHigh; + + float accumDistAKF = 0; // accumulated distances + float accumDistAMDF = 0; // accumulated distances + + // compare correlating samples + int sampleIndex = 0; // index of sample to analyze + // Start value= index of sample one period ahead + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _SampleCt; correlatingSampleIndex++, sampleIndex++) + { + // calc distance to corresponding sample in next period + float xn = samples[sampleIndex]; + float xnt = samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh; + accumDistAKF += xn * xnt; + accumDistAMDF += abs(xn - xnt); + } + + accumDistAKF /= _SampleCt; + accumDistAMDF /= sampleIndex; + + return accumDistAKF / (accumDistAMDF * 32767.f + 32767.f); // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once +} +/* + + namespace PitchTrackerAKF{ - - static void doLog(const char* msg,...){ - va_list argptr = NULL; - va_start(argptr, msg); - - char buffer[200]; - vsprintf_s(buffer,msg, argptr); - if(Log) Log(buffer); - va_end(argptr); - } - - void SetLogCallback(LogCallback Callback){ - Log=Callback; - } - static double *SamplesPerPeriodPerTone = NULL; static double BaseToneFrequency = -1; static int MinHalfTone = -1, MaxHalfTone = -1; @@ -138,4 +222,5 @@ namespace PitchTrackerAKF{ template int GetTone(float *samples, int sampleCt, double* maxVolume, float *weights, bool scale); template int GetTone(double *samples, int sampleCt, double* maxVolume, float *weights, bool scale); -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h new file mode 100644 index 00000000..240e7aa7 --- /dev/null +++ b/PitchTracker/ptAKF.h @@ -0,0 +1,27 @@ +#pragma once +#include "performous/pitch.hh" + +// A pitch detection that is based on the AKF and AMDF (initially from original Vocaluxe/USDx) +class PtAKF{ +public: + PtAKF(); + ~PtAKF(); + + void input(short* begin, short* end){ + _AnalysisBuf.insert(begin, end); + } + + int GetNote(double* maxVolume, float* weights); + static int GetNumHalfTones(){ return _MaxHalfTone - _MinHalfTone + 1;} +private: + static int _InitCount; + static float* _SamplesPerPeriodPerTone; + static constexpr int _MinHalfTone = 0; //C2 + static constexpr int _MaxHalfTone = 47; //B5 + + constexpr static size_t _SampleCt = 4096; + RingBuffer<_SampleCt * 2> _AnalysisBuf; + + static int _GetNote(float* samples, double* maxVolume, float* weights); + static float _AnalyzeToneFunc(float* samples, int toneIndex); +}; \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs index 426572d0..39d79f00 100644 --- a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs @@ -3,11 +3,15 @@ using System.Runtime.InteropServices; namespace Vocaluxe.Lib.Sound.Record { + /// + /// Analyzer from Performous + /// Should be very reliable but needs some proof (artificial tests show some errors) + /// class CAnalyzer : IDisposable { #region Imports [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr Analyzer_Create(double baseToneFrequency, int minHalfTone, int maxHalfTone, uint step = 200); + private static extern IntPtr Analyzer_Create(uint step = 200); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void Analyzer_Free(IntPtr analyzer); @@ -27,9 +31,6 @@ namespace Vocaluxe.Lib.Sound.Record [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern double Analyzer_GetPeak(IntPtr analyzer); - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern int Analyzer_GetNoteFast(IntPtr analyzer, [Out] out double maxVolume, [Out] float[] weights); - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern double Analyzer_FindNote(IntPtr analyzer, double minFreq, double maxFreq); @@ -39,9 +40,9 @@ namespace Vocaluxe.Lib.Sound.Record private IntPtr _Instance; - public CAnalyzer(double baseToneFrequency, int minHalfTone, int maxHalfTone, uint step = 200) + public CAnalyzer(uint step = 200) { - _Instance = Analyzer_Create(baseToneFrequency, minHalfTone, maxHalfTone, step); + _Instance = Analyzer_Create(step); } ~CAnalyzer() @@ -79,11 +80,6 @@ namespace Vocaluxe.Lib.Sound.Record return Analyzer_FindNote(_Instance, minFreq, maxFreq); } - public int GetNoteFast(out double maxVolume, float[] weights) - { - return Analyzer_GetNoteFast(_Instance, out maxVolume, weights); - } - public bool Output(float[] data, float rate) { return Analyzer_OutputFloat(_Instance, data, data.Length, rate); @@ -104,22 +100,63 @@ namespace Vocaluxe.Lib.Sound.Record } } - static class CFastAnalyzer + /// + /// Pitchtracker (Pt) that uses autocorrelation (AKF) and AMDF + /// Quite fast and perfect in artificial tests, but may fail in real world scenarios (e.g. missing fundamental) + /// + class CPtAKF : IDisposable { #region Imports - [DllImport("PitchTracker.dll", EntryPoint = "PtFast_Init", CallingConvention = CallingConvention.Cdecl)] - public static extern void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr PtAKF_Create(); - [DllImport("PitchTracker.dll", EntryPoint = "PtFast_DeInit", CallingConvention = CallingConvention.Cdecl)] - public static extern void DeInit(); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtAKF_Free(IntPtr analyzer); - [DllImport("PitchTracker.dll", EntryPoint = "PtFast_GetTone", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtFast_GetTone([In] short[] samples, int sampleCt, [Out] out double maxVolume, [Out] float[] weights); + [DllImport("PitchTracker.dll", EntryPoint = "PtAKF_GetNumHalfTones", CallingConvention = CallingConvention.Cdecl)] + public static extern int GetNumHalfTones(); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtAKF_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtAKF_GetNote(IntPtr analyzer, [Out] out double maxVolume, [Out] float[] weights); #endregion - public static int GetTone(short[] samples, out double maxVolume, float[] weights) + private IntPtr _Instance; + + public CPtAKF() { - return PtFast_GetTone(samples, samples.Length, out maxVolume, weights); + _Instance = PtAKF_Create(); + } + + ~CPtAKF() + { + _Dispose(false); + } + + public void Input(byte[] data) + { + PtAKF_InputByte(_Instance, data, data.Length / 2); + } + + public int GetNote(out double maxVolume, float[] weights) + { + return PtAKF_GetNote(_Instance, out maxVolume, weights); + } + + private void _Dispose(bool disposing) + { + if (_Instance == IntPtr.Zero) + throw new ObjectDisposedException(GetType().Name); + PtAKF_Free(_Instance); + _Instance = IntPtr.Zero; + } + + public void Dispose() + { + _Dispose(true); + GC.SuppressFinalize(this); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 6b4db2f8..f2114109 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -29,22 +29,19 @@ namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { +#if TEST_PITCH //Half tones: C C♯ D D# E F F♯ G G♯ A A# B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) -#if TEST_PITCH private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) #endif - private const int _HalfToneMin = 0; // C2 - private const int _HalfToneMax = 38; //45; // inclusive, 38=D5; 45=A5 - public const int NumHalfTones = _HalfToneMax - _HalfToneMin + 1; //Number of halftones to analyze - private CAnalyzer _Analyzer = new CAnalyzer(_BaseToneFreq, _HalfToneMin, _HalfToneMax); + private CPtAKF _Analyzer = new CPtAKF(); private double _MaxVolume; public CBuffer() { MinVolume = 0.02f; - ToneWeigths = new float[NumHalfTones]; + ToneWeigths = new float[GetNumHalfTones()]; Reset(); #if TEST_PITCH _TestPitchDetection(); @@ -56,6 +53,11 @@ namespace Vocaluxe.Lib.Sound.Record _Dispose(); } + public static int GetNumHalfTones() + { + return CPtAKF.GetNumHalfTones(); + } + public int ToneAbs { get; private set; } public int Tone { get; set; } @@ -98,7 +100,7 @@ namespace Vocaluxe.Lib.Sound.Record { //_Analyzer.Process(); //_MaxVolume = _Analyzer.GetPeak() / 43 + 1; - int tone = _Analyzer.GetNoteFast(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // + int tone = _Analyzer.GetNote(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // if (tone >= 0 && _MaxVolume >= MinVolume) { ToneAbs = tone; @@ -142,7 +144,7 @@ namespace Vocaluxe.Lib.Sound.Record if (_PitchTestRun) return; _PitchTestRun = true; - int toneFrom = Math.Max(0, _HalfToneMin); + int toneFrom = 0; const int toneTo = 47; //B5 Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); byte[] data; diff --git a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs index 074a7711..f68fc268 100644 --- a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs +++ b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs @@ -132,7 +132,7 @@ namespace Vocaluxe.Lib.Sound.Record public int NumHalfTones() { - return CBuffer.NumHalfTones; + return CBuffer.GetNumHalfTones(); } public float[] ToneWeigth(int player) From 614a7e0ed2b97877e7c384e77d4b95a2ee172572 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 31 Mar 2014 17:55:31 +0200 Subject: [PATCH 073/116] Add step size --- PitchTracker/PitchWrapper.cpp | 4 ++-- PitchTracker/PitchWrapper.h | 2 +- PitchTracker/ptAKF.cpp | 4 +++- PitchTracker/ptAKF.h | 3 ++- Vocaluxe/Lib/Sound/Record/CAnalyzer.cs | 6 +++--- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 4fc47b4c..3d725b15 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -58,8 +58,8 @@ bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float r return analyzer->output(data, data + sampleCt, rate); } -DllExport PtAKF* PtAKF_Create(){ - return new PtAKF(); +DllExport PtAKF* PtAKF_Create(unsigned step){ + return new PtAKF(step); } DllExport void PtAKF_Free(PtAKF* analyzer){ diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index d3039bc9..08f32eed 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -15,7 +15,7 @@ DllExport double Analyzer_GetPeak(Analyzer* analyzer); DllExport double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq); DllExport bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate); -DllExport PtAKF* PtAKF_Create(); +DllExport PtAKF* PtAKF_Create(unsigned step); DllExport void PtAKF_Free(PtAKF* analyzer); DllExport int PtAKF_GetNumHalfTones(); DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt); diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index fd272a6f..b5e8bccb 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -21,7 +21,7 @@ static constexpr double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBas int PtAKF::_InitCount = 0; float* PtAKF::_SamplesPerPeriodPerTone = NULL; -PtAKF::PtAKF(){ +PtAKF::PtAKF(unsigned step){ _InitCount++; if(_InitCount == 1){ _SamplesPerPeriodPerTone = new float[_MaxHalfTone + 1]; @@ -32,6 +32,7 @@ PtAKF::PtAKF(){ _SamplesPerPeriodPerTone[toneIndex] = static_cast(44100.0 / freq); // samples in one period } } + _Step = step; } PtAKF::~PtAKF(){ @@ -49,6 +50,7 @@ int PtAKF::GetNote(double* maxVolume, float* weights){ _AnalysisBuf.pop(size - _SampleCt); if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)) return -1; + _AnalysisBuf.pop(_Step); return _GetNote(AnaylsisBuf, maxVolume, weights); } diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index 240e7aa7..8ddc7c97 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -4,7 +4,7 @@ // A pitch detection that is based on the AKF and AMDF (initially from original Vocaluxe/USDx) class PtAKF{ public: - PtAKF(); + PtAKF(unsigned step); ~PtAKF(); void input(short* begin, short* end){ @@ -21,6 +21,7 @@ private: constexpr static size_t _SampleCt = 4096; RingBuffer<_SampleCt * 2> _AnalysisBuf; + unsigned _Step; static int _GetNote(float* samples, double* maxVolume, float* weights); static float _AnalyzeToneFunc(float* samples, int toneIndex); diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs index 39d79f00..e4e5807c 100644 --- a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs @@ -108,7 +108,7 @@ namespace Vocaluxe.Lib.Sound.Record { #region Imports [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr PtAKF_Create(); + private static extern IntPtr PtAKF_Create(uint step); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void PtAKF_Free(IntPtr analyzer); @@ -125,9 +125,9 @@ namespace Vocaluxe.Lib.Sound.Record private IntPtr _Instance; - public CPtAKF() + public CPtAKF(uint step = 200) { - _Instance = PtAKF_Create(); + _Instance = PtAKF_Create(step); } ~CPtAKF() From d584206a7fe6c10caa6ff58f78ce4076688f4437 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 9 Apr 2014 18:28:35 +0200 Subject: [PATCH 074/116] Fix bugs in AKF detection Add CWavFile.cs for reading wav files Add more test cases --- PitchTracker/Helper.h | 4 +- PitchTracker/PitchWrapper.cpp | 6 +- PitchTracker/TestSounds.rar | Bin 0 -> 840777 bytes PitchTracker/ptAKF.cpp | 93 ++++++++- PitchTracker/ptAKF.h | 9 +- Vocaluxe/Base/CLog.cs | 3 + Vocaluxe/Lib/Sound/Record/CBuffer.cs | 130 +++++++++++- VocaluxeLib/Utils/CWavFile.cs | 295 +++++++++++++++++++++++++++ VocaluxeLib/VocaluxeLib.csproj | 1 + 9 files changed, 524 insertions(+), 17 deletions(-) create mode 100644 PitchTracker/TestSounds.rar create mode 100644 VocaluxeLib/Utils/CWavFile.cs diff --git a/PitchTracker/Helper.h b/PitchTracker/Helper.h index ae13e309..1c27221c 100644 --- a/PitchTracker/Helper.h +++ b/PitchTracker/Helper.h @@ -4,7 +4,7 @@ #include float* short2FloatArray(short* in, size_t len){ - const float maxShort = 32768.0; //maximum abs value of a short + const float maxShort = 32767.0; float* result = static_cast(malloc(len * sizeof(float))); float* curOut = result; @@ -17,7 +17,7 @@ float* short2FloatArray(short* in, size_t len){ } double* short2DoubleArray(short* in, size_t len, bool scale = true){ - const double maxShort = 32768.0; //maximum abs value of a short + const double maxShort = 32767.0; double* result = static_cast(malloc(len * sizeof(double))); double* curOut = result; diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 3d725b15..d0f6d1f4 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -75,7 +75,11 @@ DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ if(sampleCt <= 0 || !analyzer) return; short* dataShort = static_cast(static_cast(data)); - analyzer->input(dataShort, dataShort + sampleCt); + float* dataFloat = short2FloatArray(static_cast(static_cast(data)), sampleCt); + analyzer->input(dataFloat, dataFloat + sampleCt); + freeFloatArray(dataFloat); + + //analyzer->input(dataShort, dataShort + sampleCt); } DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights){ diff --git a/PitchTracker/TestSounds.rar b/PitchTracker/TestSounds.rar new file mode 100644 index 0000000000000000000000000000000000000000..463321f4f86fef1b6f471e439bcc5a0f16fe9d5d GIT binary patch literal 840777 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

    1GPmGygE`U%PCJUfi5@lzGCDU`Qkx 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

    LmfnjM_fuCtASp{ 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 F2LP7xK#BkW literal 0 HcmV?d00001 diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index b5e8bccb..d8a73088 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -24,9 +24,9 @@ float* PtAKF::_SamplesPerPeriodPerTone = NULL; PtAKF::PtAKF(unsigned step){ _InitCount++; if(_InitCount == 1){ - _SamplesPerPeriodPerTone = new float[_MaxHalfTone + 1]; + _SamplesPerPeriodPerTone = new float[_MaxHalfTone + 1 + _HalfTonesAdd]; //Init Array to avoid costly calculations - for (int toneIndex = 0; toneIndex <= _MaxHalfTone; toneIndex++) + for (int toneIndex = 0; toneIndex <= _MaxHalfTone + _HalfTonesAdd; toneIndex++) { double freq = BaseToneFrequency * pow(HalftoneBase, toneIndex); _SamplesPerPeriodPerTone[toneIndex] = static_cast(44100.0 / freq); // samples in one period @@ -61,12 +61,23 @@ int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ if(vol > maxVolumeL) maxVolumeL = vol; } - maxVolumeL /= 32767.; + //maxVolumeL /= 32767.; *maxVolume = maxVolumeL; + //Scale the samples to have a peak of 1 to better decide between voiced/unvoiced + //float scaleVal = 1 / maxVolumeL; + //for(int i = 0; i < _SampleCt; i++){ + // samples[i] *= scaleVal; + //} + float maxWeight = -1; float minWeight = 1; int maxTone = -1; + + //Attention: We have a peak at lag 0 that might stretch that far, that we detect a wrong "peak" at _MaxHalfTone + //Because of that we filter out all tones that are past the last zero crossing from below but keep tones with decreasing weights (going towards zero crossing from above) + int lastValidTone = 0; + float lastWeight = 1.f; for (int toneIndex = _MinHalfTone; toneIndex <= _MaxHalfTone; toneIndex++) { float curWeight = _AnalyzeToneFunc(samples, toneIndex); @@ -81,18 +92,61 @@ int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ minWeight = curWeight; weights[toneIndex - _MinHalfTone] = curWeight; + + //Filter: + if(lastWeight > curWeight || (lastWeight > 0.f && curWeight <= 0.f)) + lastValidTone = toneIndex - 1; + lastWeight = curWeight; } - if(maxWeight - minWeight > 0.01){ + if(maxTone==_MaxHalfTone){ + //We might have caught the lag 0 peak so go a bit further to check for other zero crossings (or we won't be able to detect _MaxHalfTone) + float lastWeight = _FastAKF(samples, _SamplesPerPeriodPerTone[_MaxHalfTone]); + for(int toneIndex = _MaxHalfTone+1; toneIndex <= _MaxHalfTone + _HalfTonesAdd; toneIndex++){ + float curWeight = _FastAKF(samples, _SamplesPerPeriodPerTone[toneIndex]); + if(lastWeight > curWeight || (lastWeight > 0.f && curWeight <= 0.f)){ + lastValidTone = toneIndex - 1; + break; + } + lastWeight = curWeight; + } + if(lastValidTone < maxTone){ + maxWeight = -1.f; + minWeight = 1.f; + for(int toneIndex = _MinHalfTone; toneIndex <= lastValidTone; toneIndex++){ + float curWeight = weights[toneIndex-_MinHalfTone]; + if (curWeight > maxWeight) + { + maxWeight = curWeight; + maxTone = toneIndex; + } + + if (curWeight < minWeight) + minWeight = curWeight; + } + //Set all invalid weights to 0 + for(int toneIndex = lastValidTone + 1;toneIndex < _MaxHalfTone; toneIndex++){ + weights[toneIndex - _MinHalfTone]=0.f; + } + } + } + + float energy = _FastAKF(samples, 0); + float maxAKF = _FastAKF(samples, _SamplesPerPeriodPerTone[maxTone]); + //printf("%g %g\n",energy, maxAKF); + + //if(maxWeight - minWeight > 0.025){ + if(maxAKF >= 0.3 * energy){ return maxTone; }else return -1; } float PtAKF::_AnalyzeToneFunc(float* samples, int toneIndex){ - // Use method by Kobayashi and Shimamura (1995): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 + // Use method by Kobayashi and Shimamura (2001): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 float samplesPerPeriodD = _SamplesPerPeriodPerTone[toneIndex]; // samples in one period int samplesPerPeriod = static_cast(samplesPerPeriodD); + int maxSampleCt = static_cast(_SamplesPerPeriodPerTone[0]); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; @@ -114,7 +168,34 @@ float PtAKF::_AnalyzeToneFunc(float* samples, int toneIndex){ accumDistAKF /= _SampleCt; accumDistAMDF /= sampleIndex; - return accumDistAKF / (accumDistAMDF * 32767.f + 32767.f); // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once + //return accumDistAKF / (accumDistAMDF * 32767.f + 32767.f * 32767.f); // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once + float result = accumDistAKF / (accumDistAMDF + 1.f); + return result; // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once + //{toneIndex}: {accumDistAKF} ; {accumDistAMDF}; {result} +} + +float PtAKF::_FastAKF(float* samples, float samplesPerPeriodD){ + // Do a fast, non-scaled AKF (used for Lag 0 peak removal) + + int samplesPerPeriod = static_cast(samplesPerPeriodD); + int maxSampleCt = static_cast(_SamplesPerPeriodPerTone[0]); + float fHigh = samplesPerPeriodD - samplesPerPeriod; + float fLow = 1.0f - fHigh; + + float accumDistAKF = 0; // accumulated distances + + // compare correlating samples + int sampleIndex = 0; // index of sample to analyze + // Start value= index of sample one period ahead + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _SampleCt; correlatingSampleIndex++, sampleIndex++) + { + // calc distance to corresponding sample in next period + float xn = samples[sampleIndex]; + float xnt = samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh; + accumDistAKF += xn * xnt; + } + + return accumDistAKF; } /* diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index 8ddc7c97..6d5fd609 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -7,7 +7,8 @@ public: PtAKF(unsigned step); ~PtAKF(); - void input(short* begin, short* end){ + /** Add input data to buffer. This is thread-safe (against other functions). **/ + template void input(InIt begin, InIt end) { _AnalysisBuf.insert(begin, end); } @@ -17,12 +18,14 @@ private: static int _InitCount; static float* _SamplesPerPeriodPerTone; static constexpr int _MinHalfTone = 0; //C2 - static constexpr int _MaxHalfTone = 47; //B5 + static constexpr int _MaxHalfTone = 55;//47; //B5 + static constexpr int _HalfTonesAdd = 4; //Additonal half tones to analyze to remove the peak at lag 0 - constexpr static size_t _SampleCt = 4096; + constexpr static size_t _SampleCt = 2048; RingBuffer<_SampleCt * 2> _AnalysisBuf; unsigned _Step; static int _GetNote(float* samples, double* maxVolume, float* weights); static float _AnalyzeToneFunc(float* samples, int toneIndex); + static float _FastAKF(float* samples, float samplesPerPeriodD); }; \ No newline at end of file diff --git a/Vocaluxe/Base/CLog.cs b/Vocaluxe/Base/CLog.cs index a0484670..f90b7043 100644 --- a/Vocaluxe/Base/CLog.cs +++ b/Vocaluxe/Base/CLog.cs @@ -164,6 +164,9 @@ namespace Vocaluxe.Base public static void LogDebug(string text) { _DebugLog.Add(String.Format("{0:HH:mm:ss.ffff}", DateTime.Now) + ":" + text); +#if DEBUG + Console.WriteLine(text); +#endif } public static void LogSongInfo(string text) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index f2114109..394af07b 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -19,9 +19,12 @@ using System; #if TEST_PITCH +using System.Collections.Generic; +using System.IO; using System.Windows.Forms; using System.Diagnostics; using VocaluxeLib; +using VocaluxeLib.Utils; #endif @@ -30,11 +33,12 @@ namespace Vocaluxe.Lib.Sound.Record class CBuffer : IDisposable { #if TEST_PITCH - //Half tones: C C♯ D D# E F F♯ G G♯ A A# B + //Half tones: C C# D D# E F F# G G# A A# B private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) #endif private CPtAKF _Analyzer = new CPtAKF(); + private CAnalyzer _Analyzer2 = new CAnalyzer(); private double _MaxVolume; @@ -94,11 +98,12 @@ namespace Vocaluxe.Lib.Sound.Record //if (assigned(fVoiceStream)) then //fVoiceStream.WriteData(Buffer, BufferSize); _Analyzer.Input(buffer); + _Analyzer2.Input(buffer); } public void AnalyzeBuffer() { - //_Analyzer.Process(); + _Analyzer2.Process(); //_MaxVolume = _Analyzer.GetPeak() / 43 + 1; int tone = _Analyzer.GetNote(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // if (tone >= 0 && _MaxVolume >= MinVolume) @@ -132,7 +137,7 @@ namespace Vocaluxe.Lib.Sound.Record private static string _ToneToNote(int tone, bool withOctave = true) { tone += 24; - string[] notes = {"C", "C♯", "D", "D#", "E", "F", "F♯", "G", "G♯", "A", "A#", "B"}; + string[] notes = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"}; string result = notes[tone % 12]; if (withOctave) result += (tone / 12); @@ -145,11 +150,12 @@ namespace Vocaluxe.Lib.Sound.Record return; _PitchTestRun = true; int toneFrom = 0; - const int toneTo = 47; //B5 + const int toneTo = -1; // 47; //B5 Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); byte[] data; byte[] data2 = new byte[2048]; int ok = 0; + int tests = 0; double angle = 0; for (int distort = 0; distort < 10; distort++) { @@ -167,11 +173,30 @@ namespace Vocaluxe.Lib.Sound.Record if (!ToneValid) CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " not detected (Distortion: " + distort + ")"); else if (Tone != tone % 12) + { CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " wrongly detected as " + _ToneToNote(Tone, false) + " (Distortion: " + distort + ")"); + CWavFile file = new CWavFile(); + file.Create(tone + "-" + distort + ".wav", 1, 44100, 16); + file.Write16BitSamples(data, 1); + file.Close(); + } else ok++; + tests++; } } + if (_TestFile("toneG3.wav", 19)) + ok++; + tests++; + if (_TestFile("toneG3Miss.wav", 19)) + ok++; + tests++; + if (_TestFile("toneG4.wav", 31)) + ok++; + tests++; + _TestFile("whistling3.wav", "whistling3.txt", ref tests, ref ok); + _TestFile("sClausVoc.wav", "sClausVoc.txt", ref tests, ref ok); + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); Stopwatch sw = new Stopwatch(); sw.Start(); @@ -182,13 +207,108 @@ namespace Vocaluxe.Lib.Sound.Record AnalyzeBuffer(); } sw.Stop(); - string msg = "Analyser: Errors: " + ((toneTo - toneFrom + 1) * 10 - ok) + "; Speed: " + + string msg = "Analyser: Errors: " + (tests - ok) + "/" + tests + "; Speed: " + (int)(repeats / (sw.ElapsedMilliseconds / 1000.0)) + " buffers/s"; Console.WriteLine(msg); MessageBox.Show(msg); Reset(); } + private struct STimedNote + { + public int Time, Note; + } + + private void _TestFile(string fileName, string testFileName, ref int ct, ref int ok) + { + if (!File.Exists(testFileName)) + { + ok = ct = 0; + return; + } + List tones = new List(); + using (StreamReader reader = new StreamReader(testFileName)) + { + String line; + while ((line = reader.ReadLine()) != null) + { + int p = line.IndexOf(' '); + if (p < 0) + continue; + STimedNote note; + note.Time = int.Parse(line.Substring(0, p)); + note.Note = int.Parse(line.Substring(p + 1)); + tones.Add(note); + } + } + _TestFile(fileName, tones, ref ct, ref ok); + } + + private bool _TestFile(string fileName, int tone) + { + STimedNote note; + note.Note = tone; + note.Time = 46; + List tones = new List {note}; + int ct = 0; + int ok = 0; + _TestFile(fileName, tones, ref ct, ref ok); + return ok >= ct - 4; + } + + private void _TestFile(string fileName, IList tones, ref int ct, ref int ok) + { + CWavFile wavFile = new CWavFile(); + try + { + if (!wavFile.Open(fileName)) + return; + if (wavFile.BitsPerSample != 16) + { + wavFile.Close(); + return; + } + int samplesRead = 0; + int curTimeIndex = -1; + int curNote = -1; + const int maxSamplesPerBatch = 512; + while (wavFile.NumSamplesLeft / wavFile.NumChannels > maxSamplesPerBatch) + { + byte[] samples = wavFile.GetNextSamples16BitAsBytes(maxSamplesPerBatch, 1); + samplesRead += samples.Length / 2; + int time = samplesRead * 1000 / wavFile.SampleRate; + ProcessNewBuffer(samples); + AnalyzeBuffer(); + while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) + { + curTimeIndex++; + curNote = tones[curTimeIndex].Note; + } + if (curNote < 0) + continue; + ct++; + if (!ToneValid) + CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms not detected"); + else if (ToneAbs % 12 != curNote % 12) + CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(ToneAbs)); + else + ok++; + int note2 = (int)Math.Round(_Analyzer2.FindNote()); + if (note2 < 0) + CBase.Log.LogDebug("Note2 " + _ToneToNote(curNote) + " at " + time + "ms not detected"); + else if (note2 % 12 != curNote % 12) + CBase.Log.LogDebug("Note2 " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(note2)); + else + ok++; + } + } + catch (Exception e) + { + Console.WriteLine("Error on file " + fileName + ": " + e); + } + wavFile.Close(); + } + private static short[] _GetDistort(int len, int tone, int type) { short[] sdata = new short[len]; diff --git a/VocaluxeLib/Utils/CWavFile.cs b/VocaluxeLib/Utils/CWavFile.cs new file mode 100644 index 00000000..7dea4478 --- /dev/null +++ b/VocaluxeLib/Utils/CWavFile.cs @@ -0,0 +1,295 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Text; + +namespace VocaluxeLib.Utils +{ + //Simple class to read and write WAV files + public class CWavFile + { + public short NumChannels { get; private set; } + public int SampleRate { get; private set; } + public short BitsPerSample { get; private set; } + public string FileName { get; private set; } + //Unless this is true, all fields are to be considered as invalid + public int DataSize { get; private set; } + //Number of samples (=SampesPerChannel*NumChannels) + public int NumSamples + { + get { return (DataSize / (BitsPerSample / 8)); } + } + public int NumSamplesLeft { get; private set; } + public bool IsOpen { get; private set; } + private int _DataPos; + private FileStream _File; + private bool _IsWritable; + + public CWavFile() + { + IsOpen = false; + } + + ~CWavFile() + { + Debug.Assert(!IsOpen); + Close(); + } + + public void Create(string fileName, short numChannels, int sampleRate, short bitsPerSample) + { + if (IsOpen) + Close(); + _File = new FileStream(fileName, FileMode.Create); + FileName = fileName; + NumChannels = numChannels; + SampleRate = sampleRate; + BitsPerSample = bitsPerSample; + DataSize = 0; + NumSamplesLeft = 0; + IsOpen = true; + _IsWritable = true; + _WriteHeader(); + } + + public void Close() + { + if (!IsOpen) + return; + if (_IsWritable) + { + BinaryWriter writer = new BinaryWriter(_File); + writer.Seek(4, SeekOrigin.Begin); + writer.Write((int)_File.Length - 8); + writer.Seek(_DataPos - 4, SeekOrigin.Begin); + writer.Write(DataSize); + } + _File.Dispose(); + _File = null; + IsOpen = false; + } + + public bool Open(string fileName) + { + if (IsOpen) + Close(); + if (!File.Exists(fileName)) + return false; + FileName = fileName; + _File = new FileStream(FileName, FileMode.Open); + try + { + BinaryReader reader = new BinaryReader(_File); + if (Encoding.ASCII.GetString(reader.ReadBytes(4)) != "RIFF") + return false; + reader.ReadInt32(); //Chunksize (file) + if (Encoding.ASCII.GetString(reader.ReadBytes(4)) != "WAVE") + return false; + long curPos = _File.Position; + if (_SeekTo(reader, "fmt ") < 0) + return false; + short audioFormat = reader.ReadInt16(); + if (audioFormat != 1) //PCM + return false; + NumChannels = reader.ReadInt16(); + SampleRate = reader.ReadInt32(); + int bytesPerSec = reader.ReadInt32(); + short blockAlign = reader.ReadInt16(); + BitsPerSample = reader.ReadInt16(); + if (BitsPerSample != 8 && BitsPerSample != 16) + return false; + if (blockAlign != NumChannels * (BitsPerSample / 8)) + return false; + if (bytesPerSec != blockAlign * SampleRate) + return false; + _File.Position = curPos; + DataSize = _SeekTo(reader, "data"); + if (DataSize <= 0) + return false; + _DataPos = (int)_File.Position; + DataSize = Math.Min(DataSize, (int)_File.Length - _DataPos); + NumSamplesLeft = NumSamples; + } + catch (Exception) + { + _File.Dispose(); + throw; + } + IsOpen = true; + return true; + } + + ///

    + /// Gets an array of numSamples samples per channel for the selected channel(s) + /// + /// Samples per channel + /// Channel for which to get the samples (0=all) + /// + public byte[] GetNextSamples8Bit(int numSamples, int channel = 0) + { + if (channel < 0 || channel > NumChannels || BitsPerSample != 8) + return null; + int samplesPerBlock = (channel == 0 ? NumChannels : 1); + if (NumSamplesLeft < numSamples * samplesPerBlock) + return null; + byte[] result; + BinaryReader reader = new BinaryReader(_File); + if (channel == 0 || NumChannels == 1) + result = reader.ReadBytes(numSamples * samplesPerBlock); + else + { + result = new byte[numSamples]; + for (int i = 0; i < numSamples; i++) + { + _File.Seek(channel - 1, SeekOrigin.Current); + result[i] = reader.ReadByte(); + _File.Seek(NumChannels - channel, SeekOrigin.Current); + } + } + NumSamplesLeft -= numSamples * samplesPerBlock; + return result; + } + + /// + /// Gets an array of numSamples samples per channel for the selected channel(s) + /// + /// Samples per channel + /// Channel for which to get the samples (0=all) + /// + public short[] GetNextSamples16Bit(int numSamples, int channel = 0) + { + if (channel < 0 || channel > NumChannels || BitsPerSample != 16) + return null; + int samplesPerBlock = (channel == 0 ? NumChannels : 1); + if (NumSamplesLeft < numSamples * samplesPerBlock) + return null; + short[] result; + BinaryReader reader = new BinaryReader(_File); + try + { + if (channel == 0 || NumChannels == 1) + { + result = new short[numSamples * NumChannels]; + for (int i = 0; i < numSamples * NumChannels; i++) + result[i] = reader.ReadInt16(); + } + else + { + result = new short[numSamples]; + for (int i = 0; i < numSamples; i++) + { + _File.Seek((channel - 1) * 2, SeekOrigin.Current); + result[i] = reader.ReadInt16(); + _File.Seek((NumChannels - channel) * 2, SeekOrigin.Current); + } + } + NumSamplesLeft -= numSamples * samplesPerBlock; + } + catch (EndOfStreamException e) + { + Console.WriteLine("Error: " + e); + return null; + } + return result; + } + + public byte[] GetNextSamples16BitAsBytes(int numSamples, int channel = 0) + { + short[] samples = GetNextSamples16Bit(numSamples, channel); + if (samples == null) + return null; + byte[] samplesByte = new byte[samples.Length * 2]; + Buffer.BlockCopy(samples, 0, samplesByte, 0, samplesByte.Length); + return samplesByte; + } + + public bool WriteSamples(byte[] samples, int channel = 0) + { + if (!_IsWritable || channel < 0 || channel > NumChannels || BitsPerSample != 8) + return false; + BinaryWriter writer = new BinaryWriter(_File); + if (channel == 0 || NumChannels == 1) + writer.Write(samples); + else + { + foreach (byte sample in samples) + { + _File.Seek(channel - 1, SeekOrigin.Current); + writer.Write(sample); + _File.Seek(NumChannels - channel, SeekOrigin.Current); + } + } + DataSize += samples.Length; + return true; + } + + public bool Write16BitSamples(short[] samples, int channel = 0) + { + if (!_IsWritable || channel < 0 || channel > NumChannels || BitsPerSample != 16) + return false; + BinaryWriter writer = new BinaryWriter(_File); + if (channel == 0 || NumChannels == 1) + { + foreach (short sample in samples) + writer.Write(sample); + } + else + { + foreach (short sample in samples) + { + _File.Seek((channel - 1) * 2, SeekOrigin.Current); + writer.Write(sample); + _File.Seek((NumChannels - channel) * 2, SeekOrigin.Current); + } + } + DataSize += samples.Length * 2; + return true; + } + + public bool Write16BitSamples(byte[] samples, int channel = 0) + { + if (samples.Length == 0) + return true; + short[] samplesShort = new short[samples.Length / 2]; + Buffer.BlockCopy(samples, 0, samplesShort, 0, samples.Length); + return Write16BitSamples(samplesShort, channel); + } + + private void _WriteHeader() + { + if (!IsOpen || !_IsWritable) + return; + BinaryWriter writer = new BinaryWriter(_File); + writer.Write(Encoding.ASCII.GetBytes("RIFF")); + writer.Write(0); + writer.Write(Encoding.ASCII.GetBytes("WAVE")); + writer.Write(Encoding.ASCII.GetBytes("fmt ")); + writer.Write(16); + writer.Write((short)1); // PCM + writer.Write(NumChannels); // Channels + writer.Write(SampleRate); // Sample rate + writer.Write(SampleRate * NumChannels * (BitsPerSample / 8)); // Average bytes per second + writer.Write((short)((BitsPerSample / 8) * NumChannels)); // block align + writer.Write(BitsPerSample); // bits per sample + writer.Write(Encoding.ASCII.GetBytes("data")); + writer.Write(DataSize); + _DataPos = (int)_File.Position; + writer.Seek(4, SeekOrigin.Begin); + writer.Write((int)writer.BaseStream.Length); + writer.Seek(_DataPos, SeekOrigin.Begin); + } + + private static int _SeekTo(BinaryReader reader, string chunkId) + { + do + { + string curChunkId = Encoding.ASCII.GetString(reader.ReadBytes(4)); + int chunkSize = reader.ReadInt32(); + if (curChunkId == chunkId) + return chunkSize; + reader.BaseStream.Seek(chunkSize, SeekOrigin.Current); + } while (reader.BaseStream.Position < reader.BaseStream.Length); + return -1; + } + } +} \ No newline at end of file diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index 22d6a2b1..5a6f5a21 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -188,6 +188,7 @@ + From 6686c1586483e39407ea2d4e128b29769c183189 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 9 Apr 2014 18:41:39 +0200 Subject: [PATCH 075/116] Fix bug with avatar not having filename Use a nicer name for the avatar chooser --- Vocaluxe/Screens/CScreenProfiles.cs | 2 +- VocaluxeLib/Profile/CAvatar.cs | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index 9039f293..106c3a04 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -449,7 +449,7 @@ namespace Vocaluxe.Screens foreach (CAvatar avatar in avatars) { _SelectSlides[_SelectSlideAvatars].AddValue( - Path.GetFileName(avatar.FileName), + avatar.GetDisplayName(), null, avatar.ID, -1); diff --git a/VocaluxeLib/Profile/CAvatar.cs b/VocaluxeLib/Profile/CAvatar.cs index 9418a034..1daba02e 100644 --- a/VocaluxeLib/Profile/CAvatar.cs +++ b/VocaluxeLib/Profile/CAvatar.cs @@ -15,6 +15,8 @@ // along with Vocaluxe. If not, see . #endregion +using System.Diagnostics; +using System.IO; using VocaluxeLib.Draw; namespace VocaluxeLib.Profile @@ -22,8 +24,9 @@ namespace VocaluxeLib.Profile public class CAvatar { public int ID; - private string _FileName = ""; + private readonly string _FileName = ""; private CTexture _Texture; + private const int _MaxNameLen = 12; public CTexture Texture { @@ -42,13 +45,9 @@ namespace VocaluxeLib.Profile private CAvatar(CTexture texture, string fileName, int id = -1) { - ID = id; - } - - public bool LoadFromFile(string fileName) - { + _Texture = texture; _FileName = fileName; - return Reload(); + ID = id; } public bool Reload() @@ -63,5 +62,14 @@ namespace VocaluxeLib.Profile { CBase.Drawing.RemoveTexture(ref _Texture); } + + public string GetDisplayName() + { + string name = Path.GetFileNameWithoutExtension(_FileName); + Debug.Assert(name != null); + if (name.Length > _MaxNameLen) + name = name.Substring(0, _MaxNameLen); + return name; + } } } \ No newline at end of file From 7c380f62f1f2d12369bb025f16271d402865729a Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 11 Apr 2014 22:59:01 +0200 Subject: [PATCH 076/116] Add dywapitchtracker Improvements for PtAKF (finer resolution at end) Bugfix for WavFile --- PitchTracker/Helper.cpp | 43 ++ PitchTracker/Helper.h | 47 +- PitchTracker/PitchTracker.vcxproj | 5 + PitchTracker/PitchTracker.vcxproj.filters | 21 + PitchTracker/PitchWrapper.cpp | 41 +- PitchTracker/PitchWrapper.h | 7 + PitchTracker/dywapitchtrack/DOCUMENTATION.txt | 29 ++ PitchTracker/dywapitchtrack/README.txt | 43 ++ .../dywapitchtrack/dywapitchtrack.cpp | 448 ++++++++++++++++++ PitchTracker/dywapitchtrack/dywapitchtrack.h | 110 +++++ PitchTracker/dywapitchtrack/ptDyWa.cpp | 27 ++ PitchTracker/dywapitchtrack/ptDyWa.h | 22 + PitchTracker/performous/pitch.cc | 20 +- PitchTracker/ptAKF.cpp | 182 +++++-- PitchTracker/ptAKF.h | 38 +- Vocaluxe/Lib/Sound/Record/CAnalyzer.cs | 65 +++ Vocaluxe/Lib/Sound/Record/CBuffer.cs | 50 +- VocaluxeLib/Utils/CWavFile.cs | 17 +- 18 files changed, 1075 insertions(+), 140 deletions(-) create mode 100644 PitchTracker/Helper.cpp create mode 100644 PitchTracker/dywapitchtrack/DOCUMENTATION.txt create mode 100644 PitchTracker/dywapitchtrack/README.txt create mode 100644 PitchTracker/dywapitchtrack/dywapitchtrack.cpp create mode 100644 PitchTracker/dywapitchtrack/dywapitchtrack.h create mode 100644 PitchTracker/dywapitchtrack/ptDyWa.cpp create mode 100644 PitchTracker/dywapitchtrack/ptDyWa.h diff --git a/PitchTracker/Helper.cpp b/PitchTracker/Helper.cpp new file mode 100644 index 00000000..41e00776 --- /dev/null +++ b/PitchTracker/Helper.cpp @@ -0,0 +1,43 @@ +#include "Helper.h" +#include +#include + +float* short2FloatArray(short* in, size_t len){ + const float maxShort = 32767.0; + + float* result = static_cast(malloc(len * sizeof(float))); + float* curOut = result; + for(size_t i=0; i(malloc(len * sizeof(double))); + double* curOut = result; + for(size_t i=0; i -#include -float* short2FloatArray(short* in, size_t len){ - const float maxShort = 32767.0; - - float* result = static_cast(malloc(len * sizeof(float))); - float* curOut = result; - for(size_t i=0; i(malloc(len * sizeof(double))); - double* curOut = result; - for(size_t i=0; i + + + + + diff --git a/PitchTracker/PitchTracker.vcxproj.filters b/PitchTracker/PitchTracker.vcxproj.filters index efd0974f..6e3d94f4 100644 --- a/PitchTracker/PitchTracker.vcxproj.filters +++ b/PitchTracker/PitchTracker.vcxproj.filters @@ -22,6 +22,12 @@ {d71782a0-47fc-4fe1-8569-0a0ce8fe9b45} + + {e8eab624-6cc3-42db-93d9-575aaeff06f7} + + + {2a09cee1-51b7-4c24-aa9f-32bec53c3a36} + @@ -36,6 +42,15 @@ Quelldateien + + Quelldateien\dywapitchtrack + + + Quelldateien\dywapitchtrack + + + Quelldateien + @@ -56,6 +71,12 @@ Headerdateien + + Headerdateien\dywapitchtrack + + + Headerdateien\dywapitchtrack + diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index d0f6d1f4..ff6e4252 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -58,23 +58,23 @@ bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float r return analyzer->output(data, data + sampleCt, rate); } -DllExport PtAKF* PtAKF_Create(unsigned step){ +PtAKF* PtAKF_Create(unsigned step){ return new PtAKF(step); } -DllExport void PtAKF_Free(PtAKF* analyzer){ +void PtAKF_Free(PtAKF* analyzer){ if(analyzer) delete analyzer; } -DllExport int PtAKF_GetNumHalfTones(){ +int PtAKF_GetNumHalfTones(){ return PtAKF::GetNumHalfTones(); } -DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ +void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ if(sampleCt <= 0 || !analyzer) return; - short* dataShort = static_cast(static_cast(data)); + //short* dataShort = static_cast(static_cast(data)); float* dataFloat = short2FloatArray(static_cast(static_cast(data)), sampleCt); analyzer->input(dataFloat, dataFloat + sampleCt); freeFloatArray(dataFloat); @@ -82,12 +82,41 @@ DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ //analyzer->input(dataShort, dataShort + sampleCt); } -DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights){ +int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights){ if(!analyzer) return -1; return analyzer->GetNote(maxVolume, weights); } +PtDyWa* PtDyWa_Create(unsigned step){ + return new PtDyWa(step); +} + +void PtDyWa_Free(PtDyWa* analyzer){ + if(analyzer) + delete analyzer; +} + +void PtDyWa_InputByte(PtDyWa* analyzer, char* data, int sampleCt){ + if(sampleCt <= 0 || !analyzer) + return; + float* dataFloat = short2FloatArray(static_cast(static_cast(data)), sampleCt); + analyzer->input(dataFloat, dataFloat + sampleCt); + freeFloatArray(dataFloat); +} + +void PtDyWa_Process(PtDyWa* analyzer){ + if(!analyzer) + return; + analyzer->Process(); +} + +double PtDyWa_GetNote(PtDyWa* analyzer){ + if(!analyzer) + return -1; + return analyzer->GetNote(); +} + /* namespace Native{ namespace PitchTracking{ diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 08f32eed..80c5cfa7 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -2,6 +2,7 @@ #include "performous/pitch.hh" #include "ptAKF.h" +#include "dywapitchtrack/ptDyWa.h" #define DllExport extern "C" __declspec(dllexport) @@ -21,6 +22,12 @@ DllExport int PtAKF_GetNumHalfTones(); DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt); DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights); +DllExport PtDyWa* PtDyWa_Create(unsigned step); +DllExport void PtDyWa_Free(PtDyWa* analyzer); +DllExport void PtDyWa_InputByte(PtDyWa* analyzer, char* data, int sampleCt); +DllExport void PtDyWa_Process(PtDyWa* analyzer); +DllExport double PtDyWa_GetNote(PtDyWa* analyzer); + /* public ref class CTone { public: diff --git a/PitchTracker/dywapitchtrack/DOCUMENTATION.txt b/PitchTracker/dywapitchtrack/DOCUMENTATION.txt new file mode 100644 index 00000000..7c064fe7 --- /dev/null +++ b/PitchTracker/dywapitchtrack/DOCUMENTATION.txt @@ -0,0 +1,29 @@ + +dywapitchtrack pitch tracking library +Documentation + +The dywapitchtrack library computes the pitch of an audio stream in real time. The pitch is the main frequency of the waveform (the 'note' being played or sung). It is expressed as a float in Hz. + +Unlike the human ear, pitch detection is difficult to achieve for computers. Many algorithms have been designed and experimented, but there is no 'best' algorithm. They all depend on the context and the tradeoffs acceptable in terms of speed and latency. The context includes the quality and 'cleanness' of the audio : obviously polyphonic sounds (multiple instruments playing different notes at the same time) are extremely difficult to track, percussive or noisy audio has no pitch, most real-life audio have some noisy moments, some instruments have a lot of harmonics, etc... + +The dywapitchtrack is based on a custom-tailored algorithm which is of very high quality: both very accurate (precision < 0.05 semitones), very low latency (< 23 ms) and very low error rate. It has been thoroughly tested on human voice. + +It can best be described as a dynamic wavelet algorithm (dywa): + +The heart of the algorithm is a very powerful wavelet algorithm, described in a paper by Eric Larson and Ross Maddox : +"Real-Time Time-Domain Pitch Tracking Using Wavelets" http://online.physics.uiuc.edu/courses/phys406/NSF_REU_Reports/2005_reu/Real-Time_Time-Domain_Pitch_Tracking_Using_Wavelets.pdf + +This central algorithm has been improved by adding dynamic tracking, to reduce the common problems of frequency-halving and voiced/unvoiced errors. This dynamic tracking explains the need for a tracking structure (dywapitchtracker). The dynamic tracking assumes that the main function dywapitch_computepitch is called repeatedly, as it follows the pitch over time and makes assumptions about human voice capabilities and reallife conditions (as documented inside the code). + +Note : The algorithm currently assumes a 44100Hz audio sampling rate. If you use a different samplerate, you can just multiply the resulting pitch by the ratio between your samplerate and 44100. + +See the dywapitchtrack.h file for the library API documentation. + +History : +This algorithm has been designed during a mission for a customer. As I had kept the author's rights on the source code, I eventually decided to make this code public and open source, because it is of really high quality. This algorithms has been extensibely tested, especially it has been included in an Adobe Director Xtra (plugin), asPitchDetect Xtra, that has been distributed widely for a few years. + +I hope that it can be used with pleasure and efficiency in your project. + +Thank you +Antoine Schmitt April 2010 + diff --git a/PitchTracker/dywapitchtrack/README.txt b/PitchTracker/dywapitchtrack/README.txt new file mode 100644 index 00000000..db8bfbcc --- /dev/null +++ b/PitchTracker/dywapitchtrack/README.txt @@ -0,0 +1,43 @@ +dywapitchtrack +Dynamic Wavelet Algorithm Pitch Tracking library + +Copyright (c) 2010 Antoine Schmitt as@schmittmachine.com + +-- Documentation + +See the dywapitchtrack.h file for the library API documentation. + + +-- Version history + +Inital release : Antoine Schmitt April 2010 +jan 2012 : Minor update : changed the link to the Eric Larson and Ross Maddox paper +apr 2012 : Included the SpeakHere iPhone app example + +-- Building, Installing + +- the algorithm can be included directly in your project by including the .h and .c files. +- the iPhone/dywapitchtrack.xcodeproj builds an iPhone static library, against which one can statically link an iPhone application. + + +-- MIT open source licence + + Copyright (c) 2010 Antoine Schmitt + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/PitchTracker/dywapitchtrack/dywapitchtrack.cpp b/PitchTracker/dywapitchtrack/dywapitchtrack.cpp new file mode 100644 index 00000000..f4c6e653 --- /dev/null +++ b/PitchTracker/dywapitchtrack/dywapitchtrack.cpp @@ -0,0 +1,448 @@ +/* dywapitchtrack.c + + Dynamic Wavelet Algorithm Pitch Tracking library + Released under the MIT open source licence + + Copyright (c) 2010 Antoine Schmitt + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "dywapitchtrack.h" +#include +#include +#include // for memset + + +//********************** +// Utils +//********************** + +#ifndef max +#define max(x, y) ((x) > (y)) ? (x) : (y) +#endif +#ifndef min +#define min(x, y) ((x) < (y)) ? (x) : (y) +#endif + +// returns 1 if power of 2 +int _power2p(int value) { + if (value == 0) return 1; + if (value == 2) return 1; + if (value & 0x1) return 0; + return (_power2p(value >> 1)); +} + +// count number of bits +int _bitcount(int value) { + if (value == 0) return 0; + if (value == 1) return 1; + if (value == 2) return 2; + return _bitcount(value >> 1) + 1; +} + +// closest power of 2 above or equal +int _ceil_power2(int value) { + if (_power2p(value)) return value; + + if (value == 1) return 2; + int j, i = _bitcount(value); + int res = 1; + for (j = 0; j < i; j++) res <<= 1; + return res; +} + +// closest power of 2 below or equal +int _floor_power2(int value) { + if (_power2p(value)) return value; + return _ceil_power2(value)/2; +} + +// abs value +int _iabs(int x) { + if (x >= 0) return x; + return -x; +} + +// 2 power +int _2power(int i) { + int res = 1, j; + for (j = 0; j < i; j++) res <<= 1; + return res; +} + +//****************************** +// the Wavelet algorithm itself +//****************************** + +int dywapitch_neededsamplecount(int minFreq) { + int nbSam = 3*44100/minFreq; // 1017. for 130 Hz + nbSam = _ceil_power2(nbSam); // 1024 + return nbSam; +} + +typedef struct _minmax { + int index; + struct _minmax *next; +} minmax; + +double _dywapitch_computeWaveletPitch(double * samples, int startsample, int samplecount) { + double pitchF = 0.0; + + int i, j; + double si, si1; + + // must be a power of 2 + samplecount = _floor_power2(samplecount); + + double *sam = (double *)malloc(sizeof(double)*samplecount); + memcpy(sam, samples + startsample, sizeof(double)*samplecount); + int curSamNb = samplecount; + + int *distances = (int *)malloc(sizeof(int)*samplecount); + int *mins = (int *)malloc(sizeof(int)*samplecount); + int *maxs = (int *)malloc(sizeof(int)*samplecount); + int nbMins, nbMaxs; + + // algorithm parameters + int maxFLWTlevels = 6; + double maxF = 3000.; + int differenceLevelsN = 3; + double maximaThresholdRatio = 0.75; + + double ampltitudeThreshold; + double theDC = 0.0; + + { // compute ampltitudeThreshold and theDC + //first compute the DC and maxAMplitude + double maxValue = 0.0; + double minValue = 0.0; + for (i = 0; i < samplecount;i++) { + si = sam[i]; + theDC = theDC + si; + if (si > maxValue) maxValue = si; + if (si < minValue) minValue = si; + } + theDC = theDC/samplecount; + maxValue = maxValue - theDC; + minValue = minValue - theDC; + double amplitudeMax = (maxValue > -minValue ? maxValue : -minValue); + + ampltitudeThreshold = amplitudeMax*maximaThresholdRatio; + //asLog("dywapitch theDC=%f ampltitudeThreshold=%f\n", theDC, ampltitudeThreshold); + + } + + // levels, start without downsampling.. + int curLevel = 0; + double curModeDistance = -1.; + int delta; + + while(1) { + + // delta + delta = static_cast(44100./(_2power(curLevel)*maxF)); + //("dywapitch doing level=%ld delta=%ld\n", curLevel, delta); + + if (curSamNb < 2) goto cleanup; + + // compute the first maximums and minumums after zero-crossing + // store if greater than the min threshold + // and if at a greater distance than delta + double dv, previousDV = -1000; + nbMins = nbMaxs = 0; + int lastMinIndex = -1000000; + int lastmaxIndex = -1000000; + int findMax = 0; + int findMin = 0; + for (i = 2; i < curSamNb; i++) { + si = sam[i] - theDC; + si1 = sam[i-1] - theDC; + + if (si1 <= 0 && si > 0) findMax = 1; + if (si1 >= 0 && si < 0) findMin = 1; + + // min or max ? + dv = si - si1; + + if (previousDV > -1000) { + + if (findMin && previousDV < 0 && dv >= 0) { + // minimum + if (fabs(si) >= ampltitudeThreshold) { + if (i > lastMinIndex + delta) { + mins[nbMins++] = i; + lastMinIndex = i; + findMin = 0; + //if DEBUGG then put "min ok"&&si + // + } else { + //if DEBUGG then put "min too close to previous"&&(i - lastMinIndex) + // + } + } else { + // if DEBUGG then put "min "&abs(si)&" < thresh = "&ltitudeThreshold + //-- + } + } + + if (findMax && previousDV > 0 && dv <= 0) { + // maximum + if (fabs(si) >= ampltitudeThreshold) { + if (i > lastmaxIndex + delta) { + maxs[nbMaxs++] = i; + lastmaxIndex = i; + findMax = 0; + } else { + //if DEBUGG then put "max too close to previous"&&(i - lastmaxIndex) + //-- + } + } else { + //if DEBUGG then put "max "&abs(si)&" < thresh = "&ltitudeThreshold + //-- + } + } + } + + previousDV = dv; + } + + if (nbMins == 0 && nbMaxs == 0) { + // no best distance ! + //asLog("dywapitch no mins nor maxs, exiting\n"); + + // if DEBUGG then put "no mins nor maxs, exiting" + goto cleanup; + } + //if DEBUGG then put count(maxs)&&"maxs &"&&count(mins)&&"mins" + + // maxs = [5, 20, 100,...] + // compute distances + int d; + memset(distances, 0, samplecount*sizeof(int)); + for (i = 0 ; i < nbMins ; i++) { + for (j = 1; j < differenceLevelsN; j++) { + if (i+j < nbMins) { + d = _iabs(mins[i] - mins[i+j]); + //asLog("dywapitch i=%ld j=%ld d=%ld\n", i, j, d); + distances[d] = distances[d] + 1; + } + } + } + for (i = 0 ; i < nbMaxs ; i++) { + for (j = 1; j < differenceLevelsN; j++) { + if (i+j < nbMaxs) { + d = _iabs(maxs[i] - maxs[i+j]); + //asLog("dywapitch i=%ld j=%ld d=%ld\n", i, j, d); + distances[d] = distances[d] + 1; + } + } + } + + // find best summed distance + int bestDistance = -1; + int bestValue = -1; + for (i = 0; i< curSamNb; i++) { + int summed = 0; + for (j = -delta ; j <= delta ; j++) { + if (i+j >=0 && i+j < curSamNb) + summed += distances[i+j]; + } + //asLog("dywapitch i=%ld summed=%ld bestDistance=%ld\n", i, summed, bestDistance); + if (summed == bestValue) { + if (i == 2*bestDistance) + bestDistance = i; + + } else if (summed > bestValue) { + bestValue = summed; + bestDistance = i; + } + } + //asLog("dywapitch bestDistance=%ld\n", bestDistance); + + // averaging + double distAvg = 0.0; + double nbDists = 0; + for (j = -delta ; j <= delta ; j++) { + if (bestDistance+j >=0 && bestDistance+j < samplecount) { + int nbDist = distances[bestDistance+j]; + if (nbDist > 0) { + nbDists += nbDist; + distAvg += (bestDistance+j)*nbDist; + } + } + } + // this is our mode distance ! + distAvg /= nbDists; + //asLog("dywapitch distAvg=%f\n", distAvg); + + // continue the levels ? + if (curModeDistance > -1.) { + double similarity = fabs(distAvg*2 - curModeDistance); + if (similarity <= 2*delta) { + //if DEBUGG then put "similarity="&similarity&&"delta="&delta&&"ok" + //asLog("dywapitch similarity=%f OK !\n", similarity); + // two consecutive similar mode distances : ok ! + pitchF = 44100./(_2power(curLevel-1)*curModeDistance); + goto cleanup; + } + //if DEBUGG then put "similarity="&similarity&&"delta="&delta&&"not" + } + + // not similar, continue next level + curModeDistance = distAvg; + + curLevel = curLevel + 1; + if (curLevel >= maxFLWTlevels) { + // put "max levels reached, exiting" + //asLog("dywapitch max levels reached, exiting\n"); + goto cleanup; + } + + // downsample + if (curSamNb < 2) { + //asLog("dywapitch not enough samples, exiting\n"); + goto cleanup; + } + for (i = 0; i < curSamNb/2; i++) { + sam[i] = (sam[2*i] + sam[2*i + 1])/2.; + } + curSamNb /= 2; + } + + /// +cleanup: + free(distances); + free(mins); + free(maxs); + free(sam); + + return pitchF; +} + +// *********************************** +// the dynamic postprocess +// *********************************** + +/*** +It states: + - a pitch cannot change much all of a sudden (20%) (impossible humanly, + so if such a situation happens, consider that it is a mistake and drop it. + - a pitch cannot double or be divided by 2 all of a sudden : it is an + algorithm side-effect : divide it or double it by 2. + - a lonely voiced pitch cannot happen, nor can a sudden drop in the middle + of a voiced segment. Smooth the plot. +***/ + +double _dywapitch_dynamicprocess(dywapitchtracker *pitchtracker, double pitch) { + + // equivalence + if (pitch == 0.0) pitch = -1.0; + + // + double estimatedPitch = -1; + double acceptedError = 0.2f; + int maxConfidence = 5; + + if (pitch != -1) { + // I have a pitch here + + if (pitchtracker->_prevPitch == -1) { + // no previous + estimatedPitch = pitch; + pitchtracker->_prevPitch = pitch; + pitchtracker->_pitchConfidence = 1; + + } else if (abs(pitchtracker->_prevPitch - pitch)/pitch < acceptedError) { + // similar : remember and increment pitch + pitchtracker->_prevPitch = pitch; + estimatedPitch = pitch; + pitchtracker->_pitchConfidence = min(maxConfidence, pitchtracker->_pitchConfidence + 1); // maximum 3 + + } else if ((pitchtracker->_pitchConfidence >= maxConfidence-2) && abs(pitchtracker->_prevPitch - 2.*pitch)/(2.*pitch) < acceptedError) { + // close to half the last pitch, which is trusted + estimatedPitch = 2.*pitch; + pitchtracker->_prevPitch = estimatedPitch; + + } else if ((pitchtracker->_pitchConfidence >= maxConfidence-2) && abs(pitchtracker->_prevPitch - 0.5*pitch)/(0.5*pitch) < acceptedError) { + // close to twice the last pitch, which is trusted + estimatedPitch = 0.5*pitch; + pitchtracker->_prevPitch = estimatedPitch; + + } else { + // nothing like this : very different value + if (pitchtracker->_pitchConfidence >= 1) { + // previous trusted : keep previous + estimatedPitch = pitchtracker->_prevPitch; + pitchtracker->_pitchConfidence = max(0, pitchtracker->_pitchConfidence - 1); + } else { + // previous not trusted : take current + estimatedPitch = pitch; + pitchtracker->_prevPitch = pitch; + pitchtracker->_pitchConfidence = 1; + } + } + + } else { + // no pitch now + if (pitchtracker->_prevPitch != -1) { + // was pitch before + if (pitchtracker->_pitchConfidence >= 1) { + // continue previous + estimatedPitch = pitchtracker->_prevPitch; + pitchtracker->_pitchConfidence = max(0, pitchtracker->_pitchConfidence - 1); + } else { + pitchtracker->_prevPitch = -1; + estimatedPitch = -1.; + pitchtracker->_pitchConfidence = 0; + } + } + } + + // put "_pitchConfidence="&pitchtracker->_pitchConfidence + if (pitchtracker->_pitchConfidence >= 1) { + // ok + pitch = estimatedPitch; + } else { + pitch = -1; + } + + // equivalence + if (pitch == -1) pitch = 0.0; + + return pitch; +} + + +// ************************************ +// the API main entry points +// ************************************ + +void dywapitch_inittracking(dywapitchtracker *pitchtracker) { + pitchtracker->_prevPitch = -1.; + pitchtracker->_pitchConfidence = -1; +} + +double dywapitch_computepitch(dywapitchtracker *pitchtracker, double * samples, int startsample, int samplecount) { + double raw_pitch = _dywapitch_computeWaveletPitch(samples, startsample, samplecount); + return _dywapitch_dynamicprocess(pitchtracker, raw_pitch); +} + + + diff --git a/PitchTracker/dywapitchtrack/dywapitchtrack.h b/PitchTracker/dywapitchtrack/dywapitchtrack.h new file mode 100644 index 00000000..39aeb38d --- /dev/null +++ b/PitchTracker/dywapitchtrack/dywapitchtrack.h @@ -0,0 +1,110 @@ +/* dywapitchtrack.h + + Dynamic Wavelet Algorithm Pitch Tracking library + Released under the MIT open source licence + + Copyright (c) 2010 Antoine Schmitt + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +/* Documentation + + The dywapitchtrack library computes the pitch of an audio stream in real time. + + The pitch is the main frequency of the waveform (the 'note' being played or sung). + It is expressed as a float in Hz. + + Unlike the human ear, pitch detection is difficult to achieve for computers. Many + algorithms have been designed and experimented, but there is no 'best' algorithm. + They all depend on the context and the tradeoffs acceptable in terms of speed and + latency. The context includes the quality and 'cleanness' of the audio : obviously + polyphonic sounds (multiple instruments playing different notes at the same time) + are extremely difficult to track, percussive or noisy audio has no pitch, most + real-life audio have some noisy moments, some instruments have a lot of harmonics, + etc... + + The dywapitchtrack is based on a custom-tailored algorithm which is of very high quality: + both very accurate (precision < 0.05 semitones), very low latency (< 23 ms) and + very low error rate. It has been thoroughly tested on human voice. + + It can best be described as a dynamic wavelet algorithm (dywa): + + The heart of the algorithm is a very powerful wavelet algorithm, described in a paper + by Eric Larson and Ross Maddox : "Real-Time Time-Domain Pitch Tracking Using Wavelets" + http://online.physics.uiuc.edu/courses/phys498pom/NSF_REU_Reports/2005_reu/Real-Time_Time-Domain_Pitch_Tracking_Using_Wavelets.pdf + + This central algorithm has been improved by adding dynamic tracking, to reduce the + common problems of frequency-halving and voiced/unvoiced errors. This dynamic tracking + explains the need for a tracking structure (dywapitchtracker). The dynamic tracking assumes + that the main function dywapitch_computepitch is called repeatedly, as it follows the pitch + over time and makes assumptions about human voice capabilities and reallife conditions + (as documented inside the code). + + Note : The algorithm currently assumes a 44100Hz audio sampling rate. If you use a different + samplerate, you can just multiply the resulting pitch by the ratio between your samplerate and 44100. +*/ + +/* Usage + + // Allocate your audio buffers and start the audio stream. + // Allocate a 'dywapitchtracker' structure. + // Start the pitch tracking by calling 'dywapitch_inittracking'. + dywapitchtracker pitchtracker; + dywapitch_inittracking(&pitchtracker); + + // For each available audio buffer, call 'dywapitch_computepitch' + double thepitch = dywapitch_computepitch(&pitchtracker, samples, start, count); + +*/ + +#ifndef dywapitchtrack__H +#define dywapitchtrack__H + +#ifdef __cplusplus +extern "C" { +#endif + +// structure to hold tracking data +typedef struct _dywapitchtracker { + double _prevPitch; + int _pitchConfidence; +} dywapitchtracker; + +// returns the number of samples needed to compute pitch for fequencies equal and above the given minFreq (in Hz) +// useful to allocate large enough audio buffer +// ex : for frequencies above 130Hz, you need 1024 samples (assuming a 44100 Hz samplerate) +int dywapitch_neededsamplecount(int minFreq); + +// call before computing any pitch, passing an allocated dywapitchtracker structure +void dywapitch_inittracking(dywapitchtracker *pitchtracker); + +// computes the pitch. Pass the inited dywapitchtracker structure +// samples : a pointer to the sample buffer +// startsample : the index of the first sample to use in the sample buffer +// samplecount : the number of samples to use to compte the pitch +// return 0.0 if no pitch was found (sound too low, noise, etc..) +double dywapitch_computepitch(dywapitchtracker *pitchtracker, double * samples, int startsample, int samplecount); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif + diff --git a/PitchTracker/dywapitchtrack/ptDyWa.cpp b/PitchTracker/dywapitchtrack/ptDyWa.cpp new file mode 100644 index 00000000..fa3ab4f0 --- /dev/null +++ b/PitchTracker/dywapitchtrack/ptDyWa.cpp @@ -0,0 +1,27 @@ +#include "ptDyWa.h" +#include "../Helper.h" + + +PtDyWa::PtDyWa(unsigned step){ + _Step = step; + dywapitch_inittracking(&_State); +} + +void PtDyWa::Process(){ + double AnaylsisBuf[_SampleCt]; + size_t size = _AnalysisBuf.size(); + if(size > _SampleCt) + _AnalysisBuf.pop(size - _SampleCt); + if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)) + return; + _AnalysisBuf.pop(_Step); + double pitch = dywapitch_computepitch(&_State, AnaylsisBuf,0,_SampleCt); + if(pitch == 0.0) + _LastNote = -1; + else + _LastNote = FreqToNote(pitch); +} + +double PtDyWa::GetNote(){ + return _LastNote; +} \ No newline at end of file diff --git a/PitchTracker/dywapitchtrack/ptDyWa.h b/PitchTracker/dywapitchtrack/ptDyWa.h new file mode 100644 index 00000000..c66e1ac7 --- /dev/null +++ b/PitchTracker/dywapitchtrack/ptDyWa.h @@ -0,0 +1,22 @@ +#pragma once +#include "../performous/pitch.hh" +#include "dywapitchtrack.h" + +class PtDyWa{ +public: + PtDyWa(unsigned step); + + /** Add input data to buffer. This is thread-safe (against other functions). **/ + template void input(InIt begin, InIt end) { + _AnalysisBuf.insert(begin, end); + } + + void Process(); + double GetNote(); +private: + dywapitchtracker _State; + constexpr static size_t _SampleCt = 2048; + RingBuffer<_SampleCt * 2> _AnalysisBuf; + unsigned _Step; + double _LastNote; +}; \ No newline at end of file diff --git a/PitchTracker/performous/pitch.cc b/PitchTracker/performous/pitch.cc index 760dc9dc..a8453764 100644 --- a/PitchTracker/performous/pitch.cc +++ b/PitchTracker/performous/pitch.cc @@ -139,7 +139,7 @@ void Analyzer::calcTones() { double delta = phase - m_fftLastPhase[k]; m_fftLastPhase[k] = static_cast(phase); delta -= k * phaseStep; // subtract expected phase difference - delta = remainder(delta, 2.0 * M_PI); // map delta phase into +/- M_PI interval + delta = remainder(delta, M_PI); // map delta phase into +/- M_PI interval delta /= phaseStep; // calculate diff from bin center frequency double freq = (k + delta) * freqPerBin; // calculate the true frequency if (freq > 1.0 && magnitude > minMagnitude) { @@ -164,15 +164,16 @@ void Analyzer::calcTones() { int bestScore = 0; for (std::size_t div = 2; div <= Tone::MAXHARM && k / div > 1; ++div) { double freq = peaks[k].freq / div; // Fundamental + double db = peaks[k].db; int score = 0; for (std::size_t n = 1; n < div && n < 8; ++n) { Peak& p = match(peaks, k * n / div); --score; - if (p.db < -90.0 || std::abs(p.freq / n / freq - 1.0) > .03) continue; - if (n == 1) score += 4; // Extra for fundamental + if (std::abs(p.db/db - 1.0) > 0.4 || std::abs(p.freq / n / freq - 1.0) > .04) continue; + if (n == 1) score += 1; // Extra for fundamental score += 2; } - if (score > bestScore) { + if (score >= bestScore) { bestScore = score; bestDiv = div; } @@ -185,12 +186,11 @@ void Analyzer::calcTones() { for (std::size_t n = 1; n <= bestDiv; ++n) { // Find the peak for n'th harmonic Peak& p = match(peaks, k * n / bestDiv); - if (std::abs(p.freq / n / freq - 1.0) > .03) continue; // Does it match the fundamental freq? - if (p.db > t.db - 10.0) { - t.db = std::max(t.db, p.db); - ++count; - t.freq += p.freq / n; - } + if (std::abs(p.freq / n / freq - 1.0) > .04) continue; // Does it match the fundamental freq? + if (std::abs(p.db/t.db - 1.0) > 0.4) continue; + t.db = std::max(t.db, p.db); + ++count; + t.freq += p.freq / n; t.harmonics[n - 1] = p.db; p.clear(); } diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index d8a73088..be84893b 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -13,23 +13,37 @@ // You should have received a copy of the GNU General Public License // along with Vocaluxe. If not, see . +#define _USE_MATH_DEFINES #include "ptAKF.h" -#include +#include static constexpr double BaseToneFrequency = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) static constexpr double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) int PtAKF::_InitCount = 0; -float* PtAKF::_SamplesPerPeriodPerTone = NULL; +float* restrict PtAKF::_SamplesPerPeriodPerTone = NULL; +float* restrict PtAKF::_SamplesPerPeriodPerToneFine = NULL; +float* restrict PtAKF::_Window = NULL; + +double GetFrequencyFromTone(double toneIndex){ + return BaseToneFrequency * pow(HalftoneBase, toneIndex); +} PtAKF::PtAKF(unsigned step){ _InitCount++; if(_InitCount == 1){ _SamplesPerPeriodPerTone = new float[_MaxHalfTone + 1 + _HalfTonesAdd]; + _SamplesPerPeriodPerToneFine = new float[(_MaxHalfTone + 1 + _HalfTonesAdd) * 2]; //Init Array to avoid costly calculations for (int toneIndex = 0; toneIndex <= _MaxHalfTone + _HalfTonesAdd; toneIndex++) { - double freq = BaseToneFrequency * pow(HalftoneBase, toneIndex); - _SamplesPerPeriodPerTone[toneIndex] = static_cast(44100.0 / freq); // samples in one period + _SamplesPerPeriodPerTone[toneIndex] = static_cast(44100.0 / GetFrequencyFromTone(toneIndex)); // samples in one period + _SamplesPerPeriodPerToneFine[2 * toneIndex] = static_cast(44100.0 / GetFrequencyFromTone(toneIndex - 1./3.)); // samples for a bit below exact frequency + _SamplesPerPeriodPerToneFine[2 * toneIndex + 1] = static_cast(44100.0 / GetFrequencyFromTone(toneIndex + 1./3.)); // samples for a bit above exact frequency + } + _Window = new float[_SampleCt]; + double cosMult = 2. * M_PI / (_SampleCt - 1.); //To simplify and speed up + for (int i = 0; i < _SampleCt; i++) { + _Window[i] = static_cast(0.54 - 0.46 * cos(i * cosMult)); } } _Step = step; @@ -40,10 +54,12 @@ PtAKF::~PtAKF(){ if(!_InitCount){ delete[] _SamplesPerPeriodPerTone; _SamplesPerPeriodPerTone = NULL; + delete[] _SamplesPerPeriodPerToneFine; + _SamplesPerPeriodPerToneFine = NULL; } } -int PtAKF::GetNote(double* maxVolume, float* weights){ +int PtAKF::GetNote(double* restrict maxVolume, float* restrict weights){ float AnaylsisBuf[_SampleCt]; size_t size = _AnalysisBuf.size(); if(size > _SampleCt) @@ -54,9 +70,37 @@ int PtAKF::GetNote(double* maxVolume, float* weights){ return _GetNote(AnaylsisBuf, maxVolume, weights); } -int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ +void PtAKF::InitPeaks(SPeak peaks[_MaxPeaks]){ + for(int i = 0; i < _MaxPeaks; i++){ + peaks[i].toneIndex = -1; + peaks[i].weight = -9.f; + } +} + +void PtAKF::AddPeak(SPeak peaks[], float curWeight, int toneIndex){ + if(curWeight > peaks[0].weight){ + int i; + for(i = 1; i < _MaxPeaks; i++){ + if(curWeight < peaks[i].weight){ + peaks[i-1].toneIndex = toneIndex; + peaks[i-1].weight = curWeight; + break; + }else{ + peaks[i-1] = peaks[i]; + } + } + if(i == _MaxPeaks){ + peaks[i-1].toneIndex = toneIndex; + peaks[i-1].weight = curWeight; + } + } +} + +int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* restrict weights){ + // Calculate maximum volume + float maxVolumeL = 0; - for(int i = 0; i < _SampleCt; i++){ + for(int i = _SampleCt / 2; i < _SampleCt; i++){ float vol = abs(samples[i]); if(vol > maxVolumeL) maxVolumeL = vol; @@ -64,15 +108,14 @@ int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ //maxVolumeL /= 32767.; *maxVolume = maxVolumeL; - //Scale the samples to have a peak of 1 to better decide between voiced/unvoiced - //float scaleVal = 1 / maxVolumeL; - //for(int i = 0; i < _SampleCt; i++){ - // samples[i] *= scaleVal; - //} + for(int i = 0; i < _SampleCt; i++){ + samples[i] *= _Window[i]; + } - float maxWeight = -1; - float minWeight = 1; - int maxTone = -1; + // Now analyze the samples and get peaks at the most appropriate tones + + SPeak peaks[_MaxPeaks]; + InitPeaks(peaks); //Attention: We have a peak at lag 0 that might stretch that far, that we detect a wrong "peak" at _MaxHalfTone //Because of that we filter out all tones that are past the last zero crossing from below but keep tones with decreasing weights (going towards zero crossing from above) @@ -80,16 +123,9 @@ int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ float lastWeight = 1.f; for (int toneIndex = _MinHalfTone; toneIndex <= _MaxHalfTone; toneIndex++) { - float curWeight = _AnalyzeToneFunc(samples, toneIndex); + float curWeight = _AnalyzeByTone(samples, toneIndex); - if (curWeight > maxWeight) - { - maxWeight = curWeight; - maxTone = toneIndex; - } - - if (curWeight < minWeight) - minWeight = curWeight; + AddPeak(peaks, curWeight, toneIndex); weights[toneIndex - _MinHalfTone] = curWeight; @@ -99,54 +135,96 @@ int PtAKF::_GetNote(float* samples, double* maxVolume, float* weights){ lastWeight = curWeight; } - if(maxTone==_MaxHalfTone){ + // Now clear off the lag 0 peak if required + + if(peaks[_MaxPeaks - 1].toneIndex ==_MaxHalfTone){ //We might have caught the lag 0 peak so go a bit further to check for other zero crossings (or we won't be able to detect _MaxHalfTone) - float lastWeight = _FastAKF(samples, _SamplesPerPeriodPerTone[_MaxHalfTone]); + float lastWeight = _AKFByTone(samples, _MaxHalfTone); for(int toneIndex = _MaxHalfTone+1; toneIndex <= _MaxHalfTone + _HalfTonesAdd; toneIndex++){ - float curWeight = _FastAKF(samples, _SamplesPerPeriodPerTone[toneIndex]); + float curWeight = _AKFByTone(samples, toneIndex); if(lastWeight > curWeight || (lastWeight > 0.f && curWeight <= 0.f)){ lastValidTone = toneIndex - 1; break; } lastWeight = curWeight; } - if(lastValidTone < maxTone){ - maxWeight = -1.f; - minWeight = 1.f; + if(lastValidTone < peaks[_MaxPeaks - 1].toneIndex){ + InitPeaks(peaks); for(int toneIndex = _MinHalfTone; toneIndex <= lastValidTone; toneIndex++){ - float curWeight = weights[toneIndex-_MinHalfTone]; - if (curWeight > maxWeight) - { - maxWeight = curWeight; - maxTone = toneIndex; - } - - if (curWeight < minWeight) - minWeight = curWeight; + AddPeak(peaks, weights[toneIndex - _MinHalfTone], toneIndex); } //Set all invalid weights to 0 for(int toneIndex = lastValidTone + 1;toneIndex < _MaxHalfTone; toneIndex++){ - weights[toneIndex - _MinHalfTone]=0.f; + weights[toneIndex - _MinHalfTone] = 0.f; } } } - float energy = _FastAKF(samples, 0); - float maxAKF = _FastAKF(samples, _SamplesPerPeriodPerTone[maxTone]); - //printf("%g %g\n",energy, maxAKF); + // Further analyze the found peaks and find the real maximum + // This is necessary because we may have our real peak a bit off the exact tone frequency + // and a 'wrong' peak that is exactly at another tone which might become higher than the one at the 'right' tone + + int maxTone = peaks[_MaxPeaks - 1].toneIndex; + int maxToneFine = -1; + float maxWeight = peaks[_MaxPeaks - 1].weight; + for(int i = 0; i < _MaxPeaks; i++){ + int toneIndex = peaks[i].toneIndex; + float curWeightCenter = peaks[i].weight; + float curWeightDown = _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerToneFine[toneIndex * 2]); + float curWeight; + int otherToneIndex; + int otherToneFineIndex; + if(curWeightDown > curWeightCenter){ + otherToneIndex = toneIndex - 1; + otherToneFineIndex = 1; + curWeight = curWeightDown; + }else{ + float curWeightUp = _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerToneFine[toneIndex * 2 + 1]); + if(curWeightUp > curWeightCenter){ + otherToneIndex = (toneIndex < _MaxHalfTone)? toneIndex + 1: -1; // If the other tone is invalid just set it to -1 which will be skipped below + otherToneFineIndex = 0; + curWeight = curWeightUp; + }else + continue; + } + weights[toneIndex - _MinHalfTone] = curWeight; + if(curWeight > maxWeight){ + maxTone = toneIndex; + maxToneFine = 1 - otherToneFineIndex; + maxWeight = curWeight; + } + + // Now check also neighbouring tone + if(otherToneIndex > 0){ + float curWeightOther = _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerToneFine[otherToneIndex * 2 + otherToneFineIndex]); + if(curWeightOther > weights[otherToneIndex - _MinHalfTone]){ + weights[otherToneIndex - _MinHalfTone] = curWeightOther; + if(curWeightOther > maxWeight){ + maxTone = otherToneIndex; + maxToneFine = otherToneFineIndex; + maxWeight = curWeightOther; + } + } + } + } + + float energy = _AKFBySampleCt(samples, 0); + float maxAKF = (maxToneFine < 0) ? _AKFByTone(samples, maxTone):_AKFBySampleCt(samples, _SamplesPerPeriodPerToneFine[maxTone * 2 + maxToneFine]); + float aa = _AKFByTone(samples, maxTone); //if(maxWeight - minWeight > 0.025){ - if(maxAKF >= 0.3 * energy){ + if(maxAKF >= 0.4 * energy){ return maxTone; }else return -1; } -float PtAKF::_AnalyzeToneFunc(float* samples, int toneIndex){ - // Use method by Kobayashi and Shimamura (2001): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 +float PtAKF::_AnalyzeByTone(float* restrict samples, int toneIndex){ + return _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); +} - float samplesPerPeriodD = _SamplesPerPeriodPerTone[toneIndex]; // samples in one period +float PtAKF::_AnalyzeBySampleCt(float* restrict samples, float samplesPerPeriodD){ + // Use method by Kobayashi and Shimamura (2001): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 int samplesPerPeriod = static_cast(samplesPerPeriodD); - int maxSampleCt = static_cast(_SamplesPerPeriodPerTone[0]); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; @@ -174,11 +252,13 @@ float PtAKF::_AnalyzeToneFunc(float* samples, int toneIndex){ //{toneIndex}: {accumDistAKF} ; {accumDistAMDF}; {result} } -float PtAKF::_FastAKF(float* samples, float samplesPerPeriodD){ - // Do a fast, non-scaled AKF (used for Lag 0 peak removal) +float PtAKF::_AKFByTone(float* restrict samples, int toneIndex){ + return _AKFBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); +} +float PtAKF::_AKFBySampleCt(float* restrict samples, float samplesPerPeriodD){ + // Do a fast, non-scaled AKF (used e.g. for Lag 0 peak removal) int samplesPerPeriod = static_cast(samplesPerPeriodD); - int maxSampleCt = static_cast(_SamplesPerPeriodPerTone[0]); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index 6d5fd609..688e04d0 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -1,6 +1,23 @@ #pragma once #include "performous/pitch.hh" +#if __STDC__ != 1 +# define restrict __restrict +#else +# ifndef __STDC_VERSION__ +# define restrict __restrict +# else +# if __STDC_VERSION__ < 199901L +# define restrict __restrict +# endif +# endif +#endif + +struct SPeak{ + int toneIndex; + float weight; +}; + // A pitch detection that is based on the AKF and AMDF (initially from original Vocaluxe/USDx) class PtAKF{ public: @@ -12,20 +29,31 @@ public: _AnalysisBuf.insert(begin, end); } - int GetNote(double* maxVolume, float* weights); + int GetNote(double* restrict maxVolume, float* restrict weights); static int GetNumHalfTones(){ return _MaxHalfTone - _MinHalfTone + 1;} + private: static int _InitCount; - static float* _SamplesPerPeriodPerTone; + static float* restrict _SamplesPerPeriodPerTone; + // Use a 3 times finer resolution for exact peak detection + // So this array will store for each note the number of samples 1/3 below and up + // (cannot use halves as it would be ambiguous) + static float* restrict _SamplesPerPeriodPerToneFine; + static float* restrict _Window; static constexpr int _MinHalfTone = 0; //C2 static constexpr int _MaxHalfTone = 55;//47; //B5 static constexpr int _HalfTonesAdd = 4; //Additonal half tones to analyze to remove the peak at lag 0 + static constexpr int _MaxPeaks = 3; constexpr static size_t _SampleCt = 2048; RingBuffer<_SampleCt * 2> _AnalysisBuf; unsigned _Step; - static int _GetNote(float* samples, double* maxVolume, float* weights); - static float _AnalyzeToneFunc(float* samples, int toneIndex); - static float _FastAKF(float* samples, float samplesPerPeriodD); + static int _GetNote(float* restrict samples, double* restrict maxVolume, float* restrict weights); + static float _AnalyzeBySampleCt(float* restrict samples, float samplesPerPeriodD); + static inline float _AnalyzeByTone(float* restrict samples, int toneIndex); + static float _AKFBySampleCt(float* restrict samples, float samplesPerPeriodD); + static inline float _AKFByTone(float* restrict samples, int toneIndex); + static inline void InitPeaks(SPeak peaks[_MaxPeaks]); + static inline void AddPeak(SPeak peaks[_MaxPeaks], float curWeight, int toneIndex); }; \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs index e4e5807c..9f9529e3 100644 --- a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs @@ -159,4 +159,69 @@ namespace Vocaluxe.Lib.Sound.Record GC.SuppressFinalize(this); } } + + /// + /// Pitchtracker (Pt) that uses a dynamic wavelet (DyWa) algorithm + /// Quite fast and perfect in artificial tests, but may fail in real world scenarios (e.g. missing fundamental) + /// + class CPtDyWa : IDisposable + { + #region Imports + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr PtDyWa_Create(uint step); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtDyWa_Free(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtDyWa_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtDyWa_Process(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern double PtDyWa_GetNote(IntPtr analyzer); + #endregion + + private IntPtr _Instance; + + public CPtDyWa(uint step = 200) + { + _Instance = PtDyWa_Create(step); + } + + ~CPtDyWa() + { + _Dispose(false); + } + + public void Input(byte[] data) + { + PtDyWa_InputByte(_Instance, data, data.Length / 2); + } + + public void Process() + { + PtDyWa_Process(_Instance); + } + + public double GetNote() + { + return PtDyWa_GetNote(_Instance); + } + + private void _Dispose(bool disposing) + { + if (_Instance == IntPtr.Zero) + throw new ObjectDisposedException(GetType().Name); + PtDyWa_Free(_Instance); + _Instance = IntPtr.Zero; + } + + public void Dispose() + { + _Dispose(true); + GC.SuppressFinalize(this); + } + } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 394af07b..2479c76a 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -38,7 +38,6 @@ namespace Vocaluxe.Lib.Sound.Record private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) #endif private CPtAKF _Analyzer = new CPtAKF(); - private CAnalyzer _Analyzer2 = new CAnalyzer(); private double _MaxVolume; @@ -98,12 +97,10 @@ namespace Vocaluxe.Lib.Sound.Record //if (assigned(fVoiceStream)) then //fVoiceStream.WriteData(Buffer, BufferSize); _Analyzer.Input(buffer); - _Analyzer2.Input(buffer); } public void AnalyzeBuffer() { - _Analyzer2.Process(); //_MaxVolume = _Analyzer.GetPeak() / 43 + 1; int tone = _Analyzer.GetNote(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // if (tone >= 0 && _MaxVolume >= MinVolume) @@ -136,6 +133,8 @@ namespace Vocaluxe.Lib.Sound.Record private static string _ToneToNote(int tone, bool withOctave = true) { + if (tone < 0) + return "inv."; tone += 24; string[] notes = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"}; string result = notes[tone % 12]; @@ -149,7 +148,7 @@ namespace Vocaluxe.Lib.Sound.Record if (_PitchTestRun) return; _PitchTestRun = true; - int toneFrom = 0; + const int toneFrom = 0; const int toneTo = -1; // 47; //B5 Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); byte[] data; @@ -185,7 +184,7 @@ namespace Vocaluxe.Lib.Sound.Record tests++; } } - if (_TestFile("toneG3.wav", 19)) + /*if (_TestFile("toneG3.wav", 19)) ok++; tests++; if (_TestFile("toneG3Miss.wav", 19)) @@ -193,9 +192,9 @@ namespace Vocaluxe.Lib.Sound.Record tests++; if (_TestFile("toneG4.wav", 31)) ok++; - tests++; - _TestFile("whistling3.wav", "whistling3.txt", ref tests, ref ok); + tests++;*/ _TestFile("sClausVoc.wav", "sClausVoc.txt", ref tests, ref ok); + _TestFile("whistling3.wav", "whistling3.txt", ref tests, ref ok); _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); Stopwatch sw = new Stopwatch(); @@ -271,35 +270,52 @@ namespace Vocaluxe.Lib.Sound.Record int samplesRead = 0; int curTimeIndex = -1; int curNote = -1; + int lastNote = -1; //It is ok not to detect a note change immediately so the old note is kept for a bit as ok + int lastNoteEndTime = 0; + const int lastNoteMaxTimeDiff = 1024 * 1000 / 44100; // old note is valid for 1024 more samples const int maxSamplesPerBatch = 512; - while (wavFile.NumSamplesLeft / wavFile.NumChannels > maxSamplesPerBatch) + CAnalyzer analyzer2 = new CAnalyzer(); + CPtDyWa analyzer3 = new CPtDyWa(); + while (wavFile.NumSamplesLeft > maxSamplesPerBatch) { byte[] samples = wavFile.GetNextSamples16BitAsBytes(maxSamplesPerBatch, 1); samplesRead += samples.Length / 2; int time = samplesRead * 1000 / wavFile.SampleRate; ProcessNewBuffer(samples); AnalyzeBuffer(); + analyzer2.Input(samples); + analyzer3.Input(samples); + analyzer2.Process(); + analyzer3.Process(); while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) { curTimeIndex++; + lastNote = curNote; + lastNoteEndTime = tones[curTimeIndex].Time; curNote = tones[curTimeIndex].Note; } if (curNote < 0) continue; - ct++; + if (lastNoteEndTime + lastNoteMaxTimeDiff < time) + lastNote = curNote; + int tone1 = ToneValid ? ToneAbs : -1; + int tone2 = (int)Math.Round(analyzer2.FindNote(64, 1770)); + int tone3 = (int)Math.Round(analyzer3.GetNote()); + /*ct++; if (!ToneValid) CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms not detected"); else if (ToneAbs % 12 != curNote % 12) CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(ToneAbs)); else - ok++; - int note2 = (int)Math.Round(_Analyzer2.FindNote()); - if (note2 < 0) - CBase.Log.LogDebug("Note2 " + _ToneToNote(curNote) + " at " + time + "ms not detected"); - else if (note2 % 12 != curNote % 12) - CBase.Log.LogDebug("Note2 " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(note2)); - else - ok++; + ok++;*/ + bool ok1 = tone1 == curNote || tone1 == lastNote; + bool ok2 = tone2 == curNote || tone2 == lastNote; + bool ok3 = tone3 == curNote || tone3 == lastNote; + if (!ok1 || !ok2 || !ok3) + { + CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms detected as " + _ToneToNote(tone1) + (ok1 ? "" : "(!)") + "; " + _ToneToNote(tone2) + + (ok2 ? "" : "(!)") + "; " + _ToneToNote(tone3) + (ok3 ? "" : "(!)") + "; "); + } } } catch (Exception e) diff --git a/VocaluxeLib/Utils/CWavFile.cs b/VocaluxeLib/Utils/CWavFile.cs index 7dea4478..9993ed24 100644 --- a/VocaluxeLib/Utils/CWavFile.cs +++ b/VocaluxeLib/Utils/CWavFile.cs @@ -14,11 +14,12 @@ namespace VocaluxeLib.Utils public string FileName { get; private set; } //Unless this is true, all fields are to be considered as invalid public int DataSize { get; private set; } - //Number of samples (=SampesPerChannel*NumChannels) + //Number of samples (per channel) public int NumSamples { - get { return (DataSize / (BitsPerSample / 8)); } + get { return (DataSize / (BitsPerSample / 8 * NumChannels)); } } + //Number of samples left to be read (per channel) public int NumSamplesLeft { get; private set; } public bool IsOpen { get; private set; } private int _DataPos; @@ -129,13 +130,12 @@ namespace VocaluxeLib.Utils { if (channel < 0 || channel > NumChannels || BitsPerSample != 8) return null; - int samplesPerBlock = (channel == 0 ? NumChannels : 1); - if (NumSamplesLeft < numSamples * samplesPerBlock) + if (numSamples > NumSamplesLeft) return null; byte[] result; BinaryReader reader = new BinaryReader(_File); if (channel == 0 || NumChannels == 1) - result = reader.ReadBytes(numSamples * samplesPerBlock); + result = reader.ReadBytes(numSamples * NumChannels); else { result = new byte[numSamples]; @@ -146,7 +146,7 @@ namespace VocaluxeLib.Utils _File.Seek(NumChannels - channel, SeekOrigin.Current); } } - NumSamplesLeft -= numSamples * samplesPerBlock; + NumSamplesLeft -= numSamples; return result; } @@ -160,8 +160,7 @@ namespace VocaluxeLib.Utils { if (channel < 0 || channel > NumChannels || BitsPerSample != 16) return null; - int samplesPerBlock = (channel == 0 ? NumChannels : 1); - if (NumSamplesLeft < numSamples * samplesPerBlock) + if (numSamples > NumSamplesLeft) return null; short[] result; BinaryReader reader = new BinaryReader(_File); @@ -183,7 +182,7 @@ namespace VocaluxeLib.Utils _File.Seek((NumChannels - channel) * 2, SeekOrigin.Current); } } - NumSamplesLeft -= numSamples * samplesPerBlock; + NumSamplesLeft -= numSamples; } catch (EndOfStreamException e) { From be6a40aa1d2eec1f65ef8ef50e9a0790d722978a Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 12 Apr 2014 14:03:10 +0200 Subject: [PATCH 077/116] Use window function Update reference notes Improve comparison --- PitchTracker/TestSounds.rar | Bin 840777 -> 840954 bytes PitchTracker/ptAKF.cpp | 140 ++++++++++++++++----------- PitchTracker/ptAKF.h | 10 +- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 31 +++--- 4 files changed, 108 insertions(+), 73 deletions(-) diff --git a/PitchTracker/TestSounds.rar b/PitchTracker/TestSounds.rar index 463321f4f86fef1b6f471e439bcc5a0f16fe9d5d..7dd70d57103cc09683f6ca47483abd7539590d5e 100644 GIT binary patch delta 94828 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 Wf&MI*&w~9dxX*%bMw3A}{P{mNJO#x7 diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index be84893b..f5f95bf7 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -108,24 +108,26 @@ int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* //maxVolumeL /= 32767.; *maxVolume = maxVolumeL; + float samplesWindowed[_SampleCt]; + for(int i = 0; i < _SampleCt; i++){ - samples[i] *= _Window[i]; + samplesWindowed[i] = samples[i] * _Window[i]; } // Now analyze the samples and get peaks at the most appropriate tones - SPeak peaks[_MaxPeaks]; - InitPeaks(peaks); - //Attention: We have a peak at lag 0 that might stretch that far, that we detect a wrong "peak" at _MaxHalfTone //Because of that we filter out all tones that are past the last zero crossing from below but keep tones with decreasing weights (going towards zero crossing from above) int lastValidTone = 0; float lastWeight = 1.f; + float maxWeight = 0.f; for (int toneIndex = _MinHalfTone; toneIndex <= _MaxHalfTone; toneIndex++) { - float curWeight = _AnalyzeByTone(samples, toneIndex); + float curWeight = _AnalyzeByTone(samples, samplesWindowed, toneIndex); - AddPeak(peaks, curWeight, toneIndex); + if(curWeight > maxWeight){ + maxWeight = curWeight; + } weights[toneIndex - _MinHalfTone] = curWeight; @@ -137,7 +139,7 @@ int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* // Now clear off the lag 0 peak if required - if(peaks[_MaxPeaks - 1].toneIndex ==_MaxHalfTone){ + if(maxWeight >= weights[_MaxHalfTone]){ //We might have caught the lag 0 peak so go a bit further to check for other zero crossings (or we won't be able to detect _MaxHalfTone) float lastWeight = _AKFByTone(samples, _MaxHalfTone); for(int toneIndex = _MaxHalfTone+1; toneIndex <= _MaxHalfTone + _HalfTonesAdd; toneIndex++){ @@ -148,40 +150,57 @@ int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* } lastWeight = curWeight; } - if(lastValidTone < peaks[_MaxPeaks - 1].toneIndex){ - InitPeaks(peaks); - for(int toneIndex = _MinHalfTone; toneIndex <= lastValidTone; toneIndex++){ - AddPeak(peaks, weights[toneIndex - _MinHalfTone], toneIndex); - } - //Set all invalid weights to 0 - for(int toneIndex = lastValidTone + 1;toneIndex < _MaxHalfTone; toneIndex++){ - weights[toneIndex - _MinHalfTone] = 0.f; - } + //Set all invalid weights to 0 + for(int toneIndex = lastValidTone + 1;toneIndex < _MaxHalfTone; toneIndex++){ + weights[toneIndex - _MinHalfTone] = 0.f; } } + SPeak peaks[_MaxPeaks]; + InitPeaks(peaks); + int numPeaks = 0; + bool up = true; + for(int i = _MinHalfTone + 1; i <= _MaxHalfTone; i++){ + if(weights[i-1] > weights[i]){ + if(up){ + AddPeak(peaks, weights[i - 1 - _MinHalfTone], i - 1); + numPeaks++; + up = false; + } + }else if(!up){ + up = true; + } + } + if(up){ + AddPeak(peaks, weights[_MaxHalfTone - _MinHalfTone], _MaxHalfTone); + numPeaks++; + } + if(numPeaks > _MaxPeaks) + numPeaks = _MaxPeaks; + // Further analyze the found peaks and find the real maximum // This is necessary because we may have our real peak a bit off the exact tone frequency // and a 'wrong' peak that is exactly at another tone which might become higher than the one at the 'right' tone - int maxTone = peaks[_MaxPeaks - 1].toneIndex; + int maxTone = peaks[_MaxPeaks-1].toneIndex; int maxToneFine = -1; - float maxWeight = peaks[_MaxPeaks - 1].weight; - for(int i = 0; i < _MaxPeaks; i++){ + maxWeight = peaks[_MaxPeaks-1].weight; + for(int i = _MaxPeaks - numPeaks; i < _MaxPeaks; i++){ + float curWeight = peaks[i].weight; + if(curWeight * 3.f < maxWeight) + continue; int toneIndex = peaks[i].toneIndex; - float curWeightCenter = peaks[i].weight; - float curWeightDown = _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerToneFine[toneIndex * 2]); - float curWeight; + float curWeightDown = _AnalyzeBySampleCt(samples, samplesWindowed, _SamplesPerPeriodPerToneFine[toneIndex * 2]); int otherToneIndex; int otherToneFineIndex; - if(curWeightDown > curWeightCenter){ + if(curWeightDown > curWeight){ otherToneIndex = toneIndex - 1; otherToneFineIndex = 1; curWeight = curWeightDown; }else{ - float curWeightUp = _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerToneFine[toneIndex * 2 + 1]); - if(curWeightUp > curWeightCenter){ - otherToneIndex = (toneIndex < _MaxHalfTone)? toneIndex + 1: -1; // If the other tone is invalid just set it to -1 which will be skipped below + float curWeightUp = _AnalyzeBySampleCt(samples, samplesWindowed, _SamplesPerPeriodPerToneFine[toneIndex * 2 + 1]); + if(curWeightUp > curWeight){ + otherToneIndex = (toneIndex < _MaxHalfTone) ? toneIndex + 1: -1; // If the other tone is invalid just set it to -1 which will be skipped below otherToneFineIndex = 0; curWeight = curWeightUp; }else @@ -196,7 +215,7 @@ int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* // Now check also neighbouring tone if(otherToneIndex > 0){ - float curWeightOther = _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerToneFine[otherToneIndex * 2 + otherToneFineIndex]); + float curWeightOther = _AnalyzeBySampleCt(samples, samplesWindowed, _SamplesPerPeriodPerToneFine[otherToneIndex * 2 + otherToneFineIndex]); if(curWeightOther > weights[otherToneIndex - _MinHalfTone]){ weights[otherToneIndex - _MinHalfTone] = curWeightOther; if(curWeightOther > maxWeight){ @@ -209,45 +228,26 @@ int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* } float energy = _AKFBySampleCt(samples, 0); - float maxAKF = (maxToneFine < 0) ? _AKFByTone(samples, maxTone):_AKFBySampleCt(samples, _SamplesPerPeriodPerToneFine[maxTone * 2 + maxToneFine]); - float aa = _AKFByTone(samples, maxTone); + float maxAKF = (maxToneFine < 0) ? _AKFByTone(samples, maxTone) : _AKFBySampleCt(samples, _SamplesPerPeriodPerToneFine[maxTone * 2 + maxToneFine]); //if(maxWeight - minWeight > 0.025){ - if(maxAKF >= 0.4 * energy){ + if(maxAKF >= 0.35f * energy){ return maxTone; }else return -1; } -float PtAKF::_AnalyzeByTone(float* restrict samples, int toneIndex){ - return _AnalyzeBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); +float PtAKF::_AnalyzeByTone(float* restrict samples, float* restrict samplesWindowed, int toneIndex){ + return _AnalyzeBySampleCt(samples, samplesWindowed, _SamplesPerPeriodPerTone[toneIndex]); } -float PtAKF::_AnalyzeBySampleCt(float* restrict samples, float samplesPerPeriodD){ +float PtAKF::_AnalyzeBySampleCt(float* restrict samples, float* restrict samplesWindowed, float samplesPerPeriodD){ // Use method by Kobayashi and Shimamura (2001): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 - int samplesPerPeriod = static_cast(samplesPerPeriodD); - float fHigh = samplesPerPeriodD - samplesPerPeriod; - float fLow = 1.0f - fHigh; - float accumDistAKF = 0; // accumulated distances - float accumDistAMDF = 0; // accumulated distances - - // compare correlating samples - int sampleIndex = 0; // index of sample to analyze - // Start value= index of sample one period ahead - for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _SampleCt; correlatingSampleIndex++, sampleIndex++) - { - // calc distance to corresponding sample in next period - float xn = samples[sampleIndex]; - float xnt = samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh; - accumDistAKF += xn * xnt; - accumDistAMDF += abs(xn - xnt); - } - - accumDistAKF /= _SampleCt; - accumDistAMDF /= sampleIndex; + float akf = _AKFBySampleCt(samplesWindowed, samplesPerPeriodD); + float amdf = _AMDFBySampleCt(samples, samplesPerPeriodD); //return accumDistAKF / (accumDistAMDF * 32767.f + 32767.f * 32767.f); // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once - float result = accumDistAKF / (accumDistAMDF + 1.f); + float result = akf / (amdf + 1.f); return result; // Need to scale AKF by MAX^2 and AMDF by MAX, so do some maths to divide only once //{toneIndex}: {accumDistAKF} ; {accumDistAMDF}; {result} } @@ -257,12 +257,11 @@ float PtAKF::_AKFByTone(float* restrict samples, int toneIndex){ } float PtAKF::_AKFBySampleCt(float* restrict samples, float samplesPerPeriodD){ - // Do a fast, non-scaled AKF (used e.g. for Lag 0 peak removal) int samplesPerPeriod = static_cast(samplesPerPeriodD); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; - float accumDistAKF = 0; // accumulated distances + float accumDist = 0; // accumulated distances // compare correlating samples int sampleIndex = 0; // index of sample to analyze @@ -272,10 +271,35 @@ float PtAKF::_AKFBySampleCt(float* restrict samples, float samplesPerPeriodD){ // calc distance to corresponding sample in next period float xn = samples[sampleIndex]; float xnt = samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh; - accumDistAKF += xn * xnt; + accumDist += xn * xnt; } - return accumDistAKF; + return accumDist / _SampleCt; +} + +float PtAKF::_AMDFByTone(float* restrict samples, int toneIndex){ + return _AKFBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); +} + +float PtAKF::_AMDFBySampleCt(float* restrict samples, float samplesPerPeriodD){ + int samplesPerPeriod = static_cast(samplesPerPeriodD); + float fHigh = samplesPerPeriodD - samplesPerPeriod; + float fLow = 1.0f - fHigh; + + float accumDist = 0; // accumulated distances + + // compare correlating samples + int sampleIndex = 0; // index of sample to analyze + // Start value= index of sample one period ahead + for (int correlatingSampleIndex = sampleIndex + samplesPerPeriod; correlatingSampleIndex + 1 < _SampleCt; correlatingSampleIndex++, sampleIndex++) + { + // calc distance to corresponding sample in next period + float xn = samples[sampleIndex]; + float xnt = samples[correlatingSampleIndex] * fLow + samples[correlatingSampleIndex + 1] * fHigh; + accumDist += abs(xn - xnt); + } + + return accumDist / sampleIndex; } /* diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index 688e04d0..02a2baf2 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -41,19 +41,21 @@ private: static float* restrict _SamplesPerPeriodPerToneFine; static float* restrict _Window; static constexpr int _MinHalfTone = 0; //C2 - static constexpr int _MaxHalfTone = 55;//47; //B5 + static constexpr int _MaxHalfTone = 56;//47; //B5 static constexpr int _HalfTonesAdd = 4; //Additonal half tones to analyze to remove the peak at lag 0 - static constexpr int _MaxPeaks = 3; + static constexpr int _MaxPeaks = 10; constexpr static size_t _SampleCt = 2048; RingBuffer<_SampleCt * 2> _AnalysisBuf; unsigned _Step; static int _GetNote(float* restrict samples, double* restrict maxVolume, float* restrict weights); - static float _AnalyzeBySampleCt(float* restrict samples, float samplesPerPeriodD); - static inline float _AnalyzeByTone(float* restrict samples, int toneIndex); + static float _AnalyzeBySampleCt(float* restrict samples, float* restrict samplesWindowed, float samplesPerPeriodD); + static inline float _AnalyzeByTone(float* restrict samples, float* restrict samplesWindowed, int toneIndex); static float _AKFBySampleCt(float* restrict samples, float samplesPerPeriodD); static inline float _AKFByTone(float* restrict samples, int toneIndex); + static float _AMDFBySampleCt(float* restrict samples, float samplesPerPeriodD); + static inline float _AMDFByTone(float* restrict samples, int toneIndex); static inline void InitPeaks(SPeak peaks[_MaxPeaks]); static inline void AddPeak(SPeak peaks[_MaxPeaks], float curWeight, int toneIndex); }; \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 2479c76a..df6284a3 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -193,8 +193,8 @@ namespace Vocaluxe.Lib.Sound.Record if (_TestFile("toneG4.wav", 31)) ok++; tests++;*/ - _TestFile("sClausVoc.wav", "sClausVoc.txt", ref tests, ref ok); _TestFile("whistling3.wav", "whistling3.txt", ref tests, ref ok); + _TestFile("sClausVoc.wav", "sClausVoc.txt", ref tests, ref ok); _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); Stopwatch sw = new Stopwatch(); @@ -255,6 +255,22 @@ namespace Vocaluxe.Lib.Sound.Record return ok >= ct - 4; } + private bool _IsNoteValid(int note, int time, IList tones) + { + const int lastNoteMaxTimeDiff = 1024 * 1000 / 44100; // old note is valid for 1024 more samples + for (int i = 0; i < tones.Count; i++) + { + if (tones[i].Time > time) + break; + if (i + 1 == tones.Count || time <= tones[i + 1].Time + lastNoteMaxTimeDiff) + { + if (tones[i].Note == note) + return true; + } + } + return false; + } + private void _TestFile(string fileName, IList tones, ref int ct, ref int ok) { CWavFile wavFile = new CWavFile(); @@ -270,9 +286,6 @@ namespace Vocaluxe.Lib.Sound.Record int samplesRead = 0; int curTimeIndex = -1; int curNote = -1; - int lastNote = -1; //It is ok not to detect a note change immediately so the old note is kept for a bit as ok - int lastNoteEndTime = 0; - const int lastNoteMaxTimeDiff = 1024 * 1000 / 44100; // old note is valid for 1024 more samples const int maxSamplesPerBatch = 512; CAnalyzer analyzer2 = new CAnalyzer(); CPtDyWa analyzer3 = new CPtDyWa(); @@ -290,14 +303,10 @@ namespace Vocaluxe.Lib.Sound.Record while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) { curTimeIndex++; - lastNote = curNote; - lastNoteEndTime = tones[curTimeIndex].Time; curNote = tones[curTimeIndex].Note; } if (curNote < 0) continue; - if (lastNoteEndTime + lastNoteMaxTimeDiff < time) - lastNote = curNote; int tone1 = ToneValid ? ToneAbs : -1; int tone2 = (int)Math.Round(analyzer2.FindNote(64, 1770)); int tone3 = (int)Math.Round(analyzer3.GetNote()); @@ -308,9 +317,9 @@ namespace Vocaluxe.Lib.Sound.Record CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(ToneAbs)); else ok++;*/ - bool ok1 = tone1 == curNote || tone1 == lastNote; - bool ok2 = tone2 == curNote || tone2 == lastNote; - bool ok3 = tone3 == curNote || tone3 == lastNote; + bool ok1 = _IsNoteValid(tone1, time, tones); + bool ok2 = _IsNoteValid(tone2, time, tones); + bool ok3 = _IsNoteValid(tone3, time, tones); if (!ok1 || !ok2 || !ok3) { CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms detected as " + _ToneToNote(tone1) + (ok1 ? "" : "(!)") + "; " + _ToneToNote(tone2) + From 5f79406cf2c611aab714f90ca9f26dab1a95ba1c Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 15 Apr 2014 14:23:32 +0200 Subject: [PATCH 078/116] Add another pitch tracker and compare all 4 --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 47 +- .../Lib/Sound/Record/Pitch/CircularBuffer.cs | 176 +++++ Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs | 108 +++ Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs | 616 ++++++++++++++++++ Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs | 577 ++++++++++++++++ .../Lib/Sound/Record/Pitch/PitchTracker.cs | 414 ++++++++++++ Vocaluxe/Vocaluxe.csproj | 5 + 7 files changed, 1932 insertions(+), 11 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs create mode 100644 Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs create mode 100644 Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs create mode 100644 Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs create mode 100644 Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index df6284a3..755aa118 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.IO; using System.Windows.Forms; using System.Diagnostics; +using Pitch; using VocaluxeLib; using VocaluxeLib.Utils; @@ -289,6 +290,10 @@ namespace Vocaluxe.Lib.Sound.Record const int maxSamplesPerBatch = 512; CAnalyzer analyzer2 = new CAnalyzer(); CPtDyWa analyzer3 = new CPtDyWa(); + PitchTracker analyzer4 = new PitchTracker {SampleRate = 44100, DetectLevelThreshold = 0.001f}; + int[] detectedTones = new int[4]; + int[] oks = new int[4]; + int lCt = 0; while (wavFile.NumSamplesLeft > maxSamplesPerBatch) { byte[] samples = wavFile.GetNextSamples16BitAsBytes(maxSamplesPerBatch, 1); @@ -300,6 +305,12 @@ namespace Vocaluxe.Lib.Sound.Record analyzer3.Input(samples); analyzer2.Process(); analyzer3.Process(); + short[] samplesShort = new short[samples.Length / 2]; + Buffer.BlockCopy(samples, 0, samplesShort, 0, samples.Length); + float[] samplesFloat = new float[samplesShort.Length]; + for (int i = 0; i < samplesShort.Length; i++) + samplesFloat[i] = (float)samplesShort[i] / short.MaxValue; + analyzer4.ProcessBuffer(samplesFloat); while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) { curTimeIndex++; @@ -307,25 +318,39 @@ namespace Vocaluxe.Lib.Sound.Record } if (curNote < 0) continue; - int tone1 = ToneValid ? ToneAbs : -1; - int tone2 = (int)Math.Round(analyzer2.FindNote(64, 1770)); - int tone3 = (int)Math.Round(analyzer3.GetNote()); - /*ct++; - if (!ToneValid) + detectedTones[0] = ToneValid ? ToneAbs : -1; + detectedTones[1] = (int)Math.Round(analyzer2.FindNote(64, 1770)); + detectedTones[2] = (int)Math.Round(analyzer3.GetNote()); + detectedTones[3] = analyzer4.CurrentPitchRecord.MidiNote - 15 - 21; + lCt++; + /*if (!ToneValid) CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms not detected"); else if (ToneAbs % 12 != curNote % 12) CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(ToneAbs)); else ok++;*/ - bool ok1 = _IsNoteValid(tone1, time, tones); - bool ok2 = _IsNoteValid(tone2, time, tones); - bool ok3 = _IsNoteValid(tone3, time, tones); - if (!ok1 || !ok2 || !ok3) + bool[] valids = new bool[4]; + bool error = false; + for (int i = 0; i < 4; i++) { - CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms detected as " + _ToneToNote(tone1) + (ok1 ? "" : "(!)") + "; " + _ToneToNote(tone2) + - (ok2 ? "" : "(!)") + "; " + _ToneToNote(tone3) + (ok3 ? "" : "(!)") + "; "); + valids[i] = _IsNoteValid(detectedTones[i], time, tones); + if (valids[i]) + oks[i]++; + else + error = true; + } + if (error) + { + string msg = "Note " + _ToneToNote(curNote) + " at " + time + "ms detected as "; + for (int i = 0; i < 4; i++) + msg += _ToneToNote(detectedTones[i]) + (valids[i] ? "" : "(!)") + "; "; + CBase.Log.LogDebug(msg); } } + string msg2 = "Detected "; + for (int i = 0; i < 4; i++) + msg2 += oks[i] + "|" + (lCt - oks[i]) + " "; + CBase.Log.LogDebug(msg2); } catch (Exception e) { diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs b/Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs new file mode 100644 index 00000000..d784e2df --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; + +namespace Pitch +{ + public class CircularBuffer : IDisposable + { + int m_bufSize; + int m_begBufOffset; + int m_availBuf; + long m_startPos; // total circular buffer position + T[] m_buffer; + + ///

    + /// Constructor + /// + public CircularBuffer() + { + } + + /// + /// Constructor + /// + /// + public CircularBuffer(int bufCount) + { + SetSize(bufCount); + } + + /// + /// Dispose + /// + public void Dispose() + { + SetSize(0); + } + + /// + /// Reset to the beginning of the buffer + /// + public void Reset() + { + m_begBufOffset = 0; + m_availBuf = 0; + m_startPos = 0; + } + + /// + /// Set the buffer to the specified size + /// + /// + public void SetSize(int newSize) + { + Reset(); + + if (m_bufSize == newSize) + return; + + if (m_buffer != null) + m_buffer = null; + + m_bufSize = newSize; + + if (m_bufSize > 0) + m_buffer = new T[m_bufSize]; + } + + /// + /// Clear the buffer + /// + public void Clear() + { + Array.Clear(m_buffer, 0, m_buffer.Length); + } + + /// + /// Get or set the start position + /// + public long StartPosition + { + get { return m_startPos; } + set { m_startPos = value; } + } + + /// + /// Get the end position + /// + public long EndPosition + { + get { return m_startPos + m_availBuf; } + } + + /// + /// Get or set the amount of avaliable space + /// + public int Available + { + get { return m_availBuf; } + set { m_availBuf = Math.Min(value, m_bufSize); } + } + + /// + /// Write data into the buffer + /// + /// + /// + /// + public int WriteBuffer(T[] m_pInBuffer, int count) + { + count = Math.Min(count, m_bufSize); + + var startPos = m_availBuf != m_bufSize ? m_availBuf : m_begBufOffset; + var pass1Count = Math.Min(count, m_bufSize - startPos); + var pass2Count = count - pass1Count; + + PitchDsp.CopyBuffer(m_pInBuffer, 0, m_buffer, startPos, pass1Count); + + if (pass2Count > 0) + PitchDsp.CopyBuffer(m_pInBuffer, pass1Count, m_buffer, 0, pass2Count); + + if (pass2Count == 0) + { + // did not wrap around + if (m_availBuf != m_bufSize) + m_availBuf += count; // have never wrapped around + else + { + m_begBufOffset += count; + m_startPos += count; + } + } + else + { + // wrapped around + if (m_availBuf != m_bufSize) + m_startPos += pass2Count; // first time wrap-around + else + m_startPos += count; + + m_begBufOffset = pass2Count; + m_availBuf = m_bufSize; + } + + return count; + } + + /// + /// Read from the buffer + /// + /// + /// + /// + /// + public bool ReadBuffer(T[] outBuffer, long startRead, int readCount) + { + var endRead = (int)(startRead + readCount); + var endAvail = (int)(m_startPos + m_availBuf); + + if (startRead < m_startPos || endRead > endAvail) + return false; + + var startReadPos = (int)(((startRead - m_startPos) + m_begBufOffset) % m_bufSize); + var block1Samples = Math.Min(readCount, m_bufSize - startReadPos); + var block2Samples = readCount - block1Samples; + + PitchDsp.CopyBuffer(m_buffer, startReadPos, outBuffer, 0, block1Samples); + + if (block2Samples > 0) + PitchDsp.CopyBuffer(m_buffer, 0, outBuffer, block1Samples, block2Samples); + + return true; + } + } +} diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs b/Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs new file mode 100644 index 00000000..2487ea18 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Pitch +{ + public static class Extensions + { + /// + /// Clear the buffer + /// + /// + /// + static public void Clear(this float[] buffer) + { + Array.Clear(buffer, 0, buffer.Length); + } + + /// + /// Clear the buffer + /// + /// + /// + static public void Clear(this double[] buffer) + { + Array.Clear(buffer, 0, buffer.Length); + } + + /// + /// Copy the values from one buffer to a different or the same buffer. + /// It is safe to copy to the same buffer, even if the areas overlap + /// + /// + /// + /// + /// + static public void Copy(this float[] fromBuffer, float[] toBuffer, int fromStart, int toStart, int length) + { + if (toBuffer == null || fromBuffer.Length == 0 || toBuffer.Length == 0) + return; + + var fromBegIdx = fromStart; + var fromEndIdx = fromStart + length; + var toBegIdx = toStart; + var toEndIdx = toStart + length; + + if (fromBegIdx < 0) + { + toBegIdx -= fromBegIdx; + fromBegIdx = 0; + } + + if (toBegIdx < 0) + { + fromBegIdx -= toBegIdx; + toBegIdx = 0; + } + + if (fromEndIdx >= fromBuffer.Length) + { + toEndIdx -= fromEndIdx - fromBuffer.Length + 1; + fromEndIdx = fromBuffer.Length - 1; + } + + if (toEndIdx >= toBuffer.Length) + { + fromEndIdx -= toEndIdx - toBuffer.Length + 1; + toEndIdx = fromBuffer.Length - 1; + } + + if (fromBegIdx < toBegIdx) + { + // Shift right, so start at the right + for (int fromIdx = fromEndIdx, toIdx = toEndIdx; fromIdx >= fromBegIdx; fromIdx--, toIdx--) + toBuffer[toIdx] = fromBuffer[fromIdx]; + } + else + { + // Shift left, so start at the left + for (int fromIdx = fromBegIdx, toIdx = toBegIdx; fromIdx <= fromEndIdx; fromIdx++, toIdx++) + toBuffer[toIdx] = fromBuffer[fromIdx]; + } + } + + /// + /// + /// + /// + /// + static public void Clear(this float[] buffer, int startIdx, int endIdx) + { + Array.Clear(buffer, startIdx, endIdx - startIdx + 1); + } + + /// + /// Fill the buffer with the specified value + /// + /// + /// + /// + static public void Fill(this double[] buffer, double value) + { + for (int idx = 0; idx < buffer.Length; idx++) + buffer[idx] = value; + } + } +} diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs b/Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs new file mode 100644 index 00000000..8759c77e --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs @@ -0,0 +1,616 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Pitch +{ + /// + /// Infinite impulse response filter (old style analog filters) + /// + class IIRFilter + { + /// + /// The type of filter + /// + public enum FilterType + { + None = 0, + LP, + HP, + BP + } + + /// + /// The filter prototype + /// + public enum ProtoType + { + None = 0, + Butterworth, + Chebyshev, + } + + const int kHistMask = 31; + const int kHistSize = 32; + + private int m_order; + private ProtoType m_protoType; + private FilterType m_filterType; + + private float m_fp1; + private float m_fp2; + private float m_fN; + private float m_ripple; + private float m_sampleRate; + private double[] m_real; + private double[] m_imag; + private double[] m_z; + private double[] m_aCoeff; + private double[] m_bCoeff; + private double[] m_inHistory; + private double[] m_outHistory; + private int m_histIdx; + private bool m_invertDenormal; + + public IIRFilter() + { + } + + /// + /// Returns true if all the filter parameters are valid + /// + public bool FilterValid + { + get + { + if (m_order < 1 || m_order > 16 || + m_protoType == ProtoType.None || + m_filterType == FilterType.None || + m_sampleRate <= 0.0f || + m_fN <= 0.0f) + return false; + + switch (m_filterType) + { + case FilterType.LP: + if (m_fp2 <= 0.0f) + return false; + break; + + case FilterType.BP: + if (m_fp1 <= 0.0f || m_fp2 <= 0.0f || m_fp1 >= m_fp2) + return false; + break; + + case FilterType.HP: + if (m_fp1 <= 0.0f) + return false; + break; + } + + // For bandpass, the order must be even + if (m_filterType == FilterType.BP && (m_order & 1) != 0) + return false; + + return true; + } + } + + /// + /// Set the filter prototype + /// + public ProtoType Proto + { + get { return m_protoType; } + + set + { + m_protoType = value; + Design(); + } + } + + /// + /// Set the filter type + /// + public FilterType Type + { + get { return m_filterType; } + + set + { + m_filterType = value; + Design(); + } + } + + public int Order + { + get { return m_order; } + + set + { + m_order = Math.Min(16, Math.Max(1, Math.Abs(value))); + + if (m_filterType == FilterType.BP && Odd(m_order)) + m_order++; + + Design(); + } + } + + public float SampleRate + { + get { return m_sampleRate; } + + set + { + m_sampleRate = value; + m_fN = 0.5f * m_sampleRate; + Design(); + } + } + + public float FreqLow + { + get { return m_fp1; } + + set + { + m_fp1 = value; + Design(); + } + } + + public float FreqHigh + { + get { return m_fp2; } + + set + { + m_fp2 = value; + Design(); + } + } + + public float Ripple + { + get { return m_ripple; } + + set + { + m_ripple = value; + Design(); + } + } + + /// + /// Returns true if n is odd + /// + /// + /// + private bool Odd(int n) + { + return (n & 1) == 1; + } + + /// + /// Square + /// + /// + /// + private float Sqr(float value) + { + return value * value; + } + + /// + /// Square + /// + /// + /// + private double Sqr(double value) + { + return value * value; + } + + /// + /// Determines poles and zeros of IIR filter + /// based on bilinear transform method + /// + private void LocatePolesAndZeros() + { + m_real = new double[m_order + 1]; + m_imag = new double[m_order + 1]; + m_z = new double[m_order + 1]; + double ln10 = Math.Log(10.0); + + // Butterworth, Chebyshev parameters + int n = m_order; + + if (m_filterType == FilterType.BP) + n = n / 2; + + int ir = n % 2; + int n1 = n + ir; + int n2 = (3 * n + ir) / 2 - 1; + double f1; + + switch (m_filterType) + { + case FilterType.LP: + f1 = m_fp2; + break; + + case FilterType.HP: + f1 = m_fN - m_fp1; + break; + + case FilterType.BP: + f1 = m_fp2 - m_fp1; + break; + + default: + f1 = 0.0; + break; + } + + double tanw1 = Math.Tan(0.5 * Math.PI * f1 / m_fN); + double tansqw1 = Sqr(tanw1); + + // Real and Imaginary parts of low-pass poles + double t, a = 1.0, r = 1.0, i = 1.0; + + for (int k = n1; k <= n2; k++) + { + t = 0.5 * (2 * k + 1 - ir) * Math.PI / (double)n; + + switch (m_protoType) + { + case ProtoType.Butterworth: + double b3 = 1.0 - 2.0 * tanw1 * Math.Cos(t) + tansqw1; + r = (1.0 - tansqw1) / b3; + i = 2.0 * tanw1 * Math.Sin(t) / b3; + break; + + case ProtoType.Chebyshev: + double d = 1.0 - Math.Exp(-0.05 * m_ripple * ln10); + double e = 1.0 / Math.Sqrt(1.0 / Sqr(1.0 - d) - 1.0); + double x = Math.Pow(Math.Sqrt(e * e + 1.0) + e, 1.0 / (double)n); + a = 0.5 * (x - 1.0 / x); + double b = 0.5 * (x + 1.0 / x); + double c3 = a * tanw1 * Math.Cos(t); + double c4 = b * tanw1 * Math.Sin(t); + double c5 = Sqr(1.0 - c3) + Sqr(c4); + r = 2.0 * (1.0 - c3) / c5 - 1.0; + i = 2.0 * c4 / c5; + break; + } + + int m = 2 * (n2 - k) + 1; + m_real[m + ir] = r; + m_imag[m + ir] = Math.Abs(i); + m_real[m + ir + 1] = r; + m_imag[m + ir + 1] = -Math.Abs(i); + } + + if (Odd(n)) + { + if (m_protoType == ProtoType.Butterworth) + r = (1.0 - tansqw1) / (1.0 + 2.0 * tanw1 + tansqw1); + + if (m_protoType == ProtoType.Chebyshev) + r = 2.0 / (1.0 + a * tanw1) - 1.0; + + m_real[1] = r; + m_imag[1] = 0.0; + } + + switch (m_filterType) + { + case FilterType.LP: + for (int m = 1; m <= n; m++) + m_z[m] = -1.0; + break; + + case FilterType.HP: + // Low-pass to high-pass transformation + for (int m = 1; m <= n; m++) + { + m_real[m] = -m_real[m]; + m_z[m] = 1.0; + } + break; + + case FilterType.BP: + // Low-pass to bandpass transformation + for (int m = 1; m <= n; m++) + { + m_z[m] = 1.0; + m_z[m + n] = -1.0; + } + + double f4 = 0.5 * Math.PI * m_fp1 / m_fN; + double f5 = 0.5 * Math.PI * m_fp2 / m_fN; + double aa = Math.Cos(f4 + f5) / Math.Cos(f5 - f4); + double aR, aI, h1, h2, p1R, p2R, p1I, p2I; + + for (int m1 = 0; m1 <= (m_order - 1) / 2; m1++) + { + int m = 1 + 2 * m1; + aR = m_real[m]; + aI = m_imag[m]; + + if (Math.Abs(aI) < 0.0001) + { + h1 = 0.5 * aa * (1.0 + aR); + h2 = Sqr(h1) - aR; + if (h2 > 0.0) + { + p1R = h1 + Math.Sqrt(h2); + p2R = h1 - Math.Sqrt(h2); + p1I = 0.0; + p2I = 0.0; + } + else + { + p1R = h1; + p2R = h1; + p1I = Math.Sqrt(Math.Abs(h2)); + p2I = -p1I; + } + } + else + { + double fR = aa * 0.5 * (1.0 + aR); + double fI = aa * 0.5 * aI; + double gR = Sqr(fR) - Sqr(fI) - aR; + double gI = 2 * fR * fI - aI; + double sR = Math.Sqrt(0.5 * Math.Abs(gR + Math.Sqrt(Sqr(gR) + Sqr(gI)))); + double sI = gI / (2.0 * sR); + p1R = fR + sR; + p1I = fI + sI; + p2R = fR - sR; + p2I = fI - sI; + } + + m_real[m] = p1R; + m_real[m + 1] = p2R; + m_imag[m] = p1I; + m_imag[m + 1] = p2I; + } + + if (Odd(n)) + { + m_real[2] = m_real[n + 1]; + m_imag[2] = m_imag[n + 1]; + } + + for (int k = n; k >= 1; k--) + { + int m = 2 * k - 1; + m_real[m] = m_real[k]; + m_real[m + 1] = m_real[k]; + m_imag[m] = Math.Abs(m_imag[k]); + m_imag[m + 1] = -Math.Abs(m_imag[k]); + } + + break; + } + } + + /// + /// Calculate all the values + /// + public void Design() + { + if (!this.FilterValid) + return; + + m_aCoeff = new double[m_order + 1]; + m_bCoeff = new double[m_order + 1]; + m_inHistory = new double[kHistSize]; + m_outHistory = new double[kHistSize]; + + double[] newA = new double[m_order + 1]; + double[] newB = new double[m_order + 1]; + + // Find filter poles and zeros + LocatePolesAndZeros(); + + // Compute filter coefficients from pole/zero values + m_aCoeff[0] = 1.0; + m_bCoeff[0] = 1.0; + + for (int i = 1; i <= m_order; i++) + { + m_aCoeff[i] = 0.0; + m_bCoeff[i] = 0.0; + } + + int k = 0; + int n = m_order; + int pairs = n / 2; + + if (Odd(m_order)) + { + // First subfilter is first order + m_aCoeff[1] = -m_z[1]; + m_bCoeff[1] = -m_real[1]; + k = 1; + } + + for (int p = 1; p <= pairs; p++) + { + int m = 2 * p - 1 + k; + double alpha1 = -(m_z[m] + m_z[m + 1]); + double alpha2 = m_z[m] * m_z[m + 1]; + double beta1 = -2.0 * m_real[m]; + double beta2 = Sqr(m_real[m]) + Sqr(m_imag[m]); + + newA[1] = m_aCoeff[1] + alpha1 * m_aCoeff[0]; + newB[1] = m_bCoeff[1] + beta1 * m_bCoeff[0]; + + for (int i = 2; i <= n; i++) + { + newA[i] = m_aCoeff[i] + alpha1 * m_aCoeff[i - 1] + alpha2 * m_aCoeff[i - 2]; + newB[i] = m_bCoeff[i] + beta1 * m_bCoeff[i - 1] + beta2 * m_bCoeff[i - 2]; + } + + for (int i = 1; i <= n; i++) + { + m_aCoeff[i] = newA[i]; + m_bCoeff[i] = newB[i]; + } + } + + // Ensure the filter is normalized + FilterGain(1000); + } + + /// + /// Reset the history buffers + /// + public void Reset() + { + if (m_inHistory != null) + m_inHistory.Clear(); + + if (m_outHistory != null) + m_outHistory.Clear(); + + m_histIdx = 0; + } + + /// + /// Reset the filter, and fill the appropriate history buffers with the specified value + /// + /// + public void Reset(double startValue) + { + m_histIdx = 0; + + if (m_inHistory == null || m_outHistory == null) + return; + + m_inHistory.Fill(startValue); + + if (m_inHistory != null) + { + switch (m_filterType) + { + case FilterType.LP: + m_outHistory.Fill(startValue); + break; + + default: + m_outHistory.Clear(); + break; + } + } + } + + /// + /// Apply the filter to the buffer + /// + /// + public void FilterBuffer(float[] srcBuf, long srcPos, float[] dstBuf, long dstPos, long nLen) + { + const double kDenormal = 0.000000000000001; + double denormal = m_invertDenormal ? -kDenormal : kDenormal; + m_invertDenormal = !m_invertDenormal; + + for (int sampleIdx = 0; sampleIdx < nLen; sampleIdx++) + { + double sum = 0.0f; + + m_inHistory[m_histIdx] = srcBuf[srcPos + sampleIdx] + denormal; + + for (int idx = 0; idx < m_aCoeff.Length; idx++) + sum += m_aCoeff[idx] * m_inHistory[(m_histIdx - idx) & kHistMask]; + + for (int idx = 1; idx < m_bCoeff.Length; idx++) + sum -= m_bCoeff[idx] * m_outHistory[(m_histIdx - idx) & kHistMask]; + + m_outHistory[m_histIdx] = sum; + m_histIdx = (m_histIdx + 1) & kHistMask; + dstBuf[dstPos + sampleIdx] = (float)sum; + } + } + + public float FilterSample(float inVal) + { + double sum = 0.0f; + + m_inHistory[m_histIdx] = inVal; + + for (int idx = 0; idx < m_aCoeff.Length; idx++) + sum += m_aCoeff[idx] * m_inHistory[(m_histIdx - idx) & kHistMask]; + + for (int idx = 1; idx < m_bCoeff.Length; idx++) + sum -= m_bCoeff[idx] * m_outHistory[(m_histIdx - idx) & kHistMask]; + + m_outHistory[m_histIdx] = sum; + m_histIdx = (m_histIdx + 1) & kHistMask; + + return (float)sum; + } + + /// + /// Get the gain at the specified number of frequency points + /// + /// + /// + public float[] FilterGain(int freqPoints) + { + // Filter gain at uniform frequency intervals + float[] g = new float[freqPoints]; + double theta, s, c, sac, sas, sbc, sbs; + float gMax = -100.0f; + float sc = 10.0f / (float)Math.Log(10.0f); + double t = Math.PI / (freqPoints - 1); + + for (int i = 0; i < freqPoints; i++) + { + theta = i * t; + + if (i == 0) + theta = Math.PI * 0.0001; + + if (i == freqPoints - 1) + theta = Math.PI * 0.9999; + + sac = 0.0f; + sas = 0.0f; + sbc = 0.0f; + sbs = 0.0f; + + for (int k = 0; k <= m_order; k++) + { + c = Math.Cos(k * theta); + s = Math.Sin(k * theta); + sac += c * m_aCoeff[k]; + sas += s * m_aCoeff[k]; + sbc += c * m_bCoeff[k]; + sbs += s * m_bCoeff[k]; + } + + g[i] = sc * (float)Math.Log((Sqr(sac) + Sqr(sas)) / (Sqr(sbc) + Sqr(sbs))); + gMax = Math.Max(gMax, g[i]); + } + + // Normalize to 0 dB maximum gain + for (int i = 0; i < freqPoints; i++) + g[i] -= gMax; + + // Normalize numerator (a) coefficients + float normFactor = (float)Math.Pow(10.0, -0.05 * gMax); + + for (int i = 0; i <= m_order; i++) + m_aCoeff[i] *= normFactor; + + return g; + } + } +} diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs b/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs new file mode 100644 index 00000000..b04f5bbf --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs @@ -0,0 +1,577 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Collections; + +namespace Pitch +{ + /// + /// Pitch related DSP + /// + public class PitchDsp + { + public static readonly double InverseLog2 = 1.0 / Math.Log10(2.0); + + private const int kCourseOctaveSteps = 96; + private const int kScanHiSize = 31; + private const float kScanHiFreqStep = 1.005f; + private const int kMinMidiNote = 21; // A0 + private const int kMaxMidiNote = 108; // C8 + + private float m_minPitch; + private float m_maxPitch; + private int m_minNote; + private int m_maxNote; + private int m_blockLen14; // 1/4 block len + private int m_blockLen24; // 2/4 block len + private int m_blockLen34; // 3/4 block len + private int m_blockLen44; // 4/4 block len + private double m_sampleRate; + private float m_detectLevelThreshold; + + private int m_numCourseSteps; + private float[] m_pCourseFreqOffset; + private float[] m_pCourseFreq; + private float[] m_scanHiOffset = new float[kScanHiSize]; + private float[] m_peakBuf = new float[kScanHiSize]; + private int m_prevPitchIdx; + private float[] m_detectCurve; + + /// + /// Constructor + /// + /// + /// + /// + /// + public PitchDsp(double sampleRate, float minPitch, float maxPitch, float detectLevelThreshold) + { + m_sampleRate = sampleRate; + m_minPitch = minPitch; + m_maxPitch = maxPitch; + m_detectLevelThreshold = detectLevelThreshold; + + m_minNote = (int)(PitchToMidiNote(m_minPitch) + 0.5f) + 2; + m_maxNote = (int)(PitchToMidiNote(m_maxPitch) + 0.5f) - 2; + + m_blockLen44 = (int)(m_sampleRate / m_minPitch + 0.5f); + m_blockLen34 = (m_blockLen44 * 3) / 4; + m_blockLen24 = m_blockLen44 / 2; + m_blockLen14 = m_blockLen44 / 4; + + m_numCourseSteps = (int)((Math.Log((double)m_maxPitch / (double)m_minPitch) / Math.Log(2.0)) * kCourseOctaveSteps + 0.5) + 3; + + m_pCourseFreqOffset = new float[m_numCourseSteps + 10000]; + m_pCourseFreq = new float[m_numCourseSteps + 10000]; + + m_detectCurve = new float[m_numCourseSteps]; + + double freqStep = 1.0 / Math.Pow(2.0, 1.0 / kCourseOctaveSteps); + double curFreq = m_maxPitch / freqStep; + + // frequency is stored from high to low + for (int idx = 0; idx < m_numCourseSteps; idx++) + { + m_pCourseFreq[idx] = (float)curFreq; + m_pCourseFreqOffset[idx] = (float)(m_sampleRate / curFreq); + curFreq *= freqStep; + } + + for (int idx = 0; idx < kScanHiSize; idx++) + m_scanHiOffset[idx] = (float)Math.Pow(kScanHiFreqStep, (kScanHiSize / 2) - idx); + } + + /// + /// Get the max detected pitch + /// + public float MaxPitch + { + get { return m_maxPitch; } + } + + /// + /// Get the min detected pitch + /// + public float MinPitch + { + get { return m_minPitch; } + } + + /// + /// Get the max note + /// + public int MaxNote + { + get { return m_maxNote; } + } + + /// + /// Get the min note + /// + public int MinNote + { + get { return m_minNote; } + } + + /// + /// Detect the pitch + /// + public float DetectPitch(float[] samplesLo, float[] samplesHi, int numSamples) + { + float pitch = 0.0f; + + if (!LevelIsAbove(samplesLo, numSamples, m_detectLevelThreshold) && + !LevelIsAbove(samplesHi, numSamples, m_detectLevelThreshold)) + { + // Level is too low + return 0.0f; + } + + pitch = DetectPitchLo(samplesLo, samplesHi); + return pitch; + } + + /// + /// Low resolution pitch detection + /// + /// + /// + /// + /// + /// + /// + private float DetectPitchLo(float[] samplesLo, float[] samplesHi) + { + m_detectCurve.Clear(); + + const int skipSize = 8; + const int peakScanSize = 23; + const int peakScanSizeHalf = peakScanSize / 2; + + float peakThresh1 = 200.0f; + float peakThresh2 = 600.0f; + bool bufferSwitched = false; + + for (int idx = 0; idx < m_numCourseSteps; idx += skipSize) + { + int blockLen = Math.Min(m_blockLen44, (int)m_pCourseFreqOffset[idx] * 2); + float[] curSamples = null; + + // 258 is at 250 Hz, which is the switchover frequency for the two filters + bool loBuffer = idx >= 258; + + if (loBuffer) + { + if (!bufferSwitched) + { + m_detectCurve.Clear(258 - peakScanSizeHalf, 258 + peakScanSizeHalf); + bufferSwitched = true; + } + + curSamples = samplesLo; + } + else + curSamples = samplesHi; + + int stepSizeLoRes = blockLen / 10; + int stepSizeHiRes = Math.Max(1, Math.Min(5, idx * 5 / m_numCourseSteps)); + + float fValue = RatioAbsDiffLinear(curSamples, idx, blockLen, stepSizeLoRes, false); + + if (fValue > peakThresh1) + { + // Do a closer search for the peak + int peakIdx = -1; + float peakVal = 0.0f; + float prevVal = 0.0f; + int dir = 4; // start going forward + int curPos = idx; // start at center of the scan range + int begSearch = Math.Max(idx - peakScanSizeHalf, 0); + int endSearch = Math.Min(idx + peakScanSizeHalf, m_numCourseSteps - 1); + + while (curPos >= begSearch && curPos < endSearch) + { + float curVal = RatioAbsDiffLinear(curSamples, curPos, blockLen, stepSizeHiRes, true); + + if (peakVal < curVal) + { + peakVal = curVal; + peakIdx = curPos; + } + + if (prevVal > curVal) + { + dir = -dir >> 1; + + if (dir == 0) + { + if (peakVal > peakThresh2 && peakIdx >= 6 && peakIdx <= m_numCourseSteps - 7) + { + float fValL = RatioAbsDiffLinear(curSamples, peakIdx - 5, blockLen, stepSizeHiRes, true); + float fValR = RatioAbsDiffLinear(curSamples, peakIdx + 5, blockLen, stepSizeHiRes, true); + float fPointy = peakVal / (fValL + fValR) * 2.0f; + + float minPointy = (m_prevPitchIdx > 0 && Math.Abs(m_prevPitchIdx - peakIdx) < 10) ? 1.2f : 1.5f; + + if (fPointy > minPointy) + { + float pitchHi = DetectPitchHi(curSamples, peakIdx); + + if (pitchHi > 1.0f) + { + m_prevPitchIdx = peakIdx; + return pitchHi; + } + } + } + + break; + } + } + + prevVal = curVal; + curPos += dir; + } + } + } + + m_prevPitchIdx = 0; + return 0.0f; + } + + /// + /// High resolution pitch detection + /// + /// + /// + /// + private float DetectPitchHi(float[] samples, int lowFreqIdx) + { + int peakIdx = -1; + float prevVal = 0.0f; + int dir = 4; // start going forward + int curPos = kScanHiSize >> 1; // start at center of the scan range + + m_peakBuf.Clear(); + + float offset = m_pCourseFreqOffset[lowFreqIdx]; + + while (curPos >= 0 && curPos < kScanHiSize) + { + if (m_peakBuf[curPos] == 0.0f) + m_peakBuf[curPos] = SumAbsDiffHermite(samples, offset * m_scanHiOffset[curPos], m_blockLen44, 1); + + if (peakIdx < 0 || m_peakBuf[peakIdx] < m_peakBuf[curPos]) + peakIdx = curPos; + + if (prevVal > m_peakBuf[curPos]) + { + dir = -dir >> 1; + + if (dir == 0) + { + // found the peak + float minVal = Math.Min(m_peakBuf[peakIdx - 1], m_peakBuf[peakIdx + 1]); + + minVal -= minVal * (1.0f / 32.0f); + + var y1 = (float)Math.Log10(m_peakBuf[peakIdx - 1] - minVal); + var y2 = (float)Math.Log10(m_peakBuf[peakIdx] - minVal); + var y3 = (float)Math.Log10(m_peakBuf[peakIdx + 1] - minVal); + + float fIdx = (float)peakIdx + (y3 - y1) / (2.0f * (2.0f * y2 - y1 - y3)); + + return (float)Math.Pow(kScanHiFreqStep, fIdx - (kScanHiSize / 2)) * m_pCourseFreq[lowFreqIdx]; + } + } + + prevVal = m_peakBuf[curPos]; + curPos += dir; + } + + return 0.0f; + } + + /// + /// Create a sine wave with the specified frequency, amplitude and starting angle. + /// Returns the updated angle. + /// + /// + /// + /// + /// + /// + /// + public static double CreateSineWave(float[] buffer, int numSamples, float sampleRate, + float freq, float amplitude, double startAngle) + { + double angleStep = freq / sampleRate * Math.PI * 2.0; + double curAngle = startAngle; + + for (int idx = 0; idx < numSamples; idx++) + { + buffer[idx] = (float)Math.Sin(curAngle) * amplitude; + + curAngle += angleStep; + + while (curAngle > Math.PI) + curAngle -= Math.PI * 2.0; + } + + return curAngle; + } + + /// + /// Returns true if the level is above the specified value + /// + /// + /// + /// + /// + /// + public bool LevelIsAbove(float[] buffer, int len, float level) + { + if (buffer == null || buffer.Length == 0) + return false; + + int endIdx = Math.Min(buffer.Length, len); + + for (int idx = 0; idx < endIdx; idx++) + { + if (Math.Abs(buffer[idx]) >= level) + return true; + } + + return false; + } + + /// + /// Copy the data from the source to the destination buffer + /// + /// + /// + /// + /// + public static void CopyBuffer(T[] source, int srcStart, T[] destination, int dstStart, int length) + { + if (length < 0) + throw new ArgumentOutOfRangeException("length"); + + if (source == null || source.Length < srcStart + length) + throw new Exception("Source buffer is null or not large enough"); + + if (destination == null || destination.Length < dstStart + length) + throw new Exception("Destination buffer is null or not large enough"); + + int srcIdx = srcStart; + int dstIdx = dstStart; + + for (int idx = 0; idx < length; idx++) + destination[dstIdx++] = source[srcIdx++]; + } + + /// + /// // 4-point, 3rd-order Hermite (x-form) + /// + private float InterpolateHermite(float fY0, float fY1, float fY2, float fY3, float frac) + { + float c1 = 0.5f * (fY2 - fY0); + float c3 = 1.5f * (fY1 - fY2) + 0.5f * (fY3 - fY0); + float c2 = fY0 - fY1 + c1 - c3; + + return ((c3 * frac + c2) * frac + c1) * frac + fY1; + } + + /// + /// Linear interpolation + /// nFrac is based on 1.0 = 256 + /// + private float InterpolateLinear(float y0, float y1, float frac) + { + return y0 * (1.0f - frac) + y1 * frac; + } + + /// + /// Medium Low res SumAbsDiff + /// + private float RatioAbsDiffLinear(float[] samples, int freqIdx, int blockLen, int stepSize, bool hiRes) + { + if (hiRes && m_detectCurve[freqIdx] > 0.0f) + return m_detectCurve[freqIdx]; + + var offsetInt = (int)m_pCourseFreqOffset[freqIdx]; + float offsetFrac = m_pCourseFreqOffset[freqIdx] - offsetInt; + float rect = 0.0f; + float absDiff = 0.01f; // prevent divide by zero + int count = 0; + float interp; + float sample; + + // Do a scan using linear interpolation and the specified step size + for (int idx = 0; idx < blockLen; idx += stepSize, count++) + { + sample = samples[idx]; + interp = InterpolateLinear(samples[offsetInt + idx], samples[offsetInt + idx + 1], offsetFrac); + absDiff += Math.Abs(sample - interp); + rect += Math.Abs(sample) + Math.Abs(interp); + } + + float finalVal = rect / absDiff * 100.0f; + + if (hiRes) + m_detectCurve[freqIdx] = finalVal; + + return finalVal; + } + + /// + /// Medium High res SumAbsDiff + /// + private float SumAbsDiffHermite(float[] samples, float fOffset, int blockLen, int stepSize) + { + var offsetInt = (int)fOffset; + float offsetFrac = fOffset - offsetInt; + float value = 0.001f; // prevent divide by zero + int count = 0; + + // do a scan using linear interpolation and the specified step size + for (int idx = 0; idx < blockLen; idx += stepSize, count++) + { + int offsetIdx = offsetInt + idx; + + value += Math.Abs(samples[idx] - InterpolateHermite(samples[offsetIdx - 1], + samples[offsetIdx], + samples[offsetIdx + 1], + samples[offsetIdx + 2], + offsetFrac)); + } + + return count / value; + } + + /// + /// Get the MIDI note and cents of the pitch + /// + /// + /// + /// + /// + public static bool PitchToMidiNote(float pitch, out int note, out int cents) + { + if (pitch < 20.0f) + { + note = 0; + cents = 0; + return false; + } + + float fNote = (float)((12.0 * Math.Log10(pitch / 55.0) * InverseLog2)) + 33.0f; + note = (int)(fNote + 0.5f); + cents = (int)((note - fNote) * 100); + return true; + } + + /// + /// Get the pitch from the MIDI note + /// + /// + /// + public static float PitchToMidiNote(float pitch) + { + if (pitch < 20.0f) + return 0.0f; + + return (float)(12.0 * Math.Log10(pitch / 55.0) * InverseLog2) + 33.0f; + } + + /// + /// Get the pitch from the MIDI note + /// + /// + /// + public float MidiNoteToPitch(float note) + { + if (note < 33.0f) + return 0.0f; + + float pitch = (float)Math.Pow(10.0, (note - 33.0f) / InverseLog2 / 12.0f) * 55.0f; + return pitch <= m_maxPitch ? pitch : 0.0f; + } + + /// + /// Format a midi note to text + /// + /// + /// + /// + /// + public static string GetNoteName(int note, bool sharps, bool showOctave) + { + if (note < kMinMidiNote || note > kMaxMidiNote) + return null; + + note -= kMinMidiNote; + + int octave = (note + 9) / 12; + note = note % 12; + string noteText = null; + + switch (note) + { + case 0: + noteText = "A"; + break; + + case 1: + noteText = sharps ? "A#" : "Bb"; + break; + + case 2: + noteText = "B"; + break; + + case 3: + noteText = "C"; + break; + + case 4: + noteText = sharps ? "C#" : "Db"; + break; + + case 5: + noteText = "D"; + break; + + case 6: + noteText = sharps ? "D#" : "Eb"; + break; + + case 7: + noteText = "E"; + break; + + case 8: + noteText = "F"; + break; + + case 9: + noteText = sharps ? "F#" : "Gb"; + break; + + case 10: + noteText = "G"; + break; + + case 11: + noteText = sharps ? "G#" : "Ab"; + break; + } + + if (showOctave) + noteText += " " + octave.ToString(); + + return noteText; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs b/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs new file mode 100644 index 00000000..d496ea16 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs @@ -0,0 +1,414 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; +using System.Threading; + +namespace Pitch +{ + /// + /// Tracks pitch + /// + public class PitchTracker + { + private const int kOctaveSteps = 96; + private const int kStepOverlap = 4; + private const float kMinFreq = 50.0f; // A1, Midi note 33, 55.0Hz + private const float kMaxFreq = 1800.0f; // A#6. Midi note 92 + private const int kStartCircular = 40; // how far into the sample buffer do we start checking (allow for filter settling) + private const float kDetectOverlapSec = 0.005f; + private const float kMaxOctaveSecRate = 10.0f; + + private const float kAvgOffset = 0.005f; // time offset between pitch averaging values + private const int kAvgCount = 1; // number of average pitch samples to take + private const float kCircularBufSaveTime = 1.0f; // Amount of samples to store in the history buffer + + private PitchDsp m_dsp; + private CircularBuffer m_circularBufferLo; + private CircularBuffer m_circularBufferHi; + private double m_sampleRate; + private float m_detectLevelThreshold = 0.01f; // -40dB + private int m_pitchRecordsPerSecond = 50; // default is 50, or one record every 20ms + + private float[] m_pitchBufLo; + private float[] m_pitchBufHi; + private int m_pitchBufSize; + private int m_samplesPerPitchBlock; + private int m_curPitchIndex; + private long m_curPitchSamplePos; + + private int m_detectOverlapSamples; + private float m_maxOverlapDiff; + + private bool m_recordPitchRecords; + private int m_pitchRecordHistorySize; + private List m_pitchRecords = new List(); + private PitchRecord m_curPitchRecord = new PitchRecord(); + + private IIRFilter m_iirFilterLoLo; + private IIRFilter m_iirFilterLoHi; + private IIRFilter m_iirFilterHiLo; + private IIRFilter m_iirFilterHiHi; + + public delegate void PitchDetectedHandler(PitchTracker sender, PitchRecord pitchRecord); + + public event PitchDetectedHandler PitchDetected; + + /// + /// Constructor + /// + public PitchTracker() {} + + /// + /// Set the sample rate + /// + public double SampleRate + { + set + { + if (m_sampleRate == value) + return; + + m_sampleRate = value; + Setup(); + } + } + + /// + /// Set the detect level threshold, The value must be between 0.0001f and 1.0f (-80 dB to 0 dB) + /// + public float DetectLevelThreshold + { + set + { + float newValue = Math.Max(0.0001f, Math.Min(1.0f, value)); + + if (m_detectLevelThreshold == newValue) + return; + + m_detectLevelThreshold = newValue; + Setup(); + } + } + + /// + /// Return the samples per pitch block + /// + public int SamplesPerPitchBlock + { + get { return m_samplesPerPitchBlock; } + } + + /// + /// Get or set the number of pitch records per second (default is 50, or one record every 20ms) + /// + public int PitchRecordsPerSecond + { + get { return m_pitchRecordsPerSecond; } + set + { + m_pitchRecordsPerSecond = Math.Max(1, Math.Min(100, value)); + Setup(); + } + } + + /// + /// Get or set whether pitch records should be recorded into a history buffer + /// + public bool RecordPitchRecords + { + get { return m_recordPitchRecords; } + set + { + if (m_recordPitchRecords == value) + return; + + m_recordPitchRecords = value; + + if (!m_recordPitchRecords) + m_pitchRecords = new List(); + } + } + + /// + /// Get or set the max number of pitch records to keep. A value of 0 means no limit. + /// Don't leave this at 0 when RecordPitchRecords is true and this is used in a realtime + /// application since the buffer will grow indefinately! + /// + public int PitchRecordHistorySize + { + get { return m_pitchRecordHistorySize; } + set + { + m_pitchRecordHistorySize = value; + + m_pitchRecords.Capacity = m_pitchRecordHistorySize; + } + } + + /// + /// Get the current pitch records + /// + public IList PitchRecords + { + get { return m_pitchRecords.AsReadOnly(); } + } + + /// + /// Get the latest pitch record + /// + public PitchRecord CurrentPitchRecord + { + get { return m_curPitchRecord; } + } + + /// + /// Get the current pitch position + /// + public long CurrentPitchSamplePosition + { + get { return m_curPitchSamplePos; } + } + + /// + /// Get the minimum frequency that can be detected + /// + public static float MinDetectFrequency + { + get { return kMinFreq; } + } + + /// + /// Get the maximum frequency that can be detected + /// + public static float MaxDetectFrequency + { + get { return kMaxFreq; } + } + + /// + /// Get the frequency step + /// + public static double FrequencyStep + { + get { return Math.Pow(2.0, 1.0 / kOctaveSteps); } + } + + /// + /// Get the number of samples that the detected pitch is offset from the input buffer. + /// This is just an estimate to sync up the samples and detected pitch + /// + public int DetectSampleOffset + { + get { return (m_pitchBufSize + m_detectOverlapSamples) / 2; } + } + + /// + /// Reset the pitch tracker. Call this when the sample position is + /// not consecutive from the previous position + /// + public void Reset() + { + m_curPitchIndex = 0; + m_curPitchSamplePos = 0; + m_pitchRecords.Clear(); + m_iirFilterLoLo.Reset(); + m_iirFilterLoHi.Reset(); + m_iirFilterHiLo.Reset(); + m_iirFilterHiHi.Reset(); + m_circularBufferLo.Reset(); + m_circularBufferLo.Clear(); + m_circularBufferHi.Reset(); + m_circularBufferHi.Clear(); + m_pitchBufLo.Clear(); + m_pitchBufHi.Clear(); + + m_circularBufferLo.StartPosition = -m_detectOverlapSamples; + m_circularBufferLo.Available = m_detectOverlapSamples; + m_circularBufferHi.StartPosition = -m_detectOverlapSamples; + m_circularBufferHi.Available = m_detectOverlapSamples; + } + + /// + /// Process the passed in buffer of data. During this call, the PitchDetected event will + /// be fired zero or more times, depending how many pitch records will fit in the new + /// and previously cached buffer. + /// + /// This means that there is no size restriction on the buffer that is passed into ProcessBuffer. + /// For instance, ProcessBuffer can be called with one very large buffer that contains all of the + /// audio to be processed (many PitchDetected events will be fired), or just a small buffer at + /// a time which is more typical for realtime applications. In the latter case, the PitchDetected + /// event might not be fired at all since additional calls must first be made to accumulate enough + /// data do another pitch detect operation. + /// + /// Input buffer. Samples must be in the range -1.0 to 1.0 + /// Number of samples to process. Zero means all samples in the buffer + public void ProcessBuffer(float[] inBuffer, int sampleCount = 0) + { + if (inBuffer == null) + throw new ArgumentNullException("inBuffer", "Input buffer cannot be null"); + + int samplesProcessed = 0; + int srcLength = sampleCount == 0 ? inBuffer.Length : Math.Min(sampleCount, inBuffer.Length); + + while (samplesProcessed < srcLength) + { + int frameCount = Math.Min(srcLength - samplesProcessed, m_pitchBufSize + m_detectOverlapSamples); + + m_iirFilterLoLo.FilterBuffer(inBuffer, samplesProcessed, m_pitchBufLo, 0, frameCount); + m_iirFilterLoHi.FilterBuffer(m_pitchBufLo, 0, m_pitchBufLo, 0, frameCount); + + m_iirFilterHiLo.FilterBuffer(inBuffer, samplesProcessed, m_pitchBufHi, 0, frameCount); + m_iirFilterHiHi.FilterBuffer(m_pitchBufHi, 0, m_pitchBufHi, 0, frameCount); + + m_circularBufferLo.WriteBuffer(m_pitchBufLo, frameCount); + m_circularBufferHi.WriteBuffer(m_pitchBufHi, frameCount); + + // Loop while there is enough samples in the circular buffer + while (m_circularBufferLo.ReadBuffer(m_pitchBufLo, m_curPitchSamplePos, m_pitchBufSize + m_detectOverlapSamples)) + { + float pitch1; + float pitch2 = 0.0f; + float detectedPitch = 0.0f; + + m_circularBufferHi.ReadBuffer(m_pitchBufHi, m_curPitchSamplePos, m_pitchBufSize + m_detectOverlapSamples); + + pitch1 = m_dsp.DetectPitch(m_pitchBufLo, m_pitchBufHi, m_pitchBufSize); + + if (pitch1 > 0.0f) + { + // Shift the buffers left by the overlapping amount + m_pitchBufLo.Copy(m_pitchBufLo, m_detectOverlapSamples - 1, 0, m_pitchBufSize); + m_pitchBufHi.Copy(m_pitchBufHi, m_detectOverlapSamples - 1, 0, m_pitchBufSize); + + pitch2 = m_dsp.DetectPitch(m_pitchBufLo, m_pitchBufHi, m_pitchBufSize); + + if (pitch2 > 0.0f) + { + float fDiff = Math.Max(pitch1, pitch2) / Math.Min(pitch1, pitch2) - 1.0f; + + if (fDiff < m_maxOverlapDiff) + detectedPitch = (pitch1 + pitch2) * 0.5f; + } + } + + // Log the pitch record + AddPitchRecord(detectedPitch); + + m_curPitchSamplePos += m_samplesPerPitchBlock; + m_curPitchIndex++; + } + + samplesProcessed += frameCount; + } + } + + /// + /// Setup + /// + private void Setup() + { + if (m_sampleRate < 1.0f) + return; + + m_dsp = new PitchDsp(m_sampleRate, kMinFreq, kMaxFreq, m_detectLevelThreshold); + + m_iirFilterLoLo = new IIRFilter(); + m_iirFilterLoLo.Proto = IIRFilter.ProtoType.Butterworth; + m_iirFilterLoLo.Type = IIRFilter.FilterType.HP; + m_iirFilterLoLo.Order = 5; + m_iirFilterLoLo.FreqLow = 45.0f; + m_iirFilterLoLo.SampleRate = (float)m_sampleRate; + + m_iirFilterLoHi = new IIRFilter(); + m_iirFilterLoHi.Proto = IIRFilter.ProtoType.Butterworth; + m_iirFilterLoHi.Type = IIRFilter.FilterType.LP; + m_iirFilterLoHi.Order = 5; + m_iirFilterLoHi.FreqHigh = 280.0f; + m_iirFilterLoHi.SampleRate = (float)m_sampleRate; + + m_iirFilterHiLo = new IIRFilter(); + m_iirFilterHiLo.Proto = IIRFilter.ProtoType.Butterworth; + m_iirFilterHiLo.Type = IIRFilter.FilterType.HP; + m_iirFilterHiLo.Order = 5; + m_iirFilterHiLo.FreqLow = 45.0f; + m_iirFilterHiLo.SampleRate = (float)m_sampleRate; + + m_iirFilterHiHi = new IIRFilter(); + m_iirFilterHiHi.Proto = IIRFilter.ProtoType.Butterworth; + m_iirFilterHiHi.Type = IIRFilter.FilterType.LP; + m_iirFilterHiHi.Order = 5; + m_iirFilterHiHi.FreqHigh = 2000.0f; + m_iirFilterHiHi.SampleRate = (float)m_sampleRate; + + m_detectOverlapSamples = (int)(kDetectOverlapSec * m_sampleRate); + m_maxOverlapDiff = kMaxOctaveSecRate * kDetectOverlapSec; + + m_pitchBufSize = (int)(((1.0f / (float)kMinFreq) * 2.0f + ((kAvgCount - 1) * kAvgOffset)) * m_sampleRate) + 16; + m_pitchBufLo = new float[m_pitchBufSize + m_detectOverlapSamples]; + m_pitchBufHi = new float[m_pitchBufSize + m_detectOverlapSamples]; + m_samplesPerPitchBlock = (int)Math.Round(m_sampleRate / m_pitchRecordsPerSecond); + + m_circularBufferLo = new CircularBuffer((int)(kCircularBufSaveTime * m_sampleRate + 0.5f) + 10000); + m_circularBufferHi = new CircularBuffer((int)(kCircularBufSaveTime * m_sampleRate + 0.5f) + 10000); + } + + /// + /// The pitch was detected - add the record + /// + /// + private void AddPitchRecord(float pitch) + { + int midiNote = 0; + int midiCents = 0; + + PitchDsp.PitchToMidiNote(pitch, out midiNote, out midiCents); + + var record = new PitchRecord(); + + record.RecordIndex = m_curPitchIndex; + record.Pitch = pitch; + record.MidiNote = midiNote; + record.MidiCents = midiCents; + + m_curPitchRecord = record; + + if (m_recordPitchRecords) + { + if (m_pitchRecordHistorySize > 0 && m_pitchRecords.Count >= m_pitchRecordHistorySize) + m_pitchRecords.RemoveAt(0); + + m_pitchRecords.Add(record); + } + + if (this.PitchDetected != null) + this.PitchDetected(this, record); + } + + /// + /// Stores one record + /// + public struct PitchRecord + { + /// + /// The index of the pitch record since the last Reset call + /// + public int RecordIndex { get; set; } + + /// + /// The detected pitch + /// + public float Pitch { get; set; } + + /// + /// The detected MIDI note, or 0 for no pitch + /// + public int MidiNote { get; set; } + + /// + /// The offset from the detected MIDI note in cents, from -50 to +50. + /// + public int MidiCents { get; set; } + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index d0c8f9ba..bc2260e4 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -268,6 +268,11 @@ + + + + + From d04cbe7ceb1764a8f428098a6f6ab791bcec7a54 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 16 Apr 2014 21:05:57 +0200 Subject: [PATCH 079/116] Add an Interface for Pitchtrackers and set VolTresholds --- PitchTracker/PitchWrapper.cpp | 42 ++-- PitchTracker/PitchWrapper.h | 11 +- .../dywapitchtrack/dywapitchtrack.cpp | 9 +- PitchTracker/dywapitchtrack/dywapitchtrack.h | 2 +- PitchTracker/dywapitchtrack/ptDyWa.cpp | 24 ++- PitchTracker/dywapitchtrack/ptDyWa.h | 8 +- PitchTracker/performous/pitch.hh | 1 + PitchTracker/ptAKF.cpp | 19 +- PitchTracker/ptAKF.h | 9 +- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 56 +++--- Vocaluxe/Lib/Sound/Record/CRecordBase.cs | 2 +- Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs | 18 +- .../Lib/Sound/Record/Pitch/PitchTracker.cs | 60 ++++-- .../Record/{ => PitchTracker}/CAnalyzer.cs | 180 +++++++++++------- .../Record/PitchTracker/IPitchTracker.cs | 73 +++++++ Vocaluxe/Vocaluxe.csproj | 3 +- 16 files changed, 344 insertions(+), 173 deletions(-) rename Vocaluxe/Lib/Sound/Record/{ => PitchTracker}/CAnalyzer.cs (55%) create mode 100644 Vocaluxe/Lib/Sound/Record/PitchTracker/IPitchTracker.cs diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index ff6e4252..6314b64c 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -39,17 +39,17 @@ void Analyzer_Process(Analyzer* analyzer){ analyzer->process(); } -double Analyzer_GetPeak(Analyzer* analyzer){ +float Analyzer_GetPeak(Analyzer* analyzer){ if(!analyzer) return -999; - return analyzer->getPeak(); + return static_cast(analyzer->getPeakRaw()); } double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq){ if(!analyzer) return -1; const Tone* tone = analyzer->findTone(minFreq, maxFreq); - return (tone == NULL) ? -1 : FreqToNote(tone->freq); + return (tone == NULL) ? -1 : FreqToNote(tone->freq); } bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate){ @@ -71,6 +71,18 @@ int PtAKF_GetNumHalfTones(){ return PtAKF::GetNumHalfTones(); } +void PtAKF_SetVolumeTreshold(PtAKF* analyzer, float threshold){ + if(!analyzer) + return; + analyzer->SetVolumeThreshold(threshold); +} + +float PtAKF_GetVolumeThreshold(PtAKF* analyzer){ + if(!analyzer) + return 0.f; + return analyzer->GetVolumeThreshold(); +} + void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ if(sampleCt <= 0 || !analyzer) return; @@ -82,7 +94,7 @@ void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt){ //analyzer->input(dataShort, dataShort + sampleCt); } -int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights){ +int PtAKF_GetNote(PtAKF* analyzer, float* maxVolume, float* weights){ if(!analyzer) return -1; return analyzer->GetNote(maxVolume, weights); @@ -97,6 +109,18 @@ void PtDyWa_Free(PtDyWa* analyzer){ delete analyzer; } +void PtDyWa_SetVolumeTreshold(PtDyWa* analyzer, float threshold){ + if(!analyzer) + return; + analyzer->SetVolumeThreshold(threshold); +} + +float PtDyWa_GetVolumeThreshold(PtDyWa* analyzer){ + if(!analyzer) + return 0.f; + return analyzer->GetVolumeThreshold(); +} + void PtDyWa_InputByte(PtDyWa* analyzer, char* data, int sampleCt){ if(sampleCt <= 0 || !analyzer) return; @@ -105,16 +129,10 @@ void PtDyWa_InputByte(PtDyWa* analyzer, char* data, int sampleCt){ freeFloatArray(dataFloat); } -void PtDyWa_Process(PtDyWa* analyzer){ - if(!analyzer) - return; - analyzer->Process(); -} - -double PtDyWa_GetNote(PtDyWa* analyzer){ +double PtDyWa_FindNote(PtDyWa* analyzer, float* maxVolume){ if(!analyzer) return -1; - return analyzer->GetNote(); + return analyzer->FindNote(maxVolume); } /* diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 80c5cfa7..6425f862 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -12,21 +12,24 @@ DllExport void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt DllExport void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt); DllExport void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt); DllExport void Analyzer_Process(Analyzer* analyzer); -DllExport double Analyzer_GetPeak(Analyzer* analyzer); +DllExport float Analyzer_GetPeak(Analyzer* analyzer); DllExport double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq); DllExport bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate); DllExport PtAKF* PtAKF_Create(unsigned step); DllExport void PtAKF_Free(PtAKF* analyzer); DllExport int PtAKF_GetNumHalfTones(); +DllExport void PtAKF_SetVolumeThreshold(PtAKF* analyzer, float threshold); +DllExport float PtAKF_GetVolumeThreshold(PtAKF* analyzer); DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt); -DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights); +DllExport int PtAKF_GetNote(PtAKF* analyzer, float* maxVolume, float* weights); DllExport PtDyWa* PtDyWa_Create(unsigned step); DllExport void PtDyWa_Free(PtDyWa* analyzer); +DllExport void PtDyWa_SetVolumeTreshold(PtDyWa* analyzer,float threshold); +DllExport float PtDyWa_GetVolumeThreshold(PtDyWa* analyzer); DllExport void PtDyWa_InputByte(PtDyWa* analyzer, char* data, int sampleCt); -DllExport void PtDyWa_Process(PtDyWa* analyzer); -DllExport double PtDyWa_GetNote(PtDyWa* analyzer); +DllExport double PtDyWa_FindNote(PtDyWa* analyzer); /* public ref class CTone { diff --git a/PitchTracker/dywapitchtrack/dywapitchtrack.cpp b/PitchTracker/dywapitchtrack/dywapitchtrack.cpp index f4c6e653..ec17f052 100644 --- a/PitchTracker/dywapitchtrack/dywapitchtrack.cpp +++ b/PitchTracker/dywapitchtrack/dywapitchtrack.cpp @@ -102,7 +102,7 @@ typedef struct _minmax { struct _minmax *next; } minmax; -double _dywapitch_computeWaveletPitch(double * samples, int startsample, int samplecount) { +double _dywapitch_computeWaveletPitch(double * samples, int startsample, int samplecount, float* maxVolume, double volThreshold) { double pitchF = 0.0; int i, j; @@ -143,6 +143,9 @@ double _dywapitch_computeWaveletPitch(double * samples, int startsample, int sam maxValue = maxValue - theDC; minValue = minValue - theDC; double amplitudeMax = (maxValue > -minValue ? maxValue : -minValue); + *maxVolume = static_cast(amplitudeMax + theDC); + if(*maxVolume < volThreshold) + return 0.0; ampltitudeThreshold = amplitudeMax*maximaThresholdRatio; //asLog("dywapitch theDC=%f ampltitudeThreshold=%f\n", theDC, ampltitudeThreshold); @@ -439,8 +442,8 @@ void dywapitch_inittracking(dywapitchtracker *pitchtracker) { pitchtracker->_pitchConfidence = -1; } -double dywapitch_computepitch(dywapitchtracker *pitchtracker, double * samples, int startsample, int samplecount) { - double raw_pitch = _dywapitch_computeWaveletPitch(samples, startsample, samplecount); +double dywapitch_computepitch(dywapitchtracker *pitchtracker, double * samples, int startsample, int samplecount, float* maxVolume, double volThreshold) { + double raw_pitch = _dywapitch_computeWaveletPitch(samples, startsample, samplecount, maxVolume, volThreshold); return _dywapitch_dynamicprocess(pitchtracker, raw_pitch); } diff --git a/PitchTracker/dywapitchtrack/dywapitchtrack.h b/PitchTracker/dywapitchtrack/dywapitchtrack.h index 39aeb38d..95767c29 100644 --- a/PitchTracker/dywapitchtrack/dywapitchtrack.h +++ b/PitchTracker/dywapitchtrack/dywapitchtrack.h @@ -100,7 +100,7 @@ void dywapitch_inittracking(dywapitchtracker *pitchtracker); // startsample : the index of the first sample to use in the sample buffer // samplecount : the number of samples to use to compte the pitch // return 0.0 if no pitch was found (sound too low, noise, etc..) -double dywapitch_computepitch(dywapitchtracker *pitchtracker, double * samples, int startsample, int samplecount); +double dywapitch_computepitch(dywapitchtracker *pitchtracker, double * samples, int startsample, int samplecount, float* maxVolume, double volThreshold); #ifdef __cplusplus } // extern "C" diff --git a/PitchTracker/dywapitchtrack/ptDyWa.cpp b/PitchTracker/dywapitchtrack/ptDyWa.cpp index fa3ab4f0..96572e27 100644 --- a/PitchTracker/dywapitchtrack/ptDyWa.cpp +++ b/PitchTracker/dywapitchtrack/ptDyWa.cpp @@ -5,23 +5,27 @@ PtDyWa::PtDyWa(unsigned step){ _Step = step; dywapitch_inittracking(&_State); + _VolTreshold = 0.01f; + _LastMaxVol = 0.f; } -void PtDyWa::Process(){ +void PtDyWa::SetVolumeThreshold(float threshold){ + _VolTreshold = threshold; +} + +double PtDyWa::FindNote(float* maxVolume){ double AnaylsisBuf[_SampleCt]; size_t size = _AnalysisBuf.size(); if(size > _SampleCt) _AnalysisBuf.pop(size - _SampleCt); - if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)) - return; + if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)){ + *maxVolume = _LastMaxVol * 0.85f; + return -1; + } _AnalysisBuf.pop(_Step); - double pitch = dywapitch_computepitch(&_State, AnaylsisBuf,0,_SampleCt); + double pitch = dywapitch_computepitch(&_State, AnaylsisBuf, 0, _SampleCt, maxVolume, _VolTreshold); if(pitch == 0.0) - _LastNote = -1; + return -1; else - _LastNote = FreqToNote(pitch); -} - -double PtDyWa::GetNote(){ - return _LastNote; + return FreqToNote(pitch); } \ No newline at end of file diff --git a/PitchTracker/dywapitchtrack/ptDyWa.h b/PitchTracker/dywapitchtrack/ptDyWa.h index c66e1ac7..dd0eb615 100644 --- a/PitchTracker/dywapitchtrack/ptDyWa.h +++ b/PitchTracker/dywapitchtrack/ptDyWa.h @@ -11,12 +11,14 @@ public: _AnalysisBuf.insert(begin, end); } - void Process(); - double GetNote(); + double FindNote(float* maxVolume); + void SetVolumeThreshold(float threshold); + float GetVolumeThreshold(){return _VolTreshold;} private: dywapitchtracker _State; constexpr static size_t _SampleCt = 2048; RingBuffer<_SampleCt * 2> _AnalysisBuf; unsigned _Step; - double _LastNote; + float _VolTreshold; + float _LastMaxVol; }; \ No newline at end of file diff --git a/PitchTracker/performous/pitch.hh b/PitchTracker/performous/pitch.hh index 1108e0b9..f87a7638 100644 --- a/PitchTracker/performous/pitch.hh +++ b/PitchTracker/performous/pitch.hh @@ -86,6 +86,7 @@ public: fft_t const& getFFT() const { return m_fft; } /** Get the peak level in dB (negative value, 0.0 = clipping). **/ double getPeak() const { return 10.0 * log10(m_peak); } + double getPeakRaw() const { return m_peak; } /** Get a list of all tones detected. **/ tones_t const& getTones() const { return m_tones; } /** Find a tone within the singing range; prefers strong tones around 200-400 Hz. **/ diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index f5f95bf7..7a418f22 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -47,6 +47,8 @@ PtAKF::PtAKF(unsigned step){ } } _Step = step; + _VolTreshold = 0.01f; + _LastMaxVol = 0.f; } PtAKF::~PtAKF(){ @@ -59,13 +61,19 @@ PtAKF::~PtAKF(){ } } -int PtAKF::GetNote(double* restrict maxVolume, float* restrict weights){ +void PtAKF::SetVolumeThreshold(float threshold){ + _VolTreshold = threshold; +} + +int PtAKF::GetNote(float* restrict maxVolume, float* restrict weights){ float AnaylsisBuf[_SampleCt]; size_t size = _AnalysisBuf.size(); if(size > _SampleCt) _AnalysisBuf.pop(size - _SampleCt); - if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)) + if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)){ + *maxVolume = _LastMaxVol * 0.85f; return -1; + } _AnalysisBuf.pop(_Step); return _GetNote(AnaylsisBuf, maxVolume, weights); } @@ -96,7 +104,7 @@ void PtAKF::AddPeak(SPeak peaks[], float curWeight, int toneIndex){ } } -int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* restrict weights){ +int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* restrict weights){ // Calculate maximum volume float maxVolumeL = 0; @@ -105,9 +113,12 @@ int PtAKF::_GetNote(float* restrict samples, double* restrict maxVolume, float* if(vol > maxVolumeL) maxVolumeL = vol; } - //maxVolumeL /= 32767.; + //maxVolumeL /= 32767.f; *maxVolume = maxVolumeL; + if(maxVolumeL < _VolTreshold) + return -1; + float samplesWindowed[_SampleCt]; for(int i = 0; i < _SampleCt; i++){ diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index 02a2baf2..58c04433 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -29,7 +29,9 @@ public: _AnalysisBuf.insert(begin, end); } - int GetNote(double* restrict maxVolume, float* restrict weights); + int GetNote(float* restrict maxVolume, float* restrict weights); + void SetVolumeThreshold(float threshold); + float GetVolumeThreshold(){return _VolTreshold;} static int GetNumHalfTones(){ return _MaxHalfTone - _MinHalfTone + 1;} private: @@ -48,8 +50,11 @@ private: constexpr static size_t _SampleCt = 2048; RingBuffer<_SampleCt * 2> _AnalysisBuf; unsigned _Step; + float _VolTreshold; + float _LastMaxVol; + + int _GetNote(float* restrict samples, float* restrict maxVolume, float* restrict weights); - static int _GetNote(float* restrict samples, double* restrict maxVolume, float* restrict weights); static float _AnalyzeBySampleCt(float* restrict samples, float* restrict samplesWindowed, float samplesPerPeriodD); static inline float _AnalyzeByTone(float* restrict samples, float* restrict samplesWindowed, int toneIndex); static float _AKFBySampleCt(float* restrict samples, float samplesPerPeriodD); diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 755aa118..9a4a7b4d 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -24,6 +24,8 @@ using System.IO; using System.Windows.Forms; using System.Diagnostics; using Pitch; +using Vocaluxe.Lib.Sound.Record.Pitch; +using Vocaluxe.Lib.Sound.Record.PitchTracker; using VocaluxeLib; using VocaluxeLib.Utils; @@ -38,17 +40,18 @@ namespace Vocaluxe.Lib.Sound.Record private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) #endif - private CPtAKF _Analyzer = new CPtAKF(); + private CPitchTracker _PitchTracker = new CPtAKF(); - private double _MaxVolume; + private float _MaxVolume; public CBuffer() { - MinVolume = 0.02f; + VolTreshold = 0.02f; ToneWeigths = new float[GetNumHalfTones()]; Reset(); #if TEST_PITCH _TestPitchDetection(); + Reset(); #endif } @@ -57,9 +60,9 @@ namespace Vocaluxe.Lib.Sound.Record _Dispose(); } - public static int GetNumHalfTones() + public int GetNumHalfTones() { - return CPtAKF.GetNumHalfTones(); + return _PitchTracker.GetNumHalfTones(); } public int ToneAbs { get; private set; } @@ -68,7 +71,7 @@ namespace Vocaluxe.Lib.Sound.Record public float MaxVolume { - get { return (float)_MaxVolume; } + get { return _MaxVolume; } } public bool ToneValid { get; private set; } @@ -78,7 +81,11 @@ namespace Vocaluxe.Lib.Sound.Record /// /// Minimum volume for a tone to be valid /// - public float MinVolume { get; set; } + public float VolTreshold + { + get { return _PitchTracker.VolumeTreshold; } + set { _PitchTracker.VolumeTreshold = value; } + } public void Reset() { @@ -97,14 +104,14 @@ namespace Vocaluxe.Lib.Sound.Record // voice passthrough (send data to playback-device) //if (assigned(fVoiceStream)) then //fVoiceStream.WriteData(Buffer, BufferSize); - _Analyzer.Input(buffer); + _PitchTracker.Input(buffer); } public void AnalyzeBuffer() { //_MaxVolume = _Analyzer.GetPeak() / 43 + 1; - int tone = _Analyzer.GetNote(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // - if (tone >= 0 && _MaxVolume >= MinVolume) + int tone = _PitchTracker.GetNote(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // + if (tone >= 0) { ToneAbs = tone; Tone = ToneAbs % 12; @@ -122,10 +129,10 @@ namespace Vocaluxe.Lib.Sound.Record private void _Dispose() { - if (_Analyzer != null) + if (_PitchTracker != null) { - _Analyzer.Dispose(); - _Analyzer = null; + _PitchTracker.Dispose(); + _PitchTracker = null; } } @@ -288,11 +295,13 @@ namespace Vocaluxe.Lib.Sound.Record int curTimeIndex = -1; int curNote = -1; const int maxSamplesPerBatch = 512; - CAnalyzer analyzer2 = new CAnalyzer(); - CPtDyWa analyzer3 = new CPtDyWa(); - PitchTracker analyzer4 = new PitchTracker {SampleRate = 44100, DetectLevelThreshold = 0.001f}; + CPitchTracker analyzer2 = new CAnalyzer(); + CPitchTracker analyzer3 = new CPtDyWa(); + CPitchTracker analyzer4 = new CPtSharp(); int[] detectedTones = new int[4]; int[] oks = new int[4]; + float dummyMaxVol; + float[] dummyWeights = new float[ToneWeigths.Length]; int lCt = 0; while (wavFile.NumSamplesLeft > maxSamplesPerBatch) { @@ -303,14 +312,7 @@ namespace Vocaluxe.Lib.Sound.Record AnalyzeBuffer(); analyzer2.Input(samples); analyzer3.Input(samples); - analyzer2.Process(); - analyzer3.Process(); - short[] samplesShort = new short[samples.Length / 2]; - Buffer.BlockCopy(samples, 0, samplesShort, 0, samples.Length); - float[] samplesFloat = new float[samplesShort.Length]; - for (int i = 0; i < samplesShort.Length; i++) - samplesFloat[i] = (float)samplesShort[i] / short.MaxValue; - analyzer4.ProcessBuffer(samplesFloat); + analyzer4.Input(samples); while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) { curTimeIndex++; @@ -319,9 +321,9 @@ namespace Vocaluxe.Lib.Sound.Record if (curNote < 0) continue; detectedTones[0] = ToneValid ? ToneAbs : -1; - detectedTones[1] = (int)Math.Round(analyzer2.FindNote(64, 1770)); - detectedTones[2] = (int)Math.Round(analyzer3.GetNote()); - detectedTones[3] = analyzer4.CurrentPitchRecord.MidiNote - 15 - 21; + detectedTones[1] = analyzer2.GetNote(out dummyMaxVol, dummyWeights); + detectedTones[2] = analyzer3.GetNote(out dummyMaxVol, dummyWeights); + detectedTones[3] = analyzer4.GetNote(out dummyMaxVol, dummyWeights); lCt++; /*if (!ToneValid) CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms not detected"); diff --git a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs index f68fc268..5dd64987 100644 --- a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs +++ b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs @@ -132,7 +132,7 @@ namespace Vocaluxe.Lib.Sound.Record public int NumHalfTones() { - return CBuffer.GetNumHalfTones(); + return _Buffer[0].GetNumHalfTones(); } public float[] ToneWeigth(int player) diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs b/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs index b04f5bbf..0eb79432 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs +++ b/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs @@ -28,7 +28,6 @@ namespace Pitch private int m_blockLen34; // 3/4 block len private int m_blockLen44; // 4/4 block len private double m_sampleRate; - private float m_detectLevelThreshold; private int m_numCourseSteps; private float[] m_pCourseFreqOffset; @@ -45,12 +44,11 @@ namespace Pitch /// /// /// - public PitchDsp(double sampleRate, float minPitch, float maxPitch, float detectLevelThreshold) + public PitchDsp(double sampleRate, float minPitch, float maxPitch) { m_sampleRate = sampleRate; m_minPitch = minPitch; m_maxPitch = maxPitch; - m_detectLevelThreshold = detectLevelThreshold; m_minNote = (int)(PitchToMidiNote(m_minPitch) + 0.5f) + 2; m_maxNote = (int)(PitchToMidiNote(m_maxPitch) + 0.5f) - 2; @@ -117,19 +115,9 @@ namespace Pitch /// /// Detect the pitch /// - public float DetectPitch(float[] samplesLo, float[] samplesHi, int numSamples) + public float DetectPitch(float[] samplesLo, float[] samplesHi) { - float pitch = 0.0f; - - if (!LevelIsAbove(samplesLo, numSamples, m_detectLevelThreshold) && - !LevelIsAbove(samplesHi, numSamples, m_detectLevelThreshold)) - { - // Level is too low - return 0.0f; - } - - pitch = DetectPitchLo(samplesLo, samplesHi); - return pitch; + return DetectPitchLo(samplesLo, samplesHi); } /// diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs b/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs index d496ea16..8e7e6776 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs +++ b/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs @@ -1,14 +1,14 @@ using System; using System.Collections.Generic; -using System.Text; using System.Collections; -using System.Threading; +using Pitch; -namespace Pitch +namespace Vocaluxe.Lib.Sound.Record.Pitch { /// /// Tracks pitch /// + // ReSharper disable InconsistentNaming public class PitchTracker { private const int kOctaveSteps = 96; @@ -50,6 +50,8 @@ namespace Pitch private IIRFilter m_iirFilterHiLo; private IIRFilter m_iirFilterHiHi; + public float LastMaxVol = 0; + public delegate void PitchDetectedHandler(PitchTracker sender, PitchRecord pitchRecord); public event PitchDetectedHandler PitchDetected; @@ -87,8 +89,9 @@ namespace Pitch return; m_detectLevelThreshold = newValue; - Setup(); + //Setup(); } + get { return m_detectLevelThreshold; } } /// @@ -229,19 +232,20 @@ namespace Pitch m_circularBufferHi.Available = m_detectOverlapSamples; } - /// - /// Process the passed in buffer of data. During this call, the PitchDetected event will - /// be fired zero or more times, depending how many pitch records will fit in the new - /// and previously cached buffer. - /// - /// This means that there is no size restriction on the buffer that is passed into ProcessBuffer. - /// For instance, ProcessBuffer can be called with one very large buffer that contains all of the - /// audio to be processed (many PitchDetected events will be fired), or just a small buffer at - /// a time which is more typical for realtime applications. In the latter case, the PitchDetected - /// event might not be fired at all since additional calls must first be made to accumulate enough - /// data do another pitch detect operation. - /// - /// Input buffer. Samples must be in the range -1.0 to 1.0 + /// + /// Process the passed in buffer of data. During this call, the PitchDetected event will + /// be fired zero or more times, depending how many pitch records will fit in the new + /// and previously cached buffer. + /// + /// This means that there is no size restriction on the buffer that is passed into ProcessBuffer. + /// For instance, ProcessBuffer can be called with one very large buffer that contains all of the + /// audio to be processed (many PitchDetected events will be fired), or just a small buffer at + /// a time which is more typical for realtime applications. In the latter case, the PitchDetected + /// event might not be fired at all since additional calls must first be made to accumulate enough + /// data do another pitch detect operation. + /// + /// Input buffer. Samples must be in the range -1.0 to 1.0 + /// /// Number of samples to process. Zero means all samples in the buffer public void ProcessBuffer(float[] inBuffer, int sampleCount = 0) { @@ -251,6 +255,8 @@ namespace Pitch int samplesProcessed = 0; int srcLength = sampleCount == 0 ? inBuffer.Length : Math.Min(sampleCount, inBuffer.Length); + float maxVolume = LastMaxVol * 0.85f; + while (samplesProcessed < srcLength) { int frameCount = Math.Min(srcLength - samplesProcessed, m_pitchBufSize + m_detectOverlapSamples); @@ -268,12 +274,21 @@ namespace Pitch while (m_circularBufferLo.ReadBuffer(m_pitchBufLo, m_curPitchSamplePos, m_pitchBufSize + m_detectOverlapSamples)) { float pitch1; - float pitch2 = 0.0f; + float pitch2; float detectedPitch = 0.0f; m_circularBufferHi.ReadBuffer(m_pitchBufHi, m_curPitchSamplePos, m_pitchBufSize + m_detectOverlapSamples); - pitch1 = m_dsp.DetectPitch(m_pitchBufLo, m_pitchBufHi, m_pitchBufSize); + maxVolume = 0f; + for (int i = 0; i < (m_pitchBufSize + m_detectOverlapSamples) / 2; i++) + { + if (maxVolume < m_pitchBufHi[i]) + maxVolume = m_pitchBufHi[i]; + if (maxVolume < m_pitchBufLo[i]) + maxVolume = m_pitchBufLo[i]; + } + + pitch1 = (maxVolume >= m_detectLevelThreshold) ? m_dsp.DetectPitch(m_pitchBufLo, m_pitchBufHi) : 0f; if (pitch1 > 0.0f) { @@ -281,7 +296,7 @@ namespace Pitch m_pitchBufLo.Copy(m_pitchBufLo, m_detectOverlapSamples - 1, 0, m_pitchBufSize); m_pitchBufHi.Copy(m_pitchBufHi, m_detectOverlapSamples - 1, 0, m_pitchBufSize); - pitch2 = m_dsp.DetectPitch(m_pitchBufLo, m_pitchBufHi, m_pitchBufSize); + pitch2 = m_dsp.DetectPitch(m_pitchBufLo, m_pitchBufHi); if (pitch2 > 0.0f) { @@ -301,6 +316,7 @@ namespace Pitch samplesProcessed += frameCount; } + LastMaxVol = maxVolume; } /// @@ -311,7 +327,7 @@ namespace Pitch if (m_sampleRate < 1.0f) return; - m_dsp = new PitchDsp(m_sampleRate, kMinFreq, kMaxFreq, m_detectLevelThreshold); + m_dsp = new PitchDsp(m_sampleRate, kMinFreq, kMaxFreq); m_iirFilterLoLo = new IIRFilter(); m_iirFilterLoLo.Proto = IIRFilter.ProtoType.Butterworth; @@ -411,4 +427,6 @@ namespace Pitch public int MidiCents { get; set; } } } + + // ReSharper restore InconsistentNaming } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs similarity index 55% rename from Vocaluxe/Lib/Sound/Record/CAnalyzer.cs rename to Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs index 9f9529e3..fcb45fa8 100644 --- a/Vocaluxe/Lib/Sound/Record/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.InteropServices; -namespace Vocaluxe.Lib.Sound.Record +namespace Vocaluxe.Lib.Sound.Record.PitchTracker { /// /// Analyzer from Performous /// Should be very reliable but needs some proof (artificial tests show some errors) /// - class CAnalyzer : IDisposable + class CAnalyzer : CPitchTracker { #region Imports [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] @@ -29,7 +29,7 @@ namespace Vocaluxe.Lib.Sound.Record private static extern void Analyzer_Process(IntPtr analyzer); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern double Analyzer_GetPeak(IntPtr analyzer); + private static extern float Analyzer_GetPeak(IntPtr analyzer); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern double Analyzer_FindNote(IntPtr analyzer, double minFreq, double maxFreq); @@ -39,45 +39,28 @@ namespace Vocaluxe.Lib.Sound.Record #endregion private IntPtr _Instance; + private float _VolumeTreshold; public CAnalyzer(uint step = 200) { _Instance = Analyzer_Create(step); + _VolumeTreshold = 0.01f; } - ~CAnalyzer() - { - _Dispose(false); - } - - public void Input(float[] data) - { - Analyzer_InputFloat(_Instance, data, data.Length); - } - - public void Input(short[] data) - { - Analyzer_InputShort(_Instance, data, data.Length); - } - - public void Input(byte[] data) + public override void Input(byte[] data) { Analyzer_InputByte(_Instance, data, data.Length / 2); } - public void Process() + public override int GetNote(out float maxVolume, float[] weights) { Analyzer_Process(_Instance); - } - - public double GetPeak() - { - return Analyzer_GetPeak(_Instance); - } - - public double FindNote(double minFreq = 35.0, double maxFreq = 1000.0) - { - return Analyzer_FindNote(_Instance, minFreq, maxFreq); + maxVolume = Analyzer_GetPeak(_Instance); + if (maxVolume < _VolumeTreshold) + return -1; + int note = (int)Math.Round(Analyzer_FindNote(_Instance, 60, 1800)); + _SetWeights(note, weights); + return note; } public bool Output(float[] data, float rate) @@ -85,7 +68,7 @@ namespace Vocaluxe.Lib.Sound.Record return Analyzer_OutputFloat(_Instance, data, data.Length, rate); } - private void _Dispose(bool disposing) + protected override void _Dispose(bool disposing) { if (_Instance == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); @@ -93,10 +76,15 @@ namespace Vocaluxe.Lib.Sound.Record _Instance = IntPtr.Zero; } - public void Dispose() + public override int GetNumHalfTones() { - _Dispose(true); - GC.SuppressFinalize(this); + return NumHalfTonesDef; + } + + public override float VolumeTreshold + { + get { return _VolumeTreshold; } + set { _VolumeTreshold = value; } } } @@ -104,7 +92,7 @@ namespace Vocaluxe.Lib.Sound.Record /// Pitchtracker (Pt) that uses autocorrelation (AKF) and AMDF /// Quite fast and perfect in artificial tests, but may fail in real world scenarios (e.g. missing fundamental) /// - class CPtAKF : IDisposable + class CPtAKF : CPitchTracker { #region Imports [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] @@ -113,14 +101,20 @@ namespace Vocaluxe.Lib.Sound.Record [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void PtAKF_Free(IntPtr analyzer); - [DllImport("PitchTracker.dll", EntryPoint = "PtAKF_GetNumHalfTones", CallingConvention = CallingConvention.Cdecl)] - public static extern int GetNumHalfTones(); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtAKF_GetNumHalfTones(); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void PtAKF_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtAKF_GetNote(IntPtr analyzer, [Out] out double maxVolume, [Out] float[] weights); + private static extern void PtAKF_SetVolumeThreshold(IntPtr analyzer, float threshold); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern float PtAKF_GetVolumeThreshold(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtAKF_GetNote(IntPtr analyzer, [Out] out float maxVolume, [Out] float[] weights); #endregion private IntPtr _Instance; @@ -130,41 +124,40 @@ namespace Vocaluxe.Lib.Sound.Record _Instance = PtAKF_Create(step); } - ~CPtAKF() + public override int GetNumHalfTones() { - _Dispose(false); + return PtAKF_GetNumHalfTones(); } - public void Input(byte[] data) + public override float VolumeTreshold + { + get { return PtAKF_GetVolumeThreshold(_Instance); } + set { PtAKF_SetVolumeThreshold(_Instance, value); } + } + + public override void Input(byte[] data) { PtAKF_InputByte(_Instance, data, data.Length / 2); } - public int GetNote(out double maxVolume, float[] weights) + public override int GetNote(out float maxVolume, float[] weights) { return PtAKF_GetNote(_Instance, out maxVolume, weights); } - private void _Dispose(bool disposing) + protected override void _Dispose(bool disposing) { if (_Instance == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); PtAKF_Free(_Instance); _Instance = IntPtr.Zero; } - - public void Dispose() - { - _Dispose(true); - GC.SuppressFinalize(this); - } } /// /// Pitchtracker (Pt) that uses a dynamic wavelet (DyWa) algorithm - /// Quite fast and perfect in artificial tests, but may fail in real world scenarios (e.g. missing fundamental) /// - class CPtDyWa : IDisposable + class CPtDyWa : CPitchTracker { #region Imports [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] @@ -173,14 +166,17 @@ namespace Vocaluxe.Lib.Sound.Record [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void PtDyWa_Free(IntPtr analyzer); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtDyWa_SetVolumeThreshold(IntPtr analyzer, float threshold); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern float PtDyWa_GetVolumeThreshold(IntPtr analyzer); + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void PtDyWa_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtDyWa_Process(IntPtr analyzer); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern double PtDyWa_GetNote(IntPtr analyzer); + private static extern double PtDyWa_FindNote(IntPtr analyzer, [Out] out float maxVolume); #endregion private IntPtr _Instance; @@ -190,38 +186,84 @@ namespace Vocaluxe.Lib.Sound.Record _Instance = PtDyWa_Create(step); } - ~CPtDyWa() - { - _Dispose(false); - } - - public void Input(byte[] data) + public override void Input(byte[] data) { PtDyWa_InputByte(_Instance, data, data.Length / 2); } - public void Process() + public override int GetNote(out float maxVolume, float[] weights) { - PtDyWa_Process(_Instance); + int note = (int)Math.Round(PtDyWa_FindNote(_Instance, out maxVolume)); + _SetWeights(note, weights); + return note; } - public double GetNote() + public override int GetNumHalfTones() { - return PtDyWa_GetNote(_Instance); + return NumHalfTonesDef; } - private void _Dispose(bool disposing) + public override float VolumeTreshold + { + get { return PtDyWa_GetVolumeThreshold(_Instance); } + set { PtDyWa_SetVolumeThreshold(_Instance, value); } + } + + protected override void _Dispose(bool disposing) { if (_Instance == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); PtDyWa_Free(_Instance); _Instance = IntPtr.Zero; } + } - public void Dispose() + /// + /// Pitchtracker (Pt) in C# that uses IIR filters for smoothing and an intelligent detection algorithm to reduce calculations + /// + class CPtSharp : CPitchTracker + { + private Pitch.PitchTracker _Instance; + + public CPtSharp() { - _Dispose(true); - GC.SuppressFinalize(this); + _Instance = new Pitch.PitchTracker {SampleRate = 44100, DetectLevelThreshold = 0.01f, PitchRecordHistorySize = 1}; + } + + public override void Input(byte[] data) + { + short[] samplesShort = new short[data.Length / 2]; + Buffer.BlockCopy(data, 0, samplesShort, 0, data.Length); + float[] samplesFloat = new float[samplesShort.Length]; + for (int i = 0; i < samplesShort.Length; i++) + samplesFloat[i] = (float)samplesShort[i] / short.MaxValue; + _Instance.ProcessBuffer(samplesFloat); + } + + public override int GetNote(out float maxVolume, float[] weights) + { + int note = _Instance.CurrentPitchRecord.MidiNote - 15 - 21; + maxVolume = _Instance.LastMaxVol; + _SetWeights(note, weights); + return note; + } + + public override int GetNumHalfTones() + { + return NumHalfTonesDef; + } + + public override float VolumeTreshold + { + get { return _Instance.DetectLevelThreshold; } + set { _Instance.DetectLevelThreshold = value; } + } + + protected override void _Dispose(bool disposing) + { + if (_Instance == null) + throw new ObjectDisposedException(GetType().Name); + _Instance = null; } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/IPitchTracker.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/IPitchTracker.cs new file mode 100644 index 00000000..94c4876f --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/IPitchTracker.cs @@ -0,0 +1,73 @@ +using System; +using System.Diagnostics; + +namespace Vocaluxe.Lib.Sound.Record.PitchTracker +{ + /// + /// Base class/Interface for pitch detectors + /// Most likely some structures or system resources are used, hence it should be disposed if no longer needed + /// + abstract class CPitchTracker : IDisposable + { + //Default number of half tones (1 octave) + protected const int NumHalfTonesDef = 12; + + ~CPitchTracker() + { + _Dispose(false); + } + + protected abstract void _Dispose(bool disposing); + + public void Dispose() + { + _Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Method to set weights if the algorithm does not provide anything that could simulate a visualizer. + /// Should be called with each valid detection + /// + /// Current note + /// Array of weights (Length = NumHalfTonesDef) + protected static void _SetWeights(int note, float[] weights) + { + Debug.Assert(weights.Length == NumHalfTonesDef); + for (int i = 0; i < NumHalfTonesDef; i++) + weights[i] *= 0.9f; + if (note < 0) + return; + int w = note % NumHalfTonesDef; + weights[w] = Math.Min(1f, weights[w] + 0.15f); + } + + /// + /// Gets the number of half tones the algorithm provides weights for. + /// This may not be the number of half tones the algorithm detects! + /// + /// + public abstract int GetNumHalfTones(); + + /// + /// The treshold for detecting silence + /// Value (0-1) for which everything below is considered silence + /// + public abstract float VolumeTreshold { get; set; } + + /// + /// Recorded data. Has to be 16 bit short values. + /// + /// 16bit short values of data + public abstract void Input(byte[] data); + + /// + /// Returns the current note detected + /// + /// Current maximum volume (0-1) + /// Array of NumHalfTones floats that gets filled with the current weights (0-1) where each value indicates how strong that tone is. + /// Only for basic visualization as it may not be accurate. + /// Current note index (0 = C2, 12 = C3, ...) + public abstract int GetNote(out float maxVolume, float[] weights); + } +} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index bc2260e4..852cd4f4 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -223,7 +223,7 @@ - + @@ -268,6 +268,7 @@ + From 9bf12315b7e63f2913271b84b2f05a62cdba38a7 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 16 Apr 2014 21:11:05 +0200 Subject: [PATCH 080/116] Move Pitchtrackers to separate files --- .../Sound/Record/PitchTracker/CAnalyzer.cs | 179 ------------------ .../Lib/Sound/Record/PitchTracker/CPtAKF.cs | 71 +++++++ .../Lib/Sound/Record/PitchTracker/CPtDyWa.cs | 69 +++++++ .../Lib/Sound/Record/PitchTracker/CPtSharp.cs | 53 ++++++ Vocaluxe/Vocaluxe.csproj | 3 + 5 files changed, 196 insertions(+), 179 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs create mode 100644 Vocaluxe/Lib/Sound/Record/PitchTracker/CPtDyWa.cs create mode 100644 Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs index fcb45fa8..2a50540f 100644 --- a/Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CAnalyzer.cs @@ -87,183 +87,4 @@ namespace Vocaluxe.Lib.Sound.Record.PitchTracker set { _VolumeTreshold = value; } } } - - /// - /// Pitchtracker (Pt) that uses autocorrelation (AKF) and AMDF - /// Quite fast and perfect in artificial tests, but may fail in real world scenarios (e.g. missing fundamental) - /// - class CPtAKF : CPitchTracker - { - #region Imports - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr PtAKF_Create(uint step); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void PtAKF_Free(IntPtr analyzer); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtAKF_GetNumHalfTones(); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void PtAKF_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void PtAKF_SetVolumeThreshold(IntPtr analyzer, float threshold); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern float PtAKF_GetVolumeThreshold(IntPtr analyzer); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern int PtAKF_GetNote(IntPtr analyzer, [Out] out float maxVolume, [Out] float[] weights); - #endregion - - private IntPtr _Instance; - - public CPtAKF(uint step = 200) - { - _Instance = PtAKF_Create(step); - } - - public override int GetNumHalfTones() - { - return PtAKF_GetNumHalfTones(); - } - - public override float VolumeTreshold - { - get { return PtAKF_GetVolumeThreshold(_Instance); } - set { PtAKF_SetVolumeThreshold(_Instance, value); } - } - - public override void Input(byte[] data) - { - PtAKF_InputByte(_Instance, data, data.Length / 2); - } - - public override int GetNote(out float maxVolume, float[] weights) - { - return PtAKF_GetNote(_Instance, out maxVolume, weights); - } - - protected override void _Dispose(bool disposing) - { - if (_Instance == IntPtr.Zero) - throw new ObjectDisposedException(GetType().Name); - PtAKF_Free(_Instance); - _Instance = IntPtr.Zero; - } - } - - /// - /// Pitchtracker (Pt) that uses a dynamic wavelet (DyWa) algorithm - /// - class CPtDyWa : CPitchTracker - { - #region Imports - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern IntPtr PtDyWa_Create(uint step); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void PtDyWa_Free(IntPtr analyzer); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void PtDyWa_SetVolumeThreshold(IntPtr analyzer, float threshold); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern float PtDyWa_GetVolumeThreshold(IntPtr analyzer); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern void PtDyWa_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); - - [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern double PtDyWa_FindNote(IntPtr analyzer, [Out] out float maxVolume); - #endregion - - private IntPtr _Instance; - - public CPtDyWa(uint step = 200) - { - _Instance = PtDyWa_Create(step); - } - - public override void Input(byte[] data) - { - PtDyWa_InputByte(_Instance, data, data.Length / 2); - } - - public override int GetNote(out float maxVolume, float[] weights) - { - int note = (int)Math.Round(PtDyWa_FindNote(_Instance, out maxVolume)); - _SetWeights(note, weights); - return note; - } - - public override int GetNumHalfTones() - { - return NumHalfTonesDef; - } - - public override float VolumeTreshold - { - get { return PtDyWa_GetVolumeThreshold(_Instance); } - set { PtDyWa_SetVolumeThreshold(_Instance, value); } - } - - protected override void _Dispose(bool disposing) - { - if (_Instance == IntPtr.Zero) - throw new ObjectDisposedException(GetType().Name); - PtDyWa_Free(_Instance); - _Instance = IntPtr.Zero; - } - } - - /// - /// Pitchtracker (Pt) in C# that uses IIR filters for smoothing and an intelligent detection algorithm to reduce calculations - /// - class CPtSharp : CPitchTracker - { - private Pitch.PitchTracker _Instance; - - public CPtSharp() - { - _Instance = new Pitch.PitchTracker {SampleRate = 44100, DetectLevelThreshold = 0.01f, PitchRecordHistorySize = 1}; - } - - public override void Input(byte[] data) - { - short[] samplesShort = new short[data.Length / 2]; - Buffer.BlockCopy(data, 0, samplesShort, 0, data.Length); - float[] samplesFloat = new float[samplesShort.Length]; - for (int i = 0; i < samplesShort.Length; i++) - samplesFloat[i] = (float)samplesShort[i] / short.MaxValue; - _Instance.ProcessBuffer(samplesFloat); - } - - public override int GetNote(out float maxVolume, float[] weights) - { - int note = _Instance.CurrentPitchRecord.MidiNote - 15 - 21; - maxVolume = _Instance.LastMaxVol; - _SetWeights(note, weights); - return note; - } - - public override int GetNumHalfTones() - { - return NumHalfTonesDef; - } - - public override float VolumeTreshold - { - get { return _Instance.DetectLevelThreshold; } - set { _Instance.DetectLevelThreshold = value; } - } - - protected override void _Dispose(bool disposing) - { - if (_Instance == null) - throw new ObjectDisposedException(GetType().Name); - _Instance = null; - } - } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs new file mode 100644 index 00000000..0dbbc501 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs @@ -0,0 +1,71 @@ +using System; +using System.Runtime.InteropServices; + +namespace Vocaluxe.Lib.Sound.Record.PitchTracker +{ + /// + /// Pitchtracker (Pt) that uses autocorrelation (AKF) and AMDF + /// Quite fast and perfect in artificial tests, but may fail in real world scenarios (e.g. missing fundamental) + /// + class CPtAKF : CPitchTracker + { + #region Imports + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr PtAKF_Create(uint step); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtAKF_Free(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtAKF_GetNumHalfTones(); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtAKF_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtAKF_SetVolumeThreshold(IntPtr analyzer, float threshold); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern float PtAKF_GetVolumeThreshold(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PtAKF_GetNote(IntPtr analyzer, [Out] out float maxVolume, [Out] float[] weights); + #endregion + + private IntPtr _Instance; + + public CPtAKF(uint step = 200) + { + _Instance = PtAKF_Create(step); + } + + public override int GetNumHalfTones() + { + return PtAKF_GetNumHalfTones(); + } + + public override float VolumeTreshold + { + get { return PtAKF_GetVolumeThreshold(_Instance); } + set { PtAKF_SetVolumeThreshold(_Instance, value); } + } + + public override void Input(byte[] data) + { + PtAKF_InputByte(_Instance, data, data.Length / 2); + } + + public override int GetNote(out float maxVolume, float[] weights) + { + return PtAKF_GetNote(_Instance, out maxVolume, weights); + } + + protected override void _Dispose(bool disposing) + { + if (_Instance == IntPtr.Zero) + throw new ObjectDisposedException(GetType().Name); + PtAKF_Free(_Instance); + _Instance = IntPtr.Zero; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtDyWa.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtDyWa.cs new file mode 100644 index 00000000..2907f1c8 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtDyWa.cs @@ -0,0 +1,69 @@ +using System; +using System.Runtime.InteropServices; + +namespace Vocaluxe.Lib.Sound.Record.PitchTracker +{ + /// + /// Pitchtracker (Pt) that uses a dynamic wavelet (DyWa) algorithm + /// + class CPtDyWa : CPitchTracker + { + #region Imports + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr PtDyWa_Create(uint step); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtDyWa_Free(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtDyWa_SetVolumeThreshold(IntPtr analyzer, float threshold); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern float PtDyWa_GetVolumeThreshold(IntPtr analyzer); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern void PtDyWa_InputByte(IntPtr analyzer, [In] byte[] data, int sampleCt); + + [DllImport("PitchTracker.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern double PtDyWa_FindNote(IntPtr analyzer, [Out] out float maxVolume); + #endregion + + private IntPtr _Instance; + + public CPtDyWa(uint step = 200) + { + _Instance = PtDyWa_Create(step); + } + + public override void Input(byte[] data) + { + PtDyWa_InputByte(_Instance, data, data.Length / 2); + } + + public override int GetNote(out float maxVolume, float[] weights) + { + int note = (int)Math.Round(PtDyWa_FindNote(_Instance, out maxVolume)); + _SetWeights(note, weights); + return note; + } + + public override int GetNumHalfTones() + { + return NumHalfTonesDef; + } + + public override float VolumeTreshold + { + get { return PtDyWa_GetVolumeThreshold(_Instance); } + set { PtDyWa_SetVolumeThreshold(_Instance, value); } + } + + protected override void _Dispose(bool disposing) + { + if (_Instance == IntPtr.Zero) + throw new ObjectDisposedException(GetType().Name); + PtDyWa_Free(_Instance); + _Instance = IntPtr.Zero; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs new file mode 100644 index 00000000..af38e362 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs @@ -0,0 +1,53 @@ +using System; + +namespace Vocaluxe.Lib.Sound.Record.PitchTracker +{ + /// + /// Pitchtracker (Pt) in C# that uses IIR filters for smoothing and an intelligent detection algorithm to reduce calculations + /// + class CPtSharp : CPitchTracker + { + private Pitch.PitchTracker _Instance; + + public CPtSharp() + { + _Instance = new Pitch.PitchTracker {SampleRate = 44100, DetectLevelThreshold = 0.01f, PitchRecordHistorySize = 1}; + } + + public override void Input(byte[] data) + { + short[] samplesShort = new short[data.Length / 2]; + Buffer.BlockCopy(data, 0, samplesShort, 0, data.Length); + float[] samplesFloat = new float[samplesShort.Length]; + for (int i = 0; i < samplesShort.Length; i++) + samplesFloat[i] = (float)samplesShort[i] / short.MaxValue; + _Instance.ProcessBuffer(samplesFloat); + } + + public override int GetNote(out float maxVolume, float[] weights) + { + int note = _Instance.CurrentPitchRecord.MidiNote - 15 - 21; + maxVolume = _Instance.LastMaxVol; + _SetWeights(note, weights); + return note; + } + + public override int GetNumHalfTones() + { + return NumHalfTonesDef; + } + + public override float VolumeTreshold + { + get { return _Instance.DetectLevelThreshold; } + set { _Instance.DetectLevelThreshold = value; } + } + + protected override void _Dispose(bool disposing) + { + if (_Instance == null) + throw new ObjectDisposedException(GetType().Name); + _Instance = null; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 852cd4f4..1f6afd01 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -268,6 +268,9 @@ + + + From 001884ed9d8af6bb2aa5ff90d7db5b392db295c1 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 16 Apr 2014 23:58:49 +0200 Subject: [PATCH 081/116] Extract class for testing pitchtrackers Fix some typos --- PitchTracker/PitchWrapper.cpp | 2 +- PitchTracker/PitchWrapper.h | 2 +- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 338 +-------------- .../Record/PitchTracker/CPitchTrackerTest.cs | 388 ++++++++++++++++++ Vocaluxe/Vocaluxe.csproj | 1 + 5 files changed, 398 insertions(+), 333 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp index 6314b64c..612882c0 100644 --- a/PitchTracker/PitchWrapper.cpp +++ b/PitchTracker/PitchWrapper.cpp @@ -71,7 +71,7 @@ int PtAKF_GetNumHalfTones(){ return PtAKF::GetNumHalfTones(); } -void PtAKF_SetVolumeTreshold(PtAKF* analyzer, float threshold){ +void PtAKF_SetVolumeThreshold(PtAKF* analyzer, float threshold){ if(!analyzer) return; analyzer->SetVolumeThreshold(threshold); diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h index 6425f862..11b32b84 100644 --- a/PitchTracker/PitchWrapper.h +++ b/PitchTracker/PitchWrapper.h @@ -29,7 +29,7 @@ DllExport void PtDyWa_Free(PtDyWa* analyzer); DllExport void PtDyWa_SetVolumeTreshold(PtDyWa* analyzer,float threshold); DllExport float PtDyWa_GetVolumeThreshold(PtDyWa* analyzer); DllExport void PtDyWa_InputByte(PtDyWa* analyzer, char* data, int sampleCt); -DllExport double PtDyWa_FindNote(PtDyWa* analyzer); +DllExport double PtDyWa_FindNote(PtDyWa* analyzer, float* maxVolume); /* public ref class CTone { diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 9a4a7b4d..43950e7d 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -18,28 +18,12 @@ #define TEST_PITCH using System; -#if TEST_PITCH -using System.Collections.Generic; -using System.IO; -using System.Windows.Forms; -using System.Diagnostics; -using Pitch; -using Vocaluxe.Lib.Sound.Record.Pitch; using Vocaluxe.Lib.Sound.Record.PitchTracker; -using VocaluxeLib; -using VocaluxeLib.Utils; - -#endif namespace Vocaluxe.Lib.Sound.Record { class CBuffer : IDisposable { -#if TEST_PITCH - //Half tones: C C# D D# E F F# G G# A A# B - private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) - private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) -#endif private CPitchTracker _PitchTracker = new CPtAKF(); private float _MaxVolume; @@ -50,8 +34,12 @@ namespace Vocaluxe.Lib.Sound.Record ToneWeigths = new float[GetNumHalfTones()]; Reset(); #if TEST_PITCH - _TestPitchDetection(); - Reset(); + CPitchTrackerTest tester = new CPitchTrackerTest(); + tester.AddAnalyzer(new CAnalyzer()); + tester.AddAnalyzer(new CPtAKF()); + tester.AddAnalyzer(new CPtDyWa()); + tester.AddAnalyzer(new CPtSharp()); + tester.RunTest(); #endif } @@ -109,8 +97,7 @@ namespace Vocaluxe.Lib.Sound.Record public void AnalyzeBuffer() { - //_MaxVolume = _Analyzer.GetPeak() / 43 + 1; - int tone = _PitchTracker.GetNote(out _MaxVolume, ToneWeigths); //(int)Math.Round(_Analyzer.FindNote()); // + int tone = _PitchTracker.GetNote(out _MaxVolume, ToneWeigths); if (tone >= 0) { ToneAbs = tone; @@ -135,316 +122,5 @@ namespace Vocaluxe.Lib.Sound.Record _PitchTracker = null; } } - -#if TEST_PITCH - private static bool _PitchTestRun; - - private static string _ToneToNote(int tone, bool withOctave = true) - { - if (tone < 0) - return "inv."; - tone += 24; - string[] notes = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"}; - string result = notes[tone % 12]; - if (withOctave) - result += (tone / 12); - return result; - } - - private void _TestPitchDetection() - { - if (_PitchTestRun) - return; - _PitchTestRun = true; - const int toneFrom = 0; - const int toneTo = -1; // 47; //B5 - Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); - byte[] data; - byte[] data2 = new byte[2048]; - int ok = 0; - int tests = 0; - double angle = 0; - for (int distort = 0; distort < 10; distort++) - { - for (int tone = toneFrom; tone <= toneTo; tone++) - { - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, ref angle, out data); - _Distort(data, tone, distort); - - for (int i = 0; i < 4; i++) - { - Buffer.BlockCopy(data, i * 2048, data2, 0, 2048); - ProcessNewBuffer(data2); - AnalyzeBuffer(); - } - if (!ToneValid) - CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " not detected (Distortion: " + distort + ")"); - else if (Tone != tone % 12) - { - CBase.Log.LogDebug("Note " + _ToneToNote(tone) + " wrongly detected as " + _ToneToNote(Tone, false) + " (Distortion: " + distort + ")"); - CWavFile file = new CWavFile(); - file.Create(tone + "-" + distort + ".wav", 1, 44100, 16); - file.Write16BitSamples(data, 1); - file.Close(); - } - else - ok++; - tests++; - } - } - /*if (_TestFile("toneG3.wav", 19)) - ok++; - tests++; - if (_TestFile("toneG3Miss.wav", 19)) - ok++; - tests++; - if (_TestFile("toneG4.wav", 31)) - ok++; - tests++;*/ - _TestFile("whistling3.wav", "whistling3.txt", ref tests, ref ok); - _TestFile("sClausVoc.wav", "sClausVoc.txt", ref tests, ref ok); - - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, ref angle, out data); - Stopwatch sw = new Stopwatch(); - sw.Start(); - const int repeats = 100; - for (int i = 0; i < repeats; i++) - { - ProcessNewBuffer(data); - AnalyzeBuffer(); - } - sw.Stop(); - string msg = "Analyser: Errors: " + (tests - ok) + "/" + tests + "; Speed: " + - (int)(repeats / (sw.ElapsedMilliseconds / 1000.0)) + " buffers/s"; - Console.WriteLine(msg); - MessageBox.Show(msg); - Reset(); - } - - private struct STimedNote - { - public int Time, Note; - } - - private void _TestFile(string fileName, string testFileName, ref int ct, ref int ok) - { - if (!File.Exists(testFileName)) - { - ok = ct = 0; - return; - } - List tones = new List(); - using (StreamReader reader = new StreamReader(testFileName)) - { - String line; - while ((line = reader.ReadLine()) != null) - { - int p = line.IndexOf(' '); - if (p < 0) - continue; - STimedNote note; - note.Time = int.Parse(line.Substring(0, p)); - note.Note = int.Parse(line.Substring(p + 1)); - tones.Add(note); - } - } - _TestFile(fileName, tones, ref ct, ref ok); - } - - private bool _TestFile(string fileName, int tone) - { - STimedNote note; - note.Note = tone; - note.Time = 46; - List tones = new List {note}; - int ct = 0; - int ok = 0; - _TestFile(fileName, tones, ref ct, ref ok); - return ok >= ct - 4; - } - - private bool _IsNoteValid(int note, int time, IList tones) - { - const int lastNoteMaxTimeDiff = 1024 * 1000 / 44100; // old note is valid for 1024 more samples - for (int i = 0; i < tones.Count; i++) - { - if (tones[i].Time > time) - break; - if (i + 1 == tones.Count || time <= tones[i + 1].Time + lastNoteMaxTimeDiff) - { - if (tones[i].Note == note) - return true; - } - } - return false; - } - - private void _TestFile(string fileName, IList tones, ref int ct, ref int ok) - { - CWavFile wavFile = new CWavFile(); - try - { - if (!wavFile.Open(fileName)) - return; - if (wavFile.BitsPerSample != 16) - { - wavFile.Close(); - return; - } - int samplesRead = 0; - int curTimeIndex = -1; - int curNote = -1; - const int maxSamplesPerBatch = 512; - CPitchTracker analyzer2 = new CAnalyzer(); - CPitchTracker analyzer3 = new CPtDyWa(); - CPitchTracker analyzer4 = new CPtSharp(); - int[] detectedTones = new int[4]; - int[] oks = new int[4]; - float dummyMaxVol; - float[] dummyWeights = new float[ToneWeigths.Length]; - int lCt = 0; - while (wavFile.NumSamplesLeft > maxSamplesPerBatch) - { - byte[] samples = wavFile.GetNextSamples16BitAsBytes(maxSamplesPerBatch, 1); - samplesRead += samples.Length / 2; - int time = samplesRead * 1000 / wavFile.SampleRate; - ProcessNewBuffer(samples); - AnalyzeBuffer(); - analyzer2.Input(samples); - analyzer3.Input(samples); - analyzer4.Input(samples); - while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) - { - curTimeIndex++; - curNote = tones[curTimeIndex].Note; - } - if (curNote < 0) - continue; - detectedTones[0] = ToneValid ? ToneAbs : -1; - detectedTones[1] = analyzer2.GetNote(out dummyMaxVol, dummyWeights); - detectedTones[2] = analyzer3.GetNote(out dummyMaxVol, dummyWeights); - detectedTones[3] = analyzer4.GetNote(out dummyMaxVol, dummyWeights); - lCt++; - /*if (!ToneValid) - CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms not detected"); - else if (ToneAbs % 12 != curNote % 12) - CBase.Log.LogDebug("Note " + _ToneToNote(curNote) + " at " + time + "ms wrongly detected as " + _ToneToNote(ToneAbs)); - else - ok++;*/ - bool[] valids = new bool[4]; - bool error = false; - for (int i = 0; i < 4; i++) - { - valids[i] = _IsNoteValid(detectedTones[i], time, tones); - if (valids[i]) - oks[i]++; - else - error = true; - } - if (error) - { - string msg = "Note " + _ToneToNote(curNote) + " at " + time + "ms detected as "; - for (int i = 0; i < 4; i++) - msg += _ToneToNote(detectedTones[i]) + (valids[i] ? "" : "(!)") + "; "; - CBase.Log.LogDebug(msg); - } - } - string msg2 = "Detected "; - for (int i = 0; i < 4; i++) - msg2 += oks[i] + "|" + (lCt - oks[i]) + " "; - CBase.Log.LogDebug(msg2); - } - catch (Exception e) - { - Console.WriteLine("Error on file " + fileName + ": " + e); - } - wavFile.Close(); - } - - private static short[] _GetDistort(int len, int tone, int type) - { - short[] sdata = new short[len]; - if (type < 9) - { - int newTone = 1; - switch (type) - { - case 0: - newTone = 2; - break; - case 1: - newTone = 3; - break; - case 2: - newTone = 6; - break; - case 3: - newTone = 8; - break; - case 4: - newTone = 10; - break; - case 5: - newTone = 15; - break; - case 6: - newTone = 25; - break; - case 7: - newTone = 26; - break; - case 8: - newTone = 29; - break; - } - byte[] data2; - double angle = 0; - _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone + newTone), 44100, ref angle, out data2); - Buffer.BlockCopy(data2, 0, sdata, 0, len * 2); - } - else - { - Random r = new Random(0xBEEF); - for (int i = 0; i < sdata.Length; i++) - sdata[i] = (short)(r.Next() - Int16.MinValue); - } - return sdata; - } - - private static void _Distort(byte[] data, int tone, int distortCt) - { - if (distortCt < 1) - return; - short[] sdata = new short[data.Length / 2]; - Buffer.BlockCopy(data, 0, sdata, 0, data.Length); - - short[][] distortions = new short[distortCt][]; - for (int i = 0; i < distortCt; i++) - distortions[i] = _GetDistort(data.Length / 2, tone, i); - - for (int i = 0; i < sdata.Length; i++) - { - double distortion = 0; - for (int j = 0; j < distortCt; j++) - distortion += distortions[j][i]; - distortion /= distortCt; - sdata[i] = (short)(sdata[i] * 4.0 / 5.0 + distortion / 5.0); - } - Buffer.BlockCopy(sdata, 0, data, 0, data.Length); - } - - private static void _GetSineWave(double freq, int sampleRate, ref double angle, out byte[] data) - { - const short max = short.MaxValue; - const int len = 4096; //sampleRate * durationMs / 1000; - short[] data16Bit = new short[len]; - for (int i = 0; i < len; i++) - data16Bit[i] = (short)(Math.Sin(2 * Math.PI * i / sampleRate * freq + angle) * max); - angle = 2 * Math.PI * len / sampleRate * freq + angle; - angle = angle % (2 * Math.PI); - data = new byte[data16Bit.Length * 2]; - Buffer.BlockCopy(data16Bit, 0, data, 0, data.Length); - } -#endif } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs new file mode 100644 index 00000000..00670ad1 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs @@ -0,0 +1,388 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using VocaluxeLib; +using VocaluxeLib.Utils; + +namespace Vocaluxe.Lib.Sound.Record.PitchTracker +{ + class CPitchTrackerTest + { + //Half tones: C C# D D# E F F# G G# A A# B + private const double _BaseToneFreq = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) + private const double _HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) + + private readonly List _Analyzers = new List(); + private int[] _Tones; + private float[][] _Weights; + private float _MaxVolume; + private int _CurTestCount; + private int[] _CurPassedCount; + private int _TestCount; + private int[] _PassedCount; + private int[] _SamplesPerSec; + + private static bool _IsRun; + + public void AddAnalyzer(CPitchTracker analyzer) + { + _Analyzers.Add(analyzer); + } + + #region Init + private void _InitTests() + { + _Tones = new int[_Analyzers.Count]; + _TestCount = 0; + _PassedCount = new int[_Analyzers.Count]; + _CurTestCount = 0; + _CurPassedCount = new int[_Analyzers.Count]; + _Weights = new float[_Analyzers.Count][]; + for (int i = 0; i < _Analyzers.Count; i++) + _Weights[i] = new float[_Analyzers[i].GetNumHalfTones()]; + _SamplesPerSec = new int[_Analyzers.Count]; + } + + private void _InitNext(string lastTest) + { + string msg = "Errors " + lastTest + ": "; + for (int i = 0; i < _CurPassedCount.Length; i++) + { + msg += _CurTestCount - _CurPassedCount[i] + " "; + _PassedCount[i] += _CurPassedCount[i]; + _CurPassedCount[i] = 0; + } + msg += "of " + _CurTestCount; + CBase.Log.LogDebug(msg); + _TestCount += _CurTestCount; + _CurTestCount = 0; + } + #endregion + + public void RunTest(bool reRun = false) + { + if (_IsRun && !reRun) + return; + _IsRun = true; + + _InitTests(); + + _TestSines(); + _InitNext("Sines"); + + _TestFile("toneG3.wav", 19); + _InitNext("Real G3"); + + _TestFile("toneG3Miss.wav", 19); + _InitNext("Real G3 with miss. fundamental"); + + _TestFile("toneG4.wav", 31); + _InitNext("Real G4"); + + _TestFile("whistling3.wav", "whistling3.txt"); + _InitNext("High whistling"); + + _TestFile("sClausVoc.wav", "sClausVoc.txt"); + _InitNext("Real song"); + + _TestSpeed(); + CBase.Log.LogDebug("Finished: "); + for (int i = 0; i < _Analyzers.Count; i++) + { + string msg = _Analyzers[i].GetType().Name + ":"; + msg += " Errors=" + (_TestCount - _PassedCount[i]); + msg += " Passed=" + _PassedCount[i]; + msg += " Total=" + _TestCount; + msg += " Speed=" + _SamplesPerSec[i] + "samples/s (=" + (_SamplesPerSec[i] / 44100) + "rec.s/s)"; + CBase.Log.LogDebug(msg); + } + } + + private void _TestSpeed() + { + const int samplesPerBuffer = 512; + byte[] data; + byte[] data2 = new byte[samplesPerBuffer * 2]; + double angle = 0; + const int repeats = 100; + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, 5), 44100, samplesPerBuffer * repeats, ref angle, out data); + for (int i = 0; i < _Analyzers.Count; i++) + { + CPitchTracker analyzer = _Analyzers[i]; + Stopwatch sw = new Stopwatch(); + sw.Start(); + for (int j = 0; j < repeats; j++) + { + Buffer.BlockCopy(data, 0, data2, 0, samplesPerBuffer * 2); + analyzer.Input(data2); + analyzer.GetNote(out _MaxVolume, _Weights[j]); + } + sw.Stop(); + _SamplesPerSec[i] = (int)Math.Round(samplesPerBuffer * repeats / (sw.ElapsedMilliseconds / 1000.0)); + } + } + + private void _Process(byte[] data) + { + for (int j = 0; j < _Analyzers.Count; j++) + { + _Analyzers[j].Input(data); + _Tones[j] = _Analyzers[j].GetNote(out _MaxVolume, _Weights[j]); + } + } + + private static string _ToneToNote(int tone, bool withOctave = true) + { + if (tone < 0) + return "inv."; + tone += 24; + string[] notes = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"}; + string result = notes[tone % 12]; + if (withOctave) + result += (tone / 12); + return result; + } + + #region Sines + private void _TestSines() + { + const int toneFrom = 0; + const int toneTo = 47; //B5 + const int sampleCt = 4096; + const int batchCt = 512; + byte[] data2 = new byte[batchCt * 2]; + Console.WriteLine("Testing notes " + _ToneToNote(toneFrom) + " - " + _ToneToNote(toneTo)); + double angle = 0; + bool[] valids = new bool[_Analyzers.Count]; + for (int distort = 0; distort < 10; distort++) + { + for (int tone = toneFrom; tone <= toneTo; tone++) + { + byte[] data; + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone), 44100, sampleCt, ref angle, out data); + _Distort(data, tone, distort); + + for (int i = 0; i < sampleCt / batchCt; i++) + { + Buffer.BlockCopy(data, i * batchCt * 2, data2, 0, batchCt * 2); + _Process(data2); + if (i * batchCt < 2048) + continue; + _CurTestCount++; + bool ok = true; + for (int j = 0; j < valids.Length; j++) + { + valids[j] = _Tones[j] == tone; + if (!valids[j]) + ok = false; + else + _CurPassedCount[j]++; + } + if (ok) + continue; + string msg = "Note " + _ToneToNote(tone) + " detected as "; + for (int j = 0; j < valids.Length; j++) + msg += _ToneToNote(_Tones[j]) + (valids[j] ? "" : "(!)") + "; "; + CBase.Log.LogDebug(msg); + } + } + } + } + + private static short[] _GetDistort(int sampleCt, int tone, int type) + { + short[] sdata = new short[sampleCt]; + if (type < 9) + { + int newTone = 1; + switch (type) + { + case 0: + newTone = 2; + break; + case 1: + newTone = 3; + break; + case 2: + newTone = 6; + break; + case 3: + newTone = 8; + break; + case 4: + newTone = 10; + break; + case 5: + newTone = 15; + break; + case 6: + newTone = 25; + break; + case 7: + newTone = 26; + break; + case 8: + newTone = 29; + break; + } + byte[] data2; + double angle = 0; + _GetSineWave(_BaseToneFreq * Math.Pow(_HalftoneBase, tone + newTone), 44100, sampleCt, ref angle, out data2); + Buffer.BlockCopy(data2, 0, sdata, 0, sampleCt * 2); + } + else + { + Random r = new Random(0xBEEF); + for (int i = 0; i < sdata.Length; i++) + sdata[i] = (short)(r.Next() - Int16.MinValue); + } + return sdata; + } + + private static void _Distort(byte[] data, int tone, int distortCt) + { + if (distortCt < 1) + return; + short[] sdata = new short[data.Length / 2]; + Buffer.BlockCopy(data, 0, sdata, 0, data.Length); + + short[][] distortions = new short[distortCt][]; + for (int i = 0; i < distortCt; i++) + distortions[i] = _GetDistort(data.Length / 2, tone, i); + + for (int i = 0; i < sdata.Length; i++) + { + double distortion = 0; + for (int j = 0; j < distortCt; j++) + distortion += distortions[j][i]; + distortion /= distortCt; + sdata[i] = (short)(sdata[i] * 4.0 / 5.0 + distortion / 5.0); + } + Buffer.BlockCopy(sdata, 0, data, 0, data.Length); + } + + private static void _GetSineWave(double freq, int sampleRate, int sampleCt, ref double angle, out byte[] data) + { + const short max = short.MaxValue; + short[] data16Bit = new short[sampleCt]; + for (int i = 0; i < sampleCt; i++) + data16Bit[i] = (short)(Math.Sin(2 * Math.PI * i / sampleRate * freq + angle) * max); + angle = 2 * Math.PI * sampleCt / sampleRate * freq + angle; + angle = angle % (2 * Math.PI); + data = new byte[data16Bit.Length * 2]; + Buffer.BlockCopy(data16Bit, 0, data, 0, data.Length); + } + #endregion + + #region File + private struct STimedNote + { + public int Time, Note; + } + + private void _TestFile(string fileName, string testFileName) + { + if (!File.Exists(testFileName)) + return; + List tones = new List(); + using (StreamReader reader = new StreamReader(testFileName)) + { + String line; + while ((line = reader.ReadLine()) != null) + { + int p = line.IndexOf(' '); + if (p < 0) + continue; + STimedNote note; + note.Time = int.Parse(line.Substring(0, p)); + note.Note = int.Parse(line.Substring(p + 1)); + tones.Add(note); + } + } + _TestFile(fileName, tones); + } + + private void _TestFile(string fileName, int tone) + { + STimedNote note; + note.Note = tone; + note.Time = 46; + List tones = new List {note}; + _TestFile(fileName, tones); + } + + private static bool _IsNoteValid(int note, int time, IList tones) + { + const int lastNoteMaxTimeDiff = 1024 * 1000 / 44100; // old note is valid for 1024 more samples + for (int i = 0; i < tones.Count; i++) + { + if (tones[i].Time > time) + break; + if (i + 1 == tones.Count || time <= tones[i + 1].Time + lastNoteMaxTimeDiff) + { + if (tones[i].Note == note) + return true; + } + } + return false; + } + + private void _TestFile(string fileName, IList tones) + { + CWavFile wavFile = new CWavFile(); + try + { + if (!wavFile.Open(fileName)) + return; + if (wavFile.BitsPerSample != 16) + { + wavFile.Close(); + return; + } + int samplesRead = 0; + int curTimeIndex = -1; + int curNote = -1; + const int maxSamplesPerBatch = 512; + bool[] valids = new bool[_Tones.Length]; + while (wavFile.NumSamplesLeft > maxSamplesPerBatch) + { + byte[] samples = wavFile.GetNextSamples16BitAsBytes(maxSamplesPerBatch, 1); + samplesRead += samples.Length / 2; + int time = samplesRead * 1000 / wavFile.SampleRate; + _Process(samples); + while (curTimeIndex + 1 < tones.Count && time >= tones[curTimeIndex + 1].Time) + { + curTimeIndex++; + curNote = tones[curTimeIndex].Note; + } + if (curNote < 0) + continue; + _CurTestCount++; + bool error = false; + for (int i = 0; i < _Tones.Length; i++) + { + valids[i] = _IsNoteValid(_Tones[i], time, tones); + if (valids[i]) + _CurPassedCount[i]++; + else + error = true; + } + if (error) + { + string msg = "Note " + _ToneToNote(curNote) + " at " + time + "ms detected as "; + for (int i = 0; i < 4; i++) + msg += _ToneToNote(_Tones[i]) + (valids[i] ? "" : "(!)") + "; "; + CBase.Log.LogDebug(msg); + } + } + } + catch (Exception e) + { + Console.WriteLine("Error on file " + fileName + ": " + e); + } + wavFile.Close(); + } + #endregion + } +} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 1f6afd01..df259176 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -268,6 +268,7 @@ + From 874c66d6d1aade1c8a4cdde300055b24500ae74b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 17 Apr 2014 00:13:24 +0200 Subject: [PATCH 082/116] Fix bug (last value left out) --- PitchTracker/ptAKF.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index 7a418f22..99418d33 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -162,7 +162,7 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r lastWeight = curWeight; } //Set all invalid weights to 0 - for(int toneIndex = lastValidTone + 1;toneIndex < _MaxHalfTone; toneIndex++){ + for(int toneIndex = lastValidTone + 1;toneIndex <= _MaxHalfTone; toneIndex++){ weights[toneIndex - _MinHalfTone] = 0.f; } } From 29d2dce3fc924c439011db549ea72db36f2c201f Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 17 Apr 2014 13:45:08 +0200 Subject: [PATCH 083/116] Move files to correct dir --- .../Record/PitchTracker/CPitchTrackerTest.cs | 2 +- .../Lib/Sound/Record/PitchTracker/CPtSharp.cs | 1 + .../Pitch/CircularBuffer.cs | 5 +--- .../{ => PitchTracker}/Pitch/Extensions.cs | 25 ++++++++----------- .../{ => PitchTracker}/Pitch/IIRFilter.cs | 5 +--- .../{ => PitchTracker}/Pitch/PitchDsp.cs | 6 +---- .../{ => PitchTracker}/Pitch/PitchTracker.cs | 3 +-- Vocaluxe/Vocaluxe.csproj | 10 ++++---- 8 files changed, 22 insertions(+), 35 deletions(-) rename Vocaluxe/Lib/Sound/Record/{ => PitchTracker}/Pitch/CircularBuffer.cs (98%) rename Vocaluxe/Lib/Sound/Record/{ => PitchTracker}/Pitch/Extensions.cs (83%) rename Vocaluxe/Lib/Sound/Record/{ => PitchTracker}/Pitch/IIRFilter.cs (99%) rename Vocaluxe/Lib/Sound/Record/{ => PitchTracker}/Pitch/PitchDsp.cs (99%) rename Vocaluxe/Lib/Sound/Record/{ => PitchTracker}/Pitch/PitchTracker.cs (99%) diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs index 00670ad1..dc08cec7 100644 --- a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPitchTrackerTest.cs @@ -116,7 +116,7 @@ namespace Vocaluxe.Lib.Sound.Record.PitchTracker { Buffer.BlockCopy(data, 0, data2, 0, samplesPerBuffer * 2); analyzer.Input(data2); - analyzer.GetNote(out _MaxVolume, _Weights[j]); + analyzer.GetNote(out _MaxVolume, _Weights[i]); } sw.Stop(); _SamplesPerSec[i] = (int)Math.Round(samplesPerBuffer * repeats / (sw.ElapsedMilliseconds / 1000.0)); diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs index af38e362..9f73b0f2 100644 --- a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtSharp.cs @@ -4,6 +4,7 @@ namespace Vocaluxe.Lib.Sound.Record.PitchTracker { /// /// Pitchtracker (Pt) in C# that uses IIR filters for smoothing and an intelligent detection algorithm to reduce calculations + /// DO NOT USE in 32 Bit! Due to floating point errors the filter will raise all values to NAN (TODO: FIX it!) /// class CPtSharp : CPitchTracker { diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/CircularBuffer.cs similarity index 98% rename from Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs rename to Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/CircularBuffer.cs index d784e2df..07b6836b 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/CircularBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/CircularBuffer.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using System.Text; -using System.Collections; -namespace Pitch +namespace Vocaluxe.Lib.Sound.Record.PitchTracker.Pitch { public class CircularBuffer : IDisposable { diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/Extensions.cs similarity index 83% rename from Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs rename to Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/Extensions.cs index 2487ea18..4cbd7c81 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/Extensions.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/Extensions.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -namespace Pitch +namespace Vocaluxe.Lib.Sound.Record.PitchTracker.Pitch { public static class Extensions { @@ -12,7 +9,7 @@ namespace Pitch /// /// /// - static public void Clear(this float[] buffer) + public static void Clear(this float[] buffer) { Array.Clear(buffer, 0, buffer.Length); } @@ -22,7 +19,7 @@ namespace Pitch /// /// /// - static public void Clear(this double[] buffer) + public static void Clear(this double[] buffer) { Array.Clear(buffer, 0, buffer.Length); } @@ -35,15 +32,15 @@ namespace Pitch /// /// /// - static public void Copy(this float[] fromBuffer, float[] toBuffer, int fromStart, int toStart, int length) + public static void Copy(this float[] fromBuffer, float[] toBuffer, int fromStart, int toStart, int length) { if (toBuffer == null || fromBuffer.Length == 0 || toBuffer.Length == 0) return; - var fromBegIdx = fromStart; - var fromEndIdx = fromStart + length; - var toBegIdx = toStart; - var toEndIdx = toStart + length; + int fromBegIdx = fromStart; + int fromEndIdx = fromStart + length; + int toBegIdx = toStart; + int toEndIdx = toStart + length; if (fromBegIdx < 0) { @@ -88,7 +85,7 @@ namespace Pitch ///

    hms7))l2%D$VAVDfq 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 sO4h0OT7Cr$bw+ delta 94529 zcmYJ4b9CJ6!^AhXZJP}n+l`aPXd1h1tZ&T5ww(rzZCj0P+j`r3Z{Od)d(O_z^O>1v z&sjVcvkw-rM_~fNh7MU#Y@h-V2!sy?0)bOx^rkMA2Z|FhMne};pB!}`m&lHR^|xV+X~43uoaU$b0FP>{xYwIX|#{( z!67ROmJ(mZ^L58 zjWk{yj}l7>isLQ#h10o4og=hf#P3iU#SQ{~pMmYq!A8dmU+H5*ejg0^pMyD@TYPh{ z1}tpN*#9|NW&C%<>tXBpbGY&k$zSg@nWPUR`IMcAKhH&}w4pZXdJ~OhRVU;2~7Eu9=Zdz#m_?AsZC0UDc zg4Az>&2Z|2z8z&(PS;8H*v(ao@+k>xi9*JCFF`Xm*VG%xy3_vcnGNI>TLDfF;H^ZX z!A7rmqluJMxHe+J*dGyf_u+1Jyg%;u22<|$2_lB*T+c=W6Q6cJ8qPTuy?)335z71Z z>MhHr>$FB8B_%odlrK1WT&5q~@#3y!BiyuyU>s`n<*5N=cnk&xya^kE#6g|&;LxwW-k>Njze-4|7f5d~QV1ABSm#H0 z5V$ZjatE5wH6jR77?H@Ed~Kf+1P8+914)rgRD#e!tWKcV_AFKqImob(=?x6^x0L>? z&mXCvx(QX9Yitmt)F(n{3uuk_0dBY$xTy~@y&wX^4OH+f$O$RnYv4Y#F*_<^k7*QM zQiuMNjgqw^N+m-?|*Jn{d)R1vmlFker42}#rpQI6S(uYKumg`L3G=`u7 zlM0kdIT5|+-B|?q6~TI=`#_1h3cscL=P2Vs-!egTW{EFR2THF?K!43q6KfPnDg*hd ziKD`WR;9cvrA-DOOtWE3eHTL)(igf8fno?UecR^%!TrXBv3CvqFD9C|eZoJOETJTR zGhw|2K_|TWc7UROGgp2S0fD6dAa8i}0fc{p@=XVxA^l(s5x5_j{^hL+f+e{|2SIux z3V8p1nwU^l6o?$x9Sp)7^!=a2Se?K-KvF=KA&ByKj!@p9=)XZCfWVkv{eQpI?BK;&Hs!Uguz{>c=~5X8AQfeS+Wo$7CWYaq-1ul@=k z{*P-75ZLl7xJXbXsU`^J?iK_N0zrzw7&3wo5gt)M;H1#R9m4A%BcW+w5c==BRD!tM z4;cT7y8;tM|5WC;_=8Y(6o?Y|$355^Ao)kVdmfe%gxdTF3j!w#sziMcBJ01l2mL|A z2tpfw#QE!<()nLFfAnQC_l^JRC$vw{{?S+O0AmsI{tX+-8{8cDui*$F$m!SMKgIk5 z2JY>Jz#EJd_+4{G5a!Y&fL2n0Zs6eRs8Q?QV?Ea5*}{cRlr>rEKw_=8;�bLezlZht2l~75YyIEQ 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

    d3~y7}0l&gD4b@ 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≦WYv90Oh7)Rgqk=}*i;b_uD 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%0Di|N8V-zt7+6`{u^F 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

    /// /// - static public void Clear(this float[] buffer, int startIdx, int endIdx) + public static void Clear(this float[] buffer, int startIdx, int endIdx) { Array.Clear(buffer, startIdx, endIdx - startIdx + 1); } @@ -99,10 +96,10 @@ namespace Pitch /// /// /// - static public void Fill(this double[] buffer, double value) + public static void Fill(this double[] buffer, double value) { for (int idx = 0; idx < buffer.Length; idx++) buffer[idx] = value; } } -} +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/IIRFilter.cs similarity index 99% rename from Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs rename to Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/IIRFilter.cs index 8759c77e..e180ff72 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/IIRFilter.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/IIRFilter.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -namespace Pitch +namespace Vocaluxe.Lib.Sound.Record.PitchTracker.Pitch { /// /// Infinite impulse response filter (old style analog filters) diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/PitchDsp.cs similarity index 99% rename from Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs rename to Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/PitchDsp.cs index 0eb79432..3fc22ee6 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/PitchDsp.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/PitchDsp.cs @@ -1,10 +1,6 @@ using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using System.Collections; -namespace Pitch +namespace Vocaluxe.Lib.Sound.Record.PitchTracker.Pitch { /// /// Pitch related DSP diff --git a/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/PitchTracker.cs similarity index 99% rename from Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs rename to Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/PitchTracker.cs index 8e7e6776..59522197 100644 --- a/Vocaluxe/Lib/Sound/Record/Pitch/PitchTracker.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/Pitch/PitchTracker.cs @@ -1,9 +1,8 @@ using System; using System.Collections.Generic; using System.Collections; -using Pitch; -namespace Vocaluxe.Lib.Sound.Record.Pitch +namespace Vocaluxe.Lib.Sound.Record.PitchTracker.Pitch { /// /// Tracks pitch diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index df259176..f43e6307 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -273,11 +273,11 @@ - - - - - + + + + + From a85cdaf615108e33182a95e0e18f84f319e685a5 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 25 Apr 2014 16:11:40 +0200 Subject: [PATCH 084/116] Smooth pitch result --- PitchTracker/Helper.cpp | 2 +- PitchTracker/ptAKF.cpp | 100 ++++++++++++------ PitchTracker/ptAKF.h | 22 ++-- .../Lib/Sound/Record/PitchTracker/CPtAKF.cs | 2 +- 4 files changed, 82 insertions(+), 44 deletions(-) diff --git a/PitchTracker/Helper.cpp b/PitchTracker/Helper.cpp index 41e00776..f49de316 100644 --- a/PitchTracker/Helper.cpp +++ b/PitchTracker/Helper.cpp @@ -3,7 +3,7 @@ #include float* short2FloatArray(short* in, size_t len){ - const float maxShort = 32767.0; + const float maxShort = 32767.0f; float* result = static_cast(malloc(len * sizeof(float))); float* curOut = result; diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index 99418d33..cb83edae 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -43,12 +43,15 @@ PtAKF::PtAKF(unsigned step){ _Window = new float[_SampleCt]; double cosMult = 2. * M_PI / (_SampleCt - 1.); //To simplify and speed up for (int i = 0; i < _SampleCt; i++) { - _Window[i] = static_cast(0.54 - 0.46 * cos(i * cosMult)); + _Window[i] = static_cast(0.64 - 0.36 * cos(i * cosMult)); } } _Step = step; _VolTreshold = 0.01f; _LastMaxVol = 0.f; + for(int i = 0; i < _SmoothCt; i++) + _LastTones[i] = -1; + _LastToneIndex = 0; } PtAKF::~PtAKF(){ @@ -67,15 +70,42 @@ void PtAKF::SetVolumeThreshold(float threshold){ int PtAKF::GetNote(float* restrict maxVolume, float* restrict weights){ float AnaylsisBuf[_SampleCt]; - size_t size = _AnalysisBuf.size(); - if(size > _SampleCt) - _AnalysisBuf.pop(size - _SampleCt); - if(!_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)){ - *maxVolume = _LastMaxVol * 0.85f; - return -1; + int note = _LastTones[_LastToneIndex]; + *maxVolume = _LastMaxVol * 0.85f; + if(_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)){ + do{ + _AnalysisBuf.pop(_Step); + note = _GetNote(AnaylsisBuf, maxVolume, weights); + if(++_LastToneIndex >= _SmoothCt) + _LastToneIndex = 0; + _LastTones[_LastToneIndex] = note; + }while(_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)); + note = _GetSmoothTone(); } - _AnalysisBuf.pop(_Step); - return _GetNote(AnaylsisBuf, maxVolume, weights); + return note; +} + +int PtAKF::_GetSmoothTone(){ + int tones[_SmoothCt]; + int ct = 0; + for(int i=0; i < _SmoothCt; i++){ + int j; + int tone = _LastTones[i]; + if(tone < 0) + continue; + for(j = ct; j > 0; j--){ + if(tones[j-1] > tone) + tones[j] = tones[j-1]; + else break; + } + tones[j] = tone; + ct++; + } + if(ct == 0) + return -1; //Nothing detected + if(ct % 2 == 0) + return (tones[ct/2] + tones[ct/2-1]) / 2; //For even cts get the mean of the 2 middle tones + return tones[ct/2]; //For odd cts get the median (middle tone) } void PtAKF::InitPeaks(SPeak peaks[_MaxPeaks]){ @@ -104,7 +134,7 @@ void PtAKF::AddPeak(SPeak peaks[], float curWeight, int toneIndex){ } } -int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* restrict weights){ +int PtAKF::_GetNote(float samples[_SampleCt], float* restrict maxVolume, float weights[_MaxHalfTone+1]){ // Calculate maximum volume float maxVolumeL = 0; @@ -132,15 +162,15 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r int lastValidTone = 0; float lastWeight = 1.f; float maxWeight = 0.f; - for (int toneIndex = _MinHalfTone; toneIndex <= _MaxHalfTone; toneIndex++) - { + + for (int toneIndex = 0; toneIndex <= _MaxHalfTone; toneIndex++){ float curWeight = _AnalyzeByTone(samples, samplesWindowed, toneIndex); if(curWeight > maxWeight){ maxWeight = curWeight; } - weights[toneIndex - _MinHalfTone] = curWeight; + weights[toneIndex] = curWeight; //Filter: if(lastWeight > curWeight || (lastWeight > 0.f && curWeight <= 0.f)) @@ -161,9 +191,11 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r } lastWeight = curWeight; } + if(lastValidTone < 0) + return -1; //Set all invalid weights to 0 for(int toneIndex = lastValidTone + 1;toneIndex <= _MaxHalfTone; toneIndex++){ - weights[toneIndex - _MinHalfTone] = 0.f; + weights[toneIndex] = 0.f; } } @@ -171,10 +203,10 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r InitPeaks(peaks); int numPeaks = 0; bool up = true; - for(int i = _MinHalfTone + 1; i <= _MaxHalfTone; i++){ - if(weights[i-1] > weights[i]){ + for(int i = 1; i <= _MaxHalfTone; i++){ + if(weights[i - 1] > weights[i]){ if(up){ - AddPeak(peaks, weights[i - 1 - _MinHalfTone], i - 1); + AddPeak(peaks, weights[i - 1], i - 1); numPeaks++; up = false; } @@ -182,8 +214,8 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r up = true; } } - if(up){ - AddPeak(peaks, weights[_MaxHalfTone - _MinHalfTone], _MaxHalfTone); + if(up && weights[_MaxHalfTone] > 0.001f){ + AddPeak(peaks, weights[_MaxHalfTone], _MaxHalfTone); numPeaks++; } if(numPeaks > _MaxPeaks) @@ -193,9 +225,11 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r // This is necessary because we may have our real peak a bit off the exact tone frequency // and a 'wrong' peak that is exactly at another tone which might become higher than the one at the 'right' tone + maxWeight = peaks[_MaxPeaks-1].weight; + if(maxWeight < 0.00001f) // Just a small number to check for zero values + return -1; int maxTone = peaks[_MaxPeaks-1].toneIndex; int maxToneFine = -1; - maxWeight = peaks[_MaxPeaks-1].weight; for(int i = _MaxPeaks - numPeaks; i < _MaxPeaks; i++){ float curWeight = peaks[i].weight; if(curWeight * 3.f < maxWeight) @@ -217,7 +251,7 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r }else continue; } - weights[toneIndex - _MinHalfTone] = curWeight; + weights[toneIndex] = curWeight; if(curWeight > maxWeight){ maxTone = toneIndex; maxToneFine = 1 - otherToneFineIndex; @@ -225,10 +259,10 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r } // Now check also neighbouring tone - if(otherToneIndex > 0){ + if(otherToneIndex >= 0){ float curWeightOther = _AnalyzeBySampleCt(samples, samplesWindowed, _SamplesPerPeriodPerToneFine[otherToneIndex * 2 + otherToneFineIndex]); - if(curWeightOther > weights[otherToneIndex - _MinHalfTone]){ - weights[otherToneIndex - _MinHalfTone] = curWeightOther; + if(curWeightOther > weights[otherToneIndex]){ + weights[otherToneIndex] = curWeightOther; if(curWeightOther > maxWeight){ maxTone = otherToneIndex; maxToneFine = otherToneFineIndex; @@ -238,20 +272,20 @@ int PtAKF::_GetNote(float* restrict samples, float* restrict maxVolume, float* r } } - float energy = _AKFBySampleCt(samples, 0); - float maxAKF = (maxToneFine < 0) ? _AKFByTone(samples, maxTone) : _AKFBySampleCt(samples, _SamplesPerPeriodPerToneFine[maxTone * 2 + maxToneFine]); + float energy = _AKFBySampleCt(samplesWindowed, 0); + float maxAKF = (maxToneFine < 0) ? _AKFByTone(samplesWindowed, maxTone) : _AKFBySampleCt(samplesWindowed, _SamplesPerPeriodPerToneFine[maxTone * 2 + maxToneFine]); //if(maxWeight - minWeight > 0.025){ - if(maxAKF >= 0.35f * energy){ + if(maxAKF >= 0.33f * energy){ return maxTone; }else return -1; } -float PtAKF::_AnalyzeByTone(float* restrict samples, float* restrict samplesWindowed, int toneIndex){ +float PtAKF::_AnalyzeByTone(float samples[_SampleCt], float samplesWindowed[_SampleCt], int toneIndex){ return _AnalyzeBySampleCt(samples, samplesWindowed, _SamplesPerPeriodPerTone[toneIndex]); } -float PtAKF::_AnalyzeBySampleCt(float* restrict samples, float* restrict samplesWindowed, float samplesPerPeriodD){ +float PtAKF::_AnalyzeBySampleCt(float samples[_SampleCt], float samplesWindowed[_SampleCt], float samplesPerPeriodD){ // Use method by Kobayashi and Shimamura (2001): Combine AKF and AMDF to a new f(z)=AKF(z)/(AMDF(z)+k) with k=1 float akf = _AKFBySampleCt(samplesWindowed, samplesPerPeriodD); @@ -263,11 +297,11 @@ float PtAKF::_AnalyzeBySampleCt(float* restrict samples, float* restrict samples //{toneIndex}: {accumDistAKF} ; {accumDistAMDF}; {result} } -float PtAKF::_AKFByTone(float* restrict samples, int toneIndex){ +float PtAKF::_AKFByTone(float samples[_SampleCt], int toneIndex){ return _AKFBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); } -float PtAKF::_AKFBySampleCt(float* restrict samples, float samplesPerPeriodD){ +float PtAKF::_AKFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD){ int samplesPerPeriod = static_cast(samplesPerPeriodD); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; @@ -288,11 +322,11 @@ float PtAKF::_AKFBySampleCt(float* restrict samples, float samplesPerPeriodD){ return accumDist / _SampleCt; } -float PtAKF::_AMDFByTone(float* restrict samples, int toneIndex){ +float PtAKF::_AMDFByTone(float samples[_SampleCt], int toneIndex){ return _AKFBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); } -float PtAKF::_AMDFBySampleCt(float* restrict samples, float samplesPerPeriodD){ +float PtAKF::_AMDFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD){ int samplesPerPeriod = static_cast(samplesPerPeriodD); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index 58c04433..b5d9a2b6 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -32,7 +32,7 @@ public: int GetNote(float* restrict maxVolume, float* restrict weights); void SetVolumeThreshold(float threshold); float GetVolumeThreshold(){return _VolTreshold;} - static int GetNumHalfTones(){ return _MaxHalfTone - _MinHalfTone + 1;} + static int GetNumHalfTones(){ return _MaxHalfTone + 1;} private: static int _InitCount; @@ -42,25 +42,29 @@ private: // (cannot use halves as it would be ambiguous) static float* restrict _SamplesPerPeriodPerToneFine; static float* restrict _Window; - static constexpr int _MinHalfTone = 0; //C2 + //static constexpr int _MinHalfTone = 0; //C2 static constexpr int _MaxHalfTone = 56;//47; //B5 static constexpr int _HalfTonesAdd = 4; //Additonal half tones to analyze to remove the peak at lag 0 static constexpr int _MaxPeaks = 10; + static constexpr int _SmoothCt = 3; //Number of samples used for smoothing the result constexpr static size_t _SampleCt = 2048; RingBuffer<_SampleCt * 2> _AnalysisBuf; unsigned _Step; float _VolTreshold; float _LastMaxVol; + int _LastTones[_SmoothCt]; + int _LastToneIndex; - int _GetNote(float* restrict samples, float* restrict maxVolume, float* restrict weights); + int _GetNote(float samples[_SampleCt], float* restrict maxVolume, float weights[_MaxHalfTone+1]); + int _GetSmoothTone(); - static float _AnalyzeBySampleCt(float* restrict samples, float* restrict samplesWindowed, float samplesPerPeriodD); - static inline float _AnalyzeByTone(float* restrict samples, float* restrict samplesWindowed, int toneIndex); - static float _AKFBySampleCt(float* restrict samples, float samplesPerPeriodD); - static inline float _AKFByTone(float* restrict samples, int toneIndex); - static float _AMDFBySampleCt(float* restrict samples, float samplesPerPeriodD); - static inline float _AMDFByTone(float* restrict samples, int toneIndex); + static float _AnalyzeBySampleCt(float samples[_SampleCt], float samplesWindowed[_SampleCt], float samplesPerPeriodD); + static inline float _AnalyzeByTone(float samples[_SampleCt], float samplesWindowed[_SampleCt], int toneIndex); + static float _AKFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD); + static inline float _AKFByTone(float samples[_SampleCt], int toneIndex); + static float _AMDFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD); + static inline float _AMDFByTone(float samples[_SampleCt], int toneIndex); static inline void InitPeaks(SPeak peaks[_MaxPeaks]); static inline void AddPeak(SPeak peaks[_MaxPeaks], float curWeight, int toneIndex); }; \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs index 0dbbc501..842fdb22 100644 --- a/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs +++ b/Vocaluxe/Lib/Sound/Record/PitchTracker/CPtAKF.cs @@ -34,7 +34,7 @@ namespace Vocaluxe.Lib.Sound.Record.PitchTracker private IntPtr _Instance; - public CPtAKF(uint step = 200) + public CPtAKF(uint step = 400) { _Instance = PtAKF_Create(step); } From f481d283d6541176af68a2153b6cf28d6e4d20d9 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 25 Apr 2014 16:12:12 +0200 Subject: [PATCH 085/116] Improve test cases --- PitchTracker/TestSounds.rar | Bin 840954 -> 840957 bytes .../Record/PitchTracker/CPitchTrackerTest.cs | 23 +++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/PitchTracker/TestSounds.rar b/PitchTracker/TestSounds.rar index 7dd70d57103cc09683f6ca47483abd7539590d5e..3e956da1c6095c9fc0ef4c508bb94293a22fe292 100644 GIT binary patch delta 406 zcmeyh()jO6;|U^0Cb=aCCKxf)F)}c4F)=VOY4<-)no>E_Mb?;?L4kpRq1ZVmv9vfW zKUuG&qJ-gtAD`w#x43#{cCY$|LRVI9(=hM0HT_fn{!vYE{>CH~%c}2m(0jq@hDOdU zD!W*JSbbQNp>^Wtvt`CoTwFr2JTWpRht~WPEm0Act*>inkU5m&=r~j9!t-acCJudN zCtZ_RBO~kTTIIcRd=}3$blCjm!m+F+%FKWE967Y+^n-}d8Ehg9;ifa{#e^ds_)JU@ za9)>fu;#Ymg$<&U)e08PbM(G&{!A?|BggRssj5_eGllqPrcGiZC&jkT3_hcv;GVa^ z(QMJyy?@(HR&lob@}FIj@LH#Gt&fe^hu>mMIr}A*4jH9g>|oZ|+-|n=*1B7F8|&(4 z+~7RAkiGfM(q9ZG#pXHlAN!mnB%oAh(J&|WN1f#iM`!-yKEHXnET24D*tmFN>W8#S w6T_&a{~wwUGPWON1Yss1W(HywAZ7((HXvpPVh$kY1Y#~A=H7mgk;n2f0QHHdGynhq delta 403 zcmeyn()ia(;|U^06ZV%Jm|(xs(g8~BsL$PyCVrg+$ zezIOkMG3{!&c=4=4#{{08f78reDG1_3yuqN6!UH`{3W3u#n${|z?? zcRTU3-}L^%I7!#0O}_Wp5fz0$g^cnRyFdIXHfU;-@0 tones) { - const int lastNoteMaxTimeDiff = 1024 * 1000 / 44100; // old note is valid for 1024 more samples + const int lastNoteMaxTimeDiff = 1536 * 1000 / 44100; // old note is valid for 1536 more samples for (int i = 0; i < tones.Count; i++) { if (tones[i].Time > time) break; if (i + 1 == tones.Count || time <= tones[i + 1].Time + lastNoteMaxTimeDiff) { - if (tones[i].Note == note) + if (tones[i].Note == note || tones[i].Note < 0) return true; } } @@ -371,7 +382,7 @@ namespace Vocaluxe.Lib.Sound.Record.PitchTracker if (error) { string msg = "Note " + _ToneToNote(curNote) + " at " + time + "ms detected as "; - for (int i = 0; i < 4; i++) + for (int i = 0; i < _Tones.Length; i++) msg += _ToneToNote(_Tones[i]) + (valids[i] ? "" : "(!)") + "; "; CBase.Log.LogDebug(msg); } From 05c8bfea6c0530dae8b19440f1b10faed308d111 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 25 Apr 2014 16:12:56 +0200 Subject: [PATCH 086/116] Remove pitch test --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 43950e7d..65bf720f 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -15,7 +15,7 @@ // along with Vocaluxe. If not, see . #endregion -#define TEST_PITCH +//#define TEST_PITCH using System; using Vocaluxe.Lib.Sound.Record.PitchTracker; From f2711c53cc277ab9a64465cec69284e4fede42b0 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 25 Apr 2014 16:17:55 +0200 Subject: [PATCH 087/116] Use OpenMP for calculations --- PitchTracker/PitchTracker.vcxproj | 2 ++ PitchTracker/ptAKF.cpp | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj index ebb42e38..1b729255 100644 --- a/PitchTracker/PitchTracker.vcxproj +++ b/PitchTracker/PitchTracker.vcxproj @@ -135,6 +135,7 @@ Speed Fast false + true Windows @@ -157,6 +158,7 @@ true Speed Fast + true Windows diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index cb83edae..335bcde6 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -163,16 +163,18 @@ int PtAKF::_GetNote(float samples[_SampleCt], float* restrict maxVolume, float w float lastWeight = 1.f; float maxWeight = 0.f; + #pragma omp parallel for schedule(static) for (int toneIndex = 0; toneIndex <= _MaxHalfTone; toneIndex++){ float curWeight = _AnalyzeByTone(samples, samplesWindowed, toneIndex); + weights[toneIndex] = curWeight; + } + + for (int toneIndex = 0; toneIndex <= _MaxHalfTone; toneIndex++){ + float curWeight = weights[toneIndex]; if(curWeight > maxWeight){ maxWeight = curWeight; } - - weights[toneIndex] = curWeight; - - //Filter: if(lastWeight > curWeight || (lastWeight > 0.f && curWeight <= 0.f)) lastValidTone = toneIndex - 1; lastWeight = curWeight; From b3da00e081e36b74570a9a0417de471478d2d83f Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 27 Apr 2014 16:41:40 +0200 Subject: [PATCH 088/116] Use FFT for calculating AKF --- PitchTracker/FFT/FFT.cpp | 180 ++++++++++ PitchTracker/FFT/FFT.h | 65 ++++ PitchTracker/FFT/License.txt | 299 +++++++++++++++++ PitchTracker/FFT/RealFFTf.cpp | 388 ++++++++++++++++++++++ PitchTracker/FFT/RealFFTf.h | 23 ++ PitchTracker/PitchTracker.vcxproj | 4 + PitchTracker/PitchTracker.vcxproj.filters | 18 + PitchTracker/performous/libda/sample.hpp | 1 - PitchTracker/ptAKF.cpp | 27 +- PitchTracker/ptAKF.h | 13 +- 10 files changed, 1009 insertions(+), 9 deletions(-) create mode 100644 PitchTracker/FFT/FFT.cpp create mode 100644 PitchTracker/FFT/FFT.h create mode 100644 PitchTracker/FFT/License.txt create mode 100644 PitchTracker/FFT/RealFFTf.cpp create mode 100644 PitchTracker/FFT/RealFFTf.h diff --git a/PitchTracker/FFT/FFT.cpp b/PitchTracker/FFT/FFT.cpp new file mode 100644 index 00000000..39fdb52f --- /dev/null +++ b/PitchTracker/FFT/FFT.cpp @@ -0,0 +1,180 @@ +/********************************************************************** + + FFT.cpp + + Dominic Mazzoni + + September 2000 + +*******************************************************************//*! + +\file FFT.cpp +\brief Fast Fourier Transform routines. + + This file contains a few FFT routines, including a real-FFT + routine that is almost twice as fast as a normal complex FFT, + and a power spectrum routine when you know you don't care + about phase information. + + Some of this code was based on a free implementation of an FFT + by Don Cross, available on the web at: + + http://www.intersrv.com/~dcross/fft.html + + The basic algorithm for his code was based on Numerican Recipes + in Fortran. I optimized his code further by reducing array + accesses, caching the bit reversal table, and eliminating + float-to-double conversions, and I added the routines to + calculate a real FFT and a real power spectrum. + +*//*******************************************************************/ + +#include +#include +#include + +#include "FFT.h" + +#include "RealFFTf.h" + +void DeinitFFT() +{ + // Deallocate any unused RealFFTf tables + CleanupFFT(); +} + +/* + * Real Fast Fourier Transform + * + */ +void RealFFT(int NumSamples, float *RealIn, float *RealOut, float *ImagOut) +{ + // Remap to RealFFTf() function + int i; + HFFT hFFT = GetFFT(NumSamples); + float *pFFT = new float[NumSamples]; + // Copy the data into the processing buffer + for(i=0; iBitReversed[i] ]; + ImagOut[i]=pFFT[hFFT->BitReversed[i]+1]; + } + // Handle the (real-only) DC and Fs/2 bins + RealOut[0] = pFFT[0]; + RealOut[i] = pFFT[1]; + ImagOut[0] = ImagOut[i] = 0; + // Fill in the upper half using symmetry properties + for(i++ ; iBitReversed[i]]; + } + // Handle the (real-only) DC + Out[0] = pFFT[0]; + delete [] pFFT; + ReleaseFFT(hFFT); +} + +/* + * PowerSpectrum + * + * This function computes the same as RealFFT, above, but + * adds the squares of the real and imaginary part of each + * coefficient, extracting the power and throwing away the + * phase. + * + * For speed, it does not call RealFFT, but duplicates some + * of its code. + */ + +void PowerSpectrum(int NumSamples, float *In, float *Out) +{ + // Remap to RealFFTf() function + int i; + HFFT hFFT = GetFFT(NumSamples); + float *pFFT = new float[NumSamples]; + // Copy the data into the processing buffer + for(i=0; iBitReversed[i] ]*pFFT[hFFT->BitReversed[i] ]) + + (pFFT[hFFT->BitReversed[i]+1]*pFFT[hFFT->BitReversed[i]+1]); + } + // Handle the (real-only) DC and Fs/2 bins + Out[0] = pFFT[0]*pFFT[0]; + Out[i] = pFFT[1]*pFFT[1]; + delete [] pFFT; + ReleaseFFT(hFFT); +} \ No newline at end of file diff --git a/PitchTracker/FFT/FFT.h b/PitchTracker/FFT/FFT.h new file mode 100644 index 00000000..b8919e61 --- /dev/null +++ b/PitchTracker/FFT/FFT.h @@ -0,0 +1,65 @@ +/********************************************************************** + + FFT.h + + Dominic Mazzoni + + September 2000 + + This file contains a few FFT routines, including a real-FFT + routine that is almost twice as fast as a normal complex FFT, + and a power spectrum routine which is more convenient when + you know you don't care about phase information. It now also + contains a few basic windowing functions. + + Some of this code was based on a free implementation of an FFT + by Don Cross, available on the web at: + + http://www.intersrv.com/~dcross/fft.html + + The basic algorithm for his code was based on Numerical Recipes + in Fortran. I optimized his code further by reducing array + accesses, caching the bit reversal table, and eliminating + float-to-double conversions, and I added the routines to + calculate a real FFT and a real power spectrum. + + Note: all of these routines use single-precision floats. + I have found that in practice, floats work well until you + get above 8192 samples. If you need to do a larger FFT, + you need to use doubles. + +**********************************************************************/ + +/* + * This is the function you will use the most often. + * Given an array of floats, this will compute the power + * spectrum by doing a Real FFT and then computing the + * sum of the squares of the real and imaginary parts. + * Note that the output array is half the length of the + * input array, and that NumSamples must be a power of two. + */ + +void PowerSpectrum(int NumSamples, float *In, float *Out); + +/* + * Computes an FFT when the input data is real but you still + * want complex data as output. The output arrays are the + * same length as the input, but will be conjugate-symmetric + * NumSamples must be a power of two. + */ + +void RealFFT(int NumSamples, + float *RealIn, float *RealOut, float *ImagOut); + +/* + * Computes an Inverse FFT when the input data is conjugate symmetric + * so the output is purely real. NumSamples must be a power of + * two. + * Requires: EXPERIMENTAL_USE_REALFFTF + */ +void InverseRealFFT(int NumSamples, + float *RealIn, float *ImagIn, float *RealOut); + +void RealInverseRealFFT(int NumSamples, float *In, float *Out); + +void DeinitFFT(); diff --git a/PitchTracker/FFT/License.txt b/PitchTracker/FFT/License.txt new file mode 100644 index 00000000..c2e7eafa --- /dev/null +++ b/PitchTracker/FFT/License.txt @@ -0,0 +1,299 @@ +Code in this folder is based on Code from Audacity. +License of that code is below: + +------------------------------------------------------------------------ + +Note: Audacity is distributed under the terms of the GNU GPL. +This includes everything in the source code distribution +except code in the lib-src directory. Code in the lib-src +directory may be released under a different license +(which is GPL-compatible). For a summary, see the +README.txt file, and for specific details, see the license +information inside each subdirectory of lib-src. + +Documentation is distributed under the Creative Commons license. +Please see here for that: +http://creativecommons.org/licenses/by/3.0/legalcode + +The full text of the GNU GPL follows: + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + +We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices +stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +c) If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is +allowed only for noncommercial distribution and only if you +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/PitchTracker/FFT/RealFFTf.cpp b/PitchTracker/FFT/RealFFTf.cpp new file mode 100644 index 00000000..a18be257 --- /dev/null +++ b/PitchTracker/FFT/RealFFTf.cpp @@ -0,0 +1,388 @@ +/* +* Program: REALFFTF.C +* Author: Philip Van Baren +* Date: 2 September 1993 +* +* Description: These routines perform an FFT on real data to get a conjugate-symmetric +* output, and an inverse FFT on conjugate-symmetric input to get a real +* output sequence. +* +* This code is for floating point data. +* +* Modified 8/19/1998 by Philip Van Baren +* - made the InitializeFFT and EndFFT routines take a structure +* holding the length and pointers to the BitReversed and SinTable +* tables. +* Modified 5/23/2009 by Philip Van Baren +* - Added GetFFT and ReleaseFFT routines to retain common SinTable +* and BitReversed tables so they don't need to be reallocated +* and recomputed on every call. +* - Added Reorder* functions to undo the bit-reversal +* +* Copyright (C) 2009 Philip VanBaren +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include +#include + +#include "RealFFTf.h" +#ifdef EXPERIMENTAL_EQ_SSE_THREADED +#include "RealFFTf48x.h" +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 /* pi */ +#endif + +/* +* Initialize the Sine table and Twiddle pointers (bit-reversed pointers) +* for the FFT routine. +*/ +HFFT InitializeFFT(int fftlen) +{ + int i; + int temp; + int mask; + HFFT h; + + if((h=(HFFT)malloc(sizeof(FFTParam)))==NULL) + { + fprintf(stderr,"Error allocating memory for FFT\n"); + exit(8); + } + /* + * FFT size is only half the number of data points + * The full FFT output can be reconstructed from this FFT's output. + * (This optimization can be made since the data is real.) + */ + h->Points = fftlen/2; + + if((h->SinTable=(fft_type *)malloc(2*h->Points*sizeof(fft_type)))==NULL) + { + fprintf(stderr,"Error allocating memory for Sine table.\n"); + exit(8); + } + + if((h->BitReversed=(int *)malloc(h->Points*sizeof(int)))==NULL) + { + fprintf(stderr,"Error allocating memory for BitReversed.\n"); + exit(8); + } + + for(i=0;iPoints;i++) + { + temp=0; + for(mask=h->Points/2;mask>0;mask >>= 1) + temp=(temp >> 1) + (i&mask ? h->Points : 0); + + h->BitReversed[i]=temp; + } + + for(i=0;iPoints;i++) + { + h->SinTable[h->BitReversed[i] ]=(fft_type)-sin(2*M_PI*i/(2*h->Points)); + h->SinTable[h->BitReversed[i]+1]=(fft_type)-cos(2*M_PI*i/(2*h->Points)); + } + + return h; +} + +/* +* Free up the memory allotted for Sin table and Twiddle Pointers +*/ +void EndFFT(HFFT h) +{ + if(h->Points>0) { + free(h->BitReversed); + free(h->SinTable); + } + h->Points=0; + free(h); +} + +#define MAX_HFFT 10 +static HFFT hFFTArray[MAX_HFFT] = { NULL }; +static int nFFTLockCount[MAX_HFFT] = { 0 }; + +/* Get a handle to the FFT tables of the desired length */ +/* This version keeps common tables rather than allocating a new table every time */ +HFFT GetFFT(int fftlen) +{ + int h,n = fftlen/2; + for(h=0; (hPoints); h++); + if(hBitReversed[i] ] +* Imag_i = buffer[ h->BitReversed[i]+1 ] ) +* Input is in normal order. +* +* Output buffer[0] is the DC bin, and output buffer[1] is the Fs/2 bin +* - this can be done because both values will always be real only +* - this allows us to not have to allocate an extra complex value for the Fs/2 bin +* +* Note: The scaling on this is done according to the standard FFT definition, +* so a unit amplitude DC signal will output an amplitude of (N) +* (Older revisions would progressively scale the input, so the output +* values would be similar in amplitude to the input values, which is +* good when using fixed point arithmetic) +*/ +void RealFFTf(fft_type *buffer,HFFT h) +{ + fft_type *A,*B; + fft_type *sptr; + fft_type *endptr1,*endptr2; + int *br1,*br2; + fft_type HRplus,HRminus,HIplus,HIminus; + fft_type v1,v2,sin,cos; + + int ButterfliesPerGroup=h->Points/2; + + /* + * Butterfly: + * Ain-----Aout + * \ / + * / \ + * Bin-----Bout + */ + + endptr1=buffer+h->Points*2; + + while(ButterfliesPerGroup>0) + { + A=buffer; + B=buffer+ButterfliesPerGroup*2; + sptr=h->SinTable; + + while(A>= 1; + } + /* Massage output to get the output for a real input sequence. */ + br1=h->BitReversed+1; + br2=h->BitReversed+h->Points-1; + + while(br1SinTable[*br1]; + cos=h->SinTable[*br1+1]; + A=buffer+*br1; + B=buffer+*br2; + HRplus = (HRminus = *A - *B ) + (*B * 2); + HIplus = (HIminus = *(A+1) - *(B+1)) + (*(B+1) * 2); + v1 = (sin*HRminus - cos*HIplus); + v2 = (cos*HRminus + sin*HIplus); + *A = (HRplus + v1) * (fft_type)0.5; + *B = *A - v1; + *(A+1) = (HIminus + v2) * (fft_type)0.5; + *(B+1) = *(A+1) - HIminus; + + br1++; + br2--; + } + /* Handle the center bin (just need a conjugate) */ + A=buffer+*br1+1; + *A=-*A; + /* Handle DC bin separately - and ignore the Fs/2 bin + buffer[0]+=buffer[1]; + buffer[1]=(fft_type)0;*/ + /* Handle DC and Fs/2 bins separately */ + /* Put the Fs/2 value into the imaginary part of the DC bin */ + v1=buffer[0]-buffer[1]; + buffer[0]+=buffer[1]; + buffer[1]=v1; +} + + +/* Description: This routine performs an inverse FFT to real data. +* This code is for floating point data. +* +* Note: Output is BIT-REVERSED! so you must use the BitReversed to +* get legible output, (i.e. wave[2*i] = buffer[ BitReversed[i] ] +* wave[2*i+1] = buffer[ BitReversed[i]+1 ] ) +* Input is in normal order, interleaved (real,imaginary) complex data +* You must call InitializeFFT(fftlen) first to initialize some buffers! +* +* Input buffer[0] is the DC bin, and input buffer[1] is the Fs/2 bin +* - this can be done because both values will always be real only +* - this allows us to not have to allocate an extra complex value for the Fs/2 bin +* +* Note: The scaling on this is done according to the standard FFT definition, +* so a unit amplitude DC signal will output an amplitude of (N) +* (Older revisions would progressively scale the input, so the output +* values would be similar in amplitude to the input values, which is +* good when using fixed point arithmetic) +*/ +void InverseRealFFTf(fft_type *buffer,HFFT h) +{ + fft_type *A,*B; + fft_type *sptr; + fft_type *endptr1,*endptr2; + int *br1; + fft_type HRplus,HRminus,HIplus,HIminus; + fft_type v1,v2,sin,cos; + + int ButterfliesPerGroup=h->Points/2; + + /* Massage input to get the input for a real output sequence. */ + A=buffer+2; + B=buffer+h->Points*2-2; + br1=h->BitReversed+1; + while(ASinTable[*br1]; + cos=h->SinTable[*br1+1]; + HRplus = (HRminus = *A - *B ) + (*B * 2); + HIplus = (HIminus = *(A+1) - *(B+1)) + (*(B+1) * 2); + v1 = (sin*HRminus + cos*HIplus); + v2 = (cos*HRminus - sin*HIplus); + *A = (HRplus + v1) * (fft_type)0.5; + *B = *A - v1; + *(A+1) = (HIminus - v2) * (fft_type)0.5; + *(B+1) = *(A+1) - HIminus; + + A+=2; + B-=2; + br1++; + } + /* Handle center bin (just need conjugate) */ + *(A+1)=-*(A+1); + /* Handle DC bin separately - this ignores any Fs/2 component + buffer[1]=buffer[0]=buffer[0]/2;*/ + /* Handle DC and Fs/2 bins specially */ + /* The DC bin is passed in as the real part of the DC complex value */ + /* The Fs/2 bin is passed in as the imaginary part of the DC complex value */ + /* (v1+v2) = buffer[0] == the DC component */ + /* (v1-v2) = buffer[1] == the Fs/2 component */ + v1=0.5f*(buffer[0]+buffer[1]); + v2=0.5f*(buffer[0]-buffer[1]); + buffer[0]=v1; + buffer[1]=v2; + + /* + * Butterfly: + * Ain-----Aout + * \ / + * / \ + * Bin-----Bout + */ + + endptr1=buffer+h->Points*2; + + while(ButterfliesPerGroup>0) + { + A=buffer; + B=buffer+ButterfliesPerGroup*2; + sptr=h->SinTable; + + while(A>= 1; + } +} + +void ReorderToFreq(HFFT hFFT, fft_type *buffer, fft_type *RealOut, fft_type *ImagOut) +{ + // Copy the data into the real and imaginary outputs + for(int i=1;iPoints;i++) { + RealOut[i]=buffer[hFFT->BitReversed[i] ]; + ImagOut[i]=buffer[hFFT->BitReversed[i]+1]; + } + RealOut[0] = buffer[0]; // DC component + ImagOut[0] = 0; + RealOut[hFFT->Points] = buffer[1]; // Fs/2 component + ImagOut[hFFT->Points] = 0; +} + +void ReorderToTime(HFFT hFFT, fft_type *buffer, fft_type *TimeOut) +{ + // Copy the data into the real outputs + for(int i=0;iPoints;i++) { + TimeOut[i*2 ]=buffer[hFFT->BitReversed[i] ]; + TimeOut[i*2+1]=buffer[hFFT->BitReversed[i]+1]; + } +} diff --git a/PitchTracker/FFT/RealFFTf.h b/PitchTracker/FFT/RealFFTf.h new file mode 100644 index 00000000..f46119ca --- /dev/null +++ b/PitchTracker/FFT/RealFFTf.h @@ -0,0 +1,23 @@ +#ifndef __realfftf_h +#define __realfftf_h + +#define fft_type float +typedef struct FFTParamType { + int *BitReversed; + fft_type *SinTable; + int Points; +} FFTParam; +#define HFFT FFTParam * + +HFFT InitializeFFT(int); +void EndFFT(HFFT); +HFFT GetFFT(int); +void ReleaseFFT(HFFT); +void CleanupFFT(); +void RealFFTf(fft_type *,HFFT); +void InverseRealFFTf(fft_type *,HFFT); +void ReorderToTime(HFFT hFFT, fft_type *buffer, fft_type *TimeOut); +void ReorderToFreq(HFFT hFFT, fft_type *buffer, fft_type *RealOut, fft_type *ImagOut); + +#endif + diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj index 1b729255..65ce0ada 100644 --- a/PitchTracker/PitchTracker.vcxproj +++ b/PitchTracker/PitchTracker.vcxproj @@ -174,6 +174,8 @@ + + @@ -183,6 +185,8 @@ + + diff --git a/PitchTracker/PitchTracker.vcxproj.filters b/PitchTracker/PitchTracker.vcxproj.filters index 6e3d94f4..81447394 100644 --- a/PitchTracker/PitchTracker.vcxproj.filters +++ b/PitchTracker/PitchTracker.vcxproj.filters @@ -28,6 +28,12 @@ {2a09cee1-51b7-4c24-aa9f-32bec53c3a36} + + {498f64e2-ff83-41fd-be25-c613750f0e34} + + + {0791b62f-ef8d-40e2-b67e-a6d9dead8720} + @@ -51,6 +57,12 @@ Quelldateien + + Quelldateien\FFT + + + Quelldateien\FFT + @@ -77,6 +89,12 @@ Headerdateien\dywapitchtrack + + Headerdateien\FFT + + + Headerdateien\FFT + diff --git a/PitchTracker/performous/libda/sample.hpp b/PitchTracker/performous/libda/sample.hpp index a09bbcb6..da55bda7 100644 --- a/PitchTracker/performous/libda/sample.hpp +++ b/PitchTracker/performous/libda/sample.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include "../compatibility.h" /** * @file sample.hpp Sample format definition and format conversions. diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index 335bcde6..7936cad3 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -17,8 +17,13 @@ #include "ptAKF.h" #include +#ifdef USE_FFT +#include "FFT/FFT.h" +#endif + static constexpr double BaseToneFrequency = 65.4064; // lowest (half-)tone to analyze (C2 = 65.4064 Hz) static constexpr double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave) + int PtAKF::_InitCount = 0; float* restrict PtAKF::_SamplesPerPeriodPerTone = NULL; float* restrict PtAKF::_SamplesPerPeriodPerToneFine = NULL; @@ -41,9 +46,9 @@ PtAKF::PtAKF(unsigned step){ _SamplesPerPeriodPerToneFine[2 * toneIndex + 1] = static_cast(44100.0 / GetFrequencyFromTone(toneIndex + 1./3.)); // samples for a bit above exact frequency } _Window = new float[_SampleCt]; - double cosMult = 2. * M_PI / (_SampleCt - 1.); //To simplify and speed up + double cosMult = 2. * M_PI / (2 * _SampleCt - 1.); //To simplify and speed up; 2 * _SampleCt because we extend the data by a factor of 2 for (int i = 0; i < _SampleCt; i++) { - _Window[i] = static_cast(0.64 - 0.36 * cos(i * cosMult)); + _Window[i] = static_cast(0.54 - 0.46 * cos(i * cosMult)); } } _Step = step; @@ -149,12 +154,20 @@ int PtAKF::_GetNote(float samples[_SampleCt], float* restrict maxVolume, float w if(maxVolumeL < _VolTreshold) return -1; - float samplesWindowed[_SampleCt]; + float samplesWindowed[_SampleCt * 2]; for(int i = 0; i < _SampleCt; i++){ samplesWindowed[i] = samples[i] * _Window[i]; } +#ifdef USE_FFT + for(int i = _SampleCt; i < _SampleCt * 2; i++){ + samplesWindowed[i] = 0.f; + } + float samplesFFT[_SampleCt+1]; // +1 for middle value! + PowerSpectrum(_SampleCt*2, samplesWindowed, samplesFFT); + RealInverseRealFFT(_SampleCt*2, samplesFFT, _AKFValues); +#endif // Now analyze the samples and get peaks at the most appropriate tones //Attention: We have a peak at lag 0 that might stretch that far, that we detect a wrong "peak" at _MaxHalfTone @@ -163,6 +176,7 @@ int PtAKF::_GetNote(float samples[_SampleCt], float* restrict maxVolume, float w float lastWeight = 1.f; float maxWeight = 0.f; + //TODO: When using FFT this can be speed up a lot by only checking around the AKF peaks #pragma omp parallel for schedule(static) for (int toneIndex = 0; toneIndex <= _MaxHalfTone; toneIndex++){ float curWeight = _AnalyzeByTone(samples, samplesWindowed, toneIndex); @@ -307,6 +321,10 @@ float PtAKF::_AKFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD){ int samplesPerPeriod = static_cast(samplesPerPeriodD); float fHigh = samplesPerPeriodD - samplesPerPeriod; float fLow = 1.0f - fHigh; +#ifdef USE_FFT + float akf2 = _AKFValues[samplesPerPeriod] * fLow + _AKFValues[samplesPerPeriod+1] * fHigh; + return akf2 / (_SampleCt * _SampleCt); +#else float accumDist = 0; // accumulated distances @@ -322,10 +340,11 @@ float PtAKF::_AKFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD){ } return accumDist / _SampleCt; +#endif } float PtAKF::_AMDFByTone(float samples[_SampleCt], int toneIndex){ - return _AKFBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); + return _AMDFBySampleCt(samples, _SamplesPerPeriodPerTone[toneIndex]); } float PtAKF::_AMDFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD){ diff --git a/PitchTracker/ptAKF.h b/PitchTracker/ptAKF.h index b5d9a2b6..00f8aeb5 100644 --- a/PitchTracker/ptAKF.h +++ b/PitchTracker/ptAKF.h @@ -13,6 +13,8 @@ # endif #endif +#define USE_FFT + struct SPeak{ int toneIndex; float weight; @@ -55,14 +57,17 @@ private: float _LastMaxVol; int _LastTones[_SmoothCt]; int _LastToneIndex; +#ifdef USE_FFT + float _AKFValues[_SampleCt*2]; +#endif int _GetNote(float samples[_SampleCt], float* restrict maxVolume, float weights[_MaxHalfTone+1]); int _GetSmoothTone(); - static float _AnalyzeBySampleCt(float samples[_SampleCt], float samplesWindowed[_SampleCt], float samplesPerPeriodD); - static inline float _AnalyzeByTone(float samples[_SampleCt], float samplesWindowed[_SampleCt], int toneIndex); - static float _AKFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD); - static inline float _AKFByTone(float samples[_SampleCt], int toneIndex); + float _AnalyzeBySampleCt(float samples[_SampleCt], float samplesWindowed[_SampleCt], float samplesPerPeriodD); + inline float _AnalyzeByTone(float samples[_SampleCt], float samplesWindowed[_SampleCt], int toneIndex); + float _AKFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD); + inline float _AKFByTone(float samples[_SampleCt], int toneIndex); static float _AMDFBySampleCt(float samples[_SampleCt], float samplesPerPeriodD); static inline float _AMDFByTone(float samples[_SampleCt], int toneIndex); static inline void InitPeaks(SPeak peaks[_MaxPeaks]); From 1f9d9118b9e7e2841e35739deed1a9e6b64229ab Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 29 Apr 2014 21:12:19 +0200 Subject: [PATCH 089/116] Fix OutOfBounds access --- Vocaluxe/Screens/CScreenOptionsRecord.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index a0c072d6..d2c066d8 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -15,6 +15,7 @@ // along with Vocaluxe. If not, see . #endregion +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows.Forms; @@ -223,6 +224,7 @@ namespace Vocaluxe.Screens if (_CheckMicConfig()) { + Console.WriteLine(CRecord.GetMaxVolume(0)); int player = _SelectSlides[_SelectSlideRecordChannel1].Selection - 1; if (player >= 0) { @@ -238,7 +240,7 @@ namespace Vocaluxe.Screens player = _SelectSlides[_SelectSlideRecordChannel2].Selection - 1; if (player >= 0) { - _ChannelEnergy[1] = CRecord.GetMaxVolume(player - 1); + _ChannelEnergy[1] = CRecord.GetMaxVolume(player); _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); } else From 013c1dd1e1756c70fdf6af3d0bfc92234ea7b7b8 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 29 Apr 2014 21:13:41 +0200 Subject: [PATCH 090/116] Set LastMaxVol --- PitchTracker/ptAKF.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PitchTracker/ptAKF.cpp b/PitchTracker/ptAKF.cpp index 7936cad3..27251d72 100644 --- a/PitchTracker/ptAKF.cpp +++ b/PitchTracker/ptAKF.cpp @@ -76,7 +76,6 @@ void PtAKF::SetVolumeThreshold(float threshold){ int PtAKF::GetNote(float* restrict maxVolume, float* restrict weights){ float AnaylsisBuf[_SampleCt]; int note = _LastTones[_LastToneIndex]; - *maxVolume = _LastMaxVol * 0.85f; if(_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)){ do{ _AnalysisBuf.pop(_Step); @@ -86,6 +85,9 @@ int PtAKF::GetNote(float* restrict maxVolume, float* restrict weights){ _LastTones[_LastToneIndex] = note; }while(_AnalysisBuf.read(AnaylsisBuf, AnaylsisBuf + _SampleCt)); note = _GetSmoothTone(); + _LastMaxVol = *maxVolume; + }else{ + *maxVolume = _LastMaxVol * 0.85f; } return note; } From 0e2b9680729079e7b6b8ae51c72ee1231f28b72a Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 29 Apr 2014 21:23:24 +0200 Subject: [PATCH 091/116] Remove debug output --- Vocaluxe/Screens/CScreenOptionsRecord.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index d2c066d8..1a658fe5 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -15,7 +15,6 @@ // along with Vocaluxe. If not, see . #endregion -using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows.Forms; @@ -224,7 +223,6 @@ namespace Vocaluxe.Screens if (_CheckMicConfig()) { - Console.WriteLine(CRecord.GetMaxVolume(0)); int player = _SelectSlides[_SelectSlideRecordChannel1].Selection - 1; if (player >= 0) { From 6913a1f7b9bdc48403c7901b510e14940219612e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 29 Apr 2014 22:18:57 +0200 Subject: [PATCH 092/116] Add method to set and get volume thresholds --- Vocaluxe/Base/CRecord.cs | 10 ++++++++++ Vocaluxe/Lib/Sound/Record/CRecordBase.cs | 17 +++++++++++++++-- Vocaluxe/Lib/Sound/Record/IRecord.cs | 16 ++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs index 97b9bf16..43c8f099 100644 --- a/Vocaluxe/Base/CRecord.cs +++ b/Vocaluxe/Base/CRecord.cs @@ -96,6 +96,16 @@ namespace Vocaluxe.Base return _Record.GetMaxVolume(player); } + public static float GetVolumeThreshold(int player) + { + return _Record.GetVolumeThreshold(player); + } + + public static void SetVolumeThreshold(int player, float threshold) + { + _Record.SetVolumeThreshold(player, threshold); + } + public static int NumHalfTones(int player) { return _Record.NumHalfTones(); diff --git a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs index 5dd64987..62c67da7 100644 --- a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs +++ b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs @@ -5,7 +5,7 @@ using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record { /// - /// Base class to implement common functionality for Record classes + /// Base class to implement common functionality for Record classes /// abstract class CRecordBase { @@ -53,7 +53,7 @@ namespace Vocaluxe.Lib.Sound.Record } /// - /// Procedure to be called by descendent classes with data that got recorded + /// Procedure to be called by descendent classes with data that got recorded /// /// Device from which the data was recorded /// Recorded samples, assume Int16 and interleaved for multi-channels @@ -125,6 +125,19 @@ namespace Vocaluxe.Lib.Sound.Record return _Initialized ? _Buffer[player].MaxVolume : 0f; } + public float GetVolumeThreshold(int player) + { + return _Initialized ? _Buffer[player].VolTreshold : 0f; + } + + public void SetVolumeThreshold(int player, float threshold) + { + if (!_Initialized) + return; + + _Buffer[player].VolTreshold = threshold; + } + public bool ToneValid(int player) { return _Initialized && _Buffer[player].ToneValid; diff --git a/Vocaluxe/Lib/Sound/Record/IRecord.cs b/Vocaluxe/Lib/Sound/Record/IRecord.cs index 709a77df..7f020daa 100644 --- a/Vocaluxe/Lib/Sound/Record/IRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/IRecord.cs @@ -118,6 +118,22 @@ namespace Vocaluxe.Lib.Sound.Record /// Maximum volume between 0 and 1 float GetMaxVolume(int player); + /// + /// Gets the treshold for detecting silence + /// Value (0-1) for which everything below is considered silence + /// 0-based player index + /// Threshold + /// + float GetVolumeThreshold(int player); + + /// + /// Sets the treshold for detecting silence + /// Value (0-1) for which everything below is considered silence + /// 0-based player index + /// Threshold + /// + void SetVolumeThreshold(int player, float threshold); + /// /// Returns whether the current tone is valid. That includes, if maximum volume is higher than the threshold /// From c31050926d7930c3f2ad6ea5eeee510a9da5ed20 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 29 Apr 2014 22:19:12 +0200 Subject: [PATCH 093/116] Decrease threshold for delay test --- Vocaluxe/Lib/Sound/Record/CDelayTest.cs | 34 +++++++++++++++++-------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs index 91e1472f..27865727 100644 --- a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs +++ b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs @@ -15,6 +15,7 @@ // along with Vocaluxe. If not, see . #endregion +using System; using System.Diagnostics; using Vocaluxe.Base; @@ -26,6 +27,7 @@ namespace Vocaluxe.Lib.Sound.Record { public int Channel; public bool Finished; + public float OrigThreshold; } private const float _MaxDelayTime = 1000; @@ -51,24 +53,39 @@ namespace Vocaluxe.Lib.Sound.Record Reset(); for (int i = 0; i < _DelaysChannel.Length; i++) { - if (i < channels.Length) + if (i < channels.Length && channels[i] >= 0) { _DelaysChannel[i].Finished = false; _DelaysChannel[i].Channel = channels[i]; + _DelaysChannel[i].OrigThreshold = CRecord.GetVolumeThreshold(channels[i]); + CRecord.SetVolumeThreshold(channels[i], _DelaysChannel[i].OrigThreshold / 3); } else - _DelaysChannel[i].Finished = true; + _DelaysChannel[i].Channel = -1; } _Stream = CSound.PlaySound(ESounds.T440, false); Running = true; } + private void _Stop() + { + if (!Running) + return; + Running = false; + _Timer.Stop(); + _CloseStream(); + foreach (SDelayChannel delay in _DelaysChannel) + { + if (delay.Channel >= 0) + CRecord.SetVolumeThreshold(delay.Channel, delay.OrigThreshold); + } + } + public void Reset() { - Running = false; + _Stop(); for (int i = 0; i < _DelaysChannel.Length; i++) Delays[i] = 0; - _CloseStream(); } private void _CloseStream() @@ -99,21 +116,18 @@ namespace Vocaluxe.Lib.Sound.Record { if (_DelaysChannel[i].Channel < 0 || _DelaysChannel[i].Finished) continue; - if (CRecord.GetMaxVolume(_DelaysChannel[i].Channel) > 0.1f && CRecord.GetTone(_DelaysChannel[i].Channel) == 9) + if (CRecord.GetTone(_DelaysChannel[i].Channel) == 9) { Delays[i] = (int)_Timer.ElapsedMilliseconds; _DelaysChannel[i].Finished = true; } else isActive = true; + Console.WriteLine(CRecord.GetMaxVolume(_DelaysChannel[i].Channel)); } } if (!isActive) - { - Running = false; - _CloseStream(); - _Timer.Stop(); - } + _Stop(); } } } \ No newline at end of file From 63c681a0576cd3b8cb85d8bdb5299698ee49aee7 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 30 Apr 2014 22:35:31 +0200 Subject: [PATCH 094/116] Make webcam handling more stable (fix possible NPE) --- Vocaluxe/Base/CWebcam.cs | 44 ++-- Vocaluxe/Lib/Webcam/CAForgeNet.cs | 266 ++++++++++++++++-------- Vocaluxe/Lib/Webcam/IWebcam.cs | 16 +- Vocaluxe/Screens/CScreenOptionsVideo.cs | 68 +++--- Vocaluxe/Screens/CScreenProfiles.cs | 70 ++++--- Vocaluxe/Screens/CScreenSing.cs | 4 +- 6 files changed, 293 insertions(+), 175 deletions(-) diff --git a/Vocaluxe/Base/CWebcam.cs b/Vocaluxe/Base/CWebcam.cs index 0b7dcb46..af66025a 100644 --- a/Vocaluxe/Base/CWebcam.cs +++ b/Vocaluxe/Base/CWebcam.cs @@ -49,58 +49,70 @@ namespace Vocaluxe.Base return true; } + public static void Close() + { + if (_Webcam == null) + return; + _Webcam.Close(); + _Webcam = null; + } + public static bool GetFrame(ref CTexture tex) { - return _Webcam.GetFrame(ref tex); + return _Webcam != null && _Webcam.GetFrame(ref tex); } public static Bitmap GetBitmap() { - return _Webcam.GetBitmap(); - } - - public static void Close() - { - if (_Webcam != null) - { - _Webcam.Close(); - _Webcam = null; - } + return _Webcam == null ? null : _Webcam.GetBitmap(); } public static void Pause() { + if (_Webcam == null) + return; _Webcam.Pause(); } public static void Start() { + if (_Webcam == null) + return; _Webcam.Start(); } public static void Stop() { + if (_Webcam == null) + return; _Webcam.Stop(); } - public static void Select(SWebcamConfig c) + public static bool Select(SWebcamConfig c) { - _Webcam.Select(c); + return _Webcam != null && _Webcam.Select(c); + } + + public static void DeSelect() + { + if (_Webcam == null) + return; + _Webcam.DeSelect(); } public static SWebcamDevice[] GetDevices() { - return _Webcam.GetDevices(); + return _Webcam == null ? null : _Webcam.GetDevices(); } public static bool IsDeviceAvailable() { - return _Webcam.IsDeviceAvailable(); + return (_Webcam != null) && _Webcam.IsDeviceAvailable(); } public static bool IsCapturing() { - return _Webcam.IsCapturing(); + return (_Webcam != null) && _Webcam.IsCapturing(); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Webcam/CAForgeNet.cs b/Vocaluxe/Lib/Webcam/CAForgeNet.cs index c83b1d8c..13bc4d20 100644 --- a/Vocaluxe/Lib/Webcam/CAForgeNet.cs +++ b/Vocaluxe/Lib/Webcam/CAForgeNet.cs @@ -15,6 +15,7 @@ // along with Vocaluxe. If not, see . #endregion +using System; using AForge.Video; using AForge.Video.DirectShow; using System.Collections.Generic; @@ -31,60 +32,27 @@ namespace Vocaluxe.Lib.Webcam private readonly List _Devices = new List(); private bool _Paused; private VideoCaptureDevice _Webcam; - private FilterInfoCollection _WebcamDevices; private SWebcamConfig _Config; - private byte[] _Data = new byte[1]; + private byte[] _Data; private static readonly object _MutexData = new object(); private int _Width, _Height; - - public void Close() - { - if (_Webcam == null) - return; - _Webcam.SignalToStop(); - _Webcam.WaitForStop(); - _Webcam.NewFrame -= _OnFrame; - _Data = new byte[1]; - } - - public bool GetFrame(ref CTexture frame) - { - lock (_MutexData) - { - if (_Webcam != null && _Width > 0 && _Height > 0 && _Data.Length == _Width * _Height * 4) - CDraw.UpdateOrAddTexture(ref frame, _Width, _Height, _Data); - } - return false; - } - - public Bitmap GetBitmap() - { - if (_Webcam != null && _Width > 0 && _Height > 0 && _Data.Length == _Height * _Width * 4) - { - lock (_MutexData) - { - var bmp = new Bitmap(_Width, _Height); - BitmapData bitmapdata = bmp.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(_Data, 0, bitmapdata.Scan0, _Data.Length); - bmp.UnlockBits(bitmapdata); - return bmp; - } - } - return null; - } + private bool _NewFrameAvailable; + private bool _IsCapturing; public bool Init() { - _WebcamDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); - foreach (FilterInfo info in _WebcamDevices) + FilterInfoCollection webcams = new FilterInfoCollection(FilterCategory.VideoInputDevice); + foreach (FilterInfo info in webcams) { + var tmpdev = new VideoCaptureDevice(info.MonikerString); + if (tmpdev.VideoCapabilities.Length == 0) + continue; var device = new SWebcamDevice { Name = info.Name, MonikerString = info.MonikerString, - Capabilities = new List() + Capabilities = new List(tmpdev.VideoCapabilities.Length) }; - var tmpdev = new VideoCaptureDevice(info.MonikerString); foreach (VideoCapabilities capabilities in tmpdev.VideoCapabilities) { @@ -101,44 +69,188 @@ namespace Vocaluxe.Lib.Webcam return true; } - private void _OnFrame(object sender, NewFrameEventArgs e) + public void Close() { - if (_Paused) + DeSelect(); + _Devices.Clear(); + } + + public void DeSelect() + { + if (_Webcam == null) return; + _Webcam.Stop(); + _Webcam.NewFrame -= _OnFrame; + _IsCapturing = false; lock (_MutexData) { - if (_Width != e.Frame.Width || _Height != e.Frame.Height || _Data.Length != e.Frame.Width * e.Frame.Height * 4) - _Data = new byte[4 * e.Frame.Width * e.Frame.Height]; - - _Width = e.Frame.Width; - _Height = e.Frame.Height; - BitmapData bitmapdata = e.Frame.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(bitmapdata.Scan0, _Data, 0, _Data.Length); - e.Frame.UnlockBits(bitmapdata); + _Data = null; + _Webcam = null; } } - public void Pause() + #region ConfigSelection + private static float _GetScore(int value, int valueRequested) { - if (_Webcam != null) - _Paused = true; + if (valueRequested <= 0) + return 1; + return 1.0f - (float)Math.Abs(value - valueRequested) / Math.Max(value, valueRequested); + } + + private static VideoCapabilities _SelectWebcamConfig(VideoCapabilities[] capabilities, SWebcamConfig config) + { + int configTaken = 0; + if (config.Framerate != 0 && config.Height != 0 && config.Width != 0) + { + float bestMatchScore = 0; + for (int i = 0; i < capabilities.Length; i++) + { + float score = _GetScore(capabilities[i].AverageFrameRate, config.Framerate); + score += _GetScore(capabilities[i].FrameSize.Height, config.Height); + score += _GetScore(capabilities[i].FrameSize.Width, config.Width); + if (score >= bestMatchScore) + { + // Take the config with the best score, Higher indizes should indicate a better resolution + // so choose the last one with best score if 2 have equal scores + bestMatchScore = score; + configTaken = i; + } + } + } + + return capabilities[configTaken]; + } + #endregion + + public bool Select(SWebcamConfig config) + { + //Close old camera connection + DeSelect(); + + if (_Devices.Count < 1) + return false; + + string moniker = _Devices[0].MonikerString; + if (config.MonikerString != "") + { + foreach (SWebcamDevice device in _Devices) + { + if (device.MonikerString == config.MonikerString) + { + moniker = device.MonikerString; + break; + } + } + } + _Webcam = new VideoCaptureDevice(moniker); + + _Webcam.VideoResolution = _SelectWebcamConfig(_Webcam.VideoCapabilities, config); + + _Config.Framerate = _Webcam.VideoResolution.AverageFrameRate; + _Config.Height = _Webcam.VideoResolution.FrameSize.Height; + _Config.Width = _Webcam.VideoResolution.FrameSize.Width; + _Config.MonikerString = _Webcam.Source; + + return true; } public void Start() { if (_Webcam == null) return; - _Webcam.NewFrame -= _OnFrame; - //Subscribe to NewFrame event - _Webcam.NewFrame += _OnFrame; - _Webcam.Start(); - _Paused = false; + if (_IsCapturing) + { + if (_Paused) + { + _Webcam.NewFrame += _OnFrame; + _Paused = false; + } + } + else + { + //Subscribe to NewFrame event + _Webcam.NewFrame += _OnFrame; + _Paused = false; + _Webcam.Start(); + _IsCapturing = true; + } + } + + public void Pause() + { + if (_Webcam != null && !_Paused) + { + _Webcam.NewFrame -= _OnFrame; + lock (_MutexData) //Make sure all events are finished or not yet startet for consistency + { + _Paused = true; + } + } } public void Stop() { if (_Webcam != null) + { _Webcam.SignalToStop(); + _Webcam.NewFrame -= _OnFrame; + lock (_MutexData) //Make sure all events are finished or not yet startet for consistency + { + _IsCapturing = false; + } + } + } + + public bool GetFrame(ref CTexture frame) + { + lock (_MutexData) + { + if (_Data != null && _Data.Length == _Width * _Height * 4 && _NewFrameAvailable) + { + CDraw.UpdateOrAddTexture(ref frame, _Width, _Height, _Data); + _NewFrameAvailable = false; + return true; + } + return false; + } + } + + public Bitmap GetBitmap() + { + lock (_MutexData) + { + if (_Data != null && _Data.Length == _Width * _Height * 4) + { + var bmp = new Bitmap(_Width, _Height); + BitmapData bitmapdata = bmp.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); + Marshal.Copy(_Data, 0, bitmapdata.Scan0, _Data.Length); + bmp.UnlockBits(bitmapdata); + return bmp; + } + return null; + } + } + + private void _OnFrame(object sender, NewFrameEventArgs e) + { + if (_Paused) + return; + if (e.Frame.Width == 0 || e.Frame.Height == 0) + return; + lock (_MutexData) + { + if (!IsCapturing()) + return; + if (_Data == null || _Data.Length != e.Frame.Width * e.Frame.Height * 4) + _Data = new byte[e.Frame.Width * e.Frame.Height * 4]; + + _Width = e.Frame.Width; + _Height = e.Frame.Height; + BitmapData bitmapdata = e.Frame.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); + Marshal.Copy(bitmapdata.Scan0, _Data, 0, _Data.Length); + e.Frame.UnlockBits(bitmapdata); + _NewFrameAvailable = true; + } } public SWebcamDevice[] GetDevices() @@ -148,42 +260,12 @@ namespace Vocaluxe.Lib.Webcam public bool IsDeviceAvailable() { - return _Devices.Count > 0; + return _Webcam != null; } public bool IsCapturing() { - return _Webcam.IsRunning; - } - - public bool Select(SWebcamConfig config) - { - //Close old camera connection - Close(); - - if (_WebcamDevices == null) - return false; - if (_WebcamDevices.Count < 1) - return false; - - //No MonikerString found, try first webcam - _Webcam = config.MonikerString == "" ? new VideoCaptureDevice(_WebcamDevices[0].MonikerString) : new VideoCaptureDevice(config.MonikerString); - - if (_Webcam == null) - return false; - - if (config.Framerate != 0 && config.Height != 0 && config.Width != 0) - { - //_Webcam.DesiredFrameRate = config.Framerate; - //_Webcam.DesiredFrameSize = new Size(config.Width, config.Height); - } - - _Config.Framerate = _Webcam.SnapshotResolution.AverageFrameRate; - _Config.Height = _Webcam.SnapshotResolution.FrameSize.Height; - _Config.Width = _Webcam.SnapshotResolution.FrameSize.Width; - _Config.MonikerString = _Webcam.Source; - - return true; + return _IsCapturing && !_Paused; } public SWebcamConfig GetConfig() diff --git a/Vocaluxe/Lib/Webcam/IWebcam.cs b/Vocaluxe/Lib/Webcam/IWebcam.cs index aa108411..98ae1804 100644 --- a/Vocaluxe/Lib/Webcam/IWebcam.cs +++ b/Vocaluxe/Lib/Webcam/IWebcam.cs @@ -46,19 +46,33 @@ namespace Vocaluxe.Lib.Webcam interface IWebcam { bool Init(); + void Close(); void Start(); void Pause(); void Stop(); - void Close(); + /// + /// Gets last captured frame. Returns true if frame was updated
    + /// Note that this will invalidate the last frame and not return it again with this function + ///
    + /// + /// bool GetFrame(ref CTexture frame); + + /// + /// Gets the last captured frame as a bitma + /// + /// + /// Null if no frame was captured, the bitmap otherwise Bitmap GetBitmap(); + SWebcamConfig GetConfig(); SWebcamDevice[] GetDevices(); bool IsDeviceAvailable(); bool IsCapturing(); bool Select(SWebcamConfig webcamConfig); + void DeSelect(); } } \ No newline at end of file diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index d1b446c8..a4cd2268 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -154,8 +154,8 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - CWebcam.GetFrame(ref _WebcamTexture); - _Statics[_StaticWebcamOutput].Texture = _WebcamTexture; + if (CWebcam.GetFrame(ref _WebcamTexture)) + _Statics[_StaticWebcamOutput].Texture = _WebcamTexture; _SelectSlides[_SelectSlideVideosToBackground].Selection = (int)CConfig.VideosToBackground; return true; } @@ -170,7 +170,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CWebcam.Close(); + CWebcam.Stop(); } public override void OnShow() @@ -189,25 +189,20 @@ namespace Vocaluxe.Screens { if (devices != null && devices.Length > 0) { - _DeviceNr = 0; - _CapabilityNr = 0; - _GetFirstConfiguredWebcamDevice(ref _DeviceNr, ref _CapabilityNr); - foreach (SWebcamDevice d in devices) _SelectSlides[_SelectSlideWebcamDevices].AddValue(d.Name); - _SelectSlides[_SelectSlideWebcamDevices].Selection = _DeviceNr; - foreach (SCapabilities c in devices[_DeviceNr].Capabilities) - _SelectSlides[_SelectSlideWebcamCapabilities].AddValue(c.Width + " x " + c.Height + " @ " + c.Framerate + " FPS "); - _Config.MonikerString = devices[_SelectSlides[_SelectSlideWebcamDevices].Selection].MonikerString; - _Config.Width = devices[_SelectSlides[_SelectSlideWebcamDevices].Selection].Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Width; - _Config.Height = devices[_SelectSlides[_SelectSlideWebcamDevices].Selection].Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Height; - _Config.Framerate = - devices[_SelectSlides[_SelectSlideWebcamDevices].Selection].Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Framerate; - CWebcam.Close(); - CWebcam.Select(CConfig.WebcamConfig); - CWebcam.Start(); - ssVisible = true; + int devNr; + int capNr; + if (_GetFirstConfiguredWebcamDevice(out devNr, out capNr)) + { + _SelectSlides[_SelectSlideWebcamDevices].Selection = devNr; + _OnDeviceEvent(); + _SelectSlides[_SelectSlideWebcamCapabilities].Selection = capNr; + _OnCapabilitiesEvent(); + + ssVisible = true; + } } } catch (Exception e) @@ -239,7 +234,6 @@ namespace Vocaluxe.Screens { _SelectSlides[_SelectSlideWebcamCapabilities].Clear(); _DeviceNr = _SelectSlides[_SelectSlideWebcamDevices].Selection; - _CapabilityNr = 0; SWebcamDevice d = CWebcam.GetDevices()[_DeviceNr]; for (int i = 0; i < d.Capabilities.Count; i++) @@ -247,16 +241,8 @@ namespace Vocaluxe.Screens _SelectSlides[_SelectSlideWebcamCapabilities].AddValue(d.Capabilities[i].Width + " x " + d.Capabilities[i].Height + " @ " + d.Capabilities[i].Framerate + "FPS"); } - _SelectSlides[_SelectSlideWebcamCapabilities].Selection = 0; - - _Config.MonikerString = d.MonikerString; - _Config.Width = d.Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Width; - _Config.Height = d.Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Height; - _Config.Framerate = d.Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Framerate; - - CWebcam.Close(); - CWebcam.Select(_Config); - CWebcam.Start(); + _CapabilityNr = -1; + _OnCapabilitiesEvent(); } } @@ -266,24 +252,27 @@ namespace Vocaluxe.Screens { _CapabilityNr = _SelectSlides[_SelectSlideWebcamCapabilities].Selection; - SWebcamDevice d = CWebcam.GetDevices()[_SelectSlides[_SelectSlideWebcamDevices].Selection]; + SWebcamDevice d = CWebcam.GetDevices()[_DeviceNr]; _Config.MonikerString = d.MonikerString; - _Config.Width = d.Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Width; - _Config.Height = d.Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Height; - _Config.Framerate = d.Capabilities[_SelectSlides[_SelectSlideWebcamCapabilities].Selection].Framerate; + _Config.Width = d.Capabilities[_CapabilityNr].Width; + _Config.Height = d.Capabilities[_CapabilityNr].Height; + _Config.Framerate = d.Capabilities[_CapabilityNr].Framerate; - CWebcam.Close(); CWebcam.Select(_Config); CWebcam.Start(); } } - private void _GetFirstConfiguredWebcamDevice(ref int device, ref int capabilities) + private bool _GetFirstConfiguredWebcamDevice(out int device, out int capabilities) { SWebcamDevice[] devices = CWebcam.GetDevices(); if (devices == null) - return; + { + device = -1; + capabilities = -1; + return false; + } for (int i = 0; i < devices.Length; i++) { @@ -296,10 +285,13 @@ namespace Vocaluxe.Screens { device = i; capabilities = j; - return; + return true; } } } + device = 0; + capabilities = 0; + return true; } } } \ No newline at end of file diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index 106c3a04..2c29383d 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -141,13 +141,13 @@ namespace Vocaluxe.Screens } else if (_Buttons[_ButtonDelete].Selected) _DeleteProfile(); - else if (_Buttons[_ButtonWebcam].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonWebcam].Selected) _OnWebcam(); - else if (_Buttons[_ButtonSaveSnapshot].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonSaveSnapshot].Selected) _OnSaveSnapshot(); - else if (_Buttons[_ButtonDiscardSnapshot].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonDiscardSnapshot].Selected) _OnDiscardSnapshot(); - else if (_Buttons[_ButtonTakeSnapshot].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonTakeSnapshot].Selected) _OnTakeSnapshot(); break; @@ -235,13 +235,13 @@ namespace Vocaluxe.Screens CProfiles.SetActive(_SelectSlides[_SelectSlideProfiles].ValueIndex, (EOffOn)_SelectSlides[_SelectSlideActive].Selection); } - else if (_Buttons[_ButtonWebcam].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonWebcam].Selected) _OnWebcam(); - else if (_Buttons[_ButtonSaveSnapshot].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonSaveSnapshot].Selected) _OnSaveSnapshot(); - else if (_Buttons[_ButtonDiscardSnapshot].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonDiscardSnapshot].Selected) _OnDiscardSnapshot(); - else if (_Buttons[_ButtonTakeSnapshot].Selected && CWebcam.IsDeviceAvailable()) + else if (_Buttons[_ButtonTakeSnapshot].Selected) _OnTakeSnapshot(); } @@ -270,15 +270,16 @@ namespace Vocaluxe.Screens int avatarID = CProfiles.GetAvatarID(_SelectSlides[_SelectSlideProfiles].ValueIndex); _SelectSlides[_SelectSlideAvatars].SetSelectionByValueIndex(avatarID); - if (CWebcam.IsDeviceAvailable() && CWebcam.IsCapturing()) + if (_Snapshot == null) { - if (_Snapshot == null) - CWebcam.GetFrame(ref _WebcamTexture); - - _Statics[_StaticAvatar].Texture = _WebcamTexture; + if (CWebcam.IsCapturing()) + { + if (CWebcam.GetFrame(ref _WebcamTexture)) + _Statics[_StaticAvatar].Texture = _WebcamTexture; + } + else + _Statics[_StaticAvatar].Texture = CProfiles.GetAvatarTexture(avatarID); } - else - _Statics[_StaticAvatar].Texture = CProfiles.GetAvatarTexture(avatarID); } return true; @@ -310,22 +311,36 @@ namespace Vocaluxe.Screens private void _OnTakeSnapshot() { - _Buttons[_ButtonSaveSnapshot].Visible = true; - _Buttons[_ButtonDiscardSnapshot].Visible = true; - _Buttons[_ButtonWebcam].Visible = false; - _Buttons[_ButtonTakeSnapshot].Visible = false; - _Snapshot = CWebcam.GetBitmap(); + if (!CWebcam.IsDeviceAvailable()) + { + CDraw.RemoveTexture(ref _WebcamTexture); + _Snapshot = null; + _Buttons[_ButtonSaveSnapshot].Visible = false; + _Buttons[_ButtonDiscardSnapshot].Visible = false; + _Buttons[_ButtonTakeSnapshot].Visible = false; + _Buttons[_ButtonWebcam].Visible = false; + } + else + { + CWebcam.Stop(); //Do this first to get consistent frame and bitmap + _Snapshot = CWebcam.GetBitmap(); + if (CWebcam.GetFrame(ref _WebcamTexture)) + _Statics[_StaticAvatar].Texture = _WebcamTexture; + _Buttons[_ButtonSaveSnapshot].Visible = true; + _Buttons[_ButtonDiscardSnapshot].Visible = true; + _Buttons[_ButtonTakeSnapshot].Visible = false; + _Buttons[_ButtonWebcam].Visible = false; + } } private void _OnDiscardSnapshot() { - CWebcam.Stop(); - CDraw.RemoveTexture(ref _WebcamTexture); _Snapshot = null; + CDraw.RemoveTexture(ref _WebcamTexture); _Buttons[_ButtonSaveSnapshot].Visible = false; _Buttons[_ButtonDiscardSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = false; - _Buttons[_ButtonWebcam].Visible = true; + _Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable(); } private void _OnSaveSnapshot() @@ -339,13 +354,12 @@ namespace Vocaluxe.Screens _Snapshot.Save(filename, ImageFormat.Png); _Snapshot = null; - CWebcam.Stop(); CDraw.RemoveTexture(ref _WebcamTexture); _Buttons[_ButtonSaveSnapshot].Visible = false; _Buttons[_ButtonDiscardSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = false; - _Buttons[_ButtonWebcam].Visible = true; + _Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable(); int id = CProfiles.NewAvatar(filename); CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex, id); @@ -354,9 +368,13 @@ namespace Vocaluxe.Screens private void _OnWebcam() { + if (!CWebcam.IsDeviceAvailable()) + { + _Buttons[_ButtonWebcam].Visible = false; + return; + } _Snapshot = null; CWebcam.Start(); - CWebcam.GetFrame(ref _WebcamTexture); _Buttons[_ButtonSaveSnapshot].Visible = false; _Buttons[_ButtonDiscardSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = true; diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 32e0442e..c7956c9c 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -235,7 +235,7 @@ namespace Vocaluxe.Screens case Keys.W: if (CWebcam.IsDeviceAvailable()) { - _Webcam = !_Webcam; + _Webcam = !CWebcam.IsCapturing(); if (_Webcam) CWebcam.Start(); else @@ -756,7 +756,7 @@ namespace Vocaluxe.Screens CParty.FinishedSinging(); if (_Webcam) - CWebcam.Close(); + CWebcam.Stop(); } private int _FindCurrentLine(CVoice voice, CSongLine[] lines, CSong song) From 3bfc789b36083d9344fe53beec77aa958aae45c3 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 30 Apr 2014 22:41:50 +0200 Subject: [PATCH 095/116] Make TR strings consistent and change caption for web cam resolutions --- Output/Languages/Czech.xml | 6 +++--- Output/Languages/Dutch.xml | 6 +++--- Output/Languages/English.xml | 6 +++--- Output/Languages/French.xml | 6 +++--- Output/Languages/German.xml | 6 +++--- Output/Languages/Hungarian.xml | 6 +++--- Output/Languages/Spanish.xml | 2 +- Output/Languages/Swedish.xml | 6 +++--- Output/Languages/Turkish.xml | 6 +++--- Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml | 6 +++--- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Output/Languages/Czech.xml b/Output/Languages/Czech.xml index 918fe778..d4895f48 100644 --- a/Output/Languages/Czech.xml +++ b/Output/Languages/Czech.xml @@ -205,9 +205,9 @@ Pozadí obrazu Náhled obrazu Obrazové záznamy během přehrávání - Zobrazit nynější obrazový záznam k hudbě na pozadí - Kamery - Schopnosti kamer + Zobrazit nynější obrazový záznam k hudbě na pozadí + Kamery + Schopnosti kamer Přizpůsobení obrazovky Stiskněte Ctrl + Alt + Shift + šipky pro upravení obrazovky Ctrl + Alt + Shift + 0 pro vrácení úprav zpět na výchozí hodnoty diff --git a/Output/Languages/Dutch.xml b/Output/Languages/Dutch.xml index a50c8be9..8d959590 100644 --- a/Output/Languages/Dutch.xml +++ b/Output/Languages/Dutch.xml @@ -199,8 +199,8 @@ Videoachtergronden Videopreview Video tijdens zingen - Toon huidige achtergrondmuziekvideo - Webcams - Webcaminstellingen + Toon huidige achtergrondmuziekvideo + Webcams + Webcaminstellingen Volume diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index ea889529..b7360541 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -205,9 +205,9 @@ Video Backgrounds Video Preview Videos while singing - Display current backgroundmusic video - Webcams - Webcamcapabilities + Display current backgroundmusic video + Webcams + Webcam-Resolution Screen adjustments Press CTR + ALT + SHIFT + Arrows to adjust screen CTR + ALT + SHIFT + 0 to reset diff --git a/Output/Languages/French.xml b/Output/Languages/French.xml index ceab4219..5873c73b 100644 --- a/Output/Languages/French.xml +++ b/Output/Languages/French.xml @@ -205,9 +205,9 @@ Vidéo en arrière plan Prévisualisation des Vidéos Vidéos pendant que l\'on chante - Afficher la vidéo de la musique de fond - Webcams - Configuration Webcam + Afficher la vidéo de la musique de fond + Webcams + Configuration Webcam Ajustements de l\'écran Appuyer sur CTR + ALT + SHIFT + Flèches pour ajuster l\'écran CTR + ALT + SHIFT + 0 pour réinitialiser diff --git a/Output/Languages/German.xml b/Output/Languages/German.xml index 3025f8e1..52859778 100644 --- a/Output/Languages/German.xml +++ b/Output/Languages/German.xml @@ -206,9 +206,9 @@ Video-Hintergründe Video-Vorschau Videos während des Singens - Videos der Hintergrundmusik - Webcams - Webcamfähigkeiten + Videos der Hintergrundmusik + Webcams + Webcam-Auflösung Anzeigeanpassungen STRG + ALT + SHIFT + Pfeiltasten drücken um den Bildschirm anzupassen STRG + ALT + SHIFT + 0 um die Anpassungen zurückzusetzen diff --git a/Output/Languages/Hungarian.xml b/Output/Languages/Hungarian.xml index 2be6681a..3756f68e 100644 --- a/Output/Languages/Hungarian.xml +++ b/Output/Languages/Hungarian.xml @@ -190,8 +190,8 @@ Animált Háttér Videó Előnézet Videó Éneklés Közben - Jelenlegi Háttérzene Videó Mutatása - Webkamerák - Webkamera Tulajdonságok + Jelenlegi Háttérzene Videó Mutatása + Webkamerák + Webkamera Tulajdonságok Hangerő diff --git a/Output/Languages/Spanish.xml b/Output/Languages/Spanish.xml index 7e3b28c2..558e20bc 100644 --- a/Output/Languages/Spanish.xml +++ b/Output/Languages/Spanish.xml @@ -173,5 +173,5 @@ Videos de Fondo Previsualización del Video Videos al Cantar - TODO: Display current backgroundmusic video + TODO: Display current backgroundmusic video diff --git a/Output/Languages/Swedish.xml b/Output/Languages/Swedish.xml index 9d4068f9..aae0a1a7 100644 --- a/Output/Languages/Swedish.xml +++ b/Output/Languages/Swedish.xml @@ -205,9 +205,9 @@ Video Bakgrund Video Förhandsvisning Video Samtidigt Med Låt - Visa nuvarande Video för Bakgrundsmusik - Webkameror - Webkamera Kapacitet + Visa nuvarande Video för Bakgrundsmusik + Webkameror + Webkamera Kapacitet Skärmjusteringar Tryck CTRL + ALT +SHIFT + Pilar för att justera skärmen CTRL + ALT + SHIFT + 0 för att återställa diff --git a/Output/Languages/Turkish.xml b/Output/Languages/Turkish.xml index 6268cd7f..dff41110 100644 --- a/Output/Languages/Turkish.xml +++ b/Output/Languages/Turkish.xml @@ -190,8 +190,8 @@ Video Arka Planları Video Önizleme Şarkı Söylerken Videoları Gösterme - Mevcut Arka Plan Müziği Videosunu Göster - Web Kameraları - Web Kameraları Özellikleri + Mevcut Arka Plan Müziği Videosunu Göster + Web Kameraları + Web Kameraları Özellikleri Ses diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml index e7e928c0..e8a60c00 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml @@ -233,7 +233,7 @@ Outline - TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND + TR_SCREENOVIDEO_VIDEOSTOBACKGROUND @@ -262,7 +262,7 @@ Outline - TR_SCREENO_VIDEO_WEBCAMDEVICES + TR_SCREENOVIDEO_WEBCAMDEVICES @@ -291,7 +291,7 @@ Outline - TR_SCREENO_VIDEO_WEBCAMCAPABILITIES + TR_SCREENOVIDEO_WEBCAMRESOLUTION From 6e4ccb39c0a788723fe649089b67ab293990f317 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 30 Apr 2014 22:48:44 +0200 Subject: [PATCH 096/116] Hide webcam labels if none available --- Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml | 10 +++++----- .../Themes/Changelog/Changelog_ScreenOptionsVideo.txt | 6 +++++- Vocaluxe/Screens/CScreenOptionsVideo.cs | 8 +++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml index e8a60c00..cabb55d9 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml @@ -1,7 +1,7 @@  - 4 + 5 Video @@ -238,7 +238,7 @@ - + 75 347 @@ -266,8 +266,8 @@ - - + + 75 407 @@ -295,7 +295,7 @@ - + Button diff --git a/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt b/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt index dea01208..9e8d37df 100644 --- a/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt +++ b/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt @@ -1,4 +1,8 @@ -ScreenOptionsTheme +++++++++++ +Version 5: + +Rename: +Text5/6 to TextWebcam/TextWebcamResolution ++++++++++ Version 4: diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index a4cd2268..a2bf330d 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -30,7 +30,7 @@ namespace Vocaluxe.Screens // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion { - get { return 4; } + get { return 5; } } private const string _SelectSlideVideoBackgrounds = "SelectSlideVideoBackgrounds"; @@ -45,6 +45,9 @@ namespace Vocaluxe.Screens private const string _ButtonScreenAdjustments = "ButtonScreenAdjustments"; private const string _ButtonExit = "ButtonExit"; + private const string _TextWebcams = "TextWebcams"; + private const string _TextWebcamResolution = "TextWebcamResolution"; + private SWebcamConfig _Config; private CTexture _WebcamTexture; private int _DeviceNr; @@ -61,6 +64,7 @@ namespace Vocaluxe.Screens _SelectSlideVideoBackgrounds, _SelectSlideVideoPreview, _SelectSlideVideosInSongs, _SelectSlideVideosToBackground, _SelectSlideWebcamDevices, _SelectSlideWebcamCapabilities }; + _ThemeTexts = new string[] {_TextWebcams, _TextWebcamResolution}; } public override void LoadTheme(string xmlPath) @@ -213,6 +217,8 @@ namespace Vocaluxe.Screens _SelectSlides[_SelectSlideWebcamDevices].Visible = ssVisible; _SelectSlides[_SelectSlideWebcamCapabilities].Visible = ssVisible; _Statics[_StaticWebcamOutput].Visible = ssVisible; + _Texts[_TextWebcams].Visible = ssVisible; + _Texts[_TextWebcamResolution].Visible = ssVisible; } private void _SaveConfig() From a46681c22b5debf55727f00b15d30536c80ef162 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 1 May 2014 00:15:21 +0200 Subject: [PATCH 097/116] Improve CRingBuffer --- Vocaluxe/Lib/Sound/Playback/IPlayback.cs | 78 ++++++++++----- .../Sound/Playback/OpenAL/COpenAlStream.cs | 4 +- .../Playback/PortAudio/CPortAudioStream.cs | 98 +++++++------------ Vocaluxe/Lib/Sound/Record/CDelayTest.cs | 18 +--- 4 files changed, 93 insertions(+), 105 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs index 47fd10a9..23a5275e 100644 --- a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs +++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs @@ -15,6 +15,8 @@ // along with Vocaluxe. If not, see . #endregion +using System; + namespace Vocaluxe.Lib.Sound.Playback { public enum EStreamAction @@ -77,53 +79,75 @@ namespace Vocaluxe.Lib.Sound.Playback class CRingBuffer { private readonly byte[] _Data; - private readonly long _Size; - private long _ReadPos; - private long _WritePos; - private long _BytesNotRead; + private readonly int _Size; + private int _ReadPos; + private int _WritePos; + private int _BytesNotRead; - public long BytesNotRead + public int BytesNotRead { get { return _BytesNotRead; } } - public CRingBuffer(long size) + public CRingBuffer(int size) { _Size = size; _Data = new byte[size]; - _ReadPos = 0L; - _WritePos = 0L; - _BytesNotRead = 0L; + Reset(); + } + + public void Reset() + { + _ReadPos = 0; + _WritePos = 0; + _BytesNotRead = 0; } public void Write(byte[] data) { - long written = 0L; - while (written < data.Length) + int start = 0; + int end = data.Length; + if (end - start > _Size) + start = end - _Size; + int lenTotal = end - start; + int len = Math.Min(lenTotal, _Size - _WritePos); + Buffer.BlockCopy(data, start, _Data, _WritePos, len); + _WritePos += len; + if (_WritePos >= _Size) { - _Data[_WritePos] = data[written]; - _WritePos++; - if (_WritePos >= _Size) - _WritePos = 0L; - - written++; - _BytesNotRead++; + _WritePos = 0; + start += len; + len = end - start; + if (len > 0) + { + Buffer.BlockCopy(data, start, _Data, _WritePos, len); + _WritePos += len; + } } + _BytesNotRead += lenTotal; } public void Read(byte[] data) { - long read = 0L; - while (read < data.Length && _BytesNotRead > 0L) - { - data[read] = _Data[_ReadPos]; - _ReadPos++; - if (_ReadPos >= _Size) - _ReadPos = 0L; + int lenTotal = Math.Min(data.Length, _BytesNotRead); + if (lenTotal == 0) + return; - read++; - _BytesNotRead--; + int len = Math.Min(lenTotal, _Size - _ReadPos); + Buffer.BlockCopy(_Data, _ReadPos, data, 0, len); + _ReadPos += len; + if (_ReadPos >= _Size) + { + _ReadPos = 0; + int start = len; + len = lenTotal - len; + if (len > 0) + { + Buffer.BlockCopy(_Data, _ReadPos, data, start, len); + _ReadPos += len; + } } + _BytesNotRead -= lenTotal; } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs index 3297e49e..ec5bdefa 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -30,7 +30,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { private const int _BufferSize = 2048; private const int _BufferCount = 5; - private const long _Bufsize = 50000L; + private const int _Bufsize = 50000; private Object _CloseMutex; @@ -288,7 +288,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL lock (_MutexData) { - _Data = new CRingBuffer(_Bufsize); + _Data.Reset(); _NoMoreData = false; } } diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 0da436cc..1042e0f8 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -27,8 +27,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { class CPortAudioStream : IDisposable { - private const long _Bufsize = 1000000L; - private const long _Beginrefill = 800000L; + private const int _Bufsize = 1000000; + private const int _Beginrefill = 800000; public readonly int ID; private readonly Closeproc _Closeproc; @@ -53,22 +53,21 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private bool _FileOpened; - private bool _Waiting; private bool _Skip; private bool _Loop; private float _Duration; private float _CurrentTime; - private float _TimeCode; + private volatile float _TimeCode; - private bool _Paused; + private volatile bool _Paused; private CRingBuffer _Data; - private float _SetStart; + private volatile float _SetStart; private float _Start; - private bool _SetLoop; - private bool _SetSkip; - private bool _Terminated; + private volatile bool _SetLoop; + private volatile bool _SetSkip; + private volatile bool _Terminated; private Thread _DecoderThread; @@ -114,7 +113,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { lock (_LockData) { - return _NoMoreData && _Data.BytesNotRead == 0L && _SyncTimer.Time >= _Duration; + return _NoMoreData && _Data.BytesNotRead == 0 && _SyncTimer.Time >= _Duration; } } } @@ -124,11 +123,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio get { return _Volume * 100f; } set { - lock (_LockData) - { - value.Clamp(0f, 100f); - _Volume = value / 100f; - } + value.Clamp(0f, 100f); + _Volume = value / 100f; } } @@ -137,11 +133,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio get { return _VolumeMax * 100f; } set { - lock (_LockData) - { - value.Clamp(0f, 100f); - _VolumeMax = value / 100f; - } + value.Clamp(0f, 100f); + _VolumeMax = value / 100f; } } @@ -153,8 +146,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { if (Finished) _SyncTimer.Pause(); - //TODO: Why not use Decoder.GetPosition()? - //Decoder may return wrong timestamps. If you change this to exessive testing for monoton timestamps espacially for ogg files + //Decoder may return wrong timestamps. If you change this do exessive testing for monoton timestamps espacially for ogg files return _SyncTimer.Time; } } @@ -273,6 +265,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _ByteCount = 2 * format.ChannelCount; _BytesPerSecond = format.SamplesPerSecond * _ByteCount; _CurrentTime = 0f; + _SyncTimer.Pause(); _SyncTimer.Time = _CurrentTime; PortAudioSharp.PortAudio.PaStreamParameters? outputParams = new PortAudioSharp.PortAudio.PaStreamParameters @@ -303,7 +296,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio //From now on closing the driver and the decoder is handled by the thread ONLY! _Paused = true; - _Waiting = true; _FileOpened = true; _Data = new CRingBuffer(_Bufsize); _NoMoreData = false; @@ -319,7 +311,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { _SetStart = time; _SetSkip = true; - _Waiting = true; + _EventDecode.Set(); } } @@ -331,10 +323,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _Decoder.SetPosition(_Start); _CurrentTime = _Start; _TimeCode = _Start; - _Data = new CRingBuffer(_Bufsize); + _Data.Reset(); _NoMoreData = false; - _EventDecode.Set(); - _Waiting = false; _SyncTimer.Time = _Start; } } @@ -343,35 +333,27 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { while (!_Terminated) { - if (_EventDecode.WaitOne(10)) + lock (_LockSyncSignals) { - lock (_LockSyncSignals) + if (_SetSkip) { - if (_SetSkip) - { - _Skip = true; - _EventDecode.Set(); - _Waiting = true; - } - + _Skip = true; _SetSkip = false; - - _Start = _SetStart; - _Loop = _SetLoop; } - if (_Skip) - { - _DoSkip(); - _Skip = false; - } - - if (!_Waiting) - { - _DoDecode(); - _Update(); - } + _Start = _SetStart; + _Loop = _SetLoop; } + + if (_Skip) + { + _DoSkip(); + _Skip = false; + } + + _DoDecode(); + _Update(); + _EventDecode.WaitOne(); } _DoFree(); @@ -422,12 +404,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _Data.Write(buffer); _TimeCode = timecode; if (_Data.BytesNotRead < _Beginrefill) - { - _Waiting = false; _EventDecode.Set(); - } - else - _Waiting = true; } } @@ -458,7 +435,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { try { - Marshal.Copy(buf, 0, output, (int)frameCount * _ByteCount); + Marshal.Copy(buf, 0, output, buf.Length); } catch (Exception e) { @@ -482,13 +459,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } } - if (_Data.BytesNotRead < _Beginrefill) - { + if (_Data.BytesNotRead < _Beginrefill && !_NoMoreData) _EventDecode.Set(); - _Waiting = false; - } - else - _Waiting = true; float latency = buf.Length / _BytesPerSecond + CConfig.AudioLatency / 1000f; float time = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; @@ -503,7 +475,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } catch (Exception e) { - CLog.LogError("Error PortAudio.treamCallback: " + e.Message); + CLog.LogError("Error PortAudio.StreamCallback: " + e.Message); } return PortAudioSharp.PortAudio.PaStreamCallbackResult.paContinue; diff --git a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs index 27865727..456885d9 100644 --- a/Vocaluxe/Lib/Sound/Record/CDelayTest.cs +++ b/Vocaluxe/Lib/Sound/Record/CDelayTest.cs @@ -15,8 +15,6 @@ // along with Vocaluxe. If not, see . #endregion -using System; -using System.Diagnostics; using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record @@ -32,7 +30,6 @@ namespace Vocaluxe.Lib.Sound.Record private const float _MaxDelayTime = 1000; public bool Running { get; private set; } - private readonly Stopwatch _Timer = new Stopwatch(); private int _Stream = -1; private readonly SDelayChannel[] _DelaysChannel; @@ -72,7 +69,6 @@ namespace Vocaluxe.Lib.Sound.Record if (!Running) return; Running = false; - _Timer.Stop(); _CloseStream(); foreach (SDelayChannel delay in _DelaysChannel) { @@ -101,16 +97,13 @@ namespace Vocaluxe.Lib.Sound.Record { if (!Running) return; - if (!_Timer.IsRunning) - { - if (CSound.GetPosition(_Stream) > 0f) - _Timer.Restart(); - } - if (!_Timer.IsRunning) + + float time = CSound.GetPosition(_Stream) * 1000f; + if (time <= 0f) return; bool isActive = false; - if (_Timer.ElapsedMilliseconds <= _MaxDelayTime) + if (time <= _MaxDelayTime) { for (int i = 0; i < _DelaysChannel.Length; i++) { @@ -118,12 +111,11 @@ namespace Vocaluxe.Lib.Sound.Record continue; if (CRecord.GetTone(_DelaysChannel[i].Channel) == 9) { - Delays[i] = (int)_Timer.ElapsedMilliseconds; + Delays[i] = (int)time; _DelaysChannel[i].Finished = true; } else isActive = true; - Console.WriteLine(CRecord.GetMaxVolume(_DelaysChannel[i].Channel)); } } if (!isActive) From 2e209e0f706108ed34e84d3e2a0116badc704e87 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Thu, 1 May 2014 00:15:47 +0200 Subject: [PATCH 098/116] Extract CRingBuffer --- Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs | 79 ++++++++++++++++++++++ Vocaluxe/Lib/Sound/Playback/IPlayback.cs | 77 --------------------- Vocaluxe/Vocaluxe.csproj | 1 + 3 files changed, 80 insertions(+), 77 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs diff --git a/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs b/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs new file mode 100644 index 00000000..73d0ebe3 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs @@ -0,0 +1,79 @@ +using System; + +namespace Vocaluxe.Lib.Sound.Playback +{ + class CRingBuffer + { + private readonly byte[] _Data; + private readonly int _Size; + private int _ReadPos; + private int _WritePos; + private int _BytesNotRead; + + public int BytesNotRead + { + get { return _BytesNotRead; } + } + + public CRingBuffer(int size) + { + _Size = size; + _Data = new byte[size]; + Reset(); + } + + public void Reset() + { + _ReadPos = 0; + _WritePos = 0; + _BytesNotRead = 0; + } + + public void Write(byte[] data) + { + int start = 0; + int end = data.Length; + if (end - start > _Size) + start = end - _Size; + int lenTotal = end - start; + int len = Math.Min(lenTotal, _Size - _WritePos); + Buffer.BlockCopy(data, start, _Data, _WritePos, len); + _WritePos += len; + if (_WritePos >= _Size) + { + _WritePos = 0; + start += len; + len = end - start; + if (len > 0) + { + Buffer.BlockCopy(data, start, _Data, _WritePos, len); + _WritePos += len; + } + } + _BytesNotRead += lenTotal; + } + + public void Read(byte[] data) + { + int lenTotal = Math.Min(data.Length, _BytesNotRead); + if (lenTotal == 0) + return; + + int len = Math.Min(lenTotal, _Size - _ReadPos); + Buffer.BlockCopy(_Data, _ReadPos, data, 0, len); + _ReadPos += len; + if (_ReadPos >= _Size) + { + _ReadPos = 0; + int start = len; + len = lenTotal - len; + if (len > 0) + { + Buffer.BlockCopy(_Data, _ReadPos, data, start, len); + _ReadPos += len; + } + } + _BytesNotRead -= lenTotal; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs index 23a5275e..b4a13057 100644 --- a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs +++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs @@ -15,8 +15,6 @@ // along with Vocaluxe. If not, see . #endregion -using System; - namespace Vocaluxe.Lib.Sound.Playback { public enum EStreamAction @@ -75,79 +73,4 @@ namespace Vocaluxe.Lib.Sound.Playback void Update(); #endregion Stream Handling } - - class CRingBuffer - { - private readonly byte[] _Data; - private readonly int _Size; - private int _ReadPos; - private int _WritePos; - private int _BytesNotRead; - - public int BytesNotRead - { - get { return _BytesNotRead; } - } - - public CRingBuffer(int size) - { - _Size = size; - _Data = new byte[size]; - Reset(); - } - - public void Reset() - { - _ReadPos = 0; - _WritePos = 0; - _BytesNotRead = 0; - } - - public void Write(byte[] data) - { - int start = 0; - int end = data.Length; - if (end - start > _Size) - start = end - _Size; - int lenTotal = end - start; - int len = Math.Min(lenTotal, _Size - _WritePos); - Buffer.BlockCopy(data, start, _Data, _WritePos, len); - _WritePos += len; - if (_WritePos >= _Size) - { - _WritePos = 0; - start += len; - len = end - start; - if (len > 0) - { - Buffer.BlockCopy(data, start, _Data, _WritePos, len); - _WritePos += len; - } - } - _BytesNotRead += lenTotal; - } - - public void Read(byte[] data) - { - int lenTotal = Math.Min(data.Length, _BytesNotRead); - if (lenTotal == 0) - return; - - int len = Math.Min(lenTotal, _Size - _ReadPos); - Buffer.BlockCopy(_Data, _ReadPos, data, 0, len); - _ReadPos += len; - if (_ReadPos >= _Size) - { - _ReadPos = 0; - int start = len; - len = lenTotal - len; - if (len > 0) - { - Buffer.BlockCopy(_Data, _ReadPos, data, start, len); - _ReadPos += len; - } - } - _BytesNotRead -= lenTotal; - } - } } \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index f43e6307..eea26470 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -219,6 +219,7 @@ + From 9d40020756424ba966d6bd0d8e933aede264b4ee Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 2 May 2014 17:18:47 +0200 Subject: [PATCH 099/116] Fix wrong latency value with PA --- Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 1042e0f8..62123b1f 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -49,6 +49,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _PaStreamCallback; private IAudioDecoder _Decoder; private float _BytesPerSecond; + private float _Latency; private bool _NoMoreData; private bool _FileOpened; @@ -293,6 +294,8 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio return false; } + _Latency = CConfig.AudioLatency / 1000f + (float)PortAudioSharp.PortAudio.Pa_GetStreamInfo(_Stream).outputLatency; + //From now on closing the driver and the decoder is handled by the thread ONLY! _Paused = true; @@ -462,7 +465,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio if (_Data.BytesNotRead < _Beginrefill && !_NoMoreData) _EventDecode.Set(); - float latency = buf.Length / _BytesPerSecond + CConfig.AudioLatency / 1000f; + float latency = buf.Length / _BytesPerSecond + _Latency; float time = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; if (!_NoMoreData) From 0692fe3c9ba066e29d131a991df1d4ec7a112775 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 2 May 2014 17:30:34 +0200 Subject: [PATCH 100/116] Make equalizers show something --- VocaluxeLib/Menu/CEqualizer.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index 58680d90..83bb74c0 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -218,14 +218,18 @@ namespace VocaluxeLib.Menu if (weights == null || weights.Length == 0 || _Bars == null) return; if (volume < 0.001) + { + for (int i = 0; i < _Bars.Length; i++) + _Bars[i] = 0f; return; + } if (volume > _MaxVolume) _MaxVolume = volume; _MaxBar = 0; float maxVal = -99f; for (int i = 0; i < _Bars.Length; i++) { - if (weights.Length > i) + if (i < weights.Length) { if (_Theme.DrawNegative == EOffOn.TR_CONFIG_OFF && weights[i] < 0) _Bars[i] = 0f; @@ -261,10 +265,12 @@ namespace VocaluxeLib.Menu return; float dx = Rect.W / _Bars.Length; + float scaleVal = (_Bars[_MaxBar] < 0.00001f) ? 0f : 1 / _Bars[_MaxBar]; for (int i = 0; i < _Bars.Length; i++) { - var bar = new SRectF(Rect.X + dx * i, Rect.Y + Rect.H - _Bars[i] * Rect.H, dx - Space, _Bars[i] * Rect.H, Rect.Z); + float value = _Bars[i] * scaleVal; + var bar = new SRectF(Rect.X + dx * i, Rect.Y + Rect.H - value * Rect.H, dx - Space, value * Rect.H, Rect.Z); SColorF color = Color; if (i == _MaxBar) color = MaxColor; From a4b1c3eb865cc97c27807b6fb7b1bf67fa803991 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 5 May 2014 02:09:37 +0200 Subject: [PATCH 101/116] Unify playback libs with common base class Remove duplicate code Fix bugs in implementations (threading, logic) Remove SetStreamVolumeMax and use SetGlobalVolume instead --- GstreamerHelper/GstreamerAudio.cpp | 27 +- GstreamerHelper/GstreamerAudio.h | 2 +- .../CPartyScreenTicTacToeMain.cs | 12 +- Vocaluxe/Base/CBackgroundMusic.cs | 12 +- Vocaluxe/Base/CConfig.cs | 35 +- Vocaluxe/Base/CGraphics.cs | 14 +- Vocaluxe/Base/CMain.cs | 7 +- Vocaluxe/Base/CSound.cs | 20 +- .../Lib/Sound/Playback/CAudioStreamBase.cs | 120 +++++ Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs | 308 ++++++++++++ Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs | 19 +- .../Playback/Decoder/CAudioDecoderFFmpeg.cs | 16 +- .../Sound/Playback/Decoder/IAudioDecoder.cs | 3 +- .../Playback/Gstreamer/CGstreamerAudio.cs | 68 ++- .../Gstreamer/CGstreamerAudioWrapper.cs | 10 +- .../GstreamerSharp/CGstreamerSharpAudio.cs | 178 +------ .../CGstreamerSharpAudioStream.cs | 365 +++++++------- Vocaluxe/Lib/Sound/Playback/IAudioStream.cs | 48 ++ Vocaluxe/Lib/Sound/Playback/IPlayback.cs | 61 ++- .../Lib/Sound/Playback/OpenAL/COpenALPlay.cs | 333 +------------ .../Sound/Playback/OpenAL/COpenAlStream.cs | 446 +++++++----------- .../Playback/PortAudio/CPortAudioPlay.cs | 316 +------------ .../Playback/PortAudio/CPortAudioStream.cs | 364 +++++--------- .../Sound/Playback/PortAudio/CSyncTimer.cs | 3 +- .../Record/DirectSound/CDirectSoundRecord.cs | 2 - Vocaluxe/Screens/CPopupScreenVolumeControl.cs | 24 +- Vocaluxe/Screens/CScreenOptionsSound.cs | 2 +- Vocaluxe/Screens/CScreenSing.cs | 31 +- Vocaluxe/Screens/CScreenSong.cs | 36 +- Vocaluxe/Vocaluxe.csproj | 3 + VocaluxeLib/IBasic.cs | 3 +- VocaluxeLib/Menu/SongMenu/CSongMenu.cs | 5 - .../Menu/SongMenu/CSongMenuFramework.cs | 15 +- VocaluxeLib/Menu/SongMenu/ISongMenu.cs | 2 - 34 files changed, 1160 insertions(+), 1750 deletions(-) create mode 100644 Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs create mode 100644 Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs create mode 100644 Vocaluxe/Lib/Sound/Playback/IAudioStream.cs diff --git a/GstreamerHelper/GstreamerAudio.cpp b/GstreamerHelper/GstreamerAudio.cpp index 1e5f6baf..79b0d4f5 100644 --- a/GstreamerHelper/GstreamerAudio.cpp +++ b/GstreamerHelper/GstreamerAudio.cpp @@ -5,6 +5,7 @@ map Streams; queue IDs; +float GlobalVolume = 1.f; EXTERN_C IMAGE_DOS_HEADER __ImageBase; DllExport void SetLogCallback (LogCallback Callback) { @@ -41,17 +42,20 @@ DllExport void SetGlobalVolume(float Volume) map::iterator p; for(p = Streams.begin(); p != Streams.end(); p++) { - p->second->SetStreamVolume(Volume); + p->second->SetStreamVolumeMax(Volume); } + GlobalVolume = Volume; } +DllExport float GetGlobalVolume(){ + return GlobalVolume; +} DllExport int GetStreamCount(void) { return Streams.size(); } - DllExport void CloseAll(void) { map::iterator p; @@ -66,7 +70,10 @@ DllExport int Load(const wchar_t* Media) GstreamerAudioStream *s = new GstreamerAudioStream(IDs.front()); Streams.insert(pair (IDs.front(), s)); IDs.pop(); - return s->Load(Media); + int result = s->Load(Media); + s->SetStreamVolume(1.f); + s->SetStreamVolumeMax(GlobalVolume); + return result; } DllExport int LoadPrescan(const wchar_t* Media, bool Prescan) @@ -74,7 +81,10 @@ DllExport int LoadPrescan(const wchar_t* Media, bool Prescan) GstreamerAudioStream *s = new GstreamerAudioStream(IDs.front()); Streams.insert(pair (IDs.front(), s)); IDs.pop(); - return s->Load(Media, Prescan); + int result = s->Load(Media, Prescan); + s->SetStreamVolume(1.f); + s->SetStreamVolumeMax(GlobalVolume); + return result; } DllExport void Close(int Stream) @@ -160,15 +170,6 @@ DllExport void SetStreamVolume(int Stream, float Volume) } } -DllExport void SetStreamVolumeMax(int Stream, float Volume) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->SetStreamVolumeMax(Volume); - } -} - DllExport float GetLength(int Stream) { map::iterator it = Streams.find(Stream); diff --git a/GstreamerHelper/GstreamerAudio.h b/GstreamerHelper/GstreamerAudio.h index a9ea49b0..75f2d6f5 100644 --- a/GstreamerHelper/GstreamerAudio.h +++ b/GstreamerHelper/GstreamerAudio.h @@ -17,6 +17,7 @@ using namespace std; DllExport bool Init(); DllExport void SetGlobalVolume(float Volume); + DllExport float GetGlobalVolume(); DllExport int GetStreamCount(void); DllExport void CloseAll(void); @@ -33,7 +34,6 @@ using namespace std; DllExport void FadeAndPause(int Stream, float TargetVolume, float Seconds); DllExport void FadeAndStop(int Stream, float TargetVolume, float Seconds); DllExport void SetStreamVolume(int Stream, float Volume); - DllExport void SetStreamVolumeMax(int Stream, float Volume); DllExport float GetLength(int Stream); DllExport float GetPosition(int Stream); diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs index 6cfad473..6b5ccaad 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs @@ -379,7 +379,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe { base.OnClose(); CBase.BackgroundMusic.SetStatus(false); - CBase.Sound.FadeAndStop(_PreviewStream, 0f, 0.5f); + CBase.Sound.FadeAndClose(_PreviewStream, 0f, 0.5f); } private void _CreateFields() @@ -574,7 +574,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe { _GameData.NumJokerRandom[teamNr]--; if (!CBase.Sound.IsFinished(_PreviewStream)) - CBase.Sound.FadeAndStop(_PreviewStream, 0, 1); + CBase.Sound.FadeAndClose(_PreviewStream, 0, 1); _FieldSelected(true); } break; @@ -586,7 +586,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe _GameData.NumJokerRetry[teamNr]--; _GameData.Team = teamNr; if (!CBase.Sound.IsFinished(_PreviewStream)) - CBase.Sound.FadeAndStop(_PreviewStream, 0, 1); + CBase.Sound.FadeAndClose(_PreviewStream, 0, 1); _Status = EStatus.JokerRetry; _OldSelectedField = _SelectedField; _SelectedField = -1; @@ -627,7 +627,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe private void _NextRound() { - CBase.Sound.FadeAndStop(_PreviewStream, 0f, 0.5f); + CBase.Sound.FadeAndClose(_PreviewStream, 0f, 0.5f); _Data.ScreenMain.Rounds = _GameData.Rounds; _Data.ScreenMain.FadeToNameSelection = false; _Data.ScreenMain.FadeToSinging = true; @@ -640,7 +640,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe private void _EndParty() { - CBase.Sound.FadeAndStop(_PreviewStream, 0f, 0.5f); + CBase.Sound.FadeAndClose(_PreviewStream, 0f, 0.5f); _FadeTo(EScreens.ScreenParty); } @@ -659,7 +659,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe private void _Back() { - CBase.Sound.FadeAndStop(_PreviewStream, 0f, 0.5f); + CBase.Sound.FadeAndClose(_PreviewStream, 0f, 0.5f); _Data.ScreenMain.FadeToNameSelection = true; _Data.ScreenMain.FadeToSinging = false; _Data.ScreenMain.SingRoundNr = _SelectedField; diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 09bddfcc..b68dab47 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -146,7 +146,6 @@ namespace Vocaluxe.Base _PreviousMusicIndex = -1; IsPlaying = false; - _Volume = CConfig.BackgroundMusicVolume; _VideoEnabled = (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON); SetMusicSource(CConfig.BackgroundMusicSource); _Initialized = true; @@ -161,7 +160,7 @@ namespace Vocaluxe.Base { //Resume CSound.SetStreamVolume(_CurrentMusicStream, 0f); - CSound.Fade(_CurrentMusicStream, _Volume, CSettings.BackgroundMusicFadeTime); + CSound.Fade(_CurrentMusicStream, 100f, CSettings.BackgroundMusicFadeTime); CSound.Play(_CurrentMusicStream); if (_VideoEnabled && _Video != -1) CVideo.Resume(_Video); @@ -312,13 +311,6 @@ namespace Vocaluxe.Base } } - public static void SetVolume(float volume) - { - _Volume = volume; - if (_CurrentMusicStream >= 0) - CSound.SetStreamVolume(_CurrentMusicStream, _Volume); - } - /// /// (Re-)Starts the _CurrentPlaylistElement /// @@ -333,7 +325,7 @@ namespace Vocaluxe.Base if (_CurrentMusicStream < 0) return; CSound.SetStreamVolume(_CurrentMusicStream, 0f); - CSound.Fade(_CurrentMusicStream, _Volume, CSettings.BackgroundMusicFadeTime); + CSound.Fade(_CurrentMusicStream, 100f, CSettings.BackgroundMusicFadeTime); } //Seek to #Start-Tag, if found if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 6b6d7bf0..97eaa16e 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -102,8 +102,8 @@ namespace Vocaluxe.Base public static EOffOn BackgroundMusic = EOffOn.TR_CONFIG_ON; public static EBackgroundMusicSource BackgroundMusicSource = EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC; public static EOffOn BackgroundMusicUseStart = EOffOn.TR_CONFIG_ON; - public static int PreviewMusicVolume = 50; - public static int GameMusicVolume = 80; + private static int _PreviewMusicVolume = 50; + private static int _GameMusicVolume = 80; //Folders public static readonly List SongFolders = new List @@ -171,12 +171,27 @@ namespace Vocaluxe.Base get { return _BackgroundMusicVolume; } set { - if (value < 0) - _BackgroundMusicVolume = 0; - else if (value > 100) - _BackgroundMusicVolume = 100; - else - _BackgroundMusicVolume = value; + _BackgroundMusicVolume = value.Clamp(0, 100); + SaveConfig(); + } + } + + public static int GameMusicVolume + { + get { return _GameMusicVolume; } + set + { + _GameMusicVolume = value.Clamp(0, 100); + SaveConfig(); + } + } + + public static int PreviewMusicVolume + { + get { return _PreviewMusicVolume; } + set + { + _PreviewMusicVolume = value.Clamp(0, 100); SaveConfig(); } } @@ -248,8 +263,8 @@ namespace Vocaluxe.Base xmlReader.TryGetIntValueRange("//root/Sound/BackgroundMusicVolume", ref _BackgroundMusicVolume); xmlReader.TryGetEnumValue("//root/Sound/BackgroundMusicSource", ref BackgroundMusicSource); xmlReader.TryGetEnumValue("//root/Sound/BackgroundMusicUseStart", ref BackgroundMusicUseStart); - xmlReader.TryGetIntValueRange("//root/Sound/PreviewMusicVolume", ref PreviewMusicVolume); - xmlReader.TryGetIntValueRange("//root/Sound/GameMusicVolume", ref GameMusicVolume); + xmlReader.TryGetIntValueRange("//root/Sound/PreviewMusicVolume", ref _PreviewMusicVolume); + xmlReader.TryGetIntValueRange("//root/Sound/GameMusicVolume", ref _GameMusicVolume); #endregion Sound #region Game diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index 06a28e45..a4b5adcb 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -408,6 +408,7 @@ namespace Vocaluxe.Base if (popupVolumeControlAllowed) { + //TODO: Handle this in the volume popup int diff = 0; if ((keyEvent.ModShift && (keyEvent.Key == Keys.Add || keyEvent.Key == Keys.PageUp)) || (keyEvent.Sender == ESender.WiiMote && keyEvent.Key == Keys.Add)) diff = 5; @@ -423,23 +424,23 @@ namespace Vocaluxe.Base if (CSongs.IsInCategory) { CConfig.PreviewMusicVolume += diff; - _Screens[(int)_CurrentScreen].ApplyVolume(); + CSound.SetGlobalVolume(CConfig.PreviewMusicVolume); } else { CConfig.BackgroundMusicVolume += diff; - CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); + CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); } break; case EScreens.ScreenSing: CConfig.GameMusicVolume += diff; - _Screens[(int)_CurrentScreen].ApplyVolume(); + CSound.SetGlobalVolume(CConfig.GameMusicVolume); break; default: CConfig.BackgroundMusicVolume += diff; - CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); + CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); break; } CConfig.SaveConfig(); @@ -521,13 +522,8 @@ namespace Vocaluxe.Base bool handled = false; if (_CurrentPopupScreen != EPopupScreens.NoPopup) - { handled = _PopupScreens[(int)_CurrentPopupScreen].HandleMouse(mouseEvent); - if (handled && _CurrentPopupScreen == EPopupScreens.PopupVolumeControl) - _Screens[(int)_CurrentScreen].ApplyVolume(); - } - if (!handled && _Fading == null && (_Cursor.IsActive || mouseEvent.LB || mouseEvent.RB || mouseEvent.MB)) resume &= _Screens[(int)_CurrentScreen].HandleMouse(mouseEvent); diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index a66a960d..533444fd 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -808,7 +808,7 @@ namespace Vocaluxe.Base return CSound.GetLength(soundStream); } - public void FadeAndStop(int soundStream, float targetVolume, float duration) + public void FadeAndClose(int soundStream, float targetVolume, float duration) { CSound.FadeAndClose(soundStream, targetVolume, duration); } @@ -817,11 +817,6 @@ namespace Vocaluxe.Base { CSound.SetStreamVolume(soundStream, volume); } - - public void SetStreamVolumeMax(int soundStream, float maxVolume) - { - CSound.SetStreamVolumeMax(soundStream, maxVolume); - } } class CBcover : ICover diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index d5fbd50d..8d9ad0e8 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -109,11 +109,6 @@ namespace Vocaluxe.Base _Playback.Play(stream); } - public static void Play(int stream, bool loop) - { - _Playback.Play(stream, loop); - } - public static void Pause(int stream) { _Playback.Pause(stream); @@ -124,24 +119,24 @@ namespace Vocaluxe.Base _Playback.Stop(stream); } - public static void Fade(int stream, float targetVolume, float seconds) + public static void Fade(int stream, float targetVolume, float seconds, EStreamAction afterFadeAction = EStreamAction.Nothing) { - _Playback.Fade(stream, targetVolume, seconds); + _Playback.Fade(stream, targetVolume, seconds, afterFadeAction); } public static void FadeAndPause(int stream, float targetVolume, float seconds) { - _Playback.FadeAndPause(stream, targetVolume, seconds); + Fade(stream, targetVolume, seconds, EStreamAction.Pause); } public static void FadeAndClose(int stream, float targetVolume, float seconds) { - _Playback.FadeAndClose(stream, targetVolume, seconds); + Fade(stream, targetVolume, seconds, EStreamAction.Close); } public static void FadeAndStop(int stream, float targetVolume, float seconds) { - _Playback.FadeAndStop(stream, targetVolume, seconds); + Fade(stream, targetVolume, seconds, EStreamAction.Stop); } public static void SetStreamVolume(int stream, float volume) @@ -149,11 +144,6 @@ namespace Vocaluxe.Base _Playback.SetStreamVolume(stream, volume); } - public static void SetStreamVolumeMax(int stream, float volume) - { - _Playback.SetStreamVolumeMax(stream, volume); - } - public static float GetLength(int stream) { return _Playback.GetLength(stream); diff --git a/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs b/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs new file mode 100644 index 00000000..d8046b4d --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs @@ -0,0 +1,120 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; +using VocaluxeLib; + +namespace Vocaluxe.Lib.Sound.Playback +{ + abstract class CAudioStreamBase : IAudioStream + { + private readonly int _ID; + protected readonly string _Medium; + protected readonly bool _Loop; + + protected ICloseStreamListener _CloseStreamListener; + + protected EStreamAction _AfterFadeAction = EStreamAction.Nothing; + protected CFading _Fading; + + public int ID + { + get { return _ID; } + } + + public virtual float Volume { get; set; } + public virtual float VolumeMax { get; set; } + public virtual float Length { get; protected set; } + public abstract float Position { get; set; } + public abstract bool IsPaused { get; set; } + public abstract bool IsFinished { get; } + + public CAudioStreamBase(int id, string medium, bool loop) + { + _ID = id; + _Medium = medium; + _Loop = loop; + } + + ~CAudioStreamBase() + { + _Dispose(false); + } + + public void Dispose() + { + _Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void _Dispose(bool disposing) + { + if (!disposing) + CBase.Log.LogDebug("Audio stream " + _Medium + " was not closed."); + } + + public void Close() + { + Dispose(); + } + + public void SetOnCloseListener(ICloseStreamListener listener) + { + _CloseStreamListener = listener; + } + + public void Fade(float targetVolume, float seconds, EStreamAction afterFadeAction) + { + _Fading = new CFading(Volume, targetVolume, seconds); + _AfterFadeAction = afterFadeAction; + } + + public void CancelFading() + { + _Fading = null; + } + + public virtual void Update() + { + if (_Fading != null) + { + bool finished; + Volume = _Fading.GetValue(out finished); + if (finished) + { + switch (_AfterFadeAction) + { + case EStreamAction.Close: + Close(); + break; + case EStreamAction.Stop: + Stop(); + break; + case EStreamAction.Pause: + IsPaused = true; + break; + } + _Fading = null; + } + } + } + + public abstract bool Open(bool prescan); + public abstract void Play(); + public abstract void Stop(); + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs new file mode 100644 index 00000000..d472d808 --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs @@ -0,0 +1,308 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System.Collections.Generic; +using System.Threading; +using VocaluxeLib; + +namespace Vocaluxe.Lib.Sound.Playback +{ + public abstract class CPlaybackBase : IPlayback, ICloseStreamListener + { + protected bool _Initialized; + protected readonly List _Streams = new List(); + private int _NextID; + protected float _GlobalVolume = 1f; + + public abstract bool Init(); + + public virtual void Close() + { + if (!_Initialized) + return; + List streams = new List(); + //Get all streams but do not modify list without holding the lock + //Calling dispose from within the lock may deadlock in closeproc (if a thread is already there) + lock (_Streams) + { + streams.AddRange(_Streams); + } + foreach (IAudioStream stream in streams) + stream.Dispose(); + while (_Streams.Count > 0) + Thread.Sleep(5); + _Initialized = false; + } + + public void CloseAll() + { + if (!_Initialized) + return; + lock (_Streams) + { + foreach (IAudioStream stream in _Streams) + stream.Close(); + _Streams.Clear(); + } + } + + public float GetGlobalVolume() + { + return (_Initialized) ? _GlobalVolume * 100f : 100f; + } + + public void SetGlobalVolume(float volume) + { + if (!_Initialized) + return; + volume = volume.Clamp(0f, 100f) / 100f; + foreach (IAudioStream stream in _Streams) + stream.VolumeMax = volume; + _GlobalVolume = volume; + } + + public int GetStreamCount() + { + if (!_Initialized) + return 0; + + lock (_Streams) + { + return _Streams.Count; + } + } + + public void Update() + { + if (!_Initialized) + return; + lock (_Streams) + { + foreach (IAudioStream stream in _Streams) + stream.Update(); + } + } + + #region Stream Handling + //Factory method to get a stream instance + protected abstract IAudioStream _CreateStream(int id, string media, bool loop); + + public int Load(string medium, bool loop = false, bool prescan = false) + { + if (!_Initialized) + return -1; + IAudioStream stream = _CreateStream(_NextID, medium, loop); + + if (stream.Open(prescan)) + { + lock (_Streams) + { + stream.Volume = 1f; + stream.VolumeMax = _GlobalVolume; + stream.SetOnCloseListener(this); + _Streams.Add(stream); + _NextID++; + return stream.ID; + } + } + return -1; + } + + public void Close(int streamID) + { + if (!_Initialized) + return; + lock (_Streams) + { + int index = _GetStreamIndex(streamID); + if (index >= 0) + { + _Streams[index].Close(); + _Streams.RemoveAt(index); + } + } + } + + public void Play(int streamID) + { + if (!_Initialized) + return; + lock (_Streams) + { + if (_StreamExists(streamID)) + _Streams[_GetStreamIndex(streamID)].Play(); + } + } + + public void Pause(int streamID) + { + if (!_Initialized) + return; + lock (_Streams) + { + if (_StreamExists(streamID)) + _Streams[_GetStreamIndex(streamID)].IsPaused = true; + } + } + + public void Stop(int streamID) + { + if (!_Initialized) + return; + lock (_Streams) + { + if (_StreamExists(streamID)) + _Streams[_GetStreamIndex(streamID)].Stop(); + } + } + + public void Fade(int streamID, float targetVolume, float seconds, EStreamAction afterFadeAction = EStreamAction.Nothing) + { + if (!_Initialized) + return; + targetVolume = targetVolume.Clamp(0f, 100f) / 100f; + lock (_Streams) + { + if (_StreamExists(streamID)) + _Streams[_GetStreamIndex(streamID)].Fade(targetVolume, seconds, afterFadeAction); + } + } + + public void SetStreamVolume(int streamID, float volume) + { + if (!_Initialized) + return; + volume = volume.Clamp(0f, 100f) / 100f; + lock (_Streams) + { + if (_StreamExists(streamID)) + { + _Streams[_GetStreamIndex(streamID)].Volume = volume; + _Streams[_GetStreamIndex(streamID)].CancelFading(); + } + } + } + + public float GetLength(int streamID) + { + if (!_Initialized) + return 0f; + lock (_Streams) + { + if (_StreamExists(streamID)) + return _Streams[_GetStreamIndex(streamID)].Length; + } + return 0f; + } + + public float GetPosition(int streamID) + { + if (!_Initialized) + return 0f; + lock (_Streams) + { + if (_StreamExists(streamID)) + return _Streams[_GetStreamIndex(streamID)].Position; + } + + return 0f; + } + + public void SetPosition(int streamID, float position) + { + if (!_Initialized) + return; + lock (_Streams) + { + if (_StreamExists(streamID)) + _Streams[_GetStreamIndex(streamID)].Position = position; + } + } + + public bool IsPlaying(int streamID) + { + if (!_Initialized) + return false; + lock (_Streams) + { + if (_StreamExists(streamID)) + return !_Streams[_GetStreamIndex(streamID)].IsPaused && !_Streams[_GetStreamIndex(streamID)].IsFinished; + } + return false; + } + + public bool IsPaused(int streamID) + { + if (!_Initialized) + return false; + lock (_Streams) + { + if (_StreamExists(streamID)) + return _Streams[_GetStreamIndex(streamID)].IsPaused; + } + return false; + } + + public bool IsFinished(int streamID) + { + if (!_Initialized) + return true; + lock (_Streams) + { + if (_StreamExists(streamID)) + return _Streams[_GetStreamIndex(streamID)].IsFinished; + } + return true; + } + + /// + /// Returns true if stream with given id is found + /// MUST hold _Stream-lock + /// + /// Stream id + /// + protected bool _StreamExists(int streamID) + { + return _GetStreamIndex(streamID) != -1; + } + + /// + /// Returns the index of the stream with the given id + /// MUST hold _Stream-lock + /// + /// Stream id + /// + protected int _GetStreamIndex(int streamID) + { + for (int i = 0; i < _Streams.Count; i++) + { + if (_Streams[i].ID == streamID) + return i; + } + return -1; + } + #endregion Stream Handling + + public void OnCloseStream(IAudioStream stream) + { + lock (_Streams) + { + _Streams.Remove(stream); + } + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs b/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs index 73d0ebe3..2d1c4dc7 100644 --- a/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs +++ b/Vocaluxe/Lib/Sound/Playback/CRingBuffer.cs @@ -1,4 +1,21 @@ -using System; +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; namespace Vocaluxe.Lib.Sound.Playback { diff --git a/Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs b/Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs index 1668deb0..505b3604 100644 --- a/Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs +++ b/Vocaluxe/Lib/Sound/Playback/Decoder/CAudioDecoderFFmpeg.cs @@ -34,9 +34,7 @@ namespace Vocaluxe.Lib.Sound.Playback.Decoder private string _FileName; private bool _FileOpened; - public void Init() {} - - public void Open(string fileName) + public bool Open(string fileName) { _FileName = fileName; @@ -49,14 +47,15 @@ namespace Vocaluxe.Lib.Sound.Playback.Decoder catch (Exception) { CLog.LogError("Error opening audio file: " + _FileName); - return; + Close(); + return false; } if (!_Instance.Opened) { Close(); - return; + return false; } int audioStreamIndex; @@ -71,13 +70,13 @@ namespace Vocaluxe.Lib.Sound.Playback.Decoder { CLog.LogError("Error opening audio file (can't find decoder): " + _FileName); Close(); - return; + return false; } if (audioStreamIndex < 0) { Close(); - return; + return false; } _FormatInfo = new SFormatInfo @@ -93,9 +92,10 @@ namespace Vocaluxe.Lib.Sound.Playback.Decoder { CLog.LogError("Unsupported BitDepth in file " + fileName); Close(); - return; + return false; } _FileOpened = true; + return true; } public void Close() diff --git a/Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs b/Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs index 6187c279..98505b37 100644 --- a/Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs +++ b/Vocaluxe/Lib/Sound/Playback/Decoder/IAudioDecoder.cs @@ -26,10 +26,9 @@ namespace Vocaluxe.Lib.Sound.Playback.Decoder interface IAudioDecoder { - void Init(); void Close(); - void Open(string fileName); + bool Open(string fileName); SFormatInfo GetFormatInfo(); float GetLength(); diff --git a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs index 2b6a663a..4dcd9006 100644 --- a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs @@ -22,7 +22,6 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer { class CGstreamerAudio : IPlayback { - //static float LastPosition; private readonly CGstreamerAudioWrapper.LogCallback _LogCallback; #region log @@ -35,8 +34,6 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer public CGstreamerAudio() { _LogCallback = _LogHandler; - //Is this really needed? CodaAnalyzer complains about it... - //GC.SuppressFinalize(_LogCallback); CGstreamerAudioWrapper.SetLogCallback(_LogCallback); } @@ -48,6 +45,12 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer public void Close() { CloseAll(); + CGstreamerAudioWrapper.SetLogCallback(null); + } + + public float GetGlobalVolume() + { + return CGstreamerAudioWrapper.GetGlobalVolume(); } public void SetGlobalVolume(float volume) @@ -65,17 +68,13 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer CGstreamerAudioWrapper.CloseAll(); } - public int Load(string media) + public int Load(string medium, bool loop = false, bool prescan = false) { - var u = new Uri(media); - int i = CGstreamerAudioWrapper.Load(u.AbsoluteUri); - return i; - } - - public int Load(string media, bool prescan) - { - var u = new Uri(media); + var u = new Uri(medium); int i = CGstreamerAudioWrapper.Load(u.AbsoluteUri, prescan); + //Workaround b/c I'm lazy: + CGstreamerAudioWrapper.Play(i, loop); + CGstreamerAudioWrapper.Pause(i); return i; } @@ -89,11 +88,6 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer CGstreamerAudioWrapper.Play(stream); } - public void Play(int stream, bool loop) - { - CGstreamerAudioWrapper.Play(stream, loop); - } - public void Pause(int stream) { CGstreamerAudioWrapper.Pause(stream); @@ -104,19 +98,25 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer CGstreamerAudioWrapper.Stop(stream); } - public void Fade(int stream, float targetVolume, float seconds) + public void Fade(int streamID, float targetVolume, float seconds, EStreamAction afterFadeAction = EStreamAction.Nothing) { - CGstreamerAudioWrapper.Fade(stream, targetVolume, seconds); - } - - public void FadeAndPause(int stream, float targetVolume, float seconds) - { - CGstreamerAudioWrapper.FadeAndPause(stream, targetVolume, seconds); - } - - public void FadeAndClose(int stream, float targetVolume, float seconds) - { - CGstreamerAudioWrapper.FadeAndStop(stream, targetVolume, seconds); + switch (afterFadeAction) + { + case EStreamAction.Nothing: + CGstreamerAudioWrapper.Fade(streamID, targetVolume, seconds); + break; + case EStreamAction.Pause: + CGstreamerAudioWrapper.FadeAndPause(streamID, targetVolume, seconds); + break; + case EStreamAction.Stop: + CGstreamerAudioWrapper.FadeAndStop(streamID, targetVolume, seconds); + break; + case EStreamAction.Close: + CGstreamerAudioWrapper.FadeAndStop(streamID, targetVolume, seconds); + break; + default: + throw new ArgumentOutOfRangeException("afterFadeAction"); + } } public void SetStreamVolume(int stream, float volume) @@ -124,11 +124,6 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer CGstreamerAudioWrapper.SetStreamVolume(stream, volume); } - public void SetStreamVolumeMax(int stream, float volume) - { - CGstreamerAudioWrapper.SetStreamVolumeMax(stream, volume); - } - public float GetLength(int stream) { return CGstreamerAudioWrapper.GetLength(stream); @@ -163,10 +158,5 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer { CGstreamerAudioWrapper.Update(); } - - public void FadeAndStop(int stream, float targetVolume, float seconds) - { - throw new NotImplementedException(); - } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs index bf600899..f091c887 100644 --- a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs +++ b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs @@ -48,6 +48,9 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] public static extern void SetGlobalVolume(float volume); + [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] + public static extern float GetGlobalVolume(); + [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] public static extern int GetStreamCount(); @@ -57,7 +60,7 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] public static extern int Load(string media); - [DllImport(_Dll, EntryPoint = "LoadPrescan", CallingConvention = CallingConvention.Cdecl)] + [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LoadPrescan")] public static extern int Load(string media, [MarshalAs(UnmanagedType.U1)] bool prescan); @@ -67,7 +70,7 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] public static extern void Play(int stream); - [DllImport(_Dll, EntryPoint = "PlayLoop")] + [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "PlayLoop")] public static extern void Play(int stream, [MarshalAs(UnmanagedType.U1)] bool loop); @@ -89,9 +92,6 @@ namespace Vocaluxe.Lib.Sound.Playback.Gstreamer [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] public static extern void SetStreamVolume(int stream, float volume); - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetStreamVolumeMax(int stream, float volume); - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] public static extern float GetLength(int stream); diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index f95c2c91..3bc2a989 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -20,14 +20,11 @@ using Gst; namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { - public class CGstreamerSharpAudio : IPlayback + public class CGstreamerSharpAudio : CPlaybackBase { - private readonly Dictionary _Streams = new Dictionary(); - private static int _IDCount; - - public bool Init() + public override bool Init() { - if (Application.IsInitialized) + if (_Initialized) return false; #if ARCH_X86 const string path = ".\\x86\\gstreamer"; @@ -40,176 +37,21 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp Registry reg = Registry.Get(); reg.ScanPath(path); - return Application.IsInitialized; + _Initialized = Application.IsInitialized; + return _Initialized; } - public void Close() + public override void Close() { - if (!Application.IsInitialized) + if (!_Initialized) return; - CloseAll(); + base.Close(); Application.Deinit(); } - public void SetGlobalVolume(float volume) + protected override IAudioStream _CreateStream(int id, string media, bool loop) { - foreach (CGstreamerSharpAudioStream stream in _Streams.Values) - stream.Volume = volume; - } - - public int GetStreamCount() - { - return _Streams.Count; - } - - public void CloseAll() - { - foreach (CGstreamerSharpAudioStream stream in _Streams.Values) - stream.Close(); - } - - public int Load(string media) - { - return Load(media, false); - } - - public int Load(string media, bool prescan) - { - var stream = new CGstreamerSharpAudioStream(media, prescan); - _Streams[_IDCount] = stream; - return _IDCount++; - } - - public void Close(int stream) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Close(); - } - - public void Play(int stream) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Playing = true; - } - - public void Play(int stream, bool loop) - { - if (!_Streams.ContainsKey(stream)) - return; - Play(stream, loop); - } - - public void Pause(int stream) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Paused = true; - } - - public void Stop(int stream) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Stop(); - } - - public void Fade(int stream, float targetVolume, float seconds) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Fade(targetVolume, seconds); - } - - public void FadeAndPause(int stream, float targetVolume, float seconds) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].FadeAndPause(targetVolume, seconds); - } - - public void FadeAndClose(int stream, float targetVolume, float seconds) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].FadeAndClose(targetVolume, seconds); - } - - public void FadeAndStop(int stream, float targetVolume, float seconds) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].FadeAndStop(targetVolume, seconds); - } - - public void SetStreamVolume(int stream, float volume) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Volume = volume; - } - - public void SetStreamVolumeMax(int stream, float volume) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].MaxVolume = volume; - } - - public float GetLength(int stream) - { - if (!_Streams.ContainsKey(stream)) - return -1; - return _Streams[stream].Length; - } - - public float GetPosition(int stream) - { - if (!_Streams.ContainsKey(stream)) - return -1f; - return _Streams[stream].Position; - } - - public bool IsPlaying(int stream) - { - if (!_Streams.ContainsKey(stream)) - return false; - return _Streams[stream].Playing; - } - - public bool IsPaused(int stream) - { - if (!_Streams.ContainsKey(stream)) - return false; - return _Streams[stream].Paused; - } - - public bool IsFinished(int stream) - { - if (!_Streams.ContainsKey(stream)) - return true; - return _Streams[stream].Finished; - } - - public void SetPosition(int stream, float position) - { - if (!_Streams.ContainsKey(stream)) - return; - _Streams[stream].Position = position; - } - - public void Update() - { - var streamsToDelete = new List(); - foreach (KeyValuePair stream in _Streams) - { - if (stream.Value.Closed) - streamsToDelete.Add(stream.Key); - stream.Value.Update(); - } - foreach (int key in streamsToDelete) - _Streams.Remove(key); + return new CGstreamerSharpAudioStream(id, media, loop); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index c566c9b0..52296826 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -19,39 +19,107 @@ using System; using GLib; using Gst; using Vocaluxe.Base; -using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { - public class CGstreamerSharpAudioStream + class CGstreamerSharpAudioStream : CAudioStreamBase { private Element _Element; - private bool _Loop; - public volatile bool Closed = true; - public volatile bool Finished; - private CFading _Fading; - private EStreamAction _AfterFadeAction; - private float _Volume = 1f; + private volatile bool _IsFinished; - private float _MaxVolume = 1f; - - private volatile float _Duration = -1f; private volatile float _Position; private volatile bool _QueryingDuration; - public CGstreamerSharpAudioStream(string media, bool prescan) + private readonly object _DurationLock = new object(); //For atomic check and update of _QueryingDuration + private readonly object _ElementLock = new object(); //Hold this if you set _Element=null or when accessing _Element from outside the main thread + + public override float Volume + { + get { return base.Volume; } + set + { + base.Volume = value; + _SetElementVolume(); + } + } + + public override float VolumeMax + { + get { return base.VolumeMax; } + set + { + base.VolumeMax = value; + _SetElementVolume(); + } + } + + public override float Length + { + get + { + if (base.Length < 0 && !_QueryingDuration) + { + _QueryingDuration = true; // Set this to avoid race conditions + var t = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; + t.Start(); + } + return base.Length >= 0f ? base.Length : 0f; + } + } + + public override float Position + { + get + { + long position; + if (!_Element.QueryPosition(Format.Time, out position)) + CLog.LogError("Could not query position"); + else + _Position = ((float)position / Constants.SECOND); + return _Position; + } + set + { + if (_Element != null) + _Element.SeekSimple(Format.Time, SeekFlags.Accurate | SeekFlags.Flush, (long)(value * Constants.SECOND)); + } + } + + public override bool IsFinished + { + get { return _IsFinished; } + } + + public override bool IsPaused + { + get { return _Element == null || _Element.TargetState == State.Paused; } + set + { + if (_Element == null) + return; + _Element.SetState(value ? State.Paused : State.Playing); + } + } + + public CGstreamerSharpAudioStream(int id, string medium, bool loop) : base(id, medium, loop) {} + + public override bool Open(bool prescan) { Element convert = ElementFactory.Make("audioconvert", "convert"); Element audiosink = ElementFactory.Make("directsoundsink", "audiosink"); - var audioSinkBin = new Bin("Audiosink"); if (convert == null || audiosink == null) { CLog.LogError("Could not create pipeline"); - return; + if (convert != null) + convert.Dispose(); + if (audiosink != null) + audiosink.Dispose(); + return false; } + var audioSinkBin = new Bin("Audiosink"); audioSinkBin.Add(convert); audioSinkBin.Add(audiosink); convert.Link(audiosink); @@ -61,33 +129,46 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp if (pad == null) { CLog.LogError("Could not create pads"); - return; + convert.Dispose(); + audiosink.Dispose(); + audioSinkBin.Dispose(); + return false; } if (!ghostpad.SetActive(true)) { CLog.LogError("Could not link pads"); - return; + convert.Dispose(); + audiosink.Dispose(); + audioSinkBin.Dispose(); + ghostpad.Dispose(); + return false; } if (!audioSinkBin.AddPad(ghostpad)) { CLog.LogError("Could not add pad"); - return; + convert.Dispose(); + audiosink.Dispose(); + audioSinkBin.Dispose(); + ghostpad.Dispose(); + return false; } _Element = ElementFactory.Make("playbin", "playbin"); if (_Element == null) { CLog.LogError("Could not create playbin"); - return; + convert.Dispose(); + audiosink.Dispose(); + audioSinkBin.Dispose(); + ghostpad.Dispose(); + return false; } _Element["audio-sink"] = audioSinkBin; _Element["flags"] = 1 << 1; - _Element["uri"] = new Uri(media).AbsoluteUri; + _Element["uri"] = new Uri(_Medium).AbsoluteUri; _Element.SetState(State.Paused); - Closed = false; //Enable stream - // Passing CLOCK_TIME_NONE here causes the pipeline to block for a long time so with // prescan enabled the pipeline will wait 500ms for stream to initialize and then continue // if it takes more than 500ms, duration queries will be performed asynchronously @@ -97,6 +178,55 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp if (msg.Handle != IntPtr.Zero) _UpdateDuration(); } + return true; + } + + protected override void _Dispose(bool disposing) + { + if (_Element == null) + return; + Element element; + lock (_ElementLock) + { + //Atomic get and set + if (_Element == null) + return; + element = _Element; + _Element = null; //Now everything "seems" closed + } + if (element.TargetState == State.Playing) + element.SetState(State.Paused); //Stop output + //Now really close it in the background + var t = new System.Threading.Thread(() => _TerminateStream(element)) {Name = "GSt Terminate"}; + t.Start(); + } + + private static void _TerminateStream(Element element) + { + if (element == null) + return; + //One of these might take a bit, so better do this in the background to avoid lags + element.SetState(State.Null); + element.Dispose(); + } + + public override void Play() + { + if (_Element != null) + _Element.SetState(State.Playing); + } + + public override void Stop() + { + if (_Element != null) + _Element.SetState(State.Ready); + Position = 0; + } + + private void _SetElementVolume() + { + if (_Element != null) + _Element["volume"] = Volume * VolumeMax; } private void _OnMessage(Message msg) @@ -109,10 +239,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp if (_Loop) Position = 0; else - { - Finished = true; - Close(); - } + _IsFinished = true; break; case MessageType.Error: GException error; @@ -128,187 +255,35 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp msg.Unref(); } - public void Close() - { - if (!Closed) - { - Closed = true; - Finished = true; - var t = new System.Threading.Thread(_TerminateStream) {Name = "GSt Terminate"}; - t.Start(); - } - } - - private void _TerminateStream() - { - if (_Element != null) - { - _Element.SetState(State.Null); - _Element.Dispose(); - _Element = null; - } - } - - public void Play(bool loop = false) - { - if (_Element != null) - _Element.SetState(State.Playing); - _Loop = loop; - } - - public void Stop() - { - if (_Element != null) - _Element.SetState(State.Ready); - Position = 0; - } - - public void Fade(float targetVolume, float seconds) - { - targetVolume.Clamp(0f, 100f); - _Fading = new CFading(_Volume, targetVolume / 100f, seconds); - _AfterFadeAction = EStreamAction.Nothing; - } - - public void FadeAndPause(float targetVolume, float seconds) - { - Fade(targetVolume, seconds); - _AfterFadeAction = EStreamAction.Pause; - } - - public void FadeAndClose(float targetVolume, float seconds) - { - Fade(targetVolume, seconds); - _AfterFadeAction = EStreamAction.Close; - } - - public void FadeAndStop(float targetVolume, float seconds) - { - Fade(targetVolume, seconds); - _AfterFadeAction = EStreamAction.Stop; - } - - public float Volume - { - get { return _Volume * 100f; } - set - { - value.Clamp(0f, 100f); - _Volume = value / 100f; - _SetElementVolume(); - } - } - - private void _SetElementVolume() - { - if (_Element != null) - _Element["volume"] = (_Volume * _MaxVolume); - } - - public float MaxVolume - { - get { return _MaxVolume * 100f; } - set - { - value.Clamp(0f, 100f); - _MaxVolume = value / 100f; - _SetElementVolume(); - } - } - - public float Length - { - get - { - if (_Duration < 0 && !_QueryingDuration) - { - _QueryingDuration = true; // Set this to avoid race conditions - var t = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; - t.Start(); - } - return _Duration > 0 ? _Duration : -1; - } - } - - public float Position - { - get - { - long position; - if (!_Element.QueryPosition(Format.Time, out position)) - CLog.LogError("Could not query position"); - else - _Position = (float)(position / (double)Constants.SECOND); - return _Position; - } - set - { - if (_Element != null) - _Element.SeekSimple(Format.Time, SeekFlags.Accurate | SeekFlags.Flush, (long)(value * (double)Constants.SECOND)); - } - } - - public bool Paused - { - get { return _Element == null || _Element.TargetState == State.Paused; } - set - { - if (value && _Element != null) - _Element.SetState(State.Paused); - } - } - - public bool Playing - { - get { return _Element != null && (_Element.TargetState == State.Playing && !Finished); } - set - { - if (value && _Element != null) - _Element.SetState(State.Playing); - } - } - - public void Update() + public override void Update() { + base.Update(); while (_Element != null && _Element.Bus != null && _Element.Bus.HavePending()) _OnMessage(_Element.Bus.Pop()); - - if (_Fading != null) - { - bool finished; - _Volume = _Fading.GetValue(out finished); - _SetElementVolume(); - if (finished) - { - switch (_AfterFadeAction) - { - case EStreamAction.Pause: - Paused = true; - break; - case EStreamAction.Stop: - Stop(); - break; - case EStreamAction.Close: - Close(); - break; - } - _Fading = null; - } - } } private void _UpdateDuration() { - _QueryingDuration = true; - long duration = -1; - while (duration < 0 && !Closed && !Finished && _Element != null) + if (_QueryingDuration) + return; + lock (_DurationLock) { - if (_Element.QueryDuration(Format.Time, out duration)) + if (_QueryingDuration) + return; + _QueryingDuration = true; + } + long duration = -1; + while (duration < 0 && !IsFinished) + { + lock (_ElementLock) { - _Duration = duration / (float)Constants.SECOND; - _QueryingDuration = false; + if (_Element == null) + break; + if (_Element.QueryDuration(Format.Time, out duration)) + Length = duration / (float)Constants.SECOND; } } + _QueryingDuration = false; } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/IAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/IAudioStream.cs new file mode 100644 index 00000000..8ec763fe --- /dev/null +++ b/Vocaluxe/Lib/Sound/Playback/IAudioStream.cs @@ -0,0 +1,48 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; + +namespace Vocaluxe.Lib.Sound.Playback +{ + public interface ICloseStreamListener + { + void OnCloseStream(IAudioStream stream); + } + + public interface IAudioStream : IDisposable + { + int ID { get; } + float Volume { get; set; } + float VolumeMax { get; set; } + float Length { get; } + float Position { get; set; } + bool IsPaused { get; set; } + bool IsFinished { get; } + + void SetOnCloseListener(ICloseStreamListener listener); + + void Update(); + + bool Open(bool prescan); + void Close(); + void Play(); + void Stop(); + void Fade(float targetVolume, float seconds, EStreamAction afterFadeAction); + void CancelFading(); + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs index b4a13057..04d9be75 100644 --- a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs +++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs @@ -25,52 +25,47 @@ namespace Vocaluxe.Lib.Sound.Playback Close } - struct SAudioStreams - { - public int Handle; - - public SAudioStreams(int stream) - { - Handle = stream; - } - } - - delegate void Closeproc(int stream); - interface IPlayback { bool Init(); void Close(); + float GetGlobalVolume(); + + /// + /// Set the global (maximum) volume
    + /// All streams (existent and future ones) will have their maximum volume set to this value + ///
    + /// Volume in percent void SetGlobalVolume(float volume); + int GetStreamCount(); void CloseAll(); - #region Stream Handling - int Load(string media); - int Load(string media, bool prescan); - void Close(int stream); + #region stream Handling + int Load(string medium, bool loop = false, bool prescan = false); + void Close(int streamID); - void Play(int stream); - void Play(int stream, bool loop); - void Pause(int stream); - void Stop(int stream); - void Fade(int stream, float targetVolume, float seconds); - void FadeAndPause(int stream, float targetVolume, float seconds); - void FadeAndClose(int stream, float targetVolume, float seconds); - void FadeAndStop(int stream, float targetVolume, float seconds); - void SetStreamVolume(int stream, float volume); - void SetStreamVolumeMax(int stream, float volume); + void Play(int streamID); + void Pause(int streamID); + void Stop(int streamID); + void Fade(int streamID, float targetVolume, float seconds, EStreamAction afterFadeAction = EStreamAction.Nothing); - float GetLength(int stream); - float GetPosition(int stream); + /// + /// Set the streams current volume. Cancels fading + /// + /// Id of the stream (optained by Load) + /// Volume in percent + void SetStreamVolume(int streamID, float volume); - bool IsPlaying(int stream); - bool IsPaused(int stream); - bool IsFinished(int stream); + float GetLength(int streamID); + float GetPosition(int streamID); + void SetPosition(int streamID, float position); - void SetPosition(int stream, float position); + bool IsPlaying(int streamID); + bool IsPaused(int streamID); + bool IsFinished(int streamID); void Update(); - #endregion Stream Handling + #endregion stream Handling } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs index 558ab7ee..12f7cd2b 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs @@ -23,351 +23,34 @@ using System.Collections.Generic; namespace Vocaluxe.Lib.Sound.Playback.OpenAL { - class COpenALPlay : IPlayback, IDisposable + class COpenALPlay : CPlaybackBase { - private bool _Initialized; - private readonly List _Decoder = new List(); - private Closeproc _Closeproc; - private int _Count = 1; private AudioContext _Context; - private readonly Object _MutexDecoder = new Object(); - - private List _Streams; - - ~COpenALPlay() - { - _Dispose(false); - } - - public bool Init() + public override bool Init() { if (_Initialized) return false; _Context = new AudioContext(); - _Context.MakeCurrent(); - - _Closeproc = _CloseProc; _Initialized = true; - - _Streams = new List(); return true; } - public void Close() - { - Dispose(); - } - - public void CloseAll() - { - lock (_MutexDecoder) - { - for (int i = 0; i < _Decoder.Count; i++) - _Decoder[i].Free(_Closeproc, i + 1, _MutexDecoder); - } - } - - public void SetGlobalVolume(float volume) - { - if (_Initialized) - { - //Bass.BASS_SetVolume(Volume / 100f); - } - } - - public int GetStreamCount() - { - if (!_Initialized) - return 0; - - lock (_MutexDecoder) - { - return _Streams.Count; - } - } - - public void Update() - { - if (_Initialized) - { - lock (_MutexDecoder) - { - foreach (COpenAlStream stream in _Decoder) - stream.UploadData(); - } - } - } - - #region Stream Handling - public int Load(string media) - { - return Load(media, false); - } - - public int Load(string media, bool prescan) - { - var stream = new SAudioStreams(0); - var decoder = new COpenAlStream(); - - if (decoder.Open(media) > -1) - { - lock (_MutexDecoder) - { - _Decoder.Add(decoder); - stream.Handle = _Count++; - _Streams.Add(stream); - return stream.Handle; - } - } - return 0; - } - - public void Close(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Free(_Closeproc, stream, _MutexDecoder); - } - } - } - - public void Play(int stream) - { - Play(stream, false); - } - - public void Play(int stream, bool loop) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - { - _Decoder[_GetStreamIndex(stream)].Loop = loop; - _Decoder[_GetStreamIndex(stream)].Play(); - } - } - } - } - - public void Pause(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Paused = true; - } - } - } - - public void Stop(int stream) - { - Pause(stream); - } - - public void Fade(int stream, float targetVolume, float seconds) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Fade(targetVolume, seconds); - } - } - } - - public void FadeAndPause(int stream, float targetVolume, float seconds) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].FadeAndPause(targetVolume, seconds); - } - } - } - - public void FadeAndClose(int stream, float targetVolume, float seconds) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].FadeAndStop(targetVolume, seconds, _Closeproc, stream); - } - } - } - - public void SetStreamVolume(int stream, float volume) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Volume = volume; - } - } - } - - public void SetStreamVolumeMax(int stream, float volume) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].VolumeMax = volume; - } - } - } - - public float GetLength(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Length; - } - } - return 0f; - } - - public float GetPosition(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Position; - } - - return 0f; - } - return 0f; - } - - public bool IsPlaying(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return !_Decoder[_GetStreamIndex(stream)].Paused && !_Decoder[_GetStreamIndex(stream)].Finished; - } - } - return false; - } - - public bool IsPaused(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Paused; - } - } - return false; - } - - public bool IsFinished(int stream) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - return _Decoder[_GetStreamIndex(stream)].Finished; - } - } - return true; - } - - public void SetPosition(int stream, float position) - { - if (_Initialized) - { - lock (_MutexDecoder) - { - if (_AlreadyAdded(stream)) - _Decoder[_GetStreamIndex(stream)].Skip(position); - } - } - } - #endregion Stream Handling - - private bool _AlreadyAdded(int stream) - { - return _Streams.Any(st => st.Handle == stream); - } - - private int _GetStreamIndex(int stream) - { - for (int i = 0; i < _Streams.Count; i++) - { - if (_Streams[i].Handle == stream) - return i; - } - return -1; - } - - private void _CloseProc(int streamID) + public override void Close() { if (!_Initialized) return; - lock (_MutexDecoder) - { - if (_AlreadyAdded(streamID)) - { - int index = _GetStreamIndex(streamID); - _Decoder.RemoveAt(index); - _Streams.RemoveAt(index); - } - } + base.Close(); + _Context.Dispose(); + _Context = null; } - public void Dispose() + protected override IAudioStream _CreateStream(int id, string media, bool loop) { - _Dispose(true); - } - - private void _Dispose(bool disposing) - { - CloseAll(); - if (disposing) - { - while (_Decoder.Count > 0) - Thread.Sleep(5); - } - if (_Context != null) - { - _Context.Dispose(); - _Context = null; - } - } - - public void FadeAndStop(int stream, float targetVolume, float seconds) - { - throw new NotImplementedException(); + return new COpenAlStream(id, media, loop); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs index ec5bdefa..f53f13d4 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -22,57 +22,41 @@ using System.Threading; using OpenTK.Audio; using Vocaluxe.Base; using Vocaluxe.Lib.Sound.Playback.Decoder; -using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.OpenAL { - class COpenAlStream + class COpenAlStream : CAudioStreamBase { - private const int _BufferSize = 2048; private const int _BufferCount = 5; - private const int _Bufsize = 50000; - - private Object _CloseMutex; + private const int _Bufsize = 500000; + private const int _BeginRefill = 50000; private int[] _Buffers; - private int _State; + private byte[] _SampleBuf; private int _Source; private SFormatInfo _Format; - private bool _Initialized; - private int _ByteCount = 4; - private float _Volume = 1f; - private float _VolumeMax = 1f; - - private EStreamAction _AfterFadeAction; - private CFading _Fading; - private readonly Stopwatch _Timer = new Stopwatch(); - private Closeproc _Closeproc; - private int _StreamID; private IAudioDecoder _Decoder; + private int _ByteCount; private float _BytesPerSecond; private bool _NoMoreData; private bool _FileOpened; - private bool _Waiting; private bool _Skip; - private bool _Loop; - private float _Duration; private float _CurrentTime; private float _TimeCode; private bool _Paused; private CRingBuffer _Data; - private float _SetStart; + private volatile float _SetStart; private float _Start; - private bool _SetLoop; - private bool _SetSkip; - private bool _Terminated; + private volatile bool _SetSkip; + private volatile bool _Terminated; private Thread _DecoderThread; @@ -81,199 +65,157 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL private readonly Object _MutexData = new Object(); private readonly Object _MutexSyncSignals = new Object(); - public void Free(Closeproc closeProc, int streamID, Object closeMutex) - { - _Closeproc = closeProc; - _StreamID = streamID; - _Terminated = true; - _CloseMutex = closeMutex; - _EventDecode.Set(); - } - - public float Length - { - get - { - if (_FileOpened) - return _Duration; - - return 0f; - } - } - - public bool Finished + public override bool IsFinished { get { lock (_MutexData) { - return _NoMoreData && _Data.BytesNotRead == 0L; + return _NoMoreData && _Data.BytesNotRead == 0 && Position >= Length; } } } - public float Volume - { - get { return _Volume * 100f; } - set - { - lock (_MutexData) - { - value.Clamp(0f, 100f); - _Volume = value / 100f; - } - } - } - - public float VolumeMax - { - get { return _VolumeMax * 100f; } - set - { - lock (_MutexData) - { - value.Clamp(0f, 100f); - _VolumeMax = value / 100f; - } - } - } - - public float Position + public override float Position { get { - if (Finished) + float time = _CurrentTime + _Timer.ElapsedMilliseconds / 1000f; + if (time > Length) + { _Timer.Stop(); - //TODO: Why not use Decoder.GetPosition()? - return _CurrentTime + _Timer.ElapsedMilliseconds / 1000f; + time = Length; + } + return time; + } + set + { + lock (_MutexSyncSignals) + { + _SetStart = value; + _SetSkip = true; + } + //Set position here in case we immediately request it, it will be reset in Update method + _CurrentTime = value; + _Timer.Restart(); + _EventDecode.Set(); } } - public bool Paused + public override bool IsPaused { get { return _Paused; } set { _Paused = value; - lock (_MutexSyncSignals) + if (_Paused) { - if (_Paused) - { - _Timer.Stop(); - AL.SourceStop(_Source); - } - else - { - _Timer.Start(); - _EventDecode.Set(); - AL.SourcePlay(_Source); - } + _Timer.Stop(); + AL.SourceStop(_Source); + } + else + { + _Timer.Start(); + _EventDecode.Set(); + AL.SourcePlay(_Source); } } } - public void Fade(float targetVolume, float fadeTime) + public COpenAlStream(int id, string medium, bool loop) : base(id, medium, loop) {} + + protected override void _Dispose(bool disposing) { - targetVolume.Clamp(0f, 100f); - _Fading = new CFading(_Volume, targetVolume / 100f, fadeTime); - _AfterFadeAction = EStreamAction.Nothing; + base._Dispose(disposing); + if (!_Terminated) + { + _Terminated = true; + if (_DecoderThread != null) + _EventDecode.Set(); + else + _DoFree(); + } } - public void FadeAndPause(float targetVolume, float fadeTime) + public override void Play() { - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Pause; + IsPaused = false; } - public void FadeAndStop(float targetVolume, float fadeTime, Closeproc closeProc, int streamID) + public override void Stop() { - _Closeproc = closeProc; - _StreamID = streamID; - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Stop; + IsPaused = true; + Position = 0f; } - public void Play() - { - Paused = false; - _AfterFadeAction = EStreamAction.Nothing; - AL.SourcePlay(_Source); - } - - public void Stop() - { - AL.SourceStop(_Source); - Skip(0f); - } - - public bool Loop - { - get { return _SetLoop; } - set { _SetLoop = value; } - } - - public int Open(string fileName) + public override bool Open(bool prescan) { if (_FileOpened) - return -1; + return false; - if (!File.Exists(fileName)) - return -1; + Length = 0f; - _Decoder = new CAudioDecoderFFmpeg(); - _Decoder.Init(); + if (!File.Exists(_Medium)) + { + Dispose(); + return false; + } + bool ok = true; try { _Source = AL.GenSource(); _Buffers = new int[_BufferCount]; for (int i = 0; i < _BufferCount; i++) + { _Buffers[i] = AL.GenBuffer(); - - _State = 0; - //AL.SourceQueueBuffers(_source, _buffers.Length, _buffers); + ok = ok && _Buffers[i] != 0; + } } catch (Exception) { - _Initialized = false; + ok = false; + } + if (!ok) + { + Dispose(); CLog.LogError("Error Init OpenAL Playback"); - return -1; + return false; } - _Decoder.Open(fileName); - _Duration = _Decoder.GetLength(); + _Decoder = new CAudioDecoderFFmpeg(); + if (!_Decoder.Open(_Medium)) + { + Dispose(); + CLog.LogError("Error opening audio file: " + _Medium); + return false; + } _Format = _Decoder.GetFormatInfo(); + if (_Format.SamplesPerSecond == 0) + { + Dispose(); + CLog.LogError("Error Init OpenAL Playback (samples=0)"); + return false; + } + + Length = _Decoder.GetLength(); + _ByteCount = 2 * _Format.ChannelCount; _BytesPerSecond = _Format.SamplesPerSecond * _ByteCount; + _CurrentTime = 0f; + _TimeCode = 0f; _Timer.Reset(); + _Data = new CRingBuffer(_Bufsize); + _NoMoreData = false; + _SampleBuf = new byte[(int)CConfig.AudioBufferSize]; + //From now on closing the driver and the decoder is handled by the thread ONLY! - var stream = new SAudioStreams(0) {Handle = _Buffers[0]}; - - if (stream.Handle != 0) - { - _FileOpened = true; - _Data = new CRingBuffer(_Bufsize); - _NoMoreData = false; - _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(fileName)}; - _DecoderThread.Start(); - - return stream.Handle; - } - _Initialized = true; - return -1; - } - - public bool Skip(float time) - { - lock (_MutexSyncSignals) - { - _SetStart = time; - _SetSkip = true; - } - _EventDecode.Set(); + _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(_Medium)}; + _DecoderThread.Start(); + _FileOpened = true; return true; } @@ -281,10 +223,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL private void _DoSkip() { _Decoder.SetPosition(_Start); - _CurrentTime = _Start; _TimeCode = _Start; - _Timer.Reset(); - _Waiting = false; lock (_MutexData) { @@ -297,30 +236,25 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { while (!_Terminated) { - _Waiting = false; - if (_EventDecode.WaitOne(1) || !_Waiting) + lock (_MutexSyncSignals) { - if (_Skip) + if (_SetSkip) { - _DoSkip(); - _Skip = false; - } - - _DoDecode(); - } - if (!_Terminated) - { - lock (_MutexSyncSignals) - { - if (_SetSkip) - _Skip = true; - + _Skip = true; _SetSkip = false; - - _Start = _SetStart; - _Loop = _SetLoop; } + + _Start = _SetStart; } + + if (_Skip) + { + _DoSkip(); + _Skip = false; + } + + _DoDecode(); + _EventDecode.WaitOne(); } _DoFree(); @@ -328,40 +262,25 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL private void _DoDecode() { - if (!_FileOpened) - return; - - if (_Paused) - return; - - if (_Terminated) + if (_Paused || _Terminated || _NoMoreData) return; float timecode; byte[] buffer; - bool doIt = false; lock (_MutexData) { - if (_Bufsize - 10000L > _Data.BytesNotRead) - doIt = true; + if (_Data.BytesNotRead > _BeginRefill) + return; } - if (!doIt) - return; - _Decoder.Decode(out buffer, out timecode); if (buffer == null) { if (_Loop) { - lock (_MutexSyncSignals) - { - _CurrentTime = 0f; - _Start = 0f; - } - + _Start = 0f; _DoSkip(); } else @@ -373,118 +292,101 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL { _Data.Write(buffer); _TimeCode = timecode; + if (_Data.BytesNotRead < _BeginRefill) + _EventDecode.Set(); } } private void _DoFree() { - if (_Initialized) + if (_Source != 0) { - lock (_CloseMutex) + AL.SourceStop(_Source); + if (_Buffers != null) { - Stop(); - AL.DeleteSource(_Source); AL.DeleteBuffers(_Buffers); + _Buffers = null; } - _Decoder.Close(); + AL.DeleteSource(_Source); + _Source = 0; } - - _Closeproc(_StreamID); + if (_DecoderThread != null) + { + if (Thread.CurrentThread.ManagedThreadId != _DecoderThread.ManagedThreadId) + throw new Exception("Another thread should never free the decoder thread!"); + _DecoderThread = null; + } + if (_Decoder != null) + { + _Decoder.Close(); + _Decoder = null; + } + _SampleBuf = null; if (_EventDecode != null) { - _EventDecode.Dispose(); + _EventDecode.Close(); _EventDecode = null; } + if (_CloseStreamListener != null) + _CloseStreamListener.OnCloseStream(this); } #endregion Threading - private void _Update() + public override void Update() { - if (_Fading != null) - { - bool finished; - _Volume = _Fading.GetValue(out finished); - if (finished) - { - switch (_AfterFadeAction) - { - case EStreamAction.Close: - case EStreamAction.Stop: - _Terminated = true; - break; - case EStreamAction.Pause: - Paused = true; - break; - } - _Fading = null; - } - } - } + base.Update(); - public void UploadData() - { - _Update(); - - if (_Paused) + if (_Paused || _Terminated || IsFinished) return; int queuedCount; - bool doit = true; + bool useQueuedBuffer = false; AL.GetSource(_Source, ALGetSourcei.BuffersQueued, out queuedCount); - int processedCount = _BufferCount; + int freeBufferCt = _BufferCount; if (queuedCount > 0) { - AL.GetSource(_Source, ALGetSourcei.BuffersProcessed, out processedCount); - doit = false; + AL.GetSource(_Source, ALGetSourcei.BuffersProcessed, out freeBufferCt); + useQueuedBuffer = true; //Console.WriteLine("Buffers Processed on Stream " + _Source + " = " + processedCount); - if (processedCount < 1) + if (freeBufferCt < 1) return; } - var buf = new byte[_BufferSize]; - lock (_MutexData) { - while (processedCount > 0) + queuedCount = 0; + for (int j = 0; j < freeBufferCt; j++) { - if (_Data.BytesNotRead >= buf.Length) + if (_Data.BytesNotRead < _SampleBuf.Length && !(_NoMoreData && _Data.BytesNotRead > 0)) + break; + _Data.Read(_SampleBuf); + + float volume = Volume * VolumeMax; + //We want to scale all values. No matter how many channels we have (_ByteCount=2 or 4) we have short values + //So just process 2 bytes a time + for (int i = 0; i < _SampleBuf.Length; i += 2) { - _Data.Read(buf); - - //We want to scale all values. No matter how many channels we have (_ByteCount=2 or 4) we have short values - //So just process 2 bytes a time - for (int i = 0; i < buf.Length; i += 2) - { - byte[] b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(buf, i) * _Volume * _VolumeMax)); - buf[i] = b[0]; - buf[i + 1] = b[1]; - } - - int buffer; - if (!doit) - buffer = AL.SourceUnqueueBuffer(_Source); - else - { - buffer = _Buffers[queuedCount]; - queuedCount++; - } - - if (buffer != 0) - { - ALFormat alFormat = (_Format.ChannelCount == 2) ? ALFormat.Stereo16 : ALFormat.Mono16; - AL.BufferData(buffer, alFormat, buf, buf.Length, _Format.SamplesPerSecond); - AL.SourceQueueBuffer(_Source, buffer); - } + byte[] b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(_SampleBuf, i) * volume)); + _SampleBuf[i] = b[0]; + _SampleBuf[i + 1] = b[1]; } - processedCount--; + + int buffer = useQueuedBuffer ? AL.SourceUnqueueBuffer(_Source) : _Buffers[queuedCount]; + + + if (buffer != 0) + { + ALFormat alFormat = (_Format.ChannelCount == 2) ? ALFormat.Stereo16 : ALFormat.Mono16; + AL.BufferData(buffer, alFormat, _SampleBuf, _SampleBuf.Length, _Format.SamplesPerSecond); + AL.SourceQueueBuffer(_Source, buffer); + } + queuedCount++; } - AL.GetSource(_Source, ALGetSourcei.SourceState, out _State); - if ((ALSourceState)_State != ALSourceState.Playing) - AL.SourcePlay(_Source); } - _CurrentTime = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - 0.1f; + float latency = CConfig.AudioLatency / 1000f + queuedCount * _SampleBuf.Length / _BytesPerSecond + 0.1f; + _CurrentTime = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; _Timer.Restart(); } } diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs index 96e6d3d7..e96eeeab 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs @@ -15,17 +15,11 @@ // along with Vocaluxe. If not, see . #endregion -using System.Collections.Generic; - namespace Vocaluxe.Lib.Sound.Playback.PortAudio { - class CPortAudioPlay : IPlayback + class CPortAudioPlay : CPlaybackBase { - private volatile bool _Initialized; - private readonly List _Streams = new List(); - private int _NextID; - - public bool Init() + public override bool Init() { if (_Initialized) return false; @@ -35,311 +29,9 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio return true; } - public void Close() + protected override IAudioStream _CreateStream(int id, string media, bool loop) { - _Initialized = false; //Set this first, so threads don't call closeproc anymore - List streams = new List(); - //Get all streams but do not modify list without holding the lock - //Calling dispose from within the lock may deadlock in closeproc (if a thread is already there) - lock (_Streams) - { - streams.AddRange(_Streams); - _Streams.Clear(); - } - foreach (CPortAudioStream stream in streams) - stream.Dispose(); - } - - public void CloseAll() - { - lock (_Streams) - { - foreach (CPortAudioStream stream in _Streams) - stream.Close(); - _Streams.Clear(); - } - } - - public void SetGlobalVolume(float volume) - { - if (_Initialized) - { - //Bass.BASS_SetVolume(Volume / 100f); - } - } - - public int GetStreamCount() - { - if (!_Initialized) - return 0; - - lock (_Streams) - { - return _Streams.Count; - } - } - - public void Update() {} - - #region Stream Handling - public int Load(string media) - { - return Load(media, false); - } - - public int Load(string media, bool prescan) - { - //Note: We ignore prescan here as the stream does it always - - var stream = new CPortAudioStream(_NextID++, _CloseProc); - - if (stream.Open(media)) - { - lock (_Streams) - { - _Streams.Add(stream); - return stream.ID; - } - } - return 0; - } - - public void Close(int stream) - { - if (!_Initialized) - return; - lock (_Streams) - { - int index = _GetStreamIndex(stream); - if (index >= 0) - { - _Streams[index].Close(); - _Streams.RemoveAt(index); - } - } - } - - public void Play(int stream) - { - Play(stream, false); - } - - public void Play(int stream, bool loop) - { - if (!_Initialized) - return; - lock (_Streams) - { - int index = _GetStreamIndex(stream); - if (index >= 0) - { - _Streams[index].Loop = loop; - _Streams[index].Play(); - } - } - } - - public void Pause(int stream) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].Paused = true; - } - } - - public void Stop(int stream) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].Stop(); - } - } - - public void Fade(int stream, float targetVolume, float seconds) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].Fade(targetVolume, seconds); - } - } - - public void FadeAndPause(int stream, float targetVolume, float seconds) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].FadeAndPause(targetVolume, seconds); - } - } - - public void FadeAndClose(int stream, float targetVolume, float seconds) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].FadeAndClose(targetVolume, seconds); - } - } - - public void FadeAndStop(int stream, float targetVolume, float seconds) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].FadeAndStop(targetVolume, seconds); - } - } - - public void SetStreamVolume(int stream, float volume) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].Volume = volume; - } - } - - public void SetStreamVolumeMax(int stream, float volume) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].VolumeMax = volume; - } - } - - public float GetLength(int stream) - { - if (!_Initialized) - return 0f; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - return _Streams[_GetStreamIndex(stream)].Length; - } - return 0f; - } - - public float GetPosition(int stream) - { - if (!_Initialized) - return 0f; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - return _Streams[_GetStreamIndex(stream)].Position; - } - - return 0f; - } - - public bool IsPlaying(int stream) - { - if (!_Initialized) - return false; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - return !_Streams[_GetStreamIndex(stream)].Paused && !_Streams[_GetStreamIndex(stream)].Finished; - } - return false; - } - - public bool IsPaused(int stream) - { - if (!_Initialized) - return false; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - return _Streams[_GetStreamIndex(stream)].Paused; - } - return false; - } - - public bool IsFinished(int stream) - { - if (!_Initialized) - return true; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - return _Streams[_GetStreamIndex(stream)].Finished; - } - return true; - } - - public void SetPosition(int stream, float position) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams[_GetStreamIndex(stream)].Skip(position); - } - } - #endregion Stream Handling - - /// - /// Returns true if strem with given id is found - /// MUST hold _Stream-lock - /// - /// Stream id - /// - private bool _AlreadyAdded(int stream) - { - return _GetStreamIndex(stream) >= 0; - } - - /// - /// Returns the index of the stream with the given id - /// MUST hold _Stream-lock - /// - /// Stream id - /// - private int _GetStreamIndex(int stream) - { - for (int i = 0; i < _Streams.Count; i++) - { - if (_Streams[i].ID == stream) - return i; - } - return -1; - } - - /// - /// Removes the stream with the given handle - /// - /// Stream handle - private void _CloseProc(int stream) - { - if (!_Initialized) - return; - lock (_Streams) - { - if (_AlreadyAdded(stream)) - _Streams.RemoveAt(_GetStreamIndex(stream)); - } + return new CPortAudioStream(id, media, loop); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index 62123b1f..a63c0272 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -21,29 +21,20 @@ using System.Runtime.InteropServices; using System.Threading; using Vocaluxe.Base; using Vocaluxe.Lib.Sound.Playback.Decoder; -using VocaluxeLib; namespace Vocaluxe.Lib.Sound.Playback.PortAudio { - class CPortAudioStream : IDisposable + class CPortAudioStream : CAudioStreamBase { private const int _Bufsize = 1000000; - private const int _Beginrefill = 800000; + private const int _BeginRefill = 800000; + + private readonly CSyncTimer _SyncTimer = new CSyncTimer(0f, 1f, 0.02f); + private int _ByteCount; - public readonly int ID; - private readonly Closeproc _Closeproc; private CPortAudioHandle _PaHandle; - - private readonly CSyncTimer _SyncTimer; - private int _ByteCount = 4; - private float _Volume = 1f; - private float _VolumeMax = 1f; - - private EStreamAction _AfterFadeAction; - private CFading _Fading; - - private static PortAudioSharp.PortAudio.PaHostApiInfo _ApiInfo; - private static PortAudioSharp.PortAudio.PaDeviceInfo _OutputDeviceInfo; + private PortAudioSharp.PortAudio.PaHostApiInfo _ApiInfo; + private PortAudioSharp.PortAudio.PaDeviceInfo _OutputDeviceInfo; private IntPtr _Stream = IntPtr.Zero; private PortAudioSharp.PortAudio.PaStreamCallbackDelegate _PaStreamCallback; @@ -56,9 +47,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private bool _Skip; - private bool _Loop; - private float _Duration; - private float _CurrentTime; private volatile float _TimeCode; private volatile bool _Paused; @@ -66,7 +54,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private CRingBuffer _Data; private volatile float _SetStart; private float _Start; - private volatile bool _SetLoop; private volatile bool _SetSkip; private volatile bool _Terminated; @@ -77,83 +64,35 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private readonly Object _LockData = new Object(); private readonly Object _LockSyncSignals = new Object(); - public CPortAudioStream(int id, Closeproc closeproc) - { - ID = id; - _Closeproc = closeproc; - _SyncTimer = new CSyncTimer(0f, 1f, 0.02f); - } - - ~CPortAudioStream() - { - _Dispose(false); - if (_DecoderThread != null) - _DecoderThread.Join(); - } - - public void Close() - { - _Terminated = true; - _EventDecode.Set(); - } - - public float Length - { - get - { - if (_FileOpened) - return _Duration; - - return 0f; - } - } - - public bool Finished + public override float Position { get { lock (_LockData) { - return _NoMoreData && _Data.BytesNotRead == 0 && _SyncTimer.Time >= _Duration; - } - } - } - - public float Volume - { - get { return _Volume * 100f; } - set - { - value.Clamp(0f, 100f); - _Volume = value / 100f; - } - } - - public float VolumeMax - { - get { return _VolumeMax * 100f; } - set - { - value.Clamp(0f, 100f); - _VolumeMax = value / 100f; - } - } - - public float Position - { - get - { - lock (_LockData) - { - if (Finished) + // Decoder may return wrong timestamps. This is why we use the synctimer + // If you change this do exessive testing for monoton timestamps espacially for ogg files + float time = Math.Max(0f, _SyncTimer.Time); + if (time > Length) + { _SyncTimer.Pause(); - //Decoder may return wrong timestamps. If you change this do exessive testing for monoton timestamps espacially for ogg files - return _SyncTimer.Time; + time = Length; + } + return time; + } + } + set + { + lock (_LockSyncSignals) + { + _SetStart = value; + _SetSkip = true; + _EventDecode.Set(); } } } - public bool Paused + public override bool IsPaused { get { return _Paused; } set @@ -172,57 +111,31 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } } - public void Fade(float targetVolume, float fadeTime) + public override bool IsFinished { - targetVolume = targetVolume.Clamp(0f, 100f); - _Fading = new CFading(_Volume, targetVolume / 100f, fadeTime); - _AfterFadeAction = EStreamAction.Nothing; + get + { + lock (_LockData) + { + return _NoMoreData && _Data.BytesNotRead == 0 && _SyncTimer.Time >= Length; + } + } } - public void FadeAndPause(float targetVolume, float fadeTime) - { - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Pause; - } + public CPortAudioStream(int id, string medium, bool loop) : base(id, medium, loop) {} - public void FadeAndClose(float targetVolume, float fadeTime) - { - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Close; - } - - public void FadeAndStop(float targetVolume, float fadeTime) - { - Fade(targetVolume, fadeTime); - _AfterFadeAction = EStreamAction.Stop; - } - - public void Play() - { - Paused = false; - _AfterFadeAction = EStreamAction.Nothing; - _PaHandle.CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); - } - - public void Stop() - { - _PaHandle.CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); - Skip(0f); - } - - public bool Loop - { - get { return _SetLoop; } - set { _SetLoop = value; } - } - - public bool Open(string fileName) + public override bool Open(bool prescan) { if (_FileOpened) return false; - if (!File.Exists(fileName)) + Length = 0f; + + if (!File.Exists(_Medium)) + { + Dispose(); return false; + } try { @@ -238,36 +151,32 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } catch (Exception) { - if (_PaHandle != null) - { - _PaHandle.Close(); - _PaHandle = null; - } + Dispose(); CLog.LogError("Error Init PortAudio Playback"); return false; } _Decoder = new CAudioDecoderFFmpeg(); - _Decoder.Init(); - _Decoder.Open(fileName); + if (!_Decoder.Open(_Medium)) + { + Dispose(); + CLog.LogError("Error opening audio file: " + _Medium); + return false; + } SFormatInfo format = _Decoder.GetFormatInfo(); if (format.SamplesPerSecond == 0) { - _PaHandle.Close(); - _PaHandle = null; - _Decoder.Close(); - _Decoder = null; + Dispose(); CLog.LogError("Error Init PortAudio Playback (samples=0)"); return false; } - _Duration = _Decoder.GetLength(); + Length = _Decoder.GetLength(); _ByteCount = 2 * format.ChannelCount; _BytesPerSecond = format.SamplesPerSecond * _ByteCount; - _CurrentTime = 0f; _SyncTimer.Pause(); - _SyncTimer.Time = _CurrentTime; + _SyncTimer.Time = 0f; PortAudioSharp.PortAudio.PaStreamParameters? outputParams = new PortAudioSharp.PortAudio.PaStreamParameters { @@ -282,15 +191,12 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio out _Stream, ref outputParams, format.SamplesPerSecond, - (uint)CConfig.AudioBufferSize, + (uint)CConfig.AudioBufferSize / 2, PortAudioSharp.PortAudio.PaStreamFlags.paNoFlag, _PaStreamCallback, IntPtr.Zero) || _Stream == IntPtr.Zero) { - _PaHandle.Close(); - _PaHandle = null; - _Decoder.Close(); - _Decoder = null; + Dispose(); return false; } @@ -302,33 +208,52 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio _FileOpened = true; _Data = new CRingBuffer(_Bufsize); _NoMoreData = false; - _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(fileName)}; + _DecoderThread = new Thread(_Execute) {Priority = ThreadPriority.Normal, Name = Path.GetFileName(_Medium)}; _DecoderThread.Start(); return true; } - public void Skip(float time) + protected override void _Dispose(bool disposing) { - lock (_LockSyncSignals) + base._Dispose(disposing); + if (!_Terminated) { - _SetStart = time; - _SetSkip = true; - _EventDecode.Set(); + _Terminated = true; + if (_DecoderThread != null) + _EventDecode.Set(); + else + _DoFree(); } } + public override void Play() + { + if (!_FileOpened || _Terminated || !IsPaused) + return; + IsPaused = false; + _PaHandle.CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); + } + + public override void Stop() + { + if (!_FileOpened || _Terminated) + return; + _Paused = true; + _PaHandle.CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); + Position = 0f; + } + #region Threading private void _DoSkip() { + _Decoder.SetPosition(_Start); lock (_LockData) { - _Decoder.SetPosition(_Start); - _CurrentTime = _Start; + _SyncTimer.Time = _Start; _TimeCode = _Start; _Data.Reset(); _NoMoreData = false; - _SyncTimer.Time = _Start; } } @@ -345,7 +270,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } _Start = _SetStart; - _Loop = _SetLoop; } if (_Skip) @@ -355,7 +279,6 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio } _DoDecode(); - _Update(); _EventDecode.WaitOne(); } @@ -364,37 +287,25 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio private void _DoDecode() { - if (_Paused) - return; - - if (_Terminated) + if (_Paused || _Terminated || _NoMoreData) return; float timecode; byte[] buffer; - bool doIt = false; lock (_LockData) { - if (!_Skip && _Beginrefill > _Data.BytesNotRead) - doIt = true; + if (_Data.BytesNotRead > _BeginRefill) + return; } - if (!doIt) - return; - _Decoder.Decode(out buffer, out timecode); if (buffer == null) { if (_Loop) { - lock (_LockSyncSignals) - { - _CurrentTime = 0f; - _Start = 0f; - } - + _Start = 0f; _DoSkip(); } else @@ -406,20 +317,38 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio { _Data.Write(buffer); _TimeCode = timecode; - if (_Data.BytesNotRead < _Beginrefill) + if (_Data.BytesNotRead < _BeginRefill) _EventDecode.Set(); } } private void _DoFree() { - _PaHandle.CloseStream(_Stream); - _PaHandle.Close(); - _PaHandle = null; - _Decoder.Close(); - _Decoder = null; - - _Closeproc(ID); + if (_PaHandle != null) + { + if (_Stream != IntPtr.Zero) + _PaHandle.CloseStream(_Stream); + _PaHandle.Close(); + _PaHandle = null; + } + if (_DecoderThread != null) + { + if (Thread.CurrentThread.ManagedThreadId != _DecoderThread.ManagedThreadId) + throw new Exception("Another thread should never free the decoder thread!"); + _DecoderThread = null; + } + if (_Decoder != null) + { + _Decoder.Close(); + _Decoder = null; + } + if (_EventDecode != null) + { + _EventDecode.Close(); + _EventDecode = null; + } + if (_CloseStreamListener != null) + _CloseStreamListener.OnCloseStream(this); } #endregion Threading @@ -449,27 +378,27 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio lock (_LockData) { - if (_NoMoreData || _Data.BytesNotRead >= buf.Length) + int dataLen = _Data.BytesNotRead; + if ((_NoMoreData && dataLen > 0) || dataLen >= buf.Length) { + dataLen = Math.Min(dataLen, buf.Length); _Data.Read(buf); //We want to scale all values. No matter how many channels we have (_ByteCount=2 or 4) we have short values //So just process 2 bytes a time - for (int i = 0; i < buf.Length; i += 2) + float volume = Volume * VolumeMax; + for (int i = 0; i < dataLen; i += 2) { - byte[] b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(buf, i) * _Volume * _VolumeMax)); + byte[] b = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(buf, i) * volume)); buf[i] = b[0]; buf[i + 1] = b[1]; } + float latency = buf.Length / _BytesPerSecond + _Latency; + float time = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; + _SyncTimer.Update(time); } - if (_Data.BytesNotRead < _Beginrefill && !_NoMoreData) + if (_Data.BytesNotRead < _BeginRefill && !_NoMoreData) _EventDecode.Set(); - - float latency = buf.Length / _BytesPerSecond + _Latency; - float time = _TimeCode - _Data.BytesNotRead / _BytesPerSecond - latency; - - if (!_NoMoreData) - _CurrentTime = _SyncTimer.Update(time); } try @@ -484,54 +413,5 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio return PortAudioSharp.PortAudio.PaStreamCallbackResult.paContinue; } #endregion Callbacks - - private void _Update() - { - if (_Fading != null) - { - bool finished; - _Volume = _Fading.GetValue(out finished); - if (finished) - { - switch (_AfterFadeAction) - { - case EStreamAction.Close: - _Terminated = true; - break; - case EStreamAction.Stop: - Stop(); - break; - case EStreamAction.Pause: - Paused = true; - break; - } - _Fading = null; - } - } - } - - public void Dispose() - { - _Dispose(true); - GC.SuppressFinalize(this); - } - - private void _Dispose(bool disposing) - { - Close(); - if (disposing) - { - if (_DecoderThread != null) - { - _DecoderThread.Join(); - _DecoderThread = null; - } - if (_EventDecode != null) - { - _EventDecode.Close(); - _EventDecode = null; - } - } - } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs index 1b4eb0cc..887c37cf 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CSyncTimer.cs @@ -65,8 +65,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio float diff = et - dt; if (Math.Abs(diff) > 0.05f) { - _Timer.Reset(); - _Timer.Start(); + _Timer.Restart(); _SetValue = dt + diff; dt = _SetValue; //Console.WriteLine("DRIFTED!!! " + diff.ToString()); diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index 61b54b23..43e501bf 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -16,10 +16,8 @@ #endregion using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Linq; using SlimDX.DirectSound; -using Vocaluxe.Base; namespace Vocaluxe.Lib.Sound.Record.DirectSound { diff --git a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs index 42b132bb..4bfde64c 100644 --- a/Vocaluxe/Screens/CPopupScreenVolumeControl.cs +++ b/Vocaluxe/Screens/CPopupScreenVolumeControl.cs @@ -107,49 +107,49 @@ namespace Vocaluxe.Screens private void _SaveConfig() { + int volume = _SelectSlides[_SelectSlideVolume].Selection * 5; switch (CGraphics.CurrentScreen) { case EScreens.ScreenSong: if (CSongs.IsInCategory) - CConfig.PreviewMusicVolume = _SelectSlides[_SelectSlideVolume].Selection * 5; + CConfig.PreviewMusicVolume = volume; else - { - CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideVolume].Selection * 5; - CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); - } + CConfig.BackgroundMusicVolume = volume; break; case EScreens.ScreenSing: - CConfig.GameMusicVolume = _SelectSlides[_SelectSlideVolume].Selection * 5; + CConfig.GameMusicVolume = volume; break; default: - CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideVolume].Selection * 5; - CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); + CConfig.BackgroundMusicVolume = volume; break; } CConfig.SaveConfig(); + CSound.SetGlobalVolume(volume); } private void _UpdateSlides() { + int volume; switch (CGraphics.CurrentScreen) { case EScreens.ScreenSong: if (CSongs.IsInCategory) - _SelectSlides[_SelectSlideVolume].Selection = CConfig.PreviewMusicVolume / 5; + volume = CConfig.PreviewMusicVolume; else - _SelectSlides[_SelectSlideVolume].Selection = CConfig.BackgroundMusicVolume / 5; + volume = CConfig.BackgroundMusicVolume; break; case EScreens.ScreenSing: - _SelectSlides[_SelectSlideVolume].Selection = CConfig.GameMusicVolume / 5; + volume = CConfig.GameMusicVolume; break; default: - _SelectSlides[_SelectSlideVolume].Selection = CConfig.BackgroundMusicVolume / 5; + volume = CConfig.BackgroundMusicVolume; break; } + _SelectSlides[_SelectSlideVolume].Selection = volume / 5; } } } \ No newline at end of file diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs index 8f087207..502f4c28 100644 --- a/Vocaluxe/Screens/CScreenOptionsSound.cs +++ b/Vocaluxe/Screens/CScreenOptionsSound.cs @@ -156,7 +156,7 @@ namespace Vocaluxe.Screens CConfig.SaveConfig(); CBackgroundMusic.SetMusicSource(CConfig.BackgroundMusicSource); - CBackgroundMusic.SetVolume(CConfig.BackgroundMusicVolume); + CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON) CBackgroundMusic.Play(); else diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index c7956c9c..42cdab5d 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -258,11 +258,8 @@ namespace Vocaluxe.Screens case Keys.PageUp: if (keyEvent.ModShift) { - CConfig.GameMusicVolume = CConfig.GameMusicVolume + 5; - if (CConfig.GameMusicVolume > 100) - CConfig.GameMusicVolume = 100; - CConfig.SaveConfig(); - ApplyVolume(); + CConfig.GameMusicVolume += 5; + CSound.SetGlobalVolume(CConfig.GameMusicVolume); } break; @@ -270,11 +267,8 @@ namespace Vocaluxe.Screens case Keys.PageDown: if (keyEvent.ModShift) { - CConfig.GameMusicVolume = CConfig.GameMusicVolume - 5; - if (CConfig.GameMusicVolume < 0) - CConfig.GameMusicVolume = 0; - CConfig.SaveConfig(); - ApplyVolume(); + CConfig.GameMusicVolume -= 5; + CSound.SetGlobalVolume(CConfig.GameMusicVolume); } break; } @@ -441,6 +435,7 @@ namespace Vocaluxe.Screens CBackgroundMusic.Disabled = true; _CloseSong(); + CSound.SetGlobalVolume(CConfig.GameMusicVolume); } public override void OnShowFinish() @@ -449,7 +444,6 @@ namespace Vocaluxe.Screens CGame.Start(); _LoadNextSong(); - CBackgroundMusic.Disabled = true; } public override bool Draw() @@ -540,22 +534,20 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CBackgroundMusic.Disabled = false; + _CloseSong(); if (_Webcam) CWebcam.Stop(); - _CloseSong(); - } - - public override void ApplyVolume() - { - if (_CurrentStream > -1) - CSound.SetStreamVolumeMax(_CurrentStream, CConfig.GameMusicVolume); + CBackgroundMusic.Disabled = false; + CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); } private void _CloseSong() { if (_CurrentStream > -1) + { CSound.FadeAndClose(_CurrentStream, 0f, 0.5f); + _CurrentStream = -1; + } CRecord.Stop(); if (_CurrentVideo != -1) { @@ -606,7 +598,6 @@ namespace Vocaluxe.Screens _Texts[_TextSongName].Text = songname; _CurrentStream = CSound.Load(song.GetMP3(), true); - CSound.SetStreamVolumeMax(_CurrentStream, CConfig.GameMusicVolume); CSound.SetStreamVolume(_CurrentStream, _Volume); CSound.SetPosition(_CurrentStream, song.Start); _CurrentTime = song.Start; diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 50043dc4..996f427c 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -148,8 +148,6 @@ namespace Vocaluxe.Screens _Playlists[_Playlist].Init(); _AvailableGameModes.Clear(); - - ApplyVolume(); } public override bool HandleInput(SKeyEvent keyEvent) @@ -365,21 +363,23 @@ namespace Vocaluxe.Screens } } + int volumeDiff = 0; if (keyEvent.ModShift && (keyEvent.Key == Keys.Add || keyEvent.Key == Keys.PageUp)) - { - CConfig.PreviewMusicVolume = CConfig.PreviewMusicVolume + 5; - if (CConfig.PreviewMusicVolume > 100) - CConfig.PreviewMusicVolume = 100; - CConfig.SaveConfig(); - ApplyVolume(); - } + volumeDiff = 5; else if (keyEvent.ModShift && (keyEvent.Key == Keys.Subtract || keyEvent.Key == Keys.PageDown)) + volumeDiff = -5; + if (volumeDiff != 0) { - CConfig.PreviewMusicVolume = CConfig.PreviewMusicVolume - 5; - if (CConfig.PreviewMusicVolume < 0) - CConfig.PreviewMusicVolume = 0; - CConfig.SaveConfig(); - ApplyVolume(); + if (CSongs.IsInCategory) + { + CConfig.PreviewMusicVolume += volumeDiff; + CSound.SetGlobalVolume(CConfig.PreviewMusicVolume); + } + else + { + CConfig.BackgroundMusicVolume += volumeDiff; + CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); + } } return true; @@ -643,6 +643,8 @@ namespace Vocaluxe.Screens _Playlists[_Playlist].DragAndDropSongID = -1; UpdateGame(); + if (CSongs.IsInCategory) + CSound.SetGlobalVolume(CConfig.PreviewMusicVolume); } public override bool UpdateGame() @@ -700,14 +702,10 @@ namespace Vocaluxe.Screens { base.OnClose(); CBackgroundMusic.Disabled = false; + CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); _SongMenus[_SongMenu].OnHide(); } - public override void ApplyVolume() - { - _SongMenus[_SongMenu].ApplyVolume(CConfig.PreviewMusicVolume); - } - private void _HandlePartySongSelection(int songNr) { if ((CSongs.Category >= 0) && (songNr >= 0)) diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index eea26470..8cd6f665 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -219,8 +219,11 @@ + + + diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 433e5fc8..3ec5204c 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -264,10 +264,9 @@ namespace VocaluxeLib bool IsFinished(int soundStream); float GetPosition(int soundStream); float GetLength(int soundStream); - void FadeAndStop(int soundStream, float targetVolume, float duration); + void FadeAndClose(int soundStream, float targetVolume, float duration); void SetStreamVolume(int soundStream, float volume); - void SetStreamVolumeMax(int soundStream, float maxVolume); } public interface ICover diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs index 964a2ab5..84e729b6 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenu.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenu.cs @@ -81,11 +81,6 @@ namespace VocaluxeLib.Menu.SongMenu _SongMenu.Draw(); } - public void ApplyVolume(float volumeMax) - { - _SongMenu.ApplyVolume(volumeMax); - } - public bool IsActive() { return _SongMenu.IsActive(); diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index 9cdd19dd..6743c1f8 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -402,7 +402,6 @@ namespace VocaluxeLib.Menu.SongMenu { _PreviewSongStream = -1; _Vidtex = null; - ApplyVolume(CBase.Config.GetPreviewMusicVolume()); } public virtual void OnHide() @@ -423,14 +422,6 @@ namespace VocaluxeLib.Menu.SongMenu CBase.Drawing.DrawTexture(_Vidtex, new SRectF(0, 0, 1280, 720, 0)); } - public virtual void ApplyVolume(float volumeMax) - { - _MaxVolume = volumeMax; - - foreach (int stream in _Streams) - CBase.Sound.SetStreamVolumeMax(stream, _MaxVolume); - } - public virtual bool IsActive() { return _Active; @@ -533,8 +524,6 @@ namespace VocaluxeLib.Menu.SongMenu return; int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true); - CBase.Sound.SetStreamVolumeMax(stream, _MaxVolume); - CBase.Sound.SetStreamVolume(stream, 0f); float startposition = song.Preview.StartTime; float length = CBase.Sound.GetLength(stream); @@ -549,7 +538,7 @@ namespace VocaluxeLib.Menu.SongMenu CBase.Sound.SetPosition(stream, startposition); CBase.Sound.Play(stream); - CBase.Sound.SetStreamVolumeMax(stream, CBase.Config.GetPreviewMusicVolume()); + CBase.Sound.SetStreamVolume(stream, 0f); CBase.Sound.Fade(stream, 100f, 3f); _Streams.Add(stream); _PreviewSongStream = stream; @@ -570,7 +559,7 @@ namespace VocaluxeLib.Menu.SongMenu protected void _Reset() { foreach (int stream in _Streams) - CBase.Sound.FadeAndStop(stream, 0f, 0.75f); + CBase.Sound.FadeAndClose(stream, 0f, 0.75f); _Streams.Clear(); CBase.Video.Close(_PreviewVideoStream); diff --git a/VocaluxeLib/Menu/SongMenu/ISongMenu.cs b/VocaluxeLib/Menu/SongMenu/ISongMenu.cs index 8d8e82c2..e1ea8998 100644 --- a/VocaluxeLib/Menu/SongMenu/ISongMenu.cs +++ b/VocaluxeLib/Menu/SongMenu/ISongMenu.cs @@ -29,8 +29,6 @@ namespace VocaluxeLib.Menu.SongMenu void HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions); void Draw(); - void ApplyVolume(float volumeMax); - int GetSelectedSong(); CStatic GetSelectedSongCover(); void SetSelectedSong(int visibleSongNr); From bafc79af157e99cac270abdb290f6ee04aa4061b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 6 May 2014 18:32:47 +0200 Subject: [PATCH 102/116] Fix possible Bug with Gst# not detecting Length Make usages aware, that the length might not be given instantly --- Vocaluxe/Base/CBackgroundMusic.cs | 30 ++++++++++++-- Vocaluxe/Base/CSound.cs | 22 ++++++++-- Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs | 8 ++-- .../CGstreamerSharpAudioStream.cs | 40 +++++++++++-------- .../Sound/Playback/OpenAL/COpenAlStream.cs | 3 +- .../Playback/PortAudio/CPortAudioStream.cs | 4 +- 6 files changed, 77 insertions(+), 30 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index b68dab47..b4be306f 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -31,7 +31,6 @@ namespace Vocaluxe.Base private static bool _OwnSongsAvailable; private static EBackgroundMusicSource _MusicSource; - private static float _Volume; private static bool _VideoEnabled; private static CPlaylistElement _CurrentPlaylistElement; //Currently played music @@ -151,6 +150,27 @@ namespace Vocaluxe.Base _Initialized = true; } + public static void Close() + { + if (_CurrentMusicStream >= 0) + { + CSound.Close(_CurrentMusicStream); + _CurrentMusicStream = -1; + } + if (_Video != -1) + { + CVideo.Close(_Video); + CDraw.RemoveTexture(ref _CurrentVideoTexture); + _Video = -1; + } + _BGMusicFiles.Clear(); + _NotPlayedFiles.Clear(); + _PreviousFiles.Clear(); + + IsPlaying = false; + _Initialized = false; + } + public static void Play() { if (IsPlaying || CConfig.BackgroundMusic == EOffOn.TR_CONFIG_OFF) @@ -254,8 +274,12 @@ namespace Vocaluxe.Base Debug.Assert(_CurrentMusicStream != -1 && _CurrentPlaylistElement != null); float timeToPlay; - if (Math.Abs(_CurrentPlaylistElement.Finish) < 0.001) //No End-Tag defined - timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream); + if (Math.Abs(_CurrentPlaylistElement.Finish) < 0.001) + { + //No End-Tag defined + float len = CSound.GetLength(_CurrentMusicStream); + timeToPlay = (len > 0f) ? len - CSound.GetPosition(_CurrentMusicStream) : CSettings.BackgroundMusicFadeTime + 1f; + } else //End-Tag found timeToPlay = _CurrentPlaylistElement.Finish - CSound.GetPosition(_CurrentMusicStream); diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index 8d9ad0e8..d00d8e71 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -23,6 +23,7 @@ using Vocaluxe.Lib.Sound.Playback.GstreamerSharp; using Vocaluxe.Lib.Sound.Playback.OpenAL; using Vocaluxe.Lib.Sound.Playback.PortAudio; using VocaluxeLib; +using System.Threading; namespace Vocaluxe.Base { @@ -198,11 +199,26 @@ namespace Vocaluxe.Base if (!File.Exists(file)) return -1; - int stream = Load(file, true); - float length = GetLength(stream); + int stream = Load(file, fade); + if (stream < 0) + return -1; Play(stream); if (fade) - FadeAndClose(stream, 100f, length); + { + float length = -1f; + for (int i = 0; i < 5; i++) + { + length = GetLength(stream); + if (length >= 0f) + break; + Thread.Sleep(1); + } + if (length > 0f) + { + SetStreamVolume(stream, 0f); + Fade(stream, 100f, length); + } + } return stream; } #endregion Sounds diff --git a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs index d472d808..d94e3780 100644 --- a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs +++ b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs @@ -200,26 +200,26 @@ namespace Vocaluxe.Lib.Sound.Playback public float GetLength(int streamID) { if (!_Initialized) - return 0f; + return -1f; lock (_Streams) { if (_StreamExists(streamID)) return _Streams[_GetStreamIndex(streamID)].Length; } - return 0f; + return -1f; } public float GetPosition(int streamID) { if (!_Initialized) - return 0f; + return -1f; lock (_Streams) { if (_StreamExists(streamID)) return _Streams[_GetStreamIndex(streamID)].Position; } - return 0f; + return -1f; } public void SetPosition(int streamID, float position) diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index 52296826..994353ef 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -25,13 +25,15 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp class CGstreamerSharpAudioStream : CAudioStreamBase { private Element _Element; + private bool _FileOpened; private volatile bool _IsFinished; private volatile float _Position; private volatile bool _QueryingDuration; + private System.Threading.Thread _QueryDurationThread; - private readonly object _DurationLock = new object(); //For atomic check and update of _QueryingDuration + private readonly object _DurationLock = new object(); //For atomic check-and-update of _QueryingDuration private readonly object _ElementLock = new object(); //Hold this if you set _Element=null or when accessing _Element from outside the main thread public override float Volume @@ -58,11 +60,11 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { get { - if (base.Length < 0 && !_QueryingDuration) + if (base.Length < 0 && _QueryDurationThread == null && _Element != null) { - _QueryingDuration = true; // Set this to avoid race conditions - var t = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; - t.Start(); + // _QueryDurationThread does not get reset so it is created only once! + _QueryDurationThread = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; + _QueryDurationThread.Start(); } return base.Length >= 0f ? base.Length : 0f; } @@ -72,11 +74,14 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { get { - long position; - if (!_Element.QueryPosition(Format.Time, out position)) - CLog.LogError("Could not query position"); - else - _Position = ((float)position / Constants.SECOND); + if (_Element != null) + { + long position; + if (!_Element.QueryPosition(Format.Time, out position)) + CLog.LogError("Could not query position"); + else + _Position = ((float)position / Constants.SECOND); + } return _Position; } set @@ -88,7 +93,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp public override bool IsFinished { - get { return _IsFinished; } + get { return _Element == null || _IsFinished; } } public override bool IsPaused @@ -96,9 +101,8 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp get { return _Element == null || _Element.TargetState == State.Paused; } set { - if (_Element == null) - return; - _Element.SetState(value ? State.Paused : State.Playing); + if (_Element != null) + _Element.SetState(value ? State.Paused : State.Playing); } } @@ -106,6 +110,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp public override bool Open(bool prescan) { + System.Diagnostics.Debug.Assert(!_FileOpened); + if (_FileOpened) + return false; + Length = -1; Element convert = ElementFactory.Make("audioconvert", "convert"); Element audiosink = ElementFactory.Make("directsoundsink", "audiosink"); @@ -178,6 +186,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp if (msg.Handle != IntPtr.Zero) _UpdateDuration(); } + _FileOpened = true; return true; } @@ -248,8 +257,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp CLog.LogError("Gstreamer error: message" + error.Message + ", code" + error.Code + " ,debug information" + debug); break; case MessageType.DurationChanged: - if (!_QueryingDuration) - _UpdateDuration(); + _UpdateDuration(); break; } msg.Unref(); diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs index f53f13d4..7428b494 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs @@ -150,11 +150,10 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL public override bool Open(bool prescan) { + Debug.Assert(!_FileOpened); if (_FileOpened) return false; - Length = 0f; - if (!File.Exists(_Medium)) { Dispose(); diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index a63c0272..cb579f97 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -16,6 +16,7 @@ #endregion using System; +using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Threading; @@ -126,11 +127,10 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio public override bool Open(bool prescan) { + Debug.Assert(!_FileOpened); if (_FileOpened) return false; - Length = 0f; - if (!File.Exists(_Medium)) { Dispose(); From c07526e1952e94f67706079afe043f83dd2ab3a2 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 6 May 2014 18:37:46 +0200 Subject: [PATCH 103/116] Fix close order Close open audio streams (or at least give opportunity to do so) --- Vocaluxe/Base/CCover.cs | 25 ++++++---- Vocaluxe/Base/CDraw.cs | 2 +- Vocaluxe/Base/CGraphics.cs | 7 +++ Vocaluxe/Base/CLanguage.cs | 6 --- Vocaluxe/Base/Fonts/CFonts.cs | 7 --- Vocaluxe/Program.cs | 50 ++++++++++--------- Vocaluxe/Screens/CScreenOptionsTheme.cs | 2 +- .../Menu/SongMenu/CSongMenuTileBoard.cs | 9 ++-- 8 files changed, 53 insertions(+), 55 deletions(-) diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index 5b52371b..26eb6866 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -18,9 +18,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; -using System.Xml; using VocaluxeLib; using VocaluxeLib.Draw; @@ -35,7 +32,6 @@ namespace Vocaluxe.Base static class CCover { - private static readonly XmlWriterSettings _Settings = new XmlWriterSettings(); private static readonly Dictionary _Covers = new Dictionary(); private static readonly List _CoverThemes = new List(); @@ -43,14 +39,16 @@ namespace Vocaluxe.Base public static void Init() { - _Settings.Indent = true; - _Settings.Encoding = Encoding.UTF8; - _Settings.ConformanceLevel = ConformanceLevel.Document; - _LoadCoverThemes(); _LoadCover(CConfig.CoverTheme); } + public static void Close() + { + _UnloadCovers(); + _CoverThemes.Clear(); + } + /// /// Returns an array of CoverThemes-Names /// @@ -106,18 +104,23 @@ namespace Vocaluxe.Base /// /// Reloads cover to use a new cover-theme /// - public static void ReloadCover() + public static void ReloadCovers() + { + _UnloadCovers(); + _LoadCover(CConfig.CoverTheme); + } + + private static void _UnloadCovers() { lock (_Covers) { - foreach (string key in _Covers.Keys.ToList()) + foreach (string key in _Covers.Keys) { CTexture texture = _Covers[key]; CDraw.RemoveTexture(ref texture); } _Covers.Clear(); } - _LoadCover(CConfig.CoverTheme); } ///
    diff --git a/Vocaluxe/Base/CDraw.cs b/Vocaluxe/Base/CDraw.cs index f43d8542..f109645b 100644 --- a/Vocaluxe/Base/CDraw.cs +++ b/Vocaluxe/Base/CDraw.cs @@ -28,7 +28,7 @@ namespace Vocaluxe.Base { private static IDraw _Draw; - public static bool InitDraw() + public static bool Init() { if (_Draw != null) return false; diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index a4b5adcb..837cd713 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -106,6 +106,13 @@ namespace Vocaluxe.Base CLog.StopBenchmark("Load Theme"); } + public static void Close() + { + if (_CurrentPopupScreen != EPopupScreens.NoPopup) + _PopupScreens[(int)_CurrentPopupScreen].OnClose(); + _Screens[(int)_CurrentScreen].OnClose(); + } + public static void LoadTheme() { _Cursor.LoadTextures(); diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index 2cf54d9d..343aabc0 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -19,8 +19,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text; -using System.Xml; using VocaluxeLib; namespace Vocaluxe.Base @@ -42,7 +40,6 @@ namespace Vocaluxe.Base static class CLanguage { - private static readonly XmlWriterSettings _Settings = new XmlWriterSettings(); private static List _Languages; private static int _CurrentLanguage; private static int _FallbackLanguage; @@ -75,9 +72,6 @@ namespace Vocaluxe.Base public static void Init() { _Languages = new List(); - _Settings.Indent = true; - _Settings.Encoding = Encoding.UTF8; - _Settings.ConformanceLevel = ConformanceLevel.Document; var files = new List(); files.AddRange(CHelper.ListFiles(CSettings.FolderLanguages, "*.xml", true, true)); diff --git a/Vocaluxe/Base/Fonts/CFonts.cs b/Vocaluxe/Base/Fonts/CFonts.cs index 1c904e98..2c838aac 100644 --- a/Vocaluxe/Base/Fonts/CFonts.cs +++ b/Vocaluxe/Base/Fonts/CFonts.cs @@ -19,7 +19,6 @@ using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; -using System.Text; using System.Xml; using VocaluxeLib; using VocaluxeLib.Menu; @@ -28,8 +27,6 @@ namespace Vocaluxe.Base.Fonts { static class CFonts { - private static readonly XmlWriterSettings _Settings = new XmlWriterSettings(); - private static readonly List _Fonts = new List(); private static int _CurrentFont; private static float _Height = 1f; @@ -58,10 +55,6 @@ namespace Vocaluxe.Base.Fonts public static void Init() { - _Settings.Indent = true; - _Settings.Encoding = Encoding.UTF8; - _Settings.ConformanceLevel = ConformanceLevel.Document; - _CurrentFont = 0; PartyModeID = -1; _BuildFonts(); diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 5ee3826e..b7e0d20c 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -107,26 +107,17 @@ namespace Vocaluxe // Create folders CSettings.CreateFolders(); - Application.DoEvents(); _SplashScreen = new CSplashScreen(); Application.DoEvents(); // Init Draw CLog.StartBenchmark("Init Draw"); - if (!CDraw.InitDraw()) + if (!CDraw.Init()) throw new CLoadingException("drawing"); CLog.StopBenchmark("Init Draw"); Application.DoEvents(); - // Init Database - CLog.StartBenchmark("Init Database"); - if (!CDataBase.Init()) - throw new CLoadingException("database"); - CLog.StopBenchmark("Init Database"); - - Application.DoEvents(); - // Init Playback CLog.StartBenchmark("Init Playback"); if (!CSound.Init()) @@ -143,6 +134,22 @@ namespace Vocaluxe Application.DoEvents(); + // Init VideoDecoder + CLog.StartBenchmark("Init Videodecoder"); + if (!CVideo.Init()) + throw new CLoadingException("video"); + CLog.StopBenchmark("Init Videodecoder"); + + Application.DoEvents(); + + // Init Database + CLog.StartBenchmark("Init Database"); + if (!CDataBase.Init()) + throw new CLoadingException("database"); + CLog.StopBenchmark("Init Database"); + + Application.DoEvents(); + //Init Webcam CLog.StartBenchmark("Init Webcam"); if (!CWebcam.Init()) @@ -172,14 +179,6 @@ namespace Vocaluxe Application.DoEvents(); - // Init VideoDecoder - CLog.StartBenchmark("Init Videodecoder"); - if (!CVideo.Init()) - throw new CLoadingException("video"); - CLog.StopBenchmark("Init Videodecoder"); - - Application.DoEvents(); - // Load Cover CLog.StartBenchmark("Init Cover"); CCover.Init(); @@ -257,19 +256,22 @@ namespace Vocaluxe private static void _CloseProgram() { - // Unloading + // Unloading in reverse order try { - CVocaluxeServer.Close(); CController.Close(); + CVocaluxeServer.Close(); + CGraphics.Close(); + CCover.Close(); + CBackgroundMusic.Close(); + CWebcam.Close(); + CDataBase.Close(); + CVideo.Close(); CRecord.Close(); CSound.Close(); - CVideo.Close(); CDraw.Unload(); - CDataBase.Close(); - CWebcam.Close(); GC.Collect(); // Do a GC run here before we close logs to have finalizers run - CLog.CloseAll(); + CLog.CloseAll(); // Do this last, so we get all log entries! } catch (Exception) {} Environment.Exit(Environment.ExitCode); diff --git a/Vocaluxe/Screens/CScreenOptionsTheme.cs b/Vocaluxe/Screens/CScreenOptionsTheme.cs index 5bcbe620..a58226a8 100644 --- a/Vocaluxe/Screens/CScreenOptionsTheme.cs +++ b/Vocaluxe/Screens/CScreenOptionsTheme.cs @@ -179,7 +179,7 @@ namespace Vocaluxe.Screens CConfig.SaveConfig(); if (_OldCoverTheme != _SelectSlides[_SelectSlideCover].Selection) - CCover.ReloadCover(); + CCover.ReloadCovers(); if (_OldTheme != _SelectSlides[_SelectSlideTheme].Selection) { diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index 46781018..e15be31d 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -67,11 +67,11 @@ namespace VocaluxeLib.Menu.SongMenu { set { - _PlaySong(value); - _PreviewIdInternal = value; + if (value == base._PreviewId) + return; + base._PreviewId = value; _UpdatePreview(); } - get { return _PreviewIdInternal; } } public override int GetActualSelection() @@ -373,8 +373,7 @@ namespace VocaluxeLib.Menu.SongMenu if (!keyEvent.Handled) { _ActualSelection = _Locked; - if (_PreviewId != _Locked) - _PreviewId = _Locked; + _PreviewId = _Locked; for (int i = 0; i < _Tiles.Count; i++) _Tiles[i].Selected = _Locked == i + _Offset; From 2195af6700864fb52c7ecf0551dd3163c2167d58 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 6 May 2014 21:34:48 +0200 Subject: [PATCH 104/116] Fix GStreamer Video (IDs+include) --- GstreamerHelper/GstreamerVideo.cpp | 21 +++++++-------------- GstreamerHelper/GstreamerVideoStream.h | 2 +- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/GstreamerHelper/GstreamerVideo.cpp b/GstreamerHelper/GstreamerVideo.cpp index ab025608..3393e2a5 100644 --- a/GstreamerHelper/GstreamerVideo.cpp +++ b/GstreamerHelper/GstreamerVideo.cpp @@ -3,7 +3,7 @@ #include "GstreamerVideoStream.h" map VideoStreams; -queue VideoIDs; +int NextID; DllExport void SetVideoLogCallback (LogCallback Callback) { @@ -12,15 +12,7 @@ DllExport void SetVideoLogCallback (LogCallback Callback) DllExport bool InitVideo() { - for(int i = 0; i < 1000; i++) - { - VideoIDs.push(i); - } -#if _WIN64 - SetDllDirectory(L".\\x64\\gstreamer"); -#else - SetDllDirectory(L".\\x86\\gstreamer"); -#endif + NextID = 0; gst_init(NULL, NULL); @@ -28,8 +20,10 @@ DllExport bool InitVideo() #if _WIN64 gst_registry_scan_path(registry, ".\\x64\\gstreamer"); -#else +#elif _WIN32 gst_registry_scan_path(registry, ".\\x86\\gstreamer"); +#else + #error Define either _WIN64 or _WIN32! #endif return true; } @@ -45,9 +39,8 @@ DllExport void CloseAllVideos(void) DllExport int LoadVideo(const wchar_t* Media) { - GstreamerVideoStream *s = new GstreamerVideoStream(VideoIDs.front()); - VideoStreams.insert(pair (VideoIDs.front(), s)); - VideoIDs.pop(); + GstreamerVideoStream *s = new GstreamerVideoStream(NextID++); + VideoStreams.insert(pair (s->ID, s)); return s->LoadVideo(Media); } diff --git a/GstreamerHelper/GstreamerVideoStream.h b/GstreamerHelper/GstreamerVideoStream.h index 7d69e019..b258f924 100644 --- a/GstreamerHelper/GstreamerVideoStream.h +++ b/GstreamerHelper/GstreamerVideoStream.h @@ -3,7 +3,7 @@ #include #include "gst/gst.h" #include "GstreamerVideo.h" -#include "gst\app\gstappsink.h" +#include "gst/app/gstappsink.h" #include "VocaluxeClock.h" using namespace std; From cb328c3209905f956965257073d970436b230d08 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 6 May 2014 21:40:13 +0200 Subject: [PATCH 105/116] Remove GStreamer audio (replaced by GStreamer# and outdated) Also some cleanup --- GstreamerHelper/GstreamerAudio.cpp | 254 ------------- GstreamerHelper/GstreamerAudio.h | 49 --- GstreamerHelper/GstreamerAudioStream.cpp | 338 ------------------ GstreamerHelper/GstreamerAudioStream.h | 73 ---- GstreamerHelper/GstreamerHelper.vcxproj | 36 +- .../GstreamerHelper.vcxproj.filters | 24 -- GstreamerHelper/GstreamerVideo.cpp | 1 - GstreamerHelper/GstreamerVideoStream.cpp | 1 - GstreamerHelper/dllmain.cpp | 19 - GstreamerHelper/stdafx.cpp | 8 - GstreamerHelper/stdafx.h | 16 - GstreamerHelper/targetver.h | 8 - Vocaluxe/Base/CConfig.cs | 2 +- Vocaluxe/Base/CSound.cs | 5 - .../Playback/Gstreamer/CGstreamerAudio.cs | 162 --------- .../Gstreamer/CGstreamerAudioWrapper.cs | 119 ------ Vocaluxe/Vocaluxe.csproj | 2 - VocaluxeLib/Enums.cs | 1 - gstreamerhelper/VocaluxeClock.cpp | 1 - 19 files changed, 2 insertions(+), 1117 deletions(-) delete mode 100644 GstreamerHelper/GstreamerAudio.cpp delete mode 100644 GstreamerHelper/GstreamerAudio.h delete mode 100644 GstreamerHelper/GstreamerAudioStream.cpp delete mode 100644 GstreamerHelper/GstreamerAudioStream.h delete mode 100644 GstreamerHelper/dllmain.cpp delete mode 100644 GstreamerHelper/stdafx.cpp delete mode 100644 GstreamerHelper/stdafx.h delete mode 100644 GstreamerHelper/targetver.h delete mode 100644 Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs delete mode 100644 Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs diff --git a/GstreamerHelper/GstreamerAudio.cpp b/GstreamerHelper/GstreamerAudio.cpp deleted file mode 100644 index 79b0d4f5..00000000 --- a/GstreamerHelper/GstreamerAudio.cpp +++ /dev/null @@ -1,254 +0,0 @@ -#include "stdafx.h" -#include "GstreamerAudio.h" - -#define DllExport extern "C" __declspec(dllexport) - -map Streams; -queue IDs; -float GlobalVolume = 1.f; -EXTERN_C IMAGE_DOS_HEADER __ImageBase; -DllExport void SetLogCallback (LogCallback Callback) -{ - Log = Callback; -} - -DllExport bool Init() -{ - for(int i = 0; i < 1000; i++) - { - IDs.push(i); - } -#if _WIN64 - SetDllDirectory(L".\\x64\\gstreamer"); -#else - SetDllDirectory(L".\\x86\\gstreamer"); -#endif - - gst_init(NULL, NULL); - GstRegistry* registry = gst_registry_get(); - -#if _WIN64 - gst_registry_scan_path(registry, ".\\x64\\gstreamer"); -#else - gst_registry_scan_path(registry, ".\\x86\\gstreamer"); -#endif - - return true; -} - - -DllExport void SetGlobalVolume(float Volume) -{ - map::iterator p; - - for(p = Streams.begin(); p != Streams.end(); p++) { - p->second->SetStreamVolumeMax(Volume); - } - GlobalVolume = Volume; -} - -DllExport float GetGlobalVolume(){ - return GlobalVolume; -} - -DllExport int GetStreamCount(void) -{ - return Streams.size(); -} - -DllExport void CloseAll(void) -{ - map::iterator p; - - for(p = Streams.begin(); p != Streams.end(); p++) { - p->second->Close(); - } -} - -DllExport int Load(const wchar_t* Media) -{ - GstreamerAudioStream *s = new GstreamerAudioStream(IDs.front()); - Streams.insert(pair (IDs.front(), s)); - IDs.pop(); - int result = s->Load(Media); - s->SetStreamVolume(1.f); - s->SetStreamVolumeMax(GlobalVolume); - return result; -} - -DllExport int LoadPrescan(const wchar_t* Media, bool Prescan) -{ - GstreamerAudioStream *s = new GstreamerAudioStream(IDs.front()); - Streams.insert(pair (IDs.front(), s)); - IDs.pop(); - int result = s->Load(Media, Prescan); - s->SetStreamVolume(1.f); - s->SetStreamVolumeMax(GlobalVolume); - return result; -} - -DllExport void Close(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - delete it->second; - IDs.push(it->first); - Streams.erase(it); - } -} - -DllExport void Play(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->Play(); - } -} - -DllExport void PlayLoop(int Stream, bool Loop) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->Play(Loop); - } -} - -DllExport void Pause(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->Pause(); - } -} - -DllExport void Stop(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->Stop(); - } -} - -DllExport void Fade(int Stream, float TargetVolume, float Seconds) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->Fade(TargetVolume, Seconds); - } -} - -DllExport void FadeAndPause(int Stream, float TargetVolume, float Seconds) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->FadeAndPause(TargetVolume, Seconds); - } -} - -DllExport void FadeAndStop(int Stream, float TargetVolume, float Seconds) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - it->second->FadeAndStop(TargetVolume, Seconds); - } -} - -DllExport void SetStreamVolume(int Stream, float Volume) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->SetStreamVolume(Volume); - } -} - -DllExport float GetLength(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->GetLength(); - } - else return -1.0; -} - -DllExport float GetPosition(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->GetPosition(); - } - else return -1; -} - -DllExport bool IsPlaying(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->IsPlaying(); - } - else return false; -} - -DllExport bool IsPaused(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->IsPaused(); - } - else return false; -} - -DllExport bool IsFinished(int Stream) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->IsFinished(); - } - else return false; -} - -DllExport void SetPosition(int Stream, float Position) -{ - map::iterator it = Streams.find(Stream); - if(it != Streams.end()) - { - return it->second->SetPosition(Position); - } -} - -DllExport void Update(void) -{ - map::iterator p = Streams.begin(); - - while(p != Streams.end()) - { - if(p->second->Closed) - { - delete p->second; - IDs.push(p->first); - Streams.erase(p++); - } - else { - p->second->Update(); - ++p; - } - } -} - -void LogError(const char* msg) -{ - Log(msg); -} \ No newline at end of file diff --git a/GstreamerHelper/GstreamerAudio.h b/GstreamerHelper/GstreamerAudio.h deleted file mode 100644 index 75f2d6f5..00000000 --- a/GstreamerHelper/GstreamerAudio.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include -#include -#include -#include "gst/gst.h" -#include "GstreamerAudioStream.h" -#include "gst\gst.h" - -#define DllExport extern "C" __declspec(dllexport) - -using namespace std; - - typedef void (__stdcall * LogCallback)(const char* text); - static LogCallback Log; - - DllExport void SetLogCallback(LogCallback Callback); - - DllExport bool Init(); - DllExport void SetGlobalVolume(float Volume); - DllExport float GetGlobalVolume(); - DllExport int GetStreamCount(void); - DllExport void CloseAll(void); - - //Stream handling - DllExport int Load(const wchar_t* Media); - DllExport int LoadPrescan(const wchar_t* Media, bool Prescan); - DllExport void Close(int Stream); - - DllExport void Play(int Stream); - DllExport void PlayLoop(int Stream, bool Loop); - DllExport void Pause(int Stream); - DllExport void Stop(int Stream); - DllExport void Fade(int Stream, float TargetVolume, float Seconds); - DllExport void FadeAndPause(int Stream, float TargetVolume, float Seconds); - DllExport void FadeAndStop(int Stream, float TargetVolume, float Seconds); - DllExport void SetStreamVolume(int Stream, float Volume); - - DllExport float GetLength(int Stream); - DllExport float GetPosition(int Stream); - - DllExport bool IsPlaying(int Stream); - DllExport bool IsPaused(int Stream); - DllExport bool IsFinished(int Stream); - - DllExport void SetPosition(int Stream, float Position); - - DllExport void Update(); - - void LogError(const char* msg); diff --git a/GstreamerHelper/GstreamerAudioStream.cpp b/GstreamerHelper/GstreamerAudioStream.cpp deleted file mode 100644 index ed8d2c4a..00000000 --- a/GstreamerHelper/GstreamerAudioStream.cpp +++ /dev/null @@ -1,338 +0,0 @@ -#include "stdafx.h" -#include "GstreamerAudioStream.h" - - -typedef enum { - GST_PLAY_FLAG_VIDEO = (1 << 0), - GST_PLAY_FLAG_AUDIO = (1 << 1), - GST_PLAY_FLAG_TEXT = (1 << 2), - GST_PLAY_FLAG_VIS = (1 << 3), - GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4), - GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5), - GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6), - GST_PLAY_FLAG_DOWNLOAD = (1 << 7), - GST_PLAY_FLAG_BUFFERING = (1 << 8), - GST_PLAY_FLAG_DEINTERLACE = (1 << 9), - GST_PLAY_FLAG_SOFT_COLORBALANCE = (1 << 10) -} GstPlayFlags; - -GstreamerAudioStream::GstreamerAudioStream(int id) -{ - ID = id; - MaxVolume = 1.0; - Volume = 1.0; - Duration = -1; - Loop = false; - Running = true; - - Finished = false; - - //Fading - FadeTimer = g_timer_new(); - FadeTime = 0.0; - TargetVolume = 1.0; - StartVolume = 1.0; - CloseStreamAfterFade = false; - PauseStreamAfterFade = false; - Fading = false; - - Closed = false; -} - - -GstreamerAudioStream::~GstreamerAudioStream(void) -{ - Close(); -} - -// Loads a stream but does not wait for it to get initialized, -// so querying duration or position directly after initialization might -// return strange values! To work around this use the prescan load function! -int GstreamerAudioStream::Load(const wchar_t* Media) -{ - Element = gst_element_factory_make("playbin", "playbin"); - - Convert = gst_element_factory_make("audioconvert", "audioconvert"); - Audiosink = gst_element_factory_make("directsoundsink", "directsoundsink"); - SinkBin = gst_bin_new("SinkBin"); - gst_bin_add_many (GST_BIN (SinkBin), Convert, Audiosink, NULL); - gst_element_link_many (Convert, Audiosink, NULL); - Pad = gst_element_get_static_pad (Convert, "sink"); - GhostPad = gst_ghost_pad_new ("sink", Pad); - gst_pad_set_active (GhostPad, TRUE); - gst_element_add_pad (SinkBin, GhostPad); - - Bus = gst_element_get_bus(Element); - if(!Element) - { - LogError ("Could not create element!"); - return -1; - } - Running = true; - gst_element_set_state(Element, GST_STATE_NULL); - g_object_set(Element, "uri", Media, NULL); - g_object_set(Element, "audio-sink", SinkBin, NULL); - g_object_set(Element, "flags", GST_PLAY_FLAG_AUDIO, NULL); - - gst_element_set_state(Element, GST_STATE_PAUSED); - - return ID; -} - -//Loads a stream and waits for its initialization -int GstreamerAudioStream::Load(const wchar_t* Media, bool Prescan) -{ - Load(Media); - if(Prescan){ - gst_bus_timed_pop_filtered(Bus, -1, GST_MESSAGE_ASYNC_DONE); - //Workaround: Waiting for the stream to be loaded (Length>0) - for(int i=0;i<40;i++){ - if(GetLength()>0.f) - break; - Sleep(5); - } - } - return ID; -} - -void GstreamerAudioStream::Close(void) -{ - if(Element) - { - gst_element_set_state(Element, GST_STATE_NULL); - gst_object_unref(GST_OBJECT (Element)); - } - - /* without that there are no crashes any more. but i don't know if there is a memory leak if we do that. - if(Bus) - gst_object_unref(Bus); - if(Message) - gst_message_unref(Message); - if(Convert) - gst_object_unref(Convert); - if(Audiosink) - gst_object_unref(Audiosink); - if(Pad) - gst_object_unref(Pad); - if(GhostPad) - gst_object_unref(GhostPad); - if(SinkBin) - gst_object_unref(SinkBin); - */ - - if(FadeTimer) - g_timer_destroy (FadeTimer); - - Running = false; - Closed = true; -} - -void GstreamerAudioStream::Play(void) -{ - if(Element) - { - PauseStreamAfterFade = false; - Running = true; - if(gst_element_set_state(Element, GST_STATE_PLAYING) == GST_STATE_CHANGE_ASYNC) - gst_bus_timed_pop_filtered(Bus, -1, GST_MESSAGE_ASYNC_DONE); - SetStreamVolume(Volume * 100.0); - } - -} - -void GstreamerAudioStream::Play(bool Loop) -{ - this->Loop = Loop; - Play(); -} - -void GstreamerAudioStream::Pause() -{ - Running = true; - if(Element) - gst_element_set_state(Element, GST_STATE_PAUSED); - SetStreamVolume(Volume * 100.0); -} - -void GstreamerAudioStream::Stop() -{ - if(Element) - { - gst_element_set_state(Element, GST_STATE_NULL); - gst_element_seek_simple(Element, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, 0); - } -} - -void GstreamerAudioStream::SetStreamVolume(float Volume) -{ - this->Volume = Volume / 100.0; - if(Element) - { - g_object_set(this->Element, "volume", (gdouble)(Volume / 100.0) * MaxVolume, NULL); - } -} - -void GstreamerAudioStream::SetStreamVolumeMax(float MaxVolume) -{ - this->MaxVolume = (gdouble) (MaxVolume / 100.0); - if(Element) - { - g_object_set(this->Element, "volume", Volume * this->MaxVolume, NULL); - } -} - -float GstreamerAudioStream::GetLength() -{ - if(Duration <= 0.f) - RefreshDuration(); - return Duration; -} - -void GstreamerAudioStream::RefreshDuration() -{ - if(Element) - { - gint64 time = -1000; - if(gst_element_query_duration(Element, GST_FORMAT_TIME, &time)) - Duration = (gfloat)((gdouble)time/GST_SECOND); - } -} - -float GstreamerAudioStream::GetPosition() -{ - if(Element) - { - gint64 time = 0; - if (gst_element_query_position(Element, GST_FORMAT_TIME, &time)) - return (float)((gdouble)time/GST_SECOND); - else - return -1; - } - else return -1; -} - -void GstreamerAudioStream::SetPosition(float Position) -{ - if(Element) - { - //Not sure if we need GST_SEEK_FLAG_ACCURATE - if(!gst_element_seek_simple(Element, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE), Position * GST_SECOND)) - LogError("Seek failed"); - } -} - -void GstreamerAudioStream::Fade(float TargetVolume, float Seconds) -{ - Fading = true; - g_timer_stop(FadeTimer); - StartVolume = Volume; - this->TargetVolume = TargetVolume / 100.0; - FadeTime = (gdouble)Seconds; - g_timer_start(FadeTimer); -} - -void GstreamerAudioStream::FadeAndPause(float TargetVolume, float Seconds) -{ - PauseStreamAfterFade = true; - - Fade(TargetVolume, Seconds); -} - -void GstreamerAudioStream::FadeAndStop(float TargetVolume, float Seconds) -{ - CloseStreamAfterFade = true; - - Fade(TargetVolume, Seconds); -} - -bool GstreamerAudioStream::IsPlaying() -{ - GstStateChangeReturn ret; - GstState current, pending; - - //This might block!!! - ret = gst_element_get_state (Element, ¤t, &pending, GST_CLOCK_TIME_NONE); - return current == GST_STATE_PLAYING && !Finished; -} - -bool GstreamerAudioStream::IsPaused() -{ - GstStateChangeReturn ret; - GstState current, pending; - - //This might block!!! - ret = gst_element_get_state (Element, ¤t, &pending, GST_CLOCK_TIME_NONE); - return current == GST_STATE_PAUSED && !Finished; -} - -bool GstreamerAudioStream::IsFinished() -{ - return Finished; -} - -void GstreamerAudioStream::UpdateVolume() -{ - if (Fading) - { - if (g_timer_elapsed(FadeTimer, NULL) < FadeTime) { - gdouble vol = (StartVolume + (TargetVolume - StartVolume) * (g_timer_elapsed(FadeTimer, NULL) / FadeTime)); - SetStreamVolume(100.0 * vol); - } - else - { - SetStreamVolume (TargetVolume * 100.0); - g_timer_stop(FadeTimer); - Fading = false; - - if (CloseStreamAfterFade) - { - Closed = true; - } - - if (PauseStreamAfterFade) - Pause(); - } - } -} - -void GstreamerAudioStream::Update() -{ - if(Running) { - UpdateVolume(); - Message = gst_bus_pop (Bus); - - /* Parse message */ - if (Message != NULL) { - GError *err; - gchar *debug_info; - string m; - - switch (GST_MESSAGE_TYPE (Message)) { - case GST_MESSAGE_ERROR: - gst_message_parse_error (Message, &err, &debug_info); - m = err->message; - LogError(m.c_str()); - g_clear_error (&err); - g_free (debug_info); - break; - case GST_MESSAGE_DURATION_CHANGED: - RefreshDuration(); - break; - case GST_MESSAGE_STATE_CHANGED: - break; - case GST_MESSAGE_EOS: - if(Loop) - SetPosition(0); - else - Finished = true; - break; - default: - /* We should not reach here */ - //LogError ("Unexpected message received.\n"); - break; - } - gst_message_unref (Message); - } - } -} - diff --git a/GstreamerHelper/GstreamerAudioStream.h b/GstreamerHelper/GstreamerAudioStream.h deleted file mode 100644 index 7f46488d..00000000 --- a/GstreamerHelper/GstreamerAudioStream.h +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once -#pragma warning(disable: 4244) // possible loss of data -#pragma warning(disable: 4267) // possible loss of data -#pragma warning(disable: 4800) - -#include -#include "gst/gst.h" -#include "GstreamerAudio.h" - -using namespace std; - -class GstreamerAudioStream -{ -public: - int ID; - bool Closed; - - GstreamerAudioStream(int ID); - ~GstreamerAudioStream(void); - - int Load(const wchar_t* Media); - int Load(const wchar_t* Media, bool Prescan); - void Close(); - - void Play(); - void Play(bool Loop); - void Pause(); - void Stop(); - - void Fade(float TargetVolume, float Seconds); - void FadeAndPause(float TargetVolume, float Seconds); - void FadeAndStop(float TargetVolume, float Seconds); - void SetStreamVolume(float Volume); - void SetStreamVolumeMax(float Volume); - - float GetLength(); - float GetPosition(); - void SetPosition(float Position); - - bool IsPlaying(); - bool IsPaused(); - bool IsFinished(); - - void Update(); -private: - GstElement *Element, *Audiosink, *Convert, *SinkBin; - GstPad *Pad, *GhostPad; - GstBus *Bus; - GstMessage *Message; - - gboolean Running; - gboolean Loop; - - gboolean Finished; - - gdouble MaxVolume; - gdouble Volume; - - gfloat Duration; - - GTimer *FadeTimer; - - gdouble FadeTime; - gdouble TargetVolume; - gdouble StartVolume; - gboolean CloseStreamAfterFade; - gboolean PauseStreamAfterFade; - gboolean Fading; - - void RefreshDuration(); - void UpdateVolume(); -}; - diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj index 1c6e02b6..facd22f3 100644 --- a/GstreamerHelper/GstreamerHelper.vcxproj +++ b/GstreamerHelper/GstreamerHelper.vcxproj @@ -169,7 +169,7 @@ - Use + NotUsing Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) @@ -282,47 +282,13 @@ - - - - - - false - false - - - - - false - false - false - false - - - - - - - - - - - - - Create - Create - Create - Create - Create - Create - diff --git a/GstreamerHelper/GstreamerHelper.vcxproj.filters b/GstreamerHelper/GstreamerHelper.vcxproj.filters index fc78f1e9..1e3c4788 100644 --- a/GstreamerHelper/GstreamerHelper.vcxproj.filters +++ b/GstreamerHelper/GstreamerHelper.vcxproj.filters @@ -15,18 +15,6 @@ - - Headerdateien - - - Headerdateien - - - Headerdateien - - - Headerdateien - Headerdateien @@ -38,18 +26,6 @@ - - Quelldateien - - - Quelldateien - - - Quelldateien - - - Quelldateien - Quelldateien diff --git a/GstreamerHelper/GstreamerVideo.cpp b/GstreamerHelper/GstreamerVideo.cpp index 3393e2a5..b5b98d97 100644 --- a/GstreamerHelper/GstreamerVideo.cpp +++ b/GstreamerHelper/GstreamerVideo.cpp @@ -1,4 +1,3 @@ -#include "stdafx.h" #include "GstreamerVideo.h" #include "GstreamerVideoStream.h" diff --git a/GstreamerHelper/GstreamerVideoStream.cpp b/GstreamerHelper/GstreamerVideoStream.cpp index 93c98df0..e90d321d 100644 --- a/GstreamerHelper/GstreamerVideoStream.cpp +++ b/GstreamerHelper/GstreamerVideoStream.cpp @@ -1,4 +1,3 @@ -#include "stdafx.h" #include "GstreamerVideoStream.h" typedef enum { diff --git a/GstreamerHelper/dllmain.cpp b/GstreamerHelper/dllmain.cpp deleted file mode 100644 index aa837bd4..00000000 --- a/GstreamerHelper/dllmain.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// dllmain.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung. -#include "stdafx.h" - -BOOL APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} - diff --git a/GstreamerHelper/stdafx.cpp b/GstreamerHelper/stdafx.cpp deleted file mode 100644 index 84f3b8da..00000000 --- a/GstreamerHelper/stdafx.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// stdafx.cpp : Quelldatei, die nur die Standard-Includes einbindet. -// GstreamerHelper.pch ist der vorkompilierte Header. -// stdafx.obj enthält die vorkompilierten Typinformationen. - -#include "stdafx.h" - -// TODO: Auf zusätzliche Header verweisen, die in STDAFX.H -// und nicht in dieser Datei erforderlich sind. diff --git a/GstreamerHelper/stdafx.h b/GstreamerHelper/stdafx.h deleted file mode 100644 index fbc6220a..00000000 --- a/GstreamerHelper/stdafx.h +++ /dev/null @@ -1,16 +0,0 @@ -// stdafx.h : Includedatei für Standardsystem-Includedateien -// oder häufig verwendete projektspezifische Includedateien, -// die nur in unregelmäßigen Abständen geändert werden. -// - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN // Selten verwendete Teile der Windows-Header nicht einbinden. -// Windows-Headerdateien: -#include - - - -// TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen. diff --git a/GstreamerHelper/targetver.h b/GstreamerHelper/targetver.h deleted file mode 100644 index a7654135..00000000 --- a/GstreamerHelper/targetver.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -// Durch Einbeziehen von"SDKDDKVer.h" wird die höchste verfügbare Windows-Plattform definiert. - -// Wenn Sie die Anwendung für eine frühere Windows-Plattform erstellen möchten, schließen Sie "WinSDKVer.h" ein, und -// legen Sie das _WIN32_WINNT-Makro auf die zu unterstützende Plattform fest, bevor Sie "SDKDDKVer.h" einschließen. - -#include diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 97eaa16e..cc523c70 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -95,7 +95,7 @@ namespace Vocaluxe.Base public static ELyricStyle LyricStyle = ELyricStyle.Slide; // Sound - public static EPlaybackLib PlayBackLib = EPlaybackLib.Gstreamer; + public static EPlaybackLib PlayBackLib = EPlaybackLib.GstreamerSharp; public static EBufferSize AudioBufferSize = EBufferSize.B2048; public static int AudioLatency; private static int _BackgroundMusicVolume = 30; diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index d00d8e71..4a39e03e 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -18,7 +18,6 @@ using System; using System.IO; using Vocaluxe.Lib.Sound.Playback; -using Vocaluxe.Lib.Sound.Playback.Gstreamer; using Vocaluxe.Lib.Sound.Playback.GstreamerSharp; using Vocaluxe.Lib.Sound.Playback.OpenAL; using Vocaluxe.Lib.Sound.Playback.PortAudio; @@ -51,10 +50,6 @@ namespace Vocaluxe.Base _Playback = new COpenALPlay(); break; - case EPlaybackLib.Gstreamer: - _Playback = new CGstreamerAudio(); - break; - case EPlaybackLib.GstreamerSharp: _Playback = new CGstreamerSharpAudio(); break; diff --git a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs deleted file mode 100644 index 4dcd9006..00000000 --- a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudio.cs +++ /dev/null @@ -1,162 +0,0 @@ -#region license -// This file is part of Vocaluxe. -// -// Vocaluxe is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Vocaluxe is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Vocaluxe. If not, see . -#endregion - -using System; -using Vocaluxe.Base; - -namespace Vocaluxe.Lib.Sound.Playback.Gstreamer -{ - class CGstreamerAudio : IPlayback - { - private readonly CGstreamerAudioWrapper.LogCallback _LogCallback; - - #region log - private static void _LogHandler(string text) - { - CLog.LogError(text); - } - #endregion log - - public CGstreamerAudio() - { - _LogCallback = _LogHandler; - CGstreamerAudioWrapper.SetLogCallback(_LogCallback); - } - - public bool Init() - { - return CGstreamerAudioWrapper.Init(); - } - - public void Close() - { - CloseAll(); - CGstreamerAudioWrapper.SetLogCallback(null); - } - - public float GetGlobalVolume() - { - return CGstreamerAudioWrapper.GetGlobalVolume(); - } - - public void SetGlobalVolume(float volume) - { - CGstreamerAudioWrapper.SetGlobalVolume(volume); - } - - public int GetStreamCount() - { - return CGstreamerAudioWrapper.GetStreamCount(); - } - - public void CloseAll() - { - CGstreamerAudioWrapper.CloseAll(); - } - - public int Load(string medium, bool loop = false, bool prescan = false) - { - var u = new Uri(medium); - int i = CGstreamerAudioWrapper.Load(u.AbsoluteUri, prescan); - //Workaround b/c I'm lazy: - CGstreamerAudioWrapper.Play(i, loop); - CGstreamerAudioWrapper.Pause(i); - return i; - } - - public void Close(int stream) - { - CGstreamerAudioWrapper.Close(stream); - } - - public void Play(int stream) - { - CGstreamerAudioWrapper.Play(stream); - } - - public void Pause(int stream) - { - CGstreamerAudioWrapper.Pause(stream); - } - - public void Stop(int stream) - { - CGstreamerAudioWrapper.Stop(stream); - } - - public void Fade(int streamID, float targetVolume, float seconds, EStreamAction afterFadeAction = EStreamAction.Nothing) - { - switch (afterFadeAction) - { - case EStreamAction.Nothing: - CGstreamerAudioWrapper.Fade(streamID, targetVolume, seconds); - break; - case EStreamAction.Pause: - CGstreamerAudioWrapper.FadeAndPause(streamID, targetVolume, seconds); - break; - case EStreamAction.Stop: - CGstreamerAudioWrapper.FadeAndStop(streamID, targetVolume, seconds); - break; - case EStreamAction.Close: - CGstreamerAudioWrapper.FadeAndStop(streamID, targetVolume, seconds); - break; - default: - throw new ArgumentOutOfRangeException("afterFadeAction"); - } - } - - public void SetStreamVolume(int stream, float volume) - { - CGstreamerAudioWrapper.SetStreamVolume(stream, volume); - } - - public float GetLength(int stream) - { - return CGstreamerAudioWrapper.GetLength(stream); - } - - public float GetPosition(int stream) - { - return CGstreamerAudioWrapper.GetPosition(stream); - } - - public bool IsPlaying(int stream) - { - return CGstreamerAudioWrapper.IsPlaying(stream); - } - - public bool IsPaused(int stream) - { - return CGstreamerAudioWrapper.IsPaused(stream); - } - - public bool IsFinished(int stream) - { - return CGstreamerAudioWrapper.IsFinished(stream); - } - - public void SetPosition(int stream, float position) - { - CGstreamerAudioWrapper.SetPosition(stream, position); - } - - public void Update() - { - CGstreamerAudioWrapper.Update(); - } - } -} \ No newline at end of file diff --git a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs b/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs deleted file mode 100644 index f091c887..00000000 --- a/Vocaluxe/Lib/Sound/Playback/Gstreamer/CGstreamerAudioWrapper.cs +++ /dev/null @@ -1,119 +0,0 @@ -#region license -// This file is part of Vocaluxe. -// -// Vocaluxe is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Vocaluxe is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Vocaluxe. If not, see . -#endregion - -using System.Runtime.InteropServices; - -namespace Vocaluxe.Lib.Sound.Playback.Gstreamer -{ - public static class CGstreamerAudioWrapper - { - #region arch -#if ARCH_X86 -#if WIN - private const string _Dll = "x86\\gstreamer\\GstreamerHelper.dll"; -#endif -#endif - -#if ARCH_X64 -#if WIN - private const string _Dll = "x64\\gstreamer\\GstreamerHelper.dll"; -#endif -#endif - #endregion arch - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - public delegate void LogCallback(string message); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetLogCallback(LogCallback c); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool Init(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetGlobalVolume(float volume); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern float GetGlobalVolume(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern int GetStreamCount(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void CloseAll(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern int Load(string media); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LoadPrescan")] - public static extern int Load(string media, - [MarshalAs(UnmanagedType.U1)] bool prescan); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Close(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Play(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl, EntryPoint = "PlayLoop")] - public static extern void Play(int stream, - [MarshalAs(UnmanagedType.U1)] bool loop); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Pause(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Stop(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Fade(int stream, float targetVolume, float seconds); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void FadeAndPause(int stream, float targetVolume, float seconds); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void FadeAndStop(int stream, float targetVolume, float seconds); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetStreamVolume(int stream, float volume); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern float GetLength(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern float GetPosition(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool IsPlaying(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool IsPaused(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool IsFinished(int stream); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetPosition(int stream, float position); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void Update(); - } -} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 8cd6f665..3319c884 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -308,14 +308,12 @@ - - diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs index 2f647bd1..cba7554d 100644 --- a/VocaluxeLib/Enums.cs +++ b/VocaluxeLib/Enums.cs @@ -144,7 +144,6 @@ namespace VocaluxeLib { PortAudio, OpenAL, - Gstreamer, GstreamerSharp } diff --git a/gstreamerhelper/VocaluxeClock.cpp b/gstreamerhelper/VocaluxeClock.cpp index ba84cfd0..d1a47f7a 100644 --- a/gstreamerhelper/VocaluxeClock.cpp +++ b/gstreamerhelper/VocaluxeClock.cpp @@ -1,4 +1,3 @@ -#include "stdafx.h" #include "VocaluxeClock.h" static void vocaluxe_clock_class_init (VocaluxeClockClass * klass); From fda3541e47f953e9e4c0b17c88be3ff91224440b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 6 May 2014 22:11:28 +0200 Subject: [PATCH 106/116] Remove unused imports --- .../Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs | 1 - Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs | 4 ---- 2 files changed, 5 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs index 3bc2a989..651dcd21 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs @@ -15,7 +15,6 @@ // along with Vocaluxe. If not, see . #endregion -using System.Collections.Generic; using Gst; namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs index 12f7cd2b..74a3704e 100644 --- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs +++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs @@ -15,11 +15,7 @@ // along with Vocaluxe. If not, see . #endregion -using System.Linq; -using System.Threading; using OpenTK.Audio; -using System; -using System.Collections.Generic; namespace Vocaluxe.Lib.Sound.Playback.OpenAL { From cc08e01590659821f1e85fdf4d4133ebf3dfeeae Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 6 May 2014 23:30:22 +0200 Subject: [PATCH 107/116] Split off CDataBase into individual classes (more to come) --- Vocaluxe/Base/CDataBase.cs | 1522 +----------------------- Vocaluxe/Lib/Database/CCoverDB.cs | 234 ++++ Vocaluxe/Lib/Database/CDatabaseBase.cs | 112 ++ Vocaluxe/Lib/Database/CHighscoreDB.cs | 1021 ++++++++++++++++ Vocaluxe/Lib/Database/CResourceDB.cs | 253 ++++ Vocaluxe/Vocaluxe.csproj | 4 + 6 files changed, 1663 insertions(+), 1483 deletions(-) create mode 100644 Vocaluxe/Lib/Database/CCoverDB.cs create mode 100644 Vocaluxe/Lib/Database/CDatabaseBase.cs create mode 100644 Vocaluxe/Lib/Database/CHighscoreDB.cs create mode 100644 Vocaluxe/Lib/Database/CResourceDB.cs diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 7721f663..065e7170 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -17,65 +17,36 @@ using System; using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.Drawing.Imaging; using System.IO; -using System.Runtime.InteropServices; -using System.Text; -using Community.CsharpSqlite; +using Vocaluxe.Lib.Database; using VocaluxeLib; using VocaluxeLib.Draw; -using VocaluxeLib.Songs; -#if WIN -using System.Data.SQLite; - -#else -using Mono.Data.Sqlite; -using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection; -using SQLiteTransaction = Mono.Data.Sqlite.SqliteTransaction; -using SQLiteCommand = Mono.Data.Sqlite.SqliteCommand; -using SQLiteDataReader = Mono.Data.Sqlite.SqliteDataReader; -#endif namespace Vocaluxe.Base { static class CDataBase { - private struct SData - { - public int Id; - public long Ticks; - public string Str1; - public string Str2; - } - - private static string _HighscoreFilePath; - private static string _CoverFilePath; - private static string _CreditsRessourcesFilePath; - - //You have to lock all actions using cover connection or transaction, otherwhise order is not guaranted - private static readonly object _CoverMutex = new object(); - private static SQLiteConnection _ConnectionCover; - private static SQLiteTransaction _TransactionCover; + private static CHighscoreDB _HighscoreDB; + private static CCoverDB _CoverDB; + private static CResourceDB _ResourceDB; public static bool Init() { - _HighscoreFilePath = Path.Combine(Environment.CurrentDirectory, CConfig.FileHighscoreDB); - _CoverFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB); - _CreditsRessourcesFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileCreditsRessourcesDB); + _HighscoreDB = new CHighscoreDB(Path.Combine(Environment.CurrentDirectory, CConfig.FileHighscoreDB)); + _CoverDB = new CCoverDB(Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB)); + _ResourceDB = new CResourceDB(Path.Combine(Environment.CurrentDirectory, CSettings.FileCreditsRessourcesDB)); - if (!_InitHighscoreDB()) + if (!_HighscoreDB.Init()) { CLog.LogError("Error initializing Highscore-DB", true, true); return false; } - if (!_InitCoverDB()) + if (!_CoverDB.Init()) { CLog.LogError("Error initializing Cover-DB", true, true); return false; } - if (!_InitCreditsRessourcesDB()) + if (!_ResourceDB.Init()) { CLog.LogError("Error initializing Credits-DB", true, true); return false; @@ -83,1473 +54,58 @@ namespace Vocaluxe.Base return true; } - #region Highscores + public static void Close() + { + if (_HighscoreDB != null) + { + _HighscoreDB.Close(); + _HighscoreDB = null; + } + if (_CoverDB != null) + { + _CoverDB.Close(); + _CoverDB = null; + } + if (_ResourceDB != null) + { + _ResourceDB.Close(); + _ResourceDB = null; + } + } + public static bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out DateTime dateAdded, out int highscoreID) { - string sArtist; - string sTitle; - int songID; - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - - try - { - connection.Open(); - } - catch (Exception) {} - - using (var command = new SQLiteCommand(connection)) - { - songID = _GetDataBaseSongID(artist, title, 0, command); - highscoreID = songID; - } - } - return _GetDataBaseSongInfos(songID, out sArtist, out sTitle, out numPlayed, out dateAdded, _HighscoreFilePath); - } - - public static void IncreaseSongCounter(int dataBaseSongID) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - - try - { - connection.Open(); - } - catch (Exception) {} - - using (var command = new SQLiteCommand(connection)) - _IncreaseSongCounter(dataBaseSongID, command); - } - } - - public static int AddScore(string playerName, int score, int lineNr, long date, int medley, int duet, int shortSong, int difficulty, - string artist, string title, int numPlayed, string filePath) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return -1; - } - - using (var command = new SQLiteCommand(connection)) - { - int dataBaseSongID = _GetDataBaseSongID(artist, title, numPlayed, command); - int result = _AddScore(playerName, score, lineNr, date, medley, duet, shortSong, difficulty, dataBaseSongID, command); - return result; - } - } - } - - public static int AddScore(SPlayer player) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return -1; - } - - int medley = 0; - int duet = 0; - int shortSong = 0; - switch (player.GameMode) - { - case EGameMode.TR_GAMEMODE_MEDLEY: - medley = 1; - break; - case EGameMode.TR_GAMEMODE_DUET: - duet = 1; - break; - case EGameMode.TR_GAMEMODE_SHORTSONG: - shortSong = 1; - break; - } - - using (var command = new SQLiteCommand(connection)) - { - int dataBaseSongID = CSongs.GetSong(player.SongID).DataBaseSongID; - return _AddScore(CProfiles.GetPlayerName(player.ProfileID), (int)Math.Round(player.Points), player.VoiceNr, player.DateTicks, medley, - duet, shortSong, (int)CProfiles.GetDifficulty(player.ProfileID), dataBaseSongID, command); - } - } - } - - private static int _AddScore(string playerName, int score, int lineNr, long date, int medley, int duet, int shortSong, int difficulty, - int dataBaseSongID, SQLiteCommand command) - { - int lastInsertID = -1; - - if (dataBaseSongID >= 0) - { - command.CommandText = "SELECT id FROM Scores WHERE SongID = @SongID AND PlayerName = @PlayerName AND Score = @Score AND " + - "LineNr = @LineNr AND Date = @Date AND Medley = @Medley AND Duet = @Duet AND ShortSong = @ShortSong AND Difficulty = @Difficulty"; - command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID; - command.Parameters.Add("@PlayerName", DbType.String, 0).Value = playerName; - command.Parameters.Add("@Score", DbType.Int32, 0).Value = score; - command.Parameters.Add("@LineNr", DbType.Int32, 0).Value = lineNr; - command.Parameters.Add("@Date", DbType.Int64, 0).Value = date; - command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley; - command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet; - command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = shortSong; - command.Parameters.Add("@Difficulty", DbType.Int32, 0).Value = difficulty; - - SQLiteDataReader reader = null; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) {} - - if (reader != null && reader.HasRows) - { - if (reader.Read()) - return reader.GetInt32(0); - } - - if (reader != null) - reader.Dispose(); - - command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty) " + - "VALUES (@SongID, @PlayerName, @Score, @LineNr, @Date, @Medley, @Duet, @ShortSong, @Difficulty)"; - command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID; - command.Parameters.Add("@PlayerName", DbType.String, 0).Value = playerName; - command.Parameters.Add("@Score", DbType.Int32, 0).Value = score; - command.Parameters.Add("@LineNr", DbType.Int32, 0).Value = lineNr; - command.Parameters.Add("@Date", DbType.Int64, 0).Value = date; - command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley; - command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet; - command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = shortSong; - command.Parameters.Add("@Difficulty", DbType.Int32, 0).Value = difficulty; - command.ExecuteNonQuery(); - - //Read last insert line - command.CommandText = "SELECT id FROM Scores ORDER BY id DESC LIMIT 0, 1"; - - reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) - { - while (reader.Read()) - lastInsertID = reader.GetInt32(0); - reader.Dispose(); - } - } - - return lastInsertID; + return _HighscoreDB.GetDataBaseSongInfos(artist, title, out numPlayed, out dateAdded, out highscoreID); } public static List LoadScore(int songID, EGameMode gameMode) { - var scores = new List(); - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _HighscoreFilePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return scores; - } - - using (var command = new SQLiteCommand(connection)) - { - int medley = 0; - int duet = 0; - int shortSong = 0; - switch (gameMode) - { - case EGameMode.TR_GAMEMODE_MEDLEY: - medley = 1; - break; - case EGameMode.TR_GAMEMODE_DUET: - duet = 1; - break; - case EGameMode.TR_GAMEMODE_SHORTSONG: - shortSong = 1; - break; - } - - int dataBaseSongID = _GetDataBaseSongID(songID, command); - if (dataBaseSongID < 0) - return scores; - - command.CommandText = "SELECT PlayerName, Score, Date, Difficulty, LineNr, id FROM Scores " + - "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " + - "ORDER BY [Score] DESC"; - command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID; - command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley; - command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet; - command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = shortSong; - - SQLiteDataReader reader = command.ExecuteReader(); - if (reader != null && reader.HasRows) - { - while (reader.Read()) - { - var score = new SDBScoreEntry - { - Name = reader.GetString(0), - Score = reader.GetInt32(1), - Date = new DateTime(reader.GetInt64(2)).ToString("dd/MM/yyyy"), - Difficulty = (EGameDifficulty)reader.GetInt32(3), - VoiceNr = reader.GetInt32(4), - ID = reader.GetInt32(5) - }; - - scores.Add(score); - } - reader.Dispose(); - } - } - } - return scores; + return _HighscoreDB.LoadScore(songID, gameMode); } - private static void _IncreaseSongCounter(int dataBaseSongID, SQLiteCommand command) + public static int AddScore(SPlayer player) { - command.CommandText = "UPDATE Songs SET NumPlayed = NumPlayed + 1 WHERE [id] = @id"; - command.Parameters.Add("@id", DbType.Int32, 0).Value = dataBaseSongID; - command.ExecuteNonQuery(); + return _HighscoreDB.AddScore(player); } - private static int _GetDataBaseSongID(int songID, SQLiteCommand command) + public static void IncreaseSongCounter(int dataBaseSongID) { - CSong song = CSongs.GetSong(songID); - - if (song == null) - return -1; - - return _GetDataBaseSongID(song.Artist, song.Title, 0, command); + _HighscoreDB.IncreaseSongCounter(dataBaseSongID); } - private static int _GetDataBaseSongID(string artist, string title, int defNumPlayed, SQLiteCommand command) + public static bool GetCover(string fileName, ref CTexture tex, int maxSize) { - command.CommandText = "SELECT id FROM Songs WHERE [Title] = @title AND [Artist] = @artist"; - command.Parameters.Add("@title", DbType.String, 0).Value = title; - command.Parameters.Add("@artist", DbType.String, 0).Value = artist; - - SQLiteDataReader reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) - { - reader.Read(); - int id = reader.GetInt32(0); - reader.Dispose(); - return id; - } - - if (reader != null) - reader.Close(); - - command.CommandText = "INSERT INTO Songs (Title, Artist, NumPlayed, DateAdded) " + - "VALUES (@title, @artist, @numplayed, @dateadded)"; - command.Parameters.Add("@title", DbType.String, 0).Value = title; - command.Parameters.Add("@artist", DbType.String, 0).Value = artist; - command.Parameters.Add("@numplayed", DbType.Int32, 0).Value = defNumPlayed; - command.Parameters.Add("@dateadded", DbType.Int64, 0).Value = DateTime.Now.Ticks; - command.ExecuteNonQuery(); - - command.CommandText = "SELECT id FROM Songs WHERE [Title] = @title AND [Artist] = @artist"; - command.Parameters.Add("@title", DbType.String, 0).Value = title; - command.Parameters.Add("@artist", DbType.String, 0).Value = artist; - - reader = command.ExecuteReader(); - - if (reader != null) - { - reader.Read(); - int id = reader.GetInt32(0); - reader.Dispose(); - return id; - } - - return -1; - } - - private static bool _GetDataBaseSongInfos(int songID, out string artist, out string title, out int numPlayed, out DateTime dateAdded, string filePath) - { - artist = String.Empty; - title = String.Empty; - numPlayed = 0; - dateAdded = DateTime.Today; - - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "SELECT Artist, Title, NumPlayed, DateAdded FROM Songs WHERE [id] = @id"; - command.Parameters.Add("@id", DbType.String, 0).Value = songID; - - SQLiteDataReader reader; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - return false; - } - - if (reader != null && reader.HasRows) - { - reader.Read(); - artist = reader.GetString(0); - title = reader.GetString(1); - numPlayed = reader.GetInt32(2); - dateAdded = new DateTime(reader.GetInt64(3)); - reader.Dispose(); - return true; - } - if (reader != null) - reader.Dispose(); - } - } - - return false; - } - - private static bool _InitHighscoreDB() - { - string oldDBFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileOldHighscoreDB); - if (File.Exists(oldDBFilePath)) - { - if (File.Exists(_HighscoreFilePath)) - { - if (!_CreateOrConvert(oldDBFilePath)) - { - CLog.LogError("Cannot init Highscore DB: Error opening database: " + oldDBFilePath, true, true); - return false; - } - if (!_CreateOrConvert(_HighscoreFilePath)) - { - CLog.LogError("Cannot init Highscore DB: Error opening database: " + _HighscoreFilePath, true, true); - return false; - } - if (!_ImportData(oldDBFilePath)) - { - CLog.LogError("Cannot init Highscore DB: Error importing data", true, true); - return false; - } - } - else - { - File.Copy(oldDBFilePath, _HighscoreFilePath); - if (!_CreateOrConvert(_HighscoreFilePath)) - { - CLog.LogError("Cannot init Highscore DB: Error opening database: " + _HighscoreFilePath, true, true); - return false; - } - } - File.Delete(oldDBFilePath); - } - else if (!_CreateOrConvert(_HighscoreFilePath)) - { - CLog.LogError("Cannot init Highscore DB: Error opening database: " + _HighscoreFilePath, true, true); - return false; - } - return true; - } - - private static void _CreateHighscoreDB(string filePath) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; - command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.DatabaseHighscoreVersion; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER, DateAdded BIGING);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + - "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, ShortSong INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - } - } - } - - private static void _CreateHighscoreDBV1(string filePath) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, 1 )"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + - "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - } - } - } - - /// - /// Creates a new Vocaluxe Database if no file exists. Converts an existing old Ultrastar Deluxe highscore database into vocaluxe format. - /// - /// Database file path - /// - private static bool _CreateOrConvert(string filePath) - { - bool result = true; - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "PRAGMA user_version"; - SQLiteDataReader reader = command.ExecuteReader(); - reader.Read(); - - int version = reader.GetInt32(0); - - reader.Dispose(); - - //Check if old scores table exists - command.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='US_Scores';"; - reader = command.ExecuteReader(); - reader.Read(); - bool scoresTableExists = reader.HasRows; - - reader.Dispose(); - - command.CommandText = "SELECT Value FROM Version"; - reader = null; - - try - { - reader = command.ExecuteReader(); - } - catch (Exception) {} - - if (reader == null || reader.FieldCount == 0) - { - // create new database/tables - if (version == 1) - { - //Check for USDX 1.1 DB - _CreateHighscoreDBV1(filePath); - result &= !_ConvertFrom110(filePath); - result &= _UpdateDatabase(1, connection); - result &= _UpdateDatabase(2, connection); - } - else if (version == 0 && scoresTableExists) - { - //Check for USDX 1.01 or CMD Mod DB - _CreateHighscoreDBV1(filePath); - result &= _ConvertFrom101(filePath); - result &= _UpdateDatabase(1, connection); - result &= _UpdateDatabase(2, connection); - } - else - _CreateHighscoreDB(filePath); - } - else - { - reader.Read(); - int currentVersion = reader.GetInt32(0); - if (currentVersion < CSettings.DatabaseHighscoreVersion) - { - // update database - result &= _UpdateDatabase(currentVersion, connection); - } - } - - if (reader != null) - reader.Dispose(); - } - } - - return result; - } - - /// - /// Converts a USDX 1.1 database into the Vocaluxe format - /// - /// Database file path - /// True if succeeded - private static bool _ConvertFrom110(string filePath) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - using (var command = new SQLiteCommand(connection)) - { - //The USDX database has no column for LineNr, Medley and Duet so just fill 0 in there - command.CommandText = - "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; - command.ExecuteNonQuery(); - - var scores = new List(); - var songs = new List(); - - command.CommandText = "SELECT id, PlayerName, Date FROM Scores"; - SQLiteDataReader reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) - { - while (reader.Read()) - { - var data = new SData {Id = reader.GetInt32(0), Str1 = reader.GetString(1)}; - Int64 ticks = 0; - - try - { - ticks = reader.GetInt64(2); - } - catch {} - - data.Ticks = _UnixTimeToTicks((int)ticks); - - scores.Add(data); - } - reader.Close(); - } - - command.CommandText = "SELECT id, Artist, Title FROM Songs"; - - reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) - { - while (reader.Read()) - { - var data = new SData {Id = reader.GetInt32(0), Str1 = reader.GetString(1), Str2 = reader.GetString(2)}; - songs.Add(data); - } - } - - if (reader != null) - reader.Dispose(); - - SQLiteTransaction transaction = connection.BeginTransaction(); - // update Title and Artist strings - foreach (SData data in songs) - { - command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; - command.Parameters.Add("@title", DbType.String, 0).Value = data.Str2; - command.Parameters.Add("@artist", DbType.String, 0).Value = data.Str1; - command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; - command.ExecuteNonQuery(); - } - - // update player names - foreach (SData data in scores) - { - command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; - command.Parameters.Add("@player", DbType.String, 0).Value = data.Str1; - command.Parameters.Add("@date", DbType.Int64, 0).Value = data.Ticks; - command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; - command.ExecuteNonQuery(); - } - transaction.Commit(); - - //Delete old tables after conversion - command.CommandText = "DROP TABLE US_Scores;"; - command.ExecuteNonQuery(); - - command.CommandText = "DROP TABLE US_Songs;"; - command.ExecuteNonQuery(); - - command.CommandText = "DROP TABLE us_statistics_info;"; - command.ExecuteNonQuery(); - - //This versioning is not used in Vocaluxe so reset it to 0 - command.CommandText = "PRAGMA user_version = 0"; - command.ExecuteNonQuery(); - } - } - - return true; - } - - /// - /// Converts a USDX 1.01 or CMD 1.01 database to Vocaluxe format - /// - /// Database file path - /// True if succeeded - private static bool _ConvertFrom101(string filePath) - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + filePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "PRAGMA table_info(US_Scores);"; - bool dateExists = false; - using (SQLiteDataReader reader = command.ExecuteReader()) - { - //Check for column Date - while (reader.Read()) - { - for (int i = 0; i < reader.FieldCount; i++) - { - if (reader.GetName(i) == "name") - { - if (reader.GetString(i) == "Date") - dateExists = true; - break; - } - } - } - } - - //This is a USDX 1.01 DB - command.CommandText = !dateExists - ? "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', '0', '0', '0', Difficulty from US_Scores" - : "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; - command.ExecuteNonQuery(); - - // convert from CP1252 to UTF8 - var scores = new List(); - var songs = new List(); - - Sqlite3.sqlite3 oldDB; - int res = Sqlite3.sqlite3_open(filePath, out oldDB); - - if (res != Sqlite3.SQLITE_OK) - CLog.LogError("Error opening Database: " + filePath + " (" + Sqlite3.sqlite3_errmsg(oldDB) + ")"); - else - { - var stmt = new Sqlite3.Vdbe(); - res = Sqlite3.sqlite3_prepare_v2(oldDB, "SELECT id, Artist, Title FROM Songs", -1, ref stmt, 0); - - if (res != Sqlite3.SQLITE_OK) - CLog.LogError("Error query Database: " + filePath + " (" + Sqlite3.sqlite3_errmsg(oldDB) + ")"); - else - { - //Sqlite3.sqlite3_step(Stmt); - Encoding utf8 = Encoding.UTF8; - Encoding cp1252 = Encoding.GetEncoding(1252); - - while (Sqlite3.sqlite3_step(stmt) == Sqlite3.SQLITE_ROW) - { - var data = new SData {Id = Sqlite3.sqlite3_column_int(stmt, 0)}; - - byte[] bytes = Sqlite3.sqlite3_column_rawbytes(stmt, 1); - data.Str1 = bytes != null ? utf8.GetString(Encoding.Convert(cp1252, utf8, bytes)) : "Someone"; - - bytes = Sqlite3.sqlite3_column_rawbytes(stmt, 2); - data.Str2 = bytes != null ? utf8.GetString(Encoding.Convert(cp1252, utf8, bytes)) : "Someone"; - - songs.Add(data); - } - Sqlite3.sqlite3_finalize(stmt); - } - - stmt = new Sqlite3.Vdbe(); - - // ReSharper disable ConvertIfStatementToConditionalTernaryExpression - if (!dateExists) - // ReSharper restore ConvertIfStatementToConditionalTernaryExpression - res = Sqlite3.sqlite3_prepare_v2(oldDB, "SELECT id, PlayerName FROM Scores", -1, ref stmt, 0); - else - res = Sqlite3.sqlite3_prepare_v2(oldDB, "SELECT id, PlayerName, Date FROM Scores", -1, ref stmt, 0); - - if (res != Sqlite3.SQLITE_OK) - CLog.LogError("Error query Database: " + filePath + " (" + Sqlite3.sqlite3_errmsg(oldDB) + ")"); - else - { - //Sqlite3.sqlite3_step(Stmt); - Encoding utf8 = Encoding.UTF8; - Encoding cp1252 = Encoding.GetEncoding(1252); - - while (Sqlite3.sqlite3_step(stmt) == Sqlite3.SQLITE_ROW) - { - var data = new SData {Id = Sqlite3.sqlite3_column_int(stmt, 0)}; - - byte[] bytes = Sqlite3.sqlite3_column_rawbytes(stmt, 1); - data.Str1 = bytes != null ? utf8.GetString(Encoding.Convert(cp1252, utf8, bytes)) : "Someone"; - - if (dateExists) - data.Ticks = _UnixTimeToTicks(Sqlite3.sqlite3_column_int(stmt, 2)); - - scores.Add(data); - } - Sqlite3.sqlite3_finalize(stmt); - } - } - Sqlite3.sqlite3_close(oldDB); - - SQLiteTransaction transaction = connection.BeginTransaction(); - - // update Title and Artist strings - foreach (SData data in songs) - { - command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; - command.Parameters.Add("@title", DbType.String, 0).Value = data.Str2; - command.Parameters.Add("@artist", DbType.String, 0).Value = data.Str1; - command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; - command.ExecuteNonQuery(); - } - - // update player names - foreach (SData data in scores) - { - if (!dateExists) - command.CommandText = "UPDATE Scores SET [PlayerName] = @player WHERE [id] = @id"; - else - { - command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; - command.Parameters.Add("@date", DbType.Int64, 0).Value = data.Ticks; - } - command.Parameters.Add("@player", DbType.String, 0).Value = data.Str1; - command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; - command.ExecuteNonQuery(); - } - transaction.Commit(); - - //Delete old tables after conversion - command.CommandText = "DROP TABLE US_Scores;"; - command.ExecuteNonQuery(); - - command.CommandText = "DROP TABLE US_Songs;"; - command.ExecuteNonQuery(); - } - } - - return true; - } - - private static bool _UpdateDatabase(int currentVersion, SQLiteConnection connection) - { - bool updated = true; - - if (currentVersion < 2) - updated &= _ConvertV1toV2(connection); - if (currentVersion < 3) - updated &= _ConvertV2toV3(connection); - - return updated; - } - - private static bool _ConvertV1toV2(SQLiteConnection connection) - { - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "ALTER TABLE Scores ADD ShortSong INTEGER"; - command.ExecuteNonQuery(); - command.CommandText = "UPDATE Scores SET [ShortSong] = @ShortSong"; - command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = 0; - command.ExecuteNonQuery(); - command.CommandText = "UPDATE Version SET [Value] = @version"; - command.Parameters.Add("@version", DbType.Int32, 0).Value = 2; - command.ExecuteNonQuery(); - } - - return true; - } - - private static bool _ConvertV2toV3(SQLiteConnection connection) - { - var command = new SQLiteCommand(connection) {CommandText = "ALTER TABLE Songs ADD DateAdded BIGINT"}; - - command.ExecuteNonQuery(); - command.CommandText = "UPDATE Songs SET [DateAdded] = @DateAdded"; - command.Parameters.Add("@DateAdded", DbType.Int64, 0).Value = DateTime.Now.Ticks; - command.ExecuteNonQuery(); - command.CommandText = "UPDATE Version SET [Value] = @version"; - command.Parameters.Add("@version", DbType.Int32, 0).Value = 3; - command.ExecuteNonQuery(); - - //Read NumPlayed from Scores and save to Songs - command.CommandText = "SELECT SongID, Date FROM Scores ORDER BY Date ASC"; - - SQLiteDataReader reader; - try - { - reader = command.ExecuteReader(); - } - catch (Exception) - { - return false; - } - - long lastDateAdded = -1; - int lastID = -1; - DateTime dt = new DateTime(1, 1, 1, 0, 0, 5); - long sec = dt.Ticks; - List ids = new List(); - while (reader.Read()) - { - int id = reader.GetInt32(0); - long dateAdded = reader.GetInt64(1); - if (id != lastID || dateAdded > lastDateAdded + sec) - { - ids.Add(id); - lastID = id; - lastDateAdded = dateAdded; - } - } - reader.Dispose(); - - foreach (int id in ids) - _IncreaseSongCounter(id, command); - command.Dispose(); - - return true; - } - - private static bool _ImportData(string sourceDBPath) - { - #region open db - using (var connSource = new SQLiteConnection()) - { - connSource.ConnectionString = "Data Source=" + sourceDBPath; - - try - { - connSource.Open(); - } - catch (Exception e) - { - CLog.LogError("Error on import high score data. Can't open source database \"" + sourceDBPath + "\" (" + e.Message + ")"); - return false; - } - #endregion open db - - using (var cmdSource = new SQLiteCommand(connSource)) - { - #region import table scores - cmdSource.CommandText = "SELECT SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty FROM Scores"; - SQLiteDataReader source = cmdSource.ExecuteReader(); - if (source == null) - return false; - - if (source.FieldCount == 0) - { - source.Close(); - return true; - } - - while (source.Read()) - { - int songid = source.GetInt32(0); - string player = source.GetString(1); - int score = source.GetInt32(2); - int linenr = source.GetInt32(3); - long date = source.GetInt64(4); - int medley = source.GetInt32(5); - int duet = source.GetInt32(6); - int shortsong = source.GetInt32(7); - int diff = source.GetInt32(8); - - string artist, title; - DateTime dateadded; - int numplayed; - if (_GetDataBaseSongInfos(songid, out artist, out title, out numplayed, out dateadded, sourceDBPath)) - AddScore(player, score, linenr, date, medley, duet, shortsong, diff, artist, title, numplayed, _HighscoreFilePath); - } - #endregion import table scores - - source.Close(); - } - } - - return true; - } - #endregion Highscores - - #region Cover - public static bool GetCover(string coverPath, ref CTexture tex, int maxSize) - { - if (!File.Exists(coverPath)) - { - CLog.LogError("Can't find File: " + coverPath); - return false; - } - - lock (_CoverMutex) - { - if (_ConnectionCover == null) - { - _ConnectionCover = new SQLiteConnection {ConnectionString = "Data Source=" + _CoverFilePath}; - _ConnectionCover.Open(); - } - - using (var command = new SQLiteCommand(_ConnectionCover)) - { - command.CommandText = "SELECT id, width, height FROM Cover WHERE [Path] = @path"; - command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; - - SQLiteDataReader reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) - { - reader.Read(); - int id = reader.GetInt32(0); - int w = reader.GetInt32(1); - int h = reader.GetInt32(2); - reader.Close(); - - command.CommandText = "SELECT Data FROM CoverData WHERE CoverID = @id"; - command.Parameters.Add("@id", DbType.Int32).Value = id; - reader = command.ExecuteReader(); - - if (reader.HasRows) - { - reader.Read(); - byte[] data = _GetBytes(reader); - reader.Dispose(); - tex = CDraw.EnqueueTexture(w, h, data); - return true; - } - } - else - { - if (reader != null) - reader.Close(); - - if (_TransactionCover == null) - _TransactionCover = _ConnectionCover.BeginTransaction(); - - Bitmap origin; - try - { - origin = new Bitmap(coverPath); - } - catch (Exception) - { - CLog.LogError("Error loading Texture: " + coverPath); - return false; - } - - int w = maxSize; - int h = maxSize; - byte[] data; - - try - { - if (origin.Width >= origin.Height && origin.Width > w) - h = (int)Math.Round((float)w / origin.Width * origin.Height); - else if (origin.Height > origin.Width && origin.Height > h) - w = (int)Math.Round((float)h / origin.Height * origin.Width); - - using (var bmp = new Bitmap(w, h)) - { - using (Graphics g = Graphics.FromImage(bmp)) - g.DrawImage(origin, new Rectangle(0, 0, w, h)); - - data = new byte[w * h * 4]; - BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(bmpData.Scan0, data, 0, w * h * 4); - bmp.UnlockBits(bmpData); - } - } - finally - { - origin.Dispose(); - } - - tex = CDraw.EnqueueTexture(w, h, data); - - command.CommandText = "INSERT INTO Cover (Path, width, height) VALUES (@path, @w, @h)"; - command.Parameters.Add("@w", DbType.Int32).Value = w; - command.Parameters.Add("@h", DbType.Int32).Value = h; - command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; - command.ExecuteNonQuery(); - - command.CommandText = "SELECT id FROM Cover WHERE [Path] = @path"; - command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; - reader = command.ExecuteReader(); - - if (reader != null) - { - reader.Read(); - int id = reader.GetInt32(0); - reader.Dispose(); - command.CommandText = "INSERT INTO CoverData (CoverID, Data) VALUES (@id, @data)"; - command.Parameters.Add("@id", DbType.Int32).Value = id; - command.Parameters.Add("@data", DbType.Binary, 20).Value = data; - command.ExecuteReader(); - return true; - } - } - } - } - return false; + return _CoverDB.GetCover(fileName, ref tex, maxSize); } public static void CommitCovers() { - lock (_CoverMutex) - { - _CommitCovers(); - } + _CoverDB.CommitCovers(); } - /// - /// You have to hold the CoverMutex when calling this! - /// - private static void _CommitCovers() - { - if (_TransactionCover != null) - { - _TransactionCover.Commit(); - _TransactionCover.Dispose(); - _TransactionCover = null; - } - } - - public static void Close() - { - //Do commit and close atomicly otherwhise we may loose changes - lock (_CoverMutex) - { - CommitCovers(); - - if (_ConnectionCover != null) - { - _ConnectionCover.Dispose(); - _ConnectionCover = null; - } - } - } - - private static bool _InitCoverDB() - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _CoverFilePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "SELECT Value FROM Version"; - - SQLiteDataReader reader = null; - - try - { - reader = command.ExecuteReader(); - } - catch (Exception) {} - - if (reader == null) - { - // create new database/tables - _CreateCoverDB(); - } - else if (reader.FieldCount == 0) - { - // create new database/tables - _CreateCoverDB(); - } - else - { - reader.Read(); - - if (reader.GetInt32(0) < CSettings.DatabaseHighscoreVersion) - { - // update database - } - } - if (reader != null) - reader.Dispose(); - } - } - return true; - } - - private static void _CreateCoverDB() - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _CoverFilePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; - command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.DatabaseCoverVersion; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Cover ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS CoverData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "CoverID INTEGER NOT NULL, Data BLOB NOT NULL);"; - command.ExecuteNonQuery(); - } - } - } - #endregion Cover - - #region CreditsRessources public static bool GetCreditsRessource(string fileName, ref CTexture tex) { - bool result = false; - - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "SELECT id, width, height FROM Images WHERE [Path] = @path"; - command.Parameters.Add("@path", DbType.String, 0).Value = fileName; - - SQLiteDataReader reader = command.ExecuteReader(); - - if (reader != null && reader.HasRows) - { - reader.Read(); - int id = reader.GetInt32(0); - int w = reader.GetInt32(1); - int h = reader.GetInt32(2); - reader.Close(); - - command.CommandText = "SELECT Data FROM ImageData WHERE ImageID = @id"; - command.Parameters.Add("@id", DbType.Int32).Value = id; - reader = command.ExecuteReader(); - - if (reader.HasRows) - { - result = true; - reader.Read(); - byte[] data = _GetBytes(reader); - tex = CDraw.AddTexture(w, h, data); - /*using (Bitmap bmp = new Bitmap(w, h)) - { - BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(data, 0, bmpData.Scan0, w * h * 4); - bmp.UnlockBits(bmpData); - bmp.Save(fileName); - }*/ - } - } - - if (reader != null) - reader.Dispose(); - } - } - - return result; - } - - //If you want to add an image to db, call this method! - /* - private static bool _AddImageToCreditsDB(String imagePath) - { - bool result = false; - - if (File.Exists(imagePath)) - { - using (SQLiteConnection connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - using (SQLiteCommand command = new SQLiteCommand(connection)) - { - Bitmap origin; - try - { - origin = new Bitmap(imagePath); - } - catch (Exception) - { - CLog.LogError("Error loading Texture: " + imagePath); - return false; - } - int w = origin.Width; - int h = origin.Height; - byte[] data; - - try - { - data = new byte[w * h * 4]; - - BitmapData bmpData = origin.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(bmpData.Scan0, data, 0, w * h * 4); - origin.UnlockBits(bmpData); - - command.CommandText = "INSERT INTO Images (Path, width, height) VALUES (@path, @w, @h)"; - command.Parameters.Add("@path", DbType.String, 0).Value = Path.GetFileName(imagePath); - command.Parameters.Add("@w", DbType.Int32, 0).Value = w; - command.Parameters.Add("@h", DbType.Int32, 0).Value = h; - command.ExecuteNonQuery(); - - command.CommandText = "SELECT id FROM Images WHERE [Path] = @path"; - command.Parameters.Add("@path", DbType.String, 0).Value = Path.GetFileName(imagePath); - SQLiteDataReader reader = command.ExecuteReader(); - - if (reader != null) - { - reader.Read(); - int id = reader.GetInt32(0); - reader.Close(); - command.CommandText = "INSERT INTO ImageData (ImageID, Data) VALUES (@id, @data)"; - command.Parameters.Add("@id", DbType.Int32, 20).Value = id; - command.Parameters.Add("@data", DbType.Binary, 20).Value = data; - command.ExecuteReader(); - result = true; - } - } - finally - { - origin.Dispose(); - } - } - } - } - - return result; - } -*/ - - private static bool _InitCreditsRessourcesDB() - { - using (var connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return false; - } - - using (var command = new SQLiteCommand(connection)) - { - command.CommandText = "SELECT Value FROM Version"; - - SQLiteDataReader reader = null; - - try - { - reader = command.ExecuteReader(); - } - catch (Exception) {} - - if (reader == null) - { - // Log error - CLog.LogError("Can't find Credits-DB!"); - } - else if (reader.FieldCount == 0) - { - // Log error - CLog.LogError("Can't find Credits-DB! Field-Count = 0"); - } - else - { - reader.Read(); - - if (reader.GetInt32(0) < CSettings.DatabaseHighscoreVersion) - { - // update database - } - } - - if (reader != null) - reader.Dispose(); - } - } - return true; - } - - /* - private static void _CreateCreditsRessourcesDB() - { - using (SQLiteConnection connection = new SQLiteConnection()) - { - connection.ConnectionString = "Data Source=" + _CreditsRessourcesFilePath; - - try - { - connection.Open(); - } - catch (Exception) - { - return; - } - - using (SQLiteCommand command = new SQLiteCommand(connection)) - { - command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; - command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.DatabaseCreditsRessourcesVersion; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS Images ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; - command.ExecuteNonQuery(); - - command.CommandText = "CREATE TABLE IF NOT EXISTS ImageData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + - "ImageID INTEGER NOT NULL, Data BLOB NOT NULL);"; - command.ExecuteNonQuery(); - } - } - } -*/ - #endregion CreditsRessources - - private static byte[] _GetBytes(SQLiteDataReader reader) - { - const int chunkSize = 2 * 1024; - var buffer = new byte[chunkSize]; - long fieldOffset = 0; - using (var stream = new MemoryStream()) - { - long bytesRead; - while ((bytesRead = reader.GetBytes(0, fieldOffset, buffer, 0, buffer.Length)) > 0) - { - var actualRead = new byte[bytesRead]; - Buffer.BlockCopy(buffer, 0, actualRead, 0, (int)bytesRead); - stream.Write(actualRead, 0, actualRead.Length); - fieldOffset += bytesRead; - } - return stream.ToArray(); - } - } - - private static long _UnixTimeToTicks(int unixTime) - { - var t70 = new DateTime(1970, 1, 1, 0, 0, 0, 0); - t70 = t70.AddSeconds(unixTime); - return t70.Ticks; + return _ResourceDB.GetCreditsRessource(fileName, ref tex); } } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Database/CCoverDB.cs b/Vocaluxe/Lib/Database/CCoverDB.cs new file mode 100644 index 00000000..7723e2d4 --- /dev/null +++ b/Vocaluxe/Lib/Database/CCoverDB.cs @@ -0,0 +1,234 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; +using System.Data; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using Vocaluxe.Base; +using VocaluxeLib.Draw; +#if WIN +using System.Data.SQLite; + +#else +using Mono.Data.Sqlite; +#endif + +namespace Vocaluxe.Lib.Database +{ + public class CCoverDB : CDatabaseBase + { + //You have to lock all actions using cover connection or transaction, otherwhise order is not guaranted + private readonly object _CoverMutex = new object(); + private SQLiteTransaction _TransactionCover; + + public CCoverDB(string filePath) : base(filePath) {} + + public override bool Init() + { + if (!base.Init()) + return false; + + if (_Version < 0) + return _CreateCoverDB(); + if (_Version < CSettings.DatabaseCoverVersion) + throw new NotImplementedException("Upgrading of cover DB not implemented"); + return true; + } + + public override void Close() + { + //Do commit and close atomicly otherwhise we may loose changes + lock (_CoverMutex) + { + _CommitCovers(); + + base.Close(); + } + } + + public bool GetCover(string coverPath, ref CTexture tex, int maxSize) + { + if (_Connection == null) + return false; + if (!File.Exists(coverPath)) + { + CLog.LogError("Can't find File: " + coverPath); + return false; + } + + lock (_CoverMutex) + { + //Double check here because we may have just closed our connection + if (_Connection == null) + return false; + using (var command = new SQLiteCommand(_Connection)) + { + command.CommandText = "SELECT id, width, height FROM Cover WHERE [Path] = @path"; + command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; + + SQLiteDataReader reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + reader.Read(); + int id = reader.GetInt32(0); + int w = reader.GetInt32(1); + int h = reader.GetInt32(2); + reader.Close(); + + command.CommandText = "SELECT Data FROM CoverData WHERE CoverID = @id"; + command.Parameters.Add("@id", DbType.Int32).Value = id; + reader = command.ExecuteReader(); + + if (reader.HasRows) + { + reader.Read(); + byte[] data = _GetBytes(reader); + reader.Dispose(); + tex = CDraw.EnqueueTexture(w, h, data); + return true; + } + } + else + { + if (reader != null) + reader.Close(); + + if (_TransactionCover == null) + _TransactionCover = _Connection.BeginTransaction(); + + Bitmap origin; + try + { + origin = new Bitmap(coverPath); + } + catch (Exception) + { + CLog.LogError("Error loading Texture: " + coverPath); + return false; + } + + int w = maxSize; + int h = maxSize; + byte[] data; + + try + { + if (origin.Width >= origin.Height && origin.Width > w) + h = (int)Math.Round((float)w / origin.Width * origin.Height); + else if (origin.Height > origin.Width && origin.Height > h) + w = (int)Math.Round((float)h / origin.Height * origin.Width); + + using (var bmp = new Bitmap(w, h)) + { + using (Graphics g = Graphics.FromImage(bmp)) + g.DrawImage(origin, new Rectangle(0, 0, w, h)); + + data = new byte[w * h * 4]; + BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); + Marshal.Copy(bmpData.Scan0, data, 0, w * h * 4); + bmp.UnlockBits(bmpData); + } + } + finally + { + origin.Dispose(); + } + + tex = CDraw.EnqueueTexture(w, h, data); + + command.CommandText = "INSERT INTO Cover (Path, width, height) VALUES (@path, @w, @h)"; + command.Parameters.Add("@w", DbType.Int32).Value = w; + command.Parameters.Add("@h", DbType.Int32).Value = h; + command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; + command.ExecuteNonQuery(); + + command.CommandText = "SELECT id FROM Cover WHERE [Path] = @path"; + command.Parameters.Add("@path", DbType.String, 0).Value = coverPath; + reader = command.ExecuteReader(); + + if (reader != null) + { + reader.Read(); + int id = reader.GetInt32(0); + reader.Dispose(); + command.CommandText = "INSERT INTO CoverData (CoverID, Data) VALUES (@id, @data)"; + command.Parameters.Add("@id", DbType.Int32).Value = id; + command.Parameters.Add("@data", DbType.Binary, 20).Value = data; + command.ExecuteReader(); + return true; + } + } + } + } + return false; + } + + public void CommitCovers() + { + lock (_CoverMutex) + { + _CommitCovers(); + } + } + + /// + /// You have to hold the CoverMutex when calling this! + /// + private void _CommitCovers() + { + if (_TransactionCover == null) + return; + _TransactionCover.Commit(); + _TransactionCover.Dispose(); + _TransactionCover = null; + } + + private bool _CreateCoverDB() + { + try + { + using (var command = new SQLiteCommand(_Connection)) + { + command.CommandText = "CREATE TABLE IF NOT EXISTS Version (Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (Value) VALUES(@Value)"; + command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.DatabaseCoverVersion; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Cover ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS CoverData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "CoverID INTEGER NOT NULL, Data BLOB NOT NULL);"; + command.ExecuteNonQuery(); + } + } + catch (Exception e) + { + CLog.LogError("Error creating Cover DB " + e); + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Database/CDatabaseBase.cs b/Vocaluxe/Lib/Database/CDatabaseBase.cs new file mode 100644 index 00000000..068530e5 --- /dev/null +++ b/Vocaluxe/Lib/Database/CDatabaseBase.cs @@ -0,0 +1,112 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; +using System.IO; +using Vocaluxe.Base; +#if WIN +using System.Data.SQLite; + +#else +using Mono.Data.Sqlite; +#endif + +namespace Vocaluxe.Lib.Database +{ + public class CDatabaseBase + { + protected readonly string _FilePath; + protected SQLiteConnection _Connection; + + protected int _Version; //Version of the database (value of row "Value" in table "Version") or -1 if none + + public CDatabaseBase(string filePath) + { + _FilePath = filePath; + } + + public virtual bool Init() + { + _Connection = new SQLiteConnection("Data Source=" + _FilePath); + try + { + _Connection.Open(); + } + catch (Exception) + { + _Connection.Dispose(); + _Connection = null; + return false; + } + + using (var command = new SQLiteCommand(_Connection)) + { + command.CommandText = "SELECT Value FROM Version"; + + SQLiteDataReader reader = null; + + try + { + reader = command.ExecuteReader(); + } + catch (Exception) {} + + if (reader == null || !reader.Read() || reader.FieldCount == 0) + _Version = -1; + else + _Version = reader.GetInt32(0); + + if (reader != null) + reader.Dispose(); + } + return true; + } + + public virtual void Close() + { + if (_Connection != null) + { + _Connection.Dispose(); + _Connection = null; + } + } + + protected static long _UnixTimeToTicks(int unixTime) + { + var t70 = new DateTime(1970, 1, 1, 0, 0, 0, 0); + t70 = t70.AddSeconds(unixTime); + return t70.Ticks; + } + + protected static byte[] _GetBytes(SQLiteDataReader reader, int field = 0) + { + const int chunkSize = 2 * 1024; + var buffer = new byte[chunkSize]; + long fieldOffset = 0; + using (var stream = new MemoryStream()) + { + int bytesRead; + while ((bytesRead = (int)reader.GetBytes(field, fieldOffset, buffer, 0, buffer.Length)) > 0) + { + stream.Write(buffer, 0, bytesRead); + fieldOffset += bytesRead; + } + return stream.ToArray(); + } + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Database/CHighscoreDB.cs b/Vocaluxe/Lib/Database/CHighscoreDB.cs new file mode 100644 index 00000000..43d25424 --- /dev/null +++ b/Vocaluxe/Lib/Database/CHighscoreDB.cs @@ -0,0 +1,1021 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Text; +using Community.CsharpSqlite; +using Vocaluxe.Base; +using VocaluxeLib; +using VocaluxeLib.Songs; +#if WIN +using System.Data.SQLite; + +#else +using Mono.Data.Sqlite; +#endif + +namespace Vocaluxe.Lib.Database +{ + public class CHighscoreDB : CDatabaseBase + { + private struct SData + { + public int Id; + public long Ticks; + public string Str1; + public string Str2; + } + + public CHighscoreDB(string filePath) : base(filePath) {} + + public override bool Init() + { + string oldDBFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileOldHighscoreDB); + if (File.Exists(oldDBFilePath)) + { + if (File.Exists(_FilePath)) + { + if (!_CreateOrConvert(oldDBFilePath)) + { + CLog.LogError("Cannot init Highscore DB: Error opening database: " + oldDBFilePath, true, true); + return false; + } + if (!_CreateOrConvert(_FilePath)) + { + CLog.LogError("Cannot init Highscore DB: Error opening database: " + _FilePath, true, true); + return false; + } + if (!_ImportData(oldDBFilePath)) + { + CLog.LogError("Cannot init Highscore DB: Error importing data", true, true); + return false; + } + } + else + { + File.Copy(oldDBFilePath, _FilePath); + if (!_CreateOrConvert(_FilePath)) + { + CLog.LogError("Cannot init Highscore DB: Error opening database: " + _FilePath, true, true); + return false; + } + } + File.Delete(oldDBFilePath); + } + else if (!_CreateOrConvert(_FilePath)) + { + CLog.LogError("Cannot init Highscore DB: Error opening database: " + _FilePath, true, true); + return false; + } + return true; + } + + public override void Close() + { + //Do nothing + } + + public bool GetDataBaseSongInfos(string artist, string title, out int numPlayed, out DateTime dateAdded, out int highscoreID) + { + string sArtist; + string sTitle; + int songID; + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + _FilePath; + + try + { + connection.Open(); + } + catch (Exception) {} + + using (var command = new SQLiteCommand(connection)) + { + songID = _GetDataBaseSongID(artist, title, 0, command); + highscoreID = songID; + } + } + return _GetDataBaseSongInfos(songID, out sArtist, out sTitle, out numPlayed, out dateAdded, _FilePath); + } + + public void IncreaseSongCounter(int dataBaseSongID) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + _FilePath; + + try + { + connection.Open(); + } + catch (Exception) {} + + using (var command = new SQLiteCommand(connection)) + _IncreaseSongCounter(dataBaseSongID, command); + } + } + + public int AddScore(string playerName, int score, int lineNr, long date, int medley, int duet, int shortSong, int difficulty, + string artist, string title, int numPlayed, string filePath) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return -1; + } + + using (var command = new SQLiteCommand(connection)) + { + int dataBaseSongID = _GetDataBaseSongID(artist, title, numPlayed, command); + int result = _AddScore(playerName, score, lineNr, date, medley, duet, shortSong, difficulty, dataBaseSongID, command); + return result; + } + } + } + + public int AddScore(SPlayer player) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + _FilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return -1; + } + + int medley = 0; + int duet = 0; + int shortSong = 0; + switch (player.GameMode) + { + case EGameMode.TR_GAMEMODE_MEDLEY: + medley = 1; + break; + case EGameMode.TR_GAMEMODE_DUET: + duet = 1; + break; + case EGameMode.TR_GAMEMODE_SHORTSONG: + shortSong = 1; + break; + } + + using (var command = new SQLiteCommand(connection)) + { + int dataBaseSongID = CSongs.GetSong(player.SongID).DataBaseSongID; + return _AddScore(CProfiles.GetPlayerName(player.ProfileID), (int)Math.Round(player.Points), player.VoiceNr, player.DateTicks, medley, + duet, shortSong, (int)CProfiles.GetDifficulty(player.ProfileID), dataBaseSongID, command); + } + } + } + + private int _AddScore(string playerName, int score, int lineNr, long date, int medley, int duet, int shortSong, int difficulty, + int dataBaseSongID, SQLiteCommand command) + { + int lastInsertID = -1; + + if (dataBaseSongID >= 0) + { + command.CommandText = "SELECT id FROM Scores WHERE SongID = @SongID AND PlayerName = @PlayerName AND Score = @Score AND " + + "LineNr = @LineNr AND Date = @Date AND Medley = @Medley AND Duet = @Duet AND ShortSong = @ShortSong AND Difficulty = @Difficulty"; + command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID; + command.Parameters.Add("@PlayerName", DbType.String, 0).Value = playerName; + command.Parameters.Add("@Score", DbType.Int32, 0).Value = score; + command.Parameters.Add("@LineNr", DbType.Int32, 0).Value = lineNr; + command.Parameters.Add("@Date", DbType.Int64, 0).Value = date; + command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley; + command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet; + command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = shortSong; + command.Parameters.Add("@Difficulty", DbType.Int32, 0).Value = difficulty; + + SQLiteDataReader reader = null; + try + { + reader = command.ExecuteReader(); + } + catch (Exception) {} + + if (reader != null && reader.HasRows) + { + if (reader.Read()) + return reader.GetInt32(0); + } + + if (reader != null) + reader.Dispose(); + + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty) " + + "VALUES (@SongID, @PlayerName, @Score, @LineNr, @Date, @Medley, @Duet, @ShortSong, @Difficulty)"; + command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID; + command.Parameters.Add("@PlayerName", DbType.String, 0).Value = playerName; + command.Parameters.Add("@Score", DbType.Int32, 0).Value = score; + command.Parameters.Add("@LineNr", DbType.Int32, 0).Value = lineNr; + command.Parameters.Add("@Date", DbType.Int64, 0).Value = date; + command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley; + command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet; + command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = shortSong; + command.Parameters.Add("@Difficulty", DbType.Int32, 0).Value = difficulty; + command.ExecuteNonQuery(); + + //Read last insert line + command.CommandText = "SELECT id FROM Scores ORDER BY id DESC LIMIT 0, 1"; + + reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + while (reader.Read()) + lastInsertID = reader.GetInt32(0); + reader.Dispose(); + } + } + + return lastInsertID; + } + + public List LoadScore(int songID, EGameMode gameMode) + { + var scores = new List(); + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + _FilePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return scores; + } + + using (var command = new SQLiteCommand(connection)) + { + int medley = 0; + int duet = 0; + int shortSong = 0; + switch (gameMode) + { + case EGameMode.TR_GAMEMODE_MEDLEY: + medley = 1; + break; + case EGameMode.TR_GAMEMODE_DUET: + duet = 1; + break; + case EGameMode.TR_GAMEMODE_SHORTSONG: + shortSong = 1; + break; + } + + int dataBaseSongID = _GetDataBaseSongID(songID, command); + if (dataBaseSongID < 0) + return scores; + + command.CommandText = "SELECT PlayerName, Score, Date, Difficulty, LineNr, id FROM Scores " + + "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " + + "ORDER BY [Score] DESC"; + command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID; + command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley; + command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet; + command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = shortSong; + + SQLiteDataReader reader = command.ExecuteReader(); + if (reader != null && reader.HasRows) + { + while (reader.Read()) + { + var score = new SDBScoreEntry + { + Name = reader.GetString(0), + Score = reader.GetInt32(1), + Date = new DateTime(reader.GetInt64(2)).ToString("dd/MM/yyyy"), + Difficulty = (EGameDifficulty)reader.GetInt32(3), + VoiceNr = reader.GetInt32(4), + ID = reader.GetInt32(5) + }; + + scores.Add(score); + } + reader.Dispose(); + } + } + } + return scores; + } + + private void _IncreaseSongCounter(int dataBaseSongID, SQLiteCommand command) + { + command.CommandText = "UPDATE Songs SET NumPlayed = NumPlayed + 1 WHERE [id] = @id"; + command.Parameters.Add("@id", DbType.Int32, 0).Value = dataBaseSongID; + command.ExecuteNonQuery(); + } + + private int _GetDataBaseSongID(int songID, SQLiteCommand command) + { + CSong song = CSongs.GetSong(songID); + + if (song == null) + return -1; + + return _GetDataBaseSongID(song.Artist, song.Title, 0, command); + } + + private int _GetDataBaseSongID(string artist, string title, int defNumPlayed, SQLiteCommand command) + { + command.CommandText = "SELECT id FROM Songs WHERE [Title] = @title AND [Artist] = @artist"; + command.Parameters.Add("@title", DbType.String, 0).Value = title; + command.Parameters.Add("@artist", DbType.String, 0).Value = artist; + + SQLiteDataReader reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + reader.Read(); + int id = reader.GetInt32(0); + reader.Dispose(); + return id; + } + + if (reader != null) + reader.Close(); + + command.CommandText = "INSERT INTO Songs (Title, Artist, NumPlayed, DateAdded) " + + "VALUES (@title, @artist, @numplayed, @dateadded)"; + command.Parameters.Add("@title", DbType.String, 0).Value = title; + command.Parameters.Add("@artist", DbType.String, 0).Value = artist; + command.Parameters.Add("@numplayed", DbType.Int32, 0).Value = defNumPlayed; + command.Parameters.Add("@dateadded", DbType.Int64, 0).Value = DateTime.Now.Ticks; + command.ExecuteNonQuery(); + + command.CommandText = "SELECT id FROM Songs WHERE [Title] = @title AND [Artist] = @artist"; + command.Parameters.Add("@title", DbType.String, 0).Value = title; + command.Parameters.Add("@artist", DbType.String, 0).Value = artist; + + reader = command.ExecuteReader(); + + if (reader != null) + { + reader.Read(); + int id = reader.GetInt32(0); + reader.Dispose(); + return id; + } + + return -1; + } + + private bool _GetDataBaseSongInfos(int songID, out string artist, out string title, out int numPlayed, out DateTime dateAdded, string filePath) + { + artist = String.Empty; + title = String.Empty; + numPlayed = 0; + dateAdded = DateTime.Today; + + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (var command = new SQLiteCommand(connection)) + { + command.CommandText = "SELECT Artist, Title, NumPlayed, DateAdded FROM Songs WHERE [id] = @id"; + command.Parameters.Add("@id", DbType.String, 0).Value = songID; + + SQLiteDataReader reader; + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + return false; + } + + if (reader != null && reader.HasRows) + { + reader.Read(); + artist = reader.GetString(0); + title = reader.GetString(1); + numPlayed = reader.GetInt32(2); + dateAdded = new DateTime(reader.GetInt64(3)); + reader.Dispose(); + return true; + } + if (reader != null) + reader.Dispose(); + } + } + + return false; + } + + private void _CreateHighscoreDB(string filePath) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return; + } + + using (var command = new SQLiteCommand(connection)) + { + command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, @Value)"; + command.Parameters.Add("@Value", DbType.Int32).Value = CSettings.DatabaseHighscoreVersion; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER, DateAdded BIGING);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + + "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, ShortSong INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + } + } + } + + private void _CreateHighscoreDBV1(string filePath) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return; + } + + using (var command = new SQLiteCommand(connection)) + { + command.CommandText = "CREATE TABLE IF NOT EXISTS Version ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (id, Value) VALUES(NULL, 1 )"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "SongID INTEGER NOT NULL, PlayerName TEXT NOT NULL, Score INTEGER NOT NULL, LineNr INTEGER NOT NULL, Date BIGINT NOT NULL, " + + "Medley INTEGER NOT NULL, Duet INTEGER NOT NULL, Difficulty INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + } + } + } + + /// + /// Creates a new Vocaluxe Database if no file exists. Converts an existing old Ultrastar Deluxe highscore database into vocaluxe format. + /// + /// Database file path + /// + private bool _CreateOrConvert(string filePath) + { + bool result = true; + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (var command = new SQLiteCommand(connection)) + { + command.CommandText = "PRAGMA user_version"; + SQLiteDataReader reader = command.ExecuteReader(); + reader.Read(); + + int version = reader.GetInt32(0); + + reader.Dispose(); + + //Check if old scores table exists + command.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='US_Scores';"; + reader = command.ExecuteReader(); + reader.Read(); + bool scoresTableExists = reader.HasRows; + + reader.Dispose(); + + command.CommandText = "SELECT Value FROM Version"; + reader = null; + + try + { + reader = command.ExecuteReader(); + } + catch (Exception) {} + + if (reader == null || reader.FieldCount == 0) + { + // create new database/tables + if (version == 1) + { + //Check for USDX 1.1 DB + _CreateHighscoreDBV1(filePath); + result &= !_ConvertFrom110(filePath); + result &= _UpdateDatabase(1, connection); + result &= _UpdateDatabase(2, connection); + } + else if (version == 0 && scoresTableExists) + { + //Check for USDX 1.01 or CMD Mod DB + _CreateHighscoreDBV1(filePath); + result &= _ConvertFrom101(filePath); + result &= _UpdateDatabase(1, connection); + result &= _UpdateDatabase(2, connection); + } + else + _CreateHighscoreDB(filePath); + } + else + { + reader.Read(); + int currentVersion = reader.GetInt32(0); + if (currentVersion < CSettings.DatabaseHighscoreVersion) + { + // update database + result &= _UpdateDatabase(currentVersion, connection); + } + } + + if (reader != null) + reader.Dispose(); + } + } + + return result; + } + + /// + /// Converts a USDX 1.1 database into the Vocaluxe format + /// + /// Database file path + /// True if succeeded + private bool _ConvertFrom110(string filePath) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (var command = new SQLiteCommand(connection)) + { + //The USDX database has no column for LineNr, Medley and Duet so just fill 0 in there + command.CommandText = + "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; + command.ExecuteNonQuery(); + + var scores = new List(); + var songs = new List(); + + command.CommandText = "SELECT id, PlayerName, Date FROM Scores"; + SQLiteDataReader reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + while (reader.Read()) + { + var data = new SData {Id = reader.GetInt32(0), Str1 = reader.GetString(1)}; + Int64 ticks = 0; + + try + { + ticks = reader.GetInt64(2); + } + catch {} + + data.Ticks = _UnixTimeToTicks((int)ticks); + + scores.Add(data); + } + reader.Close(); + } + + command.CommandText = "SELECT id, Artist, Title FROM Songs"; + + reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + while (reader.Read()) + { + var data = new SData {Id = reader.GetInt32(0), Str1 = reader.GetString(1), Str2 = reader.GetString(2)}; + songs.Add(data); + } + } + + if (reader != null) + reader.Dispose(); + + SQLiteTransaction transaction = connection.BeginTransaction(); + // update Title and Artist strings + foreach (SData data in songs) + { + command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; + command.Parameters.Add("@title", DbType.String, 0).Value = data.Str2; + command.Parameters.Add("@artist", DbType.String, 0).Value = data.Str1; + command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; + command.ExecuteNonQuery(); + } + + // update player names + foreach (SData data in scores) + { + command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; + command.Parameters.Add("@player", DbType.String, 0).Value = data.Str1; + command.Parameters.Add("@date", DbType.Int64, 0).Value = data.Ticks; + command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; + command.ExecuteNonQuery(); + } + transaction.Commit(); + + //Delete old tables after conversion + command.CommandText = "DROP TABLE US_Scores;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE US_Songs;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE us_statistics_info;"; + command.ExecuteNonQuery(); + + //This versioning is not used in Vocaluxe so reset it to 0 + command.CommandText = "PRAGMA user_version = 0"; + command.ExecuteNonQuery(); + } + } + + return true; + } + + /// + /// Converts a USDX 1.01 or CMD 1.01 database to Vocaluxe format + /// + /// Database file path + /// True if succeeded + private bool _ConvertFrom101(string filePath) + { + using (var connection = new SQLiteConnection()) + { + connection.ConnectionString = "Data Source=" + filePath; + + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } + + using (var command = new SQLiteCommand(connection)) + { + command.CommandText = "PRAGMA table_info(US_Scores);"; + bool dateExists = false; + using (SQLiteDataReader reader = command.ExecuteReader()) + { + //Check for column Date + while (reader.Read()) + { + for (int i = 0; i < reader.FieldCount; i++) + { + if (reader.GetName(i) == "name") + { + if (reader.GetString(i) == "Date") + dateExists = true; + break; + } + } + } + } + + //This is a USDX 1.01 DB + command.CommandText = !dateExists + ? "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', '0', '0', '0', Difficulty from US_Scores" + : "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; + command.ExecuteNonQuery(); + + // convert from CP1252 to UTF8 + var scores = new List(); + var songs = new List(); + + Sqlite3.sqlite3 oldDB; + int res = Sqlite3.sqlite3_open(filePath, out oldDB); + + if (res != Sqlite3.SQLITE_OK) + CLog.LogError("Error opening Database: " + filePath + " (" + Sqlite3.sqlite3_errmsg(oldDB) + ")"); + else + { + var stmt = new Sqlite3.Vdbe(); + res = Sqlite3.sqlite3_prepare_v2(oldDB, "SELECT id, Artist, Title FROM Songs", -1, ref stmt, 0); + + if (res != Sqlite3.SQLITE_OK) + CLog.LogError("Error query Database: " + filePath + " (" + Sqlite3.sqlite3_errmsg(oldDB) + ")"); + else + { + //Sqlite3.sqlite3_step(Stmt); + Encoding utf8 = Encoding.UTF8; + Encoding cp1252 = Encoding.GetEncoding(1252); + + while (Sqlite3.sqlite3_step(stmt) == Sqlite3.SQLITE_ROW) + { + var data = new SData {Id = Sqlite3.sqlite3_column_int(stmt, 0)}; + + byte[] bytes = Sqlite3.sqlite3_column_rawbytes(stmt, 1); + data.Str1 = bytes != null ? utf8.GetString(Encoding.Convert(cp1252, utf8, bytes)) : "Someone"; + + bytes = Sqlite3.sqlite3_column_rawbytes(stmt, 2); + data.Str2 = bytes != null ? utf8.GetString(Encoding.Convert(cp1252, utf8, bytes)) : "Someone"; + + songs.Add(data); + } + Sqlite3.sqlite3_finalize(stmt); + } + + stmt = new Sqlite3.Vdbe(); + + // ReSharper disable ConvertIfStatementToConditionalTernaryExpression + if (!dateExists) + // ReSharper restore ConvertIfStatementToConditionalTernaryExpression + res = Sqlite3.sqlite3_prepare_v2(oldDB, "SELECT id, PlayerName FROM Scores", -1, ref stmt, 0); + else + res = Sqlite3.sqlite3_prepare_v2(oldDB, "SELECT id, PlayerName, Date FROM Scores", -1, ref stmt, 0); + + if (res != Sqlite3.SQLITE_OK) + CLog.LogError("Error query Database: " + filePath + " (" + Sqlite3.sqlite3_errmsg(oldDB) + ")"); + else + { + //Sqlite3.sqlite3_step(Stmt); + Encoding utf8 = Encoding.UTF8; + Encoding cp1252 = Encoding.GetEncoding(1252); + + while (Sqlite3.sqlite3_step(stmt) == Sqlite3.SQLITE_ROW) + { + var data = new SData {Id = Sqlite3.sqlite3_column_int(stmt, 0)}; + + byte[] bytes = Sqlite3.sqlite3_column_rawbytes(stmt, 1); + data.Str1 = bytes != null ? utf8.GetString(Encoding.Convert(cp1252, utf8, bytes)) : "Someone"; + + if (dateExists) + data.Ticks = _UnixTimeToTicks(Sqlite3.sqlite3_column_int(stmt, 2)); + + scores.Add(data); + } + Sqlite3.sqlite3_finalize(stmt); + } + } + Sqlite3.sqlite3_close(oldDB); + + SQLiteTransaction transaction = connection.BeginTransaction(); + + // update Title and Artist strings + foreach (SData data in songs) + { + command.CommandText = "UPDATE Songs SET [Artist] = @artist, [Title] = @title WHERE [ID] = @id"; + command.Parameters.Add("@title", DbType.String, 0).Value = data.Str2; + command.Parameters.Add("@artist", DbType.String, 0).Value = data.Str1; + command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; + command.ExecuteNonQuery(); + } + + // update player names + foreach (SData data in scores) + { + if (!dateExists) + command.CommandText = "UPDATE Scores SET [PlayerName] = @player WHERE [id] = @id"; + else + { + command.CommandText = "UPDATE Scores SET [PlayerName] = @player, [Date] = @date WHERE [id] = @id"; + command.Parameters.Add("@date", DbType.Int64, 0).Value = data.Ticks; + } + command.Parameters.Add("@player", DbType.String, 0).Value = data.Str1; + command.Parameters.Add("@id", DbType.Int32, 0).Value = data.Id; + command.ExecuteNonQuery(); + } + transaction.Commit(); + + //Delete old tables after conversion + command.CommandText = "DROP TABLE US_Scores;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE US_Songs;"; + command.ExecuteNonQuery(); + } + } + + return true; + } + + private bool _UpdateDatabase(int currentVersion, SQLiteConnection connection) + { + bool updated = true; + + if (currentVersion < 2) + updated &= _ConvertV1toV2(connection); + if (currentVersion < 3) + updated &= _ConvertV2toV3(connection); + + return updated; + } + + private bool _ConvertV1toV2(SQLiteConnection connection) + { + using (var command = new SQLiteCommand(connection)) + { + command.CommandText = "ALTER TABLE Scores ADD ShortSong INTEGER"; + command.ExecuteNonQuery(); + command.CommandText = "UPDATE Scores SET [ShortSong] = @ShortSong"; + command.Parameters.Add("@ShortSong", DbType.Int32, 0).Value = 0; + command.ExecuteNonQuery(); + command.CommandText = "UPDATE Version SET [Value] = @version"; + command.Parameters.Add("@version", DbType.Int32, 0).Value = 2; + command.ExecuteNonQuery(); + } + + return true; + } + + private bool _ConvertV2toV3(SQLiteConnection connection) + { + var command = new SQLiteCommand(connection) {CommandText = "ALTER TABLE Songs ADD DateAdded BIGINT"}; + + command.ExecuteNonQuery(); + command.CommandText = "UPDATE Songs SET [DateAdded] = @DateAdded"; + command.Parameters.Add("@DateAdded", DbType.Int64, 0).Value = DateTime.Now.Ticks; + command.ExecuteNonQuery(); + command.CommandText = "UPDATE Version SET [Value] = @version"; + command.Parameters.Add("@version", DbType.Int32, 0).Value = 3; + command.ExecuteNonQuery(); + + //Read NumPlayed from Scores and save to Songs + command.CommandText = "SELECT SongID, Date FROM Scores ORDER BY Date ASC"; + + SQLiteDataReader reader; + try + { + reader = command.ExecuteReader(); + } + catch (Exception) + { + return false; + } + + long lastDateAdded = -1; + int lastID = -1; + DateTime dt = new DateTime(1, 1, 1, 0, 0, 5); + long sec = dt.Ticks; + List ids = new List(); + while (reader.Read()) + { + int id = reader.GetInt32(0); + long dateAdded = reader.GetInt64(1); + if (id != lastID || dateAdded > lastDateAdded + sec) + { + ids.Add(id); + lastID = id; + lastDateAdded = dateAdded; + } + } + reader.Dispose(); + + foreach (int id in ids) + _IncreaseSongCounter(id, command); + command.Dispose(); + + return true; + } + + private bool _ImportData(string sourceDBPath) + { + #region open db + using (var connSource = new SQLiteConnection()) + { + connSource.ConnectionString = "Data Source=" + sourceDBPath; + + try + { + connSource.Open(); + } + catch (Exception e) + { + CLog.LogError("Error on import high score data. Can't open source database \"" + sourceDBPath + "\" (" + e.Message + ")"); + return false; + } + #endregion open db + + using (var cmdSource = new SQLiteCommand(connSource)) + { + #region import table scores + cmdSource.CommandText = "SELECT SongID, PlayerName, Score, LineNr, Date, Medley, Duet, ShortSong, Difficulty FROM Scores"; + SQLiteDataReader source = cmdSource.ExecuteReader(); + if (source == null) + return false; + + if (source.FieldCount == 0) + { + source.Close(); + return true; + } + + while (source.Read()) + { + int songid = source.GetInt32(0); + string player = source.GetString(1); + int score = source.GetInt32(2); + int linenr = source.GetInt32(3); + long date = source.GetInt64(4); + int medley = source.GetInt32(5); + int duet = source.GetInt32(6); + int shortsong = source.GetInt32(7); + int diff = source.GetInt32(8); + + string artist, title; + DateTime dateadded; + int numplayed; + if (_GetDataBaseSongInfos(songid, out artist, out title, out numplayed, out dateadded, sourceDBPath)) + AddScore(player, score, linenr, date, medley, duet, shortsong, diff, artist, title, numplayed, _FilePath); + } + #endregion import table scores + + source.Close(); + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Database/CResourceDB.cs b/Vocaluxe/Lib/Database/CResourceDB.cs new file mode 100644 index 00000000..51e07bf5 --- /dev/null +++ b/Vocaluxe/Lib/Database/CResourceDB.cs @@ -0,0 +1,253 @@ +#region license +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +#endregion + +using System; +using System.Data; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using Vocaluxe.Base; +using VocaluxeLib.Draw; +#if WIN +using System.Data.SQLite; + +#else +using Mono.Data.Sqlite; +#endif + +namespace Vocaluxe.Lib.Database +{ + public class CResourceDB : CDatabaseBase + { +#if DEBUG + private readonly string[] _FilesV1 = new string[] + { + "Logo_voc.png", "PerfectNoteStar.png", "redDot.png", "blueDot.png", "brunzel.png", "Darkice.png", "flokuep.png", "flamefire.png", "bohning.png", "mesand.png", + "babene03.png", "pantero.png", "Pinky007.png" + }; +#endif + public CResourceDB(string filePath) : base(filePath) {} + + public override bool Init() + { + if (!base.Init()) + return false; + if (_Version < 0) + { + CLog.LogError("Can't find Ressource-DB!"); + return false; + } + + if (_Version < CSettings.DatabaseCreditsRessourcesVersion) + { +#if DEBUG + return _CreateDB() && _UpdateV1(); +#else + CLog.LogError("Upgrading Ressource-DB not possible"); + return false; +#endif + } + + return true; + } + + public bool GetCreditsRessource(string fileName, ref CTexture tex) + { + if (_Connection == null) + return false; + bool result = false; + + using (var command = new SQLiteCommand(_Connection)) + { + command.CommandText = "SELECT id, width, height FROM Images WHERE [Path] = @path"; + command.Parameters.Add("@path", DbType.String, 0).Value = fileName; + + SQLiteDataReader reader = command.ExecuteReader(); + + if (reader != null && reader.HasRows) + { + reader.Read(); + int id = reader.GetInt32(0); + int w = reader.GetInt32(1); + int h = reader.GetInt32(2); + reader.Close(); + + command.CommandText = "SELECT Data FROM ImageData WHERE ImageID = @id"; + command.Parameters.Add("@id", DbType.Int32).Value = id; + reader = command.ExecuteReader(); + + if (reader.HasRows) + { + result = true; + reader.Read(); + byte[] data = _GetBytes(reader); + tex = CDraw.AddTexture(w, h, data); + } + } + + if (reader != null) + reader.Dispose(); + } + + return result; + } + +#if DEBUG + //Update from V0 (empty) to V1 + private bool _UpdateV1() + { + if (_Connection == null || _Version >= 1) + return false; + using (SQLiteTransaction transaction = _Connection.BeginTransaction()) + { + try + { + foreach (string file in _FilesV1) + { + string filePath = Path.Combine(Environment.CurrentDirectory, file); + if (!_AddImageToCreditsDB(filePath, transaction)) + { + transaction.Rollback(); + return false; + } + } + using (SQLiteCommand command = new SQLiteCommand(_Connection)) + { + command.Transaction = transaction; + command.CommandText = "Update Version SET Value=@Value)"; + command.Parameters.Add("@Value", DbType.Int32).Value = 1; + command.ExecuteNonQuery(); + } + transaction.Commit(); + } + catch (Exception) + { + transaction.Rollback(); + return false; + } + } + return true; + } + + //If you want to add an image to db, call this method! + private bool _AddImageToCreditsDB(string imagePath, SQLiteTransaction transaction) + { + if (_Connection == null || !File.Exists(imagePath)) + return false; + + Bitmap origin; + try + { + origin = new Bitmap(imagePath); + } + catch (Exception) + { + CLog.LogError("Error loading image: " + imagePath); + return false; + } + try + { + int w = origin.Width; + int h = origin.Height; + byte[] data = new byte[w * h * 4]; + + BitmapData bmpData = origin.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); + Marshal.Copy(bmpData.Scan0, data, 0, w * h * 4); + origin.UnlockBits(bmpData); + + using (SQLiteCommand command = new SQLiteCommand(_Connection)) + { + command.Transaction = transaction; + command.CommandText = "INSERT INTO Images (Path, width, height) VALUES (@path, @w, @h)"; + command.Parameters.Add("@path", DbType.String).Value = Path.GetFileName(imagePath); + command.Parameters.Add("@w", DbType.Int32).Value = w; + command.Parameters.Add("@h", DbType.Int32).Value = h; + command.ExecuteNonQuery(); + } + + int id = -1; + using (SQLiteCommand command = new SQLiteCommand(_Connection)) + { + command.Transaction = transaction; + command.CommandText = "SELECT id FROM Images WHERE [Path] = @path"; + command.Parameters.Add("@path", DbType.String, 0).Value = Path.GetFileName(imagePath); + using (SQLiteDataReader reader = command.ExecuteReader()) + { + if (reader != null) + { + reader.Read(); + id = reader.GetInt32(0); + } + } + } + if (id < 0) + return false; + using (SQLiteCommand command = new SQLiteCommand(_Connection)) + { + command.Transaction = transaction; + command.CommandText = "INSERT INTO ImageData (ImageID, Data) VALUES (@id, @data)"; + command.Parameters.Add("@id", DbType.Int32).Value = id; + command.Parameters.Add("@data", DbType.Binary).Value = data; + command.ExecuteNonQuery(); + return true; + } + } + catch (Exception) + { + return false; + } + finally + { + origin.Dispose(); + } + } + + private bool _CreateDB() + { + if (_Connection == null) + return false; + + try + { + using (SQLiteCommand command = new SQLiteCommand(_Connection)) + { + command.CommandText = "CREATE TABLE IF NOT EXISTS Version (Value INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Version (Value) VALUES(0)"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS Images ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "Path TEXT NOT NULL, width INTEGER NOT NULL, height INTEGER NOT NULL);"; + command.ExecuteNonQuery(); + + command.CommandText = "CREATE TABLE IF NOT EXISTS ImageData ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + + "ImageID INTEGER NOT NULL, Data BLOB NOT NULL);"; + command.ExecuteNonQuery(); + } + } + catch (Exception e) + { + CLog.LogError("Error creating Ressource DB " + e); + return false; + } + return true; + } +#endif + } +} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 3319c884..76a901b5 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -219,6 +219,10 @@ + + + + From c23eaa08346dca9b224950c1ef90af2219eb551e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 00:38:39 +0200 Subject: [PATCH 108/116] Notify listener on close --- Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs | 17 ++++++++++++++++- .../CGstreamerSharpAudioStream.cs | 2 ++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs index d94e3780..05f5a35f 100644 --- a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs +++ b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs @@ -25,6 +25,8 @@ namespace Vocaluxe.Lib.Sound.Playback { protected bool _Initialized; protected readonly List _Streams = new List(); + private readonly List _StreamsToDelete = new List(); + private bool _InUpdate; private int _NextID; protected float _GlobalVolume = 1f; @@ -92,8 +94,18 @@ namespace Vocaluxe.Lib.Sound.Playback return; lock (_Streams) { + _InUpdate = true; foreach (IAudioStream stream in _Streams) stream.Update(); + //This is required because a stream may call the close listener from inside the update method + //lock() only protects from different threads not from the same, so we use StreamsToDelete to not modify _Streams while iterating it + _InUpdate = false; + if (_StreamsToDelete.Count > 0) + { + foreach (IAudioStream stream in _StreamsToDelete) + _Streams.Remove(stream); + _StreamsToDelete.Clear(); + } } } @@ -301,7 +313,10 @@ namespace Vocaluxe.Lib.Sound.Playback { lock (_Streams) { - _Streams.Remove(stream); + if (_InUpdate) //This is only possible if this is called from inside the update method + _StreamsToDelete.Add(stream); + else + _Streams.Remove(stream); } } } diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index 994353ef..36b6a7d8 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -205,6 +205,8 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp } if (element.TargetState == State.Playing) element.SetState(State.Paused); //Stop output + if (_CloseStreamListener != null) + _CloseStreamListener.OnCloseStream(this); //Now really close it in the background var t = new System.Threading.Thread(() => _TerminateStream(element)) {Name = "GSt Terminate"}; t.Start(); From fc278e4ad99c49ecdc76d5da99f382ba6bf3a747 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 00:39:12 +0200 Subject: [PATCH 109/116] Do not Dispose on finalize (might be already finalized) --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index 65bf720f..c55e572f 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -45,7 +45,7 @@ namespace Vocaluxe.Lib.Sound.Record ~CBuffer() { - _Dispose(); + _Dispose(false); } public int GetNumHalfTones() @@ -110,13 +110,13 @@ namespace Vocaluxe.Lib.Sound.Record public void Dispose() { - _Dispose(); + _Dispose(true); GC.SuppressFinalize(this); } - private void _Dispose() + private void _Dispose(bool disposing) { - if (_PitchTracker != null) + if (disposing && _PitchTracker != null) { _PitchTracker.Dispose(); _PitchTracker = null; From 292a9f3c69b01c2de41bbd655eda08c65374d9c4 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 00:39:30 +0200 Subject: [PATCH 110/116] Stop PA stream on pause --- Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs index cb579f97..ac913aaf 100644 --- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs @@ -98,13 +98,21 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio get { return _Paused; } set { + if (_Paused == value) + return; + if (!_FileOpened || _Terminated) + return; _Paused = value; lock (_LockData) { if (_Paused) + { + _PaHandle.CheckError("StopStream (playback)", PortAudioSharp.PortAudio.Pa_StopStream(_Stream)); _SyncTimer.Pause(); + } else { + _PaHandle.CheckError("StartStream", PortAudioSharp.PortAudio.Pa_StartStream(_Stream)); _SyncTimer.Resume(); _EventDecode.Set(); } From e908f923e80f06f434fe029398dc91d2f5091810 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 00:39:58 +0200 Subject: [PATCH 111/116] Fix unintended song loop due to api change --- .../PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs | 4 ++-- Vocaluxe/Base/CMain.cs | 4 ++-- Vocaluxe/Base/CSound.cs | 11 +++-------- Vocaluxe/Screens/CScreenSing.cs | 2 +- VocaluxeLib/IBasic.cs | 2 +- VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs | 2 +- 6 files changed, 10 insertions(+), 15 deletions(-) diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs index 6b5ccaad..2131cd14 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs @@ -503,7 +503,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe CBase.BackgroundMusic.SetStatus(true); - _PreviewStream = CBase.Sound.Load(song.GetMP3(), false); + _PreviewStream = CBase.Sound.Load(song.GetMP3()); CBase.Sound.SetPosition(_PreviewStream, song.Preview.StartTime); CBase.Sound.SetStreamVolume(_PreviewStream, 0f); CBase.Sound.Play(_PreviewStream); @@ -527,7 +527,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe CSong song = CBase.Songs.GetSongByID(songID); CBase.BackgroundMusic.SetStatus(true); - _PreviewStream = CBase.Sound.Load(song.GetMP3(), false); + _PreviewStream = CBase.Sound.Load(song.GetMP3()); CBase.Sound.SetPosition(_PreviewStream, song.Preview.StartTime); CBase.Sound.SetStreamVolume(_PreviewStream, 0f); CBase.Sound.Play(_PreviewStream); diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 533444fd..f8d0b073 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -773,9 +773,9 @@ namespace Vocaluxe.Base class CBsound : ISound { - public int Load(string soundFile, bool prescan) + public int Load(string soundFile, bool loop = false, bool prescan = false) { - return CSound.Load(soundFile, prescan); + return CSound.Load(soundFile, loop, prescan); } public void SetPosition(int soundStream, float newPosition) diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index 4a39e03e..9d7f65dd 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -85,14 +85,9 @@ namespace Vocaluxe.Base } #region Stream Handling - public static int Load(string media) + public static int Load(string media, bool loop=false, bool prescan=false) { - return _Playback.Load(media); - } - - public static int Load(string media, bool prescan) - { - return _Playback.Load(media, prescan); + return _Playback.Load(media, loop, prescan); } public static void Close(int stream) @@ -194,7 +189,7 @@ namespace Vocaluxe.Base if (!File.Exists(file)) return -1; - int stream = Load(file, fade); + int stream = Load(file, false, fade); if (stream < 0) return -1; Play(stream); diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 42cdab5d..d39a6202 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -597,7 +597,7 @@ namespace Vocaluxe.Screens songname += " (" + CGame.RoundNr + "/" + rounds + ")"; _Texts[_TextSongName].Text = songname; - _CurrentStream = CSound.Load(song.GetMP3(), true); + _CurrentStream = CSound.Load(song.GetMP3(), false, true); CSound.SetStreamVolume(_CurrentStream, _Volume); CSound.SetPosition(_CurrentStream, song.Start); _CurrentTime = song.Start; diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 3ec5204c..739bbdf7 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -256,7 +256,7 @@ namespace VocaluxeLib public interface ISound { - int Load(string soundFile, bool prescan); + int Load(string soundFile, bool loop = false, bool prescan = false); void SetPosition(int soundStream, float newPosition); void Play(int soundStream); void Fade(int soundStream, float targetVolume, float duration); diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index 6743c1f8..b1106b7b 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -523,7 +523,7 @@ namespace VocaluxeLib.Menu.SongMenu if (song == null) return; - int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true); + int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true, true); float startposition = song.Preview.StartTime; float length = CBase.Sound.GetLength(stream); From dd6503c911b13eaba5b6174801df2cb7d017cffb Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 19:56:57 +0200 Subject: [PATCH 112/116] Removed Gst Wrapper --- GstreamerHelper/GstreamerHelper.vcxproj | 297 --- .../GstreamerHelper.vcxproj.filters | 39 - GstreamerHelper/GstreamerHelper.vcxproj.user | 4 - GstreamerHelper/GstreamerVideo.cpp | 157 -- GstreamerHelper/GstreamerVideo.h | 42 - GstreamerHelper/GstreamerVideoStream.cpp | 296 --- GstreamerHelper/GstreamerVideoStream.h | 71 - .../x64/include/glib-2.0/gio/gaction.h | 78 - .../x64/include/glib-2.0/gio/gactiongroup.h | 149 -- .../glib-2.0/gio/gactiongroupexporter.h | 47 - .../x64/include/glib-2.0/gio/gactionmap.h | 93 - .../x64/include/glib-2.0/gio/gappinfo.h | 262 --- .../x64/include/glib-2.0/gio/gapplication.h | 163 -- .../glib-2.0/gio/gapplicationcommandline.h | 102 - .../x64/include/glib-2.0/gio/gasyncinitable.h | 119 -- .../x64/include/glib-2.0/gio/gasyncresult.h | 84 - .../glib-2.0/gio/gbufferedinputstream.h | 123 -- .../glib-2.0/gio/gbufferedoutputstream.h | 81 - .../x64/include/glib-2.0/gio/gcancellable.h | 105 - .../include/glib-2.0/gio/gcharsetconverter.h | 60 - .../x64/include/glib-2.0/gio/gcontenttype.h | 61 - .../x64/include/glib-2.0/gio/gconverter.h | 95 - .../glib-2.0/gio/gconverterinputstream.h | 79 - .../glib-2.0/gio/gconverteroutputstream.h | 79 - .../x64/include/glib-2.0/gio/gcredentials.h | 76 - .../include/glib-2.0/gio/gdatainputstream.h | 160 -- .../include/glib-2.0/gio/gdataoutputstream.h | 115 -- .../include/glib-2.0/gio/gdbusactiongroup.h | 55 - .../x64/include/glib-2.0/gio/gdbusaddress.h | 58 - .../include/glib-2.0/gio/gdbusauthobserver.h | 50 - .../include/glib-2.0/gio/gdbusconnection.h | 599 ------ .../x64/include/glib-2.0/gio/gdbuserror.h | 100 - .../x64/include/glib-2.0/gio/gdbusinterface.h | 79 - .../glib-2.0/gio/gdbusinterfaceskeleton.h | 115 -- .../include/glib-2.0/gio/gdbusintrospection.h | 296 --- .../x64/include/glib-2.0/gio/gdbusmenumodel.h | 45 - .../x64/include/glib-2.0/gio/gdbusmessage.h | 149 -- .../glib-2.0/gio/gdbusmethodinvocation.h | 78 - .../include/glib-2.0/gio/gdbusnameowning.h | 112 -- .../include/glib-2.0/gio/gdbusnamewatching.h | 94 - .../x64/include/glib-2.0/gio/gdbusobject.h | 76 - .../include/glib-2.0/gio/gdbusobjectmanager.h | 91 - .../glib-2.0/gio/gdbusobjectmanagerclient.h | 137 -- .../glib-2.0/gio/gdbusobjectmanagerserver.h | 87 - .../include/glib-2.0/gio/gdbusobjectproxy.h | 78 - .../glib-2.0/gio/gdbusobjectskeleton.h | 91 - .../x64/include/glib-2.0/gio/gdbusproxy.h | 190 -- .../x64/include/glib-2.0/gio/gdbusserver.h | 54 - .../x64/include/glib-2.0/gio/gdbusutils.h | 49 - .../x64/include/glib-2.0/gio/gdrive.h | 236 --- .../x64/include/glib-2.0/gio/gemblem.h | 58 - .../x64/include/glib-2.0/gio/gemblemedicon.h | 77 - .../x64/include/glib-2.0/gio/gfile.h | 1042 ---------- .../x64/include/glib-2.0/gio/gfileattribute.h | 79 - .../include/glib-2.0/gio/gfileenumerator.h | 132 -- .../x64/include/glib-2.0/gio/gfileicon.h | 56 - .../x64/include/glib-2.0/gio/gfileinfo.h | 983 ---------- .../include/glib-2.0/gio/gfileinputstream.h | 112 -- .../x64/include/glib-2.0/gio/gfileiostream.h | 118 -- .../x64/include/glib-2.0/gio/gfilemonitor.h | 95 - .../include/glib-2.0/gio/gfilenamecompleter.h | 76 - .../include/glib-2.0/gio/gfileoutputstream.h | 119 -- .../include/glib-2.0/gio/gfilterinputstream.h | 76 - .../glib-2.0/gio/gfilteroutputstream.h | 76 - .../x64/include/glib-2.0/gio/gicon.h | 91 - .../x64/include/glib-2.0/gio/ginetaddress.h | 106 - .../include/glib-2.0/gio/ginetaddressmask.h | 81 - .../include/glib-2.0/gio/ginetsocketaddress.h | 73 - .../x64/include/glib-2.0/gio/ginitable.h | 96 - .../x64/include/glib-2.0/gio/ginputstream.h | 188 -- .../x64/include/glib-2.0/gio/gio.h | 162 -- .../x64/include/glib-2.0/gio/gioenums.h | 1658 ---------------- .../x64/include/glib-2.0/gio/gioenumtypes.h | 159 -- .../x64/include/glib-2.0/gio/gioerror.h | 52 - .../x64/include/glib-2.0/gio/giomodule.h | 176 -- .../x64/include/glib-2.0/gio/gioscheduler.h | 52 - .../x64/include/glib-2.0/gio/giostream.h | 123 -- .../x64/include/glib-2.0/gio/giotypes.h | 472 ----- .../x64/include/glib-2.0/gio/gloadableicon.h | 97 - .../include/glib-2.0/gio/gmemoryinputstream.h | 88 - .../glib-2.0/gio/gmemoryoutputstream.h | 101 - .../x64/include/glib-2.0/gio/gmenu.h | 150 -- .../x64/include/glib-2.0/gio/gmenuexporter.h | 42 - .../x64/include/glib-2.0/gio/gmenumodel.h | 195 -- .../x64/include/glib-2.0/gio/gmount.h | 254 --- .../include/glib-2.0/gio/gmountoperation.h | 127 -- .../glib-2.0/gio/gnativevolumemonitor.h | 62 - .../include/glib-2.0/gio/gnetworkaddress.h | 73 - .../include/glib-2.0/gio/gnetworkmonitor.h | 91 - .../include/glib-2.0/gio/gnetworkservice.h | 71 - .../x64/include/glib-2.0/gio/goutputstream.h | 223 --- .../x64/include/glib-2.0/gio/gpermission.h | 118 -- .../glib-2.0/gio/gpollableinputstream.h | 102 - .../glib-2.0/gio/gpollableoutputstream.h | 102 - .../x64/include/glib-2.0/gio/gpollableutils.h | 65 - .../x64/include/glib-2.0/gio/gproxy.h | 124 -- .../x64/include/glib-2.0/gio/gproxyaddress.h | 81 - .../glib-2.0/gio/gproxyaddressenumerator.h | 75 - .../x64/include/glib-2.0/gio/gproxyresolver.h | 91 - .../include/glib-2.0/gio/gremoteactiongroup.h | 77 - .../x64/include/glib-2.0/gio/gresolver.h | 199 -- .../x64/include/glib-2.0/gio/gresource.h | 129 -- .../x64/include/glib-2.0/gio/gseekable.h | 99 - .../x64/include/glib-2.0/gio/gsettings.h | 282 --- .../include/glib-2.0/gio/gsettingsbackend.h | 144 -- .../include/glib-2.0/gio/gsettingsschema.h | 61 - .../x64/include/glib-2.0/gio/gsimpleaction.h | 56 - .../include/glib-2.0/gio/gsimpleactiongroup.h | 93 - .../include/glib-2.0/gio/gsimpleasyncresult.h | 138 -- .../include/glib-2.0/gio/gsimplepermission.h | 45 - .../x64/include/glib-2.0/gio/gsocket.h | 238 --- .../x64/include/glib-2.0/gio/gsocketaddress.h | 79 - .../glib-2.0/gio/gsocketaddressenumerator.h | 89 - .../x64/include/glib-2.0/gio/gsocketclient.h | 163 -- .../include/glib-2.0/gio/gsocketconnectable.h | 74 - .../include/glib-2.0/gio/gsocketconnection.h | 110 -- .../glib-2.0/gio/gsocketcontrolmessage.h | 105 - .../include/glib-2.0/gio/gsocketlistener.h | 138 -- .../x64/include/glib-2.0/gio/gsocketservice.h | 88 - .../x64/include/glib-2.0/gio/gsrvtarget.h | 52 - .../x64/include/glib-2.0/gio/gtcpconnection.h | 68 - .../glib-2.0/gio/gtcpwrapperconnection.h | 68 - .../x64/include/glib-2.0/gio/gtestdbus.h | 74 - .../x64/include/glib-2.0/gio/gthemedicon.h | 63 - .../glib-2.0/gio/gthreadedsocketservice.h | 81 - .../x64/include/glib-2.0/gio/gtlsbackend.h | 90 - .../include/glib-2.0/gio/gtlscertificate.h | 87 - .../glib-2.0/gio/gtlsclientconnection.h | 64 - .../x64/include/glib-2.0/gio/gtlsconnection.h | 138 -- .../x64/include/glib-2.0/gio/gtlsdatabase.h | 235 --- .../include/glib-2.0/gio/gtlsfiledatabase.h | 56 - .../include/glib-2.0/gio/gtlsinteraction.h | 102 - .../x64/include/glib-2.0/gio/gtlspassword.h | 101 - .../glib-2.0/gio/gtlsserverconnection.h | 61 - .../x64/include/glib-2.0/gio/gvfs.h | 125 -- .../x64/include/glib-2.0/gio/gvolume.h | 239 --- .../x64/include/glib-2.0/gio/gvolumemonitor.h | 149 -- .../include/glib-2.0/gio/gzlibcompressor.h | 60 - .../include/glib-2.0/gio/gzlibdecompressor.h | 57 - .../x64/include/glib-2.0/glib-object.h | 42 - .../x64/include/glib-2.0/glib-unix.h | 90 - GstreamerHelper/x64/include/glib-2.0/glib.h | 112 -- .../glib-2.0/glib/deprecated/gallocator.h | 90 - .../include/glib-2.0/glib/deprecated/gcache.h | 73 - .../glib-2.0/glib/deprecated/gcompletion.h | 85 - .../include/glib-2.0/glib/deprecated/gmain.h | 138 -- .../include/glib-2.0/glib/deprecated/grel.h | 107 - .../glib-2.0/glib/deprecated/gthread.h | 285 --- .../x64/include/glib-2.0/glib/galloca.h | 112 -- .../x64/include/glib-2.0/glib/garray.h | 187 -- .../x64/include/glib-2.0/glib/gasyncqueue.h | 91 - .../x64/include/glib-2.0/glib/gatomic.h | 220 --- .../x64/include/glib-2.0/glib/gbacktrace.h | 64 - .../x64/include/glib-2.0/glib/gbase64.h | 57 - .../x64/include/glib-2.0/glib/gbitlock.h | 72 - .../x64/include/glib-2.0/glib/gbookmarkfile.h | 215 -- .../x64/include/glib-2.0/glib/gbytes.h | 78 - .../x64/include/glib-2.0/glib/gcharset.h | 40 - .../x64/include/glib-2.0/glib/gchecksum.h | 91 - .../x64/include/glib-2.0/glib/gconvert.h | 164 -- .../x64/include/glib-2.0/glib/gdataset.h | 137 -- .../x64/include/glib-2.0/glib/gdate.h | 264 --- .../x64/include/glib-2.0/glib/gdatetime.h | 217 --- .../x64/include/glib-2.0/glib/gdir.h | 54 - .../x64/include/glib-2.0/glib/genviron.h | 65 - .../x64/include/glib-2.0/glib/gerror.h | 107 - .../x64/include/glib-2.0/glib/gfileutils.h | 179 -- .../x64/include/glib-2.0/glib/ggettext.h | 59 - .../x64/include/glib-2.0/glib/ghash.h | 147 -- .../x64/include/glib-2.0/glib/ghmac.h | 80 - .../x64/include/glib-2.0/glib/ghook.h | 181 -- .../x64/include/glib-2.0/glib/ghostutils.h | 40 - .../x64/include/glib-2.0/glib/gi18n-lib.h | 38 - .../x64/include/glib-2.0/glib/gi18n.h | 34 - .../x64/include/glib-2.0/glib/giochannel.h | 374 ---- .../x64/include/glib-2.0/glib/gkeyfile.h | 268 --- .../x64/include/glib-2.0/glib/glist.h | 124 -- .../x64/include/glib-2.0/glib/gmacros.h | 343 ---- .../x64/include/glib-2.0/glib/gmain.h | 493 ----- .../x64/include/glib-2.0/glib/gmappedfile.h | 54 - .../x64/include/glib-2.0/glib/gmarkup.h | 238 --- .../x64/include/glib-2.0/glib/gmem.h | 285 --- .../x64/include/glib-2.0/glib/gmessages.h | 404 ---- .../x64/include/glib-2.0/glib/gnode.h | 298 --- .../x64/include/glib-2.0/glib/goption.h | 370 ---- .../x64/include/glib-2.0/glib/gpattern.h | 49 - .../x64/include/glib-2.0/glib/gpoll.h | 120 -- .../x64/include/glib-2.0/glib/gprimes.h | 51 - .../x64/include/glib-2.0/glib/gprintf.h | 52 - .../x64/include/glib-2.0/glib/gqsort.h | 46 - .../x64/include/glib-2.0/glib/gquark.h | 64 - .../x64/include/glib-2.0/glib/gqueue.h | 152 -- .../x64/include/glib-2.0/glib/grand.h | 85 - .../x64/include/glib-2.0/glib/gregex.h | 561 ------ .../x64/include/glib-2.0/glib/gscanner.h | 284 --- .../x64/include/glib-2.0/glib/gsequence.h | 136 -- .../x64/include/glib-2.0/glib/gshell.h | 55 - .../x64/include/glib-2.0/glib/gslice.h | 90 - .../x64/include/glib-2.0/glib/gslist.h | 117 -- .../x64/include/glib-2.0/glib/gspawn.h | 256 --- .../x64/include/glib-2.0/glib/gstdio.h | 149 -- .../x64/include/glib-2.0/glib/gstrfuncs.h | 247 --- .../x64/include/glib-2.0/glib/gstring.h | 158 -- .../x64/include/glib-2.0/glib/gstringchunk.h | 53 - .../x64/include/glib-2.0/glib/gtestutils.h | 318 --- .../x64/include/glib-2.0/glib/gthread.h | 231 --- .../x64/include/glib-2.0/glib/gthreadpool.h | 80 - .../x64/include/glib-2.0/glib/gtimer.h | 65 - .../x64/include/glib-2.0/glib/gtimezone.h | 81 - .../x64/include/glib-2.0/glib/gtrashstack.h | 103 - .../x64/include/glib-2.0/glib/gtree.h | 90 - .../x64/include/glib-2.0/glib/gtypes.h | 484 ----- .../x64/include/glib-2.0/glib/gunicode.h | 752 ------- .../x64/include/glib-2.0/glib/gurifuncs.h | 81 - .../x64/include/glib-2.0/glib/gutils.h | 375 ---- .../x64/include/glib-2.0/glib/gvariant.h | 286 --- .../x64/include/glib-2.0/glib/gvarianttype.h | 352 ---- .../x64/include/glib-2.0/glib/gversion.h | 56 - .../include/glib-2.0/glib/gversionmacros.h | 250 --- .../x64/include/glib-2.0/glib/gwin32.h | 118 -- .../x64/include/glib-2.0/gmodule.h | 103 - .../x64/include/glib-2.0/gobject/gbinding.h | 136 -- .../x64/include/glib-2.0/gobject/gboxed.h | 114 -- .../x64/include/glib-2.0/gobject/gclosure.h | 281 --- .../x64/include/glib-2.0/gobject/genums.h | 261 --- .../x64/include/glib-2.0/gobject/glib-types.h | 277 --- .../x64/include/glib-2.0/gobject/gmarshal.h | 341 ---- .../x64/include/glib-2.0/gobject/gobject.h | 610 ------ .../glib-2.0/gobject/gobjectnotifyqueue.c | 199 -- .../x64/include/glib-2.0/gobject/gparam.h | 414 ---- .../include/glib-2.0/gobject/gparamspecs.h | 1143 ----------- .../x64/include/glib-2.0/gobject/gsignal.h | 547 ------ .../include/glib-2.0/gobject/gsourceclosure.h | 38 - .../x64/include/glib-2.0/gobject/gtype.h | 1727 ----------------- .../include/glib-2.0/gobject/gtypemodule.h | 263 --- .../include/glib-2.0/gobject/gtypeplugin.h | 134 -- .../x64/include/glib-2.0/gobject/gvalue.h | 183 -- .../include/glib-2.0/gobject/gvaluearray.h | 106 - .../glib-2.0/gobject/gvaluecollector.h | 256 --- .../include/glib-2.0/gobject/gvaluetypes.h | 264 --- .../gstreamer-1.0/gst/app/gstappsink.h | 127 -- .../include/gstreamer-1.0/gst/app/gstappsrc.h | 150 -- .../gstreamer-1.0/gst/audio/audio-channels.h | 166 -- .../gstreamer-1.0/gst/audio/audio-enumtypes.h | 39 - .../gstreamer-1.0/gst/audio/audio-format.h | 330 ---- .../gstreamer-1.0/gst/audio/audio-info.h | 133 -- .../include/gstreamer-1.0/gst/audio/audio.h | 65 - .../gst/audio/gstaudiobasesink.h | 190 -- .../gstreamer-1.0/gst/audio/gstaudiobasesrc.h | 147 -- .../gstreamer-1.0/gst/audio/gstaudiocdsrc.h | 140 -- .../gstreamer-1.0/gst/audio/gstaudioclock.h | 100 - .../gstreamer-1.0/gst/audio/gstaudiodecoder.h | 362 ---- .../gstreamer-1.0/gst/audio/gstaudioencoder.h | 311 --- .../gstreamer-1.0/gst/audio/gstaudiofilter.h | 101 - .../gst/audio/gstaudioiec61937.h | 33 - .../gstreamer-1.0/gst/audio/gstaudiometa.h | 78 - .../gst/audio/gstaudioringbuffer.h | 333 ---- .../gstreamer-1.0/gst/audio/gstaudiosink.h | 100 - .../gstreamer-1.0/gst/audio/gstaudiosrc.h | 99 - .../gstreamer-1.0/gst/audio/streamvolume.h | 82 - .../gstreamer-1.0/gst/base/gstadapter.h | 77 - .../gstreamer-1.0/gst/base/gstbaseparse.h | 329 ---- .../gstreamer-1.0/gst/base/gstbasesink.h | 255 --- .../gstreamer-1.0/gst/base/gstbasesrc.h | 270 --- .../gstreamer-1.0/gst/base/gstbasetransform.h | 298 --- .../gstreamer-1.0/gst/base/gstbitreader.h | 301 --- .../gstreamer-1.0/gst/base/gstbytereader.h | 513 ----- .../gstreamer-1.0/gst/base/gstbytewriter.h | 401 ---- .../gstreamer-1.0/gst/base/gstcollectpads.h | 358 ---- .../gstreamer-1.0/gst/base/gstpushsrc.h | 73 - .../gst/base/gsttypefindhelper.h | 77 - .../gst/basecamerabinsrc/gstbasecamerasrc.h | 142 -- .../gst/basecamerabinsrc/gstcamerabin-enum.h | 62 - .../basecamerabinsrc/gstcamerabinpreview.h | 56 - .../gst/codecparsers/gsth264parser.h | 723 ------- .../gst/codecparsers/gstmpeg4parser.h | 578 ------ .../gst/codecparsers/gstmpegvideoparser.h | 431 ---- .../gst/codecparsers/gstvc1parser.h | 622 ------ .../gst/controller/gstargbcontrolbinding.h | 98 - .../gst/controller/gstdirectcontrolbinding.h | 115 -- .../gstinterpolationcontrolsource.h | 97 - .../gst/controller/gstlfocontrolsource.h | 100 - .../controller/gsttimedvaluecontrolsource.h | 133 -- .../gst/controller/gsttriggercontrolsource.h | 83 - .../include/gstreamer-1.0/gst/fft/gstfft.h | 53 - .../include/gstreamer-1.0/gst/fft/gstfftf32.h | 63 - .../include/gstreamer-1.0/gst/fft/gstfftf64.h | 63 - .../include/gstreamer-1.0/gst/fft/gstffts16.h | 63 - .../include/gstreamer-1.0/gst/fft/gstffts32.h | 63 - .../include/gstreamer-1.0/gst/glib-compat.h | 37 - .../x64/include/gstreamer-1.0/gst/gst.h | 108 -- .../include/gstreamer-1.0/gst/gstallocator.h | 159 -- .../gstreamer-1.0/gst/gstatomicqueue.h | 57 - .../x64/include/gstreamer-1.0/gst/gstbin.h | 204 -- .../x64/include/gstreamer-1.0/gst/gstbuffer.h | 543 ------ .../include/gstreamer-1.0/gst/gstbufferlist.h | 166 -- .../include/gstreamer-1.0/gst/gstbufferpool.h | 208 -- .../x64/include/gstreamer-1.0/gst/gstbus.h | 183 -- .../x64/include/gstreamer-1.0/gst/gstcaps.h | 447 ----- .../include/gstreamer-1.0/gst/gstchildproxy.h | 105 - .../x64/include/gstreamer-1.0/gst/gstclock.h | 521 ----- .../x64/include/gstreamer-1.0/gst/gstcompat.h | 98 - .../x64/include/gstreamer-1.0/gst/gstconfig.h | 201 -- .../gstreamer-1.0/gst/gstcontrolbinding.h | 122 -- .../gstreamer-1.0/gst/gstcontrolsource.h | 139 -- .../include/gstreamer-1.0/gst/gstdatetime.h | 106 - .../include/gstreamer-1.0/gst/gstdebugutils.h | 103 - .../include/gstreamer-1.0/gst/gstelement.h | 801 -------- .../gstreamer-1.0/gst/gstelementfactory.h | 222 --- .../gstreamer-1.0/gst/gstelementmetadata.h | 77 - .../include/gstreamer-1.0/gst/gstenumtypes.h | 231 --- .../x64/include/gstreamer-1.0/gst/gsterror.h | 248 --- .../x64/include/gstreamer-1.0/gst/gstevent.h | 550 ------ .../x64/include/gstreamer-1.0/gst/gstformat.h | 113 -- .../include/gstreamer-1.0/gst/gstghostpad.h | 128 -- .../x64/include/gstreamer-1.0/gst/gstinfo.h | 1515 --------------- .../include/gstreamer-1.0/gst/gstiterator.h | 273 --- .../x64/include/gstreamer-1.0/gst/gstmacros.h | 54 - .../x64/include/gstreamer-1.0/gst/gstmemory.h | 325 ---- .../include/gstreamer-1.0/gst/gstmessage.h | 562 ------ .../x64/include/gstreamer-1.0/gst/gstmeta.h | 216 --- .../include/gstreamer-1.0/gst/gstminiobject.h | 275 --- .../x64/include/gstreamer-1.0/gst/gstobject.h | 267 --- .../x64/include/gstreamer-1.0/gst/gstpad.h | 1006 ---------- .../gstreamer-1.0/gst/gstpadtemplate.h | 194 -- .../include/gstreamer-1.0/gst/gstparamspecs.h | 122 -- .../x64/include/gstreamer-1.0/gst/gstparse.h | 115 -- .../include/gstreamer-1.0/gst/gstpipeline.h | 110 -- .../x64/include/gstreamer-1.0/gst/gstplugin.h | 315 --- .../gstreamer-1.0/gst/gstpluginfeature.h | 145 -- .../x64/include/gstreamer-1.0/gst/gstpoll.h | 95 - .../x64/include/gstreamer-1.0/gst/gstpreset.h | 102 - .../x64/include/gstreamer-1.0/gst/gstquery.h | 481 ----- .../include/gstreamer-1.0/gst/gstregistry.h | 105 - .../x64/include/gstreamer-1.0/gst/gstsample.h | 129 -- .../include/gstreamer-1.0/gst/gstsegment.h | 205 -- .../include/gstreamer-1.0/gst/gststructure.h | 260 --- .../gstreamer-1.0/gst/gstsystemclock.h | 87 - .../include/gstreamer-1.0/gst/gsttaglist.h | 1049 ---------- .../include/gstreamer-1.0/gst/gsttagsetter.h | 100 - .../x64/include/gstreamer-1.0/gst/gsttask.h | 199 -- .../include/gstreamer-1.0/gst/gsttaskpool.h | 101 - .../x64/include/gstreamer-1.0/gst/gsttoc.h | 142 -- .../include/gstreamer-1.0/gst/gsttocsetter.h | 68 - .../include/gstreamer-1.0/gst/gsttypefind.h | 124 -- .../gstreamer-1.0/gst/gsttypefindfactory.h | 62 - .../x64/include/gstreamer-1.0/gst/gsturi.h | 156 -- .../x64/include/gstreamer-1.0/gst/gstutils.h | 948 --------- .../x64/include/gstreamer-1.0/gst/gstvalue.h | 528 ----- .../include/gstreamer-1.0/gst/gstversion.h | 88 - .../gst/interfaces/photography-enumtypes.h | 39 - .../gst/interfaces/photography.h | 590 ------ .../include/gstreamer-1.0/gst/math-compat.h | 112 -- .../include/gstreamer-1.0/gst/net/gstnet.h | 30 - .../gstreamer-1.0/gst/net/gstnetaddressmeta.h | 57 - .../gstreamer-1.0/gst/net/gstnetclientclock.h | 78 - .../gstreamer-1.0/gst/net/gstnettimepacket.h | 70 - .../gst/net/gstnettimeprovider.h | 74 - .../gstreamer-1.0/gst/pbutils/codec-utils.h | 65 - .../gstreamer-1.0/gst/pbutils/descriptions.h | 58 - .../gst/pbutils/encoding-profile.h | 183 -- .../gst/pbutils/encoding-target.h | 143 -- .../gstreamer-1.0/gst/pbutils/gstdiscoverer.h | 277 --- .../gst/pbutils/gstpluginsbaseversion.h | 76 - .../gst/pbutils/install-plugins.h | 138 -- .../gst/pbutils/missing-plugins.h | 77 - .../gst/pbutils/pbutils-enumtypes.h | 23 - .../gstreamer-1.0/gst/pbutils/pbutils.h | 42 - .../include/gstreamer-1.0/gst/riff/riff-ids.h | 523 ----- .../gstreamer-1.0/gst/riff/riff-media.h | 66 - .../gstreamer-1.0/gst/riff/riff-read.h | 87 - .../gstreamer-1.0/gst/rtp/gstrtcpbuffer.h | 310 --- .../gst/rtp/gstrtpbaseaudiopayload.h | 106 - .../gst/rtp/gstrtpbasedepayload.h | 110 -- .../gstreamer-1.0/gst/rtp/gstrtpbasepayload.h | 170 -- .../gstreamer-1.0/gst/rtp/gstrtpbuffer.h | 155 -- .../gstreamer-1.0/gst/rtp/gstrtppayloads.h | 196 -- .../gst/rtsp/gstrtsp-enumtypes.h | 35 - .../gst/rtsp/gstrtspconnection.h | 199 -- .../gstreamer-1.0/gst/rtsp/gstrtspdefs.h | 410 ---- .../gstreamer-1.0/gst/rtsp/gstrtspextension.h | 97 - .../gstreamer-1.0/gst/rtsp/gstrtspmessage.h | 189 -- .../gstreamer-1.0/gst/rtsp/gstrtsprange.h | 121 -- .../gstreamer-1.0/gst/rtsp/gstrtsptransport.h | 177 -- .../gstreamer-1.0/gst/rtsp/gstrtspurl.h | 103 - .../include/gstreamer-1.0/gst/sdp/gstsdp.h | 58 - .../gstreamer-1.0/gst/sdp/gstsdpmessage.h | 417 ---- .../gst/signalprocessor/gstsignalprocessor.h | 136 -- .../gstreamer-1.0/gst/tag/gsttagdemux.h | 138 -- .../include/gstreamer-1.0/gst/tag/gsttagmux.h | 85 - .../x64/include/gstreamer-1.0/gst/tag/tag.h | 591 ------ .../include/gstreamer-1.0/gst/tag/xmpwriter.h | 68 - .../gstreamer-1.0/gst/video/colorbalance.h | 114 -- .../gst/video/colorbalancechannel.h | 85 - .../gst/video/gstsurfaceconverter.h | 65 - .../gstreamer-1.0/gst/video/gstsurfacemeta.h | 68 - .../gstreamer-1.0/gst/video/gstvideodecoder.h | 371 ---- .../gstreamer-1.0/gst/video/gstvideoencoder.h | 320 --- .../gstreamer-1.0/gst/video/gstvideofilter.h | 86 - .../gstreamer-1.0/gst/video/gstvideometa.h | 143 -- .../gstreamer-1.0/gst/video/gstvideopool.h | 80 - .../gstreamer-1.0/gst/video/gstvideosink.h | 130 -- .../gstreamer-1.0/gst/video/gstvideoutils.h | 278 --- .../gstreamer-1.0/gst/video/navigation.h | 265 --- .../gstreamer-1.0/gst/video/video-blend.h | 39 - .../gstreamer-1.0/gst/video/video-color.h | 161 -- .../gstreamer-1.0/gst/video/video-enumtypes.h | 55 - .../gstreamer-1.0/gst/video/video-event.h | 61 - .../gstreamer-1.0/gst/video/video-format.h | 458 ----- .../gstreamer-1.0/gst/video/video-frame.h | 151 -- .../gstreamer-1.0/gst/video/video-info.h | 190 -- .../gst/video/video-overlay-composition.h | 285 --- .../include/gstreamer-1.0/gst/video/video.h | 87 - .../gstreamer-1.0/gst/video/videocontext.h | 117 -- .../gst/video/videoorientation.h | 94 - .../gstreamer-1.0/gst/video/videooverlay.h | 99 - GstreamerHelper/x64/lib/glib-2.0.lib | Bin 1193670 -> 0 bytes .../x64/lib/glib-2.0/include/glibconfig.h | 266 --- GstreamerHelper/x64/lib/gobject-2.0.lib | Bin 323452 -> 0 bytes GstreamerHelper/x64/lib/gstcontroller-1.0.lib | Bin 19298 -> 0 bytes GstreamerHelper/x64/lib/gstreamer-1.0.lib | Bin 1007936 -> 0 bytes .../x86/include/glib-2.0/gio/gaction.h | 78 - .../x86/include/glib-2.0/gio/gactiongroup.h | 149 -- .../glib-2.0/gio/gactiongroupexporter.h | 47 - .../x86/include/glib-2.0/gio/gactionmap.h | 93 - .../x86/include/glib-2.0/gio/gappinfo.h | 262 --- .../x86/include/glib-2.0/gio/gapplication.h | 163 -- .../glib-2.0/gio/gapplicationcommandline.h | 102 - .../x86/include/glib-2.0/gio/gasyncinitable.h | 119 -- .../x86/include/glib-2.0/gio/gasyncresult.h | 84 - .../glib-2.0/gio/gbufferedinputstream.h | 123 -- .../glib-2.0/gio/gbufferedoutputstream.h | 81 - .../x86/include/glib-2.0/gio/gcancellable.h | 105 - .../include/glib-2.0/gio/gcharsetconverter.h | 60 - .../x86/include/glib-2.0/gio/gcontenttype.h | 61 - .../x86/include/glib-2.0/gio/gconverter.h | 95 - .../glib-2.0/gio/gconverterinputstream.h | 79 - .../glib-2.0/gio/gconverteroutputstream.h | 79 - .../x86/include/glib-2.0/gio/gcredentials.h | 76 - .../include/glib-2.0/gio/gdatainputstream.h | 160 -- .../include/glib-2.0/gio/gdataoutputstream.h | 115 -- .../include/glib-2.0/gio/gdbusactiongroup.h | 55 - .../x86/include/glib-2.0/gio/gdbusaddress.h | 58 - .../include/glib-2.0/gio/gdbusauthobserver.h | 50 - .../include/glib-2.0/gio/gdbusconnection.h | 599 ------ .../x86/include/glib-2.0/gio/gdbuserror.h | 100 - .../x86/include/glib-2.0/gio/gdbusinterface.h | 79 - .../glib-2.0/gio/gdbusinterfaceskeleton.h | 115 -- .../include/glib-2.0/gio/gdbusintrospection.h | 296 --- .../x86/include/glib-2.0/gio/gdbusmenumodel.h | 45 - .../x86/include/glib-2.0/gio/gdbusmessage.h | 149 -- .../glib-2.0/gio/gdbusmethodinvocation.h | 78 - .../include/glib-2.0/gio/gdbusnameowning.h | 112 -- .../include/glib-2.0/gio/gdbusnamewatching.h | 94 - .../x86/include/glib-2.0/gio/gdbusobject.h | 76 - .../include/glib-2.0/gio/gdbusobjectmanager.h | 91 - .../glib-2.0/gio/gdbusobjectmanagerclient.h | 137 -- .../glib-2.0/gio/gdbusobjectmanagerserver.h | 87 - .../include/glib-2.0/gio/gdbusobjectproxy.h | 78 - .../glib-2.0/gio/gdbusobjectskeleton.h | 91 - .../x86/include/glib-2.0/gio/gdbusproxy.h | 190 -- .../x86/include/glib-2.0/gio/gdbusserver.h | 54 - .../x86/include/glib-2.0/gio/gdbusutils.h | 49 - .../x86/include/glib-2.0/gio/gdrive.h | 236 --- .../x86/include/glib-2.0/gio/gemblem.h | 58 - .../x86/include/glib-2.0/gio/gemblemedicon.h | 77 - .../x86/include/glib-2.0/gio/gfile.h | 1042 ---------- .../x86/include/glib-2.0/gio/gfileattribute.h | 79 - .../include/glib-2.0/gio/gfileenumerator.h | 132 -- .../x86/include/glib-2.0/gio/gfileicon.h | 56 - .../x86/include/glib-2.0/gio/gfileinfo.h | 983 ---------- .../include/glib-2.0/gio/gfileinputstream.h | 112 -- .../x86/include/glib-2.0/gio/gfileiostream.h | 118 -- .../x86/include/glib-2.0/gio/gfilemonitor.h | 95 - .../include/glib-2.0/gio/gfilenamecompleter.h | 76 - .../include/glib-2.0/gio/gfileoutputstream.h | 119 -- .../include/glib-2.0/gio/gfilterinputstream.h | 76 - .../glib-2.0/gio/gfilteroutputstream.h | 76 - .../x86/include/glib-2.0/gio/gicon.h | 91 - .../x86/include/glib-2.0/gio/ginetaddress.h | 106 - .../include/glib-2.0/gio/ginetaddressmask.h | 81 - .../include/glib-2.0/gio/ginetsocketaddress.h | 73 - .../x86/include/glib-2.0/gio/ginitable.h | 96 - .../x86/include/glib-2.0/gio/ginputstream.h | 188 -- .../x86/include/glib-2.0/gio/gio.h | 162 -- .../x86/include/glib-2.0/gio/gioenums.h | 1658 ---------------- .../x86/include/glib-2.0/gio/gioenumtypes.h | 159 -- .../x86/include/glib-2.0/gio/gioerror.h | 52 - .../x86/include/glib-2.0/gio/giomodule.h | 176 -- .../x86/include/glib-2.0/gio/gioscheduler.h | 52 - .../x86/include/glib-2.0/gio/giostream.h | 123 -- .../x86/include/glib-2.0/gio/giotypes.h | 472 ----- .../x86/include/glib-2.0/gio/gloadableicon.h | 97 - .../include/glib-2.0/gio/gmemoryinputstream.h | 88 - .../glib-2.0/gio/gmemoryoutputstream.h | 101 - .../x86/include/glib-2.0/gio/gmenu.h | 150 -- .../x86/include/glib-2.0/gio/gmenuexporter.h | 42 - .../x86/include/glib-2.0/gio/gmenumodel.h | 195 -- .../x86/include/glib-2.0/gio/gmount.h | 254 --- .../include/glib-2.0/gio/gmountoperation.h | 127 -- .../glib-2.0/gio/gnativevolumemonitor.h | 62 - .../include/glib-2.0/gio/gnetworkaddress.h | 73 - .../include/glib-2.0/gio/gnetworkmonitor.h | 91 - .../include/glib-2.0/gio/gnetworkservice.h | 71 - .../x86/include/glib-2.0/gio/goutputstream.h | 223 --- .../x86/include/glib-2.0/gio/gpermission.h | 118 -- .../glib-2.0/gio/gpollableinputstream.h | 102 - .../glib-2.0/gio/gpollableoutputstream.h | 102 - .../x86/include/glib-2.0/gio/gpollableutils.h | 65 - .../x86/include/glib-2.0/gio/gproxy.h | 124 -- .../x86/include/glib-2.0/gio/gproxyaddress.h | 81 - .../glib-2.0/gio/gproxyaddressenumerator.h | 75 - .../x86/include/glib-2.0/gio/gproxyresolver.h | 91 - .../include/glib-2.0/gio/gremoteactiongroup.h | 77 - .../x86/include/glib-2.0/gio/gresolver.h | 199 -- .../x86/include/glib-2.0/gio/gresource.h | 129 -- .../x86/include/glib-2.0/gio/gseekable.h | 99 - .../x86/include/glib-2.0/gio/gsettings.h | 282 --- .../include/glib-2.0/gio/gsettingsbackend.h | 144 -- .../include/glib-2.0/gio/gsettingsschema.h | 61 - .../x86/include/glib-2.0/gio/gsimpleaction.h | 56 - .../include/glib-2.0/gio/gsimpleactiongroup.h | 93 - .../include/glib-2.0/gio/gsimpleasyncresult.h | 138 -- .../include/glib-2.0/gio/gsimplepermission.h | 45 - .../x86/include/glib-2.0/gio/gsocket.h | 238 --- .../x86/include/glib-2.0/gio/gsocketaddress.h | 79 - .../glib-2.0/gio/gsocketaddressenumerator.h | 89 - .../x86/include/glib-2.0/gio/gsocketclient.h | 163 -- .../include/glib-2.0/gio/gsocketconnectable.h | 74 - .../include/glib-2.0/gio/gsocketconnection.h | 110 -- .../glib-2.0/gio/gsocketcontrolmessage.h | 105 - .../include/glib-2.0/gio/gsocketlistener.h | 138 -- .../x86/include/glib-2.0/gio/gsocketservice.h | 88 - .../x86/include/glib-2.0/gio/gsrvtarget.h | 52 - .../x86/include/glib-2.0/gio/gtcpconnection.h | 68 - .../glib-2.0/gio/gtcpwrapperconnection.h | 68 - .../x86/include/glib-2.0/gio/gtestdbus.h | 74 - .../x86/include/glib-2.0/gio/gthemedicon.h | 63 - .../glib-2.0/gio/gthreadedsocketservice.h | 81 - .../x86/include/glib-2.0/gio/gtlsbackend.h | 90 - .../include/glib-2.0/gio/gtlscertificate.h | 87 - .../glib-2.0/gio/gtlsclientconnection.h | 64 - .../x86/include/glib-2.0/gio/gtlsconnection.h | 138 -- .../x86/include/glib-2.0/gio/gtlsdatabase.h | 235 --- .../include/glib-2.0/gio/gtlsfiledatabase.h | 56 - .../include/glib-2.0/gio/gtlsinteraction.h | 102 - .../x86/include/glib-2.0/gio/gtlspassword.h | 101 - .../glib-2.0/gio/gtlsserverconnection.h | 61 - .../x86/include/glib-2.0/gio/gvfs.h | 125 -- .../x86/include/glib-2.0/gio/gvolume.h | 239 --- .../x86/include/glib-2.0/gio/gvolumemonitor.h | 149 -- .../include/glib-2.0/gio/gzlibcompressor.h | 60 - .../include/glib-2.0/gio/gzlibdecompressor.h | 57 - .../x86/include/glib-2.0/glib-object.h | 42 - .../x86/include/glib-2.0/glib-unix.h | 90 - GstreamerHelper/x86/include/glib-2.0/glib.h | 112 -- .../glib-2.0/glib/deprecated/gallocator.h | 90 - .../include/glib-2.0/glib/deprecated/gcache.h | 73 - .../glib-2.0/glib/deprecated/gcompletion.h | 85 - .../include/glib-2.0/glib/deprecated/gmain.h | 138 -- .../include/glib-2.0/glib/deprecated/grel.h | 107 - .../glib-2.0/glib/deprecated/gthread.h | 285 --- .../x86/include/glib-2.0/glib/galloca.h | 112 -- .../x86/include/glib-2.0/glib/garray.h | 187 -- .../x86/include/glib-2.0/glib/gasyncqueue.h | 91 - .../x86/include/glib-2.0/glib/gatomic.h | 220 --- .../x86/include/glib-2.0/glib/gbacktrace.h | 64 - .../x86/include/glib-2.0/glib/gbase64.h | 57 - .../x86/include/glib-2.0/glib/gbitlock.h | 72 - .../x86/include/glib-2.0/glib/gbookmarkfile.h | 215 -- .../x86/include/glib-2.0/glib/gbytes.h | 78 - .../x86/include/glib-2.0/glib/gcharset.h | 40 - .../x86/include/glib-2.0/glib/gchecksum.h | 91 - .../x86/include/glib-2.0/glib/gconvert.h | 164 -- .../x86/include/glib-2.0/glib/gdataset.h | 137 -- .../x86/include/glib-2.0/glib/gdate.h | 264 --- .../x86/include/glib-2.0/glib/gdatetime.h | 217 --- .../x86/include/glib-2.0/glib/gdir.h | 54 - .../x86/include/glib-2.0/glib/genviron.h | 65 - .../x86/include/glib-2.0/glib/gerror.h | 107 - .../x86/include/glib-2.0/glib/gfileutils.h | 179 -- .../x86/include/glib-2.0/glib/ggettext.h | 59 - .../x86/include/glib-2.0/glib/ghash.h | 147 -- .../x86/include/glib-2.0/glib/ghmac.h | 80 - .../x86/include/glib-2.0/glib/ghook.h | 181 -- .../x86/include/glib-2.0/glib/ghostutils.h | 40 - .../x86/include/glib-2.0/glib/gi18n-lib.h | 38 - .../x86/include/glib-2.0/glib/gi18n.h | 34 - .../x86/include/glib-2.0/glib/giochannel.h | 374 ---- .../x86/include/glib-2.0/glib/gkeyfile.h | 268 --- .../x86/include/glib-2.0/glib/glist.h | 124 -- .../x86/include/glib-2.0/glib/gmacros.h | 343 ---- .../x86/include/glib-2.0/glib/gmain.h | 493 ----- .../x86/include/glib-2.0/glib/gmappedfile.h | 54 - .../x86/include/glib-2.0/glib/gmarkup.h | 238 --- .../x86/include/glib-2.0/glib/gmem.h | 285 --- .../x86/include/glib-2.0/glib/gmessages.h | 404 ---- .../x86/include/glib-2.0/glib/gnode.h | 298 --- .../x86/include/glib-2.0/glib/goption.h | 370 ---- .../x86/include/glib-2.0/glib/gpattern.h | 49 - .../x86/include/glib-2.0/glib/gpoll.h | 120 -- .../x86/include/glib-2.0/glib/gprimes.h | 51 - .../x86/include/glib-2.0/glib/gprintf.h | 52 - .../x86/include/glib-2.0/glib/gqsort.h | 46 - .../x86/include/glib-2.0/glib/gquark.h | 64 - .../x86/include/glib-2.0/glib/gqueue.h | 152 -- .../x86/include/glib-2.0/glib/grand.h | 85 - .../x86/include/glib-2.0/glib/gregex.h | 561 ------ .../x86/include/glib-2.0/glib/gscanner.h | 284 --- .../x86/include/glib-2.0/glib/gsequence.h | 136 -- .../x86/include/glib-2.0/glib/gshell.h | 55 - .../x86/include/glib-2.0/glib/gslice.h | 90 - .../x86/include/glib-2.0/glib/gslist.h | 117 -- .../x86/include/glib-2.0/glib/gspawn.h | 256 --- .../x86/include/glib-2.0/glib/gstdio.h | 149 -- .../x86/include/glib-2.0/glib/gstrfuncs.h | 247 --- .../x86/include/glib-2.0/glib/gstring.h | 158 -- .../x86/include/glib-2.0/glib/gstringchunk.h | 53 - .../x86/include/glib-2.0/glib/gtestutils.h | 318 --- .../x86/include/glib-2.0/glib/gthread.h | 231 --- .../x86/include/glib-2.0/glib/gthreadpool.h | 80 - .../x86/include/glib-2.0/glib/gtimer.h | 65 - .../x86/include/glib-2.0/glib/gtimezone.h | 81 - .../x86/include/glib-2.0/glib/gtrashstack.h | 103 - .../x86/include/glib-2.0/glib/gtree.h | 90 - .../x86/include/glib-2.0/glib/gtypes.h | 484 ----- .../x86/include/glib-2.0/glib/gunicode.h | 752 ------- .../x86/include/glib-2.0/glib/gurifuncs.h | 81 - .../x86/include/glib-2.0/glib/gutils.h | 375 ---- .../x86/include/glib-2.0/glib/gvariant.h | 286 --- .../x86/include/glib-2.0/glib/gvarianttype.h | 352 ---- .../x86/include/glib-2.0/glib/gversion.h | 56 - .../include/glib-2.0/glib/gversionmacros.h | 250 --- .../x86/include/glib-2.0/glib/gwin32.h | 118 -- .../x86/include/glib-2.0/gmodule.h | 103 - .../x86/include/glib-2.0/gobject/gbinding.h | 136 -- .../x86/include/glib-2.0/gobject/gboxed.h | 114 -- .../x86/include/glib-2.0/gobject/gclosure.h | 281 --- .../x86/include/glib-2.0/gobject/genums.h | 261 --- .../x86/include/glib-2.0/gobject/glib-types.h | 277 --- .../x86/include/glib-2.0/gobject/gmarshal.h | 341 ---- .../x86/include/glib-2.0/gobject/gobject.h | 610 ------ .../glib-2.0/gobject/gobjectnotifyqueue.c | 199 -- .../x86/include/glib-2.0/gobject/gparam.h | 414 ---- .../include/glib-2.0/gobject/gparamspecs.h | 1143 ----------- .../x86/include/glib-2.0/gobject/gsignal.h | 547 ------ .../include/glib-2.0/gobject/gsourceclosure.h | 38 - .../x86/include/glib-2.0/gobject/gtype.h | 1727 ----------------- .../include/glib-2.0/gobject/gtypemodule.h | 263 --- .../include/glib-2.0/gobject/gtypeplugin.h | 134 -- .../x86/include/glib-2.0/gobject/gvalue.h | 183 -- .../include/glib-2.0/gobject/gvaluearray.h | 106 - .../glib-2.0/gobject/gvaluecollector.h | 256 --- .../include/glib-2.0/gobject/gvaluetypes.h | 264 --- .../gstreamer-1.0/gst/app/gstappsink.h | 127 -- .../include/gstreamer-1.0/gst/app/gstappsrc.h | 150 -- .../gstreamer-1.0/gst/audio/audio-channels.h | 166 -- .../gstreamer-1.0/gst/audio/audio-enumtypes.h | 39 - .../gstreamer-1.0/gst/audio/audio-format.h | 330 ---- .../gstreamer-1.0/gst/audio/audio-info.h | 133 -- .../include/gstreamer-1.0/gst/audio/audio.h | 65 - .../gst/audio/gstaudiobasesink.h | 190 -- .../gstreamer-1.0/gst/audio/gstaudiobasesrc.h | 147 -- .../gstreamer-1.0/gst/audio/gstaudiocdsrc.h | 140 -- .../gstreamer-1.0/gst/audio/gstaudioclock.h | 100 - .../gstreamer-1.0/gst/audio/gstaudiodecoder.h | 362 ---- .../gstreamer-1.0/gst/audio/gstaudioencoder.h | 311 --- .../gstreamer-1.0/gst/audio/gstaudiofilter.h | 101 - .../gst/audio/gstaudioiec61937.h | 33 - .../gstreamer-1.0/gst/audio/gstaudiometa.h | 78 - .../gst/audio/gstaudioringbuffer.h | 333 ---- .../gstreamer-1.0/gst/audio/gstaudiosink.h | 100 - .../gstreamer-1.0/gst/audio/gstaudiosrc.h | 99 - .../gstreamer-1.0/gst/audio/streamvolume.h | 82 - .../gstreamer-1.0/gst/base/gstadapter.h | 77 - .../gstreamer-1.0/gst/base/gstbaseparse.h | 329 ---- .../gstreamer-1.0/gst/base/gstbasesink.h | 255 --- .../gstreamer-1.0/gst/base/gstbasesrc.h | 270 --- .../gstreamer-1.0/gst/base/gstbasetransform.h | 298 --- .../gstreamer-1.0/gst/base/gstbitreader.h | 301 --- .../gstreamer-1.0/gst/base/gstbytereader.h | 513 ----- .../gstreamer-1.0/gst/base/gstbytewriter.h | 401 ---- .../gstreamer-1.0/gst/base/gstcollectpads.h | 358 ---- .../gstreamer-1.0/gst/base/gstpushsrc.h | 73 - .../gst/base/gsttypefindhelper.h | 77 - .../gst/basecamerabinsrc/gstbasecamerasrc.h | 142 -- .../gst/basecamerabinsrc/gstcamerabin-enum.h | 62 - .../basecamerabinsrc/gstcamerabinpreview.h | 56 - .../gst/codecparsers/gsth264parser.h | 723 ------- .../gst/codecparsers/gstmpeg4parser.h | 578 ------ .../gst/codecparsers/gstmpegvideoparser.h | 431 ---- .../gst/codecparsers/gstvc1parser.h | 622 ------ .../gst/controller/gstargbcontrolbinding.h | 98 - .../gst/controller/gstdirectcontrolbinding.h | 115 -- .../gstinterpolationcontrolsource.h | 97 - .../gst/controller/gstlfocontrolsource.h | 100 - .../controller/gsttimedvaluecontrolsource.h | 133 -- .../gst/controller/gsttriggercontrolsource.h | 83 - .../include/gstreamer-1.0/gst/fft/gstfft.h | 53 - .../include/gstreamer-1.0/gst/fft/gstfftf32.h | 63 - .../include/gstreamer-1.0/gst/fft/gstfftf64.h | 63 - .../include/gstreamer-1.0/gst/fft/gstffts16.h | 63 - .../include/gstreamer-1.0/gst/fft/gstffts32.h | 63 - .../include/gstreamer-1.0/gst/glib-compat.h | 37 - .../x86/include/gstreamer-1.0/gst/gst.h | 108 -- .../include/gstreamer-1.0/gst/gstallocator.h | 159 -- .../gstreamer-1.0/gst/gstatomicqueue.h | 57 - .../x86/include/gstreamer-1.0/gst/gstbin.h | 204 -- .../x86/include/gstreamer-1.0/gst/gstbuffer.h | 543 ------ .../include/gstreamer-1.0/gst/gstbufferlist.h | 166 -- .../include/gstreamer-1.0/gst/gstbufferpool.h | 208 -- .../x86/include/gstreamer-1.0/gst/gstbus.h | 183 -- .../x86/include/gstreamer-1.0/gst/gstcaps.h | 447 ----- .../include/gstreamer-1.0/gst/gstchildproxy.h | 105 - .../x86/include/gstreamer-1.0/gst/gstclock.h | 521 ----- .../x86/include/gstreamer-1.0/gst/gstcompat.h | 98 - .../x86/include/gstreamer-1.0/gst/gstconfig.h | 201 -- .../gstreamer-1.0/gst/gstcontrolbinding.h | 122 -- .../gstreamer-1.0/gst/gstcontrolsource.h | 139 -- .../include/gstreamer-1.0/gst/gstdatetime.h | 106 - .../include/gstreamer-1.0/gst/gstdebugutils.h | 103 - .../include/gstreamer-1.0/gst/gstelement.h | 801 -------- .../gstreamer-1.0/gst/gstelementfactory.h | 222 --- .../gstreamer-1.0/gst/gstelementmetadata.h | 77 - .../include/gstreamer-1.0/gst/gstenumtypes.h | 231 --- .../x86/include/gstreamer-1.0/gst/gsterror.h | 248 --- .../x86/include/gstreamer-1.0/gst/gstevent.h | 550 ------ .../x86/include/gstreamer-1.0/gst/gstformat.h | 113 -- .../include/gstreamer-1.0/gst/gstghostpad.h | 128 -- .../x86/include/gstreamer-1.0/gst/gstinfo.h | 1515 --------------- .../include/gstreamer-1.0/gst/gstiterator.h | 273 --- .../x86/include/gstreamer-1.0/gst/gstmacros.h | 54 - .../x86/include/gstreamer-1.0/gst/gstmemory.h | 325 ---- .../include/gstreamer-1.0/gst/gstmessage.h | 562 ------ .../x86/include/gstreamer-1.0/gst/gstmeta.h | 216 --- .../include/gstreamer-1.0/gst/gstminiobject.h | 275 --- .../x86/include/gstreamer-1.0/gst/gstobject.h | 267 --- .../x86/include/gstreamer-1.0/gst/gstpad.h | 1006 ---------- .../gstreamer-1.0/gst/gstpadtemplate.h | 194 -- .../include/gstreamer-1.0/gst/gstparamspecs.h | 122 -- .../x86/include/gstreamer-1.0/gst/gstparse.h | 115 -- .../include/gstreamer-1.0/gst/gstpipeline.h | 110 -- .../x86/include/gstreamer-1.0/gst/gstplugin.h | 315 --- .../gstreamer-1.0/gst/gstpluginfeature.h | 145 -- .../x86/include/gstreamer-1.0/gst/gstpoll.h | 95 - .../x86/include/gstreamer-1.0/gst/gstpreset.h | 102 - .../x86/include/gstreamer-1.0/gst/gstquery.h | 481 ----- .../include/gstreamer-1.0/gst/gstregistry.h | 105 - .../x86/include/gstreamer-1.0/gst/gstsample.h | 129 -- .../include/gstreamer-1.0/gst/gstsegment.h | 205 -- .../include/gstreamer-1.0/gst/gststructure.h | 260 --- .../gstreamer-1.0/gst/gstsystemclock.h | 87 - .../include/gstreamer-1.0/gst/gsttaglist.h | 1049 ---------- .../include/gstreamer-1.0/gst/gsttagsetter.h | 100 - .../x86/include/gstreamer-1.0/gst/gsttask.h | 199 -- .../include/gstreamer-1.0/gst/gsttaskpool.h | 101 - .../x86/include/gstreamer-1.0/gst/gsttoc.h | 142 -- .../include/gstreamer-1.0/gst/gsttocsetter.h | 68 - .../include/gstreamer-1.0/gst/gsttypefind.h | 124 -- .../gstreamer-1.0/gst/gsttypefindfactory.h | 62 - .../x86/include/gstreamer-1.0/gst/gsturi.h | 156 -- .../x86/include/gstreamer-1.0/gst/gstutils.h | 948 --------- .../x86/include/gstreamer-1.0/gst/gstvalue.h | 528 ----- .../include/gstreamer-1.0/gst/gstversion.h | 88 - .../gst/interfaces/photography-enumtypes.h | 39 - .../gst/interfaces/photography.h | 590 ------ .../include/gstreamer-1.0/gst/math-compat.h | 112 -- .../include/gstreamer-1.0/gst/net/gstnet.h | 30 - .../gstreamer-1.0/gst/net/gstnetaddressmeta.h | 57 - .../gstreamer-1.0/gst/net/gstnetclientclock.h | 78 - .../gstreamer-1.0/gst/net/gstnettimepacket.h | 70 - .../gst/net/gstnettimeprovider.h | 74 - .../gstreamer-1.0/gst/pbutils/codec-utils.h | 65 - .../gstreamer-1.0/gst/pbutils/descriptions.h | 58 - .../gst/pbutils/encoding-profile.h | 183 -- .../gst/pbutils/encoding-target.h | 143 -- .../gstreamer-1.0/gst/pbutils/gstdiscoverer.h | 277 --- .../gst/pbutils/gstpluginsbaseversion.h | 76 - .../gst/pbutils/install-plugins.h | 138 -- .../gst/pbutils/missing-plugins.h | 77 - .../gst/pbutils/pbutils-enumtypes.h | 23 - .../gstreamer-1.0/gst/pbutils/pbutils.h | 42 - .../include/gstreamer-1.0/gst/riff/riff-ids.h | 523 ----- .../gstreamer-1.0/gst/riff/riff-media.h | 66 - .../gstreamer-1.0/gst/riff/riff-read.h | 87 - .../gstreamer-1.0/gst/rtp/gstrtcpbuffer.h | 310 --- .../gst/rtp/gstrtpbaseaudiopayload.h | 106 - .../gst/rtp/gstrtpbasedepayload.h | 110 -- .../gstreamer-1.0/gst/rtp/gstrtpbasepayload.h | 170 -- .../gstreamer-1.0/gst/rtp/gstrtpbuffer.h | 155 -- .../gstreamer-1.0/gst/rtp/gstrtppayloads.h | 196 -- .../gst/rtsp/gstrtsp-enumtypes.h | 35 - .../gst/rtsp/gstrtspconnection.h | 199 -- .../gstreamer-1.0/gst/rtsp/gstrtspdefs.h | 410 ---- .../gstreamer-1.0/gst/rtsp/gstrtspextension.h | 97 - .../gstreamer-1.0/gst/rtsp/gstrtspmessage.h | 189 -- .../gstreamer-1.0/gst/rtsp/gstrtsprange.h | 121 -- .../gstreamer-1.0/gst/rtsp/gstrtsptransport.h | 177 -- .../gstreamer-1.0/gst/rtsp/gstrtspurl.h | 103 - .../include/gstreamer-1.0/gst/sdp/gstsdp.h | 58 - .../gstreamer-1.0/gst/sdp/gstsdpmessage.h | 417 ---- .../gst/signalprocessor/gstsignalprocessor.h | 136 -- .../gstreamer-1.0/gst/tag/gsttagdemux.h | 138 -- .../include/gstreamer-1.0/gst/tag/gsttagmux.h | 85 - .../x86/include/gstreamer-1.0/gst/tag/tag.h | 591 ------ .../include/gstreamer-1.0/gst/tag/xmpwriter.h | 68 - .../gstreamer-1.0/gst/video/colorbalance.h | 114 -- .../gst/video/colorbalancechannel.h | 85 - .../gst/video/gstsurfaceconverter.h | 65 - .../gstreamer-1.0/gst/video/gstsurfacemeta.h | 68 - .../gstreamer-1.0/gst/video/gstvideodecoder.h | 371 ---- .../gstreamer-1.0/gst/video/gstvideoencoder.h | 320 --- .../gstreamer-1.0/gst/video/gstvideofilter.h | 86 - .../gstreamer-1.0/gst/video/gstvideometa.h | 143 -- .../gstreamer-1.0/gst/video/gstvideopool.h | 80 - .../gstreamer-1.0/gst/video/gstvideosink.h | 130 -- .../gstreamer-1.0/gst/video/gstvideoutils.h | 278 --- .../gstreamer-1.0/gst/video/navigation.h | 265 --- .../gstreamer-1.0/gst/video/video-blend.h | 39 - .../gstreamer-1.0/gst/video/video-color.h | 161 -- .../gstreamer-1.0/gst/video/video-enumtypes.h | 55 - .../gstreamer-1.0/gst/video/video-event.h | 61 - .../gstreamer-1.0/gst/video/video-format.h | 458 ----- .../gstreamer-1.0/gst/video/video-frame.h | 151 -- .../gstreamer-1.0/gst/video/video-info.h | 190 -- .../gst/video/video-overlay-composition.h | 285 --- .../include/gstreamer-1.0/gst/video/video.h | 87 - .../gstreamer-1.0/gst/video/videocontext.h | 117 -- .../gst/video/videoorientation.h | 94 - .../gstreamer-1.0/gst/video/videooverlay.h | 99 - GstreamerHelper/x86/lib/glib-2.0.lib | Bin 1208454 -> 0 bytes .../x86/lib/glib-2.0/include/glibconfig.h | 266 --- GstreamerHelper/x86/lib/gobject-2.0.lib | Bin 322612 -> 0 bytes GstreamerHelper/x86/lib/gstapp-1.0.lib | Bin 24816 -> 0 bytes GstreamerHelper/x86/lib/gstcontroller-1.0.lib | Bin 19252 -> 0 bytes GstreamerHelper/x86/lib/gstreamer-1.0.lib | Bin 1005224 -> 0 bytes Vocaluxe.sln | 20 - Vocaluxe/Base/CVideo.cs | 3 - Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs | 126 -- .../Video/Gstreamer/CGstreamerVideoWrapper.cs | 129 -- Vocaluxe/Vocaluxe.csproj | 2 - VocaluxeLib/Enums.cs | 3 +- gstreamerhelper/VocaluxeClock.cpp | 80 - gstreamerhelper/VocaluxeClock.h | 42 - gstreamerhelper/x64/lib/gstapp-1.0.lib | Bin 24940 -> 0 bytes 845 files changed, 1 insertion(+), 153684 deletions(-) delete mode 100644 GstreamerHelper/GstreamerHelper.vcxproj delete mode 100644 GstreamerHelper/GstreamerHelper.vcxproj.filters delete mode 100644 GstreamerHelper/GstreamerHelper.vcxproj.user delete mode 100644 GstreamerHelper/GstreamerVideo.cpp delete mode 100644 GstreamerHelper/GstreamerVideo.h delete mode 100644 GstreamerHelper/GstreamerVideoStream.cpp delete mode 100644 GstreamerHelper/GstreamerVideoStream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gaction.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gactiongroup.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gactiongroupexporter.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gactionmap.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gappinfo.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gapplication.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gapplicationcommandline.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gasyncinitable.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gasyncresult.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gbufferedinputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gbufferedoutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gcancellable.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gcharsetconverter.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gcontenttype.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gconverter.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gconverterinputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gconverteroutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gcredentials.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdatainputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdataoutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusactiongroup.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusaddress.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusauthobserver.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbuserror.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterface.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterfaceskeleton.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusintrospection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusmenumodel.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusmessage.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusmethodinvocation.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusnameowning.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusnamewatching.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusobject.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanager.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerclient.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerserver.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectproxy.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectskeleton.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusproxy.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusserver.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdbusutils.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gdrive.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gemblem.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gemblemedicon.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfile.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileattribute.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileenumerator.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileicon.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileinfo.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileinputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileiostream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfilemonitor.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfilenamecompleter.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfileoutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfilterinputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gfilteroutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gicon.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/ginetaddress.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/ginetaddressmask.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/ginetsocketaddress.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/ginitable.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/ginputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gio.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gioenums.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gioenumtypes.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gioerror.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/giomodule.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gioscheduler.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/giostream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/giotypes.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gloadableicon.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmemoryinputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmemoryoutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmenu.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmenuexporter.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmenumodel.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmount.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gmountoperation.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gnativevolumemonitor.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gnetworkaddress.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gnetworkmonitor.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gnetworkservice.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/goutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gpermission.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gpollableinputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gpollableoutputstream.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gpollableutils.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gproxy.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddress.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddressenumerator.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gproxyresolver.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gremoteactiongroup.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gresolver.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gresource.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gseekable.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsettings.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsettingsbackend.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsettingsschema.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsimpleaction.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsimpleactiongroup.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsimpleasyncresult.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsimplepermission.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocket.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddress.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddressenumerator.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketclient.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnectable.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketcontrolmessage.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketlistener.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsocketservice.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gsrvtarget.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtcpconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtcpwrapperconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtestdbus.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gthemedicon.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gthreadedsocketservice.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsbackend.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlscertificate.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsclientconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsdatabase.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsfiledatabase.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsinteraction.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlspassword.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gtlsserverconnection.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gvfs.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gvolume.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gvolumemonitor.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gzlibcompressor.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gio/gzlibdecompressor.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib-object.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib-unix.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gallocator.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcache.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcompletion.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gmain.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/deprecated/grel.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gthread.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/galloca.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/garray.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gasyncqueue.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gatomic.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gbacktrace.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gbase64.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gbitlock.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gbookmarkfile.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gbytes.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gcharset.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gchecksum.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gconvert.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gdataset.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gdate.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gdatetime.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gdir.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/genviron.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gerror.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gfileutils.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/ggettext.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/ghash.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/ghmac.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/ghook.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/ghostutils.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gi18n-lib.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gi18n.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/giochannel.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gkeyfile.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/glist.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gmacros.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gmain.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gmappedfile.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gmarkup.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gmem.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gmessages.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gnode.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/goption.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gpattern.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gpoll.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gprimes.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gprintf.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gqsort.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gquark.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gqueue.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/grand.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gregex.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gscanner.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gsequence.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gshell.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gslice.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gslist.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gspawn.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gstdio.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gstrfuncs.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gstring.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gstringchunk.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gtestutils.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gthread.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gthreadpool.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gtimer.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gtimezone.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gtrashstack.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gtree.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gtypes.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gunicode.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gurifuncs.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gutils.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gvariant.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gvarianttype.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gversion.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gversionmacros.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/glib/gwin32.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gmodule.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gbinding.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gboxed.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gclosure.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/genums.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/glib-types.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gmarshal.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gobject.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gobjectnotifyqueue.c delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gparam.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gparamspecs.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gsignal.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gsourceclosure.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gtype.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gtypemodule.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gtypeplugin.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gvalue.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gvaluearray.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gvaluecollector.h delete mode 100644 GstreamerHelper/x64/include/glib-2.0/gobject/gvaluetypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsink.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-channels.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-enumtypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-format.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-info.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioclock.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioencoder.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiofilter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiometa.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosink.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/streamvolume.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstadapter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbaseparse.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesink.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasetransform.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbitreader.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytereader.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytewriter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstcollectpads.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstpushsrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gsttypefindhelper.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfft.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf32.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf64.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts16.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts32.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/glib-compat.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gst.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstallocator.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstatomicqueue.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbin.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbuffer.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferlist.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferpool.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbus.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcaps.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstchildproxy.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstclock.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcompat.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstconfig.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolbinding.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolsource.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdatetime.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdebugutils.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelement.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementfactory.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementmetadata.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstenumtypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsterror.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstevent.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstformat.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstghostpad.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstinfo.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstiterator.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmacros.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmemory.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmessage.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmeta.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstminiobject.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstobject.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpad.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpadtemplate.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparamspecs.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparse.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpipeline.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstplugin.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpluginfeature.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpoll.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpreset.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstquery.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstregistry.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsample.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsegment.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gststructure.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsystemclock.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaglist.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttagsetter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttask.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaskpool.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttoc.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttocsetter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefind.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefindfactory.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gsturi.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstutils.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstvalue.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/gstversion.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/math-compat.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnet.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetclientclock.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimepacket.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimeprovider.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/codec-utils.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/descriptions.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-profile.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-target.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/install-plugins.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/missing-plugins.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-ids.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-media.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-read.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdp.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagdemux.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagmux.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/tag.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/xmpwriter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalance.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalancechannel.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfacemeta.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideodecoder.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoencoder.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideofilter.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideometa.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideopool.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideosink.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoutils.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/navigation.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-blend.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-color.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-enumtypes.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-event.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-format.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-frame.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-info.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-overlay-composition.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videocontext.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videoorientation.h delete mode 100644 GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videooverlay.h delete mode 100644 GstreamerHelper/x64/lib/glib-2.0.lib delete mode 100644 GstreamerHelper/x64/lib/glib-2.0/include/glibconfig.h delete mode 100644 GstreamerHelper/x64/lib/gobject-2.0.lib delete mode 100644 GstreamerHelper/x64/lib/gstcontroller-1.0.lib delete mode 100644 GstreamerHelper/x64/lib/gstreamer-1.0.lib delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gaction.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gactiongroup.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gactiongroupexporter.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gactionmap.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gappinfo.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gapplication.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gapplicationcommandline.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gasyncinitable.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gasyncresult.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gbufferedinputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gbufferedoutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gcancellable.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gcharsetconverter.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gcontenttype.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gconverter.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gconverterinputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gconverteroutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gcredentials.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdatainputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdataoutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusactiongroup.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusaddress.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusauthobserver.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbuserror.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterface.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterfaceskeleton.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusintrospection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusmenumodel.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusmessage.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusmethodinvocation.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusnameowning.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusnamewatching.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusobject.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanager.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerclient.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerserver.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectproxy.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectskeleton.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusproxy.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusserver.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdbusutils.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gdrive.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gemblem.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gemblemedicon.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfile.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileattribute.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileenumerator.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileicon.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileinfo.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileinputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileiostream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfilemonitor.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfilenamecompleter.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfileoutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfilterinputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gfilteroutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gicon.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/ginetaddress.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/ginetaddressmask.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/ginetsocketaddress.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/ginitable.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/ginputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gio.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gioenums.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gioenumtypes.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gioerror.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/giomodule.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gioscheduler.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/giostream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/giotypes.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gloadableicon.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmemoryinputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmemoryoutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmenu.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmenuexporter.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmenumodel.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmount.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gmountoperation.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gnativevolumemonitor.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gnetworkaddress.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gnetworkmonitor.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gnetworkservice.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/goutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gpermission.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gpollableinputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gpollableoutputstream.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gpollableutils.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gproxy.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddress.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddressenumerator.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gproxyresolver.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gremoteactiongroup.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gresolver.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gresource.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gseekable.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsettings.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsettingsbackend.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsettingsschema.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsimpleaction.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsimpleactiongroup.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsimpleasyncresult.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsimplepermission.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocket.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddress.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddressenumerator.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketclient.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnectable.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketcontrolmessage.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketlistener.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsocketservice.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gsrvtarget.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtcpconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtcpwrapperconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtestdbus.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gthemedicon.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gthreadedsocketservice.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsbackend.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlscertificate.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsclientconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsdatabase.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsfiledatabase.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsinteraction.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlspassword.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gtlsserverconnection.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gvfs.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gvolume.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gvolumemonitor.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gzlibcompressor.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gio/gzlibdecompressor.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib-object.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib-unix.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gallocator.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcache.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcompletion.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gmain.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/deprecated/grel.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gthread.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/galloca.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/garray.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gasyncqueue.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gatomic.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gbacktrace.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gbase64.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gbitlock.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gbookmarkfile.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gbytes.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gcharset.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gchecksum.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gconvert.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gdataset.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gdate.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gdatetime.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gdir.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/genviron.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gerror.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gfileutils.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/ggettext.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/ghash.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/ghmac.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/ghook.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/ghostutils.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gi18n-lib.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gi18n.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/giochannel.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gkeyfile.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/glist.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gmacros.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gmain.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gmappedfile.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gmarkup.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gmem.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gmessages.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gnode.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/goption.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gpattern.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gpoll.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gprimes.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gprintf.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gqsort.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gquark.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gqueue.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/grand.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gregex.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gscanner.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gsequence.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gshell.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gslice.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gslist.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gspawn.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gstdio.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gstrfuncs.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gstring.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gstringchunk.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gtestutils.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gthread.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gthreadpool.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gtimer.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gtimezone.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gtrashstack.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gtree.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gtypes.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gunicode.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gurifuncs.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gutils.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gvariant.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gvarianttype.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gversion.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gversionmacros.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/glib/gwin32.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gmodule.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gbinding.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gboxed.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gclosure.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/genums.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/glib-types.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gmarshal.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gobject.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gobjectnotifyqueue.c delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gparam.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gparamspecs.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gsignal.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gsourceclosure.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gtype.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gtypemodule.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gtypeplugin.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gvalue.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gvaluearray.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gvaluecollector.h delete mode 100644 GstreamerHelper/x86/include/glib-2.0/gobject/gvaluetypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsink.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-channels.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-enumtypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-format.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-info.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioclock.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioencoder.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiofilter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiometa.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosink.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/streamvolume.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstadapter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbaseparse.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesink.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasetransform.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbitreader.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytereader.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytewriter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstcollectpads.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstpushsrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gsttypefindhelper.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfft.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf32.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf64.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts16.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts32.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/glib-compat.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gst.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstallocator.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstatomicqueue.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbin.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbuffer.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferlist.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferpool.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbus.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcaps.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstchildproxy.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstclock.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcompat.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstconfig.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolbinding.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolsource.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdatetime.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdebugutils.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelement.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementfactory.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementmetadata.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstenumtypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsterror.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstevent.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstformat.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstghostpad.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstinfo.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstiterator.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmacros.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmemory.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmessage.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmeta.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstminiobject.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstobject.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpad.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpadtemplate.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparamspecs.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparse.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpipeline.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstplugin.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpluginfeature.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpoll.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpreset.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstquery.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstregistry.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsample.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsegment.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gststructure.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsystemclock.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaglist.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttagsetter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttask.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaskpool.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttoc.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttocsetter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefind.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefindfactory.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gsturi.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstutils.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstvalue.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/gstversion.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/math-compat.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnet.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetclientclock.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimepacket.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimeprovider.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/codec-utils.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/descriptions.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-profile.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-target.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/install-plugins.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/missing-plugins.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-ids.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-media.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-read.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdp.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagdemux.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagmux.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/tag.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/xmpwriter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalance.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalancechannel.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfacemeta.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideodecoder.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoencoder.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideofilter.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideometa.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideopool.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideosink.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoutils.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/navigation.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-blend.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-color.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-enumtypes.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-event.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-format.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-frame.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-info.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-overlay-composition.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videocontext.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videoorientation.h delete mode 100644 GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videooverlay.h delete mode 100644 GstreamerHelper/x86/lib/glib-2.0.lib delete mode 100644 GstreamerHelper/x86/lib/glib-2.0/include/glibconfig.h delete mode 100644 GstreamerHelper/x86/lib/gobject-2.0.lib delete mode 100644 GstreamerHelper/x86/lib/gstapp-1.0.lib delete mode 100644 GstreamerHelper/x86/lib/gstcontroller-1.0.lib delete mode 100644 GstreamerHelper/x86/lib/gstreamer-1.0.lib delete mode 100644 Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs delete mode 100644 Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs delete mode 100644 gstreamerhelper/VocaluxeClock.cpp delete mode 100644 gstreamerhelper/VocaluxeClock.h delete mode 100644 gstreamerhelper/x64/lib/gstapp-1.0.lib diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj deleted file mode 100644 index facd22f3..00000000 --- a/GstreamerHelper/GstreamerHelper.vcxproj +++ /dev/null @@ -1,297 +0,0 @@ - - - - - DebugWin - Win32 - - - DebugWin - x64 - - - InstallerWin - Win32 - - - InstallerWin - x64 - - - ReleaseWin - Win32 - - - ReleaseWin - x64 - - - - {ED007796-367F-4142-AA55-5450C7645C2C} - Win32Proj - GstreamerHelper - - - - DynamicLibrary - true - v110_xp - Unicode - - - DynamicLibrary - true - v110_xp - Unicode - - - DynamicLibrary - false - v110_xp - true - Unicode - - - DynamicLibrary - false - v110_xp - true - Unicode - - - DynamicLibrary - false - v110_xp - true - Unicode - - - DynamicLibrary - false - v110_xp - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - false - bin\$(Configuration).$(Platform)\ - $(MSBuildProjectDirectory)\x86\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x86\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x86\include\glib-2.0;$(MSBuildProjectDirectory)\x86\include;$(IncludePath) - $(MSBuildProjectDirectory)\x86\lib;$(LibraryPath) - true - obj\$(Configuration).$(Platform)\ - - - bin\$(Configuration).$(Platform)\ - $(MSBuildProjectDirectory)\x64\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x64\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x64\include\glib-2.0;$(MSBuildProjectDirectory)\x64\include;$(IncludePath) - $(MSBuildProjectDirectory)\x64\lib;$(LibraryPath) - ..\CheckingRules.ruleset - obj\$(Configuration).$(Platform)\ - false - - - false - bin\$(Configuration).$(Platform)\ - $(MSBuildProjectDirectory)\x86\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x86\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x86\include\glib-2.0;$(MSBuildProjectDirectory)\x86\include;$(IncludePath) - $(MSBuildProjectDirectory)\x86\lib;$(LibraryPath) - obj\$(Configuration).$(Platform)\ - - - false - bin\$(Configuration).$(Platform)\ - $(MSBuildProjectDirectory)\x86\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x86\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x86\include\glib-2.0;$(MSBuildProjectDirectory)\x86\include;$(IncludePath) - $(MSBuildProjectDirectory)\x86\lib;$(LibraryPath) - obj\$(Configuration).$(Platform)\ - - - false - bin\$(Configuration).$(Platform)\ - $(MSBuildProjectDirectory)\x64\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x64\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x64\include\glib-2.0;$(MSBuildProjectDirectory)\x64\include;$(IncludePath) - $(MSBuildProjectDirectory)\x64\lib;$(LibraryPath) - obj\$(Configuration).$(Platform)\ - - - false - bin\$(Configuration).$(Platform)\ - $(MSBuildProjectDirectory)\x64\lib\glib-2.0\include;$(MSBuildProjectDirectory)\x64\include\gstreamer-1.0;$(MSBuildProjectDirectory)\x64\include\glib-2.0;$(MSBuildProjectDirectory)\x64\include;$(IncludePath) - $(MSBuildProjectDirectory)\x64\lib;$(LibraryPath) - obj\$(Configuration).$(Platform)\ - - - ..\Output\x86 - - - ..\Output\x86 - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) - true - Default - ProgramDatabase - - - Windows - true - gstreamer-1.0.lib;gstcontroller-1.0.lib;gobject-2.0.lib;glib-2.0.lib;gstapp-1.0.lib;%(AdditionalDependencies) - true - - - xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x86\gstreamer\" /I /Y - - - Copying binary - - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) - true - - - Windows - true - gstreamer-1.0.lib;gstcontroller-1.0.lib;gobject-2.0.lib;glib-2.0.lib;gstapp-1.0.lib;%(AdditionalDependencies) - true - - - xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x64\gstreamer\" /I /Y - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) - true - - - Windows - false - true - true - gstreamer-1.0.lib;gstcontroller-1.0.lib;gobject-2.0.lib;glib-2.0.lib;gstapp-1.0.lib;%(AdditionalDependencies) - false - - - xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x86\gstreamer\" /I /Y - - - Copying binary - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) - true - - - Windows - false - true - true - gstreamer-1.0.lib;gstcontroller-1.0.lib;gobject-2.0.lib;glib-2.0.lib;gstapp-1.0.lib;%(AdditionalDependencies) - false - - - xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x86\gstreamer\" /I /Y - - - Copying binary - - - - - Level3 - Use - Full - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) - true - true - Speed - - - Windows - false - true - true - gstreamer-1.0.lib;gstcontroller-1.0.lib;gobject-2.0.lib;glib-2.0.lib;gstapp-1.0.lib;%(AdditionalDependencies) - - - xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x64\gstreamer\" /I /Y - - - - - Level3 - Use - Full - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;GSTREAMERHELPER_EXPORTS;%(PreprocessorDefinitions) - true - true - Speed - - - Windows - false - true - true - gstreamer-1.0.lib;gstcontroller-1.0.lib;gobject-2.0.lib;glib-2.0.lib;gstapp-1.0.lib;%(AdditionalDependencies) - - - xcopy "$(OutDir)*.dll" "$(SolutionDir)Output\x64\gstreamer\" /I /Y - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/GstreamerHelper/GstreamerHelper.vcxproj.filters b/GstreamerHelper/GstreamerHelper.vcxproj.filters deleted file mode 100644 index 1e3c4788..00000000 --- a/GstreamerHelper/GstreamerHelper.vcxproj.filters +++ /dev/null @@ -1,39 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Headerdateien - - - Headerdateien - - - Headerdateien - - - - - Quelldateien - - - Quelldateien - - - Quelldateien - - - \ No newline at end of file diff --git a/GstreamerHelper/GstreamerHelper.vcxproj.user b/GstreamerHelper/GstreamerHelper.vcxproj.user deleted file mode 100644 index a375ae35..00000000 --- a/GstreamerHelper/GstreamerHelper.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/GstreamerHelper/GstreamerVideo.cpp b/GstreamerHelper/GstreamerVideo.cpp deleted file mode 100644 index b5b98d97..00000000 --- a/GstreamerHelper/GstreamerVideo.cpp +++ /dev/null @@ -1,157 +0,0 @@ -#include "GstreamerVideo.h" -#include "GstreamerVideoStream.h" - -map VideoStreams; -int NextID; - -DllExport void SetVideoLogCallback (LogCallback Callback) -{ - Log = Callback; -} - -DllExport bool InitVideo() -{ - NextID = 0; - - gst_init(NULL, NULL); - - GstRegistry* registry = gst_registry_get(); - -#if _WIN64 - gst_registry_scan_path(registry, ".\\x64\\gstreamer"); -#elif _WIN32 - gst_registry_scan_path(registry, ".\\x86\\gstreamer"); -#else - #error Define either _WIN64 or _WIN32! -#endif - return true; -} - -DllExport void CloseAllVideos(void) -{ - map::iterator p; - - for(p = VideoStreams.begin(); p != VideoStreams.end(); p++) { - p->second->CloseVideo(); - } -} - -DllExport int LoadVideo(const wchar_t* Media) -{ - GstreamerVideoStream *s = new GstreamerVideoStream(NextID++); - VideoStreams.insert(pair (s->ID, s)); - return s->LoadVideo(Media); -} - -DllExport bool CloseVideo(int Stream) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - delete it->second; - VideoStreams.erase(it); - } - else return false; - return true; -} - -DllExport int GetVideoNumStreams() -{ - return (int) VideoStreams.size(); -} - -DllExport float GetVideoLength(int Stream) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - return it->second->GetVideoLength(); - } - else return -1.0; -} - -DllExport struct ApplicationFrame GetFrame(int Stream, float Time) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - return it->second->GetFrame(Time); - } - struct ApplicationFrame returnFrame; - returnFrame.size=0; - returnFrame.width=0; - returnFrame.height=0; - returnFrame.data=NULL; - returnFrame.videotime=0; - return returnFrame; -} - -DllExport bool Skip(int Stream, float Start, float Gap) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - return it->second->Skip(Start, Gap); - } - else return false; -} - -DllExport void SetVideoLoop(int Stream, bool Loop) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - it->second->SetVideoLoop(Loop); - } -} - -DllExport void PauseVideo(int Stream) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - it->second->PauseVideo(); - } -} - -DllExport void ResumeVideo(int Stream) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - it->second->ResumeVideo(); - } -} - -DllExport bool Finished(int Stream) -{ - map::iterator it = VideoStreams.find(Stream); - if(it != VideoStreams.end()) - { - return it->second->IsFinished(); - } - else return true; -} - -DllExport void UpdateVideo(void) -{ - map::iterator p = VideoStreams.begin(); - - while(p != VideoStreams.end()) - { - if(p->second->Closed) - { - delete p->second; - VideoStreams.erase(p++); - } - else { - p->second->UpdateVideo(); - ++p; - } - } -} - -void LogVideoError(const char* msg) -{ - Log(msg); -} \ No newline at end of file diff --git a/GstreamerHelper/GstreamerVideo.h b/GstreamerHelper/GstreamerVideo.h deleted file mode 100644 index b00bc1f4..00000000 --- a/GstreamerHelper/GstreamerVideo.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once -#include -#include -#include -#include "gst/gst.h" -#define DllExport extern "C" __declspec(dllexport) - -using namespace std; - - typedef void (__stdcall * LogCallback)(const char* text); - static LogCallback Log; - - struct ApplicationFrame { - guint8* data; - int size; - int width; - int height; - float videotime; - }; - - DllExport void SetVideoLogCallback(LogCallback Callback); - - DllExport bool InitVideo(); - DllExport void CloseAllVideos(); - - DllExport int LoadVideo(const wchar_t* Media); - DllExport bool CloseVideo(int StreamID); - DllExport int GetVideoNumStreams(); - - DllExport float GetVideoLength(int StreamID); - DllExport struct ApplicationFrame GetFrame(int StreamID, float Time); - DllExport bool Skip(int StreamID, float Start, float Gap); - DllExport void SetVideoLoop(int StreamID, bool Loop); - DllExport void PauseVideo(int StreamID); - DllExport void ResumeVideo(int StreamID); - - DllExport bool Finished(int StreamID); - - DllExport void UpdateVideo(); - - void LogVideoError(const char* msg); - diff --git a/GstreamerHelper/GstreamerVideoStream.cpp b/GstreamerHelper/GstreamerVideoStream.cpp deleted file mode 100644 index e90d321d..00000000 --- a/GstreamerHelper/GstreamerVideoStream.cpp +++ /dev/null @@ -1,296 +0,0 @@ -#include "GstreamerVideoStream.h" - -typedef enum { - GST_PLAY_FLAG_VIDEO = (1 << 0), - GST_PLAY_FLAG_AUDIO = (1 << 1), - GST_PLAY_FLAG_TEXT = (1 << 2), - GST_PLAY_FLAG_VIS = (1 << 3), - GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4), - GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5), - GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6), - GST_PLAY_FLAG_DOWNLOAD = (1 << 7), - GST_PLAY_FLAG_BUFFERING = (1 << 8), - GST_PLAY_FLAG_DEINTERLACE = (1 << 9), - GST_PLAY_FLAG_SOFT_COLORBALANCE = (1 << 10) -} GstPlayFlags; - -GstreamerVideoStream::GstreamerVideoStream(int ID) -{ - this->ID = ID; - - Loop = false; - - Running = true; - - Paused = false; - Finished = false; - Closed = false; - Copying = true; - - BufferFull = false; - for(int i = 0; i < 5; i++) - { - FrameBuffer[i].Sample = NULL; - FrameBuffer[i].Buffer = NULL; - FrameBuffer[i].Displayed = true; - } - - Duration = -1.0; -} - - -GstreamerVideoStream::~GstreamerVideoStream(void) -{ - CloseVideo(); -} - -int GstreamerVideoStream::LoadVideo(const wchar_t* Filename) -{ - Element = gst_element_factory_make("playbin", "playbin"); - Appsink = (GstAppSink*) gst_element_factory_make("appsink", "appsink"); - - Bus = gst_element_get_bus(Element); - if(!Element || !Appsink) - { - LogVideoError ("Could not create element!"); - return -1; - } - - g_object_set(Element, "uri", Filename, NULL); - g_object_set(Element, "video-sink", Appsink, NULL); - g_object_set(Element, "flags", GST_PLAY_FLAG_VIDEO, NULL); - g_object_set (Appsink, "emit-signals", FALSE, "sync", FALSE, NULL); - - GstCaps *caps; - caps = gst_caps_new_simple ("video/x-raw", - "format", G_TYPE_STRING, "BGRA", //We should use RGB for better performance here! Implement later - NULL); - - gst_app_sink_set_caps(Appsink, caps); - - gst_app_sink_set_drop(Appsink, false); - gst_app_sink_set_max_buffers(Appsink, 5); - - gst_element_set_state(Element, GST_STATE_PLAYING); - //gst_element_set_state(GST_ELEMENT (Appsink), GST_STATE_PLAYING); - gst_bus_timed_pop_filtered(Bus, -1, GST_MESSAGE_ASYNC_DONE); - CopyThread = thread (&GstreamerVideoStream::Copy, this); - - RefreshDuration(); - - return ID; -} - -void GstreamerVideoStream::Copy() -{ - while(Copying) - { - int num = -1; - for (int i = 0; i < 5; i++) - { - if(FrameBuffer[i].Displayed) - { - - num = i; - GstSample *sample; - sample = gst_app_sink_pull_sample(Appsink); - Mutex.lock(); - if(FrameBuffer[i].Buffer) - { - if(FrameBuffer[i].Memory.data) - gst_buffer_unmap(FrameBuffer[i].Buffer, &FrameBuffer[i].Memory); - gst_buffer_unref(FrameBuffer[i].Buffer); - } - //if(FrameBuffer[i].Sample) - //gst_sample_unref(FrameBuffer[i].Sample); - - - FrameBuffer[i].Displayed = false; - FrameBuffer[i].Sample = sample; - Mutex.unlock(); - - //gst_element_send_event (Element, gst_event_new_step (GST_FORMAT_BUFFERS, 1, 1.0, TRUE, FALSE)); - break; - } - } - if(num == -1) - BufferFull = true; - } -} - -bool GstreamerVideoStream::CloseVideo() -{ - Copying = false; - CopyThread.join(); - - for(int i= 0; i< 5; i++) - { - if(FrameBuffer[i].Buffer) - { - if(FrameBuffer[i].Memory.data) - gst_buffer_unmap(FrameBuffer[i].Buffer, &FrameBuffer[i].Memory); - gst_buffer_unref(FrameBuffer[i].Buffer); - } - //if(FrameBuffer[i].Sample) - //gst_sample_unref(FrameBuffer[i].Sample); - } - - if(Element) - gst_element_set_state(Element, GST_STATE_NULL); - - if(Appsink) - gst_object_unref(Appsink); - if(Bus) - gst_object_unref(Bus); - //if(Buffer && &Mapinfo) - //gst_buffer_unmap(Buffer, &Mapinfo); - - - if(Element) - gst_object_unref(Element); - return true; -} - -float GstreamerVideoStream::GetVideoLength() -{ - if(Duration <= 0) - RefreshDuration(); - return Duration; -} - -struct ApplicationFrame GstreamerVideoStream::GetFrame(float Time) -{ - float VideoTime = 0.0; - int Width = 0; - int Height = 0; - int Size = -1; - - Mutex.lock(); - for(int i = 0; i < 5; i++) - { - if(!FrameBuffer[i].Displayed) - { - if(FrameBuffer[i].Sample) { - GstBuffer *Buffer = gst_sample_get_buffer(FrameBuffer[i].Sample); - GstMapInfo Mapinfo; - - GstCaps *BufferCaps = gst_sample_get_caps (FrameBuffer[i].Sample); - GstStructure *BufferStructure = gst_caps_get_structure (BufferCaps, 0); - - gst_buffer_map(Buffer, &Mapinfo, GST_MAP_READ); - - Size = (int) Mapinfo.size; - gst_structure_get_int (BufferStructure, "width", &Width); - gst_structure_get_int (BufferStructure, "height", &Height); - VideoTime = (float) (Buffer->pts / GST_SECOND); - - ReturnFrame.data = Mapinfo.data; - ReturnFrame.height = Height; - ReturnFrame.width = Width; - ReturnFrame.size = Size; - ReturnFrame.videotime = VideoTime; - - FrameBuffer[i].Memory = Mapinfo; - FrameBuffer[i].Buffer = Buffer; - - if(BufferCaps) - gst_caps_unref(BufferCaps); - - if(BufferStructure) - gst_object_unref(BufferStructure); - } - FrameBuffer[i].Displayed = true; - break; - } - } - Mutex.unlock(); - return ReturnFrame; -} - -bool GstreamerVideoStream::Skip(float Start, float Gap) -{ - if(!gst_element_seek_simple(Element, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE), (gint64)((Start + Gap) * GST_SECOND))) - { - LogVideoError("Seek failed"); - return true; - } - return false; -} - -void GstreamerVideoStream::SetVideoLoop(bool Loop) -{ - if(Loop) - g_object_set(Element, "sync", TRUE, NULL); - else - g_object_set(Element, "sync", FALSE, NULL); - this->Loop = Loop; -} - -void GstreamerVideoStream::PauseVideo() -{ - if(Element) - gst_element_set_state(Element, GST_STATE_PAUSED); -} - -void GstreamerVideoStream::ResumeVideo() -{ - if(Element) - gst_element_set_state(Element, GST_STATE_PLAYING); -} - -bool GstreamerVideoStream::IsFinished() -{ - return Finished; -} - -void GstreamerVideoStream::RefreshDuration() -{ - if(Element) - { - gint64 time; - if(!gst_element_query_duration(Element, GST_FORMAT_TIME, &time)) { - LogVideoError("Could not query duration"); - } - Duration = (gfloat)((gdouble)(time/GST_SECOND)); - } -} - -void GstreamerVideoStream::UpdateVideo() -{ - if(Running) { - Message = gst_bus_pop (Bus); - - /* Parse message */ - if (Message != NULL) { - GError *err; - gchar *debug_info; - string m; - - switch (GST_MESSAGE_TYPE (Message)) { - case GST_MESSAGE_ERROR: - gst_message_parse_error (Message, &err, &debug_info); - m = err->message; - LogVideoError(m.c_str()); - g_clear_error (&err); - g_free (debug_info); - break; - case GST_MESSAGE_DURATION_CHANGED: - RefreshDuration(); - break; - case GST_MESSAGE_STATE_CHANGED: - break; - case GST_MESSAGE_EOS: - if(Loop) - Skip(0, 0); - else - Finished = true; - break; - default: - /* We should not reach here */ - //LogError ("Unexpected message received.\n"); - break; - } - gst_message_unref (Message); - } - } -} \ No newline at end of file diff --git a/GstreamerHelper/GstreamerVideoStream.h b/GstreamerHelper/GstreamerVideoStream.h deleted file mode 100644 index b258f924..00000000 --- a/GstreamerHelper/GstreamerVideoStream.h +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once -#include -#include -#include "gst/gst.h" -#include "GstreamerVideo.h" -#include "gst/app/gstappsink.h" -#include "VocaluxeClock.h" - - using namespace std; - -class GstreamerVideoStream -{ - -public: - int ID; - bool Closed; - - GstreamerVideoStream(int ID); - ~GstreamerVideoStream(void); - - int LoadVideo(const wchar_t* VideoFileName); - bool CloseVideo(); - - float GetVideoLength(); - struct ApplicationFrame GetFrame(float Time); - bool Skip(float Start, float Gap); - void SetVideoLoop(bool Loop); - void PauseVideo(); - void ResumeVideo(); - - void UpdateVideo(); - - bool IsFinished(); - -private: - struct BufferFrame { - GstSample *Sample; - GstBuffer *Buffer; - GstMapInfo Memory; - gboolean Displayed; - }; - - thread CopyThread; - - GstAppSink *Appsink; - GstElement *Element; - GstBus *Bus; - GstMessage *Message; - - BufferFrame FrameBuffer[5]; - gboolean BufferFull; - mutex Mutex; - - gboolean Loop; - - gboolean Running; - volatile gboolean Copying; - - gboolean Paused; - bool Finished; - - gfloat Duration; - - ApplicationFrame ReturnFrame; - - void RefreshDuration(); - - void Copy(); -}; - - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gaction.h b/GstreamerHelper/x64/include/glib-2.0/gio/gaction.h deleted file mode 100644 index 0a4e8c39..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gaction.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_H__ -#define __G_ACTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_ACTION (g_action_get_type ()) -#define G_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_ACTION, GAction)) -#define G_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_ACTION)) -#define G_ACTION_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_ACTION, GActionInterface)) - -typedef struct _GActionInterface GActionInterface; - -struct _GActionInterface -{ - GTypeInterface g_iface; - - /* virtual functions */ - const gchar * (* get_name) (GAction *action); - const GVariantType * (* get_parameter_type) (GAction *action); - const GVariantType * (* get_state_type) (GAction *action); - GVariant * (* get_state_hint) (GAction *action); - - gboolean (* get_enabled) (GAction *action); - GVariant * (* get_state) (GAction *action); - - void (* change_state) (GAction *action, - GVariant *value); - void (* activate) (GAction *action, - GVariant *parameter); -}; - -GLIB_AVAILABLE_IN_2_30 -GType g_action_get_type (void) G_GNUC_CONST; - -const gchar * g_action_get_name (GAction *action); -const GVariantType * g_action_get_parameter_type (GAction *action); -const GVariantType * g_action_get_state_type (GAction *action); -GVariant * g_action_get_state_hint (GAction *action); - -gboolean g_action_get_enabled (GAction *action); -GVariant * g_action_get_state (GAction *action); - -void g_action_change_state (GAction *action, - GVariant *value); -void g_action_activate (GAction *action, - GVariant *parameter); -G_END_DECLS - -#endif /* __G_ACTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gactiongroup.h b/GstreamerHelper/x64/include/glib-2.0/gio/gactiongroup.h deleted file mode 100644 index b300aefd..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gactiongroup.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_GROUP_H__ -#define __G_ACTION_GROUP_H__ - -#include - -G_BEGIN_DECLS - - -#define G_TYPE_ACTION_GROUP (g_action_group_get_type ()) -#define G_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_ACTION_GROUP, GActionGroup)) -#define G_IS_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_ACTION_GROUP)) -#define G_ACTION_GROUP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_ACTION_GROUP, GActionGroupInterface)) - -typedef struct _GActionGroupInterface GActionGroupInterface; - -struct _GActionGroupInterface -{ - GTypeInterface g_iface; - - /* virtual functions */ - gboolean (* has_action) (GActionGroup *action_group, - const gchar *action_name); - - gchar ** (* list_actions) (GActionGroup *action_group); - - gboolean (* get_action_enabled) (GActionGroup *action_group, - const gchar *action_name); - - const GVariantType * (* get_action_parameter_type) (GActionGroup *action_group, - const gchar *action_name); - - const GVariantType * (* get_action_state_type) (GActionGroup *action_group, - const gchar *action_name); - - GVariant * (* get_action_state_hint) (GActionGroup *action_group, - const gchar *action_name); - - GVariant * (* get_action_state) (GActionGroup *action_group, - const gchar *action_name); - - void (* change_action_state) (GActionGroup *action_group, - const gchar *action_name, - GVariant *value); - - void (* activate_action) (GActionGroup *action_group, - const gchar *action_name, - GVariant *parameter); - - /* signals */ - void (* action_added) (GActionGroup *action_group, - const gchar *action_name); - void (* action_removed) (GActionGroup *action_group, - const gchar *action_name); - void (* action_enabled_changed) (GActionGroup *action_group, - const gchar *action_name, - gboolean enabled); - void (* action_state_changed) (GActionGroup *action_group, - const gchar *action_name, - GVariant *state); - - /* more virtual functions */ - gboolean (* query_action) (GActionGroup *action_group, - const gchar *action_name, - gboolean *enabled, - const GVariantType **parameter_type, - const GVariantType **state_type, - GVariant **state_hint, - GVariant **state); -}; - -GType g_action_group_get_type (void) G_GNUC_CONST; - -gboolean g_action_group_has_action (GActionGroup *action_group, - const gchar *action_name); -gchar ** g_action_group_list_actions (GActionGroup *action_group); - -const GVariantType * g_action_group_get_action_parameter_type (GActionGroup *action_group, - const gchar *action_name); -const GVariantType * g_action_group_get_action_state_type (GActionGroup *action_group, - const gchar *action_name); -GVariant * g_action_group_get_action_state_hint (GActionGroup *action_group, - const gchar *action_name); - -gboolean g_action_group_get_action_enabled (GActionGroup *action_group, - const gchar *action_name); - -GVariant * g_action_group_get_action_state (GActionGroup *action_group, - const gchar *action_name); -void g_action_group_change_action_state (GActionGroup *action_group, - const gchar *action_name, - GVariant *value); - -void g_action_group_activate_action (GActionGroup *action_group, - const gchar *action_name, - GVariant *parameter); - -/* signals */ -void g_action_group_action_added (GActionGroup *action_group, - const gchar *action_name); -void g_action_group_action_removed (GActionGroup *action_group, - const gchar *action_name); -void g_action_group_action_enabled_changed (GActionGroup *action_group, - const gchar *action_name, - gboolean enabled); - -void g_action_group_action_state_changed (GActionGroup *action_group, - const gchar *action_name, - GVariant *state); - -GLIB_AVAILABLE_IN_2_32 -gboolean g_action_group_query_action (GActionGroup *action_group, - const gchar *action_name, - gboolean *enabled, - const GVariantType **parameter_type, - const GVariantType **state_type, - GVariant **state_hint, - GVariant **state); - -G_END_DECLS - -#endif /* __G_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gactiongroupexporter.h b/GstreamerHelper/x64/include/glib-2.0/gio/gactiongroupexporter.h deleted file mode 100644 index eaa18e66..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gactiongroupexporter.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * Copyright © 2011 Canonical Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_GROUP_EXPORTER_H__ -#define __G_ACTION_GROUP_EXPORTER_H__ - -#include - -G_BEGIN_DECLS - -GLIB_AVAILABLE_IN_2_32 -guint g_dbus_connection_export_action_group (GDBusConnection *connection, - const gchar *object_path, - GActionGroup *action_group, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -void g_dbus_connection_unexport_action_group (GDBusConnection *connection, - guint export_id); - -G_END_DECLS - -#endif /* __G_ACTION_GROUP_EXPORTER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gactionmap.h b/GstreamerHelper/x64/include/glib-2.0/gio/gactionmap.h deleted file mode 100644 index 8e5993e2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gactionmap.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_MAP_H__ -#define __G_ACTION_MAP_H__ - -#include - -G_BEGIN_DECLS - - -#define G_TYPE_ACTION_MAP (g_action_map_get_type ()) -#define G_ACTION_MAP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_ACTION_MAP, GActionMap)) -#define G_IS_ACTION_MAP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_ACTION_MAP)) -#define G_ACTION_MAP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_ACTION_MAP, GActionMapInterface)) - -typedef struct _GActionMapInterface GActionMapInterface; -typedef struct _GActionEntry GActionEntry; - -struct _GActionMapInterface -{ - GTypeInterface g_iface; - - GAction * (* lookup_action) (GActionMap *action_map, - const gchar *action_name); - void (* add_action) (GActionMap *action_map, - GAction *action); - void (* remove_action) (GActionMap *action_map, - const gchar *action_name); -}; - -struct _GActionEntry -{ - const gchar *name; - - void (* activate) (GSimpleAction *action, - GVariant *parameter, - gpointer user_data); - - const gchar *parameter_type; - - const gchar *state; - - void (* change_state) (GSimpleAction *action, - GVariant *value, - gpointer user_data); - - /*< private >*/ - gsize padding[3]; -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_action_map_get_type (void) G_GNUC_CONST; - -GAction * g_action_map_lookup_action (GActionMap *action_map, - const gchar *action_name); -void g_action_map_add_action (GActionMap *action_map, - GAction *action); -void g_action_map_remove_action (GActionMap *action_map, - const gchar *action_name); -void g_action_map_add_action_entries (GActionMap *action_map, - const GActionEntry *entries, - gint n_entries, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_ACTION_MAP_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gappinfo.h b/GstreamerHelper/x64/include/glib-2.0/gio/gappinfo.h deleted file mode 100644 index 578f62f1..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gappinfo.h +++ /dev/null @@ -1,262 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_APP_INFO_H__ -#define __G_APP_INFO_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_APP_INFO (g_app_info_get_type ()) -#define G_APP_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_APP_INFO, GAppInfo)) -#define G_IS_APP_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_APP_INFO)) -#define G_APP_INFO_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_APP_INFO, GAppInfoIface)) - -#define G_TYPE_APP_LAUNCH_CONTEXT (g_app_launch_context_get_type ()) -#define G_APP_LAUNCH_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContext)) -#define G_APP_LAUNCH_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContextClass)) -#define G_IS_APP_LAUNCH_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_APP_LAUNCH_CONTEXT)) -#define G_IS_APP_LAUNCH_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_APP_LAUNCH_CONTEXT)) -#define G_APP_LAUNCH_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContextClass)) - -typedef struct _GAppLaunchContextClass GAppLaunchContextClass; -typedef struct _GAppLaunchContextPrivate GAppLaunchContextPrivate; - -/** - * GAppInfo: - * - * Information about an installed application and methods to launch - * it (with file arguments). - */ - -/** - * GAppInfoIface: - * @g_iface: The parent interface. - * @dup: Copies a #GAppInfo. - * @equal: Checks two #GAppInfos for equality. - * @get_id: Gets a string identifier for a #GAppInfo. - * @get_name: Gets the name of the application for a #GAppInfo. - * @get_description: Gets a short description for the application described by the #GAppInfo. - * @get_executable: Gets the executable name for the #GAppInfo. - * @get_icon: Gets the #GIcon for the #GAppInfo. - * @launch: Launches an application specified by the #GAppInfo. - * @supports_uris: Indicates whether the application specified supports launching URIs. - * @supports_files: Indicates whether the application specified accepts filename arguments. - * @launch_uris: Launches an application with a list of URIs. - * @should_show: Returns whether an application should be shown (e.g. when getting a list of installed applications). - * - * FreeDesktop.Org Startup Notification Specification. - * @set_as_default_for_type: Sets an application as default for a given content type. - * @set_as_default_for_extension: Sets an application as default for a given file extension. - * @add_supports_type: Adds to the #GAppInfo information about supported file types. - * @can_remove_supports_type: Checks for support for removing supported file types from a #GAppInfo. - * @remove_supports_type: Removes a supported application type from a #GAppInfo. - * @can_delete: Checks if a #GAppInfo can be deleted. Since 2.20 - * @do_delete: Deletes a #GAppInfo. Since 2.20 - * @get_commandline: Gets the commandline for the #GAppInfo. Since 2.20 - * @get_display_name: Gets the display name for the #GAppInfo. Since 2.24 - * @set_as_last_used_for_type: Sets the application as the last used. See g_app_info_set_as_last_used_for_type(). - * - * Application Information interface, for operating system portability. - */ -typedef struct _GAppInfoIface GAppInfoIface; - -struct _GAppInfoIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GAppInfo * (* dup) (GAppInfo *appinfo); - gboolean (* equal) (GAppInfo *appinfo1, - GAppInfo *appinfo2); - const char * (* get_id) (GAppInfo *appinfo); - const char * (* get_name) (GAppInfo *appinfo); - const char * (* get_description) (GAppInfo *appinfo); - const char * (* get_executable) (GAppInfo *appinfo); - GIcon * (* get_icon) (GAppInfo *appinfo); - gboolean (* launch) (GAppInfo *appinfo, - GList *files, - GAppLaunchContext *launch_context, - GError **error); - gboolean (* supports_uris) (GAppInfo *appinfo); - gboolean (* supports_files) (GAppInfo *appinfo); - gboolean (* launch_uris) (GAppInfo *appinfo, - GList *uris, - GAppLaunchContext *launch_context, - GError **error); - gboolean (* should_show) (GAppInfo *appinfo); - - /* For changing associations */ - gboolean (* set_as_default_for_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - gboolean (* set_as_default_for_extension) (GAppInfo *appinfo, - const char *extension, - GError **error); - gboolean (* add_supports_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - gboolean (* can_remove_supports_type) (GAppInfo *appinfo); - gboolean (* remove_supports_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - gboolean (* can_delete) (GAppInfo *appinfo); - gboolean (* do_delete) (GAppInfo *appinfo); - const char * (* get_commandline) (GAppInfo *appinfo); - const char * (* get_display_name) (GAppInfo *appinfo); - gboolean (* set_as_last_used_for_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - const char ** (* get_supported_types) (GAppInfo *appinfo); -}; - -GType g_app_info_get_type (void) G_GNUC_CONST; -GAppInfo * g_app_info_create_from_commandline (const char *commandline, - const char *application_name, - GAppInfoCreateFlags flags, - GError **error); -GAppInfo * g_app_info_dup (GAppInfo *appinfo); -gboolean g_app_info_equal (GAppInfo *appinfo1, - GAppInfo *appinfo2); -const char *g_app_info_get_id (GAppInfo *appinfo); -const char *g_app_info_get_name (GAppInfo *appinfo); -const char *g_app_info_get_display_name (GAppInfo *appinfo); -const char *g_app_info_get_description (GAppInfo *appinfo); -const char *g_app_info_get_executable (GAppInfo *appinfo); -const char *g_app_info_get_commandline (GAppInfo *appinfo); -GIcon * g_app_info_get_icon (GAppInfo *appinfo); -gboolean g_app_info_launch (GAppInfo *appinfo, - GList *files, - GAppLaunchContext *launch_context, - GError **error); -gboolean g_app_info_supports_uris (GAppInfo *appinfo); -gboolean g_app_info_supports_files (GAppInfo *appinfo); -gboolean g_app_info_launch_uris (GAppInfo *appinfo, - GList *uris, - GAppLaunchContext *launch_context, - GError **error); -gboolean g_app_info_should_show (GAppInfo *appinfo); - -gboolean g_app_info_set_as_default_for_type (GAppInfo *appinfo, - const char *content_type, - GError **error); -gboolean g_app_info_set_as_default_for_extension (GAppInfo *appinfo, - const char *extension, - GError **error); -gboolean g_app_info_add_supports_type (GAppInfo *appinfo, - const char *content_type, - GError **error); -gboolean g_app_info_can_remove_supports_type (GAppInfo *appinfo); -gboolean g_app_info_remove_supports_type (GAppInfo *appinfo, - const char *content_type, - GError **error); -GLIB_AVAILABLE_IN_2_34 -const char **g_app_info_get_supported_types (GAppInfo *appinfo); - -gboolean g_app_info_can_delete (GAppInfo *appinfo); -gboolean g_app_info_delete (GAppInfo *appinfo); - -gboolean g_app_info_set_as_last_used_for_type (GAppInfo *appinfo, - const char *content_type, - GError **error); - -GList * g_app_info_get_all (void); -GList * g_app_info_get_all_for_type (const char *content_type); -GList * g_app_info_get_recommended_for_type (const gchar *content_type); -GList * g_app_info_get_fallback_for_type (const gchar *content_type); - -void g_app_info_reset_type_associations (const char *content_type); -GAppInfo *g_app_info_get_default_for_type (const char *content_type, - gboolean must_support_uris); -GAppInfo *g_app_info_get_default_for_uri_scheme (const char *uri_scheme); - -gboolean g_app_info_launch_default_for_uri (const char *uri, - GAppLaunchContext *launch_context, - GError **error); - -/** - * GAppLaunchContext: - * - * Integrating the launch with the launching application. This is used to - * handle for instance startup notification and launching the new application - * on the same screen as the launching window. - */ -struct _GAppLaunchContext -{ - GObject parent_instance; - - /*< private >*/ - GAppLaunchContextPrivate *priv; -}; - -struct _GAppLaunchContextClass -{ - GObjectClass parent_class; - - char * (* get_display) (GAppLaunchContext *context, - GAppInfo *info, - GList *files); - char * (* get_startup_notify_id) (GAppLaunchContext *context, - GAppInfo *info, - GList *files); - void (* launch_failed) (GAppLaunchContext *context, - const char *startup_notify_id); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_app_launch_context_get_type (void) G_GNUC_CONST; -GAppLaunchContext *g_app_launch_context_new (void); - -GLIB_AVAILABLE_IN_2_32 -void g_app_launch_context_setenv (GAppLaunchContext *context, - const char *variable, - const char *value); -GLIB_AVAILABLE_IN_2_32 -void g_app_launch_context_unsetenv (GAppLaunchContext *context, - const char *variable); -GLIB_AVAILABLE_IN_2_32 -char ** g_app_launch_context_get_environment (GAppLaunchContext *context); - -char * g_app_launch_context_get_display (GAppLaunchContext *context, - GAppInfo *info, - GList *files); -char * g_app_launch_context_get_startup_notify_id (GAppLaunchContext *context, - GAppInfo *info, - GList *files); -void g_app_launch_context_launch_failed (GAppLaunchContext *context, - const char * startup_notify_id); - -G_END_DECLS - -#endif /* __G_APP_INFO_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gapplication.h b/GstreamerHelper/x64/include/glib-2.0/gio/gapplication.h deleted file mode 100644 index 087682eb..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gapplication.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_APPLICATION_H__ -#define __G_APPLICATION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_APPLICATION (g_application_get_type ()) -#define G_APPLICATION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_APPLICATION, GApplication)) -#define G_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_APPLICATION, GApplicationClass)) -#define G_IS_APPLICATION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_APPLICATION)) -#define G_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_APPLICATION)) -#define G_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_APPLICATION, GApplicationClass)) - -typedef struct _GApplicationPrivate GApplicationPrivate; -typedef struct _GApplicationClass GApplicationClass; - -/** - * GApplication: - * - * Since: 2.28 - */ -struct _GApplication -{ - /*< private >*/ - GObject parent_instance; - - GApplicationPrivate *priv; -}; - -struct _GApplicationClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - /* signals */ - void (* startup) (GApplication *application); - - void (* activate) (GApplication *application); - - void (* open) (GApplication *application, - GFile **files, - gint n_files, - const gchar *hint); - - int (* command_line) (GApplication *application, - GApplicationCommandLine *command_line); - - /* vfuncs */ - gboolean (* local_command_line) (GApplication *application, - gchar ***arguments, - int *exit_status); - - void (* before_emit) (GApplication *application, - GVariant *platform_data); - void (* after_emit) (GApplication *application, - GVariant *platform_data); - void (* add_platform_data) (GApplication *application, - GVariantBuilder *builder); - void (* quit_mainloop) (GApplication *application); - void (* run_mainloop) (GApplication *application); - void (* shutdown) (GApplication *application); - - gboolean (* dbus_register) (GApplication *application, - GDBusConnection *connection, - const gchar *object_path, - GError **error); - void (* dbus_unregister) (GApplication *application, - GDBusConnection *connection, - const gchar *object_path); - - /*< private >*/ - gpointer padding[9]; -}; - -GType g_application_get_type (void) G_GNUC_CONST; - -gboolean g_application_id_is_valid (const gchar *application_id); - -GApplication * g_application_new (const gchar *application_id, - GApplicationFlags flags); - -const gchar * g_application_get_application_id (GApplication *application); -void g_application_set_application_id (GApplication *application, - const gchar *application_id); - -GLIB_AVAILABLE_IN_2_34 -GDBusConnection * g_application_get_dbus_connection (GApplication *application); -GLIB_AVAILABLE_IN_2_34 -const gchar * g_application_get_dbus_object_path (GApplication *application); - -guint g_application_get_inactivity_timeout (GApplication *application); -void g_application_set_inactivity_timeout (GApplication *application, - guint inactivity_timeout); - -GApplicationFlags g_application_get_flags (GApplication *application); -void g_application_set_flags (GApplication *application, - GApplicationFlags flags); - -GLIB_DEPRECATED -void g_application_set_action_group (GApplication *application, - GActionGroup *action_group); - -gboolean g_application_get_is_registered (GApplication *application); -gboolean g_application_get_is_remote (GApplication *application); - -gboolean g_application_register (GApplication *application, - GCancellable *cancellable, - GError **error); - -void g_application_hold (GApplication *application); -void g_application_release (GApplication *application); - -void g_application_activate (GApplication *application); - -void g_application_open (GApplication *application, - GFile **files, - gint n_files, - const gchar *hint); - -int g_application_run (GApplication *application, - int argc, - char **argv); - -void g_application_quit (GApplication *application); - -GLIB_AVAILABLE_IN_2_32 -GApplication * g_application_get_default (void); -GLIB_AVAILABLE_IN_2_32 -void g_application_set_default (GApplication *application); - -G_END_DECLS - -#endif /* __G_APPLICATION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gapplicationcommandline.h b/GstreamerHelper/x64/include/glib-2.0/gio/gapplicationcommandline.h deleted file mode 100644 index 25def211..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gapplicationcommandline.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_APPLICATION_COMMAND_LINE_H__ -#define __G_APPLICATION_COMMAND_LINE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_APPLICATION_COMMAND_LINE (g_application_command_line_get_type ()) -#define G_APPLICATION_COMMAND_LINE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_APPLICATION_COMMAND_LINE, \ - GApplicationCommandLine)) -#define G_APPLICATION_COMMAND_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_APPLICATION_COMMAND_LINE, \ - GApplicationCommandLineClass)) -#define G_IS_APPLICATION_COMMAND_LINE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_APPLICATION_COMMAND_LINE)) -#define G_IS_APPLICATION_COMMAND_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_APPLICATION_COMMAND_LINE)) -#define G_APPLICATION_COMMAND_LINE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_APPLICATION_COMMAND_LINE, \ - GApplicationCommandLineClass)) - -typedef struct _GApplicationCommandLinePrivate GApplicationCommandLinePrivate; -typedef struct _GApplicationCommandLineClass GApplicationCommandLineClass; - -struct _GApplicationCommandLine -{ - /*< private >*/ - GObject parent_instance; - - GApplicationCommandLinePrivate *priv; -}; - -struct _GApplicationCommandLineClass -{ - /*< private >*/ - GObjectClass parent_class; - - void (* print_literal) (GApplicationCommandLine *cmdline, - const gchar *message); - void (* printerr_literal) (GApplicationCommandLine *cmdline, - const gchar *message); - - gpointer padding[12]; -}; - -GType g_application_command_line_get_type (void) G_GNUC_CONST; - -gchar ** g_application_command_line_get_arguments (GApplicationCommandLine *cmdline, - int *argc); - -const gchar * const * g_application_command_line_get_environ (GApplicationCommandLine *cmdline); - -const gchar * g_application_command_line_getenv (GApplicationCommandLine *cmdline, - const gchar *name); - -const gchar * g_application_command_line_get_cwd (GApplicationCommandLine *cmdline); - -gboolean g_application_command_line_get_is_remote (GApplicationCommandLine *cmdline); - -void g_application_command_line_print (GApplicationCommandLine *cmdline, - const gchar *format, - ...) G_GNUC_PRINTF(2, 3); -void g_application_command_line_printerr (GApplicationCommandLine *cmdline, - const gchar *format, - ...) G_GNUC_PRINTF(2, 3); - -int g_application_command_line_get_exit_status (GApplicationCommandLine *cmdline); -void g_application_command_line_set_exit_status (GApplicationCommandLine *cmdline, - int exit_status); - -GVariant * g_application_command_line_get_platform_data (GApplicationCommandLine *cmdline); - -G_END_DECLS - -#endif /* __G_APPLICATION_COMMAND_LINE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gasyncinitable.h b/GstreamerHelper/x64/include/glib-2.0/gio/gasyncinitable.h deleted file mode 100644 index 84428215..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gasyncinitable.h +++ /dev/null @@ -1,119 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ASYNC_INITABLE_H__ -#define __G_ASYNC_INITABLE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_ASYNC_INITABLE (g_async_initable_get_type ()) -#define G_ASYNC_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ASYNC_INITABLE, GAsyncInitable)) -#define G_IS_ASYNC_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ASYNC_INITABLE)) -#define G_ASYNC_INITABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ASYNC_INITABLE, GAsyncInitableIface)) -#define G_TYPE_IS_ASYNC_INITABLE(type) (g_type_is_a ((type), G_TYPE_ASYNC_INITABLE)) - -/** - * GAsyncInitable: - * - * Interface for asynchronously initializable objects. - * - * Since: 2.22 - **/ -typedef struct _GAsyncInitableIface GAsyncInitableIface; - -/** - * GAsyncInitableIface: - * @g_iface: The parent interface. - * @init_async: Starts initialization of the object. - * @init_finish: Finishes initialization of the object. - * - * Provides an interface for asynchronous initializing object such that - * initialization may fail. - * - * Since: 2.22 - **/ -struct _GAsyncInitableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - void (* init_async) (GAsyncInitable *initable, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* init_finish) (GAsyncInitable *initable, - GAsyncResult *res, - GError **error); -}; - -GType g_async_initable_get_type (void) G_GNUC_CONST; - - -void g_async_initable_init_async (GAsyncInitable *initable, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_async_initable_init_finish (GAsyncInitable *initable, - GAsyncResult *res, - GError **error); - -void g_async_initable_new_async (GType object_type, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data, - const gchar *first_property_name, - ...); -void g_async_initable_newv_async (GType object_type, - guint n_parameters, - GParameter *parameters, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -void g_async_initable_new_valist_async (GType object_type, - const gchar *first_property_name, - va_list var_args, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GObject *g_async_initable_new_finish (GAsyncInitable *initable, - GAsyncResult *res, - GError **error); - - - -G_END_DECLS - - -#endif /* __G_ASYNC_INITABLE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gasyncresult.h b/GstreamerHelper/x64/include/glib-2.0/gio/gasyncresult.h deleted file mode 100644 index e898401a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gasyncresult.h +++ /dev/null @@ -1,84 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ASYNC_RESULT_H__ -#define __G_ASYNC_RESULT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_ASYNC_RESULT (g_async_result_get_type ()) -#define G_ASYNC_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ASYNC_RESULT, GAsyncResult)) -#define G_IS_ASYNC_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ASYNC_RESULT)) -#define G_ASYNC_RESULT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ASYNC_RESULT, GAsyncResultIface)) - -/** - * GAsyncResult: - * - * Holds results information for an asynchronous operation, - * usually passed directly to a asynchronous _finish() operation. - **/ -typedef struct _GAsyncResultIface GAsyncResultIface; - - -/** - * GAsyncResultIface: - * @g_iface: The parent interface. - * @get_user_data: Gets the user data passed to the callback. - * @get_source_object: Gets the source object that issued the asynchronous operation. - * @is_tagged: Checks if a result is tagged with a particular source. - * - * Interface definition for #GAsyncResult. - **/ -struct _GAsyncResultIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - gpointer (* get_user_data) (GAsyncResult *res); - GObject * (* get_source_object) (GAsyncResult *res); - - gboolean (* is_tagged) (GAsyncResult *res, - gpointer tag); -}; - -GType g_async_result_get_type (void) G_GNUC_CONST; - -gpointer g_async_result_get_user_data (GAsyncResult *res); -GObject *g_async_result_get_source_object (GAsyncResult *res); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_async_result_legacy_propagate_error (GAsyncResult *res, - GError **error); -GLIB_AVAILABLE_IN_2_34 -gboolean g_async_result_is_tagged (GAsyncResult *res, - gpointer source_tag); - -G_END_DECLS - -#endif /* __G_ASYNC_RESULT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gbufferedinputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gbufferedinputstream.h deleted file mode 100644 index 029426c2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gbufferedinputstream.h +++ /dev/null @@ -1,123 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BUFFERED_INPUT_STREAM_H__ -#define __G_BUFFERED_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_BUFFERED_INPUT_STREAM (g_buffered_input_stream_get_type ()) -#define G_BUFFERED_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStream)) -#define G_BUFFERED_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStreamClass)) -#define G_IS_BUFFERED_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_BUFFERED_INPUT_STREAM)) -#define G_IS_BUFFERED_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_BUFFERED_INPUT_STREAM)) -#define G_BUFFERED_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStreamClass)) - -/** - * GBufferedInputStream: - * - * Implements #GFilterInputStream with a sized input buffer. - **/ -typedef struct _GBufferedInputStreamClass GBufferedInputStreamClass; -typedef struct _GBufferedInputStreamPrivate GBufferedInputStreamPrivate; - -struct _GBufferedInputStream -{ - GFilterInputStream parent_instance; - - /*< private >*/ - GBufferedInputStreamPrivate *priv; -}; - -struct _GBufferedInputStreamClass -{ - GFilterInputStreamClass parent_class; - - gssize (* fill) (GBufferedInputStream *stream, - gssize count, - GCancellable *cancellable, - GError **error); - - /* Async ops: (optional in derived classes) */ - void (* fill_async) (GBufferedInputStream *stream, - gssize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* fill_finish) (GBufferedInputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - - -GType g_buffered_input_stream_get_type (void) G_GNUC_CONST; -GInputStream* g_buffered_input_stream_new (GInputStream *base_stream); -GInputStream* g_buffered_input_stream_new_sized (GInputStream *base_stream, - gsize size); - -gsize g_buffered_input_stream_get_buffer_size (GBufferedInputStream *stream); -void g_buffered_input_stream_set_buffer_size (GBufferedInputStream *stream, - gsize size); -gsize g_buffered_input_stream_get_available (GBufferedInputStream *stream); -gsize g_buffered_input_stream_peek (GBufferedInputStream *stream, - void *buffer, - gsize offset, - gsize count); -const void* g_buffered_input_stream_peek_buffer (GBufferedInputStream *stream, - gsize *count); - -gssize g_buffered_input_stream_fill (GBufferedInputStream *stream, - gssize count, - GCancellable *cancellable, - GError **error); -void g_buffered_input_stream_fill_async (GBufferedInputStream *stream, - gssize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_buffered_input_stream_fill_finish (GBufferedInputStream *stream, - GAsyncResult *result, - GError **error); - -int g_buffered_input_stream_read_byte (GBufferedInputStream *stream, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_BUFFERED_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gbufferedoutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gbufferedoutputstream.h deleted file mode 100644 index 0d84790b..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gbufferedoutputstream.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BUFFERED_OUTPUT_STREAM_H__ -#define __G_BUFFERED_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_BUFFERED_OUTPUT_STREAM (g_buffered_output_stream_get_type ()) -#define G_BUFFERED_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStream)) -#define G_BUFFERED_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStreamClass)) -#define G_IS_BUFFERED_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_BUFFERED_OUTPUT_STREAM)) -#define G_IS_BUFFERED_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_BUFFERED_OUTPUT_STREAM)) -#define G_BUFFERED_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStreamClass)) - -/** - * GBufferedOutputStream: - * - * An implementation of #GFilterOutputStream with a sized buffer. - **/ -typedef struct _GBufferedOutputStreamClass GBufferedOutputStreamClass; -typedef struct _GBufferedOutputStreamPrivate GBufferedOutputStreamPrivate; - -struct _GBufferedOutputStream -{ - GFilterOutputStream parent_instance; - - /*< protected >*/ - GBufferedOutputStreamPrivate *priv; -}; - -struct _GBufferedOutputStreamClass -{ - GFilterOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); -}; - - -GType g_buffered_output_stream_get_type (void) G_GNUC_CONST; -GOutputStream* g_buffered_output_stream_new (GOutputStream *base_stream); -GOutputStream* g_buffered_output_stream_new_sized (GOutputStream *base_stream, - gsize size); -gsize g_buffered_output_stream_get_buffer_size (GBufferedOutputStream *stream); -void g_buffered_output_stream_set_buffer_size (GBufferedOutputStream *stream, - gsize size); -gboolean g_buffered_output_stream_get_auto_grow (GBufferedOutputStream *stream); -void g_buffered_output_stream_set_auto_grow (GBufferedOutputStream *stream, - gboolean auto_grow); - -G_END_DECLS - -#endif /* __G_BUFFERED_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gcancellable.h b/GstreamerHelper/x64/include/glib-2.0/gio/gcancellable.h deleted file mode 100644 index d8fa6336..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gcancellable.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CANCELLABLE_H__ -#define __G_CANCELLABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_CANCELLABLE (g_cancellable_get_type ()) -#define G_CANCELLABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CANCELLABLE, GCancellable)) -#define G_CANCELLABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CANCELLABLE, GCancellableClass)) -#define G_IS_CANCELLABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CANCELLABLE)) -#define G_IS_CANCELLABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CANCELLABLE)) -#define G_CANCELLABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CANCELLABLE, GCancellableClass)) - -/** - * GCancellable: - * - * Allows actions to be cancelled. - */ -typedef struct _GCancellableClass GCancellableClass; -typedef struct _GCancellablePrivate GCancellablePrivate; - -struct _GCancellable -{ - GObject parent_instance; - - /*< private >*/ - GCancellablePrivate *priv; -}; - -struct _GCancellableClass -{ - GObjectClass parent_class; - - void (* cancelled) (GCancellable *cancellable); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_cancellable_get_type (void) G_GNUC_CONST; - -GCancellable *g_cancellable_new (void); - -/* These are only safe to call inside a cancellable op */ -gboolean g_cancellable_is_cancelled (GCancellable *cancellable); -gboolean g_cancellable_set_error_if_cancelled (GCancellable *cancellable, - GError **error); - -int g_cancellable_get_fd (GCancellable *cancellable); -gboolean g_cancellable_make_pollfd (GCancellable *cancellable, - GPollFD *pollfd); -void g_cancellable_release_fd (GCancellable *cancellable); - -GSource * g_cancellable_source_new (GCancellable *cancellable); - -GCancellable *g_cancellable_get_current (void); -void g_cancellable_push_current (GCancellable *cancellable); -void g_cancellable_pop_current (GCancellable *cancellable); -void g_cancellable_reset (GCancellable *cancellable); -gulong g_cancellable_connect (GCancellable *cancellable, - GCallback callback, - gpointer data, - GDestroyNotify data_destroy_func); -void g_cancellable_disconnect (GCancellable *cancellable, - gulong handler_id); - - -/* This is safe to call from another thread */ -void g_cancellable_cancel (GCancellable *cancellable); - -G_END_DECLS - -#endif /* __G_CANCELLABLE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gcharsetconverter.h b/GstreamerHelper/x64/include/glib-2.0/gio/gcharsetconverter.h deleted file mode 100644 index 5198d463..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gcharsetconverter.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CHARSET_CONVERTER_H__ -#define __G_CHARSET_CONVERTER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_CHARSET_CONVERTER (g_charset_converter_get_type ()) -#define G_CHARSET_CONVERTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CHARSET_CONVERTER, GCharsetConverter)) -#define G_CHARSET_CONVERTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CHARSET_CONVERTER, GCharsetConverterClass)) -#define G_IS_CHARSET_CONVERTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CHARSET_CONVERTER)) -#define G_IS_CHARSET_CONVERTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CHARSET_CONVERTER)) -#define G_CHARSET_CONVERTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CHARSET_CONVERTER, GCharsetConverterClass)) - -typedef struct _GCharsetConverterClass GCharsetConverterClass; - -struct _GCharsetConverterClass -{ - GObjectClass parent_class; -}; - -GType g_charset_converter_get_type (void) G_GNUC_CONST; - -GCharsetConverter *g_charset_converter_new (const gchar *to_charset, - const gchar *from_charset, - GError **error); -void g_charset_converter_set_use_fallback (GCharsetConverter *converter, - gboolean use_fallback); -gboolean g_charset_converter_get_use_fallback (GCharsetConverter *converter); -guint g_charset_converter_get_num_fallbacks (GCharsetConverter *converter); - -G_END_DECLS - -#endif /* __G_CHARSET_CONVERTER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gcontenttype.h b/GstreamerHelper/x64/include/glib-2.0/gio/gcontenttype.h deleted file mode 100644 index fb4b8619..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gcontenttype.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONTENT_TYPE_H__ -#define __G_CONTENT_TYPE_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_content_type_equals (const gchar *type1, - const gchar *type2); -gboolean g_content_type_is_a (const gchar *type, - const gchar *supertype); -gboolean g_content_type_is_unknown (const gchar *type); -gchar * g_content_type_get_description (const gchar *type); -gchar * g_content_type_get_mime_type (const gchar *type); -GIcon * g_content_type_get_icon (const gchar *type); -GIcon * g_content_type_get_symbolic_icon (const gchar *type); -GLIB_AVAILABLE_IN_2_34 -gchar * g_content_type_get_generic_icon_name (const gchar *type); - -gboolean g_content_type_can_be_executable (const gchar *type); - -gchar * g_content_type_from_mime_type (const gchar *mime_type); - -gchar * g_content_type_guess (const gchar *filename, - const guchar *data, - gsize data_size, - gboolean *result_uncertain); - -gchar ** g_content_type_guess_for_tree (GFile *root); - -GList * g_content_types_get_registered (void); - -G_END_DECLS - -#endif /* __G_CONTENT_TYPE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gconverter.h b/GstreamerHelper/x64/include/glib-2.0/gio/gconverter.h deleted file mode 100644 index 6770aaf9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gconverter.h +++ /dev/null @@ -1,95 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERTER_H__ -#define __G_CONVERTER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_CONVERTER (g_converter_get_type ()) -#define G_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_CONVERTER, GConverter)) -#define G_IS_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_CONVERTER)) -#define G_CONVERTER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_CONVERTER, GConverterIface)) - -/** - * GConverter: - * - * Seek object for streaming operations. - * - * Since: 2.24 - **/ -typedef struct _GConverterIface GConverterIface; - -/** - * GConverterIface: - * @g_iface: The parent interface. - * @convert: Converts data. - * @reset: Reverts the internal state of the converter to its initial state. - * - * Provides an interface for converting data from one type - * to another type. The conversion can be stateful - * and may fail at any place. - * - * Since: 2.24 - **/ -struct _GConverterIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GConverterResult (* convert) (GConverter *converter, - const void *inbuf, - gsize inbuf_size, - void *outbuf, - gsize outbuf_size, - GConverterFlags flags, - gsize *bytes_read, - gsize *bytes_written, - GError **error); - void (* reset) (GConverter *converter); -}; - -GType g_converter_get_type (void) G_GNUC_CONST; - -GConverterResult g_converter_convert (GConverter *converter, - const void *inbuf, - gsize inbuf_size, - void *outbuf, - gsize outbuf_size, - GConverterFlags flags, - gsize *bytes_read, - gsize *bytes_written, - GError **error); -void g_converter_reset (GConverter *converter); - - -G_END_DECLS - - -#endif /* __G_CONVERTER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gconverterinputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gconverterinputstream.h deleted file mode 100644 index 8e4f1d4f..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gconverterinputstream.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERTER_INPUT_STREAM_H__ -#define __G_CONVERTER_INPUT_STREAM_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_CONVERTER_INPUT_STREAM (g_converter_input_stream_get_type ()) -#define G_CONVERTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CONVERTER_INPUT_STREAM, GConverterInputStream)) -#define G_CONVERTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CONVERTER_INPUT_STREAM, GConverterInputStreamClass)) -#define G_IS_CONVERTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CONVERTER_INPUT_STREAM)) -#define G_IS_CONVERTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CONVERTER_INPUT_STREAM)) -#define G_CONVERTER_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CONVERTER_INPUT_STREAM, GConverterInputStreamClass)) - -/** - * GConverterInputStream: - * - * An implementation of #GFilterInputStream that allows data - * conversion. - **/ -typedef struct _GConverterInputStreamClass GConverterInputStreamClass; -typedef struct _GConverterInputStreamPrivate GConverterInputStreamPrivate; - -struct _GConverterInputStream -{ - GFilterInputStream parent_instance; - - /*< private >*/ - GConverterInputStreamPrivate *priv; -}; - -struct _GConverterInputStreamClass -{ - GFilterInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_converter_input_stream_get_type (void) G_GNUC_CONST; -GInputStream *g_converter_input_stream_new (GInputStream *base_stream, - GConverter *converter); -GConverter *g_converter_input_stream_get_converter (GConverterInputStream *converter_stream); - -G_END_DECLS - -#endif /* __G_CONVERTER_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gconverteroutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gconverteroutputstream.h deleted file mode 100644 index ceac2008..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gconverteroutputstream.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERTER_OUTPUT_STREAM_H__ -#define __G_CONVERTER_OUTPUT_STREAM_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_CONVERTER_OUTPUT_STREAM (g_converter_output_stream_get_type ()) -#define G_CONVERTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CONVERTER_OUTPUT_STREAM, GConverterOutputStream)) -#define G_CONVERTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CONVERTER_OUTPUT_STREAM, GConverterOutputStreamClass)) -#define G_IS_CONVERTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CONVERTER_OUTPUT_STREAM)) -#define G_IS_CONVERTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CONVERTER_OUTPUT_STREAM)) -#define G_CONVERTER_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CONVERTER_OUTPUT_STREAM, GConverterOutputStreamClass)) - -/** - * GConverterOutputStream: - * - * An implementation of #GFilterOutputStream that allows data - * conversion. - **/ -typedef struct _GConverterOutputStreamClass GConverterOutputStreamClass; -typedef struct _GConverterOutputStreamPrivate GConverterOutputStreamPrivate; - -struct _GConverterOutputStream -{ - GFilterOutputStream parent_instance; - - /*< private >*/ - GConverterOutputStreamPrivate *priv; -}; - -struct _GConverterOutputStreamClass -{ - GFilterOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_converter_output_stream_get_type (void) G_GNUC_CONST; -GOutputStream *g_converter_output_stream_new (GOutputStream *base_stream, - GConverter *converter); -GConverter *g_converter_output_stream_get_converter (GConverterOutputStream *converter_stream); - -G_END_DECLS - -#endif /* __G_CONVERTER_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gcredentials.h b/GstreamerHelper/x64/include/glib-2.0/gio/gcredentials.h deleted file mode 100644 index 8e09f779..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gcredentials.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CREDENTIALS_H__ -#define __G_CREDENTIALS_H__ - -#include - -#ifdef G_OS_UNIX -/* To get the uid_t type */ -#include -#include -#endif - -G_BEGIN_DECLS - -#define G_TYPE_CREDENTIALS (g_credentials_get_type ()) -#define G_CREDENTIALS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CREDENTIALS, GCredentials)) -#define G_CREDENTIALS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CREDENTIALS, GCredentialsClass)) -#define G_CREDENTIALS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CREDENTIALS, GCredentialsClass)) -#define G_IS_CREDENTIALS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CREDENTIALS)) -#define G_IS_CREDENTIALS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CREDENTIALS)) - -typedef struct _GCredentialsClass GCredentialsClass; - -GType g_credentials_get_type (void) G_GNUC_CONST; - -GCredentials *g_credentials_new (void); - -gchar *g_credentials_to_string (GCredentials *credentials); - -gpointer g_credentials_get_native (GCredentials *credentials, - GCredentialsType native_type); - -void g_credentials_set_native (GCredentials *credentials, - GCredentialsType native_type, - gpointer native); - -gboolean g_credentials_is_same_user (GCredentials *credentials, - GCredentials *other_credentials, - GError **error); - -#ifdef G_OS_UNIX -uid_t g_credentials_get_unix_user (GCredentials *credentials, - GError **error); -gboolean g_credentials_set_unix_user (GCredentials *credentials, - uid_t uid, - GError **error); -#endif - -G_END_DECLS - -#endif /* __G_DBUS_PROXY_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdatainputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdatainputstream.h deleted file mode 100644 index 0f205c65..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdatainputstream.h +++ /dev/null @@ -1,160 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATA_INPUT_STREAM_H__ -#define __G_DATA_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DATA_INPUT_STREAM (g_data_input_stream_get_type ()) -#define G_DATA_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DATA_INPUT_STREAM, GDataInputStream)) -#define G_DATA_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DATA_INPUT_STREAM, GDataInputStreamClass)) -#define G_IS_DATA_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DATA_INPUT_STREAM)) -#define G_IS_DATA_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DATA_INPUT_STREAM)) -#define G_DATA_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DATA_INPUT_STREAM, GDataInputStreamClass)) - -/** - * GDataInputStream: - * - * An implementation of #GBufferedInputStream that allows for high-level - * data manipulation of arbitrary data (including binary operations). - **/ -typedef struct _GDataInputStreamClass GDataInputStreamClass; -typedef struct _GDataInputStreamPrivate GDataInputStreamPrivate; - -struct _GDataInputStream -{ - GBufferedInputStream parent_instance; - - /*< private >*/ - GDataInputStreamPrivate *priv; -}; - -struct _GDataInputStreamClass -{ - GBufferedInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_data_input_stream_get_type (void) G_GNUC_CONST; -GDataInputStream * g_data_input_stream_new (GInputStream *base_stream); - -void g_data_input_stream_set_byte_order (GDataInputStream *stream, - GDataStreamByteOrder order); -GDataStreamByteOrder g_data_input_stream_get_byte_order (GDataInputStream *stream); -void g_data_input_stream_set_newline_type (GDataInputStream *stream, - GDataStreamNewlineType type); -GDataStreamNewlineType g_data_input_stream_get_newline_type (GDataInputStream *stream); -guchar g_data_input_stream_read_byte (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -gint16 g_data_input_stream_read_int16 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -guint16 g_data_input_stream_read_uint16 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -gint32 g_data_input_stream_read_int32 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -guint32 g_data_input_stream_read_uint32 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -gint64 g_data_input_stream_read_int64 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -guint64 g_data_input_stream_read_uint64 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -char * g_data_input_stream_read_line (GDataInputStream *stream, - gsize *length, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_30 -char * g_data_input_stream_read_line_utf8 (GDataInputStream *stream, - gsize *length, - GCancellable *cancellable, - GError **error); -void g_data_input_stream_read_line_async (GDataInputStream *stream, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -char * g_data_input_stream_read_line_finish (GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); -GLIB_AVAILABLE_IN_2_30 -char * g_data_input_stream_read_line_finish_utf8(GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); -char * g_data_input_stream_read_until (GDataInputStream *stream, - const gchar *stop_chars, - gsize *length, - GCancellable *cancellable, - GError **error); -void g_data_input_stream_read_until_async (GDataInputStream *stream, - const gchar *stop_chars, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -char * g_data_input_stream_read_until_finish (GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); - -char * g_data_input_stream_read_upto (GDataInputStream *stream, - const gchar *stop_chars, - gssize stop_chars_len, - gsize *length, - GCancellable *cancellable, - GError **error); -void g_data_input_stream_read_upto_async (GDataInputStream *stream, - const gchar *stop_chars, - gssize stop_chars_len, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -char * g_data_input_stream_read_upto_finish (GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); - -G_END_DECLS - -#endif /* __G_DATA_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdataoutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdataoutputstream.h deleted file mode 100644 index 0fb3cbfe..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdataoutputstream.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATA_OUTPUT_STREAM_H__ -#define __G_DATA_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DATA_OUTPUT_STREAM (g_data_output_stream_get_type ()) -#define G_DATA_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStream)) -#define G_DATA_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStreamClass)) -#define G_IS_DATA_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DATA_OUTPUT_STREAM)) -#define G_IS_DATA_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DATA_OUTPUT_STREAM)) -#define G_DATA_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStreamClass)) - -/** - * GDataOutputStream: - * - * An implementation of #GBufferedOutputStream that allows for high-level - * data manipulation of arbitrary data (including binary operations). - **/ -typedef struct _GDataOutputStream GDataOutputStream; -typedef struct _GDataOutputStreamClass GDataOutputStreamClass; -typedef struct _GDataOutputStreamPrivate GDataOutputStreamPrivate; - -struct _GDataOutputStream -{ - GFilterOutputStream parent_instance; - - /*< private >*/ - GDataOutputStreamPrivate *priv; -}; - -struct _GDataOutputStreamClass -{ - GFilterOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - - -GType g_data_output_stream_get_type (void) G_GNUC_CONST; -GDataOutputStream * g_data_output_stream_new (GOutputStream *base_stream); - -void g_data_output_stream_set_byte_order (GDataOutputStream *stream, - GDataStreamByteOrder order); -GDataStreamByteOrder g_data_output_stream_get_byte_order (GDataOutputStream *stream); - -gboolean g_data_output_stream_put_byte (GDataOutputStream *stream, - guchar data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_int16 (GDataOutputStream *stream, - gint16 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_uint16 (GDataOutputStream *stream, - guint16 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_int32 (GDataOutputStream *stream, - gint32 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_uint32 (GDataOutputStream *stream, - guint32 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_int64 (GDataOutputStream *stream, - gint64 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_uint64 (GDataOutputStream *stream, - guint64 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_string (GDataOutputStream *stream, - const char *str, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_DATA_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusactiongroup.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusactiongroup.h deleted file mode 100644 index 12a2f60c..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusactiongroup.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * Copyright © 2011 Canonical Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_ACTION_GROUP_H__ -#define __G_DBUS_ACTION_GROUP_H__ - -#include "giotypes.h" - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_ACTION_GROUP (g_dbus_action_group_get_type ()) -#define G_DBUS_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_DBUS_ACTION_GROUP, GDBusActionGroup)) -#define G_DBUS_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_DBUS_ACTION_GROUP, GDBusActionGroupClass)) -#define G_IS_DBUS_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_DBUS_ACTION_GROUP)) -#define G_IS_DBUS_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_DBUS_ACTION_GROUP)) -#define G_DBUS_ACTION_GROUP_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_DBUS_ACTION_GROUP, GDBusActionGroupClass)) - -GType g_dbus_action_group_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GDBusActionGroup * g_dbus_action_group_get (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusaddress.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusaddress.h deleted file mode 100644 index 955c39e9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusaddress.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_ADDRESS_H__ -#define __G_DBUS_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_dbus_is_address (const gchar *string); -gboolean g_dbus_is_supported_address (const gchar *string, - GError **error); - -void g_dbus_address_get_stream (const gchar *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GIOStream *g_dbus_address_get_stream_finish (GAsyncResult *res, - gchar **out_guid, - GError **error); - -GIOStream *g_dbus_address_get_stream_sync (const gchar *address, - gchar **out_guid, - GCancellable *cancellable, - GError **error); - -gchar *g_dbus_address_get_for_bus_sync (GBusType bus_type, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_DBUS_ADDRESS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusauthobserver.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusauthobserver.h deleted file mode 100644 index ffb1ddf1..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusauthobserver.h +++ /dev/null @@ -1,50 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_AUTH_OBSERVER_H__ -#define __G_DBUS_AUTH_OBSERVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_AUTH_OBSERVER (g_dbus_auth_observer_get_type ()) -#define G_DBUS_AUTH_OBSERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_AUTH_OBSERVER, GDBusAuthObserver)) -#define G_IS_DBUS_AUTH_OBSERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_AUTH_OBSERVER)) - -GType g_dbus_auth_observer_get_type (void) G_GNUC_CONST; -GDBusAuthObserver *g_dbus_auth_observer_new (void); -gboolean g_dbus_auth_observer_authorize_authenticated_peer (GDBusAuthObserver *observer, - GIOStream *stream, - GCredentials *credentials); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_dbus_auth_observer_allow_mechanism (GDBusAuthObserver *observer, - const gchar *mechanism); - -G_END_DECLS - -#endif /* _G_DBUS_AUTH_OBSERVER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusconnection.h deleted file mode 100644 index 6c1ec5c3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusconnection.h +++ /dev/null @@ -1,599 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_CONNECTION_H__ -#define __G_DBUS_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_CONNECTION (g_dbus_connection_get_type ()) -#define G_DBUS_CONNECTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_CONNECTION, GDBusConnection)) -#define G_IS_DBUS_CONNECTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_CONNECTION)) - -GType g_dbus_connection_get_type (void) G_GNUC_CONST; - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_bus_get (GBusType bus_type, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusConnection *g_bus_get_finish (GAsyncResult *res, - GError **error); -GDBusConnection *g_bus_get_sync (GBusType bus_type, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_new (GIOStream *stream, - const gchar *guid, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusConnection *g_dbus_connection_new_finish (GAsyncResult *res, - GError **error); -GDBusConnection *g_dbus_connection_new_sync (GIOStream *stream, - const gchar *guid, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GError **error); - -void g_dbus_connection_new_for_address (const gchar *address, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusConnection *g_dbus_connection_new_for_address_finish (GAsyncResult *res, - GError **error); -GDBusConnection *g_dbus_connection_new_for_address_sync (const gchar *address, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_start_message_processing (GDBusConnection *connection); -gboolean g_dbus_connection_is_closed (GDBusConnection *connection); -GIOStream *g_dbus_connection_get_stream (GDBusConnection *connection); -const gchar *g_dbus_connection_get_guid (GDBusConnection *connection); -const gchar *g_dbus_connection_get_unique_name (GDBusConnection *connection); -GCredentials *g_dbus_connection_get_peer_credentials (GDBusConnection *connection); - -GLIB_AVAILABLE_IN_2_34 -guint32 g_dbus_connection_get_last_serial (GDBusConnection *connection); - -gboolean g_dbus_connection_get_exit_on_close (GDBusConnection *connection); -void g_dbus_connection_set_exit_on_close (GDBusConnection *connection, - gboolean exit_on_close); -GDBusCapabilityFlags g_dbus_connection_get_capabilities (GDBusConnection *connection); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_close (GDBusConnection *connection, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_dbus_connection_close_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -gboolean g_dbus_connection_close_sync (GDBusConnection *connection, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_flush (GDBusConnection *connection, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_dbus_connection_flush_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -gboolean g_dbus_connection_flush_sync (GDBusConnection *connection, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -gboolean g_dbus_connection_send_message (GDBusConnection *connection, - GDBusMessage *message, - GDBusSendMessageFlags flags, - volatile guint32 *out_serial, - GError **error); -void g_dbus_connection_send_message_with_reply (GDBusConnection *connection, - GDBusMessage *message, - GDBusSendMessageFlags flags, - gint timeout_msec, - volatile guint32 *out_serial, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusMessage *g_dbus_connection_send_message_with_reply_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -GDBusMessage *g_dbus_connection_send_message_with_reply_sync (GDBusConnection *connection, - GDBusMessage *message, - GDBusSendMessageFlags flags, - gint timeout_msec, - volatile guint32 *out_serial, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -gboolean g_dbus_connection_emit_signal (GDBusConnection *connection, - const gchar *destination_bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - GError **error); -void g_dbus_connection_call (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GVariant *g_dbus_connection_call_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -GVariant *g_dbus_connection_call_sync (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_30 -void g_dbus_connection_call_with_unix_fd_list (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_30 -GVariant *g_dbus_connection_call_with_unix_fd_list_finish (GDBusConnection *connection, - GUnixFDList **out_fd_list, - GAsyncResult *res, - GError **error); -GLIB_AVAILABLE_IN_2_30 -GVariant *g_dbus_connection_call_with_unix_fd_list_sync (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GUnixFDList **out_fd_list, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - - -/** - * GDBusInterfaceMethodCallFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that the method was invoked on. - * @interface_name: The D-Bus interface name the method was invoked on. - * @method_name: The name of the method that was invoked. - * @parameters: A #GVariant tuple with parameters. - * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_object(). - * - * The type of the @method_call function in #GDBusInterfaceVTable. - * - * Since: 2.26 - */ -typedef void (*GDBusInterfaceMethodCallFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - GDBusMethodInvocation *invocation, - gpointer user_data); - -/** - * GDBusInterfaceGetPropertyFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that the method was invoked on. - * @interface_name: The D-Bus interface name for the property. - * @property_name: The name of the property to get the value of. - * @error: Return location for error. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_object(). - * - * The type of the @get_property function in #GDBusInterfaceVTable. - * - * Returns: A #GVariant with the value for @property_name or %NULL if - * @error is set. If the returned #GVariant is floating, it is - * consumed - otherwise its reference count is decreased by one. - * - * Since: 2.26 - */ -typedef GVariant *(*GDBusInterfaceGetPropertyFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *property_name, - GError **error, - gpointer user_data); - -/** - * GDBusInterfaceSetPropertyFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that the method was invoked on. - * @interface_name: The D-Bus interface name for the property. - * @property_name: The name of the property to get the value of. - * @value: The value to set the property to. - * @error: Return location for error. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_object(). - * - * The type of the @set_property function in #GDBusInterfaceVTable. - * - * Returns: %TRUE if the property was set to @value, %FALSE if @error is set. - * - * Since: 2.26 - */ -typedef gboolean (*GDBusInterfaceSetPropertyFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *property_name, - GVariant *value, - GError **error, - gpointer user_data); - -/** - * GDBusInterfaceVTable: - * @method_call: Function for handling incoming method calls. - * @get_property: Function for getting a property. - * @set_property: Function for setting a property. - * - * Virtual table for handling properties and method calls for a D-Bus - * interface. - * - * If you want to handle getting/setting D-Bus properties asynchronously, simply - * register an object with the org.freedesktop.DBus.Properties - * D-Bus interface using g_dbus_connection_register_object(). - * - * Since: 2.26 - */ -struct _GDBusInterfaceVTable -{ - GDBusInterfaceMethodCallFunc method_call; - GDBusInterfaceGetPropertyFunc get_property; - GDBusInterfaceSetPropertyFunc set_property; - - /*< private >*/ - /* Padding for future expansion - also remember to update - * gdbusconnection.c:_g_dbus_interface_vtable_copy() when - * changing this. - */ - gpointer padding[8]; -}; - -guint g_dbus_connection_register_object (GDBusConnection *connection, - const gchar *object_path, - GDBusInterfaceInfo *interface_info, - const GDBusInterfaceVTable *vtable, - gpointer user_data, - GDestroyNotify user_data_free_func, - GError **error); -gboolean g_dbus_connection_unregister_object (GDBusConnection *connection, - guint registration_id); - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * GDBusSubtreeEnumerateFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). - * - * The type of the @enumerate function in #GDBusSubtreeVTable. - * - * This function is called when generating introspection data and also - * when preparing to dispatch incoming messages in the event that the - * %G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES flag is not - * specified (ie: to verify that the object path is valid). - * - * Hierarchies are not supported; the items that you return should not - * contain the '/' character. - * - * The return value will be freed with g_strfreev(). - * - * Returns: A newly allocated array of strings for node names that are children of @object_path. - * - * Since: 2.26 - */ -typedef gchar** (*GDBusSubtreeEnumerateFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - gpointer user_data); - -/** - * GDBusSubtreeIntrospectFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @node: A node that is a child of @object_path (relative to @object_path) or %NULL for the root of the subtree. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). - * - * The type of the @introspect function in #GDBusSubtreeVTable. - * - * Subtrees are flat. @node, if non-%NULL, is always exactly one - * segment of the object path (ie: it never contains a slash). - * - * This function should return %NULL to indicate that there is no object - * at this node. - * - * If this function returns non-%NULL, the return value is expected to - * be a %NULL-terminated array of pointers to #GDBusInterfaceInfo - * structures describing the interfaces implemented by @node. This - * array will have g_dbus_interface_info_unref() called on each item - * before being freed with g_free(). - * - * The difference between returning %NULL and an array containing zero - * items is that the standard DBus interfaces will returned to the - * remote introspector in the empty array case, but not in the %NULL - * case. - * - * Returns: A %NULL-terminated array of pointers to #GDBusInterfaceInfo, or %NULL. - * - * Since: 2.26 - */ -typedef GDBusInterfaceInfo ** (*GDBusSubtreeIntrospectFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *node, - gpointer user_data); - -/** - * GDBusSubtreeDispatchFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @interface_name: The D-Bus interface name that the method call or property access is for. - * @node: A node that is a child of @object_path (relative to @object_path) or %NULL for the root of the subtree. - * @out_user_data: Return location for user data to pass to functions in the returned #GDBusInterfaceVTable (never %NULL). - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). - * - * The type of the @dispatch function in #GDBusSubtreeVTable. - * - * Subtrees are flat. @node, if non-%NULL, is always exactly one - * segment of the object path (ie: it never contains a slash). - * - * Returns: A #GDBusInterfaceVTable or %NULL if you don't want to handle the methods. - * - * Since: 2.26 - */ -typedef const GDBusInterfaceVTable * (*GDBusSubtreeDispatchFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *node, - gpointer *out_user_data, - gpointer user_data); - -/** - * GDBusSubtreeVTable: - * @enumerate: Function for enumerating child nodes. - * @introspect: Function for introspecting a child node. - * @dispatch: Function for dispatching a remote call on a child node. - * - * Virtual table for handling subtrees registered with g_dbus_connection_register_subtree(). - * - * Since: 2.26 - */ -struct _GDBusSubtreeVTable -{ - GDBusSubtreeEnumerateFunc enumerate; - GDBusSubtreeIntrospectFunc introspect; - GDBusSubtreeDispatchFunc dispatch; - - /*< private >*/ - /* Padding for future expansion - also remember to update - * gdbusconnection.c:_g_dbus_subtree_vtable_copy() when - * changing this. - */ - gpointer padding[8]; -}; - -guint g_dbus_connection_register_subtree (GDBusConnection *connection, - const gchar *object_path, - const GDBusSubtreeVTable *vtable, - GDBusSubtreeFlags flags, - gpointer user_data, - GDestroyNotify user_data_free_func, - GError **error); -gboolean g_dbus_connection_unregister_subtree (GDBusConnection *connection, - guint registration_id); - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * GDBusSignalCallback: - * @connection: A #GDBusConnection. - * @sender_name: The unique bus name of the sender of the signal. - * @object_path: The object path that the signal was emitted on. - * @interface_name: The name of the interface. - * @signal_name: The name of the signal. - * @parameters: A #GVariant tuple with parameters for the signal. - * @user_data: User data passed when subscribing to the signal. - * - * Signature for callback function used in g_dbus_connection_signal_subscribe(). - * - * Since: 2.26 - */ -typedef void (*GDBusSignalCallback) (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data); - -guint g_dbus_connection_signal_subscribe (GDBusConnection *connection, - const gchar *sender, - const gchar *interface_name, - const gchar *member, - const gchar *object_path, - const gchar *arg0, - GDBusSignalFlags flags, - GDBusSignalCallback callback, - gpointer user_data, - GDestroyNotify user_data_free_func); -void g_dbus_connection_signal_unsubscribe (GDBusConnection *connection, - guint subscription_id); - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * GDBusMessageFilterFunction: - * @connection: (transfer none): A #GDBusConnection. - * @message: (transfer full): A locked #GDBusMessage that the filter function takes ownership of. - * @incoming: %TRUE if it is a message received from the other peer, %FALSE if it is - * a message to be sent to the other peer. - * @user_data: User data passed when adding the filter. - * - * Signature for function used in g_dbus_connection_add_filter(). - * - * A filter function is passed a #GDBusMessage and expected to return - * a #GDBusMessage too. Passive filter functions that don't modify the - * message can simply return the @message object: - * |[ - * static GDBusMessage * - * passive_filter (GDBusConnection *connection - * GDBusMessage *message, - * gboolean incoming, - * gpointer user_data) - * { - * /* inspect @message */ - * return message; - * } - * ]| - * Filter functions that wants to drop a message can simply return %NULL: - * |[ - * static GDBusMessage * - * drop_filter (GDBusConnection *connection - * GDBusMessage *message, - * gboolean incoming, - * gpointer user_data) - * { - * if (should_drop_message) - * { - * g_object_unref (message); - * message = NULL; - * } - * return message; - * } - * ]| - * Finally, a filter function may modify a message by copying it: - * |[ - * static GDBusMessage * - * modifying_filter (GDBusConnection *connection - * GDBusMessage *message, - * gboolean incoming, - * gpointer user_data) - * { - * GDBusMessage *copy; - * GError *error; - * - * error = NULL; - * copy = g_dbus_message_copy (message, &error); - * /* handle @error being is set */ - * g_object_unref (message); - * - * /* modify @copy */ - * - * return copy; - * } - * ]| - * If the returned #GDBusMessage is different from @message and cannot - * be sent on @connection (it could use features, such as file - * descriptors, not compatible with @connection), then a warning is - * logged to standard error. Applications can - * check this ahead of time using g_dbus_message_to_blob() passing a - * #GDBusCapabilityFlags value obtained from @connection. - * - * Returns: (transfer full) (allow-none): A #GDBusMessage that will be freed with - * g_object_unref() or %NULL to drop the message. Passive filter - * functions can simply return the passed @message object. - * - * Since: 2.26 - */ -typedef GDBusMessage *(*GDBusMessageFilterFunction) (GDBusConnection *connection, - GDBusMessage *message, - gboolean incoming, - gpointer user_data); - -guint g_dbus_connection_add_filter (GDBusConnection *connection, - GDBusMessageFilterFunction filter_function, - gpointer user_data, - GDestroyNotify user_data_free_func); - -void g_dbus_connection_remove_filter (GDBusConnection *connection, - guint filter_id); - -/* ---------------------------------------------------------------------------------------------------- */ - - -G_END_DECLS - -#endif /* __G_DBUS_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbuserror.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbuserror.h deleted file mode 100644 index 85e2f881..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbuserror.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_ERROR_H__ -#define __G_DBUS_ERROR_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_DBUS_ERROR: - * - * Error domain for errors generated by a remote message bus. Errors - * in this domain will be from the #GDBusError enumeration. See - * #GError for more information on error domains. - * - * Note that errors in this error domain is intended only for - * returning errors from a remote message bus process. Errors - * generated locally in-process by e.g. #GDBusConnection is from the - * %G_IO_ERROR domain. - * - * Since: 2.26 - */ -#define G_DBUS_ERROR g_dbus_error_quark() - -GQuark g_dbus_error_quark (void); - -/* Used by applications to check, get and strip the D-Bus error name */ -gboolean g_dbus_error_is_remote_error (const GError *error); -gchar *g_dbus_error_get_remote_error (const GError *error); -gboolean g_dbus_error_strip_remote_error (GError *error); - -/** - * GDBusErrorEntry: - * @error_code: An error code. - * @dbus_error_name: The D-Bus error name to associate with @error_code. - * - * Struct used in g_dbus_error_register_error_domain(). - * - * Since: 2.26 - */ -struct _GDBusErrorEntry -{ - gint error_code; - const gchar *dbus_error_name; -}; - -gboolean g_dbus_error_register_error (GQuark error_domain, - gint error_code, - const gchar *dbus_error_name); -gboolean g_dbus_error_unregister_error (GQuark error_domain, - gint error_code, - const gchar *dbus_error_name); -void g_dbus_error_register_error_domain (const gchar *error_domain_quark_name, - volatile gsize *quark_volatile, - const GDBusErrorEntry *entries, - guint num_entries); - -/* Only used by object mappings to map back and forth to GError */ -GError *g_dbus_error_new_for_dbus_error (const gchar *dbus_error_name, - const gchar *dbus_error_message); -void g_dbus_error_set_dbus_error (GError **error, - const gchar *dbus_error_name, - const gchar *dbus_error_message, - const gchar *format, - ...); -void g_dbus_error_set_dbus_error_valist (GError **error, - const gchar *dbus_error_name, - const gchar *dbus_error_message, - const gchar *format, - va_list var_args); -gchar *g_dbus_error_encode_gerror (const GError *error); - -G_END_DECLS - -#endif /* __G_DBUS_ERROR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterface.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterface.h deleted file mode 100644 index 9536e627..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterface.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_INTERFACE_H__ -#define __G_DBUS_INTERFACE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_INTERFACE (g_dbus_interface_get_type()) -#define G_DBUS_INTERFACE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_INTERFACE, GDBusInterface)) -#define G_IS_DBUS_INTERFACE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_INTERFACE)) -#define G_DBUS_INTERFACE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), G_TYPE_DBUS_INTERFACE, GDBusInterfaceIface)) - -/** - * GDBusInterface: - * - * Base type for D-Bus interfaces. - * - * Since: 2.30 - */ - -typedef struct _GDBusInterfaceIface GDBusInterfaceIface; - -/** - * GDBusInterfaceIface: - * @parent_iface: The parent interface. - * @get_info: Returns a #GDBusInterfaceInfo. See g_dbus_interface_get_info(). - * @get_object: Gets the enclosing #GDBusObject. See g_dbus_interface_get_object(). - * @set_object: Sets the enclosing #GDBusObject. See g_dbus_interface_set_object(). - * @dup_object: Gets a reference to the enclosing #GDBusObject. See g_dbus_interface_dup_object(). Added in 2.32. - * - * Base type for D-Bus interfaces. - * - * Since: 2.30 - */ -struct _GDBusInterfaceIface -{ - GTypeInterface parent_iface; - - /* Virtual Functions */ - GDBusInterfaceInfo *(*get_info) (GDBusInterface *interface_); - GDBusObject *(*get_object) (GDBusInterface *interface_); - void (*set_object) (GDBusInterface *interface_, - GDBusObject *object); - GDBusObject *(*dup_object) (GDBusInterface *interface_); -}; - -GType g_dbus_interface_get_type (void) G_GNUC_CONST; -GDBusInterfaceInfo *g_dbus_interface_get_info (GDBusInterface *interface_); -GDBusObject *g_dbus_interface_get_object (GDBusInterface *interface_); -void g_dbus_interface_set_object (GDBusInterface *interface_, - GDBusObject *object); -GLIB_AVAILABLE_IN_2_32 -GDBusObject *g_dbus_interface_dup_object (GDBusInterface *interface_); - -G_END_DECLS - -#endif /* __G_DBUS_INTERFACE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterfaceskeleton.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterfaceskeleton.h deleted file mode 100644 index 5f1c1663..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusinterfaceskeleton.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_INTERFACE_SKELETON_H__ -#define __G_DBUS_INTERFACE_SKELETON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_INTERFACE_SKELETON (g_dbus_interface_skeleton_get_type ()) -#define G_DBUS_INTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_INTERFACE_SKELETON, GDBusInterfaceSkeleton)) -#define G_DBUS_INTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_INTERFACE_SKELETON, GDBusInterfaceSkeletonClass)) -#define G_DBUS_INTERFACE_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_INTERFACE_SKELETON, GDBusInterfaceSkeletonClass)) -#define G_IS_DBUS_INTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_INTERFACE_SKELETON)) -#define G_IS_DBUS_INTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_INTERFACE_SKELETON)) - -typedef struct _GDBusInterfaceSkeletonClass GDBusInterfaceSkeletonClass; -typedef struct _GDBusInterfaceSkeletonPrivate GDBusInterfaceSkeletonPrivate; - -/** - * GDBusInterfaceSkeleton: - * - * The #GDBusInterfaceSkeleton structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusInterfaceSkeleton -{ - /*< private >*/ - GObject parent_instance; - GDBusInterfaceSkeletonPrivate *priv; -}; - -/** - * GDBusInterfaceSkeletonClass: - * @parent_class: The parent class. - * @get_info: Returns a #GDBusInterfaceInfo. See g_dbus_interface_skeleton_get_info() for details. - * @get_vtable: Returns a #GDBusInterfaceVTable. See g_dbus_interface_skeleton_get_vtable() for details. - * @get_properties: Returns a #GVariant with all properties. See g_dbus_interface_skeleton_get_properties(). - * @flush: Emits outstanding changes, if any. See g_dbus_interface_skeleton_flush(). - * @g_authorize_method: Signal class handler for the #GDBusInterfaceSkeleton::g-authorize-method signal. - * - * Class structure for #GDBusInterfaceSkeleton. - * - * Since: 2.30 - */ -struct _GDBusInterfaceSkeletonClass -{ - GObjectClass parent_class; - - /* Virtual Functions */ - GDBusInterfaceInfo *(*get_info) (GDBusInterfaceSkeleton *interface_); - GDBusInterfaceVTable *(*get_vtable) (GDBusInterfaceSkeleton *interface_); - GVariant *(*get_properties) (GDBusInterfaceSkeleton *interface_); - void (*flush) (GDBusInterfaceSkeleton *interface_); - - /*< private >*/ - gpointer vfunc_padding[8]; - /*< public >*/ - - /* Signals */ - gboolean (*g_authorize_method) (GDBusInterfaceSkeleton *interface_, - GDBusMethodInvocation *invocation); - - /*< private >*/ - gpointer signal_padding[8]; -}; - -GType g_dbus_interface_skeleton_get_type (void) G_GNUC_CONST; -GDBusInterfaceSkeletonFlags g_dbus_interface_skeleton_get_flags (GDBusInterfaceSkeleton *interface_); -void g_dbus_interface_skeleton_set_flags (GDBusInterfaceSkeleton *interface_, - GDBusInterfaceSkeletonFlags flags); -GDBusInterfaceInfo *g_dbus_interface_skeleton_get_info (GDBusInterfaceSkeleton *interface_); -GDBusInterfaceVTable *g_dbus_interface_skeleton_get_vtable (GDBusInterfaceSkeleton *interface_); -GVariant *g_dbus_interface_skeleton_get_properties (GDBusInterfaceSkeleton *interface_); -void g_dbus_interface_skeleton_flush (GDBusInterfaceSkeleton *interface_); - -gboolean g_dbus_interface_skeleton_export (GDBusInterfaceSkeleton *interface_, - GDBusConnection *connection, - const gchar *object_path, - GError **error); -void g_dbus_interface_skeleton_unexport (GDBusInterfaceSkeleton *interface_); -void g_dbus_interface_skeleton_unexport_from_connection (GDBusInterfaceSkeleton *interface_, - GDBusConnection *connection); - -GDBusConnection *g_dbus_interface_skeleton_get_connection (GDBusInterfaceSkeleton *interface_); -GList *g_dbus_interface_skeleton_get_connections (GDBusInterfaceSkeleton *interface_); -gboolean g_dbus_interface_skeleton_has_connection (GDBusInterfaceSkeleton *interface_, - GDBusConnection *connection); -const gchar *g_dbus_interface_skeleton_get_object_path (GDBusInterfaceSkeleton *interface_); - -G_END_DECLS - -#endif /* __G_DBUS_INTERFACE_SKELETON_H */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusintrospection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusintrospection.h deleted file mode 100644 index 884c733c..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusintrospection.h +++ /dev/null @@ -1,296 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_INTROSPECTION_H__ -#define __G_DBUS_INTROSPECTION_H__ - -#include - -G_BEGIN_DECLS - -/** - * GDBusAnnotationInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @key: The name of the annotation, e.g. "org.freedesktop.DBus.Deprecated". - * @value: The value of the annotation. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about an annotation. - * - * Since: 2.26 - */ -struct _GDBusAnnotationInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *key; - gchar *value; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusArgInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: Name of the argument, e.g. @unix_user_id. - * @signature: D-Bus signature of the argument (a single complete type). - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about an argument for a method or a signal. - * - * Since: 2.26 - */ -struct _GDBusArgInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - gchar *signature; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusMethodInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus method, e.g. @RequestName. - * @in_args: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusArgInfo structures or %NULL if there are no in arguments. - * @out_args: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusArgInfo structures or %NULL if there are no out arguments. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a method on an D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusMethodInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - GDBusArgInfo **in_args; - GDBusArgInfo **out_args; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusSignalInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus signal, e.g. "NameOwnerChanged". - * @args: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusArgInfo structures or %NULL if there are no arguments. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a signal on a D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusSignalInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - GDBusArgInfo **args; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusPropertyInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus property, e.g. "SupportedFilesystems". - * @signature: The D-Bus signature of the property (a single complete type). - * @flags: Access control flags for the property. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a D-Bus property on a D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusPropertyInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - gchar *signature; - GDBusPropertyInfoFlags flags; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusInterfaceInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus interface, e.g. "org.freedesktop.DBus.Properties". - * @methods: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusMethodInfo structures or %NULL if there are no methods. - * @signals: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusSignalInfo structures or %NULL if there are no signals. - * @properties: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusPropertyInfo structures or %NULL if there are no properties. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusInterfaceInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - GDBusMethodInfo **methods; - GDBusSignalInfo **signals; - GDBusPropertyInfo **properties; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusNodeInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @path: The path of the node or %NULL if omitted. Note that this may be a relative path. See the D-Bus specification for more details. - * @interfaces: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusInterfaceInfo structures or %NULL if there are no interfaces. - * @nodes: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusNodeInfo structures or %NULL if there are no nodes. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about nodes in a remote object hierarchy. - * - * Since: 2.26 - */ -struct _GDBusNodeInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *path; - GDBusInterfaceInfo **interfaces; - GDBusNodeInfo **nodes; - GDBusAnnotationInfo **annotations; -}; - -const gchar *g_dbus_annotation_info_lookup (GDBusAnnotationInfo **annotations, - const gchar *name); -GDBusMethodInfo *g_dbus_interface_info_lookup_method (GDBusInterfaceInfo *info, - const gchar *name); -GDBusSignalInfo *g_dbus_interface_info_lookup_signal (GDBusInterfaceInfo *info, - const gchar *name); -GDBusPropertyInfo *g_dbus_interface_info_lookup_property (GDBusInterfaceInfo *info, - const gchar *name); -void g_dbus_interface_info_cache_build (GDBusInterfaceInfo *info); -void g_dbus_interface_info_cache_release (GDBusInterfaceInfo *info); - -void g_dbus_interface_info_generate_xml (GDBusInterfaceInfo *info, - guint indent, - GString *string_builder); - -GDBusNodeInfo *g_dbus_node_info_new_for_xml (const gchar *xml_data, - GError **error); -GDBusInterfaceInfo *g_dbus_node_info_lookup_interface (GDBusNodeInfo *info, - const gchar *name); -void g_dbus_node_info_generate_xml (GDBusNodeInfo *info, - guint indent, - GString *string_builder); - -GDBusNodeInfo *g_dbus_node_info_ref (GDBusNodeInfo *info); -GDBusInterfaceInfo *g_dbus_interface_info_ref (GDBusInterfaceInfo *info); -GDBusMethodInfo *g_dbus_method_info_ref (GDBusMethodInfo *info); -GDBusSignalInfo *g_dbus_signal_info_ref (GDBusSignalInfo *info); -GDBusPropertyInfo *g_dbus_property_info_ref (GDBusPropertyInfo *info); -GDBusArgInfo *g_dbus_arg_info_ref (GDBusArgInfo *info); -GDBusAnnotationInfo *g_dbus_annotation_info_ref (GDBusAnnotationInfo *info); - -void g_dbus_node_info_unref (GDBusNodeInfo *info); -void g_dbus_interface_info_unref (GDBusInterfaceInfo *info); -void g_dbus_method_info_unref (GDBusMethodInfo *info); -void g_dbus_signal_info_unref (GDBusSignalInfo *info); -void g_dbus_property_info_unref (GDBusPropertyInfo *info); -void g_dbus_arg_info_unref (GDBusArgInfo *info); -void g_dbus_annotation_info_unref (GDBusAnnotationInfo *info); - -/** - * G_TYPE_DBUS_NODE_INFO: - * - * The #GType for a boxed type holding a #GDBusNodeInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_NODE_INFO (g_dbus_node_info_get_type ()) - -/** - * G_TYPE_DBUS_INTERFACE_INFO: - * - * The #GType for a boxed type holding a #GDBusInterfaceInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_INTERFACE_INFO (g_dbus_interface_info_get_type ()) - -/** - * G_TYPE_DBUS_METHOD_INFO: - * - * The #GType for a boxed type holding a #GDBusMethodInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_METHOD_INFO (g_dbus_method_info_get_type ()) - -/** - * G_TYPE_DBUS_SIGNAL_INFO: - * - * The #GType for a boxed type holding a #GDBusSignalInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_SIGNAL_INFO (g_dbus_signal_info_get_type ()) - -/** - * G_TYPE_DBUS_PROPERTY_INFO: - * - * The #GType for a boxed type holding a #GDBusPropertyInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_PROPERTY_INFO (g_dbus_property_info_get_type ()) - -/** - * G_TYPE_DBUS_ARG_INFO: - * - * The #GType for a boxed type holding a #GDBusArgInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_ARG_INFO (g_dbus_arg_info_get_type ()) - -/** - * G_TYPE_DBUS_ANNOTATION_INFO: - * - * The #GType for a boxed type holding a #GDBusAnnotationInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_ANNOTATION_INFO (g_dbus_annotation_info_get_type ()) - -GType g_dbus_node_info_get_type (void) G_GNUC_CONST; -GType g_dbus_interface_info_get_type (void) G_GNUC_CONST; -GType g_dbus_method_info_get_type (void) G_GNUC_CONST; -GType g_dbus_signal_info_get_type (void) G_GNUC_CONST; -GType g_dbus_property_info_get_type (void) G_GNUC_CONST; -GType g_dbus_arg_info_get_type (void) G_GNUC_CONST; -GType g_dbus_annotation_info_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_DBUS_INTROSPECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmenumodel.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmenumodel.h deleted file mode 100644 index 4cbdf2d6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmenumodel.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_DBUS_MENU_MODEL_H__ -#define __G_DBUS_MENU_MODEL_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_MENU_MODEL (g_dbus_menu_model_get_type ()) -#define G_DBUS_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_DBUS_MENU_MODEL, GDBusMenuModel)) -#define G_IS_DBUS_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_DBUS_MENU_MODEL)) - -typedef struct _GDBusMenuModel GDBusMenuModel; - -GType g_dbus_menu_model_get_type (void) G_GNUC_CONST; - -GDBusMenuModel * g_dbus_menu_model_get (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_MENU_MODEL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmessage.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmessage.h deleted file mode 100644 index 5c4febd2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmessage.h +++ /dev/null @@ -1,149 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_MESSAGE_H__ -#define __G_DBUS_MESSAGE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_MESSAGE (g_dbus_message_get_type ()) -#define G_DBUS_MESSAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_MESSAGE, GDBusMessage)) -#define G_IS_DBUS_MESSAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_MESSAGE)) - -GType g_dbus_message_get_type (void) G_GNUC_CONST; -GDBusMessage *g_dbus_message_new (void); -GDBusMessage *g_dbus_message_new_signal (const gchar *path, - const gchar *interface_, - const gchar *signal); -GDBusMessage *g_dbus_message_new_method_call (const gchar *name, - const gchar *path, - const gchar *interface_, - const gchar *method); -GDBusMessage *g_dbus_message_new_method_reply (GDBusMessage *method_call_message); -GDBusMessage *g_dbus_message_new_method_error (GDBusMessage *method_call_message, - const gchar *error_name, - const gchar *error_message_format, - ...); -GDBusMessage *g_dbus_message_new_method_error_valist (GDBusMessage *method_call_message, - const gchar *error_name, - const gchar *error_message_format, - va_list var_args); -GDBusMessage *g_dbus_message_new_method_error_literal (GDBusMessage *method_call_message, - const gchar *error_name, - const gchar *error_message); -gchar *g_dbus_message_print (GDBusMessage *message, - guint indent); -gboolean g_dbus_message_get_locked (GDBusMessage *message); -void g_dbus_message_lock (GDBusMessage *message); -GDBusMessage *g_dbus_message_copy (GDBusMessage *message, - GError **error); -GDBusMessageByteOrder g_dbus_message_get_byte_order (GDBusMessage *message); -void g_dbus_message_set_byte_order (GDBusMessage *message, - GDBusMessageByteOrder byte_order); - -GDBusMessageType g_dbus_message_get_message_type (GDBusMessage *message); -void g_dbus_message_set_message_type (GDBusMessage *message, - GDBusMessageType type); -GDBusMessageFlags g_dbus_message_get_flags (GDBusMessage *message); -void g_dbus_message_set_flags (GDBusMessage *message, - GDBusMessageFlags flags); -guint32 g_dbus_message_get_serial (GDBusMessage *message); -void g_dbus_message_set_serial (GDBusMessage *message, - guint32 serial); -GVariant *g_dbus_message_get_header (GDBusMessage *message, - GDBusMessageHeaderField header_field); -void g_dbus_message_set_header (GDBusMessage *message, - GDBusMessageHeaderField header_field, - GVariant *value); -guchar *g_dbus_message_get_header_fields (GDBusMessage *message); -GVariant *g_dbus_message_get_body (GDBusMessage *message); -void g_dbus_message_set_body (GDBusMessage *message, - GVariant *body); -GUnixFDList *g_dbus_message_get_unix_fd_list (GDBusMessage *message); -void g_dbus_message_set_unix_fd_list (GDBusMessage *message, - GUnixFDList *fd_list); - -guint32 g_dbus_message_get_reply_serial (GDBusMessage *message); -void g_dbus_message_set_reply_serial (GDBusMessage *message, - guint32 value); - -const gchar *g_dbus_message_get_interface (GDBusMessage *message); -void g_dbus_message_set_interface (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_member (GDBusMessage *message); -void g_dbus_message_set_member (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_path (GDBusMessage *message); -void g_dbus_message_set_path (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_sender (GDBusMessage *message); -void g_dbus_message_set_sender (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_destination (GDBusMessage *message); -void g_dbus_message_set_destination (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_error_name (GDBusMessage *message); -void g_dbus_message_set_error_name (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_signature (GDBusMessage *message); -void g_dbus_message_set_signature (GDBusMessage *message, - const gchar *value); - -guint32 g_dbus_message_get_num_unix_fds (GDBusMessage *message); -void g_dbus_message_set_num_unix_fds (GDBusMessage *message, - guint32 value); - -const gchar *g_dbus_message_get_arg0 (GDBusMessage *message); - - -GDBusMessage *g_dbus_message_new_from_blob (guchar *blob, - gsize blob_len, - GDBusCapabilityFlags capabilities, - GError **error); - -gssize g_dbus_message_bytes_needed (guchar *blob, - gsize blob_len, - GError **error); - -guchar *g_dbus_message_to_blob (GDBusMessage *message, - gsize *out_size, - GDBusCapabilityFlags capabilities, - GError **error); - -gboolean g_dbus_message_to_gerror (GDBusMessage *message, - GError **error); - -G_END_DECLS - -#endif /* __G_DBUS_MESSAGE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmethodinvocation.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmethodinvocation.h deleted file mode 100644 index b1a87ac9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusmethodinvocation.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_METHOD_INVOCATION_H__ -#define __G_DBUS_METHOD_INVOCATION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_METHOD_INVOCATION (g_dbus_method_invocation_get_type ()) -#define G_DBUS_METHOD_INVOCATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_METHOD_INVOCATION, GDBusMethodInvocation)) -#define G_IS_DBUS_METHOD_INVOCATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_METHOD_INVOCATION)) - -GType g_dbus_method_invocation_get_type (void) G_GNUC_CONST; -const gchar *g_dbus_method_invocation_get_sender (GDBusMethodInvocation *invocation); -const gchar *g_dbus_method_invocation_get_object_path (GDBusMethodInvocation *invocation); -const gchar *g_dbus_method_invocation_get_interface_name (GDBusMethodInvocation *invocation); -const gchar *g_dbus_method_invocation_get_method_name (GDBusMethodInvocation *invocation); -const GDBusMethodInfo *g_dbus_method_invocation_get_method_info (GDBusMethodInvocation *invocation); -GDBusConnection *g_dbus_method_invocation_get_connection (GDBusMethodInvocation *invocation); -GDBusMessage *g_dbus_method_invocation_get_message (GDBusMethodInvocation *invocation); -GVariant *g_dbus_method_invocation_get_parameters (GDBusMethodInvocation *invocation); -gpointer g_dbus_method_invocation_get_user_data (GDBusMethodInvocation *invocation); - -void g_dbus_method_invocation_return_value (GDBusMethodInvocation *invocation, - GVariant *parameters); -void g_dbus_method_invocation_return_value_with_unix_fd_list (GDBusMethodInvocation *invocation, - GVariant *parameters, - GUnixFDList *fd_list); -void g_dbus_method_invocation_return_error (GDBusMethodInvocation *invocation, - GQuark domain, - gint code, - const gchar *format, - ...); -void g_dbus_method_invocation_return_error_valist (GDBusMethodInvocation *invocation, - GQuark domain, - gint code, - const gchar *format, - va_list var_args); -void g_dbus_method_invocation_return_error_literal (GDBusMethodInvocation *invocation, - GQuark domain, - gint code, - const gchar *message); -void g_dbus_method_invocation_return_gerror (GDBusMethodInvocation *invocation, - const GError *error); -void g_dbus_method_invocation_take_error (GDBusMethodInvocation *invocation, - GError *error); -void g_dbus_method_invocation_return_dbus_error (GDBusMethodInvocation *invocation, - const gchar *error_name, - const gchar *error_message); - -G_END_DECLS - -#endif /* __G_DBUS_METHOD_INVOCATION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusnameowning.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusnameowning.h deleted file mode 100644 index fc4b92c9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusnameowning.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_NAME_OWNING_H__ -#define __G_DBUS_NAME_OWNING_H__ - -#include - -G_BEGIN_DECLS - -/** - * GBusAcquiredCallback: - * @connection: The #GDBusConnection to a message bus. - * @name: The name that is requested to be owned. - * @user_data: User data passed to g_bus_own_name(). - * - * Invoked when a connection to a message bus has been obtained. - * - * Since: 2.26 - */ -typedef void (*GBusAcquiredCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -/** - * GBusNameAcquiredCallback: - * @connection: The #GDBusConnection on which to acquired the name. - * @name: The name being owned. - * @user_data: User data passed to g_bus_own_name() or g_bus_own_name_on_connection(). - * - * Invoked when the name is acquired. - * - * Since: 2.26 - */ -typedef void (*GBusNameAcquiredCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -/** - * GBusNameLostCallback: - * @connection: The #GDBusConnection on which to acquire the name or %NULL if - * the connection was disconnected. - * @name: The name being owned. - * @user_data: User data passed to g_bus_own_name() or g_bus_own_name_on_connection(). - * - * Invoked when the name is lost or @connection has been closed. - * - * Since: 2.26 - */ -typedef void (*GBusNameLostCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -guint g_bus_own_name (GBusType bus_type, - const gchar *name, - GBusNameOwnerFlags flags, - GBusAcquiredCallback bus_acquired_handler, - GBusNameAcquiredCallback name_acquired_handler, - GBusNameLostCallback name_lost_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); - -guint g_bus_own_name_on_connection (GDBusConnection *connection, - const gchar *name, - GBusNameOwnerFlags flags, - GBusNameAcquiredCallback name_acquired_handler, - GBusNameLostCallback name_lost_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); - -guint g_bus_own_name_with_closures (GBusType bus_type, - const gchar *name, - GBusNameOwnerFlags flags, - GClosure *bus_acquired_closure, - GClosure *name_acquired_closure, - GClosure *name_lost_closure); - -guint g_bus_own_name_on_connection_with_closures ( - GDBusConnection *connection, - const gchar *name, - GBusNameOwnerFlags flags, - GClosure *name_acquired_closure, - GClosure *name_lost_closure); - -void g_bus_unown_name (guint owner_id); - -G_END_DECLS - -#endif /* __G_DBUS_NAME_OWNING_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusnamewatching.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusnamewatching.h deleted file mode 100644 index 3e3f75a2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusnamewatching.h +++ /dev/null @@ -1,94 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_NAME_WATCHING_H__ -#define __G_DBUS_NAME_WATCHING_H__ - -#include - -G_BEGIN_DECLS - -/** - * GBusNameAppearedCallback: - * @connection: The #GDBusConnection the name is being watched on. - * @name: The name being watched. - * @name_owner: Unique name of the owner of the name being watched. - * @user_data: User data passed to g_bus_watch_name(). - * - * Invoked when the name being watched is known to have to have a owner. - * - * Since: 2.26 - */ -typedef void (*GBusNameAppearedCallback) (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, - gpointer user_data); - -/** - * GBusNameVanishedCallback: - * @connection: The #GDBusConnection the name is being watched on. - * @name: The name being watched. - * @user_data: User data passed to g_bus_watch_name(). - * - * Invoked when the name being watched is known not to have to have a owner. - * - * Since: 2.26 - */ -typedef void (*GBusNameVanishedCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - - -guint g_bus_watch_name (GBusType bus_type, - const gchar *name, - GBusNameWatcherFlags flags, - GBusNameAppearedCallback name_appeared_handler, - GBusNameVanishedCallback name_vanished_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); -guint g_bus_watch_name_on_connection (GDBusConnection *connection, - const gchar *name, - GBusNameWatcherFlags flags, - GBusNameAppearedCallback name_appeared_handler, - GBusNameVanishedCallback name_vanished_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); -guint g_bus_watch_name_with_closures (GBusType bus_type, - const gchar *name, - GBusNameWatcherFlags flags, - GClosure *name_appeared_closure, - GClosure *name_vanished_closure); -guint g_bus_watch_name_on_connection_with_closures ( - GDBusConnection *connection, - const gchar *name, - GBusNameWatcherFlags flags, - GClosure *name_appeared_closure, - GClosure *name_vanished_closure); -void g_bus_unwatch_name (guint watcher_id); - -G_END_DECLS - -#endif /* __G_DBUS_NAME_WATCHING_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobject.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobject.h deleted file mode 100644 index 30983b11..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobject.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_H__ -#define __G_DBUS_OBJECT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT (g_dbus_object_get_type()) -#define G_DBUS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT, GDBusObject)) -#define G_IS_DBUS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT)) -#define G_DBUS_OBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), G_TYPE_DBUS_OBJECT, GDBusObjectIface)) - -typedef struct _GDBusObjectIface GDBusObjectIface; - -/** - * GDBusObjectIface: - * @parent_iface: The parent interface. - * @get_object_path: Returns the object path. See g_dbus_object_get_object_path(). - * @get_interfaces: Returns all interfaces. See g_dbus_object_get_interfaces(). - * @get_interface: Returns an interface by name. See g_dbus_object_get_interface(). - * @interface_added: Signal handler for the #GDBusObject::interface-added signal. - * @interface_removed: Signal handler for the #GDBusObject::interface-removed signal. - * - * Base object type for D-Bus objects. - * - * Since: 2.30 - */ -struct _GDBusObjectIface -{ - GTypeInterface parent_iface; - - /* Virtual Functions */ - const gchar *(*get_object_path) (GDBusObject *object); - GList *(*get_interfaces) (GDBusObject *object); - GDBusInterface *(*get_interface) (GDBusObject *object, - const gchar *interface_name); - - /* Signals */ - void (*interface_added) (GDBusObject *object, - GDBusInterface *interface_); - void (*interface_removed) (GDBusObject *object, - GDBusInterface *interface_); - -}; - -GType g_dbus_object_get_type (void) G_GNUC_CONST; -const gchar *g_dbus_object_get_object_path (GDBusObject *object); -GList *g_dbus_object_get_interfaces (GDBusObject *object); -GDBusInterface *g_dbus_object_get_interface (GDBusObject *object, - const gchar *interface_name); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanager.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanager.h deleted file mode 100644 index 05cec1a4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanager.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_MANAGER_H__ -#define __G_DBUS_OBJECT_MANAGER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_MANAGER (g_dbus_object_manager_get_type()) -#define G_DBUS_OBJECT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_MANAGER, GDBusObjectManager)) -#define G_IS_DBUS_OBJECT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_MANAGER)) -#define G_DBUS_OBJECT_MANAGER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), G_TYPE_DBUS_OBJECT_MANAGER, GDBusObjectManagerIface)) - -typedef struct _GDBusObjectManagerIface GDBusObjectManagerIface; - -/** - * GDBusObjectManagerIface: - * @parent_iface: The parent interface. - * @get_object_path: Virtual function for g_dbus_object_manager_get_object_path(). - * @get_objects: Virtual function for g_dbus_object_manager_get_objects(). - * @get_object: Virtual function for g_dbus_object_manager_get_object(). - * @get_interface: Virtual function for g_dbus_object_manager_get_interface(). - * @object_added: Signal handler for the #GDBusObjectManager::object-added signal. - * @object_removed: Signal handler for the #GDBusObjectManager::object-removed signal. - * @interface_added: Signal handler for the #GDBusObjectManager::interface-added signal. - * @interface_removed: Signal handler for the #GDBusObjectManager::interface-removed signal. - * - * Base type for D-Bus object managers. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerIface -{ - GTypeInterface parent_iface; - - /* Virtual Functions */ - const gchar *(*get_object_path) (GDBusObjectManager *manager); - GList *(*get_objects) (GDBusObjectManager *manager); - GDBusObject *(*get_object) (GDBusObjectManager *manager, - const gchar *object_path); - GDBusInterface *(*get_interface) (GDBusObjectManager *manager, - const gchar *object_path, - const gchar *interface_name); - - /* Signals */ - void (*object_added) (GDBusObjectManager *manager, - GDBusObject *object); - void (*object_removed) (GDBusObjectManager *manager, - GDBusObject *object); - - void (*interface_added) (GDBusObjectManager *manager, - GDBusObject *object, - GDBusInterface *interface_); - void (*interface_removed) (GDBusObjectManager *manager, - GDBusObject *object, - GDBusInterface *interface_); -}; - -GType g_dbus_object_manager_get_type (void) G_GNUC_CONST; -const gchar *g_dbus_object_manager_get_object_path (GDBusObjectManager *manager); -GList *g_dbus_object_manager_get_objects (GDBusObjectManager *manager); -GDBusObject *g_dbus_object_manager_get_object (GDBusObjectManager *manager, - const gchar *object_path); -GDBusInterface *g_dbus_object_manager_get_interface (GDBusObjectManager *manager, - const gchar *object_path, - const gchar *interface_name); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_MANAGER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerclient.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerclient.h deleted file mode 100644 index ad41fee6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerclient.h +++ /dev/null @@ -1,137 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_MANAGER_CLIENT_H__ -#define __G_DBUS_OBJECT_MANAGER_CLIENT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_MANAGER_CLIENT (g_dbus_object_manager_client_get_type ()) -#define G_DBUS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT, GDBusObjectManagerClient)) -#define G_DBUS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT, GDBusObjectManagerClientClass)) -#define G_DBUS_OBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT, GDBusObjectManagerClientClass)) -#define G_IS_DBUS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT)) -#define G_IS_DBUS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT)) - -typedef struct _GDBusObjectManagerClientClass GDBusObjectManagerClientClass; -typedef struct _GDBusObjectManagerClientPrivate GDBusObjectManagerClientPrivate; - -/** - * GDBusObjectManagerClient: - * - * The #GDBusObjectManagerClient structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerClient -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectManagerClientPrivate *priv; -}; - -/** - * GDBusObjectManagerClientClass: - * @parent_class: The parent class. - * @interface_proxy_signal: Signal class handler for the #GDBusObjectManagerClient::interface-proxy-signal signal. - * @interface_proxy_properties_changed: Signal class handler for the #GDBusObjectManagerClient::interface-proxy-properties-changed signal. - * - * Class structure for #GDBusObjectManagerClient. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerClientClass -{ - GObjectClass parent_class; - - /* signals */ - void (*interface_proxy_signal) (GDBusObjectManagerClient *manager, - GDBusObjectProxy *object_proxy, - GDBusProxy *interface_proxy, - const gchar *sender_name, - const gchar *signal_name, - GVariant *parameters); - - void (*interface_proxy_properties_changed) (GDBusObjectManagerClient *manager, - GDBusObjectProxy *object_proxy, - GDBusProxy *interface_proxy, - GVariant *changed_properties, - const gchar* const *invalidated_properties); - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_manager_client_get_type (void) G_GNUC_CONST; -void g_dbus_object_manager_client_new (GDBusConnection *connection, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusObjectManager *g_dbus_object_manager_client_new_finish (GAsyncResult *res, - GError **error); -GDBusObjectManager *g_dbus_object_manager_client_new_sync (GDBusConnection *connection, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GError **error); -void g_dbus_object_manager_client_new_for_bus (GBusType bus_type, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusObjectManager *g_dbus_object_manager_client_new_for_bus_finish (GAsyncResult *res, - GError **error); -GDBusObjectManager *g_dbus_object_manager_client_new_for_bus_sync (GBusType bus_type, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GError **error); -GDBusConnection *g_dbus_object_manager_client_get_connection (GDBusObjectManagerClient *manager); -GDBusObjectManagerClientFlags g_dbus_object_manager_client_get_flags (GDBusObjectManagerClient *manager); -const gchar *g_dbus_object_manager_client_get_name (GDBusObjectManagerClient *manager); -gchar *g_dbus_object_manager_client_get_name_owner (GDBusObjectManagerClient *manager); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_MANAGER_CLIENT_H */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerserver.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerserver.h deleted file mode 100644 index 90668dd8..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectmanagerserver.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_MANAGER_SERVER_H__ -#define __G_DBUS_OBJECT_MANAGER_SERVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_MANAGER_SERVER (g_dbus_object_manager_server_get_type ()) -#define G_DBUS_OBJECT_MANAGER_SERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_MANAGER_SERVER, GDBusObjectManagerServer)) -#define G_DBUS_OBJECT_MANAGER_SERVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_MANAGER_SERVER, GDBusObjectManagerServerClass)) -#define G_DBUS_OBJECT_MANAGER_SERVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_MANAGER_SERVER, GDBusObjectManagerServerClass)) -#define G_IS_DBUS_OBJECT_MANAGER_SERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_MANAGER_SERVER)) -#define G_IS_DBUS_OBJECT_MANAGER_SERVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_MANAGER_SERVER)) - -typedef struct _GDBusObjectManagerServerClass GDBusObjectManagerServerClass; -typedef struct _GDBusObjectManagerServerPrivate GDBusObjectManagerServerPrivate; - -/** - * GDBusObjectManagerServer: - * - * The #GDBusObjectManagerServer structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerServer -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectManagerServerPrivate *priv; -}; - -/** - * GDBusObjectManagerServerClass: - * @parent_class: The parent class. - * - * Class structure for #GDBusObjectManagerServer. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerServerClass -{ - GObjectClass parent_class; - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_manager_server_get_type (void) G_GNUC_CONST; -GDBusObjectManagerServer *g_dbus_object_manager_server_new (const gchar *object_path); -GDBusConnection *g_dbus_object_manager_server_get_connection (GDBusObjectManagerServer *manager); -void g_dbus_object_manager_server_set_connection (GDBusObjectManagerServer *manager, - GDBusConnection *connection); -void g_dbus_object_manager_server_export (GDBusObjectManagerServer *manager, - GDBusObjectSkeleton *object); -void g_dbus_object_manager_server_export_uniquely (GDBusObjectManagerServer *manager, - GDBusObjectSkeleton *object); -gboolean g_dbus_object_manager_server_is_exported (GDBusObjectManagerServer *manager, - GDBusObjectSkeleton *object); -gboolean g_dbus_object_manager_server_unexport (GDBusObjectManagerServer *manager, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_MANAGER_SERVER_H */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectproxy.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectproxy.h deleted file mode 100644 index 58aef853..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectproxy.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_PROXY_H__ -#define __G_DBUS_OBJECT_PROXY_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_PROXY (g_dbus_object_proxy_get_type ()) -#define G_DBUS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_PROXY, GDBusObjectProxy)) -#define G_DBUS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_PROXY, GDBusObjectProxyClass)) -#define G_DBUS_OBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_PROXY, GDBusObjectProxyClass)) -#define G_IS_DBUS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_PROXY)) -#define G_IS_DBUS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_PROXY)) - -typedef struct _GDBusObjectProxyClass GDBusObjectProxyClass; -typedef struct _GDBusObjectProxyPrivate GDBusObjectProxyPrivate; - -/** - * GDBusObjectProxy: - * - * The #GDBusObjectProxy structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectProxy -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectProxyPrivate *priv; -}; - -/** - * GDBusObjectProxyClass: - * @parent_class: The parent class. - * - * Class structure for #GDBusObjectProxy. - * - * Since: 2.30 - */ -struct _GDBusObjectProxyClass -{ - GObjectClass parent_class; - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_proxy_get_type (void) G_GNUC_CONST; -GDBusObjectProxy *g_dbus_object_proxy_new (GDBusConnection *connection, - const gchar *object_path); -GDBusConnection *g_dbus_object_proxy_get_connection (GDBusObjectProxy *proxy); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_PROXY_H */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectskeleton.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectskeleton.h deleted file mode 100644 index 918a3353..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusobjectskeleton.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_SKELETON_H__ -#define __G_DBUS_OBJECT_SKELETON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_SKELETON (g_dbus_object_skeleton_get_type ()) -#define G_DBUS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_SKELETON, GDBusObjectSkeleton)) -#define G_DBUS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_SKELETON, GDBusObjectSkeletonClass)) -#define G_DBUS_OBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_SKELETON, GDBusObjectSkeletonClass)) -#define G_IS_DBUS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_SKELETON)) -#define G_IS_DBUS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_SKELETON)) - -typedef struct _GDBusObjectSkeletonClass GDBusObjectSkeletonClass; -typedef struct _GDBusObjectSkeletonPrivate GDBusObjectSkeletonPrivate; - -/** - * GDBusObjectSkeleton: - * - * The #GDBusObjectSkeleton structure contains private data and should only be - * accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectSkeleton -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectSkeletonPrivate *priv; -}; - -/** - * GDBusObjectSkeletonClass: - * @parent_class: The parent class. - * @authorize_method: Signal class handler for the #GDBusObjectSkeleton::authorize-method signal. - * - * Class structure for #GDBusObjectSkeleton. - * - * Since: 2.30 - */ -struct _GDBusObjectSkeletonClass -{ - GObjectClass parent_class; - - /* Signals */ - gboolean (*authorize_method) (GDBusObjectSkeleton *object, - GDBusInterfaceSkeleton *interface_, - GDBusMethodInvocation *invocation); - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_skeleton_get_type (void) G_GNUC_CONST; -GDBusObjectSkeleton *g_dbus_object_skeleton_new (const gchar *object_path); -void g_dbus_object_skeleton_flush (GDBusObjectSkeleton *object); -void g_dbus_object_skeleton_add_interface (GDBusObjectSkeleton *object, - GDBusInterfaceSkeleton *interface_); -void g_dbus_object_skeleton_remove_interface (GDBusObjectSkeleton *object, - GDBusInterfaceSkeleton *interface_); -void g_dbus_object_skeleton_remove_interface_by_name (GDBusObjectSkeleton *object, - const gchar *interface_name); -void g_dbus_object_skeleton_set_object_path (GDBusObjectSkeleton *object, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_SKELETON_H */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusproxy.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusproxy.h deleted file mode 100644 index 1e920d30..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusproxy.h +++ /dev/null @@ -1,190 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_PROXY_H__ -#define __G_DBUS_PROXY_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_PROXY (g_dbus_proxy_get_type ()) -#define G_DBUS_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_PROXY, GDBusProxy)) -#define G_DBUS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_PROXY, GDBusProxyClass)) -#define G_DBUS_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_PROXY, GDBusProxyClass)) -#define G_IS_DBUS_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_PROXY)) -#define G_IS_DBUS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_PROXY)) - -typedef struct _GDBusProxyClass GDBusProxyClass; -typedef struct _GDBusProxyPrivate GDBusProxyPrivate; - -/** - * GDBusProxy: - * - * The #GDBusProxy structure contains only private data and - * should only be accessed using the provided API. - * - * Since: 2.26 - */ -struct _GDBusProxy -{ - /*< private >*/ - GObject parent_instance; - GDBusProxyPrivate *priv; -}; - -/** - * GDBusProxyClass: - * @g_properties_changed: Signal class handler for the #GDBusProxy::g-properties-changed signal. - * @g_signal: Signal class handler for the #GDBusProxy::g-signal signal. - * - * Class structure for #GDBusProxy. - * - * Since: 2.26 - */ -struct _GDBusProxyClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - /* Signals */ - void (*g_properties_changed) (GDBusProxy *proxy, - GVariant *changed_properties, - const gchar* const *invalidated_properties); - void (*g_signal) (GDBusProxy *proxy, - const gchar *sender_name, - const gchar *signal_name, - GVariant *parameters); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[32]; -}; - -GType g_dbus_proxy_get_type (void) G_GNUC_CONST; -void g_dbus_proxy_new (GDBusConnection *connection, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusProxy *g_dbus_proxy_new_finish (GAsyncResult *res, - GError **error); -GDBusProxy *g_dbus_proxy_new_sync (GDBusConnection *connection, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GError **error); -void g_dbus_proxy_new_for_bus (GBusType bus_type, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusProxy *g_dbus_proxy_new_for_bus_finish (GAsyncResult *res, - GError **error); -GDBusProxy *g_dbus_proxy_new_for_bus_sync (GBusType bus_type, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GError **error); -GDBusConnection *g_dbus_proxy_get_connection (GDBusProxy *proxy); -GDBusProxyFlags g_dbus_proxy_get_flags (GDBusProxy *proxy); -const gchar *g_dbus_proxy_get_name (GDBusProxy *proxy); -gchar *g_dbus_proxy_get_name_owner (GDBusProxy *proxy); -const gchar *g_dbus_proxy_get_object_path (GDBusProxy *proxy); -const gchar *g_dbus_proxy_get_interface_name (GDBusProxy *proxy); -gint g_dbus_proxy_get_default_timeout (GDBusProxy *proxy); -void g_dbus_proxy_set_default_timeout (GDBusProxy *proxy, - gint timeout_msec); -GDBusInterfaceInfo *g_dbus_proxy_get_interface_info (GDBusProxy *proxy); -void g_dbus_proxy_set_interface_info (GDBusProxy *proxy, - GDBusInterfaceInfo *info); -GVariant *g_dbus_proxy_get_cached_property (GDBusProxy *proxy, - const gchar *property_name); -void g_dbus_proxy_set_cached_property (GDBusProxy *proxy, - const gchar *property_name, - GVariant *value); -gchar **g_dbus_proxy_get_cached_property_names (GDBusProxy *proxy); -void g_dbus_proxy_call (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GVariant *g_dbus_proxy_call_finish (GDBusProxy *proxy, - GAsyncResult *res, - GError **error); -GVariant *g_dbus_proxy_call_sync (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GError **error); - -void g_dbus_proxy_call_with_unix_fd_list (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GVariant *g_dbus_proxy_call_with_unix_fd_list_finish (GDBusProxy *proxy, - GUnixFDList **out_fd_list, - GAsyncResult *res, - GError **error); -GVariant *g_dbus_proxy_call_with_unix_fd_list_sync (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GUnixFDList **out_fd_list, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_DBUS_PROXY_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusserver.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusserver.h deleted file mode 100644 index 3d10c1b4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusserver.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_SERVER_H__ -#define __G_DBUS_SERVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_SERVER (g_dbus_server_get_type ()) -#define G_DBUS_SERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_SERVER, GDBusServer)) -#define G_IS_DBUS_SERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_SERVER)) - -GType g_dbus_server_get_type (void) G_GNUC_CONST; -GDBusServer *g_dbus_server_new_sync (const gchar *address, - GDBusServerFlags flags, - const gchar *guid, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GError **error); -const gchar *g_dbus_server_get_client_address (GDBusServer *server); -const gchar *g_dbus_server_get_guid (GDBusServer *server); -GDBusServerFlags g_dbus_server_get_flags (GDBusServer *server); -void g_dbus_server_start (GDBusServer *server); -void g_dbus_server_stop (GDBusServer *server); -gboolean g_dbus_server_is_active (GDBusServer *server); - -G_END_DECLS - -#endif /* __G_DBUS_SERVER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusutils.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdbusutils.h deleted file mode 100644 index a05a2300..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdbusutils.h +++ /dev/null @@ -1,49 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_UTILS_H__ -#define __G_DBUS_UTILS_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_dbus_is_guid (const gchar *string); -gchar *g_dbus_generate_guid (void); - -gboolean g_dbus_is_name (const gchar *string); -gboolean g_dbus_is_unique_name (const gchar *string); -gboolean g_dbus_is_member_name (const gchar *string); -gboolean g_dbus_is_interface_name (const gchar *string); - -void g_dbus_gvariant_to_gvalue (GVariant *value, - GValue *out_gvalue); -GVariant *g_dbus_gvalue_to_gvariant (const GValue *gvalue, - const GVariantType *type); - -G_END_DECLS - -#endif /* __G_DBUS_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gdrive.h b/GstreamerHelper/x64/include/glib-2.0/gio/gdrive.h deleted file mode 100644 index d42b0b70..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gdrive.h +++ /dev/null @@ -1,236 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DRIVE_H__ -#define __G_DRIVE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DRIVE (g_drive_get_type ()) -#define G_DRIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DRIVE, GDrive)) -#define G_IS_DRIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DRIVE)) -#define G_DRIVE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_DRIVE, GDriveIface)) - -/** - * GDriveIface: - * @g_iface: The parent interface. - * @changed: Signal emitted when the drive is changed. - * @disconnected: The removed signal that is emitted when the #GDrive have been disconnected. If the recipient is holding references to the object they should release them so the object can be finalized. - * @eject_button: Signal emitted when the physical eject button (if any) of a drive have been pressed. - * @get_name: Returns the name for the given #GDrive. - * @get_icon: Returns a #GIcon for the given #GDrive. - * @has_volumes: Returns %TRUE if the #GDrive has mountable volumes. - * @get_volumes: Returns a list #GList of #GVolume for the #GDrive. - * @is_media_removable: Returns %TRUE if the #GDrive supports removal and insertion of media. - * @has_media: Returns %TRUE if the #GDrive has media inserted. - * @is_media_check_automatic: Returns %TRUE if the #GDrive is capabable of automatically detecting media changes. - * @can_poll_for_media: Returns %TRUE if the #GDrive is capable of manually polling for media change. - * @can_eject: Returns %TRUE if the #GDrive can eject media. - * @eject: Ejects a #GDrive. - * @eject_finish: Finishes an eject operation. - * @poll_for_media: Poll for media insertion/removal on a #GDrive. - * @poll_for_media_finish: Finishes a media poll operation. - * @get_identifier: Returns the identifier of the given kind, or %NULL if - * the #GDrive doesn't have one. - * @enumerate_identifiers: Returns an array strings listing the kinds - * of identifiers which the #GDrive has. - * @get_start_stop_type: Gets a #GDriveStartStopType with details about starting/stopping the drive. Since 2.22. - * @can_stop: Returns %TRUE if a #GDrive can be stopped. Since 2.22. - * @stop: Stops a #GDrive. Since 2.22. - * @stop_finish: Finishes a stop operation. Since 2.22. - * @can_start: Returns %TRUE if a #GDrive can be started. Since 2.22. - * @can_start_degraded: Returns %TRUE if a #GDrive can be started degraded. Since 2.22. - * @start: Starts a #GDrive. Since 2.22. - * @start_finish: Finishes a start operation. Since 2.22. - * @stop_button: Signal emitted when the physical stop button (if any) of a drive have been pressed. Since 2.22. - * @eject_with_operation: Starts ejecting a #GDrive using a #GMountOperation. Since 2.22. - * @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @get_sort_key: Gets a key used for sorting #GDrive instances or %NULL if no such key exists. Since 2.32. - * @get_symbolic_icon: Returns a symbolic #GIcon for the given #GDrive. Since 2.34. - * - * Interface for creating #GDrive implementations. - */ -typedef struct _GDriveIface GDriveIface; - -struct _GDriveIface -{ - GTypeInterface g_iface; - - /* signals */ - void (* changed) (GDrive *drive); - void (* disconnected) (GDrive *drive); - void (* eject_button) (GDrive *drive); - - /* Virtual Table */ - char * (* get_name) (GDrive *drive); - GIcon * (* get_icon) (GDrive *drive); - gboolean (* has_volumes) (GDrive *drive); - GList * (* get_volumes) (GDrive *drive); - gboolean (* is_media_removable) (GDrive *drive); - gboolean (* has_media) (GDrive *drive); - gboolean (* is_media_check_automatic) (GDrive *drive); - gboolean (* can_eject) (GDrive *drive); - gboolean (* can_poll_for_media) (GDrive *drive); - void (* eject) (GDrive *drive, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - void (* poll_for_media) (GDrive *drive, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* poll_for_media_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - - char * (* get_identifier) (GDrive *drive, - const char *kind); - char ** (* enumerate_identifiers) (GDrive *drive); - - GDriveStartStopType (* get_start_stop_type) (GDrive *drive); - - gboolean (* can_start) (GDrive *drive); - gboolean (* can_start_degraded) (GDrive *drive); - void (* start) (GDrive *drive, - GDriveStartFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* start_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - - gboolean (* can_stop) (GDrive *drive); - void (* stop) (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* stop_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - /* signal, not VFunc */ - void (* stop_button) (GDrive *drive); - - void (* eject_with_operation) (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_with_operation_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - - const gchar * (* get_sort_key) (GDrive *drive); - GIcon * (* get_symbolic_icon) (GDrive *drive); - -}; - -GType g_drive_get_type (void) G_GNUC_CONST; - -char * g_drive_get_name (GDrive *drive); -GIcon * g_drive_get_icon (GDrive *drive); -GIcon * g_drive_get_symbolic_icon (GDrive *drive); -gboolean g_drive_has_volumes (GDrive *drive); -GList * g_drive_get_volumes (GDrive *drive); -gboolean g_drive_is_media_removable (GDrive *drive); -gboolean g_drive_has_media (GDrive *drive); -gboolean g_drive_is_media_check_automatic (GDrive *drive); -gboolean g_drive_can_poll_for_media (GDrive *drive); -gboolean g_drive_can_eject (GDrive *drive); -GLIB_DEPRECATED_FOR(g_drive_eject_with_operation) -void g_drive_eject (GDrive *drive, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_drive_eject_with_operation_finish) -gboolean g_drive_eject_finish (GDrive *drive, - GAsyncResult *result, - GError **error); -void g_drive_poll_for_media (GDrive *drive, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_poll_for_media_finish (GDrive *drive, - GAsyncResult *result, - GError **error); -char * g_drive_get_identifier (GDrive *drive, - const char *kind); -char ** g_drive_enumerate_identifiers (GDrive *drive); - -GDriveStartStopType g_drive_get_start_stop_type (GDrive *drive); - -gboolean g_drive_can_start (GDrive *drive); -gboolean g_drive_can_start_degraded (GDrive *drive); -void g_drive_start (GDrive *drive, - GDriveStartFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_start_finish (GDrive *drive, - GAsyncResult *result, - GError **error); - -gboolean g_drive_can_stop (GDrive *drive); -void g_drive_stop (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_stop_finish (GDrive *drive, - GAsyncResult *result, - GError **error); - -void g_drive_eject_with_operation (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_eject_with_operation_finish (GDrive *drive, - GAsyncResult *result, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -const gchar *g_drive_get_sort_key (GDrive *drive); - -G_END_DECLS - -#endif /* __G_DRIVE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gemblem.h b/GstreamerHelper/x64/include/glib-2.0/gio/gemblem.h deleted file mode 100644 index 06816e12..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gemblem.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Clemens N. Buss - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_EMBLEM_H__ -#define __G_EMBLEM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_EMBLEM (g_emblem_get_type ()) -#define G_EMBLEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_EMBLEM, GEmblem)) -#define G_EMBLEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_EMBLEM, GEmblemClass)) -#define G_IS_EMBLEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_EMBLEM)) -#define G_IS_EMBLEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_EMBLEM)) -#define G_EMBLEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_EMBLEM, GEmblemClass)) - -/** - * GEmblem: - * - * An object for Emblems - */ -typedef struct _GEmblem GEmblem; -typedef struct _GEmblemClass GEmblemClass; - -GType g_emblem_get_type (void) G_GNUC_CONST; - -GEmblem *g_emblem_new (GIcon *icon); -GEmblem *g_emblem_new_with_origin (GIcon *icon, - GEmblemOrigin origin); -GIcon *g_emblem_get_icon (GEmblem *emblem); -GEmblemOrigin g_emblem_get_origin (GEmblem *emblem); - -G_END_DECLS - -#endif /* __G_EMBLEM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gemblemedicon.h b/GstreamerHelper/x64/include/glib-2.0/gio/gemblemedicon.h deleted file mode 100644 index ded69281..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gemblemedicon.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Gio - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Matthias Clasen - * Clemens N. Buss - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_EMBLEMED_ICON_H__ -#define __G_EMBLEMED_ICON_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_EMBLEMED_ICON (g_emblemed_icon_get_type ()) -#define G_EMBLEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_EMBLEMED_ICON, GEmblemedIcon)) -#define G_EMBLEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_EMBLEMED_ICON, GEmblemedIconClass)) -#define G_IS_EMBLEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_EMBLEMED_ICON)) -#define G_IS_EMBLEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_EMBLEMED_ICON)) -#define G_EMBLEMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_EMBLEMED_ICON, GEmblemedIconClass)) - -/** - * GEmblemedIcon: - * - * An implementation of #GIcon for icons with emblems. - **/ -typedef struct _GEmblemedIcon GEmblemedIcon; -typedef struct _GEmblemedIconClass GEmblemedIconClass; -typedef struct _GEmblemedIconPrivate GEmblemedIconPrivate; - -struct _GEmblemedIcon -{ - GObject parent_instance; - - /*< private >*/ - GEmblemedIconPrivate *priv; -}; - -struct _GEmblemedIconClass -{ - GObjectClass parent_class; -}; - -GType g_emblemed_icon_get_type (void) G_GNUC_CONST; - -GIcon *g_emblemed_icon_new (GIcon *icon, - GEmblem *emblem); -GIcon *g_emblemed_icon_get_icon (GEmblemedIcon *emblemed); -GList *g_emblemed_icon_get_emblems (GEmblemedIcon *emblemed); -void g_emblemed_icon_add_emblem (GEmblemedIcon *emblemed, - GEmblem *emblem); -void g_emblemed_icon_clear_emblems (GEmblemedIcon *emblemed); - -G_END_DECLS - -#endif /* __G_EMBLEMED_ICON_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfile.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfile.h deleted file mode 100644 index 1a724db6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfile.h +++ /dev/null @@ -1,1042 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_H__ -#define __G_FILE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE (g_file_get_type ()) -#define G_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_FILE, GFile)) -#define G_IS_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_FILE)) -#define G_FILE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_FILE, GFileIface)) - -#if 0 -/** - * GFile: - * - * A handle to an object implementing the #GFileIface interface. - * Generally stores a location within the file system. Handles do not - * necessarily represent files or directories that currently exist. - **/ -typedef struct _GFile GFile; /* Dummy typedef */ -#endif -typedef struct _GFileIface GFileIface; - - -/** - * GFileIface: - * @g_iface: The parent interface. - * @dup: Duplicates a #GFile. - * @hash: Creates a hash of a #GFile. - * @equal: Checks equality of two given #GFiles. - * @is_native: Checks to see if a file is native to the system. - * @has_uri_scheme: Checks to see if a #GFile has a given URI scheme. - * @get_uri_scheme: Gets the URI scheme for a #GFile. - * @get_basename: Gets the basename for a given #GFile. - * @get_path: Gets the current path within a #GFile. - * @get_uri: Gets a URI for the path within a #GFile. - * @get_parse_name: Gets the parsed name for the #GFile. - * @get_parent: Gets the parent directory for the #GFile. - * @prefix_matches: Checks whether a #GFile contains a specified file. - * @get_relative_path: Gets the path for a #GFile relative to a given path. - * @resolve_relative_path: Resolves a relative path for a #GFile to an absolute path. - * @get_child_for_display_name: Gets the child #GFile for a given display name. - * @enumerate_children: Gets a #GFileEnumerator with the children of a #GFile. - * @enumerate_children_async: Asynchronously gets a #GFileEnumerator with the children of a #GFile. - * @enumerate_children_finish: Finishes asynchronously enumerating the children. - * @query_info: Gets the #GFileInfo for a #GFile. - * @query_info_async: Asynchronously gets the #GFileInfo for a #GFile. - * @query_info_finish: Finishes an asynchronous query info operation. - * @query_filesystem_info: Gets a #GFileInfo for the file system #GFile is on. - * @query_filesystem_info_async: Asynchronously gets a #GFileInfo for the file system #GFile is on. - * @query_filesystem_info_finish: Finishes asynchronously getting the file system info. - * @find_enclosing_mount: Gets a #GMount for the #GFile. - * @find_enclosing_mount_async: Asynchronously gets the #GMount for a #GFile. - * @find_enclosing_mount_finish: Finishes asynchronously getting the volume. - * @set_display_name: Sets the display name for a #GFile. - * @set_display_name_async: Asynchronously sets a #GFile's display name. - * @set_display_name_finish: Finishes asynchronously setting a #GFile's display name. - * @query_settable_attributes: Returns a list of #GFileAttributes that can be set. - * @_query_settable_attributes_async: Asynchronously gets a list of #GFileAttributes that can be set. - * @_query_settable_attributes_finish: Finishes asynchronously querying settable attributes. - * @query_writable_namespaces: Returns a list of #GFileAttribute namespaces that are writable. - * @_query_writable_namespaces_async: Asynchronously gets a list of #GFileAttribute namespaces that are writable. - * @_query_writable_namespaces_finish: Finishes asynchronously querying the writable namespaces. - * @set_attribute: Sets a #GFileAttribute. - * @set_attributes_from_info: Sets a #GFileAttribute with information from a #GFileInfo. - * @set_attributes_async: Asynchronously sets a file's attributes. - * @set_attributes_finish: Finishes setting a file's attributes asynchronously. - * @read_fn: Reads a file asynchronously. - * @read_async: Asynchronously reads a file. - * @read_finish: Finishes asynchronously reading a file. - * @append_to: Writes to the end of a file. - * @append_to_async: Asynchronously writes to the end of a file. - * @append_to_finish: Finishes an asynchronous file append operation. - * @create: Creates a new file. - * @create_async: Asynchronously creates a file. - * @create_finish: Finishes asynchronously creating a file. - * @replace: Replaces the contents of a file. - * @replace_async: Asynchronously replaces the contents of a file. - * @replace_finish: Finishes asynchronously replacing a file. - * @delete_file: Deletes a file. - * @delete_file_async: Asynchronously deletes a file. - * @delete_file_finish: Finishes an asynchronous delete. - * @trash: Sends a #GFile to the Trash location. - * @_trash_async: Asynchronously sends a #GFile to the Trash location. - * @_trash_finish: Finishes an asynchronous file trashing operation. - * @make_directory: Makes a directory. - * @_make_directory_async: Asynchronously makes a directory. - * @_make_directory_finish: Finishes making a directory asynchronously. - * @make_symbolic_link: Makes a symbolic link. - * @_make_symbolic_link_async: Asynchronously makes a symbolic link - * @_make_symbolic_link_finish: Finishes making a symbolic link asynchronously. - * @copy: Copies a file. - * @copy_async: Asynchronously copies a file. - * @copy_finish: Finishes an asynchronous copy operation. - * @move: Moves a file. - * @_move_async: Asynchronously moves a file. - * @_move_finish: Finishes an asynchronous move operation. - * @mount_mountable: Mounts a mountable object. - * @mount_mountable_finish: Finishes a mounting operation. - * @unmount_mountable: Unmounts a mountable object. - * @unmount_mountable_finish: Finishes an unmount operation. - * @eject_mountable: Ejects a mountable. - * @eject_mountable_finish: Finishes an eject operation. - * @mount_enclosing_volume: Mounts a specified location. - * @mount_enclosing_volume_finish: Finishes mounting a specified location. - * @monitor_dir: Creates a #GFileMonitor for the location. - * @monitor_file: Creates a #GFileMonitor for the location. - * @open_readwrite: Open file read/write. Since 2.22. - * @open_readwrite_async: Asynchronously opens file read/write. Since 2.22. - * @open_readwrite_finish: Finishes an asynchronous open read/write. Since 2.22. - * @create_readwrite: Creates file read/write. Since 2.22. - * @create_readwrite_async: Asynchronously creates file read/write. Since 2.22. - * @create_readwrite_finish: Finishes an asynchronous creates read/write. Since 2.22. - * @replace_readwrite: Replaces file read/write. Since 2.22. - * @replace_readwrite_async: Asynchronously replaces file read/write. Since 2.22. - * @replace_readwrite_finish: Finishes an asynchronous replace read/write. Since 2.22. - * @start_mountable: Starts a mountable object. Since 2.22. - * @start_mountable_finish: Finishes an start operation. Since 2.22. - * @stop_mountable: Stops a mountable. Since 2.22. - * @stop_mountable_finish: Finishes an stop operation. Since 2.22. - * @supports_thread_contexts: a boolean that indicates whether the #GFile implementation supports thread-default contexts. Since 2.22. - * @unmount_mountable_with_operation: Unmounts a mountable object using a #GMountOperation. Since 2.22. - * @unmount_mountable_with_operation_finish: Finishes an unmount operation using a #GMountOperation. Since 2.22. - * @eject_mountable_with_operation: Ejects a mountable object using a #GMountOperation. Since 2.22. - * @eject_mountable_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @poll_mountable: Polls a mountable object for media changes. Since 2.22. - * @poll_mountable_finish: Finishes an poll operation for media changes. Since 2.22. - * - * An interface for writing VFS file handles. - **/ -struct _GFileIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GFile * (* dup) (GFile *file); - guint (* hash) (GFile *file); - gboolean (* equal) (GFile *file1, - GFile *file2); - gboolean (* is_native) (GFile *file); - gboolean (* has_uri_scheme) (GFile *file, - const char *uri_scheme); - char * (* get_uri_scheme) (GFile *file); - char * (* get_basename) (GFile *file); - char * (* get_path) (GFile *file); - char * (* get_uri) (GFile *file); - char * (* get_parse_name) (GFile *file); - GFile * (* get_parent) (GFile *file); - gboolean (* prefix_matches) (GFile *prefix, - GFile *file); - char * (* get_relative_path) (GFile *parent, - GFile *descendant); - GFile * (* resolve_relative_path) (GFile *file, - const char *relative_path); - GFile * (* get_child_for_display_name) (GFile *file, - const char *display_name, - GError **error); - - GFileEnumerator * (* enumerate_children) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* enumerate_children_async) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileEnumerator * (* enumerate_children_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileInfo * (* query_info) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileInfo * (* query_filesystem_info) (GFile *file, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_filesystem_info_async) (GFile *file, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_filesystem_info_finish)(GFile *file, - GAsyncResult *res, - GError **error); - - GMount * (* find_enclosing_mount) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* find_enclosing_mount_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GMount * (* find_enclosing_mount_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFile * (* set_display_name) (GFile *file, - const char *display_name, - GCancellable *cancellable, - GError **error); - void (* set_display_name_async) (GFile *file, - const char *display_name, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFile * (* set_display_name_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileAttributeInfoList * (* query_settable_attributes) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _query_settable_attributes_async) (void); - void (* _query_settable_attributes_finish) (void); - - GFileAttributeInfoList * (* query_writable_namespaces) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _query_writable_namespaces_async) (void); - void (* _query_writable_namespaces_finish) (void); - - gboolean (* set_attribute) (GFile *file, - const char *attribute, - GFileAttributeType type, - gpointer value_p, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - gboolean (* set_attributes_from_info) (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* set_attributes_async) (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* set_attributes_finish) (GFile *file, - GAsyncResult *result, - GFileInfo **info, - GError **error); - - GFileInputStream * (* read_fn) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* read_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInputStream * (* read_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileOutputStream * (* append_to) (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* append_to_async) (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileOutputStream * (* append_to_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileOutputStream * (* create) (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* create_async) (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileOutputStream * (* create_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileOutputStream * (* replace) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* replace_async) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileOutputStream * (* replace_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - gboolean (* delete_file) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* delete_file_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* delete_file_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - gboolean (* trash) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _trash_async) (void); - void (* _trash_finish) (void); - - gboolean (* make_directory) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _make_directory_async) (void); - void (* _make_directory_finish) (void); - - gboolean (* make_symbolic_link) (GFile *file, - const char *symlink_value, - GCancellable *cancellable, - GError **error); - void (* _make_symbolic_link_async) (void); - void (* _make_symbolic_link_finish) (void); - - gboolean (* copy) (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); - void (* copy_async) (GFile *source, - GFile *destination, - GFileCopyFlags flags, - int io_priority, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* copy_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - gboolean (* move) (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); - void (* _move_async) (void); - void (* _move_finish) (void); - - void (* mount_mountable) (GFile *file, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFile * (* mount_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* unmount_mountable) (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* eject_mountable) (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* mount_enclosing_volume) (GFile *location, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* mount_enclosing_volume_finish) (GFile *location, - GAsyncResult *result, - GError **error); - - GFileMonitor * (* monitor_dir) (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); - GFileMonitor * (* monitor_file) (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); - - GFileIOStream * (* open_readwrite) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* open_readwrite_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileIOStream * (* open_readwrite_finish) (GFile *file, - GAsyncResult *res, - GError **error); - GFileIOStream * (* create_readwrite) (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* create_readwrite_async) (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileIOStream * (* create_readwrite_finish) (GFile *file, - GAsyncResult *res, - GError **error); - GFileIOStream * (* replace_readwrite) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* replace_readwrite_async) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileIOStream * (* replace_readwrite_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - void (* start_mountable) (GFile *file, - GDriveStartFlags flags, - GMountOperation *start_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* start_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* stop_mountable) (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* stop_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - gboolean supports_thread_contexts; - - void (* unmount_mountable_with_operation) (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_mountable_with_operation_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* eject_mountable_with_operation) (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_mountable_with_operation_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* poll_mountable) (GFile *file, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* poll_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); -}; - -GType g_file_get_type (void) G_GNUC_CONST; - -GFile * g_file_new_for_path (const char *path); -GFile * g_file_new_for_uri (const char *uri); -GFile * g_file_new_for_commandline_arg (const char *arg); -GLIB_AVAILABLE_IN_2_32 -GFile * g_file_new_tmp (const char *tmpl, - GFileIOStream **iostream, - GError **error); -GFile * g_file_parse_name (const char *parse_name); -GFile * g_file_dup (GFile *file); -guint g_file_hash (gconstpointer file); -gboolean g_file_equal (GFile *file1, - GFile *file2); -char * g_file_get_basename (GFile *file); -char * g_file_get_path (GFile *file); -char * g_file_get_uri (GFile *file); -char * g_file_get_parse_name (GFile *file); -GFile * g_file_get_parent (GFile *file); -gboolean g_file_has_parent (GFile *file, - GFile *parent); -GFile * g_file_get_child (GFile *file, - const char *name); -GFile * g_file_get_child_for_display_name (GFile *file, - const char *display_name, - GError **error); -gboolean g_file_has_prefix (GFile *file, - GFile *prefix); -char * g_file_get_relative_path (GFile *parent, - GFile *descendant); -GFile * g_file_resolve_relative_path (GFile *file, - const char *relative_path); -gboolean g_file_is_native (GFile *file); -gboolean g_file_has_uri_scheme (GFile *file, - const char *uri_scheme); -char * g_file_get_uri_scheme (GFile *file); -GFileInputStream * g_file_read (GFile *file, - GCancellable *cancellable, - GError **error); -void g_file_read_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInputStream * g_file_read_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileOutputStream * g_file_append_to (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -GFileOutputStream * g_file_create (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -GFileOutputStream * g_file_replace (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_append_to_async (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileOutputStream * g_file_append_to_finish (GFile *file, - GAsyncResult *res, - GError **error); -void g_file_create_async (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileOutputStream * g_file_create_finish (GFile *file, - GAsyncResult *res, - GError **error); -void g_file_replace_async (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileOutputStream * g_file_replace_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileIOStream * g_file_open_readwrite (GFile *file, - GCancellable *cancellable, - GError **error); -void g_file_open_readwrite_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileIOStream * g_file_open_readwrite_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileIOStream * g_file_create_readwrite (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_create_readwrite_async (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileIOStream * g_file_create_readwrite_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileIOStream * g_file_replace_readwrite (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_replace_readwrite_async (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileIOStream * g_file_replace_readwrite_finish (GFile *file, - GAsyncResult *res, - GError **error); -gboolean g_file_query_exists (GFile *file, - GCancellable *cancellable); -GFileType g_file_query_file_type (GFile *file, - GFileQueryInfoFlags flags, - GCancellable *cancellable); -GFileInfo * g_file_query_info (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_query_info_async (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo * g_file_query_info_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileInfo * g_file_query_filesystem_info (GFile *file, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_query_filesystem_info_async (GFile *file, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo * g_file_query_filesystem_info_finish (GFile *file, - GAsyncResult *res, - GError **error); -GMount * g_file_find_enclosing_mount (GFile *file, - GCancellable *cancellable, - GError **error); -void g_file_find_enclosing_mount_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GMount * g_file_find_enclosing_mount_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileEnumerator * g_file_enumerate_children (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_enumerate_children_async (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileEnumerator * g_file_enumerate_children_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFile * g_file_set_display_name (GFile *file, - const char *display_name, - GCancellable *cancellable, - GError **error); -void g_file_set_display_name_async (GFile *file, - const char *display_name, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFile * g_file_set_display_name_finish (GFile *file, - GAsyncResult *res, - GError **error); -gboolean g_file_delete (GFile *file, - GCancellable *cancellable, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -void g_file_delete_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_file_delete_finish (GFile *file, - GAsyncResult *result, - GError **error); - -gboolean g_file_trash (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_copy (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); -void g_file_copy_async (GFile *source, - GFile *destination, - GFileCopyFlags flags, - int io_priority, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_copy_finish (GFile *file, - GAsyncResult *res, - GError **error); -gboolean g_file_move (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); -gboolean g_file_make_directory (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_make_directory_with_parents (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_make_symbolic_link (GFile *file, - const char *symlink_value, - GCancellable *cancellable, - GError **error); -GFileAttributeInfoList *g_file_query_settable_attributes (GFile *file, - GCancellable *cancellable, - GError **error); -GFileAttributeInfoList *g_file_query_writable_namespaces (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute (GFile *file, - const char *attribute, - GFileAttributeType type, - gpointer value_p, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attributes_from_info (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_set_attributes_async (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_set_attributes_finish (GFile *file, - GAsyncResult *result, - GFileInfo **info, - GError **error); -gboolean g_file_set_attribute_string (GFile *file, - const char *attribute, - const char *value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_byte_string (GFile *file, - const char *attribute, - const char *value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_uint32 (GFile *file, - const char *attribute, - guint32 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_int32 (GFile *file, - const char *attribute, - gint32 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_uint64 (GFile *file, - const char *attribute, - guint64 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_int64 (GFile *file, - const char *attribute, - gint64 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_mount_enclosing_volume (GFile *location, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_mount_enclosing_volume_finish (GFile *location, - GAsyncResult *result, - GError **error); -void g_file_mount_mountable (GFile *file, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFile * g_file_mount_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -GLIB_DEPRECATED_FOR(g_file_unmount_mountable_with_operation) -void g_file_unmount_mountable (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_file_unmount_mountable_with_operation_finish) -gboolean g_file_unmount_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -void g_file_unmount_mountable_with_operation (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_unmount_mountable_with_operation_finish (GFile *file, - GAsyncResult *result, - GError **error); -GLIB_DEPRECATED_FOR(g_file_eject_mountable_with_operation) -void g_file_eject_mountable (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_file_eject_mountable_with_operation_finish) -gboolean g_file_eject_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -void g_file_eject_mountable_with_operation (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_eject_mountable_with_operation_finish (GFile *file, - GAsyncResult *result, - GError **error); - -gboolean g_file_copy_attributes (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GError **error); - - -GFileMonitor* g_file_monitor_directory (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); -GFileMonitor* g_file_monitor_file (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); -GFileMonitor* g_file_monitor (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); - -void g_file_start_mountable (GFile *file, - GDriveStartFlags flags, - GMountOperation *start_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_start_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -void g_file_stop_mountable (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_stop_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); - -void g_file_poll_mountable (GFile *file, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_poll_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); - -/* Utilities */ - -GAppInfo *g_file_query_default_handler (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_load_contents (GFile *file, - GCancellable *cancellable, - char **contents, - gsize *length, - char **etag_out, - GError **error); -void g_file_load_contents_async (GFile *file, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_load_contents_finish (GFile *file, - GAsyncResult *res, - char **contents, - gsize *length, - char **etag_out, - GError **error); -void g_file_load_partial_contents_async (GFile *file, - GCancellable *cancellable, - GFileReadMoreCallback read_more_callback, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_load_partial_contents_finish (GFile *file, - GAsyncResult *res, - char **contents, - gsize *length, - char **etag_out, - GError **error); -gboolean g_file_replace_contents (GFile *file, - const char *contents, - gsize length, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - char **new_etag, - GCancellable *cancellable, - GError **error); -void g_file_replace_contents_async (GFile *file, - const char *contents, - gsize length, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_replace_contents_finish (GFile *file, - GAsyncResult *res, - char **new_etag, - GError **error); - -gboolean g_file_supports_thread_contexts (GFile *file); - -G_END_DECLS - -#endif /* __G_FILE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileattribute.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileattribute.h deleted file mode 100644 index 445cdd77..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileattribute.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_ATTRIBUTE_H__ -#define __G_FILE_ATTRIBUTE_H__ - -#include - -G_BEGIN_DECLS - -/** - * GFileAttributeInfo: - * @name: the name of the attribute. - * @type: the #GFileAttributeType type of the attribute. - * @flags: a set of #GFileAttributeInfoFlags. - * - * Information about a specific attribute. - **/ -struct _GFileAttributeInfo -{ - char *name; - GFileAttributeType type; - GFileAttributeInfoFlags flags; -}; - -/** - * GFileAttributeInfoList: - * @infos: an array of #GFileAttributeInfos. - * @n_infos: the number of values in the array. - * - * Acts as a lightweight registry for possible valid file attributes. - * The registry stores Key-Value pair formats as #GFileAttributeInfos. - **/ -struct _GFileAttributeInfoList -{ - GFileAttributeInfo *infos; - int n_infos; -}; - -#define G_TYPE_FILE_ATTRIBUTE_INFO_LIST (g_file_attribute_info_list_get_type ()) -GType g_file_attribute_info_list_get_type (void); - -GFileAttributeInfoList * g_file_attribute_info_list_new (void); -GFileAttributeInfoList * g_file_attribute_info_list_ref (GFileAttributeInfoList *list); -void g_file_attribute_info_list_unref (GFileAttributeInfoList *list); -GFileAttributeInfoList * g_file_attribute_info_list_dup (GFileAttributeInfoList *list); -const GFileAttributeInfo *g_file_attribute_info_list_lookup (GFileAttributeInfoList *list, - const char *name); -void g_file_attribute_info_list_add (GFileAttributeInfoList *list, - const char *name, - GFileAttributeType type, - GFileAttributeInfoFlags flags); - -G_END_DECLS - -#endif /* __G_FILE_INFO_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileenumerator.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileenumerator.h deleted file mode 100644 index 9cd2f3ec..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileenumerator.h +++ /dev/null @@ -1,132 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_ENUMERATOR_H__ -#define __G_FILE_ENUMERATOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_ENUMERATOR (g_file_enumerator_get_type ()) -#define G_FILE_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_ENUMERATOR, GFileEnumerator)) -#define G_FILE_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_ENUMERATOR, GFileEnumeratorClass)) -#define G_IS_FILE_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_ENUMERATOR)) -#define G_IS_FILE_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_ENUMERATOR)) -#define G_FILE_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_ENUMERATOR, GFileEnumeratorClass)) - -/** - * GFileEnumerator: - * - * A per matched file iterator. - **/ -typedef struct _GFileEnumeratorClass GFileEnumeratorClass; -typedef struct _GFileEnumeratorPrivate GFileEnumeratorPrivate; - -struct _GFileEnumerator -{ - GObject parent_instance; - - /*< private >*/ - GFileEnumeratorPrivate *priv; -}; - -struct _GFileEnumeratorClass -{ - GObjectClass parent_class; - - /* Virtual Table */ - - GFileInfo * (* next_file) (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - gboolean (* close_fn) (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - - void (* next_files_async) (GFileEnumerator *enumerator, - int num_files, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GList * (* next_files_finish) (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); - void (* close_async) (GFileEnumerator *enumerator, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); -}; - -GType g_file_enumerator_get_type (void) G_GNUC_CONST; - -GFileInfo *g_file_enumerator_next_file (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); -gboolean g_file_enumerator_close (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); -void g_file_enumerator_next_files_async (GFileEnumerator *enumerator, - int num_files, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList * g_file_enumerator_next_files_finish (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); -void g_file_enumerator_close_async (GFileEnumerator *enumerator, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_enumerator_close_finish (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); -gboolean g_file_enumerator_is_closed (GFileEnumerator *enumerator); -gboolean g_file_enumerator_has_pending (GFileEnumerator *enumerator); -void g_file_enumerator_set_pending (GFileEnumerator *enumerator, - gboolean pending); -GFile * g_file_enumerator_get_container (GFileEnumerator *enumerator); - -G_END_DECLS - -#endif /* __G_FILE_ENUMERATOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileicon.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileicon.h deleted file mode 100644 index 08ae7919..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileicon.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_ICON_H__ -#define __G_FILE_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_ICON (g_file_icon_get_type ()) -#define G_FILE_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_ICON, GFileIcon)) -#define G_FILE_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_ICON, GFileIconClass)) -#define G_IS_FILE_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_ICON)) -#define G_IS_FILE_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_ICON)) -#define G_FILE_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_ICON, GFileIconClass)) - -/** - * GFileIcon: - * - * Gets an icon for a #GFile. Implements #GLoadableIcon. - **/ -typedef struct _GFileIconClass GFileIconClass; - -GType g_file_icon_get_type (void) G_GNUC_CONST; - -GIcon * g_file_icon_new (GFile *file); - -GFile * g_file_icon_get_file (GFileIcon *icon); - -G_END_DECLS - -#endif /* __G_FILE_ICON_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileinfo.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileinfo.h deleted file mode 100644 index 9399e534..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileinfo.h +++ /dev/null @@ -1,983 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_INFO_H__ -#define __G_FILE_INFO_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_INFO (g_file_info_get_type ()) -#define G_FILE_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_INFO, GFileInfo)) -#define G_FILE_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_INFO, GFileInfoClass)) -#define G_IS_FILE_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_INFO)) -#define G_IS_FILE_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_INFO)) -#define G_FILE_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_INFO, GFileInfoClass)) - -/** - * GFileInfo: - * - * Stores information about a file system object referenced by a #GFile. - **/ -typedef struct _GFileInfoClass GFileInfoClass; - - -/* Common Attributes: */ -/** - * G_FILE_ATTRIBUTE_STANDARD_TYPE: - * - * A key in the "standard" namespace for storing file types. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - * The value for this key should contain a #GFileType. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_TYPE "standard::type" /* uint32 (GFileType) */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN: - * - * A key in the "standard" namespace for checking if a file is hidden. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN "standard::is-hidden" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP: - * - * A key in the "standard" namespace for checking if a file is a backup file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP "standard::is-backup" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK: - * - * A key in the "standard" namespace for checking if the file is a symlink. - * Typically the actual type is something else, if we followed the symlink - * to get the type. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK "standard::is-symlink" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL: - * - * A key in the "standard" namespace for checking if a file is virtual. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL "standard::is-virtual" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_NAME: - * - * A key in the "standard" namespace for getting the name of the file. - * The name is the on-disk filename which may not be in any known encoding, - * and can thus not be generally displayed as is. - * Use #G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME if you need to display the - * name in a user interface. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_NAME "standard::name" /* byte string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME: - * - * A key in the "standard" namespace for getting the display name of the file. - * A display name is guaranteed to be in UTF8 and can thus be displayed in - * the UI. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "standard::display-name" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME: - * - * A key in the "standard" namespace for edit name of the file. - * An edit name is similar to the display name, but it is meant to be - * used when you want to rename the file in the UI. The display name - * might contain information you don't want in the new filename (such as - * "(invalid unicode)" if the filename was in an invalid encoding). - * - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME "standard::edit-name" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_COPY_NAME: - * - * A key in the "standard" namespace for getting the copy name of the file. - * The copy name is an optional version of the name. If available it's always - * in UTF8, and corresponds directly to the original filename (only transcoded to - * UTF8). This is useful if you want to copy the file to another filesystem that - * might have a different encoding. If the filename is not a valid string in the - * encoding selected for the filesystem it is in then the copy name will not be set. - * - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_COPY_NAME "standard::copy-name" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION: - * - * A key in the "standard" namespace for getting the description of the file. - * The description is a utf8 string that describes the file, generally containing - * the filename, but can also contain furter information. Example descriptions - * could be "filename (on hostname)" for a remote file or "filename (in trash)" - * for a file in the trash. This is useful for instance as the window title - * when displaying a directory or for a bookmarks menu. - * - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION "standard::description" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_ICON: - * - * A key in the "standard" namespace for getting the icon for the file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT. - * The value for this key should contain a #GIcon. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_ICON "standard::icon" /* object (GIcon) */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON: - * - * A key in the "standard" namespace for getting the symbolic icon for the file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT. - * The value for this key should contain a #GIcon. - * - * Since: 2.34 - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON "standard::symbolic-icon" /* object (GIcon) */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE: - * - * A key in the "standard" namespace for getting the content type of the file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * The value for this key should contain a valid content type. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "standard::content-type" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE: - * - * A key in the "standard" namespace for getting the fast content type. - * The fast content type isn't as reliable as the regular one, as it - * only uses the filename to guess it, but it is faster to calculate than the - * regular content type. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * - **/ -#define G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE "standard::fast-content-type" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SIZE: - * - * A key in the "standard" namespace for getting the file's size (in bytes). - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SIZE "standard::size" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE: - * - * A key in the "standard" namespace for getting the amount of disk space - * that is consumed by the file (in bytes). This will generally be larger - * than the file size (due to block size overhead) but can occasionally be - * smaller (for example, for sparse files). - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - * - * Since: 2.20 - **/ -#define G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE "standard::allocated-size" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET: - * - * A key in the "standard" namespace for getting the symlink target, if the file - * is a symlink. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET "standard::symlink-target" /* byte string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_TARGET_URI: - * - * A key in the "standard" namespace for getting the target URI for the file, in - * the case of %G_FILE_TYPE_SHORTCUT or %G_FILE_TYPE_MOUNTABLE files. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_TARGET_URI "standard::target-uri" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER: - * - * A key in the "standard" namespace for setting the sort order of a file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_INT32. - * An example use would be in file managers, which would use this key - * to set the order files are displayed. Files with smaller sort order - * should be sorted first, and files without sort order as if sort order - * was zero. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER "standard::sort-order" /* int32 */ - -/* Entity tags, used to avoid missing updates on save */ - -/** - * G_FILE_ATTRIBUTE_ETAG_VALUE: - * - * A key in the "etag" namespace for getting the value of the file's - * entity tag. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_ETAG_VALUE "etag::value" /* string */ - -/* File identifier, for e.g. avoiding loops when doing recursive - * directory scanning - */ - -/** - * G_FILE_ATTRIBUTE_ID_FILE: - * - * A key in the "id" namespace for getting a file identifier. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * An example use would be during listing files, to avoid recursive - * directory scanning. - **/ -#define G_FILE_ATTRIBUTE_ID_FILE "id::file" /* string */ - -/** - * G_FILE_ATTRIBUTE_ID_FILESYSTEM: - * - * A key in the "id" namespace for getting the file system identifier. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * An example use would be during drag and drop to see if the source - * and target are on the same filesystem (default to move) or not (default - * to copy). - **/ -#define G_FILE_ATTRIBUTE_ID_FILESYSTEM "id::filesystem" /* string */ - -/* Calculated Access Rights for current user */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_READ: - * - * A key in the "access" namespace for getting read privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to read the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_READ "access::can-read" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE: - * - * A key in the "access" namespace for getting write privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to write to the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE "access::can-write" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE: - * - * A key in the "access" namespace for getting execution privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to execute the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE "access::can-execute" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE: - * - * A key in the "access" namespace for checking deletion privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to delete the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE "access::can-delete" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH: - * - * A key in the "access" namespace for checking trashing privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to move the file to - * the trash. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH "access::can-trash" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME: - * - * A key in the "access" namespace for checking renaming privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to rename the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME "access::can-rename" /* boolean */ - -/* TODO: Should we have special version for directories? can_enumerate, etc */ - -/* Mountable attributes */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) is mountable. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT "mountable::can-mount" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) is unmountable. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT "mountable::can-unmount" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be ejected. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT "mountable::can-eject" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE: - * - * A key in the "mountable" namespace for getting the unix device. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE "mountable::unix-device" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE: - * - * A key in the "mountable" namespace for getting the unix device file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * - * Since: 2.22 - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE "mountable::unix-device-file" /* string */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI: - * - * A key in the "mountable" namespace for getting the HAL UDI for the mountable - * file. Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI "mountable::hal-udi" /* string */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be started. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START "mountable::can-start" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be started - * degraded. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED "mountable::can-start-degraded" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be stopped. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP "mountable::can-stop" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE: - * - * A key in the "mountable" namespace for getting the #GDriveStartStopType. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE "mountable::start-stop-type" /* uint32 (GDriveStartStopType) */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be polled. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL "mountable::can-poll" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) - * is automatically polled for media. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC "mountable::is-media-check-automatic" /* boolean */ - -/* Time attributes */ - -/** - * G_FILE_ATTRIBUTE_TIME_MODIFIED: - * - * A key in the "time" namespace for getting the time the file was last - * modified. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64, and contains the UNIX time since the - * file was modified. - **/ -#define G_FILE_ATTRIBUTE_TIME_MODIFIED "time::modified" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC: - * - * A key in the "time" namespace for getting the miliseconds of the time - * the file was last modified. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_MODIFIED. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC "time::modified-usec" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TIME_ACCESS: - * - * A key in the "time" namespace for getting the time the file was last - * accessed. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64, and contains the UNIX time since the - * file was last accessed. - **/ -#define G_FILE_ATTRIBUTE_TIME_ACCESS "time::access" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_ACCESS_USEC: - * - * A key in the "time" namespace for getting the microseconds of the time - * the file was last accessed. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_ACCESS. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_ACCESS_USEC "time::access-usec" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CHANGED: - * - * A key in the "time" namespace for getting the time the file was last - * changed. Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64, - * and contains the UNIX time since the file was last changed. - * - * This corresponds to the traditional UNIX ctime. - **/ -#define G_FILE_ATTRIBUTE_TIME_CHANGED "time::changed" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CHANGED_USEC: - * - * A key in the "time" namespace for getting the microseconds of the time - * the file was last changed. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_CHANGED. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_CHANGED_USEC "time::changed-usec" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CREATED: - * - * A key in the "time" namespace for getting the time the file was created. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64, - * and contains the UNIX time since the file was created. - * - * This corresponds to the NTFS ctime. - **/ -#define G_FILE_ATTRIBUTE_TIME_CREATED "time::created" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CREATED_USEC: - * - * A key in the "time" namespace for getting the microseconds of the time - * the file was created. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_CREATED. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_CREATED_USEC "time::created-usec" /* uint32 */ - -/* Unix specific attributes */ - -/** - * G_FILE_ATTRIBUTE_UNIX_DEVICE: - * - * A key in the "unix" namespace for getting the device id of the device the - * file is located on (see stat() documentation). This attribute is only - * available for UNIX file systems. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_DEVICE "unix::device" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_INODE: - * - * A key in the "unix" namespace for getting the inode of the file. - * This attribute is only available for UNIX file systems. Corresponding - * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_UNIX_INODE "unix::inode" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_MODE: - * - * A key in the "unix" namespace for getting the mode of the file - * (e.g. whether the file is a regular file, symlink, etc). See lstat() - * documentation. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_MODE "unix::mode" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_NLINK: - * - * A key in the "unix" namespace for getting the number of hard links - * for a file. See lstat() documentation. This attribute is only available - * for UNIX file systems. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_NLINK "unix::nlink" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_UID: - * - * A key in the "unix" namespace for getting the user ID for the file. - * This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_UID "unix::uid" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_GID: - * - * A key in the "unix" namespace for getting the group ID for the file. - * This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_GID "unix::gid" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_RDEV: - * - * A key in the "unix" namespace for getting the device ID for the file - * (if it is a special file). See lstat() documentation. This attribute - * is only available for UNIX file systems. Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_RDEV "unix::rdev" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE: - * - * A key in the "unix" namespace for getting the block size for the file - * system. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE "unix::block-size" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_BLOCKS: - * - * A key in the "unix" namespace for getting the number of blocks allocated - * for the file. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_UNIX_BLOCKS "unix::blocks" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT: - * - * A key in the "unix" namespace for checking if the file represents a - * UNIX mount point. This attribute is %TRUE if the file is a UNIX mount - * point. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT "unix::is-mountpoint" /* boolean */ - -/* DOS specific attributes */ - -/** - * G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE: - * - * A key in the "dos" namespace for checking if the file's archive flag - * is set. This attribute is %TRUE if the archive flag is set. This attribute - * is only available for DOS file systems. Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE "dos::is-archive" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_DOS_IS_SYSTEM: - * - * A key in the "dos" namespace for checking if the file's backup flag - * is set. This attribute is %TRUE if the backup flag is set. This attribute - * is only available for DOS file systems. Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_DOS_IS_SYSTEM "dos::is-system" /* boolean */ - -/* Owner attributes */ - -/** - * G_FILE_ATTRIBUTE_OWNER_USER: - * - * A key in the "owner" namespace for getting the user name of the - * file's owner. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_OWNER_USER "owner::user" /* string */ - -/** - * G_FILE_ATTRIBUTE_OWNER_USER_REAL: - * - * A key in the "owner" namespace for getting the real name of the - * user that owns the file. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_OWNER_USER_REAL "owner::user-real" /* string */ - -/** - * G_FILE_ATTRIBUTE_OWNER_GROUP: - * - * A key in the "owner" namespace for getting the file owner's group. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_OWNER_GROUP "owner::group" /* string */ - -/* Thumbnails */ - -/** - * G_FILE_ATTRIBUTE_THUMBNAIL_PATH: - * - * A key in the "thumbnail" namespace for getting the path to the thumbnail - * image. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - **/ -#define G_FILE_ATTRIBUTE_THUMBNAIL_PATH "thumbnail::path" /* bytestring */ -/** - * G_FILE_ATTRIBUTE_THUMBNAILING_FAILED: - * - * A key in the "thumbnail" namespace for checking if thumbnailing failed. - * This attribute is %TRUE if thumbnailing failed. Corresponding - * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_THUMBNAILING_FAILED "thumbnail::failed" /* boolean */ - -/* Preview */ - -/** - * G_FILE_ATTRIBUTE_PREVIEW_ICON: - * - * A key in the "preview" namespace for getting a #GIcon that can be - * used to get preview of the file. For example, it may be a low - * resolution thumbnail without metadata. Corresponding - * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT. The value - * for this key should contain a #GIcon. - * - * Since: 2.20 - **/ -#define G_FILE_ATTRIBUTE_PREVIEW_ICON "preview::icon" /* object (GIcon) */ - -/* File system info (for g_file_get_filesystem_info) */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_SIZE: - * - * A key in the "filesystem" namespace for getting the total size (in bytes) of the file system, - * used in g_file_query_filesystem_info(). Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_SIZE "filesystem::size" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_FREE: - * - * A key in the "filesystem" namespace for getting the number of bytes of free space left on the - * file system. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_FREE "filesystem::free" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_USED: - * - * A key in the "filesystem" namespace for getting the number of bytes of used on the - * file system. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64. - * - * Since: 2.32 - */ -#define G_FILE_ATTRIBUTE_FILESYSTEM_USED "filesystem::used" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_TYPE: - * - * A key in the "filesystem" namespace for getting the file system's type. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_TYPE "filesystem::type" /* string */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_READONLY: - * - * A key in the "filesystem" namespace for checking if the file system - * is read only. Is set to %TRUE if the file system is read only. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_READONLY "filesystem::readonly" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW: - * - * A key in the "filesystem" namespace for hinting a file manager - * application whether it should preview (e.g. thumbnail) files on the - * file system. The value for this key contain a - * #GFilesystemPreviewType. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW "filesystem::use-preview" /* uint32 (GFilesystemPreviewType) */ - -/** - * G_FILE_ATTRIBUTE_GVFS_BACKEND: - * - * A key in the "gvfs" namespace that gets the name of the current - * GVFS backend in use. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_GVFS_BACKEND "gvfs::backend" /* string */ - -/** - * G_FILE_ATTRIBUTE_SELINUX_CONTEXT: - * - * A key in the "selinux" namespace for getting the file's SELinux - * context. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. Note that this attribute is only - * available if GLib has been built with SELinux support. - **/ -#define G_FILE_ATTRIBUTE_SELINUX_CONTEXT "selinux::context" /* string */ - -/** - * G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT: - * - * A key in the "trash" namespace. When requested against - * "trash:///" returns the number of (toplevel) items in the trash folder. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT "trash::item-count" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TRASH_ORIG_PATH: - * - * A key in the "trash" namespace. When requested against - * items in "trash:///", will return the original path to the file before it - * was trashed. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - * - * Since: 2.24. - **/ -#define G_FILE_ATTRIBUTE_TRASH_ORIG_PATH "trash::orig-path" /* byte string */ - -/** - * G_FILE_ATTRIBUTE_TRASH_DELETION_DATE: - * - * A key in the "trash" namespace. When requested against - * items in "trash:///", will return the date and time when the file - * was trashed. The format of the returned string is YYYY-MM-DDThh:mm:ss. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * - * Since: 2.24. - **/ -#define G_FILE_ATTRIBUTE_TRASH_DELETION_DATE "trash::deletion-date" /* string */ - -GType g_file_info_get_type (void) G_GNUC_CONST; - -GFileInfo * g_file_info_new (void); -GFileInfo * g_file_info_dup (GFileInfo *other); -void g_file_info_copy_into (GFileInfo *src_info, - GFileInfo *dest_info); -gboolean g_file_info_has_attribute (GFileInfo *info, - const char *attribute); -gboolean g_file_info_has_namespace (GFileInfo *info, - const char *name_space); -char ** g_file_info_list_attributes (GFileInfo *info, - const char *name_space); -gboolean g_file_info_get_attribute_data (GFileInfo *info, - const char *attribute, - GFileAttributeType *type, - gpointer *value_pp, - GFileAttributeStatus *status); -GFileAttributeType g_file_info_get_attribute_type (GFileInfo *info, - const char *attribute); -void g_file_info_remove_attribute (GFileInfo *info, - const char *attribute); -GFileAttributeStatus g_file_info_get_attribute_status (GFileInfo *info, - const char *attribute); -gboolean g_file_info_set_attribute_status (GFileInfo *info, - const char *attribute, - GFileAttributeStatus status); -char * g_file_info_get_attribute_as_string (GFileInfo *info, - const char *attribute); -const char * g_file_info_get_attribute_string (GFileInfo *info, - const char *attribute); -const char * g_file_info_get_attribute_byte_string (GFileInfo *info, - const char *attribute); -gboolean g_file_info_get_attribute_boolean (GFileInfo *info, - const char *attribute); -guint32 g_file_info_get_attribute_uint32 (GFileInfo *info, - const char *attribute); -gint32 g_file_info_get_attribute_int32 (GFileInfo *info, - const char *attribute); -guint64 g_file_info_get_attribute_uint64 (GFileInfo *info, - const char *attribute); -gint64 g_file_info_get_attribute_int64 (GFileInfo *info, - const char *attribute); -GObject * g_file_info_get_attribute_object (GFileInfo *info, - const char *attribute); -char ** g_file_info_get_attribute_stringv (GFileInfo *info, - const char *attribute); - -void g_file_info_set_attribute (GFileInfo *info, - const char *attribute, - GFileAttributeType type, - gpointer value_p); -void g_file_info_set_attribute_string (GFileInfo *info, - const char *attribute, - const char *attr_value); -void g_file_info_set_attribute_byte_string (GFileInfo *info, - const char *attribute, - const char *attr_value); -void g_file_info_set_attribute_boolean (GFileInfo *info, - const char *attribute, - gboolean attr_value); -void g_file_info_set_attribute_uint32 (GFileInfo *info, - const char *attribute, - guint32 attr_value); -void g_file_info_set_attribute_int32 (GFileInfo *info, - const char *attribute, - gint32 attr_value); -void g_file_info_set_attribute_uint64 (GFileInfo *info, - const char *attribute, - guint64 attr_value); -void g_file_info_set_attribute_int64 (GFileInfo *info, - const char *attribute, - gint64 attr_value); -void g_file_info_set_attribute_object (GFileInfo *info, - const char *attribute, - GObject *attr_value); -void g_file_info_set_attribute_stringv (GFileInfo *info, - const char *attribute, - char **attr_value); - -void g_file_info_clear_status (GFileInfo *info); - -/* Helper getters: */ -GFileType g_file_info_get_file_type (GFileInfo *info); -gboolean g_file_info_get_is_hidden (GFileInfo *info); -gboolean g_file_info_get_is_backup (GFileInfo *info); -gboolean g_file_info_get_is_symlink (GFileInfo *info); -const char * g_file_info_get_name (GFileInfo *info); -const char * g_file_info_get_display_name (GFileInfo *info); -const char * g_file_info_get_edit_name (GFileInfo *info); -GIcon * g_file_info_get_icon (GFileInfo *info); -GIcon * g_file_info_get_symbolic_icon (GFileInfo *info); -const char * g_file_info_get_content_type (GFileInfo *info); -goffset g_file_info_get_size (GFileInfo *info); -void g_file_info_get_modification_time (GFileInfo *info, - GTimeVal *result); -const char * g_file_info_get_symlink_target (GFileInfo *info); -const char * g_file_info_get_etag (GFileInfo *info); -gint32 g_file_info_get_sort_order (GFileInfo *info); - -void g_file_info_set_attribute_mask (GFileInfo *info, - GFileAttributeMatcher *mask); -void g_file_info_unset_attribute_mask (GFileInfo *info); - -/* Helper setters: */ -void g_file_info_set_file_type (GFileInfo *info, - GFileType type); -void g_file_info_set_is_hidden (GFileInfo *info, - gboolean is_hidden); -void g_file_info_set_is_symlink (GFileInfo *info, - gboolean is_symlink); -void g_file_info_set_name (GFileInfo *info, - const char *name); -void g_file_info_set_display_name (GFileInfo *info, - const char *display_name); -void g_file_info_set_edit_name (GFileInfo *info, - const char *edit_name); -void g_file_info_set_icon (GFileInfo *info, - GIcon *icon); -void g_file_info_set_symbolic_icon (GFileInfo *info, - GIcon *icon); -void g_file_info_set_content_type (GFileInfo *info, - const char *content_type); -void g_file_info_set_size (GFileInfo *info, - goffset size); -void g_file_info_set_modification_time (GFileInfo *info, - GTimeVal *mtime); -void g_file_info_set_symlink_target (GFileInfo *info, - const char *symlink_target); -void g_file_info_set_sort_order (GFileInfo *info, - gint32 sort_order); - -#define G_TYPE_FILE_ATTRIBUTE_MATCHER (g_file_attribute_matcher_get_type ()) -GType g_file_attribute_matcher_get_type (void) G_GNUC_CONST; - -GFileAttributeMatcher *g_file_attribute_matcher_new (const char *attributes); -GFileAttributeMatcher *g_file_attribute_matcher_ref (GFileAttributeMatcher *matcher); -void g_file_attribute_matcher_unref (GFileAttributeMatcher *matcher); -GFileAttributeMatcher *g_file_attribute_matcher_subtract (GFileAttributeMatcher *matcher, - GFileAttributeMatcher *subtract); -gboolean g_file_attribute_matcher_matches (GFileAttributeMatcher *matcher, - const char *attribute); -gboolean g_file_attribute_matcher_matches_only (GFileAttributeMatcher *matcher, - const char *attribute); -gboolean g_file_attribute_matcher_enumerate_namespace (GFileAttributeMatcher *matcher, - const char *ns); -const char * g_file_attribute_matcher_enumerate_next (GFileAttributeMatcher *matcher); -GLIB_AVAILABLE_IN_2_32 -char * g_file_attribute_matcher_to_string (GFileAttributeMatcher *matcher); - -G_END_DECLS - -#endif /* __G_FILE_INFO_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileinputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileinputstream.h deleted file mode 100644 index 08c056e1..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileinputstream.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_INPUT_STREAM_H__ -#define __G_FILE_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_INPUT_STREAM (g_file_input_stream_get_type ()) -#define G_FILE_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_INPUT_STREAM, GFileInputStream)) -#define G_FILE_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_INPUT_STREAM, GFileInputStreamClass)) -#define G_IS_FILE_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_INPUT_STREAM)) -#define G_IS_FILE_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_INPUT_STREAM)) -#define G_FILE_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_INPUT_STREAM, GFileInputStreamClass)) - -/** - * GFileInputStream: - * - * A subclass of GInputStream for opened files. This adds - * a few file-specific operations and seeking. - * - * #GFileInputStream implements #GSeekable. - **/ -typedef struct _GFileInputStreamClass GFileInputStreamClass; -typedef struct _GFileInputStreamPrivate GFileInputStreamPrivate; - -struct _GFileInputStream -{ - GInputStream parent_instance; - - /*< private >*/ - GFileInputStreamPrivate *priv; -}; - -struct _GFileInputStreamClass -{ - GInputStreamClass parent_class; - - goffset (* tell) (GFileInputStream *stream); - gboolean (* can_seek) (GFileInputStream *stream); - gboolean (* seek) (GFileInputStream *stream, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - GFileInfo * (* query_info) (GFileInputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFileInputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFileInputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_input_stream_get_type (void) G_GNUC_CONST; - -GFileInfo *g_file_input_stream_query_info (GFileInputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_input_stream_query_info_async (GFileInputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo *g_file_input_stream_query_info_finish (GFileInputStream *stream, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_FILE_FILE_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileiostream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileiostream.h deleted file mode 100644 index 31497e38..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileiostream.h +++ /dev/null @@ -1,118 +0,0 @@ -/* GIO - GLib Input, Io and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_IO_STREAM_H__ -#define __G_FILE_IO_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_IO_STREAM (g_file_io_stream_get_type ()) -#define G_FILE_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_IO_STREAM, GFileIOStream)) -#define G_FILE_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_IO_STREAM, GFileIOStreamClass)) -#define G_IS_FILE_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_IO_STREAM)) -#define G_IS_FILE_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_IO_STREAM)) -#define G_FILE_IO_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_IO_STREAM, GFileIOStreamClass)) - -/** - * GFileIOStream: - * - * A subclass of GIOStream for opened files. This adds - * a few file-specific operations and seeking and truncating. - * - * #GFileIOStream implements GSeekable. - **/ -typedef struct _GFileIOStreamClass GFileIOStreamClass; -typedef struct _GFileIOStreamPrivate GFileIOStreamPrivate; - -struct _GFileIOStream -{ - GIOStream parent_instance; - - /*< private >*/ - GFileIOStreamPrivate *priv; -}; - -struct _GFileIOStreamClass -{ - GIOStreamClass parent_class; - - goffset (* tell) (GFileIOStream *stream); - gboolean (* can_seek) (GFileIOStream *stream); - gboolean (* seek) (GFileIOStream *stream, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - gboolean (* can_truncate) (GFileIOStream *stream); - gboolean (* truncate_fn) (GFileIOStream *stream, - goffset size, - GCancellable *cancellable, - GError **error); - GFileInfo * (* query_info) (GFileIOStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFileIOStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFileIOStream *stream, - GAsyncResult *result, - GError **error); - char * (* get_etag) (GFileIOStream *stream); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_io_stream_get_type (void) G_GNUC_CONST; - -GFileInfo *g_file_io_stream_query_info (GFileIOStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_io_stream_query_info_async (GFileIOStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo *g_file_io_stream_query_info_finish (GFileIOStream *stream, - GAsyncResult *result, - GError **error); -char * g_file_io_stream_get_etag (GFileIOStream *stream); - -G_END_DECLS - -#endif /* __G_FILE_FILE_IO_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfilemonitor.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfilemonitor.h deleted file mode 100644 index 8e27d22e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfilemonitor.h +++ /dev/null @@ -1,95 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_MONITOR_H__ -#define __G_FILE_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_MONITOR (g_file_monitor_get_type ()) -#define G_FILE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_MONITOR, GFileMonitor)) -#define G_FILE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_MONITOR, GFileMonitorClass)) -#define G_IS_FILE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_MONITOR)) -#define G_IS_FILE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_MONITOR)) -#define G_FILE_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_MONITOR, GFileMonitorClass)) - -typedef struct _GFileMonitorClass GFileMonitorClass; -typedef struct _GFileMonitorPrivate GFileMonitorPrivate; - -/** - * GFileMonitor: - * - * Watches for changes to a file. - **/ -struct _GFileMonitor -{ - GObject parent_instance; - - /*< private >*/ - GFileMonitorPrivate *priv; -}; - -struct _GFileMonitorClass -{ - GObjectClass parent_class; - - /* Signals */ - void (* changed) (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type); - - /* Virtual Table */ - gboolean (* cancel) (GFileMonitor *monitor); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_monitor_get_type (void) G_GNUC_CONST; - -gboolean g_file_monitor_cancel (GFileMonitor *monitor); -gboolean g_file_monitor_is_cancelled (GFileMonitor *monitor); -void g_file_monitor_set_rate_limit (GFileMonitor *monitor, - gint limit_msecs); - - -/* For implementations */ -void g_file_monitor_emit_event (GFileMonitor *monitor, - GFile *child, - GFile *other_file, - GFileMonitorEvent event_type); - -G_END_DECLS - -#endif /* __G_FILE_MONITOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfilenamecompleter.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfilenamecompleter.h deleted file mode 100644 index 1899c27d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfilenamecompleter.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILENAME_COMPLETER_H__ -#define __G_FILENAME_COMPLETER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILENAME_COMPLETER (g_filename_completer_get_type ()) -#define G_FILENAME_COMPLETER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILENAME_COMPLETER, GFilenameCompleter)) -#define G_FILENAME_COMPLETER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILENAME_COMPLETER, GFilenameCompleterClass)) -#define G_FILENAME_COMPLETER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILENAME_COMPLETER, GFilenameCompleterClass)) -#define G_IS_FILENAME_COMPLETER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILENAME_COMPLETER)) -#define G_IS_FILENAME_COMPLETER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILENAME_COMPLETER)) - -/** - * GFilenameCompleter: - * - * Completes filenames based on files that exist within the file system. - **/ -typedef struct _GFilenameCompleterClass GFilenameCompleterClass; - -struct _GFilenameCompleterClass -{ - GObjectClass parent_class; - - /*< public >*/ - /* signals */ - void (* got_completion_data) (GFilenameCompleter *filename_completer); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); -}; - -GType g_filename_completer_get_type (void) G_GNUC_CONST; - -GFilenameCompleter *g_filename_completer_new (void); - -char * g_filename_completer_get_completion_suffix (GFilenameCompleter *completer, - const char *initial_text); -char ** g_filename_completer_get_completions (GFilenameCompleter *completer, - const char *initial_text); -void g_filename_completer_set_dirs_only (GFilenameCompleter *completer, - gboolean dirs_only); - -G_END_DECLS - -#endif /* __G_FILENAME_COMPLETER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfileoutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfileoutputstream.h deleted file mode 100644 index 3b5f85d3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfileoutputstream.h +++ /dev/null @@ -1,119 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_OUTPUT_STREAM_H__ -#define __G_FILE_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_OUTPUT_STREAM (g_file_output_stream_get_type ()) -#define G_FILE_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStream)) -#define G_FILE_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStreamClass)) -#define G_IS_FILE_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_OUTPUT_STREAM)) -#define G_IS_FILE_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_OUTPUT_STREAM)) -#define G_FILE_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStreamClass)) - -/** - * GFileOutputStream: - * - * A subclass of GOutputStream for opened files. This adds - * a few file-specific operations and seeking and truncating. - * - * #GFileOutputStream implements GSeekable. - **/ -typedef struct _GFileOutputStreamClass GFileOutputStreamClass; -typedef struct _GFileOutputStreamPrivate GFileOutputStreamPrivate; - -struct _GFileOutputStream -{ - GOutputStream parent_instance; - - /*< private >*/ - GFileOutputStreamPrivate *priv; -}; - -struct _GFileOutputStreamClass -{ - GOutputStreamClass parent_class; - - goffset (* tell) (GFileOutputStream *stream); - gboolean (* can_seek) (GFileOutputStream *stream); - gboolean (* seek) (GFileOutputStream *stream, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - gboolean (* can_truncate) (GFileOutputStream *stream); - gboolean (* truncate_fn) (GFileOutputStream *stream, - goffset size, - GCancellable *cancellable, - GError **error); - GFileInfo * (* query_info) (GFileOutputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFileOutputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFileOutputStream *stream, - GAsyncResult *result, - GError **error); - char * (* get_etag) (GFileOutputStream *stream); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_output_stream_get_type (void) G_GNUC_CONST; - - -GFileInfo *g_file_output_stream_query_info (GFileOutputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_output_stream_query_info_async (GFileOutputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo *g_file_output_stream_query_info_finish (GFileOutputStream *stream, - GAsyncResult *result, - GError **error); -char * g_file_output_stream_get_etag (GFileOutputStream *stream); - -G_END_DECLS - -#endif /* __G_FILE_FILE_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfilterinputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfilterinputstream.h deleted file mode 100644 index 1514104a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfilterinputstream.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILTER_INPUT_STREAM_H__ -#define __G_FILTER_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILTER_INPUT_STREAM (g_filter_input_stream_get_type ()) -#define G_FILTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStream)) -#define G_FILTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamClass)) -#define G_IS_FILTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILTER_INPUT_STREAM)) -#define G_IS_FILTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILTER_INPUT_STREAM)) -#define G_FILTER_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamClass)) - -/** - * GFilterInputStream: - * - * A base class for all input streams that work on an underlying stream. - **/ -typedef struct _GFilterInputStreamClass GFilterInputStreamClass; - -struct _GFilterInputStream -{ - GInputStream parent_instance; - - /**/ - GInputStream *base_stream; -}; - -struct _GFilterInputStreamClass -{ - GInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); -}; - - -GType g_filter_input_stream_get_type (void) G_GNUC_CONST; -GInputStream * g_filter_input_stream_get_base_stream (GFilterInputStream *stream); -gboolean g_filter_input_stream_get_close_base_stream (GFilterInputStream *stream); -void g_filter_input_stream_set_close_base_stream (GFilterInputStream *stream, - gboolean close_base); - -G_END_DECLS - -#endif /* __G_FILTER_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gfilteroutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gfilteroutputstream.h deleted file mode 100644 index 10350e5a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gfilteroutputstream.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILTER_OUTPUT_STREAM_H__ -#define __G_FILTER_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILTER_OUTPUT_STREAM (g_filter_output_stream_get_type ()) -#define G_FILTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStream)) -#define G_FILTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamClass)) -#define G_IS_FILTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILTER_OUTPUT_STREAM)) -#define G_IS_FILTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILTER_OUTPUT_STREAM)) -#define G_FILTER_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamClass)) - -/** - * GFilterOutputStream: - * - * A base class for all output streams that work on an underlying stream. - **/ -typedef struct _GFilterOutputStreamClass GFilterOutputStreamClass; - -struct _GFilterOutputStream -{ - GOutputStream parent_instance; - - /*< protected >*/ - GOutputStream *base_stream; -}; - -struct _GFilterOutputStreamClass -{ - GOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); -}; - - -GType g_filter_output_stream_get_type (void) G_GNUC_CONST; -GOutputStream * g_filter_output_stream_get_base_stream (GFilterOutputStream *stream); -gboolean g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream); -void g_filter_output_stream_set_close_base_stream (GFilterOutputStream *stream, - gboolean close_base); - -G_END_DECLS - -#endif /* __G_FILTER_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gicon.h b/GstreamerHelper/x64/include/glib-2.0/gio/gicon.h deleted file mode 100644 index 8f339f69..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gicon.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ICON_H__ -#define __G_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_ICON (g_icon_get_type ()) -#define G_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ICON, GIcon)) -#define G_IS_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ICON)) -#define G_ICON_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ICON, GIconIface)) - -/** - * GIcon: - * - * An abstract type that specifies an icon. - **/ -typedef struct _GIconIface GIconIface; - -/** - * GIconIface: - * @g_iface: The parent interface. - * @hash: A hash for a given #GIcon. - * @equal: Checks if two #GIcons are equal. - * @to_tokens: Serializes a #GIcon into tokens. The tokens must not - * contain any whitespace. Don't implement if the #GIcon can't be - * serialized (Since 2.20). - * @from_tokens: Constructs a #GIcon from tokens. Set the #GError if - * the tokens are malformed. Don't implement if the #GIcon can't be - * serialized (Since 2.20). - * - * GIconIface is used to implement GIcon types for various - * different systems. See #GThemedIcon and #GLoadableIcon for - * examples of how to implement this interface. - */ -struct _GIconIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - guint (* hash) (GIcon *icon); - gboolean (* equal) (GIcon *icon1, - GIcon *icon2); - gboolean (* to_tokens) (GIcon *icon, - GPtrArray *tokens, - gint *out_version); - GIcon * (* from_tokens) (gchar **tokens, - gint num_tokens, - gint version, - GError **error); -}; - -GType g_icon_get_type (void) G_GNUC_CONST; - -guint g_icon_hash (gconstpointer icon); -gboolean g_icon_equal (GIcon *icon1, - GIcon *icon2); -gchar *g_icon_to_string (GIcon *icon); -GIcon *g_icon_new_for_string (const gchar *str, - GError **error); - -G_END_DECLS - -#endif /* __G_ICON_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/ginetaddress.h b/GstreamerHelper/x64/include/glib-2.0/gio/ginetaddress.h deleted file mode 100644 index d523cd65..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/ginetaddress.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Christian Kellner, Samuel Cormier-Iijima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INET_ADDRESS_H__ -#define __G_INET_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INET_ADDRESS (g_inet_address_get_type ()) -#define G_INET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INET_ADDRESS, GInetAddress)) -#define G_INET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INET_ADDRESS, GInetAddressClass)) -#define G_IS_INET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INET_ADDRESS)) -#define G_IS_INET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INET_ADDRESS)) -#define G_INET_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INET_ADDRESS, GInetAddressClass)) - -typedef struct _GInetAddressClass GInetAddressClass; -typedef struct _GInetAddressPrivate GInetAddressPrivate; - -struct _GInetAddress -{ - GObject parent_instance; - - /*< private >*/ - GInetAddressPrivate *priv; -}; - -struct _GInetAddressClass -{ - GObjectClass parent_class; - - gchar * (*to_string) (GInetAddress *address); - const guint8 * (*to_bytes) (GInetAddress *address); -}; - -GType g_inet_address_get_type (void) G_GNUC_CONST; - -GInetAddress * g_inet_address_new_from_string (const gchar *string); - -GInetAddress * g_inet_address_new_from_bytes (const guint8 *bytes, - GSocketFamily family); - -GInetAddress * g_inet_address_new_loopback (GSocketFamily family); - -GInetAddress * g_inet_address_new_any (GSocketFamily family); - -gboolean g_inet_address_equal (GInetAddress *address, - GInetAddress *other_address); - -gchar * g_inet_address_to_string (GInetAddress *address); - -const guint8 * g_inet_address_to_bytes (GInetAddress *address); - -gsize g_inet_address_get_native_size (GInetAddress *address); - -GSocketFamily g_inet_address_get_family (GInetAddress *address); - -gboolean g_inet_address_get_is_any (GInetAddress *address); - -gboolean g_inet_address_get_is_loopback (GInetAddress *address); - -gboolean g_inet_address_get_is_link_local (GInetAddress *address); - -gboolean g_inet_address_get_is_site_local (GInetAddress *address); - -gboolean g_inet_address_get_is_multicast (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_global (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_link_local (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_node_local (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_org_local (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_site_local (GInetAddress *address); - -G_END_DECLS - -#endif /* __G_INET_ADDRESS_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/ginetaddressmask.h b/GstreamerHelper/x64/include/glib-2.0/gio/ginetaddressmask.h deleted file mode 100644 index 53b0aac6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/ginetaddressmask.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INET_ADDRESS_MASK_H__ -#define __G_INET_ADDRESS_MASK_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INET_ADDRESS_MASK (g_inet_address_mask_get_type ()) -#define G_INET_ADDRESS_MASK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INET_ADDRESS_MASK, GInetAddressMask)) -#define G_INET_ADDRESS_MASK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INET_ADDRESS_MASK, GInetAddressMaskClass)) -#define G_IS_INET_ADDRESS_MASK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INET_ADDRESS_MASK)) -#define G_IS_INET_ADDRESS_MASK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INET_ADDRESS_MASK)) -#define G_INET_ADDRESS_MASK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INET_ADDRESS_MASK, GInetAddressMaskClass)) - -typedef struct _GInetAddressMaskClass GInetAddressMaskClass; -typedef struct _GInetAddressMaskPrivate GInetAddressMaskPrivate; - -struct _GInetAddressMask -{ - GObject parent_instance; - - /*< private >*/ - GInetAddressMaskPrivate *priv; -}; - -struct _GInetAddressMaskClass -{ - GObjectClass parent_class; - -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_inet_address_mask_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GInetAddressMask *g_inet_address_mask_new (GInetAddress *addr, - guint length, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -GInetAddressMask *g_inet_address_mask_new_from_string (const gchar *mask_string, - GError **error); -gchar *g_inet_address_mask_to_string (GInetAddressMask *mask); - -GSocketFamily g_inet_address_mask_get_family (GInetAddressMask *mask); -GInetAddress *g_inet_address_mask_get_address (GInetAddressMask *mask); -guint g_inet_address_mask_get_length (GInetAddressMask *mask); - -gboolean g_inet_address_mask_matches (GInetAddressMask *mask, - GInetAddress *address); -gboolean g_inet_address_mask_equal (GInetAddressMask *mask, - GInetAddressMask *mask2); - -G_END_DECLS - -#endif /* __G_INET_ADDRESS_MASK_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/ginetsocketaddress.h b/GstreamerHelper/x64/include/glib-2.0/gio/ginetsocketaddress.h deleted file mode 100644 index ab20235d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/ginetsocketaddress.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Christian Kellner, Samuel Cormier-Iijima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INET_SOCKET_ADDRESS_H__ -#define __G_INET_SOCKET_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INET_SOCKET_ADDRESS (g_inet_socket_address_get_type ()) -#define G_INET_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INET_SOCKET_ADDRESS, GInetSocketAddress)) -#define G_INET_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INET_SOCKET_ADDRESS, GInetSocketAddressClass)) -#define G_IS_INET_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INET_SOCKET_ADDRESS)) -#define G_IS_INET_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INET_SOCKET_ADDRESS)) -#define G_INET_SOCKET_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INET_SOCKET_ADDRESS, GInetSocketAddressClass)) - -typedef struct _GInetSocketAddressClass GInetSocketAddressClass; -typedef struct _GInetSocketAddressPrivate GInetSocketAddressPrivate; - -struct _GInetSocketAddress -{ - GSocketAddress parent_instance; - - /*< private >*/ - GInetSocketAddressPrivate *priv; -}; - -struct _GInetSocketAddressClass -{ - GSocketAddressClass parent_class; -}; - -GType g_inet_socket_address_get_type (void) G_GNUC_CONST; - -GSocketAddress *g_inet_socket_address_new (GInetAddress *address, - guint16 port); - -GInetAddress * g_inet_socket_address_get_address (GInetSocketAddress *address); -guint16 g_inet_socket_address_get_port (GInetSocketAddress *address); - -GLIB_AVAILABLE_IN_2_32 -guint32 g_inet_socket_address_get_flowinfo (GInetSocketAddress *address); -GLIB_AVAILABLE_IN_2_32 -guint32 g_inet_socket_address_get_scope_id (GInetSocketAddress *address); - -G_END_DECLS - -#endif /* __G_INET_SOCKET_ADDRESS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/ginitable.h b/GstreamerHelper/x64/include/glib-2.0/gio/ginitable.h deleted file mode 100644 index 1a2d13d9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/ginitable.h +++ /dev/null @@ -1,96 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INITABLE_H__ -#define __G_INITABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INITABLE (g_initable_get_type ()) -#define G_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_INITABLE, GInitable)) -#define G_IS_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_INITABLE)) -#define G_INITABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_INITABLE, GInitableIface)) -#define G_TYPE_IS_INITABLE(type) (g_type_is_a ((type), G_TYPE_INITABLE)) - -/** - * GInitable: - * - * Interface for initializable objects. - * - * Since: 2.22 - **/ -typedef struct _GInitableIface GInitableIface; - -/** - * GInitableIface: - * @g_iface: The parent interface. - * @init: Initializes the object. - * - * Provides an interface for initializing object such that initialization - * may fail. - * - * Since: 2.22 - **/ -struct _GInitableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - gboolean (* init) (GInitable *initable, - GCancellable *cancellable, - GError **error); -}; - - -GType g_initable_get_type (void) G_GNUC_CONST; - -gboolean g_initable_init (GInitable *initable, - GCancellable *cancellable, - GError **error); - -gpointer g_initable_new (GType object_type, - GCancellable *cancellable, - GError **error, - const gchar *first_property_name, - ...); -gpointer g_initable_newv (GType object_type, - guint n_parameters, - GParameter *parameters, - GCancellable *cancellable, - GError **error); -GObject* g_initable_new_valist (GType object_type, - const gchar *first_property_name, - va_list var_args, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_INITABLE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/ginputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/ginputstream.h deleted file mode 100644 index e9b36f7e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/ginputstream.h +++ /dev/null @@ -1,188 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INPUT_STREAM_H__ -#define __G_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INPUT_STREAM (g_input_stream_get_type ()) -#define G_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INPUT_STREAM, GInputStream)) -#define G_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INPUT_STREAM, GInputStreamClass)) -#define G_IS_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INPUT_STREAM)) -#define G_IS_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INPUT_STREAM)) -#define G_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INPUT_STREAM, GInputStreamClass)) - -/** - * GInputStream: - * - * Base class for streaming input operations. - **/ -typedef struct _GInputStreamClass GInputStreamClass; -typedef struct _GInputStreamPrivate GInputStreamPrivate; - -struct _GInputStream -{ - GObject parent_instance; - - /*< private >*/ - GInputStreamPrivate *priv; -}; - -struct _GInputStreamClass -{ - GObjectClass parent_class; - - /* Sync ops: */ - - gssize (* read_fn) (GInputStream *stream, - void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - gssize (* skip) (GInputStream *stream, - gsize count, - GCancellable *cancellable, - GError **error); - gboolean (* close_fn) (GInputStream *stream, - GCancellable *cancellable, - GError **error); - - /* Async ops: (optional in derived classes) */ - void (* read_async) (GInputStream *stream, - void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* read_finish) (GInputStream *stream, - GAsyncResult *result, - GError **error); - void (* skip_async) (GInputStream *stream, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* skip_finish) (GInputStream *stream, - GAsyncResult *result, - GError **error); - void (* close_async) (GInputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GInputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_input_stream_get_type (void) G_GNUC_CONST; - -gssize g_input_stream_read (GInputStream *stream, - void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); -gboolean g_input_stream_read_all (GInputStream *stream, - void *buffer, - gsize count, - gsize *bytes_read, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -GBytes *g_input_stream_read_bytes (GInputStream *stream, - gsize count, - GCancellable *cancellable, - GError **error); -gssize g_input_stream_skip (GInputStream *stream, - gsize count, - GCancellable *cancellable, - GError **error); -gboolean g_input_stream_close (GInputStream *stream, - GCancellable *cancellable, - GError **error); -void g_input_stream_read_async (GInputStream *stream, - void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_input_stream_read_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); -GLIB_AVAILABLE_IN_2_34 -void g_input_stream_read_bytes_async (GInputStream *stream, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -GBytes *g_input_stream_read_bytes_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); -void g_input_stream_skip_async (GInputStream *stream, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_input_stream_skip_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); -void g_input_stream_close_async (GInputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_input_stream_close_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); - -/* For implementations: */ - -gboolean g_input_stream_is_closed (GInputStream *stream); -gboolean g_input_stream_has_pending (GInputStream *stream); -gboolean g_input_stream_set_pending (GInputStream *stream, - GError **error); -void g_input_stream_clear_pending (GInputStream *stream); - -G_END_DECLS - -#endif /* __G_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gio.h b/GstreamerHelper/x64/include/glib-2.0/gio/gio.h deleted file mode 100644 index 3fb914d2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gio.h +++ /dev/null @@ -1,162 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#ifndef __G_IO_H__ -#define __G_IO_H__ - -#define __GIO_GIO_H_INSIDE__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef __GIO_GIO_H_INSIDE__ - -#endif /* __G_IO_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gioenums.h b/GstreamerHelper/x64/include/glib-2.0/gio/gioenums.h deleted file mode 100644 index b3706237..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gioenums.h +++ /dev/null @@ -1,1658 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GIO_ENUMS_H__ -#define __GIO_ENUMS_H__ - -#include - -G_BEGIN_DECLS - - -/** - * GAppInfoCreateFlags: - * @G_APP_INFO_CREATE_NONE: No flags. - * @G_APP_INFO_CREATE_NEEDS_TERMINAL: Application opens in a terminal window. - * @G_APP_INFO_CREATE_SUPPORTS_URIS: Application supports URI arguments. - * @G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION: Application supports startup notification. Since 2.26 - * - * Flags used when creating a #GAppInfo. - */ -typedef enum { - G_APP_INFO_CREATE_NONE = 0, /*< nick=none >*/ - G_APP_INFO_CREATE_NEEDS_TERMINAL = (1 << 0), /*< nick=needs-terminal >*/ - G_APP_INFO_CREATE_SUPPORTS_URIS = (1 << 1), /*< nick=supports-uris >*/ - G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION = (1 << 2) /*< nick=supports-startup-notification >*/ -} GAppInfoCreateFlags; - -/** - * GConverterFlags: - * @G_CONVERTER_NO_FLAGS: No flags. - * @G_CONVERTER_INPUT_AT_END: At end of input data - * @G_CONVERTER_FLUSH: Flush data - * - * Flags used when calling a g_converter_convert(). - * - * Since: 2.24 - */ -typedef enum { - G_CONVERTER_NO_FLAGS = 0, /*< nick=none >*/ - G_CONVERTER_INPUT_AT_END = (1 << 0), /*< nick=input-at-end >*/ - G_CONVERTER_FLUSH = (1 << 1) /*< nick=flush >*/ -} GConverterFlags; - -/** - * GConverterResult: - * @G_CONVERTER_ERROR: There was an error during conversion. - * @G_CONVERTER_CONVERTED: Some data was consumed or produced - * @G_CONVERTER_FINISHED: The conversion is finished - * @G_CONVERTER_FLUSHED: Flushing is finished - * - * Results returned from g_converter_convert(). - * - * Since: 2.24 - */ -typedef enum { - G_CONVERTER_ERROR = 0, /*< nick=error >*/ - G_CONVERTER_CONVERTED = 1, /*< nick=converted >*/ - G_CONVERTER_FINISHED = 2, /*< nick=finished >*/ - G_CONVERTER_FLUSHED = 3 /*< nick=flushed >*/ -} GConverterResult; - - -/** - * GDataStreamByteOrder: - * @G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN: Selects Big Endian byte order. - * @G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN: Selects Little Endian byte order. - * @G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN: Selects endianness based on host machine's architecture. - * - * #GDataStreamByteOrder is used to ensure proper endianness of streaming data sources - * across various machine architectures. - * - **/ -typedef enum { - G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN, - G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN, - G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN -} GDataStreamByteOrder; - - -/** - * GDataStreamNewlineType: - * @G_DATA_STREAM_NEWLINE_TYPE_LF: Selects "LF" line endings, common on most modern UNIX platforms. - * @G_DATA_STREAM_NEWLINE_TYPE_CR: Selects "CR" line endings. - * @G_DATA_STREAM_NEWLINE_TYPE_CR_LF: Selects "CR, LF" line ending, common on Microsoft Windows. - * @G_DATA_STREAM_NEWLINE_TYPE_ANY: Automatically try to handle any line ending type. - * - * #GDataStreamNewlineType is used when checking for or setting the line endings for a given file. - **/ -typedef enum { - G_DATA_STREAM_NEWLINE_TYPE_LF, - G_DATA_STREAM_NEWLINE_TYPE_CR, - G_DATA_STREAM_NEWLINE_TYPE_CR_LF, - G_DATA_STREAM_NEWLINE_TYPE_ANY -} GDataStreamNewlineType; - - -/** - * GFileAttributeType: - * @G_FILE_ATTRIBUTE_TYPE_INVALID: indicates an invalid or uninitalized type. - * @G_FILE_ATTRIBUTE_TYPE_STRING: a null terminated UTF8 string. - * @G_FILE_ATTRIBUTE_TYPE_BYTE_STRING: a zero terminated string of non-zero bytes. - * @G_FILE_ATTRIBUTE_TYPE_BOOLEAN: a boolean value. - * @G_FILE_ATTRIBUTE_TYPE_UINT32: an unsigned 4-byte/32-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_INT32: a signed 4-byte/32-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_UINT64: an unsigned 8-byte/64-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_INT64: a signed 8-byte/64-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_OBJECT: a #GObject. - * @G_FILE_ATTRIBUTE_TYPE_STRINGV: a %NULL terminated char **. Since 2.22 - * - * The data types for file attributes. - **/ -typedef enum { - G_FILE_ATTRIBUTE_TYPE_INVALID = 0, - G_FILE_ATTRIBUTE_TYPE_STRING, - G_FILE_ATTRIBUTE_TYPE_BYTE_STRING, /* zero terminated string of non-zero bytes */ - G_FILE_ATTRIBUTE_TYPE_BOOLEAN, - G_FILE_ATTRIBUTE_TYPE_UINT32, - G_FILE_ATTRIBUTE_TYPE_INT32, - G_FILE_ATTRIBUTE_TYPE_UINT64, - G_FILE_ATTRIBUTE_TYPE_INT64, - G_FILE_ATTRIBUTE_TYPE_OBJECT, - G_FILE_ATTRIBUTE_TYPE_STRINGV -} GFileAttributeType; - - -/** - * GFileAttributeInfoFlags: - * @G_FILE_ATTRIBUTE_INFO_NONE: no flags set. - * @G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE: copy the attribute values when the file is copied. - * @G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED: copy the attribute values when the file is moved. - * - * Flags specifying the behaviour of an attribute. - **/ -typedef enum { - G_FILE_ATTRIBUTE_INFO_NONE = 0, - G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE = (1 << 0), - G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED = (1 << 1) -} GFileAttributeInfoFlags; - - -/** - * GFileAttributeStatus: - * @G_FILE_ATTRIBUTE_STATUS_UNSET: Attribute value is unset (empty). - * @G_FILE_ATTRIBUTE_STATUS_SET: Attribute value is set. - * @G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING: Indicates an error in setting the value. - * - * Used by g_file_set_attributes_from_info() when setting file attributes. - **/ -typedef enum { - G_FILE_ATTRIBUTE_STATUS_UNSET = 0, - G_FILE_ATTRIBUTE_STATUS_SET, - G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING -} GFileAttributeStatus; - - -/** - * GFileQueryInfoFlags: - * @G_FILE_QUERY_INFO_NONE: No flags set. - * @G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS: Don't follow symlinks. - * - * Flags used when querying a #GFileInfo. - */ -typedef enum { - G_FILE_QUERY_INFO_NONE = 0, - G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS = (1 << 0) /*< nick=nofollow-symlinks >*/ -} GFileQueryInfoFlags; - - -/** - * GFileCreateFlags: - * @G_FILE_CREATE_NONE: No flags set. - * @G_FILE_CREATE_PRIVATE: Create a file that can only be - * accessed by the current user. - * @G_FILE_CREATE_REPLACE_DESTINATION: Replace the destination - * as if it didn't exist before. Don't try to keep any old - * permissions, replace instead of following links. This - * is generally useful if you're doing a "copy over" - * rather than a "save new version of" replace operation. - * You can think of it as "unlink destination" before - * writing to it, although the implementation may not - * be exactly like that. Since 2.20 - * - * Flags used when an operation may create a file. - */ -typedef enum { - G_FILE_CREATE_NONE = 0, - G_FILE_CREATE_PRIVATE = (1 << 0), - G_FILE_CREATE_REPLACE_DESTINATION = (1 << 1) -} GFileCreateFlags; - - -/** - * GMountMountFlags: - * @G_MOUNT_MOUNT_NONE: No flags set. - * - * Flags used when mounting a mount. - */ -typedef enum /*< flags >*/ { - G_MOUNT_MOUNT_NONE = 0 -} GMountMountFlags; - - -/** - * GMountUnmountFlags: - * @G_MOUNT_UNMOUNT_NONE: No flags set. - * @G_MOUNT_UNMOUNT_FORCE: Unmount even if there are outstanding - * file operations on the mount. - * - * Flags used when an unmounting a mount. - */ -typedef enum { - G_MOUNT_UNMOUNT_NONE = 0, - G_MOUNT_UNMOUNT_FORCE = (1 << 0) -} GMountUnmountFlags; - -/** - * GDriveStartFlags: - * @G_DRIVE_START_NONE: No flags set. - * - * Flags used when starting a drive. - * - * Since: 2.22 - */ -typedef enum /*< flags >*/ { - G_DRIVE_START_NONE = 0 -} GDriveStartFlags; - -/** - * GDriveStartStopType: - * @G_DRIVE_START_STOP_TYPE_UNKNOWN: Unknown or drive doesn't support - * start/stop. - * @G_DRIVE_START_STOP_TYPE_SHUTDOWN: The stop method will physically - * shut down the drive and e.g. power down the port the drive is - * attached to. - * @G_DRIVE_START_STOP_TYPE_NETWORK: The start/stop methods are used - * for connecting/disconnect to the drive over the network. - * @G_DRIVE_START_STOP_TYPE_MULTIDISK: The start/stop methods will - * assemble/disassemble a virtual drive from several physical - * drives. - * @G_DRIVE_START_STOP_TYPE_PASSWORD: The start/stop methods will - * unlock/lock the disk (for example using the ATA SECURITY - * UNLOCK DEVICE command) - * - * Enumeration describing how a drive can be started/stopped. - * - * Since: 2.22 - */ -typedef enum { - G_DRIVE_START_STOP_TYPE_UNKNOWN, - G_DRIVE_START_STOP_TYPE_SHUTDOWN, - G_DRIVE_START_STOP_TYPE_NETWORK, - G_DRIVE_START_STOP_TYPE_MULTIDISK, - G_DRIVE_START_STOP_TYPE_PASSWORD -} GDriveStartStopType; - -/** - * GFileCopyFlags: - * @G_FILE_COPY_NONE: No flags set. - * @G_FILE_COPY_OVERWRITE: Overwrite any existing files - * @G_FILE_COPY_BACKUP: Make a backup of any existing files. - * @G_FILE_COPY_NOFOLLOW_SYMLINKS: Don't follow symlinks. - * @G_FILE_COPY_ALL_METADATA: Copy all file metadata instead of just default set used for copy (see #GFileInfo). - * @G_FILE_COPY_NO_FALLBACK_FOR_MOVE: Don't use copy and delete fallback if native move not supported. - * @G_FILE_COPY_TARGET_DEFAULT_PERMS: Leaves target file with default perms, instead of setting the source file perms. - * - * Flags used when copying or moving files. - */ -typedef enum { - G_FILE_COPY_NONE = 0, /*< nick=none >*/ - G_FILE_COPY_OVERWRITE = (1 << 0), - G_FILE_COPY_BACKUP = (1 << 1), - G_FILE_COPY_NOFOLLOW_SYMLINKS = (1 << 2), - G_FILE_COPY_ALL_METADATA = (1 << 3), - G_FILE_COPY_NO_FALLBACK_FOR_MOVE = (1 << 4), - G_FILE_COPY_TARGET_DEFAULT_PERMS = (1 << 5) -} GFileCopyFlags; - - -/** - * GFileMonitorFlags: - * @G_FILE_MONITOR_NONE: No flags set. - * @G_FILE_MONITOR_WATCH_MOUNTS: Watch for mount events. - * @G_FILE_MONITOR_SEND_MOVED: Pair DELETED and CREATED events caused - * by file renames (moves) and send a single G_FILE_MONITOR_EVENT_MOVED - * event instead (NB: not supported on all backends; the default - * behaviour -without specifying this flag- is to send single DELETED - * and CREATED events). - * - * Flags used to set what a #GFileMonitor will watch for. - */ -typedef enum { - G_FILE_MONITOR_NONE = 0, - G_FILE_MONITOR_WATCH_MOUNTS = (1 << 0), - G_FILE_MONITOR_SEND_MOVED = (1 << 1) -} GFileMonitorFlags; - - -/** - * GFileType: - * @G_FILE_TYPE_UNKNOWN: File's type is unknown. - * @G_FILE_TYPE_REGULAR: File handle represents a regular file. - * @G_FILE_TYPE_DIRECTORY: File handle represents a directory. - * @G_FILE_TYPE_SYMBOLIC_LINK: File handle represents a symbolic link - * (Unix systems). - * @G_FILE_TYPE_SPECIAL: File is a "special" file, such as a socket, fifo, - * block device, or character device. - * @G_FILE_TYPE_SHORTCUT: File is a shortcut (Windows systems). - * @G_FILE_TYPE_MOUNTABLE: File is a mountable location. - * - * Indicates the file's on-disk type. - **/ -typedef enum { - G_FILE_TYPE_UNKNOWN = 0, - G_FILE_TYPE_REGULAR, - G_FILE_TYPE_DIRECTORY, - G_FILE_TYPE_SYMBOLIC_LINK, - G_FILE_TYPE_SPECIAL, /* socket, fifo, blockdev, chardev */ - G_FILE_TYPE_SHORTCUT, - G_FILE_TYPE_MOUNTABLE -} GFileType; - - -/** - * GFilesystemPreviewType: - * @G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS: Only preview files if user has explicitly requested it. - * @G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL: Preview files if user has requested preview of "local" files. - * @G_FILESYSTEM_PREVIEW_TYPE_NEVER: Never preview files. - * - * Indicates a hint from the file system whether files should be - * previewed in a file manager. Returned as the value of the key - * #G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW. - **/ -typedef enum { - G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS = 0, - G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL, - G_FILESYSTEM_PREVIEW_TYPE_NEVER -} GFilesystemPreviewType; - - -/** - * GFileMonitorEvent: - * @G_FILE_MONITOR_EVENT_CHANGED: a file changed. - * @G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: a hint that this was probably the last change in a set of changes. - * @G_FILE_MONITOR_EVENT_DELETED: a file was deleted. - * @G_FILE_MONITOR_EVENT_CREATED: a file was created. - * @G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: a file attribute was changed. - * @G_FILE_MONITOR_EVENT_PRE_UNMOUNT: the file location will soon be unmounted. - * @G_FILE_MONITOR_EVENT_UNMOUNTED: the file location was unmounted. - * @G_FILE_MONITOR_EVENT_MOVED: the file was moved. - * - * Specifies what type of event a monitor event is. - **/ -typedef enum { - G_FILE_MONITOR_EVENT_CHANGED, - G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT, - G_FILE_MONITOR_EVENT_DELETED, - G_FILE_MONITOR_EVENT_CREATED, - G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED, - G_FILE_MONITOR_EVENT_PRE_UNMOUNT, - G_FILE_MONITOR_EVENT_UNMOUNTED, - G_FILE_MONITOR_EVENT_MOVED -} GFileMonitorEvent; - - -/* This enumeration conflicts with GIOError in giochannel.h. However, - * that is only used as a return value in some deprecated functions. - * So, we reuse the same prefix for the enumeration values, but call - * the actual enumeration (which is rarely used) GIOErrorEnum. - */ -/** - * GIOErrorEnum: - * @G_IO_ERROR_FAILED: Generic error condition for when any operation fails. - * @G_IO_ERROR_NOT_FOUND: File not found. - * @G_IO_ERROR_EXISTS: File already exists. - * @G_IO_ERROR_IS_DIRECTORY: File is a directory. - * @G_IO_ERROR_NOT_DIRECTORY: File is not a directory. - * @G_IO_ERROR_NOT_EMPTY: File is a directory that isn't empty. - * @G_IO_ERROR_NOT_REGULAR_FILE: File is not a regular file. - * @G_IO_ERROR_NOT_SYMBOLIC_LINK: File is not a symbolic link. - * @G_IO_ERROR_NOT_MOUNTABLE_FILE: File cannot be mounted. - * @G_IO_ERROR_FILENAME_TOO_LONG: Filename is too many characters. - * @G_IO_ERROR_INVALID_FILENAME: Filename is invalid or contains invalid characters. - * @G_IO_ERROR_TOO_MANY_LINKS: File contains too many symbolic links. - * @G_IO_ERROR_NO_SPACE: No space left on drive. - * @G_IO_ERROR_INVALID_ARGUMENT: Invalid argument. - * @G_IO_ERROR_PERMISSION_DENIED: Permission denied. - * @G_IO_ERROR_NOT_SUPPORTED: Operation not supported for the current backend. - * @G_IO_ERROR_NOT_MOUNTED: File isn't mounted. - * @G_IO_ERROR_ALREADY_MOUNTED: File is already mounted. - * @G_IO_ERROR_CLOSED: File was closed. - * @G_IO_ERROR_CANCELLED: Operation was cancelled. See #GCancellable. - * @G_IO_ERROR_PENDING: Operations are still pending. - * @G_IO_ERROR_READ_ONLY: File is read only. - * @G_IO_ERROR_CANT_CREATE_BACKUP: Backup couldn't be created. - * @G_IO_ERROR_WRONG_ETAG: File's Entity Tag was incorrect. - * @G_IO_ERROR_TIMED_OUT: Operation timed out. - * @G_IO_ERROR_WOULD_RECURSE: Operation would be recursive. - * @G_IO_ERROR_BUSY: File is busy. - * @G_IO_ERROR_WOULD_BLOCK: Operation would block. - * @G_IO_ERROR_HOST_NOT_FOUND: Host couldn't be found (remote operations). - * @G_IO_ERROR_WOULD_MERGE: Operation would merge files. - * @G_IO_ERROR_FAILED_HANDLED: Operation failed and a helper program has - * already interacted with the user. Do not display any error dialog. - * @G_IO_ERROR_TOO_MANY_OPEN_FILES: The current process has too many files - * open and can't open any more. Duplicate descriptors do count toward - * this limit. Since 2.20 - * @G_IO_ERROR_NOT_INITIALIZED: The object has not been initialized. Since 2.22 - * @G_IO_ERROR_ADDRESS_IN_USE: The requested address is already in use. Since 2.22 - * @G_IO_ERROR_PARTIAL_INPUT: Need more input to finish operation. Since 2.24 - * @G_IO_ERROR_INVALID_DATA: There input data was invalid. Since 2.24 - * @G_IO_ERROR_DBUS_ERROR: A remote object generated an error that - * doesn't correspond to a locally registered #GError error - * domain. Use g_dbus_error_get_remote_error() to extract the D-Bus - * error name and g_dbus_error_strip_remote_error() to fix up the - * message so it matches what was received on the wire. Since 2.26. - * @G_IO_ERROR_HOST_UNREACHABLE: Host unreachable. Since 2.26 - * @G_IO_ERROR_NETWORK_UNREACHABLE: Network unreachable. Since 2.26 - * @G_IO_ERROR_CONNECTION_REFUSED: Connection refused. Since 2.26 - * @G_IO_ERROR_PROXY_FAILED: Connection to proxy server failed. Since 2.26 - * @G_IO_ERROR_PROXY_AUTH_FAILED: Proxy authentication failed. Since 2.26 - * @G_IO_ERROR_PROXY_NEED_AUTH: Proxy server needs authentication. Since 2.26 - * @G_IO_ERROR_PROXY_NOT_ALLOWED: Proxy connection is not allowed by ruleset. - * Since 2.26 - * - * Error codes returned by GIO functions. - * - **/ -typedef enum { - G_IO_ERROR_FAILED, - G_IO_ERROR_NOT_FOUND, - G_IO_ERROR_EXISTS, - G_IO_ERROR_IS_DIRECTORY, - G_IO_ERROR_NOT_DIRECTORY, - G_IO_ERROR_NOT_EMPTY, - G_IO_ERROR_NOT_REGULAR_FILE, - G_IO_ERROR_NOT_SYMBOLIC_LINK, - G_IO_ERROR_NOT_MOUNTABLE_FILE, - G_IO_ERROR_FILENAME_TOO_LONG, - G_IO_ERROR_INVALID_FILENAME, - G_IO_ERROR_TOO_MANY_LINKS, - G_IO_ERROR_NO_SPACE, - G_IO_ERROR_INVALID_ARGUMENT, - G_IO_ERROR_PERMISSION_DENIED, - G_IO_ERROR_NOT_SUPPORTED, - G_IO_ERROR_NOT_MOUNTED, - G_IO_ERROR_ALREADY_MOUNTED, - G_IO_ERROR_CLOSED, - G_IO_ERROR_CANCELLED, - G_IO_ERROR_PENDING, - G_IO_ERROR_READ_ONLY, - G_IO_ERROR_CANT_CREATE_BACKUP, - G_IO_ERROR_WRONG_ETAG, - G_IO_ERROR_TIMED_OUT, - G_IO_ERROR_WOULD_RECURSE, - G_IO_ERROR_BUSY, - G_IO_ERROR_WOULD_BLOCK, - G_IO_ERROR_HOST_NOT_FOUND, - G_IO_ERROR_WOULD_MERGE, - G_IO_ERROR_FAILED_HANDLED, - G_IO_ERROR_TOO_MANY_OPEN_FILES, - G_IO_ERROR_NOT_INITIALIZED, - G_IO_ERROR_ADDRESS_IN_USE, - G_IO_ERROR_PARTIAL_INPUT, - G_IO_ERROR_INVALID_DATA, - G_IO_ERROR_DBUS_ERROR, - G_IO_ERROR_HOST_UNREACHABLE, - G_IO_ERROR_NETWORK_UNREACHABLE, - G_IO_ERROR_CONNECTION_REFUSED, - G_IO_ERROR_PROXY_FAILED, - G_IO_ERROR_PROXY_AUTH_FAILED, - G_IO_ERROR_PROXY_NEED_AUTH, - G_IO_ERROR_PROXY_NOT_ALLOWED -} GIOErrorEnum; - - -/** - * GAskPasswordFlags: - * @G_ASK_PASSWORD_NEED_PASSWORD: operation requires a password. - * @G_ASK_PASSWORD_NEED_USERNAME: operation requires a username. - * @G_ASK_PASSWORD_NEED_DOMAIN: operation requires a domain. - * @G_ASK_PASSWORD_SAVING_SUPPORTED: operation supports saving settings. - * @G_ASK_PASSWORD_ANONYMOUS_SUPPORTED: operation supports anonymous users. - * - * #GAskPasswordFlags are used to request specific information from the - * user, or to notify the user of their choices in an authentication - * situation. - **/ -typedef enum { - G_ASK_PASSWORD_NEED_PASSWORD = (1 << 0), - G_ASK_PASSWORD_NEED_USERNAME = (1 << 1), - G_ASK_PASSWORD_NEED_DOMAIN = (1 << 2), - G_ASK_PASSWORD_SAVING_SUPPORTED = (1 << 3), - G_ASK_PASSWORD_ANONYMOUS_SUPPORTED = (1 << 4) -} GAskPasswordFlags; - - -/** - * GPasswordSave: - * @G_PASSWORD_SAVE_NEVER: never save a password. - * @G_PASSWORD_SAVE_FOR_SESSION: save a password for the session. - * @G_PASSWORD_SAVE_PERMANENTLY: save a password permanently. - * - * #GPasswordSave is used to indicate the lifespan of a saved password. - * - * #Gvfs stores passwords in the Gnome keyring when this flag allows it - * to, and later retrieves it again from there. - **/ -typedef enum { - G_PASSWORD_SAVE_NEVER, - G_PASSWORD_SAVE_FOR_SESSION, - G_PASSWORD_SAVE_PERMANENTLY -} GPasswordSave; - - -/** - * GMountOperationResult: - * @G_MOUNT_OPERATION_HANDLED: The request was fulfilled and the - * user specified data is now available - * @G_MOUNT_OPERATION_ABORTED: The user requested the mount operation - * to be aborted - * @G_MOUNT_OPERATION_UNHANDLED: The request was unhandled (i.e. not - * implemented) - * - * #GMountOperationResult is returned as a result when a request for - * information is send by the mounting operation. - **/ -typedef enum { - G_MOUNT_OPERATION_HANDLED, - G_MOUNT_OPERATION_ABORTED, - G_MOUNT_OPERATION_UNHANDLED -} GMountOperationResult; - - -/** - * GOutputStreamSpliceFlags: - * @G_OUTPUT_STREAM_SPLICE_NONE: Do not close either stream. - * @G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE: Close the source stream after - * the splice. - * @G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET: Close the target stream after - * the splice. - * - * GOutputStreamSpliceFlags determine how streams should be spliced. - **/ -typedef enum { - G_OUTPUT_STREAM_SPLICE_NONE = 0, - G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE = (1 << 0), - G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET = (1 << 1) -} GOutputStreamSpliceFlags; - - -/** - * GIOStreamSpliceFlags: - * @G_IO_STREAM_SPLICE_NONE: Do not close either stream. - * @G_IO_STREAM_SPLICE_CLOSE_STREAM1: Close the first stream after - * the splice. - * @G_IO_STREAM_SPLICE_CLOSE_STREAM2: Close the second stream after - * the splice. - * @G_IO_STREAM_SPLICE_WAIT_FOR_BOTH: Wait for both splice operations to finish - * before calling the callback. - * - * GIOStreamSpliceFlags determine how streams should be spliced. - * - * Since: 2.28 - **/ -typedef enum { - G_IO_STREAM_SPLICE_NONE = 0, - G_IO_STREAM_SPLICE_CLOSE_STREAM1 = (1 << 0), - G_IO_STREAM_SPLICE_CLOSE_STREAM2 = (1 << 1), - G_IO_STREAM_SPLICE_WAIT_FOR_BOTH = (1 << 2) -} GIOStreamSpliceFlags; - -/** - * GEmblemOrigin: - * @G_EMBLEM_ORIGIN_UNKNOWN: Emblem of unknown origin - * @G_EMBLEM_ORIGIN_DEVICE: Emblem adds device-specific information - * @G_EMBLEM_ORIGIN_LIVEMETADATA: Emblem depicts live metadata, such as "readonly" - * @G_EMBLEM_ORIGIN_TAG: Emblem comes from a user-defined tag, e.g. set by nautilus (in the future) - * - * GEmblemOrigin is used to add information about the origin of the emblem - * to #GEmblem. - * - * Since: 2.18 - */ -typedef enum { - G_EMBLEM_ORIGIN_UNKNOWN, - G_EMBLEM_ORIGIN_DEVICE, - G_EMBLEM_ORIGIN_LIVEMETADATA, - G_EMBLEM_ORIGIN_TAG -} GEmblemOrigin; - -/** - * GResolverError: - * @G_RESOLVER_ERROR_NOT_FOUND: the requested name/address/service was not - * found - * @G_RESOLVER_ERROR_TEMPORARY_FAILURE: the requested information could not - * be looked up due to a network error or similar problem - * @G_RESOLVER_ERROR_INTERNAL: unknown error - * - * An error code used with %G_RESOLVER_ERROR in a #GError returned - * from a #GResolver routine. - * - * Since: 2.22 - */ -typedef enum { - G_RESOLVER_ERROR_NOT_FOUND, - G_RESOLVER_ERROR_TEMPORARY_FAILURE, - G_RESOLVER_ERROR_INTERNAL -} GResolverError; - -/** - * GResolverRecordType: - * @G_RESOLVER_RECORD_SRV: lookup DNS SRV records for a domain - * @G_RESOLVER_RECORD_MX: lookup DNS MX records for a domain - * @G_RESOLVER_RECORD_TXT: lookup DNS TXT records for a name - * @G_RESOLVER_RECORD_SOA: lookup DNS SOA records for a zone - * @G_RESOLVER_RECORD_NS: lookup DNS NS records for a domain - * - * The type of record that g_resolver_lookup_records() or - * g_resolver_lookup_records_async() should retrieve. The records are returned - * as lists of #GVariant tuples. Each record type has different values in - * the variant tuples returned. - * - * %G_RESOLVER_RECORD_SRV records are returned as variants with the signature - * '(qqqs)', containing a guint16 with the priority, a guint16 with the - * weight, a guint16 with the port, and a string of the hostname. - * - * %G_RESOLVER_RECORD_MX records are returned as variants with the signature - * '(qs)', representing a guint16 with the preference, and a string containing - * the mail exchanger hostname. - * - * %G_RESOLVER_RECORD_TXT records are returned as variants with the signature - * '(as)', representing an array of the strings in the text record. - * - * %G_RESOLVER_RECORD_SOA records are returned as variants with the signature - * '(ssuuuuu)', representing a string containing the primary name server, a - * string containing the administrator, the serial as a guint32, the refresh - * interval as guint32, the retry interval as a guint32, the expire timeout - * as a guint32, and the ttl as a guint32. - * - * %G_RESOLVER_RECORD_NS records are returned as variants with the signature - * '(s)', representing a string of the hostname of the name server. - * - * Since: 2.34 - */ -typedef enum { - G_RESOLVER_RECORD_SRV = 1, - G_RESOLVER_RECORD_MX, - G_RESOLVER_RECORD_TXT, - G_RESOLVER_RECORD_SOA, - G_RESOLVER_RECORD_NS -} GResolverRecordType; - -/** - * GResourceError: - * @G_RESOURCE_ERROR_NOT_FOUND: no file was found at the requested path - * @G_RESOURCE_ERROR_INTERNAL: unknown error - * - * An error code used with %G_RESOURCE_ERROR in a #GError returned - * from a #GResource routine. - * - * Since: 2.32 - */ -typedef enum { - G_RESOURCE_ERROR_NOT_FOUND, - G_RESOURCE_ERROR_INTERNAL -} GResourceError; - -/** - * GResourceFlags: - * @G_RESOURCE_FLAGS_NONE: No flags set. - * @G_RESOURCE_FLAGS_COMPRESSED: The file is compressed. - * - * GResourceFlags give information about a particular file inside a resource - * bundle. - * - * Since: 2.32 - **/ -typedef enum { - G_RESOURCE_FLAGS_NONE = 0, - G_RESOURCE_FLAGS_COMPRESSED = (1<<0) -} GResourceFlags; - -/** - * GResourceLookupFlags: - * @G_RESOURCE_LOOKUP_FLAGS_NONE: No flags set. - * - * GResourceLookupFlags determine how resource path lookups are handled. - * - * Since: 2.32 - **/ -typedef enum /*< flags >*/ { - G_RESOURCE_LOOKUP_FLAGS_NONE = 0 -} GResourceLookupFlags; - -/** - * GSocketFamily: - * @G_SOCKET_FAMILY_INVALID: no address family - * @G_SOCKET_FAMILY_IPV4: the IPv4 family - * @G_SOCKET_FAMILY_IPV6: the IPv6 family - * @G_SOCKET_FAMILY_UNIX: the UNIX domain family - * - * The protocol family of a #GSocketAddress. (These values are - * identical to the system defines %AF_INET, %AF_INET6 and %AF_UNIX, - * if available.) - * - * Since: 2.22 - */ -typedef enum { - G_SOCKET_FAMILY_INVALID, - G_SOCKET_FAMILY_UNIX = GLIB_SYSDEF_AF_UNIX, - G_SOCKET_FAMILY_IPV4 = GLIB_SYSDEF_AF_INET, - G_SOCKET_FAMILY_IPV6 = GLIB_SYSDEF_AF_INET6 -} GSocketFamily; - -/** - * GSocketType: - * @G_SOCKET_TYPE_INVALID: Type unknown or wrong - * @G_SOCKET_TYPE_STREAM: Reliable connection-based byte streams (e.g. TCP). - * @G_SOCKET_TYPE_DATAGRAM: Connectionless, unreliable datagram passing. - * (e.g. UDP) - * @G_SOCKET_TYPE_SEQPACKET: Reliable connection-based passing of datagrams - * of fixed maximum length (e.g. SCTP). - * - * Flags used when creating a #GSocket. Some protocols may not implement - * all the socket types. - * - * Since: 2.22 - */ -typedef enum -{ - G_SOCKET_TYPE_INVALID, - G_SOCKET_TYPE_STREAM, - G_SOCKET_TYPE_DATAGRAM, - G_SOCKET_TYPE_SEQPACKET -} GSocketType; - -/** - * GSocketMsgFlags: - * @G_SOCKET_MSG_NONE: No flags. - * @G_SOCKET_MSG_OOB: Request to send/receive out of band data. - * @G_SOCKET_MSG_PEEK: Read data from the socket without removing it from - * the queue. - * @G_SOCKET_MSG_DONTROUTE: Don't use a gateway to send out the packet, - * only send to hosts on directly connected networks. - * - * Flags used in g_socket_receive_message() and g_socket_send_message(). - * The flags listed in the enum are some commonly available flags, but the - * values used for them are the same as on the platform, and any other flags - * are passed in/out as is. So to use a platform specific flag, just include - * the right system header and pass in the flag. - * - * Since: 2.22 - */ -typedef enum /*< flags >*/ -{ - G_SOCKET_MSG_NONE, - G_SOCKET_MSG_OOB = GLIB_SYSDEF_MSG_OOB, - G_SOCKET_MSG_PEEK = GLIB_SYSDEF_MSG_PEEK, - G_SOCKET_MSG_DONTROUTE = GLIB_SYSDEF_MSG_DONTROUTE -} GSocketMsgFlags; - -/** - * GSocketProtocol: - * @G_SOCKET_PROTOCOL_UNKNOWN: The protocol type is unknown - * @G_SOCKET_PROTOCOL_DEFAULT: The default protocol for the family/type - * @G_SOCKET_PROTOCOL_TCP: TCP over IP - * @G_SOCKET_PROTOCOL_UDP: UDP over IP - * @G_SOCKET_PROTOCOL_SCTP: SCTP over IP - * - * A protocol identifier is specified when creating a #GSocket, which is a - * family/type specific identifier, where 0 means the default protocol for - * the particular family/type. - * - * This enum contains a set of commonly available and used protocols. You - * can also pass any other identifiers handled by the platform in order to - * use protocols not listed here. - * - * Since: 2.22 - */ -typedef enum { - G_SOCKET_PROTOCOL_UNKNOWN = -1, - G_SOCKET_PROTOCOL_DEFAULT = 0, - G_SOCKET_PROTOCOL_TCP = 6, - G_SOCKET_PROTOCOL_UDP = 17, - G_SOCKET_PROTOCOL_SCTP = 132 -} GSocketProtocol; - -/** - * GZlibCompressorFormat: - * @G_ZLIB_COMPRESSOR_FORMAT_ZLIB: deflate compression with zlib header - * @G_ZLIB_COMPRESSOR_FORMAT_GZIP: gzip file format - * @G_ZLIB_COMPRESSOR_FORMAT_RAW: deflate compression with no header - * - * Used to select the type of data format to use for #GZlibDecompressor - * and #GZlibCompressor. - * - * Since: 2.24 - */ -typedef enum { - G_ZLIB_COMPRESSOR_FORMAT_ZLIB, - G_ZLIB_COMPRESSOR_FORMAT_GZIP, - G_ZLIB_COMPRESSOR_FORMAT_RAW -} GZlibCompressorFormat; - -/** - * GUnixSocketAddressType: - * @G_UNIX_SOCKET_ADDRESS_INVALID: invalid - * @G_UNIX_SOCKET_ADDRESS_ANONYMOUS: anonymous - * @G_UNIX_SOCKET_ADDRESS_PATH: a filesystem path - * @G_UNIX_SOCKET_ADDRESS_ABSTRACT: an abstract name - * @G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED: an abstract name, 0-padded - * to the full length of a unix socket name - * - * The type of name used by a #GUnixSocketAddress. - * %G_UNIX_SOCKET_ADDRESS_PATH indicates a traditional unix domain - * socket bound to a filesystem path. %G_UNIX_SOCKET_ADDRESS_ANONYMOUS - * indicates a socket not bound to any name (eg, a client-side socket, - * or a socket created with socketpair()). - * - * For abstract sockets, there are two incompatible ways of naming - * them; the man pages suggest using the entire struct - * sockaddr_un as the name, padding the unused parts of the - * %sun_path field with zeroes; this corresponds to - * %G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED. However, many programs - * instead just use a portion of %sun_path, and pass an appropriate - * smaller length to bind() or connect(). This is - * %G_UNIX_SOCKET_ADDRESS_ABSTRACT. - * - * Since: 2.26 - */ -typedef enum { - G_UNIX_SOCKET_ADDRESS_INVALID, - G_UNIX_SOCKET_ADDRESS_ANONYMOUS, - G_UNIX_SOCKET_ADDRESS_PATH, - G_UNIX_SOCKET_ADDRESS_ABSTRACT, - G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED -} GUnixSocketAddressType; - -/** - * GBusType: - * @G_BUS_TYPE_STARTER: An alias for the message bus that activated the process, if any. - * @G_BUS_TYPE_NONE: Not a message bus. - * @G_BUS_TYPE_SYSTEM: The system-wide message bus. - * @G_BUS_TYPE_SESSION: The login session message bus. - * - * An enumeration for well-known message buses. - * - * Since: 2.26 - */ -typedef enum -{ - G_BUS_TYPE_STARTER = -1, - G_BUS_TYPE_NONE = 0, - G_BUS_TYPE_SYSTEM = 1, - G_BUS_TYPE_SESSION = 2 -} GBusType; - -/** - * GBusNameOwnerFlags: - * @G_BUS_NAME_OWNER_FLAGS_NONE: No flags set. - * @G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT: Allow another message bus connection to claim the name. - * @G_BUS_NAME_OWNER_FLAGS_REPLACE: If another message bus connection owns the name and have - * specified #G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT, then take the name from the other connection. - * - * Flags used in g_bus_own_name(). - * - * Since: 2.26 - */ -typedef enum -{ - G_BUS_NAME_OWNER_FLAGS_NONE = 0, /*< nick=none >*/ - G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT = (1<<0), /*< nick=allow-replacement >*/ - G_BUS_NAME_OWNER_FLAGS_REPLACE = (1<<1) /*< nick=replace >*/ -} GBusNameOwnerFlags; - -/** - * GBusNameWatcherFlags: - * @G_BUS_NAME_WATCHER_FLAGS_NONE: No flags set. - * @G_BUS_NAME_WATCHER_FLAGS_AUTO_START: If no-one owns the name when - * beginning to watch the name, ask the bus to launch an owner for the - * name. - * - * Flags used in g_bus_watch_name(). - * - * Since: 2.26 - */ -typedef enum -{ - G_BUS_NAME_WATCHER_FLAGS_NONE = 0, - G_BUS_NAME_WATCHER_FLAGS_AUTO_START = (1<<0) -} GBusNameWatcherFlags; - -/** - * GDBusProxyFlags: - * @G_DBUS_PROXY_FLAGS_NONE: No flags set. - * @G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES: Don't load properties. - * @G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS: Don't connect to signals on the remote object. - * @G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START: If not set and the proxy if for a well-known name, - * then request the bus to launch an owner for the name if no-one owns the name. This flag can - * only be used in proxies for well-known names. - * @G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES: If set, the property value for any invalidated property will be (asynchronously) retrieved upon receiving the PropertiesChanged D-Bus signal and the property will not cause emission of the #GDBusProxy::g-properties-changed signal. When the value is received the #GDBusProxy::g-properties-changed signal is emitted for the property along with the retrieved value. Since 2.32. - * - * Flags used when constructing an instance of a #GDBusProxy derived class. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_PROXY_FLAGS_NONE = 0, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES = (1<<0), - G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS = (1<<1), - G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START = (1<<2), - G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES = (1<<3) -} GDBusProxyFlags; - -/** - * GDBusError: - * @G_DBUS_ERROR_FAILED: - * A generic error; "something went wrong" - see the error message for - * more. - * @G_DBUS_ERROR_NO_MEMORY: - * There was not enough memory to complete an operation. - * @G_DBUS_ERROR_SERVICE_UNKNOWN: - * The bus doesn't know how to launch a service to supply the bus name - * you wanted. - * @G_DBUS_ERROR_NAME_HAS_NO_OWNER: - * The bus name you referenced doesn't exist (i.e. no application owns - * it). - * @G_DBUS_ERROR_NO_REPLY: - * No reply to a message expecting one, usually means a timeout occurred. - * @G_DBUS_ERROR_IO_ERROR: - * Something went wrong reading or writing to a socket, for example. - * @G_DBUS_ERROR_BAD_ADDRESS: - * A D-Bus bus address was malformed. - * @G_DBUS_ERROR_NOT_SUPPORTED: - * Requested operation isn't supported (like ENOSYS on UNIX). - * @G_DBUS_ERROR_LIMITS_EXCEEDED: - * Some limited resource is exhausted. - * @G_DBUS_ERROR_ACCESS_DENIED: - * Security restrictions don't allow doing what you're trying to do. - * @G_DBUS_ERROR_AUTH_FAILED: - * Authentication didn't work. - * @G_DBUS_ERROR_NO_SERVER: - * Unable to connect to server (probably caused by ECONNREFUSED on a - * socket). - * @G_DBUS_ERROR_TIMEOUT: - * Certain timeout errors, possibly ETIMEDOUT on a socket. Note that - * %G_DBUS_ERROR_NO_REPLY is used for message reply timeouts. Warning: - * this is confusingly-named given that %G_DBUS_ERROR_TIMED_OUT also - * exists. We can't fix it for compatibility reasons so just be - * careful. - * @G_DBUS_ERROR_NO_NETWORK: - * No network access (probably ENETUNREACH on a socket). - * @G_DBUS_ERROR_ADDRESS_IN_USE: - * Can't bind a socket since its address is in use (i.e. EADDRINUSE). - * @G_DBUS_ERROR_DISCONNECTED: - * The connection is disconnected and you're trying to use it. - * @G_DBUS_ERROR_INVALID_ARGS: - * Invalid arguments passed to a method call. - * @G_DBUS_ERROR_FILE_NOT_FOUND: - * Missing file. - * @G_DBUS_ERROR_FILE_EXISTS: - * Existing file and the operation you're using does not silently overwrite. - * @G_DBUS_ERROR_UNKNOWN_METHOD: - * Method name you invoked isn't known by the object you invoked it on. - * @G_DBUS_ERROR_TIMED_OUT: - * Certain timeout errors, e.g. while starting a service. Warning: this is - * confusingly-named given that %G_DBUS_ERROR_TIMEOUT also exists. We - * can't fix it for compatibility reasons so just be careful. - * @G_DBUS_ERROR_MATCH_RULE_NOT_FOUND: - * Tried to remove or modify a match rule that didn't exist. - * @G_DBUS_ERROR_MATCH_RULE_INVALID: - * The match rule isn't syntactically valid. - * @G_DBUS_ERROR_SPAWN_EXEC_FAILED: - * While starting a new process, the exec() call failed. - * @G_DBUS_ERROR_SPAWN_FORK_FAILED: - * While starting a new process, the fork() call failed. - * @G_DBUS_ERROR_SPAWN_CHILD_EXITED: - * While starting a new process, the child exited with a status code. - * @G_DBUS_ERROR_SPAWN_CHILD_SIGNALED: - * While starting a new process, the child exited on a signal. - * @G_DBUS_ERROR_SPAWN_FAILED: - * While starting a new process, something went wrong. - * @G_DBUS_ERROR_SPAWN_SETUP_FAILED: - * We failed to setup the environment correctly. - * @G_DBUS_ERROR_SPAWN_CONFIG_INVALID: - * We failed to setup the config parser correctly. - * @G_DBUS_ERROR_SPAWN_SERVICE_INVALID: - * Bus name was not valid. - * @G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND: - * Service file not found in system-services directory. - * @G_DBUS_ERROR_SPAWN_PERMISSIONS_INVALID: - * Permissions are incorrect on the setuid helper. - * @G_DBUS_ERROR_SPAWN_FILE_INVALID: - * Service file invalid (Name, User or Exec missing). - * @G_DBUS_ERROR_SPAWN_NO_MEMORY: - * Tried to get a UNIX process ID and it wasn't available. - * @G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN: - * Tried to get a UNIX process ID and it wasn't available. - * @G_DBUS_ERROR_INVALID_SIGNATURE: - * A type signature is not valid. - * @G_DBUS_ERROR_INVALID_FILE_CONTENT: - * A file contains invalid syntax or is otherwise broken. - * @G_DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN: - * Asked for SELinux security context and it wasn't available. - * @G_DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN: - * Asked for ADT audit data and it wasn't available. - * @G_DBUS_ERROR_OBJECT_PATH_IN_USE: - * There's already an object with the requested object path. - * - * Error codes for the %G_DBUS_ERROR error domain. - * - * Since: 2.26 - */ -typedef enum -{ - /* Well-known errors in the org.freedesktop.DBus.Error namespace */ - G_DBUS_ERROR_FAILED, /* org.freedesktop.DBus.Error.Failed */ - G_DBUS_ERROR_NO_MEMORY, /* org.freedesktop.DBus.Error.NoMemory */ - G_DBUS_ERROR_SERVICE_UNKNOWN, /* org.freedesktop.DBus.Error.ServiceUnknown */ - G_DBUS_ERROR_NAME_HAS_NO_OWNER, /* org.freedesktop.DBus.Error.NameHasNoOwner */ - G_DBUS_ERROR_NO_REPLY, /* org.freedesktop.DBus.Error.NoReply */ - G_DBUS_ERROR_IO_ERROR, /* org.freedesktop.DBus.Error.IOError */ - G_DBUS_ERROR_BAD_ADDRESS, /* org.freedesktop.DBus.Error.BadAddress */ - G_DBUS_ERROR_NOT_SUPPORTED, /* org.freedesktop.DBus.Error.NotSupported */ - G_DBUS_ERROR_LIMITS_EXCEEDED, /* org.freedesktop.DBus.Error.LimitsExceeded */ - G_DBUS_ERROR_ACCESS_DENIED, /* org.freedesktop.DBus.Error.AccessDenied */ - G_DBUS_ERROR_AUTH_FAILED, /* org.freedesktop.DBus.Error.AuthFailed */ - G_DBUS_ERROR_NO_SERVER, /* org.freedesktop.DBus.Error.NoServer */ - G_DBUS_ERROR_TIMEOUT, /* org.freedesktop.DBus.Error.Timeout */ - G_DBUS_ERROR_NO_NETWORK, /* org.freedesktop.DBus.Error.NoNetwork */ - G_DBUS_ERROR_ADDRESS_IN_USE, /* org.freedesktop.DBus.Error.AddressInUse */ - G_DBUS_ERROR_DISCONNECTED, /* org.freedesktop.DBus.Error.Disconnected */ - G_DBUS_ERROR_INVALID_ARGS, /* org.freedesktop.DBus.Error.InvalidArgs */ - G_DBUS_ERROR_FILE_NOT_FOUND, /* org.freedesktop.DBus.Error.FileNotFound */ - G_DBUS_ERROR_FILE_EXISTS, /* org.freedesktop.DBus.Error.FileExists */ - G_DBUS_ERROR_UNKNOWN_METHOD, /* org.freedesktop.DBus.Error.UnknownMethod */ - G_DBUS_ERROR_TIMED_OUT, /* org.freedesktop.DBus.Error.TimedOut */ - G_DBUS_ERROR_MATCH_RULE_NOT_FOUND, /* org.freedesktop.DBus.Error.MatchRuleNotFound */ - G_DBUS_ERROR_MATCH_RULE_INVALID, /* org.freedesktop.DBus.Error.MatchRuleInvalid */ - G_DBUS_ERROR_SPAWN_EXEC_FAILED, /* org.freedesktop.DBus.Error.Spawn.ExecFailed */ - G_DBUS_ERROR_SPAWN_FORK_FAILED, /* org.freedesktop.DBus.Error.Spawn.ForkFailed */ - G_DBUS_ERROR_SPAWN_CHILD_EXITED, /* org.freedesktop.DBus.Error.Spawn.ChildExited */ - G_DBUS_ERROR_SPAWN_CHILD_SIGNALED, /* org.freedesktop.DBus.Error.Spawn.ChildSignaled */ - G_DBUS_ERROR_SPAWN_FAILED, /* org.freedesktop.DBus.Error.Spawn.Failed */ - G_DBUS_ERROR_SPAWN_SETUP_FAILED, /* org.freedesktop.DBus.Error.Spawn.FailedToSetup */ - G_DBUS_ERROR_SPAWN_CONFIG_INVALID, /* org.freedesktop.DBus.Error.Spawn.ConfigInvalid */ - G_DBUS_ERROR_SPAWN_SERVICE_INVALID, /* org.freedesktop.DBus.Error.Spawn.ServiceNotValid */ - G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND, /* org.freedesktop.DBus.Error.Spawn.ServiceNotFound */ - G_DBUS_ERROR_SPAWN_PERMISSIONS_INVALID, /* org.freedesktop.DBus.Error.Spawn.PermissionsInvalid */ - G_DBUS_ERROR_SPAWN_FILE_INVALID, /* org.freedesktop.DBus.Error.Spawn.FileInvalid */ - G_DBUS_ERROR_SPAWN_NO_MEMORY, /* org.freedesktop.DBus.Error.Spawn.NoMemory */ - G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, /* org.freedesktop.DBus.Error.UnixProcessIdUnknown */ - G_DBUS_ERROR_INVALID_SIGNATURE, /* org.freedesktop.DBus.Error.InvalidSignature */ - G_DBUS_ERROR_INVALID_FILE_CONTENT, /* org.freedesktop.DBus.Error.InvalidFileContent */ - G_DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN, /* org.freedesktop.DBus.Error.SELinuxSecurityContextUnknown */ - G_DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN, /* org.freedesktop.DBus.Error.AdtAuditDataUnknown */ - G_DBUS_ERROR_OBJECT_PATH_IN_USE /* org.freedesktop.DBus.Error.ObjectPathInUse */ -} GDBusError; -/* Remember to update g_dbus_error_quark() in gdbuserror.c if you extend this enumeration */ - -/** - * GDBusConnectionFlags: - * @G_DBUS_CONNECTION_FLAGS_NONE: No flags set. - * @G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT: Perform authentication against server. - * @G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER: Perform authentication against client. - * @G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: When - * authenticating as a server, allow the anonymous authentication - * method. - * @G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION: Pass this flag if connecting to a peer that is a - * message bus. This means that the Hello() method will be invoked as part of the connection setup. - * @G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING: If set, processing of D-Bus messages is - * delayed until g_dbus_connection_start_message_processing() is called. - * - * Flags used when creating a new #GDBusConnection. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_CONNECTION_FLAGS_NONE = 0, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT = (1<<0), - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER = (1<<1), - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS = (1<<2), - G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION = (1<<3), - G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING = (1<<4) -} GDBusConnectionFlags; - -/** - * GDBusCapabilityFlags: - * @G_DBUS_CAPABILITY_FLAGS_NONE: No flags set. - * @G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING: The connection - * supports exchanging UNIX file descriptors with the remote peer. - * - * Capabilities negotiated with the remote peer. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_CAPABILITY_FLAGS_NONE = 0, - G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING = (1<<0) -} GDBusCapabilityFlags; - -/** - * GDBusCallFlags: - * @G_DBUS_CALL_FLAGS_NONE: No flags set. - * @G_DBUS_CALL_FLAGS_NO_AUTO_START: The bus must not launch - * an owner for the destination name in response to this method - * invocation. - * - * Flags used in g_dbus_connection_call() and similar APIs. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_CALL_FLAGS_NONE = 0, - G_DBUS_CALL_FLAGS_NO_AUTO_START = (1<<0) -} GDBusCallFlags; -/* (1<<31) is reserved for internal use by GDBusConnection, do not use it. */ - -/** - * GDBusMessageType: - * @G_DBUS_MESSAGE_TYPE_INVALID: Message is of invalid type. - * @G_DBUS_MESSAGE_TYPE_METHOD_CALL: Method call. - * @G_DBUS_MESSAGE_TYPE_METHOD_RETURN: Method reply. - * @G_DBUS_MESSAGE_TYPE_ERROR: Error reply. - * @G_DBUS_MESSAGE_TYPE_SIGNAL: Signal emission. - * - * Message types used in #GDBusMessage. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_MESSAGE_TYPE_INVALID, - G_DBUS_MESSAGE_TYPE_METHOD_CALL, - G_DBUS_MESSAGE_TYPE_METHOD_RETURN, - G_DBUS_MESSAGE_TYPE_ERROR, - G_DBUS_MESSAGE_TYPE_SIGNAL -} GDBusMessageType; - -/** - * GDBusMessageFlags: - * @G_DBUS_MESSAGE_FLAGS_NONE: No flags set. - * @G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED: A reply is not expected. - * @G_DBUS_MESSAGE_FLAGS_NO_AUTO_START: The bus must not launch an - * owner for the destination name in response to this message. - * - * Message flags used in #GDBusMessage. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_MESSAGE_FLAGS_NONE = 0, - G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED = (1<<0), - G_DBUS_MESSAGE_FLAGS_NO_AUTO_START = (1<<1) -} GDBusMessageFlags; - -/** - * GDBusMessageHeaderField: - * @G_DBUS_MESSAGE_HEADER_FIELD_INVALID: Not a valid header field. - * @G_DBUS_MESSAGE_HEADER_FIELD_PATH: The object path. - * @G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE: The interface name. - * @G_DBUS_MESSAGE_HEADER_FIELD_MEMBER: The method or signal name. - * @G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME: The name of the error that occurred. - * @G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL: The serial number the message is a reply to. - * @G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION: The name the message is intended for. - * @G_DBUS_MESSAGE_HEADER_FIELD_SENDER: Unique name of the sender of the message (filled in by the bus). - * @G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE: The signature of the message body. - * @G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS: The number of UNIX file descriptors that accompany the message. - * - * Header fields used in #GDBusMessage. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_MESSAGE_HEADER_FIELD_INVALID, - G_DBUS_MESSAGE_HEADER_FIELD_PATH, - G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE, - G_DBUS_MESSAGE_HEADER_FIELD_MEMBER, - G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME, - G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL, - G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION, - G_DBUS_MESSAGE_HEADER_FIELD_SENDER, - G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE, - G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS -} GDBusMessageHeaderField; - -/** - * GDBusPropertyInfoFlags: - * @G_DBUS_PROPERTY_INFO_FLAGS_NONE: No flags set. - * @G_DBUS_PROPERTY_INFO_FLAGS_READABLE: Property is readable. - * @G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE: Property is writable. - * - * Flags describing the access control of a D-Bus property. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_PROPERTY_INFO_FLAGS_NONE = 0, - G_DBUS_PROPERTY_INFO_FLAGS_READABLE = (1<<0), - G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE = (1<<1) -} GDBusPropertyInfoFlags; - -/** - * GDBusSubtreeFlags: - * @G_DBUS_SUBTREE_FLAGS_NONE: No flags set. - * @G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES: Method calls to objects not in the enumerated range - * will still be dispatched. This is useful if you want - * to dynamically spawn objects in the subtree. - * - * Flags passed to g_dbus_connection_register_subtree(). - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_SUBTREE_FLAGS_NONE = 0, - G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES = (1<<0) -} GDBusSubtreeFlags; - -/** - * GDBusServerFlags: - * @G_DBUS_SERVER_FLAGS_NONE: No flags set. - * @G_DBUS_SERVER_FLAGS_RUN_IN_THREAD: All #GDBusServer::new-connection - * signals will run in separated dedicated threads (see signal for - * details). - * @G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: Allow the anonymous - * authentication method. - * - * Flags used when creating a #GDBusServer. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_SERVER_FLAGS_NONE = 0, - G_DBUS_SERVER_FLAGS_RUN_IN_THREAD = (1<<0), - G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS = (1<<1) -} GDBusServerFlags; - -/** - * GDBusSignalFlags: - * @G_DBUS_SIGNAL_FLAGS_NONE: No flags set. - * @G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE: Don't actually send the AddMatch - * D-Bus call for this signal subscription. This gives you more control - * over which match rules you add (but you must add them manually). - * - * Flags used when subscribing to signals via g_dbus_connection_signal_subscribe(). - * - * Since: 2.26 - */ -typedef enum /*< flags >*/ -{ - G_DBUS_SIGNAL_FLAGS_NONE = 0, - G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE = (1<<0) -} GDBusSignalFlags; - -/** - * GDBusSendMessageFlags: - * @G_DBUS_SEND_MESSAGE_FLAGS_NONE: No flags set. - * @G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL: Do not automatically - * assign a serial number from the #GDBusConnection object when - * sending a message. - * - * Flags used when sending #GDBusMessages on a #GDBusConnection. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_SEND_MESSAGE_FLAGS_NONE = 0, - G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL = (1<<0) -} GDBusSendMessageFlags; -/* (1<<31) is reserved for internal use by GDBusConnection, do not use it. */ - -/** - * GCredentialsType: - * @G_CREDENTIALS_TYPE_INVALID: Indicates an invalid native credential type. - * @G_CREDENTIALS_TYPE_LINUX_UCRED: The native credentials type is a struct ucred. - * @G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED: The native credentials type is a struct cmsgcred. - * @G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED: The native credentials type is a struct sockpeercred. Added in 2.30. - * - * Enumeration describing different kinds of native credential types. - * - * Since: 2.26 - */ -typedef enum -{ - G_CREDENTIALS_TYPE_INVALID, - G_CREDENTIALS_TYPE_LINUX_UCRED, - G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED, - G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED -} GCredentialsType; - -/** - * GDBusMessageByteOrder: - * @G_DBUS_MESSAGE_BYTE_ORDER_BIG_ENDIAN: The byte order is big endian. - * @G_DBUS_MESSAGE_BYTE_ORDER_LITTLE_ENDIAN: The byte order is little endian. - * - * Enumeration used to describe the byte order of a D-Bus message. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_MESSAGE_BYTE_ORDER_BIG_ENDIAN = 'B', - G_DBUS_MESSAGE_BYTE_ORDER_LITTLE_ENDIAN = 'l' -} GDBusMessageByteOrder; - -/** - * GApplicationFlags: - * @G_APPLICATION_FLAGS_NONE: Default - * @G_APPLICATION_IS_SERVICE: Run as a service. In this mode, registration - * fails if the service is already running, and the application will - * stay around for a while when the use count falls to zero. - * @G_APPLICATION_IS_LAUNCHER: Don't try to become the primary instance. - * @G_APPLICATION_HANDLES_OPEN: This application handles opening files (in - * the primary instance). Note that this flag only affects the default - * implementation of local_command_line(), and has no effect if - * %G_APPLICATION_HANDLES_COMMAND_LINE is given. - * See g_application_run() for details. - * @G_APPLICATION_HANDLES_COMMAND_LINE: This application handles command line - * arguments (in the primary instance). Note that this flag only affect - * the default implementation of local_command_line(). - * See g_application_run() for details. - * @G_APPLICATION_SEND_ENVIRONMENT: Send the environment of the - * launching process to the primary instance. Set this flag if your - * application is expected to behave differently depending on certain - * environment variables. For instance, an editor might be expected - * to use the GIT_COMMITTER_NAME environment variable - * when editing a git commit message. The environment is available - * to the #GApplication::command-line signal handler, via - * g_application_command_line_getenv(). - * @G_APPLICATION_NON_UNIQUE: Make no attempts to do any of the typical - * single-instance application negotiation, even if the application - * ID is given. The application neither attempts to become the - * owner of the application ID nor does it check if an existing - * owner already exists. Everything occurs in the local process. - * Since: 2.30. - * - * Flags used to define the behaviour of a #GApplication. - * - * Since: 2.28 - **/ -typedef enum -{ - G_APPLICATION_FLAGS_NONE, - G_APPLICATION_IS_SERVICE = (1 << 0), - G_APPLICATION_IS_LAUNCHER = (1 << 1), - - G_APPLICATION_HANDLES_OPEN = (1 << 2), - G_APPLICATION_HANDLES_COMMAND_LINE = (1 << 3), - G_APPLICATION_SEND_ENVIRONMENT = (1 << 4), - - G_APPLICATION_NON_UNIQUE = (1 << 5) -} GApplicationFlags; - -/** - * GTlsError: - * @G_TLS_ERROR_UNAVAILABLE: No TLS provider is available - * @G_TLS_ERROR_MISC: Miscellaneous TLS error - * @G_TLS_ERROR_BAD_CERTIFICATE: A certificate could not be parsed - * @G_TLS_ERROR_NOT_TLS: The TLS handshake failed because the - * peer does not seem to be a TLS server. - * @G_TLS_ERROR_HANDSHAKE: The TLS handshake failed because the - * peer's certificate was not acceptable. - * @G_TLS_ERROR_CERTIFICATE_REQUIRED: The TLS handshake failed because - * the server requested a client-side certificate, but none was - * provided. See g_tls_connection_set_certificate(). - * @G_TLS_ERROR_EOF: The TLS connection was closed without proper - * notice, which may indicate an attack. See - * g_tls_connection_set_require_close_notify(). - * - * An error code used with %G_TLS_ERROR in a #GError returned from a - * TLS-related routine. - * - * Since: 2.28 - */ -typedef enum { - G_TLS_ERROR_UNAVAILABLE, - G_TLS_ERROR_MISC, - G_TLS_ERROR_BAD_CERTIFICATE, - G_TLS_ERROR_NOT_TLS, - G_TLS_ERROR_HANDSHAKE, - G_TLS_ERROR_CERTIFICATE_REQUIRED, - G_TLS_ERROR_EOF -} GTlsError; - -/** - * GTlsCertificateFlags: - * @G_TLS_CERTIFICATE_UNKNOWN_CA: The signing certificate authority is - * not known. - * @G_TLS_CERTIFICATE_BAD_IDENTITY: The certificate does not match the - * expected identity of the site that it was retrieved from. - * @G_TLS_CERTIFICATE_NOT_ACTIVATED: The certificate's activation time - * is still in the future - * @G_TLS_CERTIFICATE_EXPIRED: The certificate has expired - * @G_TLS_CERTIFICATE_REVOKED: The certificate has been revoked - * according to the #GTlsConnection's certificate revocation list. - * @G_TLS_CERTIFICATE_INSECURE: The certificate's algorithm is - * considered insecure. - * @G_TLS_CERTIFICATE_GENERIC_ERROR: Some other error occurred validating - * the certificate - * @G_TLS_CERTIFICATE_VALIDATE_ALL: the combination of all of the above - * flags - * - * A set of flags describing TLS certification validation. This can be - * used to set which validation steps to perform (eg, with - * g_tls_client_connection_set_validation_flags()), or to describe why - * a particular certificate was rejected (eg, in - * #GTlsConnection::accept-certificate). - * - * Since: 2.28 - */ -typedef enum { - G_TLS_CERTIFICATE_UNKNOWN_CA = (1 << 0), - G_TLS_CERTIFICATE_BAD_IDENTITY = (1 << 1), - G_TLS_CERTIFICATE_NOT_ACTIVATED = (1 << 2), - G_TLS_CERTIFICATE_EXPIRED = (1 << 3), - G_TLS_CERTIFICATE_REVOKED = (1 << 4), - G_TLS_CERTIFICATE_INSECURE = (1 << 5), - G_TLS_CERTIFICATE_GENERIC_ERROR = (1 << 6), - - G_TLS_CERTIFICATE_VALIDATE_ALL = 0x007f -} GTlsCertificateFlags; - -/** - * GTlsAuthenticationMode: - * @G_TLS_AUTHENTICATION_NONE: client authentication not required - * @G_TLS_AUTHENTICATION_REQUESTED: client authentication is requested - * @G_TLS_AUTHENTICATION_REQUIRED: client authentication is required - * - * The client authentication mode for a #GTlsServerConnection. - * - * Since: 2.28 - */ -typedef enum { - G_TLS_AUTHENTICATION_NONE, - G_TLS_AUTHENTICATION_REQUESTED, - G_TLS_AUTHENTICATION_REQUIRED -} GTlsAuthenticationMode; - -/** - * GTlsRehandshakeMode: - * @G_TLS_REHANDSHAKE_NEVER: Never allow rehandshaking - * @G_TLS_REHANDSHAKE_SAFELY: Allow safe rehandshaking only - * @G_TLS_REHANDSHAKE_UNSAFELY: Allow unsafe rehandshaking - * - * When to allow rehandshaking. See - * g_tls_connection_set_rehandshake_mode(). - * - * Since: 2.28 - */ -typedef enum { - G_TLS_REHANDSHAKE_NEVER, - G_TLS_REHANDSHAKE_SAFELY, - G_TLS_REHANDSHAKE_UNSAFELY -} GTlsRehandshakeMode; - -/** - * GTlsPasswordFlags: - * @G_TLS_PASSWORD_NONE: No flags - * @G_TLS_PASSWORD_RETRY: The password was wrong, and the user should retry. - * @G_TLS_PASSWORD_MANY_TRIES: Hint to the user that the password has been - * wrong many times, and the user may not have many chances left. - * @G_TLS_PASSWORD_FINAL_TRY: Hint to the user that this is the last try to get - * this password right. - * - * Various flags for the password. - * - * Since: 2.30 - */ - -typedef enum _GTlsPasswordFlags -{ - G_TLS_PASSWORD_NONE = 0, - G_TLS_PASSWORD_RETRY = 1 << 1, - G_TLS_PASSWORD_MANY_TRIES = 1 << 2, - G_TLS_PASSWORD_FINAL_TRY = 1 << 3 -} GTlsPasswordFlags; - -/** - * GTlsInteractionResult: - * @G_TLS_INTERACTION_UNHANDLED: The interaction was unhandled (i.e. not - * implemented). - * @G_TLS_INTERACTION_HANDLED: The interaction completed, and resulting data - * is available. - * @G_TLS_INTERACTION_FAILED: The interaction has failed, or was cancelled. - * and the operation should be aborted. - * - * #GTlsInteractionResult is returned by various functions in #GTlsInteraction - * when finishing an interaction request. - * - * Since: 2.30 - */ -typedef enum { - G_TLS_INTERACTION_UNHANDLED, - G_TLS_INTERACTION_HANDLED, - G_TLS_INTERACTION_FAILED -} GTlsInteractionResult; - -/** - * GDBusInterfaceSkeletonFlags: - * @G_DBUS_INTERFACE_SKELETON_FLAGS_NONE: No flags set. - * @G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD: Each method invocation is handled in - * a thread dedicated to the invocation. This means that the method implementation can use blocking IO - * without blocking any other part of the process. It also means that the method implementation must - * use locking to access data structures used by other threads. - * - * Flags describing the behavior of a #GDBusInterfaceSkeleton instance. - * - * Since: 2.30 - */ -typedef enum -{ - G_DBUS_INTERFACE_SKELETON_FLAGS_NONE = 0, - G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD = (1<<0) -} GDBusInterfaceSkeletonFlags; - -/** - * GDBusObjectManagerClientFlags: - * @G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE: No flags set. - * @G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START: If not set and the - * manager is for a well-known name, then request the bus to launch - * an owner for the name if no-one owns the name. This flag can only - * be used in managers for well-known names. - * - * Flags used when constructing a #GDBusObjectManagerClient. - * - * Since: 2.30 - */ -typedef enum -{ - G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE = 0, - G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START = (1<<0) -} GDBusObjectManagerClientFlags; - -/** - * GTlsDatabaseVerifyFlags: - * @G_TLS_DATABASE_VERIFY_NONE: No verification flags - * - * Flags for g_tls_database_verify_chain(). - * - * Since: 2.30 - */ -typedef enum /*< flags >*/ { - G_TLS_DATABASE_VERIFY_NONE = 0 -} GTlsDatabaseVerifyFlags; - -/** - * GTlsDatabaseLookupFlags: - * @G_TLS_DATABASE_LOOKUP_NONE: No lookup flags - * @G_TLS_DATABASE_LOOKUP_KEYPAIR: Restrict lookup to certificates that have - * a private key. - * - * Flags for g_tls_database_lookup_certificate_handle(), - * g_tls_database_lookup_certificate_issuer(), - * and g_tls_database_lookup_certificates_issued_by(). - * - * Since: 2.30 - */ -typedef enum { - G_TLS_DATABASE_LOOKUP_NONE = 0, - G_TLS_DATABASE_LOOKUP_KEYPAIR = 1 -} GTlsDatabaseLookupFlags; - -/** - * GIOModuleScopeFlags: - * @G_IO_MODULE_SCOPE_NONE: No module scan flags - * @G_IO_MODULE_SCOPE_BLOCK_DUPLICATES: When using this scope to load or - * scan modules, automatically block a modules which has the same base - * basename as previously loaded module. - * - * Flags for use with g_io_module_scope_new(). - * - * Since: 2.30 - */ -typedef enum { - G_IO_MODULE_SCOPE_NONE, - G_IO_MODULE_SCOPE_BLOCK_DUPLICATES -} GIOModuleScopeFlags; - -/** - * GSocketClientEvent: - * @G_SOCKET_CLIENT_RESOLVING: The client is doing a DNS lookup. - * @G_SOCKET_CLIENT_RESOLVED: The client has completed a DNS lookup. - * @G_SOCKET_CLIENT_CONNECTING: The client is connecting to a remote - * host (either a proxy or the destination server). - * @G_SOCKET_CLIENT_CONNECTED: The client has connected to a remote - * host. - * @G_SOCKET_CLIENT_PROXY_NEGOTIATING: The client is negotiating - * with a proxy to connect to the destination server. - * @G_SOCKET_CLIENT_PROXY_NEGOTIATED: The client has negotiated - * with the proxy server. - * @G_SOCKET_CLIENT_TLS_HANDSHAKING: The client is performing a - * TLS handshake. - * @G_SOCKET_CLIENT_TLS_HANDSHAKED: The client has performed a - * TLS handshake. - * @G_SOCKET_CLIENT_COMPLETE: The client is done with a particular - * #GSocketConnectable. - * - * Describes an event occurring on a #GSocketClient. See the - * #GSocketClient::event signal for more details. - * - * Additional values may be added to this type in the future. - * - * Since: 2.32 - */ -typedef enum { - G_SOCKET_CLIENT_RESOLVING, - G_SOCKET_CLIENT_RESOLVED, - G_SOCKET_CLIENT_CONNECTING, - G_SOCKET_CLIENT_CONNECTED, - G_SOCKET_CLIENT_PROXY_NEGOTIATING, - G_SOCKET_CLIENT_PROXY_NEGOTIATED, - G_SOCKET_CLIENT_TLS_HANDSHAKING, - G_SOCKET_CLIENT_TLS_HANDSHAKED, - G_SOCKET_CLIENT_COMPLETE -} GSocketClientEvent; - -/** - * GTestDBusFlags: - * @G_TEST_DBUS_NONE: No flags. - * - * Flags to define future #GTestDBus behaviour. - * - * Since: 2.34 - */ -typedef enum /*< flags >*/ { - G_TEST_DBUS_NONE = 0 -} GTestDBusFlags; - -G_END_DECLS - -#endif /* __GIO_ENUMS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gioenumtypes.h b/GstreamerHelper/x64/include/glib-2.0/gio/gioenumtypes.h deleted file mode 100644 index 70b2630e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gioenumtypes.h +++ /dev/null @@ -1,159 +0,0 @@ - -/* Generated data (by glib-mkenums) */ - -#ifndef __GIO_ENUM_TYPES_H__ -#define __GIO_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "gioenums.h" */ -GType g_app_info_create_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_APP_INFO_CREATE_FLAGS (g_app_info_create_flags_get_type ()) -GType g_converter_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_CONVERTER_FLAGS (g_converter_flags_get_type ()) -GType g_converter_result_get_type (void) G_GNUC_CONST; -#define G_TYPE_CONVERTER_RESULT (g_converter_result_get_type ()) -GType g_data_stream_byte_order_get_type (void) G_GNUC_CONST; -#define G_TYPE_DATA_STREAM_BYTE_ORDER (g_data_stream_byte_order_get_type ()) -GType g_data_stream_newline_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_DATA_STREAM_NEWLINE_TYPE (g_data_stream_newline_type_get_type ()) -GType g_file_attribute_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_ATTRIBUTE_TYPE (g_file_attribute_type_get_type ()) -GType g_file_attribute_info_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_ATTRIBUTE_INFO_FLAGS (g_file_attribute_info_flags_get_type ()) -GType g_file_attribute_status_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_ATTRIBUTE_STATUS (g_file_attribute_status_get_type ()) -GType g_file_query_info_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_QUERY_INFO_FLAGS (g_file_query_info_flags_get_type ()) -GType g_file_create_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_CREATE_FLAGS (g_file_create_flags_get_type ()) -GType g_mount_mount_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_MOUNT_MOUNT_FLAGS (g_mount_mount_flags_get_type ()) -GType g_mount_unmount_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_MOUNT_UNMOUNT_FLAGS (g_mount_unmount_flags_get_type ()) -GType g_drive_start_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DRIVE_START_FLAGS (g_drive_start_flags_get_type ()) -GType g_drive_start_stop_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_DRIVE_START_STOP_TYPE (g_drive_start_stop_type_get_type ()) -GType g_file_copy_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_COPY_FLAGS (g_file_copy_flags_get_type ()) -GType g_file_monitor_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_MONITOR_FLAGS (g_file_monitor_flags_get_type ()) -GType g_file_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_TYPE (g_file_type_get_type ()) -GType g_filesystem_preview_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILESYSTEM_PREVIEW_TYPE (g_filesystem_preview_type_get_type ()) -GType g_file_monitor_event_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_MONITOR_EVENT (g_file_monitor_event_get_type ()) -GType g_io_error_enum_get_type (void) G_GNUC_CONST; -#define G_TYPE_IO_ERROR_ENUM (g_io_error_enum_get_type ()) -GType g_ask_password_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_ASK_PASSWORD_FLAGS (g_ask_password_flags_get_type ()) -GType g_password_save_get_type (void) G_GNUC_CONST; -#define G_TYPE_PASSWORD_SAVE (g_password_save_get_type ()) -GType g_mount_operation_result_get_type (void) G_GNUC_CONST; -#define G_TYPE_MOUNT_OPERATION_RESULT (g_mount_operation_result_get_type ()) -GType g_output_stream_splice_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_OUTPUT_STREAM_SPLICE_FLAGS (g_output_stream_splice_flags_get_type ()) -GType g_io_stream_splice_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_IO_STREAM_SPLICE_FLAGS (g_io_stream_splice_flags_get_type ()) -GType g_emblem_origin_get_type (void) G_GNUC_CONST; -#define G_TYPE_EMBLEM_ORIGIN (g_emblem_origin_get_type ()) -GType g_resolver_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOLVER_ERROR (g_resolver_error_get_type ()) -GType g_resolver_record_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOLVER_RECORD_TYPE (g_resolver_record_type_get_type ()) -GType g_resource_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOURCE_ERROR (g_resource_error_get_type ()) -GType g_resource_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOURCE_FLAGS (g_resource_flags_get_type ()) -GType g_resource_lookup_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOURCE_LOOKUP_FLAGS (g_resource_lookup_flags_get_type ()) -GType g_socket_family_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_FAMILY (g_socket_family_get_type ()) -GType g_socket_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_TYPE (g_socket_type_get_type ()) -GType g_socket_msg_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_MSG_FLAGS (g_socket_msg_flags_get_type ()) -GType g_socket_protocol_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_PROTOCOL (g_socket_protocol_get_type ()) -GType g_zlib_compressor_format_get_type (void) G_GNUC_CONST; -#define G_TYPE_ZLIB_COMPRESSOR_FORMAT (g_zlib_compressor_format_get_type ()) -GType g_unix_socket_address_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_UNIX_SOCKET_ADDRESS_TYPE (g_unix_socket_address_type_get_type ()) -GType g_bus_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_BUS_TYPE (g_bus_type_get_type ()) -GType g_bus_name_owner_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_BUS_NAME_OWNER_FLAGS (g_bus_name_owner_flags_get_type ()) -GType g_bus_name_watcher_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_BUS_NAME_WATCHER_FLAGS (g_bus_name_watcher_flags_get_type ()) -GType g_dbus_proxy_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_PROXY_FLAGS (g_dbus_proxy_flags_get_type ()) -GType g_dbus_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_ERROR (g_dbus_error_get_type ()) -GType g_dbus_connection_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_CONNECTION_FLAGS (g_dbus_connection_flags_get_type ()) -GType g_dbus_capability_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_CAPABILITY_FLAGS (g_dbus_capability_flags_get_type ()) -GType g_dbus_call_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_CALL_FLAGS (g_dbus_call_flags_get_type ()) -GType g_dbus_message_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_TYPE (g_dbus_message_type_get_type ()) -GType g_dbus_message_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_FLAGS (g_dbus_message_flags_get_type ()) -GType g_dbus_message_header_field_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_HEADER_FIELD (g_dbus_message_header_field_get_type ()) -GType g_dbus_property_info_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_PROPERTY_INFO_FLAGS (g_dbus_property_info_flags_get_type ()) -GType g_dbus_subtree_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SUBTREE_FLAGS (g_dbus_subtree_flags_get_type ()) -GType g_dbus_server_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SERVER_FLAGS (g_dbus_server_flags_get_type ()) -GType g_dbus_signal_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SIGNAL_FLAGS (g_dbus_signal_flags_get_type ()) -GType g_dbus_send_message_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SEND_MESSAGE_FLAGS (g_dbus_send_message_flags_get_type ()) -GType g_credentials_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_CREDENTIALS_TYPE (g_credentials_type_get_type ()) -GType g_dbus_message_byte_order_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_BYTE_ORDER (g_dbus_message_byte_order_get_type ()) -GType g_application_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_APPLICATION_FLAGS (g_application_flags_get_type ()) -GType g_tls_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_ERROR (g_tls_error_get_type ()) -GType g_tls_certificate_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_CERTIFICATE_FLAGS (g_tls_certificate_flags_get_type ()) -GType g_tls_authentication_mode_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_AUTHENTICATION_MODE (g_tls_authentication_mode_get_type ()) -GType g_tls_rehandshake_mode_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_REHANDSHAKE_MODE (g_tls_rehandshake_mode_get_type ()) -GType g_tls_password_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_PASSWORD_FLAGS (g_tls_password_flags_get_type ()) -GType g_tls_interaction_result_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_INTERACTION_RESULT (g_tls_interaction_result_get_type ()) -GType g_dbus_interface_skeleton_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_INTERFACE_SKELETON_FLAGS (g_dbus_interface_skeleton_flags_get_type ()) -GType g_dbus_object_manager_client_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_OBJECT_MANAGER_CLIENT_FLAGS (g_dbus_object_manager_client_flags_get_type ()) -GType g_tls_database_verify_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_DATABASE_VERIFY_FLAGS (g_tls_database_verify_flags_get_type ()) -GType g_tls_database_lookup_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_DATABASE_LOOKUP_FLAGS (g_tls_database_lookup_flags_get_type ()) -GType g_io_module_scope_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_IO_MODULE_SCOPE_FLAGS (g_io_module_scope_flags_get_type ()) -GType g_socket_client_event_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_CLIENT_EVENT (g_socket_client_event_get_type ()) -GType g_test_dbus_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TEST_DBUS_FLAGS (g_test_dbus_flags_get_type ()) - -/* enumerations from "gsettings.h" */ -GType g_settings_bind_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_SETTINGS_BIND_FLAGS (g_settings_bind_flags_get_type ()) -G_END_DECLS - -#endif /* __GIO_ENUM_TYPES_H__ */ - -/* Generated data ends here */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gioerror.h b/GstreamerHelper/x64/include/glib-2.0/gio/gioerror.h deleted file mode 100644 index 12c2b062..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gioerror.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_ERROR_H__ -#define __G_IO_ERROR_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * G_IO_ERROR: - * - * Error domain for GIO. Errors in this domain will be from the #GIOErrorEnum enumeration. - * See #GError for more information on error domains. - **/ -#define G_IO_ERROR g_io_error_quark() - -GQuark g_io_error_quark (void); -GIOErrorEnum g_io_error_from_errno (gint err_no); - -#ifdef G_OS_WIN32 -GIOErrorEnum g_io_error_from_win32_error (gint error_code); -#endif - -G_END_DECLS - -#endif /* __G_IO_ERROR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/giomodule.h b/GstreamerHelper/x64/include/glib-2.0/gio/giomodule.h deleted file mode 100644 index e98dd9d2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/giomodule.h +++ /dev/null @@ -1,176 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_MODULE_H__ -#define __G_IO_MODULE_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GIOModuleScope GIOModuleScope; - -GIOModuleScope * g_io_module_scope_new (GIOModuleScopeFlags flags); -void g_io_module_scope_free (GIOModuleScope *scope); -void g_io_module_scope_block (GIOModuleScope *scope, - const gchar *basename); - -#define G_IO_TYPE_MODULE (g_io_module_get_type ()) -#define G_IO_MODULE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_IO_TYPE_MODULE, GIOModule)) -#define G_IO_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_IO_TYPE_MODULE, GIOModuleClass)) -#define G_IO_IS_MODULE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_IO_TYPE_MODULE)) -#define G_IO_IS_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_IO_TYPE_MODULE)) -#define G_IO_MODULE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_IO_TYPE_MODULE, GIOModuleClass)) - -/** - * GIOModule: - * - * Opaque module base class for extending GIO. - **/ -typedef struct _GIOModuleClass GIOModuleClass; - -GType g_io_module_get_type (void) G_GNUC_CONST; -GIOModule *g_io_module_new (const gchar *filename); - -void g_io_modules_scan_all_in_directory (const char *dirname); -GList *g_io_modules_load_all_in_directory (const gchar *dirname); - -void g_io_modules_scan_all_in_directory_with_scope (const gchar *dirname, - GIOModuleScope *scope); -GList *g_io_modules_load_all_in_directory_with_scope (const gchar *dirname, - GIOModuleScope *scope); - -gboolean g_io_module_load_static_module (const char *name); - -GIOExtensionPoint *g_io_extension_point_register (const char *name); -GIOExtensionPoint *g_io_extension_point_lookup (const char *name); -void g_io_extension_point_set_required_type (GIOExtensionPoint *extension_point, - GType type); -GType g_io_extension_point_get_required_type (GIOExtensionPoint *extension_point); -GList *g_io_extension_point_get_extensions (GIOExtensionPoint *extension_point); -GIOExtension * g_io_extension_point_get_extension_by_name (GIOExtensionPoint *extension_point, - const char *name); -GIOExtension * g_io_extension_point_implement (const char *extension_point_name, - GType type, - const char *extension_name, - gint priority); - -GType g_io_extension_get_type (GIOExtension *extension); -const char * g_io_extension_get_name (GIOExtension *extension); -gint g_io_extension_get_priority (GIOExtension *extension); -GTypeClass* g_io_extension_ref_class (GIOExtension *extension); - - -/* API for the modules to implement */ - -/** - * g_io_module_load: - * @module: a #GIOModule. - * - * Required API for GIO modules to implement. - * This function is ran after the module has been loaded into GIO, - * to initialize the module. - **/ -void g_io_module_load (GIOModule *module); - -/** - * g_io_module_unload: - * @module: a #GIOModule. - * - * Required API for GIO modules to implement. - * This function is ran when the module is being unloaded from GIO, - * to finalize the module. - **/ -void g_io_module_unload (GIOModule *module); - -/** - * g_io_module_query: - * - * Optional API for GIO modules to implement. - * - * Should return a list of all the extension points that may be - * implemented in this module. - * - * This method will not be called in normal use, however it may be - * called when probing existing modules and recording which extension - * points that this model is used for. This means we won't have to - * load and initialze this module unless its needed. - * - * If this function is not implemented by the module the module will - * always be loaded, initialized and then unloaded on application startup - * so that it can register its extension points during init. - * - * Note that a module need not actually implement all the extension points - * that g_io_module_query returns, since the exact list of extension may - * depend on runtime issues. However all extension points actually implemented - * must be returned by g_io_module_query() (if defined). - * - * When installing a module that implements g_io_module_query you must - * run gio-querymodules in order to build the cache files required for - * lazy loading. - * - * Returns: (transfer full): A %NULL-terminated array of strings, listing the supported - * extension points of the module. The array must be suitable for - * freeing with g_strfreev(). - * - * Since: 2.24 - **/ -char **g_io_module_query (void); - -#define G_IO_MODULE_DECLARE(name) \ -extern gboolean G_PASTE(g_io_module_, G_PASTE(name, _load_static)) (void); - -#define G_IO_MODULE_LOAD(name) \ -G_PASTE(g_io_module_, G_PASTE(name, _load_static)) () - -#ifdef G_IO_MODULE_BUILD_STATIC -#define G_IO_MODULE_DEFINE(name) \ -G_BEGIN_DECLS \ -void G_PASTE(g_io_module_, G_PASTE(name, _load_static)) (void); \ -void G_PASTE(g_io_module_, G_PASTE(name, _load_static)) (void) \ -{g_io_module_load_static_module (#name);} \ -void G_PASTE(g_io_module_, G_PASTE(name, _load)) (GIOModule *module); \ -void G_PASTE(g_io_module_, G_PASTE(name, _unload)) (GIOModule *module); \ -gchar ** G_PASTE(g_io_module_, G_PASTE(name, _query)) (void); \ -void G_PASTE(g_io_module_, G_PASTE(name, _load)) (GIOModule *module) \ -{_g_io_module_load(module);} \ -void G_PASTE(g_io_module_, G_PASTE(name, _unload)) (GIOModule *module) \ -{_g_io_module_unload(module);} \ -gchar ** G_PASTE(g_io_module_, G_PASTE(name, _query)) (void) \ -{return _g_io_module_query();} \ -G_END_DECLS -#else -#define G_IO_MODULE_DEFINE(name) \ -G_BEGIN_DECLS \ -g_io_module_load(GIOModule *module) { _g_io_module_load(module);} \ -g_io_module_unload(GIOModule *module) { _g_io_module_unload(module);} \ -gchar ** g_io_module_query(void) {return _g_io_module_query();} \ -G_END_DECLS -#endif - -G_END_DECLS -#endif /* __G_IO_MODULE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gioscheduler.h b/GstreamerHelper/x64/include/glib-2.0/gio/gioscheduler.h deleted file mode 100644 index 7d6b5273..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gioscheduler.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_SCHEDULER_H__ -#define __G_IO_SCHEDULER_H__ - -#include - -G_BEGIN_DECLS - - -void g_io_scheduler_push_job (GIOSchedulerJobFunc job_func, - gpointer user_data, - GDestroyNotify notify, - gint io_priority, - GCancellable *cancellable); -void g_io_scheduler_cancel_all_jobs (void); -gboolean g_io_scheduler_job_send_to_mainloop (GIOSchedulerJob *job, - GSourceFunc func, - gpointer user_data, - GDestroyNotify notify); -void g_io_scheduler_job_send_to_mainloop_async (GIOSchedulerJob *job, - GSourceFunc func, - gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif /* __G_IO_SCHEDULER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/giostream.h b/GstreamerHelper/x64/include/glib-2.0/gio/giostream.h deleted file mode 100644 index 90283ddb..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/giostream.h +++ /dev/null @@ -1,123 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008, 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * See the included COPYING file for more information. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_STREAM_H__ -#define __G_IO_STREAM_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_IO_STREAM (g_io_stream_get_type ()) -#define G_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_IO_STREAM, GIOStream)) -#define G_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_IO_STREAM, GIOStreamClass)) -#define G_IS_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_IO_STREAM)) -#define G_IS_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_IO_STREAM)) -#define G_IO_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_IO_STREAM, GIOStreamClass)) - -typedef struct _GIOStreamPrivate GIOStreamPrivate; -typedef struct _GIOStreamClass GIOStreamClass; - -/** - * GIOStream: - * - * Base class for read-write streams. - **/ -struct _GIOStream -{ - GObject parent_instance; - - /*< private >*/ - GIOStreamPrivate *priv; -}; - -struct _GIOStreamClass -{ - GObjectClass parent_class; - - GInputStream * (*get_input_stream) (GIOStream *stream); - GOutputStream * (*get_output_stream) (GIOStream *stream); - - gboolean (* close_fn) (GIOStream *stream, - GCancellable *cancellable, - GError **error); - void (* close_async) (GIOStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GIOStream *stream, - GAsyncResult *result, - GError **error); - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); - void (*_g_reserved9) (void); - void (*_g_reserved10) (void); -}; - -GType g_io_stream_get_type (void) G_GNUC_CONST; - -GInputStream * g_io_stream_get_input_stream (GIOStream *stream); -GOutputStream *g_io_stream_get_output_stream (GIOStream *stream); - -void g_io_stream_splice_async (GIOStream *stream1, - GIOStream *stream2, - GIOStreamSpliceFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -gboolean g_io_stream_splice_finish (GAsyncResult *result, - GError **error); - -gboolean g_io_stream_close (GIOStream *stream, - GCancellable *cancellable, - GError **error); - -void g_io_stream_close_async (GIOStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_io_stream_close_finish (GIOStream *stream, - GAsyncResult *result, - GError **error); - -gboolean g_io_stream_is_closed (GIOStream *stream); -gboolean g_io_stream_has_pending (GIOStream *stream); -gboolean g_io_stream_set_pending (GIOStream *stream, - GError **error); -void g_io_stream_clear_pending (GIOStream *stream); - -G_END_DECLS - -#endif /* __G_IO_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/giotypes.h b/GstreamerHelper/x64/include/glib-2.0/gio/giotypes.h deleted file mode 100644 index 876d856c..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/giotypes.h +++ /dev/null @@ -1,472 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GIO_TYPES_H__ -#define __GIO_TYPES_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GAppLaunchContext GAppLaunchContext; -typedef struct _GAppInfo GAppInfo; /* Dummy typedef */ -typedef struct _GAsyncResult GAsyncResult; /* Dummy typedef */ -typedef struct _GAsyncInitable GAsyncInitable; -typedef struct _GBufferedInputStream GBufferedInputStream; -typedef struct _GBufferedOutputStream GBufferedOutputStream; -typedef struct _GCancellable GCancellable; -typedef struct _GCharsetConverter GCharsetConverter; -typedef struct _GConverter GConverter; -typedef struct _GConverterInputStream GConverterInputStream; -typedef struct _GConverterOutputStream GConverterOutputStream; -typedef struct _GDataInputStream GDataInputStream; -typedef struct _GSimplePermission GSimplePermission; -typedef struct _GZlibCompressor GZlibCompressor; -typedef struct _GZlibDecompressor GZlibDecompressor; - -typedef struct _GSimpleActionGroup GSimpleActionGroup; -typedef struct _GRemoteActionGroup GRemoteActionGroup; -typedef struct _GDBusActionGroup GDBusActionGroup; -typedef struct _GActionMap GActionMap; -typedef struct _GActionGroup GActionGroup; -typedef struct _GSimpleAction GSimpleAction; -typedef struct _GAction GAction; -typedef struct _GApplication GApplication; -typedef struct _GApplicationCommandLine GApplicationCommandLine; -typedef struct _GSettingsBackend GSettingsBackend; -typedef struct _GSettings GSettings; -typedef struct _GPermission GPermission; - -typedef struct _GMenuModel GMenuModel; - -/** - * GDrive: - * - * Opaque drive object. - **/ -typedef struct _GDrive GDrive; /* Dummy typedef */ -typedef struct _GFileEnumerator GFileEnumerator; -typedef struct _GFileMonitor GFileMonitor; -typedef struct _GFilterInputStream GFilterInputStream; -typedef struct _GFilterOutputStream GFilterOutputStream; - -/** - * GFile: - * - * A handle to an object implementing the #GFileIface interface. - * Generally stores a location within the file system. Handles do not - * necessarily represent files or directories that currently exist. - **/ -typedef struct _GFile GFile; /* Dummy typedef */ -typedef struct _GFileInfo GFileInfo; - -/** - * GFileAttributeMatcher: - * - * Determines if a string matches a file attribute. - **/ -typedef struct _GFileAttributeMatcher GFileAttributeMatcher; -typedef struct _GFileAttributeInfo GFileAttributeInfo; -typedef struct _GFileAttributeInfoList GFileAttributeInfoList; -typedef struct _GFileDescriptorBased GFileDescriptorBased; -typedef struct _GFileInputStream GFileInputStream; -typedef struct _GFileOutputStream GFileOutputStream; -typedef struct _GFileIOStream GFileIOStream; -typedef struct _GFileIcon GFileIcon; -typedef struct _GFilenameCompleter GFilenameCompleter; - - -typedef struct _GIcon GIcon; /* Dummy typedef */ -typedef struct _GInetAddress GInetAddress; -typedef struct _GInetAddressMask GInetAddressMask; -typedef struct _GInetSocketAddress GInetSocketAddress; -typedef struct _GInputStream GInputStream; -typedef struct _GInitable GInitable; -typedef struct _GIOModule GIOModule; -typedef struct _GIOExtensionPoint GIOExtensionPoint; -typedef struct _GIOExtension GIOExtension; - -/** - * GIOSchedulerJob: - * - * Opaque class for defining and scheduling IO jobs. - **/ -typedef struct _GIOSchedulerJob GIOSchedulerJob; -typedef struct _GIOStreamAdapter GIOStreamAdapter; -typedef struct _GLoadableIcon GLoadableIcon; /* Dummy typedef */ -typedef struct _GMemoryInputStream GMemoryInputStream; -typedef struct _GMemoryOutputStream GMemoryOutputStream; - -/** - * GMount: - * - * A handle to an object implementing the #GMountIface interface. - **/ -typedef struct _GMount GMount; /* Dummy typedef */ -typedef struct _GMountOperation GMountOperation; -typedef struct _GNetworkAddress GNetworkAddress; -typedef struct _GNetworkMonitor GNetworkMonitor; -typedef struct _GNetworkService GNetworkService; -typedef struct _GOutputStream GOutputStream; -typedef struct _GIOStream GIOStream; -typedef struct _GPollableInputStream GPollableInputStream; /* Dummy typedef */ -typedef struct _GPollableOutputStream GPollableOutputStream; /* Dummy typedef */ -typedef struct _GResolver GResolver; -/** - * GResource: - * - * A resource bundle. - * - * Since: 2.32 - */ -typedef struct _GResource GResource; -typedef struct _GSeekable GSeekable; -typedef struct _GSimpleAsyncResult GSimpleAsyncResult; - -/** - * GSocket: - * - * A lowlevel network socket object. - * - * Since: 2.22 - **/ -typedef struct _GSocket GSocket; - -/** - * GSocketControlMessage: - * - * Base class for socket-type specific control messages that can be sent and - * received over #GSocket. - **/ -typedef struct _GSocketControlMessage GSocketControlMessage; -/** - * GSocketClient: - * - * A helper class for network clients to make connections. - * - * Since: 2.22 - **/ -typedef struct _GSocketClient GSocketClient; -/** - * GSocketConnection: - * - * A socket connection GIOStream object for connection-oriented sockets. - * - * Since: 2.22 - **/ -typedef struct _GSocketConnection GSocketConnection; -/** - * GSocketListener: - * - * A helper class for network servers to listen for and accept connections. - * - * Since: 2.22 - **/ -typedef struct _GSocketListener GSocketListener; -/** - * GSocketService: - * - * A helper class for handling accepting incomming connections in the - * glib mainloop. - * - * Since: 2.22 - **/ -typedef struct _GSocketService GSocketService; -typedef struct _GSocketAddress GSocketAddress; -typedef struct _GSocketAddressEnumerator GSocketAddressEnumerator; -typedef struct _GSocketConnectable GSocketConnectable; -typedef struct _GSrvTarget GSrvTarget; -/** - * GTcpConnection: - * - * A #GSocketConnection for TCP/IP connections. - * - * Since: 2.22 - **/ -typedef struct _GTcpConnection GTcpConnection; -typedef struct _GTcpWrapperConnection GTcpWrapperConnection; -/** - * GThreadedSocketService: - * - * A helper class for handling accepting incoming connections in the - * glib mainloop and handling them in a thread. - * - * Since: 2.22 - **/ -typedef struct _GThreadedSocketService GThreadedSocketService; -typedef struct _GThemedIcon GThemedIcon; -typedef struct _GTlsCertificate GTlsCertificate; -typedef struct _GTlsClientConnection GTlsClientConnection; /* Dummy typedef */ -typedef struct _GTlsConnection GTlsConnection; -typedef struct _GTlsDatabase GTlsDatabase; -typedef struct _GTlsFileDatabase GTlsFileDatabase; -typedef struct _GTlsInteraction GTlsInteraction; -typedef struct _GTlsPassword GTlsPassword; -typedef struct _GTlsServerConnection GTlsServerConnection; /* Dummy typedef */ -typedef struct _GVfs GVfs; /* Dummy typedef */ - -/** - * GProxyResolver: - * - * A helper class to enumerate proxies base on URI. - * - * Since: 2.26 - **/ -typedef struct _GProxyResolver GProxyResolver; -typedef struct _GProxy GProxy; -typedef struct _GProxyAddress GProxyAddress; -typedef struct _GProxyAddressEnumerator GProxyAddressEnumerator; - -/** - * GVolume: - * - * Opaque mountable volume object. - **/ -typedef struct _GVolume GVolume; /* Dummy typedef */ -typedef struct _GVolumeMonitor GVolumeMonitor; - -/** - * GAsyncReadyCallback: - * @source_object: the object the asynchronous operation was started with. - * @res: a #GAsyncResult. - * @user_data: user data passed to the callback. - * - * Type definition for a function that will be called back when an asynchronous - * operation within GIO has been completed. - **/ -typedef void (*GAsyncReadyCallback) (GObject *source_object, - GAsyncResult *res, - gpointer user_data); - -/** - * GFileProgressCallback: - * @current_num_bytes: the current number of bytes in the operation. - * @total_num_bytes: the total number of bytes in the operation. - * @user_data: user data passed to the callback. - * - * When doing file operations that may take a while, such as moving - * a file or copying a file, a progress callback is used to pass how - * far along that operation is to the application. - **/ -typedef void (*GFileProgressCallback) (goffset current_num_bytes, - goffset total_num_bytes, - gpointer user_data); - -/** - * GFileReadMoreCallback: - * @file_contents: the data as currently read. - * @file_size: the size of the data currently read. - * @callback_data: data passed to the callback. - * - * When loading the partial contents of a file with g_file_load_partial_contents_async(), - * it may become necessary to determine if any more data from the file should be loaded. - * A #GFileReadMoreCallback function facilitates this by returning %TRUE if more data - * should be read, or %FALSE otherwise. - * - * Returns: %TRUE if more data should be read back. %FALSE otherwise. - **/ -typedef gboolean (* GFileReadMoreCallback) (const char *file_contents, - goffset file_size, - gpointer callback_data); - - -/** - * GIOSchedulerJobFunc: - * @job: a #GIOSchedulerJob. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * @user_data: the data to pass to callback function - * - * I/O Job function. - * - * Long-running jobs should periodically check the @cancellable - * to see if they have been cancelled. - * - * Returns: %TRUE if this function should be called again to - * complete the job, %FALSE if the job is complete (or cancelled) - **/ -typedef gboolean (*GIOSchedulerJobFunc) (GIOSchedulerJob *job, - GCancellable *cancellable, - gpointer user_data); - -/** - * GSimpleAsyncThreadFunc: - * @res: a #GSimpleAsyncResult. - * @object: a #GObject. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * - * Simple thread function that runs an asynchronous operation and - * checks for cancellation. - **/ -typedef void (*GSimpleAsyncThreadFunc) (GSimpleAsyncResult *res, - GObject *object, - GCancellable *cancellable); - -/** - * GSocketSourceFunc: - * @socket: the #GSocket - * @condition: the current condition at the source fired. - * @user_data: data passed in by the user. - * - * This is the function type of the callback used for the #GSource - * returned by g_socket_create_source(). - * - * Returns: it should return %FALSE if the source should be removed. - * - * Since: 2.22 - */ -typedef gboolean (*GSocketSourceFunc) (GSocket *socket, - GIOCondition condition, - gpointer user_data); - -/** - * GInputVector: - * @buffer: Pointer to a buffer where data will be written. - * @size: the available size in @buffer. - * - * Structure used for scatter/gather data input. - * You generally pass in an array of #GInputVectors - * and the operation will store the read data starting in the - * first buffer, switching to the next as needed. - * - * Since: 2.22 - */ -typedef struct _GInputVector GInputVector; - -struct _GInputVector { - gpointer buffer; - gsize size; -}; - -/** - * GOutputVector: - * @buffer: Pointer to a buffer of data to read. - * @size: the size of @buffer. - * - * Structure used for scatter/gather data output. - * You generally pass in an array of #GOutputVectors - * and the operation will use all the buffers as if they were - * one buffer. - * - * Since: 2.22 - */ -typedef struct _GOutputVector GOutputVector; - -struct _GOutputVector { - gconstpointer buffer; - gsize size; -}; - -typedef struct _GCredentials GCredentials; -typedef struct _GUnixCredentialsMessage GUnixCredentialsMessage; -typedef struct _GUnixFDList GUnixFDList; -typedef struct _GDBusMessage GDBusMessage; -typedef struct _GDBusConnection GDBusConnection; -typedef struct _GDBusProxy GDBusProxy; -typedef struct _GDBusMethodInvocation GDBusMethodInvocation; -typedef struct _GDBusServer GDBusServer; -typedef struct _GDBusAuthObserver GDBusAuthObserver; -typedef struct _GDBusErrorEntry GDBusErrorEntry; -typedef struct _GDBusInterfaceVTable GDBusInterfaceVTable; -typedef struct _GDBusSubtreeVTable GDBusSubtreeVTable; -typedef struct _GDBusAnnotationInfo GDBusAnnotationInfo; -typedef struct _GDBusArgInfo GDBusArgInfo; -typedef struct _GDBusMethodInfo GDBusMethodInfo; -typedef struct _GDBusSignalInfo GDBusSignalInfo; -typedef struct _GDBusPropertyInfo GDBusPropertyInfo; -typedef struct _GDBusInterfaceInfo GDBusInterfaceInfo; -typedef struct _GDBusNodeInfo GDBusNodeInfo; - -/** - * GCancellableSourceFunc: - * @cancellable: the #GCancellable - * @user_data: data passed in by the user. - * - * This is the function type of the callback used for the #GSource - * returned by g_cancellable_source_new(). - * - * Returns: it should return %FALSE if the source should be removed. - * - * Since: 2.28 - */ -typedef gboolean (*GCancellableSourceFunc) (GCancellable *cancellable, - gpointer user_data); - -/** - * GPollableSourceFunc: - * @pollable_stream: the #GPollableInputStream or #GPollableOutputStream - * @user_data: data passed in by the user. - * - * This is the function type of the callback used for the #GSource - * returned by g_pollable_input_stream_create_source() and - * g_pollable_output_stream_create_source(). - * - * Returns: it should return %FALSE if the source should be removed. - * - * Since: 2.28 - */ -typedef gboolean (*GPollableSourceFunc) (GObject *pollable_stream, - gpointer user_data); - -typedef struct _GDBusInterface GDBusInterface; /* Dummy typedef */ -typedef struct _GDBusInterfaceSkeleton GDBusInterfaceSkeleton; -typedef struct _GDBusObject GDBusObject; /* Dummy typedef */ -typedef struct _GDBusObjectSkeleton GDBusObjectSkeleton; -typedef struct _GDBusObjectProxy GDBusObjectProxy; -typedef struct _GDBusObjectManager GDBusObjectManager; /* Dummy typedef */ -typedef struct _GDBusObjectManagerClient GDBusObjectManagerClient; -typedef struct _GDBusObjectManagerServer GDBusObjectManagerServer; - -/** - * GDBusProxyTypeFunc: - * @manager: A #GDBusObjectManagerClient. - * @object_path: The object path of the remote object. - * @interface_name: (allow-none): The interface name of the remote object or %NULL if a #GDBusObjectProxy #GType is requested. - * @user_data: User data. - * - * Function signature for a function used to determine the #GType to - * use for an interface proxy (if @interface_name is not %NULL) or - * object proxy (if @interface_name is %NULL). - * - * This function is called in the - * thread-default main loop - * that @manager was constructed in. - * - * Returns: A #GType to use for the remote object. The returned type - * must be a #GDBusProxy- or #GDBusObjectProxy-derived - * type. - * - * Since: 2.30 - */ -typedef GType (*GDBusProxyTypeFunc) (GDBusObjectManagerClient *manager, - const gchar *object_path, - const gchar *interface_name, - gpointer user_data); - -typedef struct _GTestDBus GTestDBus; - -G_END_DECLS - -#endif /* __GIO_TYPES_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gloadableicon.h b/GstreamerHelper/x64/include/glib-2.0/gio/gloadableicon.h deleted file mode 100644 index 754090fe..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gloadableicon.h +++ /dev/null @@ -1,97 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_LOADABLE_ICON_H__ -#define __G_LOADABLE_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_LOADABLE_ICON (g_loadable_icon_get_type ()) -#define G_LOADABLE_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_LOADABLE_ICON, GLoadableIcon)) -#define G_IS_LOADABLE_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_LOADABLE_ICON)) -#define G_LOADABLE_ICON_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_LOADABLE_ICON, GLoadableIconIface)) - -/** - * GLoadableIcon: - * - * Generic type for all kinds of icons that can be loaded - * as a stream. - **/ -typedef struct _GLoadableIconIface GLoadableIconIface; - -/** - * GLoadableIconIface: - * @g_iface: The parent interface. - * @load: Loads an icon. - * @load_async: Loads an icon asynchronously. - * @load_finish: Finishes an asynchronous icon load. - * - * Interface for icons that can be loaded as a stream. - **/ -struct _GLoadableIconIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GInputStream * (* load) (GLoadableIcon *icon, - int size, - char **type, - GCancellable *cancellable, - GError **error); - void (* load_async) (GLoadableIcon *icon, - int size, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GInputStream * (* load_finish) (GLoadableIcon *icon, - GAsyncResult *res, - char **type, - GError **error); -}; - -GType g_loadable_icon_get_type (void) G_GNUC_CONST; - -GInputStream *g_loadable_icon_load (GLoadableIcon *icon, - int size, - char **type, - GCancellable *cancellable, - GError **error); -void g_loadable_icon_load_async (GLoadableIcon *icon, - int size, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GInputStream *g_loadable_icon_load_finish (GLoadableIcon *icon, - GAsyncResult *res, - char **type, - GError **error); - -G_END_DECLS - -#endif /* __G_LOADABLE_ICON_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmemoryinputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmemoryinputstream.h deleted file mode 100644 index 1625ae94..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmemoryinputstream.h +++ /dev/null @@ -1,88 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MEMORY_INPUT_STREAM_H__ -#define __G_MEMORY_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MEMORY_INPUT_STREAM (g_memory_input_stream_get_type ()) -#define G_MEMORY_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStream)) -#define G_MEMORY_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStreamClass)) -#define G_IS_MEMORY_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MEMORY_INPUT_STREAM)) -#define G_IS_MEMORY_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MEMORY_INPUT_STREAM)) -#define G_MEMORY_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStreamClass)) - -/** - * GMemoryInputStream: - * - * Implements #GInputStream for arbitrary memory chunks. - **/ -typedef struct _GMemoryInputStreamClass GMemoryInputStreamClass; -typedef struct _GMemoryInputStreamPrivate GMemoryInputStreamPrivate; - -struct _GMemoryInputStream -{ - GInputStream parent_instance; - - /*< private >*/ - GMemoryInputStreamPrivate *priv; -}; - -struct _GMemoryInputStreamClass -{ - GInputStreamClass parent_class; - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - - -GType g_memory_input_stream_get_type (void) G_GNUC_CONST; -GInputStream * g_memory_input_stream_new (void); -GInputStream * g_memory_input_stream_new_from_data (const void *data, - gssize len, - GDestroyNotify destroy); -GLIB_AVAILABLE_IN_2_34 -GInputStream * g_memory_input_stream_new_from_bytes (GBytes *bytes); - -void g_memory_input_stream_add_data (GMemoryInputStream *stream, - const void *data, - gssize len, - GDestroyNotify destroy); -GLIB_AVAILABLE_IN_2_34 -void g_memory_input_stream_add_bytes (GMemoryInputStream *stream, - GBytes *bytes); - -G_END_DECLS - -#endif /* __G_MEMORY_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmemoryoutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmemoryoutputstream.h deleted file mode 100644 index faf0364c..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmemoryoutputstream.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MEMORY_OUTPUT_STREAM_H__ -#define __G_MEMORY_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MEMORY_OUTPUT_STREAM (g_memory_output_stream_get_type ()) -#define G_MEMORY_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStream)) -#define G_MEMORY_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStreamClass)) -#define G_IS_MEMORY_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MEMORY_OUTPUT_STREAM)) -#define G_IS_MEMORY_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MEMORY_OUTPUT_STREAM)) -#define G_MEMORY_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStreamClass)) - -/** - * GMemoryOutputStream: - * - * Implements #GOutputStream for arbitrary memory chunks. - **/ -typedef struct _GMemoryOutputStreamClass GMemoryOutputStreamClass; -typedef struct _GMemoryOutputStreamPrivate GMemoryOutputStreamPrivate; - -struct _GMemoryOutputStream -{ - GOutputStream parent_instance; - - /*< private >*/ - GMemoryOutputStreamPrivate *priv; -}; - -struct _GMemoryOutputStreamClass -{ - GOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -/** - * GReallocFunc: - * @data: memory block to reallocate - * @size: size to reallocate @data to - * - * Changes the size of the memory block pointed to by @data to - * @size bytes. - * - * The function should have the same semantics as realloc(). - * - * Returns: a pointer to the reallocated memory - */ -typedef gpointer (* GReallocFunc) (gpointer data, - gsize size); - -GType g_memory_output_stream_get_type (void) G_GNUC_CONST; - -GOutputStream *g_memory_output_stream_new (gpointer data, - gsize size, - GReallocFunc realloc_function, - GDestroyNotify destroy_function); -gpointer g_memory_output_stream_get_data (GMemoryOutputStream *ostream); -gsize g_memory_output_stream_get_size (GMemoryOutputStream *ostream); -gsize g_memory_output_stream_get_data_size (GMemoryOutputStream *ostream); -gpointer g_memory_output_stream_steal_data (GMemoryOutputStream *ostream); - -GLIB_AVAILABLE_IN_2_34 -GBytes * g_memory_output_stream_steal_as_bytes (GMemoryOutputStream *ostream); - -G_END_DECLS - -#endif /* __G_MEMORY_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmenu.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmenu.h deleted file mode 100644 index 35001c87..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmenu.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_MENU_H__ -#define __G_MENU_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MENU (g_menu_get_type ()) -#define G_MENU(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU, GMenu)) -#define G_IS_MENU(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU)) - -#define G_TYPE_MENU_ITEM (g_menu_item_get_type ()) -#define G_MENU_ITEM(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_ITEM, GMenuItem)) -#define G_IS_MENU_ITEM(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_ITEM)) - -typedef struct _GMenuItem GMenuItem; -typedef struct _GMenu GMenu; - -GLIB_AVAILABLE_IN_2_32 -GType g_menu_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_32 -GMenu * g_menu_new (void); - -void g_menu_freeze (GMenu *menu); - -void g_menu_insert_item (GMenu *menu, - gint position, - GMenuItem *item); -void g_menu_prepend_item (GMenu *menu, - GMenuItem *item); -void g_menu_append_item (GMenu *menu, - GMenuItem *item); -void g_menu_remove (GMenu *menu, - gint position); - -void g_menu_insert (GMenu *menu, - gint position, - const gchar *label, - const gchar *detailed_action); -void g_menu_prepend (GMenu *menu, - const gchar *label, - const gchar *detailed_action); -void g_menu_append (GMenu *menu, - const gchar *label, - const gchar *detailed_action); - -void g_menu_insert_section (GMenu *menu, - gint position, - const gchar *label, - GMenuModel *section); -void g_menu_prepend_section (GMenu *menu, - const gchar *label, - GMenuModel *section); -void g_menu_append_section (GMenu *menu, - const gchar *label, - GMenuModel *section); - -void g_menu_insert_submenu (GMenu *menu, - gint position, - const gchar *label, - GMenuModel *submenu); -void g_menu_prepend_submenu (GMenu *menu, - const gchar *label, - GMenuModel *submenu); -void g_menu_append_submenu (GMenu *menu, - const gchar *label, - GMenuModel *submenu); - - -GType g_menu_item_get_type (void) G_GNUC_CONST; -GMenuItem * g_menu_item_new (const gchar *label, - const gchar *detailed_action); - -GLIB_AVAILABLE_IN_2_34 -GMenuItem * g_menu_item_new_from_model (GMenuModel *model, - gint item_index); - -GMenuItem * g_menu_item_new_submenu (const gchar *label, - GMenuModel *submenu); - -GMenuItem * g_menu_item_new_section (const gchar *label, - GMenuModel *section); - -GLIB_AVAILABLE_IN_2_34 -GVariant * g_menu_item_get_attribute_value (GMenuItem *menu_item, - const gchar *attribute, - const GVariantType *expected_type); -GLIB_AVAILABLE_IN_2_34 -gboolean g_menu_item_get_attribute (GMenuItem *menu_item, - const gchar *attribute, - const gchar *format_string, - ...); -GLIB_AVAILABLE_IN_2_34 -GMenuModel *g_menu_item_get_link (GMenuItem *menu_item, - const gchar *link); - -void g_menu_item_set_attribute_value (GMenuItem *menu_item, - const gchar *attribute, - GVariant *value); -void g_menu_item_set_attribute (GMenuItem *menu_item, - const gchar *attribute, - const gchar *format_string, - ...); -void g_menu_item_set_link (GMenuItem *menu_item, - const gchar *link, - GMenuModel *model); -void g_menu_item_set_label (GMenuItem *menu_item, - const gchar *label); -void g_menu_item_set_submenu (GMenuItem *menu_item, - GMenuModel *submenu); -void g_menu_item_set_section (GMenuItem *menu_item, - GMenuModel *section); -void g_menu_item_set_action_and_target_value (GMenuItem *menu_item, - const gchar *action, - GVariant *target_value); -void g_menu_item_set_action_and_target (GMenuItem *menu_item, - const gchar *action, - const gchar *format_string, - ...); -void g_menu_item_set_detailed_action (GMenuItem *menu_item, - const gchar *detailed_action); - -G_END_DECLS - -#endif /* __G_MENU_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmenuexporter.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmenuexporter.h deleted file mode 100644 index 1673b227..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmenuexporter.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_MENU_EXPORTER_H__ -#define __G_MENU_EXPORTER_H__ - -#include -#include - -G_BEGIN_DECLS - -GLIB_AVAILABLE_IN_2_32 -guint g_dbus_connection_export_menu_model (GDBusConnection *connection, - const gchar *object_path, - GMenuModel *menu, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -void g_dbus_connection_unexport_menu_model (GDBusConnection *connection, - guint export_id); - -G_END_DECLS - -#endif /* __G_MENU_EXPORTER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmenumodel.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmenumodel.h deleted file mode 100644 index 689c2ced..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmenumodel.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_MENU_MODEL_H__ -#define __G_MENU_MODEL_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define G_MENU_ATTRIBUTE_ACTION "action" -#define G_MENU_ATTRIBUTE_TARGET "target" -#define G_MENU_ATTRIBUTE_LABEL "label" - -#define G_MENU_LINK_SUBMENU "submenu" -#define G_MENU_LINK_SECTION "section" - -#define G_TYPE_MENU_MODEL (g_menu_model_get_type ()) -#define G_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_MODEL, GMenuModel)) -#define G_MENU_MODEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_MENU_MODEL, GMenuModelClass)) -#define G_IS_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_MODEL)) -#define G_IS_MENU_MODEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_MENU_MODEL)) -#define G_MENU_MODEL_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_MENU_MODEL, GMenuModelClass)) - -typedef struct _GMenuModelPrivate GMenuModelPrivate; -typedef struct _GMenuModelClass GMenuModelClass; - -typedef struct _GMenuAttributeIterPrivate GMenuAttributeIterPrivate; -typedef struct _GMenuAttributeIterClass GMenuAttributeIterClass; -typedef struct _GMenuAttributeIter GMenuAttributeIter; - -typedef struct _GMenuLinkIterPrivate GMenuLinkIterPrivate; -typedef struct _GMenuLinkIterClass GMenuLinkIterClass; -typedef struct _GMenuLinkIter GMenuLinkIter; - -struct _GMenuModel -{ - GObject parent_instance; - GMenuModelPrivate *priv; -}; - -struct _GMenuModelClass -{ - GObjectClass parent_class; - - gboolean (*is_mutable) (GMenuModel *model); - gint (*get_n_items) (GMenuModel *model); - void (*get_item_attributes) (GMenuModel *model, - gint item_index, - GHashTable **attributes); - GMenuAttributeIter * (*iterate_item_attributes) (GMenuModel *model, - gint item_index); - GVariant * (*get_item_attribute_value) (GMenuModel *model, - gint item_index, - const gchar *attribute, - const GVariantType *expected_type); - void (*get_item_links) (GMenuModel *model, - gint item_index, - GHashTable **links); - GMenuLinkIter * (*iterate_item_links) (GMenuModel *model, - gint item_index); - GMenuModel * (*get_item_link) (GMenuModel *model, - gint item_index, - const gchar *link); -}; - -GType g_menu_model_get_type (void) G_GNUC_CONST; - -gboolean g_menu_model_is_mutable (GMenuModel *model); -gint g_menu_model_get_n_items (GMenuModel *model); - -GMenuAttributeIter * g_menu_model_iterate_item_attributes (GMenuModel *model, - gint item_index); -GVariant * g_menu_model_get_item_attribute_value (GMenuModel *model, - gint item_index, - const gchar *attribute, - const GVariantType *expected_type); -gboolean g_menu_model_get_item_attribute (GMenuModel *model, - gint item_index, - const gchar *attribute, - const gchar *format_string, - ...); -GMenuLinkIter * g_menu_model_iterate_item_links (GMenuModel *model, - gint item_index); -GMenuModel * g_menu_model_get_item_link (GMenuModel *model, - gint item_index, - const gchar *link); - -void g_menu_model_items_changed (GMenuModel *model, - gint position, - gint removed, - gint added); - - -#define G_TYPE_MENU_ATTRIBUTE_ITER (g_menu_attribute_iter_get_type ()) -#define G_MENU_ATTRIBUTE_ITER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_ATTRIBUTE_ITER, GMenuAttributeIter)) -#define G_MENU_ATTRIBUTE_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_MENU_ATTRIBUTE_ITER, GMenuAttributeIterClass)) -#define G_IS_MENU_ATTRIBUTE_ITER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_ATTRIBUTE_ITER)) -#define G_IS_MENU_ATTRIBUTE_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_MENU_ATTRIBUTE_ITER)) -#define G_MENU_ATTRIBUTE_ITER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_MENU_ATTRIBUTE_ITER, GMenuAttributeIterClass)) - -struct _GMenuAttributeIter -{ - GObject parent_instance; - GMenuAttributeIterPrivate *priv; -}; - -struct _GMenuAttributeIterClass -{ - GObjectClass parent_class; - - gboolean (*get_next) (GMenuAttributeIter *iter, - const gchar **out_type, - GVariant **value); -}; - -GType g_menu_attribute_iter_get_type (void) G_GNUC_CONST; - -gboolean g_menu_attribute_iter_get_next (GMenuAttributeIter *iter, - const gchar **out_name, - GVariant **value); -gboolean g_menu_attribute_iter_next (GMenuAttributeIter *iter); -const gchar * g_menu_attribute_iter_get_name (GMenuAttributeIter *iter); -GVariant * g_menu_attribute_iter_get_value (GMenuAttributeIter *iter); - - -#define G_TYPE_MENU_LINK_ITER (g_menu_link_iter_get_type ()) -#define G_MENU_LINK_ITER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_LINK_ITER, GMenuLinkIter)) -#define G_MENU_LINK_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_MENU_LINK_ITER, GMenuLinkIterClass)) -#define G_IS_MENU_LINK_ITER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_LINK_ITER)) -#define G_IS_MENU_LINK_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_MENU_LINK_ITER)) -#define G_MENU_LINK_ITER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_MENU_LINK_ITER, GMenuLinkIterClass)) - -struct _GMenuLinkIter -{ - GObject parent_instance; - GMenuLinkIterPrivate *priv; -}; - -struct _GMenuLinkIterClass -{ - GObjectClass parent_class; - - gboolean (*get_next) (GMenuLinkIter *iter, - const gchar **out_name, - GMenuModel **value); -}; - -GType g_menu_link_iter_get_type (void) G_GNUC_CONST; - -gboolean g_menu_link_iter_get_next (GMenuLinkIter *iter, - const gchar **out_link, - GMenuModel **value); -gboolean g_menu_link_iter_next (GMenuLinkIter *iter); -const gchar * g_menu_link_iter_get_name (GMenuLinkIter *iter); -GMenuModel * g_menu_link_iter_get_value (GMenuLinkIter *iter); - -G_END_DECLS - -#endif /* __G_MENU_MODEL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmount.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmount.h deleted file mode 100644 index 33728920..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmount.h +++ /dev/null @@ -1,254 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MOUNT_H__ -#define __G_MOUNT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MOUNT (g_mount_get_type ()) -#define G_MOUNT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_MOUNT, GMount)) -#define G_IS_MOUNT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_MOUNT)) -#define G_MOUNT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_MOUNT, GMountIface)) - -typedef struct _GMountIface GMountIface; - -/** - * GMountIface: - * @g_iface: The parent interface. - * @changed: Changed signal that is emitted when the mount's state has changed. - * @unmounted: The unmounted signal that is emitted when the #GMount have been unmounted. If the recipient is holding references to the object they should release them so the object can be finalized. - * @pre_unmount: The ::pre-unmount signal that is emitted when the #GMount will soon be emitted. If the recipient is somehow holding the mount open by keeping an open file on it it should close the file. - * @get_root: Gets a #GFile to the root directory of the #GMount. - * @get_name: Gets a string containing the name of the #GMount. - * @get_icon: Gets a #GIcon for the #GMount. - * @get_uuid: Gets the UUID for the #GMount. The reference is typically based on the file system UUID for the mount in question and should be considered an opaque string. Returns %NULL if there is no UUID available. - * @get_volume: Gets a #GVolume the mount is located on. Returns %NULL if the #GMount is not associated with a #GVolume. - * @get_drive: Gets a #GDrive the volume of the mount is located on. Returns %NULL if the #GMount is not associated with a #GDrive or a #GVolume. This is convenience method for getting the #GVolume and using that to get the #GDrive. - * @can_unmount: Checks if a #GMount can be unmounted. - * @can_eject: Checks if a #GMount can be ejected. - * @unmount: Starts unmounting a #GMount. - * @unmount_finish: Finishes an unmounting operation. - * @eject: Starts ejecting a #GMount. - * @eject_finish: Finishes an eject operation. - * @remount: Starts remounting a #GMount. - * @remount_finish: Finishes a remounting operation. - * @guess_content_type: Starts guessing the type of the content of a #GMount. - * See g_mount_guess_content_type() for more information on content - * type guessing. This operation was added in 2.18. - * @guess_content_type_finish: Finishes a content type guessing operation. Added in 2.18. - * @guess_content_type_sync: Synchronous variant of @guess_content_type. Added in 2.18 - * @unmount_with_operation: Starts unmounting a #GMount using a #GMountOperation. Since 2.22. - * @unmount_with_operation_finish: Finishes an unmounting operation using a #GMountOperation. Since 2.22. - * @eject_with_operation: Starts ejecting a #GMount using a #GMountOperation. Since 2.22. - * @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @get_default_location: Gets a #GFile indication a start location that can be use as the entry point for this mount. Since 2.24. - * @get_sort_key: Gets a key used for sorting #GMount instance or %NULL if no such key exists. Since 2.32. - * @get_symbolic_icon: Gets a symbolic #GIcon for the #GMount. Since 2.34. - * - * Interface for implementing operations for mounts. - **/ -struct _GMountIface -{ - GTypeInterface g_iface; - - /* signals */ - - void (* changed) (GMount *mount); - void (* unmounted) (GMount *mount); - - /* Virtual Table */ - - GFile * (* get_root) (GMount *mount); - char * (* get_name) (GMount *mount); - GIcon * (* get_icon) (GMount *mount); - char * (* get_uuid) (GMount *mount); - GVolume * (* get_volume) (GMount *mount); - GDrive * (* get_drive) (GMount *mount); - gboolean (* can_unmount) (GMount *mount); - gboolean (* can_eject) (GMount *mount); - - void (* unmount) (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* eject) (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* remount) (GMount *mount, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* remount_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* guess_content_type) (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gchar ** (* guess_content_type_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - gchar ** (* guess_content_type_sync) (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GError **error); - - /* Signal, not VFunc */ - void (* pre_unmount) (GMount *mount); - - void (* unmount_with_operation) (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_with_operation_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* eject_with_operation) (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_with_operation_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - GFile * (* get_default_location) (GMount *mount); - - const gchar * (* get_sort_key) (GMount *mount); - GIcon * (* get_symbolic_icon) (GMount *mount); -}; - -GType g_mount_get_type (void) G_GNUC_CONST; - -GFile * g_mount_get_root (GMount *mount); -GFile * g_mount_get_default_location (GMount *mount); -char * g_mount_get_name (GMount *mount); -GIcon * g_mount_get_icon (GMount *mount); -GIcon * g_mount_get_symbolic_icon (GMount *mount); -char * g_mount_get_uuid (GMount *mount); -GVolume * g_mount_get_volume (GMount *mount); -GDrive * g_mount_get_drive (GMount *mount); -gboolean g_mount_can_unmount (GMount *mount); -gboolean g_mount_can_eject (GMount *mount); - -GLIB_DEPRECATED_FOR(g_mount_unmount_with_operation) -void g_mount_unmount (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_mount_unmount_with_operation_finish) -gboolean g_mount_unmount_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -GLIB_DEPRECATED_FOR(g_mount_eject_with_operation) -void g_mount_eject (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_mount_eject_with_operation_finish) -gboolean g_mount_eject_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -void g_mount_remount (GMount *mount, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_mount_remount_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -void g_mount_guess_content_type (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gchar ** g_mount_guess_content_type_finish (GMount *mount, - GAsyncResult *result, - GError **error); -gchar ** g_mount_guess_content_type_sync (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GError **error); - -gboolean g_mount_is_shadowed (GMount *mount); -void g_mount_shadow (GMount *mount); -void g_mount_unshadow (GMount *mount); - -void g_mount_unmount_with_operation (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_mount_unmount_with_operation_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -void g_mount_eject_with_operation (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_mount_eject_with_operation_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -const gchar *g_mount_get_sort_key (GMount *mount); - -G_END_DECLS - -#endif /* __G_MOUNT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gmountoperation.h b/GstreamerHelper/x64/include/glib-2.0/gio/gmountoperation.h deleted file mode 100644 index 0c112658..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gmountoperation.h +++ /dev/null @@ -1,127 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MOUNT_OPERATION_H__ -#define __G_MOUNT_OPERATION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MOUNT_OPERATION (g_mount_operation_get_type ()) -#define G_MOUNT_OPERATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MOUNT_OPERATION, GMountOperation)) -#define G_MOUNT_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MOUNT_OPERATION, GMountOperationClass)) -#define G_IS_MOUNT_OPERATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MOUNT_OPERATION)) -#define G_IS_MOUNT_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MOUNT_OPERATION)) -#define G_MOUNT_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MOUNT_OPERATION, GMountOperationClass)) - -/** - * GMountOperation: - * - * Class for providing authentication methods for mounting operations, - * such as mounting a file locally, or authenticating with a server. - **/ -typedef struct _GMountOperationClass GMountOperationClass; -typedef struct _GMountOperationPrivate GMountOperationPrivate; - -struct _GMountOperation -{ - GObject parent_instance; - - GMountOperationPrivate *priv; -}; - -struct _GMountOperationClass -{ - GObjectClass parent_class; - - /* signals: */ - - void (* ask_password) (GMountOperation *op, - const char *message, - const char *default_user, - const char *default_domain, - GAskPasswordFlags flags); - - void (* ask_question) (GMountOperation *op, - const char *message, - const char *choices[]); - - void (* reply) (GMountOperation *op, - GMountOperationResult result); - - void (* aborted) (GMountOperation *op); - - void (* show_processes) (GMountOperation *op, - const gchar *message, - GArray *processes, - const gchar *choices[]); - - void (* show_unmount_progress) (GMountOperation *op, - const gchar *message, - gint64 time_left, - gint64 bytes_left); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); - void (*_g_reserved9) (void); -}; - -GType g_mount_operation_get_type (void) G_GNUC_CONST; -GMountOperation * g_mount_operation_new (void); - -const char * g_mount_operation_get_username (GMountOperation *op); -void g_mount_operation_set_username (GMountOperation *op, - const char *username); -const char * g_mount_operation_get_password (GMountOperation *op); -void g_mount_operation_set_password (GMountOperation *op, - const char *password); -gboolean g_mount_operation_get_anonymous (GMountOperation *op); -void g_mount_operation_set_anonymous (GMountOperation *op, - gboolean anonymous); -const char * g_mount_operation_get_domain (GMountOperation *op); -void g_mount_operation_set_domain (GMountOperation *op, - const char *domain); -GPasswordSave g_mount_operation_get_password_save (GMountOperation *op); -void g_mount_operation_set_password_save (GMountOperation *op, - GPasswordSave save); -int g_mount_operation_get_choice (GMountOperation *op); -void g_mount_operation_set_choice (GMountOperation *op, - int choice); -void g_mount_operation_reply (GMountOperation *op, - GMountOperationResult result); - -G_END_DECLS - -#endif /* __G_MOUNT_OPERATION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gnativevolumemonitor.h b/GstreamerHelper/x64/include/glib-2.0/gio/gnativevolumemonitor.h deleted file mode 100644 index e072576f..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gnativevolumemonitor.h +++ /dev/null @@ -1,62 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NATIVE_VOLUME_MONITOR_H__ -#define __G_NATIVE_VOLUME_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_NATIVE_VOLUME_MONITOR (g_native_volume_monitor_get_type ()) -#define G_NATIVE_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NATIVE_VOLUME_MONITOR, GNativeVolumeMonitor)) -#define G_NATIVE_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NATIVE_VOLUME_MONITOR, GNativeVolumeMonitorClass)) -#define G_IS_NATIVE_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NATIVE_VOLUME_MONITOR)) -#define G_IS_NATIVE_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NATIVE_VOLUME_MONITOR)) - -#define G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME "gio-native-volume-monitor" - -typedef struct _GNativeVolumeMonitor GNativeVolumeMonitor; -typedef struct _GNativeVolumeMonitorClass GNativeVolumeMonitorClass; - -struct _GNativeVolumeMonitor -{ - GVolumeMonitor parent_instance; -}; - -struct _GNativeVolumeMonitorClass -{ - GVolumeMonitorClass parent_class; - - GMount * (* get_mount_for_mount_path) (const char *mount_path, - GCancellable *cancellable); -}; - -GType g_native_volume_monitor_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_NATIVE_VOLUME_MONITOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkaddress.h b/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkaddress.h deleted file mode 100644 index af163211..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkaddress.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NETWORK_ADDRESS_H__ -#define __G_NETWORK_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_NETWORK_ADDRESS (g_network_address_get_type ()) -#define G_NETWORK_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NETWORK_ADDRESS, GNetworkAddress)) -#define G_NETWORK_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NETWORK_ADDRESS, GNetworkAddressClass)) -#define G_IS_NETWORK_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NETWORK_ADDRESS)) -#define G_IS_NETWORK_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NETWORK_ADDRESS)) -#define G_NETWORK_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_NETWORK_ADDRESS, GNetworkAddressClass)) - -typedef struct _GNetworkAddressClass GNetworkAddressClass; -typedef struct _GNetworkAddressPrivate GNetworkAddressPrivate; - -struct _GNetworkAddress -{ - GObject parent_instance; - - /*< private >*/ - GNetworkAddressPrivate *priv; -}; - -struct _GNetworkAddressClass -{ - GObjectClass parent_class; - -}; - -GType g_network_address_get_type (void) G_GNUC_CONST; - -GSocketConnectable *g_network_address_new (const gchar *hostname, - guint16 port); -GSocketConnectable *g_network_address_parse (const gchar *host_and_port, - guint16 default_port, - GError **error); -GSocketConnectable *g_network_address_parse_uri (const gchar *uri, - guint16 default_port, - GError **error); -const gchar *g_network_address_get_hostname (GNetworkAddress *addr); -guint16 g_network_address_get_port (GNetworkAddress *addr); -const gchar *g_network_address_get_scheme (GNetworkAddress *addr); - - -G_END_DECLS - -#endif /* __G_NETWORK_ADDRESS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkmonitor.h b/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkmonitor.h deleted file mode 100644 index 995ff545..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkmonitor.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NETWORK_MONITOR_H__ -#define __G_NETWORK_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_NETWORK_MONITOR_EXTENSION_POINT_NAME: - * - * Extension point for network status monitoring functionality. - * See Extending GIO. - * - * Since: 2.30 - */ -#define G_NETWORK_MONITOR_EXTENSION_POINT_NAME "gio-network-monitor" - -#define G_TYPE_NETWORK_MONITOR (g_network_monitor_get_type ()) -#define G_NETWORK_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NETWORK_MONITOR, GNetworkMonitor)) -#define G_IS_NETWORK_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NETWORK_MONITOR)) -#define G_NETWORK_MONITOR_GET_INTERFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), G_TYPE_NETWORK_MONITOR, GNetworkMonitorInterface)) - -typedef struct _GNetworkMonitorInterface GNetworkMonitorInterface; - -struct _GNetworkMonitorInterface { - GTypeInterface g_iface; - - void (*network_changed) (GNetworkMonitor *monitor, - gboolean available); - - gboolean (*can_reach) (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GError **error); - void (*can_reach_async) (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (*can_reach_finish) (GNetworkMonitor *monitor, - GAsyncResult *result, - GError **error); -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_network_monitor_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_32 -GNetworkMonitor *g_network_monitor_get_default (void); - -gboolean g_network_monitor_get_network_available (GNetworkMonitor *monitor); - -gboolean g_network_monitor_can_reach (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GError **error); -void g_network_monitor_can_reach_async (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_network_monitor_can_reach_finish (GNetworkMonitor *monitor, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_NETWORK_MONITOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkservice.h b/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkservice.h deleted file mode 100644 index 1f6dbea8..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gnetworkservice.h +++ /dev/null @@ -1,71 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NETWORK_SERVICE_H__ -#define __G_NETWORK_SERVICE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_NETWORK_SERVICE (g_network_service_get_type ()) -#define G_NETWORK_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NETWORK_SERVICE, GNetworkService)) -#define G_NETWORK_SERVICE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NETWORK_SERVICE, GNetworkServiceClass)) -#define G_IS_NETWORK_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NETWORK_SERVICE)) -#define G_IS_NETWORK_SERVICE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NETWORK_SERVICE)) -#define G_NETWORK_SERVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_NETWORK_SERVICE, GNetworkServiceClass)) - -typedef struct _GNetworkServiceClass GNetworkServiceClass; -typedef struct _GNetworkServicePrivate GNetworkServicePrivate; - -struct _GNetworkService -{ - GObject parent_instance; - - /*< private >*/ - GNetworkServicePrivate *priv; -}; - -struct _GNetworkServiceClass -{ - GObjectClass parent_class; - -}; - -GType g_network_service_get_type (void) G_GNUC_CONST; - -GSocketConnectable *g_network_service_new (const gchar *service, - const gchar *protocol, - const gchar *domain); - -const gchar *g_network_service_get_service (GNetworkService *srv); -const gchar *g_network_service_get_protocol (GNetworkService *srv); -const gchar *g_network_service_get_domain (GNetworkService *srv); -const gchar *g_network_service_get_scheme (GNetworkService *srv); -void g_network_service_set_scheme (GNetworkService *srv, const gchar *scheme); - -G_END_DECLS - -#endif /* __G_NETWORK_SERVICE_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/goutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/goutputstream.h deleted file mode 100644 index 5e9850c8..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/goutputstream.h +++ /dev/null @@ -1,223 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_OUTPUT_STREAM_H__ -#define __G_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_OUTPUT_STREAM (g_output_stream_get_type ()) -#define G_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_OUTPUT_STREAM, GOutputStream)) -#define G_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_OUTPUT_STREAM, GOutputStreamClass)) -#define G_IS_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_OUTPUT_STREAM)) -#define G_IS_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_OUTPUT_STREAM)) -#define G_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_OUTPUT_STREAM, GOutputStreamClass)) - -/** - * GOutputStream: - * - * Base class for writing output. - * - * All classes derived from GOutputStream should implement synchronous - * writing, splicing, flushing and closing streams, but may implement - * asynchronous versions. - **/ -typedef struct _GOutputStreamClass GOutputStreamClass; -typedef struct _GOutputStreamPrivate GOutputStreamPrivate; - -struct _GOutputStream -{ - GObject parent_instance; - - /*< private >*/ - GOutputStreamPrivate *priv; -}; - - -struct _GOutputStreamClass -{ - GObjectClass parent_class; - - /* Sync ops: */ - - gssize (* write_fn) (GOutputStream *stream, - const void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - gssize (* splice) (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - GCancellable *cancellable, - GError **error); - gboolean (* flush) (GOutputStream *stream, - GCancellable *cancellable, - GError **error); - gboolean (* close_fn) (GOutputStream *stream, - GCancellable *cancellable, - GError **error); - - /* Async ops: (optional in derived classes) */ - - void (* write_async) (GOutputStream *stream, - const void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* write_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - void (* splice_async) (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* splice_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - void (* flush_async) (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* flush_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - void (* close_async) (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); -}; - -GType g_output_stream_get_type (void) G_GNUC_CONST; - -gssize g_output_stream_write (GOutputStream *stream, - const void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); -gboolean g_output_stream_write_all (GOutputStream *stream, - const void *buffer, - gsize count, - gsize *bytes_written, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -gssize g_output_stream_write_bytes (GOutputStream *stream, - GBytes *bytes, - GCancellable *cancellable, - GError **error); -gssize g_output_stream_splice (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_output_stream_flush (GOutputStream *stream, - GCancellable *cancellable, - GError **error); -gboolean g_output_stream_close (GOutputStream *stream, - GCancellable *cancellable, - GError **error); -void g_output_stream_write_async (GOutputStream *stream, - const void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_output_stream_write_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -GLIB_AVAILABLE_IN_2_34 -void g_output_stream_write_bytes_async (GOutputStream *stream, - GBytes *bytes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gssize g_output_stream_write_bytes_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -void g_output_stream_splice_async (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_output_stream_splice_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -void g_output_stream_flush_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_output_stream_flush_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -void g_output_stream_close_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_output_stream_close_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); - -gboolean g_output_stream_is_closed (GOutputStream *stream); -gboolean g_output_stream_is_closing (GOutputStream *stream); -gboolean g_output_stream_has_pending (GOutputStream *stream); -gboolean g_output_stream_set_pending (GOutputStream *stream, - GError **error); -void g_output_stream_clear_pending (GOutputStream *stream); - - -G_END_DECLS - -#endif /* __G_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gpermission.h b/GstreamerHelper/x64/include/glib-2.0/gio/gpermission.h deleted file mode 100644 index 3f742578..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gpermission.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PERMISSION_H__ -#define __G_PERMISSION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PERMISSION (g_permission_get_type ()) -#define G_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_PERMISSION, GPermission)) -#define G_PERMISSION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_PERMISSION, GPermissionClass)) -#define G_IS_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_PERMISSION)) -#define G_IS_PERMISSION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_PERMISSION)) -#define G_PERMISSION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_PERMISSION, GPermissionClass)) - -typedef struct _GPermissionPrivate GPermissionPrivate; -typedef struct _GPermissionClass GPermissionClass; - -struct _GPermission -{ - GObject parent_instance; - - /*< private >*/ - GPermissionPrivate *priv; -}; - -struct _GPermissionClass { - GObjectClass parent_class; - - gboolean (*acquire) (GPermission *permission, - GCancellable *cancellable, - GError **error); - void (*acquire_async) (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (*acquire_finish) (GPermission *permission, - GAsyncResult *result, - GError **error); - - gboolean (*release) (GPermission *permission, - GCancellable *cancellable, - GError **error); - void (*release_async) (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (*release_finish) (GPermission *permission, - GAsyncResult *result, - GError **error); - - gpointer reserved[16]; -}; - -GType g_permission_get_type (void); -gboolean g_permission_acquire (GPermission *permission, - GCancellable *cancellable, - GError **error); -void g_permission_acquire_async (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_permission_acquire_finish (GPermission *permission, - GAsyncResult *result, - GError **error); - -gboolean g_permission_release (GPermission *permission, - GCancellable *cancellable, - GError **error); -void g_permission_release_async (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_permission_release_finish (GPermission *permission, - GAsyncResult *result, - GError **error); - -gboolean g_permission_get_allowed (GPermission *permission); -gboolean g_permission_get_can_acquire (GPermission *permission); -gboolean g_permission_get_can_release (GPermission *permission); - -void g_permission_impl_update (GPermission *permission, - gboolean allowed, - gboolean can_acquire, - gboolean can_release); - -G_END_DECLS - -#endif /* __G_PERMISSION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gpollableinputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gpollableinputstream.h deleted file mode 100644 index 49af7ee2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gpollableinputstream.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLLABLE_INPUT_STREAM_H__ -#define __G_POLLABLE_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_POLLABLE_INPUT_STREAM (g_pollable_input_stream_get_type ()) -#define G_POLLABLE_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_POLLABLE_INPUT_STREAM, GPollableInputStream)) -#define G_IS_POLLABLE_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_POLLABLE_INPUT_STREAM)) -#define G_POLLABLE_INPUT_STREAM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_POLLABLE_INPUT_STREAM, GPollableInputStreamInterface)) - -/** - * GPollableInputStream: - * - * An interface for a #GInputStream that can be polled for readability. - * - * Since: 2.28 - */ -typedef struct _GPollableInputStreamInterface GPollableInputStreamInterface; - -/** - * GPollableInputStreamInterface: - * @g_iface: The parent interface. - * @can_poll: Checks if the #GPollableInputStream instance is actually pollable - * @is_readable: Checks if the stream is readable - * @create_source: Creates a #GSource to poll the stream - * @read_nonblocking: Does a non-blocking read or returns - * %G_IO_ERROR_WOULD_BLOCK - * - * The interface for pollable input streams. - * - * The default implementation of @can_poll always returns %TRUE. - * - * The default implementation of @read_nonblocking calls - * g_pollable_input_stream_is_readable(), and then calls - * g_input_stream_read() if it returns %TRUE. This means you only need - * to override it if it is possible that your @is_readable - * implementation may return %TRUE when the stream is not actually - * readable. - * - * Since: 2.28 - */ -struct _GPollableInputStreamInterface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - gboolean (*can_poll) (GPollableInputStream *stream); - - gboolean (*is_readable) (GPollableInputStream *stream); - GSource * (*create_source) (GPollableInputStream *stream, - GCancellable *cancellable); - gssize (*read_nonblocking) (GPollableInputStream *stream, - void *buffer, - gsize count, - GError **error); -}; - -GType g_pollable_input_stream_get_type (void) G_GNUC_CONST; - -gboolean g_pollable_input_stream_can_poll (GPollableInputStream *stream); - -gboolean g_pollable_input_stream_is_readable (GPollableInputStream *stream); -GSource *g_pollable_input_stream_create_source (GPollableInputStream *stream, - GCancellable *cancellable); - -gssize g_pollable_input_stream_read_nonblocking (GPollableInputStream *stream, - void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_POLLABLE_INPUT_STREAM_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gpollableoutputstream.h b/GstreamerHelper/x64/include/glib-2.0/gio/gpollableoutputstream.h deleted file mode 100644 index c5945ce3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gpollableoutputstream.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLLABLE_OUTPUT_STREAM_H__ -#define __G_POLLABLE_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_POLLABLE_OUTPUT_STREAM (g_pollable_output_stream_get_type ()) -#define G_POLLABLE_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM, GPollableOutputStream)) -#define G_IS_POLLABLE_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM)) -#define G_POLLABLE_OUTPUT_STREAM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM, GPollableOutputStreamInterface)) - -/** - * GPollableOutputStream: - * - * An interface for a #GOutputStream that can be polled for readability. - * - * Since: 2.28 - */ -typedef struct _GPollableOutputStreamInterface GPollableOutputStreamInterface; - -/** - * GPollableOutputStreamInterface: - * @g_iface: The parent interface. - * @can_poll: Checks if the #GPollableOutputStream instance is actually pollable - * @is_writable: Checks if the stream is writable - * @create_source: Creates a #GSource to poll the stream - * @write_nonblocking: Does a non-blocking write or returns - * %G_IO_ERROR_WOULD_BLOCK - * - * The interface for pollable output streams. - * - * The default implementation of @can_poll always returns %TRUE. - * - * The default implementation of @write_nonblocking calls - * g_pollable_output_stream_is_writable(), and then calls - * g_output_stream_write() if it returns %TRUE. This means you only - * need to override it if it is possible that your @is_writable - * implementation may return %TRUE when the stream is not actually - * writable. - * - * Since: 2.28 - */ -struct _GPollableOutputStreamInterface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - gboolean (*can_poll) (GPollableOutputStream *stream); - - gboolean (*is_writable) (GPollableOutputStream *stream); - GSource * (*create_source) (GPollableOutputStream *stream, - GCancellable *cancellable); - gssize (*write_nonblocking) (GPollableOutputStream *stream, - const void *buffer, - gsize count, - GError **error); -}; - -GType g_pollable_output_stream_get_type (void) G_GNUC_CONST; - -gboolean g_pollable_output_stream_can_poll (GPollableOutputStream *stream); - -gboolean g_pollable_output_stream_is_writable (GPollableOutputStream *stream); -GSource *g_pollable_output_stream_create_source (GPollableOutputStream *stream, - GCancellable *cancellable); - -gssize g_pollable_output_stream_write_nonblocking (GPollableOutputStream *stream, - const void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_POLLABLE_OUTPUT_STREAM_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gpollableutils.h b/GstreamerHelper/x64/include/glib-2.0/gio/gpollableutils.h deleted file mode 100644 index 782f3ca4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gpollableutils.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2012 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLLABLE_UTILS_H__ -#define __G_POLLABLE_UTILS_H__ - -#include - -G_BEGIN_DECLS - -GSource *g_pollable_source_new (GObject *pollable_stream); - -GLIB_AVAILABLE_IN_2_34 -GSource *g_pollable_source_new_full (gpointer pollable_stream, - GSource *child_source, - GCancellable *cancellable); - -GLIB_AVAILABLE_IN_2_34 -gssize g_pollable_stream_read (GInputStream *stream, - void *buffer, - gsize count, - gboolean blocking, - GCancellable *cancellable, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -gssize g_pollable_stream_write (GOutputStream *stream, - const void *buffer, - gsize count, - gboolean blocking, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -gboolean g_pollable_stream_write_all (GOutputStream *stream, - const void *buffer, - gsize count, - gboolean blocking, - gsize *bytes_written, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* _G_POLLABLE_UTILS_H_ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gproxy.h b/GstreamerHelper/x64/include/glib-2.0/gio/gproxy.h deleted file mode 100644 index d7d11a7f..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gproxy.h +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_H__ -#define __G_PROXY_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY (g_proxy_get_type ()) -#define G_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY, GProxy)) -#define G_IS_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY)) -#define G_PROXY_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_PROXY, GProxyInterface)) - -/** - * G_PROXY_EXTENSION_POINT_NAME: - * - * Extension point for proxy functionality. - * See Extending GIO. - * - * Since: 2.26 - */ -#define G_PROXY_EXTENSION_POINT_NAME "gio-proxy" - -/** - * GProxy: - * - * Interface that handles proxy connection and payload. - * - * Since: 2.26 - */ -typedef struct _GProxyInterface GProxyInterface; - -/** - * GProxyInterface: - * @g_iface: The parent interface. - * @connect: Connect to proxy server and wrap (if required) the #connection - * to handle payload. - * @connect_async: Same as connect() but asynchronous. - * @connect_finish: Returns the result of connect_async() - * @supports_hostname: Returns whether the proxy supports hostname lookups. - * - * Provides an interface for handling proxy connection and payload. - * - * Since: 2.26 - */ -struct _GProxyInterface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GIOStream * (* connect) (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GError **error); - - void (* connect_async) (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GIOStream * (* connect_finish) (GProxy *proxy, - GAsyncResult *result, - GError **error); - - gboolean (* supports_hostname) (GProxy *proxy); -}; - -GType g_proxy_get_type (void) G_GNUC_CONST; - -GProxy *g_proxy_get_default_for_protocol (const gchar *protocol); - -GIOStream *g_proxy_connect (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GError **error); - -void g_proxy_connect_async (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GIOStream *g_proxy_connect_finish (GProxy *proxy, - GAsyncResult *result, - GError **error); - -gboolean g_proxy_supports_hostname (GProxy *proxy); - -G_END_DECLS - -#endif /* __G_PROXY_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddress.h b/GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddress.h deleted file mode 100644 index 8d51f11d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddress.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_ADDRESS_H__ -#define __G_PROXY_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY_ADDRESS (g_proxy_address_get_type ()) -#define G_PROXY_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_ADDRESS, GProxyAddress)) -#define G_PROXY_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_ADDRESS, GProxyAddressClass)) -#define G_IS_PROXY_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_ADDRESS)) -#define G_IS_PROXY_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_ADDRESS)) -#define G_PROXY_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_PROXY_ADDRESS, GProxyAddressClass)) - -typedef struct _GProxyAddressClass GProxyAddressClass; -typedef struct _GProxyAddressPrivate GProxyAddressPrivate; - -struct _GProxyAddress -{ - GInetSocketAddress parent_instance; - - /*< private >*/ - GProxyAddressPrivate *priv; -}; - -struct _GProxyAddressClass -{ - GInetSocketAddressClass parent_class; -}; - - -GType g_proxy_address_get_type (void) G_GNUC_CONST; - -GSocketAddress *g_proxy_address_new (GInetAddress *inetaddr, - guint16 port, - const gchar *protocol, - const gchar *dest_hostname, - guint16 dest_port, - const gchar *username, - const gchar *password); - -const gchar *g_proxy_address_get_protocol (GProxyAddress *proxy); -GLIB_AVAILABLE_IN_2_34 -const gchar *g_proxy_address_get_destination_protocol (GProxyAddress *proxy); -const gchar *g_proxy_address_get_destination_hostname (GProxyAddress *proxy); -guint16 g_proxy_address_get_destination_port (GProxyAddress *proxy); -const gchar *g_proxy_address_get_username (GProxyAddress *proxy); -const gchar *g_proxy_address_get_password (GProxyAddress *proxy); - -GLIB_AVAILABLE_IN_2_34 -const gchar *g_proxy_address_get_uri (GProxyAddress *proxy); - -G_END_DECLS - -#endif /* __G_PROXY_ADDRESS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddressenumerator.h b/GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddressenumerator.h deleted file mode 100644 index b38045f6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gproxyaddressenumerator.h +++ /dev/null @@ -1,75 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_ADDRESS_ENUMERATOR_H__ -#define __G_PROXY_ADDRESS_ENUMERATOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY_ADDRESS_ENUMERATOR (g_proxy_address_enumerator_get_type ()) -#define G_PROXY_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_ADDRESS_ENUMERATOR, GProxyAddressEnumerator)) -#define G_PROXY_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_ADDRESS_ENUMERATOR, GProxyAddressEnumeratorClass)) -#define G_IS_PROXY_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_ADDRESS_ENUMERATOR)) -#define G_IS_PROXY_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_ADDRESS_ENUMERATOR)) -#define G_PROXY_ADDRESS_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_PROXY_ADDRESS_ENUMERATOR, GProxyAddressEnumeratorClass)) - -/** - * GProxyAddressEnumerator: - * - * A subclass of #GSocketAddressEnumerator that takes another address - * enumerator and wraps its results in #GProxyAddresses as - * directed by the default #GProxyResolver. - */ - -typedef struct _GProxyAddressEnumeratorClass GProxyAddressEnumeratorClass; -typedef struct _GProxyAddressEnumeratorPrivate GProxyAddressEnumeratorPrivate; - -struct _GProxyAddressEnumerator -{ - GSocketAddressEnumerator parent_instance; - GProxyAddressEnumeratorPrivate *priv; -}; - -struct _GProxyAddressEnumeratorClass -{ - GSocketAddressEnumeratorClass parent_class; - - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); -}; - -GType g_proxy_address_enumerator_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_PROXY_ADDRESS_ENUMERATOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gproxyresolver.h b/GstreamerHelper/x64/include/glib-2.0/gio/gproxyresolver.h deleted file mode 100644 index 7d8d27de..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gproxyresolver.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_RESOLVER_H__ -#define __G_PROXY_RESOLVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY_RESOLVER (g_proxy_resolver_get_type ()) -#define G_PROXY_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_RESOLVER, GProxyResolver)) -#define G_IS_PROXY_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_RESOLVER)) -#define G_PROXY_RESOLVER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), G_TYPE_PROXY_RESOLVER, GProxyResolverInterface)) - -/** - * G_PROXY_RESOLVER_EXTENSION_POINT_NAME: - * - * Extension point for proxy resolving functionality. - * See Extending GIO. - */ -#define G_PROXY_RESOLVER_EXTENSION_POINT_NAME "gio-proxy-resolver" - -typedef struct _GProxyResolverInterface GProxyResolverInterface; - -struct _GProxyResolverInterface { - GTypeInterface g_iface; - - /* Virtual Table */ - gboolean (* is_supported) (GProxyResolver *resolver); - - gchar ** (* lookup) (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GError **error); - - void (* lookup_async) (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - gchar ** (* lookup_finish) (GProxyResolver *resolver, - GAsyncResult *result, - GError **error); -}; - -GType g_proxy_resolver_get_type (void) G_GNUC_CONST; -GProxyResolver *g_proxy_resolver_get_default (void); - -gboolean g_proxy_resolver_is_supported (GProxyResolver *resolver); -gchar **g_proxy_resolver_lookup (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GError **error); -void g_proxy_resolver_lookup_async (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gchar **g_proxy_resolver_lookup_finish (GProxyResolver *resolver, - GAsyncResult *result, - GError **error); - - -G_END_DECLS - -#endif /* __G_PROXY_RESOLVER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gremoteactiongroup.h b/GstreamerHelper/x64/include/glib-2.0/gio/gremoteactiongroup.h deleted file mode 100644 index d2849e63..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gremoteactiongroup.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2011 Canonical Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_REMOTE_ACTION_GROUP_H__ -#define __G_REMOTE_ACTION_GROUP_H__ - -#include - -G_BEGIN_DECLS - - -#define G_TYPE_REMOTE_ACTION_GROUP (g_remote_action_group_get_type ()) -#define G_REMOTE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_REMOTE_ACTION_GROUP, GRemoteActionGroup)) -#define G_IS_REMOTE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_REMOTE_ACTION_GROUP)) -#define G_REMOTE_ACTION_GROUP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_REMOTE_ACTION_GROUP, \ - GRemoteActionGroupInterface)) - -typedef struct _GRemoteActionGroupInterface GRemoteActionGroupInterface; - -struct _GRemoteActionGroupInterface -{ - GTypeInterface g_iface; - - void (* activate_action_full) (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *parameter, - GVariant *platform_data); - - void (* change_action_state_full) (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *value, - GVariant *platform_data); -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_remote_action_group_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -void g_remote_action_group_activate_action_full (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *parameter, - GVariant *platform_data); - -GLIB_AVAILABLE_IN_2_32 -void g_remote_action_group_change_action_state_full (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *value, - GVariant *platform_data); - -G_END_DECLS - -#endif /* __G_REMOTE_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gresolver.h b/GstreamerHelper/x64/include/glib-2.0/gio/gresolver.h deleted file mode 100644 index ecd8e51d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gresolver.h +++ /dev/null @@ -1,199 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_RESOLVER_H__ -#define __G_RESOLVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_RESOLVER (g_resolver_get_type ()) -#define G_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_RESOLVER, GResolver)) -#define G_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_RESOLVER, GResolverClass)) -#define G_IS_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_RESOLVER)) -#define G_IS_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_RESOLVER)) -#define G_RESOLVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_RESOLVER, GResolverClass)) - -typedef struct _GResolverPrivate GResolverPrivate; -typedef struct _GResolverClass GResolverClass; - -struct _GResolver { - GObject parent_instance; - - GResolverPrivate *priv; -}; - -struct _GResolverClass { - GObjectClass parent_class; - - /* Signals */ - void ( *reload) (GResolver *resolver); - - /* Virtual methods */ - GList * ( *lookup_by_name) (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GError **error); - void ( *lookup_by_name_async) (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GList * ( *lookup_by_name_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - gchar * ( *lookup_by_address) (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GError **error); - void ( *lookup_by_address_async) (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gchar * ( *lookup_by_address_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - GList * ( *lookup_service) (GResolver *resolver, - const gchar *rrname, - GCancellable *cancellable, - GError **error); - void ( *lookup_service_async) (GResolver *resolver, - const gchar *rrname, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GList * ( *lookup_service_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - GList * ( *lookup_records) (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GError **error); - - void ( *lookup_records_async) (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GList * ( *lookup_records_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - /* Padding for future expansion */ - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - -}; - -GType g_resolver_get_type (void) G_GNUC_CONST; -GResolver *g_resolver_get_default (void); -void g_resolver_set_default (GResolver *resolver); - -GList *g_resolver_lookup_by_name (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GError **error); -void g_resolver_lookup_by_name_async (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList *g_resolver_lookup_by_name_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -void g_resolver_free_addresses (GList *addresses); - -gchar *g_resolver_lookup_by_address (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GError **error); -void g_resolver_lookup_by_address_async (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gchar *g_resolver_lookup_by_address_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -GList *g_resolver_lookup_service (GResolver *resolver, - const gchar *service, - const gchar *protocol, - const gchar *domain, - GCancellable *cancellable, - GError **error); -void g_resolver_lookup_service_async (GResolver *resolver, - const gchar *service, - const gchar *protocol, - const gchar *domain, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList *g_resolver_lookup_service_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -GList *g_resolver_lookup_records (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -void g_resolver_lookup_records_async (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -GList *g_resolver_lookup_records_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -void g_resolver_free_targets (GList *targets); - -/** - * G_RESOLVER_ERROR: - * - * Error domain for #GResolver. Errors in this domain will be from the - * #GResolverError enumeration. See #GError for more information on - * error domains. - */ -#define G_RESOLVER_ERROR (g_resolver_error_quark ()) -GQuark g_resolver_error_quark (void); - -G_END_DECLS - -#endif /* __G_RESOLVER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gresource.h b/GstreamerHelper/x64/include/glib-2.0/gio/gresource.h deleted file mode 100644 index 15bfc8a4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gresource.h +++ /dev/null @@ -1,129 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_RESOURCE_H__ -#define __G_RESOURCE_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TYPE_RESOURCE: - * - * The #GType for #GResource. - */ -#define G_TYPE_RESOURCE (g_resource_get_type ()) - - -/** - * G_RESOURCE_ERROR: - * - * Error domain for #GResource. Errors in this domain will be from the - * #GResourceError enumeration. See #GError for more information on - * error domains. - */ -#define G_RESOURCE_ERROR (g_resource_error_quark ()) -GQuark g_resource_error_quark (void); - -typedef struct _GStaticResource GStaticResource; - -struct _GStaticResource { - const guint8 *data; - gsize data_len; - GResource *resource; - GStaticResource *next; - gpointer padding; -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_resource_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_32 -GResource * g_resource_new_from_data (GBytes *data, - GError **error); -GResource * g_resource_ref (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -void g_resource_unref (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -GResource * g_resource_load (const gchar *filename, - GError **error); -GLIB_AVAILABLE_IN_2_32 -GInputStream *g_resource_open_stream (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -GBytes * g_resource_lookup_data (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -char ** g_resource_enumerate_children (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_resource_get_info (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - gsize *size, - guint32 *flags, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -void g_resources_register (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -void g_resources_unregister (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -GInputStream *g_resources_open_stream (const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -GBytes * g_resources_lookup_data (const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -char ** g_resources_enumerate_children (const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_resources_get_info (const char *path, - GResourceLookupFlags lookup_flags, - gsize *size, - guint32 *flags, - GError **error); - - -GLIB_AVAILABLE_IN_2_32 -void g_static_resource_init (GStaticResource *static_resource); -GLIB_AVAILABLE_IN_2_32 -void g_static_resource_fini (GStaticResource *static_resource); -GLIB_AVAILABLE_IN_2_32 -GResource *g_static_resource_get_resource (GStaticResource *static_resource); - -G_END_DECLS - -#endif /* __G_RESOURCE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gseekable.h b/GstreamerHelper/x64/include/glib-2.0/gio/gseekable.h deleted file mode 100644 index ba51eea5..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gseekable.h +++ /dev/null @@ -1,99 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SEEKABLE_H__ -#define __G_SEEKABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SEEKABLE (g_seekable_get_type ()) -#define G_SEEKABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_SEEKABLE, GSeekable)) -#define G_IS_SEEKABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_SEEKABLE)) -#define G_SEEKABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_SEEKABLE, GSeekableIface)) - -/** - * GSeekable: - * - * Seek object for streaming operations. - **/ -typedef struct _GSeekableIface GSeekableIface; - -/** - * GSeekableIface: - * @g_iface: The parent interface. - * @tell: Tells the current location within a stream. - * @can_seek: Checks if seeking is supported by the stream. - * @seek: Seeks to a location within a stream. - * @can_truncate: Checks if truncation is supported by the stream. - * @truncate_fn: Truncates a stream. - * - * Provides an interface for implementing seekable functionality on I/O Streams. - **/ -struct _GSeekableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - goffset (* tell) (GSeekable *seekable); - - gboolean (* can_seek) (GSeekable *seekable); - gboolean (* seek) (GSeekable *seekable, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - - gboolean (* can_truncate) (GSeekable *seekable); - gboolean (* truncate_fn) (GSeekable *seekable, - goffset offset, - GCancellable *cancellable, - GError **error); - - /* TODO: Async seek/truncate */ -}; - -GType g_seekable_get_type (void) G_GNUC_CONST; - -goffset g_seekable_tell (GSeekable *seekable); -gboolean g_seekable_can_seek (GSeekable *seekable); -gboolean g_seekable_seek (GSeekable *seekable, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); -gboolean g_seekable_can_truncate (GSeekable *seekable); -gboolean g_seekable_truncate (GSeekable *seekable, - goffset offset, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_SEEKABLE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsettings.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsettings.h deleted file mode 100644 index 01f3e9e1..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsettings.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright © 2009, 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SETTINGS_H__ -#define __G_SETTINGS_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_SETTINGS (g_settings_get_type ()) -#define G_SETTINGS(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SETTINGS, GSettings)) -#define G_SETTINGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SETTINGS, GSettingsClass)) -#define G_IS_SETTINGS(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_SETTINGS)) -#define G_IS_SETTINGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_SETTINGS)) -#define G_SETTINGS_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SETTINGS, GSettingsClass)) - -typedef struct _GSettingsPrivate GSettingsPrivate; -typedef struct _GSettingsClass GSettingsClass; - -struct _GSettingsClass -{ - GObjectClass parent_class; - - /* Signals */ - void (*writable_changed) (GSettings *settings, - const gchar *key); - void (*changed) (GSettings *settings, - const gchar *key); - gboolean (*writable_change_event) (GSettings *settings, - GQuark key); - gboolean (*change_event) (GSettings *settings, - const GQuark *keys, - gint n_keys); - - gpointer padding[20]; -}; - -struct _GSettings -{ - GObject parent_instance; - GSettingsPrivate *priv; -}; - - -GType g_settings_get_type (void); - -const gchar * const * g_settings_list_schemas (void); -const gchar * const * g_settings_list_relocatable_schemas (void); -GSettings * g_settings_new (const gchar *schema_id); -GSettings * g_settings_new_with_path (const gchar *schema_id, - const gchar *path); -GSettings * g_settings_new_with_backend (const gchar *schema_id, - GSettingsBackend *backend); -GSettings * g_settings_new_with_backend_and_path (const gchar *schema_id, - GSettingsBackend *backend, - const gchar *path); -GLIB_AVAILABLE_IN_2_32 -GSettings * g_settings_new_full (GSettingsSchema *schema, - GSettingsBackend *backend, - const gchar *path); -gchar ** g_settings_list_children (GSettings *settings); -gchar ** g_settings_list_keys (GSettings *settings); -GVariant * g_settings_get_range (GSettings *settings, - const gchar *key); -gboolean g_settings_range_check (GSettings *settings, - const gchar *key, - GVariant *value); - -gboolean g_settings_set_value (GSettings *settings, - const gchar *key, - GVariant *value); -GVariant * g_settings_get_value (GSettings *settings, - const gchar *key); - -gboolean g_settings_set (GSettings *settings, - const gchar *key, - const gchar *format, - ...); -void g_settings_get (GSettings *settings, - const gchar *key, - const gchar *format, - ...); -void g_settings_reset (GSettings *settings, - const gchar *key); - -gint g_settings_get_int (GSettings *settings, - const gchar *key); -gboolean g_settings_set_int (GSettings *settings, - const gchar *key, - gint value); -guint g_settings_get_uint (GSettings *settings, - const gchar *key); -gboolean g_settings_set_uint (GSettings *settings, - const gchar *key, - guint value); -gchar * g_settings_get_string (GSettings *settings, - const gchar *key); -gboolean g_settings_set_string (GSettings *settings, - const gchar *key, - const gchar *value); -gboolean g_settings_get_boolean (GSettings *settings, - const gchar *key); -gboolean g_settings_set_boolean (GSettings *settings, - const gchar *key, - gboolean value); -gdouble g_settings_get_double (GSettings *settings, - const gchar *key); -gboolean g_settings_set_double (GSettings *settings, - const gchar *key, - gdouble value); -gchar ** g_settings_get_strv (GSettings *settings, - const gchar *key); -gboolean g_settings_set_strv (GSettings *settings, - const gchar *key, - const gchar *const *value); -gint g_settings_get_enum (GSettings *settings, - const gchar *key); -gboolean g_settings_set_enum (GSettings *settings, - const gchar *key, - gint value); -guint g_settings_get_flags (GSettings *settings, - const gchar *key); -gboolean g_settings_set_flags (GSettings *settings, - const gchar *key, - guint value); -GSettings * g_settings_get_child (GSettings *settings, - const gchar *name); - -gboolean g_settings_is_writable (GSettings *settings, - const gchar *name); - -void g_settings_delay (GSettings *settings); -void g_settings_apply (GSettings *settings); -void g_settings_revert (GSettings *settings); -gboolean g_settings_get_has_unapplied (GSettings *settings); -void g_settings_sync (void); - -/** - * GSettingsBindSetMapping: - * @value: a #GValue containing the property value to map - * @expected_type: the #GVariantType to create - * @user_data: user data that was specified when the binding was created - * - * The type for the function that is used to convert an object property - * value to a #GVariant for storing it in #GSettings. - * - * Returns: a new #GVariant holding the data from @value, - * or %NULL in case of an error - */ -typedef GVariant * (*GSettingsBindSetMapping) (const GValue *value, - const GVariantType *expected_type, - gpointer user_data); - -/** - * GSettingsBindGetMapping: - * @value: return location for the property value - * @variant: the #GVariant - * @user_data: user data that was specified when the binding was created - * - * The type for the function that is used to convert from #GSettings to - * an object property. The @value is already initialized to hold values - * of the appropriate type. - * - * Returns: %TRUE if the conversion succeeded, %FALSE in case of an error - */ -typedef gboolean (*GSettingsBindGetMapping) (GValue *value, - GVariant *variant, - gpointer user_data); - -/** - * GSettingsGetMapping: - * @value: the #GVariant to map, or %NULL - * @result: (out): the result of the mapping - * @user_data: (closure): the user data that was passed to - * g_settings_get_mapped() - * - * The type of the function that is used to convert from a value stored - * in a #GSettings to a value that is useful to the application. - * - * If the value is successfully mapped, the result should be stored at - * @result and %TRUE returned. If mapping fails (for example, if @value - * is not in the right format) then %FALSE should be returned. - * - * If @value is %NULL then it means that the mapping function is being - * given a "last chance" to successfully return a valid value. %TRUE - * must be returned in this case. - * - * Returns: %TRUE if the conversion succeeded, %FALSE in case of an error - **/ -typedef gboolean (*GSettingsGetMapping) (GVariant *value, - gpointer *result, - gpointer user_data); - -/** - * GSettingsBindFlags: - * @G_SETTINGS_BIND_DEFAULT: Equivalent to G_SETTINGS_BIND_GET|G_SETTINGS_BIND_SET - * @G_SETTINGS_BIND_GET: Update the #GObject property when the setting changes. - * It is an error to use this flag if the property is not writable. - * @G_SETTINGS_BIND_SET: Update the setting when the #GObject property changes. - * It is an error to use this flag if the property is not readable. - * @G_SETTINGS_BIND_NO_SENSITIVITY: Do not try to bind a "sensitivity" property to the writability of the setting - * @G_SETTINGS_BIND_GET_NO_CHANGES: When set in addition to #G_SETTINGS_BIND_GET, set the #GObject property - * value initially from the setting, but do not listen for changes of the setting - * @G_SETTINGS_BIND_INVERT_BOOLEAN: When passed to g_settings_bind(), uses a pair of mapping functions that invert - * the boolean value when mapping between the setting and the property. The setting and property must both - * be booleans. You cannot pass this flag to g_settings_bind_with_mapping(). - * - * Flags used when creating a binding. These flags determine in which - * direction the binding works. The default is to synchronize in both - * directions. - */ -typedef enum -{ - G_SETTINGS_BIND_DEFAULT, - G_SETTINGS_BIND_GET = (1<<0), - G_SETTINGS_BIND_SET = (1<<1), - G_SETTINGS_BIND_NO_SENSITIVITY = (1<<2), - G_SETTINGS_BIND_GET_NO_CHANGES = (1<<3), - G_SETTINGS_BIND_INVERT_BOOLEAN = (1<<4) -} GSettingsBindFlags; - -void g_settings_bind (GSettings *settings, - const gchar *key, - gpointer object, - const gchar *property, - GSettingsBindFlags flags); -void g_settings_bind_with_mapping (GSettings *settings, - const gchar *key, - gpointer object, - const gchar *property, - GSettingsBindFlags flags, - GSettingsBindGetMapping get_mapping, - GSettingsBindSetMapping set_mapping, - gpointer user_data, - GDestroyNotify destroy); -void g_settings_bind_writable (GSettings *settings, - const gchar *key, - gpointer object, - const gchar *property, - gboolean inverted); -void g_settings_unbind (gpointer object, - const gchar *property); - -GLIB_AVAILABLE_IN_2_32 -GAction * g_settings_create_action (GSettings *settings, - const gchar *key); - -gpointer g_settings_get_mapped (GSettings *settings, - const gchar *key, - GSettingsGetMapping mapping, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_SETTINGS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsettingsbackend.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsettingsbackend.h deleted file mode 100644 index e6741873..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsettingsbackend.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright © 2009, 2010 Codethink Limited - * Copyright © 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Matthias Clasen - */ - -#ifndef __G_SETTINGS_BACKEND_H__ -#define __G_SETTINGS_BACKEND_H__ - -#if !defined (G_SETTINGS_ENABLE_BACKEND) && !defined (GIO_COMPILATION) -#error "You must define G_SETTINGS_ENABLE_BACKEND before including ." -#endif - -#define __GIO_GIO_H_INSIDE__ -#include -#undef __GIO_GIO_H_INSIDE__ - -G_BEGIN_DECLS - -#define G_TYPE_SETTINGS_BACKEND (g_settings_backend_get_type ()) -#define G_SETTINGS_BACKEND(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SETTINGS_BACKEND, GSettingsBackend)) -#define G_SETTINGS_BACKEND_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SETTINGS_BACKEND, GSettingsBackendClass)) -#define G_IS_SETTINGS_BACKEND(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SETTINGS_BACKEND)) -#define G_IS_SETTINGS_BACKEND_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SETTINGS_BACKEND)) -#define G_SETTINGS_BACKEND_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SETTINGS_BACKEND, GSettingsBackendClass)) - -/** - * G_SETTINGS_BACKEND_EXTENSION_POINT_NAME: - * - * Extension point for #GSettingsBackend functionality. - **/ -#define G_SETTINGS_BACKEND_EXTENSION_POINT_NAME "gsettings-backend" - -/** - * GSettingsBackend: - * - * An implementation of a settings storage repository. - **/ -typedef struct _GSettingsBackendPrivate GSettingsBackendPrivate; -typedef struct _GSettingsBackendClass GSettingsBackendClass; - -struct _GSettingsBackendClass -{ - GObjectClass parent_class; - - GVariant * (*read) (GSettingsBackend *backend, - const gchar *key, - const GVariantType *expected_type, - gboolean default_value); - - gboolean (*get_writable) (GSettingsBackend *backend, - const gchar *key); - - gboolean (*write) (GSettingsBackend *backend, - const gchar *key, - GVariant *value, - gpointer origin_tag); - gboolean (*write_tree) (GSettingsBackend *backend, - GTree *tree, - gpointer origin_tag); - void (*reset) (GSettingsBackend *backend, - const gchar *key, - gpointer origin_tag); - - void (*subscribe) (GSettingsBackend *backend, - const gchar *name); - void (*unsubscribe) (GSettingsBackend *backend, - const gchar *name); - void (*sync) (GSettingsBackend *backend); - - GPermission * (*get_permission) (GSettingsBackend *backend, - const gchar *path); - - gpointer padding[24]; -}; - -struct _GSettingsBackend -{ - GObject parent_instance; - - /*< private >*/ - GSettingsBackendPrivate *priv; -}; - -GType g_settings_backend_get_type (void); - -void g_settings_backend_changed (GSettingsBackend *backend, - const gchar *key, - gpointer origin_tag); -void g_settings_backend_path_changed (GSettingsBackend *backend, - const gchar *path, - gpointer origin_tag); -void g_settings_backend_flatten_tree (GTree *tree, - gchar **path, - const gchar ***keys, - GVariant ***values); -void g_settings_backend_keys_changed (GSettingsBackend *backend, - const gchar *path, - gchar const * const *items, - gpointer origin_tag); - -void g_settings_backend_path_writable_changed (GSettingsBackend *backend, - const gchar *path); -void g_settings_backend_writable_changed (GSettingsBackend *backend, - const gchar *key); -void g_settings_backend_changed_tree (GSettingsBackend *backend, - GTree *tree, - gpointer origin_tag); - -GSettingsBackend * g_settings_backend_get_default (void); - -GSettingsBackend * g_keyfile_settings_backend_new (const gchar *filename, - const gchar *root_path, - const gchar *root_group); - -GSettingsBackend * g_null_settings_backend_new (void); - -GSettingsBackend * g_memory_settings_backend_new (void); - -G_END_DECLS - -#endif /* __G_SETTINGS_BACKEND_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsettingsschema.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsettingsschema.h deleted file mode 100644 index 277907da..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsettingsschema.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * Copyright © 2011 Canonical Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_SETTINGS_SCHEMA_H__ -#define __G_SETTINGS_SCHEMA_H__ - -#include - -typedef struct _GSettingsSchemaSource GSettingsSchemaSource; -typedef struct _GSettingsSchema GSettingsSchema; - -#define G_TYPE_SETTINGS_SCHEMA_SOURCE (g_settings_schema_source_get_type ()) -GLIB_AVAILABLE_IN_2_32 -GType g_settings_schema_source_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GSettingsSchemaSource * g_settings_schema_source_get_default (void); -GLIB_AVAILABLE_IN_2_32 -GSettingsSchemaSource * g_settings_schema_source_ref (GSettingsSchemaSource *source); -GLIB_AVAILABLE_IN_2_32 -void g_settings_schema_source_unref (GSettingsSchemaSource *source); - -GSettingsSchemaSource * g_settings_schema_source_new_from_directory (const gchar *directory, - GSettingsSchemaSource *parent, - gboolean trusted, - GError **error); - -GSettingsSchema * g_settings_schema_source_lookup (GSettingsSchemaSource *source, - const gchar *schema_id, - gboolean recursive); - -#define G_TYPE_SETTINGS_SCHEMA (g_settings_schema_get_type ()) -GLIB_AVAILABLE_IN_2_32 -GType g_settings_schema_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GSettingsSchema * g_settings_schema_ref (GSettingsSchema *schema); -GLIB_AVAILABLE_IN_2_32 -void g_settings_schema_unref (GSettingsSchema *schema); - -const gchar * g_settings_schema_get_id (GSettingsSchema *schema); -const gchar * g_settings_schema_get_path (GSettingsSchema *schema); - -#endif /* __G_SETTINGS_SCHEMA_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleaction.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleaction.h deleted file mode 100644 index 7570fb4e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleaction.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_ACTION_H__ -#define __G_SIMPLE_ACTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_ACTION (g_simple_action_get_type ()) -#define G_SIMPLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SIMPLE_ACTION, GSimpleAction)) -#define G_IS_SIMPLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SIMPLE_ACTION)) - -GType g_simple_action_get_type (void) G_GNUC_CONST; - -GSimpleAction * g_simple_action_new (const gchar *name, - const GVariantType *parameter_type); - -GSimpleAction * g_simple_action_new_stateful (const gchar *name, - const GVariantType *parameter_type, - GVariant *state); - -void g_simple_action_set_enabled (GSimpleAction *simple, - gboolean enabled); - -void g_simple_action_set_state (GSimpleAction *simple, - GVariant *value); - -G_END_DECLS - -#endif /* __G_SIMPLE_ACTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleactiongroup.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleactiongroup.h deleted file mode 100644 index 7de37bc0..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleactiongroup.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_ACTION_GROUP_H__ -#define __G_SIMPLE_ACTION_GROUP_H__ - -#include "gactiongroup.h" -#include "gactionmap.h" - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_ACTION_GROUP (g_simple_action_group_get_type ()) -#define G_SIMPLE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SIMPLE_ACTION_GROUP, GSimpleActionGroup)) -#define G_SIMPLE_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SIMPLE_ACTION_GROUP, GSimpleActionGroupClass)) -#define G_IS_SIMPLE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SIMPLE_ACTION_GROUP)) -#define G_IS_SIMPLE_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SIMPLE_ACTION_GROUP)) -#define G_SIMPLE_ACTION_GROUP_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SIMPLE_ACTION_GROUP, GSimpleActionGroupClass)) - -typedef struct _GSimpleActionGroupPrivate GSimpleActionGroupPrivate; -typedef struct _GSimpleActionGroupClass GSimpleActionGroupClass; - -/** - * GSimpleActionGroup: - * - * The #GSimpleActionGroup structure contains private data and should only be accessed using the provided API. - * - * Since: 2.28 - */ -struct _GSimpleActionGroup -{ - /*< private >*/ - GObject parent_instance; - - GSimpleActionGroupPrivate *priv; -}; - -struct _GSimpleActionGroupClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< private >*/ - gpointer padding[12]; -}; - -GType g_simple_action_group_get_type (void) G_GNUC_CONST; - -GSimpleActionGroup * g_simple_action_group_new (void); - -GAction * g_simple_action_group_lookup (GSimpleActionGroup *simple, - const gchar *action_name); - -void g_simple_action_group_insert (GSimpleActionGroup *simple, - GAction *action); - -void g_simple_action_group_remove (GSimpleActionGroup *simple, - const gchar *action_name); - -void g_simple_action_group_add_entries (GSimpleActionGroup *simple, - const GActionEntry *entries, - gint n_entries, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_SIMPLE_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleasyncresult.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleasyncresult.h deleted file mode 100644 index 74976301..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsimpleasyncresult.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_ASYNC_RESULT_H__ -#define __G_SIMPLE_ASYNC_RESULT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_ASYNC_RESULT (g_simple_async_result_get_type ()) -#define G_SIMPLE_ASYNC_RESULT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResult)) -#define G_SIMPLE_ASYNC_RESULT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResultClass)) -#define G_IS_SIMPLE_ASYNC_RESULT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SIMPLE_ASYNC_RESULT)) -#define G_IS_SIMPLE_ASYNC_RESULT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SIMPLE_ASYNC_RESULT)) -#define G_SIMPLE_ASYNC_RESULT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResultClass)) - -/** - * GSimpleAsyncResult: - * - * A simple implementation of #GAsyncResult. - **/ -typedef struct _GSimpleAsyncResultClass GSimpleAsyncResultClass; - - -GType g_simple_async_result_get_type (void) G_GNUC_CONST; - -GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - gpointer source_tag); -GSimpleAsyncResult *g_simple_async_result_new_error (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - GQuark domain, - gint code, - const char *format, - ...) G_GNUC_PRINTF (6, 7); -GSimpleAsyncResult *g_simple_async_result_new_from_error (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - const GError *error); -GSimpleAsyncResult *g_simple_async_result_new_take_error (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - GError *error); - -void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, - gpointer op_res, - GDestroyNotify destroy_op_res); -gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); - -void g_simple_async_result_set_op_res_gssize (GSimpleAsyncResult *simple, - gssize op_res); -gssize g_simple_async_result_get_op_res_gssize (GSimpleAsyncResult *simple); - -void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, - gboolean op_res); -gboolean g_simple_async_result_get_op_res_gboolean (GSimpleAsyncResult *simple); - - - -GLIB_AVAILABLE_IN_2_32 -void g_simple_async_result_set_check_cancellable (GSimpleAsyncResult *simple, - GCancellable *check_cancellable); -gpointer g_simple_async_result_get_source_tag (GSimpleAsyncResult *simple); -void g_simple_async_result_set_handle_cancellation (GSimpleAsyncResult *simple, - gboolean handle_cancellation); -void g_simple_async_result_complete (GSimpleAsyncResult *simple); -void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); -void g_simple_async_result_run_in_thread (GSimpleAsyncResult *simple, - GSimpleAsyncThreadFunc func, - int io_priority, - GCancellable *cancellable); -void g_simple_async_result_set_from_error (GSimpleAsyncResult *simple, - const GError *error); -void g_simple_async_result_take_error (GSimpleAsyncResult *simple, - GError *error); -gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, - GError **dest); -void g_simple_async_result_set_error (GSimpleAsyncResult *simple, - GQuark domain, - gint code, - const char *format, - ...) G_GNUC_PRINTF (4, 5); -void g_simple_async_result_set_error_va (GSimpleAsyncResult *simple, - GQuark domain, - gint code, - const char *format, - va_list args); -gboolean g_simple_async_result_is_valid (GAsyncResult *result, - GObject *source, - gpointer source_tag); - -void g_simple_async_report_error_in_idle (GObject *object, - GAsyncReadyCallback callback, - gpointer user_data, - GQuark domain, - gint code, - const char *format, - ...); -void g_simple_async_report_gerror_in_idle (GObject *object, - GAsyncReadyCallback callback, - gpointer user_data, - const GError *error); -void g_simple_async_report_take_gerror_in_idle (GObject *object, - GAsyncReadyCallback callback, - gpointer user_data, - GError *error); - -G_END_DECLS - - - -#endif /* __G_SIMPLE_ASYNC_RESULT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsimplepermission.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsimplepermission.h deleted file mode 100644 index 367fe895..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsimplepermission.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_PERMISSION_H__ -#define __G_SIMPLE_PERMISSION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_PERMISSION (g_simple_permission_get_type ()) -#define G_SIMPLE_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SIMPLE_PERMISSION, \ - GSimplePermission)) -#define G_IS_SIMPLE_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SIMPLE_PERMISSION)) - -GType g_simple_permission_get_type (void); -GPermission * g_simple_permission_new (gboolean allowed); - -G_END_DECLS - -#endif /* __G_SIMPLE_PERMISSION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocket.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocket.h deleted file mode 100644 index 29ba44f3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocket.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima - * Copyright © 2009 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - * Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_H__ -#define __G_SOCKET_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET (g_socket_get_type ()) -#define G_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET, GSocket)) -#define G_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET, GSocketClass)) -#define G_IS_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET)) -#define G_IS_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET)) -#define G_SOCKET_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET, GSocketClass)) - -typedef struct _GSocketPrivate GSocketPrivate; -typedef struct _GSocketClass GSocketClass; - -struct _GSocketClass -{ - GObjectClass parent_class; - - /*< private >*/ - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); - void (*_g_reserved9) (void); - void (*_g_reserved10) (void); -}; - -struct _GSocket -{ - GObject parent_instance; - GSocketPrivate *priv; -}; - -GType g_socket_get_type (void) G_GNUC_CONST; -GSocket * g_socket_new (GSocketFamily family, - GSocketType type, - GSocketProtocol protocol, - GError **error); -GSocket * g_socket_new_from_fd (gint fd, - GError **error); -int g_socket_get_fd (GSocket *socket); -GSocketFamily g_socket_get_family (GSocket *socket); -GSocketType g_socket_get_socket_type (GSocket *socket); -GSocketProtocol g_socket_get_protocol (GSocket *socket); -GSocketAddress * g_socket_get_local_address (GSocket *socket, - GError **error); -GSocketAddress * g_socket_get_remote_address (GSocket *socket, - GError **error); -void g_socket_set_blocking (GSocket *socket, - gboolean blocking); -gboolean g_socket_get_blocking (GSocket *socket); -void g_socket_set_keepalive (GSocket *socket, - gboolean keepalive); -gboolean g_socket_get_keepalive (GSocket *socket); -gint g_socket_get_listen_backlog (GSocket *socket); -void g_socket_set_listen_backlog (GSocket *socket, - gint backlog); -guint g_socket_get_timeout (GSocket *socket); -void g_socket_set_timeout (GSocket *socket, - guint timeout); - -GLIB_AVAILABLE_IN_2_32 -guint g_socket_get_ttl (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_ttl (GSocket *socket, - guint ttl); - -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_get_broadcast (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_broadcast (GSocket *socket, - gboolean broadcast); - -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_get_multicast_loopback (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_multicast_loopback (GSocket *socket, - gboolean loopback); -GLIB_AVAILABLE_IN_2_32 -guint g_socket_get_multicast_ttl (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_multicast_ttl (GSocket *socket, - guint ttl); -gboolean g_socket_is_connected (GSocket *socket); -gboolean g_socket_bind (GSocket *socket, - GSocketAddress *address, - gboolean allow_reuse, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_join_multicast_group (GSocket *socket, - GInetAddress *group, - gboolean source_specific, - const gchar *iface, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_leave_multicast_group (GSocket *socket, - GInetAddress *group, - gboolean source_specific, - const gchar *iface, - GError **error); -gboolean g_socket_connect (GSocket *socket, - GSocketAddress *address, - GCancellable *cancellable, - GError **error); -gboolean g_socket_check_connect_result (GSocket *socket, - GError **error); - -gssize g_socket_get_available_bytes (GSocket *socket); - -GIOCondition g_socket_condition_check (GSocket *socket, - GIOCondition condition); -gboolean g_socket_condition_wait (GSocket *socket, - GIOCondition condition, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_condition_timed_wait (GSocket *socket, - GIOCondition condition, - gint64 timeout, - GCancellable *cancellable, - GError **error); -GSocket * g_socket_accept (GSocket *socket, - GCancellable *cancellable, - GError **error); -gboolean g_socket_listen (GSocket *socket, - GError **error); -gssize g_socket_receive (GSocket *socket, - gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_receive_from (GSocket *socket, - GSocketAddress **address, - gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_send (GSocket *socket, - const gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_send_to (GSocket *socket, - GSocketAddress *address, - const gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_receive_message (GSocket *socket, - GSocketAddress **address, - GInputVector *vectors, - gint num_vectors, - GSocketControlMessage ***messages, - gint *num_messages, - gint *flags, - GCancellable *cancellable, - GError **error); -gssize g_socket_send_message (GSocket *socket, - GSocketAddress *address, - GOutputVector *vectors, - gint num_vectors, - GSocketControlMessage **messages, - gint num_messages, - gint flags, - GCancellable *cancellable, - GError **error); -gboolean g_socket_close (GSocket *socket, - GError **error); -gboolean g_socket_shutdown (GSocket *socket, - gboolean shutdown_read, - gboolean shutdown_write, - GError **error); -gboolean g_socket_is_closed (GSocket *socket); -GSource * g_socket_create_source (GSocket *socket, - GIOCondition condition, - GCancellable *cancellable); -gboolean g_socket_speaks_ipv4 (GSocket *socket); -GCredentials *g_socket_get_credentials (GSocket *socket, - GError **error); - -gssize g_socket_receive_with_blocking (GSocket *socket, - gchar *buffer, - gsize size, - gboolean blocking, - GCancellable *cancellable, - GError **error); -gssize g_socket_send_with_blocking (GSocket *socket, - const gchar *buffer, - gsize size, - gboolean blocking, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_SOCKET_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddress.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddress.h deleted file mode 100644 index 356e2b05..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddress.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Christian Kellner, Samuel Cormier-Iijima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_ADDRESS_H__ -#define __G_SOCKET_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_ADDRESS (g_socket_address_get_type ()) -#define G_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SOCKET_ADDRESS, GSocketAddress)) -#define G_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SOCKET_ADDRESS, GSocketAddressClass)) -#define G_IS_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SOCKET_ADDRESS)) -#define G_IS_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SOCKET_ADDRESS)) -#define G_SOCKET_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SOCKET_ADDRESS, GSocketAddressClass)) - -typedef struct _GSocketAddressClass GSocketAddressClass; - -struct _GSocketAddress -{ - GObject parent_instance; -}; - -struct _GSocketAddressClass -{ - GObjectClass parent_class; - - GSocketFamily (*get_family) (GSocketAddress *address); - - gssize (*get_native_size) (GSocketAddress *address); - - gboolean (*to_native) (GSocketAddress *address, - gpointer dest, - gsize destlen, - GError **error); -}; - -GType g_socket_address_get_type (void) G_GNUC_CONST; - -GSocketFamily g_socket_address_get_family (GSocketAddress *address); - -GSocketAddress * g_socket_address_new_from_native (gpointer native, - gsize len); - -gboolean g_socket_address_to_native (GSocketAddress *address, - gpointer dest, - gsize destlen, - GError **error); - -gssize g_socket_address_get_native_size (GSocketAddress *address); - -G_END_DECLS - -#endif /* __G_SOCKET_ADDRESS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddressenumerator.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddressenumerator.h deleted file mode 100644 index c69be2f3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketaddressenumerator.h +++ /dev/null @@ -1,89 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_ADDRESS_ENUMERATOR_H__ -#define __G_SOCKET_ADDRESS_ENUMERATOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_ADDRESS_ENUMERATOR (g_socket_address_enumerator_get_type ()) -#define G_SOCKET_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SOCKET_ADDRESS_ENUMERATOR, GSocketAddressEnumerator)) -#define G_SOCKET_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SOCKET_ADDRESS_ENUMERATOR, GSocketAddressEnumeratorClass)) -#define G_IS_SOCKET_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SOCKET_ADDRESS_ENUMERATOR)) -#define G_IS_SOCKET_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SOCKET_ADDRESS_ENUMERATOR)) -#define G_SOCKET_ADDRESS_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SOCKET_ADDRESS_ENUMERATOR, GSocketAddressEnumeratorClass)) - -/** - * GSocketAddressEnumerator: - * - * Enumerator type for objects that contain or generate - * #GSocketAddresses. - */ -typedef struct _GSocketAddressEnumeratorClass GSocketAddressEnumeratorClass; - -struct _GSocketAddressEnumerator -{ - GObject parent_instance; - -}; - -struct _GSocketAddressEnumeratorClass -{ - GObjectClass parent_class; - - /* Virtual Table */ - - GSocketAddress * (* next) (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - - void (* next_async) (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GSocketAddress * (* next_finish) (GSocketAddressEnumerator *enumerator, - GAsyncResult *result, - GError **error); -}; - -GType g_socket_address_enumerator_get_type (void) G_GNUC_CONST; - -GSocketAddress *g_socket_address_enumerator_next (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - -void g_socket_address_enumerator_next_async (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketAddress *g_socket_address_enumerator_next_finish (GSocketAddressEnumerator *enumerator, - GAsyncResult *result, - GError **error); - -G_END_DECLS - - -#endif /* __G_SOCKET_ADDRESS_ENUMERATOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketclient.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketclient.h deleted file mode 100644 index 216310b4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketclient.h +++ /dev/null @@ -1,163 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008, 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CLIENT_H__ -#define __G_SOCKET_CLIENT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CLIENT (g_socket_client_get_type ()) -#define G_SOCKET_CLIENT(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_CLIENT, GSocketClient)) -#define G_SOCKET_CLIENT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_CLIENT, GSocketClientClass)) -#define G_IS_SOCKET_CLIENT(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_CLIENT)) -#define G_IS_SOCKET_CLIENT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_CLIENT)) -#define G_SOCKET_CLIENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_CLIENT, GSocketClientClass)) - -typedef struct _GSocketClientPrivate GSocketClientPrivate; -typedef struct _GSocketClientClass GSocketClientClass; - -struct _GSocketClientClass -{ - GObjectClass parent_class; - - void (* event) (GSocketClient *client, - GSocketClientEvent event, - GSocketConnectable *connectable, - GIOStream *connection); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); -}; - -struct _GSocketClient -{ - GObject parent_instance; - GSocketClientPrivate *priv; -}; - -GType g_socket_client_get_type (void) G_GNUC_CONST; - -GSocketClient *g_socket_client_new (void); - -GSocketFamily g_socket_client_get_family (GSocketClient *client); -void g_socket_client_set_family (GSocketClient *client, - GSocketFamily family); -GSocketType g_socket_client_get_socket_type (GSocketClient *client); -void g_socket_client_set_socket_type (GSocketClient *client, - GSocketType type); -GSocketProtocol g_socket_client_get_protocol (GSocketClient *client); -void g_socket_client_set_protocol (GSocketClient *client, - GSocketProtocol protocol); -GSocketAddress *g_socket_client_get_local_address (GSocketClient *client); -void g_socket_client_set_local_address (GSocketClient *client, - GSocketAddress *address); -guint g_socket_client_get_timeout (GSocketClient *client); -void g_socket_client_set_timeout (GSocketClient *client, - guint timeout); -gboolean g_socket_client_get_enable_proxy (GSocketClient *client); -void g_socket_client_set_enable_proxy (GSocketClient *client, - gboolean enable); - -gboolean g_socket_client_get_tls (GSocketClient *client); -void g_socket_client_set_tls (GSocketClient *client, - gboolean tls); -GTlsCertificateFlags g_socket_client_get_tls_validation_flags (GSocketClient *client); -void g_socket_client_set_tls_validation_flags (GSocketClient *client, - GTlsCertificateFlags flags); - -GSocketConnection * g_socket_client_connect (GSocketClient *client, - GSocketConnectable *connectable, - GCancellable *cancellable, - GError **error); -GSocketConnection * g_socket_client_connect_to_host (GSocketClient *client, - const gchar *host_and_port, - guint16 default_port, - GCancellable *cancellable, - GError **error); -GSocketConnection * g_socket_client_connect_to_service (GSocketClient *client, - const gchar *domain, - const gchar *service, - GCancellable *cancellable, - GError **error); -GSocketConnection * g_socket_client_connect_to_uri (GSocketClient *client, - const gchar *uri, - guint16 default_port, - GCancellable *cancellable, - GError **error); -void g_socket_client_connect_async (GSocketClient *client, - GSocketConnectable *connectable, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); -void g_socket_client_connect_to_host_async (GSocketClient *client, - const gchar *host_and_port, - guint16 default_port, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_to_host_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); - -void g_socket_client_connect_to_service_async (GSocketClient *client, - const gchar *domain, - const gchar *service, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_to_service_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); -void g_socket_client_connect_to_uri_async (GSocketClient *client, - const gchar *uri, - guint16 default_port, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_to_uri_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); -void g_socket_client_add_application_proxy (GSocketClient *client, - const gchar *protocol); - -G_END_DECLS - -#endif /* __G_SOCKET_CLIENT_H___ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnectable.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnectable.h deleted file mode 100644 index 0f84a4ae..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnectable.h +++ /dev/null @@ -1,74 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CONNECTABLE_H__ -#define __G_SOCKET_CONNECTABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CONNECTABLE (g_socket_connectable_get_type ()) -#define G_SOCKET_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_SOCKET_CONNECTABLE, GSocketConnectable)) -#define G_IS_SOCKET_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_SOCKET_CONNECTABLE)) -#define G_SOCKET_CONNECTABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_SOCKET_CONNECTABLE, GSocketConnectableIface)) - -/** - * GSocketConnectable: - * - * Interface for objects that contain or generate #GSocketAddresses. - */ -typedef struct _GSocketConnectableIface GSocketConnectableIface; - -/** - * GSocketConnectableIface: - * @g_iface: The parent interface. - * @enumerate: Creates a #GSocketAddressEnumerator - * @proxy_enumerate: Creates a #GProxyAddressEnumerator - * - * Provides an interface for returning a #GSocketAddressEnumerator - * and #GProxyAddressEnumerator - */ -struct _GSocketConnectableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GSocketAddressEnumerator * (* enumerate) (GSocketConnectable *connectable); - - GSocketAddressEnumerator * (* proxy_enumerate) (GSocketConnectable *connectable); - -}; - -GType g_socket_connectable_get_type (void) G_GNUC_CONST; - -GSocketAddressEnumerator *g_socket_connectable_enumerate (GSocketConnectable *connectable); - -GSocketAddressEnumerator *g_socket_connectable_proxy_enumerate (GSocketConnectable *connectable); - -G_END_DECLS - - -#endif /* __G_SOCKET_CONNECTABLE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnection.h deleted file mode 100644 index 0daa5f35..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketconnection.h +++ /dev/null @@ -1,110 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima - * Copyright © 2009 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - * Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CONNECTION_H__ -#define __G_SOCKET_CONNECTION_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CONNECTION (g_socket_connection_get_type ()) -#define G_SOCKET_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_CONNECTION, GSocketConnection)) -#define G_SOCKET_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_CONNECTION, GSocketConnectionClass)) -#define G_IS_SOCKET_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_CONNECTION)) -#define G_IS_SOCKET_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_CONNECTION)) -#define G_SOCKET_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_CONNECTION, GSocketConnectionClass)) - -typedef struct _GSocketConnectionPrivate GSocketConnectionPrivate; -typedef struct _GSocketConnectionClass GSocketConnectionClass; - -struct _GSocketConnectionClass -{ - GIOStreamClass parent_class; - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -struct _GSocketConnection -{ - GIOStream parent_instance; - GSocketConnectionPrivate *priv; -}; - -GType g_socket_connection_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_connection_is_connected (GSocketConnection *connection); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_connection_connect (GSocketConnection *connection, - GSocketAddress *address, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_32 -void g_socket_connection_connect_async (GSocketConnection *connection, - GSocketAddress *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_connection_connect_finish (GSocketConnection *connection, - GAsyncResult *result, - GError **error); - -GSocket *g_socket_connection_get_socket (GSocketConnection *connection); -GSocketAddress *g_socket_connection_get_local_address (GSocketConnection *connection, - GError **error); -GSocketAddress *g_socket_connection_get_remote_address (GSocketConnection *connection, - GError **error); - -void g_socket_connection_factory_register_type (GType g_type, - GSocketFamily family, - GSocketType type, - gint protocol); -GType g_socket_connection_factory_lookup_type (GSocketFamily family, - GSocketType type, - gint protocol_id); -GSocketConnection *g_socket_connection_factory_create_connection (GSocket *socket); - -G_END_DECLS - -#endif /* __G_SOCKET_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketcontrolmessage.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketcontrolmessage.h deleted file mode 100644 index 6af300c1..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketcontrolmessage.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2009 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CONTROL_MESSAGE_H__ -#define __G_SOCKET_CONTROL_MESSAGE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CONTROL_MESSAGE (g_socket_control_message_get_type ()) -#define G_SOCKET_CONTROL_MESSAGE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_CONTROL_MESSAGE, \ - GSocketControlMessage)) -#define G_SOCKET_CONTROL_MESSAGE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_CONTROL_MESSAGE, \ - GSocketControlMessageClass)) -#define G_IS_SOCKET_CONTROL_MESSAGE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_CONTROL_MESSAGE)) -#define G_IS_SOCKET_CONTROL_MESSAGE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_CONTROL_MESSAGE)) -#define G_SOCKET_CONTROL_MESSAGE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_CONTROL_MESSAGE, \ - GSocketControlMessageClass)) - -typedef struct _GSocketControlMessagePrivate GSocketControlMessagePrivate; -typedef struct _GSocketControlMessageClass GSocketControlMessageClass; - -/** - * GSocketControlMessageClass: - * @get_size: gets the size of the message. - * @get_level: gets the protocol of the message. - * @get_type: gets the protocol specific type of the message. - * @serialize: Writes out the message data. - * @deserialize: Tries to deserialize a message. - **/ - -struct _GSocketControlMessageClass -{ - GObjectClass parent_class; - - gsize (* get_size) (GSocketControlMessage *message); - int (* get_level) (GSocketControlMessage *message); - int (* get_type) (GSocketControlMessage *message); - void (* serialize) (GSocketControlMessage *message, - gpointer data); - GSocketControlMessage *(* deserialize) (int level, - int type, - gsize size, - gpointer data); - - /*< private >*/ - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -struct _GSocketControlMessage -{ - GObject parent_instance; - GSocketControlMessagePrivate *priv; -}; - -GType g_socket_control_message_get_type (void) G_GNUC_CONST; -gsize g_socket_control_message_get_size (GSocketControlMessage *message); -int g_socket_control_message_get_level (GSocketControlMessage *message); -int g_socket_control_message_get_msg_type (GSocketControlMessage *message); -void g_socket_control_message_serialize (GSocketControlMessage *message, - gpointer data); -GSocketControlMessage *g_socket_control_message_deserialize (int level, - int type, - gsize size, - gpointer data); - - -G_END_DECLS - -#endif /* __G_SOCKET_CONTROL_MESSAGE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketlistener.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketlistener.h deleted file mode 100644 index da09a784..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketlistener.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima - * Copyright © 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - * Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_LISTENER_H__ -#define __G_SOCKET_LISTENER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_LISTENER (g_socket_listener_get_type ()) -#define G_SOCKET_LISTENER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_LISTENER, GSocketListener)) -#define G_SOCKET_LISTENER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_LISTENER, GSocketListenerClass)) -#define G_IS_SOCKET_LISTENER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_LISTENER)) -#define G_IS_SOCKET_LISTENER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_LISTENER)) -#define G_SOCKET_LISTENER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_LISTENER, GSocketListenerClass)) - -typedef struct _GSocketListenerPrivate GSocketListenerPrivate; -typedef struct _GSocketListenerClass GSocketListenerClass; - -/** - * GSocketListenerClass: - * @changed: virtual method called when the set of socket listened to changes - **/ -struct _GSocketListenerClass -{ - GObjectClass parent_class; - - void (* changed) (GSocketListener *listener); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -struct _GSocketListener -{ - GObject parent_instance; - GSocketListenerPrivate *priv; -}; - -GType g_socket_listener_get_type (void) G_GNUC_CONST; - -GSocketListener * g_socket_listener_new (void); - -void g_socket_listener_set_backlog (GSocketListener *listener, - int listen_backlog); - -gboolean g_socket_listener_add_socket (GSocketListener *listener, - GSocket *socket, - GObject *source_object, - GError **error); -gboolean g_socket_listener_add_address (GSocketListener *listener, - GSocketAddress *address, - GSocketType type, - GSocketProtocol protocol, - GObject *source_object, - GSocketAddress **effective_address, - GError **error); -gboolean g_socket_listener_add_inet_port (GSocketListener *listener, - guint16 port, - GObject *source_object, - GError **error); -guint16 g_socket_listener_add_any_inet_port (GSocketListener *listener, - GObject *source_object, - GError **error); - -GSocket * g_socket_listener_accept_socket (GSocketListener *listener, - GObject **source_object, - GCancellable *cancellable, - GError **error); -void g_socket_listener_accept_socket_async (GSocketListener *listener, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocket * g_socket_listener_accept_socket_finish (GSocketListener *listener, - GAsyncResult *result, - GObject **source_object, - GError **error); - - -GSocketConnection * g_socket_listener_accept (GSocketListener *listener, - GObject **source_object, - GCancellable *cancellable, - GError **error); - -void g_socket_listener_accept_async (GSocketListener *listener, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GSocketConnection * g_socket_listener_accept_finish (GSocketListener *listener, - GAsyncResult *result, - GObject **source_object, - GError **error); - -void g_socket_listener_close (GSocketListener *listener); - -G_END_DECLS - -#endif /* __G_SOCKET_LISTENER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketservice.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsocketservice.h deleted file mode 100644 index 27cc0a26..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsocketservice.h +++ /dev/null @@ -1,88 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_SERVICE_H__ -#define __G_SOCKET_SERVICE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_SERVICE (g_socket_service_get_type ()) -#define G_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_SERVICE, GSocketService)) -#define G_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_SERVICE, GSocketServiceClass)) -#define G_IS_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_SERVICE)) -#define G_IS_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_SERVICE)) -#define G_SOCKET_SERVICE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_SERVICE, GSocketServiceClass)) - -typedef struct _GSocketServicePrivate GSocketServicePrivate; -typedef struct _GSocketServiceClass GSocketServiceClass; - -/** - * GSocketServiceClass: - * @incomming: signal emitted when new connections are accepted - */ -struct _GSocketServiceClass -{ - GSocketListenerClass parent_class; - - gboolean (* incoming) (GSocketService *service, - GSocketConnection *connection, - GObject *source_object); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -struct _GSocketService -{ - GSocketListener parent_instance; - GSocketServicePrivate *priv; -}; - -GType g_socket_service_get_type (void); - -GSocketService *g_socket_service_new (void); -void g_socket_service_start (GSocketService *service); -void g_socket_service_stop (GSocketService *service); -gboolean g_socket_service_is_active (GSocketService *service); - - -G_END_DECLS - -#endif /* __G_SOCKET_SERVICE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gsrvtarget.h b/GstreamerHelper/x64/include/glib-2.0/gio/gsrvtarget.h deleted file mode 100644 index 67ce2a9e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gsrvtarget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SRV_TARGET_H__ -#define __G_SRV_TARGET_H__ - -#include - -G_BEGIN_DECLS - -GType g_srv_target_get_type (void) G_GNUC_CONST; -#define G_TYPE_SRV_TARGET (g_srv_target_get_type ()) - -GSrvTarget *g_srv_target_new (const gchar *hostname, - guint16 port, - guint16 priority, - guint16 weight); -GSrvTarget *g_srv_target_copy (GSrvTarget *target); -void g_srv_target_free (GSrvTarget *target); - -const gchar *g_srv_target_get_hostname (GSrvTarget *target); -guint16 g_srv_target_get_port (GSrvTarget *target); -guint16 g_srv_target_get_priority (GSrvTarget *target); -guint16 g_srv_target_get_weight (GSrvTarget *target); - -GList *g_srv_target_list_sort (GList *targets); - -G_END_DECLS - -#endif /* __G_SRV_TARGET_H__ */ - diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtcpconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtcpconnection.h deleted file mode 100644 index 3928825a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtcpconnection.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008, 2009 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TCP_CONNECTION_H__ -#define __G_TCP_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TCP_CONNECTION (g_tcp_connection_get_type ()) -#define G_TCP_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_TCP_CONNECTION, GTcpConnection)) -#define G_TCP_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_TCP_CONNECTION, GTcpConnectionClass)) -#define G_IS_TCP_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_TCP_CONNECTION)) -#define G_IS_TCP_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_TCP_CONNECTION)) -#define G_TCP_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_TCP_CONNECTION, GTcpConnectionClass)) - -typedef struct _GTcpConnectionPrivate GTcpConnectionPrivate; -typedef struct _GTcpConnectionClass GTcpConnectionClass; - -struct _GTcpConnectionClass -{ - GSocketConnectionClass parent_class; -}; - -struct _GTcpConnection -{ - GSocketConnection parent_instance; - GTcpConnectionPrivate *priv; -}; - -GType g_tcp_connection_get_type (void) G_GNUC_CONST; - -void g_tcp_connection_set_graceful_disconnect (GTcpConnection *connection, - gboolean graceful_disconnect); -gboolean g_tcp_connection_get_graceful_disconnect (GTcpConnection *connection); - -G_END_DECLS - -#endif /* __G_TCP_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtcpwrapperconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtcpwrapperconnection.h deleted file mode 100644 index 01d3a03a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtcpwrapperconnection.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * Copyright © 2010 Collabora Ltd. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Nicolas Dufresne - * - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TCP_WRAPPER_CONNECTION_H__ -#define __G_TCP_WRAPPER_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TCP_WRAPPER_CONNECTION (g_tcp_wrapper_connection_get_type ()) -#define G_TCP_WRAPPER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_TCP_WRAPPER_CONNECTION, GTcpWrapperConnection)) -#define G_TCP_WRAPPER_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_TCP_WRAPPER_CONNECTION, GTcpWrapperConnectionClass)) -#define G_IS_TCP_WRAPPER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_TCP_WRAPPER_CONNECTION)) -#define G_IS_TCP_WRAPPER_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_TCP_WRAPPER_CONNECTION)) -#define G_TCP_WRAPPER_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_TCP_WRAPPER_CONNECTION, GTcpWrapperConnectionClass)) - -typedef struct _GTcpWrapperConnectionPrivate GTcpWrapperConnectionPrivate; -typedef struct _GTcpWrapperConnectionClass GTcpWrapperConnectionClass; - -struct _GTcpWrapperConnectionClass -{ - GTcpConnectionClass parent_class; -}; - -struct _GTcpWrapperConnection -{ - GTcpConnection parent_instance; - GTcpWrapperConnectionPrivate *priv; -}; - -GType g_tcp_wrapper_connection_get_type (void) G_GNUC_CONST; - -GSocketConnection *g_tcp_wrapper_connection_new (GIOStream *base_io_stream, - GSocket *socket); -GIOStream *g_tcp_wrapper_connection_get_base_io_stream (GTcpWrapperConnection *conn); - -G_END_DECLS - -#endif /* __G_TCP_WRAPPER_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtestdbus.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtestdbus.h deleted file mode 100644 index 0fd281b4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtestdbus.h +++ /dev/null @@ -1,74 +0,0 @@ -/* GIO testing utilities - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * Copyright (C) 2012 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: David Zeuthen - * Xavier Claessens - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TEST_DBUS_H__ -#define __G_TEST_DBUS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TEST_DBUS \ - (g_test_dbus_get_type ()) -#define G_TEST_DBUS(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_TEST_DBUS, \ - GTestDBus)) -#define G_IS_TEST_DBUS(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_TEST_DBUS)) - -GLIB_AVAILABLE_IN_2_34 -GType g_test_dbus_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_34 -GTestDBus * g_test_dbus_new (GTestDBusFlags flags); - -GLIB_AVAILABLE_IN_2_34 -GTestDBusFlags g_test_dbus_get_flags (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -const gchar * g_test_dbus_get_bus_address (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_add_service_dir (GTestDBus *self, - const gchar *path); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_up (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_stop (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_down (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_unset (void); - -G_END_DECLS - -#endif /* __G_TEST_DBUS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gthemedicon.h b/GstreamerHelper/x64/include/glib-2.0/gio/gthemedicon.h deleted file mode 100644 index b0085e68..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gthemedicon.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THEMED_ICON_H__ -#define __G_THEMED_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_THEMED_ICON (g_themed_icon_get_type ()) -#define G_THEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_THEMED_ICON, GThemedIcon)) -#define G_THEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_THEMED_ICON, GThemedIconClass)) -#define G_IS_THEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_THEMED_ICON)) -#define G_IS_THEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_THEMED_ICON)) -#define G_THEMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_THEMED_ICON, GThemedIconClass)) - -/** - * GThemedIcon: - * - * An implementation of #GIcon for themed icons. - **/ -typedef struct _GThemedIconClass GThemedIconClass; - -GType g_themed_icon_get_type (void) G_GNUC_CONST; - -GIcon *g_themed_icon_new (const char *iconname); -GIcon *g_themed_icon_new_with_default_fallbacks (const char *iconname); -GIcon *g_themed_icon_new_from_names (char **iconnames, - int len); -void g_themed_icon_prepend_name (GThemedIcon *icon, - const char *iconname); -void g_themed_icon_append_name (GThemedIcon *icon, - const char *iconname); - -const gchar* const * g_themed_icon_get_names (GThemedIcon *icon); - -G_END_DECLS - -#endif /* __G_THEMED_ICON_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gthreadedsocketservice.h b/GstreamerHelper/x64/include/glib-2.0/gio/gthreadedsocketservice.h deleted file mode 100644 index f9470907..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gthreadedsocketservice.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THREADED_SOCKET_SERVICE_H__ -#define __G_THREADED_SOCKET_SERVICE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_THREADED_SOCKET_SERVICE (g_threaded_socket_service_get_type ()) -#define G_THREADED_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_THREADED_SOCKET_SERVICE, \ - GThreadedSocketService)) -#define G_THREADED_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_THREADED_SOCKET_SERVICE, \ - GThreadedSocketServiceClass)) -#define G_IS_THREADED_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_THREADED_SOCKET_SERVICE)) -#define G_IS_THREADED_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_THREADED_SOCKET_SERVICE)) -#define G_THREADED_SOCKET_SERVICE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_THREADED_SOCKET_SERVICE, \ - GThreadedSocketServiceClass)) - -typedef struct _GThreadedSocketServicePrivate GThreadedSocketServicePrivate; -typedef struct _GThreadedSocketServiceClass GThreadedSocketServiceClass; - -struct _GThreadedSocketServiceClass -{ - GSocketServiceClass parent_class; - - gboolean (* run) (GThreadedSocketService *service, - GSocketConnection *connection, - GObject *source_object); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -struct _GThreadedSocketService -{ - GSocketService parent_instance; - GThreadedSocketServicePrivate *priv; -}; - -GType g_threaded_socket_service_get_type (void); -GSocketService * g_threaded_socket_service_new (int max_threads); - -G_END_DECLS - -#endif /* __G_THREADED_SOCKET_SERVICE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsbackend.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsbackend.h deleted file mode 100644 index 389b5d77..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsbackend.h +++ /dev/null @@ -1,90 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_BACKEND_H__ -#define __G_TLS_BACKEND_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TLS_BACKEND_EXTENSION_POINT_NAME: - * - * Extension point for TLS functionality via #GTlsBackend. - * See Extending GIO. - */ -#define G_TLS_BACKEND_EXTENSION_POINT_NAME "gio-tls-backend" - -#define G_TYPE_TLS_BACKEND (g_tls_backend_get_type ()) -#define G_TLS_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_TLS_BACKEND, GTlsBackend)) -#define G_IS_TLS_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_TLS_BACKEND)) -#define G_TLS_BACKEND_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_TLS_BACKEND, GTlsBackendInterface)) - -typedef struct _GTlsBackend GTlsBackend; -typedef struct _GTlsBackendInterface GTlsBackendInterface; - -/** - * GTlsBackendInterface: - * @g_iface: The parent interface. - * @supports_tls: returns whether the backend supports TLS. - * @get_default_database: returns a default #GTlsDatabase instance. - * @get_certificate_type: returns the #GTlsCertificate implementation type - * @get_client_connection_type: returns the #GTlsClientConnection implementation type - * @get_server_connection_type: returns the #GTlsServerConnection implementation type - * @get_file_database_type: returns the #GTlsFileDatabase implementation type. - * - * Provides an interface for describing TLS-related types. - * - * Since: 2.28 - */ -struct _GTlsBackendInterface -{ - GTypeInterface g_iface; - - /* methods */ - gboolean ( *supports_tls) (GTlsBackend *backend); - GType ( *get_certificate_type) (void); - GType ( *get_client_connection_type) (void); - GType ( *get_server_connection_type) (void); - GType ( *get_file_database_type) (void); - GTlsDatabase * ( *get_default_database) (GTlsBackend *backend); -}; - -GType g_tls_backend_get_type (void) G_GNUC_CONST; - -GTlsBackend * g_tls_backend_get_default (void); - -GTlsDatabase * g_tls_backend_get_default_database (GTlsBackend *backend); - -gboolean g_tls_backend_supports_tls (GTlsBackend *backend); - -GType g_tls_backend_get_certificate_type (GTlsBackend *backend); -GType g_tls_backend_get_client_connection_type (GTlsBackend *backend); -GType g_tls_backend_get_server_connection_type (GTlsBackend *backend); -GType g_tls_backend_get_file_database_type (GTlsBackend *backend); - -G_END_DECLS - -#endif /* __G_TLS_BACKEND_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlscertificate.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlscertificate.h deleted file mode 100644 index 991eb1d4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlscertificate.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_CERTIFICATE_H__ -#define __G_TLS_CERTIFICATE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_CERTIFICATE (g_tls_certificate_get_type ()) -#define G_TLS_CERTIFICATE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CERTIFICATE, GTlsCertificate)) -#define G_TLS_CERTIFICATE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_CERTIFICATE, GTlsCertificateClass)) -#define G_IS_TLS_CERTIFICATE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CERTIFICATE)) -#define G_IS_TLS_CERTIFICATE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_CERTIFICATE)) -#define G_TLS_CERTIFICATE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_CERTIFICATE, GTlsCertificateClass)) - -typedef struct _GTlsCertificateClass GTlsCertificateClass; -typedef struct _GTlsCertificatePrivate GTlsCertificatePrivate; - -struct _GTlsCertificate { - GObject parent_instance; - - GTlsCertificatePrivate *priv; -}; - -struct _GTlsCertificateClass -{ - GObjectClass parent_class; - - GTlsCertificateFlags (* verify) (GTlsCertificate *cert, - GSocketConnectable *identity, - GTlsCertificate *trusted_ca); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[8]; -}; - -GType g_tls_certificate_get_type (void) G_GNUC_CONST; - -GTlsCertificate *g_tls_certificate_new_from_pem (const gchar *data, - gssize length, - GError **error); - -GTlsCertificate *g_tls_certificate_new_from_file (const gchar *file, - GError **error); -GTlsCertificate *g_tls_certificate_new_from_files (const gchar *cert_file, - const gchar *key_file, - GError **error); -GList *g_tls_certificate_list_new_from_file (const gchar *file, - GError **error); - -GTlsCertificate *g_tls_certificate_get_issuer (GTlsCertificate *cert); - -GTlsCertificateFlags g_tls_certificate_verify (GTlsCertificate *cert, - GSocketConnectable *identity, - GTlsCertificate *trusted_ca); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_tls_certificate_is_same (GTlsCertificate *cert_one, - GTlsCertificate *cert_two); - -G_END_DECLS - -#endif /* __G_TLS_CERTIFICATE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsclientconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsclientconnection.h deleted file mode 100644 index eaf62f0b..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsclientconnection.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_CLIENT_CONNECTION_H__ -#define __G_TLS_CLIENT_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_CLIENT_CONNECTION (g_tls_client_connection_get_type ()) -#define G_TLS_CLIENT_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CLIENT_CONNECTION, GTlsClientConnection)) -#define G_IS_TLS_CLIENT_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CLIENT_CONNECTION)) -#define G_TLS_CLIENT_CONNECTION_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TLS_CLIENT_CONNECTION, GTlsClientConnectionInterface)) - -typedef struct _GTlsClientConnectionInterface GTlsClientConnectionInterface; - -struct _GTlsClientConnectionInterface -{ - GTypeInterface g_iface; - -}; - -GType g_tls_client_connection_get_type (void) G_GNUC_CONST; - -GIOStream * g_tls_client_connection_new (GIOStream *base_io_stream, - GSocketConnectable *server_identity, - GError **error); - -GTlsCertificateFlags g_tls_client_connection_get_validation_flags (GTlsClientConnection *conn); -void g_tls_client_connection_set_validation_flags (GTlsClientConnection *conn, - GTlsCertificateFlags flags); -GSocketConnectable *g_tls_client_connection_get_server_identity (GTlsClientConnection *conn); -void g_tls_client_connection_set_server_identity (GTlsClientConnection *conn, - GSocketConnectable *identity); -gboolean g_tls_client_connection_get_use_ssl3 (GTlsClientConnection *conn); -void g_tls_client_connection_set_use_ssl3 (GTlsClientConnection *conn, - gboolean use_ssl3); -GList * g_tls_client_connection_get_accepted_cas (GTlsClientConnection *conn); - -G_END_DECLS - -#endif /* __G_TLS_CLIENT_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsconnection.h deleted file mode 100644 index 37132cc8..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsconnection.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_CONNECTION_H__ -#define __G_TLS_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_CONNECTION (g_tls_connection_get_type ()) -#define G_TLS_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CONNECTION, GTlsConnection)) -#define G_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_CONNECTION, GTlsConnectionClass)) -#define G_IS_TLS_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CONNECTION)) -#define G_IS_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_CONNECTION)) -#define G_TLS_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_CONNECTION, GTlsConnectionClass)) - -typedef struct _GTlsConnectionClass GTlsConnectionClass; -typedef struct _GTlsConnectionPrivate GTlsConnectionPrivate; - -struct _GTlsConnection { - GIOStream parent_instance; - - GTlsConnectionPrivate *priv; -}; - -struct _GTlsConnectionClass -{ - GIOStreamClass parent_class; - - /* signals */ - gboolean ( *accept_certificate) (GTlsConnection *connection, - GTlsCertificate *peer_cert, - GTlsCertificateFlags errors); - - /* methods */ - gboolean ( *handshake ) (GTlsConnection *conn, - GCancellable *cancellable, - GError **error); - - void ( *handshake_async ) (GTlsConnection *conn, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean ( *handshake_finish ) (GTlsConnection *conn, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[8]; -}; - -GType g_tls_connection_get_type (void) G_GNUC_CONST; - -GLIB_DEPRECATED -void g_tls_connection_set_use_system_certdb (GTlsConnection *conn, - gboolean use_system_certdb); -GLIB_DEPRECATED -gboolean g_tls_connection_get_use_system_certdb (GTlsConnection *conn); - -void g_tls_connection_set_database (GTlsConnection *conn, - GTlsDatabase *database); -GTlsDatabase * g_tls_connection_get_database (GTlsConnection *conn); - -void g_tls_connection_set_certificate (GTlsConnection *conn, - GTlsCertificate *certificate); -GTlsCertificate *g_tls_connection_get_certificate (GTlsConnection *conn); - -void g_tls_connection_set_interaction (GTlsConnection *conn, - GTlsInteraction *interaction); -GTlsInteraction * g_tls_connection_get_interaction (GTlsConnection *conn); - -GTlsCertificate *g_tls_connection_get_peer_certificate (GTlsConnection *conn); -GTlsCertificateFlags g_tls_connection_get_peer_certificate_errors (GTlsConnection *conn); - -void g_tls_connection_set_require_close_notify (GTlsConnection *conn, - gboolean require_close_notify); -gboolean g_tls_connection_get_require_close_notify (GTlsConnection *conn); - -void g_tls_connection_set_rehandshake_mode (GTlsConnection *conn, - GTlsRehandshakeMode mode); -GTlsRehandshakeMode g_tls_connection_get_rehandshake_mode (GTlsConnection *conn); - -gboolean g_tls_connection_handshake (GTlsConnection *conn, - GCancellable *cancellable, - GError **error); - -void g_tls_connection_handshake_async (GTlsConnection *conn, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_tls_connection_handshake_finish (GTlsConnection *conn, - GAsyncResult *result, - GError **error); - -/** - * G_TLS_ERROR: - * - * Error domain for TLS. Errors in this domain will be from the - * #GTlsError enumeration. See #GError for more information on error - * domains. - */ -#define G_TLS_ERROR (g_tls_error_quark ()) -GQuark g_tls_error_quark (void); - - -/*< protected >*/ -gboolean g_tls_connection_emit_accept_certificate (GTlsConnection *conn, - GTlsCertificate *peer_cert, - GTlsCertificateFlags errors); - -G_END_DECLS - -#endif /* __G_TLS_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsdatabase.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsdatabase.h deleted file mode 100644 index 9f93cc91..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsdatabase.h +++ /dev/null @@ -1,235 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_DATABASE_H__ -#define __G_TLS_DATABASE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER "1.3.6.1.5.5.7.3.1" -#define G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT "1.3.6.1.5.5.7.3.2" - -#define G_TYPE_TLS_DATABASE (g_tls_database_get_type ()) -#define G_TLS_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_DATABASE, GTlsDatabase)) -#define G_TLS_DATABASE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_DATABASE, GTlsDatabaseClass)) -#define G_IS_TLS_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_DATABASE)) -#define G_IS_TLS_DATABASE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_DATABASE)) -#define G_TLS_DATABASE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_DATABASE, GTlsDatabaseClass)) - -typedef struct _GTlsDatabaseClass GTlsDatabaseClass; -typedef struct _GTlsDatabasePrivate GTlsDatabasePrivate; - -struct _GTlsDatabase -{ - GObject parent_instance; - - GTlsDatabasePrivate *priv; -}; - -struct _GTlsDatabaseClass -{ - GObjectClass parent_class; - - /* virtual methods */ - - GTlsCertificateFlags (*verify_chain) (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GError **error); - - void (*verify_chain_async) (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsCertificateFlags (*verify_chain_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - gchar* (*create_certificate_handle) (GTlsDatabase *self, - GTlsCertificate *certificate); - - GTlsCertificate* (*lookup_certificate_for_handle) (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - - void (*lookup_certificate_for_handle_async) (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsCertificate* (*lookup_certificate_for_handle_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - GTlsCertificate* (*lookup_certificate_issuer) (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - - void (*lookup_certificate_issuer_async) (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsCertificate* (*lookup_certificate_issuer_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - GList* (*lookup_certificates_issued_by) (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - - void (*lookup_certificates_issued_by_async) (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GList* (*lookup_certificates_issued_by_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[16]; -}; - -GType g_tls_database_get_type (void) G_GNUC_CONST; - -GTlsCertificateFlags g_tls_database_verify_chain (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_verify_chain_async (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsCertificateFlags g_tls_database_verify_chain_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -gchar* g_tls_database_create_certificate_handle (GTlsDatabase *self, - GTlsCertificate *certificate); - -GTlsCertificate* g_tls_database_lookup_certificate_for_handle (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_lookup_certificate_for_handle_async (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsCertificate* g_tls_database_lookup_certificate_for_handle_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -GTlsCertificate* g_tls_database_lookup_certificate_issuer (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_lookup_certificate_issuer_async (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsCertificate* g_tls_database_lookup_certificate_issuer_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -GList* g_tls_database_lookup_certificates_issued_by (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_lookup_certificates_issued_by_async (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GList* g_tls_database_lookup_certificates_issued_by_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_DATABASE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsfiledatabase.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsfiledatabase.h deleted file mode 100644 index bc6a17ff..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsfiledatabase.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2010 Collabora, Ltd. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * See the included COPYING file for more information. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_FILE_DATABASE_H__ -#define __G_TLS_FILE_DATABASE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_FILE_DATABASE (g_tls_file_database_get_type ()) -#define G_TLS_FILE_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_FILE_DATABASE, GTlsFileDatabase)) -#define G_IS_TLS_FILE_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_FILE_DATABASE)) -#define G_TLS_FILE_DATABASE_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TLS_FILE_DATABASE, GTlsFileDatabaseInterface)) - -typedef struct _GTlsFileDatabaseInterface GTlsFileDatabaseInterface; - -/** - * GTlsFileDatabaseInterface: - * @g_iface: The parent interface. - * - * Provides an interface for #GTlsFileDatabase implementations. - * - */ -struct _GTlsFileDatabaseInterface -{ - GTypeInterface g_iface; - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[8]; -}; - -GType g_tls_file_database_get_type (void) G_GNUC_CONST; - -GTlsDatabase* g_tls_file_database_new (const gchar *anchors, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_FILE_DATABASE_H___ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsinteraction.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsinteraction.h deleted file mode 100644 index fc76fe2d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsinteraction.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2011 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_INTERACTION_H__ -#define __G_TLS_INTERACTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_INTERACTION (g_tls_interaction_get_type ()) -#define G_TLS_INTERACTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_TLS_INTERACTION, GTlsInteraction)) -#define G_TLS_INTERACTION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_TLS_INTERACTION, GTlsInteractionClass)) -#define G_IS_TLS_INTERACTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_TLS_INTERACTION)) -#define G_IS_TLS_INTERACTION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_TLS_INTERACTION)) -#define G_TLS_INTERACTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_TLS_INTERACTION, GTlsInteractionClass)) - -typedef struct _GTlsInteractionClass GTlsInteractionClass; -typedef struct _GTlsInteractionPrivate GTlsInteractionPrivate; - -struct _GTlsInteraction -{ - /*< private >*/ - GObject parent_instance; - GTlsInteractionPrivate *priv; -}; - -struct _GTlsInteractionClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - GTlsInteractionResult (* ask_password) (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GError **error); - - void (* ask_password_async) (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsInteractionResult (* ask_password_finish) (GTlsInteraction *interaction, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[24]; -}; - -GType g_tls_interaction_get_type (void) G_GNUC_CONST; - -GTlsInteractionResult g_tls_interaction_invoke_ask_password (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GError **error); - - -GTlsInteractionResult g_tls_interaction_ask_password (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GError **error); - -void g_tls_interaction_ask_password_async (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsInteractionResult g_tls_interaction_ask_password_finish (GTlsInteraction *interaction, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_INTERACTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlspassword.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlspassword.h deleted file mode 100644 index ef581b61..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlspassword.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2011 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_PASSWORD_H__ -#define __G_TLS_PASSWORD_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_PASSWORD (g_tls_password_get_type ()) -#define G_TLS_PASSWORD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_TLS_PASSWORD, GTlsPassword)) -#define G_TLS_PASSWORD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_TLS_PASSWORD, GTlsPasswordClass)) -#define G_IS_TLS_PASSWORD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_TLS_PASSWORD)) -#define G_IS_TLS_PASSWORD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_TLS_PASSWORD)) -#define G_TLS_PASSWORD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_TLS_PASSWORD, GTlsPasswordClass)) - -typedef struct _GTlsPasswordClass GTlsPasswordClass; -typedef struct _GTlsPasswordPrivate GTlsPasswordPrivate; - -struct _GTlsPassword -{ - GObject parent_instance; - - GTlsPasswordPrivate *priv; -}; - -struct _GTlsPasswordClass -{ - GObjectClass parent_class; - - /* methods */ - - const guchar * ( *get_value) (GTlsPassword *password, - gsize *length); - - void ( *set_value) (GTlsPassword *password, - guchar *value, - gssize length, - GDestroyNotify destroy); - - const gchar* ( *get_default_warning) (GTlsPassword *password); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[4]; -}; - -GType g_tls_password_get_type (void) G_GNUC_CONST; - -GTlsPassword * g_tls_password_new (GTlsPasswordFlags flags, - const gchar *description); - -const guchar * g_tls_password_get_value (GTlsPassword *password, - gsize *length); -void g_tls_password_set_value (GTlsPassword *password, - const guchar *value, - gssize length); -void g_tls_password_set_value_full (GTlsPassword *password, - guchar *value, - gssize length, - GDestroyNotify destroy); - -GTlsPasswordFlags g_tls_password_get_flags (GTlsPassword *password); -void g_tls_password_set_flags (GTlsPassword *password, - GTlsPasswordFlags flags); - -const gchar* g_tls_password_get_description (GTlsPassword *password); -void g_tls_password_set_description (GTlsPassword *password, - const gchar *description); - -const gchar * g_tls_password_get_warning (GTlsPassword *password); -void g_tls_password_set_warning (GTlsPassword *password, - const gchar *warning); - -G_END_DECLS - -#endif /* __G_TLS_PASSWORD_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsserverconnection.h b/GstreamerHelper/x64/include/glib-2.0/gio/gtlsserverconnection.h deleted file mode 100644 index c909d550..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gtlsserverconnection.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_SERVER_CONNECTION_H__ -#define __G_TLS_SERVER_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_SERVER_CONNECTION (g_tls_server_connection_get_type ()) -#define G_TLS_SERVER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_SERVER_CONNECTION, GTlsServerConnection)) -#define G_IS_TLS_SERVER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_SERVER_CONNECTION)) -#define G_TLS_SERVER_CONNECTION_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TLS_SERVER_CONNECTION, GTlsServerConnectionInterface)) - -/** - * GTlsServerConnection: - * - * TLS server-side connection. This is the server-side implementation - * of a #GTlsConnection. - * - * Since: 2.28 - */ -typedef struct _GTlsServerConnectionInterface GTlsServerConnectionInterface; - -struct _GTlsServerConnectionInterface -{ - GTypeInterface g_iface; - -}; - -GType g_tls_server_connection_get_type (void) G_GNUC_CONST; - -GIOStream * g_tls_server_connection_new (GIOStream *base_io_stream, - GTlsCertificate *certificate, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_SERVER_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gvfs.h b/GstreamerHelper/x64/include/glib-2.0/gio/gvfs.h deleted file mode 100644 index bacbe8b6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gvfs.h +++ /dev/null @@ -1,125 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VFS_H__ -#define __G_VFS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_VFS (g_vfs_get_type ()) -#define G_VFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS, GVfs)) -#define G_VFS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS, GVfsClass)) -#define G_VFS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS, GVfsClass)) -#define G_IS_VFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS)) -#define G_IS_VFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS)) - -/** - * G_VFS_EXTENSION_POINT_NAME: - * - * Extension point for #GVfs functionality. - * See Extending GIO. - */ -#define G_VFS_EXTENSION_POINT_NAME "gio-vfs" - -/** - * GVfs: - * - * Virtual File System object. - **/ -typedef struct _GVfsClass GVfsClass; - -struct _GVfs -{ - GObject parent_instance; -}; - -struct _GVfsClass -{ - GObjectClass parent_class; - - /* Virtual Table */ - - gboolean (* is_active) (GVfs *vfs); - GFile * (* get_file_for_path) (GVfs *vfs, - const char *path); - GFile * (* get_file_for_uri) (GVfs *vfs, - const char *uri); - const gchar * const * (* get_supported_uri_schemes) (GVfs *vfs); - GFile * (* parse_name) (GVfs *vfs, - const char *parse_name); - - /*< private >*/ - void (* local_file_add_info) (GVfs *vfs, - const char *filename, - guint64 device, - GFileAttributeMatcher *attribute_matcher, - GFileInfo *info, - GCancellable *cancellable, - gpointer *extra_data, - GDestroyNotify *free_extra_data); - void (* add_writable_namespaces) (GVfs *vfs, - GFileAttributeInfoList *list); - gboolean (* local_file_set_attributes) (GVfs *vfs, - const char *filename, - GFileInfo *info, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* local_file_removed) (GVfs *vfs, - const char *filename); - void (* local_file_moved) (GVfs *vfs, - const char *source, - const char *dest); - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); -}; - -GType g_vfs_get_type (void) G_GNUC_CONST; - -gboolean g_vfs_is_active (GVfs *vfs); -GFile * g_vfs_get_file_for_path (GVfs *vfs, - const char *path); -GFile * g_vfs_get_file_for_uri (GVfs *vfs, - const char *uri); -const gchar* const * g_vfs_get_supported_uri_schemes (GVfs *vfs); - -GFile * g_vfs_parse_name (GVfs *vfs, - const char *parse_name); - -GVfs * g_vfs_get_default (void); -GVfs * g_vfs_get_local (void); - -G_END_DECLS - -#endif /* __G_VFS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gvolume.h b/GstreamerHelper/x64/include/glib-2.0/gio/gvolume.h deleted file mode 100644 index b0d862e7..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gvolume.h +++ /dev/null @@ -1,239 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VOLUME_H__ -#define __G_VOLUME_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_VOLUME_IDENTIFIER_KIND_HAL_UDI: - * - * The string used to obtain a Hal UDI with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_HAL_UDI "hal-udi" - -/** - * G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE: - * - * The string used to obtain a Unix device path with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE "unix-device" - -/** - * G_VOLUME_IDENTIFIER_KIND_LABEL: - * - * The string used to obtain a filesystem label with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_LABEL "label" - -/** - * G_VOLUME_IDENTIFIER_KIND_UUID: - * - * The string used to obtain a UUID with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_UUID "uuid" - -/** - * G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT: - * - * The string used to obtain a NFS mount with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT "nfs-mount" - -/** - * G_VOLUME_IDENTIFIER_KIND_CLASS: - * - * The string used to obtain the volume class - * with g_volume_get_identifier(). - * - * Known volume classes include device and - * network. Other classes may be added in the - * future. - * - * This is intended to be used by applications to classify #GVolume - * instances into different sections - for example a file manager or - * file chooser can use this information to show - * network volumes under a "Network" heading and - * device volumes under a "Devices" heading. - */ -#define G_VOLUME_IDENTIFIER_KIND_CLASS "class" - - -#define G_TYPE_VOLUME (g_volume_get_type ()) -#define G_VOLUME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_VOLUME, GVolume)) -#define G_IS_VOLUME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_VOLUME)) -#define G_VOLUME_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_VOLUME, GVolumeIface)) - -/** - * GVolumeIface: - * @g_iface: The parent interface. - * @changed: Changed signal that is emitted when the volume's state has changed. - * @removed: The removed signal that is emitted when the #GVolume have been removed. If the recipient is holding references to the object they should release them so the object can be finalized. - * @get_name: Gets a string containing the name of the #GVolume. - * @get_icon: Gets a #GIcon for the #GVolume. - * @get_uuid: Gets the UUID for the #GVolume. The reference is typically based on the file system UUID for the mount in question and should be considered an opaque string. Returns %NULL if there is no UUID available. - * @get_drive: Gets a #GDrive the volume is located on. Returns %NULL if the #GVolume is not associated with a #GDrive. - * @get_mount: Gets a #GMount representing the mounted volume. Returns %NULL if the #GVolume is not mounted. - * @can_mount: Returns %TRUE if the #GVolume can be mounted. - * @can_eject: Checks if a #GVolume can be ejected. - * @mount_fn: Mounts a given #GVolume. - * #GVolume implementations must emit the #GMountOperation::aborted - * signal before completing a mount operation that is aborted while - * awaiting input from the user through a #GMountOperation instance. - * @mount_finish: Finishes a mount operation. - * @eject: Ejects a given #GVolume. - * @eject_finish: Finishes an eject operation. - * @get_identifier: Returns the identifier of the given kind, or %NULL if - * the #GVolume doesn't have one. - * @enumerate_identifiers: Returns an array strings listing the kinds - * of identifiers which the #GVolume has. - * @should_automount: Returns %TRUE if the #GVolume should be automatically mounted. - * @get_activation_root: Returns the activation root for the #GVolume if it is known in advance or %NULL if - * it is not known. - * @eject_with_operation: Starts ejecting a #GVolume using a #GMountOperation. Since 2.22. - * @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @get_sort_key: Gets a key used for sorting #GVolume instance or %NULL if no such key exists. Since 2.32. - * @get_symbolic_icon: Gets a symbolic #GIcon for the #GVolume. Since 2.34. - * - * Interface for implementing operations for mountable volumes. - **/ -typedef struct _GVolumeIface GVolumeIface; - -struct _GVolumeIface -{ - GTypeInterface g_iface; - - /* signals */ - - void (* changed) (GVolume *volume); - void (* removed) (GVolume *volume); - - /* Virtual Table */ - - char * (* get_name) (GVolume *volume); - GIcon * (* get_icon) (GVolume *volume); - char * (* get_uuid) (GVolume *volume); - GDrive * (* get_drive) (GVolume *volume); - GMount * (* get_mount) (GVolume *volume); - gboolean (* can_mount) (GVolume *volume); - gboolean (* can_eject) (GVolume *volume); - void (* mount_fn) (GVolume *volume, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* mount_finish) (GVolume *volume, - GAsyncResult *result, - GError **error); - void (* eject) (GVolume *volume, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_finish) (GVolume *volume, - GAsyncResult *result, - GError **error); - - char * (* get_identifier) (GVolume *volume, - const char *kind); - char ** (* enumerate_identifiers) (GVolume *volume); - - gboolean (* should_automount) (GVolume *volume); - - GFile * (* get_activation_root) (GVolume *volume); - - void (* eject_with_operation) (GVolume *volume, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_with_operation_finish) (GVolume *volume, - GAsyncResult *result, - GError **error); - - const gchar * (* get_sort_key) (GVolume *volume); - GIcon * (* get_symbolic_icon) (GVolume *volume); -}; - -GType g_volume_get_type (void) G_GNUC_CONST; - -char * g_volume_get_name (GVolume *volume); -GIcon * g_volume_get_icon (GVolume *volume); -GIcon * g_volume_get_symbolic_icon (GVolume *volume); -char * g_volume_get_uuid (GVolume *volume); -GDrive * g_volume_get_drive (GVolume *volume); -GMount * g_volume_get_mount (GVolume *volume); -gboolean g_volume_can_mount (GVolume *volume); -gboolean g_volume_can_eject (GVolume *volume); -gboolean g_volume_should_automount (GVolume *volume); -void g_volume_mount (GVolume *volume, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_volume_mount_finish (GVolume *volume, - GAsyncResult *result, - GError **error); -GLIB_DEPRECATED_FOR(g_volume_eject_with_operation) -void g_volume_eject (GVolume *volume, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_volume_eject_with_operation_finish) -gboolean g_volume_eject_finish (GVolume *volume, - GAsyncResult *result, - GError **error); -char * g_volume_get_identifier (GVolume *volume, - const char *kind); -char ** g_volume_enumerate_identifiers (GVolume *volume); - -GFile * g_volume_get_activation_root (GVolume *volume); - -void g_volume_eject_with_operation (GVolume *volume, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_volume_eject_with_operation_finish (GVolume *volume, - GAsyncResult *result, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -const gchar *g_volume_get_sort_key (GVolume *volume); - -G_END_DECLS - -#endif /* __G_VOLUME_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gvolumemonitor.h b/GstreamerHelper/x64/include/glib-2.0/gio/gvolumemonitor.h deleted file mode 100644 index 2bff07ed..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gvolumemonitor.h +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VOLUME_MONITOR_H__ -#define __G_VOLUME_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_VOLUME_MONITOR (g_volume_monitor_get_type ()) -#define G_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VOLUME_MONITOR, GVolumeMonitor)) -#define G_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VOLUME_MONITOR, GVolumeMonitorClass)) -#define G_VOLUME_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VOLUME_MONITOR, GVolumeMonitorClass)) -#define G_IS_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VOLUME_MONITOR)) -#define G_IS_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VOLUME_MONITOR)) - -/** - * G_VOLUME_MONITOR_EXTENSION_POINT_NAME: - * - * Extension point for volume monitor functionality. - * See Extending GIO. - */ -#define G_VOLUME_MONITOR_EXTENSION_POINT_NAME "gio-volume-monitor" - -/** - * GVolumeMonitor: - * - * A Volume Monitor that watches for volume events. - **/ -typedef struct _GVolumeMonitorClass GVolumeMonitorClass; - -struct _GVolumeMonitor -{ - GObject parent_instance; - - /*< private >*/ - gpointer priv; -}; - -struct _GVolumeMonitorClass -{ - GObjectClass parent_class; - - /*< public >*/ - /* signals */ - void (* volume_added) (GVolumeMonitor *volume_monitor, - GVolume *volume); - void (* volume_removed) (GVolumeMonitor *volume_monitor, - GVolume *volume); - void (* volume_changed) (GVolumeMonitor *volume_monitor, - GVolume *volume); - - void (* mount_added) (GVolumeMonitor *volume_monitor, - GMount *mount); - void (* mount_removed) (GVolumeMonitor *volume_monitor, - GMount *mount); - void (* mount_pre_unmount) (GVolumeMonitor *volume_monitor, - GMount *mount); - void (* mount_changed) (GVolumeMonitor *volume_monitor, - GMount *mount); - - void (* drive_connected) (GVolumeMonitor *volume_monitor, - GDrive *drive); - void (* drive_disconnected) (GVolumeMonitor *volume_monitor, - GDrive *drive); - void (* drive_changed) (GVolumeMonitor *volume_monitor, - GDrive *drive); - - /* Vtable */ - - gboolean (* is_supported) (void); - - GList * (* get_connected_drives) (GVolumeMonitor *volume_monitor); - GList * (* get_volumes) (GVolumeMonitor *volume_monitor); - GList * (* get_mounts) (GVolumeMonitor *volume_monitor); - - GVolume * (* get_volume_for_uuid) (GVolumeMonitor *volume_monitor, - const char *uuid); - - GMount * (* get_mount_for_uuid) (GVolumeMonitor *volume_monitor, - const char *uuid); - - - /* These arguments are unfortunately backwards by mistake (bug #520169). Deprecated in 2.20. */ - GVolume * (* adopt_orphan_mount) (GMount *mount, - GVolumeMonitor *volume_monitor); - - /* signal added in 2.17 */ - void (* drive_eject_button) (GVolumeMonitor *volume_monitor, - GDrive *drive); - - /* signal added in 2.21 */ - void (* drive_stop_button) (GVolumeMonitor *volume_monitor, - GDrive *drive); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -GType g_volume_monitor_get_type (void) G_GNUC_CONST; - -GVolumeMonitor *g_volume_monitor_get (void); -GList * g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor); -GList * g_volume_monitor_get_volumes (GVolumeMonitor *volume_monitor); -GList * g_volume_monitor_get_mounts (GVolumeMonitor *volume_monitor); -GVolume * g_volume_monitor_get_volume_for_uuid (GVolumeMonitor *volume_monitor, - const char *uuid); -GMount * g_volume_monitor_get_mount_for_uuid (GVolumeMonitor *volume_monitor, - const char *uuid); - -GLIB_DEPRECATED -GVolume * g_volume_monitor_adopt_orphan_mount (GMount *mount); - -G_END_DECLS - -#endif /* __G_VOLUME_MONITOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gzlibcompressor.h b/GstreamerHelper/x64/include/glib-2.0/gio/gzlibcompressor.h deleted file mode 100644 index 58247815..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gzlibcompressor.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ZLIB_COMPRESSOR_H__ -#define __G_ZLIB_COMPRESSOR_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_ZLIB_COMPRESSOR (g_zlib_compressor_get_type ()) -#define G_ZLIB_COMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_ZLIB_COMPRESSOR, GZlibCompressor)) -#define G_ZLIB_COMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_ZLIB_COMPRESSOR, GZlibCompressorClass)) -#define G_IS_ZLIB_COMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_ZLIB_COMPRESSOR)) -#define G_IS_ZLIB_COMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_ZLIB_COMPRESSOR)) -#define G_ZLIB_COMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_ZLIB_COMPRESSOR, GZlibCompressorClass)) - -typedef struct _GZlibCompressorClass GZlibCompressorClass; - -struct _GZlibCompressorClass -{ - GObjectClass parent_class; -}; - -GType g_zlib_compressor_get_type (void) G_GNUC_CONST; - -GZlibCompressor *g_zlib_compressor_new (GZlibCompressorFormat format, - int level); - -GFileInfo *g_zlib_compressor_get_file_info (GZlibCompressor *compressor); -void g_zlib_compressor_set_file_info (GZlibCompressor *compressor, - GFileInfo *file_info); - -G_END_DECLS - -#endif /* __G_ZLIB_COMPRESSOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gio/gzlibdecompressor.h b/GstreamerHelper/x64/include/glib-2.0/gio/gzlibdecompressor.h deleted file mode 100644 index f7bb57dd..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gio/gzlibdecompressor.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ZLIB_DECOMPRESSOR_H__ -#define __G_ZLIB_DECOMPRESSOR_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_ZLIB_DECOMPRESSOR (g_zlib_decompressor_get_type ()) -#define G_ZLIB_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_ZLIB_DECOMPRESSOR, GZlibDecompressor)) -#define G_ZLIB_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_ZLIB_DECOMPRESSOR, GZlibDecompressorClass)) -#define G_IS_ZLIB_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_ZLIB_DECOMPRESSOR)) -#define G_IS_ZLIB_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_ZLIB_DECOMPRESSOR)) -#define G_ZLIB_DECOMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_ZLIB_DECOMPRESSOR, GZlibDecompressorClass)) - -typedef struct _GZlibDecompressorClass GZlibDecompressorClass; - -struct _GZlibDecompressorClass -{ - GObjectClass parent_class; -}; - -GType g_zlib_decompressor_get_type (void) G_GNUC_CONST; - -GZlibDecompressor *g_zlib_decompressor_new (GZlibCompressorFormat format); - -GFileInfo *g_zlib_decompressor_get_file_info (GZlibDecompressor *decompressor); - -G_END_DECLS - -#endif /* __G_ZLIB_DECOMPRESSOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib-object.h b/GstreamerHelper/x64/include/glib-2.0/glib-object.h deleted file mode 100644 index 336ba931..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib-object.h +++ /dev/null @@ -1,42 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998, 1999, 2000 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __GLIB_GOBJECT_H__ -#define __GLIB_GOBJECT_H__ - -#define __GLIB_GOBJECT_H_INSIDE__ - -/* topmost include file for GObject header files */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef __GLIB_GOBJECT_H_INSIDE__ - -#endif /* __GLIB_GOBJECT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib-unix.h b/GstreamerHelper/x64/include/glib-2.0/glib-unix.h deleted file mode 100644 index c04f66f3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib-unix.h +++ /dev/null @@ -1,90 +0,0 @@ -/* glib-unix.h - Unix specific integration - * Copyright (C) 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_UNIX_H__ -#define __G_UNIX_H__ - -/* We need to include the UNIX headers needed to use the APIs below, - * but we also take this opportunity to include a wide selection of - * other UNIX headers. If one of the headers below is broken on some - * system, work around it here (or better, fix the system or tell - * people to use a better one). - */ -#include -#include -#include -#include -#include - -#include - -#ifndef G_OS_UNIX -#error "This header may only be used on UNIX" -#endif - -G_BEGIN_DECLS - -/** - * G_UNIX_ERROR: - * - * Error domain for API in the "g_unix_" namespace. Note that there is - * no exported enumeration mapping %errno. Instead, all functions - * ensure that %errno is relevant. The code for all #G_UNIX_ERROR is - * always 0, and the error message is always - * generated via g_strerror(). - * - * It is expected that most code will not look at %errno from these - * APIs. Important cases where one would want to differentiate between - * errors are already covered by existing cross-platform GLib API, - * such as e.g. #GFile wrapping ENOENT. However, it is - * provided for completeness, at least. - */ -#define G_UNIX_ERROR (g_unix_error_quark()) - -GLIB_AVAILABLE_IN_2_30 -GQuark g_unix_error_quark (void); - -GLIB_AVAILABLE_IN_2_30 -gboolean g_unix_open_pipe (gint *fds, - gint flags, - GError **error); - -GLIB_AVAILABLE_IN_2_30 -gboolean g_unix_set_fd_nonblocking (gint fd, - gboolean nonblock, - GError **error); - -GLIB_AVAILABLE_IN_2_30 -GSource *g_unix_signal_source_new (gint signum); - -GLIB_AVAILABLE_IN_2_30 -guint g_unix_signal_add_full (gint priority, - gint signum, - GSourceFunc handler, - gpointer user_data, - GDestroyNotify notify); - -GLIB_AVAILABLE_IN_2_30 -guint g_unix_signal_add (gint signum, - GSourceFunc handler, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_UNIX_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib.h b/GstreamerHelper/x64/include/glib-2.0/glib.h deleted file mode 100644 index 77abf232..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __G_LIB_H__ -#define __G_LIB_H__ - -#define __GLIB_H_INSIDE__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef G_PLATFORM_WIN32 -#include -#endif - -#include -#include -#include -#include -#include -#include - -#undef __GLIB_H_INSIDE__ - -#endif /* __G_LIB_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gallocator.h b/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gallocator.h deleted file mode 100644 index e4990e90..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gallocator.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ALLOCATOR_H__ -#define __G_ALLOCATOR_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GAllocator GAllocator; -typedef struct _GMemChunk GMemChunk; - -#define G_ALLOC_ONLY 1 -#define G_ALLOC_AND_FREE 2 -#define G_ALLOCATOR_LIST 1 -#define G_ALLOCATOR_SLIST 2 -#define G_ALLOCATOR_NODE 3 - -#define g_chunk_new(type, chunk) ((type *) g_mem_chunk_alloc (chunk)) -#define g_chunk_new0(type, chunk) ((type *) g_mem_chunk_alloc0 (chunk)) -#define g_chunk_free(mem, mem_chunk) (g_mem_chunk_free (mem_chunk, mem)) -#define g_mem_chunk_create(type, x, y) (g_mem_chunk_new (NULL, sizeof (type), 0, 0)) - - -GLIB_DEPRECATED -GMemChunk * g_mem_chunk_new (const gchar *name, - gint atom_size, - gsize area_size, - gint type); -GLIB_DEPRECATED -void g_mem_chunk_destroy (GMemChunk *mem_chunk); -GLIB_DEPRECATED -gpointer g_mem_chunk_alloc (GMemChunk *mem_chunk); -GLIB_DEPRECATED -gpointer g_mem_chunk_alloc0 (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_free (GMemChunk *mem_chunk, - gpointer mem); -GLIB_DEPRECATED -void g_mem_chunk_clean (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_reset (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_print (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_info (void); -GLIB_DEPRECATED -void g_blow_chunks (void); - - -GLIB_DEPRECATED -GAllocator * g_allocator_new (const gchar *name, - guint n_preallocs); -GLIB_DEPRECATED -void g_allocator_free (GAllocator *allocator); -GLIB_DEPRECATED -void g_list_push_allocator (GAllocator *allocator); -GLIB_DEPRECATED -void g_list_pop_allocator (void); -GLIB_DEPRECATED -void g_slist_push_allocator (GAllocator *allocator); -GLIB_DEPRECATED -void g_slist_pop_allocator (void); -GLIB_DEPRECATED -void g_node_push_allocator (GAllocator *allocator); -GLIB_DEPRECATED -void g_node_pop_allocator (void); - -G_END_DECLS - -#endif /* __G_ALLOCATOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcache.h b/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcache.h deleted file mode 100644 index 2e5119b2..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcache.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CACHE_H__ -#define __G_CACHE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GCache GCache; - -typedef gpointer (*GCacheNewFunc) (gpointer key); -typedef gpointer (*GCacheDupFunc) (gpointer value); -typedef void (*GCacheDestroyFunc) (gpointer value); - -/* Caches - */ -GLIB_DEPRECATED -GCache* g_cache_new (GCacheNewFunc value_new_func, - GCacheDestroyFunc value_destroy_func, - GCacheDupFunc key_dup_func, - GCacheDestroyFunc key_destroy_func, - GHashFunc hash_key_func, - GHashFunc hash_value_func, - GEqualFunc key_equal_func); -GLIB_DEPRECATED -void g_cache_destroy (GCache *cache); -GLIB_DEPRECATED -gpointer g_cache_insert (GCache *cache, - gpointer key); -GLIB_DEPRECATED -void g_cache_remove (GCache *cache, - gconstpointer value); -GLIB_DEPRECATED -void g_cache_key_foreach (GCache *cache, - GHFunc func, - gpointer user_data); -GLIB_DEPRECATED -void g_cache_value_foreach (GCache *cache, - GHFunc func, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_CACHE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcompletion.h b/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcompletion.h deleted file mode 100644 index 88a0479d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gcompletion.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_COMPLETION_H__ -#define __G_COMPLETION_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GCompletion GCompletion; - -typedef gchar* (*GCompletionFunc) (gpointer); - -/* GCompletion - */ - -typedef gint (*GCompletionStrncmpFunc) (const gchar *s1, - const gchar *s2, - gsize n); - -struct _GCompletion -{ - GList* items; - GCompletionFunc func; - - gchar* prefix; - GList* cache; - GCompletionStrncmpFunc strncmp_func; -}; - -GLIB_DEPRECATED_IN_2_26 -GCompletion* g_completion_new (GCompletionFunc func); -GLIB_DEPRECATED_IN_2_26 -void g_completion_add_items (GCompletion* cmp, - GList* items); -GLIB_DEPRECATED_IN_2_26 -void g_completion_remove_items (GCompletion* cmp, - GList* items); -GLIB_DEPRECATED_IN_2_26 -void g_completion_clear_items (GCompletion* cmp); -GLIB_DEPRECATED_IN_2_26 -GList* g_completion_complete (GCompletion* cmp, - const gchar* prefix, - gchar** new_prefix); -GLIB_DEPRECATED_IN_2_26 -GList* g_completion_complete_utf8 (GCompletion *cmp, - const gchar* prefix, - gchar** new_prefix); -GLIB_DEPRECATED_IN_2_26 -void g_completion_set_compare (GCompletion *cmp, - GCompletionStrncmpFunc strncmp_func); -GLIB_DEPRECATED_IN_2_26 -void g_completion_free (GCompletion* cmp); - -G_END_DECLS - -#endif /* __G_COMPLETION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gmain.h b/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gmain.h deleted file mode 100644 index d1ddf197..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gmain.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DEPRECATED_MAIN_H__ -#define __G_DEPRECATED_MAIN_H__ - -#include - -G_BEGIN_DECLS - -/* ============== Compat main loop stuff ================== */ - -/** - * g_main_new: - * @is_running: set to %TRUE to indicate that the loop is running. This - * is not very important since calling g_main_run() will set this - * to %TRUE anyway. - * - * Creates a new #GMainLoop for th default main context. - * - * Returns: a new #GMainLoop - * - * Deprecated: 2.2: Use g_main_loop_new() instead - */ -#define g_main_new(is_running) g_main_loop_new (NULL, is_running) - -/** - * g_main_run: - * @loop: a #GMainLoop - * - * Runs a main loop until it stops running. - * - * Deprecated: 2.2: Use g_main_loop_run() instead - */ -#define g_main_run(loop) g_main_loop_run(loop) - -/** - * g_main_quit: - * @loop: a #GMainLoop - * - * Stops the #GMainLoop. - * If g_main_run() was called to run the #GMainLoop, it will now return. - * - * Deprecated: 2.2: Use g_main_loop_quit() instead - */ -#define g_main_quit(loop) g_main_loop_quit(loop) - -/** - * g_main_destroy: - * @loop: a #GMainLoop - * - * Frees the memory allocated for the #GMainLoop. - * - * Deprecated: 2.2: Use g_main_loop_unref() instead - */ -#define g_main_destroy(loop) g_main_loop_unref(loop) - -/** - * g_main_is_running: - * @loop: a #GMainLoop - * - * Checks if the main loop is running. - * - * Returns: %TRUE if the main loop is running - * - * Deprecated: 2.2: Use g_main_loop_is_running() instead - */ -#define g_main_is_running(loop) g_main_loop_is_running(loop) - -/** - * g_main_iteration: - * @may_block: set to %TRUE if it should block (i.e. wait) until an event - * source becomes ready. It will return after an event source has been - * processed. If set to %FALSE it will return immediately if no event - * source is ready to be processed. - * - * Runs a single iteration for the default #GMainContext. - * - * Returns: %TRUE if more events are pending. - * - * Deprecated: 2.2: Use g_main_context_iteration() instead. - */ -#define g_main_iteration(may_block) g_main_context_iteration (NULL, may_block) - -/** - * g_main_pending: - * - * Checks if any events are pending for the default #GMainContext - * (i.e. ready to be processed). - * - * Returns: %TRUE if any events are pending. - * - * Deprected: 2.2: Use g_main_context_pending() instead. - */ -#define g_main_pending() g_main_context_pending (NULL) - -/** - * g_main_set_poll_func: - * @func: the function to call to poll all file descriptors - * - * Sets the function to use for the handle polling of file descriptors - * for the default main context. - * - * Deprecated: 2.2: Use g_main_context_set_poll_func() again - */ -#define g_main_set_poll_func(func) g_main_context_set_poll_func (NULL, func) - - -G_END_DECLS - -#endif /* __G_DEPRECATED_MAIN_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/grel.h b/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/grel.h deleted file mode 100644 index c9e09962..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/grel.h +++ /dev/null @@ -1,107 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_REL_H__ -#define __G_REL_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GRelation GRelation; -typedef struct _GTuples GTuples; - -struct _GTuples -{ - guint len; -}; - -/* GRelation - * - * Indexed Relations. Imagine a really simple table in a - * database. Relations are not ordered. This data type is meant for - * maintaining a N-way mapping. - * - * g_relation_new() creates a relation with FIELDS fields - * - * g_relation_destroy() frees all resources - * g_tuples_destroy() frees the result of g_relation_select() - * - * g_relation_index() indexes relation FIELD with the provided - * equality and hash functions. this must be done before any - * calls to insert are made. - * - * g_relation_insert() inserts a new tuple. you are expected to - * provide the right number of fields. - * - * g_relation_delete() deletes all relations with KEY in FIELD - * g_relation_select() returns ... - * g_relation_count() counts ... - */ - -GLIB_DEPRECATED_IN_2_26 -GRelation* g_relation_new (gint fields); -GLIB_DEPRECATED_IN_2_26 -void g_relation_destroy (GRelation *relation); -GLIB_DEPRECATED_IN_2_26 -void g_relation_index (GRelation *relation, - gint field, - GHashFunc hash_func, - GEqualFunc key_equal_func); -GLIB_DEPRECATED_IN_2_26 -void g_relation_insert (GRelation *relation, - ...); -GLIB_DEPRECATED_IN_2_26 -gint g_relation_delete (GRelation *relation, - gconstpointer key, - gint field); -GLIB_DEPRECATED_IN_2_26 -GTuples* g_relation_select (GRelation *relation, - gconstpointer key, - gint field); -GLIB_DEPRECATED_IN_2_26 -gint g_relation_count (GRelation *relation, - gconstpointer key, - gint field); -GLIB_DEPRECATED_IN_2_26 -gboolean g_relation_exists (GRelation *relation, - ...); -GLIB_DEPRECATED_IN_2_26 -void g_relation_print (GRelation *relation); -GLIB_DEPRECATED_IN_2_26 -void g_tuples_destroy (GTuples *tuples); -GLIB_DEPRECATED_IN_2_26 -gpointer g_tuples_index (GTuples *tuples, - gint index_, - gint field); - -G_END_DECLS - -#endif /* __G_REL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gthread.h b/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gthread.h deleted file mode 100644 index 1866540e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/deprecated/gthread.h +++ /dev/null @@ -1,285 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DEPRECATED_THREAD_H__ -#define __G_DEPRECATED_THREAD_H__ - -#include - -G_BEGIN_DECLS - -typedef enum -{ - G_THREAD_PRIORITY_LOW, - G_THREAD_PRIORITY_NORMAL, - G_THREAD_PRIORITY_HIGH, - G_THREAD_PRIORITY_URGENT -} GThreadPriority; - -struct _GThread -{ - /*< private >*/ - GThreadFunc func; - gpointer data; - gboolean joinable; - GThreadPriority priority; -}; - -typedef struct _GThreadFunctions GThreadFunctions; -struct _GThreadFunctions -{ - GMutex* (*mutex_new) (void); - void (*mutex_lock) (GMutex *mutex); - gboolean (*mutex_trylock) (GMutex *mutex); - void (*mutex_unlock) (GMutex *mutex); - void (*mutex_free) (GMutex *mutex); - GCond* (*cond_new) (void); - void (*cond_signal) (GCond *cond); - void (*cond_broadcast) (GCond *cond); - void (*cond_wait) (GCond *cond, - GMutex *mutex); - gboolean (*cond_timed_wait) (GCond *cond, - GMutex *mutex, - GTimeVal *end_time); - void (*cond_free) (GCond *cond); - GPrivate* (*private_new) (GDestroyNotify destructor); - gpointer (*private_get) (GPrivate *private_key); - void (*private_set) (GPrivate *private_key, - gpointer data); - void (*thread_create) (GThreadFunc func, - gpointer data, - gulong stack_size, - gboolean joinable, - gboolean bound, - GThreadPriority priority, - gpointer thread, - GError **error); - void (*thread_yield) (void); - void (*thread_join) (gpointer thread); - void (*thread_exit) (void); - void (*thread_set_priority)(gpointer thread, - GThreadPriority priority); - void (*thread_self) (gpointer thread); - gboolean (*thread_equal) (gpointer thread1, - gpointer thread2); -}; - -GLIB_VAR GThreadFunctions g_thread_functions_for_glib_use; -GLIB_VAR gboolean g_thread_use_default_impl; - -GLIB_VAR guint64 (*g_thread_gettime) (void); - -GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new) -GThread *g_thread_create (GThreadFunc func, - gpointer data, - gboolean joinable, - GError **error); - -GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new) -GThread *g_thread_create_full (GThreadFunc func, - gpointer data, - gulong stack_size, - gboolean joinable, - gboolean bound, - GThreadPriority priority, - GError **error); - -GLIB_DEPRECATED_IN_2_32 -void g_thread_set_priority (GThread *thread, - GThreadPriority priority); - -GLIB_DEPRECATED_IN_2_32 -void g_thread_foreach (GFunc thread_func, - gpointer user_data); - -#ifndef G_OS_WIN32 -#include -#endif - -#define g_static_mutex_get_mutex g_static_mutex_get_mutex_impl -#define G_STATIC_MUTEX_INIT { NULL } -typedef struct -{ - GMutex *mutex; -#ifndef G_OS_WIN32 - /* only for ABI compatibility reasons */ - pthread_mutex_t unused; -#endif -} GStaticMutex; - -#define g_static_mutex_lock(mutex) \ - g_mutex_lock (g_static_mutex_get_mutex (mutex)) -#define g_static_mutex_trylock(mutex) \ - g_mutex_trylock (g_static_mutex_get_mutex (mutex)) -#define g_static_mutex_unlock(mutex) \ - g_mutex_unlock (g_static_mutex_get_mutex (mutex)) - -GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_init) -void g_static_mutex_init (GStaticMutex *mutex); -GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_free) -void g_static_mutex_free (GStaticMutex *mutex); -GMutex *g_static_mutex_get_mutex_impl (GStaticMutex *mutex); - -typedef struct _GStaticRecMutex GStaticRecMutex; -struct _GStaticRecMutex -{ - /*< private >*/ - GStaticMutex mutex; - guint depth; - - /* ABI compat only */ - union { -#ifdef G_OS_WIN32 - void *owner; -#else - pthread_t owner; -#endif - gdouble dummy; - } unused; -}; - -#define G_STATIC_REC_MUTEX_INIT { G_STATIC_MUTEX_INIT } -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_init) -void g_static_rec_mutex_init (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_lock) -void g_static_rec_mutex_lock (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_try_lock) -gboolean g_static_rec_mutex_trylock (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_unlock) -void g_static_rec_mutex_unlock (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32 -void g_static_rec_mutex_lock_full (GStaticRecMutex *mutex, - guint depth); - -GLIB_DEPRECATED_IN_2_32 -guint g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_free) -void g_static_rec_mutex_free (GStaticRecMutex *mutex); - -typedef struct _GStaticRWLock GStaticRWLock; -struct _GStaticRWLock -{ - /*< private >*/ - GStaticMutex mutex; - GCond *read_cond; - GCond *write_cond; - guint read_counter; - gboolean have_writer; - guint want_to_read; - guint want_to_write; -}; - -#define G_STATIC_RW_LOCK_INIT { G_STATIC_MUTEX_INIT, NULL, NULL, 0, FALSE, 0, 0 } - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_init) -void g_static_rw_lock_init (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_lock) -void g_static_rw_lock_reader_lock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_trylock) -gboolean g_static_rw_lock_reader_trylock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_unlock) -void g_static_rw_lock_reader_unlock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_lock) -void g_static_rw_lock_writer_lock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_trylock) -gboolean g_static_rw_lock_writer_trylock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_unlock) -void g_static_rw_lock_writer_unlock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_free) -void g_static_rw_lock_free (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32 -GPrivate * g_private_new (GDestroyNotify notify); - -typedef struct _GStaticPrivate GStaticPrivate; -struct _GStaticPrivate -{ - /*< private >*/ - guint index; -}; - -#define G_STATIC_PRIVATE_INIT { 0 } -GLIB_DEPRECATED_IN_2_32 -void g_static_private_init (GStaticPrivate *private_key); - -GLIB_DEPRECATED_IN_2_32_FOR(g_private_get) -gpointer g_static_private_get (GStaticPrivate *private_key); - -GLIB_DEPRECATED_IN_2_32_FOR(g_private_set) -void g_static_private_set (GStaticPrivate *private_key, - gpointer data, - GDestroyNotify notify); - -GLIB_DEPRECATED_IN_2_32 -void g_static_private_free (GStaticPrivate *private_key); - -GLIB_DEPRECATED_IN_2_32 -gboolean g_once_init_enter_impl (volatile gsize *location); - -GLIB_DEPRECATED_IN_2_32 -void g_thread_init (gpointer vtable); -GLIB_DEPRECATED_IN_2_32 -void g_thread_init_with_errorcheck_mutexes (gpointer vtable); - -GLIB_DEPRECATED_IN_2_32 -gboolean g_thread_get_initialized (void); - -GLIB_VAR gboolean g_threads_got_initialized; - -#define g_thread_supported() (1) - -GLIB_DEPRECATED_IN_2_32 -GMutex * g_mutex_new (void); -GLIB_DEPRECATED_IN_2_32 -void g_mutex_free (GMutex *mutex); -GLIB_DEPRECATED_IN_2_32 -GCond * g_cond_new (void); -GLIB_DEPRECATED_IN_2_32 -void g_cond_free (GCond *cond); -GLIB_DEPRECATED_IN_2_32 -gboolean g_cond_timed_wait (GCond *cond, - GMutex *mutex, - GTimeVal *timeval); - -G_END_DECLS - -#endif /* __G_DEPRECATED_THREAD_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/galloca.h b/GstreamerHelper/x64/include/glib-2.0/glib/galloca.h deleted file mode 100644 index a18a75cd..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/galloca.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ALLOCA_H__ -#define __G_ALLOCA_H__ - -#include - -#if defined(__BIONIC__) && defined (GLIB_HAVE_ALLOCA_H) -# include -#elif defined(__GNUC__) -/* GCC does the right thing */ -# undef alloca -# define alloca(size) __builtin_alloca (size) -#elif defined (GLIB_HAVE_ALLOCA_H) -/* a native and working alloca.h is there */ -# include -#else /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */ -# if defined(_MSC_VER) || defined(__DMC__) -# include -# define alloca _alloca -# else /* !_MSC_VER && !__DMC__ */ -# ifdef _AIX -# pragma alloca -# else /* !_AIX */ -# ifndef alloca /* predefined by HP cc +Olibcalls */ -G_BEGIN_DECLS -char *alloca (); -G_END_DECLS -# endif /* !alloca */ -# endif /* !_AIX */ -# endif /* !_MSC_VER && !__DMC__ */ -#endif /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */ - -/** - * g_alloca: - * @size: number of bytes to allocate. - * - * Allocates @size bytes on the stack; these bytes will be freed when the current - * stack frame is cleaned up. This macro essentially just wraps the alloca() - * function present on most UNIX variants. - * Thus it provides the same advantages and pitfalls as alloca(): - * - * - * + alloca() is very fast, as on most systems it's implemented by just adjusting - * the stack pointer register. - * - * - * + It doesn't cause any memory fragmentation, within its scope, separate alloca() - * blocks just build up and are released together at function end. - * - * - * - Allocation sizes have to fit into the current stack frame. For instance in a - * threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes, - * so be sparse with alloca() uses. - * - * - * - Allocation failure due to insufficient stack space is not indicated with a %NULL - * return like e.g. with malloc(). Instead, most systems probably handle it the same - * way as out of stack space situations from infinite function recursion, i.e. - * with a segmentation fault. - * - * - * - Special care has to be taken when mixing alloca() with GNU C variable sized arrays. - * Stack space allocated with alloca() in the same scope as a variable sized array - * will be freed together with the variable sized array upon exit of that scope, and - * not upon exit of the enclosing function scope. - * - * - * - * Returns: space for @size bytes, allocated on the stack - */ -#define g_alloca(size) alloca (size) -/** - * g_newa: - * @struct_type: Type of memory chunks to be allocated - * @n_structs: Number of chunks to be allocated - * - * Wraps g_alloca() in a more typesafe manner. - * - * Returns: Pointer to stack space for @n_structs chunks of type @struct_type - */ -#define g_newa(struct_type, n_structs) ((struct_type*) g_alloca (sizeof (struct_type) * (gsize) (n_structs))) - -#endif /* __G_ALLOCA_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/garray.h b/GstreamerHelper/x64/include/glib-2.0/glib/garray.h deleted file mode 100644 index eb37b92e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/garray.h +++ /dev/null @@ -1,187 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ARRAY_H__ -#define __G_ARRAY_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GBytes GBytes; -typedef struct _GArray GArray; -typedef struct _GByteArray GByteArray; -typedef struct _GPtrArray GPtrArray; - -struct _GArray -{ - gchar *data; - guint len; -}; - -struct _GByteArray -{ - guint8 *data; - guint len; -}; - -struct _GPtrArray -{ - gpointer *pdata; - guint len; -}; - -/* Resizable arrays. remove fills any cleared spot and shortens the - * array, while preserving the order. remove_fast will distort the - * order by moving the last element to the position of the removed. - */ - -#define g_array_append_val(a,v) g_array_append_vals (a, &(v), 1) -#define g_array_prepend_val(a,v) g_array_prepend_vals (a, &(v), 1) -#define g_array_insert_val(a,i,v) g_array_insert_vals (a, i, &(v), 1) -#define g_array_index(a,t,i) (((t*) (void *) (a)->data) [(i)]) - -GArray* g_array_new (gboolean zero_terminated, - gboolean clear_, - guint element_size); -GArray* g_array_sized_new (gboolean zero_terminated, - gboolean clear_, - guint element_size, - guint reserved_size); -gchar* g_array_free (GArray *array, - gboolean free_segment); -GArray *g_array_ref (GArray *array); -void g_array_unref (GArray *array); -guint g_array_get_element_size (GArray *array); -GArray* g_array_append_vals (GArray *array, - gconstpointer data, - guint len); -GArray* g_array_prepend_vals (GArray *array, - gconstpointer data, - guint len); -GArray* g_array_insert_vals (GArray *array, - guint index_, - gconstpointer data, - guint len); -GArray* g_array_set_size (GArray *array, - guint length); -GArray* g_array_remove_index (GArray *array, - guint index_); -GArray* g_array_remove_index_fast (GArray *array, - guint index_); -GArray* g_array_remove_range (GArray *array, - guint index_, - guint length); -void g_array_sort (GArray *array, - GCompareFunc compare_func); -void g_array_sort_with_data (GArray *array, - GCompareDataFunc compare_func, - gpointer user_data); -void g_array_set_clear_func (GArray *array, - GDestroyNotify clear_func); - -/* Resizable pointer array. This interface is much less complicated - * than the above. Add appends a pointer. Remove fills any cleared - * spot and shortens the array. remove_fast will again distort order. - */ -#define g_ptr_array_index(array,index_) ((array)->pdata)[index_] -GPtrArray* g_ptr_array_new (void); -GPtrArray* g_ptr_array_new_with_free_func (GDestroyNotify element_free_func); -GPtrArray* g_ptr_array_sized_new (guint reserved_size); -GPtrArray* g_ptr_array_new_full (guint reserved_size, - GDestroyNotify element_free_func); -gpointer* g_ptr_array_free (GPtrArray *array, - gboolean free_seg); -GPtrArray* g_ptr_array_ref (GPtrArray *array); -void g_ptr_array_unref (GPtrArray *array); -void g_ptr_array_set_free_func (GPtrArray *array, - GDestroyNotify element_free_func); -void g_ptr_array_set_size (GPtrArray *array, - gint length); -gpointer g_ptr_array_remove_index (GPtrArray *array, - guint index_); -gpointer g_ptr_array_remove_index_fast (GPtrArray *array, - guint index_); -gboolean g_ptr_array_remove (GPtrArray *array, - gpointer data); -gboolean g_ptr_array_remove_fast (GPtrArray *array, - gpointer data); -void g_ptr_array_remove_range (GPtrArray *array, - guint index_, - guint length); -void g_ptr_array_add (GPtrArray *array, - gpointer data); -void g_ptr_array_sort (GPtrArray *array, - GCompareFunc compare_func); -void g_ptr_array_sort_with_data (GPtrArray *array, - GCompareDataFunc compare_func, - gpointer user_data); -void g_ptr_array_foreach (GPtrArray *array, - GFunc func, - gpointer user_data); - - -/* Byte arrays, an array of guint8. Implemented as a GArray, - * but type-safe. - */ - -GByteArray* g_byte_array_new (void); -GByteArray* g_byte_array_new_take (guint8 *data, - gsize len); -GByteArray* g_byte_array_sized_new (guint reserved_size); -guint8* g_byte_array_free (GByteArray *array, - gboolean free_segment); -GBytes* g_byte_array_free_to_bytes (GByteArray *array); -GByteArray *g_byte_array_ref (GByteArray *array); -void g_byte_array_unref (GByteArray *array); -GByteArray* g_byte_array_append (GByteArray *array, - const guint8 *data, - guint len); -GByteArray* g_byte_array_prepend (GByteArray *array, - const guint8 *data, - guint len); -GByteArray* g_byte_array_set_size (GByteArray *array, - guint length); -GByteArray* g_byte_array_remove_index (GByteArray *array, - guint index_); -GByteArray* g_byte_array_remove_index_fast (GByteArray *array, - guint index_); -GByteArray* g_byte_array_remove_range (GByteArray *array, - guint index_, - guint length); -void g_byte_array_sort (GByteArray *array, - GCompareFunc compare_func); -void g_byte_array_sort_with_data (GByteArray *array, - GCompareDataFunc compare_func, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_ARRAY_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gasyncqueue.h b/GstreamerHelper/x64/include/glib-2.0/glib/gasyncqueue.h deleted file mode 100644 index f0d6d959..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gasyncqueue.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ASYNCQUEUE_H__ -#define __G_ASYNCQUEUE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GAsyncQueue GAsyncQueue; - -GAsyncQueue *g_async_queue_new (void); -GAsyncQueue *g_async_queue_new_full (GDestroyNotify item_free_func); -void g_async_queue_lock (GAsyncQueue *queue); -void g_async_queue_unlock (GAsyncQueue *queue); -GAsyncQueue *g_async_queue_ref (GAsyncQueue *queue); -void g_async_queue_unref (GAsyncQueue *queue); - -GLIB_DEPRECATED_FOR(g_async_queue_ref) -void g_async_queue_ref_unlocked (GAsyncQueue *queue); - -GLIB_DEPRECATED_FOR(g_async_queue_unref) -void g_async_queue_unref_and_unlock (GAsyncQueue *queue); - -void g_async_queue_push (GAsyncQueue *queue, - gpointer data); -void g_async_queue_push_unlocked (GAsyncQueue *queue, - gpointer data); -void g_async_queue_push_sorted (GAsyncQueue *queue, - gpointer data, - GCompareDataFunc func, - gpointer user_data); -void g_async_queue_push_sorted_unlocked (GAsyncQueue *queue, - gpointer data, - GCompareDataFunc func, - gpointer user_data); -gpointer g_async_queue_pop (GAsyncQueue *queue); -gpointer g_async_queue_pop_unlocked (GAsyncQueue *queue); -gpointer g_async_queue_try_pop (GAsyncQueue *queue); -gpointer g_async_queue_try_pop_unlocked (GAsyncQueue *queue); -gpointer g_async_queue_timeout_pop (GAsyncQueue *queue, - guint64 timeout); -gpointer g_async_queue_timeout_pop_unlocked (GAsyncQueue *queue, - guint64 timeout); -gint g_async_queue_length (GAsyncQueue *queue); -gint g_async_queue_length_unlocked (GAsyncQueue *queue); -void g_async_queue_sort (GAsyncQueue *queue, - GCompareDataFunc func, - gpointer user_data); -void g_async_queue_sort_unlocked (GAsyncQueue *queue, - GCompareDataFunc func, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop) -gpointer g_async_queue_timed_pop (GAsyncQueue *queue, - GTimeVal *end_time); -GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop_unlocked) -gpointer g_async_queue_timed_pop_unlocked (GAsyncQueue *queue, - GTimeVal *end_time); - -G_END_DECLS - -#endif /* __G_ASYNCQUEUE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gatomic.h b/GstreamerHelper/x64/include/glib-2.0/glib/gatomic.h deleted file mode 100644 index 8b52e0b3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gatomic.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright © 2011 Ryan Lortie - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ATOMIC_H__ -#define __G_ATOMIC_H__ - -#include - -G_BEGIN_DECLS - -gint g_atomic_int_get (volatile gint *atomic); -void g_atomic_int_set (volatile gint *atomic, - gint newval); -void g_atomic_int_inc (volatile gint *atomic); -gboolean g_atomic_int_dec_and_test (volatile gint *atomic); -gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic, - gint oldval, - gint newval); -gint g_atomic_int_add (volatile gint *atomic, - gint val); -GLIB_AVAILABLE_IN_2_30 -guint g_atomic_int_and (volatile guint *atomic, - guint val); -GLIB_AVAILABLE_IN_2_30 -guint g_atomic_int_or (volatile guint *atomic, - guint val); -guint g_atomic_int_xor (volatile guint *atomic, - guint val); - -gpointer g_atomic_pointer_get (volatile void *atomic); -void g_atomic_pointer_set (volatile void *atomic, - gpointer newval); -gboolean g_atomic_pointer_compare_and_exchange (volatile void *atomic, - gpointer oldval, - gpointer newval); -gssize g_atomic_pointer_add (volatile void *atomic, - gssize val); -GLIB_AVAILABLE_IN_2_30 -gsize g_atomic_pointer_and (volatile void *atomic, - gsize val); -GLIB_AVAILABLE_IN_2_30 -gsize g_atomic_pointer_or (volatile void *atomic, - gsize val); -gsize g_atomic_pointer_xor (volatile void *atomic, - gsize val); - -GLIB_DEPRECATED_IN_2_30_FOR(g_atomic_add) -gint g_atomic_int_exchange_and_add (volatile gint *atomic, - gint val); - -G_END_DECLS - -#if defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - -#define g_atomic_int_get(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ *(atomic) : 0); \ - __sync_synchronize (); \ - (gint) *(atomic); \ - })) -#define g_atomic_int_set(atomic, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (newval) : 0); \ - *(atomic) = (newval); \ - __sync_synchronize (); \ - })) -#define g_atomic_int_inc(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ *(atomic) : 0); \ - (void) __sync_fetch_and_add ((atomic), 1); \ - })) -#define g_atomic_int_dec_and_test(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ *(atomic) : 0); \ - __sync_fetch_and_sub ((atomic), 1) == 1; \ - })) -#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 0); \ - (gboolean) __sync_bool_compare_and_swap ((atomic), (oldval), (newval)); \ - })) -#define g_atomic_int_add(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (gint) __sync_fetch_and_add ((atomic), (val)); \ - })) -#define g_atomic_int_and(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (guint) __sync_fetch_and_and ((atomic), (val)); \ - })) -#define g_atomic_int_or(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (guint) __sync_fetch_and_or ((atomic), (val)); \ - })) -#define g_atomic_int_xor(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (guint) __sync_fetch_and_xor ((atomic), (val)); \ - })) - -#define g_atomic_pointer_get(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - __sync_synchronize (); \ - (gpointer) *(atomic); \ - })) -#define g_atomic_pointer_set(atomic, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - *(atomic) = (__typeof__ (*(atomic))) (gsize) (newval); \ - __sync_synchronize (); \ - })) -#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (gboolean) __sync_bool_compare_and_swap ((atomic), (oldval), (newval)); \ - })) -#define g_atomic_pointer_add(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gssize) __sync_fetch_and_add ((atomic), (val)); \ - })) -#define g_atomic_pointer_and(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gsize) __sync_fetch_and_and ((atomic), (val)); \ - })) -#define g_atomic_pointer_or(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gsize) __sync_fetch_and_or ((atomic), (val)); \ - })) -#define g_atomic_pointer_xor(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gsize) __sync_fetch_and_xor ((atomic), (val)); \ - })) - -#else /* defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) */ - -#define g_atomic_int_get(atomic) \ - (g_atomic_int_get ((gint *) (atomic))) -#define g_atomic_int_set(atomic, newval) \ - (g_atomic_int_set ((gint *) (atomic), (gint) (newval))) -#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \ - (g_atomic_int_compare_and_exchange ((gint *) (atomic), (oldval), (newval))) -#define g_atomic_int_add(atomic, val) \ - (g_atomic_int_add ((gint *) (atomic), (val))) -#define g_atomic_int_and(atomic, val) \ - (g_atomic_int_and ((guint *) (atomic), (val))) -#define g_atomic_int_or(atomic, val) \ - (g_atomic_int_or ((guint *) (atomic), (val))) -#define g_atomic_int_xor(atomic, val) \ - (g_atomic_int_xor ((guint *) (atomic), (val))) -#define g_atomic_int_inc(atomic) \ - (g_atomic_int_inc ((gint *) (atomic))) -#define g_atomic_int_dec_and_test(atomic) \ - (g_atomic_int_dec_and_test ((gint *) (atomic))) - -#define g_atomic_pointer_get(atomic) \ - (g_atomic_pointer_get (atomic)) -#define g_atomic_pointer_set(atomic, newval) \ - (g_atomic_pointer_set ((atomic), (gpointer) (newval))) -#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \ - (g_atomic_pointer_compare_and_exchange ((atomic), (gpointer) (oldval), (gpointer) (newval))) -#define g_atomic_pointer_add(atomic, val) \ - (g_atomic_pointer_add ((atomic), (gssize) (val))) -#define g_atomic_pointer_and(atomic, val) \ - (g_atomic_pointer_and ((atomic), (gsize) (val))) -#define g_atomic_pointer_or(atomic, val) \ - (g_atomic_pointer_or ((atomic), (gsize) (val))) -#define g_atomic_pointer_xor(atomic, val) \ - (g_atomic_pointer_xor ((atomic), (gsize) (val))) - -#endif /* defined(__GNUC__) && defined(G_ATOMIC_OP_USE_GCC_BUILTINS) */ - -#endif /* __G_ATOMIC_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gbacktrace.h b/GstreamerHelper/x64/include/glib-2.0/glib/gbacktrace.h deleted file mode 100644 index f0a6eab9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gbacktrace.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BACKTRACE_H__ -#define __G_BACKTRACE_H__ - -#include -#include - -G_BEGIN_DECLS - -void g_on_error_query (const gchar *prg_name); -void g_on_error_stack_trace (const gchar *prg_name); - -/** - * G_BREAKPOINT: - * - * Inserts a breakpoint instruction into the code. - * - * On x86 and alpha systems this is implemented as a soft interrupt - * and on other architectures it raises a SIGTRAP signal. - */ -#if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__) && __GNUC__ >= 2 -# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END -#elif (defined (_MSC_VER) || defined (__DMC__)) && defined (_M_IX86) -# define G_BREAKPOINT() G_STMT_START{ __asm int 3h }G_STMT_END -#elif defined (_MSC_VER) -# define G_BREAKPOINT() G_STMT_START{ __debugbreak(); }G_STMT_END -#elif defined (__alpha__) && !defined(__osf__) && defined (__GNUC__) && __GNUC__ >= 2 -# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END -#else /* !__i386__ && !__alpha__ */ -# define G_BREAKPOINT() G_STMT_START{ raise (SIGTRAP); }G_STMT_END -#endif /* __i386__ */ - -G_END_DECLS - -#endif /* __G_BACKTRACE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gbase64.h b/GstreamerHelper/x64/include/glib-2.0/glib/gbase64.h deleted file mode 100644 index 88ce6d8a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gbase64.h +++ /dev/null @@ -1,57 +0,0 @@ -/* gbase64.h - Base64 coding functions - * - * Copyright (C) 2005 Alexander Larsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BASE64_H__ -#define __G_BASE64_H__ - -#include - -G_BEGIN_DECLS - -gsize g_base64_encode_step (const guchar *in, - gsize len, - gboolean break_lines, - gchar *out, - gint *state, - gint *save); -gsize g_base64_encode_close (gboolean break_lines, - gchar *out, - gint *state, - gint *save); -gchar* g_base64_encode (const guchar *data, - gsize len) G_GNUC_MALLOC; -gsize g_base64_decode_step (const gchar *in, - gsize len, - guchar *out, - gint *state, - guint *save); -guchar *g_base64_decode (const gchar *text, - gsize *out_len) G_GNUC_MALLOC; -guchar *g_base64_decode_inplace (gchar *text, - gsize *out_len); - - -G_END_DECLS - -#endif /* __G_BASE64_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gbitlock.h b/GstreamerHelper/x64/include/glib-2.0/glib/gbitlock.h deleted file mode 100644 index 641ee696..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gbitlock.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2008 Ryan Lortie - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_BITLOCK_H__ -#define __G_BITLOCK_H__ - -#include - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -G_BEGIN_DECLS - -void g_bit_lock (volatile gint *address, - gint lock_bit); -gboolean g_bit_trylock (volatile gint *address, - gint lock_bit); -void g_bit_unlock (volatile gint *address, - gint lock_bit); - -void g_pointer_bit_lock (volatile void *address, - gint lock_bit); -gboolean g_pointer_bit_trylock (volatile void *address, - gint lock_bit); -void g_pointer_bit_unlock (volatile void *address, - gint lock_bit); - -#ifdef __GNUC__ - -#define g_pointer_bit_lock(address, lock_bit) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \ - g_pointer_bit_lock ((address), (lock_bit)); \ - })) - -#define g_pointer_bit_trylock(address, lock_bit) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \ - g_pointer_bit_trylock ((address), (lock_bit)); \ - })) - -#define g_pointer_bit_unlock(address, lock_bit) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \ - g_pointer_bit_unlock ((address), (lock_bit)); \ - })) - -#endif - -G_END_DECLS - -#endif /* __G_BITLOCK_H_ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gbookmarkfile.h b/GstreamerHelper/x64/include/glib-2.0/glib/gbookmarkfile.h deleted file mode 100644 index 6b2ee6f4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gbookmarkfile.h +++ /dev/null @@ -1,215 +0,0 @@ -/* gbookmarkfile.h: parsing and building desktop bookmarks - * - * Copyright (C) 2005-2006 Emmanuele Bassi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BOOKMARK_FILE_H__ -#define __G_BOOKMARK_FILE_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * G_BOOKMARK_FILE_ERROR: - * - * Error domain for bookmark file parsing. - * Errors in this domain will be from the #GBookmarkFileError - * enumeration. See #GError for information on error domains. - */ -#define G_BOOKMARK_FILE_ERROR (g_bookmark_file_error_quark ()) - - -/** - * GBookmarkFileError: - * @G_BOOKMARK_FILE_ERROR_INVALID_URI: URI was ill-formed - * @G_BOOKMARK_FILE_ERROR_INVALID_VALUE: a requested field was not found - * @G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: a requested application did - * not register a bookmark - * @G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: a requested URI was not found - * @G_BOOKMARK_FILE_ERROR_READ: document was ill formed - * @G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: the text being parsed was - * in an unknown encoding - * @G_BOOKMARK_FILE_ERROR_WRITE: an error occurred while writing - * @G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: requested file was not found - * - * Error codes returned by bookmark file parsing. - */ -typedef enum -{ - G_BOOKMARK_FILE_ERROR_INVALID_URI, - G_BOOKMARK_FILE_ERROR_INVALID_VALUE, - G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED, - G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND, - G_BOOKMARK_FILE_ERROR_READ, - G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING, - G_BOOKMARK_FILE_ERROR_WRITE, - G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND -} GBookmarkFileError; - -GQuark g_bookmark_file_error_quark (void); - -/** - * GBookmarkFile: - * - * The GBookmarkFile struct contains only - * private data and should not be directly accessed. - */ -typedef struct _GBookmarkFile GBookmarkFile; - -GBookmarkFile *g_bookmark_file_new (void); -void g_bookmark_file_free (GBookmarkFile *bookmark); - -gboolean g_bookmark_file_load_from_file (GBookmarkFile *bookmark, - const gchar *filename, - GError **error); -gboolean g_bookmark_file_load_from_data (GBookmarkFile *bookmark, - const gchar *data, - gsize length, - GError **error); -gboolean g_bookmark_file_load_from_data_dirs (GBookmarkFile *bookmark, - const gchar *file, - gchar **full_path, - GError **error); -gchar * g_bookmark_file_to_data (GBookmarkFile *bookmark, - gsize *length, - GError **error) G_GNUC_MALLOC; -gboolean g_bookmark_file_to_file (GBookmarkFile *bookmark, - const gchar *filename, - GError **error); - -void g_bookmark_file_set_title (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *title); -gchar * g_bookmark_file_get_title (GBookmarkFile *bookmark, - const gchar *uri, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_set_description (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *description); -gchar * g_bookmark_file_get_description (GBookmarkFile *bookmark, - const gchar *uri, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_set_mime_type (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *mime_type); -gchar * g_bookmark_file_get_mime_type (GBookmarkFile *bookmark, - const gchar *uri, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_set_groups (GBookmarkFile *bookmark, - const gchar *uri, - const gchar **groups, - gsize length); -void g_bookmark_file_add_group (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *group); -gboolean g_bookmark_file_has_group (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *group, - GError **error); -gchar ** g_bookmark_file_get_groups (GBookmarkFile *bookmark, - const gchar *uri, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_add_application (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - const gchar *exec); -gboolean g_bookmark_file_has_application (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - GError **error); -gchar ** g_bookmark_file_get_applications (GBookmarkFile *bookmark, - const gchar *uri, - gsize *length, - GError **error) G_GNUC_MALLOC; -gboolean g_bookmark_file_set_app_info (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - const gchar *exec, - gint count, - time_t stamp, - GError **error); -gboolean g_bookmark_file_get_app_info (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - gchar **exec, - guint *count, - time_t *stamp, - GError **error); -void g_bookmark_file_set_is_private (GBookmarkFile *bookmark, - const gchar *uri, - gboolean is_private); -gboolean g_bookmark_file_get_is_private (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -void g_bookmark_file_set_icon (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *href, - const gchar *mime_type); -gboolean g_bookmark_file_get_icon (GBookmarkFile *bookmark, - const gchar *uri, - gchar **href, - gchar **mime_type, - GError **error); -void g_bookmark_file_set_added (GBookmarkFile *bookmark, - const gchar *uri, - time_t added); -time_t g_bookmark_file_get_added (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -void g_bookmark_file_set_modified (GBookmarkFile *bookmark, - const gchar *uri, - time_t modified); -time_t g_bookmark_file_get_modified (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -void g_bookmark_file_set_visited (GBookmarkFile *bookmark, - const gchar *uri, - time_t visited); -time_t g_bookmark_file_get_visited (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -gboolean g_bookmark_file_has_item (GBookmarkFile *bookmark, - const gchar *uri); -gint g_bookmark_file_get_size (GBookmarkFile *bookmark); -gchar ** g_bookmark_file_get_uris (GBookmarkFile *bookmark, - gsize *length) G_GNUC_MALLOC; -gboolean g_bookmark_file_remove_group (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *group, - GError **error); -gboolean g_bookmark_file_remove_application (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - GError **error); -gboolean g_bookmark_file_remove_item (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -gboolean g_bookmark_file_move_item (GBookmarkFile *bookmark, - const gchar *old_uri, - const gchar *new_uri, - GError **error); - -G_END_DECLS - -#endif /* __G_BOOKMARK_FILE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gbytes.h b/GstreamerHelper/x64/include/glib-2.0/glib/gbytes.h deleted file mode 100644 index de3c8f80..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gbytes.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2009, 2010 Codethink Limited - * Copyright © 2011 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - * Stef Walter - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BYTES_H__ -#define __G_BYTES_H__ - -#include -#include - -G_BEGIN_DECLS - -GBytes * g_bytes_new (gconstpointer data, - gsize size); - -GBytes * g_bytes_new_take (gpointer data, - gsize size); - -GBytes * g_bytes_new_static (gconstpointer data, - gsize size); - -GBytes * g_bytes_new_with_free_func (gconstpointer data, - gsize size, - GDestroyNotify free_func, - gpointer user_data); - -GBytes * g_bytes_new_from_bytes (GBytes *bytes, - gsize offset, - gsize length); - -gconstpointer g_bytes_get_data (GBytes *bytes, - gsize *size); - -gsize g_bytes_get_size (GBytes *bytes); - -GBytes * g_bytes_ref (GBytes *bytes); - -void g_bytes_unref (GBytes *bytes); - -gpointer g_bytes_unref_to_data (GBytes *bytes, - gsize *size); - -GByteArray * g_bytes_unref_to_array (GBytes *bytes); - -guint g_bytes_hash (gconstpointer bytes); - -gboolean g_bytes_equal (gconstpointer bytes1, - gconstpointer bytes2); - -gint g_bytes_compare (gconstpointer bytes1, - gconstpointer bytes2); - -G_END_DECLS - -#endif /* __G_BYTES_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gcharset.h b/GstreamerHelper/x64/include/glib-2.0/glib/gcharset.h deleted file mode 100644 index 9b56524c..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gcharset.h +++ /dev/null @@ -1,40 +0,0 @@ -/* gcharset.h - Charset functions - * - * Copyright (C) 2011 Red Hat, Inc. - * - * The GLib Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The GLib Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CHARSET_H__ -#define __G_CHARSET_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_get_charset (const char **charset); -gchar * g_get_codeset (void); - -const gchar * const * g_get_language_names (void); -gchar ** g_get_locale_variants (const gchar *locale); - -G_END_DECLS - -#endif /* __G_CHARSET_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gchecksum.h b/GstreamerHelper/x64/include/glib-2.0/glib/gchecksum.h deleted file mode 100644 index b0621f24..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gchecksum.h +++ /dev/null @@ -1,91 +0,0 @@ -/* gchecksum.h - data hashing functions - * - * Copyright (C) 2007 Emmanuele Bassi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CHECKSUM_H__ -#define __G_CHECKSUM_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GChecksumType: - * @G_CHECKSUM_MD5: Use the MD5 hashing algorithm - * @G_CHECKSUM_SHA1: Use the SHA-1 hashing algorithm - * @G_CHECKSUM_SHA256: Use the SHA-256 hashing algorithm - * - * The hashing algorithm to be used by #GChecksum when performing the - * digest of some data. - * - * Note that the #GChecksumType enumeration may be extended at a later - * date to include new hashing algorithm types. - * - * Since: 2.16 - */ -typedef enum { - G_CHECKSUM_MD5, - G_CHECKSUM_SHA1, - G_CHECKSUM_SHA256 -} GChecksumType; - -/** - * GChecksum: - * - * An opaque structure representing a checksumming operation. - * To create a new GChecksum, use g_checksum_new(). To free - * a GChecksum, use g_checksum_free(). - * - * Since: 2.16 - */ -typedef struct _GChecksum GChecksum; - -gssize g_checksum_type_get_length (GChecksumType checksum_type); - -GChecksum * g_checksum_new (GChecksumType checksum_type); -void g_checksum_reset (GChecksum *checksum); -GChecksum * g_checksum_copy (const GChecksum *checksum); -void g_checksum_free (GChecksum *checksum); -void g_checksum_update (GChecksum *checksum, - const guchar *data, - gssize length); -const gchar * g_checksum_get_string (GChecksum *checksum); -void g_checksum_get_digest (GChecksum *checksum, - guint8 *buffer, - gsize *digest_len); - -gchar *g_compute_checksum_for_data (GChecksumType checksum_type, - const guchar *data, - gsize length); -gchar *g_compute_checksum_for_string (GChecksumType checksum_type, - const gchar *str, - gssize length); - -GLIB_AVAILABLE_IN_2_34 -gchar *g_compute_checksum_for_bytes (GChecksumType checksum_type, - GBytes *data); - -G_END_DECLS - -#endif /* __G_CHECKSUM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gconvert.h b/GstreamerHelper/x64/include/glib-2.0/glib/gconvert.h deleted file mode 100644 index 7fd16c84..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gconvert.h +++ /dev/null @@ -1,164 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERT_H__ -#define __G_CONVERT_H__ - -#include - -G_BEGIN_DECLS - -/** - * GConvertError: - * @G_CONVERT_ERROR_NO_CONVERSION: Conversion between the requested character - * sets is not supported. - * @G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input. - * @G_CONVERT_ERROR_FAILED: Conversion failed for some reason. - * @G_CONVERT_ERROR_PARTIAL_INPUT: Partial character sequence at end of input. - * @G_CONVERT_ERROR_BAD_URI: URI is invalid. - * @G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: Pathname is not an absolute path. - * - * Error codes returned by character set conversion routines. - */ -typedef enum -{ - G_CONVERT_ERROR_NO_CONVERSION, - G_CONVERT_ERROR_ILLEGAL_SEQUENCE, - G_CONVERT_ERROR_FAILED, - G_CONVERT_ERROR_PARTIAL_INPUT, - G_CONVERT_ERROR_BAD_URI, - G_CONVERT_ERROR_NOT_ABSOLUTE_PATH -} GConvertError; - -/** - * G_CONVERT_ERROR: - * - * Error domain for character set conversions. Errors in this domain will - * be from the #GConvertError enumeration. See #GError for information on - * error domains. - */ -#define G_CONVERT_ERROR g_convert_error_quark() -GQuark g_convert_error_quark (void); - -/** - * GIconv: - * - * The GIConv struct wraps an - * iconv() conversion descriptor. It contains private data - * and should only be accessed using the following functions. - */ -typedef struct _GIConv *GIConv; - -GIConv g_iconv_open (const gchar *to_codeset, - const gchar *from_codeset); -gsize g_iconv (GIConv converter, - gchar **inbuf, - gsize *inbytes_left, - gchar **outbuf, - gsize *outbytes_left); -gint g_iconv_close (GIConv converter); - - -gchar* g_convert (const gchar *str, - gssize len, - const gchar *to_codeset, - const gchar *from_codeset, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_convert_with_iconv (const gchar *str, - gssize len, - GIConv converter, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_convert_with_fallback (const gchar *str, - gssize len, - const gchar *to_codeset, - const gchar *from_codeset, - const gchar *fallback, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; - - -/* Convert between libc's idea of strings and UTF-8. - */ -gchar* g_locale_to_utf8 (const gchar *opsysstring, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_locale_from_utf8 (const gchar *utf8string, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; - -/* Convert between the operating system (or C runtime) - * representation of file names and UTF-8. - */ -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_filename_to_utf8 g_filename_to_utf8_utf8 -#define g_filename_from_utf8 g_filename_from_utf8_utf8 -#define g_filename_from_uri g_filename_from_uri_utf8 -#define g_filename_to_uri g_filename_to_uri_utf8 -#endif -#endif - -gchar* g_filename_to_utf8 (const gchar *opsysstring, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_filename_from_utf8 (const gchar *utf8string, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; - -gchar *g_filename_from_uri (const gchar *uri, - gchar **hostname, - GError **error) G_GNUC_MALLOC; - -gchar *g_filename_to_uri (const gchar *filename, - const gchar *hostname, - GError **error) G_GNUC_MALLOC; -gchar *g_filename_display_name (const gchar *filename) G_GNUC_MALLOC; -gboolean g_get_filename_charsets (const gchar ***charsets); - -gchar *g_filename_display_basename (const gchar *filename) G_GNUC_MALLOC; - -gchar **g_uri_list_extract_uris (const gchar *uri_list) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_CONVERT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gdataset.h b/GstreamerHelper/x64/include/glib-2.0/glib/gdataset.h deleted file mode 100644 index a93f6ae9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gdataset.h +++ /dev/null @@ -1,137 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATASET_H__ -#define __G_DATASET_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GData GData; - -typedef void (*GDataForeachFunc) (GQuark key_id, - gpointer data, - gpointer user_data); - -/* Keyed Data List - */ -void g_datalist_init (GData **datalist); -void g_datalist_clear (GData **datalist); -gpointer g_datalist_id_get_data (GData **datalist, - GQuark key_id); -void g_datalist_id_set_data_full (GData **datalist, - GQuark key_id, - gpointer data, - GDestroyNotify destroy_func); - -typedef gpointer (*GDuplicateFunc) (gpointer data, gpointer user_data); - -GLIB_AVAILABLE_IN_2_34 -gpointer g_datalist_id_dup_data (GData **datalist, - GQuark key_id, - GDuplicateFunc dup_func, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gboolean g_datalist_id_replace_data (GData **datalist, - GQuark key_id, - gpointer oldval, - gpointer newval, - GDestroyNotify destroy, - GDestroyNotify *old_destroy); - -gpointer g_datalist_id_remove_no_notify (GData **datalist, - GQuark key_id); -void g_datalist_foreach (GData **datalist, - GDataForeachFunc func, - gpointer user_data); - -/** - * G_DATALIST_FLAGS_MASK: - * - * A bitmask that restricts the possible flags passed to - * g_datalist_set_flags(). Passing a flags value where - * flags & ~G_DATALIST_FLAGS_MASK != 0 is an error. - */ -#define G_DATALIST_FLAGS_MASK 0x3 - -void g_datalist_set_flags (GData **datalist, - guint flags); -void g_datalist_unset_flags (GData **datalist, - guint flags); -guint g_datalist_get_flags (GData **datalist); - -#define g_datalist_id_set_data(dl, q, d) \ - g_datalist_id_set_data_full ((dl), (q), (d), NULL) -#define g_datalist_id_remove_data(dl, q) \ - g_datalist_id_set_data ((dl), (q), NULL) -#define g_datalist_set_data_full(dl, k, d, f) \ - g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f)) -#define g_datalist_remove_no_notify(dl, k) \ - g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k)) -#define g_datalist_set_data(dl, k, d) \ - g_datalist_set_data_full ((dl), (k), (d), NULL) -#define g_datalist_remove_data(dl, k) \ - g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL) - -/* Location Associated Keyed Data - */ -void g_dataset_destroy (gconstpointer dataset_location); -gpointer g_dataset_id_get_data (gconstpointer dataset_location, - GQuark key_id); -gpointer g_datalist_get_data (GData **datalist, - const gchar *key); -void g_dataset_id_set_data_full (gconstpointer dataset_location, - GQuark key_id, - gpointer data, - GDestroyNotify destroy_func); -gpointer g_dataset_id_remove_no_notify (gconstpointer dataset_location, - GQuark key_id); -void g_dataset_foreach (gconstpointer dataset_location, - GDataForeachFunc func, - gpointer user_data); -#define g_dataset_id_set_data(l, k, d) \ - g_dataset_id_set_data_full ((l), (k), (d), NULL) -#define g_dataset_id_remove_data(l, k) \ - g_dataset_id_set_data ((l), (k), NULL) -#define g_dataset_get_data(l, k) \ - (g_dataset_id_get_data ((l), g_quark_try_string (k))) -#define g_dataset_set_data_full(l, k, d, f) \ - g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f)) -#define g_dataset_remove_no_notify(l, k) \ - g_dataset_id_remove_no_notify ((l), g_quark_try_string (k)) -#define g_dataset_set_data(l, k, d) \ - g_dataset_set_data_full ((l), (k), (d), NULL) -#define g_dataset_remove_data(l, k) \ - g_dataset_id_set_data ((l), g_quark_try_string (k), NULL) - -G_END_DECLS - -#endif /* __G_DATASET_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gdate.h b/GstreamerHelper/x64/include/glib-2.0/glib/gdate.h deleted file mode 100644 index 5ef1850b..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gdate.h +++ /dev/null @@ -1,264 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATE_H__ -#define __G_DATE_H__ - -#include - -#include -#include - -G_BEGIN_DECLS - -/* GDate - * - * Date calculations (not time for now, to be resolved). These are a - * mutant combination of Steffen Beyer's DateCalc routines - * (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's - * date routines (written for in-house software). Written by Havoc - * Pennington - */ - -typedef gint32 GTime; -typedef guint16 GDateYear; -typedef guint8 GDateDay; /* day of the month */ -typedef struct _GDate GDate; - -/* enum used to specify order of appearance in parsed date strings */ -typedef enum -{ - G_DATE_DAY = 0, - G_DATE_MONTH = 1, - G_DATE_YEAR = 2 -} GDateDMY; - -/* actual week and month values */ -typedef enum -{ - G_DATE_BAD_WEEKDAY = 0, - G_DATE_MONDAY = 1, - G_DATE_TUESDAY = 2, - G_DATE_WEDNESDAY = 3, - G_DATE_THURSDAY = 4, - G_DATE_FRIDAY = 5, - G_DATE_SATURDAY = 6, - G_DATE_SUNDAY = 7 -} GDateWeekday; -typedef enum -{ - G_DATE_BAD_MONTH = 0, - G_DATE_JANUARY = 1, - G_DATE_FEBRUARY = 2, - G_DATE_MARCH = 3, - G_DATE_APRIL = 4, - G_DATE_MAY = 5, - G_DATE_JUNE = 6, - G_DATE_JULY = 7, - G_DATE_AUGUST = 8, - G_DATE_SEPTEMBER = 9, - G_DATE_OCTOBER = 10, - G_DATE_NOVEMBER = 11, - G_DATE_DECEMBER = 12 -} GDateMonth; - -#define G_DATE_BAD_JULIAN 0U -#define G_DATE_BAD_DAY 0U -#define G_DATE_BAD_YEAR 0U - -/* Note: directly manipulating structs is generally a bad idea, but - * in this case it's an *incredibly* bad idea, because all or part - * of this struct can be invalid at any given time. Use the functions, - * or you will get hosed, I promise. - */ -struct _GDate -{ - guint julian_days : 32; /* julian days representation - we use a - * bitfield hoping that 64 bit platforms - * will pack this whole struct in one big - * int - */ - - guint julian : 1; /* julian is valid */ - guint dmy : 1; /* dmy is valid */ - - /* DMY representation */ - guint day : 6; - guint month : 4; - guint year : 16; -}; - -/* g_date_new() returns an invalid date, you then have to _set() stuff - * to get a usable object. You can also allocate a GDate statically, - * then call g_date_clear() to initialize. - */ -GDate* g_date_new (void); -GDate* g_date_new_dmy (GDateDay day, - GDateMonth month, - GDateYear year); -GDate* g_date_new_julian (guint32 julian_day); -void g_date_free (GDate *date); - -/* check g_date_valid() after doing an operation that might fail, like - * _parse. Almost all g_date operations are undefined on invalid - * dates (the exceptions are the mutators, since you need those to - * return to validity). - */ -gboolean g_date_valid (const GDate *date); -gboolean g_date_valid_day (GDateDay day) G_GNUC_CONST; -gboolean g_date_valid_month (GDateMonth month) G_GNUC_CONST; -gboolean g_date_valid_year (GDateYear year) G_GNUC_CONST; -gboolean g_date_valid_weekday (GDateWeekday weekday) G_GNUC_CONST; -gboolean g_date_valid_julian (guint32 julian_date) G_GNUC_CONST; -gboolean g_date_valid_dmy (GDateDay day, - GDateMonth month, - GDateYear year) G_GNUC_CONST; - -GDateWeekday g_date_get_weekday (const GDate *date); -GDateMonth g_date_get_month (const GDate *date); -GDateYear g_date_get_year (const GDate *date); -GDateDay g_date_get_day (const GDate *date); -guint32 g_date_get_julian (const GDate *date); -guint g_date_get_day_of_year (const GDate *date); -/* First monday/sunday is the start of week 1; if we haven't reached - * that day, return 0. These are not ISO weeks of the year; that - * routine needs to be added. - * these functions return the number of weeks, starting on the - * corrsponding day - */ -guint g_date_get_monday_week_of_year (const GDate *date); -guint g_date_get_sunday_week_of_year (const GDate *date); -guint g_date_get_iso8601_week_of_year (const GDate *date); - -/* If you create a static date struct you need to clear it to get it - * in a sane state before use. You can clear a whole array at - * once with the ndates argument. - */ -void g_date_clear (GDate *date, - guint n_dates); - -/* The parse routine is meant for dates typed in by a user, so it - * permits many formats but tries to catch common typos. If your data - * needs to be strictly validated, it is not an appropriate function. - */ -void g_date_set_parse (GDate *date, - const gchar *str); -void g_date_set_time_t (GDate *date, - time_t timet); -void g_date_set_time_val (GDate *date, - GTimeVal *timeval); -#ifndef G_DISABLE_DEPRECATED -GLIB_DEPRECATED_FOR(g_date_set_time_t) -void g_date_set_time (GDate *date, - GTime time_); -#endif -void g_date_set_month (GDate *date, - GDateMonth month); -void g_date_set_day (GDate *date, - GDateDay day); -void g_date_set_year (GDate *date, - GDateYear year); -void g_date_set_dmy (GDate *date, - GDateDay day, - GDateMonth month, - GDateYear y); -void g_date_set_julian (GDate *date, - guint32 julian_date); -gboolean g_date_is_first_of_month (const GDate *date); -gboolean g_date_is_last_of_month (const GDate *date); - -/* To go forward by some number of weeks just go forward weeks*7 days */ -void g_date_add_days (GDate *date, - guint n_days); -void g_date_subtract_days (GDate *date, - guint n_days); - -/* If you add/sub months while day > 28, the day might change */ -void g_date_add_months (GDate *date, - guint n_months); -void g_date_subtract_months (GDate *date, - guint n_months); - -/* If it's feb 29, changing years can move you to the 28th */ -void g_date_add_years (GDate *date, - guint n_years); -void g_date_subtract_years (GDate *date, - guint n_years); -gboolean g_date_is_leap_year (GDateYear year) G_GNUC_CONST; -guint8 g_date_get_days_in_month (GDateMonth month, - GDateYear year) G_GNUC_CONST; -guint8 g_date_get_monday_weeks_in_year (GDateYear year) G_GNUC_CONST; -guint8 g_date_get_sunday_weeks_in_year (GDateYear year) G_GNUC_CONST; - -/* Returns the number of days between the two dates. If date2 comes - before date1, a negative value is return. */ -gint g_date_days_between (const GDate *date1, - const GDate *date2); - -/* qsort-friendly (with a cast...) */ -gint g_date_compare (const GDate *lhs, - const GDate *rhs); -void g_date_to_struct_tm (const GDate *date, - struct tm *tm); - -void g_date_clamp (GDate *date, - const GDate *min_date, - const GDate *max_date); - -/* Swap date1 and date2's values if date1 > date2. */ -void g_date_order (GDate *date1, GDate *date2); - -/* Just like strftime() except you can only use date-related formats. - * Using a time format is undefined. - */ -gsize g_date_strftime (gchar *s, - gsize slen, - const gchar *format, - const GDate *date); - -#ifndef G_DISABLE_DEPRECATED - -#define g_date_weekday g_date_get_weekday -#define g_date_month g_date_get_month -#define g_date_year g_date_get_year -#define g_date_day g_date_get_day -#define g_date_julian g_date_get_julian -#define g_date_day_of_year g_date_get_day_of_year -#define g_date_monday_week_of_year g_date_get_monday_week_of_year -#define g_date_sunday_week_of_year g_date_get_sunday_week_of_year -#define g_date_days_in_month g_date_get_days_in_month -#define g_date_monday_weeks_in_year g_date_get_monday_weeks_in_year -#define g_date_sunday_weeks_in_year g_date_get_sunday_weeks_in_year - -#endif /* G_DISABLE_DEPRECATED */ - -G_END_DECLS - -#endif /* __G_DATE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gdatetime.h b/GstreamerHelper/x64/include/glib-2.0/glib/gdatetime.h deleted file mode 100644 index 6643e3ff..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gdatetime.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (C) 2009-2010 Christian Hergert - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * licence, or (at your option) any later version. - * - * This is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 - * USA. - * - * Authors: Christian Hergert - * Thiago Santos - * Emmanuele Bassi - * Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATE_TIME_H__ -#define __G_DATE_TIME_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TIME_SPAN_DAY: - * - * Evaluates to a time span of one day. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_DAY (G_GINT64_CONSTANT (86400000000)) - -/** - * G_TIME_SPAN_HOUR: - * - * Evaluates to a time span of one hour. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_HOUR (G_GINT64_CONSTANT (3600000000)) - -/** - * G_TIME_SPAN_MINUTE: - * - * Evaluates to a time span of one minute. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_MINUTE (G_GINT64_CONSTANT (60000000)) - -/** - * G_TIME_SPAN_SECOND: - * - * Evaluates to a time span of one second. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_SECOND (G_GINT64_CONSTANT (1000000)) - -/** - * G_TIME_SPAN_MILLISECOND: - * - * Evaluates to a time span of one millisecond. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_MILLISECOND (G_GINT64_CONSTANT (1000)) - -/** - * GTimeSpan: - * - * A value representing an interval of time, in microseconds. - * - * Since: 2.26 - */ -typedef gint64 GTimeSpan; - -/** - * GDateTime: - * - * GDateTime is an opaque structure whose members - * cannot be accessed directly. - * - * Since: 2.26 - */ -typedef struct _GDateTime GDateTime; - -void g_date_time_unref (GDateTime *datetime); -GDateTime * g_date_time_ref (GDateTime *datetime); - -GDateTime * g_date_time_new_now (GTimeZone *tz); -GDateTime * g_date_time_new_now_local (void); -GDateTime * g_date_time_new_now_utc (void); - -GDateTime * g_date_time_new_from_unix_local (gint64 t); -GDateTime * g_date_time_new_from_unix_utc (gint64 t); - -GDateTime * g_date_time_new_from_timeval_local (const GTimeVal *tv); -GDateTime * g_date_time_new_from_timeval_utc (const GTimeVal *tv); - -GDateTime * g_date_time_new (GTimeZone *tz, - gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds); -GDateTime * g_date_time_new_local (gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds); -GDateTime * g_date_time_new_utc (gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add (GDateTime *datetime, - GTimeSpan timespan); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_years (GDateTime *datetime, - gint years); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_months (GDateTime *datetime, - gint months); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_weeks (GDateTime *datetime, - gint weeks); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_days (GDateTime *datetime, - gint days); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_hours (GDateTime *datetime, - gint hours); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_minutes (GDateTime *datetime, - gint minutes); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_seconds (GDateTime *datetime, - gdouble seconds); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_full (GDateTime *datetime, - gint years, - gint months, - gint days, - gint hours, - gint minutes, - gdouble seconds); - -gint g_date_time_compare (gconstpointer dt1, - gconstpointer dt2); -GTimeSpan g_date_time_difference (GDateTime *end, - GDateTime *begin); -guint g_date_time_hash (gconstpointer datetime); -gboolean g_date_time_equal (gconstpointer dt1, - gconstpointer dt2); - -void g_date_time_get_ymd (GDateTime *datetime, - gint *year, - gint *month, - gint *day); - -gint g_date_time_get_year (GDateTime *datetime); -gint g_date_time_get_month (GDateTime *datetime); -gint g_date_time_get_day_of_month (GDateTime *datetime); - -gint g_date_time_get_week_numbering_year (GDateTime *datetime); -gint g_date_time_get_week_of_year (GDateTime *datetime); -gint g_date_time_get_day_of_week (GDateTime *datetime); - -gint g_date_time_get_day_of_year (GDateTime *datetime); - -gint g_date_time_get_hour (GDateTime *datetime); -gint g_date_time_get_minute (GDateTime *datetime); -gint g_date_time_get_second (GDateTime *datetime); -gint g_date_time_get_microsecond (GDateTime *datetime); -gdouble g_date_time_get_seconds (GDateTime *datetime); - -gint64 g_date_time_to_unix (GDateTime *datetime); -gboolean g_date_time_to_timeval (GDateTime *datetime, - GTimeVal *tv); - -GTimeSpan g_date_time_get_utc_offset (GDateTime *datetime); -const gchar * g_date_time_get_timezone_abbreviation (GDateTime *datetime); -gboolean g_date_time_is_daylight_savings (GDateTime *datetime); - -GDateTime * g_date_time_to_timezone (GDateTime *datetime, - GTimeZone *tz); -GDateTime * g_date_time_to_local (GDateTime *datetime); -GDateTime * g_date_time_to_utc (GDateTime *datetime); - -gchar * g_date_time_format (GDateTime *datetime, - const gchar *format) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_DATE_TIME_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gdir.h b/GstreamerHelper/x64/include/glib-2.0/glib/gdir.h deleted file mode 100644 index 79b3038d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gdir.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * gdir.c: Simplified wrapper around the DIRENT functions. - * - * Copyright 2001 Hans Breuer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DIR_H__ -#define __G_DIR_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GDir GDir; - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -/* For DLL ABI stability, keep old names for old (non-UTF-8) functionality. */ -#define g_dir_open g_dir_open_utf8 -#define g_dir_read_name g_dir_read_name_utf8 -#endif -#endif - -GDir * g_dir_open (const gchar *path, - guint flags, - GError **error); -const gchar * g_dir_read_name (GDir *dir); -void g_dir_rewind (GDir *dir); -void g_dir_close (GDir *dir); - -G_END_DECLS - -#endif /* __G_DIR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/genviron.h b/GstreamerHelper/x64/include/glib-2.0/glib/genviron.h deleted file mode 100644 index c75c5482..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/genviron.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ENVIRON_H__ -#define __G_ENVIRON_H__ - -#include - -G_BEGIN_DECLS - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_getenv g_getenv_utf8 -#define g_setenv g_setenv_utf8 -#define g_unsetenv g_unsetenv_utf8 -#endif -#endif - -const gchar * g_getenv (const gchar *variable); -gboolean g_setenv (const gchar *variable, - const gchar *value, - gboolean overwrite); -void g_unsetenv (const gchar *variable); -gchar ** g_listenv (void); - -gchar ** g_get_environ (void); -const gchar * g_environ_getenv (gchar **envp, - const gchar *variable); -gchar ** g_environ_setenv (gchar **envp, - const gchar *variable, - const gchar *value, - gboolean overwrite) G_GNUC_WARN_UNUSED_RESULT; -gchar ** g_environ_unsetenv (gchar **envp, - const gchar *variable) G_GNUC_WARN_UNUSED_RESULT; - -G_END_DECLS - -#endif /* __G_ENVIRON_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gerror.h b/GstreamerHelper/x64/include/glib-2.0/glib/gerror.h deleted file mode 100644 index 6eb65fee..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gerror.h +++ /dev/null @@ -1,107 +0,0 @@ -/* gerror.h - Error reporting system - * - * Copyright 2000 Red Hat, Inc. - * - * The Gnome Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The Gnome Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ERROR_H__ -#define __G_ERROR_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GError: - * @domain: error domain, e.g. #G_FILE_ERROR - * @code: error code, e.g. %G_FILE_ERROR_NOENT - * @message: human-readable informative error message - * - * The GError structure contains - * information about an error that has occurred. - */ -typedef struct _GError GError; - -struct _GError -{ - GQuark domain; - gint code; - gchar *message; -}; - -GError* g_error_new (GQuark domain, - gint code, - const gchar *format, - ...) G_GNUC_PRINTF (3, 4); - -GError* g_error_new_literal (GQuark domain, - gint code, - const gchar *message); -GError* g_error_new_valist (GQuark domain, - gint code, - const gchar *format, - va_list args); - -void g_error_free (GError *error); -GError* g_error_copy (const GError *error); - -gboolean g_error_matches (const GError *error, - GQuark domain, - gint code); - -/* if (err) *err = g_error_new(domain, code, format, ...), also has - * some sanity checks. - */ -void g_set_error (GError **err, - GQuark domain, - gint code, - const gchar *format, - ...) G_GNUC_PRINTF (4, 5); - -void g_set_error_literal (GError **err, - GQuark domain, - gint code, - const gchar *message); - -/* if (dest) *dest = src; also has some sanity checks. - */ -void g_propagate_error (GError **dest, - GError *src); - -/* if (err && *err) { g_error_free(*err); *err = NULL; } */ -void g_clear_error (GError **err); - -/* if (err) prefix the formatted string to the ->message */ -void g_prefix_error (GError **err, - const gchar *format, - ...) G_GNUC_PRINTF (2, 3); - -/* g_propagate_error then g_error_prefix on dest */ -void g_propagate_prefixed_error (GError **dest, - GError *src, - const gchar *format, - ...) G_GNUC_PRINTF (3, 4); - -G_END_DECLS - -#endif /* __G_ERROR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gfileutils.h b/GstreamerHelper/x64/include/glib-2.0/glib/gfileutils.h deleted file mode 100644 index 7c2eb1dd..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gfileutils.h +++ /dev/null @@ -1,179 +0,0 @@ -/* gfileutils.h - File utility functions - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILEUTILS_H__ -#define __G_FILEUTILS_H__ - -#include - -G_BEGIN_DECLS - -#define G_FILE_ERROR g_file_error_quark () - -typedef enum -{ - G_FILE_ERROR_EXIST, - G_FILE_ERROR_ISDIR, - G_FILE_ERROR_ACCES, - G_FILE_ERROR_NAMETOOLONG, - G_FILE_ERROR_NOENT, - G_FILE_ERROR_NOTDIR, - G_FILE_ERROR_NXIO, - G_FILE_ERROR_NODEV, - G_FILE_ERROR_ROFS, - G_FILE_ERROR_TXTBSY, - G_FILE_ERROR_FAULT, - G_FILE_ERROR_LOOP, - G_FILE_ERROR_NOSPC, - G_FILE_ERROR_NOMEM, - G_FILE_ERROR_MFILE, - G_FILE_ERROR_NFILE, - G_FILE_ERROR_BADF, - G_FILE_ERROR_INVAL, - G_FILE_ERROR_PIPE, - G_FILE_ERROR_AGAIN, - G_FILE_ERROR_INTR, - G_FILE_ERROR_IO, - G_FILE_ERROR_PERM, - G_FILE_ERROR_NOSYS, - G_FILE_ERROR_FAILED -} GFileError; - -/* For backward-compat reasons, these are synced to an old - * anonymous enum in libgnome. But don't use that enum - * in new code. - */ -typedef enum -{ - G_FILE_TEST_IS_REGULAR = 1 << 0, - G_FILE_TEST_IS_SYMLINK = 1 << 1, - G_FILE_TEST_IS_DIR = 1 << 2, - G_FILE_TEST_IS_EXECUTABLE = 1 << 3, - G_FILE_TEST_EXISTS = 1 << 4 -} GFileTest; - -GQuark g_file_error_quark (void); -/* So other code can generate a GFileError */ -GFileError g_file_error_from_errno (gint err_no); - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_file_test g_file_test_utf8 -#define g_file_get_contents g_file_get_contents_utf8 -#define g_mkstemp g_mkstemp_utf8 -#define g_file_open_tmp g_file_open_tmp_utf8 -#endif -#endif - -gboolean g_file_test (const gchar *filename, - GFileTest test); -gboolean g_file_get_contents (const gchar *filename, - gchar **contents, - gsize *length, - GError **error); -gboolean g_file_set_contents (const gchar *filename, - const gchar *contents, - gssize length, - GError **error); -gchar *g_file_read_link (const gchar *filename, - GError **error); - -/* Wrapper / workalike for mkdtemp() */ -GLIB_AVAILABLE_IN_2_30 -gchar *g_mkdtemp (gchar *tmpl); -GLIB_AVAILABLE_IN_2_30 -gchar *g_mkdtemp_full (gchar *tmpl, - gint mode); - -/* Wrapper / workalike for mkstemp() */ -gint g_mkstemp (gchar *tmpl); -gint g_mkstemp_full (gchar *tmpl, - gint flags, - gint mode); - -/* Wrappers for g_mkstemp and g_mkdtemp() */ -gint g_file_open_tmp (const gchar *tmpl, - gchar **name_used, - GError **error); -GLIB_AVAILABLE_IN_2_30 -gchar *g_dir_make_tmp (const gchar *tmpl, - GError **error); - -gchar *g_build_path (const gchar *separator, - const gchar *first_element, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; -gchar *g_build_pathv (const gchar *separator, - gchar **args) G_GNUC_MALLOC; - -gchar *g_build_filename (const gchar *first_element, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; -gchar *g_build_filenamev (gchar **args) G_GNUC_MALLOC; - -gint g_mkdir_with_parents (const gchar *pathname, - gint mode); - -#ifdef G_OS_WIN32 - -/* On Win32, the canonical directory separator is the backslash, and - * the search path separator is the semicolon. Note that also the - * (forward) slash works as directory separator. - */ -#define G_DIR_SEPARATOR '\\' -#define G_DIR_SEPARATOR_S "\\" -#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/') -#define G_SEARCHPATH_SEPARATOR ';' -#define G_SEARCHPATH_SEPARATOR_S ";" - -#else /* !G_OS_WIN32 */ - -#define G_DIR_SEPARATOR '/' -#define G_DIR_SEPARATOR_S "/" -#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR) -#define G_SEARCHPATH_SEPARATOR ':' -#define G_SEARCHPATH_SEPARATOR_S ":" - -#endif /* !G_OS_WIN32 */ - -gboolean g_path_is_absolute (const gchar *file_name); -const gchar *g_path_skip_root (const gchar *file_name); - -GLIB_DEPRECATED_FOR(g_path_get_basename) -const gchar *g_basename (const gchar *file_name); -#ifndef G_DISABLE_DEPRECATED -#define g_dirname g_path_get_dirname -#endif - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_get_current_dir g_get_current_dir_utf8 -#endif -#endif - -gchar *g_get_current_dir (void); -gchar *g_path_get_basename (const gchar *file_name) G_GNUC_MALLOC; -gchar *g_path_get_dirname (const gchar *file_name) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_FILEUTILS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/ggettext.h b/GstreamerHelper/x64/include/glib-2.0/glib/ggettext.h deleted file mode 100644 index 54bbaa8e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/ggettext.h +++ /dev/null @@ -1,59 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_GETTEXT_H__ -#define __G_GETTEXT_H__ - -#include - -G_BEGIN_DECLS - -const gchar *g_strip_context (const gchar *msgid, - const gchar *msgval) G_GNUC_FORMAT(1); - -const gchar *g_dgettext (const gchar *domain, - const gchar *msgid) G_GNUC_FORMAT(2); -const gchar *g_dcgettext (const gchar *domain, - const gchar *msgid, - gint category) G_GNUC_FORMAT(2); -const gchar *g_dngettext (const gchar *domain, - const gchar *msgid, - const gchar *msgid_plural, - gulong n) G_GNUC_FORMAT(3); -const gchar *g_dpgettext (const gchar *domain, - const gchar *msgctxtid, - gsize msgidoffset) G_GNUC_FORMAT(2); -const gchar *g_dpgettext2 (const gchar *domain, - const gchar *context, - const gchar *msgid) G_GNUC_FORMAT(3); - -G_END_DECLS - -#endif /* __G_GETTEXT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/ghash.h b/GstreamerHelper/x64/include/glib-2.0/glib/ghash.h deleted file mode 100644 index 3eb89127..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/ghash.h +++ /dev/null @@ -1,147 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HASH_H__ -#define __G_HASH_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GHashTable GHashTable; - -typedef gboolean (*GHRFunc) (gpointer key, - gpointer value, - gpointer user_data); - -typedef struct _GHashTableIter GHashTableIter; - -struct _GHashTableIter -{ - /*< private >*/ - gpointer dummy1; - gpointer dummy2; - gpointer dummy3; - int dummy4; - gboolean dummy5; - gpointer dummy6; -}; - -GHashTable* g_hash_table_new (GHashFunc hash_func, - GEqualFunc key_equal_func); -GHashTable* g_hash_table_new_full (GHashFunc hash_func, - GEqualFunc key_equal_func, - GDestroyNotify key_destroy_func, - GDestroyNotify value_destroy_func); -void g_hash_table_destroy (GHashTable *hash_table); -void g_hash_table_insert (GHashTable *hash_table, - gpointer key, - gpointer value); -void g_hash_table_replace (GHashTable *hash_table, - gpointer key, - gpointer value); -void g_hash_table_add (GHashTable *hash_table, - gpointer key); -gboolean g_hash_table_remove (GHashTable *hash_table, - gconstpointer key); -void g_hash_table_remove_all (GHashTable *hash_table); -gboolean g_hash_table_steal (GHashTable *hash_table, - gconstpointer key); -void g_hash_table_steal_all (GHashTable *hash_table); -gpointer g_hash_table_lookup (GHashTable *hash_table, - gconstpointer key); -gboolean g_hash_table_contains (GHashTable *hash_table, - gconstpointer key); -gboolean g_hash_table_lookup_extended (GHashTable *hash_table, - gconstpointer lookup_key, - gpointer *orig_key, - gpointer *value); -void g_hash_table_foreach (GHashTable *hash_table, - GHFunc func, - gpointer user_data); -gpointer g_hash_table_find (GHashTable *hash_table, - GHRFunc predicate, - gpointer user_data); -guint g_hash_table_foreach_remove (GHashTable *hash_table, - GHRFunc func, - gpointer user_data); -guint g_hash_table_foreach_steal (GHashTable *hash_table, - GHRFunc func, - gpointer user_data); -guint g_hash_table_size (GHashTable *hash_table); -GList * g_hash_table_get_keys (GHashTable *hash_table); -GList * g_hash_table_get_values (GHashTable *hash_table); - -void g_hash_table_iter_init (GHashTableIter *iter, - GHashTable *hash_table); -gboolean g_hash_table_iter_next (GHashTableIter *iter, - gpointer *key, - gpointer *value); -GHashTable* g_hash_table_iter_get_hash_table (GHashTableIter *iter); -void g_hash_table_iter_remove (GHashTableIter *iter); -GLIB_AVAILABLE_IN_2_30 -void g_hash_table_iter_replace (GHashTableIter *iter, - gpointer value); -void g_hash_table_iter_steal (GHashTableIter *iter); - -GHashTable* g_hash_table_ref (GHashTable *hash_table); -void g_hash_table_unref (GHashTable *hash_table); - -#ifndef G_DISABLE_DEPRECATED -#define g_hash_table_freeze(hash_table) ((void)0) -#define g_hash_table_thaw(hash_table) ((void)0) -#endif - -/* Hash Functions - */ -gboolean g_str_equal (gconstpointer v1, - gconstpointer v2); -guint g_str_hash (gconstpointer v); - -gboolean g_int_equal (gconstpointer v1, - gconstpointer v2); -guint g_int_hash (gconstpointer v); - -gboolean g_int64_equal (gconstpointer v1, - gconstpointer v2); -guint g_int64_hash (gconstpointer v); - -gboolean g_double_equal (gconstpointer v1, - gconstpointer v2); -guint g_double_hash (gconstpointer v); - -guint g_direct_hash (gconstpointer v) G_GNUC_CONST; -gboolean g_direct_equal (gconstpointer v1, - gconstpointer v2) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_HASH_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/ghmac.h b/GstreamerHelper/x64/include/glib-2.0/glib/ghmac.h deleted file mode 100644 index d03d71f3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/ghmac.h +++ /dev/null @@ -1,80 +0,0 @@ -/* ghmac.h - secure data hashing - * - * Copyright (C) 2011 Stef Walter - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HMAC_H__ -#define __G_HMAC_H__ - -#include -#include "gchecksum.h" - -G_BEGIN_DECLS - -/** - * GHmac: - * - * An opaque structure representing a HMAC operation. - * To create a new GHmac, use g_hmac_new(). To free - * a GHmac, use g_hmac_unref(). - * - * Since: 2.30 - */ -typedef struct _GHmac GHmac; - -GLIB_AVAILABLE_IN_2_30 -GHmac * g_hmac_new (GChecksumType digest_type, - const guchar *key, - gsize key_len); -GLIB_AVAILABLE_IN_2_30 -GHmac * g_hmac_copy (const GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -GHmac * g_hmac_ref (GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -void g_hmac_unref (GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -void g_hmac_update (GHmac *hmac, - const guchar *data, - gssize length); -GLIB_AVAILABLE_IN_2_30 -const gchar * g_hmac_get_string (GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -void g_hmac_get_digest (GHmac *hmac, - guint8 *buffer, - gsize *digest_len); - -GLIB_AVAILABLE_IN_2_30 -gchar *g_compute_hmac_for_data (GChecksumType digest_type, - const guchar *key, - gsize key_len, - const guchar *data, - gsize length); -GLIB_AVAILABLE_IN_2_30 -gchar *g_compute_hmac_for_string (GChecksumType digest_type, - const guchar *key, - gsize key_len, - const gchar *str, - gssize length); - -G_END_DECLS - -#endif /* __G_CHECKSUM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/ghook.h b/GstreamerHelper/x64/include/glib-2.0/glib/ghook.h deleted file mode 100644 index e7292ead..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/ghook.h +++ /dev/null @@ -1,181 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HOOK_H__ -#define __G_HOOK_H__ - -#include - -G_BEGIN_DECLS - - -/* --- typedefs --- */ -typedef struct _GHook GHook; -typedef struct _GHookList GHookList; - -typedef gint (*GHookCompareFunc) (GHook *new_hook, - GHook *sibling); -typedef gboolean (*GHookFindFunc) (GHook *hook, - gpointer data); -typedef void (*GHookMarshaller) (GHook *hook, - gpointer marshal_data); -typedef gboolean (*GHookCheckMarshaller) (GHook *hook, - gpointer marshal_data); -typedef void (*GHookFunc) (gpointer data); -typedef gboolean (*GHookCheckFunc) (gpointer data); -typedef void (*GHookFinalizeFunc) (GHookList *hook_list, - GHook *hook); -typedef enum -{ - G_HOOK_FLAG_ACTIVE = 1 << 0, - G_HOOK_FLAG_IN_CALL = 1 << 1, - G_HOOK_FLAG_MASK = 0x0f -} GHookFlagMask; -#define G_HOOK_FLAG_USER_SHIFT (4) - - -/* --- structures --- */ -struct _GHookList -{ - gulong seq_id; - guint hook_size : 16; - guint is_setup : 1; - GHook *hooks; - gpointer dummy3; - GHookFinalizeFunc finalize_hook; - gpointer dummy[2]; -}; -struct _GHook -{ - gpointer data; - GHook *next; - GHook *prev; - guint ref_count; - gulong hook_id; - guint flags; - gpointer func; - GDestroyNotify destroy; -}; - - -/* --- macros --- */ -#define G_HOOK(hook) ((GHook*) (hook)) -#define G_HOOK_FLAGS(hook) (G_HOOK (hook)->flags) -#define G_HOOK_ACTIVE(hook) ((G_HOOK_FLAGS (hook) & \ - G_HOOK_FLAG_ACTIVE) != 0) -#define G_HOOK_IN_CALL(hook) ((G_HOOK_FLAGS (hook) & \ - G_HOOK_FLAG_IN_CALL) != 0) -#define G_HOOK_IS_VALID(hook) (G_HOOK (hook)->hook_id != 0 && \ - (G_HOOK_FLAGS (hook) & \ - G_HOOK_FLAG_ACTIVE)) -#define G_HOOK_IS_UNLINKED(hook) (G_HOOK (hook)->next == NULL && \ - G_HOOK (hook)->prev == NULL && \ - G_HOOK (hook)->hook_id == 0 && \ - G_HOOK (hook)->ref_count == 0) - - -/* --- prototypes --- */ -/* callback maintenance functions */ -void g_hook_list_init (GHookList *hook_list, - guint hook_size); -void g_hook_list_clear (GHookList *hook_list); -GHook* g_hook_alloc (GHookList *hook_list); -void g_hook_free (GHookList *hook_list, - GHook *hook); -GHook * g_hook_ref (GHookList *hook_list, - GHook *hook); -void g_hook_unref (GHookList *hook_list, - GHook *hook); -gboolean g_hook_destroy (GHookList *hook_list, - gulong hook_id); -void g_hook_destroy_link (GHookList *hook_list, - GHook *hook); -void g_hook_prepend (GHookList *hook_list, - GHook *hook); -void g_hook_insert_before (GHookList *hook_list, - GHook *sibling, - GHook *hook); -void g_hook_insert_sorted (GHookList *hook_list, - GHook *hook, - GHookCompareFunc func); -GHook* g_hook_get (GHookList *hook_list, - gulong hook_id); -GHook* g_hook_find (GHookList *hook_list, - gboolean need_valids, - GHookFindFunc func, - gpointer data); -GHook* g_hook_find_data (GHookList *hook_list, - gboolean need_valids, - gpointer data); -GHook* g_hook_find_func (GHookList *hook_list, - gboolean need_valids, - gpointer func); -GHook* g_hook_find_func_data (GHookList *hook_list, - gboolean need_valids, - gpointer func, - gpointer data); -/* return the first valid hook, and increment its reference count */ -GHook* g_hook_first_valid (GHookList *hook_list, - gboolean may_be_in_call); -/* return the next valid hook with incremented reference count, and - * decrement the reference count of the original hook - */ -GHook* g_hook_next_valid (GHookList *hook_list, - GHook *hook, - gboolean may_be_in_call); -/* GHookCompareFunc implementation to insert hooks sorted by their id */ -gint g_hook_compare_ids (GHook *new_hook, - GHook *sibling); -/* convenience macros */ -#define g_hook_append( hook_list, hook ) \ - g_hook_insert_before ((hook_list), NULL, (hook)) -/* invoke all valid hooks with the (*GHookFunc) signature. - */ -void g_hook_list_invoke (GHookList *hook_list, - gboolean may_recurse); -/* invoke all valid hooks with the (*GHookCheckFunc) signature, - * and destroy the hook if FALSE is returned. - */ -void g_hook_list_invoke_check (GHookList *hook_list, - gboolean may_recurse); -/* invoke a marshaller on all valid hooks. - */ -void g_hook_list_marshal (GHookList *hook_list, - gboolean may_recurse, - GHookMarshaller marshaller, - gpointer marshal_data); -void g_hook_list_marshal_check (GHookList *hook_list, - gboolean may_recurse, - GHookCheckMarshaller marshaller, - gpointer marshal_data); - -G_END_DECLS - -#endif /* __G_HOOK_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/ghostutils.h b/GstreamerHelper/x64/include/glib-2.0/glib/ghostutils.h deleted file mode 100644 index 0349da36..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/ghostutils.h +++ /dev/null @@ -1,40 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HOST_UTILS_H__ -#define __G_HOST_UTILS_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_hostname_is_non_ascii (const gchar *hostname); -gboolean g_hostname_is_ascii_encoded (const gchar *hostname); -gboolean g_hostname_is_ip_address (const gchar *hostname); - -gchar *g_hostname_to_ascii (const gchar *hostname); -gchar *g_hostname_to_unicode (const gchar *hostname); - -G_END_DECLS - -#endif /* __G_HOST_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gi18n-lib.h b/GstreamerHelper/x64/include/glib-2.0/glib/gi18n-lib.h deleted file mode 100644 index ca002a72..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gi18n-lib.h +++ /dev/null @@ -1,38 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_I18N_LIB_H__ -#define __G_I18N_LIB_H__ - -#include - -#include -#include - -#ifndef GETTEXT_PACKAGE -#error You must define GETTEXT_PACKAGE before including gi18n-lib.h. Did you forget to include config.h? -#endif - -#define _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String)) -#define Q_(String) g_dpgettext (GETTEXT_PACKAGE, String, 0) -#define N_(String) (String) -#define C_(Context,String) g_dpgettext (GETTEXT_PACKAGE, Context "\004" String, strlen (Context) + 1) -#define NC_(Context, String) (String) - -#endif /* __G_I18N_LIB_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gi18n.h b/GstreamerHelper/x64/include/glib-2.0/glib/gi18n.h deleted file mode 100644 index c710046e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gi18n.h +++ /dev/null @@ -1,34 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_I18N_H__ -#define __G_I18N_H__ - -#include - -#include -#include - -#define _(String) gettext (String) -#define Q_(String) g_dpgettext (NULL, String, 0) -#define N_(String) (String) -#define C_(Context,String) g_dpgettext (NULL, Context "\004" String, strlen (Context) + 1) -#define NC_(Context, String) (String) - -#endif /* __G_I18N_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/giochannel.h b/GstreamerHelper/x64/include/glib-2.0/glib/giochannel.h deleted file mode 100644 index 8d3f2d7e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/giochannel.h +++ /dev/null @@ -1,374 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IOCHANNEL_H__ -#define __G_IOCHANNEL_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/* GIOChannel - */ - -typedef struct _GIOChannel GIOChannel; -typedef struct _GIOFuncs GIOFuncs; - -typedef enum -{ - G_IO_ERROR_NONE, - G_IO_ERROR_AGAIN, - G_IO_ERROR_INVAL, - G_IO_ERROR_UNKNOWN -} GIOError; - -#define G_IO_CHANNEL_ERROR g_io_channel_error_quark() - -typedef enum -{ - /* Derived from errno */ - G_IO_CHANNEL_ERROR_FBIG, - G_IO_CHANNEL_ERROR_INVAL, - G_IO_CHANNEL_ERROR_IO, - G_IO_CHANNEL_ERROR_ISDIR, - G_IO_CHANNEL_ERROR_NOSPC, - G_IO_CHANNEL_ERROR_NXIO, - G_IO_CHANNEL_ERROR_OVERFLOW, - G_IO_CHANNEL_ERROR_PIPE, - /* Other */ - G_IO_CHANNEL_ERROR_FAILED -} GIOChannelError; - -typedef enum -{ - G_IO_STATUS_ERROR, - G_IO_STATUS_NORMAL, - G_IO_STATUS_EOF, - G_IO_STATUS_AGAIN -} GIOStatus; - -typedef enum -{ - G_SEEK_CUR, - G_SEEK_SET, - G_SEEK_END -} GSeekType; - -typedef enum /*< flags >*/ -{ - G_IO_IN GLIB_SYSDEF_POLLIN, - G_IO_OUT GLIB_SYSDEF_POLLOUT, - G_IO_PRI GLIB_SYSDEF_POLLPRI, - G_IO_ERR GLIB_SYSDEF_POLLERR, - G_IO_HUP GLIB_SYSDEF_POLLHUP, - G_IO_NVAL GLIB_SYSDEF_POLLNVAL -} GIOCondition; - -typedef enum -{ - G_IO_FLAG_APPEND = 1 << 0, - G_IO_FLAG_NONBLOCK = 1 << 1, - G_IO_FLAG_IS_READABLE = 1 << 2, /* Read only flag */ - G_IO_FLAG_IS_WRITABLE = 1 << 3, /* Read only flag */ - G_IO_FLAG_IS_SEEKABLE = 1 << 4, /* Read only flag */ - G_IO_FLAG_MASK = (1 << 5) - 1, - G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK, - G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK -} GIOFlags; - -/* Misspelling in enum in 2.29.10 and earlier */ -#define G_IO_FLAG_IS_WRITEABLE (G_IO_FLAG_IS_WRITABLE) - -struct _GIOChannel -{ - /*< private >*/ - gint ref_count; - GIOFuncs *funcs; - - gchar *encoding; - GIConv read_cd; - GIConv write_cd; - gchar *line_term; /* String which indicates the end of a line of text */ - guint line_term_len; /* So we can have null in the line term */ - - gsize buf_size; - GString *read_buf; /* Raw data from the channel */ - GString *encoded_read_buf; /* Channel data converted to UTF-8 */ - GString *write_buf; /* Data ready to be written to the file */ - gchar partial_write_buf[6]; /* UTF-8 partial characters, null terminated */ - - /* Group the flags together, immediately after partial_write_buf, to save memory */ - - guint use_buffer : 1; /* The encoding uses the buffers */ - guint do_encode : 1; /* The encoding uses the GIConv coverters */ - guint close_on_unref : 1; /* Close the channel on final unref */ - guint is_readable : 1; /* Cached GIOFlag */ - guint is_writeable : 1; /* ditto */ - guint is_seekable : 1; /* ditto */ - - gpointer reserved1; - gpointer reserved2; -}; - -typedef gboolean (*GIOFunc) (GIOChannel *source, - GIOCondition condition, - gpointer data); -struct _GIOFuncs -{ - GIOStatus (*io_read) (GIOChannel *channel, - gchar *buf, - gsize count, - gsize *bytes_read, - GError **err); - GIOStatus (*io_write) (GIOChannel *channel, - const gchar *buf, - gsize count, - gsize *bytes_written, - GError **err); - GIOStatus (*io_seek) (GIOChannel *channel, - gint64 offset, - GSeekType type, - GError **err); - GIOStatus (*io_close) (GIOChannel *channel, - GError **err); - GSource* (*io_create_watch) (GIOChannel *channel, - GIOCondition condition); - void (*io_free) (GIOChannel *channel); - GIOStatus (*io_set_flags) (GIOChannel *channel, - GIOFlags flags, - GError **err); - GIOFlags (*io_get_flags) (GIOChannel *channel); -}; - -void g_io_channel_init (GIOChannel *channel); -GIOChannel *g_io_channel_ref (GIOChannel *channel); -void g_io_channel_unref (GIOChannel *channel); - -GLIB_DEPRECATED_FOR(g_io_channel_read_for) -GIOError g_io_channel_read (GIOChannel *channel, - gchar *buf, - gsize count, - gsize *bytes_read); - -GLIB_DEPRECATED_FOR(g_io_channel_write_chars) -GIOError g_io_channel_write (GIOChannel *channel, - const gchar *buf, - gsize count, - gsize *bytes_written); - -GLIB_DEPRECATED_FOR(g_io_channel_seek_position) -GIOError g_io_channel_seek (GIOChannel *channel, - gint64 offset, - GSeekType type); - -GLIB_DEPRECATED_FOR(g_io_channel_shutdown) -void g_io_channel_close (GIOChannel *channel); - -GIOStatus g_io_channel_shutdown (GIOChannel *channel, - gboolean flush, - GError **err); -guint g_io_add_watch_full (GIOChannel *channel, - gint priority, - GIOCondition condition, - GIOFunc func, - gpointer user_data, - GDestroyNotify notify); -GSource * g_io_create_watch (GIOChannel *channel, - GIOCondition condition); -guint g_io_add_watch (GIOChannel *channel, - GIOCondition condition, - GIOFunc func, - gpointer user_data); - -/* character encoding conversion involved functions. - */ - -void g_io_channel_set_buffer_size (GIOChannel *channel, - gsize size); -gsize g_io_channel_get_buffer_size (GIOChannel *channel); -GIOCondition g_io_channel_get_buffer_condition (GIOChannel *channel); -GIOStatus g_io_channel_set_flags (GIOChannel *channel, - GIOFlags flags, - GError **error); -GIOFlags g_io_channel_get_flags (GIOChannel *channel); -void g_io_channel_set_line_term (GIOChannel *channel, - const gchar *line_term, - gint length); -const gchar * g_io_channel_get_line_term (GIOChannel *channel, - gint *length); -void g_io_channel_set_buffered (GIOChannel *channel, - gboolean buffered); -gboolean g_io_channel_get_buffered (GIOChannel *channel); -GIOStatus g_io_channel_set_encoding (GIOChannel *channel, - const gchar *encoding, - GError **error); -const gchar * g_io_channel_get_encoding (GIOChannel *channel); -void g_io_channel_set_close_on_unref (GIOChannel *channel, - gboolean do_close); -gboolean g_io_channel_get_close_on_unref (GIOChannel *channel); - - -GIOStatus g_io_channel_flush (GIOChannel *channel, - GError **error); -GIOStatus g_io_channel_read_line (GIOChannel *channel, - gchar **str_return, - gsize *length, - gsize *terminator_pos, - GError **error); -GIOStatus g_io_channel_read_line_string (GIOChannel *channel, - GString *buffer, - gsize *terminator_pos, - GError **error); -GIOStatus g_io_channel_read_to_end (GIOChannel *channel, - gchar **str_return, - gsize *length, - GError **error); -GIOStatus g_io_channel_read_chars (GIOChannel *channel, - gchar *buf, - gsize count, - gsize *bytes_read, - GError **error); -GIOStatus g_io_channel_read_unichar (GIOChannel *channel, - gunichar *thechar, - GError **error); -GIOStatus g_io_channel_write_chars (GIOChannel *channel, - const gchar *buf, - gssize count, - gsize *bytes_written, - GError **error); -GIOStatus g_io_channel_write_unichar (GIOChannel *channel, - gunichar thechar, - GError **error); -GIOStatus g_io_channel_seek_position (GIOChannel *channel, - gint64 offset, - GSeekType type, - GError **error); -#ifdef G_OS_WIN32 -#define g_io_channel_new_file g_io_channel_new_file_utf8 -#endif - -GIOChannel* g_io_channel_new_file (const gchar *filename, - const gchar *mode, - GError **error); - -/* Error handling */ - -GQuark g_io_channel_error_quark (void); -GIOChannelError g_io_channel_error_from_errno (gint en); - -/* On Unix, IO channels created with this function for any file - * descriptor or socket. - * - * On Win32, this can be used either for files opened with the MSVCRT - * (the Microsoft run-time C library) _open() or _pipe, including file - * descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr), - * or for Winsock SOCKETs. If the parameter is a legal file - * descriptor, it is assumed to be such, otherwise it should be a - * SOCKET. This relies on SOCKETs and file descriptors not - * overlapping. If you want to be certain, call either - * g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket() - * instead as appropriate. - * - * The term file descriptor as used in the context of Win32 refers to - * the emulated Unix-like file descriptors MSVCRT provides. The native - * corresponding concept is file HANDLE. There isn't as of yet a way to - * get GIOChannels for Win32 file HANDLEs. - */ -GIOChannel* g_io_channel_unix_new (int fd); -gint g_io_channel_unix_get_fd (GIOChannel *channel); - - -/* Hook for GClosure / GSource integration. Don't touch */ -GLIB_VAR GSourceFuncs g_io_watch_funcs; - -#ifdef G_OS_WIN32 - -/* You can use this "pseudo file descriptor" in a GPollFD to add - * polling for Windows messages. GTK applications should not do that. - */ - -#define G_WIN32_MSG_HANDLE 19981206 - -/* Use this to get a GPollFD from a GIOChannel, so that you can call - * g_io_channel_win32_poll(). After calling this you should only use - * g_io_channel_read() to read from the GIOChannel, i.e. never read() - * from the underlying file descriptor. For SOCKETs, it is possible to call - * recv(). - */ -void g_io_channel_win32_make_pollfd (GIOChannel *channel, - GIOCondition condition, - GPollFD *fd); - -/* This can be used to wait a until at least one of the channels is readable. - * On Unix you would do a select() on the file descriptors of the channels. - */ -gint g_io_channel_win32_poll (GPollFD *fds, - gint n_fds, - gint timeout_); - -/* Create an IO channel for Windows messages for window handle hwnd. */ -#if GLIB_SIZEOF_VOID_P == 8 -/* We use gsize here so that it is still an integer type and not a - * pointer, like the guint in the traditional prototype. We can't use - * intptr_t as that is not portable enough. - */ -GIOChannel *g_io_channel_win32_new_messages (gsize hwnd); -#else -GIOChannel *g_io_channel_win32_new_messages (guint hwnd); -#endif - -/* Create an IO channel for C runtime (emulated Unix-like) file - * descriptors. After calling g_io_add_watch() on a IO channel - * returned by this function, you shouldn't call read() on the file - * descriptor. This is because adding polling for a file descriptor is - * implemented on Win32 by starting a thread that sits blocked in a - * read() from the file descriptor most of the time. All reads from - * the file descriptor should be done by this internal GLib - * thread. Your code should call only g_io_channel_read_chars(). - */ -GIOChannel* g_io_channel_win32_new_fd (gint fd); - -/* Get the C runtime file descriptor of a channel. */ -gint g_io_channel_win32_get_fd (GIOChannel *channel); - -/* Create an IO channel for a winsock socket. The parameter should be - * a SOCKET. Contrary to IO channels for file descriptors (on *Win32), - * you can use normal recv() or recvfrom() on sockets even if GLib - * is polling them. - */ -GIOChannel *g_io_channel_win32_new_socket (gint socket); - -#endif - -G_END_DECLS - -#endif /* __G_IOCHANNEL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gkeyfile.h b/GstreamerHelper/x64/include/glib-2.0/glib/gkeyfile.h deleted file mode 100644 index 998bb7a7..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gkeyfile.h +++ /dev/null @@ -1,268 +0,0 @@ -/* gkeyfile.h - desktop entry file parser - * - * Copyright 2004 Red Hat, Inc. - * - * Ray Strode - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_KEY_FILE_H__ -#define __G_KEY_FILE_H__ - -#include - -G_BEGIN_DECLS - -typedef enum -{ - G_KEY_FILE_ERROR_UNKNOWN_ENCODING, - G_KEY_FILE_ERROR_PARSE, - G_KEY_FILE_ERROR_NOT_FOUND, - G_KEY_FILE_ERROR_KEY_NOT_FOUND, - G_KEY_FILE_ERROR_GROUP_NOT_FOUND, - G_KEY_FILE_ERROR_INVALID_VALUE -} GKeyFileError; - -#define G_KEY_FILE_ERROR g_key_file_error_quark() - -GQuark g_key_file_error_quark (void); - -typedef struct _GKeyFile GKeyFile; - -typedef enum -{ - G_KEY_FILE_NONE = 0, - G_KEY_FILE_KEEP_COMMENTS = 1 << 0, - G_KEY_FILE_KEEP_TRANSLATIONS = 1 << 1 -} GKeyFileFlags; - -GKeyFile *g_key_file_new (void); -GKeyFile *g_key_file_ref (GKeyFile *key_file); -void g_key_file_unref (GKeyFile *key_file); -void g_key_file_free (GKeyFile *key_file); -void g_key_file_set_list_separator (GKeyFile *key_file, - gchar separator); -gboolean g_key_file_load_from_file (GKeyFile *key_file, - const gchar *file, - GKeyFileFlags flags, - GError **error); -gboolean g_key_file_load_from_data (GKeyFile *key_file, - const gchar *data, - gsize length, - GKeyFileFlags flags, - GError **error); -gboolean g_key_file_load_from_dirs (GKeyFile *key_file, - const gchar *file, - const gchar **search_dirs, - gchar **full_path, - GKeyFileFlags flags, - GError **error); -gboolean g_key_file_load_from_data_dirs (GKeyFile *key_file, - const gchar *file, - gchar **full_path, - GKeyFileFlags flags, - GError **error); -gchar *g_key_file_to_data (GKeyFile *key_file, - gsize *length, - GError **error) G_GNUC_MALLOC; -gchar *g_key_file_get_start_group (GKeyFile *key_file) G_GNUC_MALLOC; -gchar **g_key_file_get_groups (GKeyFile *key_file, - gsize *length) G_GNUC_MALLOC; -gchar **g_key_file_get_keys (GKeyFile *key_file, - const gchar *group_name, - gsize *length, - GError **error) G_GNUC_MALLOC; -gboolean g_key_file_has_group (GKeyFile *key_file, - const gchar *group_name); -gboolean g_key_file_has_key (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -gchar *g_key_file_get_value (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_value (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *value); -gchar *g_key_file_get_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *string); -gchar *g_key_file_get_locale_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_locale_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - const gchar *string); -gboolean g_key_file_get_boolean (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_boolean (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gboolean value); -gint g_key_file_get_integer (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_integer (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gint value); -gint64 g_key_file_get_int64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_int64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gint64 value); -guint64 g_key_file_get_uint64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_uint64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - guint64 value); -gdouble g_key_file_get_double (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_double (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gdouble value); -gchar **g_key_file_get_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar * const list[], - gsize length); -gchar **g_key_file_get_locale_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_locale_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - const gchar * const list[], - gsize length); -gboolean *g_key_file_get_boolean_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_boolean_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gboolean list[], - gsize length); -gint *g_key_file_get_integer_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_double_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gdouble list[], - gsize length); -gdouble *g_key_file_get_double_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_integer_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gint list[], - gsize length); -gboolean g_key_file_set_comment (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *comment, - GError **error); -gchar *g_key_file_get_comment (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) G_GNUC_MALLOC; - -gboolean g_key_file_remove_comment (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -gboolean g_key_file_remove_key (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -gboolean g_key_file_remove_group (GKeyFile *key_file, - const gchar *group_name, - GError **error); - -/* Defines for handling freedesktop.org Desktop files */ -#define G_KEY_FILE_DESKTOP_GROUP "Desktop Entry" - -#define G_KEY_FILE_DESKTOP_KEY_TYPE "Type" -#define G_KEY_FILE_DESKTOP_KEY_VERSION "Version" -#define G_KEY_FILE_DESKTOP_KEY_NAME "Name" -#define G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME "GenericName" -#define G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY "NoDisplay" -#define G_KEY_FILE_DESKTOP_KEY_COMMENT "Comment" -#define G_KEY_FILE_DESKTOP_KEY_ICON "Icon" -#define G_KEY_FILE_DESKTOP_KEY_HIDDEN "Hidden" -#define G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN "OnlyShowIn" -#define G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN "NotShowIn" -#define G_KEY_FILE_DESKTOP_KEY_TRY_EXEC "TryExec" -#define G_KEY_FILE_DESKTOP_KEY_EXEC "Exec" -#define G_KEY_FILE_DESKTOP_KEY_PATH "Path" -#define G_KEY_FILE_DESKTOP_KEY_TERMINAL "Terminal" -#define G_KEY_FILE_DESKTOP_KEY_MIME_TYPE "MimeType" -#define G_KEY_FILE_DESKTOP_KEY_CATEGORIES "Categories" -#define G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY "StartupNotify" -#define G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS "StartupWMClass" -#define G_KEY_FILE_DESKTOP_KEY_URL "URL" - -#define G_KEY_FILE_DESKTOP_TYPE_APPLICATION "Application" -#define G_KEY_FILE_DESKTOP_TYPE_LINK "Link" -#define G_KEY_FILE_DESKTOP_TYPE_DIRECTORY "Directory" - -G_END_DECLS - -#endif /* __G_KEY_FILE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/glist.h b/GstreamerHelper/x64/include/glib-2.0/glib/glist.h deleted file mode 100644 index 44cfcc01..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/glist.h +++ /dev/null @@ -1,124 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_LIST_H__ -#define __G_LIST_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GList GList; - -struct _GList -{ - gpointer data; - GList *next; - GList *prev; -}; - -/* Doubly linked lists - */ -GList* g_list_alloc (void) G_GNUC_WARN_UNUSED_RESULT; -void g_list_free (GList *list); -void g_list_free_1 (GList *list); -#define g_list_free1 g_list_free_1 -void g_list_free_full (GList *list, - GDestroyNotify free_func); -GList* g_list_append (GList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_prepend (GList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert (GList *list, - gpointer data, - gint position) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert_sorted (GList *list, - gpointer data, - GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert_sorted_with_data (GList *list, - gpointer data, - GCompareDataFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert_before (GList *list, - GList *sibling, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_concat (GList *list1, - GList *list2) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_remove (GList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_remove_all (GList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_remove_link (GList *list, - GList *llink) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_delete_link (GList *list, - GList *link_) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_reverse (GList *list) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_copy (GList *list) G_GNUC_WARN_UNUSED_RESULT; - -GLIB_AVAILABLE_IN_2_34 -GList* g_list_copy_deep (GList *list, - GCopyFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; - -GList* g_list_nth (GList *list, - guint n); -GList* g_list_nth_prev (GList *list, - guint n); -GList* g_list_find (GList *list, - gconstpointer data); -GList* g_list_find_custom (GList *list, - gconstpointer data, - GCompareFunc func); -gint g_list_position (GList *list, - GList *llink); -gint g_list_index (GList *list, - gconstpointer data); -GList* g_list_last (GList *list); -GList* g_list_first (GList *list); -guint g_list_length (GList *list); -void g_list_foreach (GList *list, - GFunc func, - gpointer user_data); -GList* g_list_sort (GList *list, - GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_sort_with_data (GList *list, - GCompareDataFunc compare_func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_list_nth_data (GList *list, - guint n); - - -#define g_list_previous(list) ((list) ? (((GList *)(list))->prev) : NULL) -#define g_list_next(list) ((list) ? (((GList *)(list))->next) : NULL) - -G_END_DECLS - -#endif /* __G_LIST_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gmacros.h b/GstreamerHelper/x64/include/glib-2.0/glib/gmacros.h deleted file mode 100644 index 4ad57da3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gmacros.h +++ /dev/null @@ -1,343 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -/* This file must not include any other glib header file and must thus - * not refer to variables from glibconfig.h - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MACROS_H__ -#define __G_MACROS_H__ - -/* We include stddef.h to get the system's definition of NULL - */ -#include - -/* Here we provide G_GNUC_EXTENSION as an alias for __extension__, - * where this is valid. This allows for warningless compilation of - * "long long" types even in the presence of '-ansi -pedantic'. - */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) -# define G_GNUC_EXTENSION __extension__ -#else -# define G_GNUC_EXTENSION -#endif - -/* Provide macros to feature the GCC function attribute. - */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -#define G_GNUC_PURE \ - __attribute__((__pure__)) -#define G_GNUC_MALLOC \ - __attribute__((__malloc__)) -#else -#define G_GNUC_PURE -#define G_GNUC_MALLOC -#endif - -#if __GNUC__ >= 4 -#define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) -#else -#define G_GNUC_NULL_TERMINATED -#endif - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) -#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) -#define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y))) -#else -#define G_GNUC_ALLOC_SIZE(x) -#define G_GNUC_ALLOC_SIZE2(x,y) -#endif - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -#define G_GNUC_PRINTF( format_idx, arg_idx ) \ - __attribute__((__format__ (__printf__, format_idx, arg_idx))) -#define G_GNUC_SCANF( format_idx, arg_idx ) \ - __attribute__((__format__ (__scanf__, format_idx, arg_idx))) -#define G_GNUC_FORMAT( arg_idx ) \ - __attribute__((__format_arg__ (arg_idx))) -#define G_GNUC_NORETURN \ - __attribute__((__noreturn__)) -#define G_GNUC_CONST \ - __attribute__((__const__)) -#define G_GNUC_UNUSED \ - __attribute__((__unused__)) -#define G_GNUC_NO_INSTRUMENT \ - __attribute__((__no_instrument_function__)) -#else /* !__GNUC__ */ -#define G_GNUC_PRINTF( format_idx, arg_idx ) -#define G_GNUC_SCANF( format_idx, arg_idx ) -#define G_GNUC_FORMAT( arg_idx ) -#define G_GNUC_NORETURN -#define G_GNUC_CONST -#define G_GNUC_UNUSED -#define G_GNUC_NO_INSTRUMENT -#endif /* !__GNUC__ */ - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define G_GNUC_DEPRECATED \ - __attribute__((__deprecated__)) -#else -#define G_GNUC_DEPRECATED -#endif /* __GNUC__ */ - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define G_GNUC_DEPRECATED_FOR(f) \ - __attribute__((deprecated("Use " #f " instead"))) -#else -#define G_GNUC_DEPRECATED_FOR(f) G_GNUC_DEPRECATED -#endif /* __GNUC__ */ - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) -#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#define G_GNUC_END_IGNORE_DEPRECATIONS \ - _Pragma ("GCC diagnostic pop") -#else -#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS -#define G_GNUC_END_IGNORE_DEPRECATIONS -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) -# define G_GNUC_MAY_ALIAS __attribute__((may_alias)) -#else -# define G_GNUC_MAY_ALIAS -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -#define G_GNUC_WARN_UNUSED_RESULT \ - __attribute__((warn_unused_result)) -#else -#define G_GNUC_WARN_UNUSED_RESULT -#endif /* __GNUC__ */ - -#ifndef G_DISABLE_DEPRECATED -/* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with - * macros, so we can refer to them as strings unconditionally. - * usage not-recommended since gcc-3.0 - */ -#if defined (__GNUC__) && (__GNUC__ < 3) -#define G_GNUC_FUNCTION __FUNCTION__ -#define G_GNUC_PRETTY_FUNCTION __PRETTY_FUNCTION__ -#else /* !__GNUC__ */ -#define G_GNUC_FUNCTION "" -#define G_GNUC_PRETTY_FUNCTION "" -#endif /* !__GNUC__ */ -#endif /* !G_DISABLE_DEPRECATED */ - -#define G_STRINGIFY(macro_or_string) G_STRINGIFY_ARG (macro_or_string) -#define G_STRINGIFY_ARG(contents) #contents - -#ifndef __GI_SCANNER__ /* The static assert macro really confuses the introspection parser */ -#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2 -#define G_PASTE(identifier1,identifier2) G_PASTE_ARGS (identifier1, identifier2) -#ifdef __COUNTER__ -#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] -#else -#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __LINE__)[(expr) ? 1 : -1] -#endif -#define G_STATIC_ASSERT_EXPR(expr) ((void) sizeof (char[(expr) ? 1 : -1])) -#endif - -/* Provide a string identifying the current code position */ -#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(__cplusplus) -# define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__) ":" __PRETTY_FUNCTION__ "()" -#else -# define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__) -#endif - -/* Provide a string identifying the current function, non-concatenatable */ -#if defined (__GNUC__) -# define G_STRFUNC ((const char*) (__PRETTY_FUNCTION__)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 19901L -# define G_STRFUNC ((const char*) (__func__)) -#elif defined(_MSC_VER) && (_MSC_VER > 1300) -# define G_STRFUNC ((const char*) (__FUNCTION__)) -#else -# define G_STRFUNC ((const char*) ("???")) -#endif - -/* Guard C code in headers, while including them from C++ */ -#ifdef __cplusplus -# define G_BEGIN_DECLS extern "C" { -# define G_END_DECLS } -#else -# define G_BEGIN_DECLS -# define G_END_DECLS -#endif - -/* Provide definitions for some commonly used macros. - * Some of them are only provided if they haven't already - * been defined. It is assumed that if they are already - * defined then the current definition is correct. - */ -#ifndef NULL -# ifdef __cplusplus -# define NULL (0L) -# else /* !__cplusplus */ -# define NULL ((void*) 0) -# endif /* !__cplusplus */ -#endif - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#undef MAX -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - -#undef MIN -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) - -#undef ABS -#define ABS(a) (((a) < 0) ? -(a) : (a)) - -#undef CLAMP -#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) - -/* Count the number of elements in an array. The array must be defined - * as such; using this with a dynamically allocated array will give - * incorrect results. - */ -#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) - -/* Macros by analogy to GINT_TO_POINTER, GPOINTER_TO_INT - */ -#define GPOINTER_TO_SIZE(p) ((gsize) (p)) -#define GSIZE_TO_POINTER(s) ((gpointer) (gsize) (s)) - -/* Provide convenience macros for handling structure - * fields through their offsets. - */ - -#if defined(__GNUC__) && __GNUC__ >= 4 -# define G_STRUCT_OFFSET(struct_type, member) \ - ((glong) offsetof (struct_type, member)) -#else -# define G_STRUCT_OFFSET(struct_type, member) \ - ((glong) ((guint8*) &((struct_type*) 0)->member)) -#endif - -#define G_STRUCT_MEMBER_P(struct_p, struct_offset) \ - ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset))) -#define G_STRUCT_MEMBER(member_type, struct_p, struct_offset) \ - (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset))) - -/* Provide simple macro statement wrappers: - * G_STMT_START { statements; } G_STMT_END; - * This can be used as a single statement, like: - * if (x) G_STMT_START { ... } G_STMT_END; else ... - * This intentionally does not use compiler extensions like GCC's '({...})' to - * avoid portability issue or side effects when compiled with different compilers. - */ -#if !(defined (G_STMT_START) && defined (G_STMT_END)) -# define G_STMT_START do -# define G_STMT_END while (0) -#endif - -/* Deprecated -- do not use. */ -#ifndef G_DISABLE_DEPRECATED -#ifdef G_DISABLE_CONST_RETURNS -#define G_CONST_RETURN -#else -#define G_CONST_RETURN const -#endif -#endif - -/* - * The G_LIKELY and G_UNLIKELY macros let the programmer give hints to - * the compiler about the expected result of an expression. Some compilers - * can use this information for optimizations. - * - * The _G_BOOLEAN_EXPR macro is intended to trigger a gcc warning when - * putting assignments in g_return_if_fail (). - */ -#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) -#define _G_BOOLEAN_EXPR(expr) \ - G_GNUC_EXTENSION ({ \ - int _g_boolean_var_; \ - if (expr) \ - _g_boolean_var_ = 1; \ - else \ - _g_boolean_var_ = 0; \ - _g_boolean_var_; \ -}) -#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1)) -#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0)) -#else -#define G_LIKELY(expr) (expr) -#define G_UNLIKELY(expr) (expr) -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define G_DEPRECATED __attribute__((__deprecated__)) -#elif defined(_MSC_VER) && (_MSC_VER >= 1300) -#define G_DEPRECATED __declspec(deprecated) -#else -#define G_DEPRECATED -#endif - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define G_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead"))) -#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320) -#define G_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead")) -#else -#define G_DEPRECATED_FOR(f) G_DEPRECATED -#endif - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define G_UNAVAILABLE(maj,min) __attribute__((deprecated("Not available before " #maj "." #min))) -#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320) -#define G_UNAVAILABLE(maj,min) __declspec(deprecated("is not available before " #maj "." #min)) -#else -#define G_UNAVAILABLE(maj,min) -#endif - -/* These macros are used to mark deprecated functions in GLib headers, - * and thus have to be exposed in installed headers. But please - * do *not* use them in other projects. Instead, use G_DEPRECATED - * or define your own wrappers around it. - */ - -#ifdef GLIB_DISABLE_DEPRECATION_WARNINGS -#define GLIB_DEPRECATED -#define GLIB_DEPRECATED_FOR(f) -#define GLIB_UNAVAILABLE(maj,min) -#else -#define GLIB_DEPRECATED G_DEPRECATED -#define GLIB_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) -#define GLIB_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) -#endif - -#endif /* __G_MACROS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gmain.h b/GstreamerHelper/x64/include/glib-2.0/glib/gmain.h deleted file mode 100644 index 4d4d5043..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gmain.h +++ /dev/null @@ -1,493 +0,0 @@ -/* gmain.h - the GLib Main loop - * Copyright (C) 1998-2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MAIN_H__ -#define __G_MAIN_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GMainContext: - * - * The GMainContext struct is an opaque data - * type representing a set of sources to be handled in a main loop. - */ -typedef struct _GMainContext GMainContext; - -/** - * GMainLoop: - * - * The GMainLoop struct is an opaque data type - * representing the main event loop of a GLib or GTK+ application. - */ -typedef struct _GMainLoop GMainLoop; - -/** - * GSource: - * - * The GSource struct is an opaque data type - * representing an event source. - */ -typedef struct _GSource GSource; -typedef struct _GSourcePrivate GSourcePrivate; - -/** - * GSourceCallbackFuncs: - * @ref: Called when a reference is added to the callback object - * @unref: Called when a reference to the callback object is dropped - * @get: Called to extract the callback function and data from the - * callback object. - - * The GSourceCallbackFuncs struct contains - * functions for managing callback objects. - */ -typedef struct _GSourceCallbackFuncs GSourceCallbackFuncs; - -/** - * GSourceFuncs: - * @prepare: Called before all the file descriptors are polled. If the - * source can determine that it is ready here (without waiting for the - * results of the poll() call) it should return %TRUE. It can also return - * a @timeout_ value which should be the maximum timeout (in milliseconds) - * which should be passed to the poll() call. The actual timeout used will - * be -1 if all sources returned -1, or it will be the minimum of all the - * @timeout_ values returned which were >= 0. - * @check: Called after all the file descriptors are polled. The source - * should return %TRUE if it is ready to be dispatched. Note that some - * time may have passed since the previous prepare function was called, - * so the source should be checked again here. - * @dispatch: Called to dispatch the event source, after it has returned - * %TRUE in either its @prepare or its @check function. The @dispatch - * function is passed in a callback function and data. The callback - * function may be %NULL if the source was never connected to a callback - * using g_source_set_callback(). The @dispatch function should call the - * callback function with @user_data and whatever additional parameters - * are needed for this type of event source. - * @finalize: Called when the source is finalized. - * - * The GSourceFuncs struct contains a table of - * functions used to handle event sources in a generic manner. - * - * For idle sources, the prepare and check functions always return %TRUE - * to indicate that the source is always ready to be processed. The prepare - * function also returns a timeout value of 0 to ensure that the poll() call - * doesn't block (since that would be time wasted which could have been spent - * running the idle function). - * - * For timeout sources, the prepare and check functions both return %TRUE - * if the timeout interval has expired. The prepare function also returns - * a timeout value to ensure that the poll() call doesn't block too long - * and miss the next timeout. - * - * For file descriptor sources, the prepare function typically returns %FALSE, - * since it must wait until poll() has been called before it knows whether - * any events need to be processed. It sets the returned timeout to -1 to - * indicate that it doesn't mind how long the poll() call blocks. In the - * check function, it tests the results of the poll() call to see if the - * required condition has been met, and returns %TRUE if so. - */ -typedef struct _GSourceFuncs GSourceFuncs; - -/** - * GPid: - * - * A type which is used to hold a process identification. - * - * On UNIX, processes are identified by a process id (an integer), - * while Windows uses process handles (which are pointers). - * - * GPid is used in GLib only for descendant processes spawned with - * the g_spawn functions. - */ - -/** - * GSourceFunc: - * @user_data: data passed to the function, set when the source was - * created with one of the above functions - * - * Specifies the type of function passed to g_timeout_add(), - * g_timeout_add_full(), g_idle_add(), and g_idle_add_full(). - * - * Returns: %FALSE if the source should be removed - */ -typedef gboolean (*GSourceFunc) (gpointer user_data); - -/** - * GChildWatchFunc: - * @pid: the process id of the child process - * @status: Status information about the child process, encoded - * in a platform-specific manner - * @user_data: user data passed to g_child_watch_add() - * - * Prototype of a #GChildWatchSource callback, called when a child - * process has exited. To interpret @status, see the documentation - * for g_spawn_check_exit_status(). - */ -typedef void (*GChildWatchFunc) (GPid pid, - gint status, - gpointer user_data); -struct _GSource -{ - /*< private >*/ - gpointer callback_data; - GSourceCallbackFuncs *callback_funcs; - - GSourceFuncs *source_funcs; - guint ref_count; - - GMainContext *context; - - gint priority; - guint flags; - guint source_id; - - GSList *poll_fds; - - GSource *prev; - GSource *next; - - char *name; - - GSourcePrivate *priv; -}; - -struct _GSourceCallbackFuncs -{ - void (*ref) (gpointer cb_data); - void (*unref) (gpointer cb_data); - void (*get) (gpointer cb_data, - GSource *source, - GSourceFunc *func, - gpointer *data); -}; - -/** - * GSourceDummyMarshal: - * - * This is just a placeholder for #GClosureMarshal, - * which cannot be used here for dependency reasons. - */ -typedef void (*GSourceDummyMarshal) (void); - -struct _GSourceFuncs -{ - gboolean (*prepare) (GSource *source, - gint *timeout_); - gboolean (*check) (GSource *source); - gboolean (*dispatch) (GSource *source, - GSourceFunc callback, - gpointer user_data); - void (*finalize) (GSource *source); /* Can be NULL */ - - /*< private >*/ - /* For use by g_source_set_closure */ - GSourceFunc closure_callback; - GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */ -}; - -/* Standard priorities */ - -/** - * G_PRIORITY_HIGH: - * - * Use this for high priority event sources. - * - * It is not used within GLib or GTK+. - */ -#define G_PRIORITY_HIGH -100 - -/** - * G_PRIORITY_DEFAULT: - * - * Use this for default priority event sources. - * - * In GLib this priority is used when adding timeout functions - * with g_timeout_add(). In GDK this priority is used for events - * from the X server. - */ -#define G_PRIORITY_DEFAULT 0 - -/** - * G_PRIORITY_HIGH_IDLE: - * - * Use this for high priority idle functions. - * - * GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, - * and #G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is - * done to ensure that any pending resizes are processed before any - * pending redraws, so that widgets are not redrawn twice unnecessarily.) - */ -#define G_PRIORITY_HIGH_IDLE 100 - -/** - * G_PRIORITY_DEFAULT_IDLE: - * - * Use this for default priority idle functions. - * - * In GLib this priority is used when adding idle functions with - * g_idle_add(). - */ -#define G_PRIORITY_DEFAULT_IDLE 200 - -/** - * G_PRIORITY_LOW: - * - * Use this for very low priority background tasks. - * - * It is not used within GLib or GTK+. - */ -#define G_PRIORITY_LOW 300 - -/** - * G_SOURCE_REMOVE: - * - * Use this macro as the return value of a #GSourceFunc to remove - * the #GSource from the main loop. - * - * Since: 2.32 - */ -#define G_SOURCE_REMOVE FALSE - -/** - * G_SOURCE_CONTINUE: - * - * Use this macro as the return value of a #GSourceFunc to leave - * the #GSource in the main loop. - * - * Since: 2.32 - */ -#define G_SOURCE_CONTINUE TRUE - -/* GMainContext: */ - -GMainContext *g_main_context_new (void); -GMainContext *g_main_context_ref (GMainContext *context); -void g_main_context_unref (GMainContext *context); -GMainContext *g_main_context_default (void); - -gboolean g_main_context_iteration (GMainContext *context, - gboolean may_block); -gboolean g_main_context_pending (GMainContext *context); - -/* For implementation of legacy interfaces - */ -GSource *g_main_context_find_source_by_id (GMainContext *context, - guint source_id); -GSource *g_main_context_find_source_by_user_data (GMainContext *context, - gpointer user_data); -GSource *g_main_context_find_source_by_funcs_user_data (GMainContext *context, - GSourceFuncs *funcs, - gpointer user_data); - -/* Low level functions for implementing custom main loops. - */ -void g_main_context_wakeup (GMainContext *context); -gboolean g_main_context_acquire (GMainContext *context); -void g_main_context_release (GMainContext *context); -gboolean g_main_context_is_owner (GMainContext *context); -gboolean g_main_context_wait (GMainContext *context, - GCond *cond, - GMutex *mutex); - -gboolean g_main_context_prepare (GMainContext *context, - gint *priority); -gint g_main_context_query (GMainContext *context, - gint max_priority, - gint *timeout_, - GPollFD *fds, - gint n_fds); -gint g_main_context_check (GMainContext *context, - gint max_priority, - GPollFD *fds, - gint n_fds); -void g_main_context_dispatch (GMainContext *context); - -void g_main_context_set_poll_func (GMainContext *context, - GPollFunc func); -GPollFunc g_main_context_get_poll_func (GMainContext *context); - -/* Low level functions for use by source implementations - */ -void g_main_context_add_poll (GMainContext *context, - GPollFD *fd, - gint priority); -void g_main_context_remove_poll (GMainContext *context, - GPollFD *fd); - -gint g_main_depth (void); -GSource *g_main_current_source (void); - -/* GMainContexts for other threads - */ -void g_main_context_push_thread_default (GMainContext *context); -void g_main_context_pop_thread_default (GMainContext *context); -GMainContext *g_main_context_get_thread_default (void); -GMainContext *g_main_context_ref_thread_default (void); - -/* GMainLoop: */ - -GMainLoop *g_main_loop_new (GMainContext *context, - gboolean is_running); -void g_main_loop_run (GMainLoop *loop); -void g_main_loop_quit (GMainLoop *loop); -GMainLoop *g_main_loop_ref (GMainLoop *loop); -void g_main_loop_unref (GMainLoop *loop); -gboolean g_main_loop_is_running (GMainLoop *loop); -GMainContext *g_main_loop_get_context (GMainLoop *loop); - -/* GSource: */ - -GSource *g_source_new (GSourceFuncs *source_funcs, - guint struct_size); -GSource *g_source_ref (GSource *source); -void g_source_unref (GSource *source); - -guint g_source_attach (GSource *source, - GMainContext *context); -void g_source_destroy (GSource *source); - -void g_source_set_priority (GSource *source, - gint priority); -gint g_source_get_priority (GSource *source); -void g_source_set_can_recurse (GSource *source, - gboolean can_recurse); -gboolean g_source_get_can_recurse (GSource *source); -guint g_source_get_id (GSource *source); - -GMainContext *g_source_get_context (GSource *source); - -void g_source_set_callback (GSource *source, - GSourceFunc func, - gpointer data, - GDestroyNotify notify); - -void g_source_set_funcs (GSource *source, - GSourceFuncs *funcs); -gboolean g_source_is_destroyed (GSource *source); - -void g_source_set_name (GSource *source, - const char *name); -const char * g_source_get_name (GSource *source); -void g_source_set_name_by_id (guint tag, - const char *name); - - -/* Used to implement g_source_connect_closure and internally*/ -void g_source_set_callback_indirect (GSource *source, - gpointer callback_data, - GSourceCallbackFuncs *callback_funcs); - -void g_source_add_poll (GSource *source, - GPollFD *fd); -void g_source_remove_poll (GSource *source, - GPollFD *fd); - -void g_source_add_child_source (GSource *source, - GSource *child_source); -void g_source_remove_child_source (GSource *source, - GSource *child_source); - -GLIB_DEPRECATED_IN_2_28_FOR(g_source_get_time) -void g_source_get_current_time (GSource *source, - GTimeVal *timeval); - -gint64 g_source_get_time (GSource *source); - - /* void g_source_connect_closure (GSource *source, - GClosure *closure); - */ - -/* Specific source types - */ -GSource *g_idle_source_new (void); -GSource *g_child_watch_source_new (GPid pid); -GSource *g_timeout_source_new (guint interval); -GSource *g_timeout_source_new_seconds (guint interval); - -/* Miscellaneous functions - */ -void g_get_current_time (GTimeVal *result); -gint64 g_get_monotonic_time (void); -gint64 g_get_real_time (void); - - -/* Source manipulation by ID */ -gboolean g_source_remove (guint tag); -gboolean g_source_remove_by_user_data (gpointer user_data); -gboolean g_source_remove_by_funcs_user_data (GSourceFuncs *funcs, - gpointer user_data); - -/* Idles, child watchers and timeouts */ -guint g_timeout_add_full (gint priority, - guint interval, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -guint g_timeout_add (guint interval, - GSourceFunc function, - gpointer data); -guint g_timeout_add_seconds_full (gint priority, - guint interval, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -guint g_timeout_add_seconds (guint interval, - GSourceFunc function, - gpointer data); -guint g_child_watch_add_full (gint priority, - GPid pid, - GChildWatchFunc function, - gpointer data, - GDestroyNotify notify); -guint g_child_watch_add (GPid pid, - GChildWatchFunc function, - gpointer data); -guint g_idle_add (GSourceFunc function, - gpointer data); -guint g_idle_add_full (gint priority, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -gboolean g_idle_remove_by_data (gpointer data); - -void g_main_context_invoke_full (GMainContext *context, - gint priority, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -void g_main_context_invoke (GMainContext *context, - GSourceFunc function, - gpointer data); - -/* Hook for GClosure / GSource integration. Don't touch */ -GLIB_VAR GSourceFuncs g_timeout_funcs; -GLIB_VAR GSourceFuncs g_child_watch_funcs; -GLIB_VAR GSourceFuncs g_idle_funcs; - -G_END_DECLS - -#endif /* __G_MAIN_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gmappedfile.h b/GstreamerHelper/x64/include/glib-2.0/glib/gmappedfile.h deleted file mode 100644 index cf122e41..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gmappedfile.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * gmappedfile.h: Simplified wrapper around the mmap function - * - * Copyright 2005 Matthias Clasen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MAPPED_FILE_H__ -#define __G_MAPPED_FILE_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GMappedFile GMappedFile; - -GMappedFile *g_mapped_file_new (const gchar *filename, - gboolean writable, - GError **error) G_GNUC_MALLOC; -GMappedFile *g_mapped_file_new_from_fd (gint fd, - gboolean writable, - GError **error) G_GNUC_MALLOC; -gsize g_mapped_file_get_length (GMappedFile *file); -gchar *g_mapped_file_get_contents (GMappedFile *file); -GLIB_AVAILABLE_IN_2_34 -GBytes * g_mapped_file_get_bytes (GMappedFile *file); -GMappedFile *g_mapped_file_ref (GMappedFile *file); -void g_mapped_file_unref (GMappedFile *file); - -GLIB_DEPRECATED_FOR(g_mapped_file_unref) -void g_mapped_file_free (GMappedFile *file); - -G_END_DECLS - -#endif /* __G_MAPPED_FILE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gmarkup.h b/GstreamerHelper/x64/include/glib-2.0/glib/gmarkup.h deleted file mode 100644 index a8865da9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gmarkup.h +++ /dev/null @@ -1,238 +0,0 @@ -/* gmarkup.h - Simple XML-like string parser/writer - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MARKUP_H__ -#define __G_MARKUP_H__ - -#include - -#include -#include - -G_BEGIN_DECLS - -/** - * GMarkupError: - * @G_MARKUP_ERROR_BAD_UTF8: text being parsed was not valid UTF-8 - * @G_MARKUP_ERROR_EMPTY: document contained nothing, or only whitespace - * @G_MARKUP_ERROR_PARSE: document was ill-formed - * @G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser - * functions; element wasn't known - * @G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser - * functions; attribute wasn't known - * @G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser - * functions; content was invalid - * @G_MARKUP_ERROR_MISSING_ATTRIBUTE: error should be set by #GMarkupParser - * functions; a required attribute was missing - * - * Error codes returned by markup parsing. - */ -typedef enum -{ - G_MARKUP_ERROR_BAD_UTF8, - G_MARKUP_ERROR_EMPTY, - G_MARKUP_ERROR_PARSE, - /* The following are primarily intended for specific GMarkupParser - * implementations to set. - */ - G_MARKUP_ERROR_UNKNOWN_ELEMENT, - G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, - G_MARKUP_ERROR_INVALID_CONTENT, - G_MARKUP_ERROR_MISSING_ATTRIBUTE -} GMarkupError; - -/** - * G_MARKUP_ERROR: - * - * Error domain for markup parsing. - * Errors in this domain will be from the #GMarkupError enumeration. - * See #GError for information on error domains. - */ -#define G_MARKUP_ERROR g_markup_error_quark () - -GQuark g_markup_error_quark (void); - -/** - * GMarkupParseFlags: - * @G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use - * @G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked - * sections are not passed literally to the @passthrough function of - * the parser. Instead, the content of the section (without the - * <![CDATA[ and ]]>) is - * passed to the @text function. This flag was added in GLib 2.12 - * @G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup - * itself have line/column information prefixed to them to let the - * caller know the location of the error. When this flag is set the - * location information is also prefixed to errors generated by the - * #GMarkupParser implementation functions - * - * Flags that affect the behaviour of the parser. - */ -typedef enum -{ - G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0, - G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1, - G_MARKUP_PREFIX_ERROR_POSITION = 1 << 2 -} GMarkupParseFlags; - -/** - * GMarkupParseContext: - * - * A parse context is used to parse a stream of bytes that - * you expect to contain marked-up text. - * - * See g_markup_parse_context_new(), #GMarkupParser, and so - * on for more details. - */ -typedef struct _GMarkupParseContext GMarkupParseContext; -typedef struct _GMarkupParser GMarkupParser; - -/** - * GMarkupParser: - * @start_element: Callback to invoke when the opening tag of an element - * is seen. - * @end_element: Callback to invoke when the closing tag of an element - * is seen. Note that this is also called for empty tags like - * <empty/>. - * @text: Callback to invoke when some text is seen (text is always - * inside an element). Note that the text of an element may be spread - * over multiple calls of this function. If the - * %G_MARKUP_TREAT_CDATA_AS_TEXT flag is set, this function is also - * called for the content of CDATA marked sections. - * @passthrough: Callback to invoke for comments, processing instructions - * and doctype declarations; if you're re-writing the parsed document, - * write the passthrough text back out in the same position. If the - * %G_MARKUP_TREAT_CDATA_AS_TEXT flag is not set, this function is also - * called for CDATA marked sections. - * @error: Callback to invoke when an error occurs. - * - * Any of the fields in #GMarkupParser can be %NULL, in which case they - * will be ignored. Except for the @error function, any of these callbacks - * can set an error; in particular the %G_MARKUP_ERROR_UNKNOWN_ELEMENT, - * %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, and %G_MARKUP_ERROR_INVALID_CONTENT - * errors are intended to be set from these callbacks. If you set an error - * from a callback, g_markup_parse_context_parse() will report that error - * back to its caller. - */ -struct _GMarkupParser -{ - /* Called for open tags */ - void (*start_element) (GMarkupParseContext *context, - const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - gpointer user_data, - GError **error); - - /* Called for close tags */ - void (*end_element) (GMarkupParseContext *context, - const gchar *element_name, - gpointer user_data, - GError **error); - - /* Called for character data */ - /* text is not nul-terminated */ - void (*text) (GMarkupParseContext *context, - const gchar *text, - gsize text_len, - gpointer user_data, - GError **error); - - /* Called for strings that should be re-saved verbatim in this same - * position, but are not otherwise interpretable. At the moment - * this includes comments and processing instructions. - */ - /* text is not nul-terminated. */ - void (*passthrough) (GMarkupParseContext *context, - const gchar *passthrough_text, - gsize text_len, - gpointer user_data, - GError **error); - - /* Called on error, including one set by other - * methods in the vtable. The GError should not be freed. - */ - void (*error) (GMarkupParseContext *context, - GError *error, - gpointer user_data); -}; - -GMarkupParseContext *g_markup_parse_context_new (const GMarkupParser *parser, - GMarkupParseFlags flags, - gpointer user_data, - GDestroyNotify user_data_dnotify); -void g_markup_parse_context_free (GMarkupParseContext *context); -gboolean g_markup_parse_context_parse (GMarkupParseContext *context, - const gchar *text, - gssize text_len, - GError **error); -void g_markup_parse_context_push (GMarkupParseContext *context, - const GMarkupParser *parser, - gpointer user_data); -gpointer g_markup_parse_context_pop (GMarkupParseContext *context); - -gboolean g_markup_parse_context_end_parse (GMarkupParseContext *context, - GError **error); -const gchar * g_markup_parse_context_get_element (GMarkupParseContext *context); -const GSList * g_markup_parse_context_get_element_stack (GMarkupParseContext *context); - -/* For user-constructed error messages, has no precise semantics */ -void g_markup_parse_context_get_position (GMarkupParseContext *context, - gint *line_number, - gint *char_number); -gpointer g_markup_parse_context_get_user_data (GMarkupParseContext *context); - -/* useful when saving */ -gchar* g_markup_escape_text (const gchar *text, - gssize length); - -gchar *g_markup_printf_escaped (const char *format, - ...) G_GNUC_PRINTF (1, 2); -gchar *g_markup_vprintf_escaped (const char *format, - va_list args); - -typedef enum -{ - G_MARKUP_COLLECT_INVALID, - G_MARKUP_COLLECT_STRING, - G_MARKUP_COLLECT_STRDUP, - G_MARKUP_COLLECT_BOOLEAN, - G_MARKUP_COLLECT_TRISTATE, - - G_MARKUP_COLLECT_OPTIONAL = (1 << 16) -} GMarkupCollectType; - - -/* useful from start_element */ -gboolean g_markup_collect_attributes (const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - GError **error, - GMarkupCollectType first_type, - const gchar *first_attr, - ...); - -G_END_DECLS - -#endif /* __G_MARKUP_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gmem.h b/GstreamerHelper/x64/include/glib-2.0/glib/gmem.h deleted file mode 100644 index c50f46e7..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gmem.h +++ /dev/null @@ -1,285 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MEM_H__ -#define __G_MEM_H__ - -#include - -G_BEGIN_DECLS - -/** - * GMemVTable: - * @malloc: function to use for allocating memory. - * @realloc: function to use for reallocating memory. - * @free: function to use to free memory. - * @calloc: function to use for allocating zero-filled memory. - * @try_malloc: function to use for allocating memory without a default error handler. - * @try_realloc: function to use for reallocating memory without a default error handler. - * - * A set of functions used to perform memory allocation. The same #GMemVTable must - * be used for all allocations in the same program; a call to g_mem_set_vtable(), - * if it exists, should be prior to any use of GLib. - */ -typedef struct _GMemVTable GMemVTable; - - -#if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG -/** - * G_MEM_ALIGN: - * - * Indicates the number of bytes to which memory will be aligned on the - * current platform. - */ -# define G_MEM_ALIGN GLIB_SIZEOF_VOID_P -#else /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ -# define G_MEM_ALIGN GLIB_SIZEOF_LONG -#endif /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ - - -/* Memory allocation functions - */ - -void g_free (gpointer mem); - -GLIB_AVAILABLE_IN_2_34 -void g_clear_pointer (gpointer *pp, - GDestroyNotify destroy); - -gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_realloc (gpointer mem, - gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_try_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_try_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_try_realloc (gpointer mem, - gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT; - -gpointer g_malloc_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_malloc0_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_realloc_n (gpointer mem, - gsize n_blocks, - gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_try_malloc_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_try_malloc0_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_try_realloc_n (gpointer mem, - gsize n_blocks, - gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT; - -#define g_clear_pointer(pp, destroy) \ - G_STMT_START { \ - G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \ - /* Only one access, please */ \ - gpointer *_pp = (gpointer *) (pp); \ - gpointer _p; \ - /* This assignment is needed to avoid a gcc warning */ \ - GDestroyNotify _destroy = (GDestroyNotify) (destroy); \ - \ - (void) (0 ? (gpointer) *(pp) : 0); \ - do \ - _p = g_atomic_pointer_get (_pp); \ - while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \ - \ - if (_p) \ - _destroy (_p); \ - } G_STMT_END - -/* Optimise: avoid the call to the (slower) _n function if we can - * determine at compile-time that no overflow happens. - */ -#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) -# define _G_NEW(struct_type, n_structs, func) \ - (struct_type *) (G_GNUC_EXTENSION ({ \ - gsize __n = (gsize) (n_structs); \ - gsize __s = sizeof (struct_type); \ - gpointer __p; \ - if (__s == 1) \ - __p = g_##func (__n); \ - else if (__builtin_constant_p (__n) && \ - (__s == 0 || __n <= G_MAXSIZE / __s)) \ - __p = g_##func (__n * __s); \ - else \ - __p = g_##func##_n (__n, __s); \ - __p; \ - })) -# define _G_RENEW(struct_type, mem, n_structs, func) \ - (struct_type *) (G_GNUC_EXTENSION ({ \ - gsize __n = (gsize) (n_structs); \ - gsize __s = sizeof (struct_type); \ - gpointer __p = (gpointer) (mem); \ - if (__s == 1) \ - __p = g_##func (__p, __n); \ - else if (__builtin_constant_p (__n) && \ - (__s == 0 || __n <= G_MAXSIZE / __s)) \ - __p = g_##func (__p, __n * __s); \ - else \ - __p = g_##func##_n (__p, __n, __s); \ - __p; \ - })) - -#else - -/* Unoptimised version: always call the _n() function. */ - -#define _G_NEW(struct_type, n_structs, func) \ - ((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type))) -#define _G_RENEW(struct_type, mem, n_structs, func) \ - ((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_type))) - -#endif - -/** - * g_new: - * @struct_type: the type of the elements to allocate - * @n_structs: the number of elements to allocate - * - * Allocates @n_structs elements of type @struct_type. - * The returned pointer is cast to a pointer to the given type. - * If @n_structs is 0 it returns %NULL. - * Care is taken to avoid overflow when calculating the size of the allocated block. - * - * Since the returned pointer is already casted to the right type, - * it is normally unnecessary to cast it explicitly, and doing - * so might hide memory allocation errors. - * - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type - */ -#define g_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc) -/** - * g_new0: - * @struct_type: the type of the elements to allocate. - * @n_structs: the number of elements to allocate. - * - * Allocates @n_structs elements of type @struct_type, initialized to 0's. - * The returned pointer is cast to a pointer to the given type. - * If @n_structs is 0 it returns %NULL. - * Care is taken to avoid overflow when calculating the size of the allocated block. - * - * Since the returned pointer is already casted to the right type, - * it is normally unnecessary to cast it explicitly, and doing - * so might hide memory allocation errors. - * - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type. - */ -#define g_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc0) -/** - * g_renew: - * @struct_type: the type of the elements to allocate - * @mem: the currently allocated memory - * @n_structs: the number of elements to allocate - * - * Reallocates the memory pointed to by @mem, so that it now has space for - * @n_structs elements of type @struct_type. It returns the new address of - * the memory, which may have been moved. - * Care is taken to avoid overflow when calculating the size of the allocated block. - * - * Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type - */ -#define g_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, realloc) -/** - * g_try_new: - * @struct_type: the type of the elements to allocate - * @n_structs: the number of elements to allocate - * - * Attempts to allocate @n_structs elements of type @struct_type, and returns - * %NULL on failure. Contrast with g_new(), which aborts the program on failure. - * The returned pointer is cast to a pointer to the given type. - * The function returns %NULL when @n_structs is 0 of if an overflow occurs. - * - * Since: 2.8 - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type - */ -#define g_try_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc) -/** - * g_try_new0: - * @struct_type: the type of the elements to allocate - * @n_structs: the number of elements to allocate - * - * Attempts to allocate @n_structs elements of type @struct_type, initialized - * to 0's, and returns %NULL on failure. Contrast with g_new0(), which aborts - * the program on failure. - * The returned pointer is cast to a pointer to the given type. - * The function returns %NULL when @n_structs is 0 of if an overflow occurs. - * - * Since: 2.8 - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type - */ -#define g_try_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc0) -/** - * g_try_renew: - * @struct_type: the type of the elements to allocate - * @mem: the currently allocated memory - * @n_structs: the number of elements to allocate - * - * Attempts to reallocate the memory pointed to by @mem, so that it now has - * space for @n_structs elements of type @struct_type, and returns %NULL on - * failure. Contrast with g_renew(), which aborts the program on failure. - * It returns the new address of the memory, which may have been moved. - * The function returns %NULL if an overflow occurs. - * - * Since: 2.8 - * Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type - */ -#define g_try_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, try_realloc) - - -/* Memory allocation virtualization for debugging purposes - * g_mem_set_vtable() has to be the very first GLib function called - * if being used - */ -struct _GMemVTable { - gpointer (*malloc) (gsize n_bytes); - gpointer (*realloc) (gpointer mem, - gsize n_bytes); - void (*free) (gpointer mem); - /* optional; set to NULL if not used ! */ - gpointer (*calloc) (gsize n_blocks, - gsize n_block_bytes); - gpointer (*try_malloc) (gsize n_bytes); - gpointer (*try_realloc) (gpointer mem, - gsize n_bytes); -}; -void g_mem_set_vtable (GMemVTable *vtable); -gboolean g_mem_is_system_malloc (void); - -GLIB_VAR gboolean g_mem_gc_friendly; - -/* Memory profiler and checker, has to be enabled via g_mem_set_vtable() - */ -GLIB_VAR GMemVTable *glib_mem_profiler_table; -void g_mem_profile (void); - -G_END_DECLS - -#endif /* __G_MEM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gmessages.h b/GstreamerHelper/x64/include/glib-2.0/glib/gmessages.h deleted file mode 100644 index 9cbcc838..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gmessages.h +++ /dev/null @@ -1,404 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MESSAGES_H__ -#define __G_MESSAGES_H__ - -#include -#include -#include - -/* Suppress warnings when GCC is in -pedantic mode and not -std=c99 - */ -#if (__GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) -#pragma GCC system_header -#endif - -G_BEGIN_DECLS - -/* calculate a string size, guaranteed to fit format + args. - */ -gsize g_printf_string_upper_bound (const gchar* format, - va_list args); - -/* Log level shift offset for user defined - * log levels (0-7 are used by GLib). - */ -#define G_LOG_LEVEL_USER_SHIFT (8) - -/* Glib log levels and flags. - */ -typedef enum -{ - /* log flags */ - G_LOG_FLAG_RECURSION = 1 << 0, - G_LOG_FLAG_FATAL = 1 << 1, - - /* GLib log levels */ - G_LOG_LEVEL_ERROR = 1 << 2, /* always fatal */ - G_LOG_LEVEL_CRITICAL = 1 << 3, - G_LOG_LEVEL_WARNING = 1 << 4, - G_LOG_LEVEL_MESSAGE = 1 << 5, - G_LOG_LEVEL_INFO = 1 << 6, - G_LOG_LEVEL_DEBUG = 1 << 7, - - G_LOG_LEVEL_MASK = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL) -} GLogLevelFlags; - -/* GLib log levels that are considered fatal by default */ -#define G_LOG_FATAL_MASK (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR) - -typedef void (*GLogFunc) (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data); - -/* Logging mechanism - */ -guint g_log_set_handler (const gchar *log_domain, - GLogLevelFlags log_levels, - GLogFunc log_func, - gpointer user_data); -void g_log_remove_handler (const gchar *log_domain, - guint handler_id); -void g_log_default_handler (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer unused_data); -GLogFunc g_log_set_default_handler (GLogFunc log_func, - gpointer user_data); -void g_log (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *format, - ...) G_GNUC_PRINTF (3, 4); -void g_logv (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *format, - va_list args); -GLogLevelFlags g_log_set_fatal_mask (const gchar *log_domain, - GLogLevelFlags fatal_mask); -GLogLevelFlags g_log_set_always_fatal (GLogLevelFlags fatal_mask); - -/* internal */ -G_GNUC_INTERNAL void _g_log_fallback_handler (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer unused_data); - -/* Internal functions, used to implement the following macros */ -void g_return_if_fail_warning (const char *log_domain, - const char *pretty_function, - const char *expression); -void g_warn_message (const char *domain, - const char *file, - int line, - const char *func, - const char *warnexpr); -GLIB_DEPRECATED -void g_assert_warning (const char *log_domain, - const char *file, - const int line, - const char *pretty_function, - const char *expression) G_GNUC_NORETURN; - - -#ifndef G_LOG_DOMAIN -#define G_LOG_DOMAIN ((gchar*) 0) -#endif /* G_LOG_DOMAIN */ -#ifdef G_HAVE_ISO_VARARGS -/* for(;;) ; so that GCC knows that control doesn't go past g_error(). - * Put space before ending semicolon to avoid C++ build warnings. - */ -#define g_error(...) G_STMT_START { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_ERROR, \ - __VA_ARGS__); \ - for (;;) ; \ - } G_STMT_END - -#define g_message(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_MESSAGE, \ - __VA_ARGS__) -#define g_critical(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - __VA_ARGS__) -#define g_warning(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_WARNING, \ - __VA_ARGS__) -#define g_debug(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - __VA_ARGS__) -#elif defined(G_HAVE_GNUC_VARARGS) -#define g_error(format...) G_STMT_START { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_ERROR, \ - format); \ - for (;;) ; \ - } G_STMT_END - -#define g_message(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_MESSAGE, \ - format) -#define g_critical(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - format) -#define g_warning(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_WARNING, \ - format) -#define g_debug(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - format) -#else /* no varargs macros */ -static void -g_error (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args); - va_end (args); - - for(;;) ; -} -static void -g_message (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args); - va_end (args); -} -static void -g_critical (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, args); - va_end (args); -} -static void -g_warning (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args); - va_end (args); -} -static void -g_debug (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args); - va_end (args); -} -#endif /* !__GNUC__ */ - -/** - * GPrintFunc: - * @string: the message to output - * - * Specifies the type of the print handler functions. - * These are called with the complete formatted string to output. - */ -typedef void (*GPrintFunc) (const gchar *string); -void g_print (const gchar *format, - ...) G_GNUC_PRINTF (1, 2); -GPrintFunc g_set_print_handler (GPrintFunc func); -void g_printerr (const gchar *format, - ...) G_GNUC_PRINTF (1, 2); -GPrintFunc g_set_printerr_handler (GPrintFunc func); - -/** - * g_warn_if_reached: - * - * Logs a critical warning. - * - * Since: 2.16 - */ -#define g_warn_if_reached() \ - do { \ - g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); \ - } while (0) - -/** - * g_warn_if_fail: - * @expr: the expression to check - * - * Logs a warning if the expression is not true. - * - * Since: 2.16 - */ -#define g_warn_if_fail(expr) \ - do { \ - if G_LIKELY (expr) ; \ - else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); \ - } while (0) - -#ifdef G_DISABLE_CHECKS - -/** - * g_return_if_fail: - * @expr: the expression to check - * - * Verifies that the expression evaluates to %TRUE. If the expression - * evaluates to %FALSE, a critical message is logged and the current - * function returns. This can only be used in functions which do not - * return a value. - * - * If G_DISABLE_CHECKS is defined then the check is not performed. You - * should therefore not depend on any side effects of @expr. - */ -#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END - -/** - * g_return_val_if_fail: - * @expr: the expression to check - * @val: the value to return from the current function - * if the expression is not true - * - * Verifies that the expression evaluates to %TRUE. If the expression - * evaluates to %FALSE, a critical message is logged and @val is - * returned from the current function. - * - * If G_DISABLE_CHECKS is defined then the check is not performed. You - * should therefore not depend on any side effects of @expr. - */ -#define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END - -/** - * g_return_if_reached: - * - * Logs a critical message and returns from the current function. - * This can only be used in functions which do not return a value. - */ -#define g_return_if_reached() G_STMT_START{ return; }G_STMT_END - -/** - * g_return_val_if_reached: - * @val: the value to return from the current function - * - * Logs a critical message and returns @val. - */ -#define g_return_val_if_reached(val) G_STMT_START{ return (val); }G_STMT_END - -#else /* !G_DISABLE_CHECKS */ - -#ifdef __GNUC__ - -#define g_return_if_fail(expr) G_STMT_START{ \ - if G_LIKELY(expr) { } else \ - { \ - g_return_if_fail_warning (G_LOG_DOMAIN, \ - __PRETTY_FUNCTION__, \ - #expr); \ - return; \ - }; }G_STMT_END - -#define g_return_val_if_fail(expr,val) G_STMT_START{ \ - if G_LIKELY(expr) { } else \ - { \ - g_return_if_fail_warning (G_LOG_DOMAIN, \ - __PRETTY_FUNCTION__, \ - #expr); \ - return (val); \ - }; }G_STMT_END - -#define g_return_if_reached() G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d (%s): should not be reached", \ - __FILE__, \ - __LINE__, \ - __PRETTY_FUNCTION__); \ - return; }G_STMT_END - -#define g_return_val_if_reached(val) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d (%s): should not be reached", \ - __FILE__, \ - __LINE__, \ - __PRETTY_FUNCTION__); \ - return (val); }G_STMT_END - -#else /* !__GNUC__ */ - -#define g_return_if_fail(expr) G_STMT_START{ \ - if (expr) { } else \ - { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: assertion `%s' failed", \ - __FILE__, \ - __LINE__, \ - #expr); \ - return; \ - }; }G_STMT_END - -#define g_return_val_if_fail(expr, val) G_STMT_START{ \ - if (expr) { } else \ - { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: assertion `%s' failed", \ - __FILE__, \ - __LINE__, \ - #expr); \ - return (val); \ - }; }G_STMT_END - -#define g_return_if_reached() G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: should not be reached", \ - __FILE__, \ - __LINE__); \ - return; }G_STMT_END - -#define g_return_val_if_reached(val) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: should not be reached", \ - __FILE__, \ - __LINE__); \ - return (val); }G_STMT_END - -#endif /* !__GNUC__ */ - -#endif /* !G_DISABLE_CHECKS */ - -G_END_DECLS - -#endif /* __G_MESSAGES_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gnode.h b/GstreamerHelper/x64/include/glib-2.0/glib/gnode.h deleted file mode 100644 index 7ffdcbfc..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gnode.h +++ /dev/null @@ -1,298 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NODE_H__ -#define __G_NODE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GNode GNode; - -/* Tree traverse flags */ -typedef enum -{ - G_TRAVERSE_LEAVES = 1 << 0, - G_TRAVERSE_NON_LEAVES = 1 << 1, - G_TRAVERSE_ALL = G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES, - G_TRAVERSE_MASK = 0x03, - G_TRAVERSE_LEAFS = G_TRAVERSE_LEAVES, - G_TRAVERSE_NON_LEAFS = G_TRAVERSE_NON_LEAVES -} GTraverseFlags; - -/* Tree traverse orders */ -typedef enum -{ - G_IN_ORDER, - G_PRE_ORDER, - G_POST_ORDER, - G_LEVEL_ORDER -} GTraverseType; - -typedef gboolean (*GNodeTraverseFunc) (GNode *node, - gpointer data); -typedef void (*GNodeForeachFunc) (GNode *node, - gpointer data); - -/** - * GCopyFunc: - * @src: A pointer to the data which should be copied - * @data: Additional data - * - * A function of this signature is used to copy the node data - * when doing a deep-copy of a tree. - * - * Returns: A pointer to the copy - * - * Since: 2.4 - */ -typedef gpointer (*GCopyFunc) (gconstpointer src, - gpointer data); - -/* N-way tree implementation - */ -struct _GNode -{ - gpointer data; - GNode *next; - GNode *prev; - GNode *parent; - GNode *children; -}; - -/** - * G_NODE_IS_ROOT: - * @node: a #GNode - * - * Returns %TRUE if a #GNode is the root of a tree. - * - * Returns: %TRUE if the #GNode is the root of a tree - * (i.e. it has no parent or siblings) - */ -#define G_NODE_IS_ROOT(node) (((GNode*) (node))->parent == NULL && \ - ((GNode*) (node))->prev == NULL && \ - ((GNode*) (node))->next == NULL) - -/** - * G_NODE_IS_LEAF: - * @node: a #GNode - * - * Returns %TRUE if a #GNode is a leaf node. - * - * Returns: %TRUE if the #GNode is a leaf node - * (i.e. it has no children) - */ -#define G_NODE_IS_LEAF(node) (((GNode*) (node))->children == NULL) - -GNode* g_node_new (gpointer data); -void g_node_destroy (GNode *root); -void g_node_unlink (GNode *node); -GNode* g_node_copy_deep (GNode *node, - GCopyFunc copy_func, - gpointer data); -GNode* g_node_copy (GNode *node); -GNode* g_node_insert (GNode *parent, - gint position, - GNode *node); -GNode* g_node_insert_before (GNode *parent, - GNode *sibling, - GNode *node); -GNode* g_node_insert_after (GNode *parent, - GNode *sibling, - GNode *node); -GNode* g_node_prepend (GNode *parent, - GNode *node); -guint g_node_n_nodes (GNode *root, - GTraverseFlags flags); -GNode* g_node_get_root (GNode *node); -gboolean g_node_is_ancestor (GNode *node, - GNode *descendant); -guint g_node_depth (GNode *node); -GNode* g_node_find (GNode *root, - GTraverseType order, - GTraverseFlags flags, - gpointer data); - -/* convenience macros */ -/** - * g_node_append: - * @parent: the #GNode to place the new #GNode under - * @node: the #GNode to insert - * - * Inserts a #GNode as the last child of the given parent. - * - * Returns: the inserted #GNode - */ -#define g_node_append(parent, node) \ - g_node_insert_before ((parent), NULL, (node)) - -/** - * g_node_insert_data: - * @parent: the #GNode to place the new #GNode under - * @position: the position to place the new #GNode at. If position is -1, - * the new #GNode is inserted as the last child of @parent - * @data: the data for the new #GNode - * - * Inserts a new #GNode at the given position. - * - * Returns: the new #GNode - */ -#define g_node_insert_data(parent, position, data) \ - g_node_insert ((parent), (position), g_node_new (data)) - -/** - * g_node_insert_data_after: - * @parent: the #GNode to place the new #GNode under - * @sibling: the sibling #GNode to place the new #GNode after - * @data: the data for the new #GNode - * - * Inserts a new #GNode after the given sibling. - * - * Returns: the new #GNode - */ - -#define g_node_insert_data_after(parent, sibling, data) \ - g_node_insert_after ((parent), (sibling), g_node_new (data)) -/** - * g_node_insert_data_before: - * @parent: the #GNode to place the new #GNode under - * @sibling: the sibling #GNode to place the new #GNode before - * @data: the data for the new #GNode - * - * Inserts a new #GNode before the given sibling. - * - * Returns: the new #GNode - */ -#define g_node_insert_data_before(parent, sibling, data) \ - g_node_insert_before ((parent), (sibling), g_node_new (data)) - -/** - * g_node_prepend_data: - * @parent: the #GNode to place the new #GNode under - * @data: the data for the new #GNode - * - * Inserts a new #GNode as the first child of the given parent. - * - * Returns: the new #GNode - */ -#define g_node_prepend_data(parent, data) \ - g_node_prepend ((parent), g_node_new (data)) - -/** - * g_node_append_data: - * @parent: the #GNode to place the new #GNode under - * @data: the data for the new #GNode - * - * Inserts a new #GNode as the last child of the given parent. - * - * Returns: the new #GNode - */ -#define g_node_append_data(parent, data) \ - g_node_insert_before ((parent), NULL, g_node_new (data)) - -/* traversal function, assumes that `node' is root - * (only traverses `node' and its subtree). - * this function is just a high level interface to - * low level traversal functions, optimized for speed. - */ -void g_node_traverse (GNode *root, - GTraverseType order, - GTraverseFlags flags, - gint max_depth, - GNodeTraverseFunc func, - gpointer data); - -/* return the maximum tree height starting with `node', this is an expensive - * operation, since we need to visit all nodes. this could be shortened by - * adding `guint height' to struct _GNode, but then again, this is not very - * often needed, and would make g_node_insert() more time consuming. - */ -guint g_node_max_height (GNode *root); - -void g_node_children_foreach (GNode *node, - GTraverseFlags flags, - GNodeForeachFunc func, - gpointer data); -void g_node_reverse_children (GNode *node); -guint g_node_n_children (GNode *node); -GNode* g_node_nth_child (GNode *node, - guint n); -GNode* g_node_last_child (GNode *node); -GNode* g_node_find_child (GNode *node, - GTraverseFlags flags, - gpointer data); -gint g_node_child_position (GNode *node, - GNode *child); -gint g_node_child_index (GNode *node, - gpointer data); - -GNode* g_node_first_sibling (GNode *node); -GNode* g_node_last_sibling (GNode *node); - -/** - * g_node_prev_sibling: - * @node: a #GNode - * - * Gets the previous sibling of a #GNode. - * - * Returns: the previous sibling of @node, or %NULL if @node is the first - * node or %NULL - */ -#define g_node_prev_sibling(node) ((node) ? \ - ((GNode*) (node))->prev : NULL) - -/** - * g_node_next_sibling: - * @node: a #GNode - * - * Gets the next sibling of a #GNode. - * - * Returns: the next sibling of @node, or %NULL if @node is the last node - * or %NULL - */ -#define g_node_next_sibling(node) ((node) ? \ - ((GNode*) (node))->next : NULL) - -/** - * g_node_first_child: - * @node: a #GNode - * - * Gets the first child of a #GNode. - * - * Returns: the first child of @node, or %NULL if @node is %NULL - * or has no children - */ -#define g_node_first_child(node) ((node) ? \ - ((GNode*) (node))->children : NULL) - -G_END_DECLS - -#endif /* __G_NODE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/goption.h b/GstreamerHelper/x64/include/glib-2.0/glib/goption.h deleted file mode 100644 index 7d1f2a1d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/goption.h +++ /dev/null @@ -1,370 +0,0 @@ -/* goption.h - Option parser - * - * Copyright (C) 2004 Anders Carlsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_OPTION_H__ -#define __G_OPTION_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GOptionContext: - * - * A GOptionContext struct defines which options - * are accepted by the commandline option parser. The struct has only private - * fields and should not be directly accessed. - */ -typedef struct _GOptionContext GOptionContext; - -/** - * GOptionGroup: - * - * A GOptionGroup struct defines the options in a single - * group. The struct has only private fields and should not be directly accessed. - * - * All options in a group share the same translation function. Libraries which - * need to parse commandline options are expected to provide a function for - * getting a GOptionGroup holding their options, which - * the application can then add to its #GOptionContext. - */ -typedef struct _GOptionGroup GOptionGroup; -typedef struct _GOptionEntry GOptionEntry; - -/** - * GOptionFlags: - * @G_OPTION_FLAG_HIDDEN: The option doesn't appear in - * output. - * @G_OPTION_FLAG_IN_MAIN: The option appears in the main section of the - * output, even if it is defined in a group. - * @G_OPTION_FLAG_REVERSE: For options of the %G_OPTION_ARG_NONE kind, this flag - * indicates that the sense of the option is reversed. - * @G_OPTION_FLAG_NO_ARG: For options of the %G_OPTION_ARG_CALLBACK kind, - * this flag indicates that the callback does not take any argument - * (like a %G_OPTION_ARG_NONE option). Since 2.8 - * @G_OPTION_FLAG_FILENAME: For options of the %G_OPTION_ARG_CALLBACK - * kind, this flag indicates that the argument should be passed to the - * callback in the GLib filename encoding rather than UTF-8. Since 2.8 - * @G_OPTION_FLAG_OPTIONAL_ARG: For options of the %G_OPTION_ARG_CALLBACK - * kind, this flag indicates that the argument supply is optional. If no argument - * is given then data of %GOptionParseFunc will be set to NULL. Since 2.8 - * @G_OPTION_FLAG_NOALIAS: This flag turns off the automatic conflict resolution - * which prefixes long option names with groupname- if - * there is a conflict. This option should only be used in situations where - * aliasing is necessary to model some legacy commandline interface. It is - * not safe to use this option, unless all option groups are under your - * direct control. Since 2.8. - * - * Flags which modify individual options. - */ -typedef enum -{ - G_OPTION_FLAG_HIDDEN = 1 << 0, - G_OPTION_FLAG_IN_MAIN = 1 << 1, - G_OPTION_FLAG_REVERSE = 1 << 2, - G_OPTION_FLAG_NO_ARG = 1 << 3, - G_OPTION_FLAG_FILENAME = 1 << 4, - G_OPTION_FLAG_OPTIONAL_ARG = 1 << 5, - G_OPTION_FLAG_NOALIAS = 1 << 6 -} GOptionFlags; - -/** - * GOptionArg: - * @G_OPTION_ARG_NONE: No extra argument. This is useful for simple flags. - * @G_OPTION_ARG_STRING: The option takes a string argument. - * @G_OPTION_ARG_INT: The option takes an integer argument. - * @G_OPTION_ARG_CALLBACK: The option provides a callback to parse the - * extra argument. - * @G_OPTION_ARG_FILENAME: The option takes a filename as argument. - * @G_OPTION_ARG_STRING_ARRAY: The option takes a string argument, multiple - * uses of the option are collected into an array of strings. - * @G_OPTION_ARG_FILENAME_ARRAY: The option takes a filename as argument, - * multiple uses of the option are collected into an array of strings. - * @G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument - * can be formatted either for the user's locale or for the "C" locale. Since 2.12 - * @G_OPTION_ARG_INT64: The option takes a 64-bit integer. Like %G_OPTION_ARG_INT - * but for larger numbers. The number can be in decimal base, or in hexadecimal - * (when prefixed with 0x, for example, 0xffffffff). - * Since 2.12 - * - * The #GOptionArg enum values determine which type of extra argument the - * options expect to find. If an option expects an extra argument, it - * can be specified in several ways; with a short option: - * , with a long option: - * or combined in a single argument: . - */ -typedef enum -{ - G_OPTION_ARG_NONE, - G_OPTION_ARG_STRING, - G_OPTION_ARG_INT, - G_OPTION_ARG_CALLBACK, - G_OPTION_ARG_FILENAME, - G_OPTION_ARG_STRING_ARRAY, - G_OPTION_ARG_FILENAME_ARRAY, - G_OPTION_ARG_DOUBLE, - G_OPTION_ARG_INT64 -} GOptionArg; - -/** - * GOptionArgFunc: - * @option_name: The name of the option being parsed. This will be either a - * single dash followed by a single letter (for a short name) or two dashes - * followed by a long option name. - * @value: The value to be parsed. - * @data: User data added to the #GOptionGroup containing the option when it - * was created with g_option_group_new() - * @error: A return location for errors. The error code %G_OPTION_ERROR_FAILED - * is intended to be used for errors in #GOptionArgFunc callbacks. - * - * The type of function to be passed as callback for %G_OPTION_ARG_CALLBACK - * options. - * - * Returns: %TRUE if the option was successfully parsed, %FALSE if an error - * occurred, in which case @error should be set with g_set_error() - */ -typedef gboolean (*GOptionArgFunc) (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error); - -/** - * GOptionParseFunc: - * @context: The active #GOptionContext - * @group: The group to which the function belongs - * @data: User data added to the #GOptionGroup containing the option when it - * was created with g_option_group_new() - * @error: A return location for error details - * - * The type of function that can be called before and after parsing. - * - * Returns: %TRUE if the function completed successfully, %FALSE if an error - * occurred, in which case @error should be set with g_set_error() - */ -typedef gboolean (*GOptionParseFunc) (GOptionContext *context, - GOptionGroup *group, - gpointer data, - GError **error); - -/** - * GOptionErrorFunc: - * @context: The active #GOptionContext - * @group: The group to which the function belongs - * @data: User data added to the #GOptionGroup containing the option when it - * was created with g_option_group_new() - * @error: The #GError containing details about the parse error - * - * The type of function to be used as callback when a parse error occurs. - */ -typedef void (*GOptionErrorFunc) (GOptionContext *context, - GOptionGroup *group, - gpointer data, - GError **error); - -/** - * G_OPTION_ERROR: - * - * Error domain for option parsing. Errors in this domain will - * be from the #GOptionError enumeration. See #GError for information on - * error domains. - */ -#define G_OPTION_ERROR (g_option_error_quark ()) - -/** - * GOptionError: - * @G_OPTION_ERROR_UNKNOWN_OPTION: An option was not known to the parser. - * This error will only be reported, if the parser hasn't been instructed - * to ignore unknown options, see g_option_context_set_ignore_unknown_options(). - * @G_OPTION_ERROR_BAD_VALUE: A value couldn't be parsed. - * @G_OPTION_ERROR_FAILED: A #GOptionArgFunc callback failed. - * - * Error codes returned by option parsing. - */ -typedef enum -{ - G_OPTION_ERROR_UNKNOWN_OPTION, - G_OPTION_ERROR_BAD_VALUE, - G_OPTION_ERROR_FAILED -} GOptionError; - -GQuark g_option_error_quark (void); - -/** - * GOptionEntry: - * @long_name: The long name of an option can be used to specify it - * in a commandline as --long_name. Every - * option must have a long name. To resolve conflicts if multiple - * option groups contain the same long name, it is also possible to - * specify the option as - * --groupname-long_name. - * @short_name: If an option has a short name, it can be specified - * -short_name in a commandline. @short_name must be - * a printable ASCII character different from '-', or zero if the option has no - * short name. - * @flags: Flags from #GOptionFlags. - * @arg: The type of the option, as a #GOptionArg. - * @arg_data: If the @arg type is %G_OPTION_ARG_CALLBACK, then @arg_data must - * point to a #GOptionArgFunc callback function, which will be called to handle - * the extra argument. Otherwise, @arg_data is a pointer to a location to store - * the value, the required type of the location depends on the @arg type: - * - * - * %G_OPTION_ARG_NONE - * %gboolean - * - * - * %G_OPTION_ARG_STRING - * %gchar* - * - * - * %G_OPTION_ARG_INT - * %gint - * - * - * %G_OPTION_ARG_FILENAME - * %gchar* - * - * - * %G_OPTION_ARG_STRING_ARRAY - * %gchar** - * - * - * %G_OPTION_ARG_FILENAME_ARRAY - * %gchar** - * - * - * %G_OPTION_ARG_DOUBLE - * %gdouble - * - * - * If @arg type is %G_OPTION_ARG_STRING or %G_OPTION_ARG_FILENAME the location - * will contain a newly allocated string if the option was given. That string - * needs to be freed by the callee using g_free(). Likewise if @arg type is - * %G_OPTION_ARG_STRING_ARRAY or %G_OPTION_ARG_FILENAME_ARRAY, the data should - * be freed using g_strfreev(). - * @description: the description for the option in - * output. The @description is translated using the @translate_func of the - * group, see g_option_group_set_translation_domain(). - * @arg_description: The placeholder to use for the extra argument parsed - * by the option in - * output. The @arg_description is translated using the @translate_func of the - * group, see g_option_group_set_translation_domain(). - * - * A GOptionEntry defines a single option. - * To have an effect, they must be added to a #GOptionGroup with - * g_option_context_add_main_entries() or g_option_group_add_entries(). - */ -struct _GOptionEntry -{ - const gchar *long_name; - gchar short_name; - gint flags; - - GOptionArg arg; - gpointer arg_data; - - const gchar *description; - const gchar *arg_description; -}; - -/** - * G_OPTION_REMAINING: - * - * If a long option in the main group has this name, it is not treated as a - * regular option. Instead it collects all non-option arguments which would - * otherwise be left in argv. The option must be of type - * %G_OPTION_ARG_CALLBACK, %G_OPTION_ARG_STRING_ARRAY - * or %G_OPTION_ARG_FILENAME_ARRAY. - * - * - * Using #G_OPTION_REMAINING instead of simply scanning argv - * for leftover arguments has the advantage that GOption takes care of - * necessary encoding conversions for strings or filenames. - * - * Since: 2.6 - */ -#define G_OPTION_REMAINING "" - -GOptionContext *g_option_context_new (const gchar *parameter_string); -void g_option_context_set_summary (GOptionContext *context, - const gchar *summary); -const gchar * g_option_context_get_summary (GOptionContext *context); -void g_option_context_set_description (GOptionContext *context, - const gchar *description); -const gchar * g_option_context_get_description (GOptionContext *context); -void g_option_context_free (GOptionContext *context); -void g_option_context_set_help_enabled (GOptionContext *context, - gboolean help_enabled); -gboolean g_option_context_get_help_enabled (GOptionContext *context); -void g_option_context_set_ignore_unknown_options (GOptionContext *context, - gboolean ignore_unknown); -gboolean g_option_context_get_ignore_unknown_options (GOptionContext *context); - -void g_option_context_add_main_entries (GOptionContext *context, - const GOptionEntry *entries, - const gchar *translation_domain); -gboolean g_option_context_parse (GOptionContext *context, - gint *argc, - gchar ***argv, - GError **error); -void g_option_context_set_translate_func (GOptionContext *context, - GTranslateFunc func, - gpointer data, - GDestroyNotify destroy_notify); -void g_option_context_set_translation_domain (GOptionContext *context, - const gchar *domain); - -void g_option_context_add_group (GOptionContext *context, - GOptionGroup *group); -void g_option_context_set_main_group (GOptionContext *context, - GOptionGroup *group); -GOptionGroup *g_option_context_get_main_group (GOptionContext *context); -gchar *g_option_context_get_help (GOptionContext *context, - gboolean main_help, - GOptionGroup *group); - -GOptionGroup *g_option_group_new (const gchar *name, - const gchar *description, - const gchar *help_description, - gpointer user_data, - GDestroyNotify destroy); -void g_option_group_set_parse_hooks (GOptionGroup *group, - GOptionParseFunc pre_parse_func, - GOptionParseFunc post_parse_func); -void g_option_group_set_error_hook (GOptionGroup *group, - GOptionErrorFunc error_func); -void g_option_group_free (GOptionGroup *group); -void g_option_group_add_entries (GOptionGroup *group, - const GOptionEntry *entries); -void g_option_group_set_translate_func (GOptionGroup *group, - GTranslateFunc func, - gpointer data, - GDestroyNotify destroy_notify); -void g_option_group_set_translation_domain (GOptionGroup *group, - const gchar *domain); - -G_END_DECLS - -#endif /* __G_OPTION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gpattern.h b/GstreamerHelper/x64/include/glib-2.0/glib/gpattern.h deleted file mode 100644 index e692d902..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gpattern.h +++ /dev/null @@ -1,49 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 1999 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PATTERN_H__ -#define __G_PATTERN_H__ - -#include - -G_BEGIN_DECLS - - -typedef struct _GPatternSpec GPatternSpec; - -GPatternSpec* g_pattern_spec_new (const gchar *pattern); -void g_pattern_spec_free (GPatternSpec *pspec); -gboolean g_pattern_spec_equal (GPatternSpec *pspec1, - GPatternSpec *pspec2); -gboolean g_pattern_match (GPatternSpec *pspec, - guint string_length, - const gchar *string, - const gchar *string_reversed); -gboolean g_pattern_match_string (GPatternSpec *pspec, - const gchar *string); -gboolean g_pattern_match_simple (const gchar *pattern, - const gchar *string); - -G_END_DECLS - -#endif /* __G_PATTERN_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gpoll.h b/GstreamerHelper/x64/include/glib-2.0/glib/gpoll.h deleted file mode 100644 index f28b758e..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gpoll.h +++ /dev/null @@ -1,120 +0,0 @@ -/* gpoll.h - poll(2) support - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (__G_MAIN_H__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLL_H__ -#define __G_POLL_H__ - -#include - -G_BEGIN_DECLS - -/* Any definitions using GPollFD or GPollFunc are primarily - * for Unix and not guaranteed to be the compatible on all - * operating systems on which GLib runs. Right now, the - * GLib does use these functions on Win32 as well, but interprets - * them in a fairly different way than on Unix. If you use - * these definitions, you are should be prepared to recode - * for different operating systems. - * - * Note that on systems with a working poll(2), that function is used - * in place of g_poll(). Thus g_poll() must have the same signature as - * poll(), meaning GPollFD must have the same layout as struct pollfd. - * - * - * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file - * descriptor as provided by the C runtime) that can be used by - * MsgWaitForMultipleObjects. This does *not* include file handles - * from CreateFile, SOCKETs, nor pipe handles. (But you can use - * WSAEventSelect to signal events when a SOCKET is readable). - * - * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to - * indicate polling for messages. - * - * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK - * (GTK) programs, as GDK itself wants to read messages and convert them - * to GDK events. - * - * So, unless you really know what you are doing, it's best not to try - * to use the main loop polling stuff for your own needs on - * Windows. - */ -typedef struct _GPollFD GPollFD; - -/** - * GPollFunc: - * @ufds: an array of #GPollFD elements - * @nfsd: the number of elements in @ufds - * @timeout_: the maximum time to wait for an event of the file descriptors. - * A negative value indicates an infinite timeout. - * - * Specifies the type of function passed to g_main_context_set_poll_func(). - * The semantics of the function should match those of the poll() system call. - * - * Returns: the number of #GPollFD elements which have events or errors - * reported, or -1 if an error occurred. - */ -typedef gint (*GPollFunc) (GPollFD *ufds, - guint nfsd, - gint timeout_); - -/** - * GPollFD: - * @fd: the file descriptor to poll (or a HANDLE on Win32) - * @events: a bitwise combination from #GIOCondition, specifying which - * events should be polled for. Typically for reading from a file - * descriptor you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and - * for writing you would use %G_IO_OUT | %G_IO_ERR. - * @revents: a bitwise combination of flags from #GIOCondition, returned - * from the poll() function to indicate which events occurred. - * - * Represents a file descriptor, which events to poll for, and which events - * occurred. - */ -struct _GPollFD -{ -#if defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8 - gint64 fd; -#else - gint fd; -#endif - gushort events; - gushort revents; -}; - -#ifdef G_OS_WIN32 -#if GLIB_SIZEOF_VOID_P == 8 -#define G_POLLFD_FORMAT "%#I64x" -#else -#define G_POLLFD_FORMAT "%#x" -#endif -#else -#define G_POLLFD_FORMAT "%d" -#endif - -gint g_poll (GPollFD *fds, - guint nfds, - gint timeout); - -G_END_DECLS - -#endif /* __G_POLL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gprimes.h b/GstreamerHelper/x64/include/glib-2.0/glib/gprimes.h deleted file mode 100644 index 19f57021..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gprimes.h +++ /dev/null @@ -1,51 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PRIMES_H__ -#define __G_PRIMES_H__ - -#include - -G_BEGIN_DECLS - -/* Prime numbers. - */ - -/* This function returns prime numbers spaced by approximately 1.5-2.0 - * and is for use in resizing data structures which prefer - * prime-valued sizes. The closest spaced prime function returns the - * next largest prime, or the highest it knows about which is about - * MAXINT/4. - */ -guint g_spaced_primes_closest (guint num) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_PRIMES_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gprintf.h b/GstreamerHelper/x64/include/glib-2.0/glib/gprintf.h deleted file mode 100644 index d96870fb..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gprintf.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_PRINTF_H__ -#define __G_PRINTF_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -gint g_printf (gchar const *format, - ...) G_GNUC_PRINTF (1, 2); -gint g_fprintf (FILE *file, - gchar const *format, - ...) G_GNUC_PRINTF (2, 3); -gint g_sprintf (gchar *string, - gchar const *format, - ...) G_GNUC_PRINTF (2, 3); - -gint g_vprintf (gchar const *format, - va_list args); -gint g_vfprintf (FILE *file, - gchar const *format, - va_list args); -gint g_vsprintf (gchar *string, - gchar const *format, - va_list args); -gint g_vasprintf (gchar **string, - gchar const *format, - va_list args); - -G_END_DECLS - -#endif /* __G_PRINTF_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gqsort.h b/GstreamerHelper/x64/include/glib-2.0/glib/gqsort.h deleted file mode 100644 index 05b4b66f..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gqsort.h +++ /dev/null @@ -1,46 +0,0 @@ - /* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_QSORT_H__ -#define __G_QSORT_H__ - -#include - -G_BEGIN_DECLS - -void g_qsort_with_data (gconstpointer pbase, - gint total_elems, - gsize size, - GCompareDataFunc compare_func, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_QSORT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gquark.h b/GstreamerHelper/x64/include/glib-2.0/glib/gquark.h deleted file mode 100644 index 39d22ab1..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gquark.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_QUARK_H__ -#define __G_QUARK_H__ - -#include - -G_BEGIN_DECLS - -typedef guint32 GQuark; - -/* Quarks (string<->id association) - */ -GQuark g_quark_try_string (const gchar *string); -GQuark g_quark_from_static_string (const gchar *string); -GQuark g_quark_from_string (const gchar *string); -const gchar * g_quark_to_string (GQuark quark) G_GNUC_CONST; - -#define G_DEFINE_QUARK(QN, q_n) \ -GQuark \ -q_n##_quark (void) \ -{ \ - static GQuark q; \ - \ - if G_UNLIKELY (q == 0) \ - q = g_quark_from_static_string (#QN); \ - \ - return q; \ -} - -const gchar * g_intern_string (const gchar *string); -const gchar * g_intern_static_string (const gchar *string); - -G_END_DECLS - -#endif /* __G_QUARK_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gqueue.h b/GstreamerHelper/x64/include/glib-2.0/glib/gqueue.h deleted file mode 100644 index 1d13eef8..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gqueue.h +++ /dev/null @@ -1,152 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_QUEUE_H__ -#define __G_QUEUE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GQueue GQueue; - -/** - * GQueue: - * @head: a pointer to the first element of the queue - * @tail: a pointer to the last element of the queue - * @length: the number of elements in the queue - * - * Contains the public fields of a - * Queue. - */ -struct _GQueue -{ - GList *head; - GList *tail; - guint length; -}; - -/** - * G_QUEUE_INIT: - * - * A statically-allocated #GQueue must be initialized with this - * macro before it can be used. This macro can be used to initialize - * a variable, but it cannot be assigned to a variable. In that case - * you have to use g_queue_init(). - * - * |[ - * GQueue my_queue = G_QUEUE_INIT; - * ]| - * - * Since: 2.14 - */ -#define G_QUEUE_INIT { NULL, NULL, 0 } - -/* Queues - */ -GQueue* g_queue_new (void); -void g_queue_free (GQueue *queue); -void g_queue_free_full (GQueue *queue, - GDestroyNotify free_func); -void g_queue_init (GQueue *queue); -void g_queue_clear (GQueue *queue); -gboolean g_queue_is_empty (GQueue *queue); -guint g_queue_get_length (GQueue *queue); -void g_queue_reverse (GQueue *queue); -GQueue * g_queue_copy (GQueue *queue); -void g_queue_foreach (GQueue *queue, - GFunc func, - gpointer user_data); -GList * g_queue_find (GQueue *queue, - gconstpointer data); -GList * g_queue_find_custom (GQueue *queue, - gconstpointer data, - GCompareFunc func); -void g_queue_sort (GQueue *queue, - GCompareDataFunc compare_func, - gpointer user_data); - -void g_queue_push_head (GQueue *queue, - gpointer data); -void g_queue_push_tail (GQueue *queue, - gpointer data); -void g_queue_push_nth (GQueue *queue, - gpointer data, - gint n); -gpointer g_queue_pop_head (GQueue *queue); -gpointer g_queue_pop_tail (GQueue *queue); -gpointer g_queue_pop_nth (GQueue *queue, - guint n); -gpointer g_queue_peek_head (GQueue *queue); -gpointer g_queue_peek_tail (GQueue *queue); -gpointer g_queue_peek_nth (GQueue *queue, - guint n); -gint g_queue_index (GQueue *queue, - gconstpointer data); -gboolean g_queue_remove (GQueue *queue, - gconstpointer data); -guint g_queue_remove_all (GQueue *queue, - gconstpointer data); -void g_queue_insert_before (GQueue *queue, - GList *sibling, - gpointer data); -void g_queue_insert_after (GQueue *queue, - GList *sibling, - gpointer data); -void g_queue_insert_sorted (GQueue *queue, - gpointer data, - GCompareDataFunc func, - gpointer user_data); - -void g_queue_push_head_link (GQueue *queue, - GList *link_); -void g_queue_push_tail_link (GQueue *queue, - GList *link_); -void g_queue_push_nth_link (GQueue *queue, - gint n, - GList *link_); -GList* g_queue_pop_head_link (GQueue *queue); -GList* g_queue_pop_tail_link (GQueue *queue); -GList* g_queue_pop_nth_link (GQueue *queue, - guint n); -GList* g_queue_peek_head_link (GQueue *queue); -GList* g_queue_peek_tail_link (GQueue *queue); -GList* g_queue_peek_nth_link (GQueue *queue, - guint n); -gint g_queue_link_index (GQueue *queue, - GList *link_); -void g_queue_unlink (GQueue *queue, - GList *link_); -void g_queue_delete_link (GQueue *queue, - GList *link_); - -G_END_DECLS - -#endif /* __G_QUEUE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/grand.h b/GstreamerHelper/x64/include/glib-2.0/glib/grand.h deleted file mode 100644 index 182616b3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/grand.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_RAND_H__ -#define __G_RAND_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GRand GRand; - -/* GRand - a good and fast random number generator: Mersenne Twister - * see http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html for more info. - * The range functions return a value in the intervall [begin, end). - * int -> [0..2^32-1] - * int_range -> [begin..end-1] - * double -> [0..1) - * double_range -> [begin..end) - */ - -GRand* g_rand_new_with_seed (guint32 seed); -GRand* g_rand_new_with_seed_array (const guint32 *seed, - guint seed_length); -GRand* g_rand_new (void); -void g_rand_free (GRand *rand_); -GRand* g_rand_copy (GRand *rand_); -void g_rand_set_seed (GRand *rand_, - guint32 seed); -void g_rand_set_seed_array (GRand *rand_, - const guint32 *seed, - guint seed_length); - -#define g_rand_boolean(rand_) ((g_rand_int (rand_) & (1 << 15)) != 0) - -guint32 g_rand_int (GRand *rand_); -gint32 g_rand_int_range (GRand *rand_, - gint32 begin, - gint32 end); -gdouble g_rand_double (GRand *rand_); -gdouble g_rand_double_range (GRand *rand_, - gdouble begin, - gdouble end); -void g_random_set_seed (guint32 seed); - -#define g_random_boolean() ((g_random_int () & (1 << 15)) != 0) - -guint32 g_random_int (void); -gint32 g_random_int_range (gint32 begin, - gint32 end); -gdouble g_random_double (void); -gdouble g_random_double_range (gdouble begin, - gdouble end); - - -G_END_DECLS - -#endif /* __G_RAND_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gregex.h b/GstreamerHelper/x64/include/glib-2.0/glib/gregex.h deleted file mode 100644 index 53a2aeef..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gregex.h +++ /dev/null @@ -1,561 +0,0 @@ -/* GRegex -- regular expression API wrapper around PCRE. - * - * Copyright (C) 1999, 2000 Scott Wimer - * Copyright (C) 2004, Matthias Clasen - * Copyright (C) 2005 - 2007, Marco Barisione - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_REGEX_H__ -#define __G_REGEX_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GRegexError: - * @G_REGEX_ERROR_COMPILE: Compilation of the regular expression failed. - * @G_REGEX_ERROR_OPTIMIZE: Optimization of the regular expression failed. - * @G_REGEX_ERROR_REPLACE: Replacement failed due to an ill-formed replacement - * string. - * @G_REGEX_ERROR_MATCH: The match process failed. - * @G_REGEX_ERROR_INTERNAL: Internal error of the regular expression engine. - * Since 2.16 - * @G_REGEX_ERROR_STRAY_BACKSLASH: "\\" at end of pattern. Since 2.16 - * @G_REGEX_ERROR_MISSING_CONTROL_CHAR: "\\c" at end of pattern. Since 2.16 - * @G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: Unrecognized character follows "\\". - * Since 2.16 - * @G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: Numbers out of order in "{}" - * quantifier. Since 2.16 - * @G_REGEX_ERROR_QUANTIFIER_TOO_BIG: Number too big in "{}" quantifier. - * Since 2.16 - * @G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: Missing terminating "]" for - * character class. Since 2.16 - * @G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: Invalid escape sequence - * in character class. Since 2.16 - * @G_REGEX_ERROR_RANGE_OUT_OF_ORDER: Range out of order in character class. - * Since 2.16 - * @G_REGEX_ERROR_NOTHING_TO_REPEAT: Nothing to repeat. Since 2.16 - * @G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: Unrecognized character after "(?", - * "(?<" or "(?P". Since 2.16 - * @G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: POSIX named classes are - * supported only within a class. Since 2.16 - * @G_REGEX_ERROR_UNMATCHED_PARENTHESIS: Missing terminating ")" or ")" - * without opening "(". Since 2.16 - * @G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: Reference to non-existent - * subpattern. Since 2.16 - * @G_REGEX_ERROR_UNTERMINATED_COMMENT: Missing terminating ")" after comment. - * Since 2.16 - * @G_REGEX_ERROR_EXPRESSION_TOO_LARGE: Regular expression too large. - * Since 2.16 - * @G_REGEX_ERROR_MEMORY_ERROR: Failed to get memory. Since 2.16 - * @G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: Lookbehind assertion is not - * fixed length. Since 2.16 - * @G_REGEX_ERROR_MALFORMED_CONDITION: Malformed number or name after "(?(". - * Since 2.16 - * @G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: Conditional group contains - * more than two branches. Since 2.16 - * @G_REGEX_ERROR_ASSERTION_EXPECTED: Assertion expected after "(?(". - * Since 2.16 - * @G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: Unknown POSIX class name. - * Since 2.16 - * @G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: POSIX collating - * elements are not supported. Since 2.16 - * @G_REGEX_ERROR_HEX_CODE_TOO_LARGE: Character value in "\\x{...}" sequence - * is too large. Since 2.16 - * @G_REGEX_ERROR_INVALID_CONDITION: Invalid condition "(?(0)". Since 2.16 - * @G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: \\C not allowed in - * lookbehind assertion. Since 2.16 - * @G_REGEX_ERROR_INFINITE_LOOP: Recursive call could loop indefinitely. - * Since 2.16 - * @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: Missing terminator - * in subpattern name. Since 2.16 - * @G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: Two named subpatterns have - * the same name. Since 2.16 - * @G_REGEX_ERROR_MALFORMED_PROPERTY: Malformed "\\P" or "\\p" sequence. - * Since 2.16 - * @G_REGEX_ERROR_UNKNOWN_PROPERTY: Unknown property name after "\\P" or - * "\\p". Since 2.16 - * @G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: Subpattern name is too long - * (maximum 32 characters). Since 2.16 - * @G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: Too many named subpatterns (maximum - * 10,000). Since 2.16 - * @G_REGEX_ERROR_INVALID_OCTAL_VALUE: Octal value is greater than "\\377". - * Since 2.16 - * @G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: "DEFINE" group contains more - * than one branch. Since 2.16 - * @G_REGEX_ERROR_DEFINE_REPETION: Repeating a "DEFINE" group is not allowed. - * This error is never raised. Since: 2.16 Deprecated: 2.34 - * @G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: Inconsistent newline options. - * Since 2.16 - * @G_REGEX_ERROR_MISSING_BACK_REFERENCE: "\\g" is not followed by a braced, - * angle-bracketed, or quoted name or number, or by a plain number. Since: 2.16 - * @G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE: relative reference must not be zero. Since: 2.34 - * @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: the backtracing - * control verb used does not allow an argument. Since: 2.34 - * @G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB: unknown backtracing - * control verb. Since: 2.34 - * @G_REGEX_ERROR_NUMBER_TOO_BIG: number is too big in escape sequence. Since: 2.34 - * @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME: Missing subpattern name. Since: 2.34 - * @G_REGEX_ERROR_MISSING_DIGIT: Missing digit. Since 2.34 - * @G_REGEX_ERROR_INVALID_DATA_CHARACTER: In JavaScript compatibility mode, - * "[" is an invalid data character. Since: 2.34 - * @G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME: different names for subpatterns of the - * same number are not allowed. Since: 2.34 - * @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: the backtracing control - * verb requires an argument. Since: 2.34 - * @G_REGEX_ERROR_INVALID_CONTROL_CHAR: "\\c" must be followed by an ASCII - * character. Since: 2.34 - * @G_REGEX_ERROR_MISSING_NAME: "\\k" is not followed by a braced, angle-bracketed, or - * quoted name. Since: 2.34 - * @G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS: "\\N" is not supported in a class. Since: 2.34 - * @G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES: too many forward references. Since: 2.34 - * @G_REGEX_ERROR_NAME_TOO_LONG: the name is too long in "(*MARK)", "(*PRUNE)", - * "(*SKIP)", or "(*THEN)". Since: 2.34 - * @G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE: the character value in the \\u sequence is - * too large. Since: 2.34 - * - * Error codes returned by regular expressions functions. - * - * Since: 2.14 - */ -typedef enum -{ - G_REGEX_ERROR_COMPILE, - G_REGEX_ERROR_OPTIMIZE, - G_REGEX_ERROR_REPLACE, - G_REGEX_ERROR_MATCH, - G_REGEX_ERROR_INTERNAL, - - /* These are the error codes from PCRE + 100 */ - G_REGEX_ERROR_STRAY_BACKSLASH = 101, - G_REGEX_ERROR_MISSING_CONTROL_CHAR = 102, - G_REGEX_ERROR_UNRECOGNIZED_ESCAPE = 103, - G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER = 104, - G_REGEX_ERROR_QUANTIFIER_TOO_BIG = 105, - G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS = 106, - G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS = 107, - G_REGEX_ERROR_RANGE_OUT_OF_ORDER = 108, - G_REGEX_ERROR_NOTHING_TO_REPEAT = 109, - G_REGEX_ERROR_UNRECOGNIZED_CHARACTER = 112, - G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS = 113, - G_REGEX_ERROR_UNMATCHED_PARENTHESIS = 114, - G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE = 115, - G_REGEX_ERROR_UNTERMINATED_COMMENT = 118, - G_REGEX_ERROR_EXPRESSION_TOO_LARGE = 120, - G_REGEX_ERROR_MEMORY_ERROR = 121, - G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND = 125, - G_REGEX_ERROR_MALFORMED_CONDITION = 126, - G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES = 127, - G_REGEX_ERROR_ASSERTION_EXPECTED = 128, - G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME = 130, - G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED = 131, - G_REGEX_ERROR_HEX_CODE_TOO_LARGE = 134, - G_REGEX_ERROR_INVALID_CONDITION = 135, - G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND = 136, - G_REGEX_ERROR_INFINITE_LOOP = 140, - G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR = 142, - G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME = 143, - G_REGEX_ERROR_MALFORMED_PROPERTY = 146, - G_REGEX_ERROR_UNKNOWN_PROPERTY = 147, - G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG = 148, - G_REGEX_ERROR_TOO_MANY_SUBPATTERNS = 149, - G_REGEX_ERROR_INVALID_OCTAL_VALUE = 151, - G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE = 154, - G_REGEX_ERROR_DEFINE_REPETION = 155, - G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS = 156, - G_REGEX_ERROR_MISSING_BACK_REFERENCE = 157, - G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE = 158, - G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN = 159, - G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB = 160, - G_REGEX_ERROR_NUMBER_TOO_BIG = 161, - G_REGEX_ERROR_MISSING_SUBPATTERN_NAME = 162, - G_REGEX_ERROR_MISSING_DIGIT = 163, - G_REGEX_ERROR_INVALID_DATA_CHARACTER = 164, - G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME = 165, - G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED = 166, - G_REGEX_ERROR_INVALID_CONTROL_CHAR = 168, - G_REGEX_ERROR_MISSING_NAME = 169, - G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS = 171, - G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES = 172, - G_REGEX_ERROR_NAME_TOO_LONG = 175, - G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE = 176 -} GRegexError; - -/** - * G_REGEX_ERROR: - * - * Error domain for regular expressions. Errors in this domain will be - * from the #GRegexError enumeration. See #GError for information on - * error domains. - * - * Since: 2.14 - */ -#define G_REGEX_ERROR g_regex_error_quark () - -GQuark g_regex_error_quark (void); - -/** - * GRegexCompileFlags: - * @G_REGEX_CASELESS: Letters in the pattern match both upper- and - * lowercase letters. This option can be changed within a pattern - * by a "(?i)" option setting. - * @G_REGEX_MULTILINE: By default, GRegex treats the strings as consisting - * of a single line of characters (even if it actually contains - * newlines). The "start of line" metacharacter ("^") matches only - * at the start of the string, while the "end of line" metacharacter - * ("$") matches only at the end of the string, or before a terminating - * newline (unless #G_REGEX_DOLLAR_ENDONLY is set). When - * #G_REGEX_MULTILINE is set, the "start of line" and "end of line" - * constructs match immediately following or immediately before any - * newline in the string, respectively, as well as at the very start - * and end. This can be changed within a pattern by a "(?m)" option - * setting. - * @G_REGEX_DOTALL: A dot metacharater (".") in the pattern matches all - * characters, including newlines. Without it, newlines are excluded. - * This option can be changed within a pattern by a ("?s") option setting. - * @G_REGEX_EXTENDED: Whitespace data characters in the pattern are - * totally ignored except when escaped or inside a character class. - * Whitespace does not include the VT character (code 11). In addition, - * characters between an unescaped "#" outside a character class and - * the next newline character, inclusive, are also ignored. This can - * be changed within a pattern by a "(?x)" option setting. - * @G_REGEX_ANCHORED: The pattern is forced to be "anchored", that is, - * it is constrained to match only at the first matching point in the - * string that is being searched. This effect can also be achieved by - * appropriate constructs in the pattern itself such as the "^" - * metacharater. - * @G_REGEX_DOLLAR_ENDONLY: A dollar metacharacter ("$") in the pattern - * matches only at the end of the string. Without this option, a - * dollar also matches immediately before the final character if - * it is a newline (but not before any other newlines). This option - * is ignored if #G_REGEX_MULTILINE is set. - * @G_REGEX_UNGREEDY: Inverts the "greediness" of the quantifiers so that - * they are not greedy by default, but become greedy if followed by "?". - * It can also be set by a "(?U)" option setting within the pattern. - * @G_REGEX_RAW: Usually strings must be valid UTF-8 strings, using this - * flag they are considered as a raw sequence of bytes. - * @G_REGEX_NO_AUTO_CAPTURE: Disables the use of numbered capturing - * parentheses in the pattern. Any opening parenthesis that is not - * followed by "?" behaves as if it were followed by "?:" but named - * parentheses can still be used for capturing (and they acquire numbers - * in the usual way). - * @G_REGEX_OPTIMIZE: Optimize the regular expression. If the pattern will - * be used many times, then it may be worth the effort to optimize it - * to improve the speed of matches. - * @G_REGEX_FIRSTLINE: Limits an unanchored pattern to match before (or at) the - * first newline. Since: 2.34 - * @G_REGEX_DUPNAMES: Names used to identify capturing subpatterns need not - * be unique. This can be helpful for certain types of pattern when it - * is known that only one instance of the named subpattern can ever be - * matched. - * @G_REGEX_NEWLINE_CR: Usually any newline character or character sequence is - * recognized. If this option is set, the only recognized newline character - * is '\r'. - * @G_REGEX_NEWLINE_LF: Usually any newline character or character sequence is - * recognized. If this option is set, the only recognized newline character - * is '\n'. - * @G_REGEX_NEWLINE_CRLF: Usually any newline character or character sequence is - * recognized. If this option is set, the only recognized newline character - * sequence is '\r\n'. - * @G_REGEX_NEWLINE_ANYCRLF: Usually any newline character or character sequence - * is recognized. If this option is set, the only recognized newline character - * sequences are '\r', '\n', and '\r\n'. Since: 2.34 - * @G_REGEX_BSR_ANYCRLF: Usually any newline character or character sequence - * is recognised. If this option is set, then "\R" only recognizes the newline - * characters '\r', '\n' and '\r\n'. Since: 2.34 - * @G_REGEX_JAVASCRIPT_COMPAT: Changes behaviour so that it is compatible with - * JavaScript rather than PCRE. Since: 2.34 - * - * Flags specifying compile-time options. - * - * Since: 2.14 - */ -/* Remember to update G_REGEX_COMPILE_MASK in gregex.c after - * adding a new flag. */ -typedef enum -{ - G_REGEX_CASELESS = 1 << 0, - G_REGEX_MULTILINE = 1 << 1, - G_REGEX_DOTALL = 1 << 2, - G_REGEX_EXTENDED = 1 << 3, - G_REGEX_ANCHORED = 1 << 4, - G_REGEX_DOLLAR_ENDONLY = 1 << 5, - G_REGEX_UNGREEDY = 1 << 9, - G_REGEX_RAW = 1 << 11, - G_REGEX_NO_AUTO_CAPTURE = 1 << 12, - G_REGEX_OPTIMIZE = 1 << 13, - G_REGEX_FIRSTLINE = 1 << 18, - G_REGEX_DUPNAMES = 1 << 19, - G_REGEX_NEWLINE_CR = 1 << 20, - G_REGEX_NEWLINE_LF = 1 << 21, - G_REGEX_NEWLINE_CRLF = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF, - G_REGEX_NEWLINE_ANYCRLF = G_REGEX_NEWLINE_CR | 1 << 22, - G_REGEX_BSR_ANYCRLF = 1 << 23, - G_REGEX_JAVASCRIPT_COMPAT = 1 << 25 -} GRegexCompileFlags; - -/** - * GRegexMatchFlags: - * @G_REGEX_MATCH_ANCHORED: The pattern is forced to be "anchored", that is, - * it is constrained to match only at the first matching point in the - * string that is being searched. This effect can also be achieved by - * appropriate constructs in the pattern itself such as the "^" - * metacharater. - * @G_REGEX_MATCH_NOTBOL: Specifies that first character of the string is - * not the beginning of a line, so the circumflex metacharacter should - * not match before it. Setting this without #G_REGEX_MULTILINE (at - * compile time) causes circumflex never to match. This option affects - * only the behaviour of the circumflex metacharacter, it does not - * affect "\A". - * @G_REGEX_MATCH_NOTEOL: Specifies that the end of the subject string is - * not the end of a line, so the dollar metacharacter should not match - * it nor (except in multiline mode) a newline immediately before it. - * Setting this without #G_REGEX_MULTILINE (at compile time) causes - * dollar never to match. This option affects only the behaviour of - * the dollar metacharacter, it does not affect "\Z" or "\z". - * @G_REGEX_MATCH_NOTEMPTY: An empty string is not considered to be a valid - * match if this option is set. If there are alternatives in the pattern, - * they are tried. If all the alternatives match the empty string, the - * entire match fails. For example, if the pattern "a?b?" is applied to - * a string not beginning with "a" or "b", it matches the empty string - * at the start of the string. With this flag set, this match is not - * valid, so GRegex searches further into the string for occurrences - * of "a" or "b". - * @G_REGEX_MATCH_PARTIAL: Turns on the partial matching feature, for more - * documentation on partial matching see g_match_info_is_partial_match(). - * @G_REGEX_MATCH_NEWLINE_CR: Overrides the newline definition set when - * creating a new #GRegex, setting the '\r' character as line terminator. - * @G_REGEX_MATCH_NEWLINE_LF: Overrides the newline definition set when - * creating a new #GRegex, setting the '\n' character as line terminator. - * @G_REGEX_MATCH_NEWLINE_CRLF: Overrides the newline definition set when - * creating a new #GRegex, setting the '\r\n' characters sequence as line terminator. - * @G_REGEX_MATCH_NEWLINE_ANY: Overrides the newline definition set when - * creating a new #GRegex, any Unicode newline sequence - * is recognised as a newline. These are '\r', '\n' and '\rn', and the - * single characters U+000B LINE TABULATION, U+000C FORM FEED (FF), - * U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and - * U+2029 PARAGRAPH SEPARATOR. - * @G_REGEX_MATCH_NEWLINE_ANYCRLF: Overrides the newline definition set when - * creating a new #GRegex; any '\r', '\n', or '\r\n' character sequence - * is recognized as a newline. Since: 2.34 - * @G_REGEX_MATCH_BSR_ANYCRLF: Overrides the newline definition for "\R" set when - * creating a new #GRegex; only '\r', '\n', or '\r\n' character sequences - * are recognized as a newline by "\R". Since: 2.34 - * @G_REGEX_MATCH_BSR_ANY: Overrides the newline definition for "\R" set when - * creating a new #GRegex; any Unicode newline character or character sequence - * are recognized as a newline by "\R". These are '\r', '\n' and '\rn', and the - * single characters U+000B LINE TABULATION, U+000C FORM FEED (FF), - * U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and - * U+2029 PARAGRAPH SEPARATOR. Since: 2.34 - * @G_REGEX_MATCH_PARTIAL_SOFT: An alias for #G_REGEX_MATCH_PARTIAL. Since: 2.34 - * @G_REGEX_MATCH_PARTIAL_HARD: Turns on the partial matching feature. In contrast to - * to #G_REGEX_MATCH_PARTIAL_SOFT, this stops matching as soon as a partial match - * is found, without continuing to search for a possible complete match. See - * see g_match_info_is_partial_match() for more information. Since: 2.34 - * @G_REGEX_MATCH_NOTEMPTY_ATSTART: Like #G_REGEX_MATCH_NOTEMPTY, but only applied to - * the start of the matched string. For anchored - * patterns this can only happen for pattern containing "\K". Since: 2.34 - * - * Flags specifying match-time options. - * - * Since: 2.14 - */ -/* Remember to update G_REGEX_MATCH_MASK in gregex.c after - * adding a new flag. */ -typedef enum -{ - G_REGEX_MATCH_ANCHORED = 1 << 4, - G_REGEX_MATCH_NOTBOL = 1 << 7, - G_REGEX_MATCH_NOTEOL = 1 << 8, - G_REGEX_MATCH_NOTEMPTY = 1 << 10, - G_REGEX_MATCH_PARTIAL = 1 << 15, - G_REGEX_MATCH_NEWLINE_CR = 1 << 20, - G_REGEX_MATCH_NEWLINE_LF = 1 << 21, - G_REGEX_MATCH_NEWLINE_CRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF, - G_REGEX_MATCH_NEWLINE_ANY = 1 << 22, - G_REGEX_MATCH_NEWLINE_ANYCRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_ANY, - G_REGEX_MATCH_BSR_ANYCRLF = 1 << 23, - G_REGEX_MATCH_BSR_ANY = 1 << 24, - G_REGEX_MATCH_PARTIAL_SOFT = G_REGEX_MATCH_PARTIAL, - G_REGEX_MATCH_PARTIAL_HARD = 1 << 27, - G_REGEX_MATCH_NOTEMPTY_ATSTART = 1 << 28 -} GRegexMatchFlags; - -/** - * GRegex: - * - * A GRegex is the "compiled" form of a regular expression pattern. This - * structure is opaque and its fields cannot be accessed directly. - * - * Since: 2.14 - */ -typedef struct _GRegex GRegex; - - -typedef struct _GMatchInfo GMatchInfo; - -/** - * GRegexEvalCallback: - * @match_info: the #GMatchInfo generated by the match. - * Use g_match_info_get_regex() and g_match_info_get_string() if you - * need the #GRegex or the matched string. - * @result: a #GString containing the new string - * @user_data: user data passed to g_regex_replace_eval() - * - * Specifies the type of the function passed to g_regex_replace_eval(). - * It is called for each occurrence of the pattern in the string passed - * to g_regex_replace_eval(), and it should append the replacement to - * @result. - * - * Returns: %FALSE to continue the replacement process, %TRUE to stop it - * - * Since: 2.14 - */ -typedef gboolean (*GRegexEvalCallback) (const GMatchInfo *match_info, - GString *result, - gpointer user_data); - - -GRegex *g_regex_new (const gchar *pattern, - GRegexCompileFlags compile_options, - GRegexMatchFlags match_options, - GError **error); -GRegex *g_regex_ref (GRegex *regex); -void g_regex_unref (GRegex *regex); -const gchar *g_regex_get_pattern (const GRegex *regex); -gint g_regex_get_max_backref (const GRegex *regex); -gint g_regex_get_capture_count (const GRegex *regex); -gboolean g_regex_get_has_cr_or_lf (const GRegex *regex); -gint g_regex_get_string_number (const GRegex *regex, - const gchar *name); -gchar *g_regex_escape_string (const gchar *string, - gint length); -gchar *g_regex_escape_nul (const gchar *string, - gint length); - -GRegexCompileFlags g_regex_get_compile_flags (const GRegex *regex); -GRegexMatchFlags g_regex_get_match_flags (const GRegex *regex); - -/* Matching. */ -gboolean g_regex_match_simple (const gchar *pattern, - const gchar *string, - GRegexCompileFlags compile_options, - GRegexMatchFlags match_options); -gboolean g_regex_match (const GRegex *regex, - const gchar *string, - GRegexMatchFlags match_options, - GMatchInfo **match_info); -gboolean g_regex_match_full (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - GMatchInfo **match_info, - GError **error); -gboolean g_regex_match_all (const GRegex *regex, - const gchar *string, - GRegexMatchFlags match_options, - GMatchInfo **match_info); -gboolean g_regex_match_all_full (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - GMatchInfo **match_info, - GError **error); - -/* String splitting. */ -gchar **g_regex_split_simple (const gchar *pattern, - const gchar *string, - GRegexCompileFlags compile_options, - GRegexMatchFlags match_options); -gchar **g_regex_split (const GRegex *regex, - const gchar *string, - GRegexMatchFlags match_options); -gchar **g_regex_split_full (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - gint max_tokens, - GError **error); - -/* String replacement. */ -gchar *g_regex_replace (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - const gchar *replacement, - GRegexMatchFlags match_options, - GError **error); -gchar *g_regex_replace_literal (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - const gchar *replacement, - GRegexMatchFlags match_options, - GError **error); -gchar *g_regex_replace_eval (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - GRegexEvalCallback eval, - gpointer user_data, - GError **error); -gboolean g_regex_check_replacement (const gchar *replacement, - gboolean *has_references, - GError **error); - -/* Match info */ -GRegex *g_match_info_get_regex (const GMatchInfo *match_info); -const gchar *g_match_info_get_string (const GMatchInfo *match_info); - -GMatchInfo *g_match_info_ref (GMatchInfo *match_info); -void g_match_info_unref (GMatchInfo *match_info); -void g_match_info_free (GMatchInfo *match_info); -gboolean g_match_info_next (GMatchInfo *match_info, - GError **error); -gboolean g_match_info_matches (const GMatchInfo *match_info); -gint g_match_info_get_match_count (const GMatchInfo *match_info); -gboolean g_match_info_is_partial_match (const GMatchInfo *match_info); -gchar *g_match_info_expand_references(const GMatchInfo *match_info, - const gchar *string_to_expand, - GError **error); -gchar *g_match_info_fetch (const GMatchInfo *match_info, - gint match_num); -gboolean g_match_info_fetch_pos (const GMatchInfo *match_info, - gint match_num, - gint *start_pos, - gint *end_pos); -gchar *g_match_info_fetch_named (const GMatchInfo *match_info, - const gchar *name); -gboolean g_match_info_fetch_named_pos (const GMatchInfo *match_info, - const gchar *name, - gint *start_pos, - gint *end_pos); -gchar **g_match_info_fetch_all (const GMatchInfo *match_info); - -G_END_DECLS - -#endif /* __G_REGEX_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gscanner.h b/GstreamerHelper/x64/include/glib-2.0/glib/gscanner.h deleted file mode 100644 index dd932f42..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gscanner.h +++ /dev/null @@ -1,284 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SCANNER_H__ -#define __G_SCANNER_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GScanner GScanner; -typedef struct _GScannerConfig GScannerConfig; -typedef union _GTokenValue GTokenValue; - -typedef void (*GScannerMsgFunc) (GScanner *scanner, - gchar *message, - gboolean error); - -/* GScanner: Flexible lexical scanner for general purpose. - */ - -/* Character sets */ -#define G_CSET_A_2_Z "ABCDEFGHIJKLMNOPQRSTUVWXYZ" -#define G_CSET_a_2_z "abcdefghijklmnopqrstuvwxyz" -#define G_CSET_DIGITS "0123456789" -#define G_CSET_LATINC "\300\301\302\303\304\305\306"\ - "\307\310\311\312\313\314\315\316\317\320"\ - "\321\322\323\324\325\326"\ - "\330\331\332\333\334\335\336" -#define G_CSET_LATINS "\337\340\341\342\343\344\345\346"\ - "\347\350\351\352\353\354\355\356\357\360"\ - "\361\362\363\364\365\366"\ - "\370\371\372\373\374\375\376\377" - -/* Error types */ -typedef enum -{ - G_ERR_UNKNOWN, - G_ERR_UNEXP_EOF, - G_ERR_UNEXP_EOF_IN_STRING, - G_ERR_UNEXP_EOF_IN_COMMENT, - G_ERR_NON_DIGIT_IN_CONST, - G_ERR_DIGIT_RADIX, - G_ERR_FLOAT_RADIX, - G_ERR_FLOAT_MALFORMED -} GErrorType; - -/* Token types */ -typedef enum -{ - G_TOKEN_EOF = 0, - - G_TOKEN_LEFT_PAREN = '(', - G_TOKEN_RIGHT_PAREN = ')', - G_TOKEN_LEFT_CURLY = '{', - G_TOKEN_RIGHT_CURLY = '}', - G_TOKEN_LEFT_BRACE = '[', - G_TOKEN_RIGHT_BRACE = ']', - G_TOKEN_EQUAL_SIGN = '=', - G_TOKEN_COMMA = ',', - - G_TOKEN_NONE = 256, - - G_TOKEN_ERROR, - - G_TOKEN_CHAR, - G_TOKEN_BINARY, - G_TOKEN_OCTAL, - G_TOKEN_INT, - G_TOKEN_HEX, - G_TOKEN_FLOAT, - G_TOKEN_STRING, - - G_TOKEN_SYMBOL, - G_TOKEN_IDENTIFIER, - G_TOKEN_IDENTIFIER_NULL, - - G_TOKEN_COMMENT_SINGLE, - G_TOKEN_COMMENT_MULTI, - - /*< private >*/ - G_TOKEN_LAST -} GTokenType; - -union _GTokenValue -{ - gpointer v_symbol; - gchar *v_identifier; - gulong v_binary; - gulong v_octal; - gulong v_int; - guint64 v_int64; - gdouble v_float; - gulong v_hex; - gchar *v_string; - gchar *v_comment; - guchar v_char; - guint v_error; -}; - -struct _GScannerConfig -{ - /* Character sets - */ - gchar *cset_skip_characters; /* default: " \t\n" */ - gchar *cset_identifier_first; - gchar *cset_identifier_nth; - gchar *cpair_comment_single; /* default: "#\n" */ - - /* Should symbol lookup work case sensitive? - */ - guint case_sensitive : 1; - - /* Boolean values to be adjusted "on the fly" - * to configure scanning behaviour. - */ - guint skip_comment_multi : 1; /* C like comment */ - guint skip_comment_single : 1; /* single line comment */ - guint scan_comment_multi : 1; /* scan multi line comments? */ - guint scan_identifier : 1; - guint scan_identifier_1char : 1; - guint scan_identifier_NULL : 1; - guint scan_symbols : 1; - guint scan_binary : 1; - guint scan_octal : 1; - guint scan_float : 1; - guint scan_hex : 1; /* `0x0ff0' */ - guint scan_hex_dollar : 1; /* `$0ff0' */ - guint scan_string_sq : 1; /* string: 'anything' */ - guint scan_string_dq : 1; /* string: "\\-escapes!\n" */ - guint numbers_2_int : 1; /* bin, octal, hex => int */ - guint int_2_float : 1; /* int => G_TOKEN_FLOAT? */ - guint identifier_2_string : 1; - guint char_2_token : 1; /* return G_TOKEN_CHAR? */ - guint symbol_2_token : 1; - guint scope_0_fallback : 1; /* try scope 0 on lookups? */ - guint store_int64 : 1; /* use value.v_int64 rather than v_int */ - - /*< private >*/ - guint padding_dummy; -}; - -struct _GScanner -{ - /* unused fields */ - gpointer user_data; - guint max_parse_errors; - - /* g_scanner_error() increments this field */ - guint parse_errors; - - /* name of input stream, featured by the default message handler */ - const gchar *input_name; - - /* quarked data */ - GData *qdata; - - /* link into the scanner configuration */ - GScannerConfig *config; - - /* fields filled in after g_scanner_get_next_token() */ - GTokenType token; - GTokenValue value; - guint line; - guint position; - - /* fields filled in after g_scanner_peek_next_token() */ - GTokenType next_token; - GTokenValue next_value; - guint next_line; - guint next_position; - - /*< private >*/ - /* to be considered private */ - GHashTable *symbol_table; - gint input_fd; - const gchar *text; - const gchar *text_end; - gchar *buffer; - guint scope_id; - - /*< public >*/ - /* handler function for _warn and _error */ - GScannerMsgFunc msg_handler; -}; - -GScanner* g_scanner_new (const GScannerConfig *config_templ); -void g_scanner_destroy (GScanner *scanner); -void g_scanner_input_file (GScanner *scanner, - gint input_fd); -void g_scanner_sync_file_offset (GScanner *scanner); -void g_scanner_input_text (GScanner *scanner, - const gchar *text, - guint text_len); -GTokenType g_scanner_get_next_token (GScanner *scanner); -GTokenType g_scanner_peek_next_token (GScanner *scanner); -GTokenType g_scanner_cur_token (GScanner *scanner); -GTokenValue g_scanner_cur_value (GScanner *scanner); -guint g_scanner_cur_line (GScanner *scanner); -guint g_scanner_cur_position (GScanner *scanner); -gboolean g_scanner_eof (GScanner *scanner); -guint g_scanner_set_scope (GScanner *scanner, - guint scope_id); -void g_scanner_scope_add_symbol (GScanner *scanner, - guint scope_id, - const gchar *symbol, - gpointer value); -void g_scanner_scope_remove_symbol (GScanner *scanner, - guint scope_id, - const gchar *symbol); -gpointer g_scanner_scope_lookup_symbol (GScanner *scanner, - guint scope_id, - const gchar *symbol); -void g_scanner_scope_foreach_symbol (GScanner *scanner, - guint scope_id, - GHFunc func, - gpointer user_data); -gpointer g_scanner_lookup_symbol (GScanner *scanner, - const gchar *symbol); -void g_scanner_unexp_token (GScanner *scanner, - GTokenType expected_token, - const gchar *identifier_spec, - const gchar *symbol_spec, - const gchar *symbol_name, - const gchar *message, - gint is_error); -void g_scanner_error (GScanner *scanner, - const gchar *format, - ...) G_GNUC_PRINTF (2,3); -void g_scanner_warn (GScanner *scanner, - const gchar *format, - ...) G_GNUC_PRINTF (2,3); - -#ifndef G_DISABLE_DEPRECATED - -/* keep downward source compatibility */ -#define g_scanner_add_symbol( scanner, symbol, value ) G_STMT_START { \ - g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \ -} G_STMT_END -#define g_scanner_remove_symbol( scanner, symbol ) G_STMT_START { \ - g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \ -} G_STMT_END -#define g_scanner_foreach_symbol( scanner, func, data ) G_STMT_START { \ - g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \ -} G_STMT_END - -/* The following two functions are deprecated and will be removed in - * the next major release. They do no good. */ -#define g_scanner_freeze_symbol_table(scanner) ((void)0) -#define g_scanner_thaw_symbol_table(scanner) ((void)0) - -#endif /* G_DISABLE_DEPRECATED */ - -G_END_DECLS - -#endif /* __G_SCANNER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gsequence.h b/GstreamerHelper/x64/include/glib-2.0/glib/gsequence.h deleted file mode 100644 index 3e5a03de..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gsequence.h +++ /dev/null @@ -1,136 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 - * Soeren Sandmann (sandmann@daimi.au.dk) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SEQUENCE_H__ -#define __G_SEQUENCE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GSequence GSequence; -typedef struct _GSequenceNode GSequenceIter; - -typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a, - GSequenceIter *b, - gpointer data); - - -/* GSequence */ -GSequence * g_sequence_new (GDestroyNotify data_destroy); -void g_sequence_free (GSequence *seq); -gint g_sequence_get_length (GSequence *seq); -void g_sequence_foreach (GSequence *seq, - GFunc func, - gpointer user_data); -void g_sequence_foreach_range (GSequenceIter *begin, - GSequenceIter *end, - GFunc func, - gpointer user_data); -void g_sequence_sort (GSequence *seq, - GCompareDataFunc cmp_func, - gpointer cmp_data); -void g_sequence_sort_iter (GSequence *seq, - GSequenceIterCompareFunc cmp_func, - gpointer cmp_data); - - -/* Getting iters */ -GSequenceIter *g_sequence_get_begin_iter (GSequence *seq); -GSequenceIter *g_sequence_get_end_iter (GSequence *seq); -GSequenceIter *g_sequence_get_iter_at_pos (GSequence *seq, - gint pos); -GSequenceIter *g_sequence_append (GSequence *seq, - gpointer data); -GSequenceIter *g_sequence_prepend (GSequence *seq, - gpointer data); -GSequenceIter *g_sequence_insert_before (GSequenceIter *iter, - gpointer data); -void g_sequence_move (GSequenceIter *src, - GSequenceIter *dest); -void g_sequence_swap (GSequenceIter *a, - GSequenceIter *b); -GSequenceIter *g_sequence_insert_sorted (GSequence *seq, - gpointer data, - GCompareDataFunc cmp_func, - gpointer cmp_data); -GSequenceIter *g_sequence_insert_sorted_iter (GSequence *seq, - gpointer data, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); -void g_sequence_sort_changed (GSequenceIter *iter, - GCompareDataFunc cmp_func, - gpointer cmp_data); -void g_sequence_sort_changed_iter (GSequenceIter *iter, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); -void g_sequence_remove (GSequenceIter *iter); -void g_sequence_remove_range (GSequenceIter *begin, - GSequenceIter *end); -void g_sequence_move_range (GSequenceIter *dest, - GSequenceIter *begin, - GSequenceIter *end); -GSequenceIter *g_sequence_search (GSequence *seq, - gpointer data, - GCompareDataFunc cmp_func, - gpointer cmp_data); -GSequenceIter *g_sequence_search_iter (GSequence *seq, - gpointer data, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); -GSequenceIter *g_sequence_lookup (GSequence *seq, - gpointer data, - GCompareDataFunc cmp_func, - gpointer cmp_data); -GSequenceIter *g_sequence_lookup_iter (GSequence *seq, - gpointer data, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); - - -/* Dereferencing */ -gpointer g_sequence_get (GSequenceIter *iter); -void g_sequence_set (GSequenceIter *iter, - gpointer data); - -/* Operations on GSequenceIter * */ -gboolean g_sequence_iter_is_begin (GSequenceIter *iter); -gboolean g_sequence_iter_is_end (GSequenceIter *iter); -GSequenceIter *g_sequence_iter_next (GSequenceIter *iter); -GSequenceIter *g_sequence_iter_prev (GSequenceIter *iter); -gint g_sequence_iter_get_position (GSequenceIter *iter); -GSequenceIter *g_sequence_iter_move (GSequenceIter *iter, - gint delta); -GSequence * g_sequence_iter_get_sequence (GSequenceIter *iter); - - -/* Search */ -gint g_sequence_iter_compare (GSequenceIter *a, - GSequenceIter *b); -GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter *begin, - GSequenceIter *end); - -G_END_DECLS - -#endif /* __G_SEQUENCE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gshell.h b/GstreamerHelper/x64/include/glib-2.0/glib/gshell.h deleted file mode 100644 index ddb4ec56..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gshell.h +++ /dev/null @@ -1,55 +0,0 @@ -/* gshell.h - Shell-related utilities - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, write - * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SHELL_H__ -#define __G_SHELL_H__ - -#include - -G_BEGIN_DECLS - -#define G_SHELL_ERROR g_shell_error_quark () - -typedef enum -{ - /* mismatched or otherwise mangled quoting */ - G_SHELL_ERROR_BAD_QUOTING, - /* string to be parsed was empty */ - G_SHELL_ERROR_EMPTY_STRING, - G_SHELL_ERROR_FAILED -} GShellError; - -GQuark g_shell_error_quark (void); - -gchar* g_shell_quote (const gchar *unquoted_string); -gchar* g_shell_unquote (const gchar *quoted_string, - GError **error); -gboolean g_shell_parse_argv (const gchar *command_line, - gint *argcp, - gchar ***argvp, - GError **error); - -G_END_DECLS - -#endif /* __G_SHELL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gslice.h b/GstreamerHelper/x64/include/glib-2.0/glib/gslice.h deleted file mode 100644 index 3efd645d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gslice.h +++ /dev/null @@ -1,90 +0,0 @@ -/* GLIB sliced memory - fast threaded memory chunk allocator - * Copyright (C) 2005 Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SLICE_H__ -#define __G_SLICE_H__ - -#include - -G_BEGIN_DECLS - -/* slices - fast allocation/release of small memory blocks - */ -gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_slice_copy (gsize block_size, - gconstpointer mem_block) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -void g_slice_free1 (gsize block_size, - gpointer mem_block); -void g_slice_free_chain_with_offset (gsize block_size, - gpointer mem_chain, - gsize next_offset); -#define g_slice_new(type) ((type*) g_slice_alloc (sizeof (type))) -#define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type))) -/* MemoryBlockType * - * g_slice_dup (MemoryBlockType, - * MemoryBlockType *mem_block); - * g_slice_free (MemoryBlockType, - * MemoryBlockType *mem_block); - * g_slice_free_chain (MemoryBlockType, - * MemoryBlockType *first_chain_block, - * memory_block_next_field); - * pseudo prototypes for the macro - * definitions following below. - */ - -/* we go through extra hoops to ensure type safety */ -#define g_slice_dup(type, mem) \ - (1 ? (type*) g_slice_copy (sizeof (type), (mem)) \ - : ((void) ((type*) 0 == (mem)), (type*) 0)) -#define g_slice_free(type, mem) do { \ - if (1) g_slice_free1 (sizeof (type), (mem)); \ - else (void) ((type*) 0 == (mem)); \ -} while (0) -#define g_slice_free_chain(type, mem_chain, next) do { \ - if (1) g_slice_free_chain_with_offset (sizeof (type), \ - (mem_chain), G_STRUCT_OFFSET (type, next)); \ - else (void) ((type*) 0 == (mem_chain)); \ -} while (0) - - -/* --- internal debugging API --- */ -typedef enum { - G_SLICE_CONFIG_ALWAYS_MALLOC = 1, - G_SLICE_CONFIG_BYPASS_MAGAZINES, - G_SLICE_CONFIG_WORKING_SET_MSECS, - G_SLICE_CONFIG_COLOR_INCREMENT, - G_SLICE_CONFIG_CHUNK_SIZES, - G_SLICE_CONFIG_CONTENTION_COUNTER -} GSliceConfig; - -GLIB_DEPRECATED_IN_2_34 -void g_slice_set_config (GSliceConfig ckey, gint64 value); -GLIB_DEPRECATED_IN_2_34 -gint64 g_slice_get_config (GSliceConfig ckey); -GLIB_DEPRECATED_IN_2_34 -gint64* g_slice_get_config_state (GSliceConfig ckey, gint64 address, guint *n_values); - -G_END_DECLS - -#endif /* __G_SLICE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gslist.h b/GstreamerHelper/x64/include/glib-2.0/glib/gslist.h deleted file mode 100644 index c61fd2ff..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gslist.h +++ /dev/null @@ -1,117 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SLIST_H__ -#define __G_SLIST_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GSList GSList; - -struct _GSList -{ - gpointer data; - GSList *next; -}; - -/* Singly linked lists - */ -GSList* g_slist_alloc (void) G_GNUC_WARN_UNUSED_RESULT; -void g_slist_free (GSList *list); -void g_slist_free_1 (GSList *list); -#define g_slist_free1 g_slist_free_1 -void g_slist_free_full (GSList *list, - GDestroyNotify free_func); -GSList* g_slist_append (GSList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_prepend (GSList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert (GSList *list, - gpointer data, - gint position) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert_sorted (GSList *list, - gpointer data, - GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert_sorted_with_data (GSList *list, - gpointer data, - GCompareDataFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert_before (GSList *slist, - GSList *sibling, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_concat (GSList *list1, - GSList *list2) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_remove (GSList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_remove_all (GSList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_remove_link (GSList *list, - GSList *link_) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_delete_link (GSList *list, - GSList *link_) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_reverse (GSList *list) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_copy (GSList *list) G_GNUC_WARN_UNUSED_RESULT; - -GLIB_AVAILABLE_IN_2_34 -GSList* g_slist_copy_deep (GSList *list, - GCopyFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_nth (GSList *list, - guint n); -GSList* g_slist_find (GSList *list, - gconstpointer data); -GSList* g_slist_find_custom (GSList *list, - gconstpointer data, - GCompareFunc func); -gint g_slist_position (GSList *list, - GSList *llink); -gint g_slist_index (GSList *list, - gconstpointer data); -GSList* g_slist_last (GSList *list); -guint g_slist_length (GSList *list); -void g_slist_foreach (GSList *list, - GFunc func, - gpointer user_data); -GSList* g_slist_sort (GSList *list, - GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_sort_with_data (GSList *list, - GCompareDataFunc compare_func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_slist_nth_data (GSList *list, - guint n); - -#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL) - -G_END_DECLS - -#endif /* __G_SLIST_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gspawn.h b/GstreamerHelper/x64/include/glib-2.0/glib/gspawn.h deleted file mode 100644 index 1120d81d..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gspawn.h +++ /dev/null @@ -1,256 +0,0 @@ -/* gspawn.h - Process launching - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, write - * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SPAWN_H__ -#define __G_SPAWN_H__ - -#include - -G_BEGIN_DECLS - - -/* I'm not sure I remember our proposed naming convention here. */ -/** - * G_SPAWN_ERROR: - * - * Error domain for spawning processes. Errors in this domain will - * be from the #GSpawnError enumeration. See #GError for information on - * error domains. - */ -#define G_SPAWN_ERROR g_spawn_error_quark () - -/** - * GSpawnError: - * @G_SPAWN_ERROR_FORK: Fork failed due to lack of memory. - * @G_SPAWN_ERROR_READ: Read or select on pipes failed. - * @G_SPAWN_ERROR_CHDIR: Changing to working directory failed. - * @G_SPAWN_ERROR_ACCES: execv() returned EACCES - * @G_SPAWN_ERROR_PERM: execv() returned EPERM - * @G_SPAWN_ERROR_TOO_BIG: execv() returned E2BIG - * @G_SPAWN_ERROR_2BIG: deprecated alias for %G_SPAWN_ERROR_TOO_BIG - * @G_SPAWN_ERROR_NOEXEC: execv() returned ENOEXEC - * @G_SPAWN_ERROR_NAMETOOLONG: execv() returned ENAMETOOLONG - * @G_SPAWN_ERROR_NOENT: execv() returned ENOENT - * @G_SPAWN_ERROR_NOMEM: execv() returned ENOMEM - * @G_SPAWN_ERROR_NOTDIR: execv() returned ENOTDIR - * @G_SPAWN_ERROR_LOOP: execv() returned ELOOP - * @G_SPAWN_ERROR_TXTBUSY: execv() returned ETXTBUSY - * @G_SPAWN_ERROR_IO: execv() returned EIO - * @G_SPAWN_ERROR_NFILE: execv() returned ENFILE - * @G_SPAWN_ERROR_MFILE: execv() returned EMFILE - * @G_SPAWN_ERROR_INVAL: execv() returned EINVAL - * @G_SPAWN_ERROR_ISDIR: execv() returned EISDIR - * @G_SPAWN_ERROR_LIBBAD: execv() returned ELIBBAD - * @G_SPAWN_ERROR_FAILED: Some other fatal failure, - * error->message should explain. - * - * Error codes returned by spawning processes. - */ -typedef enum -{ - G_SPAWN_ERROR_FORK, /* fork failed due to lack of memory */ - G_SPAWN_ERROR_READ, /* read or select on pipes failed */ - G_SPAWN_ERROR_CHDIR, /* changing to working dir failed */ - G_SPAWN_ERROR_ACCES, /* execv() returned EACCES */ - G_SPAWN_ERROR_PERM, /* execv() returned EPERM */ - G_SPAWN_ERROR_TOO_BIG,/* execv() returned E2BIG */ -#ifndef G_DISABLE_DEPRECATED - G_SPAWN_ERROR_2BIG = G_SPAWN_ERROR_TOO_BIG, -#endif - G_SPAWN_ERROR_NOEXEC, /* execv() returned ENOEXEC */ - G_SPAWN_ERROR_NAMETOOLONG, /* "" "" ENAMETOOLONG */ - G_SPAWN_ERROR_NOENT, /* "" "" ENOENT */ - G_SPAWN_ERROR_NOMEM, /* "" "" ENOMEM */ - G_SPAWN_ERROR_NOTDIR, /* "" "" ENOTDIR */ - G_SPAWN_ERROR_LOOP, /* "" "" ELOOP */ - G_SPAWN_ERROR_TXTBUSY, /* "" "" ETXTBUSY */ - G_SPAWN_ERROR_IO, /* "" "" EIO */ - G_SPAWN_ERROR_NFILE, /* "" "" ENFILE */ - G_SPAWN_ERROR_MFILE, /* "" "" EMFLE */ - G_SPAWN_ERROR_INVAL, /* "" "" EINVAL */ - G_SPAWN_ERROR_ISDIR, /* "" "" EISDIR */ - G_SPAWN_ERROR_LIBBAD, /* "" "" ELIBBAD */ - G_SPAWN_ERROR_FAILED /* other fatal failure, error->message - * should explain - */ -} GSpawnError; - -/** - * G_SPAWN_EXIT_ERROR: - * - * Error domain used by g_spawn_check_exit_status(). The code - * will be the program exit code. - */ -#define G_SPAWN_EXIT_ERROR g_spawn_exit_error_quark () - -/** - * GSpawnChildSetupFunc: - * @user_data: user data to pass to the function. - * - * Specifies the type of the setup function passed to g_spawn_async(), - * g_spawn_sync() and g_spawn_async_with_pipes(), which can, in very - * limited ways, be used to affect the child's execution. - * - * On POSIX platforms, the function is called in the child after GLib - * has performed all the setup it plans to perform, but before calling - * exec(). Actions taken in this function will only affect the child, - * not the parent. - * - * On Windows, the function is called in the parent. Its usefulness on - * Windows is thus questionable. In many cases executing the child setup - * function in the parent can have ill effects, and you should be very - * careful when porting software to Windows that uses child setup - * functions. - * - * However, even on POSIX, you are extremely limited in what you can - * safely do from a #GSpawnChildSetupFunc, because any mutexes that - * were held by other threads in the parent process at the time of the - * fork() will still be locked in the child process, and they will - * never be unlocked (since the threads that held them don't exist in - * the child). POSIX allows only async-signal-safe functions (see - * signal7) - * to be called in the child between fork() and exec(), which - * drastically limits the usefulness of child setup functions. - * - * In particular, it is not safe to call any function which may - * call malloc(), which includes POSIX functions such as setenv(). - * If you need to set up the child environment differently from - * the parent, you should use g_get_environ(), g_environ_setenv(), - * and g_environ_unsetenv(), and then pass the complete environment - * list to the g_spawn... function. - */ -typedef void (* GSpawnChildSetupFunc) (gpointer user_data); - -/** - * GSpawnFlags: - * @G_SPAWN_LEAVE_DESCRIPTORS_OPEN: the parent's open file descriptors will be - * inherited by the child; otherwise all descriptors except stdin/stdout/stderr - * will be closed before calling exec() in the child. - * @G_SPAWN_DO_NOT_REAP_CHILD: the child will not be automatically reaped; you - * must use g_child_watch_add() yourself (or call waitpid() - * or handle SIGCHLD yourself), or the child will become a zombie. - * @G_SPAWN_SEARCH_PATH: argv[0] need not be an absolute path, - * it will be looked for in the user's PATH. - * @G_SPAWN_STDOUT_TO_DEV_NULL: the child's standard output will be discarded, - * instead of going to the same location as the parent's standard output. - * @G_SPAWN_STDERR_TO_DEV_NULL: the child's standard error will be discarded. - * @G_SPAWN_CHILD_INHERITS_STDIN: the child will inherit the parent's standard - * input (by default, the child's standard input is attached to - * /dev/null). - * @G_SPAWN_FILE_AND_ARGV_ZERO: the first element of argv is - * the file to execute, while the remaining elements are the actual argument - * vector to pass to the file. Normally g_spawn_async_with_pipes() uses - * argv[0] as the file to execute, and passes all of - * argv to the child. - * @G_SPAWN_SEARCH_PATH_FROM_ENVP: if argv[0] is not an abolute path, - * it will be looked for in the PATH from the passed child - * environment. Since: 2.34 - * - * Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes(). - */ -typedef enum -{ - G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0, - G_SPAWN_DO_NOT_REAP_CHILD = 1 << 1, - /* look for argv[0] in the path i.e. use execvp() */ - G_SPAWN_SEARCH_PATH = 1 << 2, - /* Dump output to /dev/null */ - G_SPAWN_STDOUT_TO_DEV_NULL = 1 << 3, - G_SPAWN_STDERR_TO_DEV_NULL = 1 << 4, - G_SPAWN_CHILD_INHERITS_STDIN = 1 << 5, - G_SPAWN_FILE_AND_ARGV_ZERO = 1 << 6, - G_SPAWN_SEARCH_PATH_FROM_ENVP = 1 << 7 -} GSpawnFlags; - -GQuark g_spawn_error_quark (void); -GQuark g_spawn_exit_error_quark (void); - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_spawn_async g_spawn_async_utf8 -#define g_spawn_async_with_pipes g_spawn_async_with_pipes_utf8 -#define g_spawn_sync g_spawn_sync_utf8 -#define g_spawn_command_line_sync g_spawn_command_line_sync_utf8 -#define g_spawn_command_line_async g_spawn_command_line_async_utf8 -#endif -#endif - -gboolean g_spawn_async (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - GError **error); - - -/* Opens pipes for non-NULL standard_output, standard_input, standard_error, - * and returns the parent's end of the pipes. - */ -gboolean g_spawn_async_with_pipes (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint *standard_input, - gint *standard_output, - gint *standard_error, - GError **error); - - -/* If standard_output or standard_error are non-NULL, the full - * standard output or error of the command will be placed there. - */ - -gboolean g_spawn_sync (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - gchar **standard_output, - gchar **standard_error, - gint *exit_status, - GError **error); - -gboolean g_spawn_command_line_sync (const gchar *command_line, - gchar **standard_output, - gchar **standard_error, - gint *exit_status, - GError **error); -gboolean g_spawn_command_line_async (const gchar *command_line, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_spawn_check_exit_status (gint exit_status, - GError **error); - -void g_spawn_close_pid (GPid pid); - -G_END_DECLS - -#endif /* __G_SPAWN_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gstdio.h b/GstreamerHelper/x64/include/glib-2.0/glib/gstdio.h deleted file mode 100644 index 08aea7d3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gstdio.h +++ /dev/null @@ -1,149 +0,0 @@ -/* gstdio.h - GFilename wrappers for C library functions - * - * Copyright 2004 Tor Lillqvist - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_STDIO_H__ -#define __G_STDIO_H__ - -#include - -#include - -G_BEGIN_DECLS - -#if defined (_MSC_VER) && !defined(_WIN64) - -/* Make it clear that we mean the struct with 32-bit st_size and - * 32-bit st_*time fields as that is how the 32-bit GLib DLL normally - * has been compiled. If you get a compiler warning when calling - * g_stat(), do take it seriously and make sure that the type of - * struct stat the code in GLib fills in matches the struct the type - * of struct stat you pass to g_stat(). To avoid hassle, to get file - * attributes just use the GIO API instead which doesn't use struct - * stat. - * - * Sure, it would be nicer to use a struct with 64-bit st_size and - * 64-bit st_*time fields, but changing that now would break ABI. And - * in MinGW, a plain "struct stat" is the one with 32-bit st_size and - * st_*time fields. - */ - -typedef struct _stat32 GStatBuf; - -#else - -typedef struct stat GStatBuf; - -#endif - -#if defined(G_OS_UNIX) && !defined(G_STDIO_NO_WRAP_ON_UNIX) - -/* Just pass on to the system functions, so there's no potential for data - * format mismatches, especially with large file interfaces. - * A few functions can't be handled in this way, since they are not defined - * in a portable system header that we could include here. - */ - -#ifndef __GTK_DOC_IGNORE__ -#define g_chmod chmod -#define g_open open -#define g_creat creat -#define g_rename rename -#define g_mkdir mkdir -#define g_stat stat -#define g_lstat lstat -#define g_remove remove -#define g_fopen fopen -#define g_freopen freopen -#define g_utime utime -#endif - -int g_access (const gchar *filename, - int mode); - -int g_chdir (const gchar *path); - -int g_unlink (const gchar *filename); - -int g_rmdir (const gchar *filename); - -#else /* ! G_OS_UNIX */ - -/* Wrappers for C library functions that take pathname arguments. On - * Unix, the pathname is a file name as it literally is in the file - * system. On well-maintained systems with consistent users who know - * what they are doing and no exchange of files with others this would - * be a well-defined encoding, preferably UTF-8. On Windows, the - * pathname is always in UTF-8, even if that is not the on-disk - * encoding, and not the encoding accepted by the C library or Win32 - * API. - */ - -int g_access (const gchar *filename, - int mode); - -int g_chmod (const gchar *filename, - int mode); - -int g_open (const gchar *filename, - int flags, - int mode); - -int g_creat (const gchar *filename, - int mode); - -int g_rename (const gchar *oldfilename, - const gchar *newfilename); - -int g_mkdir (const gchar *filename, - int mode); - -int g_chdir (const gchar *path); - -int g_stat (const gchar *filename, - GStatBuf *buf); - -int g_lstat (const gchar *filename, - GStatBuf *buf); - -int g_unlink (const gchar *filename); - -int g_remove (const gchar *filename); - -int g_rmdir (const gchar *filename); - -FILE *g_fopen (const gchar *filename, - const gchar *mode); - -FILE *g_freopen (const gchar *filename, - const gchar *mode, - FILE *stream); - -struct utimbuf; /* Don't need the real definition of struct utimbuf when just - * including this header. - */ - -int g_utime (const gchar *filename, - struct utimbuf *utb); - -#endif /* G_OS_UNIX */ - -G_END_DECLS - -#endif /* __G_STDIO_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gstrfuncs.h b/GstreamerHelper/x64/include/glib-2.0/glib/gstrfuncs.h deleted file mode 100644 index 68c89fdb..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gstrfuncs.h +++ /dev/null @@ -1,247 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_STRFUNCS_H__ -#define __G_STRFUNCS_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/* Functions like the ones in that are not affected by locale. */ -typedef enum { - G_ASCII_ALNUM = 1 << 0, - G_ASCII_ALPHA = 1 << 1, - G_ASCII_CNTRL = 1 << 2, - G_ASCII_DIGIT = 1 << 3, - G_ASCII_GRAPH = 1 << 4, - G_ASCII_LOWER = 1 << 5, - G_ASCII_PRINT = 1 << 6, - G_ASCII_PUNCT = 1 << 7, - G_ASCII_SPACE = 1 << 8, - G_ASCII_UPPER = 1 << 9, - G_ASCII_XDIGIT = 1 << 10 -} GAsciiType; - -GLIB_VAR const guint16 * const g_ascii_table; - -#define g_ascii_isalnum(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0) - -#define g_ascii_isalpha(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0) - -#define g_ascii_iscntrl(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_CNTRL) != 0) - -#define g_ascii_isdigit(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0) - -#define g_ascii_isgraph(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_GRAPH) != 0) - -#define g_ascii_islower(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0) - -#define g_ascii_isprint(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0) - -#define g_ascii_ispunct(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_PUNCT) != 0) - -#define g_ascii_isspace(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0) - -#define g_ascii_isupper(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0) - -#define g_ascii_isxdigit(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_XDIGIT) != 0) - -gchar g_ascii_tolower (gchar c) G_GNUC_CONST; -gchar g_ascii_toupper (gchar c) G_GNUC_CONST; - -gint g_ascii_digit_value (gchar c) G_GNUC_CONST; -gint g_ascii_xdigit_value (gchar c) G_GNUC_CONST; - -/* String utility functions that modify a string argument or - * return a constant string that must not be freed. - */ -#define G_STR_DELIMITERS "_-|> <." -gchar* g_strdelimit (gchar *string, - const gchar *delimiters, - gchar new_delimiter); -gchar* g_strcanon (gchar *string, - const gchar *valid_chars, - gchar substitutor); -const gchar * g_strerror (gint errnum) G_GNUC_CONST; -const gchar * g_strsignal (gint signum) G_GNUC_CONST; -gchar * g_strreverse (gchar *string); -gsize g_strlcpy (gchar *dest, - const gchar *src, - gsize dest_size); -gsize g_strlcat (gchar *dest, - const gchar *src, - gsize dest_size); -gchar * g_strstr_len (const gchar *haystack, - gssize haystack_len, - const gchar *needle); -gchar * g_strrstr (const gchar *haystack, - const gchar *needle); -gchar * g_strrstr_len (const gchar *haystack, - gssize haystack_len, - const gchar *needle); - -gboolean g_str_has_suffix (const gchar *str, - const gchar *suffix); -gboolean g_str_has_prefix (const gchar *str, - const gchar *prefix); - -/* String to/from double conversion functions */ - -gdouble g_strtod (const gchar *nptr, - gchar **endptr); -gdouble g_ascii_strtod (const gchar *nptr, - gchar **endptr); -guint64 g_ascii_strtoull (const gchar *nptr, - gchar **endptr, - guint base); -gint64 g_ascii_strtoll (const gchar *nptr, - gchar **endptr, - guint base); -/* 29 bytes should enough for all possible values that - * g_ascii_dtostr can produce. - * Then add 10 for good measure */ -#define G_ASCII_DTOSTR_BUF_SIZE (29 + 10) -gchar * g_ascii_dtostr (gchar *buffer, - gint buf_len, - gdouble d); -gchar * g_ascii_formatd (gchar *buffer, - gint buf_len, - const gchar *format, - gdouble d); - -/* removes leading spaces */ -gchar* g_strchug (gchar *string); -/* removes trailing spaces */ -gchar* g_strchomp (gchar *string); -/* removes leading & trailing spaces */ -#define g_strstrip( string ) g_strchomp (g_strchug (string)) - -gint g_ascii_strcasecmp (const gchar *s1, - const gchar *s2); -gint g_ascii_strncasecmp (const gchar *s1, - const gchar *s2, - gsize n); -gchar* g_ascii_strdown (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar* g_ascii_strup (const gchar *str, - gssize len) G_GNUC_MALLOC; - - -GLIB_DEPRECATED -gint g_strcasecmp (const gchar *s1, - const gchar *s2); -GLIB_DEPRECATED -gint g_strncasecmp (const gchar *s1, - const gchar *s2, - guint n); -GLIB_DEPRECATED -gchar* g_strdown (gchar *string); -GLIB_DEPRECATED -gchar* g_strup (gchar *string); - - -/* String utility functions that return a newly allocated string which - * ought to be freed with g_free from the caller at some point. - */ -gchar* g_strdup (const gchar *str) G_GNUC_MALLOC; -gchar* g_strdup_printf (const gchar *format, - ...) G_GNUC_PRINTF (1, 2) G_GNUC_MALLOC; -gchar* g_strdup_vprintf (const gchar *format, - va_list args) G_GNUC_MALLOC; -gchar* g_strndup (const gchar *str, - gsize n) G_GNUC_MALLOC; -gchar* g_strnfill (gsize length, - gchar fill_char) G_GNUC_MALLOC; -gchar* g_strconcat (const gchar *string1, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; -gchar* g_strjoin (const gchar *separator, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; - -/* Make a copy of a string interpreting C string -style escape - * sequences. Inverse of g_strescape. The recognized sequences are \b - * \f \n \r \t \\ \" and the octal format. - */ -gchar* g_strcompress (const gchar *source) G_GNUC_MALLOC; - -/* Copy a string escaping nonprintable characters like in C strings. - * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points - * to a string containing characters that are not to be escaped. - * - * Deprecated API: gchar* g_strescape (const gchar *source); - * Luckily this function wasn't used much, using NULL as second parameter - * provides mostly identical semantics. - */ -gchar* g_strescape (const gchar *source, - const gchar *exceptions) G_GNUC_MALLOC; - -gpointer g_memdup (gconstpointer mem, - guint byte_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(2); - -/* NULL terminated string arrays. - * g_strsplit(), g_strsplit_set() split up string into max_tokens tokens - * at delim and return a newly allocated string array. - * g_strjoinv() concatenates all of str_array's strings, sliding in an - * optional separator, the returned string is newly allocated. - * g_strfreev() frees the array itself and all of its strings. - * g_strdupv() copies a NULL-terminated array of strings - * g_strv_length() returns the length of a NULL-terminated array of strings - */ -gchar** g_strsplit (const gchar *string, - const gchar *delimiter, - gint max_tokens) G_GNUC_MALLOC; -gchar ** g_strsplit_set (const gchar *string, - const gchar *delimiters, - gint max_tokens) G_GNUC_MALLOC; -gchar* g_strjoinv (const gchar *separator, - gchar **str_array) G_GNUC_MALLOC; -void g_strfreev (gchar **str_array); -gchar** g_strdupv (gchar **str_array) G_GNUC_MALLOC; -guint g_strv_length (gchar **str_array); - -gchar* g_stpcpy (gchar *dest, - const char *src); - -G_END_DECLS - -#endif /* __G_STRFUNCS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gstring.h b/GstreamerHelper/x64/include/glib-2.0/glib/gstring.h deleted file mode 100644 index 75434908..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gstring.h +++ /dev/null @@ -1,158 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_STRING_H__ -#define __G_STRING_H__ - -#include -#include -#include -#include /* for G_CAN_INLINE */ - -G_BEGIN_DECLS - -typedef struct _GString GString; - -struct _GString -{ - gchar *str; - gsize len; - gsize allocated_len; -}; - -GString* g_string_new (const gchar *init); -GString* g_string_new_len (const gchar *init, - gssize len); -GString* g_string_sized_new (gsize dfl_size); -gchar* g_string_free (GString *string, - gboolean free_segment); -GLIB_AVAILABLE_IN_2_34 -GBytes* g_string_free_to_bytes (GString *string); -gboolean g_string_equal (const GString *v, - const GString *v2); -guint g_string_hash (const GString *str); -GString* g_string_assign (GString *string, - const gchar *rval); -GString* g_string_truncate (GString *string, - gsize len); -GString* g_string_set_size (GString *string, - gsize len); -GString* g_string_insert_len (GString *string, - gssize pos, - const gchar *val, - gssize len); -GString* g_string_append (GString *string, - const gchar *val); -GString* g_string_append_len (GString *string, - const gchar *val, - gssize len); -GString* g_string_append_c (GString *string, - gchar c); -GString* g_string_append_unichar (GString *string, - gunichar wc); -GString* g_string_prepend (GString *string, - const gchar *val); -GString* g_string_prepend_c (GString *string, - gchar c); -GString* g_string_prepend_unichar (GString *string, - gunichar wc); -GString* g_string_prepend_len (GString *string, - const gchar *val, - gssize len); -GString* g_string_insert (GString *string, - gssize pos, - const gchar *val); -GString* g_string_insert_c (GString *string, - gssize pos, - gchar c); -GString* g_string_insert_unichar (GString *string, - gssize pos, - gunichar wc); -GString* g_string_overwrite (GString *string, - gsize pos, - const gchar *val); -GString* g_string_overwrite_len (GString *string, - gsize pos, - const gchar *val, - gssize len); -GString* g_string_erase (GString *string, - gssize pos, - gssize len); -GString* g_string_ascii_down (GString *string); -GString* g_string_ascii_up (GString *string); -void g_string_vprintf (GString *string, - const gchar *format, - va_list args); -void g_string_printf (GString *string, - const gchar *format, - ...) G_GNUC_PRINTF (2, 3); -void g_string_append_vprintf (GString *string, - const gchar *format, - va_list args); -void g_string_append_printf (GString *string, - const gchar *format, - ...) G_GNUC_PRINTF (2, 3); -GString* g_string_append_uri_escaped (GString *string, - const gchar *unescaped, - const gchar *reserved_chars_allowed, - gboolean allow_utf8); - -/* -- optimize g_strig_append_c --- */ -#ifdef G_CAN_INLINE -static inline GString* -g_string_append_c_inline (GString *gstring, - gchar c) -{ - if (gstring->len + 1 < gstring->allocated_len) - { - gstring->str[gstring->len++] = c; - gstring->str[gstring->len] = 0; - } - else - g_string_insert_c (gstring, -1, c); - return gstring; -} -#define g_string_append_c(gstr,c) g_string_append_c_inline (gstr, c) -#endif /* G_CAN_INLINE */ - - -GLIB_DEPRECATED -GString *g_string_down (GString *string); -GLIB_DEPRECATED -GString *g_string_up (GString *string); - -#ifndef G_DISABLE_DEPRECATED -#define g_string_sprintf g_string_printf -#define g_string_sprintfa g_string_append_printf -#endif - -G_END_DECLS - -#endif /* __G_STRING_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gstringchunk.h b/GstreamerHelper/x64/include/glib-2.0/glib/gstringchunk.h deleted file mode 100644 index 5ab2e8ad..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gstringchunk.h +++ /dev/null @@ -1,53 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_STRINGCHUNK_H__ -#define __G_STRINGCHUNK_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GStringChunk GStringChunk; - -GStringChunk* g_string_chunk_new (gsize size); -void g_string_chunk_free (GStringChunk *chunk); -void g_string_chunk_clear (GStringChunk *chunk); -gchar* g_string_chunk_insert (GStringChunk *chunk, - const gchar *string); -gchar* g_string_chunk_insert_len (GStringChunk *chunk, - const gchar *string, - gssize len); -gchar* g_string_chunk_insert_const (GStringChunk *chunk, - const gchar *string); - -G_END_DECLS - -#endif /* __G_STRING_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gtestutils.h b/GstreamerHelper/x64/include/glib-2.0/glib/gtestutils.h deleted file mode 100644 index 967fa63b..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gtestutils.h +++ /dev/null @@ -1,318 +0,0 @@ -/* GLib testing utilities - * Copyright (C) 2007 Imendio AB - * Authors: Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TEST_UTILS_H__ -#define __G_TEST_UTILS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct GTestCase GTestCase; -typedef struct GTestSuite GTestSuite; -typedef void (*GTestFunc) (void); -typedef void (*GTestDataFunc) (gconstpointer user_data); -typedef void (*GTestFixtureFunc) (gpointer fixture, - gconstpointer user_data); - -/* assertion API */ -#define g_assert_cmpstr(s1, cmp, s2) do { const char *__s1 = (s1), *__s2 = (s2); \ - if (g_strcmp0 (__s1, __s2) cmp 0) ; else \ - g_assertion_message_cmpstr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #s1 " " #cmp " " #s2, __s1, #cmp, __s2); } while (0) -#define g_assert_cmpint(n1, cmp, n2) do { gint64 __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); } while (0) -#define g_assert_cmpuint(n1, cmp, n2) do { guint64 __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); } while (0) -#define g_assert_cmphex(n1, cmp, n2) do { guint64 __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'x'); } while (0) -#define g_assert_cmpfloat(n1,cmp,n2) do { long double __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'f'); } while (0) -#define g_assert_no_error(err) do { if (err) \ - g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #err, err, 0, 0); } while (0) -#define g_assert_error(err, dom, c) do { if (!err || (err)->domain != dom || (err)->code != c) \ - g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #err, err, dom, c); } while (0) -#ifdef G_DISABLE_ASSERT -#define g_assert_not_reached() do { (void) 0; } while (0) -#define g_assert(expr) do { (void) 0; } while (0) -#else /* !G_DISABLE_ASSERT */ -#define g_assert_not_reached() do { g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } while (0) -#define g_assert(expr) do { if G_LIKELY (expr) ; else \ - g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #expr); } while (0) -#endif /* !G_DISABLE_ASSERT */ - -int g_strcmp0 (const char *str1, - const char *str2); - -/* report performance results */ -void g_test_minimized_result (double minimized_quantity, - const char *format, - ...) G_GNUC_PRINTF (2, 3); -void g_test_maximized_result (double maximized_quantity, - const char *format, - ...) G_GNUC_PRINTF (2, 3); - -/* initialize testing framework */ -void g_test_init (int *argc, - char ***argv, - ...); -/* query testing framework config */ -#define g_test_quick() (g_test_config_vars->test_quick) -#define g_test_slow() (!g_test_config_vars->test_quick) -#define g_test_thorough() (!g_test_config_vars->test_quick) -#define g_test_perf() (g_test_config_vars->test_perf) -#define g_test_verbose() (g_test_config_vars->test_verbose) -#define g_test_quiet() (g_test_config_vars->test_quiet) -#define g_test_undefined() (g_test_config_vars->test_undefined) -/* run all tests under toplevel suite (path: /) */ -int g_test_run (void); -/* hook up a test functions under test path */ -void g_test_add_func (const char *testpath, - GTestFunc test_func); - -void g_test_add_data_func (const char *testpath, - gconstpointer test_data, - GTestDataFunc test_func); - -GLIB_AVAILABLE_IN_2_34 -void g_test_add_data_func_full (const char *testpath, - gpointer test_data, - GTestDataFunc test_func, - GDestroyNotify data_free_func); - -/* tell about failure */ -void g_test_fail (void); - -/* hook up a test with fixture under test path */ -#define g_test_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \ - G_STMT_START { \ - void (*add_vtable) (const char*, \ - gsize, \ - gconstpointer, \ - void (*) (Fixture*, gconstpointer), \ - void (*) (Fixture*, gconstpointer), \ - void (*) (Fixture*, gconstpointer)) = (void (*) (const gchar *, gsize, gconstpointer, void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer))) g_test_add_vtable; \ - add_vtable \ - (testpath, sizeof (Fixture), tdata, fsetup, ftest, fteardown); \ - } G_STMT_END - -/* add test messages to the test report */ -void g_test_message (const char *format, - ...) G_GNUC_PRINTF (1, 2); -void g_test_bug_base (const char *uri_pattern); -void g_test_bug (const char *bug_uri_snippet); -/* measure test timings */ -void g_test_timer_start (void); -double g_test_timer_elapsed (void); /* elapsed seconds */ -double g_test_timer_last (void); /* repeat last elapsed() result */ - -/* automatically g_free or g_object_unref upon teardown */ -void g_test_queue_free (gpointer gfree_pointer); -void g_test_queue_destroy (GDestroyNotify destroy_func, - gpointer destroy_data); -#define g_test_queue_unref(gobject) g_test_queue_destroy (g_object_unref, gobject) - -/* test traps are guards used around forked tests */ -typedef enum { - G_TEST_TRAP_SILENCE_STDOUT = 1 << 7, - G_TEST_TRAP_SILENCE_STDERR = 1 << 8, - G_TEST_TRAP_INHERIT_STDIN = 1 << 9 -} GTestTrapFlags; -gboolean g_test_trap_fork (guint64 usec_timeout, - GTestTrapFlags test_trap_flags); -gboolean g_test_trap_has_passed (void); -gboolean g_test_trap_reached_timeout (void); -#define g_test_trap_assert_passed() g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 0, 0) -#define g_test_trap_assert_failed() g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 1, 0) -#define g_test_trap_assert_stdout(soutpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 2, soutpattern) -#define g_test_trap_assert_stdout_unmatched(soutpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 3, soutpattern) -#define g_test_trap_assert_stderr(serrpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 4, serrpattern) -#define g_test_trap_assert_stderr_unmatched(serrpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 5, serrpattern) - -/* provide seed-able random numbers for tests */ -#define g_test_rand_bit() (0 != (g_test_rand_int() & (1 << 15))) -gint32 g_test_rand_int (void); -gint32 g_test_rand_int_range (gint32 begin, - gint32 end); -double g_test_rand_double (void); -double g_test_rand_double_range (double range_start, - double range_end); - -/* semi-internal API */ -GTestCase* g_test_create_case (const char *test_name, - gsize data_size, - gconstpointer test_data, - GTestFixtureFunc data_setup, - GTestFixtureFunc data_test, - GTestFixtureFunc data_teardown); -GTestSuite* g_test_create_suite (const char *suite_name); -GTestSuite* g_test_get_root (void); -void g_test_suite_add (GTestSuite *suite, - GTestCase *test_case); -void g_test_suite_add_suite (GTestSuite *suite, - GTestSuite *nestedsuite); -int g_test_run_suite (GTestSuite *suite); - -/* internal ABI */ -void g_test_trap_assertions (const char *domain, - const char *file, - int line, - const char *func, - guint64 assertion_flags, /* 0-pass, 1-fail, 2-outpattern, 4-errpattern */ - const char *pattern); -void g_assertion_message (const char *domain, - const char *file, - int line, - const char *func, - const char *message) G_GNUC_NORETURN; -void g_assertion_message_expr (const char *domain, - const char *file, - int line, - const char *func, - const char *expr) G_GNUC_NORETURN; -void g_assertion_message_cmpstr (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - const char *arg1, - const char *cmp, - const char *arg2) G_GNUC_NORETURN; -void g_assertion_message_cmpnum (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - long double arg1, - const char *cmp, - long double arg2, - char numtype) G_GNUC_NORETURN; -void g_assertion_message_error (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - const GError *error, - GQuark error_domain, - int error_code) G_GNUC_NORETURN; -void g_test_add_vtable (const char *testpath, - gsize data_size, - gconstpointer test_data, - GTestFixtureFunc data_setup, - GTestFixtureFunc data_test, - GTestFixtureFunc data_teardown); -typedef struct { - gboolean test_initialized; - gboolean test_quick; /* disable thorough tests */ - gboolean test_perf; /* run performance tests */ - gboolean test_verbose; /* extra info */ - gboolean test_quiet; /* reduce output */ - gboolean test_undefined; /* run tests that are meant to assert */ -} GTestConfig; -GLIB_VAR const GTestConfig * const g_test_config_vars; - -/* internal logging API */ -typedef enum { - G_TEST_LOG_NONE, - G_TEST_LOG_ERROR, /* s:msg */ - G_TEST_LOG_START_BINARY, /* s:binaryname s:seed */ - G_TEST_LOG_LIST_CASE, /* s:testpath */ - G_TEST_LOG_SKIP_CASE, /* s:testpath */ - G_TEST_LOG_START_CASE, /* s:testpath */ - G_TEST_LOG_STOP_CASE, /* d:status d:nforks d:elapsed */ - G_TEST_LOG_MIN_RESULT, /* s:blurb d:result */ - G_TEST_LOG_MAX_RESULT, /* s:blurb d:result */ - G_TEST_LOG_MESSAGE /* s:blurb */ -} GTestLogType; - -typedef struct { - GTestLogType log_type; - guint n_strings; - gchar **strings; /* NULL terminated */ - guint n_nums; - long double *nums; -} GTestLogMsg; -typedef struct { - /*< private >*/ - GString *data; - GSList *msgs; -} GTestLogBuffer; - -const char* g_test_log_type_name (GTestLogType log_type); -GTestLogBuffer* g_test_log_buffer_new (void); -void g_test_log_buffer_free (GTestLogBuffer *tbuffer); -void g_test_log_buffer_push (GTestLogBuffer *tbuffer, - guint n_bytes, - const guint8 *bytes); -GTestLogMsg* g_test_log_buffer_pop (GTestLogBuffer *tbuffer); -void g_test_log_msg_free (GTestLogMsg *tmsg); - -/** - * GTestLogFatalFunc: - * @log_domain: the log domain of the message - * @log_level: the log level of the message (including the fatal and recursion flags) - * @message: the message to process - * @user_data: user data, set in g_test_log_set_fatal_handler() - * - * Specifies the prototype of fatal log handler functions. - * - * Return value: %TRUE if the program should abort, %FALSE otherwise - * - * Since: 2.22 - */ -typedef gboolean (*GTestLogFatalFunc) (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data); -void -g_test_log_set_fatal_handler (GTestLogFatalFunc log_func, - gpointer user_data); - -void g_test_expect_message (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *pattern); -void g_test_assert_expected_messages_internal (const char *domain, - const char *file, - int line, - const char *func); - -#define g_test_assert_expected_messages() g_test_assert_expected_messages_internal (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC) - -G_END_DECLS - -#endif /* __G_TEST_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gthread.h b/GstreamerHelper/x64/include/glib-2.0/glib/gthread.h deleted file mode 100644 index fc927da6..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gthread.h +++ /dev/null @@ -1,231 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THREAD_H__ -#define __G_THREAD_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_THREAD_ERROR g_thread_error_quark () -GQuark g_thread_error_quark (void); - -typedef enum -{ - G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */ -} GThreadError; - -typedef gpointer (*GThreadFunc) (gpointer data); - -typedef struct _GThread GThread; - -typedef union _GMutex GMutex; -typedef struct _GRecMutex GRecMutex; -typedef struct _GRWLock GRWLock; -typedef struct _GCond GCond; -typedef struct _GPrivate GPrivate; -typedef struct _GOnce GOnce; - -union _GMutex -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -struct _GRWLock -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -struct _GCond -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -struct _GRecMutex -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -#define G_PRIVATE_INIT(notify) { NULL, (notify), { NULL, NULL } } -struct _GPrivate -{ - /*< private >*/ - gpointer p; - GDestroyNotify notify; - gpointer future[2]; -}; - -typedef enum -{ - G_ONCE_STATUS_NOTCALLED, - G_ONCE_STATUS_PROGRESS, - G_ONCE_STATUS_READY -} GOnceStatus; - -#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL } -struct _GOnce -{ - volatile GOnceStatus status; - volatile gpointer retval; -}; - -#define G_LOCK_NAME(name) g__ ## name ## _lock -#define G_LOCK_DEFINE_STATIC(name) static G_LOCK_DEFINE (name) -#define G_LOCK_DEFINE(name) GMutex G_LOCK_NAME (name) -#define G_LOCK_EXTERN(name) extern GMutex G_LOCK_NAME (name) - -#ifdef G_DEBUG_LOCKS -# define G_LOCK(name) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ - "file %s: line %d (%s): locking: %s ", \ - __FILE__, __LINE__, G_STRFUNC, \ - #name); \ - g_mutex_lock (&G_LOCK_NAME (name)); \ - }G_STMT_END -# define G_UNLOCK(name) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ - "file %s: line %d (%s): unlocking: %s ", \ - __FILE__, __LINE__, G_STRFUNC, \ - #name); \ - g_mutex_unlock (&G_LOCK_NAME (name)); \ - }G_STMT_END -# define G_TRYLOCK(name) \ - (g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ - "file %s: line %d (%s): try locking: %s ", \ - __FILE__, __LINE__, G_STRFUNC, \ - #name), g_mutex_trylock (&G_LOCK_NAME (name))) -#else /* !G_DEBUG_LOCKS */ -# define G_LOCK(name) g_mutex_lock (&G_LOCK_NAME (name)) -# define G_UNLOCK(name) g_mutex_unlock (&G_LOCK_NAME (name)) -# define G_TRYLOCK(name) g_mutex_trylock (&G_LOCK_NAME (name)) -#endif /* !G_DEBUG_LOCKS */ - -GThread * g_thread_ref (GThread *thread); -void g_thread_unref (GThread *thread); -GThread * g_thread_new (const gchar *name, - GThreadFunc func, - gpointer data); -GThread * g_thread_try_new (const gchar *name, - GThreadFunc func, - gpointer data, - GError **error); -GThread * g_thread_self (void); -void g_thread_exit (gpointer retval); -gpointer g_thread_join (GThread *thread); -void g_thread_yield (void); - - -void g_mutex_init (GMutex *mutex); -void g_mutex_clear (GMutex *mutex); -void g_mutex_lock (GMutex *mutex); -gboolean g_mutex_trylock (GMutex *mutex); -void g_mutex_unlock (GMutex *mutex); - -void g_rw_lock_init (GRWLock *rw_lock); -void g_rw_lock_clear (GRWLock *rw_lock); -void g_rw_lock_writer_lock (GRWLock *rw_lock); -gboolean g_rw_lock_writer_trylock (GRWLock *rw_lock); -void g_rw_lock_writer_unlock (GRWLock *rw_lock); -void g_rw_lock_reader_lock (GRWLock *rw_lock); -gboolean g_rw_lock_reader_trylock (GRWLock *rw_lock); -void g_rw_lock_reader_unlock (GRWLock *rw_lock); - -void g_rec_mutex_init (GRecMutex *rec_mutex); -void g_rec_mutex_clear (GRecMutex *rec_mutex); -void g_rec_mutex_lock (GRecMutex *rec_mutex); -gboolean g_rec_mutex_trylock (GRecMutex *rec_mutex); -void g_rec_mutex_unlock (GRecMutex *rec_mutex); - -void g_cond_init (GCond *cond); -void g_cond_clear (GCond *cond); -void g_cond_wait (GCond *cond, - GMutex *mutex); -void g_cond_signal (GCond *cond); -void g_cond_broadcast (GCond *cond); -gboolean g_cond_wait_until (GCond *cond, - GMutex *mutex, - gint64 end_time); - -gpointer g_private_get (GPrivate *key); -void g_private_set (GPrivate *key, - gpointer value); -void g_private_replace (GPrivate *key, - gpointer value); - -gpointer g_once_impl (GOnce *once, - GThreadFunc func, - gpointer arg); -gboolean g_once_init_enter (volatile void *location); -void g_once_init_leave (volatile void *location, - gsize result); - -#ifdef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED -# define g_once(once, func, arg) g_once_impl ((once), (func), (arg)) -#else /* !G_ATOMIC_OP_MEMORY_BARRIER_NEEDED*/ -# define g_once(once, func, arg) \ - (((once)->status == G_ONCE_STATUS_READY) ? \ - (once)->retval : \ - g_once_impl ((once), (func), (arg))) -#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */ - -#ifdef __GNUC__ -# define g_once_init_enter(location) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(location) : 0); \ - (!g_atomic_pointer_get (location) && \ - g_once_init_enter (location)); \ - })) -# define g_once_init_leave(location, result) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer)); \ - (void) (0 ? *(location) = (result) : 0); \ - g_once_init_leave ((location), (gsize) (result)); \ - })) -#else -# define g_once_init_enter(location) \ - (g_once_init_enter((location))) -# define g_once_init_leave(location, result) \ - (g_once_init_leave((location), (gsize) (result))) -#endif - -G_END_DECLS - -#endif /* __G_THREAD_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gthreadpool.h b/GstreamerHelper/x64/include/glib-2.0/glib/gthreadpool.h deleted file mode 100644 index 3a1f2980..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gthreadpool.h +++ /dev/null @@ -1,80 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THREADPOOL_H__ -#define __G_THREADPOOL_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GThreadPool GThreadPool; - -/* Thread Pools - */ - -struct _GThreadPool -{ - GFunc func; - gpointer user_data; - gboolean exclusive; -}; - -GThreadPool * g_thread_pool_new (GFunc func, - gpointer user_data, - gint max_threads, - gboolean exclusive, - GError **error); -void g_thread_pool_free (GThreadPool *pool, - gboolean immediate, - gboolean wait_); -gboolean g_thread_pool_push (GThreadPool *pool, - gpointer data, - GError **error); -guint g_thread_pool_unprocessed (GThreadPool *pool); -void g_thread_pool_set_sort_function (GThreadPool *pool, - GCompareDataFunc func, - gpointer user_data); -gboolean g_thread_pool_set_max_threads (GThreadPool *pool, - gint max_threads, - GError **error); -gint g_thread_pool_get_max_threads (GThreadPool *pool); -guint g_thread_pool_get_num_threads (GThreadPool *pool); - -void g_thread_pool_set_max_unused_threads (gint max_threads); -gint g_thread_pool_get_max_unused_threads (void); -guint g_thread_pool_get_num_unused_threads (void); -void g_thread_pool_stop_unused_threads (void); -void g_thread_pool_set_max_idle_time (guint interval); -guint g_thread_pool_get_max_idle_time (void); - -G_END_DECLS - -#endif /* __G_THREADPOOL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gtimer.h b/GstreamerHelper/x64/include/glib-2.0/glib/gtimer.h deleted file mode 100644 index b927fc37..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gtimer.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TIMER_H__ -#define __G_TIMER_H__ - -#include - -G_BEGIN_DECLS - -/* Timer - */ - -/* microseconds per second */ -typedef struct _GTimer GTimer; - -#define G_USEC_PER_SEC 1000000 - -GTimer* g_timer_new (void); -void g_timer_destroy (GTimer *timer); -void g_timer_start (GTimer *timer); -void g_timer_stop (GTimer *timer); -void g_timer_reset (GTimer *timer); -void g_timer_continue (GTimer *timer); -gdouble g_timer_elapsed (GTimer *timer, - gulong *microseconds); - -void g_usleep (gulong microseconds); - -void g_time_val_add (GTimeVal *time_, - glong microseconds); -gboolean g_time_val_from_iso8601 (const gchar *iso_date, - GTimeVal *time_); -gchar* g_time_val_to_iso8601 (GTimeVal *time_) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_TIMER_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gtimezone.h b/GstreamerHelper/x64/include/glib-2.0/glib/gtimezone.h deleted file mode 100644 index c877e8f4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gtimezone.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TIME_ZONE_H__ -#define __G_TIME_ZONE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GTimeZone GTimeZone; - -/** - * GTimeType: - * @G_TIME_TYPE_STANDARD: the time is in local standard time - * @G_TIME_TYPE_DAYLIGHT: the time is in local daylight time - * @G_TIME_TYPE_UNIVERSAL: the time is in UTC - * - * Disambiguates a given time in two ways. - * - * First, specifies if the given time is in universal or local time. - * - * Second, if the time is in local time, specifies if it is local - * standard time or local daylight time. This is important for the case - * where the same local time occurs twice (during daylight savings time - * transitions, for example). - */ -typedef enum -{ - G_TIME_TYPE_STANDARD, - G_TIME_TYPE_DAYLIGHT, - G_TIME_TYPE_UNIVERSAL -} GTimeType; - -GTimeZone * g_time_zone_new (const gchar *identifier); -GTimeZone * g_time_zone_new_utc (void); -GTimeZone * g_time_zone_new_local (void); - -GTimeZone * g_time_zone_ref (GTimeZone *tz); -void g_time_zone_unref (GTimeZone *tz); - -gint g_time_zone_find_interval (GTimeZone *tz, - GTimeType type, - gint64 time_); - -gint g_time_zone_adjust_time (GTimeZone *tz, - GTimeType type, - gint64 *time_); - -const gchar * g_time_zone_get_abbreviation (GTimeZone *tz, - gint interval); -gint32 g_time_zone_get_offset (GTimeZone *tz, - gint interval); -gboolean g_time_zone_is_dst (GTimeZone *tz, - gint interval); - -G_END_DECLS - -#endif /* __G_TIME_ZONE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gtrashstack.h b/GstreamerHelper/x64/include/glib-2.0/glib/gtrashstack.h deleted file mode 100644 index 3f226fe4..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gtrashstack.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TRASH_STACK_H__ -#define __G_TRASH_STACK_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GTrashStack GTrashStack; -struct _GTrashStack -{ - GTrashStack *next; -}; - -G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p, - gpointer data_p); -G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p); -G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p); -G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p); - -#if defined (G_CAN_INLINE) || defined (__G_TRASH_STACK_C__) - -G_INLINE_FUNC void -g_trash_stack_push (GTrashStack **stack_p, - gpointer data_p) -{ - GTrashStack *data = (GTrashStack *) data_p; - - data->next = *stack_p; - *stack_p = data; -} -G_INLINE_FUNC gpointer -g_trash_stack_pop (GTrashStack **stack_p) -{ - GTrashStack *data; - - data = *stack_p; - if (data) - { - *stack_p = data->next; - /* NULLify private pointer here, most platforms store NULL as - * subsequent 0 bytes - */ - data->next = NULL; - } - - return data; -} -G_INLINE_FUNC gpointer -g_trash_stack_peek (GTrashStack **stack_p) -{ - GTrashStack *data; - - data = *stack_p; - - return data; -} -G_INLINE_FUNC guint -g_trash_stack_height (GTrashStack **stack_p) -{ - GTrashStack *data; - guint i = 0; - - for (data = *stack_p; data; data = data->next) - i++; - - return i; -} - -#endif /* G_CAN_INLINE || __G_TRASH_STACK_C__ */ - -G_END_DECLS - -#endif /* __G_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gtree.h b/GstreamerHelper/x64/include/glib-2.0/glib/gtree.h deleted file mode 100644 index e17a5182..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gtree.h +++ /dev/null @@ -1,90 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TREE_H__ -#define __G_TREE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GTree GTree; - -typedef gboolean (*GTraverseFunc) (gpointer key, - gpointer value, - gpointer data); - -/* Balanced binary trees - */ -GTree* g_tree_new (GCompareFunc key_compare_func); -GTree* g_tree_new_with_data (GCompareDataFunc key_compare_func, - gpointer key_compare_data); -GTree* g_tree_new_full (GCompareDataFunc key_compare_func, - gpointer key_compare_data, - GDestroyNotify key_destroy_func, - GDestroyNotify value_destroy_func); -GTree* g_tree_ref (GTree *tree); -void g_tree_unref (GTree *tree); -void g_tree_destroy (GTree *tree); -void g_tree_insert (GTree *tree, - gpointer key, - gpointer value); -void g_tree_replace (GTree *tree, - gpointer key, - gpointer value); -gboolean g_tree_remove (GTree *tree, - gconstpointer key); -gboolean g_tree_steal (GTree *tree, - gconstpointer key); -gpointer g_tree_lookup (GTree *tree, - gconstpointer key); -gboolean g_tree_lookup_extended (GTree *tree, - gconstpointer lookup_key, - gpointer *orig_key, - gpointer *value); -void g_tree_foreach (GTree *tree, - GTraverseFunc func, - gpointer user_data); - -GLIB_DEPRECATED -void g_tree_traverse (GTree *tree, - GTraverseFunc traverse_func, - GTraverseType traverse_type, - gpointer user_data); - -gpointer g_tree_search (GTree *tree, - GCompareFunc search_func, - gconstpointer user_data); -gint g_tree_height (GTree *tree); -gint g_tree_nnodes (GTree *tree); - -G_END_DECLS - -#endif /* __G_TREE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gtypes.h b/GstreamerHelper/x64/include/glib-2.0/glib/gtypes.h deleted file mode 100644 index 7e4c8eab..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gtypes.h +++ /dev/null @@ -1,484 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPES_H__ -#define __G_TYPES_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* Provide type definitions for commonly used types. - * These are useful because a "gint8" can be adjusted - * to be 1 byte (8 bits) on all platforms. Similarly and - * more importantly, "gint32" can be adjusted to be - * 4 bytes (32 bits) on all platforms. - */ - -typedef char gchar; -typedef short gshort; -typedef long glong; -typedef int gint; -typedef gint gboolean; - -typedef unsigned char guchar; -typedef unsigned short gushort; -typedef unsigned long gulong; -typedef unsigned int guint; - -typedef float gfloat; -typedef double gdouble; - -/* Define min and max constants for the fixed size numerical types */ -#define G_MININT8 ((gint8) 0x80) -#define G_MAXINT8 ((gint8) 0x7f) -#define G_MAXUINT8 ((guint8) 0xff) - -#define G_MININT16 ((gint16) 0x8000) -#define G_MAXINT16 ((gint16) 0x7fff) -#define G_MAXUINT16 ((guint16) 0xffff) - -#define G_MININT32 ((gint32) 0x80000000) -#define G_MAXINT32 ((gint32) 0x7fffffff) -#define G_MAXUINT32 ((guint32) 0xffffffff) - -#define G_MININT64 ((gint64) G_GINT64_CONSTANT(0x8000000000000000)) -#define G_MAXINT64 G_GINT64_CONSTANT(0x7fffffffffffffff) -#define G_MAXUINT64 G_GINT64_CONSTANT(0xffffffffffffffffU) - -typedef void* gpointer; -typedef const void *gconstpointer; - -typedef gint (*GCompareFunc) (gconstpointer a, - gconstpointer b); -typedef gint (*GCompareDataFunc) (gconstpointer a, - gconstpointer b, - gpointer user_data); -typedef gboolean (*GEqualFunc) (gconstpointer a, - gconstpointer b); -typedef void (*GDestroyNotify) (gpointer data); -typedef void (*GFunc) (gpointer data, - gpointer user_data); -typedef guint (*GHashFunc) (gconstpointer key); -typedef void (*GHFunc) (gpointer key, - gpointer value, - gpointer user_data); - -/** - * GFreeFunc: - * @data: a data pointer - * - * Declares a type of function which takes an arbitrary - * data pointer argument and has no return value. It is - * not currently used in GLib or GTK+. - */ -typedef void (*GFreeFunc) (gpointer data); - -/** - * GTranslateFunc: - * @str: the untranslated string - * @data: user data specified when installing the function, e.g. - * in g_option_group_set_translate_func() - * - * The type of functions which are used to translate user-visible - * strings, for output. - * - * Returns: a translation of the string for the current locale. - * The returned string is owned by GLib and must not be freed. - */ -typedef const gchar * (*GTranslateFunc) (const gchar *str, - gpointer data); - - -/* Define some mathematical constants that aren't available - * symbolically in some strict ISO C implementations. - * - * Note that the large number of digits used in these definitions - * doesn't imply that GLib or current computers in general would be - * able to handle floating point numbers with an accuracy like this. - * It's mostly an exercise in futility and future proofing. For - * extended precision floating point support, look somewhere else - * than GLib. - */ -#define G_E 2.7182818284590452353602874713526624977572470937000 -#define G_LN2 0.69314718055994530941723212145817656807550013436026 -#define G_LN10 2.3025850929940456840179914546843642076011014886288 -#define G_PI 3.1415926535897932384626433832795028841971693993751 -#define G_PI_2 1.5707963267948966192313216916397514420985846996876 -#define G_PI_4 0.78539816339744830961566084581987572104929234984378 -#define G_SQRT2 1.4142135623730950488016887242096980785696718753769 - -/* Portable endian checks and conversions - * - * glibconfig.h defines G_BYTE_ORDER which expands to one of - * the below macros. - */ -#define G_LITTLE_ENDIAN 1234 -#define G_BIG_ENDIAN 4321 -#define G_PDP_ENDIAN 3412 /* unused, need specific PDP check */ - - -/* Basic bit swapping functions - */ -#define GUINT16_SWAP_LE_BE_CONSTANT(val) ((guint16) ( \ - (guint16) ((guint16) (val) >> 8) | \ - (guint16) ((guint16) (val) << 8))) - -#define GUINT32_SWAP_LE_BE_CONSTANT(val) ((guint32) ( \ - (((guint32) (val) & (guint32) 0x000000ffU) << 24) | \ - (((guint32) (val) & (guint32) 0x0000ff00U) << 8) | \ - (((guint32) (val) & (guint32) 0x00ff0000U) >> 8) | \ - (((guint32) (val) & (guint32) 0xff000000U) >> 24))) - -#define GUINT64_SWAP_LE_BE_CONSTANT(val) ((guint64) ( \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x00000000000000ffU)) << 56) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x000000000000ff00U)) << 40) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x0000000000ff0000U)) << 24) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x00000000ff000000U)) << 8) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x000000ff00000000U)) >> 8) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x0000ff0000000000U)) >> 24) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x00ff000000000000U)) >> 40) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0xff00000000000000U)) >> 56))) - -/* Arch specific stuff for speed - */ -#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) - -# if __GNUC__ >= 4 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 3 -# define GUINT32_SWAP_LE_BE(val) ((guint32) __builtin_bswap32 ((gint32) val)) -# define GUINT64_SWAP_LE_BE(val) ((guint64) __builtin_bswap64 ((gint64) val)) -# endif - -# if defined (__i386__) -# define GUINT16_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ register guint16 __v, __x = ((guint16) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# if !defined (__i486__) && !defined (__i586__) \ - && !defined (__pentium__) && !defined (__i686__) \ - && !defined (__pentiumpro__) && !defined (__pentium4__) -# define GUINT32_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("rorw $8, %w0\n\t" \ - "rorl $16, %0\n\t" \ - "rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# else /* 486 and higher has bswap */ -# define GUINT32_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("bswap %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) -# endif /* processor specific 32-bit stuff */ -# define GUINT64_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ union { guint64 __ll; \ - guint32 __l[2]; } __w, __r; \ - __w.__ll = ((guint64) (val)); \ - if (__builtin_constant_p (__w.__ll)) \ - __r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (__w.__ll); \ - else \ - { \ - __r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]); \ - __r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]); \ - } \ - __r.__ll; })) - /* Possibly just use the constant version and let gcc figure it out? */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA32 (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA32 (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA32 (val)) -# endif -# elif defined (__ia64__) -# define GUINT16_SWAP_LE_BE_IA64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint16 __v, __x = ((guint16) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define GUINT32_SWAP_LE_BE_IA64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define GUINT64_SWAP_LE_BE_IA64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint64 __v, __x = ((guint64) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA64 (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA64 (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA64 (val)) -# endif -# elif defined (__x86_64__) -# define GUINT32_SWAP_LE_BE_X86_64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("bswapl %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) -# define GUINT64_SWAP_LE_BE_X86_64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint64 __v, __x = ((guint64) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("bswapq %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) - /* gcc seems to figure out optimal code for this on its own */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86_64 (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86_64 (val)) -# endif -# else /* generic gcc */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val)) -# endif -# endif -#else /* generic */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val)) -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val)) -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val)) -#endif /* generic */ - -#define GUINT16_SWAP_LE_PDP(val) ((guint16) (val)) -#define GUINT16_SWAP_BE_PDP(val) (GUINT16_SWAP_LE_BE (val)) -#define GUINT32_SWAP_LE_PDP(val) ((guint32) ( \ - (((guint32) (val) & (guint32) 0x0000ffffU) << 16) | \ - (((guint32) (val) & (guint32) 0xffff0000U) >> 16))) -#define GUINT32_SWAP_BE_PDP(val) ((guint32) ( \ - (((guint32) (val) & (guint32) 0x00ff00ffU) << 8) | \ - (((guint32) (val) & (guint32) 0xff00ff00U) >> 8))) - -/* The G*_TO_?E() macros are defined in glibconfig.h. - * The transformation is symmetric, so the FROM just maps to the TO. - */ -#define GINT16_FROM_LE(val) (GINT16_TO_LE (val)) -#define GUINT16_FROM_LE(val) (GUINT16_TO_LE (val)) -#define GINT16_FROM_BE(val) (GINT16_TO_BE (val)) -#define GUINT16_FROM_BE(val) (GUINT16_TO_BE (val)) -#define GINT32_FROM_LE(val) (GINT32_TO_LE (val)) -#define GUINT32_FROM_LE(val) (GUINT32_TO_LE (val)) -#define GINT32_FROM_BE(val) (GINT32_TO_BE (val)) -#define GUINT32_FROM_BE(val) (GUINT32_TO_BE (val)) - -#define GINT64_FROM_LE(val) (GINT64_TO_LE (val)) -#define GUINT64_FROM_LE(val) (GUINT64_TO_LE (val)) -#define GINT64_FROM_BE(val) (GINT64_TO_BE (val)) -#define GUINT64_FROM_BE(val) (GUINT64_TO_BE (val)) - -#define GLONG_FROM_LE(val) (GLONG_TO_LE (val)) -#define GULONG_FROM_LE(val) (GULONG_TO_LE (val)) -#define GLONG_FROM_BE(val) (GLONG_TO_BE (val)) -#define GULONG_FROM_BE(val) (GULONG_TO_BE (val)) - -#define GINT_FROM_LE(val) (GINT_TO_LE (val)) -#define GUINT_FROM_LE(val) (GUINT_TO_LE (val)) -#define GINT_FROM_BE(val) (GINT_TO_BE (val)) -#define GUINT_FROM_BE(val) (GUINT_TO_BE (val)) - -#define GSIZE_FROM_LE(val) (GSIZE_TO_LE (val)) -#define GSSIZE_FROM_LE(val) (GSSIZE_TO_LE (val)) -#define GSIZE_FROM_BE(val) (GSIZE_TO_BE (val)) -#define GSSIZE_FROM_BE(val) (GSSIZE_TO_BE (val)) - - -/* Portable versions of host-network order stuff - */ -#define g_ntohl(val) (GUINT32_FROM_BE (val)) -#define g_ntohs(val) (GUINT16_FROM_BE (val)) -#define g_htonl(val) (GUINT32_TO_BE (val)) -#define g_htons(val) (GUINT16_TO_BE (val)) - -/* IEEE Standard 754 Single Precision Storage Format (gfloat): - * - * 31 30 23 22 0 - * +--------+---------------+---------------+ - * | s 1bit | e[30:23] 8bit | f[22:0] 23bit | - * +--------+---------------+---------------+ - * B0------------------->B1------->B2-->B3--> - * - * IEEE Standard 754 Double Precision Storage Format (gdouble): - * - * 63 62 52 51 32 31 0 - * +--------+----------------+----------------+ +---------------+ - * | s 1bit | e[62:52] 11bit | f[51:32] 20bit | | f[31:0] 32bit | - * +--------+----------------+----------------+ +---------------+ - * B0--------------->B1---------->B2--->B3----> B4->B5->B6->B7-> - */ -/* subtract from biased_exponent to form base2 exponent (normal numbers) */ -typedef union _GDoubleIEEE754 GDoubleIEEE754; -typedef union _GFloatIEEE754 GFloatIEEE754; -#define G_IEEE754_FLOAT_BIAS (127) -#define G_IEEE754_DOUBLE_BIAS (1023) -/* multiply with base2 exponent to get base10 exponent (normal numbers) */ -#define G_LOG_2_BASE_10 (0.30102999566398119521) -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -union _GFloatIEEE754 -{ - gfloat v_float; - struct { - guint mantissa : 23; - guint biased_exponent : 8; - guint sign : 1; - } mpn; -}; -union _GDoubleIEEE754 -{ - gdouble v_double; - struct { - guint mantissa_low : 32; - guint mantissa_high : 20; - guint biased_exponent : 11; - guint sign : 1; - } mpn; -}; -#elif G_BYTE_ORDER == G_BIG_ENDIAN -union _GFloatIEEE754 -{ - gfloat v_float; - struct { - guint sign : 1; - guint biased_exponent : 8; - guint mantissa : 23; - } mpn; -}; -union _GDoubleIEEE754 -{ - gdouble v_double; - struct { - guint sign : 1; - guint biased_exponent : 11; - guint mantissa_high : 20; - guint mantissa_low : 32; - } mpn; -}; -#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ -#error unknown ENDIAN type -#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ - -typedef struct _GTimeVal GTimeVal; - -struct _GTimeVal -{ - glong tv_sec; - glong tv_usec; -}; - -G_END_DECLS - -/* We prefix variable declarations so they can - * properly get exported in Windows DLLs. - */ -#ifndef GLIB_VAR -# ifdef G_PLATFORM_WIN32 -# ifdef GLIB_STATIC_COMPILATION -# define GLIB_VAR extern -# else /* !GLIB_STATIC_COMPILATION */ -# ifdef GLIB_COMPILATION -# ifdef DLL_EXPORT -# define GLIB_VAR __declspec(dllexport) -# else /* !DLL_EXPORT */ -# define GLIB_VAR extern -# endif /* !DLL_EXPORT */ -# else /* !GLIB_COMPILATION */ -# define GLIB_VAR extern __declspec(dllimport) -# endif /* !GLIB_COMPILATION */ -# endif /* !GLIB_STATIC_COMPILATION */ -# else /* !G_PLATFORM_WIN32 */ -# define GLIB_VAR extern -# endif /* !G_PLATFORM_WIN32 */ -#endif /* GLIB_VAR */ - -#endif /* __G_TYPES_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gunicode.h b/GstreamerHelper/x64/include/glib-2.0/glib/gunicode.h deleted file mode 100644 index f9c2fd56..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gunicode.h +++ /dev/null @@ -1,752 +0,0 @@ -/* gunicode.h - Unicode manipulation functions - * - * Copyright (C) 1999, 2000 Tom Tromey - * Copyright 2000, 2005 Red Hat, Inc. - * - * The Gnome Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The Gnome Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_UNICODE_H__ -#define __G_UNICODE_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * gunichar: - * - * A type which can hold any UTF-32 or UCS-4 character code, - * also known as a Unicode code point. - * - * If you want to produce the UTF-8 representation of a #gunichar, - * use g_ucs4_to_utf8(). See also g_utf8_to_ucs4() for the reverse - * process. - * - * To print/scan values of this type as integer, use - * %G_GINT32_MODIFIER and/or %G_GUINT32_FORMAT. - * - * The notation to express a Unicode code point in running text is - * as a hexadecimal number with four to six digits and uppercase - * letters, prefixed by the string "U+". Leading zeros are omitted, - * unless the code point would have fewer than four hexadecimal digits. - * For example, "U+0041 LATIN CAPITAL LETTER A". To print a code point - * in the U+-notation, use the format string "U+\%04"G_GINT32_FORMAT"X". - * To scan, use the format string "U+\%06"G_GINT32_FORMAT"X". - * - * |[ - * gunichar c; - * sscanf ("U+0041", "U+%06"G_GINT32_FORMAT"X", &c) - * g_print ("Read U+%04"G_GINT32_FORMAT"X", c); - * ]| - */ -typedef guint32 gunichar; - -/** - * gunichar2: - * - * A type which can hold any UTF-16 code - * pointUTF-16 also has so called - * surrogate pairs to encode characters beyond - * the BMP as pairs of 16bit numbers. Surrogate pairs cannot be stored - * in a single gunichar2 field, but all GLib functions accepting gunichar2 - * arrays will correctly interpret surrogate pairs.. - * - * To print/scan values of this type to/from text you need to convert - * to/from UTF-8, using g_utf16_to_utf8()/g_utf8_to_utf16(). - * - * To print/scan values of this type as integer, use - * %G_GINT16_MODIFIER and/or %G_GUINT16_FORMAT. - */ -typedef guint16 gunichar2; - -/** - * GUnicodeType: - * @G_UNICODE_CONTROL: General category "Other, Control" (Cc) - * @G_UNICODE_FORMAT: General category "Other, Format" (Cf) - * @G_UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn) - * @G_UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co) - * @G_UNICODE_SURROGATE: General category "Other, Surrogate" (Cs) - * @G_UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll) - * @G_UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm) - * @G_UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo) - * @G_UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt) - * @G_UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu) - * @G_UNICODE_SPACING_MARK: General category "Mark, Spacing" (Mc) - * @G_UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me) - * @G_UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn) - * @G_UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd) - * @G_UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl) - * @G_UNICODE_OTHER_NUMBER: General category "Number, Other" (No) - * @G_UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc) - * @G_UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd) - * @G_UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe) - * @G_UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf) - * @G_UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi) - * @G_UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po) - * @G_UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps) - * @G_UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc) - * @G_UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk) - * @G_UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm) - * @G_UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So) - * @G_UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl) - * @G_UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp) - * @G_UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs) - * - * These are the possible character classifications from the - * Unicode specification. - * See http://www.unicode.org/Public/UNIDATA/UnicodeData.html. - */ -typedef enum -{ - G_UNICODE_CONTROL, - G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, - G_UNICODE_PRIVATE_USE, - G_UNICODE_SURROGATE, - G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, - G_UNICODE_TITLECASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_SPACING_MARK, - G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, - G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_LETTER_NUMBER, - G_UNICODE_OTHER_NUMBER, - G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, - G_UNICODE_LINE_SEPARATOR, - G_UNICODE_PARAGRAPH_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR -} GUnicodeType; - -/** - * G_UNICODE_COMBINING_MARK: - * - * Older name for %G_UNICODE_SPACING_MARK. - * - * Deprecated: 2.30: Use %G_UNICODE_SPACING_MARK. - */ -#ifndef G_DISABLE_DEPRECATED -#define G_UNICODE_COMBINING_MARK G_UNICODE_SPACING_MARK -#endif - -/** - * GUnicodeBreakType: - * @G_UNICODE_BREAK_MANDATORY: Mandatory Break (BK) - * @G_UNICODE_BREAK_CARRIAGE_RETURN: Carriage Return (CR) - * @G_UNICODE_BREAK_LINE_FEED: Line Feed (LF) - * @G_UNICODE_BREAK_COMBINING_MARK: Attached Characters and Combining Marks (CM) - * @G_UNICODE_BREAK_SURROGATE: Surrogates (SG) - * @G_UNICODE_BREAK_ZERO_WIDTH_SPACE: Zero Width Space (ZW) - * @G_UNICODE_BREAK_INSEPARABLE: Inseparable (IN) - * @G_UNICODE_BREAK_NON_BREAKING_GLUE: Non-breaking ("Glue") (GL) - * @G_UNICODE_BREAK_CONTINGENT: Contingent Break Opportunity (CB) - * @G_UNICODE_BREAK_SPACE: Space (SP) - * @G_UNICODE_BREAK_AFTER: Break Opportunity After (BA) - * @G_UNICODE_BREAK_BEFORE: Break Opportunity Before (BB) - * @G_UNICODE_BREAK_BEFORE_AND_AFTER: Break Opportunity Before and After (B2) - * @G_UNICODE_BREAK_HYPHEN: Hyphen (HY) - * @G_UNICODE_BREAK_NON_STARTER: Nonstarter (NS) - * @G_UNICODE_BREAK_OPEN_PUNCTUATION: Opening Punctuation (OP) - * @G_UNICODE_BREAK_CLOSE_PUNCTUATION: Closing Punctuation (CL) - * @G_UNICODE_BREAK_QUOTATION: Ambiguous Quotation (QU) - * @G_UNICODE_BREAK_EXCLAMATION: Exclamation/Interrogation (EX) - * @G_UNICODE_BREAK_IDEOGRAPHIC: Ideographic (ID) - * @G_UNICODE_BREAK_NUMERIC: Numeric (NU) - * @G_UNICODE_BREAK_INFIX_SEPARATOR: Infix Separator (Numeric) (IS) - * @G_UNICODE_BREAK_SYMBOL: Symbols Allowing Break After (SY) - * @G_UNICODE_BREAK_ALPHABETIC: Ordinary Alphabetic and Symbol Characters (AL) - * @G_UNICODE_BREAK_PREFIX: Prefix (Numeric) (PR) - * @G_UNICODE_BREAK_POSTFIX: Postfix (Numeric) (PO) - * @G_UNICODE_BREAK_COMPLEX_CONTEXT: Complex Content Dependent (South East Asian) (SA) - * @G_UNICODE_BREAK_AMBIGUOUS: Ambiguous (Alphabetic or Ideographic) (AI) - * @G_UNICODE_BREAK_UNKNOWN: Unknown (XX) - * @G_UNICODE_BREAK_NEXT_LINE: Next Line (NL) - * @G_UNICODE_BREAK_WORD_JOINER: Word Joiner (WJ) - * @G_UNICODE_BREAK_HANGUL_L_JAMO: Hangul L Jamo (JL) - * @G_UNICODE_BREAK_HANGUL_V_JAMO: Hangul V Jamo (JV) - * @G_UNICODE_BREAK_HANGUL_T_JAMO: Hangul T Jamo (JT) - * @G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: Hangul LV Syllable (H2) - * @G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: Hangul LVT Syllable (H3) - * @G_UNICODE_BREAK_CLOSE_PARANTHESIS: Closing Parenthesis (CP). Since 2.28 - * @G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER: Conditional Japanese Starter (CJ). Since: 2.32 - * @G_UNICODE_BREAK_HEBREW_LETTER: Hebrew Letter (HL). Since: 2.32 - * - * These are the possible line break classifications. - * - * The five Hangul types were added in Unicode 4.1, so, has been - * introduced in GLib 2.10. Note that new types may be added in the future. - * Applications should be ready to handle unknown values. - * They may be regarded as %G_UNICODE_BREAK_UNKNOWN. - * - * See http://www.unicode.org/unicode/reports/tr14/. - */ -typedef enum -{ - G_UNICODE_BREAK_MANDATORY, - G_UNICODE_BREAK_CARRIAGE_RETURN, - G_UNICODE_BREAK_LINE_FEED, - G_UNICODE_BREAK_COMBINING_MARK, - G_UNICODE_BREAK_SURROGATE, - G_UNICODE_BREAK_ZERO_WIDTH_SPACE, - G_UNICODE_BREAK_INSEPARABLE, - G_UNICODE_BREAK_NON_BREAKING_GLUE, - G_UNICODE_BREAK_CONTINGENT, - G_UNICODE_BREAK_SPACE, - G_UNICODE_BREAK_AFTER, - G_UNICODE_BREAK_BEFORE, - G_UNICODE_BREAK_BEFORE_AND_AFTER, - G_UNICODE_BREAK_HYPHEN, - G_UNICODE_BREAK_NON_STARTER, - G_UNICODE_BREAK_OPEN_PUNCTUATION, - G_UNICODE_BREAK_CLOSE_PUNCTUATION, - G_UNICODE_BREAK_QUOTATION, - G_UNICODE_BREAK_EXCLAMATION, - G_UNICODE_BREAK_IDEOGRAPHIC, - G_UNICODE_BREAK_NUMERIC, - G_UNICODE_BREAK_INFIX_SEPARATOR, - G_UNICODE_BREAK_SYMBOL, - G_UNICODE_BREAK_ALPHABETIC, - G_UNICODE_BREAK_PREFIX, - G_UNICODE_BREAK_POSTFIX, - G_UNICODE_BREAK_COMPLEX_CONTEXT, - G_UNICODE_BREAK_AMBIGUOUS, - G_UNICODE_BREAK_UNKNOWN, - G_UNICODE_BREAK_NEXT_LINE, - G_UNICODE_BREAK_WORD_JOINER, - G_UNICODE_BREAK_HANGUL_L_JAMO, - G_UNICODE_BREAK_HANGUL_V_JAMO, - G_UNICODE_BREAK_HANGUL_T_JAMO, - G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, - G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, - G_UNICODE_BREAK_CLOSE_PARANTHESIS, - G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER, - G_UNICODE_BREAK_HEBREW_LETTER -} GUnicodeBreakType; - -/** - * GUnicodeScript: - * @G_UNICODE_SCRIPT_INVALID_CODE: - * a value never returned from g_unichar_get_script() - * @G_UNICODE_SCRIPT_COMMON: a character used by multiple different scripts - * @G_UNICODE_SCRIPT_INHERITED: a mark glyph that takes its script from the - * i base glyph to which it is attached - * @G_UNICODE_SCRIPT_ARABIC: Arabic - * @G_UNICODE_SCRIPT_ARMENIAN: Armenian - * @G_UNICODE_SCRIPT_BENGALI: Bengali - * @G_UNICODE_SCRIPT_BOPOMOFO: Bopomofo - * @G_UNICODE_SCRIPT_CHEROKEE: Cherokee - * @G_UNICODE_SCRIPT_COPTIC: Coptic - * @G_UNICODE_SCRIPT_CYRILLIC: Cyrillic - * @G_UNICODE_SCRIPT_DESERET: Deseret - * @G_UNICODE_SCRIPT_DEVANAGARI: Devanagari - * @G_UNICODE_SCRIPT_ETHIOPIC: Ethiopic - * @G_UNICODE_SCRIPT_GEORGIAN: Georgian - * @G_UNICODE_SCRIPT_GOTHIC: Gothic - * @G_UNICODE_SCRIPT_GREEK: Greek - * @G_UNICODE_SCRIPT_GUJARATI: Gujarati - * @G_UNICODE_SCRIPT_GURMUKHI: Gurmukhi - * @G_UNICODE_SCRIPT_HAN: Han - * @G_UNICODE_SCRIPT_HANGUL: Hangul - * @G_UNICODE_SCRIPT_HEBREW: Hebrew - * @G_UNICODE_SCRIPT_HIRAGANA: Hiragana - * @G_UNICODE_SCRIPT_KANNADA: Kannada - * @G_UNICODE_SCRIPT_KATAKANA: Katakana - * @G_UNICODE_SCRIPT_KHMER: Khmer - * @G_UNICODE_SCRIPT_LAO: Lao - * @G_UNICODE_SCRIPT_LATIN: Latin - * @G_UNICODE_SCRIPT_MALAYALAM: Malayalam - * @G_UNICODE_SCRIPT_MONGOLIAN: Mongolian - * @G_UNICODE_SCRIPT_MYANMAR: Myanmar - * @G_UNICODE_SCRIPT_OGHAM: Ogham - * @G_UNICODE_SCRIPT_OLD_ITALIC: Old Italic - * @G_UNICODE_SCRIPT_ORIYA: Oriya - * @G_UNICODE_SCRIPT_RUNIC: Runic - * @G_UNICODE_SCRIPT_SINHALA: Sinhala - * @G_UNICODE_SCRIPT_SYRIAC: Syriac - * @G_UNICODE_SCRIPT_TAMIL: Tamil - * @G_UNICODE_SCRIPT_TELUGU: Telugu - * @G_UNICODE_SCRIPT_THAANA: Thaana - * @G_UNICODE_SCRIPT_THAI: Thai - * @G_UNICODE_SCRIPT_TIBETAN: Tibetan - * @G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL: - * Canadian Aboriginal - * @G_UNICODE_SCRIPT_YI: Yi - * @G_UNICODE_SCRIPT_TAGALOG: Tagalog - * @G_UNICODE_SCRIPT_HANUNOO: Hanunoo - * @G_UNICODE_SCRIPT_BUHID: Buhid - * @G_UNICODE_SCRIPT_TAGBANWA: Tagbanwa - * @G_UNICODE_SCRIPT_BRAILLE: Braille - * @G_UNICODE_SCRIPT_CYPRIOT: Cypriot - * @G_UNICODE_SCRIPT_LIMBU: Limbu - * @G_UNICODE_SCRIPT_OSMANYA: Osmanya - * @G_UNICODE_SCRIPT_SHAVIAN: Shavian - * @G_UNICODE_SCRIPT_LINEAR_B: Linear B - * @G_UNICODE_SCRIPT_TAI_LE: Tai Le - * @G_UNICODE_SCRIPT_UGARITIC: Ugaritic - * @G_UNICODE_SCRIPT_NEW_TAI_LUE: - * New Tai Lue - * @G_UNICODE_SCRIPT_BUGINESE: Buginese - * @G_UNICODE_SCRIPT_GLAGOLITIC: Glagolitic - * @G_UNICODE_SCRIPT_TIFINAGH: Tifinagh - * @G_UNICODE_SCRIPT_SYLOTI_NAGRI: - * Syloti Nagri - * @G_UNICODE_SCRIPT_OLD_PERSIAN: - * Old Persian - * @G_UNICODE_SCRIPT_KHAROSHTHI: Kharoshthi - * @G_UNICODE_SCRIPT_UNKNOWN: an unassigned code point - * @G_UNICODE_SCRIPT_BALINESE: Balinese - * @G_UNICODE_SCRIPT_CUNEIFORM: Cuneiform - * @G_UNICODE_SCRIPT_PHOENICIAN: Phoenician - * @G_UNICODE_SCRIPT_PHAGS_PA: Phags-pa - * @G_UNICODE_SCRIPT_NKO: N'Ko - * @G_UNICODE_SCRIPT_KAYAH_LI: Kayah Li. Since 2.16.3 - * @G_UNICODE_SCRIPT_LEPCHA: Lepcha. Since 2.16.3 - * @G_UNICODE_SCRIPT_REJANG: Rejang. Since 2.16.3 - * @G_UNICODE_SCRIPT_SUNDANESE: Sundanese. Since 2.16.3 - * @G_UNICODE_SCRIPT_SAURASHTRA: Saurashtra. Since 2.16.3 - * @G_UNICODE_SCRIPT_CHAM: Cham. Since 2.16.3 - * @G_UNICODE_SCRIPT_OL_CHIKI: Ol Chiki. Since 2.16.3 - * @G_UNICODE_SCRIPT_VAI: Vai. Since 2.16.3 - * @G_UNICODE_SCRIPT_CARIAN: Carian. Since 2.16.3 - * @G_UNICODE_SCRIPT_LYCIAN: Lycian. Since 2.16.3 - * @G_UNICODE_SCRIPT_LYDIAN: Lydian. Since 2.16.3 - * @G_UNICODE_SCRIPT_AVESTAN: Avestan. Since 2.26 - * @G_UNICODE_SCRIPT_BAMUM: Bamum. Since 2.26 - * @G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS: - * Egyptian Hieroglpyhs. Since 2.26 - * @G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC: - * Imperial Aramaic. Since 2.26 - * @G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI: - * Inscriptional Pahlavi. Since 2.26 - * @G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN: - * Inscriptional Parthian. Since 2.26 - * @G_UNICODE_SCRIPT_JAVANESE: Javanese. Since 2.26 - * @G_UNICODE_SCRIPT_KAITHI: Kaithi. Since 2.26 - * @G_UNICODE_SCRIPT_LISU: Lisu. Since 2.26 - * @G_UNICODE_SCRIPT_MEETEI_MAYEK: - * Meetei Mayek. Since 2.26 - * @G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN: - * Old South Arabian. Since 2.26 - * @G_UNICODE_SCRIPT_OLD_TURKIC: Old Turkic. Since 2.28 - * @G_UNICODE_SCRIPT_SAMARITAN: Samaritan. Since 2.26 - * @G_UNICODE_SCRIPT_TAI_THAM: Tai Tham. Since 2.26 - * @G_UNICODE_SCRIPT_TAI_VIET: Tai Viet. Since 2.26 - * @G_UNICODE_SCRIPT_BATAK: Batak. Since 2.28 - * @G_UNICODE_SCRIPT_BRAHMI: Brahmi. Since 2.28 - * @G_UNICODE_SCRIPT_MANDAIC: Mandaic. Since 2.28 - * @G_UNICODE_SCRIPT_CHAKMA: Chakma. Since: 2.32 - * @G_UNICODE_SCRIPT_MEROITIC_CURSIVE: Meroitic Cursive. Since: 2.32 - * @G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS: Meroitic Hieroglyphs. Since: 2.32 - * @G_UNICODE_SCRIPT_MIAO: Miao. Since: 2.32 - * @G_UNICODE_SCRIPT_SHARADA: Sharada. Since: 2.32 - * @G_UNICODE_SCRIPT_SORA_SOMPENG: Sora Sompeng. Since: 2.32 - * @G_UNICODE_SCRIPT_TAKRI: Takri. Since: 2.32 - * - * The #GUnicodeScript enumeration identifies different writing - * systems. The values correspond to the names as defined in the - * Unicode standard. The enumeration has been added in GLib 2.14, - * and is interchangeable with #PangoScript. - * - * Note that new types may be added in the future. Applications - * should be ready to handle unknown values. - * See Unicode Standard Annex - * #24: Script names. - */ -typedef enum -{ /* ISO 15924 code */ - G_UNICODE_SCRIPT_INVALID_CODE = -1, - G_UNICODE_SCRIPT_COMMON = 0, /* Zyyy */ - G_UNICODE_SCRIPT_INHERITED, /* Zinh (Qaai) */ - G_UNICODE_SCRIPT_ARABIC, /* Arab */ - G_UNICODE_SCRIPT_ARMENIAN, /* Armn */ - G_UNICODE_SCRIPT_BENGALI, /* Beng */ - G_UNICODE_SCRIPT_BOPOMOFO, /* Bopo */ - G_UNICODE_SCRIPT_CHEROKEE, /* Cher */ - G_UNICODE_SCRIPT_COPTIC, /* Copt (Qaac) */ - G_UNICODE_SCRIPT_CYRILLIC, /* Cyrl (Cyrs) */ - G_UNICODE_SCRIPT_DESERET, /* Dsrt */ - G_UNICODE_SCRIPT_DEVANAGARI, /* Deva */ - G_UNICODE_SCRIPT_ETHIOPIC, /* Ethi */ - G_UNICODE_SCRIPT_GEORGIAN, /* Geor (Geon, Geoa) */ - G_UNICODE_SCRIPT_GOTHIC, /* Goth */ - G_UNICODE_SCRIPT_GREEK, /* Grek */ - G_UNICODE_SCRIPT_GUJARATI, /* Gujr */ - G_UNICODE_SCRIPT_GURMUKHI, /* Guru */ - G_UNICODE_SCRIPT_HAN, /* Hani */ - G_UNICODE_SCRIPT_HANGUL, /* Hang */ - G_UNICODE_SCRIPT_HEBREW, /* Hebr */ - G_UNICODE_SCRIPT_HIRAGANA, /* Hira */ - G_UNICODE_SCRIPT_KANNADA, /* Knda */ - G_UNICODE_SCRIPT_KATAKANA, /* Kana */ - G_UNICODE_SCRIPT_KHMER, /* Khmr */ - G_UNICODE_SCRIPT_LAO, /* Laoo */ - G_UNICODE_SCRIPT_LATIN, /* Latn (Latf, Latg) */ - G_UNICODE_SCRIPT_MALAYALAM, /* Mlym */ - G_UNICODE_SCRIPT_MONGOLIAN, /* Mong */ - G_UNICODE_SCRIPT_MYANMAR, /* Mymr */ - G_UNICODE_SCRIPT_OGHAM, /* Ogam */ - G_UNICODE_SCRIPT_OLD_ITALIC, /* Ital */ - G_UNICODE_SCRIPT_ORIYA, /* Orya */ - G_UNICODE_SCRIPT_RUNIC, /* Runr */ - G_UNICODE_SCRIPT_SINHALA, /* Sinh */ - G_UNICODE_SCRIPT_SYRIAC, /* Syrc (Syrj, Syrn, Syre) */ - G_UNICODE_SCRIPT_TAMIL, /* Taml */ - G_UNICODE_SCRIPT_TELUGU, /* Telu */ - G_UNICODE_SCRIPT_THAANA, /* Thaa */ - G_UNICODE_SCRIPT_THAI, /* Thai */ - G_UNICODE_SCRIPT_TIBETAN, /* Tibt */ - G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */ - G_UNICODE_SCRIPT_YI, /* Yiii */ - G_UNICODE_SCRIPT_TAGALOG, /* Tglg */ - G_UNICODE_SCRIPT_HANUNOO, /* Hano */ - G_UNICODE_SCRIPT_BUHID, /* Buhd */ - G_UNICODE_SCRIPT_TAGBANWA, /* Tagb */ - - /* Unicode-4.0 additions */ - G_UNICODE_SCRIPT_BRAILLE, /* Brai */ - G_UNICODE_SCRIPT_CYPRIOT, /* Cprt */ - G_UNICODE_SCRIPT_LIMBU, /* Limb */ - G_UNICODE_SCRIPT_OSMANYA, /* Osma */ - G_UNICODE_SCRIPT_SHAVIAN, /* Shaw */ - G_UNICODE_SCRIPT_LINEAR_B, /* Linb */ - G_UNICODE_SCRIPT_TAI_LE, /* Tale */ - G_UNICODE_SCRIPT_UGARITIC, /* Ugar */ - - /* Unicode-4.1 additions */ - G_UNICODE_SCRIPT_NEW_TAI_LUE, /* Talu */ - G_UNICODE_SCRIPT_BUGINESE, /* Bugi */ - G_UNICODE_SCRIPT_GLAGOLITIC, /* Glag */ - G_UNICODE_SCRIPT_TIFINAGH, /* Tfng */ - G_UNICODE_SCRIPT_SYLOTI_NAGRI, /* Sylo */ - G_UNICODE_SCRIPT_OLD_PERSIAN, /* Xpeo */ - G_UNICODE_SCRIPT_KHAROSHTHI, /* Khar */ - - /* Unicode-5.0 additions */ - G_UNICODE_SCRIPT_UNKNOWN, /* Zzzz */ - G_UNICODE_SCRIPT_BALINESE, /* Bali */ - G_UNICODE_SCRIPT_CUNEIFORM, /* Xsux */ - G_UNICODE_SCRIPT_PHOENICIAN, /* Phnx */ - G_UNICODE_SCRIPT_PHAGS_PA, /* Phag */ - G_UNICODE_SCRIPT_NKO, /* Nkoo */ - - /* Unicode-5.1 additions */ - G_UNICODE_SCRIPT_KAYAH_LI, /* Kali */ - G_UNICODE_SCRIPT_LEPCHA, /* Lepc */ - G_UNICODE_SCRIPT_REJANG, /* Rjng */ - G_UNICODE_SCRIPT_SUNDANESE, /* Sund */ - G_UNICODE_SCRIPT_SAURASHTRA, /* Saur */ - G_UNICODE_SCRIPT_CHAM, /* Cham */ - G_UNICODE_SCRIPT_OL_CHIKI, /* Olck */ - G_UNICODE_SCRIPT_VAI, /* Vaii */ - G_UNICODE_SCRIPT_CARIAN, /* Cari */ - G_UNICODE_SCRIPT_LYCIAN, /* Lyci */ - G_UNICODE_SCRIPT_LYDIAN, /* Lydi */ - - /* Unicode-5.2 additions */ - G_UNICODE_SCRIPT_AVESTAN, /* Avst */ - G_UNICODE_SCRIPT_BAMUM, /* Bamu */ - G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS, /* Egyp */ - G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC, /* Armi */ - G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI, /* Phli */ - G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */ - G_UNICODE_SCRIPT_JAVANESE, /* Java */ - G_UNICODE_SCRIPT_KAITHI, /* Kthi */ - G_UNICODE_SCRIPT_LISU, /* Lisu */ - G_UNICODE_SCRIPT_MEETEI_MAYEK, /* Mtei */ - G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN, /* Sarb */ - G_UNICODE_SCRIPT_OLD_TURKIC, /* Orkh */ - G_UNICODE_SCRIPT_SAMARITAN, /* Samr */ - G_UNICODE_SCRIPT_TAI_THAM, /* Lana */ - G_UNICODE_SCRIPT_TAI_VIET, /* Tavt */ - - /* Unicode-6.0 additions */ - G_UNICODE_SCRIPT_BATAK, /* Batk */ - G_UNICODE_SCRIPT_BRAHMI, /* Brah */ - G_UNICODE_SCRIPT_MANDAIC, /* Mand */ - - /* Unicode-6.1 additions */ - G_UNICODE_SCRIPT_CHAKMA, /* Cakm */ - G_UNICODE_SCRIPT_MEROITIC_CURSIVE, /* Merc */ - G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS, /* Mero */ - G_UNICODE_SCRIPT_MIAO, /* Plrd */ - G_UNICODE_SCRIPT_SHARADA, /* Shrd */ - G_UNICODE_SCRIPT_SORA_SOMPENG, /* Sora */ - G_UNICODE_SCRIPT_TAKRI /* Takr */ -} GUnicodeScript; - -guint32 g_unicode_script_to_iso15924 (GUnicodeScript script); -GUnicodeScript g_unicode_script_from_iso15924 (guint32 iso15924); - -/* These are all analogs of the functions. - */ -gboolean g_unichar_isalnum (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isalpha (gunichar c) G_GNUC_CONST; -gboolean g_unichar_iscntrl (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isdigit (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isgraph (gunichar c) G_GNUC_CONST; -gboolean g_unichar_islower (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isprint (gunichar c) G_GNUC_CONST; -gboolean g_unichar_ispunct (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isspace (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isupper (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isxdigit (gunichar c) G_GNUC_CONST; -gboolean g_unichar_istitle (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isdefined (gunichar c) G_GNUC_CONST; -gboolean g_unichar_iswide (gunichar c) G_GNUC_CONST; -gboolean g_unichar_iswide_cjk(gunichar c) G_GNUC_CONST; -gboolean g_unichar_iszerowidth(gunichar c) G_GNUC_CONST; -gboolean g_unichar_ismark (gunichar c) G_GNUC_CONST; - -/* More functions. These convert between the three cases. - * See the Unicode book to understand title case. */ -gunichar g_unichar_toupper (gunichar c) G_GNUC_CONST; -gunichar g_unichar_tolower (gunichar c) G_GNUC_CONST; -gunichar g_unichar_totitle (gunichar c) G_GNUC_CONST; - -/* If C is a digit (according to `g_unichar_isdigit'), then return its - numeric value. Otherwise return -1. */ -gint g_unichar_digit_value (gunichar c) G_GNUC_CONST; - -gint g_unichar_xdigit_value (gunichar c) G_GNUC_CONST; - -/* Return the Unicode character type of a given character. */ -GUnicodeType g_unichar_type (gunichar c) G_GNUC_CONST; - -/* Return the line break property for a given character */ -GUnicodeBreakType g_unichar_break_type (gunichar c) G_GNUC_CONST; - -/* Returns the combining class for a given character */ -gint g_unichar_combining_class (gunichar uc) G_GNUC_CONST; - -gboolean g_unichar_get_mirror_char (gunichar ch, - gunichar *mirrored_ch); - -GUnicodeScript g_unichar_get_script (gunichar ch) G_GNUC_CONST; - -/* Validate a Unicode character */ -gboolean g_unichar_validate (gunichar ch) G_GNUC_CONST; - -/* Pairwise canonical compose/decompose */ -gboolean g_unichar_compose (gunichar a, - gunichar b, - gunichar *ch); -gboolean g_unichar_decompose (gunichar ch, - gunichar *a, - gunichar *b); - -gsize g_unichar_fully_decompose (gunichar ch, - gboolean compat, - gunichar *result, - gsize result_len); - -/** - * G_UNICHAR_MAX_DECOMPOSITION_LENGTH: - * - * The maximum length (in codepoints) of a compatibility or canonical - * decomposition of a single Unicode character. - * - * This is as defined by Unicode 6.1. - * - * Since: 2.32 - */ -#define G_UNICHAR_MAX_DECOMPOSITION_LENGTH 18 /* codepoints */ - -/* Compute canonical ordering of a string in-place. This rearranges - decomposed characters in the string according to their combining - classes. See the Unicode manual for more information. */ -void g_unicode_canonical_ordering (gunichar *string, - gsize len); - - -GLIB_DEPRECATED_IN_2_30 -gunichar *g_unicode_canonical_decomposition (gunichar ch, - gsize *result_len) G_GNUC_MALLOC; - -/* Array of skip-bytes-per-initial character. - */ -GLIB_VAR const gchar * const g_utf8_skip; - -/** - * g_utf8_next_char: - * @p: Pointer to the start of a valid UTF-8 character - * - * Skips to the next character in a UTF-8 string. The string must be - * valid; this macro is as fast as possible, and has no error-checking. - * You would use this macro to iterate over a string character by - * character. The macro returns the start of the next UTF-8 character. - * Before using this macro, use g_utf8_validate() to validate strings - * that may contain invalid UTF-8. - */ -#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)]) - -gunichar g_utf8_get_char (const gchar *p) G_GNUC_PURE; -gunichar g_utf8_get_char_validated (const gchar *p, - gssize max_len) G_GNUC_PURE; - -gchar* g_utf8_offset_to_pointer (const gchar *str, - glong offset) G_GNUC_PURE; -glong g_utf8_pointer_to_offset (const gchar *str, - const gchar *pos) G_GNUC_PURE; -gchar* g_utf8_prev_char (const gchar *p) G_GNUC_PURE; -gchar* g_utf8_find_next_char (const gchar *p, - const gchar *end) G_GNUC_PURE; -gchar* g_utf8_find_prev_char (const gchar *str, - const gchar *p) G_GNUC_PURE; - -glong g_utf8_strlen (const gchar *p, - gssize max) G_GNUC_PURE; - -GLIB_AVAILABLE_IN_2_30 -gchar *g_utf8_substring (const gchar *str, - glong start_pos, - glong end_pos) G_GNUC_MALLOC; - -gchar *g_utf8_strncpy (gchar *dest, - const gchar *src, - gsize n); - -/* Find the UTF-8 character corresponding to ch, in string p. These - functions are equivalants to strchr and strrchr */ -gchar* g_utf8_strchr (const gchar *p, - gssize len, - gunichar c); -gchar* g_utf8_strrchr (const gchar *p, - gssize len, - gunichar c); -gchar* g_utf8_strreverse (const gchar *str, - gssize len); - -gunichar2 *g_utf8_to_utf16 (const gchar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gunichar * g_utf8_to_ucs4 (const gchar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gunichar * g_utf8_to_ucs4_fast (const gchar *str, - glong len, - glong *items_written) G_GNUC_MALLOC; -gunichar * g_utf16_to_ucs4 (const gunichar2 *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gchar* g_utf16_to_utf8 (const gunichar2 *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gunichar2 *g_ucs4_to_utf16 (const gunichar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gchar* g_ucs4_to_utf8 (const gunichar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; - -gint g_unichar_to_utf8 (gunichar c, - gchar *outbuf); - -gboolean g_utf8_validate (const gchar *str, - gssize max_len, - const gchar **end); - -gchar *g_utf8_strup (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar *g_utf8_strdown (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar *g_utf8_casefold (const gchar *str, - gssize len) G_GNUC_MALLOC; - -/** - * GNormalizeMode: - * @G_NORMALIZE_DEFAULT: standardize differences that do not affect the - * text content, such as the above-mentioned accent representation - * @G_NORMALIZE_NFD: another name for %G_NORMALIZE_DEFAULT - * @G_NORMALIZE_DEFAULT_COMPOSE: like %G_NORMALIZE_DEFAULT, but with - * composed forms rather than a maximally decomposed form - * @G_NORMALIZE_NFC: another name for %G_NORMALIZE_DEFAULT_COMPOSE - * @G_NORMALIZE_ALL: beyond %G_NORMALIZE_DEFAULT also standardize the - * "compatibility" characters in Unicode, such as SUPERSCRIPT THREE - * to the standard forms (in this case DIGIT THREE). Formatting - * information may be lost but for most text operations such - * characters should be considered the same - * @G_NORMALIZE_NFKD: another name for %G_NORMALIZE_ALL - * @G_NORMALIZE_ALL_COMPOSE: like %G_NORMALIZE_ALL, but with composed - * forms rather than a maximally decomposed form - * @G_NORMALIZE_NFKC: another name for %G_NORMALIZE_ALL_COMPOSE - * - * Defines how a Unicode string is transformed in a canonical - * form, standardizing such issues as whether a character with - * an accent is represented as a base character and combining - * accent or as a single precomposed character. Unicode strings - * should generally be normalized before comparing them. - */ -typedef enum { - G_NORMALIZE_DEFAULT, - G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT, - G_NORMALIZE_DEFAULT_COMPOSE, - G_NORMALIZE_NFC = G_NORMALIZE_DEFAULT_COMPOSE, - G_NORMALIZE_ALL, - G_NORMALIZE_NFKD = G_NORMALIZE_ALL, - G_NORMALIZE_ALL_COMPOSE, - G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE -} GNormalizeMode; - -gchar *g_utf8_normalize (const gchar *str, - gssize len, - GNormalizeMode mode) G_GNUC_MALLOC; - -gint g_utf8_collate (const gchar *str1, - const gchar *str2) G_GNUC_PURE; -gchar *g_utf8_collate_key (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar *g_utf8_collate_key_for_filename (const gchar *str, - gssize len) G_GNUC_MALLOC; - - -/* private */ - -gchar *_g_utf8_make_valid (const gchar *name); - -G_END_DECLS - -#endif /* __G_UNICODE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gurifuncs.h b/GstreamerHelper/x64/include/glib-2.0/glib/gurifuncs.h deleted file mode 100644 index 6e6b7391..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gurifuncs.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_URI_FUNCS_H__ -#define __G_URI_FUNCS_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_URI_RESERVED_CHARS_GENERIC_DELIMITERS: - * - * Generic delimiters characters as defined in RFC 3986. Includes ":/?#[]@". - **/ -#define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@" - -/** - * G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS: - * - * Subcomponent delimiter characters as defined in RFC 3986. Includes "!$&'()*+,;=". - **/ -#define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;=" - -/** - * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT: - * - * Allowed characters in path elements. Includes "!$&'()*+,;=:@". - **/ -#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@" - -/** - * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH: - * - * Allowed characters in a path. Includes "!$&'()*+,;=:@/". - **/ -#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/" - -/** - * G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO: - * - * Allowed characters in userinfo as defined in RFC 3986. Includes "!$&'()*+,;=:". - **/ -#define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":" - -char * g_uri_unescape_string (const char *escaped_string, - const char *illegal_characters); -char * g_uri_unescape_segment (const char *escaped_string, - const char *escaped_string_end, - const char *illegal_characters); -char * g_uri_parse_scheme (const char *uri); -char * g_uri_escape_string (const char *unescaped, - const char *reserved_chars_allowed, - gboolean allow_utf8); - -G_END_DECLS - -#endif /* __G_URI_FUNCS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gutils.h b/GstreamerHelper/x64/include/glib-2.0/glib/gutils.h deleted file mode 100644 index 213a39fb..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gutils.h +++ /dev/null @@ -1,375 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_UTILS_H__ -#define __G_UTILS_H__ - -#include -#include - -G_BEGIN_DECLS - -/* Define G_VA_COPY() to do the right thing for copying va_list variables. - * glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy. - */ -#if !defined (G_VA_COPY) -# if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32)) -# define G_VA_COPY(ap1, ap2) (*(ap1) = *(ap2)) -# elif defined (G_VA_COPY_AS_ARRAY) -# define G_VA_COPY(ap1, ap2) g_memmove ((ap1), (ap2), sizeof (va_list)) -# else /* va_list is a pointer */ -# define G_VA_COPY(ap1, ap2) ((ap1) = (ap2)) -# endif /* va_list is a pointer */ -#endif /* !G_VA_COPY */ - -/* inlining hassle. for compilers that don't allow the `inline' keyword, - * mostly because of strict ANSI C compliance or dumbness, we try to fall - * back to either `__inline__' or `__inline'. - * G_CAN_INLINE is defined in glibconfig.h if the compiler seems to be - * actually *capable* to do function inlining, in which case inline - * function bodies do make sense. we also define G_INLINE_FUNC to properly - * export the function prototypes if no inlining can be performed. - * inline function bodies have to be special cased with G_CAN_INLINE and a - * .c file specific macro to allow one compiled instance with extern linkage - * of the functions by defining G_IMPLEMENT_INLINES and the .c file macro. - */ -#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__) -# undef inline -# define inline __inline__ -#elif !defined (G_HAVE_INLINE) -# undef inline -# if defined (G_HAVE___INLINE__) -# define inline __inline__ -# elif defined (G_HAVE___INLINE) -# define inline __inline -# else /* !inline && !__inline__ && !__inline */ -# define inline /* don't inline, then */ -# endif -#endif -#ifdef G_IMPLEMENT_INLINES -# define G_INLINE_FUNC -# undef G_CAN_INLINE -#elif defined (__GNUC__) -# define G_INLINE_FUNC static __inline __attribute__ ((unused)) -#elif defined (G_CAN_INLINE) -# define G_INLINE_FUNC static inline -#else /* can't inline */ -# define G_INLINE_FUNC -#endif /* !G_INLINE_FUNC */ - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_get_user_name g_get_user_name_utf8 -#define g_get_real_name g_get_real_name_utf8 -#define g_get_home_dir g_get_home_dir_utf8 -#define g_get_tmp_dir g_get_tmp_dir_utf8 -#endif -#endif - -const gchar * g_get_user_name (void); -const gchar * g_get_real_name (void); -const gchar * g_get_home_dir (void); -const gchar * g_get_tmp_dir (void); -const gchar * g_get_host_name (void); -gchar * g_get_prgname (void); -void g_set_prgname (const gchar *prgname); -const gchar * g_get_application_name (void); -void g_set_application_name (const gchar *application_name); - -void g_reload_user_special_dirs_cache (void); -const gchar * g_get_user_data_dir (void); -const gchar * g_get_user_config_dir (void); -const gchar * g_get_user_cache_dir (void); -const gchar * const * g_get_system_data_dirs (void); - -#ifdef G_OS_WIN32 -/* This functions is not part of the public GLib API */ -const gchar * const * g_win32_get_system_data_dirs_for_module (void (*address_of_function)(void)); -#endif - -#if defined (G_OS_WIN32) && defined (G_CAN_INLINE) && !defined (__cplusplus) -/* This function is not part of the public GLib API either. Just call - * g_get_system_data_dirs() in your code, never mind that that is - * actually a macro and you will in fact call this inline function. - */ -static inline const gchar * const * -_g_win32_get_system_data_dirs (void) -{ - return g_win32_get_system_data_dirs_for_module ((void (*)(void)) &_g_win32_get_system_data_dirs); -} -#define g_get_system_data_dirs _g_win32_get_system_data_dirs -#endif - -const gchar * const * g_get_system_config_dirs (void); - -const gchar * g_get_user_runtime_dir (void); - -/** - * GUserDirectory: - * @G_USER_DIRECTORY_DESKTOP: the user's Desktop directory - * @G_USER_DIRECTORY_DOCUMENTS: the user's Documents directory - * @G_USER_DIRECTORY_DOWNLOAD: the user's Downloads directory - * @G_USER_DIRECTORY_MUSIC: the user's Music directory - * @G_USER_DIRECTORY_PICTURES: the user's Pictures directory - * @G_USER_DIRECTORY_PUBLIC_SHARE: the user's shared directory - * @G_USER_DIRECTORY_TEMPLATES: the user's Templates directory - * @G_USER_DIRECTORY_VIDEOS: the user's Movies directory - * @G_USER_N_DIRECTORIES: the number of enum values - * - * These are logical ids for special directories which are defined - * depending on the platform used. You should use g_get_user_special_dir() - * to retrieve the full path associated to the logical id. - * - * The #GUserDirectory enumeration can be extended at later date. Not - * every platform has a directory for every logical id in this - * enumeration. - * - * Since: 2.14 - */ -typedef enum { - G_USER_DIRECTORY_DESKTOP, - G_USER_DIRECTORY_DOCUMENTS, - G_USER_DIRECTORY_DOWNLOAD, - G_USER_DIRECTORY_MUSIC, - G_USER_DIRECTORY_PICTURES, - G_USER_DIRECTORY_PUBLIC_SHARE, - G_USER_DIRECTORY_TEMPLATES, - G_USER_DIRECTORY_VIDEOS, - - G_USER_N_DIRECTORIES -} GUserDirectory; - -const gchar * g_get_user_special_dir (GUserDirectory directory); - -/** - * GDebugKey: - * @key: the string - * @value: the flag - * - * Associates a string with a bit flag. - * Used in g_parse_debug_string(). - */ -typedef struct _GDebugKey GDebugKey; -struct _GDebugKey -{ - const gchar *key; - guint value; -}; - -/* Miscellaneous utility functions - */ -guint g_parse_debug_string (const gchar *string, - const GDebugKey *keys, - guint nkeys); - -gint g_snprintf (gchar *string, - gulong n, - gchar const *format, - ...) G_GNUC_PRINTF (3, 4); -gint g_vsnprintf (gchar *string, - gulong n, - gchar const *format, - va_list args); - -void g_nullify_pointer (gpointer *nullify_location); - -typedef enum -{ - G_FORMAT_SIZE_DEFAULT = 0, - G_FORMAT_SIZE_LONG_FORMAT = 1 << 0, - G_FORMAT_SIZE_IEC_UNITS = 1 << 1 -} GFormatSizeFlags; - -GLIB_AVAILABLE_IN_2_30 -gchar *g_format_size_full (guint64 size, - GFormatSizeFlags flags); -GLIB_AVAILABLE_IN_2_30 -gchar *g_format_size (guint64 size); - -GLIB_DEPRECATED_FOR(g_format_size) -gchar *g_format_size_for_display (goffset size); - -#ifndef G_DISABLE_DEPRECATED -/** - * GVoidFunc: - * - * Declares a type of function which takes no arguments - * and has no return value. It is used to specify the type - * function passed to g_atexit(). - */ -typedef void (*GVoidFunc) (void); -#ifndef ATEXIT -# define ATEXIT(proc) g_ATEXIT(proc) -#else -# define G_NATIVE_ATEXIT -#endif /* ATEXIT */ -/* we use a GLib function as a replacement for ATEXIT, so - * the programmer is not required to check the return value - * (if there is any in the implementation) and doesn't encounter - * missing include files. - */ -GLIB_DEPRECATED -void g_atexit (GVoidFunc func); - -#ifdef G_OS_WIN32 -/* It's a bad idea to wrap atexit() on Windows. If the GLib DLL calls - * atexit(), the function will be called when the GLib DLL is detached - * from the program, which is not what the caller wants. The caller - * wants the function to be called when it *itself* exits (or is - * detached, in case the caller, too, is a DLL). - */ -#if (defined(__MINGW_H) && !defined(_STDLIB_H_)) || (defined(_MSC_VER) && !defined(_INC_STDLIB)) -int atexit (void (*)(void)); -#endif -#define g_atexit(func) atexit(func) -#endif - -#endif /* G_DISABLE_DEPRECATED */ - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_find_program_in_path g_find_program_in_path_utf8 -#endif -#endif - -/* Look for an executable in PATH, following execvp() rules */ -gchar* g_find_program_in_path (const gchar *program); - -/* Bit tests - */ -G_INLINE_FUNC gint g_bit_nth_lsf (gulong mask, - gint nth_bit) G_GNUC_CONST; -G_INLINE_FUNC gint g_bit_nth_msf (gulong mask, - gint nth_bit) G_GNUC_CONST; -G_INLINE_FUNC guint g_bit_storage (gulong number) G_GNUC_CONST; - -/* inline function implementations - */ -#if defined (G_CAN_INLINE) || defined (__G_UTILS_C__) -G_INLINE_FUNC gint -g_bit_nth_lsf (gulong mask, - gint nth_bit) -{ - if (G_UNLIKELY (nth_bit < -1)) - nth_bit = -1; - while (nth_bit < ((GLIB_SIZEOF_LONG * 8) - 1)) - { - nth_bit++; - if (mask & (1UL << nth_bit)) - return nth_bit; - } - return -1; -} -G_INLINE_FUNC gint -g_bit_nth_msf (gulong mask, - gint nth_bit) -{ - if (nth_bit < 0 || G_UNLIKELY (nth_bit > GLIB_SIZEOF_LONG * 8)) - nth_bit = GLIB_SIZEOF_LONG * 8; - while (nth_bit > 0) - { - nth_bit--; - if (mask & (1UL << nth_bit)) - return nth_bit; - } - return -1; -} -G_INLINE_FUNC guint -g_bit_storage (gulong number) -{ -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__) - return G_LIKELY (number) ? - ((GLIB_SIZEOF_LONG * 8U - 1) ^ (guint) __builtin_clzl(number)) + 1 : 1; -#else - register guint n_bits = 0; - - do - { - n_bits++; - number >>= 1; - } - while (number); - return n_bits; -#endif -} -#endif /* G_CAN_INLINE || __G_UTILS_C__ */ - -G_END_DECLS - -#ifndef G_DISABLE_DEPRECATED - -/* - * This macro is deprecated. This DllMain() is too complex. It is - * recommended to write an explicit minimal DLlMain() that just saves - * the handle to the DLL and then use that handle instead, for - * instance passing it to - * g_win32_get_package_installation_directory_of_module(). - * - * On Windows, this macro defines a DllMain function that stores the - * actual DLL name that the code being compiled will be included in. - * STATIC should be empty or 'static'. DLL_NAME is the name of the - * (pointer to the) char array where the DLL name will be stored. If - * this is used, you must also include . If you need a more complex - * DLL entry point function, you cannot use this. - * - * On non-Windows platforms, expands to nothing. - */ - -#ifndef G_PLATFORM_WIN32 -# define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name) -#else -# define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name) \ -static char *dll_name; \ - \ -BOOL WINAPI \ -DllMain (HINSTANCE hinstDLL, \ - DWORD fdwReason, \ - LPVOID lpvReserved) \ -{ \ - wchar_t wcbfr[1000]; \ - char *tem; \ - switch (fdwReason) \ - { \ - case DLL_PROCESS_ATTACH: \ - GetModuleFileNameW ((HMODULE) hinstDLL, wcbfr, G_N_ELEMENTS (wcbfr)); \ - tem = g_utf16_to_utf8 (wcbfr, -1, NULL, NULL, NULL); \ - dll_name = g_path_get_basename (tem); \ - g_free (tem); \ - break; \ - } \ - \ - return TRUE; \ -} - -#endif /* !G_DISABLE_DEPRECATED */ - -#endif /* G_PLATFORM_WIN32 */ - -#endif /* __G_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gvariant.h b/GstreamerHelper/x64/include/glib-2.0/glib/gvariant.h deleted file mode 100644 index 3c92d21a..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gvariant.h +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright © 2007, 2008 Ryan Lortie - * Copyright © 2009, 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VARIANT_H__ -#define __G_VARIANT_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GVariant GVariant; - -typedef enum -{ - G_VARIANT_CLASS_BOOLEAN = 'b', - G_VARIANT_CLASS_BYTE = 'y', - G_VARIANT_CLASS_INT16 = 'n', - G_VARIANT_CLASS_UINT16 = 'q', - G_VARIANT_CLASS_INT32 = 'i', - G_VARIANT_CLASS_UINT32 = 'u', - G_VARIANT_CLASS_INT64 = 'x', - G_VARIANT_CLASS_UINT64 = 't', - G_VARIANT_CLASS_HANDLE = 'h', - G_VARIANT_CLASS_DOUBLE = 'd', - G_VARIANT_CLASS_STRING = 's', - G_VARIANT_CLASS_OBJECT_PATH = 'o', - G_VARIANT_CLASS_SIGNATURE = 'g', - G_VARIANT_CLASS_VARIANT = 'v', - G_VARIANT_CLASS_MAYBE = 'm', - G_VARIANT_CLASS_ARRAY = 'a', - G_VARIANT_CLASS_TUPLE = '(', - G_VARIANT_CLASS_DICT_ENTRY = '{' -} GVariantClass; - -void g_variant_unref (GVariant *value); -GVariant * g_variant_ref (GVariant *value); -GVariant * g_variant_ref_sink (GVariant *value); -gboolean g_variant_is_floating (GVariant *value); -GVariant * g_variant_take_ref (GVariant *value); - -const GVariantType * g_variant_get_type (GVariant *value); -const gchar * g_variant_get_type_string (GVariant *value); -gboolean g_variant_is_of_type (GVariant *value, - const GVariantType *type); -gboolean g_variant_is_container (GVariant *value); -GVariantClass g_variant_classify (GVariant *value); -GVariant * g_variant_new_boolean (gboolean value); -GVariant * g_variant_new_byte (guchar value); -GVariant * g_variant_new_int16 (gint16 value); -GVariant * g_variant_new_uint16 (guint16 value); -GVariant * g_variant_new_int32 (gint32 value); -GVariant * g_variant_new_uint32 (guint32 value); -GVariant * g_variant_new_int64 (gint64 value); -GVariant * g_variant_new_uint64 (guint64 value); -GVariant * g_variant_new_handle (gint32 value); -GVariant * g_variant_new_double (gdouble value); -GVariant * g_variant_new_string (const gchar *string); -GVariant * g_variant_new_object_path (const gchar *object_path); -gboolean g_variant_is_object_path (const gchar *string); -GVariant * g_variant_new_signature (const gchar *signature); -gboolean g_variant_is_signature (const gchar *string); -GVariant * g_variant_new_variant (GVariant *value); -GVariant * g_variant_new_strv (const gchar * const *strv, - gssize length); -GLIB_AVAILABLE_IN_2_30 -GVariant * g_variant_new_objv (const gchar * const *strv, - gssize length); -GVariant * g_variant_new_bytestring (const gchar *string); -GVariant * g_variant_new_bytestring_array (const gchar * const *strv, - gssize length); -GVariant * g_variant_new_fixed_array (const GVariantType *element_type, - gconstpointer elements, - gsize n_elements, - gsize element_size); -gboolean g_variant_get_boolean (GVariant *value); -guchar g_variant_get_byte (GVariant *value); -gint16 g_variant_get_int16 (GVariant *value); -guint16 g_variant_get_uint16 (GVariant *value); -gint32 g_variant_get_int32 (GVariant *value); -guint32 g_variant_get_uint32 (GVariant *value); -gint64 g_variant_get_int64 (GVariant *value); -guint64 g_variant_get_uint64 (GVariant *value); -gint32 g_variant_get_handle (GVariant *value); -gdouble g_variant_get_double (GVariant *value); -GVariant * g_variant_get_variant (GVariant *value); -const gchar * g_variant_get_string (GVariant *value, - gsize *length); -gchar * g_variant_dup_string (GVariant *value, - gsize *length); -const gchar ** g_variant_get_strv (GVariant *value, - gsize *length); -gchar ** g_variant_dup_strv (GVariant *value, - gsize *length); -GLIB_AVAILABLE_IN_2_30 -const gchar ** g_variant_get_objv (GVariant *value, - gsize *length); -gchar ** g_variant_dup_objv (GVariant *value, - gsize *length); -const gchar * g_variant_get_bytestring (GVariant *value); -gchar * g_variant_dup_bytestring (GVariant *value, - gsize *length); -const gchar ** g_variant_get_bytestring_array (GVariant *value, - gsize *length); -gchar ** g_variant_dup_bytestring_array (GVariant *value, - gsize *length); - -GVariant * g_variant_new_maybe (const GVariantType *child_type, - GVariant *child); -GVariant * g_variant_new_array (const GVariantType *child_type, - GVariant * const *children, - gsize n_children); -GVariant * g_variant_new_tuple (GVariant * const *children, - gsize n_children); -GVariant * g_variant_new_dict_entry (GVariant *key, - GVariant *value); - -GVariant * g_variant_get_maybe (GVariant *value); -gsize g_variant_n_children (GVariant *value); -void g_variant_get_child (GVariant *value, - gsize index_, - const gchar *format_string, - ...); -GVariant * g_variant_get_child_value (GVariant *value, - gsize index_); -gboolean g_variant_lookup (GVariant *dictionary, - const gchar *key, - const gchar *format_string, - ...); -GVariant * g_variant_lookup_value (GVariant *dictionary, - const gchar *key, - const GVariantType *expected_type); -gconstpointer g_variant_get_fixed_array (GVariant *value, - gsize *n_elements, - gsize element_size); - -gsize g_variant_get_size (GVariant *value); -gconstpointer g_variant_get_data (GVariant *value); -void g_variant_store (GVariant *value, - gpointer data); - -gchar * g_variant_print (GVariant *value, - gboolean type_annotate); -GString * g_variant_print_string (GVariant *value, - GString *string, - gboolean type_annotate); - -guint g_variant_hash (gconstpointer value); -gboolean g_variant_equal (gconstpointer one, - gconstpointer two); - -GVariant * g_variant_get_normal_form (GVariant *value); -gboolean g_variant_is_normal_form (GVariant *value); -GVariant * g_variant_byteswap (GVariant *value); -GVariant * g_variant_new_from_data (const GVariantType *type, - gconstpointer data, - gsize size, - gboolean trusted, - GDestroyNotify notify, - gpointer user_data); - -typedef struct _GVariantIter GVariantIter; -struct _GVariantIter { - /*< private >*/ - gsize x[16]; -}; - -GVariantIter * g_variant_iter_new (GVariant *value); -gsize g_variant_iter_init (GVariantIter *iter, - GVariant *value); -GVariantIter * g_variant_iter_copy (GVariantIter *iter); -gsize g_variant_iter_n_children (GVariantIter *iter); -void g_variant_iter_free (GVariantIter *iter); -GVariant * g_variant_iter_next_value (GVariantIter *iter); -gboolean g_variant_iter_next (GVariantIter *iter, - const gchar *format_string, - ...); -gboolean g_variant_iter_loop (GVariantIter *iter, - const gchar *format_string, - ...); - - -typedef struct _GVariantBuilder GVariantBuilder; -struct _GVariantBuilder { - /*< private >*/ - gsize x[16]; -}; - -typedef enum -{ - G_VARIANT_PARSE_ERROR_FAILED, - G_VARIANT_PARSE_ERROR_BASIC_TYPE_EXPECTED, - G_VARIANT_PARSE_ERROR_CANNOT_INFER_TYPE, - G_VARIANT_PARSE_ERROR_DEFINITE_TYPE_EXPECTED, - G_VARIANT_PARSE_ERROR_INPUT_NOT_AT_END, - G_VARIANT_PARSE_ERROR_INVALID_CHARACTER, - G_VARIANT_PARSE_ERROR_INVALID_FORMAT_STRING, - G_VARIANT_PARSE_ERROR_INVALID_OBJECT_PATH, - G_VARIANT_PARSE_ERROR_INVALID_SIGNATURE, - G_VARIANT_PARSE_ERROR_INVALID_TYPE_STRING, - G_VARIANT_PARSE_ERROR_NO_COMMON_TYPE, - G_VARIANT_PARSE_ERROR_NUMBER_OUT_OF_RANGE, - G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG, - G_VARIANT_PARSE_ERROR_TYPE_ERROR, - G_VARIANT_PARSE_ERROR_UNEXPECTED_TOKEN, - G_VARIANT_PARSE_ERROR_UNKNOWN_KEYWORD, - G_VARIANT_PARSE_ERROR_UNTERMINATED_STRING_CONSTANT, - G_VARIANT_PARSE_ERROR_VALUE_EXPECTED -} GVariantParseError; -#define G_VARIANT_PARSE_ERROR (g_variant_parser_get_error_quark ()) - -GQuark g_variant_parser_get_error_quark (void); - -GVariantBuilder * g_variant_builder_new (const GVariantType *type); -void g_variant_builder_unref (GVariantBuilder *builder); -GVariantBuilder * g_variant_builder_ref (GVariantBuilder *builder); -void g_variant_builder_init (GVariantBuilder *builder, - const GVariantType *type); -GVariant * g_variant_builder_end (GVariantBuilder *builder); -void g_variant_builder_clear (GVariantBuilder *builder); -void g_variant_builder_open (GVariantBuilder *builder, - const GVariantType *type); -void g_variant_builder_close (GVariantBuilder *builder); -void g_variant_builder_add_value (GVariantBuilder *builder, - GVariant *value); -void g_variant_builder_add (GVariantBuilder *builder, - const gchar *format_string, - ...); -void g_variant_builder_add_parsed (GVariantBuilder *builder, - const gchar *format, - ...); - -GVariant * g_variant_new (const gchar *format_string, - ...); -void g_variant_get (GVariant *value, - const gchar *format_string, - ...); -GVariant * g_variant_new_va (const gchar *format_string, - const gchar **endptr, - va_list *app); -void g_variant_get_va (GVariant *value, - const gchar *format_string, - const gchar **endptr, - va_list *app); -gboolean g_variant_check_format_string (GVariant *value, - const gchar *format_string, - gboolean copy_only); - -GVariant * g_variant_parse (const GVariantType *type, - const gchar *text, - const gchar *limit, - const gchar **endptr, - GError **error); -GVariant * g_variant_new_parsed (const gchar *format, - ...); -GVariant * g_variant_new_parsed_va (const gchar *format, - va_list *app); - -gint g_variant_compare (gconstpointer one, - gconstpointer two); -G_END_DECLS - -#endif /* __G_VARIANT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gvarianttype.h b/GstreamerHelper/x64/include/glib-2.0/glib/gvarianttype.h deleted file mode 100644 index fe1ba844..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gvarianttype.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright © 2007, 2008 Ryan Lortie - * Copyright © 2009, 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VARIANT_TYPE_H__ -#define __G_VARIANT_TYPE_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GVariantType: - * - * A type in the GVariant type system. - * - * Two types may not be compared by value; use g_variant_type_equal() or - * g_variant_type_is_subtype_of(). May be copied using - * g_variant_type_copy() and freed using g_variant_type_free(). - **/ -typedef struct _GVariantType GVariantType; - -/** - * G_VARIANT_TYPE_BOOLEAN: - * - * The type of a value that can be either %TRUE or %FALSE. - **/ -#define G_VARIANT_TYPE_BOOLEAN ((const GVariantType *) "b") - -/** - * G_VARIANT_TYPE_BYTE: - * - * The type of an integer value that can range from 0 to 255. - **/ -#define G_VARIANT_TYPE_BYTE ((const GVariantType *) "y") - -/** - * G_VARIANT_TYPE_INT16: - * - * The type of an integer value that can range from -32768 to 32767. - **/ -#define G_VARIANT_TYPE_INT16 ((const GVariantType *) "n") - -/** - * G_VARIANT_TYPE_UINT16: - * - * The type of an integer value that can range from 0 to 65535. - * There were about this many people living in Toronto in the 1870s. - **/ -#define G_VARIANT_TYPE_UINT16 ((const GVariantType *) "q") - -/** - * G_VARIANT_TYPE_INT32: - * - * The type of an integer value that can range from -2147483648 to - * 2147483647. - **/ -#define G_VARIANT_TYPE_INT32 ((const GVariantType *) "i") - -/** - * G_VARIANT_TYPE_UINT32: - * - * The type of an integer value that can range from 0 to 4294967295. - * That's one number for everyone who was around in the late 1970s. - **/ -#define G_VARIANT_TYPE_UINT32 ((const GVariantType *) "u") - -/** - * G_VARIANT_TYPE_INT64: - * - * The type of an integer value that can range from - * -9223372036854775808 to 9223372036854775807. - **/ -#define G_VARIANT_TYPE_INT64 ((const GVariantType *) "x") - -/** - * G_VARIANT_TYPE_UINT64: - * - * The type of an integer value that can range from 0 to - * 18446744073709551616. That's a really big number, but a Rubik's - * cube can have a bit more than twice as many possible positions. - **/ -#define G_VARIANT_TYPE_UINT64 ((const GVariantType *) "t") - -/** - * G_VARIANT_TYPE_DOUBLE: - * - * The type of a double precision IEEE754 floating point number. - * These guys go up to about 1.80e308 (plus and minus) but miss out on - * some numbers in between. In any case, that's far greater than the - * estimated number of fundamental particles in the observable - * universe. - **/ -#define G_VARIANT_TYPE_DOUBLE ((const GVariantType *) "d") - -/** - * G_VARIANT_TYPE_STRING: - * - * The type of a string. "" is a string. %NULL is not a string. - **/ -#define G_VARIANT_TYPE_STRING ((const GVariantType *) "s") - -/** - * G_VARIANT_TYPE_OBJECT_PATH: - * - * The type of a D-Bus object reference. These are strings of a - * specific format used to identify objects at a given destination on - * the bus. - * - * If you are not interacting with D-Bus, then there is no reason to make - * use of this type. If you are, then the D-Bus specification contains a - * precise description of valid object paths. - **/ -#define G_VARIANT_TYPE_OBJECT_PATH ((const GVariantType *) "o") - -/** - * G_VARIANT_TYPE_SIGNATURE: - * - * The type of a D-Bus type signature. These are strings of a specific - * format used as type signatures for D-Bus methods and messages. - * - * If you are not interacting with D-Bus, then there is no reason to make - * use of this type. If you are, then the D-Bus specification contains a - * precise description of valid signature strings. - **/ -#define G_VARIANT_TYPE_SIGNATURE ((const GVariantType *) "g") - -/** - * G_VARIANT_TYPE_VARIANT: - * - * The type of a box that contains any other value (including another - * variant). - **/ -#define G_VARIANT_TYPE_VARIANT ((const GVariantType *) "v") - -/** - * G_VARIANT_TYPE_HANDLE: - * - * The type of a 32bit signed integer value, that by convention, is used - * as an index into an array of file descriptors that are sent alongside - * a D-Bus message. - * - * If you are not interacting with D-Bus, then there is no reason to make - * use of this type. - **/ -#define G_VARIANT_TYPE_HANDLE ((const GVariantType *) "h") - -/** - * G_VARIANT_TYPE_UNIT: - * - * The empty tuple type. Has only one instance. Known also as "triv" - * or "void". - **/ -#define G_VARIANT_TYPE_UNIT ((const GVariantType *) "()") - -/** - * G_VARIANT_TYPE_ANY: - * - * An indefinite type that is a supertype of every type (including - * itself). - **/ -#define G_VARIANT_TYPE_ANY ((const GVariantType *) "*") - -/** - * G_VARIANT_TYPE_BASIC: - * - * An indefinite type that is a supertype of every basic (ie: - * non-container) type. - **/ -#define G_VARIANT_TYPE_BASIC ((const GVariantType *) "?") - -/** - * G_VARIANT_TYPE_MAYBE: - * - * An indefinite type that is a supertype of every maybe type. - **/ -#define G_VARIANT_TYPE_MAYBE ((const GVariantType *) "m*") - -/** - * G_VARIANT_TYPE_ARRAY: - * - * An indefinite type that is a supertype of every array type. - **/ -#define G_VARIANT_TYPE_ARRAY ((const GVariantType *) "a*") - -/** - * G_VARIANT_TYPE_TUPLE: - * - * An indefinite type that is a supertype of every tuple type, - * regardless of the number of items in the tuple. - **/ -#define G_VARIANT_TYPE_TUPLE ((const GVariantType *) "r") - -/** - * G_VARIANT_TYPE_DICT_ENTRY: - * - * An indefinite type that is a supertype of every dictionary entry - * type. - **/ -#define G_VARIANT_TYPE_DICT_ENTRY ((const GVariantType *) "{?*}") - -/** - * G_VARIANT_TYPE_DICTIONARY: - * - * An indefinite type that is a supertype of every dictionary type -- - * that is, any array type that has an element type equal to any - * dictionary entry type. - **/ -#define G_VARIANT_TYPE_DICTIONARY ((const GVariantType *) "a{?*}") - -/** - * G_VARIANT_TYPE_STRING_ARRAY: - * - * The type of an array of strings. - **/ -#define G_VARIANT_TYPE_STRING_ARRAY ((const GVariantType *) "as") - -/** - * G_VARIANT_TYPE_OBJECT_PATH_ARRAY: - * - * The type of an array of object paths. - **/ -#define G_VARIANT_TYPE_OBJECT_PATH_ARRAY ((const GVariantType *) "ao") - -/** - * G_VARIANT_TYPE_BYTESTRING: - * - * The type of an array of bytes. This type is commonly used to pass - * around strings that may not be valid utf8. In that case, the - * convention is that the nul terminator character should be included as - * the last character in the array. - **/ -#define G_VARIANT_TYPE_BYTESTRING ((const GVariantType *) "ay") - -/** - * G_VARIANT_TYPE_BYTESTRING_ARRAY: - * - * The type of an array of byte strings (an array of arrays of bytes). - **/ -#define G_VARIANT_TYPE_BYTESTRING_ARRAY ((const GVariantType *) "aay") - -/** - * G_VARIANT_TYPE_VARDICT: - * - * The type of a dictionary mapping strings to variants (the ubiquitous - * "a{sv}" type). - * - * Since: 2.30 - **/ -#define G_VARIANT_TYPE_VARDICT ((const GVariantType *) "a{sv}") - - -/** - * G_VARIANT_TYPE: - * @type_string: a well-formed #GVariantType type string - * - * Converts a string to a const #GVariantType. Depending on the - * current debugging level, this function may perform a runtime check - * to ensure that @string is a valid GVariant type string. - * - * It is always a programmer error to use this macro with an invalid - * type string. If in doubt, use g_variant_type_string_is_valid() to - * check if the string is valid. - * - * Since 2.24 - **/ -#ifndef G_DISABLE_CHECKS -# define G_VARIANT_TYPE(type_string) (g_variant_type_checked_ ((type_string))) -#else -# define G_VARIANT_TYPE(type_string) ((const GVariantType *) (type_string)) -#endif - -/* type string checking */ -gboolean g_variant_type_string_is_valid (const gchar *type_string); -gboolean g_variant_type_string_scan (const gchar *string, - const gchar *limit, - const gchar **endptr); - -/* create/destroy */ -void g_variant_type_free (GVariantType *type); -GVariantType * g_variant_type_copy (const GVariantType *type); -GVariantType * g_variant_type_new (const gchar *type_string); - -/* getters */ -gsize g_variant_type_get_string_length (const GVariantType *type); -const gchar * g_variant_type_peek_string (const GVariantType *type); -gchar * g_variant_type_dup_string (const GVariantType *type); - -/* classification */ -gboolean g_variant_type_is_definite (const GVariantType *type); -gboolean g_variant_type_is_container (const GVariantType *type); -gboolean g_variant_type_is_basic (const GVariantType *type); -gboolean g_variant_type_is_maybe (const GVariantType *type); -gboolean g_variant_type_is_array (const GVariantType *type); -gboolean g_variant_type_is_tuple (const GVariantType *type); -gboolean g_variant_type_is_dict_entry (const GVariantType *type); -gboolean g_variant_type_is_variant (const GVariantType *type); - -/* for hash tables */ -guint g_variant_type_hash (gconstpointer type); -gboolean g_variant_type_equal (gconstpointer type1, - gconstpointer type2); - -/* subtypes */ -gboolean g_variant_type_is_subtype_of (const GVariantType *type, - const GVariantType *supertype); - -/* type iterator interface */ -const GVariantType * g_variant_type_element (const GVariantType *type); -const GVariantType * g_variant_type_first (const GVariantType *type); -const GVariantType * g_variant_type_next (const GVariantType *type); -gsize g_variant_type_n_items (const GVariantType *type); -const GVariantType * g_variant_type_key (const GVariantType *type); -const GVariantType * g_variant_type_value (const GVariantType *type); - -/* constructors */ -GVariantType * g_variant_type_new_array (const GVariantType *element); -GVariantType * g_variant_type_new_maybe (const GVariantType *element); -GVariantType * g_variant_type_new_tuple (const GVariantType * const *items, - gint length); -GVariantType * g_variant_type_new_dict_entry (const GVariantType *key, - const GVariantType *value); - -/*< private >*/ -const GVariantType * g_variant_type_checked_ (const gchar *); - -G_END_DECLS - -#endif /* __G_VARIANT_TYPE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gversion.h b/GstreamerHelper/x64/include/glib-2.0/glib/gversion.h deleted file mode 100644 index d0581c24..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gversion.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VERSION_H__ -#define __G_VERSION_H__ - -#include - -G_BEGIN_DECLS - -GLIB_VAR const guint glib_major_version; -GLIB_VAR const guint glib_minor_version; -GLIB_VAR const guint glib_micro_version; -GLIB_VAR const guint glib_interface_age; -GLIB_VAR const guint glib_binary_age; - -const gchar * glib_check_version (guint required_major, - guint required_minor, - guint required_micro); - -#define GLIB_CHECK_VERSION(major,minor,micro) \ - (GLIB_MAJOR_VERSION > (major) || \ - (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION > (minor)) || \ - (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION == (minor) && \ - GLIB_MICRO_VERSION >= (micro))) - -G_END_DECLS - -#endif /* __G_VERSION_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gversionmacros.h b/GstreamerHelper/x64/include/glib-2.0/glib/gversionmacros.h deleted file mode 100644 index ed8a5ce9..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gversionmacros.h +++ /dev/null @@ -1,250 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VERSION_MACROS_H__ -#define __G_VERSION_MACROS_H__ - -/* Version boundaries checks */ - -#define G_ENCODE_VERSION(major,minor) ((major) << 16 | (minor) << 8) - -/* XXX: Every new stable minor release bump should add a macro here */ - -/** - * GLIB_VERSION_2_26: - * - * A macro that evaluates to the 2.26 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_26 (G_ENCODE_VERSION (2, 26)) - -/** - * GLIB_VERSION_2_28: - * - * A macro that evaluates to the 2.28 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_28 (G_ENCODE_VERSION (2, 28)) - -/** - * GLIB_VERSION_2_30: - * - * A macro that evaluates to the 2.30 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_30 (G_ENCODE_VERSION (2, 30)) - -/** - * GLIB_VERSION_2_32: - * - * A macro that evaluates to the 2.32 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_32 (G_ENCODE_VERSION (2, 32)) - -/** - * GLIB_VERSION_2_34: - * - * A macro that evaluates to the 2.34 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.34 - */ -#define GLIB_VERSION_2_34 (G_ENCODE_VERSION (2, 34)) - -/* evaluates to the current stable version; for development cycles, - * this means the next stable target - */ -#if (GLIB_MINOR_VERSION % 2) -#define GLIB_VERSION_CUR_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION + 1)) -#else -#define GLIB_VERSION_CUR_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION)) -#endif - -/* evaluates to the previous stable version */ -#if (GLIB_MINOR_VERSION % 2) -#define GLIB_VERSION_PREV_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 1)) -#else -#define GLIB_VERSION_PREV_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 2)) -#endif - -/** - * GLIB_VERSION_MIN_REQUIRED: - * - * A macro that should be defined by the user prior to including - * the glib.h header. - * The definition should be one of the predefined GLib version - * macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,... - * - * This macro defines the earliest version of GLib that the package is - * required to be able to compile against. - * - * If the compiler is configured to warn about the use of deprecated - * functions, then using functions that were deprecated in version - * %GLIB_VERSION_MIN_REQUIRED or earlier will cause warnings (but - * using functions deprecated in later releases will not). - * - * Since: 2.32 - */ -/* If the package sets GLIB_VERSION_MIN_REQUIRED to some future - * GLIB_VERSION_X_Y value that we don't know about, it will compare as - * 0 in preprocessor tests. - */ -#ifndef GLIB_VERSION_MIN_REQUIRED -# define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_CUR_STABLE) -#elif GLIB_VERSION_MIN_REQUIRED == 0 -# undef GLIB_VERSION_MIN_REQUIRED -# define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_CUR_STABLE + 2) -#endif - -/** - * GLIB_VERSION_MAX_ALLOWED: - * - * A macro that should be defined by the user prior to including - * the glib.h header. - * The definition should be one of the predefined GLib version - * macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,... - * - * This macro defines the latest version of the GLib API that the - * package is allowed to make use of. - * - * If the compiler is configured to warn about the use of deprecated - * functions, then using functions added after version - * %GLIB_VERSION_MAX_ALLOWED will cause warnings. - * - * Unless you are using GLIB_CHECK_VERSION() or the like to compile - * different code depending on the GLib version, then this should be - * set to the same value as %GLIB_VERSION_MIN_REQUIRED. - * - * Since: 2.32 - */ -#if !defined (GLIB_VERSION_MAX_ALLOWED) || (GLIB_VERSION_MAX_ALLOWED == 0) -# undef GLIB_VERSION_MAX_ALLOWED -# define GLIB_VERSION_MAX_ALLOWED (GLIB_VERSION_CUR_STABLE) -#endif - -/* sanity checks */ -#if GLIB_VERSION_MIN_REQUIRED > GLIB_VERSION_CUR_STABLE -#error "GLIB_VERSION_MIN_REQUIRED must be <= GLIB_VERSION_CUR_STABLE" -#endif -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_MIN_REQUIRED -#error "GLIB_VERSION_MAX_ALLOWED must be >= GLIB_VERSION_MIN_REQUIRED" -#endif -#if GLIB_VERSION_MIN_REQUIRED < GLIB_VERSION_2_26 -#error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION_2_26" -#endif - -/* These macros are used to mark deprecated functions in GLib headers, - * and thus have to be exposed in installed headers. But please - * do *not* use them in other projects. Instead, use G_DEPRECATED - * or define your own wrappers around it. - */ - -/* XXX: Every new stable minor release should add a set of macros here */ - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_26 -# define GLIB_DEPRECATED_IN_2_26 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_26_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_26 -# define GLIB_DEPRECATED_IN_2_26_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_26 -# define GLIB_AVAILABLE_IN_2_26 GLIB_UNAVAILABLE(2, 26) -#else -# define GLIB_AVAILABLE_IN_2_26 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_28 -# define GLIB_DEPRECATED_IN_2_28 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_28_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_28 -# define GLIB_DEPRECATED_IN_2_28_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_28 -# define GLIB_AVAILABLE_IN_2_28 GLIB_UNAVAILABLE(2, 28) -#else -# define GLIB_AVAILABLE_IN_2_28 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_30 -# define GLIB_DEPRECATED_IN_2_30 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_30_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_30 -# define GLIB_DEPRECATED_IN_2_30_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_30 -# define GLIB_AVAILABLE_IN_2_30 GLIB_UNAVAILABLE(2, 30) -#else -# define GLIB_AVAILABLE_IN_2_30 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_32 -# define GLIB_DEPRECATED_IN_2_32 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_32_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_32 -# define GLIB_DEPRECATED_IN_2_32_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_32 -# define GLIB_AVAILABLE_IN_2_32 GLIB_UNAVAILABLE(2, 32) -#else -# define GLIB_AVAILABLE_IN_2_32 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_34 -# define GLIB_DEPRECATED_IN_2_34 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_34_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_34 -# define GLIB_DEPRECATED_IN_2_34_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_34 -# define GLIB_AVAILABLE_IN_2_34 GLIB_UNAVAILABLE(2, 34) -#else -# define GLIB_AVAILABLE_IN_2_34 -#endif - -#endif /* __G_VERSION_MACROS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/glib/gwin32.h b/GstreamerHelper/x64/include/glib-2.0/glib/gwin32.h deleted file mode 100644 index b0fb7c04..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/glib/gwin32.h +++ /dev/null @@ -1,118 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_WIN32_H__ -#define __G_WIN32_H__ - -#include - -#ifdef G_PLATFORM_WIN32 - -G_BEGIN_DECLS - -#ifndef MAXPATHLEN -#define MAXPATHLEN 1024 -#endif - -#ifdef G_OS_WIN32 - -/* - * To get prototypes for the following POSIXish functions, you have to - * include the indicated non-POSIX headers. The functions are defined - * in OLDNAMES.LIB (MSVC) or -lmoldname-msvc (mingw32). But note that - * for POSIX functions that take or return file names in the system - * codepage, in many cases you would want to use the GLib wrappers in - * gstdio.h and UTF-8 instead. - * - * getcwd: (MSVC), (mingw32) - * getpid: - * access: - * unlink: or - * open, read, write, lseek, close: - * rmdir: - * pipe: (actually, _pipe()) - */ - -/* For some POSIX functions that are not provided by the MS runtime, - * we provide emulation functions in glib, which are prefixed with - * g_win32_. Or that was the idea at some time, but there is just one - * of those: - */ -gint g_win32_ftruncate (gint f, - guint size); -#endif /* G_OS_WIN32 */ - -/* The MS setlocale uses locale names of the form "English_United - * States.1252" etc. We want the Unixish standard form "en", "zh_TW" - * etc. This function gets the current thread locale from Windows and - * returns it as a string of the above form for use in forming file - * names etc. The returned string should be deallocated with g_free(). - */ -gchar* g_win32_getlocale (void); - -/* Translate a Win32 error code (as returned by GetLastError()) into - * the corresponding message. The returned string should be deallocated - * with g_free(). - */ -gchar* g_win32_error_message (gint error); - -#ifndef G_DISABLE_DEPRECATED - -#ifndef __GTK_DOC_IGNORE__ -#ifdef _WIN64 -#define g_win32_get_package_installation_directory g_win32_get_package_installation_directory_utf8 -#define g_win32_get_package_installation_subdirectory g_win32_get_package_installation_subdirectory_utf8 -#endif -#endif - -gchar* g_win32_get_package_installation_directory (const gchar *package, - const gchar *dll_name); - -gchar* g_win32_get_package_installation_subdirectory (const gchar *package, - const gchar *dll_name, - const gchar *subdir); - -#endif - -gchar* g_win32_get_package_installation_directory_of_module (gpointer hmodule); - -guint g_win32_get_windows_version (void); - -gchar* g_win32_locale_filename_from_utf8 (const gchar *utf8filename); - -/* As of GLib 2.14 we only support NT-based Windows */ -#define G_WIN32_IS_NT_BASED() TRUE -#define G_WIN32_HAVE_WIDECHAR_API() TRUE - -G_END_DECLS - -#endif /* G_PLATFORM_WIN32 */ - -#endif /* __G_WIN32_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gmodule.h b/GstreamerHelper/x64/include/glib-2.0/gmodule.h deleted file mode 100644 index 837e5359..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gmodule.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GMODULE - GLIB wrapper code for dynamic module loading - * Copyright (C) 1998 Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GMODULE_H__ -#define __GMODULE_H__ - -#include - -G_BEGIN_DECLS - -/* exporting and importing functions, this is special cased - * to feature Windows dll stubs. - */ -#define G_MODULE_IMPORT extern -#ifdef G_PLATFORM_WIN32 -# define G_MODULE_EXPORT __declspec(dllexport) -#else /* !G_PLATFORM_WIN32 */ -# define G_MODULE_EXPORT -#endif /* !G_PLATFORM_WIN32 */ - -typedef enum -{ - G_MODULE_BIND_LAZY = 1 << 0, - G_MODULE_BIND_LOCAL = 1 << 1, - G_MODULE_BIND_MASK = 0x03 -} GModuleFlags; - -typedef struct _GModule GModule; -typedef const gchar* (*GModuleCheckInit) (GModule *module); -typedef void (*GModuleUnload) (GModule *module); - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_module_open g_module_open_utf8 -#define g_module_name g_module_name_utf8 -#endif -#endif - -/* return TRUE if dynamic module loading is supported */ -gboolean g_module_supported (void) G_GNUC_CONST; - -/* open a module `file_name' and return handle, which is NULL on error */ -GModule* g_module_open (const gchar *file_name, - GModuleFlags flags); - -/* close a previously opened module, returns TRUE on success */ -gboolean g_module_close (GModule *module); - -/* make a module resident so g_module_close on it will be ignored */ -void g_module_make_resident (GModule *module); - -/* query the last module error as a string */ -const gchar * g_module_error (void); - -/* retrieve a symbol pointer from `module', returns TRUE on success */ -gboolean g_module_symbol (GModule *module, - const gchar *symbol_name, - gpointer *symbol); - -/* retrieve the file name from an existing module */ -const gchar * g_module_name (GModule *module); - -/* Build the actual file name containing a module. `directory' is the - * directory where the module file is supposed to be, or NULL or empty - * in which case it should either be in the current directory or, on - * some operating systems, in some standard place, for instance on the - * PATH. Hence, to be absoultely sure to get the correct module, - * always pass in a directory. The file name consists of the directory, - * if supplied, and `module_name' suitably decorated according to - * the operating system's conventions (for instance lib*.so or *.dll). - * - * No checks are made that the file exists, or is of correct type. - */ -gchar* g_module_build_path (const gchar *directory, - const gchar *module_name); - - -G_END_DECLS - -#endif /* __GMODULE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gbinding.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gbinding.h deleted file mode 100644 index 1b715402..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gbinding.h +++ /dev/null @@ -1,136 +0,0 @@ -/* gbinding.h: Binding for object properties - * - * Copyright (C) 2010 Intel Corp. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Emmanuele Bassi - */ - -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BINDING_H__ -#define __G_BINDING_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_BINDING_FLAGS (g_binding_flags_get_type ()) - -#define G_TYPE_BINDING (g_binding_get_type ()) -#define G_BINDING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_BINDING, GBinding)) -#define G_IS_BINDING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_BINDING)) - -/** - * GBinding: - * - * GBinding is an opaque structure whose members - * cannot be accessed directly. - * - * Since: 2.26 - */ -typedef struct _GBinding GBinding; - -/** - * GBindingTransformFunc: - * @binding: a #GBinding - * @source_value: the value of the source property - * @target_value: the value of the target property - * @user_data: data passed to the transform function - * - * A function to be called to transform the source property of @source - * from @source_value into the target property of @target - * using @target_value. - * - * Return value: %TRUE if the transformation was successful, and %FALSE - * otherwise - * - * Since: 2.26 - */ -typedef gboolean (* GBindingTransformFunc) (GBinding *binding, - const GValue *source_value, - GValue *target_value, - gpointer user_data); - -/** - * GBindingFlags: - * @G_BINDING_DEFAULT: The default binding; if the source property - * changes, the target property is updated with its value. - * @G_BINDING_BIDIRECTIONAL: Bidirectional binding; if either the - * property of the source or the property of the target changes, - * the other is updated. - * @G_BINDING_SYNC_CREATE: Synchronize the values of the source and - * target properties when creating the binding; the direction of - * the synchronization is always from the source to the target. - * @G_BINDING_INVERT_BOOLEAN: If the two properties being bound are - * booleans, setting one to %TRUE will result in the other being - * set to %FALSE and vice versa. This flag will only work for - * boolean properties, and cannot be used when passing custom - * transformation functions to g_object_bind_property_full(). - * - * Flags to be passed to g_object_bind_property() or - * g_object_bind_property_full(). - * - * This enumeration can be extended at later date. - * - * Since: 2.26 - */ -typedef enum { /*< prefix=G_BINDING >*/ - G_BINDING_DEFAULT = 0, - - G_BINDING_BIDIRECTIONAL = 1 << 0, - G_BINDING_SYNC_CREATE = 1 << 1, - G_BINDING_INVERT_BOOLEAN = 1 << 2 -} GBindingFlags; - -GType g_binding_flags_get_type (void) G_GNUC_CONST; -GType g_binding_get_type (void) G_GNUC_CONST; - -GBindingFlags g_binding_get_flags (GBinding *binding); -GObject * g_binding_get_source (GBinding *binding); -GObject * g_binding_get_target (GBinding *binding); -const gchar * g_binding_get_source_property (GBinding *binding); -const gchar * g_binding_get_target_property (GBinding *binding); - -GBinding *g_object_bind_property (gpointer source, - const gchar *source_property, - gpointer target, - const gchar *target_property, - GBindingFlags flags); -GBinding *g_object_bind_property_full (gpointer source, - const gchar *source_property, - gpointer target, - const gchar *target_property, - GBindingFlags flags, - GBindingTransformFunc transform_to, - GBindingTransformFunc transform_from, - gpointer user_data, - GDestroyNotify notify); -GBinding *g_object_bind_property_with_closures (gpointer source, - const gchar *source_property, - gpointer target, - const gchar *target_property, - GBindingFlags flags, - GClosure *transform_to, - GClosure *transform_from); - -G_END_DECLS - -#endif /* __G_BINDING_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gboxed.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gboxed.h deleted file mode 100644 index 2b840878..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gboxed.h +++ /dev/null @@ -1,114 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BOXED_H__ -#define __G_BOXED_H__ - -#include - -#ifndef __GI_SCANNER__ -#include -#endif - -G_BEGIN_DECLS - -/* --- type macros --- */ -#define G_TYPE_IS_BOXED(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_BOXED) -/** - * G_VALUE_HOLDS_BOXED: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived - * from type %G_TYPE_BOXED. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_BOXED(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOXED)) - - -/* --- typedefs --- */ -/** - * GBoxedCopyFunc: - * @boxed: The boxed structure to be copied. - * - * This function is provided by the user and should produce a copy - * of the passed in boxed structure. - * - * Returns: The newly created copy of the boxed structure. - */ -typedef gpointer (*GBoxedCopyFunc) (gpointer boxed); - -/** - * GBoxedFreeFunc: - * @boxed: The boxed structure to be freed. - * - * This function is provided by the user and should free the boxed - * structure passed. - */ -typedef void (*GBoxedFreeFunc) (gpointer boxed); - - -/* --- prototypes --- */ -gpointer g_boxed_copy (GType boxed_type, - gconstpointer src_boxed); -void g_boxed_free (GType boxed_type, - gpointer boxed); -void g_value_set_boxed (GValue *value, - gconstpointer v_boxed); -void g_value_set_static_boxed (GValue *value, - gconstpointer v_boxed); -void g_value_take_boxed (GValue *value, - gconstpointer v_boxed); -GLIB_DEPRECATED_FOR(g_value_take_boxed) -void g_value_set_boxed_take_ownership (GValue *value, - gconstpointer v_boxed); -gpointer g_value_get_boxed (const GValue *value); -gpointer g_value_dup_boxed (const GValue *value); - - -/* --- convenience --- */ -GType g_boxed_type_register_static (const gchar *name, - GBoxedCopyFunc boxed_copy, - GBoxedFreeFunc boxed_free); - -/* --- GObject boxed types --- */ -/** - * G_TYPE_CLOSURE: - * - * The #GType for #GClosure. - */ -#define G_TYPE_CLOSURE (g_closure_get_type ()) - -/** - * G_TYPE_VALUE: - * - * The type ID of the "GValue" type which is a boxed type, - * used to pass around pointers to GValues. - */ -#define G_TYPE_VALUE (g_value_get_type ()) - -GType g_closure_get_type (void) G_GNUC_CONST; -GType g_value_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_BOXED_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gclosure.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gclosure.h deleted file mode 100644 index fffac582..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gclosure.h +++ /dev/null @@ -1,281 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * Copyright (C) 2005 Imendio AB - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CLOSURE_H__ -#define __G_CLOSURE_H__ - -#include - -G_BEGIN_DECLS - -/* --- defines --- */ -/** - * G_CLOSURE_NEEDS_MARSHAL: - * @closure: a #GClosure - * - * Check if the closure still needs a marshaller. See g_closure_set_marshal(). - * - * Returns: %TRUE if a #GClosureMarshal marshaller has not yet been set on - * @closure. - */ -#define G_CLOSURE_NEEDS_MARSHAL(closure) (((GClosure*) (closure))->marshal == NULL) -/** - * G_CLOSURE_N_NOTIFIERS: - * @cl: a #GClosure - * - * Get the total number of notifiers connected with the closure @cl. - * The count includes the meta marshaller, the finalize and invalidate notifiers - * and the marshal guards. Note that each guard counts as two notifiers. - * See g_closure_set_meta_marshal(), g_closure_add_finalize_notifier(), - * g_closure_add_invalidate_notifier() and g_closure_add_marshal_guards(). - * - * Returns: number of notifiers - */ -#define G_CLOSURE_N_NOTIFIERS(cl) (((cl)->n_guards << 1L) + \ - (cl)->n_fnotifiers + (cl)->n_inotifiers) -/** - * G_CCLOSURE_SWAP_DATA: - * @cclosure: a #GCClosure - * - * Checks whether the user data of the #GCClosure should be passed as the - * first parameter to the callback. See g_cclosure_new_swap(). - * - * Returns: %TRUE if data has to be swapped. - */ -#define G_CCLOSURE_SWAP_DATA(cclosure) (((GClosure*) (cclosure))->derivative_flag) -/** - * G_CALLBACK: - * @f: a function pointer. - * - * Cast a function pointer to a #GCallback. - */ -#define G_CALLBACK(f) ((GCallback) (f)) - - -/* -- typedefs --- */ -typedef struct _GClosure GClosure; -typedef struct _GClosureNotifyData GClosureNotifyData; - -/** - * GCallback: - * - * The type used for callback functions in structure definitions and function - * signatures. This doesn't mean that all callback functions must take no - * parameters and return void. The required signature of a callback function - * is determined by the context in which is used (e.g. the signal to which it - * is connected). Use G_CALLBACK() to cast the callback function to a #GCallback. - */ -typedef void (*GCallback) (void); -/** - * GClosureNotify: - * @data: data specified when registering the notification callback - * @closure: the #GClosure on which the notification is emitted - * - * The type used for the various notification callbacks which can be registered - * on closures. - */ -typedef void (*GClosureNotify) (gpointer data, - GClosure *closure); -/** - * GClosureMarshal: - * @closure: the #GClosure to which the marshaller belongs - * @return_value: (allow-none): a #GValue to store the return - * value. May be %NULL if the callback of @closure doesn't return a - * value. - * @n_param_values: the length of the @param_values array - * @param_values: (array length=n_param_values): an array of - * #GValues holding the arguments on which to invoke the - * callback of @closure - * @invocation_hint: (allow-none): the invocation hint given as the - * last argument to g_closure_invoke() - * @marshal_data: (allow-none): additional data specified when - * registering the marshaller, see g_closure_set_marshal() and - * g_closure_set_meta_marshal() - * - * The type used for marshaller functions. - */ -typedef void (*GClosureMarshal) (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -typedef void (* GVaClosureMarshal) (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/** - * GCClosure: - * @closure: the #GClosure - * @callback: the callback function - * - * A #GCClosure is a specialization of #GClosure for C function callbacks. - */ -typedef struct _GCClosure GCClosure; - - -/* --- structures --- */ -struct _GClosureNotifyData -{ - gpointer data; - GClosureNotify notify; -}; -/** - * GClosure: - * @in_marshal: Indicates whether the closure is currently being invoked with - * g_closure_invoke() - * @is_invalid: Indicates whether the closure has been invalidated by - * g_closure_invalidate() - * - * A #GClosure represents a callback supplied by the programmer. - */ -struct _GClosure -{ - /*< private >*/ - volatile guint ref_count : 15; - /* meta_marshal is not used anymore but must be zero for historical reasons - as it was exposed in the G_CLOSURE_N_NOTIFIERS macro */ - volatile guint meta_marshal_nouse : 1; - volatile guint n_guards : 1; - volatile guint n_fnotifiers : 2; /* finalization notifiers */ - volatile guint n_inotifiers : 8; /* invalidation notifiers */ - volatile guint in_inotify : 1; - volatile guint floating : 1; - /*< protected >*/ - volatile guint derivative_flag : 1; - /*< public >*/ - volatile guint in_marshal : 1; - volatile guint is_invalid : 1; - - /*< private >*/ void (*marshal) (GClosure *closure, - GValue /*out*/ *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - /*< protected >*/ gpointer data; - - /*< private >*/ GClosureNotifyData *notifiers; - - /* invariants/constrains: - * - ->marshal and ->data are _invalid_ as soon as ->is_invalid==TRUE - * - invocation of all inotifiers occours prior to fnotifiers - * - order of inotifiers is random - * inotifiers may _not_ free/invalidate parameter values (e.g. ->data) - * - order of fnotifiers is random - * - each notifier may only be removed before or during its invocation - * - reference counting may only happen prior to fnotify invocation - * (in that sense, fnotifiers are really finalization handlers) - */ -}; -/* closure for C function calls, callback() is the user function - */ -struct _GCClosure -{ - GClosure closure; - gpointer callback; -}; - - -/* --- prototypes --- */ -GClosure* g_cclosure_new (GCallback callback_func, - gpointer user_data, - GClosureNotify destroy_data); -GClosure* g_cclosure_new_swap (GCallback callback_func, - gpointer user_data, - GClosureNotify destroy_data); -GClosure* g_signal_type_cclosure_new (GType itype, - guint struct_offset); - - -/* --- prototypes --- */ -GClosure* g_closure_ref (GClosure *closure); -void g_closure_sink (GClosure *closure); -void g_closure_unref (GClosure *closure); -/* intimidating */ -GClosure* g_closure_new_simple (guint sizeof_closure, - gpointer data); -void g_closure_add_finalize_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_remove_finalize_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_add_invalidate_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_remove_invalidate_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_add_marshal_guards (GClosure *closure, - gpointer pre_marshal_data, - GClosureNotify pre_marshal_notify, - gpointer post_marshal_data, - GClosureNotify post_marshal_notify); -void g_closure_set_marshal (GClosure *closure, - GClosureMarshal marshal); -void g_closure_set_meta_marshal (GClosure *closure, - gpointer marshal_data, - GClosureMarshal meta_marshal); -void g_closure_invalidate (GClosure *closure); -void g_closure_invoke (GClosure *closure, - GValue /*out*/ *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint); - -/* FIXME: - OK: data_object::destroy -> closure_invalidate(); - MIS: closure_invalidate() -> disconnect(closure); - MIS: disconnect(closure) -> (unlink) closure_unref(); - OK: closure_finalize() -> g_free (data_string); - - random remarks: - - need marshaller repo with decent aliasing to base types - - provide marshaller collection, virtually covering anything out there -*/ - -void g_cclosure_marshal_generic (GClosure *closure, - GValue *return_gvalue, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -void g_cclosure_marshal_generic_va (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args_list, - gpointer marshal_data, - int n_params, - GType *param_types); - - -G_END_DECLS - -#endif /* __G_CLOSURE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/genums.h b/GstreamerHelper/x64/include/glib-2.0/gobject/genums.h deleted file mode 100644 index bf8a4191..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/genums.h +++ /dev/null @@ -1,261 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ENUMS_H__ -#define __G_ENUMS_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_IS_ENUM: - * @type: a #GType ID. - * - * Checks whether @type "is a" %G_TYPE_ENUM. - * - * Returns: %TRUE if @type "is a" %G_TYPE_ENUM. - */ -#define G_TYPE_IS_ENUM(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_ENUM) -/** - * G_ENUM_CLASS: - * @class: a valid #GEnumClass - * - * Casts a derived #GEnumClass structure into a #GEnumClass structure. - */ -#define G_ENUM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_ENUM, GEnumClass)) -/** - * G_IS_ENUM_CLASS: - * @class: a #GEnumClass - * - * Checks whether @class "is a" valid #GEnumClass structure of type %G_TYPE_ENUM - * or derived. - */ -#define G_IS_ENUM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_ENUM)) -/** - * G_ENUM_CLASS_TYPE: - * @class: a #GEnumClass - * - * Get the type identifier from a given #GEnumClass structure. - * - * Returns: the #GType - */ -#define G_ENUM_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) -/** - * G_ENUM_CLASS_TYPE_NAME: - * @class: a #GEnumClass - * - * Get the static type name from a given #GEnumClass structure. - * - * Returns: the type name. - */ -#define G_ENUM_CLASS_TYPE_NAME(class) (g_type_name (G_ENUM_CLASS_TYPE (class))) - - -/** - * G_TYPE_IS_FLAGS: - * @type: a #GType ID. - * - * Checks whether @type "is a" %G_TYPE_FLAGS. - * - * Returns: %TRUE if @type "is a" %G_TYPE_FLAGS. - */ -#define G_TYPE_IS_FLAGS(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_FLAGS) -/** - * G_FLAGS_CLASS: - * @class: a valid #GFlagsClass - * - * Casts a derived #GFlagsClass structure into a #GFlagsClass structure. - */ -#define G_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_FLAGS, GFlagsClass)) -/** - * G_IS_FLAGS_CLASS: - * @class: a #GFlagsClass - * - * Checks whether @class "is a" valid #GFlagsClass structure of type %G_TYPE_FLAGS - * or derived. - */ -#define G_IS_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_FLAGS)) -/** - * G_FLAGS_CLASS_TYPE: - * @class: a #GFlagsClass - * - * Get the type identifier from a given #GFlagsClass structure. - * - * Returns: the #GType - */ -#define G_FLAGS_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) -/** - * G_FLAGS_CLASS_TYPE_NAME: - * @class: a #GFlagsClass - * - * Get the static type name from a given #GFlagsClass structure. - * - * Returns: the type name. - */ -#define G_FLAGS_CLASS_TYPE_NAME(class) (g_type_name (G_FLAGS_CLASS_TYPE (class))) - - -/** - * G_VALUE_HOLDS_ENUM: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_ENUM. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_ENUM(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ENUM)) -/** - * G_VALUE_HOLDS_FLAGS: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_FLAGS. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_FLAGS(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLAGS)) - - -/* --- enum/flag values & classes --- */ -typedef struct _GEnumClass GEnumClass; -typedef struct _GFlagsClass GFlagsClass; -typedef struct _GEnumValue GEnumValue; -typedef struct _GFlagsValue GFlagsValue; - -/** - * GEnumClass: - * @g_type_class: the parent class - * @minimum: the smallest possible value. - * @maximum: the largest possible value. - * @n_values: the number of possible values. - * @values: an array of #GEnumValue structs describing the - * individual values. - * - * The class of an enumeration type holds information about its - * possible values. - */ -struct _GEnumClass -{ - GTypeClass g_type_class; - - /*< public >*/ - gint minimum; - gint maximum; - guint n_values; - GEnumValue *values; -}; -/** - * GFlagsClass: - * @g_type_class: the parent class - * @mask: a mask covering all possible values. - * @n_values: the number of possible values. - * @values: an array of #GFlagsValue structs describing the - * individual values. - * - * The class of a flags type holds information about its - * possible values. - */ -struct _GFlagsClass -{ - GTypeClass g_type_class; - - /*< public >*/ - guint mask; - guint n_values; - GFlagsValue *values; -}; -/** - * GEnumValue: - * @value: the enum value - * @value_name: the name of the value - * @value_nick: the nickname of the value - * - * A structure which contains a single enum value, its name, and its - * nickname. - */ -struct _GEnumValue -{ - gint value; - const gchar *value_name; - const gchar *value_nick; -}; -/** - * GFlagsValue: - * @value: the flags value - * @value_name: the name of the value - * @value_nick: the nickname of the value - * - * A structure which contains a single flags value, its name, and its - * nickname. - */ -struct _GFlagsValue -{ - guint value; - const gchar *value_name; - const gchar *value_nick; -}; - - -/* --- prototypes --- */ -GEnumValue* g_enum_get_value (GEnumClass *enum_class, - gint value); -GEnumValue* g_enum_get_value_by_name (GEnumClass *enum_class, - const gchar *name); -GEnumValue* g_enum_get_value_by_nick (GEnumClass *enum_class, - const gchar *nick); -GFlagsValue* g_flags_get_first_value (GFlagsClass *flags_class, - guint value); -GFlagsValue* g_flags_get_value_by_name (GFlagsClass *flags_class, - const gchar *name); -GFlagsValue* g_flags_get_value_by_nick (GFlagsClass *flags_class, - const gchar *nick); -void g_value_set_enum (GValue *value, - gint v_enum); -gint g_value_get_enum (const GValue *value); -void g_value_set_flags (GValue *value, - guint v_flags); -guint g_value_get_flags (const GValue *value); - - - -/* --- registration functions --- */ -/* const_static_values is a NULL terminated array of enum/flags - * values that is taken over! - */ -GType g_enum_register_static (const gchar *name, - const GEnumValue *const_static_values); -GType g_flags_register_static (const gchar *name, - const GFlagsValue *const_static_values); -/* functions to complete the type information - * for enums/flags implemented by plugins - */ -void g_enum_complete_type_info (GType g_enum_type, - GTypeInfo *info, - const GEnumValue *const_values); -void g_flags_complete_type_info (GType g_flags_type, - GTypeInfo *info, - const GFlagsValue *const_values); - -G_END_DECLS - -#endif /* __G_ENUMS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/glib-types.h b/GstreamerHelper/x64/include/glib-2.0/gobject/glib-types.h deleted file mode 100644 index 50bc0339..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/glib-types.h +++ /dev/null @@ -1,277 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) && !defined(GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GLIB_TYPES_H__ -#define __GLIB_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* A hack necesssary to preprocess this file with g-ir-scanner */ -#ifdef __GI_SCANNER__ -typedef gsize GType; -#endif - -/* --- GLib boxed types --- */ -/** - * G_TYPE_DATE: - * - * The #GType for #GDate. - */ -#define G_TYPE_DATE (g_date_get_type ()) - -/** - * G_TYPE_STRV: - * - * The #GType for a boxed type holding a %NULL-terminated array of strings. - * - * The code fragments in the following example show the use of a property of - * type #G_TYPE_STRV with g_object_class_install_property(), g_object_set() - * and g_object_get(). - * - * |[ - * g_object_class_install_property (object_class, - * PROP_AUTHORS, - * g_param_spec_boxed ("authors", - * _("Authors"), - * _("List of authors"), - * G_TYPE_STRV, - * G_PARAM_READWRITE)); - * - * gchar *authors[] = { "Owen", "Tim", NULL }; - * g_object_set (obj, "authors", authors, NULL); - * - * gchar *writers[]; - * g_object_get (obj, "authors", &writers, NULL); - * /* do something with writers */ - * g_strfreev (writers); - * ]| - * - * Since: 2.4 - */ -#define G_TYPE_STRV (g_strv_get_type ()) - -/** - * G_TYPE_GSTRING: - * - * The #GType for #GString. - */ -#define G_TYPE_GSTRING (g_gstring_get_type ()) - -/** - * G_TYPE_HASH_TABLE: - * - * The #GType for a boxed type holding a #GHashTable reference. - * - * Since: 2.10 - */ -#define G_TYPE_HASH_TABLE (g_hash_table_get_type ()) - -/** - * G_TYPE_REGEX: - * - * The #GType for a boxed type holding a #GRegex reference. - * - * Since: 2.14 - */ -#define G_TYPE_REGEX (g_regex_get_type ()) - -/** - * G_TYPE_MATCH_INFO: - * - * The #GType for a boxed type holding a #GMatchInfo reference. - * - * Since: 2.30 - */ -#define G_TYPE_MATCH_INFO (g_match_info_get_type ()) - -/** - * G_TYPE_ARRAY: - * - * The #GType for a boxed type holding a #GArray reference. - * - * Since: 2.22 - */ -#define G_TYPE_ARRAY (g_array_get_type ()) - -/** - * G_TYPE_BYTE_ARRAY: - * - * The #GType for a boxed type holding a #GByteArray reference. - * - * Since: 2.22 - */ -#define G_TYPE_BYTE_ARRAY (g_byte_array_get_type ()) - -/** - * G_TYPE_PTR_ARRAY: - * - * The #GType for a boxed type holding a #GPtrArray reference. - * - * Since: 2.22 - */ -#define G_TYPE_PTR_ARRAY (g_ptr_array_get_type ()) - -/** - * G_TYPE_BYTES: - * - * The #GType for #GBytes. - * - * Since: 2.32 - */ -#define G_TYPE_BYTES (g_bytes_get_type ()) - -/** - * G_TYPE_VARIANT_TYPE: - * - * The #GType for a boxed type holding a #GVariantType. - * - * Since: 2.24 - */ -#define G_TYPE_VARIANT_TYPE (g_variant_type_get_gtype ()) - -/** - * G_TYPE_ERROR: - * - * The #GType for a boxed type holding a #GError. - * - * Since: 2.26 - */ -#define G_TYPE_ERROR (g_error_get_type ()) - -/** - * G_TYPE_DATE_TIME: - * - * The #GType for a boxed type holding a #GDateTime. - * - * Since: 2.26 - */ -#define G_TYPE_DATE_TIME (g_date_time_get_type ()) - -/** - * G_TYPE_TIME_ZONE: - * - * The #GType for a boxed type holding a #GTimeZone. - * - * Since: 2.34 - */ -#define G_TYPE_TIME_ZONE (g_time_zone_get_type ()) - -/** - * G_TYPE_IO_CHANNEL: - * - * The #GType for #GIOChannel. - */ -#define G_TYPE_IO_CHANNEL (g_io_channel_get_type ()) - -/** - * G_TYPE_IO_CONDITION: - * - * The #GType for #GIOCondition. - */ -#define G_TYPE_IO_CONDITION (g_io_condition_get_type ()) - -/** - * G_TYPE_VARIANT_BUILDER: - * - * The #GType for a boxed type holding a #GVariantBuilder. - * - * Since: 2.30 - */ -#define G_TYPE_VARIANT_BUILDER (g_variant_builder_get_type ()) - -/** - * G_TYPE_MAIN_LOOP: - * - * The #GType for a boxed type holding a #GMainLoop. - * - * Since: 2.30 - */ -#define G_TYPE_MAIN_LOOP (g_main_loop_get_type ()) - -/** - * G_TYPE_MAIN_CONTEXT: - * - * The #GType for a boxed type holding a #GMainContext. - * - * Since: 2.30 - */ -#define G_TYPE_MAIN_CONTEXT (g_main_context_get_type ()) - -/** - * G_TYPE_SOURCE: - * - * The #GType for a boxed type holding a #GSource. - * - * Since: 2.30 - */ -#define G_TYPE_SOURCE (g_source_get_type ()) - -/** - * G_TYPE_KEY_FILE: - * - * The #GType for a boxed type holding a #GKeyFile. - * - * Since: 2.32 - */ -#define G_TYPE_KEY_FILE (g_key_file_get_type ()) - -GType g_date_get_type (void) G_GNUC_CONST; -GType g_strv_get_type (void) G_GNUC_CONST; -GType g_gstring_get_type (void) G_GNUC_CONST; -GType g_hash_table_get_type (void) G_GNUC_CONST; -GType g_array_get_type (void) G_GNUC_CONST; -GType g_byte_array_get_type (void) G_GNUC_CONST; -GType g_ptr_array_get_type (void) G_GNUC_CONST; -GType g_bytes_get_type (void) G_GNUC_CONST; -GType g_variant_type_get_gtype (void) G_GNUC_CONST; -GType g_regex_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_match_info_get_type (void) G_GNUC_CONST; -GType g_error_get_type (void) G_GNUC_CONST; -GType g_date_time_get_type (void) G_GNUC_CONST; -GType g_time_zone_get_type (void) G_GNUC_CONST; -GType g_io_channel_get_type (void) G_GNUC_CONST; -GType g_io_condition_get_type (void) G_GNUC_CONST; -GType g_variant_builder_get_type (void) G_GNUC_CONST; -GType g_key_file_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_main_loop_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_main_context_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_source_get_type (void) G_GNUC_CONST; - -GLIB_DEPRECATED_FOR('G_TYPE_VARIANT') -GType g_variant_get_gtype (void) G_GNUC_CONST; - -/** - * GStrv: - * - * A C representable type name for #G_TYPE_STRV. - */ -typedef gchar** GStrv; - -G_END_DECLS - -#endif /* __GLIB_TYPES_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gmarshal.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gmarshal.h deleted file mode 100644 index 0c21be68..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gmarshal.h +++ /dev/null @@ -1,341 +0,0 @@ -/* Note: This file is no longer generated. See the comment in gmarshal.list */ -#ifndef __G_MARSHAL_H__ -#define __G_MARSHAL_H__ - -G_BEGIN_DECLS - -/* VOID:VOID (./gmarshal.list:6) */ -extern void g_cclosure_marshal_VOID__VOID (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__VOIDv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:BOOLEAN (./gmarshal.list:7) */ -extern void g_cclosure_marshal_VOID__BOOLEAN (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__BOOLEANv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:CHAR (./gmarshal.list:8) */ -extern void g_cclosure_marshal_VOID__CHAR (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__CHARv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:UCHAR (./gmarshal.list:9) */ -extern void g_cclosure_marshal_VOID__UCHAR (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__UCHARv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:INT (./gmarshal.list:10) */ -extern void g_cclosure_marshal_VOID__INT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__INTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:UINT (./gmarshal.list:11) */ -extern void g_cclosure_marshal_VOID__UINT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__UINTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:LONG (./gmarshal.list:12) */ -extern void g_cclosure_marshal_VOID__LONG (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__LONGv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:ULONG (./gmarshal.list:13) */ -extern void g_cclosure_marshal_VOID__ULONG (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__ULONGv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:ENUM (./gmarshal.list:14) */ -extern void g_cclosure_marshal_VOID__ENUM (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__ENUMv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:FLAGS (./gmarshal.list:15) */ -extern void g_cclosure_marshal_VOID__FLAGS (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__FLAGSv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:FLOAT (./gmarshal.list:16) */ -extern void g_cclosure_marshal_VOID__FLOAT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__FLOATv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:DOUBLE (./gmarshal.list:17) */ -extern void g_cclosure_marshal_VOID__DOUBLE (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__DOUBLEv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:STRING (./gmarshal.list:18) */ -extern void g_cclosure_marshal_VOID__STRING (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__STRINGv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:PARAM (./gmarshal.list:19) */ -extern void g_cclosure_marshal_VOID__PARAM (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__PARAMv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:BOXED (./gmarshal.list:20) */ -extern void g_cclosure_marshal_VOID__BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__BOXEDv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:POINTER (./gmarshal.list:21) */ -extern void g_cclosure_marshal_VOID__POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__POINTERv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:OBJECT (./gmarshal.list:22) */ -extern void g_cclosure_marshal_VOID__OBJECT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__OBJECTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:VARIANT (./gmarshal.list:23) */ -extern void g_cclosure_marshal_VOID__VARIANT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__VARIANTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:UINT,POINTER (./gmarshal.list:26) */ -extern void g_cclosure_marshal_VOID__UINT_POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__UINT_POINTERv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* BOOL:FLAGS (./gmarshal.list:27) */ -extern void g_cclosure_marshal_BOOLEAN__FLAGS (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_BOOLEAN__FLAGSv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); -#define g_cclosure_marshal_BOOL__FLAGS g_cclosure_marshal_BOOLEAN__FLAGS - -/* STRING:OBJECT,POINTER (./gmarshal.list:28) */ -extern void g_cclosure_marshal_STRING__OBJECT_POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_STRING__OBJECT_POINTERv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* BOOL:BOXED,BOXED (./gmarshal.list:29) */ -extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); -#define g_cclosure_marshal_BOOL__BOXED_BOXED g_cclosure_marshal_BOOLEAN__BOXED_BOXED - -G_END_DECLS - -#endif /* __G_MARSHAL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gobject.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gobject.h deleted file mode 100644 index f63e4d16..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gobject.h +++ /dev/null @@ -1,610 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_OBJECT_H__ -#define __G_OBJECT_H__ - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_IS_OBJECT: - * @type: Type id to check - * - * Check if the passed in type id is a %G_TYPE_OBJECT or derived from it. - * - * Returns: %FALSE or %TRUE, indicating whether @type is a %G_TYPE_OBJECT. - */ -#define G_TYPE_IS_OBJECT(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_OBJECT) -/** - * G_OBJECT: - * @object: Object which is subject to casting. - * - * Casts a #GObject or derived pointer into a (GObject*) pointer. - * Depending on the current debugging level, this function may invoke - * certain runtime checks to identify invalid casts. - */ -#define G_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject)) -/** - * G_OBJECT_CLASS: - * @class: a valid #GObjectClass - * - * Casts a derived #GObjectClass structure into a #GObjectClass structure. - */ -#define G_OBJECT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass)) -/** - * G_IS_OBJECT: - * @object: Instance to check for being a %G_TYPE_OBJECT. - * - * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT. - */ -#define G_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT)) -/** - * G_IS_OBJECT_CLASS: - * @class: a #GObjectClass - * - * Checks whether @class "is a" valid #GObjectClass structure of type - * %G_TYPE_OBJECT or derived. - */ -#define G_IS_OBJECT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_OBJECT)) -/** - * G_OBJECT_GET_CLASS: - * @object: a #GObject instance. - * - * Get the class structure associated to a #GObject instance. - * - * Returns: pointer to object class structure. - */ -#define G_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass)) -/** - * G_OBJECT_TYPE: - * @object: Object to return the type id for. - * - * Get the type id of an object. - * - * Returns: Type id of @object. - */ -#define G_OBJECT_TYPE(object) (G_TYPE_FROM_INSTANCE (object)) -/** - * G_OBJECT_TYPE_NAME: - * @object: Object to return the type name for. - * - * Get the name of an object's type. - * - * Returns: Type name of @object. The string is owned by the type system and - * should not be freed. - */ -#define G_OBJECT_TYPE_NAME(object) (g_type_name (G_OBJECT_TYPE (object))) -/** - * G_OBJECT_CLASS_TYPE: - * @class: a valid #GObjectClass - * - * Get the type id of a class structure. - * - * Returns: Type id of @class. - */ -#define G_OBJECT_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) -/** - * G_OBJECT_CLASS_NAME: - * @class: a valid #GObjectClass - * - * Return the name of a class structure's type. - * - * Returns: Type name of @class. The string is owned by the type system and - * should not be freed. - */ -#define G_OBJECT_CLASS_NAME(class) (g_type_name (G_OBJECT_CLASS_TYPE (class))) -/** - * G_VALUE_HOLDS_OBJECT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_OBJECT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_OBJECT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_OBJECT)) - -/* --- type macros --- */ -/** - * G_TYPE_INITIALLY_UNOWNED: - * - * The type for #GInitiallyUnowned. - */ -#define G_TYPE_INITIALLY_UNOWNED (g_initially_unowned_get_type()) -/** - * G_INITIALLY_UNOWNED: - * @object: Object which is subject to casting. - * - * Casts a #GInitiallyUnowned or derived pointer into a (GInitiallyUnowned*) - * pointer. Depending on the current debugging level, this function may invoke - * certain runtime checks to identify invalid casts. - */ -#define G_INITIALLY_UNOWNED(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnowned)) -/** - * G_INITIALLY_UNOWNED_CLASS: - * @class: a valid #GInitiallyUnownedClass - * - * Casts a derived #GInitiallyUnownedClass structure into a - * #GInitiallyUnownedClass structure. - */ -#define G_INITIALLY_UNOWNED_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass)) -/** - * G_IS_INITIALLY_UNOWNED: - * @object: Instance to check for being a %G_TYPE_INITIALLY_UNOWNED. - * - * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_INITIALLY_UNOWNED. - */ -#define G_IS_INITIALLY_UNOWNED(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_INITIALLY_UNOWNED)) -/** - * G_IS_INITIALLY_UNOWNED_CLASS: - * @class: a #GInitiallyUnownedClass - * - * Checks whether @class "is a" valid #GInitiallyUnownedClass structure of type - * %G_TYPE_INITIALLY_UNOWNED or derived. - */ -#define G_IS_INITIALLY_UNOWNED_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_INITIALLY_UNOWNED)) -/** - * G_INITIALLY_UNOWNED_GET_CLASS: - * @object: a #GInitiallyUnowned instance. - * - * Get the class structure associated to a #GInitiallyUnowned instance. - * - * Returns: pointer to object class structure. - */ -#define G_INITIALLY_UNOWNED_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass)) -/* GInitiallyUnowned ia a GObject with initially floating reference count */ - - -/* --- typedefs & structures --- */ -typedef struct _GObject GObject; -typedef struct _GObjectClass GObjectClass; -typedef struct _GObject GInitiallyUnowned; -typedef struct _GObjectClass GInitiallyUnownedClass; -typedef struct _GObjectConstructParam GObjectConstructParam; -/** - * GObjectGetPropertyFunc: - * @object: a #GObject - * @property_id: the numeric id under which the property was registered with - * g_object_class_install_property(). - * @value: a #GValue to return the property value in - * @pspec: the #GParamSpec describing the property - * - * The type of the @get_property function of #GObjectClass. - */ -typedef void (*GObjectGetPropertyFunc) (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); -/** - * GObjectSetPropertyFunc: - * @object: a #GObject - * @property_id: the numeric id under which the property was registered with - * g_object_class_install_property(). - * @value: the new value for the property - * @pspec: the #GParamSpec describing the property - * - * The type of the @set_property function of #GObjectClass. - */ -typedef void (*GObjectSetPropertyFunc) (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -/** - * GObjectFinalizeFunc: - * @object: the #GObject being finalized - * - * The type of the @finalize function of #GObjectClass. - */ -typedef void (*GObjectFinalizeFunc) (GObject *object); -/** - * GWeakNotify: - * @data: data that was provided when the weak reference was established - * @where_the_object_was: the object being finalized - * - * A #GWeakNotify function can be added to an object as a callback that gets - * triggered when the object is finalized. Since the object is already being - * finalized when the #GWeakNotify is called, there's not much you could do - * with the object, apart from e.g. using its address as hash-index or the like. - */ -typedef void (*GWeakNotify) (gpointer data, - GObject *where_the_object_was); -/** - * GObject: - * - * All the fields in the GObject structure are private - * to the #GObject implementation and should never be accessed directly. - */ -struct _GObject -{ - GTypeInstance g_type_instance; - - /*< private >*/ - volatile guint ref_count; - GData *qdata; -}; -/** - * GObjectClass: - * @g_type_class: the parent class - * @constructor: the @constructor function is called by g_object_new () to - * complete the object initialization after all the construction properties are - * set. The first thing a @constructor implementation must do is chain up to the - * @constructor of the parent class. Overriding @constructor should be rarely - * needed, e.g. to handle construct properties, or to implement singletons. - * @set_property: the generic setter for all properties of this type. Should be - * overridden for every type with properties. Implementations of @set_property - * don't need to emit property change notification explicitly, this is handled - * by the type system. - * @get_property: the generic getter for all properties of this type. Should be - * overridden for every type with properties. - * @dispose: the @dispose function is supposed to drop all references to other - * objects, but keep the instance otherwise intact, so that client method - * invocations still work. It may be run multiple times (due to reference - * loops). Before returning, @dispose should chain up to the @dispose method - * of the parent class. - * @finalize: instance finalization function, should finish the finalization of - * the instance begun in @dispose and chain up to the @finalize method of the - * parent class. - * @dispatch_properties_changed: emits property change notification for a bunch - * of properties. Overriding @dispatch_properties_changed should be rarely - * needed. - * @notify: the class closure for the notify signal - * @constructed: the @constructed function is called by g_object_new() as the - * final step of the object creation process. At the point of the call, all - * construction properties have been set on the object. The purpose of this - * call is to allow for object initialisation steps that can only be performed - * after construction properties have been set. @constructed implementors - * should chain up to the @constructed call of their parent class to allow it - * to complete its initialisation. - * - * The class structure for the GObject type. - * - * - * Implementing singletons using a constructor - * - * static MySingleton *the_singleton = NULL; - * - * static GObject* - * my_singleton_constructor (GType type, - * guint n_construct_params, - * GObjectConstructParam *construct_params) - * { - * GObject *object; - * - * if (!the_singleton) - * { - * object = G_OBJECT_CLASS (parent_class)->constructor (type, - * n_construct_params, - * construct_params); - * the_singleton = MY_SINGLETON (object); - * } - * else - * object = g_object_ref (G_OBJECT (the_singleton)); - * - * return object; - * } - * - */ -struct _GObjectClass -{ - GTypeClass g_type_class; - - /*< private >*/ - GSList *construct_properties; - - /*< public >*/ - /* seldom overidden */ - GObject* (*constructor) (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties); - /* overridable methods */ - void (*set_property) (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); - void (*get_property) (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); - void (*dispose) (GObject *object); - void (*finalize) (GObject *object); - /* seldom overidden */ - void (*dispatch_properties_changed) (GObject *object, - guint n_pspecs, - GParamSpec **pspecs); - /* signals */ - void (*notify) (GObject *object, - GParamSpec *pspec); - - /* called when done constructing */ - void (*constructed) (GObject *object); - - /*< private >*/ - gsize flags; - - /* padding */ - gpointer pdummy[6]; -}; -/** - * GObjectConstructParam: - * @pspec: the #GParamSpec of the construct parameter - * @value: the value to set the parameter to - * - * The GObjectConstructParam struct is an auxiliary - * structure used to hand #GParamSpec/#GValue pairs to the @constructor of - * a #GObjectClass. - */ -struct _GObjectConstructParam -{ - GParamSpec *pspec; - GValue *value; -}; - -/** - * GInitiallyUnowned: - * - * All the fields in the GInitiallyUnowned structure - * are private to the #GInitiallyUnowned implementation and should never be - * accessed directly. - */ -/** - * GInitiallyUnownedClass: - * - * The class structure for the GInitiallyUnowned type. - */ - - -/* --- prototypes --- */ -GType g_initially_unowned_get_type (void); -void g_object_class_install_property (GObjectClass *oclass, - guint property_id, - GParamSpec *pspec); -GParamSpec* g_object_class_find_property (GObjectClass *oclass, - const gchar *property_name); -GParamSpec**g_object_class_list_properties (GObjectClass *oclass, - guint *n_properties); -void g_object_class_override_property (GObjectClass *oclass, - guint property_id, - const gchar *name); -void g_object_class_install_properties (GObjectClass *oclass, - guint n_pspecs, - GParamSpec **pspecs); - -void g_object_interface_install_property (gpointer g_iface, - GParamSpec *pspec); -GParamSpec* g_object_interface_find_property (gpointer g_iface, - const gchar *property_name); -GParamSpec**g_object_interface_list_properties (gpointer g_iface, - guint *n_properties_p); - -GType g_object_get_type (void) G_GNUC_CONST; -gpointer g_object_new (GType object_type, - const gchar *first_property_name, - ...); -gpointer g_object_newv (GType object_type, - guint n_parameters, - GParameter *parameters); -GObject* g_object_new_valist (GType object_type, - const gchar *first_property_name, - va_list var_args); -void g_object_set (gpointer object, - const gchar *first_property_name, - ...) G_GNUC_NULL_TERMINATED; -void g_object_get (gpointer object, - const gchar *first_property_name, - ...) G_GNUC_NULL_TERMINATED; -gpointer g_object_connect (gpointer object, - const gchar *signal_spec, - ...) G_GNUC_NULL_TERMINATED; -void g_object_disconnect (gpointer object, - const gchar *signal_spec, - ...) G_GNUC_NULL_TERMINATED; -void g_object_set_valist (GObject *object, - const gchar *first_property_name, - va_list var_args); -void g_object_get_valist (GObject *object, - const gchar *first_property_name, - va_list var_args); -void g_object_set_property (GObject *object, - const gchar *property_name, - const GValue *value); -void g_object_get_property (GObject *object, - const gchar *property_name, - GValue *value); -void g_object_freeze_notify (GObject *object); -void g_object_notify (GObject *object, - const gchar *property_name); -void g_object_notify_by_pspec (GObject *object, - GParamSpec *pspec); -void g_object_thaw_notify (GObject *object); -gboolean g_object_is_floating (gpointer object); -gpointer g_object_ref_sink (gpointer object); -gpointer g_object_ref (gpointer object); -void g_object_unref (gpointer object); -void g_object_weak_ref (GObject *object, - GWeakNotify notify, - gpointer data); -void g_object_weak_unref (GObject *object, - GWeakNotify notify, - gpointer data); -void g_object_add_weak_pointer (GObject *object, - gpointer *weak_pointer_location); -void g_object_remove_weak_pointer (GObject *object, - gpointer *weak_pointer_location); - -/** - * GToggleNotify: - * @data: Callback data passed to g_object_add_toggle_ref() - * @object: The object on which g_object_add_toggle_ref() was called. - * @is_last_ref: %TRUE if the toggle reference is now the - * last reference to the object. %FALSE if the toggle - * reference was the last reference and there are now other - * references. - * - * A callback function used for notification when the state - * of a toggle reference changes. See g_object_add_toggle_ref(). - */ -typedef void (*GToggleNotify) (gpointer data, - GObject *object, - gboolean is_last_ref); - -void g_object_add_toggle_ref (GObject *object, - GToggleNotify notify, - gpointer data); -void g_object_remove_toggle_ref (GObject *object, - GToggleNotify notify, - gpointer data); - -gpointer g_object_get_qdata (GObject *object, - GQuark quark); -void g_object_set_qdata (GObject *object, - GQuark quark, - gpointer data); -void g_object_set_qdata_full (GObject *object, - GQuark quark, - gpointer data, - GDestroyNotify destroy); -gpointer g_object_steal_qdata (GObject *object, - GQuark quark); - -GLIB_AVAILABLE_IN_2_34 -gpointer g_object_dup_qdata (GObject *object, - GQuark quark, - GDuplicateFunc dup_func, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gboolean g_object_replace_qdata (GObject *object, - GQuark quark, - gpointer oldval, - gpointer newval, - GDestroyNotify destroy, - GDestroyNotify *old_destroy); - -gpointer g_object_get_data (GObject *object, - const gchar *key); -void g_object_set_data (GObject *object, - const gchar *key, - gpointer data); -void g_object_set_data_full (GObject *object, - const gchar *key, - gpointer data, - GDestroyNotify destroy); -gpointer g_object_steal_data (GObject *object, - const gchar *key); - -GLIB_AVAILABLE_IN_2_34 -gpointer g_object_dup_data (GObject *object, - const gchar *key, - GDuplicateFunc dup_func, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gboolean g_object_replace_data (GObject *object, - const gchar *key, - gpointer oldval, - gpointer newval, - GDestroyNotify destroy, - GDestroyNotify *old_destroy); - - -void g_object_watch_closure (GObject *object, - GClosure *closure); -GClosure* g_cclosure_new_object (GCallback callback_func, - GObject *object); -GClosure* g_cclosure_new_object_swap (GCallback callback_func, - GObject *object); -GClosure* g_closure_new_object (guint sizeof_closure, - GObject *object); -void g_value_set_object (GValue *value, - gpointer v_object); -gpointer g_value_get_object (const GValue *value); -gpointer g_value_dup_object (const GValue *value); -gulong g_signal_connect_object (gpointer instance, - const gchar *detailed_signal, - GCallback c_handler, - gpointer gobject, - GConnectFlags connect_flags); - -/*< protected >*/ -void g_object_force_floating (GObject *object); -void g_object_run_dispose (GObject *object); - - -void g_value_take_object (GValue *value, - gpointer v_object); -GLIB_DEPRECATED_FOR(g_value_take_object) -void g_value_set_object_take_ownership (GValue *value, - gpointer v_object); - -GLIB_DEPRECATED -gsize g_object_compat_control (gsize what, - gpointer data); - -/* --- implementation macros --- */ -#define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \ -G_STMT_START { \ - GObject *_object = (GObject*) (object); \ - GParamSpec *_pspec = (GParamSpec*) (pspec); \ - guint _property_id = (property_id); \ - g_warning ("%s: invalid %s id %u for \"%s\" of type `%s' in `%s'", \ - G_STRLOC, \ - (pname), \ - _property_id, \ - _pspec->name, \ - g_type_name (G_PARAM_SPEC_TYPE (_pspec)), \ - G_OBJECT_TYPE_NAME (_object)); \ -} G_STMT_END -/** - * G_OBJECT_WARN_INVALID_PROPERTY_ID: - * @object: the #GObject on which set_property() or get_property() was called - * @property_id: the numeric id of the property - * @pspec: the #GParamSpec of the property - * - * This macro should be used to emit a standard warning about unexpected - * properties in set_property() and get_property() implementations. - */ -#define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \ - G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec)) - -void g_clear_object (volatile GObject **object_ptr); -#define g_clear_object(object_ptr) g_clear_pointer ((object_ptr), g_object_unref) - -typedef struct { - /**/ - union { gpointer p; } priv; -} GWeakRef; - -void g_weak_ref_init (GWeakRef *weak_ref, - gpointer object); -void g_weak_ref_clear (GWeakRef *weak_ref); -gpointer g_weak_ref_get (GWeakRef *weak_ref); -void g_weak_ref_set (GWeakRef *weak_ref, - gpointer object); - -G_END_DECLS - -#endif /* __G_OBJECT_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gobjectnotifyqueue.c b/GstreamerHelper/x64/include/glib-2.0/gobject/gobjectnotifyqueue.c deleted file mode 100644 index cfe01ba0..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gobjectnotifyqueue.c +++ /dev/null @@ -1,199 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* WARNING: - * - * This file is INSTALLED and other projects (outside of glib) - * #include its contents. - */ - -#ifndef __G_OBJECT_NOTIFY_QUEUE_H__ -#define __G_OBJECT_NOTIFY_QUEUE_H__ - -#include /* memset */ - -#include - -G_BEGIN_DECLS - - -/* --- typedefs --- */ -typedef struct _GObjectNotifyContext GObjectNotifyContext; -typedef struct _GObjectNotifyQueue GObjectNotifyQueue; -typedef void (*GObjectNotifyQueueDispatcher) (GObject *object, - guint n_pspecs, - GParamSpec **pspecs); - - -/* --- structures --- */ -struct _GObjectNotifyContext -{ - GQuark quark_notify_queue; - GObjectNotifyQueueDispatcher dispatcher; - GTrashStack *_nqueue_trash; /* unused */ -}; -struct _GObjectNotifyQueue -{ - GObjectNotifyContext *context; - GSList *pspecs; - guint16 n_pspecs; - guint16 freeze_count; -}; - -G_LOCK_DEFINE_STATIC(notify_lock); - -/* --- functions --- */ -static void -g_object_notify_queue_free (gpointer data) -{ - GObjectNotifyQueue *nqueue = data; - - g_slist_free (nqueue->pspecs); - g_slice_free (GObjectNotifyQueue, nqueue); -} - -static inline GObjectNotifyQueue* -g_object_notify_queue_freeze (GObject *object, - GObjectNotifyContext *context) -{ - GObjectNotifyQueue *nqueue; - - G_LOCK(notify_lock); - nqueue = g_datalist_id_get_data (&object->qdata, context->quark_notify_queue); - if (!nqueue) - { - nqueue = g_slice_new0 (GObjectNotifyQueue); - nqueue->context = context; - g_datalist_id_set_data_full (&object->qdata, context->quark_notify_queue, - nqueue, g_object_notify_queue_free); - } - - if (nqueue->freeze_count >= 65535) - g_critical("Free queue for %s (%p) is larger than 65535," - " called g_object_freeze_notify() too often." - " Forgot to call g_object_thaw_notify() or infinite loop", - G_OBJECT_TYPE_NAME (object), object); - else - nqueue->freeze_count++; - G_UNLOCK(notify_lock); - - return nqueue; -} - -static inline void -g_object_notify_queue_thaw (GObject *object, - GObjectNotifyQueue *nqueue) -{ - GObjectNotifyContext *context = nqueue->context; - GParamSpec *pspecs_mem[16], **pspecs, **free_me = NULL; - GSList *slist; - guint n_pspecs = 0; - - g_return_if_fail (nqueue->freeze_count > 0); - g_return_if_fail (g_atomic_int_get(&object->ref_count) > 0); - - G_LOCK(notify_lock); - - /* Just make sure we never get into some nasty race condition */ - if (G_UNLIKELY(nqueue->freeze_count == 0)) { - G_UNLOCK(notify_lock); - g_warning ("%s: property-changed notification for %s(%p) is not frozen", - G_STRFUNC, G_OBJECT_TYPE_NAME (object), object); - return; - } - - nqueue->freeze_count--; - if (nqueue->freeze_count) { - G_UNLOCK(notify_lock); - return; - } - - pspecs = nqueue->n_pspecs > 16 ? free_me = g_new (GParamSpec*, nqueue->n_pspecs) : pspecs_mem; - - for (slist = nqueue->pspecs; slist; slist = slist->next) - { - pspecs[n_pspecs++] = slist->data; - } - g_datalist_id_set_data (&object->qdata, context->quark_notify_queue, NULL); - - G_UNLOCK(notify_lock); - - if (n_pspecs) - context->dispatcher (object, n_pspecs, pspecs); - g_free (free_me); -} - -static inline void -g_object_notify_queue_clear (GObject *object, - GObjectNotifyQueue *nqueue) -{ - g_return_if_fail (nqueue->freeze_count > 0); - - G_LOCK(notify_lock); - - g_slist_free (nqueue->pspecs); - nqueue->pspecs = NULL; - nqueue->n_pspecs = 0; - - G_UNLOCK(notify_lock); -} - -static inline void -g_object_notify_queue_add (GObject *object, - GObjectNotifyQueue *nqueue, - GParamSpec *pspec) -{ - if (pspec->flags & G_PARAM_READABLE) - { - GParamSpec *redirect; - - G_LOCK(notify_lock); - - g_return_if_fail (nqueue->n_pspecs < 65535); - - redirect = g_param_spec_get_redirect_target (pspec); - if (redirect) - pspec = redirect; - - /* we do the deduping in _thaw */ - if (g_slist_find (nqueue->pspecs, pspec) == NULL) - { - nqueue->pspecs = g_slist_prepend (nqueue->pspecs, pspec); - nqueue->n_pspecs++; - } - - G_UNLOCK(notify_lock); - } -} - -/* NB: This function is not threadsafe, do not ever use it if - * you need a threadsafe notify queue. - * Use g_object_notify_queue_freeze() to acquire the queue and - * g_object_notify_queue_thaw() after you are done instead. - */ -static inline GObjectNotifyQueue* -g_object_notify_queue_from_object (GObject *object, - GObjectNotifyContext *context) -{ - return g_datalist_id_get_data (&object->qdata, context->quark_notify_queue); -} - -G_END_DECLS - -#endif /* __G_OBJECT_NOTIFY_QUEUE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gparam.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gparam.h deleted file mode 100644 index 84b3c445..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gparam.h +++ /dev/null @@ -1,414 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gparam.h: GParamSpec base class implementation - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PARAM_H__ -#define __G_PARAM_H__ - -#include - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -/** - * G_TYPE_IS_PARAM: - * @type: a #GType ID - * - * Checks whether @type "is a" %G_TYPE_PARAM. - */ -#define G_TYPE_IS_PARAM(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_PARAM) -/** - * G_PARAM_SPEC: - * @pspec: a valid #GParamSpec - * - * Casts a derived #GParamSpec object (e.g. of type #GParamSpecInt) into - * a #GParamSpec object. - */ -#define G_PARAM_SPEC(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec)) -/** - * G_IS_PARAM_SPEC: - * @pspec: a #GParamSpec - * - * Checks whether @pspec "is a" valid #GParamSpec structure of type %G_TYPE_PARAM - * or derived. - */ -#define G_IS_PARAM_SPEC(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM)) -/** - * G_PARAM_SPEC_CLASS: - * @pclass: a valid #GParamSpecClass - * - * Casts a derived #GParamSpecClass structure into a #GParamSpecClass structure. - */ -#define G_PARAM_SPEC_CLASS(pclass) (G_TYPE_CHECK_CLASS_CAST ((pclass), G_TYPE_PARAM, GParamSpecClass)) -/** - * G_IS_PARAM_SPEC_CLASS: - * @pclass: a #GParamSpecClass - * - * Checks whether @pclass "is a" valid #GParamSpecClass structure of type - * %G_TYPE_PARAM or derived. - */ -#define G_IS_PARAM_SPEC_CLASS(pclass) (G_TYPE_CHECK_CLASS_TYPE ((pclass), G_TYPE_PARAM)) -/** - * G_PARAM_SPEC_GET_CLASS: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GParamSpecClass of a #GParamSpec. - */ -#define G_PARAM_SPEC_GET_CLASS(pspec) (G_TYPE_INSTANCE_GET_CLASS ((pspec), G_TYPE_PARAM, GParamSpecClass)) - - -/* --- convenience macros --- */ -/** - * G_PARAM_SPEC_TYPE: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GType of this @pspec. - */ -#define G_PARAM_SPEC_TYPE(pspec) (G_TYPE_FROM_INSTANCE (pspec)) -/** - * G_PARAM_SPEC_TYPE_NAME: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GType name of this @pspec. - */ -#define G_PARAM_SPEC_TYPE_NAME(pspec) (g_type_name (G_PARAM_SPEC_TYPE (pspec))) -/** - * G_PARAM_SPEC_VALUE_TYPE: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GType to initialize a #GValue for this parameter. - */ -#define G_PARAM_SPEC_VALUE_TYPE(pspec) (G_PARAM_SPEC (pspec)->value_type) -/** - * G_VALUE_HOLDS_PARAM: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_PARAM. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_PARAM(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_PARAM)) - - -/* --- flags --- */ -/** - * GParamFlags: - * @G_PARAM_READABLE: the parameter is readable - * @G_PARAM_WRITABLE: the parameter is writable - * @G_PARAM_CONSTRUCT: the parameter will be set upon object construction - * @G_PARAM_CONSTRUCT_ONLY: the parameter will only be set upon object construction - * @G_PARAM_LAX_VALIDATION: upon parameter conversion (see g_param_value_convert()) - * strict validation is not required - * @G_PARAM_STATIC_NAME: the string used as name when constructing the - * parameter is guaranteed to remain valid and - * unmodified for the lifetime of the parameter. - * Since 2.8 - * @G_PARAM_STATIC_NICK: the string used as nick when constructing the - * parameter is guaranteed to remain valid and - * unmmodified for the lifetime of the parameter. - * Since 2.8 - * @G_PARAM_STATIC_BLURB: the string used as blurb when constructing the - * parameter is guaranteed to remain valid and - * unmodified for the lifetime of the parameter. - * Since 2.8 - * @G_PARAM_PRIVATE: internal - * @G_PARAM_DEPRECATED: the parameter is deprecated and will be removed - * in a future version. A warning will be generated if it is used - * while running with G_ENABLE_DIAGNOSTIC=1. - * Since 2.26 - * - * Through the #GParamFlags flag values, certain aspects of parameters - * can be configured. - */ -typedef enum -{ - G_PARAM_READABLE = 1 << 0, - G_PARAM_WRITABLE = 1 << 1, - G_PARAM_CONSTRUCT = 1 << 2, - G_PARAM_CONSTRUCT_ONLY = 1 << 3, - G_PARAM_LAX_VALIDATION = 1 << 4, - G_PARAM_STATIC_NAME = 1 << 5, -#ifndef G_DISABLE_DEPRECATED - G_PARAM_PRIVATE = G_PARAM_STATIC_NAME, -#endif - G_PARAM_STATIC_NICK = 1 << 6, - G_PARAM_STATIC_BLURB = 1 << 7, - /* User defined flags go up to 30 */ - G_PARAM_DEPRECATED = 1 << 31 -} GParamFlags; -/** - * G_PARAM_READWRITE: - * - * #GParamFlags value alias for %G_PARAM_READABLE | %G_PARAM_WRITABLE. - */ -#define G_PARAM_READWRITE (G_PARAM_READABLE | G_PARAM_WRITABLE) -/** - * G_PARAM_STATIC_STRINGS: - * - * #GParamFlags value alias for %G_PARAM_STATIC_NAME | %G_PARAM_STATIC_NICK | %G_PARAM_STATIC_BLURB. - * - * Since 2.13.0 - */ -#define G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) -/* bits in the range 0xffffff00 are reserved for 3rd party usage */ -/** - * G_PARAM_MASK: - * - * Mask containing the bits of #GParamSpec.flags which are reserved for GLib. - */ -#define G_PARAM_MASK (0x000000ff) -/** - * G_PARAM_USER_SHIFT: - * - * Minimum shift count to be used for user defined flags, to be stored in - * #GParamSpec.flags. The maximum allowed is 30 + G_PARAM_USER_SHIFT. - */ -#define G_PARAM_USER_SHIFT (8) - -/* --- typedefs & structures --- */ -typedef struct _GParamSpec GParamSpec; -typedef struct _GParamSpecClass GParamSpecClass; -typedef struct _GParameter GParameter; -typedef struct _GParamSpecPool GParamSpecPool; -/** - * GParamSpec: - * @g_type_instance: private #GTypeInstance portion - * @name: name of this parameter: always an interned string - * @flags: #GParamFlags flags for this parameter - * @value_type: the #GValue type for this parameter - * @owner_type: #GType type that uses (introduces) this parameter - * - * All other fields of the GParamSpec struct are private and - * should not be used directly. - */ -struct _GParamSpec -{ - GTypeInstance g_type_instance; - - const gchar *name; /* interned string */ - GParamFlags flags; - GType value_type; - GType owner_type; /* class or interface using this property */ - - /*< private >*/ - gchar *_nick; - gchar *_blurb; - GData *qdata; - guint ref_count; - guint param_id; /* sort-criteria */ -}; -/** - * GParamSpecClass: - * @g_type_class: the parent class - * @value_type: the #GValue type for this parameter - * @finalize: The instance finalization function (optional), should chain - * up to the finalize method of the parent class. - * @value_set_default: Resets a @value to the default value for this type - * (recommended, the default is g_value_reset()), see - * g_param_value_set_default(). - * @value_validate: Ensures that the contents of @value comply with the - * specifications set out by this type (optional), see - * g_param_value_validate(). - * @values_cmp: Compares @value1 with @value2 according to this type - * (recommended, the default is memcmp()), see g_param_values_cmp(). - * - * The class structure for the GParamSpec type. - * Normally, GParamSpec classes are filled by - * g_param_type_register_static(). - */ -struct _GParamSpecClass -{ - GTypeClass g_type_class; - - GType value_type; - - void (*finalize) (GParamSpec *pspec); - - /* GParam methods */ - void (*value_set_default) (GParamSpec *pspec, - GValue *value); - gboolean (*value_validate) (GParamSpec *pspec, - GValue *value); - gint (*values_cmp) (GParamSpec *pspec, - const GValue *value1, - const GValue *value2); - /*< private >*/ - gpointer dummy[4]; -}; -/** - * GParameter: - * @name: the parameter name - * @value: the parameter value - * - * The GParameter struct is an auxiliary structure used - * to hand parameter name/value pairs to g_object_newv(). - */ -struct _GParameter /* auxiliary structure for _setv() variants */ -{ - const gchar *name; - GValue value; -}; - - -/* --- prototypes --- */ -GParamSpec* g_param_spec_ref (GParamSpec *pspec); -void g_param_spec_unref (GParamSpec *pspec); -void g_param_spec_sink (GParamSpec *pspec); -GParamSpec* g_param_spec_ref_sink (GParamSpec *pspec); -gpointer g_param_spec_get_qdata (GParamSpec *pspec, - GQuark quark); -void g_param_spec_set_qdata (GParamSpec *pspec, - GQuark quark, - gpointer data); -void g_param_spec_set_qdata_full (GParamSpec *pspec, - GQuark quark, - gpointer data, - GDestroyNotify destroy); -gpointer g_param_spec_steal_qdata (GParamSpec *pspec, - GQuark quark); -GParamSpec* g_param_spec_get_redirect_target (GParamSpec *pspec); - -void g_param_value_set_default (GParamSpec *pspec, - GValue *value); -gboolean g_param_value_defaults (GParamSpec *pspec, - GValue *value); -gboolean g_param_value_validate (GParamSpec *pspec, - GValue *value); -gboolean g_param_value_convert (GParamSpec *pspec, - const GValue *src_value, - GValue *dest_value, - gboolean strict_validation); -gint g_param_values_cmp (GParamSpec *pspec, - const GValue *value1, - const GValue *value2); -const gchar * g_param_spec_get_name (GParamSpec *pspec); -const gchar * g_param_spec_get_nick (GParamSpec *pspec); -const gchar * g_param_spec_get_blurb (GParamSpec *pspec); -void g_value_set_param (GValue *value, - GParamSpec *param); -GParamSpec* g_value_get_param (const GValue *value); -GParamSpec* g_value_dup_param (const GValue *value); - - -void g_value_take_param (GValue *value, - GParamSpec *param); -GLIB_DEPRECATED_FOR(g_value_take_param) -void g_value_set_param_take_ownership (GValue *value, - GParamSpec *param); - -/* --- convenience functions --- */ -typedef struct _GParamSpecTypeInfo GParamSpecTypeInfo; -/** - * GParamSpecTypeInfo: - * @instance_size: Size of the instance (object) structure. - * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the slice allocator now. - * @instance_init: Location of the instance initialization function (optional). - * @value_type: The #GType of values conforming to this #GParamSpec - * @finalize: The instance finalization function (optional). - * @value_set_default: Resets a @value to the default value for @pspec - * (recommended, the default is g_value_reset()), see - * g_param_value_set_default(). - * @value_validate: Ensures that the contents of @value comply with the - * specifications set out by @pspec (optional), see - * g_param_value_validate(). - * @values_cmp: Compares @value1 with @value2 according to @pspec - * (recommended, the default is memcmp()), see g_param_values_cmp(). - * - * This structure is used to provide the type system with the information - * required to initialize and destruct (finalize) a parameter's class and - * instances thereof. - * The initialized structure is passed to the g_param_type_register_static() - * The type system will perform a deep copy of this structure, so its memory - * does not need to be persistent across invocation of - * g_param_type_register_static(). - */ -struct _GParamSpecTypeInfo -{ - /* type system portion */ - guint16 instance_size; /* obligatory */ - guint16 n_preallocs; /* optional */ - void (*instance_init) (GParamSpec *pspec); /* optional */ - - /* class portion */ - GType value_type; /* obligatory */ - void (*finalize) (GParamSpec *pspec); /* optional */ - void (*value_set_default) (GParamSpec *pspec, /* recommended */ - GValue *value); - gboolean (*value_validate) (GParamSpec *pspec, /* optional */ - GValue *value); - gint (*values_cmp) (GParamSpec *pspec, /* recommended */ - const GValue *value1, - const GValue *value2); -}; -GType g_param_type_register_static (const gchar *name, - const GParamSpecTypeInfo *pspec_info); - -/* For registering builting types */ -GType _g_param_type_register_static_constant (const gchar *name, - const GParamSpecTypeInfo *pspec_info, - GType opt_type); - - -/* --- protected --- */ -gpointer g_param_spec_internal (GType param_type, - const gchar *name, - const gchar *nick, - const gchar *blurb, - GParamFlags flags); -GParamSpecPool* g_param_spec_pool_new (gboolean type_prefixing); -void g_param_spec_pool_insert (GParamSpecPool *pool, - GParamSpec *pspec, - GType owner_type); -void g_param_spec_pool_remove (GParamSpecPool *pool, - GParamSpec *pspec); -GParamSpec* g_param_spec_pool_lookup (GParamSpecPool *pool, - const gchar *param_name, - GType owner_type, - gboolean walk_ancestors); -GList* g_param_spec_pool_list_owned (GParamSpecPool *pool, - GType owner_type); -GParamSpec** g_param_spec_pool_list (GParamSpecPool *pool, - GType owner_type, - guint *n_pspecs_p); - - - -/* contracts: - * - * gboolean value_validate (GParamSpec *pspec, - * GValue *value): - * modify value contents in the least destructive way, so - * that it complies with pspec's requirements (i.e. - * according to minimum/maximum ranges etc...). return - * whether modification was necessary. - * - * gint values_cmp (GParamSpec *pspec, - * const GValue *value1, - * const GValue *value2): - * return value1 - value2, i.e. (-1) if value1 < value2, - * (+1) if value1 > value2, and (0) otherwise (equality) - */ - -G_END_DECLS - -#endif /* __G_PARAM_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gparamspecs.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gparamspecs.h deleted file mode 100644 index 3e0ff6e3..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gparamspecs.h +++ /dev/null @@ -1,1143 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gparamspecs.h: GLib default param specs - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PARAMSPECS_H__ -#define __G_PARAMSPECS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_PARAM_CHAR: - * - * The #GType of #GParamSpecChar. - */ -#define G_TYPE_PARAM_CHAR (g_param_spec_types[0]) -/** - * G_IS_PARAM_SPEC_CHAR: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_CHAR. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_CHAR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_CHAR)) -/** - * G_PARAM_SPEC_CHAR: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecChar. - */ -#define G_PARAM_SPEC_CHAR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_CHAR, GParamSpecChar)) - -/** - * G_TYPE_PARAM_UCHAR: - * - * The #GType of #GParamSpecUChar. - */ -#define G_TYPE_PARAM_UCHAR (g_param_spec_types[1]) -/** - * G_IS_PARAM_SPEC_UCHAR: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UCHAR. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UCHAR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UCHAR)) -/** - * G_PARAM_SPEC_UCHAR: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUChar. - */ -#define G_PARAM_SPEC_UCHAR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UCHAR, GParamSpecUChar)) - -/** - * G_TYPE_PARAM_BOOLEAN: - * - * The #GType of #GParamSpecBoolean. - */ -#define G_TYPE_PARAM_BOOLEAN (g_param_spec_types[2]) -/** - * G_IS_PARAM_SPEC_BOOLEAN: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOOLEAN. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_BOOLEAN(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN)) -/** - * G_PARAM_SPEC_BOOLEAN: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecBoolean. - */ -#define G_PARAM_SPEC_BOOLEAN(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOOLEAN, GParamSpecBoolean)) - -/** - * G_TYPE_PARAM_INT: - * - * The #GType of #GParamSpecInt. - */ -#define G_TYPE_PARAM_INT (g_param_spec_types[3]) -/** - * G_IS_PARAM_SPEC_INT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_INT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT)) -/** - * G_PARAM_SPEC_INT: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecInt. - */ -#define G_PARAM_SPEC_INT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT, GParamSpecInt)) - -/** - * G_TYPE_PARAM_UINT: - * - * The #GType of #GParamSpecUInt. - */ -#define G_TYPE_PARAM_UINT (g_param_spec_types[4]) -/** - * G_IS_PARAM_SPEC_UINT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UINT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT)) -/** - * G_PARAM_SPEC_UINT: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUInt. - */ -#define G_PARAM_SPEC_UINT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT, GParamSpecUInt)) - -/** - * G_TYPE_PARAM_LONG: - * - * The #GType of #GParamSpecLong. - */ -#define G_TYPE_PARAM_LONG (g_param_spec_types[5]) -/** - * G_IS_PARAM_SPEC_LONG: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_LONG. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_LONG(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_LONG)) -/** - * G_PARAM_SPEC_LONG: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecLong. - */ -#define G_PARAM_SPEC_LONG(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_LONG, GParamSpecLong)) - -/** - * G_TYPE_PARAM_ULONG: - * - * The #GType of #GParamSpecULong. - */ -#define G_TYPE_PARAM_ULONG (g_param_spec_types[6]) -/** - * G_IS_PARAM_SPEC_ULONG: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ULONG. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_ULONG(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ULONG)) -/** - * G_PARAM_SPEC_ULONG: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecULong. - */ -#define G_PARAM_SPEC_ULONG(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ULONG, GParamSpecULong)) - -/** - * G_TYPE_PARAM_INT64: - * - * The #GType of #GParamSpecInt64. - */ -#define G_TYPE_PARAM_INT64 (g_param_spec_types[7]) -/** - * G_IS_PARAM_SPEC_INT64: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT64. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_INT64(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT64)) -/** - * G_PARAM_SPEC_INT64: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecInt64. - */ -#define G_PARAM_SPEC_INT64(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT64, GParamSpecInt64)) - -/** - * G_TYPE_PARAM_UINT64: - * - * The #GType of #GParamSpecUInt64. - */ -#define G_TYPE_PARAM_UINT64 (g_param_spec_types[8]) -/** - * G_IS_PARAM_SPEC_UINT64: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT64. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UINT64(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64)) -/** - * G_PARAM_SPEC_UINT64: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUInt64. - */ -#define G_PARAM_SPEC_UINT64(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT64, GParamSpecUInt64)) - -/** - * G_TYPE_PARAM_UNICHAR: - * - * The #GType of #GParamSpecUnichar. - */ -#define G_TYPE_PARAM_UNICHAR (g_param_spec_types[9]) -/** - * G_PARAM_SPEC_UNICHAR: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUnichar. - */ -#define G_PARAM_SPEC_UNICHAR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UNICHAR, GParamSpecUnichar)) -/** - * G_IS_PARAM_SPEC_UNICHAR: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UNICHAR. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UNICHAR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UNICHAR)) - -/** - * G_TYPE_PARAM_ENUM: - * - * The #GType of #GParamSpecEnum. - */ -#define G_TYPE_PARAM_ENUM (g_param_spec_types[10]) -/** - * G_IS_PARAM_SPEC_ENUM: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ENUM. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_ENUM(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM)) -/** - * G_PARAM_SPEC_ENUM: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecEnum. - */ -#define G_PARAM_SPEC_ENUM(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ENUM, GParamSpecEnum)) - -/** - * G_TYPE_PARAM_FLAGS: - * - * The #GType of #GParamSpecFlags. - */ -#define G_TYPE_PARAM_FLAGS (g_param_spec_types[11]) -/** - * G_IS_PARAM_SPEC_FLAGS: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLAGS. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_FLAGS(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS)) -/** - * G_PARAM_SPEC_FLAGS: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecFlags. - */ -#define G_PARAM_SPEC_FLAGS(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLAGS, GParamSpecFlags)) - -/** - * G_TYPE_PARAM_FLOAT: - * - * The #GType of #GParamSpecFloat. - */ -#define G_TYPE_PARAM_FLOAT (g_param_spec_types[12]) -/** - * G_IS_PARAM_SPEC_FLOAT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLOAT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_FLOAT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLOAT)) -/** - * G_PARAM_SPEC_FLOAT: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecFloat. - */ -#define G_PARAM_SPEC_FLOAT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLOAT, GParamSpecFloat)) - -/** - * G_TYPE_PARAM_DOUBLE: - * - * The #GType of #GParamSpecDouble. - */ -#define G_TYPE_PARAM_DOUBLE (g_param_spec_types[13]) -/** - * G_IS_PARAM_SPEC_DOUBLE: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_DOUBLE. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_DOUBLE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE)) -/** - * G_PARAM_SPEC_DOUBLE: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecDouble. - */ -#define G_PARAM_SPEC_DOUBLE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_DOUBLE, GParamSpecDouble)) - -/** - * G_TYPE_PARAM_STRING: - * - * The #GType of #GParamSpecString. - */ -#define G_TYPE_PARAM_STRING (g_param_spec_types[14]) -/** - * G_IS_PARAM_SPEC_STRING: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_STRING. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_STRING(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING)) -/** - * G_PARAM_SPEC_STRING: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecString. - */ -#define G_PARAM_SPEC_STRING(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_STRING, GParamSpecString)) - -/** - * G_TYPE_PARAM_PARAM: - * - * The #GType of #GParamSpecParam. - */ -#define G_TYPE_PARAM_PARAM (g_param_spec_types[15]) -/** - * G_IS_PARAM_SPEC_PARAM: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_PARAM. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_PARAM(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_PARAM)) -/** - * G_PARAM_SPEC_PARAM: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecParam. - */ -#define G_PARAM_SPEC_PARAM(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_PARAM, GParamSpecParam)) - -/** - * G_TYPE_PARAM_BOXED: - * - * The #GType of #GParamSpecBoxed. - */ -#define G_TYPE_PARAM_BOXED (g_param_spec_types[16]) -/** - * G_IS_PARAM_SPEC_BOXED: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOXED. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_BOXED(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED)) -/** - * G_PARAM_SPEC_BOXED: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecBoxed. - */ -#define G_PARAM_SPEC_BOXED(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOXED, GParamSpecBoxed)) - -/** - * G_TYPE_PARAM_POINTER: - * - * The #GType of #GParamSpecPointer. - */ -#define G_TYPE_PARAM_POINTER (g_param_spec_types[17]) -/** - * G_IS_PARAM_SPEC_POINTER: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_POINTER. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_POINTER(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER)) -/** - * G_PARAM_SPEC_POINTER: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecPointer. - */ -#define G_PARAM_SPEC_POINTER(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_POINTER, GParamSpecPointer)) - -/** - * G_TYPE_PARAM_VALUE_ARRAY: - * - * The #GType of #GParamSpecValueArray. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_TYPE_PARAM_VALUE_ARRAY (g_param_spec_types[18]) -/** - * G_IS_PARAM_SPEC_VALUE_ARRAY: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VALUE_ARRAY. - * - * Returns: %TRUE on success. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_IS_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VALUE_ARRAY)) -/** - * G_PARAM_SPEC_VALUE_ARRAY: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecValueArray. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VALUE_ARRAY, GParamSpecValueArray)) - -/** - * G_TYPE_PARAM_OBJECT: - * - * The #GType of #GParamSpecObject. - */ -#define G_TYPE_PARAM_OBJECT (g_param_spec_types[19]) -/** - * G_IS_PARAM_SPEC_OBJECT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OBJECT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_OBJECT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT)) -/** - * G_PARAM_SPEC_OBJECT: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecObject. - */ -#define G_PARAM_SPEC_OBJECT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OBJECT, GParamSpecObject)) - -/** - * G_TYPE_PARAM_OVERRIDE: - * - * The #GType of #GParamSpecOverride. - * - * Since: 2.4 - */ -#define G_TYPE_PARAM_OVERRIDE (g_param_spec_types[20]) -/** - * G_IS_PARAM_SPEC_OVERRIDE: - * @pspec: a #GParamSpec - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OVERRIDE. - * - * Since: 2.4 - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_OVERRIDE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OVERRIDE)) -/** - * G_PARAM_SPEC_OVERRIDE: - * @pspec: a #GParamSpec - * - * Casts a #GParamSpec into a #GParamSpecOverride. - * - * Since: 2.4 - */ -#define G_PARAM_SPEC_OVERRIDE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OVERRIDE, GParamSpecOverride)) - -/** - * G_TYPE_PARAM_GTYPE: - * - * The #GType of #GParamSpecGType. - * - * Since: 2.10 - */ -#define G_TYPE_PARAM_GTYPE (g_param_spec_types[21]) -/** - * G_IS_PARAM_SPEC_GTYPE: - * @pspec: a #GParamSpec - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_GTYPE. - * - * Since: 2.10 - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_GTYPE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_GTYPE)) -/** - * G_PARAM_SPEC_GTYPE: - * @pspec: a #GParamSpec - * - * Casts a #GParamSpec into a #GParamSpecGType. - * - * Since: 2.10 - */ -#define G_PARAM_SPEC_GTYPE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_GTYPE, GParamSpecGType)) - -/** - * G_TYPE_PARAM_VARIANT: - * - * The #GType of #GParamSpecVariant. - * - * Since: 2.26 - */ -#define G_TYPE_PARAM_VARIANT (g_param_spec_types[22]) -/** - * G_IS_PARAM_SPEC_VARIANT: - * @pspec: a #GParamSpec - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VARIANT. - * - * Returns: %TRUE on success - * - * Since: 2.26 - */ -#define G_IS_PARAM_SPEC_VARIANT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VARIANT)) -/** - * G_PARAM_SPEC_VARIANT: - * @pspec: a #GParamSpec - * - * Casts a #GParamSpec into a #GParamSpecVariant. - * - * Since: 2.26 - */ -#define G_PARAM_SPEC_VARIANT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VARIANT, GParamSpecVariant)) - -/* --- typedefs & structures --- */ -typedef struct _GParamSpecChar GParamSpecChar; -typedef struct _GParamSpecUChar GParamSpecUChar; -typedef struct _GParamSpecBoolean GParamSpecBoolean; -typedef struct _GParamSpecInt GParamSpecInt; -typedef struct _GParamSpecUInt GParamSpecUInt; -typedef struct _GParamSpecLong GParamSpecLong; -typedef struct _GParamSpecULong GParamSpecULong; -typedef struct _GParamSpecInt64 GParamSpecInt64; -typedef struct _GParamSpecUInt64 GParamSpecUInt64; -typedef struct _GParamSpecUnichar GParamSpecUnichar; -typedef struct _GParamSpecEnum GParamSpecEnum; -typedef struct _GParamSpecFlags GParamSpecFlags; -typedef struct _GParamSpecFloat GParamSpecFloat; -typedef struct _GParamSpecDouble GParamSpecDouble; -typedef struct _GParamSpecString GParamSpecString; -typedef struct _GParamSpecParam GParamSpecParam; -typedef struct _GParamSpecBoxed GParamSpecBoxed; -typedef struct _GParamSpecPointer GParamSpecPointer; -typedef struct _GParamSpecValueArray GParamSpecValueArray; -typedef struct _GParamSpecObject GParamSpecObject; -typedef struct _GParamSpecOverride GParamSpecOverride; -typedef struct _GParamSpecGType GParamSpecGType; -typedef struct _GParamSpecVariant GParamSpecVariant; - -/** - * GParamSpecChar: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for character properties. - */ -struct _GParamSpecChar -{ - GParamSpec parent_instance; - - gint8 minimum; - gint8 maximum; - gint8 default_value; -}; -/** - * GParamSpecUChar: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned character properties. - */ -struct _GParamSpecUChar -{ - GParamSpec parent_instance; - - guint8 minimum; - guint8 maximum; - guint8 default_value; -}; -/** - * GParamSpecBoolean: - * @parent_instance: private #GParamSpec portion - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for boolean properties. - */ -struct _GParamSpecBoolean -{ - GParamSpec parent_instance; - - gboolean default_value; -}; -/** - * GParamSpecInt: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for integer properties. - */ -struct _GParamSpecInt -{ - GParamSpec parent_instance; - - gint minimum; - gint maximum; - gint default_value; -}; -/** - * GParamSpecUInt: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned integer properties. - */ -struct _GParamSpecUInt -{ - GParamSpec parent_instance; - - guint minimum; - guint maximum; - guint default_value; -}; -/** - * GParamSpecLong: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for long integer properties. - */ -struct _GParamSpecLong -{ - GParamSpec parent_instance; - - glong minimum; - glong maximum; - glong default_value; -}; -/** - * GParamSpecULong: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned long integer properties. - */ -struct _GParamSpecULong -{ - GParamSpec parent_instance; - - gulong minimum; - gulong maximum; - gulong default_value; -}; -/** - * GParamSpecInt64: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for 64bit integer properties. - */ -struct _GParamSpecInt64 -{ - GParamSpec parent_instance; - - gint64 minimum; - gint64 maximum; - gint64 default_value; -}; -/** - * GParamSpecUInt64: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned 64bit integer properties. - */ -struct _GParamSpecUInt64 -{ - GParamSpec parent_instance; - - guint64 minimum; - guint64 maximum; - guint64 default_value; -}; -/** - * GParamSpecUnichar: - * @parent_instance: private #GParamSpec portion - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unichar (unsigned integer) properties. - */ -struct _GParamSpecUnichar -{ - GParamSpec parent_instance; - - gunichar default_value; -}; -/** - * GParamSpecEnum: - * @parent_instance: private #GParamSpec portion - * @enum_class: the #GEnumClass for the enum - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for enum - * properties. - */ -struct _GParamSpecEnum -{ - GParamSpec parent_instance; - - GEnumClass *enum_class; - gint default_value; -}; -/** - * GParamSpecFlags: - * @parent_instance: private #GParamSpec portion - * @flags_class: the #GFlagsClass for the flags - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for flags - * properties. - */ -struct _GParamSpecFlags -{ - GParamSpec parent_instance; - - GFlagsClass *flags_class; - guint default_value; -}; -/** - * GParamSpecFloat: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * @epsilon: values closer than @epsilon will be considered identical - * by g_param_values_cmp(); the default value is 1e-30. - * - * A #GParamSpec derived structure that contains the meta data for float properties. - */ -struct _GParamSpecFloat -{ - GParamSpec parent_instance; - - gfloat minimum; - gfloat maximum; - gfloat default_value; - gfloat epsilon; -}; -/** - * GParamSpecDouble: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * @epsilon: values closer than @epsilon will be considered identical - * by g_param_values_cmp(); the default value is 1e-90. - * - * A #GParamSpec derived structure that contains the meta data for double properties. - */ -struct _GParamSpecDouble -{ - GParamSpec parent_instance; - - gdouble minimum; - gdouble maximum; - gdouble default_value; - gdouble epsilon; -}; -/** - * GParamSpecString: - * @parent_instance: private #GParamSpec portion - * @default_value: default value for the property specified - * @cset_first: a string containing the allowed values for the first byte - * @cset_nth: a string containing the allowed values for the subsequent bytes - * @substitutor: the replacement byte for bytes which don't match @cset_first or @cset_nth. - * @null_fold_if_empty: replace empty string by %NULL - * @ensure_non_null: replace %NULL strings by an empty string - * - * A #GParamSpec derived structure that contains the meta data for string - * properties. - */ -struct _GParamSpecString -{ - GParamSpec parent_instance; - - gchar *default_value; - gchar *cset_first; - gchar *cset_nth; - gchar substitutor; - guint null_fold_if_empty : 1; - guint ensure_non_null : 1; -}; -/** - * GParamSpecParam: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for %G_TYPE_PARAM - * properties. - */ -struct _GParamSpecParam -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecBoxed: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for boxed properties. - */ -struct _GParamSpecBoxed -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecPointer: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for pointer properties. - */ -struct _GParamSpecPointer -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecValueArray: - * @parent_instance: private #GParamSpec portion - * @element_spec: a #GParamSpec describing the elements contained in arrays of this property, may be %NULL - * @fixed_n_elements: if greater than 0, arrays of this property will always have this many elements - * - * A #GParamSpec derived structure that contains the meta data for #GValueArray properties. - */ -struct _GParamSpecValueArray -{ - GParamSpec parent_instance; - GParamSpec *element_spec; - guint fixed_n_elements; -}; -/** - * GParamSpecObject: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for object properties. - */ -struct _GParamSpecObject -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecOverride: - * - * This is a type of #GParamSpec type that simply redirects operations to - * another paramspec. All operations other than getting or - * setting the value are redirected, including accessing the nick and - * blurb, validating a value, and so forth. See - * g_param_spec_get_redirect_target() for retrieving the overidden - * property. #GParamSpecOverride is used in implementing - * g_object_class_override_property(), and will not be directly useful - * unless you are implementing a new base type similar to GObject. - * - * Since: 2.4 - */ -struct _GParamSpecOverride -{ - /*< private >*/ - GParamSpec parent_instance; - GParamSpec *overridden; -}; -/** - * GParamSpecGType: - * @parent_instance: private #GParamSpec portion - * @is_a_type: a #GType whose subtypes can occur as values - * - * A #GParamSpec derived structure that contains the meta data for #GType properties. - * - * Since: 2.10 - */ -struct _GParamSpecGType -{ - GParamSpec parent_instance; - GType is_a_type; -}; -/** - * GParamSpecVariant: - * @parent_instance: private #GParamSpec portion - * @type: a #GVariantType, or %NULL - * @default_value: a #GVariant, or %NULL - * - * A #GParamSpec derived structure that contains the meta data for #GVariant properties. - * - * Since: 2.26 - */ -struct _GParamSpecVariant -{ - GParamSpec parent_instance; - GVariantType *type; - GVariant *default_value; - - /*< private >*/ - gpointer padding[4]; -}; - -/* --- GParamSpec prototypes --- */ -GParamSpec* g_param_spec_char (const gchar *name, - const gchar *nick, - const gchar *blurb, - gint8 minimum, - gint8 maximum, - gint8 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_uchar (const gchar *name, - const gchar *nick, - const gchar *blurb, - guint8 minimum, - guint8 maximum, - guint8 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_boolean (const gchar *name, - const gchar *nick, - const gchar *blurb, - gboolean default_value, - GParamFlags flags); -GParamSpec* g_param_spec_int (const gchar *name, - const gchar *nick, - const gchar *blurb, - gint minimum, - gint maximum, - gint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_uint (const gchar *name, - const gchar *nick, - const gchar *blurb, - guint minimum, - guint maximum, - guint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_long (const gchar *name, - const gchar *nick, - const gchar *blurb, - glong minimum, - glong maximum, - glong default_value, - GParamFlags flags); -GParamSpec* g_param_spec_ulong (const gchar *name, - const gchar *nick, - const gchar *blurb, - gulong minimum, - gulong maximum, - gulong default_value, - GParamFlags flags); -GParamSpec* g_param_spec_int64 (const gchar *name, - const gchar *nick, - const gchar *blurb, - gint64 minimum, - gint64 maximum, - gint64 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_uint64 (const gchar *name, - const gchar *nick, - const gchar *blurb, - guint64 minimum, - guint64 maximum, - guint64 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_unichar (const gchar *name, - const gchar *nick, - const gchar *blurb, - gunichar default_value, - GParamFlags flags); -GParamSpec* g_param_spec_enum (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType enum_type, - gint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_flags (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType flags_type, - guint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_float (const gchar *name, - const gchar *nick, - const gchar *blurb, - gfloat minimum, - gfloat maximum, - gfloat default_value, - GParamFlags flags); -GParamSpec* g_param_spec_double (const gchar *name, - const gchar *nick, - const gchar *blurb, - gdouble minimum, - gdouble maximum, - gdouble default_value, - GParamFlags flags); -GParamSpec* g_param_spec_string (const gchar *name, - const gchar *nick, - const gchar *blurb, - const gchar *default_value, - GParamFlags flags); -GParamSpec* g_param_spec_param (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType param_type, - GParamFlags flags); -GParamSpec* g_param_spec_boxed (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType boxed_type, - GParamFlags flags); -GParamSpec* g_param_spec_pointer (const gchar *name, - const gchar *nick, - const gchar *blurb, - GParamFlags flags); -GParamSpec* g_param_spec_value_array (const gchar *name, - const gchar *nick, - const gchar *blurb, - GParamSpec *element_spec, - GParamFlags flags); -GParamSpec* g_param_spec_object (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType object_type, - GParamFlags flags); -GParamSpec* g_param_spec_override (const gchar *name, - GParamSpec *overridden); -GParamSpec* g_param_spec_gtype (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType is_a_type, - GParamFlags flags); -GParamSpec* g_param_spec_variant (const gchar *name, - const gchar *nick, - const gchar *blurb, - const GVariantType *type, - GVariant *default_value, - GParamFlags flags); - -/* --- internal --- */ -/* We prefix variable declarations so they can - * properly get exported in windows dlls. - */ -#ifndef GOBJECT_VAR -# ifdef G_PLATFORM_WIN32 -# ifdef GOBJECT_STATIC_COMPILATION -# define GOBJECT_VAR extern -# else /* !GOBJECT_STATIC_COMPILATION */ -# ifdef GOBJECT_COMPILATION -# ifdef DLL_EXPORT -# define GOBJECT_VAR __declspec(dllexport) -# else /* !DLL_EXPORT */ -# define GOBJECT_VAR extern -# endif /* !DLL_EXPORT */ -# else /* !GOBJECT_COMPILATION */ -# define GOBJECT_VAR extern __declspec(dllimport) -# endif /* !GOBJECT_COMPILATION */ -# endif /* !GOBJECT_STATIC_COMPILATION */ -# else /* !G_PLATFORM_WIN32 */ -# define GOBJECT_VAR extern -# endif /* !G_PLATFORM_WIN32 */ -#endif /* GOBJECT_VAR */ - -GOBJECT_VAR GType *g_param_spec_types; - -G_END_DECLS - -#endif /* __G_PARAMSPECS_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gsignal.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gsignal.h deleted file mode 100644 index fbf1c19f..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gsignal.h +++ /dev/null @@ -1,547 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIGNAL_H__ -#define __G_SIGNAL_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* --- typedefs --- */ -typedef struct _GSignalQuery GSignalQuery; -typedef struct _GSignalInvocationHint GSignalInvocationHint; -/** - * GSignalCMarshaller: - * - * This is the signature of marshaller functions, required to marshall - * arrays of parameter values to signal emissions into C language callback - * invocations. It is merely an alias to #GClosureMarshal since the #GClosure - * mechanism takes over responsibility of actual function invocation for the - * signal system. - */ -typedef GClosureMarshal GSignalCMarshaller; -/** - * GSignalCVaMarshaller: - * - * This is the signature of va_list marshaller functions, an optional - * marshaller that can be used in some situations to avoid - * marshalling the signal argument into GValues. - */ -typedef GVaClosureMarshal GSignalCVaMarshaller; -/** - * GSignalEmissionHook: - * @ihint: Signal invocation hint, see #GSignalInvocationHint. - * @n_param_values: the number of parameters to the function, including - * the instance on which the signal was emitted. - * @param_values: (array length=n_param_values): the instance on which - * the signal was emitted, followed by the parameters of the emission. - * @data: user data associated with the hook. - * - * A simple function pointer to get invoked when the signal is emitted. This - * allows you to tie a hook to the signal type, so that it will trap all - * emissions of that signal, from any object. - * - * You may not attach these to signals created with the #G_SIGNAL_NO_HOOKS flag. - * - * Returns: whether it wants to stay connected. If it returns %FALSE, the signal - * hook is disconnected (and destroyed). - */ -typedef gboolean (*GSignalEmissionHook) (GSignalInvocationHint *ihint, - guint n_param_values, - const GValue *param_values, - gpointer data); -/** - * GSignalAccumulator: - * @ihint: Signal invocation hint, see #GSignalInvocationHint. - * @return_accu: Accumulator to collect callback return values in, this - * is the return value of the current signal emission. - * @handler_return: A #GValue holding the return value of the signal handler. - * @data: Callback data that was specified when creating the signal. - * - * The signal accumulator is a special callback function that can be used - * to collect return values of the various callbacks that are called - * during a signal emission. The signal accumulator is specified at signal - * creation time, if it is left %NULL, no accumulation of callback return - * values is performed. The return value of signal emissions is then the - * value returned by the last callback. - * - * Returns: The accumulator function returns whether the signal emission - * should be aborted. Returning %FALSE means to abort the - * current emission and %TRUE is returned for continuation. - */ -typedef gboolean (*GSignalAccumulator) (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer data); - - -/* --- run, match and connect types --- */ -/** - * GSignalFlags: - * @G_SIGNAL_RUN_FIRST: Invoke the object method handler in the first emission stage. - * @G_SIGNAL_RUN_LAST: Invoke the object method handler in the third emission stage. - * @G_SIGNAL_RUN_CLEANUP: Invoke the object method handler in the last emission stage. - * @G_SIGNAL_NO_RECURSE: Signals being emitted for an object while currently being in - * emission for this very object will not be emitted recursively, - * but instead cause the first emission to be restarted. - * @G_SIGNAL_DETAILED: This signal supports "::detail" appendices to the signal name - * upon handler connections and emissions. - * @G_SIGNAL_ACTION: Action signals are signals that may freely be emitted on alive - * objects from user code via g_signal_emit() and friends, without - * the need of being embedded into extra code that performs pre or - * post emission adjustments on the object. They can also be thought - * of as object methods which can be called generically by - * third-party code. - * @G_SIGNAL_NO_HOOKS: No emissions hooks are supported for this signal. - * @G_SIGNAL_MUST_COLLECT: Varargs signal emission will always collect the - * arguments, even if there are no signal handlers connected. Since 2.30. - * @G_SIGNAL_DEPRECATED: The signal is deprecated and will be removed - * in a future version. A warning will be generated if it is connected while - * running with G_ENABLE_DIAGNOSTIC=1. Since 2.32. - * - * The signal flags are used to specify a signal's behaviour, the overall - * signal description outlines how especially the RUN flags control the - * stages of a signal emission. - */ -typedef enum -{ - G_SIGNAL_RUN_FIRST = 1 << 0, - G_SIGNAL_RUN_LAST = 1 << 1, - G_SIGNAL_RUN_CLEANUP = 1 << 2, - G_SIGNAL_NO_RECURSE = 1 << 3, - G_SIGNAL_DETAILED = 1 << 4, - G_SIGNAL_ACTION = 1 << 5, - G_SIGNAL_NO_HOOKS = 1 << 6, - G_SIGNAL_MUST_COLLECT = 1 << 7, - G_SIGNAL_DEPRECATED = 1 << 8 -} GSignalFlags; -/** - * G_SIGNAL_FLAGS_MASK: - * - * A mask for all #GSignalFlags bits. - */ -#define G_SIGNAL_FLAGS_MASK 0x1ff -/** - * GConnectFlags: - * @G_CONNECT_AFTER: whether the handler should be called before or after the - * default handler of the signal. - * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when - * calling the handler. - * - * The connection flags are used to specify the behaviour of a signal's - * connection. - */ -typedef enum -{ - G_CONNECT_AFTER = 1 << 0, - G_CONNECT_SWAPPED = 1 << 1 -} GConnectFlags; -/** - * GSignalMatchType: - * @G_SIGNAL_MATCH_ID: The signal id must be equal. - * @G_SIGNAL_MATCH_DETAIL: The signal detail be equal. - * @G_SIGNAL_MATCH_CLOSURE: The closure must be the same. - * @G_SIGNAL_MATCH_FUNC: The C closure callback must be the same. - * @G_SIGNAL_MATCH_DATA: The closure data must be the same. - * @G_SIGNAL_MATCH_UNBLOCKED: Only unblocked signals may matched. - * - * The match types specify what g_signal_handlers_block_matched(), - * g_signal_handlers_unblock_matched() and g_signal_handlers_disconnect_matched() - * match signals by. - */ -typedef enum -{ - G_SIGNAL_MATCH_ID = 1 << 0, - G_SIGNAL_MATCH_DETAIL = 1 << 1, - G_SIGNAL_MATCH_CLOSURE = 1 << 2, - G_SIGNAL_MATCH_FUNC = 1 << 3, - G_SIGNAL_MATCH_DATA = 1 << 4, - G_SIGNAL_MATCH_UNBLOCKED = 1 << 5 -} GSignalMatchType; -/** - * G_SIGNAL_MATCH_MASK: - * - * A mask for all #GSignalMatchType bits. - */ -#define G_SIGNAL_MATCH_MASK 0x3f -/** - * G_SIGNAL_TYPE_STATIC_SCOPE: - * - * This macro flags signal argument types for which the signal system may - * assume that instances thereof remain persistent across all signal emissions - * they are used in. This is only useful for non ref-counted, value-copy types. - * - * To flag a signal argument in this way, add - * | G_SIGNAL_TYPE_STATIC_SCOPE to the corresponding argument - * of g_signal_new(). - * |[ - * g_signal_new ("size_request", - * G_TYPE_FROM_CLASS (gobject_class), - * G_SIGNAL_RUN_FIRST, - * G_STRUCT_OFFSET (GtkWidgetClass, size_request), - * NULL, NULL, - * _gtk_marshal_VOID__BOXED, - * G_TYPE_NONE, 1, - * GTK_TYPE_REQUISITION | G_SIGNAL_TYPE_STATIC_SCOPE); - * ]| - */ -#define G_SIGNAL_TYPE_STATIC_SCOPE (G_TYPE_FLAG_RESERVED_ID_BIT) - - -/* --- signal information --- */ -/** - * GSignalInvocationHint: - * @signal_id: The signal id of the signal invoking the callback - * @detail: The detail passed on for this emission - * @run_type: The stage the signal emission is currently in, this - * field will contain one of %G_SIGNAL_RUN_FIRST, - * %G_SIGNAL_RUN_LAST or %G_SIGNAL_RUN_CLEANUP. - * - * The #GSignalInvocationHint structure is used to pass on additional information - * to callbacks during a signal emission. - */ -struct _GSignalInvocationHint -{ - guint signal_id; - GQuark detail; - GSignalFlags run_type; -}; -/** - * GSignalQuery: - * @signal_id: The signal id of the signal being queried, or 0 if the - * signal to be queried was unknown. - * @signal_name: The signal name. - * @itype: The interface/instance type that this signal can be emitted for. - * @signal_flags: The signal flags as passed in to g_signal_new(). - * @return_type: The return type for user callbacks. - * @n_params: The number of parameters that user callbacks take. - * @param_types: (array length=n_params): The individual parameter types for - * user callbacks, note that the effective callback signature is: - * - * @return_type callback (#gpointer data1, - * [param_types param_names,] - * gpointer data2); - * - * - * A structure holding in-depth information for a specific signal. It is - * filled in by the g_signal_query() function. - */ -struct _GSignalQuery -{ - guint signal_id; - const gchar *signal_name; - GType itype; - GSignalFlags signal_flags; - GType return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ - guint n_params; - const GType *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ -}; - - -/* --- signals --- */ -guint g_signal_newv (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - GClosure *class_closure, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - GType *param_types); -guint g_signal_new_valist (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - GClosure *class_closure, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - va_list args); -guint g_signal_new (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - guint class_offset, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - ...); -guint g_signal_new_class_handler (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - GCallback class_handler, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - ...); -void g_signal_set_va_marshaller (guint signal_id, - GType instance_type, - GSignalCVaMarshaller va_marshaller); - -void g_signal_emitv (const GValue *instance_and_params, - guint signal_id, - GQuark detail, - GValue *return_value); -void g_signal_emit_valist (gpointer instance, - guint signal_id, - GQuark detail, - va_list var_args); -void g_signal_emit (gpointer instance, - guint signal_id, - GQuark detail, - ...); -void g_signal_emit_by_name (gpointer instance, - const gchar *detailed_signal, - ...); -guint g_signal_lookup (const gchar *name, - GType itype); -const gchar * g_signal_name (guint signal_id); -void g_signal_query (guint signal_id, - GSignalQuery *query); -guint* g_signal_list_ids (GType itype, - guint *n_ids); -gboolean g_signal_parse_name (const gchar *detailed_signal, - GType itype, - guint *signal_id_p, - GQuark *detail_p, - gboolean force_detail_quark); -GSignalInvocationHint* g_signal_get_invocation_hint (gpointer instance); - - -/* --- signal emissions --- */ -void g_signal_stop_emission (gpointer instance, - guint signal_id, - GQuark detail); -void g_signal_stop_emission_by_name (gpointer instance, - const gchar *detailed_signal); -gulong g_signal_add_emission_hook (guint signal_id, - GQuark detail, - GSignalEmissionHook hook_func, - gpointer hook_data, - GDestroyNotify data_destroy); -void g_signal_remove_emission_hook (guint signal_id, - gulong hook_id); - - -/* --- signal handlers --- */ -gboolean g_signal_has_handler_pending (gpointer instance, - guint signal_id, - GQuark detail, - gboolean may_be_blocked); -gulong g_signal_connect_closure_by_id (gpointer instance, - guint signal_id, - GQuark detail, - GClosure *closure, - gboolean after); -gulong g_signal_connect_closure (gpointer instance, - const gchar *detailed_signal, - GClosure *closure, - gboolean after); -gulong g_signal_connect_data (gpointer instance, - const gchar *detailed_signal, - GCallback c_handler, - gpointer data, - GClosureNotify destroy_data, - GConnectFlags connect_flags); -void g_signal_handler_block (gpointer instance, - gulong handler_id); -void g_signal_handler_unblock (gpointer instance, - gulong handler_id); -void g_signal_handler_disconnect (gpointer instance, - gulong handler_id); -gboolean g_signal_handler_is_connected (gpointer instance, - gulong handler_id); -gulong g_signal_handler_find (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint g_signal_handlers_block_matched (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint g_signal_handlers_unblock_matched (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint g_signal_handlers_disconnect_matched (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); - - -/* --- overriding and chaining --- */ -void g_signal_override_class_closure (guint signal_id, - GType instance_type, - GClosure *class_closure); -void g_signal_override_class_handler (const gchar *signal_name, - GType instance_type, - GCallback class_handler); -void g_signal_chain_from_overridden (const GValue *instance_and_params, - GValue *return_value); -void g_signal_chain_from_overridden_handler (gpointer instance, - ...); - - -/* --- convenience --- */ -/** - * g_signal_connect: - * @instance: the instance to connect to. - * @detailed_signal: a string of the form "signal-name::detail". - * @c_handler: the #GCallback to connect. - * @data: data to pass to @c_handler calls. - * - * Connects a #GCallback function to a signal for a particular object. - * - * The handler will be called before the default handler of the signal. - * - * Returns: the handler id - */ -#define g_signal_connect(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0) -/** - * g_signal_connect_after: - * @instance: the instance to connect to. - * @detailed_signal: a string of the form "signal-name::detail". - * @c_handler: the #GCallback to connect. - * @data: data to pass to @c_handler calls. - * - * Connects a #GCallback function to a signal for a particular object. - * - * The handler will be called after the default handler of the signal. - * - * Returns: the handler id - */ -#define g_signal_connect_after(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_AFTER) -/** - * g_signal_connect_swapped: - * @instance: the instance to connect to. - * @detailed_signal: a string of the form "signal-name::detail". - * @c_handler: the #GCallback to connect. - * @data: data to pass to @c_handler calls. - * - * Connects a #GCallback function to a signal for a particular object. - * - * The instance on which the signal is emitted and @data will be swapped when - * calling the handler. - * - * Returns: the handler id - */ -#define g_signal_connect_swapped(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_SWAPPED) -/** - * g_signal_handlers_disconnect_by_func: - * @instance: The instance to remove handlers from. - * @func: The C closure callback of the handlers (useless for non-C closures). - * @data: The closure data of the handlers' closures. - * - * Disconnects all handlers on an instance that match @func and @data. - * - * Returns: The number of handlers that matched. - */ -#define g_signal_handlers_disconnect_by_func(instance, func, data) \ - g_signal_handlers_disconnect_matched ((instance), \ - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), \ - 0, 0, NULL, (func), (data)) - -/** - * g_signal_handlers_disconnect_by_data: - * @instance: The instance to remove handlers from - * @data: the closure data of the handlers' closures - * - * Disconnects all handlers on an instance that match @data. - * - * Returns: The number of handlers that matched. - * - * Since: 2.32 - */ -#define g_signal_handlers_disconnect_by_data(instance, data) \ - g_signal_handlers_disconnect_matched ((instance), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, (data)) - -/** - * g_signal_handlers_block_by_func: - * @instance: The instance to block handlers from. - * @func: The C closure callback of the handlers (useless for non-C closures). - * @data: The closure data of the handlers' closures. - * - * Blocks all handlers on an instance that match @func and @data. - * - * Returns: The number of handlers that matched. - */ -#define g_signal_handlers_block_by_func(instance, func, data) \ - g_signal_handlers_block_matched ((instance), \ - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), \ - 0, 0, NULL, (func), (data)) -/** - * g_signal_handlers_unblock_by_func: - * @instance: The instance to unblock handlers from. - * @func: The C closure callback of the handlers (useless for non-C closures). - * @data: The closure data of the handlers' closures. - * - * Unblocks all handlers on an instance that match @func and @data. - * - * Returns: The number of handlers that matched. - */ -#define g_signal_handlers_unblock_by_func(instance, func, data) \ - g_signal_handlers_unblock_matched ((instance), \ - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), \ - 0, 0, NULL, (func), (data)) - - -gboolean g_signal_accumulator_true_handled (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer dummy); - -gboolean g_signal_accumulator_first_wins (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer dummy); - -/*< private >*/ -void g_signal_handlers_destroy (gpointer instance); -void _g_signals_destroy (GType itype); - -G_END_DECLS - -#endif /* __G_SIGNAL_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gsourceclosure.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gsourceclosure.h deleted file mode 100644 index 3cfdacd5..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gsourceclosure.h +++ /dev/null @@ -1,38 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOURCECLOSURE_H__ -#define __G_SOURCECLOSURE_H__ - -#include -#include - -G_BEGIN_DECLS - -void g_source_set_closure (GSource *source, - GClosure *closure); - -void g_source_set_dummy_callback (GSource *source); - -G_END_DECLS - -#endif /* __G_SOURCECLOSURE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gtype.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gtype.h deleted file mode 100644 index 14206edf..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gtype.h +++ /dev/null @@ -1,1727 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPE_H__ -#define __G_TYPE_H__ - -#include - -G_BEGIN_DECLS - -/* Basic Type Macros - */ -/** - * G_TYPE_FUNDAMENTAL: - * @type: A #GType value. - * - * The fundamental type which is the ancestor of @type. - * Fundamental types are types that serve as ultimate bases for the derived types, - * thus they are the roots of distinct inheritance hierarchies. - */ -#define G_TYPE_FUNDAMENTAL(type) (g_type_fundamental (type)) -/** - * G_TYPE_FUNDAMENTAL_MAX: - * - * An integer constant that represents the number of identifiers reserved - * for types that are assigned at compile-time. - */ -#define G_TYPE_FUNDAMENTAL_MAX (255 << G_TYPE_FUNDAMENTAL_SHIFT) - -/* Constant fundamental types, - * introduced by g_type_init(). - */ -/** - * G_TYPE_INVALID: - * - * An invalid #GType used as error return value in some functions which return - * a #GType. - */ -#define G_TYPE_INVALID G_TYPE_MAKE_FUNDAMENTAL (0) -/** - * G_TYPE_NONE: - * - * A fundamental type which is used as a replacement for the C - * void return type. - */ -#define G_TYPE_NONE G_TYPE_MAKE_FUNDAMENTAL (1) -/** - * G_TYPE_INTERFACE: - * - * The fundamental type from which all interfaces are derived. - */ -#define G_TYPE_INTERFACE G_TYPE_MAKE_FUNDAMENTAL (2) -/** - * G_TYPE_CHAR: - * - * The fundamental type corresponding to #gchar. - * The type designated by G_TYPE_CHAR is unconditionally an 8-bit signed integer. - * This may or may not be the same type a the C type "gchar". - */ -#define G_TYPE_CHAR G_TYPE_MAKE_FUNDAMENTAL (3) -/** - * G_TYPE_UCHAR: - * - * The fundamental type corresponding to #guchar. - */ -#define G_TYPE_UCHAR G_TYPE_MAKE_FUNDAMENTAL (4) -/** - * G_TYPE_BOOLEAN: - * - * The fundamental type corresponding to #gboolean. - */ -#define G_TYPE_BOOLEAN G_TYPE_MAKE_FUNDAMENTAL (5) -/** - * G_TYPE_INT: - * - * The fundamental type corresponding to #gint. - */ -#define G_TYPE_INT G_TYPE_MAKE_FUNDAMENTAL (6) -/** - * G_TYPE_UINT: - * - * The fundamental type corresponding to #guint. - */ -#define G_TYPE_UINT G_TYPE_MAKE_FUNDAMENTAL (7) -/** - * G_TYPE_LONG: - * - * The fundamental type corresponding to #glong. - */ -#define G_TYPE_LONG G_TYPE_MAKE_FUNDAMENTAL (8) -/** - * G_TYPE_ULONG: - * - * The fundamental type corresponding to #gulong. - */ -#define G_TYPE_ULONG G_TYPE_MAKE_FUNDAMENTAL (9) -/** - * G_TYPE_INT64: - * - * The fundamental type corresponding to #gint64. - */ -#define G_TYPE_INT64 G_TYPE_MAKE_FUNDAMENTAL (10) -/** - * G_TYPE_UINT64: - * - * The fundamental type corresponding to #guint64. - */ -#define G_TYPE_UINT64 G_TYPE_MAKE_FUNDAMENTAL (11) -/** - * G_TYPE_ENUM: - * - * The fundamental type from which all enumeration types are derived. - */ -#define G_TYPE_ENUM G_TYPE_MAKE_FUNDAMENTAL (12) -/** - * G_TYPE_FLAGS: - * - * The fundamental type from which all flags types are derived. - */ -#define G_TYPE_FLAGS G_TYPE_MAKE_FUNDAMENTAL (13) -/** - * G_TYPE_FLOAT: - * - * The fundamental type corresponding to #gfloat. - */ -#define G_TYPE_FLOAT G_TYPE_MAKE_FUNDAMENTAL (14) -/** - * G_TYPE_DOUBLE: - * - * The fundamental type corresponding to #gdouble. - */ -#define G_TYPE_DOUBLE G_TYPE_MAKE_FUNDAMENTAL (15) -/** - * G_TYPE_STRING: - * - * The fundamental type corresponding to nul-terminated C strings. - */ -#define G_TYPE_STRING G_TYPE_MAKE_FUNDAMENTAL (16) -/** - * G_TYPE_POINTER: - * - * The fundamental type corresponding to #gpointer. - */ -#define G_TYPE_POINTER G_TYPE_MAKE_FUNDAMENTAL (17) -/** - * G_TYPE_BOXED: - * - * The fundamental type from which all boxed types are derived. - */ -#define G_TYPE_BOXED G_TYPE_MAKE_FUNDAMENTAL (18) -/** - * G_TYPE_PARAM: - * - * The fundamental type from which all #GParamSpec types are derived. - */ -#define G_TYPE_PARAM G_TYPE_MAKE_FUNDAMENTAL (19) -/** - * G_TYPE_OBJECT: - * - * The fundamental type for #GObject. - */ -#define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL (20) -/** - * G_TYPE_VARIANT: - * - * The fundamental type corresponding to #GVariant. - * - * All floating #GVariant instances passed through the #GType system are - * consumed. - * - * Note that callbacks in closures, and signal handlers - * for signals of return type %G_TYPE_VARIANT, must never return floating - * variants. - * - * Note: GLib 2.24 did include a boxed type with this name. It was replaced - * with this fundamental type in 2.26. - * - * Since: 2.26 - */ -#define G_TYPE_VARIANT G_TYPE_MAKE_FUNDAMENTAL (21) - - -/* Reserved fundamental type numbers to create new fundamental - * type IDs with G_TYPE_MAKE_FUNDAMENTAL(). - * Send email to gtk-devel-list@gnome.org for reservations. - */ -/** - * G_TYPE_FUNDAMENTAL_SHIFT: - * - * Shift value used in converting numbers to type IDs. - */ -#define G_TYPE_FUNDAMENTAL_SHIFT (2) -/** - * G_TYPE_MAKE_FUNDAMENTAL: - * @x: the fundamental type number. - * - * Get the type ID for the fundamental type number @x. - * Use g_type_fundamental_next() instead of this macro to create new fundamental - * types. - * - * Returns: the GType - */ -#define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT)) -/** - * G_TYPE_RESERVED_GLIB_FIRST: - * - * First fundamental type number to create a new fundamental type id with - * G_TYPE_MAKE_FUNDAMENTAL() reserved for GLib. - */ -#define G_TYPE_RESERVED_GLIB_FIRST (22) -/** - * G_TYPE_RESERVED_GLIB_LAST: - * - * Last fundamental type number reserved for GLib. - */ -#define G_TYPE_RESERVED_GLIB_LAST (31) -/** - * G_TYPE_RESERVED_BSE_FIRST: - * - * First fundamental type number to create a new fundamental type id with - * G_TYPE_MAKE_FUNDAMENTAL() reserved for BSE. - */ -#define G_TYPE_RESERVED_BSE_FIRST (32) -/** - * G_TYPE_RESERVED_BSE_LAST: - * - * Last fundamental type number reserved for BSE. - */ -#define G_TYPE_RESERVED_BSE_LAST (48) -/** - * G_TYPE_RESERVED_USER_FIRST: - * - * First available fundamental type number to create new fundamental - * type id with G_TYPE_MAKE_FUNDAMENTAL(). - */ -#define G_TYPE_RESERVED_USER_FIRST (49) - - -/* Type Checking Macros - */ -/** - * G_TYPE_IS_FUNDAMENTAL: - * @type: A #GType value. - * - * Checks if @type is a fundamental type. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_FUNDAMENTAL(type) ((type) <= G_TYPE_FUNDAMENTAL_MAX) -/** - * G_TYPE_IS_DERIVED: - * @type: A #GType value. - * - * Checks if @type is derived (or in object-oriented terminology: - * inherited) from another type (this holds true for all non-fundamental - * types). - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_DERIVED(type) ((type) > G_TYPE_FUNDAMENTAL_MAX) -/** - * G_TYPE_IS_INTERFACE: - * @type: A #GType value. - * - * Checks if @type is an interface type. - * An interface type provides a pure API, the implementation - * of which is provided by another type (which is then said to conform - * to the interface). GLib interfaces are somewhat analogous to Java - * interfaces and C++ classes containing only pure virtual functions, - * with the difference that GType interfaces are not derivable (but see - * g_type_interface_add_prerequisite() for an alternative). - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_INTERFACE(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_INTERFACE) -/** - * G_TYPE_IS_CLASSED: - * @type: A #GType value. - * - * Checks if @type is a classed type. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_CLASSED(type) (g_type_test_flags ((type), G_TYPE_FLAG_CLASSED)) -/** - * G_TYPE_IS_INSTANTIATABLE: - * @type: A #GType value. - * - * Checks if @type can be instantiated. Instantiation is the - * process of creating an instance (object) of this type. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_INSTANTIATABLE(type) (g_type_test_flags ((type), G_TYPE_FLAG_INSTANTIATABLE)) -/** - * G_TYPE_IS_DERIVABLE: - * @type: A #GType value. - * - * Checks if @type is a derivable type. A derivable type can - * be used as the base class of a flat (single-level) class hierarchy. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_DERIVABLE(type) (g_type_test_flags ((type), G_TYPE_FLAG_DERIVABLE)) -/** - * G_TYPE_IS_DEEP_DERIVABLE: - * @type: A #GType value. - * - * Checks if @type is a deep derivable type. A deep derivable type - * can be used as the base class of a deep (multi-level) class hierarchy. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_DEEP_DERIVABLE(type) (g_type_test_flags ((type), G_TYPE_FLAG_DEEP_DERIVABLE)) -/** - * G_TYPE_IS_ABSTRACT: - * @type: A #GType value. - * - * Checks if @type is an abstract type. An abstract type cannot be - * instantiated and is normally used as an abstract base class for - * derived classes. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT)) -/** - * G_TYPE_IS_VALUE_ABSTRACT: - * @type: A #GType value. - * - * Checks if @type is an abstract value type. An abstract value type introduces - * a value table, but can't be used for g_value_init() and is normally used as - * an abstract base type for derived value types. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_VALUE_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_VALUE_ABSTRACT)) -/** - * G_TYPE_IS_VALUE_TYPE: - * @type: A #GType value. - * - * Checks if @type is a value type and can be used with g_value_init(). - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_VALUE_TYPE(type) (g_type_check_is_value_type (type)) -/** - * G_TYPE_HAS_VALUE_TABLE: - * @type: A #GType value. - * - * Checks if @type has a #GTypeValueTable. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_HAS_VALUE_TABLE(type) (g_type_value_table_peek (type) != NULL) - - -/* Typedefs - */ -/** - * GType: - * - * A numerical value which represents the unique identifier of a registered - * type. - */ -#if GLIB_SIZEOF_SIZE_T != GLIB_SIZEOF_LONG || !defined __cplusplus -typedef gsize GType; -#else /* for historic reasons, C++ links against gulong GTypes */ -typedef gulong GType; -#endif -typedef struct _GValue GValue; -typedef union _GTypeCValue GTypeCValue; -typedef struct _GTypePlugin GTypePlugin; -typedef struct _GTypeClass GTypeClass; -typedef struct _GTypeInterface GTypeInterface; -typedef struct _GTypeInstance GTypeInstance; -typedef struct _GTypeInfo GTypeInfo; -typedef struct _GTypeFundamentalInfo GTypeFundamentalInfo; -typedef struct _GInterfaceInfo GInterfaceInfo; -typedef struct _GTypeValueTable GTypeValueTable; -typedef struct _GTypeQuery GTypeQuery; - - -/* Basic Type Structures - */ -/** - * GTypeClass: - * - * An opaque structure used as the base of all classes. - */ -struct _GTypeClass -{ - /*< private >*/ - GType g_type; -}; -/** - * GTypeInstance: - * - * An opaque structure used as the base of all type instances. - */ -struct _GTypeInstance -{ - /*< private >*/ - GTypeClass *g_class; -}; -/** - * GTypeInterface: - * - * An opaque structure used as the base of all interface types. - */ -struct _GTypeInterface -{ - /*< private >*/ - GType g_type; /* iface type */ - GType g_instance_type; -}; -/** - * GTypeQuery: - * @type: the #GType value of the type. - * @type_name: the name of the type. - * @class_size: the size of the class structure. - * @instance_size: the size of the instance structure. - * - * A structure holding information for a specific type. It is - * filled in by the g_type_query() function. - */ -struct _GTypeQuery -{ - GType type; - const gchar *type_name; - guint class_size; - guint instance_size; -}; - - -/* Casts, checks and accessors for structured types - * usage of these macros is reserved to type implementations only - */ -/*< protected >*/ -/** - * G_TYPE_CHECK_INSTANCE: - * @instance: Location of a #GTypeInstance structure. - * - * Checks if @instance is a valid #GTypeInstance structure, - * otherwise issues a warning and returns %FALSE. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_INSTANCE(instance) (_G_TYPE_CHI ((GTypeInstance*) (instance))) -/** - * G_TYPE_CHECK_INSTANCE_CAST: - * @instance: Location of a #GTypeInstance structure. - * @g_type: The type to be returned. - * @c_type: The corresponding C type of @g_type. - * - * Checks that @instance is an instance of the type identified by @g_type - * and issues a warning if this is not the case. Returns @instance casted - * to a pointer to @c_type. - * - * This macro should only be used in type implementations. - */ -#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type) (_G_TYPE_CIC ((instance), (g_type), c_type)) -/** - * G_TYPE_CHECK_INSTANCE_TYPE: - * @instance: Location of a #GTypeInstance structure. - * @g_type: The type to be checked - * - * Checks if @instance is an instance of the type identified by @g_type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type) (_G_TYPE_CIT ((instance), (g_type))) -/** - * G_TYPE_INSTANCE_GET_CLASS: - * @instance: Location of the #GTypeInstance structure. - * @g_type: The #GType of the class to be returned. - * @c_type: The C type of the class structure. - * - * Get the class structure of a given @instance, casted - * to a specified ancestor type @g_type of the instance. - * - * Note that while calling a GInstanceInitFunc(), the class pointer gets - * modified, so it might not always return the expected pointer. - * - * This macro should only be used in type implementations. - * - * Returns: a pointer to the class structure - */ -#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type) (_G_TYPE_IGC ((instance), (g_type), c_type)) -/** - * G_TYPE_INSTANCE_GET_INTERFACE: - * @instance: Location of the #GTypeInstance structure. - * @g_type: The #GType of the interface to be returned. - * @c_type: The C type of the interface structure. - * - * Get the interface structure for interface @g_type of a given @instance. - * - * This macro should only be used in type implementations. - * - * Returns: a pointer to the interface structure - */ -#define G_TYPE_INSTANCE_GET_INTERFACE(instance, g_type, c_type) (_G_TYPE_IGI ((instance), (g_type), c_type)) -/** - * G_TYPE_CHECK_CLASS_CAST: - * @g_class: Location of a #GTypeClass structure. - * @g_type: The type to be returned. - * @c_type: The corresponding C type of class structure of @g_type. - * - * Checks that @g_class is a class structure of the type identified by @g_type - * and issues a warning if this is not the case. Returns @g_class casted - * to a pointer to @c_type. - * - * This macro should only be used in type implementations. - */ -#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type) (_G_TYPE_CCC ((g_class), (g_type), c_type)) -/** - * G_TYPE_CHECK_CLASS_TYPE: - * @g_class: Location of a #GTypeClass structure. - * @g_type: The type to be checked. - * - * Checks if @g_class is a class structure of the type identified by - * @g_type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_CLASS_TYPE(g_class, g_type) (_G_TYPE_CCT ((g_class), (g_type))) -/** - * G_TYPE_CHECK_VALUE: - * @value: a #GValue - * - * Checks if @value has been initialized to hold values - * of a value type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_VALUE(value) (_G_TYPE_CHV ((value))) -/** - * G_TYPE_CHECK_VALUE_TYPE: - * @value: a #GValue - * @g_type: The type to be checked. - * - * Checks if @value has been initialized to hold values - * of type @g_type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_VALUE_TYPE(value, g_type) (_G_TYPE_CVH ((value), (g_type))) -/** - * G_TYPE_FROM_INSTANCE: - * @instance: Location of a valid #GTypeInstance structure. - * - * Get the type identifier from a given @instance structure. - * - * This macro should only be used in type implementations. - * - * Returns: the #GType - */ -#define G_TYPE_FROM_INSTANCE(instance) (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class)) -/** - * G_TYPE_FROM_CLASS: - * @g_class: Location of a valid #GTypeClass structure. - * - * Get the type identifier from a given @class structure. - * - * This macro should only be used in type implementations. - * - * Returns: the #GType - */ -#define G_TYPE_FROM_CLASS(g_class) (((GTypeClass*) (g_class))->g_type) -/** - * G_TYPE_FROM_INTERFACE: - * @g_iface: Location of a valid #GTypeInterface structure. - * - * Get the type identifier from a given @interface structure. - * - * This macro should only be used in type implementations. - * - * Returns: the #GType - */ -#define G_TYPE_FROM_INTERFACE(g_iface) (((GTypeInterface*) (g_iface))->g_type) - -/** - * G_TYPE_INSTANCE_GET_PRIVATE: - * @instance: the instance of a type deriving from @private_type. - * @g_type: the type identifying which private data to retrieve. - * @c_type: The C type for the private structure. - * - * Gets the private structure for a particular type. - * The private structure must have been registered in the - * class_init function with g_type_class_add_private(). - * - * This macro should only be used in type implementations. - * - * Since: 2.4 - * Returns: a pointer to the private data structure. - */ -#define G_TYPE_INSTANCE_GET_PRIVATE(instance, g_type, c_type) ((c_type*) g_type_instance_get_private ((GTypeInstance*) (instance), (g_type))) - -/** - * G_TYPE_CLASS_GET_PRIVATE: - * @klass: the class of a type deriving from @private_type. - * @g_type: the type identifying which private data to retrieve. - * @c_type: The C type for the private structure. - * - * Gets the private class structure for a particular type. - * The private structure must have been registered in the - * get_type() function with g_type_add_class_private(). - * - * This macro should only be used in type implementations. - * - * Since: 2.24 - * Returns: a pointer to the private data structure. - */ -#define G_TYPE_CLASS_GET_PRIVATE(klass, g_type, c_type) ((c_type*) g_type_class_get_private ((GTypeClass*) (klass), (g_type))) - -/** - * GTypeDebugFlags: - * @G_TYPE_DEBUG_NONE: Print no messages. - * @G_TYPE_DEBUG_OBJECTS: Print messages about object bookkeeping. - * @G_TYPE_DEBUG_SIGNALS: Print messages about signal emissions. - * @G_TYPE_DEBUG_MASK: Mask covering all debug flags. - * - * The GTypeDebugFlags enumeration values can be passed to - * g_type_init_with_debug_flags() to trigger debugging messages during runtime. - * Note that the messages can also be triggered by setting the - * GOBJECT_DEBUG environment variable to a ':'-separated list of - * "objects" and "signals". - */ -typedef enum /*< skip >*/ -{ - G_TYPE_DEBUG_NONE = 0, - G_TYPE_DEBUG_OBJECTS = 1 << 0, - G_TYPE_DEBUG_SIGNALS = 1 << 1, - G_TYPE_DEBUG_MASK = 0x03 -} GTypeDebugFlags; - - -/* --- prototypes --- */ -void g_type_init (void); -void g_type_init_with_debug_flags (GTypeDebugFlags debug_flags); -const gchar * g_type_name (GType type); -GQuark g_type_qname (GType type); -GType g_type_from_name (const gchar *name); -GType g_type_parent (GType type); -guint g_type_depth (GType type); -GType g_type_next_base (GType leaf_type, - GType root_type); -gboolean g_type_is_a (GType type, - GType is_a_type); -gpointer g_type_class_ref (GType type); -gpointer g_type_class_peek (GType type); -gpointer g_type_class_peek_static (GType type); -void g_type_class_unref (gpointer g_class); -gpointer g_type_class_peek_parent (gpointer g_class); -gpointer g_type_interface_peek (gpointer instance_class, - GType iface_type); -gpointer g_type_interface_peek_parent (gpointer g_iface); - -gpointer g_type_default_interface_ref (GType g_type); -gpointer g_type_default_interface_peek (GType g_type); -void g_type_default_interface_unref (gpointer g_iface); - -/* g_free() the returned arrays */ -GType* g_type_children (GType type, - guint *n_children); -GType* g_type_interfaces (GType type, - guint *n_interfaces); - -/* per-type _static_ data */ -void g_type_set_qdata (GType type, - GQuark quark, - gpointer data); -gpointer g_type_get_qdata (GType type, - GQuark quark); -void g_type_query (GType type, - GTypeQuery *query); - - -/* --- type registration --- */ -/** - * GBaseInitFunc: - * @g_class: The #GTypeClass structure to initialize. - * - * A callback function used by the type system to do base initialization - * of the class structures of derived types. It is called as part of the - * initialization process of all derived classes and should reallocate - * or reset all dynamic class members copied over from the parent class. - * For example, class members (such as strings) that are not sufficiently - * handled by a plain memory copy of the parent class into the derived class - * have to be altered. See GClassInitFunc() for a discussion of the class - * intialization process. - */ -typedef void (*GBaseInitFunc) (gpointer g_class); -/** - * GBaseFinalizeFunc: - * @g_class: The #GTypeClass structure to finalize. - * - * A callback function used by the type system to finalize those portions - * of a derived types class structure that were setup from the corresponding - * GBaseInitFunc() function. Class finalization basically works the inverse - * way in which class intialization is performed. - * See GClassInitFunc() for a discussion of the class intialization process. - */ -typedef void (*GBaseFinalizeFunc) (gpointer g_class); -/** - * GClassInitFunc: - * @g_class: The #GTypeClass structure to initialize. - * @class_data: The @class_data member supplied via the #GTypeInfo structure. - * - * A callback function used by the type system to initialize the class - * of a specific type. This function should initialize all static class - * members. - * The initialization process of a class involves: - * - * - * 1 - Copying common members from the parent class over to the - * derived class structure. - * - * - * 2 - Zero initialization of the remaining members not copied - * over from the parent class. - * - * - * 3 - Invocation of the GBaseInitFunc() initializers of all parent - * types and the class' type. - * - * - * 4 - Invocation of the class' GClassInitFunc() initializer. - * - * - * Since derived classes are partially initialized through a memory copy - * of the parent class, the general rule is that GBaseInitFunc() and - * GBaseFinalizeFunc() should take care of necessary reinitialization - * and release of those class members that were introduced by the type - * that specified these GBaseInitFunc()/GBaseFinalizeFunc(). - * GClassInitFunc() should only care about initializing static - * class members, while dynamic class members (such as allocated strings - * or reference counted resources) are better handled by a GBaseInitFunc() - * for this type, so proper initialization of the dynamic class members - * is performed for class initialization of derived types as well. - * An example may help to correspond the intend of the different class - * initializers: - * - * |[ - * typedef struct { - * GObjectClass parent_class; - * gint static_integer; - * gchar *dynamic_string; - * } TypeAClass; - * static void - * type_a_base_class_init (TypeAClass *class) - * { - * class->dynamic_string = g_strdup ("some string"); - * } - * static void - * type_a_base_class_finalize (TypeAClass *class) - * { - * g_free (class->dynamic_string); - * } - * static void - * type_a_class_init (TypeAClass *class) - * { - * class->static_integer = 42; - * } - * - * typedef struct { - * TypeAClass parent_class; - * gfloat static_float; - * GString *dynamic_gstring; - * } TypeBClass; - * static void - * type_b_base_class_init (TypeBClass *class) - * { - * class->dynamic_gstring = g_string_new ("some other string"); - * } - * static void - * type_b_base_class_finalize (TypeBClass *class) - * { - * g_string_free (class->dynamic_gstring); - * } - * static void - * type_b_class_init (TypeBClass *class) - * { - * class->static_float = 3.14159265358979323846; - * } - * ]| - * Initialization of TypeBClass will first cause initialization of - * TypeAClass (derived classes reference their parent classes, see - * g_type_class_ref() on this). - * Initialization of TypeAClass roughly involves zero-initializing its fields, - * then calling its GBaseInitFunc() type_a_base_class_init() to allocate - * its dynamic members (dynamic_string), and finally calling its GClassInitFunc() - * type_a_class_init() to initialize its static members (static_integer). - * The first step in the initialization process of TypeBClass is then - * a plain memory copy of the contents of TypeAClass into TypeBClass and - * zero-initialization of the remaining fields in TypeBClass. - * The dynamic members of TypeAClass within TypeBClass now need - * reinitialization which is performed by calling type_a_base_class_init() - * with an argument of TypeBClass. - * After that, the GBaseInitFunc() of TypeBClass, type_b_base_class_init() - * is called to allocate the dynamic members of TypeBClass (dynamic_gstring), - * and finally the GClassInitFunc() of TypeBClass, type_b_class_init(), - * is called to complete the initialization process with the static members - * (static_float). - * Corresponding finalization counter parts to the GBaseInitFunc() functions - * have to be provided to release allocated resources at class finalization - * time. - */ -typedef void (*GClassInitFunc) (gpointer g_class, - gpointer class_data); -/** - * GClassFinalizeFunc: - * @g_class: The #GTypeClass structure to finalize. - * @class_data: The @class_data member supplied via the #GTypeInfo structure. - * - * A callback function used by the type system to finalize a class. - * This function is rarely needed, as dynamically allocated class resources - * should be handled by GBaseInitFunc() and GBaseFinalizeFunc(). - * Also, specification of a GClassFinalizeFunc() in the #GTypeInfo - * structure of a static type is invalid, because classes of static types - * will never be finalized (they are artificially kept alive when their - * reference count drops to zero). - */ -typedef void (*GClassFinalizeFunc) (gpointer g_class, - gpointer class_data); -/** - * GInstanceInitFunc: - * @instance: The instance to initialize. - * @g_class: The class of the type the instance is created for. - * - * A callback function used by the type system to initialize a new - * instance of a type. This function initializes all instance members and - * allocates any resources required by it. - * Initialization of a derived instance involves calling all its parent - * types instance initializers, so the class member of the instance - * is altered during its initialization to always point to the class that - * belongs to the type the current initializer was introduced for. - */ -typedef void (*GInstanceInitFunc) (GTypeInstance *instance, - gpointer g_class); -/** - * GInterfaceInitFunc: - * @g_iface: The interface structure to initialize. - * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure. - * - * A callback function used by the type system to initialize a new - * interface. This function should initialize all internal data and - * allocate any resources required by the interface. - */ -typedef void (*GInterfaceInitFunc) (gpointer g_iface, - gpointer iface_data); -/** - * GInterfaceFinalizeFunc: - * @g_iface: The interface structure to finalize. - * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure. - * - * A callback function used by the type system to finalize an interface. - * This function should destroy any internal data and release any resources - * allocated by the corresponding GInterfaceInitFunc() function. - */ -typedef void (*GInterfaceFinalizeFunc) (gpointer g_iface, - gpointer iface_data); -/** - * GTypeClassCacheFunc: - * @cache_data: data that was given to the g_type_add_class_cache_func() call - * @g_class: The #GTypeClass structure which is unreferenced - * - * A callback function which is called when the reference count of a class - * drops to zero. It may use g_type_class_ref() to prevent the class from - * being freed. You should not call g_type_class_unref() from a - * #GTypeClassCacheFunc function to prevent infinite recursion, use - * g_type_class_unref_uncached() instead. - * - * The functions have to check the class id passed in to figure - * whether they actually want to cache the class of this type, since all - * classes are routed through the same #GTypeClassCacheFunc chain. - * - * Returns: %TRUE to stop further #GTypeClassCacheFuncs from being - * called, %FALSE to continue. - */ -typedef gboolean (*GTypeClassCacheFunc) (gpointer cache_data, - GTypeClass *g_class); -/** - * GTypeInterfaceCheckFunc: - * @check_data: data passed to g_type_add_interface_check(). - * @g_iface: the interface that has been initialized - * - * A callback called after an interface vtable is initialized. - * See g_type_add_interface_check(). - * - * Since: 2.4 - */ -typedef void (*GTypeInterfaceCheckFunc) (gpointer check_data, - gpointer g_iface); -/** - * GTypeFundamentalFlags: - * @G_TYPE_FLAG_CLASSED: Indicates a classed type. - * @G_TYPE_FLAG_INSTANTIATABLE: Indicates an instantiable type (implies classed). - * @G_TYPE_FLAG_DERIVABLE: Indicates a flat derivable type. - * @G_TYPE_FLAG_DEEP_DERIVABLE: Indicates a deep derivable type (implies derivable). - * - * Bit masks used to check or determine specific characteristics of a - * fundamental type. - */ -typedef enum /*< skip >*/ -{ - G_TYPE_FLAG_CLASSED = (1 << 0), - G_TYPE_FLAG_INSTANTIATABLE = (1 << 1), - G_TYPE_FLAG_DERIVABLE = (1 << 2), - G_TYPE_FLAG_DEEP_DERIVABLE = (1 << 3) -} GTypeFundamentalFlags; -/** - * GTypeFlags: - * @G_TYPE_FLAG_ABSTRACT: Indicates an abstract type. No instances can be - * created for an abstract type. - * @G_TYPE_FLAG_VALUE_ABSTRACT: Indicates an abstract value type, i.e. a type - * that introduces a value table, but can't be used for - * g_value_init(). - * - * Bit masks used to check or determine characteristics of a type. - */ -typedef enum /*< skip >*/ -{ - G_TYPE_FLAG_ABSTRACT = (1 << 4), - G_TYPE_FLAG_VALUE_ABSTRACT = (1 << 5) -} GTypeFlags; -/** - * GTypeInfo: - * @class_size: Size of the class structure (required for interface, classed and instantiatable types). - * @base_init: Location of the base initialization function (optional). - * @base_finalize: Location of the base finalization function (optional). - * @class_init: Location of the class initialization function for - * classed and instantiatable types. Location of the default vtable - * inititalization function for interface types. (optional) This function - * is used both to fill in virtual functions in the class or default vtable, - * and to do type-specific setup such as registering signals and object - * properties. - * @class_finalize: Location of the class finalization function for - * classed and instantiatable types. Location fo the default vtable - * finalization function for interface types. (optional) - * @class_data: User-supplied data passed to the class init/finalize functions. - * @instance_size: Size of the instance (object) structure (required for instantiatable types only). - * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the slice allocator now. - * @instance_init: Location of the instance initialization function (optional, for instantiatable types only). - * @value_table: A #GTypeValueTable function table for generic handling of GValues of this type (usually only - * useful for fundamental types). - * - * This structure is used to provide the type system with the information - * required to initialize and destruct (finalize) a type's class and - * its instances. - * The initialized structure is passed to the g_type_register_static() function - * (or is copied into the provided #GTypeInfo structure in the - * g_type_plugin_complete_type_info()). The type system will perform a deep - * copy of this structure, so its memory does not need to be persistent - * across invocation of g_type_register_static(). - */ -struct _GTypeInfo -{ - /* interface types, classed types, instantiated types */ - guint16 class_size; - - GBaseInitFunc base_init; - GBaseFinalizeFunc base_finalize; - - /* interface types, classed types, instantiated types */ - GClassInitFunc class_init; - GClassFinalizeFunc class_finalize; - gconstpointer class_data; - - /* instantiated types */ - guint16 instance_size; - guint16 n_preallocs; - GInstanceInitFunc instance_init; - - /* value handling */ - const GTypeValueTable *value_table; -}; -/** - * GTypeFundamentalInfo: - * @type_flags: #GTypeFundamentalFlags describing the characteristics of the fundamental type - * - * A structure that provides information to the type system which is - * used specifically for managing fundamental types. - */ -struct _GTypeFundamentalInfo -{ - GTypeFundamentalFlags type_flags; -}; -/** - * GInterfaceInfo: - * @interface_init: location of the interface initialization function - * @interface_finalize: location of the interface finalization function - * @interface_data: user-supplied data passed to the interface init/finalize functions - * - * A structure that provides information to the type system which is - * used specifically for managing interface types. - */ -struct _GInterfaceInfo -{ - GInterfaceInitFunc interface_init; - GInterfaceFinalizeFunc interface_finalize; - gpointer interface_data; -}; -/** - * GTypeValueTable: - * @value_init: Default initialize @values contents by poking values - * directly into the value->data array. The data array of - * the #GValue passed into this function was zero-filled - * with memset(), so no care has to - * be taken to free any - * old contents. E.g. for the implementation of a string - * value that may never be %NULL, the implementation might - * look like: - * |[ - * value->data[0].v_pointer = g_strdup (""); - * ]| - * @value_free: Free any old contents that might be left in the - * data array of the passed in @value. No resources may - * remain allocated through the #GValue contents after - * this function returns. E.g. for our above string type: - * |[ - * // only free strings without a specific flag for static storage - * if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)) - * g_free (value->data[0].v_pointer); - * ]| - * @value_copy: @dest_value is a #GValue with zero-filled data section - * and @src_value is a properly setup #GValue of same or - * derived type. - * The purpose of this function is to copy the contents of - * @src_value into @dest_value in a way, that even after - * @src_value has been freed, the contents of @dest_value - * remain valid. String type example: - * |[ - * dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer); - * ]| - * @value_peek_pointer: If the value contents fit into a pointer, such as objects - * or strings, return this pointer, so the caller can peek at - * the current contents. To extend on our above string example: - * |[ - * return value->data[0].v_pointer; - * ]| - * @collect_format: A string format describing how to collect the contents of - * this value bit-by-bit. Each character in the format represents - * an argument to be collected, and the characters themselves indicate - * the type of the argument. Currently supported arguments are: - * - * - * 'i' - Integers. passed as collect_values[].v_int. - * - * - * 'l' - Longs. passed as collect_values[].v_long. - * - * - * 'd' - Doubles. passed as collect_values[].v_double. - * - * - * 'p' - Pointers. passed as collect_values[].v_pointer. - * - * - * It should be noted that for variable argument list construction, - * ANSI C promotes every type smaller than an integer to an int, and - * floats to doubles. So for collection of short int or char, 'i' - * needs to be used, and for collection of floats 'd'. - * @collect_value: The collect_value() function is responsible for converting the - * values collected from a variable argument list into contents - * suitable for storage in a GValue. This function should setup - * @value similar to value_init(); e.g. for a string value that - * does not allow %NULL pointers, it needs to either spew an error, - * or do an implicit conversion by storing an empty string. - * The @value passed in to this function has a zero-filled data - * array, so just like for value_init() it is guaranteed to not - * contain any old contents that might need freeing. - * @n_collect_values is exactly the string length of @collect_format, - * and @collect_values is an array of unions #GTypeCValue with - * length @n_collect_values, containing the collected values - * according to @collect_format. - * @collect_flags is an argument provided as a hint by the caller. - * It may contain the flag %G_VALUE_NOCOPY_CONTENTS indicating, - * that the collected value contents may be considered "static" - * for the duration of the @value lifetime. - * Thus an extra copy of the contents stored in @collect_values is - * not required for assignment to @value. - * For our above string example, we continue with: - * |[ - * if (!collect_values[0].v_pointer) - * value->data[0].v_pointer = g_strdup (""); - * else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) - * { - * value->data[0].v_pointer = collect_values[0].v_pointer; - * // keep a flag for the value_free() implementation to not free this string - * value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS; - * } - * else - * value->data[0].v_pointer = g_strdup (collect_values[0].v_pointer); - * return NULL; - * ]| - * It should be noted, that it is generally a bad idea to follow the - * #G_VALUE_NOCOPY_CONTENTS hint for reference counted types. Due to - * reentrancy requirements and reference count assertions performed - * by the signal emission code, reference counts should always be - * incremented for reference counted contents stored in the value->data - * array. To deviate from our string example for a moment, and taking - * a look at an exemplary implementation for collect_value() of - * #GObject: - * |[ - * if (collect_values[0].v_pointer) - * { - * GObject *object = G_OBJECT (collect_values[0].v_pointer); - * // never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types - * value->data[0].v_pointer = g_object_ref (object); - * return NULL; - * } - * else - * return g_strdup_printf ("Object passed as invalid NULL pointer"); - * } - * ]| - * The reference count for valid objects is always incremented, - * regardless of @collect_flags. For invalid objects, the example - * returns a newly allocated string without altering @value. - * Upon success, collect_value() needs to return %NULL. If, however, - * an error condition occurred, collect_value() may spew an - * error by returning a newly allocated non-%NULL string, giving - * a suitable description of the error condition. - * The calling code makes no assumptions about the @value - * contents being valid upon error returns, @value - * is simply thrown away without further freeing. As such, it is - * a good idea to not allocate #GValue contents, prior to returning - * an error, however, collect_values() is not obliged to return - * a correctly setup @value for error returns, simply because - * any non-%NULL return is considered a fatal condition so further - * program behaviour is undefined. - * @lcopy_format: Format description of the arguments to collect for @lcopy_value, - * analogous to @collect_format. Usually, @lcopy_format string consists - * only of 'p's to provide lcopy_value() with pointers to storage locations. - * @lcopy_value: This function is responsible for storing the @value contents into - * arguments passed through a variable argument list which got - * collected into @collect_values according to @lcopy_format. - * @n_collect_values equals the string length of @lcopy_format, - * and @collect_flags may contain %G_VALUE_NOCOPY_CONTENTS. - * In contrast to collect_value(), lcopy_value() is obliged to - * always properly support %G_VALUE_NOCOPY_CONTENTS. - * Similar to collect_value() the function may prematurely abort - * by returning a newly allocated string describing an error condition. - * To complete the string example: - * |[ - * gchar **string_p = collect_values[0].v_pointer; - * if (!string_p) - * return g_strdup_printf ("string location passed as NULL"); - * if (collect_flags & G_VALUE_NOCOPY_CONTENTS) - * *string_p = value->data[0].v_pointer; - * else - * *string_p = g_strdup (value->data[0].v_pointer); - * ]| - * And an illustrative version of lcopy_value() for - * reference-counted types: - * |[ - * GObject **object_p = collect_values[0].v_pointer; - * if (!object_p) - * return g_strdup_printf ("object location passed as NULL"); - * if (!value->data[0].v_pointer) - * *object_p = NULL; - * else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) /* always honour */ - * *object_p = value->data[0].v_pointer; - * else - * *object_p = g_object_ref (value->data[0].v_pointer); - * return NULL; - * ]| - * - * The #GTypeValueTable provides the functions required by the #GValue implementation, - * to serve as a container for values of a type. - */ - -struct _GTypeValueTable -{ - void (*value_init) (GValue *value); - void (*value_free) (GValue *value); - void (*value_copy) (const GValue *src_value, - GValue *dest_value); - /* varargs functionality (optional) */ - gpointer (*value_peek_pointer) (const GValue *value); - const gchar *collect_format; - gchar* (*collect_value) (GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags); - const gchar *lcopy_format; - gchar* (*lcopy_value) (const GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags); -}; -GType g_type_register_static (GType parent_type, - const gchar *type_name, - const GTypeInfo *info, - GTypeFlags flags); -GType g_type_register_static_simple (GType parent_type, - const gchar *type_name, - guint class_size, - GClassInitFunc class_init, - guint instance_size, - GInstanceInitFunc instance_init, - GTypeFlags flags); - -GType g_type_register_dynamic (GType parent_type, - const gchar *type_name, - GTypePlugin *plugin, - GTypeFlags flags); -GType g_type_register_fundamental (GType type_id, - const gchar *type_name, - const GTypeInfo *info, - const GTypeFundamentalInfo *finfo, - GTypeFlags flags); -void g_type_add_interface_static (GType instance_type, - GType interface_type, - const GInterfaceInfo *info); -void g_type_add_interface_dynamic (GType instance_type, - GType interface_type, - GTypePlugin *plugin); -void g_type_interface_add_prerequisite (GType interface_type, - GType prerequisite_type); -GType*g_type_interface_prerequisites (GType interface_type, - guint *n_prerequisites); -void g_type_class_add_private (gpointer g_class, - gsize private_size); -gpointer g_type_instance_get_private (GTypeInstance *instance, - GType private_type); - -void g_type_add_class_private (GType class_type, - gsize private_size); -gpointer g_type_class_get_private (GTypeClass *klass, - GType private_type); - -GLIB_AVAILABLE_IN_2_34 -void g_type_ensure (GType type); - -/* --- GType boilerplate --- */ -/** - * G_DEFINE_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for type implementations, which declares a - * class initialization function, an instance initialization function (see #GTypeInfo for information about - * these) and a static variable named @t_n_parent_class pointing to the parent class. Furthermore, it defines - * a *_get_type() function. See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, {}) -/** - * G_DEFINE_TYPE_WITH_CODE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type in lowercase, with words separated by '_'. - * @T_P: The #GType of the parent type. - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for type implementations. - * Similar to G_DEFINE_TYPE(), but allows you to insert custom code into the - * *_get_type() function, e.g. interface implementations via G_IMPLEMENT_INTERFACE(). - * See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, 0) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() -/** - * G_DEFINE_ABSTRACT_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for type implementations. - * Similar to G_DEFINE_TYPE(), but defines an abstract type. - * See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_ABSTRACT_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {}) -/** - * G_DEFINE_ABSTRACT_TYPE_WITH_CODE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * @_C_: Custom code that gets inserted in the @type_name_get_type() function. - * - * A convenience macro for type implementations. - * Similar to G_DEFINE_TYPE_WITH_CODE(), but defines an abstract type and allows you to - * insert custom code into the *_get_type() function, e.g. interface implementations - * via G_IMPLEMENT_INTERFACE(). See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() -/** - * G_DEFINE_TYPE_EXTENDED: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * @_f_: #GTypeFlags to pass to g_type_register_static() - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * The most general convenience macro for type implementations, on which - * G_DEFINE_TYPE(), etc are based. - * - * |[ - * G_DEFINE_TYPE_EXTENDED (GtkGadget, - * gtk_gadget, - * GTK_TYPE_WIDGET, - * 0, - * G_IMPLEMENT_INTERFACE (TYPE_GIZMO, - * gtk_gadget_gizmo_init)); - * ]| - * expands to - * |[ - * static void gtk_gadget_init (GtkGadget *self); - * static void gtk_gadget_class_init (GtkGadgetClass *klass); - * static gpointer gtk_gadget_parent_class = NULL; - * static void gtk_gadget_class_intern_init (gpointer klass) - * { - * gtk_gadget_parent_class = g_type_class_peek_parent (klass); - * gtk_gadget_class_init ((GtkGadgetClass*) klass); - * } - * - * GType - * gtk_gadget_get_type (void) - * { - * static volatile gsize g_define_type_id__volatile = 0; - * if (g_once_init_enter (&g_define_type_id__volatile)) - * { - * GType g_define_type_id = - * g_type_register_static_simple (GTK_TYPE_WIDGET, - * g_intern_static_string ("GtkGadget"), - * sizeof (GtkGadgetClass), - * (GClassInitFunc) gtk_gadget_class_intern_init, - * sizeof (GtkGadget), - * (GInstanceInitFunc) gtk_gadget_init, - * (GTypeFlags) flags); - * { - * const GInterfaceInfo g_implement_interface_info = { - * (GInterfaceInitFunc) gtk_gadget_gizmo_init - * }; - * g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info); - * } - * g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); - * } - * return g_define_type_id__volatile; - * } - * ]| - * The only pieces which have to be manually provided are the definitions of - * the instance and class structure and the definitions of the instance and - * class init functions. - * - * Since: 2.4 - */ -#define G_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() - -/** - * G_DEFINE_INTERFACE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words separated by '_'. - * @T_P: The #GType of the prerequisite type for the interface, or 0 - * (%G_TYPE_INVALID) for no prerequisite type. - * - * A convenience macro for #GTypeInterface definitions, which declares - * a default vtable initialization function and defines a *_get_type() - * function. - * - * The macro expects the interface initialization function to have the - * name t_n ## _default_init, and the interface - * structure to have the name TN ## Interface. - * - * Since: 2.24 - */ -#define G_DEFINE_INTERFACE(TN, t_n, T_P) G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, ;) - -/** - * G_DEFINE_INTERFACE_WITH_CODE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words separated by '_'. - * @T_P: The #GType of the prerequisite type for the interface, or 0 - * (%G_TYPE_INVALID) for no prerequisite type. - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for #GTypeInterface definitions. Similar to - * G_DEFINE_INTERFACE(), but allows you to insert custom code into the - * *_get_type() function, e.g. additional interface implementations - * via G_IMPLEMENT_INTERFACE(), or additional prerequisite types. See - * G_DEFINE_TYPE_EXTENDED() for a similar example using - * G_DEFINE_TYPE_WITH_CODE(). - * - * Since: 2.24 - */ -#define G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TN, t_n, T_P) {_C_;} _G_DEFINE_INTERFACE_EXTENDED_END() - -/** - * G_IMPLEMENT_INTERFACE: - * @TYPE_IFACE: The #GType of the interface to add - * @iface_init: The interface init function - * - * A convenience macro to ease interface addition in the @_C_ section - * of G_DEFINE_TYPE_WITH_CODE() or G_DEFINE_ABSTRACT_TYPE_WITH_CODE(). - * See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Note that this macro can only be used together with the G_DEFINE_TYPE_* - * macros, since it depends on variable names from those macros. - * - * Since: 2.4 - */ -#define G_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init) { \ - const GInterfaceInfo g_implement_interface_info = { \ - (GInterfaceInitFunc) iface_init, NULL, NULL \ - }; \ - g_type_add_interface_static (g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \ -} - -#define _G_DEFINE_TYPE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PARENT, flags) \ -\ -static void type_name##_init (TypeName *self); \ -static void type_name##_class_init (TypeName##Class *klass); \ -static gpointer type_name##_parent_class = NULL; \ -static void type_name##_class_intern_init (gpointer klass) \ -{ \ - type_name##_parent_class = g_type_class_peek_parent (klass); \ - type_name##_class_init ((TypeName##Class*) klass); \ -} \ -\ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_type_register_static_simple (TYPE_PARENT, \ - g_intern_static_string (#TypeName), \ - sizeof (TypeName##Class), \ - (GClassInitFunc) type_name##_class_intern_init, \ - sizeof (TypeName), \ - (GInstanceInitFunc) type_name##_init, \ - (GTypeFlags) flags); \ - { /* custom code follows */ -#define _G_DEFINE_TYPE_EXTENDED_END() \ - /* following custom code */ \ - } \ - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ - } \ - return g_define_type_id__volatile; \ -} /* closes type_name##_get_type() */ - -#define _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PREREQ) \ -\ -static void type_name##_default_init (TypeName##Interface *klass); \ -\ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_type_register_static_simple (G_TYPE_INTERFACE, \ - g_intern_static_string (#TypeName), \ - sizeof (TypeName##Interface), \ - (GClassInitFunc)type_name##_default_init, \ - 0, \ - (GInstanceInitFunc)NULL, \ - (GTypeFlags) 0); \ - if (TYPE_PREREQ) \ - g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \ - { /* custom code follows */ -#define _G_DEFINE_INTERFACE_EXTENDED_END() \ - /* following custom code */ \ - } \ - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ - } \ - return g_define_type_id__volatile; \ -} /* closes type_name##_get_type() */ - -/** - * G_DEFINE_BOXED_TYPE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @copy_func: the #GBoxedCopyFunc for the new type - * @free_func: the #GBoxedFreeFunc for the new type - * - * A convenience macro for boxed type implementations, which defines a - * type_name_get_type() function registering the boxed type. - * - * Since: 2.26 - */ -#define G_DEFINE_BOXED_TYPE(TypeName, type_name, copy_func, free_func) G_DEFINE_BOXED_TYPE_WITH_CODE (TypeName, type_name, copy_func, free_func, {}) -/** - * G_DEFINE_BOXED_TYPE_WITH_CODE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @copy_func: the #GBoxedCopyFunc for the new type - * @free_func: the #GBoxedFreeFunc for the new type - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for boxed type implementations. - * Similar to G_DEFINE_BOXED_TYPE(), but allows to insert custom code into the - * type_name_get_type() function, e.g. to register value transformations with - * g_value_register_transform_func(). - * - * Since: 2.26 - */ -#define G_DEFINE_BOXED_TYPE_WITH_CODE(TypeName, type_name, copy_func, free_func, _C_) _G_DEFINE_BOXED_TYPE_BEGIN (TypeName, type_name, copy_func, free_func) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() - -#if !defined (__cplusplus) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) -#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType (* _g_register_boxed) \ - (const gchar *, \ - union \ - { \ - TypeName * (*do_copy_type) (TypeName *); \ - TypeName * (*do_const_copy_type) (const TypeName *); \ - GBoxedCopyFunc do_copy_boxed; \ - } __attribute__((__transparent_union__)), \ - union \ - { \ - void (* do_free_type) (TypeName *); \ - GBoxedFreeFunc do_free_boxed; \ - } __attribute__((__transparent_union__)) \ - ) = g_boxed_type_register_static; \ - GType g_define_type_id = \ - _g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func); \ - { /* custom code follows */ -#else -#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_boxed_type_register_static (g_intern_static_string (#TypeName), \ - (GBoxedCopyFunc) copy_func, \ - (GBoxedFreeFunc) free_func); \ - { /* custom code follows */ -#endif /* __GNUC__ */ - -/** - * G_DEFINE_POINTER_TYPE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * - * A convenience macro for pointer type implementations, which defines a - * type_name_get_type() function registering the pointer type. - * - * Since: 2.26 - */ -#define G_DEFINE_POINTER_TYPE(TypeName, type_name) G_DEFINE_POINTER_TYPE_WITH_CODE (TypeName, type_name, {}) -/** - * G_DEFINE_POINTER_TYPE_WITH_CODE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for pointer type implementations. - * Similar to G_DEFINE_POINTER_TYPE(), but allows to insert custom code into the - * type_name_get_type() function. - * - * Since: 2.26 - */ -#define G_DEFINE_POINTER_TYPE_WITH_CODE(TypeName, type_name, _C_) _G_DEFINE_POINTER_TYPE_BEGIN (TypeName, type_name) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() - -#define _G_DEFINE_POINTER_TYPE_BEGIN(TypeName, type_name) \ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_pointer_type_register_static (g_intern_static_string (#TypeName)); \ - { /* custom code follows */ - -/* --- protected (for fundamental type implementations) --- */ -GTypePlugin* g_type_get_plugin (GType type); -GTypePlugin* g_type_interface_get_plugin (GType instance_type, - GType interface_type); -GType g_type_fundamental_next (void); -GType g_type_fundamental (GType type_id); -GTypeInstance* g_type_create_instance (GType type); -void g_type_free_instance (GTypeInstance *instance); - -void g_type_add_class_cache_func (gpointer cache_data, - GTypeClassCacheFunc cache_func); -void g_type_remove_class_cache_func (gpointer cache_data, - GTypeClassCacheFunc cache_func); -void g_type_class_unref_uncached (gpointer g_class); - -void g_type_add_interface_check (gpointer check_data, - GTypeInterfaceCheckFunc check_func); -void g_type_remove_interface_check (gpointer check_data, - GTypeInterfaceCheckFunc check_func); - -GTypeValueTable* g_type_value_table_peek (GType type); - - -/*< private >*/ -gboolean g_type_check_instance (GTypeInstance *instance) G_GNUC_PURE; -GTypeInstance* g_type_check_instance_cast (GTypeInstance *instance, - GType iface_type); -gboolean g_type_check_instance_is_a (GTypeInstance *instance, - GType iface_type) G_GNUC_PURE; -GTypeClass* g_type_check_class_cast (GTypeClass *g_class, - GType is_a_type); -gboolean g_type_check_class_is_a (GTypeClass *g_class, - GType is_a_type) G_GNUC_PURE; -gboolean g_type_check_is_value_type (GType type) G_GNUC_CONST; -gboolean g_type_check_value (GValue *value) G_GNUC_PURE; -gboolean g_type_check_value_holds (GValue *value, - GType type) G_GNUC_PURE; -gboolean g_type_test_flags (GType type, - guint flags) G_GNUC_CONST; - - -/* --- debugging functions --- */ -const gchar * g_type_name_from_instance (GTypeInstance *instance); -const gchar * g_type_name_from_class (GTypeClass *g_class); - - -/* --- implementation bits --- */ -#ifndef G_DISABLE_CAST_CHECKS -# define _G_TYPE_CIC(ip, gt, ct) \ - ((ct*) g_type_check_instance_cast ((GTypeInstance*) ip, gt)) -# define _G_TYPE_CCC(cp, gt, ct) \ - ((ct*) g_type_check_class_cast ((GTypeClass*) cp, gt)) -#else /* G_DISABLE_CAST_CHECKS */ -# define _G_TYPE_CIC(ip, gt, ct) ((ct*) ip) -# define _G_TYPE_CCC(cp, gt, ct) ((ct*) cp) -#endif /* G_DISABLE_CAST_CHECKS */ -#define _G_TYPE_CHI(ip) (g_type_check_instance ((GTypeInstance*) ip)) -#define _G_TYPE_CHV(vl) (g_type_check_value ((GValue*) vl)) -#define _G_TYPE_IGC(ip, gt, ct) ((ct*) (((GTypeInstance*) ip)->g_class)) -#define _G_TYPE_IGI(ip, gt, ct) ((ct*) g_type_interface_peek (((GTypeInstance*) ip)->g_class, gt)) -#ifdef __GNUC__ -# define _G_TYPE_CIT(ip, gt) (G_GNUC_EXTENSION ({ \ - GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \ - if (!__inst) \ - __r = FALSE; \ - else if (__inst->g_class && __inst->g_class->g_type == __t) \ - __r = TRUE; \ - else \ - __r = g_type_check_instance_is_a (__inst, __t); \ - __r; \ -})) -# define _G_TYPE_CCT(cp, gt) (G_GNUC_EXTENSION ({ \ - GTypeClass *__class = (GTypeClass*) cp; GType __t = gt; gboolean __r; \ - if (!__class) \ - __r = FALSE; \ - else if (__class->g_type == __t) \ - __r = TRUE; \ - else \ - __r = g_type_check_class_is_a (__class, __t); \ - __r; \ -})) -# define _G_TYPE_CVH(vl, gt) (G_GNUC_EXTENSION ({ \ - GValue *__val = (GValue*) vl; GType __t = gt; gboolean __r; \ - if (!__val) \ - __r = FALSE; \ - else if (__val->g_type == __t) \ - __r = TRUE; \ - else \ - __r = g_type_check_value_holds (__val, __t); \ - __r; \ -})) -#else /* !__GNUC__ */ -# define _G_TYPE_CIT(ip, gt) (g_type_check_instance_is_a ((GTypeInstance*) ip, gt)) -# define _G_TYPE_CCT(cp, gt) (g_type_check_class_is_a ((GTypeClass*) cp, gt)) -# define _G_TYPE_CVH(vl, gt) (g_type_check_value_holds ((GValue*) vl, gt)) -#endif /* !__GNUC__ */ -/** - * G_TYPE_FLAG_RESERVED_ID_BIT: - * - * A bit in the type number that's supposed to be left untouched. - */ -#define G_TYPE_FLAG_RESERVED_ID_BIT ((GType) (1 << 0)) -extern GTypeDebugFlags _g_type_debug_flags; - -G_END_DECLS - -#endif /* __G_TYPE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gtypemodule.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gtypemodule.h deleted file mode 100644 index f2d524bd..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gtypemodule.h +++ /dev/null @@ -1,263 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPE_MODULE_H__ -#define __G_TYPE_MODULE_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GTypeModule GTypeModule; -typedef struct _GTypeModuleClass GTypeModuleClass; - -#define G_TYPE_TYPE_MODULE (g_type_module_get_type ()) -#define G_TYPE_MODULE(module) (G_TYPE_CHECK_INSTANCE_CAST ((module), G_TYPE_TYPE_MODULE, GTypeModule)) -#define G_TYPE_MODULE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TYPE_MODULE, GTypeModuleClass)) -#define G_IS_TYPE_MODULE(module) (G_TYPE_CHECK_INSTANCE_TYPE ((module), G_TYPE_TYPE_MODULE)) -#define G_IS_TYPE_MODULE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TYPE_MODULE)) -#define G_TYPE_MODULE_GET_CLASS(module) (G_TYPE_INSTANCE_GET_CLASS ((module), G_TYPE_TYPE_MODULE, GTypeModuleClass)) - -/** - * GTypeModule: - * @name: the name of the module - * - * The members of the GTypeModule structure should not - * be accessed directly, except for the @name field. - */ -struct _GTypeModule -{ - GObject parent_instance; - - guint use_count; - GSList *type_infos; - GSList *interface_infos; - - /*< public >*/ - gchar *name; -}; - -/** - * GTypeModuleClass: - * @parent_class: the parent class - * @load: loads the module and registers one or more types using - * g_type_module_register_type(). - * @unload: unloads the module - * - * In order to implement dynamic loading of types based on #GTypeModule, - * the @load and @unload functions in #GTypeModuleClass must be implemented. - */ -struct _GTypeModuleClass -{ - GObjectClass parent_class; - - /*< public >*/ - gboolean (* load) (GTypeModule *module); - void (* unload) (GTypeModule *module); - - /*< private >*/ - /* Padding for future expansion */ - void (*reserved1) (void); - void (*reserved2) (void); - void (*reserved3) (void); - void (*reserved4) (void); -}; - -/** - * G_DEFINE_DYNAMIC_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for dynamic type implementations, which declares a - * class initialization function, an instance initialization function (see - * #GTypeInfo for information about these) and a static variable named - * @t_n_parent_class pointing to the parent class. Furthermore, - * it defines a *_get_type() and a static - * *_register_type() function for use in your - * module_init(). - * See G_DEFINE_DYNAMIC_TYPE_EXTENDED() for an example. - * - * Since: 2.14 - */ -#define G_DEFINE_DYNAMIC_TYPE(TN, t_n, T_P) G_DEFINE_DYNAMIC_TYPE_EXTENDED (TN, t_n, T_P, 0, {}) -/** - * G_DEFINE_DYNAMIC_TYPE_EXTENDED: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @TYPE_PARENT: The #GType of the parent type. - * @flags: #GTypeFlags to pass to g_type_module_register_type() - * @CODE: Custom code that gets inserted in the *_get_type() function. - * - * A more general version of G_DEFINE_DYNAMIC_TYPE() which - * allows to specify #GTypeFlags and custom code. - * - * |[ - * G_DEFINE_DYNAMIC_TYPE_EXTENDED (GtkGadget, - * gtk_gadget, - * GTK_TYPE_THING, - * 0, - * G_IMPLEMENT_INTERFACE_DYNAMIC (TYPE_GIZMO, - * gtk_gadget_gizmo_init)); - * ]| - * expands to - * |[ - * static void gtk_gadget_init (GtkGadget *self); - * static void gtk_gadget_class_init (GtkGadgetClass *klass); - * static void gtk_gadget_class_finalize (GtkGadgetClass *klass); - * - * static gpointer gtk_gadget_parent_class = NULL; - * static GType gtk_gadget_type_id = 0; - * - * static void gtk_gadget_class_intern_init (gpointer klass) - * { - * gtk_gadget_parent_class = g_type_class_peek_parent (klass); - * gtk_gadget_class_init ((GtkGadgetClass*) klass); - * } - * - * GType - * gtk_gadget_get_type (void) - * { - * return gtk_gadget_type_id; - * } - * - * static void - * gtk_gadget_register_type (GTypeModule *type_module) - * { - * const GTypeInfo g_define_type_info = { - * sizeof (GtkGadgetClass), - * (GBaseInitFunc) NULL, - * (GBaseFinalizeFunc) NULL, - * (GClassInitFunc) gtk_gadget_class_intern_init, - * (GClassFinalizeFunc) gtk_gadget_class_finalize, - * NULL, // class_data - * sizeof (GtkGadget), - * 0, // n_preallocs - * (GInstanceInitFunc) gtk_gadget_init, - * NULL // value_table - * }; - * gtk_gadget_type_id = g_type_module_register_type (type_module, - * GTK_TYPE_THING, - * "GtkGadget", - * &g_define_type_info, - * (GTypeFlags) flags); - * { - * const GInterfaceInfo g_implement_interface_info = { - * (GInterfaceInitFunc) gtk_gadget_gizmo_init - * }; - * g_type_module_add_interface (type_module, g_define_type_id, TYPE_GIZMO, &g_implement_interface_info); - * } - * } - * ]| - * - * Since: 2.14 - */ -#define G_DEFINE_DYNAMIC_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \ -static void type_name##_init (TypeName *self); \ -static void type_name##_class_init (TypeName##Class *klass); \ -static void type_name##_class_finalize (TypeName##Class *klass); \ -static gpointer type_name##_parent_class = NULL; \ -static GType type_name##_type_id = 0; \ -static void type_name##_class_intern_init (gpointer klass) \ -{ \ - type_name##_parent_class = g_type_class_peek_parent (klass); \ - type_name##_class_init ((TypeName##Class*) klass); \ -} \ -GType \ -type_name##_get_type (void) \ -{ \ - return type_name##_type_id; \ -} \ -static void \ -type_name##_register_type (GTypeModule *type_module) \ -{ \ - GType g_define_type_id G_GNUC_UNUSED; \ - const GTypeInfo g_define_type_info = { \ - sizeof (TypeName##Class), \ - (GBaseInitFunc) NULL, \ - (GBaseFinalizeFunc) NULL, \ - (GClassInitFunc) type_name##_class_intern_init, \ - (GClassFinalizeFunc) type_name##_class_finalize, \ - NULL, /* class_data */ \ - sizeof (TypeName), \ - 0, /* n_preallocs */ \ - (GInstanceInitFunc) type_name##_init, \ - NULL /* value_table */ \ - }; \ - type_name##_type_id = g_type_module_register_type (type_module, \ - TYPE_PARENT, \ - #TypeName, \ - &g_define_type_info, \ - (GTypeFlags) flags); \ - g_define_type_id = type_name##_type_id; \ - { CODE ; } \ -} - -/** - * G_IMPLEMENT_INTERFACE_DYNAMIC: - * @TYPE_IFACE: The #GType of the interface to add - * @iface_init: The interface init function - * - * A convenience macro to ease interface addition in the @_C_ section - * of G_DEFINE_DYNAMIC_TYPE_EXTENDED(). See G_DEFINE_DYNAMIC_TYPE_EXTENDED() - * for an example. - * - * Note that this macro can only be used together with the - * G_DEFINE_DYNAMIC_TYPE_EXTENDED macros, since it depends on variable - * names from that macro. - * - * Since: 2.24 - */ -#define G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \ - const GInterfaceInfo g_implement_interface_info = { \ - (GInterfaceInitFunc) iface_init, NULL, NULL \ - }; \ - g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \ -} - -GType g_type_module_get_type (void) G_GNUC_CONST; -gboolean g_type_module_use (GTypeModule *module); -void g_type_module_unuse (GTypeModule *module); -void g_type_module_set_name (GTypeModule *module, - const gchar *name); -GType g_type_module_register_type (GTypeModule *module, - GType parent_type, - const gchar *type_name, - const GTypeInfo *type_info, - GTypeFlags flags); -void g_type_module_add_interface (GTypeModule *module, - GType instance_type, - GType interface_type, - const GInterfaceInfo *interface_info); -GType g_type_module_register_enum (GTypeModule *module, - const gchar *name, - const GEnumValue *const_static_values); -GType g_type_module_register_flags (GTypeModule *module, - const gchar *name, - const GFlagsValue *const_static_values); - -G_END_DECLS - -#endif /* __G_TYPE_MODULE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gtypeplugin.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gtypeplugin.h deleted file mode 100644 index ff87a701..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gtypeplugin.h +++ /dev/null @@ -1,134 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPE_PLUGIN_H__ -#define __G_TYPE_PLUGIN_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -#define G_TYPE_TYPE_PLUGIN (g_type_plugin_get_type ()) -#define G_TYPE_PLUGIN(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TYPE_PLUGIN, GTypePlugin)) -#define G_TYPE_PLUGIN_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), G_TYPE_TYPE_PLUGIN, GTypePluginClass)) -#define G_IS_TYPE_PLUGIN(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TYPE_PLUGIN)) -#define G_IS_TYPE_PLUGIN_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), G_TYPE_TYPE_PLUGIN)) -#define G_TYPE_PLUGIN_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TYPE_PLUGIN, GTypePluginClass)) - - -/* --- typedefs & structures --- */ -typedef struct _GTypePluginClass GTypePluginClass; -/** - * GTypePluginUse: - * @plugin: the #GTypePlugin whose use count should be increased - * - * The type of the @use_plugin function of #GTypePluginClass, which gets called - * to increase the use count of @plugin. - */ -typedef void (*GTypePluginUse) (GTypePlugin *plugin); -/** - * GTypePluginUnuse: - * @plugin: the #GTypePlugin whose use count should be decreased - * - * The type of the @unuse_plugin function of #GTypePluginClass. - */ -typedef void (*GTypePluginUnuse) (GTypePlugin *plugin); -/** - * GTypePluginCompleteTypeInfo: - * @plugin: the #GTypePlugin - * @g_type: the #GType whose info is completed - * @info: the #GTypeInfo struct to fill in - * @value_table: the #GTypeValueTable to fill in - * - * The type of the @complete_type_info function of #GTypePluginClass. - */ -typedef void (*GTypePluginCompleteTypeInfo) (GTypePlugin *plugin, - GType g_type, - GTypeInfo *info, - GTypeValueTable *value_table); -/** - * GTypePluginCompleteInterfaceInfo: - * @plugin: the #GTypePlugin - * @instance_type: the #GType of an instantiable type to which the interface - * is added - * @interface_type: the #GType of the interface whose info is completed - * @info: the #GInterfaceInfo to fill in - * - * The type of the @complete_interface_info function of #GTypePluginClass. - */ -typedef void (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin, - GType instance_type, - GType interface_type, - GInterfaceInfo *info); -/** - * GTypePlugin: - * - * The GTypePlugin typedef is used as a placeholder - * for objects that implement the GTypePlugin - * interface. - */ -/** - * GTypePluginClass: - * @use_plugin: Increases the use count of the plugin. - * @unuse_plugin: Decreases the use count of the plugin. - * @complete_type_info: Fills in the #GTypeInfo and - * #GTypeValueTable structs for the type. The structs are initialized - * with memset(s, 0, sizeof (s)) before calling - * this function. - * @complete_interface_info: Fills in missing parts of the #GInterfaceInfo - * for the interface. The structs is initialized with - * memset(s, 0, sizeof (s)) before calling - * this function. - * - * The #GTypePlugin interface is used by the type system in order to handle - * the lifecycle of dynamically loaded types. - */ -struct _GTypePluginClass -{ - /*< private >*/ - GTypeInterface base_iface; - - /*< public >*/ - GTypePluginUse use_plugin; - GTypePluginUnuse unuse_plugin; - GTypePluginCompleteTypeInfo complete_type_info; - GTypePluginCompleteInterfaceInfo complete_interface_info; -}; - - -/* --- prototypes --- */ -GType g_type_plugin_get_type (void) G_GNUC_CONST; -void g_type_plugin_use (GTypePlugin *plugin); -void g_type_plugin_unuse (GTypePlugin *plugin); -void g_type_plugin_complete_type_info (GTypePlugin *plugin, - GType g_type, - GTypeInfo *info, - GTypeValueTable *value_table); -void g_type_plugin_complete_interface_info (GTypePlugin *plugin, - GType instance_type, - GType interface_type, - GInterfaceInfo *info); - -G_END_DECLS - -#endif /* __G_TYPE_PLUGIN_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gvalue.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gvalue.h deleted file mode 100644 index 7bebfb14..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gvalue.h +++ /dev/null @@ -1,183 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvalue.h: generic GValue functions - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VALUE_H__ -#define __G_VALUE_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_IS_VALUE: - * @type: A #GType value. - * - * Checks whether the passed in type ID can be used for g_value_init(). - * That is, this macro checks whether this type provides an implementation - * of the #GTypeValueTable functions required for a type to create a #GValue of. - * - * Returns: Whether @type is suitable as a #GValue type. - */ -#define G_TYPE_IS_VALUE(type) (g_type_check_is_value_type (type)) -/** - * G_IS_VALUE: - * @value: A #GValue structure. - * - * Checks if @value is a valid and initialized #GValue structure. - * - * Returns: %TRUE on success. - */ -#define G_IS_VALUE(value) (G_TYPE_CHECK_VALUE (value)) -/** - * G_VALUE_TYPE: - * @value: A #GValue structure. - * - * Get the type identifier of @value. - * - * Returns: the #GType. - */ -#define G_VALUE_TYPE(value) (((GValue*) (value))->g_type) -/** - * G_VALUE_TYPE_NAME: - * @value: A #GValue structure. - * - * Gets the type name of @value. - * - * Returns: the type name. - */ -#define G_VALUE_TYPE_NAME(value) (g_type_name (G_VALUE_TYPE (value))) -/** - * G_VALUE_HOLDS: - * @value: A #GValue structure. - * @type: A #GType value. - * - * Checks if @value holds (or contains) a value of @type. - * This macro will also check for @value != %NULL and issue a - * warning if the check fails. - * - * Returns: %TRUE if @value holds the @type. - */ -#define G_VALUE_HOLDS(value,type) (G_TYPE_CHECK_VALUE_TYPE ((value), (type))) - - -/* --- typedefs & structures --- */ -/** - * GValueTransform: - * @src_value: Source value. - * @dest_value: Target value. - * - * The type of value transformation functions which can be registered with - * g_value_register_transform_func(). - */ -typedef void (*GValueTransform) (const GValue *src_value, - GValue *dest_value); -/** - * GValue: - * - * An opaque structure used to hold different types of values. - * The data within the structure has protected scope: it is accessible only - * to functions within a #GTypeValueTable structure, or implementations of - * the g_value_*() API. That is, code portions which implement new fundamental - * types. - * #GValue users cannot make any assumptions about how data is stored - * within the 2 element @data union, and the @g_type member should - * only be accessed through the G_VALUE_TYPE() macro. - */ -struct _GValue -{ - /*< private >*/ - GType g_type; - - /* public for GTypeValueTable methods */ - union { - gint v_int; - guint v_uint; - glong v_long; - gulong v_ulong; - gint64 v_int64; - guint64 v_uint64; - gfloat v_float; - gdouble v_double; - gpointer v_pointer; - } data[2]; -}; - - -/* --- prototypes --- */ -GValue* g_value_init (GValue *value, - GType g_type); -void g_value_copy (const GValue *src_value, - GValue *dest_value); -GValue* g_value_reset (GValue *value); -void g_value_unset (GValue *value); -void g_value_set_instance (GValue *value, - gpointer instance); - - -/* --- private --- */ -gboolean g_value_fits_pointer (const GValue *value); -gpointer g_value_peek_pointer (const GValue *value); - - -/* --- implementation details --- */ -gboolean g_value_type_compatible (GType src_type, - GType dest_type); -gboolean g_value_type_transformable (GType src_type, - GType dest_type); -gboolean g_value_transform (const GValue *src_value, - GValue *dest_value); -void g_value_register_transform_func (GType src_type, - GType dest_type, - GValueTransform transform_func); - -/** - * G_VALUE_NOCOPY_CONTENTS: - * - * If passed to G_VALUE_COLLECT(), allocated data won't be copied - * but used verbatim. This does not affect ref-counted types like - * objects. - */ -#define G_VALUE_NOCOPY_CONTENTS (1 << 27) - -/** - * G_VALUE_INIT: - * - * A #GValue must be initialized before it can be used. - * This macro can be used as initializer instead of an explicit - * { 0 } when declaring a variable, - * but it cannot be assigned to a variable. - * - * |[ - * GValue value = G_VALUE_INIT; - * ]| - * - * Since: 2.30 - */ -#define G_VALUE_INIT { 0, { { 0 } } } - - -G_END_DECLS - -#endif /* __G_VALUE_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluearray.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluearray.h deleted file mode 100644 index de14934b..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluearray.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvaluearray.h: GLib array type holding GValues - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VALUE_ARRAY_H__ -#define __G_VALUE_ARRAY_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TYPE_VALUE_ARRAY: - * - * The type ID of the "GValueArray" type which is a boxed type, - * used to pass around pointers to GValueArrays. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_TYPE_VALUE_ARRAY (g_value_array_get_type ()) - -/* --- typedefs & structs --- */ -typedef struct _GValueArray GValueArray; -/** - * GValueArray: - * @n_values: number of values contained in the array - * @values: array of values - * - * A #GValueArray contains an array of #GValue elements. - */ -struct _GValueArray -{ - guint n_values; - GValue *values; - - /*< private >*/ - guint n_prealloced; -}; - -/* --- prototypes --- */ -GLIB_DEPRECATED_IN_2_32_FOR(g_array_get_type) -GType g_value_array_get_type (void) G_GNUC_CONST; - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_index) -GValue* g_value_array_get_nth (GValueArray *value_array, - guint index_); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_new) -GValueArray* g_value_array_new (guint n_prealloced); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_unref) -void g_value_array_free (GValueArray *value_array); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_ref) -GValueArray* g_value_array_copy (const GValueArray *value_array); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_prepend_vals) -GValueArray* g_value_array_prepend (GValueArray *value_array, - const GValue *value); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_append_vals) -GValueArray* g_value_array_append (GValueArray *value_array, - const GValue *value); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_insert_vals) -GValueArray* g_value_array_insert (GValueArray *value_array, - guint index_, - const GValue *value); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_remove_index) -GValueArray* g_value_array_remove (GValueArray *value_array, - guint index_); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_sort) -GValueArray* g_value_array_sort (GValueArray *value_array, - GCompareFunc compare_func); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_sort_with_data) -GValueArray* g_value_array_sort_with_data (GValueArray *value_array, - GCompareDataFunc compare_func, - gpointer user_data); - - -G_END_DECLS - -#endif /* __G_VALUE_ARRAY_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluecollector.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluecollector.h deleted file mode 100644 index 05a436aa..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluecollector.h +++ /dev/null @@ -1,256 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvaluecollector.h: GValue varargs stubs - */ -/** - * SECTION:value_collection - * @Short_description: Converting varargs to generic values - * @Title: Varargs Value Collection - * - * The macros in this section provide the varargs parsing support needed - * in variadic GObject functions such as g_object_new() or g_object_set(). - * They currently support the collection of integral types, floating point - * types and pointers. - */ -#ifndef __G_VALUE_COLLECTOR_H__ -#define __G_VALUE_COLLECTOR_H__ - -#include - -G_BEGIN_DECLS - -/* we may want to add aggregate types here some day, if requested - * by users. the basic C types are covered already, everything - * smaller than an int is promoted to an integer and floats are - * always promoted to doubles for varargs call constructions. - */ -enum /*< skip >*/ -{ - G_VALUE_COLLECT_INT = 'i', - G_VALUE_COLLECT_LONG = 'l', - G_VALUE_COLLECT_INT64 = 'q', - G_VALUE_COLLECT_DOUBLE = 'd', - G_VALUE_COLLECT_POINTER = 'p' -}; - - -/* vararg union holding actual values collected - */ -/** - * GTypeCValue: - * @v_int: the field for holding integer values - * @v_long: the field for holding long integer values - * @v_int64: the field for holding 64 bit integer values - * @v_double: the field for holding floating point values - * @v_pointer: the field for holding pointers - * - * A union holding one collected value. - */ -union _GTypeCValue -{ - gint v_int; - glong v_long; - gint64 v_int64; - gdouble v_double; - gpointer v_pointer; -}; - -/** - * G_VALUE_COLLECT_INIT: - * @value: a #GValue return location. @value must contain only 0 bytes. - * @_value_type: the #GType to use for @value. - * @var_args: the va_list variable; it may be evaluated multiple times - * @flags: flags which are passed on to the collect_value() function of - * the #GTypeValueTable of @value. - * @__error: a #gchar** variable that will be modified to hold a g_new() - * allocated error messages if something fails - * - * Collects a variable argument value from a va_list. We have to - * implement the varargs collection as a macro, because on some systems - * va_list variables cannot be passed by reference. - * - * Since: 2.24 - */ -#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error) \ -G_STMT_START { \ - GValue *_val = (value); \ - guint _flags = (flags); \ - GTypeValueTable *_vtab = g_type_value_table_peek (_value_type); \ - const gchar *_collect_format = _vtab->collect_format; \ - GTypeCValue _cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, }; \ - guint _n_values = 0; \ - \ - _val->g_type = _value_type; /* value_meminit() from gvalue.c */ \ - while (*_collect_format) \ - { \ - GTypeCValue *_cvalue = _cvalues + _n_values++; \ - \ - switch (*_collect_format++) \ - { \ - case G_VALUE_COLLECT_INT: \ - _cvalue->v_int = va_arg ((var_args), gint); \ - break; \ - case G_VALUE_COLLECT_LONG: \ - _cvalue->v_long = va_arg ((var_args), glong); \ - break; \ - case G_VALUE_COLLECT_INT64: \ - _cvalue->v_int64 = va_arg ((var_args), gint64); \ - break; \ - case G_VALUE_COLLECT_DOUBLE: \ - _cvalue->v_double = va_arg ((var_args), gdouble); \ - break; \ - case G_VALUE_COLLECT_POINTER: \ - _cvalue->v_pointer = va_arg ((var_args), gpointer); \ - break; \ - default: \ - g_assert_not_reached (); \ - } \ - } \ - *(__error) = _vtab->collect_value (_val, \ - _n_values, \ - _cvalues, \ - _flags); \ -} G_STMT_END - -/** - * G_VALUE_COLLECT: - * @value: a #GValue return location. @value is supposed to be initialized - * according to the value type to be collected - * @var_args: the va_list variable; it may be evaluated multiple times - * @flags: flags which are passed on to the collect_value() function of - * the #GTypeValueTable of @value. - * @__error: a #gchar** variable that will be modified to hold a g_new() - * allocated error messages if something fails - * - * Collects a variable argument value from a va_list. We have to - * implement the varargs collection as a macro, because on some systems - * va_list variables cannot be passed by reference. - * - * Note: If you are creating the @value argument just before calling this macro, - * you should use the #G_VALUE_COLLECT_INIT variant and pass the unitialized - * #GValue. That variant is faster than #G_VALUE_COLLECT. - */ -#define G_VALUE_COLLECT(value, var_args, flags, __error) G_STMT_START { \ - GValue *_value = (value); \ - GType _value_type = G_VALUE_TYPE (_value); \ - GTypeValueTable *_vtable = g_type_value_table_peek (_value_type); \ - \ - if (_vtable->value_free) \ - _vtable->value_free (_value); \ - memset (_value->data, 0, sizeof (_value->data)); \ - \ - G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error); \ -} G_STMT_END - -#define G_VALUE_COLLECT_SKIP(_value_type, var_args) \ -G_STMT_START { \ - GTypeValueTable *_vtable = g_type_value_table_peek (_value_type); \ - const gchar *_collect_format = _vtable->collect_format; \ - \ - while (*_collect_format) \ - { \ - switch (*_collect_format++) \ - { \ - case G_VALUE_COLLECT_INT: \ - va_arg ((var_args), gint); \ - break; \ - case G_VALUE_COLLECT_LONG: \ - va_arg ((var_args), glong); \ - break; \ - case G_VALUE_COLLECT_INT64: \ - va_arg ((var_args), gint64); \ - break; \ - case G_VALUE_COLLECT_DOUBLE: \ - va_arg ((var_args), gdouble); \ - break; \ - case G_VALUE_COLLECT_POINTER: \ - va_arg ((var_args), gpointer); \ - break; \ - default: \ - g_assert_not_reached (); \ - } \ - } \ -} G_STMT_END - -/** - * G_VALUE_LCOPY: - * @value: a #GValue return location. @value is supposed to be initialized - * according to the value type to be collected - * @var_args: the va_list variable; it may be evaluated multiple times - * @flags: flags which are passed on to the lcopy_value() function of - * the #GTypeValueTable of @value. - * @__error: a #gchar** variable that will be modified to hold a g_new() - * allocated error messages if something fails - * - * Collects a value's variable argument locations from a va_list. Usage is - * analogous to G_VALUE_COLLECT(). - */ -#define G_VALUE_LCOPY(value, var_args, flags, __error) \ -G_STMT_START { \ - const GValue *_value = (value); \ - guint _flags = (flags); \ - GType _value_type = G_VALUE_TYPE (_value); \ - GTypeValueTable *_vtable = g_type_value_table_peek (_value_type); \ - const gchar *_lcopy_format = _vtable->lcopy_format; \ - GTypeCValue _cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, }; \ - guint _n_values = 0; \ - \ - while (*_lcopy_format) \ - { \ - GTypeCValue *_cvalue = _cvalues + _n_values++; \ - \ - switch (*_lcopy_format++) \ - { \ - case G_VALUE_COLLECT_INT: \ - _cvalue->v_int = va_arg ((var_args), gint); \ - break; \ - case G_VALUE_COLLECT_LONG: \ - _cvalue->v_long = va_arg ((var_args), glong); \ - break; \ - case G_VALUE_COLLECT_INT64: \ - _cvalue->v_int64 = va_arg ((var_args), gint64); \ - break; \ - case G_VALUE_COLLECT_DOUBLE: \ - _cvalue->v_double = va_arg ((var_args), gdouble); \ - break; \ - case G_VALUE_COLLECT_POINTER: \ - _cvalue->v_pointer = va_arg ((var_args), gpointer); \ - break; \ - default: \ - g_assert_not_reached (); \ - } \ - } \ - *(__error) = _vtable->lcopy_value (_value, \ - _n_values, \ - _cvalues, \ - _flags); \ -} G_STMT_END - - -/** - * G_VALUE_COLLECT_FORMAT_MAX_LENGTH: - * - * The maximal number of #GTypeCValues which can be collected for a - * single #GValue. - */ -#define G_VALUE_COLLECT_FORMAT_MAX_LENGTH (8) - -G_END_DECLS - -#endif /* __G_VALUE_COLLECTOR_H__ */ diff --git a/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluetypes.h b/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluetypes.h deleted file mode 100644 index 584162eb..00000000 --- a/GstreamerHelper/x64/include/glib-2.0/gobject/gvaluetypes.h +++ /dev/null @@ -1,264 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvaluetypes.h: GLib default values - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VALUETYPES_H__ -#define __G_VALUETYPES_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_VALUE_HOLDS_CHAR: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_CHAR. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_CHAR(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_CHAR)) -/** - * G_VALUE_HOLDS_UCHAR: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_UCHAR. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_UCHAR(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UCHAR)) -/** - * G_VALUE_HOLDS_BOOLEAN: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_BOOLEAN. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_BOOLEAN(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOOLEAN)) -/** - * G_VALUE_HOLDS_INT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_INT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_INT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT)) -/** - * G_VALUE_HOLDS_UINT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_UINT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_UINT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT)) -/** - * G_VALUE_HOLDS_LONG: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_LONG. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_LONG(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_LONG)) -/** - * G_VALUE_HOLDS_ULONG: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_ULONG. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_ULONG(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ULONG)) -/** - * G_VALUE_HOLDS_INT64: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_INT64. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_INT64(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT64)) -/** - * G_VALUE_HOLDS_UINT64: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_UINT64. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_UINT64(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT64)) -/** - * G_VALUE_HOLDS_FLOAT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_FLOAT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_FLOAT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLOAT)) -/** - * G_VALUE_HOLDS_DOUBLE: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_DOUBLE. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_DOUBLE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_DOUBLE)) -/** - * G_VALUE_HOLDS_STRING: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_STRING. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_STRING(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_STRING)) -/** - * G_VALUE_HOLDS_POINTER: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_POINTER. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_POINTER(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_POINTER)) -/** - * G_TYPE_GTYPE: - * - * The type for #GType. - */ -#define G_TYPE_GTYPE (g_gtype_get_type()) -/** - * G_VALUE_HOLDS_GTYPE: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_GTYPE. - * - * Since: 2.12 - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_GTYPE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_GTYPE)) -/** - * G_VALUE_HOLDS_VARIANT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_VARIANT. - * - * Returns: %TRUE on success. - * - * Since: 2.26 - */ -#define G_VALUE_HOLDS_VARIANT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_VARIANT)) - - -/* --- prototypes --- */ -GLIB_DEPRECATED_IN_2_32_FOR(g_value_set_schar) -void g_value_set_char (GValue *value, - gchar v_char); -GLIB_DEPRECATED_IN_2_32_FOR(g_value_get_schar) -gchar g_value_get_char (const GValue *value); -void g_value_set_schar (GValue *value, - gint8 v_char); -gint8 g_value_get_schar (const GValue *value); -void g_value_set_uchar (GValue *value, - guchar v_uchar); -guchar g_value_get_uchar (const GValue *value); -void g_value_set_boolean (GValue *value, - gboolean v_boolean); -gboolean g_value_get_boolean (const GValue *value); -void g_value_set_int (GValue *value, - gint v_int); -gint g_value_get_int (const GValue *value); -void g_value_set_uint (GValue *value, - guint v_uint); -guint g_value_get_uint (const GValue *value); -void g_value_set_long (GValue *value, - glong v_long); -glong g_value_get_long (const GValue *value); -void g_value_set_ulong (GValue *value, - gulong v_ulong); -gulong g_value_get_ulong (const GValue *value); -void g_value_set_int64 (GValue *value, - gint64 v_int64); -gint64 g_value_get_int64 (const GValue *value); -void g_value_set_uint64 (GValue *value, - guint64 v_uint64); -guint64 g_value_get_uint64 (const GValue *value); -void g_value_set_float (GValue *value, - gfloat v_float); -gfloat g_value_get_float (const GValue *value); -void g_value_set_double (GValue *value, - gdouble v_double); -gdouble g_value_get_double (const GValue *value); -void g_value_set_string (GValue *value, - const gchar *v_string); -void g_value_set_static_string (GValue *value, - const gchar *v_string); -const gchar * g_value_get_string (const GValue *value); -gchar* g_value_dup_string (const GValue *value); -void g_value_set_pointer (GValue *value, - gpointer v_pointer); -gpointer g_value_get_pointer (const GValue *value); -GType g_gtype_get_type (void); -void g_value_set_gtype (GValue *value, - GType v_gtype); -GType g_value_get_gtype (const GValue *value); -void g_value_set_variant (GValue *value, - GVariant *variant); -void g_value_take_variant (GValue *value, - GVariant *variant); -GVariant* g_value_get_variant (const GValue *value); -GVariant* g_value_dup_variant (const GValue *value); - - -/* Convenience for registering new pointer types */ -GType g_pointer_type_register_static (const gchar *name); - -/* debugging aid, describe value contents as string */ -gchar* g_strdup_value_contents (const GValue *value); - - -void g_value_take_string (GValue *value, - gchar *v_string); -GLIB_DEPRECATED_FOR(g_value_take_string) -void g_value_set_string_take_ownership (GValue *value, - gchar *v_string); - - -/* humpf, need a C representable type name for G_TYPE_STRING */ -/** - * gchararray: - * - * A C representable type name for #G_TYPE_STRING. - */ -typedef gchar* gchararray; - - -G_END_DECLS - -#endif /* __G_VALUETYPES_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsink.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsink.h deleted file mode 100644 index c1161f01..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsink.h +++ /dev/null @@ -1,127 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_APP_SINK_H_ -#define _GST_APP_SINK_H_ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_APP_SINK \ - (gst_app_sink_get_type()) -#define GST_APP_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SINK,GstAppSink)) -#define GST_APP_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SINK,GstAppSinkClass)) -#define GST_IS_APP_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SINK)) -#define GST_IS_APP_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SINK)) -#define GST_APP_SINK_CAST(obj) \ - ((GstAppSink*)(obj)) - -typedef struct _GstAppSink GstAppSink; -typedef struct _GstAppSinkClass GstAppSinkClass; -typedef struct _GstAppSinkPrivate GstAppSinkPrivate; - -/** - * GstAppSinkCallbacks: (skip) - * @eos: Called when the end-of-stream has been reached. This callback - * is called from the steaming thread. - * @new_preroll: Called when a new preroll sample is available. - * This callback is called from the steaming thread. - * The new preroll sample can be retrieved with - * gst_app_sink_pull_preroll() either from this callback - * or from any other thread. - * @new_sample: Called when a new sample is available. - * This callback is called from the steaming thread. - * The new sample can be retrieved with - * gst_app_sink_pull_sample() either from this callback - * or from any other thread. - * - * A set of callbacks that can be installed on the appsink with - * gst_app_sink_set_callbacks(). - */ -typedef struct { - void (*eos) (GstAppSink *appsink, gpointer user_data); - GstFlowReturn (*new_preroll) (GstAppSink *appsink, gpointer user_data); - GstFlowReturn (*new_sample) (GstAppSink *appsink, gpointer user_data); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstAppSinkCallbacks; - -struct _GstAppSink -{ - GstBaseSink basesink; - - /*< private >*/ - GstAppSinkPrivate *priv; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstAppSinkClass -{ - GstBaseSinkClass basesink_class; - - /* signals */ - void (*eos) (GstAppSink *appsink); - GstFlowReturn (*new_preroll) (GstAppSink *appsink); - GstFlowReturn (*new_sample) (GstAppSink *appsink); - - /* actions */ - GstSample * (*pull_preroll) (GstAppSink *appsink); - GstSample * (*pull_sample) (GstAppSink *appsink); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_app_sink_get_type(void); - -void gst_app_sink_set_caps (GstAppSink *appsink, const GstCaps *caps); -GstCaps * gst_app_sink_get_caps (GstAppSink *appsink); - -gboolean gst_app_sink_is_eos (GstAppSink *appsink); - -void gst_app_sink_set_emit_signals (GstAppSink *appsink, gboolean emit); -gboolean gst_app_sink_get_emit_signals (GstAppSink *appsink); - -void gst_app_sink_set_max_buffers (GstAppSink *appsink, guint max); -guint gst_app_sink_get_max_buffers (GstAppSink *appsink); - -void gst_app_sink_set_drop (GstAppSink *appsink, gboolean drop); -gboolean gst_app_sink_get_drop (GstAppSink *appsink); - -GstSample * gst_app_sink_pull_preroll (GstAppSink *appsink); -GstSample * gst_app_sink_pull_sample (GstAppSink *appsink); - -void gst_app_sink_set_callbacks (GstAppSink * appsink, - GstAppSinkCallbacks *callbacks, - gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsrc.h deleted file mode 100644 index 417a56d9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/app/gstappsrc.h +++ /dev/null @@ -1,150 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_APP_SRC_H_ -#define _GST_APP_SRC_H_ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_APP_SRC \ - (gst_app_src_get_type()) -#define GST_APP_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SRC,GstAppSrc)) -#define GST_APP_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SRC,GstAppSrcClass)) -#define GST_IS_APP_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SRC)) -#define GST_IS_APP_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SRC)) -#define GST_APP_SRC_CAST(obj) \ - ((GstAppSrc*)(obj)) - -typedef struct _GstAppSrc GstAppSrc; -typedef struct _GstAppSrcClass GstAppSrcClass; -typedef struct _GstAppSrcPrivate GstAppSrcPrivate; - -/** - * GstAppSrcCallbacks: (skip) - * @need_data: Called when the appsrc needs more data. A buffer or EOS should be - * pushed to appsrc from this thread or another thread. @length is just a hint - * and when it is set to -1, any number of bytes can be pushed into @appsrc. - * @enough_data: Called when appsrc has enough data. It is recommended that the - * application stops calling push-buffer until the need_data callback is - * emitted again to avoid excessive buffer queueing. - * @seek_data: Called when a seek should be performed to the offset. - * The next push-buffer should produce buffers from the new @offset. - * This callback is only called for seekable stream types. - * - * A set of callbacks that can be installed on the appsrc with - * gst_app_src_set_callbacks(). - */ -typedef struct { - void (*need_data) (GstAppSrc *src, guint length, gpointer user_data); - void (*enough_data) (GstAppSrc *src, gpointer user_data); - gboolean (*seek_data) (GstAppSrc *src, guint64 offset, gpointer user_data); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstAppSrcCallbacks; - -/** - * GstAppStreamType: - * @GST_APP_STREAM_TYPE_STREAM: No seeking is supported in the stream, such as a - * live stream. - * @GST_APP_STREAM_TYPE_SEEKABLE: The stream is seekable but seeking might not - * be very fast, such as data from a webserver. - * @GST_APP_STREAM_TYPE_RANDOM_ACCESS: The stream is seekable and seeking is fast, - * such as in a local file. - * - * The stream type. - */ -typedef enum -{ - GST_APP_STREAM_TYPE_STREAM, - GST_APP_STREAM_TYPE_SEEKABLE, - GST_APP_STREAM_TYPE_RANDOM_ACCESS -} GstAppStreamType; - -struct _GstAppSrc -{ - GstBaseSrc basesrc; - - /*< private >*/ - GstAppSrcPrivate *priv; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstAppSrcClass -{ - GstBaseSrcClass basesrc_class; - - /* signals */ - void (*need_data) (GstAppSrc *appsrc, guint length); - void (*enough_data) (GstAppSrc *appsrc); - gboolean (*seek_data) (GstAppSrc *appsrc, guint64 offset); - - /* actions */ - GstFlowReturn (*push_buffer) (GstAppSrc *appsrc, GstBuffer *buffer); - GstFlowReturn (*end_of_stream) (GstAppSrc *appsrc); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_app_src_get_type(void); - -/* GType getter for GstAppStreamType */ -#define GST_TYPE_APP_STREAM_TYPE (gst_app_stream_type_get_type ()) -GType gst_app_stream_type_get_type (void); - -void gst_app_src_set_caps (GstAppSrc *appsrc, const GstCaps *caps); -GstCaps* gst_app_src_get_caps (GstAppSrc *appsrc); - -void gst_app_src_set_size (GstAppSrc *appsrc, gint64 size); -gint64 gst_app_src_get_size (GstAppSrc *appsrc); - -void gst_app_src_set_stream_type (GstAppSrc *appsrc, GstAppStreamType type); -GstAppStreamType gst_app_src_get_stream_type (GstAppSrc *appsrc); - -void gst_app_src_set_max_bytes (GstAppSrc *appsrc, guint64 max); -guint64 gst_app_src_get_max_bytes (GstAppSrc *appsrc); - -void gst_app_src_set_latency (GstAppSrc *appsrc, guint64 min, guint64 max); -void gst_app_src_get_latency (GstAppSrc *appsrc, guint64 *min, guint64 *max); - -void gst_app_src_set_emit_signals (GstAppSrc *appsrc, gboolean emit); -gboolean gst_app_src_get_emit_signals (GstAppSrc *appsrc); - -GstFlowReturn gst_app_src_push_buffer (GstAppSrc *appsrc, GstBuffer *buffer); -GstFlowReturn gst_app_src_end_of_stream (GstAppSrc *appsrc); - -void gst_app_src_set_callbacks (GstAppSrc * appsrc, - GstAppSrcCallbacks *callbacks, - gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-channels.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-channels.h deleted file mode 100644 index 7885140d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-channels.h +++ /dev/null @@ -1,166 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_CHANNELS_H__ -#define __GST_AUDIO_CHANNELS_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstAudioChannelPosition: - * @GST_AUDIO_CHANNEL_POSITION_MONO: Mono without direction; - * can only be used with 1 channel - * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT: Front left - * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT: Front right - * @GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER: Front center - * @GST_AUDIO_CHANNEL_POSITION_LFE1: Low-frequency effects 1 (subwoofer) - * @GST_AUDIO_CHANNEL_POSITION_REAR_LEFT: Rear left - * @GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT: Rear right - * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: Front left of center - * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: Front right of center - * @GST_AUDIO_CHANNEL_POSITION_REAR_CENTER: Rear center - * @GST_AUDIO_CHANNEL_POSITION_LFE2: Low-frequency effects 2 (subwoofer) - * @GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT: Side left - * @GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT: Side right - * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT: Top front left - * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT: Top front right - * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER: Top front center - * @GST_AUDIO_CHANNEL_POSITION_TOP_CENTER: Top center - * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT: Top rear left - * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT: Top rear right - * @GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT: Top side right - * @GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT: Top rear right - * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER: Top rear center - * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER: Bottom front center - * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT: Bottom front left - * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT: Bottom front right - * @GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT: Wide left (between front left and side left) - * @GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT: Wide right (between front right and side right) - * @GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT: Surround left (between rear left and side left) - * @GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT: Surround right (between rear right and side right) - * @GST_AUDIO_CHANNEL_POSITION_NONE: used for position-less channels, e.g. - * from a sound card that records 1024 channels; mutually exclusive with - * any other channel position - * @GST_AUDIO_CHANNEL_POSITION_INVALID: invalid position - * - * Audio channel positions. - * - * These are the channels defined in SMPTE 2036-2-2008 - * Table 1 for 22.2 audio systems with the Surround and Wide channels from - * DTS Coherent Acoustics (v.1.3.1) and 10.2 and 7.1 layouts. In the caps the - * actual channel layout is expressed with a channel count and a channel mask, - * which describes the existing channels. The positions in the bit mask correspond - * to the enum values. - * For negotiation it is allowed to have more bits set in the channel mask than - * the number of channels to specify the allowed channel positions but this is - * not allowed in negotiated caps. It is not allowed in any situation other - * than the one mentioned below to have less bits set in the channel mask than - * the number of channels. - * - * @GST_AUDIO_CHANNEL_POSITION_MONO can only be used with a single mono channel that - * has no direction information and would be mixed into all directional channels. - * This is expressed in caps by having a single channel and no channel mask. - * - * @GST_AUDIO_CHANNEL_POSITION_NONE can only be used if all channels have this position. - * This is expressed in caps by having a channel mask with no bits set. - * - * As another special case it is allowed to have two channels without a channel mask. - * This implicitely means that this is a stereo stream with a front left and front right - * channel. - */ -typedef enum { - /* These get negative indices to allow to use - * the enum values of the normal cases for the - * bit-mask position */ - GST_AUDIO_CHANNEL_POSITION_NONE = -3, - GST_AUDIO_CHANNEL_POSITION_MONO = -2, - GST_AUDIO_CHANNEL_POSITION_INVALID = -1, - - /* Normal cases */ - GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT = 0, - GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, - GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, - GST_AUDIO_CHANNEL_POSITION_LFE1, - GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, - GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, - GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, - GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, - GST_AUDIO_CHANNEL_POSITION_REAR_CENTER, - GST_AUDIO_CHANNEL_POSITION_LFE2, - GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT, - GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT, - GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER, - GST_AUDIO_CHANNEL_POSITION_TOP_CENTER, - GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT, - GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT, - GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER, - GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER, - GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT, - GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT, - GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT, - GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT, - GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, - GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT -} GstAudioChannelPosition; - -#define GST_AUDIO_CHANNEL_POSITION_MASK(pos) (G_GUINT64_CONSTANT(1)<< GST_AUDIO_CHANNEL_POSITION_ ## pos) - -gboolean gst_audio_buffer_reorder_channels (GstBuffer * buffer, - GstAudioFormat format, - gint channels, - const GstAudioChannelPosition * from, - const GstAudioChannelPosition * to); - -gboolean gst_audio_reorder_channels (gpointer data, gsize size, - GstAudioFormat format, - gint channels, - const GstAudioChannelPosition * from, - const GstAudioChannelPosition * to); - -gboolean gst_audio_channel_positions_to_valid_order (GstAudioChannelPosition *position, - gint channels); - -gboolean gst_audio_check_valid_channel_positions (const GstAudioChannelPosition *position, - gint channels, gboolean force_order); - -gboolean gst_audio_channel_positions_to_mask (const GstAudioChannelPosition *position, - gint channels, gboolean force_order, - guint64 *channel_mask); - -gboolean gst_audio_channel_positions_from_mask (gint channels, guint64 channel_mask, - GstAudioChannelPosition * position); - -gboolean gst_audio_get_channel_reorder_map (gint channels, - const GstAudioChannelPosition * from, - const GstAudioChannelPosition * to, - gint *reorder_map); - -G_END_DECLS - -#endif /* __GST_AUDIO_CHANNELS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-enumtypes.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-enumtypes.h deleted file mode 100644 index a323a87d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-enumtypes.h +++ /dev/null @@ -1,39 +0,0 @@ - - - -#ifndef __GST_AUDIO_ENUM_TYPES_H__ -#define __GST_AUDIO_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "audio-format.h" */ -GType gst_audio_format_get_type (void); -#define GST_TYPE_AUDIO_FORMAT (gst_audio_format_get_type()) -GType gst_audio_format_flags_get_type (void); -#define GST_TYPE_AUDIO_FORMAT_FLAGS (gst_audio_format_flags_get_type()) -GType gst_audio_pack_flags_get_type (void); -#define GST_TYPE_AUDIO_PACK_FLAGS (gst_audio_pack_flags_get_type()) - -/* enumerations from "audio-channels.h" */ -GType gst_audio_channel_position_get_type (void); -#define GST_TYPE_AUDIO_CHANNEL_POSITION (gst_audio_channel_position_get_type()) - -/* enumerations from "audio-info.h" */ -GType gst_audio_flags_get_type (void); -#define GST_TYPE_AUDIO_FLAGS (gst_audio_flags_get_type()) -GType gst_audio_layout_get_type (void); -#define GST_TYPE_AUDIO_LAYOUT (gst_audio_layout_get_type()) - -/* enumerations from "gstaudioringbuffer.h" */ -GType gst_audio_ring_buffer_state_get_type (void); -#define GST_TYPE_AUDIO_RING_BUFFER_STATE (gst_audio_ring_buffer_state_get_type()) -GType gst_audio_ring_buffer_format_type_get_type (void); -#define GST_TYPE_AUDIO_RING_BUFFER_FORMAT_TYPE (gst_audio_ring_buffer_format_type_get_type()) -G_END_DECLS - -#endif /* __GST_AUDIO_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-format.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-format.h deleted file mode 100644 index e515d111..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-format.h +++ /dev/null @@ -1,330 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#ifndef __GST_AUDIO_FORMAT_H__ -#define __GST_AUDIO_FORMAT_H__ - -G_BEGIN_DECLS - -#include - -#if G_BYTE_ORDER == G_BIG_ENDIAN -#define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE -#define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE -#elif G_BYTE_ORDER == G_LITTLE_ENDIAN -#define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE -#define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE -#endif - -/** - * GstAudioFormat: - * @GST_AUDIO_FORMAT_UNKNOWN: unknown or unset audio format - * @GST_AUDIO_FORMAT_ENCODED: encoded audio format - * @GST_AUDIO_FORMAT_S8: 8 bits in 8 bits, signed - * @GST_AUDIO_FORMAT_U8: 8 bits in 8 bits, unsigned - * @GST_AUDIO_FORMAT_S16LE: 16 bits in 16 bits, signed, little endian - * @GST_AUDIO_FORMAT_S16BE: 16 bits in 16 bits, signed, big endian - * @GST_AUDIO_FORMAT_U16LE: 16 bits in 16 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U16BE: 16 bits in 16 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S24_32LE: 24 bits in 32 bits, signed, little endian - * @GST_AUDIO_FORMAT_S24_32BE: 24 bits in 32 bits, signed, big endian - * @GST_AUDIO_FORMAT_U24_32LE: 24 bits in 32 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U24_32BE: 24 bits in 32 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S32LE: 32 bits in 32 bits, signed, little endian - * @GST_AUDIO_FORMAT_S32BE: 32 bits in 32 bits, signed, big endian - * @GST_AUDIO_FORMAT_U32LE: 32 bits in 32 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U32BE: 32 bits in 32 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S24LE: 24 bits in 24 bits, signed, little endian - * @GST_AUDIO_FORMAT_S24BE: 24 bits in 24 bits, signed, big endian - * @GST_AUDIO_FORMAT_U24LE: 24 bits in 24 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U24BE: 24 bits in 24 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S20LE: 20 bits in 24 bits, signed, little endian - * @GST_AUDIO_FORMAT_S20BE: 20 bits in 24 bits, signed, big endian - * @GST_AUDIO_FORMAT_U20LE: 20 bits in 24 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U20BE: 20 bits in 24 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S18LE: 18 bits in 24 bits, signed, little endian - * @GST_AUDIO_FORMAT_S18BE: 18 bits in 24 bits, signed, big endian - * @GST_AUDIO_FORMAT_U18LE: 18 bits in 24 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U18BE: 18 bits in 24 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_F32LE: 32-bit floating point samples, little endian - * @GST_AUDIO_FORMAT_F32BE: 32-bit floating point samples, big endian - * @GST_AUDIO_FORMAT_F64LE: 64-bit floating point samples, little endian - * @GST_AUDIO_FORMAT_F64BE: 64-bit floating point samples, big endian - * @GST_AUDIO_FORMAT_S16: 16 bits in 16 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U16: 16 bits in 16 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S24_32: 24 bits in 32 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U24_32: 24 bits in 32 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S32: 32 bits in 32 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U32: 32 bits in 32 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S24: 24 bits in 24 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U24: 24 bits in 24 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S20: 20 bits in 24 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U20: 20 bits in 24 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S18: 18 bits in 24 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U18: 18 bits in 24 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_F32: 32-bit floating point samples, native endianness - * @GST_AUDIO_FORMAT_F64: 64-bit floating point samples, native endianness - * - * Enum value describing the most common audio formats. - */ -typedef enum { - GST_AUDIO_FORMAT_UNKNOWN, - GST_AUDIO_FORMAT_ENCODED, - /* 8 bit */ - GST_AUDIO_FORMAT_S8, - GST_AUDIO_FORMAT_U8, - /* 16 bit */ - GST_AUDIO_FORMAT_S16LE, - GST_AUDIO_FORMAT_S16BE, - GST_AUDIO_FORMAT_U16LE, - GST_AUDIO_FORMAT_U16BE, - /* 24 bit in low 3 bytes of 32 bits*/ - GST_AUDIO_FORMAT_S24_32LE, - GST_AUDIO_FORMAT_S24_32BE, - GST_AUDIO_FORMAT_U24_32LE, - GST_AUDIO_FORMAT_U24_32BE, - /* 32 bit */ - GST_AUDIO_FORMAT_S32LE, - GST_AUDIO_FORMAT_S32BE, - GST_AUDIO_FORMAT_U32LE, - GST_AUDIO_FORMAT_U32BE, - /* 24 bit in 3 bytes*/ - GST_AUDIO_FORMAT_S24LE, - GST_AUDIO_FORMAT_S24BE, - GST_AUDIO_FORMAT_U24LE, - GST_AUDIO_FORMAT_U24BE, - /* 20 bit in 3 bytes*/ - GST_AUDIO_FORMAT_S20LE, - GST_AUDIO_FORMAT_S20BE, - GST_AUDIO_FORMAT_U20LE, - GST_AUDIO_FORMAT_U20BE, - /* 18 bit in 3 bytes*/ - GST_AUDIO_FORMAT_S18LE, - GST_AUDIO_FORMAT_S18BE, - GST_AUDIO_FORMAT_U18LE, - GST_AUDIO_FORMAT_U18BE, - /* float */ - GST_AUDIO_FORMAT_F32LE, - GST_AUDIO_FORMAT_F32BE, - GST_AUDIO_FORMAT_F64LE, - GST_AUDIO_FORMAT_F64BE, - /* native endianness equivalents */ - GST_AUDIO_FORMAT_S16 = _GST_AUDIO_FORMAT_NE(S16), - GST_AUDIO_FORMAT_U16 = _GST_AUDIO_FORMAT_NE(U16), - GST_AUDIO_FORMAT_S24_32 = _GST_AUDIO_FORMAT_NE(S24_32), - GST_AUDIO_FORMAT_U24_32 = _GST_AUDIO_FORMAT_NE(U24_32), - GST_AUDIO_FORMAT_S32 = _GST_AUDIO_FORMAT_NE(S32), - GST_AUDIO_FORMAT_U32 = _GST_AUDIO_FORMAT_NE(U32), - GST_AUDIO_FORMAT_S24 = _GST_AUDIO_FORMAT_NE(S24), - GST_AUDIO_FORMAT_U24 = _GST_AUDIO_FORMAT_NE(U24), - GST_AUDIO_FORMAT_S20 = _GST_AUDIO_FORMAT_NE(S20), - GST_AUDIO_FORMAT_U20 = _GST_AUDIO_FORMAT_NE(U20), - GST_AUDIO_FORMAT_S18 = _GST_AUDIO_FORMAT_NE(S18), - GST_AUDIO_FORMAT_U18 = _GST_AUDIO_FORMAT_NE(U18), - GST_AUDIO_FORMAT_F32 = _GST_AUDIO_FORMAT_NE(F32), - GST_AUDIO_FORMAT_F64 = _GST_AUDIO_FORMAT_NE(F64) -} GstAudioFormat; - - -typedef struct _GstAudioFormatInfo GstAudioFormatInfo; - -/** - * GstAudioFormatFlags: - * @GST_AUDIO_FORMAT_FLAG_INTEGER: integer samples - * @GST_AUDIO_FORMAT_FLAG_FLOAT: float samples - * @GST_AUDIO_FORMAT_FLAG_SIGNED: signed samples - * @GST_AUDIO_FORMAT_FLAG_COMPLEX: complex layout - * @GST_AUDIO_FORMAT_FLAG_UNPACK: the format can be used in - * #GstAudioFormatUnpack and #GstAudioFormatPack functions - * - * The different audio flags that a format info can have. - */ -typedef enum -{ - GST_AUDIO_FORMAT_FLAG_INTEGER = (1 << 0), - GST_AUDIO_FORMAT_FLAG_FLOAT = (1 << 1), - GST_AUDIO_FORMAT_FLAG_SIGNED = (1 << 2), - GST_AUDIO_FORMAT_FLAG_COMPLEX = (1 << 4), - GST_AUDIO_FORMAT_FLAG_UNPACK = (1 << 5) -} GstAudioFormatFlags; - -/** - * GstAudioPackFlags: - * @GST_AUDIO_PACK_FLAG_NONE: No flag - * - * The different flags that can be used when packing and unpacking. - */ -typedef enum -{ - GST_AUDIO_PACK_FLAG_NONE = 0 -} GstAudioPackFlags; - -/** - * GstAudioFormatUnpack: - * @info: a #GstAudioFormatInfo - * @dest: (array) (element-type guint8): a destination array - * @data: (array) (element-type guint8): pointer to the audio data - * @length: the amount of samples to unpack. - * - * Unpacks @length samples from the given data of format @info. - * The samples will be unpacked into @dest which each channel - * interleaved. @dest should at least be big enough to hold @length * - * channels * size(unpack_format) bytes. - */ -typedef void (*GstAudioFormatUnpack) (const GstAudioFormatInfo *info, - GstAudioPackFlags flags, gpointer dest, - const gpointer data, gint length); -/** - * GstAudioFormatPack: - * @info: a #GstAudioFormatInfo - * @src: (array) (element-type guint8): a source array - * @data: (array) (element-type guint8): pointer to the destination - * data - * @length: the amount of samples to pack. - * - * Packs @length samples from @src to the data array in format @info. - * The samples from source have each channel interleaved - * and will be packed into @data. - */ -typedef void (*GstAudioFormatPack) (const GstAudioFormatInfo *info, - GstAudioPackFlags flags, const gpointer src, - gpointer data, gint length); - -/** - * GstAudioFormatInfo: - * @format: #GstAudioFormat - * @name: string representation of the format - * @description: user readable description of the format - * @flags: #GstAudioFormatFlags - * @endianness: the endianness - * @width: amount of bits used for one sample - * @depth: amount of valid bits in @width - * @silence: @width/8 bytes with 1 silent sample - * @unpack_format: the format of the unpacked samples - * @unpack_func: function to unpack samples - * @pack_func: function to pack samples - * - * Information for an audio format. - */ -struct _GstAudioFormatInfo { - GstAudioFormat format; - const gchar *name; - const gchar *description; - GstAudioFormatFlags flags; - gint endianness; - gint width; - gint depth; - guint8 silence[8]; - - GstAudioFormat unpack_format; - GstAudioFormatUnpack unpack_func; - GstAudioFormatPack pack_func; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_format_info_get_type (void); - -#define GST_AUDIO_FORMAT_INFO_FORMAT(info) ((info)->format) -#define GST_AUDIO_FORMAT_INFO_NAME(info) ((info)->name) -#define GST_AUDIO_FORMAT_INFO_FLAGS(info) ((info)->flags) - -#define GST_AUDIO_FORMAT_INFO_IS_INTEGER(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_INTEGER) -#define GST_AUDIO_FORMAT_INFO_IS_FLOAT(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_FLOAT) -#define GST_AUDIO_FORMAT_INFO_IS_SIGNED(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_SIGNED) - -#define GST_AUDIO_FORMAT_INFO_ENDIANNESS(info) ((info)->endianness) -#define GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN(info) ((info)->endianness == G_LITTLE_ENDIAN) -#define GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN(info) ((info)->endianness == G_BIG_ENDIAN) -#define GST_AUDIO_FORMAT_INFO_WIDTH(info) ((info)->width) -#define GST_AUDIO_FORMAT_INFO_DEPTH(info) ((info)->depth) - - -GstAudioFormat gst_audio_format_build_integer (gboolean sign, gint endianness, - gint width, gint depth) G_GNUC_CONST; - -GstAudioFormat gst_audio_format_from_string (const gchar *format) G_GNUC_CONST; -const gchar * gst_audio_format_to_string (GstAudioFormat format) G_GNUC_CONST; - -const GstAudioFormatInfo * - gst_audio_format_get_info (GstAudioFormat format) G_GNUC_CONST; - -void gst_audio_format_fill_silence (const GstAudioFormatInfo *info, - gpointer dest, gsize length); - -#define GST_AUDIO_RATE_RANGE "(int) [ 1, max ]" -#define GST_AUDIO_CHANNELS_RANGE "(int) [ 1, max ]" - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -# define GST_AUDIO_NE(s) G_STRINGIFY(s)"LE" -# define GST_AUDIO_OE(s) G_STRINGIFY(s)"BE" -#else -# define GST_AUDIO_NE(s) G_STRINGIFY(s)"BE" -# define GST_AUDIO_OE(s) G_STRINGIFY(s)"LE" -#endif - -#define GST_AUDIO_FORMATS_ALL " { S8, U8, " \ - "S16LE, S16BE, U16LE, U16BE, " \ - "S24_32LE, S24_32BE, U24_32LE, U24_32BE, " \ - "S32LE, S32BE, U32LE, U32BE, " \ - "S24LE, S24BE, U24LE, U24BE, " \ - "S20LE, S20BE, U20LE, U20BE, " \ - "S18LE, S18BE, U18LE, U18BE, " \ - "F32LE, F32BE, F64LE, F64BE }" - -/** - * GST_AUDIO_CAPS_MAKE: - * @format: string format that describes the sample layout, as string - * (e.g. "S16LE", "S8", etc.) - * - * Generic caps string for audio, for use in pad templates. - */ -#define GST_AUDIO_CAPS_MAKE(format) \ - "audio/x-raw, " \ - "format = (string) " format ", " \ - "rate = " GST_AUDIO_RATE_RANGE ", " \ - "channels = " GST_AUDIO_CHANNELS_RANGE - -/** - * GST_AUDIO_DEF_RATE: - * - * Standard sampling rate used in consumer audio. - */ -#define GST_AUDIO_DEF_RATE 44100 -/** - * GST_AUDIO_DEF_CHANNELS: - * - * Standard number of channels used in consumer audio. - */ -#define GST_AUDIO_DEF_CHANNELS 2 -/** - * GST_AUDIO_DEF_FORMAT: - * - * Standard format used in consumer audio. - */ -#define GST_AUDIO_DEF_FORMAT "S16LE" - -G_END_DECLS - -#endif /* __GST_AUDIO_FORMAT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-info.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-info.h deleted file mode 100644 index fb6ab260..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio-info.h +++ /dev/null @@ -1,133 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_INFO_H__ -#define __GST_AUDIO_INFO_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstAudioInfo GstAudioInfo; - -/** - * GstAudioFlags: - * @GST_AUDIO_FLAG_NONE: no valid flag - * @GST_AUDIO_FLAG_UNPOSITIONED: the position array explicitly - * contains unpositioned channels. - * - * Extra audio flags - */ -typedef enum { - GST_AUDIO_FLAG_NONE = 0, - GST_AUDIO_FLAG_UNPOSITIONED = (1 << 0) -} GstAudioFlags; - -/** - * GstAudioLayout: - * @GST_AUDIO_LAYOUT_INTERLEAVED: interleaved audio - * @GST_AUDIO_LAYOUT_NON_INTERLEAVED: non-interleaved audio - * - * Layout of the audio samples for the different channels. - */ -typedef enum { - GST_AUDIO_LAYOUT_INTERLEAVED = 0, - GST_AUDIO_LAYOUT_NON_INTERLEAVED -} GstAudioLayout; - -/** - * GstAudioInfo: - * @finfo: the format info of the audio - * @flags: additional audio flags - * @layout: audio layout - * @rate: the audio sample rate - * @channels: the number of channels - * @bpf: the number of bytes for one frame, this is the size of one - * sample * @channels - * @position: the positions for each channel - * - * Information describing audio properties. This information can be filled - * in from GstCaps with gst_audio_info_from_caps(). - * - * Use the provided macros to access the info in this structure. - */ -struct _GstAudioInfo { - const GstAudioFormatInfo *finfo; - GstAudioFlags flags; - GstAudioLayout layout; - gint rate; - gint channels; - gint bpf; - GstAudioChannelPosition position[64]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_info_get_type (void); - -#define GST_AUDIO_INFO_IS_VALID(i) ((i)->finfo != NULL && (i)->rate > 0 && (i)->channels > 0 && (i)->bpf > 0) - -#define GST_AUDIO_INFO_FORMAT(i) (GST_AUDIO_FORMAT_INFO_FORMAT((i)->finfo)) -#define GST_AUDIO_INFO_NAME(i) (GST_AUDIO_FORMAT_INFO_NAME((i)->finfo)) -#define GST_AUDIO_INFO_WIDTH(i) (GST_AUDIO_FORMAT_INFO_WIDTH((i)->finfo)) -#define GST_AUDIO_INFO_DEPTH(i) (GST_AUDIO_FORMAT_INFO_DEPTH((i)->finfo)) -#define GST_AUDIO_INFO_BPS(info) (GST_AUDIO_INFO_DEPTH(info) >> 3) - -#define GST_AUDIO_INFO_IS_INTEGER(i) (GST_AUDIO_FORMAT_INFO_IS_INTEGER((i)->finfo)) -#define GST_AUDIO_INFO_IS_FLOAT(i) (GST_AUDIO_FORMAT_INFO_IS_FLOAT((i)->finfo)) -#define GST_AUDIO_INFO_IS_SIGNED(i) (GST_AUDIO_FORMAT_INFO_IS_SIGNED((i)->finfo)) - -#define GST_AUDIO_INFO_ENDIANNESS(i) (GST_AUDIO_FORMAT_INFO_ENDIANNES((i)->finfo)) -#define GST_AUDIO_INFO_IS_LITTLE_ENDIAN(i) (GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN((i)->finfo)) -#define GST_AUDIO_INFO_IS_BIG_ENDIAN(i) (GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN((i)->finfo)) - -#define GST_AUDIO_INFO_FLAGS(info) ((info)->flags) -#define GST_AUDIO_INFO_IS_UNPOSITIONED(info) ((info)->flags & GST_AUDIO_FLAG_UNPOSITIONED) -#define GST_AUDIO_INFO_LAYOUT(info) ((info)->layout) - -#define GST_AUDIO_INFO_RATE(info) ((info)->rate) -#define GST_AUDIO_INFO_CHANNELS(info) ((info)->channels) -#define GST_AUDIO_INFO_BPF(info) ((info)->bpf) -#define GST_AUDIO_INFO_POSITION(info,c) ((info)->position[c]) - -GstAudioInfo * gst_audio_info_new (void); -void gst_audio_info_init (GstAudioInfo *info); -GstAudioInfo * gst_audio_info_copy (const GstAudioInfo *info); -void gst_audio_info_free (GstAudioInfo *info); - -void gst_audio_info_set_format (GstAudioInfo *info, GstAudioFormat format, - gint rate, gint channels, - const GstAudioChannelPosition *position); - -gboolean gst_audio_info_from_caps (GstAudioInfo *info, const GstCaps *caps); -GstCaps * gst_audio_info_to_caps (const GstAudioInfo *info); - -gboolean gst_audio_info_convert (const GstAudioInfo * info, - GstFormat src_fmt, gint64 src_val, - GstFormat dest_fmt, gint64 * dest_val); - -G_END_DECLS - -#endif /* __GST_AUDIO_INFO_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio.h deleted file mode 100644 index e97fc1ab..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/audio.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_AUDIO_H__ -#define __GST_AUDIO_AUDIO_H__ - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* conversion macros */ -/** - * GST_FRAMES_TO_CLOCK_TIME: - * @frames: sample frames - * @rate: sampling rate - * - * Calculate clocktime from sample @frames and @rate. - */ -#define GST_FRAMES_TO_CLOCK_TIME(frames, rate) \ - ((GstClockTime) gst_util_uint64_scale_round (frames, GST_SECOND, rate)) - -/** - * GST_CLOCK_TIME_TO_FRAMES: - * @clocktime: clock time - * @rate: sampling rate - * - * Calculate frames from @clocktime and sample @rate. - */ -#define GST_CLOCK_TIME_TO_FRAMES(clocktime, rate) \ - gst_util_uint64_scale_round (clocktime, rate, GST_SECOND) - -/* - * this library defines and implements some helper functions for audio - * handling - */ - -GstBuffer * gst_audio_buffer_clip (GstBuffer *buffer, GstSegment *segment, - gint rate, gint bpf); - - -G_END_DECLS - -#endif /* __GST_AUDIO_AUDIO_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h deleted file mode 100644 index d3e65e37..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h +++ /dev/null @@ -1,190 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiobasesink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* a base class for audio sinks. - * - * It uses a ringbuffer to schedule playback of samples. This makes - * it very easy to drop or insert samples to align incoming - * buffers to the exact playback timestamp. - * - * Subclasses must provide a ringbuffer pointing to either DMA - * memory or regular memory. A subclass should also call a callback - * function when it has played N segments in the buffer. The subclass - * is free to use a thread to signal this callback, use EIO or any - * other mechanism. - * - * The base class is able to operate in push or pull mode. The chain - * mode will queue the samples in the ringbuffer as much as possible. - * The available space is calculated in the callback function. - * - * The pull mode will pull_range() a new buffer of N samples with a - * configurable latency. This allows for high-end real time - * audio processing pipelines driven by the audiosink. The callback - * function will be used to perform a pull_range() on the sinkpad. - * The thread scheduling the callback can be a real-time thread. - * - * Subclasses must implement a GstAudioRingBuffer in addition to overriding - * the methods in GstBaseSink and this class. - */ - -#ifndef __GST_AUDIO_BASE_SINK_H__ -#define __GST_AUDIO_BASE_SINK_H__ - -#include -#include -#include "gstaudioringbuffer.h" -#include "gstaudioclock.h" - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_BASE_SINK (gst_audio_base_sink_get_type()) -#define GST_AUDIO_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSink)) -#define GST_AUDIO_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSinkClass)) -#define GST_AUDIO_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SINK, GstAudioBaseSinkClass)) -#define GST_IS_AUDIO_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SINK)) -#define GST_IS_AUDIO_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_BASE_SINK)) - -/** - * GST_AUDIO_BASE_SINK_CLOCK: - * @obj: a #GstAudioBaseSink - * - * Get the #GstClock of @obj. - */ -#define GST_AUDIO_BASE_SINK_CLOCK(obj) (GST_AUDIO_BASE_SINK (obj)->clock) -/** - * GST_AUDIO_BASE_SINK_PAD: - * @obj: a #GstAudioBaseSink - * - * Get the sink #GstPad of @obj. - */ -#define GST_AUDIO_BASE_SINK_PAD(obj) (GST_BASE_SINK (obj)->sinkpad) - -/** - * GstAudioBaseSinkSlaveMethod: - * @GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE: Resample to match the master clock - * @GST_AUDIO_BASE_SINK_SLAVE_SKEW: Adjust playout pointer when master clock - * drifts too much. - * @GST_AUDIO_BASE_SINK_SLAVE_NONE: No adjustment is done. - * - * Different possible clock slaving algorithms used when the internal audio - * clock is not selected as the pipeline master clock. - */ -typedef enum -{ - GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE, - GST_AUDIO_BASE_SINK_SLAVE_SKEW, - GST_AUDIO_BASE_SINK_SLAVE_NONE -} GstAudioBaseSinkSlaveMethod; - -#define GST_TYPE_AUDIO_BASE_SINK_SLAVE_METHOD (gst_audio_base_sink_slave_method_get_type ()) - -typedef struct _GstAudioBaseSink GstAudioBaseSink; -typedef struct _GstAudioBaseSinkClass GstAudioBaseSinkClass; -typedef struct _GstAudioBaseSinkPrivate GstAudioBaseSinkPrivate; - -/** - * GstAudioBaseSink: - * - * Opaque #GstAudioBaseSink. - */ -struct _GstAudioBaseSink { - GstBaseSink element; - - /*< protected >*/ /* with LOCK */ - /* our ringbuffer */ - GstAudioRingBuffer *ringbuffer; - - /* required buffer and latency in microseconds */ - guint64 buffer_time; - guint64 latency_time; - - /* the next sample to write */ - guint64 next_sample; - - /* clock */ - GstClock *provided_clock; - - /* with g_atomic_; currently rendering eos */ - gboolean eos_rendering; - - /*< private >*/ - GstAudioBaseSinkPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioBaseSinkClass: - * @parent_class: the parent class. - * @create_ringbuffer: create and return a #GstAudioRingBuffer to write to. - * @payload: payload data in a format suitable to write to the sink. If no - * payloading is required, returns a reffed copy of the original - * buffer, else returns the payloaded buffer with all other metadata - * copied. - * - * #GstAudioBaseSink class. Override the vmethod to implement - * functionality. - */ -struct _GstAudioBaseSinkClass { - GstBaseSinkClass parent_class; - - /* subclass ringbuffer allocation */ - GstAudioRingBuffer* (*create_ringbuffer) (GstAudioBaseSink *sink); - - /* subclass payloader */ - GstBuffer* (*payload) (GstAudioBaseSink *sink, - GstBuffer *buffer); - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_base_sink_get_type(void); -GType gst_audio_base_sink_slave_method_get_type (void); - -GstAudioRingBuffer * - gst_audio_base_sink_create_ringbuffer (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_provide_clock (GstAudioBaseSink *sink, gboolean provide); -gboolean gst_audio_base_sink_get_provide_clock (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_slave_method (GstAudioBaseSink *sink, - GstAudioBaseSinkSlaveMethod method); -GstAudioBaseSinkSlaveMethod - gst_audio_base_sink_get_slave_method (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_drift_tolerance (GstAudioBaseSink *sink, - gint64 drift_tolerance); -gint64 gst_audio_base_sink_get_drift_tolerance (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_alignment_threshold (GstAudioBaseSink * sink, - GstClockTime alignment_threshold); -GstClockTime - gst_audio_base_sink_get_alignment_threshold (GstAudioBaseSink * sink); - -void gst_audio_base_sink_set_discont_wait (GstAudioBaseSink * sink, - GstClockTime discont_wait); -GstClockTime - gst_audio_base_sink_get_discont_wait (GstAudioBaseSink * sink); - -G_END_DECLS - -#endif /* __GST_AUDIO_BASE_SINK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h deleted file mode 100644 index 37be70e8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h +++ /dev/null @@ -1,147 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiobasesrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* a base class for audio sources. - */ - -#ifndef __GST_AUDIO_BASE_SRC_H__ -#define __GST_AUDIO_BASE_SRC_H__ - -#include -#include -#include "gstaudioringbuffer.h" -#include "gstaudioclock.h" - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_BASE_SRC (gst_audio_base_src_get_type()) -#define GST_AUDIO_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrc)) -#define GST_AUDIO_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrcClass)) -#define GST_AUDIO_BASE_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SRC, GstAudioBaseSrcClass)) -#define GST_IS_AUDIO_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SRC)) -#define GST_IS_AUDIO_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_BASE_SRC)) - -/** - * GST_AUDIO_BASE_SRC_CLOCK: - * @obj: a #GstAudioBaseSrc - * - * Get the #GstClock of @obj. - */ -#define GST_AUDIO_BASE_SRC_CLOCK(obj) (GST_AUDIO_BASE_SRC (obj)->clock) -/** - * GST_AUDIO_BASE_SRC_PAD: - * @obj: a #GstAudioBaseSrc - * - * Get the source #GstPad of @obj. - */ -#define GST_AUDIO_BASE_SRC_PAD(obj) (GST_BASE_SRC (obj)->srcpad) - -typedef struct _GstAudioBaseSrc GstAudioBaseSrc; -typedef struct _GstAudioBaseSrcClass GstAudioBaseSrcClass; -typedef struct _GstAudioBaseSrcPrivate GstAudioBaseSrcPrivate; - -/** - * GstAudioBaseSrcSlaveMethod: - * @GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE: Resample to match the master clock. - * @GST_AUDIO_BASE_SRC_SLAVE_RETIMESTAMP: Retimestamp output buffers with master - * clock time. - * @GST_AUDIO_BASE_SRC_SLAVE_SKEW: Adjust capture pointer when master clock - * drifts too much. - * @GST_AUDIO_BASE_SRC_SLAVE_NONE: No adjustment is done. - * - * Different possible clock slaving algorithms when the internal audio clock was - * not selected as the pipeline clock. - */ -typedef enum -{ - GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE, - GST_AUDIO_BASE_SRC_SLAVE_RETIMESTAMP, - GST_AUDIO_BASE_SRC_SLAVE_SKEW, - GST_AUDIO_BASE_SRC_SLAVE_NONE -} GstAudioBaseSrcSlaveMethod; - -#define GST_TYPE_AUDIO_BASE_SRC_SLAVE_METHOD (gst_audio_base_src_slave_method_get_type ()) - -/** - * GstAudioBaseSrc: - * - * Opaque #GstAudioBaseSrc. - */ -struct _GstAudioBaseSrc { - GstPushSrc element; - - /*< protected >*/ /* with LOCK */ - /* our ringbuffer */ - GstAudioRingBuffer *ringbuffer; - - /* required buffer and latency */ - GstClockTime buffer_time; - GstClockTime latency_time; - - /* the next sample to write */ - guint64 next_sample; - - /* clock */ - GstClock *clock; - - /*< private >*/ - GstAudioBaseSrcPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioBaseSrcClass: - * @parent_class: the parent class. - * @create_ringbuffer: create and return a #GstAudioRingBuffer to read from. - * - * #GstAudioBaseSrc class. Override the vmethod to implement - * functionality. - */ -struct _GstAudioBaseSrcClass { - GstPushSrcClass parent_class; - - /* subclass ringbuffer allocation */ - GstAudioRingBuffer* (*create_ringbuffer) (GstAudioBaseSrc *src); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_base_src_get_type(void); -GType gst_audio_base_src_slave_method_get_type (void); - -GstAudioRingBuffer * - gst_audio_base_src_create_ringbuffer (GstAudioBaseSrc *src); - -void gst_audio_base_src_set_provide_clock (GstAudioBaseSrc *src, gboolean provide); -gboolean gst_audio_base_src_get_provide_clock (GstAudioBaseSrc *src); - -void gst_audio_base_src_set_slave_method (GstAudioBaseSrc *src, - GstAudioBaseSrcSlaveMethod method); -GstAudioBaseSrcSlaveMethod - gst_audio_base_src_get_slave_method (GstAudioBaseSrc *src); - - -G_END_DECLS - -#endif /* __GST_AUDIO_BASE_SRC_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h deleted file mode 100644 index 88c96287..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h +++ /dev/null @@ -1,140 +0,0 @@ -/* GStreamer Audio CD Source Base Class - * Copyright (C) 2005 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_CD_SRC_H__ -#define __GST_AUDIO_CD_SRC_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_CD_SRC (gst_audio_cd_src_get_type()) -#define GST_AUDIO_CD_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AUDIO_CD_SRC, GstAudioCdSrc)) -#define GST_AUDIO_CD_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AUDIO_CD_SRC, GstAudioCdSrcClass)) -#define GST_IS_AUDIO_CD_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AUDIO_CD_SRC)) -#define GST_IS_AUDIO_CD_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AUDIO_CD_SRC)) -#define GST_AUDIO_CD_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_CD_SRC, GstAudioCdSrcClass)) - -typedef struct _GstAudioCdSrc GstAudioCdSrc; -typedef struct _GstAudioCdSrcClass GstAudioCdSrcClass; -typedef struct _GstAudioCdSrcTrack GstAudioCdSrcTrack; -typedef struct _GstAudioCdSrcPrivate GstAudioCdSrcPrivate; - -/** - * GstAudioCdSrcMode: - * @GST_AUDIO_CD_SRC_MODE_NORMAL : each single track is a stream - * @GST_AUDIO_CD_SRC_MODE_CONTINUOUS : the entire disc is a single stream - * - * Mode in which the CD audio source operates. Influences timestamping, - * EOS handling and seeking. - */ -typedef enum { - GST_AUDIO_CD_SRC_MODE_NORMAL, /* stream = one track */ - GST_AUDIO_CD_SRC_MODE_CONTINUOUS /* stream = whole disc */ -} GstAudioCdSrcMode; - -#define GST_TYPE_AUDIO_CD_SRC_MODE (gst_audio_cd_src_mode_get_type ()) - -/** - * GstAudioCdSrcTrack: - * @is_audio: Whether this is an audio track - * @num: Track number in TOC (usually starts from 1, but not always) - * @start: The first sector of this track (LBA) - * @end: The last sector of this track (LBA) - * @tags: Track-specific tags (e.g. from cd-text information), or NULL - * - * CD track abstraction to communicate TOC entries to the base class. - * - * This structure is only for use by sub-classed in connection with - * gst_audio_cd_src_add_track(). - * - * Applications will be informed of the available tracks via a TOC message - * on the pipeline's #GstBus instead. - */ -/* FIXME 2.0: remove this struct and pass values directly to _add_track() */ -struct _GstAudioCdSrcTrack { - gboolean is_audio; /* TRUE if this is an audio track */ - guint num; /* real track number (usually starts from 1) */ - guint start; /* first sector of track (LBA, not LSN!) */ - guint end; /* last sector of track (LBA, not LSN!) */ - GstTagList *tags; /* NULL or tags for track (e.g. from cd-text) */ - - /*< private >*/ - guint _gst_reserved1[GST_PADDING/2]; - gpointer _gst_reserved2[GST_PADDING/2]; -}; - -struct _GstAudioCdSrc { - GstPushSrc pushsrc; - - /*< protected >*/ /* for use by sub-classes only */ - GstTagList *tags; /* tags that apply to all tracks */ - - /*< private >*/ - GstAudioCdSrcPrivate *priv; - - /*< private >*/ - guint _gst_reserved1[GST_PADDING/2]; - gpointer _gst_reserved2[GST_PADDING/2]; -}; - -/** - * GstAudioCdSrcClass: - * @pushsrc_class: the parent class - * @open: opening the device - * @close: closing the device - * @read_sector: reading a sector - * @get_default_device: getting the default device - * @probe_devices: probing possible devices - * - * Audio CD source base class. - */ -struct _GstAudioCdSrcClass { - GstPushSrcClass pushsrc_class; - - /* open/close the CD device */ - gboolean (*open) (GstAudioCdSrc *src, const gchar *device); - void (*close) (GstAudioCdSrc *src); - - /* read one sector (LBA) */ - GstBuffer * (*read_sector) (GstAudioCdSrc *src, gint sector); - -#if 0 - /* return default device or NULL (optional) */ - gchar * (*get_default_device) (GstAudioCdSrc *src); - - /* return NULL-terminated string array of CD devices, or NULL (optional) */ - /* FIXME 0.11: reconsider for new probing/device discovery API, remove if in doubt */ - gchar ** (*probe_devices) (GstAudioCdSrc *src); -#endif - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_audio_cd_src_get_type (void); -GType gst_audio_cd_src_mode_get_type (void); - -gboolean gst_audio_cd_src_add_track (GstAudioCdSrc * src, - GstAudioCdSrcTrack * track); - -G_END_DECLS - -#endif /* __GST_AUDIO_CD_SRC_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioclock.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioclock.h deleted file mode 100644 index 57091874..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioclock.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudioclock.h: Clock for use by audio plugins - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_CLOCK_H__ -#define __GST_AUDIO_CLOCK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_CLOCK \ - (gst_audio_clock_get_type()) -#define GST_AUDIO_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_CLOCK,GstAudioClock)) -#define GST_AUDIO_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_CLOCK,GstAudioClockClass)) -#define GST_IS_AUDIO_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_CLOCK)) -#define GST_IS_AUDIO_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_CLOCK)) -#define GST_AUDIO_CLOCK_CAST(obj) \ - ((GstAudioClock*)(obj)) - -typedef struct _GstAudioClock GstAudioClock; -typedef struct _GstAudioClockClass GstAudioClockClass; - -/** - * GstAudioClockGetTimeFunc: - * @clock: the #GstAudioClock - * @user_data: user data - * - * This function will be called whenever the current clock time needs to be - * calculated. If this function returns #GST_CLOCK_TIME_NONE, the last reported - * time will be returned by the clock. - * - * Returns: the current time or #GST_CLOCK_TIME_NONE if the previous time should - * be used. - */ -typedef GstClockTime (*GstAudioClockGetTimeFunc) (GstClock *clock, gpointer user_data); - -/** - * GstAudioClock: - * - * Opaque #GstAudioClock. - */ -struct _GstAudioClock { - GstSystemClock clock; - - /*< protected >*/ - GstAudioClockGetTimeFunc func; - gpointer user_data; - GDestroyNotify destroy_notify; - - /*< private >*/ - GstClockTime last_time; - GstClockTimeDiff time_offset; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstAudioClockClass { - GstSystemClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_clock_get_type (void); -GstClock* gst_audio_clock_new (const gchar *name, GstAudioClockGetTimeFunc func, - gpointer user_data, GDestroyNotify destroy_notify); -void gst_audio_clock_reset (GstAudioClock *clock, GstClockTime time); - -GstClockTime gst_audio_clock_get_time (GstClock * clock); -GstClockTime gst_audio_clock_adjust (GstClock * clock, GstClockTime time); - -void gst_audio_clock_invalidate (GstClock * clock); - -G_END_DECLS - -#endif /* __GST_AUDIO_CLOCK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h deleted file mode 100644 index 27e1fab6..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h +++ /dev/null @@ -1,362 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Igalia S.L. - * Author: Iago Toral Quiroga - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef _GST_AUDIO_DECODER_H_ -#define _GST_AUDIO_DECODER_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_DECODER \ - (gst_audio_decoder_get_type()) -#define GST_AUDIO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_DECODER,GstAudioDecoder)) -#define GST_AUDIO_DECODER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_DECODER,GstAudioDecoderClass)) -#define GST_AUDIO_DECODER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_DECODER,GstAudioDecoderClass)) -#define GST_IS_AUDIO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_DECODER)) -#define GST_IS_AUDIO_DECODER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_DECODER)) -#define GST_AUDIO_DECODER_CAST(obj) \ - ((GstAudioDecoder *)(obj)) - -/** - * GST_AUDIO_DECODER_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_AUDIO_DECODER_SINK_NAME "sink" -/** - * GST_AUDIO_DECODER_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_AUDIO_DECODER_SRC_NAME "src" - -/** - * GST_AUDIO_DECODER_SRC_PAD: - * @obj: base audio codec instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_AUDIO_DECODER_SRC_PAD(obj) (((GstAudioDecoder *) (obj))->srcpad) - -/** - * GST_AUDIO_DECODER_SINK_PAD: - * @obj: base audio codec instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_AUDIO_DECODER_SINK_PAD(obj) (((GstAudioDecoder *) (obj))->sinkpad) - -#define GST_AUDIO_DECODER_STREAM_LOCK(dec) g_rec_mutex_lock (&GST_AUDIO_DECODER (dec)->stream_lock) -#define GST_AUDIO_DECODER_STREAM_UNLOCK(dec) g_rec_mutex_unlock (&GST_AUDIO_DECODER (dec)->stream_lock) - -/** - * GST_AUDIO_DECODER_INPUT_SEGMENT: - * @obj: audio decoder instance - * - * Gives the input segment of the element. - */ -#define GST_AUDIO_DECODER_INPUT_SEGMENT(obj) (GST_AUDIO_DECODER_CAST (obj)->input_segment) - -/** - * GST_AUDIO_DECODER_OUTPUT_SEGMENT: - * @obj: audio decoder instance - * - * Gives the output segment of the element. - */ -#define GST_AUDIO_DECODER_OUTPUT_SEGMENT(obj) (GST_AUDIO_DECODER_CAST (obj)->output_segment) - -typedef struct _GstAudioDecoder GstAudioDecoder; -typedef struct _GstAudioDecoderClass GstAudioDecoderClass; - -typedef struct _GstAudioDecoderPrivate GstAudioDecoderPrivate; - -/* do not use this one, use macro below */ -GstFlowReturn _gst_audio_decoder_error (GstAudioDecoder *dec, gint weight, - GQuark domain, gint code, - gchar *txt, gchar *debug, - const gchar *file, const gchar *function, - gint line); - -/** - * GST_AUDIO_DECODER_ERROR: - * @el: the base audio decoder element that generates the error - * @weight: element defined weight of the error, added to error count - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - * parentheses) - * @debug: debugging information for the message (format string and args - * enclosed in parentheses) - * @ret: variable to receive return value - * - * Utility function that audio decoder elements can use in case they encountered - * a data processing error that may be fatal for the current "data unit" but - * need not prevent subsequent decoding. Such errors are counted and if there - * are too many, as configured in the context's max_errors, the pipeline will - * post an error message and the application will be requested to stop further - * media processing. Otherwise, it is considered a "glitch" and only a warning - * is logged. In either case, @ret is set to the proper value to - * return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK). - */ -#define GST_AUDIO_DECODER_ERROR(el, weight, domain, code, text, debug, ret) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - GstAudioDecoder *dec = GST_AUDIO_DECODER (el); \ - ret = _gst_audio_decoder_error (dec, weight, GST_ ## domain ## _ERROR, \ - GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__, \ - GST_FUNCTION, __LINE__); \ -} G_STMT_END - - -/** - * GST_AUDIO_DECODER_MAX_ERRORS: - * - * Default maximum number of errors tolerated before signaling error. - */ -#define GST_AUDIO_DECODER_MAX_ERRORS 10 - -/** - * GstAudioDecoder: - * - * The opaque #GstAudioDecoder data structure. - */ -struct _GstAudioDecoder -{ - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - /*< private >*/ - GstAudioDecoderPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstAudioDecoderClass: - * @element_class: The parent class structure - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Notifies subclass of incoming data format (caps). - * @parse: Optional. - * Allows chopping incoming data into manageable units (frames) - * for subsequent decoding. This division is at subclass - * discretion and may or may not correspond to 1 (or more) - * frames as defined by audio format. - * @handle_frame: Provides input data (or NULL to clear any remaining data) - * to subclass. Input data ref management is performed by - * base class, subclass should not care or intervene, - * and input data is only valid until next call to base class, - * most notably a call to gst_audio_decoder_finish_frame(). - * @flush: Optional. - * Instructs subclass to clear any codec caches and discard - * any pending samples and not yet returned decoded data. - * @hard indicates whether a FLUSH is being processed, - * or otherwise a DISCONT (or conceptually similar). - * @sink_event: Optional. - * Event handler on the sink pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @src_event: Optional. - * Event handler on the src pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @pre_push: Optional. - * Called just prior to pushing (encoded data) buffer downstream. - * Subclass has full discretionary access to buffer, - * and a not OK flow return will abort downstream pushing. - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @handle_frame (and likely @set_format) needs to be - * overridden. - */ -struct _GstAudioDecoderClass -{ - GstElementClass element_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - gboolean (*start) (GstAudioDecoder *dec); - - gboolean (*stop) (GstAudioDecoder *dec); - - gboolean (*set_format) (GstAudioDecoder *dec, - GstCaps *caps); - - GstFlowReturn (*parse) (GstAudioDecoder *dec, - GstAdapter *adapter, - gint *offset, gint *length); - - GstFlowReturn (*handle_frame) (GstAudioDecoder *dec, - GstBuffer *buffer); - - void (*flush) (GstAudioDecoder *dec, gboolean hard); - - GstFlowReturn (*pre_push) (GstAudioDecoder *dec, - GstBuffer **buffer); - - gboolean (*sink_event) (GstAudioDecoder *dec, - GstEvent *event); - gboolean (*src_event) (GstAudioDecoder *dec, - GstEvent *event); - - gboolean (*open) (GstAudioDecoder *dec); - - gboolean (*close) (GstAudioDecoder *dec); - - gboolean (*negotiate) (GstAudioDecoder *dec); - - gboolean (*decide_allocation) (GstAudioDecoder *dec, GstQuery *query); - - gboolean (*propose_allocation) (GstAudioDecoder *dec, - GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_audio_decoder_get_type (void); - -gboolean gst_audio_decoder_set_output_format (GstAudioDecoder * dec, - const GstAudioInfo * info); - -gboolean gst_audio_decoder_negotiate (GstAudioDecoder * dec); - -GstFlowReturn gst_audio_decoder_finish_frame (GstAudioDecoder * dec, - GstBuffer * buf, gint frames); - -GstBuffer * gst_audio_decoder_allocate_output_buffer (GstAudioDecoder * dec, - gsize size); - -/* context parameters */ -GstAudioInfo * gst_audio_decoder_get_audio_info (GstAudioDecoder * dec); - -void gst_audio_decoder_set_plc_aware (GstAudioDecoder * dec, - gboolean plc); - -gint gst_audio_decoder_get_plc_aware (GstAudioDecoder * dec); - -void gst_audio_decoder_set_estimate_rate (GstAudioDecoder * dec, - gboolean enabled); - -gint gst_audio_decoder_get_estimate_rate (GstAudioDecoder * dec); - -gint gst_audio_decoder_get_delay (GstAudioDecoder * dec); - -void gst_audio_decoder_set_max_errors (GstAudioDecoder * dec, - gint num); - -gint gst_audio_decoder_get_max_errors (GstAudioDecoder * dec); - -void gst_audio_decoder_set_latency (GstAudioDecoder * dec, - GstClockTime min, - GstClockTime max); - -void gst_audio_decoder_get_latency (GstAudioDecoder * dec, - GstClockTime * min, - GstClockTime * max); - -void gst_audio_decoder_get_parse_state (GstAudioDecoder * dec, - gboolean * sync, - gboolean * eos); - - -/* object properties */ -void gst_audio_decoder_set_plc (GstAudioDecoder * dec, - gboolean enabled); - -gboolean gst_audio_decoder_get_plc (GstAudioDecoder * dec); - -void gst_audio_decoder_set_min_latency (GstAudioDecoder * dec, - GstClockTime num); - -GstClockTime gst_audio_decoder_get_min_latency (GstAudioDecoder * dec); - -void gst_audio_decoder_set_tolerance (GstAudioDecoder * dec, - GstClockTime tolerance); - -GstClockTime gst_audio_decoder_get_tolerance (GstAudioDecoder * dec); - -void gst_audio_decoder_set_drainable (GstAudioDecoder * dec, - gboolean enabled); - -gboolean gst_audio_decoder_get_drainable (GstAudioDecoder * dec); - -void gst_audio_decoder_set_needs_format (GstAudioDecoder * dec, - gboolean enabled); - -gboolean gst_audio_decoder_get_needs_format (GstAudioDecoder * dec); - -void gst_audio_decoder_get_allocator (GstAudioDecoder * dec, - GstAllocator ** allocator, - GstAllocationParams * params); - -void gst_audio_decoder_merge_tags (GstAudioDecoder * dec, - const GstTagList * tags, GstTagMergeMode mode); - -G_END_DECLS - -#endif /* _GST_AUDIO_DECODER_H_ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioencoder.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioencoder.h deleted file mode 100644 index e4973aff..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioencoder.h +++ /dev/null @@ -1,311 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_ENCODER_H__ -#define __GST_AUDIO_ENCODER_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_ENCODER (gst_audio_encoder_get_type()) -#define GST_AUDIO_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_ENCODER,GstAudioEncoder)) -#define GST_AUDIO_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_ENCODER,GstAudioEncoderClass)) -#define GST_AUDIO_ENCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_ENCODER,GstAudioEncoderClass)) -#define GST_IS_AUDIO_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_ENCODER)) -#define GST_IS_AUDIO_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_ENCODER)) -#define GST_AUDIO_ENCODER_CAST(obj) ((GstAudioEncoder *)(obj)) - -/** - * GST_AUDIO_ENCODER_SINK_NAME: - * - * the name of the templates for the sink pad - */ -#define GST_AUDIO_ENCODER_SINK_NAME "sink" -/** - * GST_AUDIO_ENCODER_SRC_NAME: - * - * the name of the templates for the source pad - */ -#define GST_AUDIO_ENCODER_SRC_NAME "src" - -/** - * GST_AUDIO_ENCODER_SRC_PAD: - * @obj: audio encoder instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_AUDIO_ENCODER_SRC_PAD(obj) (GST_AUDIO_ENCODER_CAST (obj)->srcpad) - -/** - * GST_AUDIO_ENCODER_SINK_PAD: - * @obj: audio encoder instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_AUDIO_ENCODER_SINK_PAD(obj) (GST_AUDIO_ENCODER_CAST (obj)->sinkpad) - -/** - * GST_AUDIO_ENCODER_INPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the input segment of the element. - */ -#define GST_AUDIO_ENCODER_INPUT_SEGMENT(obj) (GST_AUDIO_ENCODER_CAST (obj)->input_segment) - -/** - * GST_AUDIO_ENCODER_OUTPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the output segment of the element. - */ -#define GST_AUDIO_ENCODER_OUTPUT_SEGMENT(obj) (GST_AUDIO_ENCODER_CAST (obj)->output_segment) - -#define GST_AUDIO_ENCODER_STREAM_LOCK(enc) g_rec_mutex_lock (&GST_AUDIO_ENCODER (enc)->stream_lock) -#define GST_AUDIO_ENCODER_STREAM_UNLOCK(enc) g_rec_mutex_unlock (&GST_AUDIO_ENCODER (enc)->stream_lock) - -typedef struct _GstAudioEncoder GstAudioEncoder; -typedef struct _GstAudioEncoderClass GstAudioEncoderClass; - -typedef struct _GstAudioEncoderPrivate GstAudioEncoderPrivate; - -/** - * GstAudioEncoder: - * - * The opaque #GstAudioEncoder data structure. - */ -struct _GstAudioEncoder { - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - /*< private >*/ - GstAudioEncoderPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstAudioEncoderClass: - * @element_class: The parent class structure - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Notifies subclass of incoming data format. - * GstAudioInfo contains the format according to provided caps. - * @handle_frame: Provides input samples (or NULL to clear any remaining data) - * according to directions as configured by the subclass - * using the API. Input data ref management is performed - * by base class, subclass should not care or intervene, - * and input data is only valid until next call to base class, - * most notably a call to gst_audio_encoder_finish_frame(). - * @flush: Optional. - * Instructs subclass to clear any codec caches and discard - * any pending samples and not yet returned encoded data. - * @sink_event: Optional. - * Event handler on the sink pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @src_event: Optional. - * Event handler on the src pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @pre_push: Optional. - * Called just prior to pushing (encoded data) buffer downstream. - * Subclass has full discretionary access to buffer, - * and a not OK flow return will abort downstream pushing. - * @getcaps: Optional. - * Allows for a custom sink getcaps implementation (e.g. - * for multichannel input specification). If not implemented, - * default returns gst_audio_encoder_proxy_getcaps - * applied to sink template caps. - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @set_format and @handle_frame needs to be overridden. - */ -struct _GstAudioEncoderClass { - GstElementClass element_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - gboolean (*start) (GstAudioEncoder *enc); - - gboolean (*stop) (GstAudioEncoder *enc); - - gboolean (*set_format) (GstAudioEncoder *enc, - GstAudioInfo *info); - - GstFlowReturn (*handle_frame) (GstAudioEncoder *enc, - GstBuffer *buffer); - - void (*flush) (GstAudioEncoder *enc); - - GstFlowReturn (*pre_push) (GstAudioEncoder *enc, - GstBuffer **buffer); - - gboolean (*sink_event) (GstAudioEncoder *enc, - GstEvent *event); - - gboolean (*src_event) (GstAudioEncoder *enc, - GstEvent *event); - - GstCaps * (*getcaps) (GstAudioEncoder *enc, GstCaps *filter); - - gboolean (*open) (GstAudioEncoder *enc); - - gboolean (*close) (GstAudioEncoder *enc); - - gboolean (*negotiate) (GstAudioEncoder *enc); - - gboolean (*decide_allocation) (GstAudioEncoder *enc, GstQuery *query); - - gboolean (*propose_allocation) (GstAudioEncoder * enc, - GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_audio_encoder_get_type (void); - -GstFlowReturn gst_audio_encoder_finish_frame (GstAudioEncoder * enc, - GstBuffer * buffer, - gint samples); - -GstCaps * gst_audio_encoder_proxy_getcaps (GstAudioEncoder * enc, - GstCaps * caps, - GstCaps * filter); - -gboolean gst_audio_encoder_set_output_format (GstAudioEncoder * enc, - GstCaps * caps); - -gboolean gst_audio_encoder_negotiate (GstAudioEncoder * enc); - -GstBuffer * gst_audio_encoder_allocate_output_buffer (GstAudioEncoder * enc, - gsize size); - -/* context parameters */ -GstAudioInfo * gst_audio_encoder_get_audio_info (GstAudioEncoder * enc); - -gint gst_audio_encoder_get_frame_samples_min (GstAudioEncoder * enc); - -void gst_audio_encoder_set_frame_samples_min (GstAudioEncoder * enc, gint num); - -gint gst_audio_encoder_get_frame_samples_max (GstAudioEncoder * enc); - -void gst_audio_encoder_set_frame_samples_max (GstAudioEncoder * enc, gint num); - -gint gst_audio_encoder_get_frame_max (GstAudioEncoder * enc); - -void gst_audio_encoder_set_frame_max (GstAudioEncoder * enc, gint num); - -gint gst_audio_encoder_get_lookahead (GstAudioEncoder * enc); - -void gst_audio_encoder_set_lookahead (GstAudioEncoder * enc, gint num); - -void gst_audio_encoder_get_latency (GstAudioEncoder * enc, - GstClockTime * min, - GstClockTime * max); - -void gst_audio_encoder_set_latency (GstAudioEncoder * enc, - GstClockTime min, - GstClockTime max); - -void gst_audio_encoder_set_headers (GstAudioEncoder * enc, - GList * headers); - -/* object properties */ - -void gst_audio_encoder_set_mark_granule (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_mark_granule (GstAudioEncoder * enc); - -void gst_audio_encoder_set_perfect_timestamp (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_perfect_timestamp (GstAudioEncoder * enc); - -void gst_audio_encoder_set_hard_resync (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_hard_resync (GstAudioEncoder * enc); - -void gst_audio_encoder_set_tolerance (GstAudioEncoder * enc, - GstClockTime tolerance); - -GstClockTime gst_audio_encoder_get_tolerance (GstAudioEncoder * enc); - -void gst_audio_encoder_set_hard_min (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_hard_min (GstAudioEncoder * enc); - -void gst_audio_encoder_set_drainable (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_drainable (GstAudioEncoder * enc); - -void gst_audio_encoder_get_allocator (GstAudioEncoder * enc, - GstAllocator ** allocator, - GstAllocationParams * params); - -void gst_audio_encoder_merge_tags (GstAudioEncoder * enc, - const GstTagList * tags, GstTagMergeMode mode); - -G_END_DECLS - -#endif /* __GST_AUDIO_ENCODER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiofilter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiofilter.h deleted file mode 100644 index 0e5f925a..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiofilter.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_AUDIO_FILTER_H__ -#define __GST_AUDIO_FILTER_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstAudioFilter GstAudioFilter; -typedef struct _GstAudioFilterClass GstAudioFilterClass; - -#define GST_TYPE_AUDIO_FILTER \ - (gst_audio_filter_get_type()) -#define GST_AUDIO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_FILTER,GstAudioFilter)) -#define GST_AUDIO_FILTER_CAST(obj) \ - ((GstAudioFilter *) (obj)) -#define GST_AUDIO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass)) -#define GST_AUDIO_FILTER_CLASS_CAST(klass) \ - ((GstAudioFilterClass *) (klass)) -#define GST_AUDIO_FILTER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass)) -#define GST_IS_AUDIO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_FILTER)) -#define GST_IS_AUDIO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_FILTER)) - -/** - * GstAudioFilter: - * - * Base class for audio filters with the same format for input and output. - */ -struct _GstAudioFilter { - GstBaseTransform basetransform; - - /*< protected >*/ - GstAudioInfo info; /* currently configured format */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_AUDIO_FILTER_INFO(filter) (&GST_AUDIO_FILTER_CAST(filter)->info) - -#define GST_AUDIO_FILTER_FORMAT(filter) (GST_AUDIO_INFO_FORMAT(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_RATE(filter) (GST_AUDIO_INFO_RATE(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_CHANNELS(filter) (GST_AUDIO_INFO_CHANNELS(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_BPF(filter) (GST_AUDIO_INFO_BPF(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_BPS(filter) (GST_AUDIO_INFO_BPS(GST_AUDIO_FILTER_INFO(filter))) - -/** - * GstAudioFilterClass: - * @basetransformclass: parent class - * @setup: virtual function called whenever the format changes - * - * In addition to the @setup virtual function, you should also override the - * GstBaseTransform::transform and/or GstBaseTransform::transform_ip virtual - * function. - */ - -struct _GstAudioFilterClass { - GstBaseTransformClass basetransformclass; - - /* virtual function, called whenever the format changes */ - gboolean (*setup) (GstAudioFilter * filter, const GstAudioInfo * info); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_filter_get_type (void); - -void gst_audio_filter_class_add_pad_templates (GstAudioFilterClass * klass, - GstCaps * allowed_caps); - -G_END_DECLS - -#endif /* __GST_AUDIO_FILTER_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h deleted file mode 100644 index 1cdc6461..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h +++ /dev/null @@ -1,33 +0,0 @@ -/* GStreamer audio helper functions for IEC 61937 payloading - * (c) 2011 Intel Corporation - * 2011 Collabora Multimedia - * 2011 Arun Raghavan - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_IEC61937_H__ -#define __GST_AUDIO_IEC61937_H__ - -#include - -guint gst_audio_iec61937_frame_size (const GstAudioRingBufferSpec * spec); -gboolean gst_audio_iec61937_payload (const guint8 * src, guint src_n, - guint8 * dst, guint dst_n, - const GstAudioRingBufferSpec * spec, - gint endianness); - -#endif /* __GST_AUDIO_IEC61937_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiometa.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiometa.h deleted file mode 100644 index 822972ba..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiometa.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_META_H__ -#define __GST_AUDIO_META_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_AUDIO_DOWNMIX_META_API_TYPE (gst_audio_downmix_meta_api_get_type()) -#define GST_AUDIO_DOWNMIX_META_INFO (gst_audio_downmix_meta_get_info()) - -typedef struct _GstAudioDownmixMeta GstAudioDownmixMeta; - -/** - * GstAudioDownmixMeta: - * @meta: parent #GstMeta - * @from_position: the channel positions of the source - * @to_position: the channel positions of the destination - * @from_channels: the number of channels of the source - * @to_channels: the number of channels of the destination - * @matrix: the matrix coefficients. - * - * Extra buffer metadata describing audio downmixing matrix. This metadata is - * attached to audio buffers and contains a matrix to downmix the buffer number - * of channels to @channels. - * - * @matrix is an two-dimensional array of @to_channels times @from_channels - * coefficients, i.e. the i-th output channels is constructed by multiplicating - * the input channels with the coefficients in @matrix[i] and taking the sum - * of the results. - */ -struct _GstAudioDownmixMeta { - GstMeta meta; - - GstAudioChannelPosition *from_position; - GstAudioChannelPosition *to_position; - gint from_channels, to_channels; - gfloat **matrix; -}; - -GType gst_audio_downmix_meta_api_get_type (void); -const GstMetaInfo * gst_audio_downmix_meta_get_info (void); - -#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b),GST_AUDIO_DOWNMIX_META_INFO)) -GstAudioDownmixMeta * gst_buffer_get_audio_downmix_meta_for_channels (GstBuffer *buffer, - const GstAudioChannelPosition *to_position, - gint to_channels); - -GstAudioDownmixMeta * gst_buffer_add_audio_downmix_meta (GstBuffer *buffer, - const GstAudioChannelPosition *from_position, - gint from_channels, - const GstAudioChannelPosition *to_position, - gint to_channels, - const gfloat **matrix); - -G_END_DECLS - -#endif /* __GST_AUDIO_META_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h deleted file mode 100644 index e578aea8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h +++ /dev/null @@ -1,333 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudioringbuffer.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_RING_BUFFER_H__ -#define __GST_AUDIO_RING_BUFFER_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_RING_BUFFER (gst_audio_ring_buffer_get_type()) -#define GST_AUDIO_RING_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBuffer)) -#define GST_AUDIO_RING_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBufferClass)) -#define GST_AUDIO_RING_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_RING_BUFFER, GstAudioRingBufferClass)) -#define GST_AUDIO_RING_BUFFER_CAST(obj) ((GstAudioRingBuffer *)obj) -#define GST_IS_AUDIO_RING_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_RING_BUFFER)) -#define GST_IS_AUDIO_RING_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_RING_BUFFER)) - -typedef struct _GstAudioRingBuffer GstAudioRingBuffer; -typedef struct _GstAudioRingBufferClass GstAudioRingBufferClass; -typedef struct _GstAudioRingBufferSpec GstAudioRingBufferSpec; - -/** - * GstAudioRingBufferCallback: - * @rbuf: a #GstAudioRingBuffer - * @data: (array length=len): target to fill - * @len: amount to fill - * @user_data: user data - * - * This function is set with gst_audio_ring_buffer_set_callback() and is - * called to fill the memory at @data with @len bytes of samples. - */ -typedef void (*GstAudioRingBufferCallback) (GstAudioRingBuffer *rbuf, guint8* data, guint len, gpointer user_data); - -/** - * GstAudioRingBufferState: - * @GST_AUDIO_RING_BUFFER_STATE_STOPPED: The ringbuffer is stopped - * @GST_AUDIO_RING_BUFFER_STATE_PAUSED: The ringbuffer is paused - * @GST_AUDIO_RING_BUFFER_STATE_STARTED: The ringbuffer is started - * - * The state of the ringbuffer. - */ -typedef enum { - GST_AUDIO_RING_BUFFER_STATE_STOPPED, - GST_AUDIO_RING_BUFFER_STATE_PAUSED, - GST_AUDIO_RING_BUFFER_STATE_STARTED -} GstAudioRingBufferState; - -/** - * GstAudioRingBufferFormatType: - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW: samples in linear or float - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW: samples in mulaw - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW: samples in alaw - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IMA_ADPCM: samples in ima adpcm - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG: samples in mpeg audio (but not AAC) format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_GSM: samples in gsm format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958: samples in IEC958 frames (e.g. AC3) - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3: samples in AC3 format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3: samples in EAC3 format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS: samples in DTS format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC: samples in MPEG-2 AAC format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC: samples in MPEG-4 AAC format - * - * The format of the samples in the ringbuffer. - */ -typedef enum -{ - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IMA_ADPCM, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_GSM, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC -} GstAudioRingBufferFormatType; - -/** - * GstAudioRingBufferSpec: - * @caps: The caps that generated the Spec. - * @type: the sample type - * @info: the #GstAudioInfo - * @latency_time: the latency in microseconds - * @buffer_time: the total buffer size in microseconds - * @segsize: the size of one segment in bytes - * @segtotal: the total number of segments - * @seglatency: number of segments queued in the lower level device, - * defaults to segtotal - * - * The structure containing the format specification of the ringbuffer. - */ -struct _GstAudioRingBufferSpec -{ - /*< public >*/ - /* in */ - GstCaps *caps; /* the caps of the buffer */ - - /* in/out */ - GstAudioRingBufferFormatType type; - GstAudioInfo info; - - - guint64 latency_time; /* the required/actual latency time, this is the - * actual the size of one segment and the - * minimum possible latency we can achieve. */ - guint64 buffer_time; /* the required/actual time of the buffer, this is - * the total size of the buffer and maximum - * latency we can compensate for. */ - gint segsize; /* size of one buffer segment in bytes, this value - * should be chosen to match latency_time as - * well as possible. */ - gint segtotal; /* total number of segments, this value is the - * number of segments of @segsize and should be - * chosen so that it matches buffer_time as - * close as possible. */ - /* ABI added 0.10.20 */ - gint seglatency; /* number of segments queued in the lower - * level device, defaults to segtotal. */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_AUDIO_RING_BUFFER_GET_COND(buf) (&(((GstAudioRingBuffer *)buf)->cond)) -#define GST_AUDIO_RING_BUFFER_WAIT(buf) (g_cond_wait (GST_AUDIO_RING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf))) -#define GST_AUDIO_RING_BUFFER_SIGNAL(buf) (g_cond_signal (GST_AUDIO_RING_BUFFER_GET_COND (buf))) -#define GST_AUDIO_RING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_AUDIO_RING_BUFFER_GET_COND (buf))) - -/** - * GstAudioRingBuffer: - * @cond: used to signal start/stop/pause/resume actions - * @open: boolean indicating that the ringbuffer is open - * @acquired: boolean indicating that the ringbuffer is acquired - * @memory: data in the ringbuffer - * @size: size of data in the ringbuffer - * @spec: format and layout of the ringbuffer data - * @samples_per_seg: number of samples in one segment - * @empty_seg: pointer to memory holding one segment of silence samples - * @state: state of the buffer - * @segdone: readpointer in the ringbuffer - * @segbase: segment corresponding to segment 0 (unused) - * @waiting: is a reader or writer waiting for a free segment - * - * The ringbuffer base class structure. - */ -struct _GstAudioRingBuffer { - GstObject object; - - /*< public >*/ /* with LOCK */ - GCond cond; - gboolean open; - gboolean acquired; - guint8 *memory; - gsize size; - GstClockTime *timestamps; - GstAudioRingBufferSpec spec; - gint samples_per_seg; - guint8 *empty_seg; - - /*< public >*/ /* ATOMIC */ - gint state; - gint segdone; - gint segbase; - gint waiting; - - /*< private >*/ - GstAudioRingBufferCallback callback; - gpointer cb_data; - - gboolean need_reorder; - /* gst[channel_reorder_map[i]] = device[i] */ - gint channel_reorder_map[64]; - - gboolean flushing; - /* ATOMIC */ - gint may_start; - gboolean active; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioRingBufferClass: - * @parent_class: parent class - * @open_device: open the device, don't set any params or allocate anything - * @acquire: allocate the resources for the ringbuffer using the given spec - * @release: free resources of the ringbuffer - * @close_device: close the device - * @start: start processing of samples - * @pause: pause processing of samples - * @resume: resume processing of samples after pause - * @stop: stop processing of samples - * @delay: get number of samples queued in device - * @activate: activate the thread that starts pulling and monitoring the - * consumed segments in the device. - * @commit: write samples into the ringbuffer - * @clear_all: clear the entire ringbuffer. - * - * The vmethods that subclasses can override to implement the ringbuffer. - */ -struct _GstAudioRingBufferClass { - GstObjectClass parent_class; - - /*< public >*/ - gboolean (*open_device) (GstAudioRingBuffer *buf); - gboolean (*acquire) (GstAudioRingBuffer *buf, GstAudioRingBufferSpec *spec); - gboolean (*release) (GstAudioRingBuffer *buf); - gboolean (*close_device) (GstAudioRingBuffer *buf); - - gboolean (*start) (GstAudioRingBuffer *buf); - gboolean (*pause) (GstAudioRingBuffer *buf); - gboolean (*resume) (GstAudioRingBuffer *buf); - gboolean (*stop) (GstAudioRingBuffer *buf); - - guint (*delay) (GstAudioRingBuffer *buf); - - /* ABI added */ - gboolean (*activate) (GstAudioRingBuffer *buf, gboolean active); - - guint (*commit) (GstAudioRingBuffer * buf, guint64 *sample, - guint8 * data, gint in_samples, - gint out_samples, gint * accum); - - void (*clear_all) (GstAudioRingBuffer * buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_ring_buffer_get_type(void); - -/* callback stuff */ -void gst_audio_ring_buffer_set_callback (GstAudioRingBuffer *buf, - GstAudioRingBufferCallback cb, - gpointer user_data); - -gboolean gst_audio_ring_buffer_parse_caps (GstAudioRingBufferSpec *spec, GstCaps *caps); -void gst_audio_ring_buffer_debug_spec_caps (GstAudioRingBufferSpec *spec); -void gst_audio_ring_buffer_debug_spec_buff (GstAudioRingBufferSpec *spec); - -gboolean gst_audio_ring_buffer_convert (GstAudioRingBuffer * buf, GstFormat src_fmt, - gint64 src_val, GstFormat dest_fmt, - gint64 * dest_val); - -/* device state */ -gboolean gst_audio_ring_buffer_open_device (GstAudioRingBuffer *buf); -gboolean gst_audio_ring_buffer_close_device (GstAudioRingBuffer *buf); - -gboolean gst_audio_ring_buffer_device_is_open (GstAudioRingBuffer *buf); - -/* allocate resources */ -gboolean gst_audio_ring_buffer_acquire (GstAudioRingBuffer *buf, GstAudioRingBufferSpec *spec); -gboolean gst_audio_ring_buffer_release (GstAudioRingBuffer *buf); - -gboolean gst_audio_ring_buffer_is_acquired (GstAudioRingBuffer *buf); - -/* set the device channel positions */ -void gst_audio_ring_buffer_set_channel_positions (GstAudioRingBuffer *buf, const GstAudioChannelPosition *position); - -/* activating */ -gboolean gst_audio_ring_buffer_activate (GstAudioRingBuffer *buf, gboolean active); -gboolean gst_audio_ring_buffer_is_active (GstAudioRingBuffer *buf); - -/* flushing */ -void gst_audio_ring_buffer_set_flushing (GstAudioRingBuffer *buf, gboolean flushing); -gboolean gst_audio_ring_buffer_is_flushing (GstAudioRingBuffer *buf); - -/* playback/pause */ -gboolean gst_audio_ring_buffer_start (GstAudioRingBuffer *buf); -gboolean gst_audio_ring_buffer_pause (GstAudioRingBuffer *buf); -gboolean gst_audio_ring_buffer_stop (GstAudioRingBuffer *buf); - -/* get status */ -guint gst_audio_ring_buffer_delay (GstAudioRingBuffer *buf); -guint64 gst_audio_ring_buffer_samples_done (GstAudioRingBuffer *buf); - -void gst_audio_ring_buffer_set_sample (GstAudioRingBuffer *buf, guint64 sample); - -/* clear all segments */ -void gst_audio_ring_buffer_clear_all (GstAudioRingBuffer *buf); - -/* commit samples */ -guint gst_audio_ring_buffer_commit (GstAudioRingBuffer * buf, guint64 *sample, - guint8 * data, gint in_samples, - gint out_samples, gint * accum); - -/* read samples */ -guint gst_audio_ring_buffer_read (GstAudioRingBuffer *buf, guint64 sample, - guint8 *data, guint len, GstClockTime *timestamp); - -/* Set timestamp on buffer */ -void gst_audio_ring_buffer_set_timestamp (GstAudioRingBuffer * buf, gint readseg, GstClockTime - timestamp); - -/* mostly protected */ -/* not yet implemented -gboolean gst_audio_ring_buffer_prepare_write (GstAudioRingBuffer *buf, gint *segment, guint8 **writeptr, gint *len); -*/ -gboolean gst_audio_ring_buffer_prepare_read (GstAudioRingBuffer *buf, gint *segment, - guint8 **readptr, gint *len); -void gst_audio_ring_buffer_clear (GstAudioRingBuffer *buf, gint segment); -void gst_audio_ring_buffer_advance (GstAudioRingBuffer *buf, guint advance); - -void gst_audio_ring_buffer_may_start (GstAudioRingBuffer *buf, gboolean allowed); - -G_END_DECLS - -#endif /* __GST_AUDIO_RING_BUFFER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosink.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosink.h deleted file mode 100644 index f6fac610..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosink.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiosink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_SINK_H__ -#define __GST_AUDIO_SINK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_SINK (gst_audio_sink_get_type()) -#define GST_AUDIO_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_SINK,GstAudioSink)) -#define GST_AUDIO_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_SINK,GstAudioSinkClass)) -#define GST_AUDIO_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_SINK,GstAudioSinkClass)) -#define GST_IS_AUDIO_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_SINK)) -#define GST_IS_AUDIO_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_SINK)) - -typedef struct _GstAudioSink GstAudioSink; -typedef struct _GstAudioSinkClass GstAudioSinkClass; - -/** - * GstAudioSink: - * - * Opaque #GstAudioSink. - */ -struct _GstAudioSink { - GstAudioBaseSink element; - - /*< private >*/ /* with LOCK */ - GThread *thread; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioSinkClass: - * @parent_class: the parent class structure. - * @open: Open the device. No configuration needs to be done at this point. - * This function is also used to check if the device is available. - * @prepare: Prepare the device to operate with the specified parameters. - * @unprepare: Undo operations done in prepare. - * @close: Close the device. - * @write: Write data to the device. - * @delay: Return how many samples are still in the device. This is used to - * drive the synchronisation. - * @reset: Returns as quickly as possible from a write and flush any pending - * samples from the device. - * - * #GstAudioSink class. Override the vmethods to implement functionality. - */ -struct _GstAudioSinkClass { - GstAudioBaseSinkClass parent_class; - - /* vtable */ - - /* open the device with given specs */ - gboolean (*open) (GstAudioSink *sink); - /* prepare resources and state to operate with the given specs */ - gboolean (*prepare) (GstAudioSink *sink, GstAudioRingBufferSpec *spec); - /* undo anything that was done in prepare() */ - gboolean (*unprepare) (GstAudioSink *sink); - /* close the device */ - gboolean (*close) (GstAudioSink *sink); - /* write samples to the device */ - gint (*write) (GstAudioSink *sink, gpointer data, guint length); - /* get number of samples queued in the device */ - guint (*delay) (GstAudioSink *sink); - /* reset the audio device, unblock from a write */ - void (*reset) (GstAudioSink *sink); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_sink_get_type(void); - -G_END_DECLS - -#endif /* __GST_AUDIO_SINK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosrc.h deleted file mode 100644 index 47e68274..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/gstaudiosrc.h +++ /dev/null @@ -1,99 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiosrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_SRC_H__ -#define __GST_AUDIO_SRC_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_SRC (gst_audio_src_get_type()) -#define GST_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_SRC,GstAudioSrc)) -#define GST_AUDIO_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_SRC,GstAudioSrcClass)) -#define GST_AUDIO_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_SRC,GstAudioSrcClass)) -#define GST_IS_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_SRC)) -#define GST_IS_AUDIO_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_SRC)) - -typedef struct _GstAudioSrc GstAudioSrc; -typedef struct _GstAudioSrcClass GstAudioSrcClass; - -/** - * GstAudioSrc: - * - * Base class for simple audio sources. - */ -struct _GstAudioSrc { - GstAudioBaseSrc element; - - /*< private >*/ /* with LOCK */ - GThread *thread; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioSrcClass: - * @parent_class: the parent class. - * @open: open the device with the specified caps - * @prepare: configure device with format - * @unprepare: undo the configuration - * @close: close the device - * @read: read samples to the audio device - * @delay: the number of samples queued in the device - * @reset: unblock a read to the device and reset. - * - * #GstAudioSrc class. Override the vmethod to implement - * functionality. - */ -struct _GstAudioSrcClass { - GstAudioBaseSrcClass parent_class; - - /* vtable */ - - /* open the device with given specs */ - gboolean (*open) (GstAudioSrc *src); - /* prepare resources and state to operate with the given specs */ - gboolean (*prepare) (GstAudioSrc *src, GstAudioRingBufferSpec *spec); - /* undo anything that was done in prepare() */ - gboolean (*unprepare) (GstAudioSrc *src); - /* close the device */ - gboolean (*close) (GstAudioSrc *src); - /* read samples from the device */ - guint (*read) (GstAudioSrc *src, gpointer data, guint length, - GstClockTime *timestamp); - /* get number of samples queued in the device */ - guint (*delay) (GstAudioSrc *src); - /* reset the audio device, unblock from a write */ - void (*reset) (GstAudioSrc *src); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_src_get_type(void); - -G_END_DECLS - -#endif /* __GST_AUDIO_SRC_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/streamvolume.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/streamvolume.h deleted file mode 100644 index 8dfdc16d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/audio/streamvolume.h +++ /dev/null @@ -1,82 +0,0 @@ -/* GStreamer StreamVolume - * Copyright (C) 2009 Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_STREAM_VOLUME_H__ -#define __GST_STREAM_VOLUME_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_STREAM_VOLUME \ - (gst_stream_volume_get_type ()) -#define GST_STREAM_VOLUME(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM_VOLUME, GstStreamVolume)) -#define GST_STREAM_VOLUME_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_CAST ((iface), GST_TYPE_STREAM_VOLUME, GstStreamVolumeInterface)) -#define GST_IS_STREAM_VOLUME(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM_VOLUME)) -#define GST_IS_STREAM_VOLUME_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_TYPE ((iface), GST_TYPE_STREAM_VOLUME)) -#define GST_STREAM_VOLUME_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_STREAM_VOLUME, GstStreamVolumeInterface)) - -typedef struct _GstStreamVolume GstStreamVolume; -typedef struct _GstStreamVolumeInterface GstStreamVolumeInterface; - -struct _GstStreamVolumeInterface { - GTypeInterface iface; -}; - -/** - * GstStreamVolumeFormat: - * @GST_STREAM_VOLUME_FORMAT_LINEAR: Linear scale factor, 1.0 = 100% - * @GST_STREAM_VOLUME_FORMAT_CUBIC: Cubic volume scale - * @GST_STREAM_VOLUME_FORMAT_DB: Logarithmic volume scale (dB, amplitude not power) - * - * Different representations of a stream volume. gst_stream_volume_convert_volume() - * allows to convert between the different representations. - * - * Formulas to convert from a linear to a cubic or dB volume are - * cbrt(val) and 20 * log10 (val). - */ -typedef enum { - GST_STREAM_VOLUME_FORMAT_LINEAR = 0, - GST_STREAM_VOLUME_FORMAT_CUBIC, - GST_STREAM_VOLUME_FORMAT_DB -} GstStreamVolumeFormat; - -GType gst_stream_volume_get_type (void); -void gst_stream_volume_set_volume (GstStreamVolume *volume, - GstStreamVolumeFormat format, - gdouble val); -gdouble gst_stream_volume_get_volume (GstStreamVolume *volume, - GstStreamVolumeFormat format); - -void gst_stream_volume_set_mute (GstStreamVolume *volume, - gboolean mute); -gboolean gst_stream_volume_get_mute (GstStreamVolume *volume); - -gdouble gst_stream_volume_convert_volume (GstStreamVolumeFormat from, - GstStreamVolumeFormat to, - gdouble val) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __GST_STREAM_VOLUME_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstadapter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstadapter.h deleted file mode 100644 index 5b897443..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstadapter.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Benjamin Otte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#ifndef __GST_ADAPTER_H__ -#define __GST_ADAPTER_H__ - -G_BEGIN_DECLS - - -#define GST_TYPE_ADAPTER \ - (gst_adapter_get_type()) -#define GST_ADAPTER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_ADAPTER, GstAdapter)) -#define GST_ADAPTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_ADAPTER, GstAdapterClass)) -#define GST_ADAPTER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ADAPTER, GstAdapterClass)) -#define GST_IS_ADAPTER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_ADAPTER)) -#define GST_IS_ADAPTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_ADAPTER)) - -/** - * GstAdapter: - * - * The opaque #GstAdapter data structure. - */ -typedef struct _GstAdapter GstAdapter; -typedef struct _GstAdapterClass GstAdapterClass; - -GType gst_adapter_get_type (void); - -GstAdapter * gst_adapter_new (void) G_GNUC_MALLOC; - -void gst_adapter_clear (GstAdapter *adapter); -void gst_adapter_push (GstAdapter *adapter, GstBuffer* buf); -gconstpointer gst_adapter_map (GstAdapter *adapter, gsize size); -void gst_adapter_unmap (GstAdapter *adapter); -void gst_adapter_copy (GstAdapter *adapter, gpointer dest, - gsize offset, gsize size); -void gst_adapter_flush (GstAdapter *adapter, gsize flush); -gpointer gst_adapter_take (GstAdapter *adapter, gsize nbytes); -GstBuffer* gst_adapter_take_buffer (GstAdapter *adapter, gsize nbytes); -GList* gst_adapter_take_list (GstAdapter *adapter, gsize nbytes); -gsize gst_adapter_available (GstAdapter *adapter); -gsize gst_adapter_available_fast (GstAdapter *adapter); - -GstClockTime gst_adapter_prev_pts (GstAdapter *adapter, guint64 *distance); -GstClockTime gst_adapter_prev_dts (GstAdapter *adapter, guint64 *distance); - -gsize gst_adapter_masked_scan_uint32 (GstAdapter * adapter, guint32 mask, - guint32 pattern, gsize offset, gsize size); - -gsize gst_adapter_masked_scan_uint32_peek (GstAdapter * adapter, guint32 mask, - guint32 pattern, gsize offset, gsize size, guint32 * value); - -G_END_DECLS - -#endif /* __GST_ADAPTER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbaseparse.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbaseparse.h deleted file mode 100644 index d0a1be46..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbaseparse.h +++ /dev/null @@ -1,329 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Nokia Corporation. All rights reserved. - * - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_PARSE_H__ -#define __GST_BASE_PARSE_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BASE_PARSE (gst_base_parse_get_type()) -#define GST_BASE_PARSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_PARSE,GstBaseParse)) -#define GST_BASE_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_PARSE,GstBaseParseClass)) -#define GST_BASE_PARSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_BASE_PARSE,GstBaseParseClass)) -#define GST_IS_BASE_PARSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_PARSE)) -#define GST_IS_BASE_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_PARSE)) -#define GST_BASE_PARSE_CAST(obj) ((GstBaseParse *)(obj)) - -/** - * GST_BASE_PARSE_SRC_PAD: - * @obj: base parse instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_BASE_PARSE_SRC_PAD(obj) (GST_BASE_PARSE_CAST (obj)->srcpad) - -/** - * GST_BASE_PARSE_SINK_PAD: - * @obj: base parse instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_BASE_PARSE_SINK_PAD(obj) (GST_BASE_PARSE_CAST (obj)->sinkpad) - -/** - * GST_BASE_PARSE_FLOW_DROPPED: - * - * A #GstFlowReturn that can be returned from parse_frame to - * indicate that no output buffer was generated, or from pre_push_frame to - * to forego pushing buffer. - */ -#define GST_BASE_PARSE_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS - -/* not public API, use accessor macros below */ -#define GST_BASE_PARSE_FLAG_LOST_SYNC (1 << 0) -#define GST_BASE_PARSE_FLAG_DRAINING (1 << 1) - -/** - * GST_BASE_PARSE_LOST_SYNC: - * @parse: base parse instance - * - * Obtains current sync status. - */ -#define GST_BASE_PARSE_LOST_SYNC(parse) (!!(GST_BASE_PARSE_CAST(parse)->flags & GST_BASE_PARSE_FLAG_LOST_SYNC)) - -/** - * GST_BASE_PARSE_DRAINING: - * @parse: base parse instance - * - * Obtains current drain status (ie. whether EOS has been received and - * the parser is now processing the frames at the end of the stream) - */ -#define GST_BASE_PARSE_DRAINING(parse) (!!(GST_BASE_PARSE_CAST(parse)->flags & GST_BASE_PARSE_FLAG_DRAINING)) - -/** - * GstBaseParseFrameFlags: - * @GST_BASE_PARSE_FRAME_FLAG_NONE: no flag - * @GST_BASE_PARSE_FRAME_FLAG_NEW_FRAME: set by baseclass if current frame - * is passed for processing to the subclass for the first time - * (and not set on subsequent calls with same data). - * @GST_BASE_PARSE_FRAME_FLAG_NO_FRAME: set to indicate this buffer should not be - * counted as frame, e.g. if this frame is dependent on a previous one. - * As it is not counted as a frame, bitrate increases but frame to time - * conversions are maintained. - * @GST_BASE_PARSE_FRAME_FLAG_CLIP: @pre_push_frame can set this to indicate - * that regular segment clipping can still be performed (as opposed to - * any custom one having been done). - * @GST_BASE_PARSE_FRAME_FLAG_DROP: indicates to @finish_frame that the - * the frame should be dropped (and might be handled internall by subclass) - * @GST_BASE_PARSE_FRAME_FLAG_QUEUE: indicates to @finish_frame that the - * the frame should be queued for now and processed fully later - * when the first non-queued frame is finished - * - * Flags to be used in a #GstBaseParseFrame. - */ -typedef enum { - GST_BASE_PARSE_FRAME_FLAG_NONE = 0, - GST_BASE_PARSE_FRAME_FLAG_NEW_FRAME = (1 << 0), - GST_BASE_PARSE_FRAME_FLAG_NO_FRAME = (1 << 1), - GST_BASE_PARSE_FRAME_FLAG_CLIP = (1 << 2), - GST_BASE_PARSE_FRAME_FLAG_DROP = (1 << 3), - GST_BASE_PARSE_FRAME_FLAG_QUEUE = (1 << 4) -} GstBaseParseFrameFlags; - -/** - * GstBaseParseFrame: - * @buffer: input data to be parsed for frames. - * @out_buffer: (optional) (replacement) output data. - * @offset: media specific offset of input frame - * Note that a converter may have a different one on the frame's buffer. - * @overhead: subclass can set this to indicates the metadata overhead - * for the given frame, which is then used to enable more accurate bitrate - * computations. If this is -1, it is assumed that this frame should be - * skipped in bitrate calculation. - * @flags: a combination of input and output #GstBaseParseFrameFlags that - * convey additional context to subclass or allow subclass to tune - * subsequent #GstBaseParse actions. - * - * Frame (context) data passed to each frame parsing virtual methods. In - * addition to providing the data to be checked for a valid frame or an already - * identified frame, it conveys additional metadata or control information - * from and to the subclass w.r.t. the particular frame in question (rather - * than global parameters). Some of these may apply to each parsing stage, others - * only to some a particular one. These parameters are effectively zeroed at start - * of each frame's processing, i.e. parsing virtual method invocation sequence. - */ -typedef struct { - GstBuffer * buffer; - GstBuffer * out_buffer; - guint flags; - guint64 offset; - gint overhead; - /*< private >*/ - gint size; - guint _gst_reserved_i[2]; - gpointer _gst_reserved_p[2]; - guint _private_flags; -} GstBaseParseFrame; - -typedef struct _GstBaseParse GstBaseParse; -typedef struct _GstBaseParseClass GstBaseParseClass; -typedef struct _GstBaseParsePrivate GstBaseParsePrivate; - -/** - * GstBaseParse: - * @element: the parent element. - * - * The opaque #GstBaseParse data structure. - */ -struct _GstBaseParse { - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - guint flags; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment segment; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; - GstBaseParsePrivate *priv; -}; - -/** - * GstBaseParseClass: - * @parent_class: the parent class - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_sink_caps: allows the subclass to be notified of the actual caps set. - * @get_sink_caps: allows the subclass to do its own sink get caps if needed. - * @handle_frame: Parses the input data into valid frames as defined by subclass - * which should be passed to gst_base_parse_finish_frame(). - * The frame's input buffer is guaranteed writable, - * whereas the input frame ownership is held by caller - * (so subclass should make a copy if it needs to hang on). - * Input buffer (data) is provided by baseclass with as much - * metadata set as possible by baseclass according to upstream - * information and/or subclass settings, - * though subclass may still set buffer timestamp and duration - * if desired. - * @convert: Optional. - * Convert between formats. - * @sink_event: Optional. - * Event handler on the sink pad. This function should chain - * up to the parent implementation to let the default handler - * run. - * @src_event: Optional. - * Event handler on the source pad. Should chain up to the - * parent to let the default handler run. - * @pre_push_frame: Optional. - * Called just prior to pushing a frame (after any pending - * events have been sent) to give subclass a chance to perform - * additional actions at this time (e.g. tag sending) or to - * decide whether this buffer should be dropped or not - * (e.g. custom segment clipping). - * @detect: Optional. - * Called until it doesn't return GST_FLOW_OK anymore for - * the first buffers. Can be used by the subclass to detect - * the stream format. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @check_valid_frame and @parse_frame needs to be - * overridden. - */ -struct _GstBaseParseClass { - GstElementClass parent_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - gboolean (*start) (GstBaseParse * parse); - - gboolean (*stop) (GstBaseParse * parse); - - gboolean (*set_sink_caps) (GstBaseParse * parse, - GstCaps * caps); - - GstFlowReturn (*handle_frame) (GstBaseParse * parse, - GstBaseParseFrame * frame, - gint * skipsize); - - GstFlowReturn (*pre_push_frame) (GstBaseParse * parse, - GstBaseParseFrame * frame); - - gboolean (*convert) (GstBaseParse * parse, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 * dest_value); - - gboolean (*sink_event) (GstBaseParse * parse, - GstEvent * event); - - gboolean (*src_event) (GstBaseParse * parse, - GstEvent * event); - - GstCaps * (*get_sink_caps) (GstBaseParse * parse, - GstCaps * filter); - - GstFlowReturn (*detect) (GstBaseParse * parse, - GstBuffer * buffer); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_parse_get_type (void); - -GType gst_base_parse_frame_get_type (void); - -GstBaseParseFrame * gst_base_parse_frame_new (GstBuffer * buffer, - GstBaseParseFrameFlags flags, - gint overhead); - -void gst_base_parse_frame_init (GstBaseParseFrame * frame); - -void gst_base_parse_frame_free (GstBaseParseFrame * frame); - -GstFlowReturn gst_base_parse_push_frame (GstBaseParse * parse, - GstBaseParseFrame * frame); - -GstFlowReturn gst_base_parse_finish_frame (GstBaseParse * parse, - GstBaseParseFrame * frame, - gint size); - -void gst_base_parse_set_duration (GstBaseParse * parse, - GstFormat fmt, - gint64 duration, - gint interval); - -void gst_base_parse_set_average_bitrate (GstBaseParse * parse, - guint bitrate); - -void gst_base_parse_set_min_frame_size (GstBaseParse * parse, - guint min_size); - -void gst_base_parse_set_has_timing_info (GstBaseParse * parse, - gboolean has_timing); - -void gst_base_parse_set_syncable (GstBaseParse * parse, - gboolean syncable); - -void gst_base_parse_set_passthrough (GstBaseParse * parse, - gboolean passthrough); - -void gst_base_parse_set_pts_interpolation (GstBaseParse * parse, - gboolean pts_interpolate); - -void gst_base_parse_set_frame_rate (GstBaseParse * parse, - guint fps_num, - guint fps_den, - guint lead_in, - guint lead_out); - -void gst_base_parse_set_latency (GstBaseParse * parse, - GstClockTime min_latency, - GstClockTime max_latency); - -gboolean gst_base_parse_convert_default (GstBaseParse * parse, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 * dest_value); - -gboolean gst_base_parse_add_index_entry (GstBaseParse * parse, - guint64 offset, - GstClockTime ts, - gboolean key, - gboolean force); - -G_END_DECLS - -#endif /* __GST_BASE_PARSE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesink.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesink.h deleted file mode 100644 index e4bb7350..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesink.h +++ /dev/null @@ -1,255 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstbasesink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_SINK_H__ -#define __GST_BASE_SINK_H__ - -#include - -G_BEGIN_DECLS - - -#define GST_TYPE_BASE_SINK (gst_base_sink_get_type()) -#define GST_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_SINK,GstBaseSink)) -#define GST_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_SINK,GstBaseSinkClass)) -#define GST_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SINK, GstBaseSinkClass)) -#define GST_IS_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_SINK)) -#define GST_IS_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_SINK)) -#define GST_BASE_SINK_CAST(obj) ((GstBaseSink *) (obj)) - -/** - * GST_BASE_SINK_PAD: - * @obj: base sink instance - * - * Gives the pointer to the #GstPad object of the element. - */ -#define GST_BASE_SINK_PAD(obj) (GST_BASE_SINK_CAST (obj)->sinkpad) - -#define GST_BASE_SINK_GET_PREROLL_LOCK(pad) (&GST_BASE_SINK_CAST(pad)->preroll_lock) -#define GST_BASE_SINK_PREROLL_LOCK(pad) (g_mutex_lock(GST_BASE_SINK_GET_PREROLL_LOCK(pad))) -#define GST_BASE_SINK_PREROLL_TRYLOCK(pad) (g_mutex_trylock(GST_BASE_SINK_GET_PREROLL_LOCK(pad))) -#define GST_BASE_SINK_PREROLL_UNLOCK(pad) (g_mutex_unlock(GST_BASE_SINK_GET_PREROLL_LOCK(pad))) - -#define GST_BASE_SINK_GET_PREROLL_COND(pad) (&GST_BASE_SINK_CAST(pad)->preroll_cond) -#define GST_BASE_SINK_PREROLL_WAIT(pad) \ - g_cond_wait (GST_BASE_SINK_GET_PREROLL_COND (pad), GST_BASE_SINK_GET_PREROLL_LOCK (pad)) -#define GST_BASE_SINK_PREROLL_WAIT_UNTIL(pad, end_time) \ - g_cond_wait_until (GST_BASE_SINK_GET_PREROLL_COND (pad), GST_BASE_SINK_GET_PREROLL_LOCK (pad), end_time) -#define GST_BASE_SINK_PREROLL_SIGNAL(pad) g_cond_signal (GST_BASE_SINK_GET_PREROLL_COND (pad)); -#define GST_BASE_SINK_PREROLL_BROADCAST(pad) g_cond_broadcast (GST_BASE_SINK_GET_PREROLL_COND (pad)); - -typedef struct _GstBaseSink GstBaseSink; -typedef struct _GstBaseSinkClass GstBaseSinkClass; -typedef struct _GstBaseSinkPrivate GstBaseSinkPrivate; - -/** - * GstBaseSink: - * - * The opaque #GstBaseSink data structure. - */ -struct _GstBaseSink { - GstElement element; - - /*< protected >*/ - GstPad *sinkpad; - GstPadMode pad_mode; - - /*< protected >*/ /* with LOCK */ - guint64 offset; - gboolean can_activate_pull; - gboolean can_activate_push; - - /*< protected >*/ /* with PREROLL_LOCK */ - GMutex preroll_lock; - GCond preroll_cond; - gboolean eos; - gboolean need_preroll; - gboolean have_preroll; - gboolean playing_async; - - /*< protected >*/ /* with STREAM_LOCK */ - gboolean have_newsegment; - GstSegment segment; - - /*< private >*/ /* with LOCK */ - GstClockID clock_id; - gboolean sync; - gboolean flushing; - gboolean running; - - gint64 max_lateness; - - /*< private >*/ - GstBaseSinkPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstBaseSinkClass: - * @parent_class: Element parent class - * @get_caps: Called to get sink pad caps from the subclass - * @set_caps: Notify subclass of changed caps - * @fixate: Only useful in pull mode. Implement if you have - * ideas about what should be the default values for the caps you support. - * @activate_pull: Subclasses should override this when they can provide an - * alternate method of spawning a thread to drive the pipeline in pull mode. - * Should start or stop the pulling thread, depending on the value of the - * "active" argument. Called after actually activating the sink pad in pull - * mode. The default implementation starts a task on the sink pad. - * @get_times: Called to get the start and end times for synchronising - * the passed buffer to the clock - * @propose_allocation: configure the allocation query - * @start: Start processing. Ideal for opening resources in the subclass - * @stop: Stop processing. Subclasses should use this to close resources. - * @unlock: Unlock any pending access to the resource. Subclasses should - * unblock any blocked function ASAP - * @unlock_stop: Clear the previous unlock request. Subclasses should clear - * any state they set during unlock(), such as clearing command queues. - * @query: perform a #GstQuery on the element. - * @event: Override this to handle events arriving on the sink pad - * @wait_event: Override this to implement custom logic to wait for the event - * time (for events like EOS and GAP). Subclasses should always first - * chain up to the default implementation. - * @prepare: Called to prepare the buffer for @render and @preroll. This - * function is called before synchronisation is performed. - * @prepare_list: Called to prepare the buffer list for @render_list. This - * function is called before synchronisation is performed. - * @preroll: Called to present the preroll buffer if desired. - * @render: Called when a buffer should be presented or output, at the - * correct moment if the #GstBaseSink has been set to sync to the clock. - * @render_list: Same as @render but used whith buffer lists instead of - * buffers. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At the minimum, the @render method should be overridden to - * output/present buffers. - */ -struct _GstBaseSinkClass { - GstElementClass parent_class; - - /* get caps from subclass */ - GstCaps* (*get_caps) (GstBaseSink *sink, GstCaps *filter); - /* notify subclass of new caps */ - gboolean (*set_caps) (GstBaseSink *sink, GstCaps *caps); - - /* fixate sink caps during pull-mode negotiation */ - GstCaps * (*fixate) (GstBaseSink *sink, GstCaps *caps); - /* start or stop a pulling thread */ - gboolean (*activate_pull)(GstBaseSink *sink, gboolean active); - - /* get the start and end times for syncing on this buffer */ - void (*get_times) (GstBaseSink *sink, GstBuffer *buffer, - GstClockTime *start, GstClockTime *end); - - /* propose allocation parameters for upstream */ - gboolean (*propose_allocation) (GstBaseSink *sink, GstQuery *query); - - /* start and stop processing, ideal for opening/closing the resource */ - gboolean (*start) (GstBaseSink *sink); - gboolean (*stop) (GstBaseSink *sink); - - /* unlock any pending access to the resource. subclasses should unlock - * any function ASAP. */ - gboolean (*unlock) (GstBaseSink *sink); - /* Clear a previously indicated unlock request not that unlocking is - * complete. Sub-classes should clear any command queue or indicator they - * set during unlock */ - gboolean (*unlock_stop) (GstBaseSink *sink); - - /* notify subclass of query */ - gboolean (*query) (GstBaseSink *sink, GstQuery *query); - - /* notify subclass of event */ - gboolean (*event) (GstBaseSink *sink, GstEvent *event); - /* wait for eos or gap, subclasses should chain up to parent first */ - GstFlowReturn (*wait_event) (GstBaseSink *sink, GstEvent *event); - - /* notify subclass of buffer or list before doing sync */ - GstFlowReturn (*prepare) (GstBaseSink *sink, GstBuffer *buffer); - GstFlowReturn (*prepare_list) (GstBaseSink *sink, GstBufferList *buffer_list); - - /* notify subclass of preroll buffer or real buffer */ - GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer); - GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer); - /* Render a BufferList */ - GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_list); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_sink_get_type(void); - -GstFlowReturn gst_base_sink_do_preroll (GstBaseSink *sink, GstMiniObject *obj); -GstFlowReturn gst_base_sink_wait_preroll (GstBaseSink *sink); - -/* synchronizing against the clock */ -void gst_base_sink_set_sync (GstBaseSink *sink, gboolean sync); -gboolean gst_base_sink_get_sync (GstBaseSink *sink); - -/* dropping late buffers */ -void gst_base_sink_set_max_lateness (GstBaseSink *sink, gint64 max_lateness); -gint64 gst_base_sink_get_max_lateness (GstBaseSink *sink); - -/* performing QoS */ -void gst_base_sink_set_qos_enabled (GstBaseSink *sink, gboolean enabled); -gboolean gst_base_sink_is_qos_enabled (GstBaseSink *sink); - -/* doing async state changes */ -void gst_base_sink_set_async_enabled (GstBaseSink *sink, gboolean enabled); -gboolean gst_base_sink_is_async_enabled (GstBaseSink *sink); - -/* tuning synchronisation */ -void gst_base_sink_set_ts_offset (GstBaseSink *sink, GstClockTimeDiff offset); -GstClockTimeDiff gst_base_sink_get_ts_offset (GstBaseSink *sink); - -/* last sample */ -GstSample * gst_base_sink_get_last_sample (GstBaseSink *sink); -void gst_base_sink_set_last_sample_enabled (GstBaseSink *sink, gboolean enabled); -gboolean gst_base_sink_is_last_sample_enabled (GstBaseSink *sink); - -/* latency */ -gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolean *live, gboolean *upstream_live, - GstClockTime *min_latency, GstClockTime *max_latency); -GstClockTime gst_base_sink_get_latency (GstBaseSink *sink); - -/* render delay */ -void gst_base_sink_set_render_delay (GstBaseSink *sink, GstClockTime delay); -GstClockTime gst_base_sink_get_render_delay (GstBaseSink *sink); - -/* blocksize */ -void gst_base_sink_set_blocksize (GstBaseSink *sink, guint blocksize); -guint gst_base_sink_get_blocksize (GstBaseSink *sink); - -/* throttle-time */ -void gst_base_sink_set_throttle_time (GstBaseSink *sink, guint64 throttle); -guint64 gst_base_sink_get_throttle_time (GstBaseSink *sink); - -GstClockReturn gst_base_sink_wait_clock (GstBaseSink *sink, GstClockTime time, - GstClockTimeDiff * jitter); -GstFlowReturn gst_base_sink_wait (GstBaseSink *sink, GstClockTime time, - GstClockTimeDiff *jitter); - -G_END_DECLS - -#endif /* __GST_BASE_SINK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesrc.h deleted file mode 100644 index 466f0fc7..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasesrc.h +++ /dev/null @@ -1,270 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstbasesrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_SRC_H__ -#define __GST_BASE_SRC_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BASE_SRC (gst_base_src_get_type()) -#define GST_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_SRC,GstBaseSrc)) -#define GST_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_SRC,GstBaseSrcClass)) -#define GST_BASE_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SRC, GstBaseSrcClass)) -#define GST_IS_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_SRC)) -#define GST_IS_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_SRC)) -#define GST_BASE_SRC_CAST(obj) ((GstBaseSrc *)(obj)) - -/** - * GstBaseSrcFlags: - * @GST_BASE_SRC_FLAG_STARTING: has source is starting - * @GST_BASE_SRC_FLAG_STARTED: has source been started - * @GST_BASE_SRC_FLAG_LAST: offset to define more flags - * - * The #GstElement flags that a basesrc element may have. - */ -typedef enum { - GST_BASE_SRC_FLAG_STARTING = (GST_ELEMENT_FLAG_LAST << 0), - GST_BASE_SRC_FLAG_STARTED = (GST_ELEMENT_FLAG_LAST << 1), - /* padding */ - GST_BASE_SRC_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 6) -} GstBaseSrcFlags; - -#define GST_BASE_SRC_IS_STARTING(obj) GST_OBJECT_FLAG_IS_SET ((obj), GST_BASE_SRC_FLAG_STARTING) -#define GST_BASE_SRC_IS_STARTED(obj) GST_OBJECT_FLAG_IS_SET ((obj), GST_BASE_SRC_FLAG_STARTED) - -typedef struct _GstBaseSrc GstBaseSrc; -typedef struct _GstBaseSrcClass GstBaseSrcClass; -typedef struct _GstBaseSrcPrivate GstBaseSrcPrivate; - -/** - * GST_BASE_SRC_PAD: - * @obj: base source instance - * - * Gives the pointer to the #GstPad object of the element. - */ -#define GST_BASE_SRC_PAD(obj) (GST_BASE_SRC_CAST (obj)->srcpad) - - -/** - * GstBaseSrc: - * - * The opaque #GstBaseSrc data structure. - */ -struct _GstBaseSrc { - GstElement element; - - /*< protected >*/ - GstPad *srcpad; - - /* available to subclass implementations */ - /* MT-protected (with LIVE_LOCK) */ - GMutex live_lock; - GCond live_cond; - gboolean is_live; - gboolean live_running; - - /* MT-protected (with LOCK) */ - guint blocksize; /* size of buffers when operating push based */ - gboolean can_activate_push; /* some scheduling properties */ - gboolean random_access; - - GstClockID clock_id; /* for syncing */ - - /* MT-protected (with STREAM_LOCK *and* OBJECT_LOCK) */ - GstSegment segment; - /* MT-protected (with STREAM_LOCK) */ - gboolean need_newsegment; - - gint num_buffers; - gint num_buffers_left; - - gboolean typefind; - gboolean running; - GstEvent *pending_seek; - - GstBaseSrcPrivate *priv; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstBaseSrcClass: - * @parent_class: Element parent class - * @get_caps: Called to get the caps to report - * @negotiate: Negotiated the caps with the peer. - * @fixate: Called during negotiation if caps need fixating. Implement instead of - * setting a fixate function on the source pad. - * @set_caps: Notify subclass of changed output caps - * @decide_allocation: configure the allocation query - * @start: Start processing. Subclasses should open resources and prepare - * to produce data. Implementation should call gst_base_src_start_complete() - * when the operation completes, either from the current thread or any other - * thread that finishes the start operation asynchronously. - * @stop: Stop processing. Subclasses should use this to close resources. - * @get_times: Given a buffer, return the start and stop time when it - * should be pushed out. The base class will sync on the clock using - * these times. - * @get_size: Return the total size of the resource, in the configured format. - * @is_seekable: Check if the source can seek - * @prepare_seek_segment: Prepare the GstSegment that will be passed to the - * do_seek vmethod for executing a seek request. Sub-classes should override - * this if they support seeking in formats other than the configured native - * format. By default, it tries to convert the seek arguments to the - * configured native format and prepare a segment in that format. - * @do_seek: Perform seeking on the resource to the indicated segment. - * @unlock: Unlock any pending access to the resource. Subclasses should - * unblock any blocked function ASAP. In particular, any create() function in - * progress should be unblocked and should return GST_FLOW_FLUSHING. Any - * future @create() function call should also return GST_FLOW_FLUSHING - * until the @unlock_stop() function has been called. - * @unlock_stop: Clear the previous unlock request. Subclasses should clear - * any state they set during unlock(), such as clearing command queues. - * @query: Handle a requested query. - * @event: Override this to implement custom event handling. - * @create: Ask the subclass to create a buffer with offset and size. - * When the subclass returns GST_FLOW_OK, it MUST return a buffer of the - * requested size unless fewer bytes are available because an EOS condition - * is near. No buffer should be returned when the return value is different - * from GST_FLOW_OK. A return value of GST_FLOW_EOS signifies that the - * end of stream is reached. The default implementation will call @alloc and - * then call @fill. - * @alloc: Ask the subclass to allocate a buffer with for offset and size. The - * default implementation will create a new buffer from the negotiated allocator. - * @fill: Ask the subclass to fill the buffer with data for offset and size. The - * passed buffer is guaranteed to hold the requested amount of bytes. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At the minimum, the @create method should be overridden to produce - * buffers. - */ -struct _GstBaseSrcClass { - GstElementClass parent_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - /* get caps from subclass */ - GstCaps* (*get_caps) (GstBaseSrc *src, GstCaps *filter); - /* decide on caps */ - gboolean (*negotiate) (GstBaseSrc *src); - /* called if, in negotiation, caps need fixating */ - GstCaps * (*fixate) (GstBaseSrc *src, GstCaps *caps); - /* notify the subclass of new caps */ - gboolean (*set_caps) (GstBaseSrc *src, GstCaps *caps); - - /* setup allocation query */ - gboolean (*decide_allocation) (GstBaseSrc *src, GstQuery *query); - - /* start and stop processing, ideal for opening/closing the resource */ - gboolean (*start) (GstBaseSrc *src); - gboolean (*stop) (GstBaseSrc *src); - - /* given a buffer, return start and stop time when it should be pushed - * out. The base class will sync on the clock using these times. */ - void (*get_times) (GstBaseSrc *src, GstBuffer *buffer, - GstClockTime *start, GstClockTime *end); - - /* get the total size of the resource in bytes */ - gboolean (*get_size) (GstBaseSrc *src, guint64 *size); - - /* check if the resource is seekable */ - gboolean (*is_seekable) (GstBaseSrc *src); - - /* Prepare the segment on which to perform do_seek(), converting to the - * current basesrc format. */ - gboolean (*prepare_seek_segment) (GstBaseSrc *src, GstEvent *seek, - GstSegment *segment); - /* notify subclasses of a seek */ - gboolean (*do_seek) (GstBaseSrc *src, GstSegment *segment); - - /* unlock any pending access to the resource. subclasses should unlock - * any function ASAP. */ - gboolean (*unlock) (GstBaseSrc *src); - /* Clear any pending unlock request, as we succeeded in unlocking */ - gboolean (*unlock_stop) (GstBaseSrc *src); - - /* notify subclasses of a query */ - gboolean (*query) (GstBaseSrc *src, GstQuery *query); - - /* notify subclasses of an event */ - gboolean (*event) (GstBaseSrc *src, GstEvent *event); - - /* ask the subclass to create a buffer with offset and size, the default - * implementation will call alloc and fill. */ - GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size, - GstBuffer **buf); - /* ask the subclass to allocate an output buffer. The default implementation - * will use the negotiated allocator. */ - GstFlowReturn (*alloc) (GstBaseSrc *src, guint64 offset, guint size, - GstBuffer **buf); - /* ask the subclass to fill the buffer with data from offset and size */ - GstFlowReturn (*fill) (GstBaseSrc *src, guint64 offset, guint size, - GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_src_get_type (void); - -GstFlowReturn gst_base_src_wait_playing (GstBaseSrc *src); - -void gst_base_src_set_live (GstBaseSrc *src, gboolean live); -gboolean gst_base_src_is_live (GstBaseSrc *src); - -void gst_base_src_set_format (GstBaseSrc *src, GstFormat format); - -void gst_base_src_set_dynamic_size (GstBaseSrc * src, gboolean dynamic); - -void gst_base_src_set_async (GstBaseSrc *src, gboolean async); -gboolean gst_base_src_is_async (GstBaseSrc *src); - -void gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret); -GstFlowReturn gst_base_src_start_wait (GstBaseSrc * basesrc); - -gboolean gst_base_src_query_latency (GstBaseSrc *src, gboolean * live, - GstClockTime * min_latency, - GstClockTime * max_latency); - -void gst_base_src_set_blocksize (GstBaseSrc *src, guint blocksize); -guint gst_base_src_get_blocksize (GstBaseSrc *src); - -void gst_base_src_set_do_timestamp (GstBaseSrc *src, gboolean timestamp); -gboolean gst_base_src_get_do_timestamp (GstBaseSrc *src); - -gboolean gst_base_src_new_seamless_segment (GstBaseSrc *src, gint64 start, gint64 stop, gint64 time); - -gboolean gst_base_src_set_caps (GstBaseSrc *src, GstCaps *caps); - -GstBufferPool * gst_base_src_get_buffer_pool (GstBaseSrc *src); -void gst_base_src_get_allocator (GstBaseSrc *src, - GstAllocator **allocator, - GstAllocationParams *params); - - -G_END_DECLS - -#endif /* __GST_BASE_SRC_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasetransform.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasetransform.h deleted file mode 100644 index 666fbb19..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbasetransform.h +++ /dev/null @@ -1,298 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_TRANSFORM_H__ -#define __GST_BASE_TRANSFORM_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BASE_TRANSFORM (gst_base_transform_get_type()) -#define GST_BASE_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_TRANSFORM,GstBaseTransform)) -#define GST_BASE_TRANSFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_TRANSFORM,GstBaseTransformClass)) -#define GST_BASE_TRANSFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_BASE_TRANSFORM,GstBaseTransformClass)) -#define GST_IS_BASE_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_TRANSFORM)) -#define GST_IS_BASE_TRANSFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_TRANSFORM)) -#define GST_BASE_TRANSFORM_CAST(obj) ((GstBaseTransform *)(obj)) - -/** - * GST_BASE_TRANSFORM_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_BASE_TRANSFORM_SINK_NAME "sink" -/** - * GST_BASE_TRANSFORM_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_BASE_TRANSFORM_SRC_NAME "src" - -/** - * GST_BASE_TRANSFORM_SRC_PAD: - * @obj: base transform instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_BASE_TRANSFORM_SRC_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)->srcpad) - -/** - * GST_BASE_TRANSFORM_SINK_PAD: - * @obj: base transform instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_BASE_TRANSFORM_SINK_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)->sinkpad) - -/** - * GST_BASE_TRANSFORM_FLOW_DROPPED: - * - * A #GstFlowReturn that can be returned from transform and transform_ip to - * indicate that no output buffer was generated. - */ -#define GST_BASE_TRANSFORM_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS - -typedef struct _GstBaseTransform GstBaseTransform; -typedef struct _GstBaseTransformClass GstBaseTransformClass; -typedef struct _GstBaseTransformPrivate GstBaseTransformPrivate; - -/** - * GstBaseTransform: - * - * The opaque #GstBaseTransform data structure. - */ -struct _GstBaseTransform { - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - /* MT-protected (with STREAM_LOCK) */ - gboolean have_segment; - GstSegment segment; - - /*< private >*/ - GstBaseTransformPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstBaseTransformClass: - * @parent_class: Element parent class - * @passthrough_on_same_caps: If set to %TRUE, passthrough mode will be - * automatically enabled if the caps are the same. - * Set to %FALSE by default. - * @transform_ip_on_passthrough: If set to %TRUE, @transform_ip will be called in - * passthrough mode. The passed buffer might not be - * writable. When %FALSE, neither @transform nor - * @transform_ip will be called in passthrough mode. - * Set to %TRUE by default. - * @transform_caps: Optional. Given the pad in this direction and the given - * caps, what caps are allowed on the other pad in this - * element ? - * @fixate_caps: Optional. Given the pad in this direction and the given - * caps, fixate the caps on the other pad. The function takes - * ownership of @othercaps and returns a fixated version of - * @othercaps. @othercaps is not guaranteed to be writable. - * @accept_caps: Optional. - * Subclasses can override this method to check if @caps can be - * handled by the element. The default implementation might not be - * the most optimal way to check this in all cases. - * @set_caps: allows the subclass to be notified of the actual caps set. - * @query: Optional. - * Handle a requested query. Subclasses that implement this - * should must chain up to the parent if they didn't handle the - * query - * @decide_allocation: Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. This function is only called - * when not operating in passthrough mode. The default - * implementation will remove all memory dependent metadata. - * If there is ia @filter_meta method implementation, it will - * be called for all metadata API in the downstream query, - * otherwise the metadata API is removed. - * @filter_meta: Return TRUE if the metadata API should be proposed in the - * upstream allocation query. The default implementation is NULL - * and will cause all metadata to be removed. - * @propose_allocation: Propose buffer allocation parameters for upstream elements. - * This function must be implemented if the element reads or - * writes the buffer content. The query that was passed to - * the decide_allocation is passed in this method (or NULL - * when the element is in passthrough mode). The default - * implementation will pass the query downstream when in - * passthrough mode and will copy all the filtered metadata - * API in non-passthrough mode. - * @transform_size: Optional. Given the size of a buffer in the given direction - * with the given caps, calculate the size in bytes of a buffer - * on the other pad with the given other caps. - * The default implementation uses get_unit_size and keeps - * the number of units the same. - * @get_unit_size: Required if the transform is not in-place. - * get the size in bytes of one unit for the given caps. - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @sink_event: Optional. - * Event handler on the sink pad. The default implementation - * handles the event and forwards it downstream. - * @src_event: Optional. - * Event handler on the source pad. The default implementation - * handles the event and forwards it upstream. - * @prepare_output_buffer: Optional. - * Subclasses can override this to do their own - * allocation of output buffers. Elements that only do - * analysis can return a subbuffer or even just - * return a reference to the input buffer (if in - * passthrough mode). The default implementation will - * use the negotiated allocator or bufferpool and - * transform_size to allocate an output buffer or it - * will return the input buffer in passthrough mode. - * @copy_metadata: Optional. - * Copy the metadata from the input buffer to the output buffer. - * The default implementation will copy the flags, timestamps and - * offsets of the buffer. - * @transform_meta: Optional. Transform the metadata on the input buffer to the - * output buffer. By default this method is NULL and no - * metadata is copied. subclasses can implement this method and - * return TRUE if the metadata is to be copied. - * @before_transform: Optional. - * This method is called right before the base class will - * start processing. Dynamic properties or other delayed - * configuration could be performed in this method. - * @transform: Required if the element does not operate in-place. - * Transforms one incoming buffer to one outgoing buffer. - * The function is allowed to change size/timestamp/duration - * of the outgoing buffer. - * @transform_ip: Required if the element operates in-place. - * Transform the incoming buffer in-place. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum either @transform or @transform_ip need to be overridden. - * If the element can overwrite the input data with the results (data is of the - * same type and quantity) it should provide @transform_ip. - */ -struct _GstBaseTransformClass { - GstElementClass parent_class; - - /*< public >*/ - gboolean passthrough_on_same_caps; - gboolean transform_ip_on_passthrough; - - /* virtual methods for subclasses */ - GstCaps* (*transform_caps) (GstBaseTransform *trans, - GstPadDirection direction, - GstCaps *caps, GstCaps *filter); - GstCaps* (*fixate_caps) (GstBaseTransform *trans, - GstPadDirection direction, GstCaps *caps, - GstCaps *othercaps); - gboolean (*accept_caps) (GstBaseTransform *trans, GstPadDirection direction, - GstCaps *caps); - gboolean (*set_caps) (GstBaseTransform *trans, GstCaps *incaps, - GstCaps *outcaps); - gboolean (*query) (GstBaseTransform *trans, GstPadDirection direction, - GstQuery *query); - - /* decide allocation query for output buffers */ - gboolean (*decide_allocation) (GstBaseTransform *trans, GstQuery *query); - gboolean (*filter_meta) (GstBaseTransform *trans, GstQuery *query, - GType api, const GstStructure *params); - - /* propose allocation query parameters for input buffers */ - gboolean (*propose_allocation) (GstBaseTransform *trans, GstQuery *decide_query, - GstQuery *query); - - /* transform size */ - gboolean (*transform_size) (GstBaseTransform *trans, - GstPadDirection direction, - GstCaps *caps, gsize size, - GstCaps *othercaps, gsize *othersize); - - gboolean (*get_unit_size) (GstBaseTransform *trans, GstCaps *caps, - gsize *size); - - /* states */ - gboolean (*start) (GstBaseTransform *trans); - gboolean (*stop) (GstBaseTransform *trans); - - /* sink and src pad event handlers */ - gboolean (*sink_event) (GstBaseTransform *trans, GstEvent *event); - gboolean (*src_event) (GstBaseTransform *trans, GstEvent *event); - - GstFlowReturn (*prepare_output_buffer) (GstBaseTransform * trans, - GstBuffer *input, GstBuffer **outbuf); - - /* metadata */ - gboolean (*copy_metadata) (GstBaseTransform *trans, GstBuffer *input, - GstBuffer *outbuf); - gboolean (*transform_meta) (GstBaseTransform *trans, GstBuffer *outbuf, - GstMeta *meta, GstBuffer *inbuf); - - void (*before_transform) (GstBaseTransform *trans, GstBuffer *buffer); - - /* transform */ - GstFlowReturn (*transform) (GstBaseTransform *trans, GstBuffer *inbuf, - GstBuffer *outbuf); - GstFlowReturn (*transform_ip) (GstBaseTransform *trans, GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_transform_get_type (void); - -void gst_base_transform_set_passthrough (GstBaseTransform *trans, - gboolean passthrough); -gboolean gst_base_transform_is_passthrough (GstBaseTransform *trans); - -void gst_base_transform_set_in_place (GstBaseTransform *trans, - gboolean in_place); -gboolean gst_base_transform_is_in_place (GstBaseTransform *trans); - -void gst_base_transform_update_qos (GstBaseTransform *trans, - gdouble proportion, - GstClockTimeDiff diff, - GstClockTime timestamp); -void gst_base_transform_set_qos_enabled (GstBaseTransform *trans, - gboolean enabled); -gboolean gst_base_transform_is_qos_enabled (GstBaseTransform *trans); - -void gst_base_transform_set_gap_aware (GstBaseTransform *trans, - gboolean gap_aware); - -void gst_base_transform_set_prefer_passthrough (GstBaseTransform *trans, - gboolean prefer_passthrough); - -GstBufferPool * gst_base_transform_get_buffer_pool (GstBaseTransform *trans); -void gst_base_transform_get_allocator (GstBaseTransform *trans, - GstAllocator **allocator, - GstAllocationParams *params); - -void gst_base_transform_reconfigure_sink (GstBaseTransform *trans); -void gst_base_transform_reconfigure_src (GstBaseTransform *trans); -G_END_DECLS - -#endif /* __GST_BASE_TRANSFORM_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbitreader.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbitreader.h deleted file mode 100644 index 4a2b4a0d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbitreader.h +++ /dev/null @@ -1,301 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2008 Sebastian Dröge . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BIT_READER_H__ -#define __GST_BIT_READER_H__ - -#include - -/* FIXME: inline functions */ - -G_BEGIN_DECLS - -#define GST_BIT_READER(reader) ((GstBitReader *) (reader)) - -/** - * GstBitReader: - * @data: (array length=size): Data from which the bit reader will - * read - * @size: Size of @data in bytes - * @byte: Current byte position - * @bit: Bit position in the current byte - * - * A bit reader instance. - */ -typedef struct { - const guint8 *data; - guint size; - - guint byte; /* Byte position */ - guint bit; /* Bit position in the current byte */ - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstBitReader; - -GstBitReader * gst_bit_reader_new (const guint8 *data, guint size) G_GNUC_MALLOC; -void gst_bit_reader_free (GstBitReader *reader); - -void gst_bit_reader_init (GstBitReader *reader, const guint8 *data, guint size); - -gboolean gst_bit_reader_set_pos (GstBitReader *reader, guint pos); -guint gst_bit_reader_get_pos (const GstBitReader *reader); - -guint gst_bit_reader_get_remaining (const GstBitReader *reader); - -guint gst_bit_reader_get_size (const GstBitReader *reader); - -gboolean gst_bit_reader_skip (GstBitReader *reader, guint nbits); -gboolean gst_bit_reader_skip_to_byte (GstBitReader *reader); - -gboolean gst_bit_reader_get_bits_uint8 (GstBitReader *reader, guint8 *val, guint nbits); -gboolean gst_bit_reader_get_bits_uint16 (GstBitReader *reader, guint16 *val, guint nbits); -gboolean gst_bit_reader_get_bits_uint32 (GstBitReader *reader, guint32 *val, guint nbits); -gboolean gst_bit_reader_get_bits_uint64 (GstBitReader *reader, guint64 *val, guint nbits); - -gboolean gst_bit_reader_peek_bits_uint8 (const GstBitReader *reader, guint8 *val, guint nbits); -gboolean gst_bit_reader_peek_bits_uint16 (const GstBitReader *reader, guint16 *val, guint nbits); -gboolean gst_bit_reader_peek_bits_uint32 (const GstBitReader *reader, guint32 *val, guint nbits); -gboolean gst_bit_reader_peek_bits_uint64 (const GstBitReader *reader, guint64 *val, guint nbits); - -/** - * GST_BIT_READER_INIT: - * @data: Data from which the #GstBitReader should read - * @size: Size of @data in bytes - * - * A #GstBitReader must be initialized with this macro, before it can be - * used. This macro can used be to initialize a variable, but it cannot - * be assigned to a variable. In that case you have to use - * gst_bit_reader_init(). - */ -#define GST_BIT_READER_INIT(data, size) {data, size, 0, 0} - -/* Unchecked variants */ - -static inline void -gst_bit_reader_skip_unchecked (GstBitReader * reader, guint nbits) -{ - reader->bit += nbits; - reader->byte += reader->bit / 8; - reader->bit = reader->bit % 8; -} - -static inline void -gst_bit_reader_skip_to_byte_unchecked (GstBitReader * reader) -{ - if (reader->bit) { - reader->bit = 0; - reader->byte++; - } -} - -#define __GST_BIT_READER_READ_BITS_UNCHECKED(bits) \ -static inline guint##bits \ -gst_bit_reader_peek_bits_uint##bits##_unchecked (const GstBitReader *reader, guint nbits) \ -{ \ - guint##bits ret = 0; \ - const guint8 *data; \ - guint byte, bit; \ - \ - data = reader->data; \ - byte = reader->byte; \ - bit = reader->bit; \ - \ - while (nbits > 0) { \ - guint toread = MIN (nbits, 8 - bit); \ - \ - ret <<= toread; \ - ret |= (data[byte] & (0xff >> bit)) >> (8 - toread - bit); \ - \ - bit += toread; \ - if (bit >= 8) { \ - byte++; \ - bit = 0; \ - } \ - nbits -= toread; \ - } \ - \ - return ret; \ -} \ -\ -static inline guint##bits \ -gst_bit_reader_get_bits_uint##bits##_unchecked (GstBitReader *reader, guint nbits) \ -{ \ - guint##bits ret; \ - \ - ret = gst_bit_reader_peek_bits_uint##bits##_unchecked (reader, nbits); \ - \ - gst_bit_reader_skip_unchecked (reader, nbits); \ - \ - return ret; \ -} - -__GST_BIT_READER_READ_BITS_UNCHECKED (8) -__GST_BIT_READER_READ_BITS_UNCHECKED (16) -__GST_BIT_READER_READ_BITS_UNCHECKED (32) -__GST_BIT_READER_READ_BITS_UNCHECKED (64) - -#undef __GST_BIT_READER_READ_BITS_UNCHECKED - -/* unchecked variants -- do not use */ - -static inline guint -_gst_bit_reader_get_size_unchecked (const GstBitReader * reader) -{ - return reader->size * 8; -} - -static inline guint -_gst_bit_reader_get_pos_unchecked (const GstBitReader * reader) -{ - return reader->byte * 8 + reader->bit; -} - -static inline guint -_gst_bit_reader_get_remaining_unchecked (const GstBitReader * reader) -{ - return reader->size * 8 - (reader->byte * 8 + reader->bit); -} - -/* inlined variants -- do not use directly */ -static inline guint -_gst_bit_reader_get_size_inline (const GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_bit_reader_get_size_unchecked (reader); -} - -static inline guint -_gst_bit_reader_get_pos_inline (const GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_bit_reader_get_pos_unchecked (reader); -} - -static inline guint -_gst_bit_reader_get_remaining_inline (const GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_bit_reader_get_remaining_unchecked (reader); -} - -static inline gboolean -_gst_bit_reader_skip_inline (GstBitReader * reader, guint nbits) -{ - g_return_val_if_fail (reader != NULL, FALSE); - - if (_gst_bit_reader_get_remaining_unchecked (reader) < nbits) - return FALSE; - - gst_bit_reader_skip_unchecked (reader, nbits); - - return TRUE; -} - -static inline gboolean -_gst_bit_reader_skip_to_byte_inline (GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, FALSE); - - if (reader->byte > reader->size) - return FALSE; - - gst_bit_reader_skip_to_byte_unchecked (reader); - - return TRUE; -} - -#define __GST_BIT_READER_READ_BITS_INLINE(bits) \ -static inline gboolean \ -_gst_bit_reader_get_bits_uint##bits##_inline (GstBitReader *reader, guint##bits *val, guint nbits) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - g_return_val_if_fail (nbits <= bits, FALSE); \ - \ - if (_gst_bit_reader_get_remaining_unchecked (reader) < nbits) \ - return FALSE; \ -\ - *val = gst_bit_reader_get_bits_uint##bits##_unchecked (reader, nbits); \ - return TRUE; \ -} \ -\ -static inline gboolean \ -_gst_bit_reader_peek_bits_uint##bits##_inline (const GstBitReader *reader, guint##bits *val, guint nbits) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - g_return_val_if_fail (nbits <= bits, FALSE); \ - \ - if (_gst_bit_reader_get_remaining_unchecked (reader) < nbits) \ - return FALSE; \ -\ - *val = gst_bit_reader_peek_bits_uint##bits##_unchecked (reader, nbits); \ - return TRUE; \ -} - -__GST_BIT_READER_READ_BITS_INLINE (8) -__GST_BIT_READER_READ_BITS_INLINE (16) -__GST_BIT_READER_READ_BITS_INLINE (32) -__GST_BIT_READER_READ_BITS_INLINE (64) - -#undef __GST_BIT_READER_READ_BITS_INLINE - -#ifndef GST_BIT_READER_DISABLE_INLINES - -#define gst_bit_reader_get_size(reader) \ - _gst_bit_reader_get_size_inline (reader) -#define gst_bit_reader_get_pos(reader) \ - _gst_bit_reader_get_pos_inline (reader) -#define gst_bit_reader_get_remaining(reader) \ - _gst_bit_reader_get_remaining_inline (reader) - -/* we use defines here so we can add the G_LIKELY() */ - -#define gst_bit_reader_skip(reader, nbits)\ - G_LIKELY (_gst_bit_reader_skip_inline(reader, nbits)) -#define gst_bit_reader_skip_to_byte(reader)\ - G_LIKELY (_gst_bit_reader_skip_to_byte_inline(reader)) - -#define gst_bit_reader_get_bits_uint8(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint8_inline (reader, val, nbits)) -#define gst_bit_reader_get_bits_uint16(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint16_inline (reader, val, nbits)) -#define gst_bit_reader_get_bits_uint32(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint32_inline (reader, val, nbits)) -#define gst_bit_reader_get_bits_uint64(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint64_inline (reader, val, nbits)) - -#define gst_bit_reader_peek_bits_uint8(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint8_inline (reader, val, nbits)) -#define gst_bit_reader_peek_bits_uint16(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint16_inline (reader, val, nbits)) -#define gst_bit_reader_peek_bits_uint32(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint32_inline (reader, val, nbits)) -#define gst_bit_reader_peek_bits_uint64(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint64_inline (reader, val, nbits)) -#endif - -G_END_DECLS - -#endif /* __GST_BIT_READER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytereader.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytereader.h deleted file mode 100644 index 15ac2ed0..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytereader.h +++ /dev/null @@ -1,513 +0,0 @@ -/* GStreamer byte reader - * - * Copyright (C) 2008 Sebastian Dröge . - * Copyright (C) 2009 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BYTE_READER_H__ -#define __GST_BYTE_READER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_BYTE_READER(reader) ((GstByteReader *) (reader)) - -/** - * GstByteReader: - * @data: (array length=size): Data from which the bit reader will - * read - * @size: Size of @data in bytes - * @byte: Current byte position - * - * A byte reader instance. - */ -typedef struct { - const guint8 *data; - guint size; - - guint byte; /* Byte position */ - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstByteReader; - -GstByteReader * gst_byte_reader_new (const guint8 *data, guint size) G_GNUC_MALLOC; -void gst_byte_reader_free (GstByteReader *reader); - -void gst_byte_reader_init (GstByteReader *reader, const guint8 *data, guint size); - -gboolean gst_byte_reader_set_pos (GstByteReader *reader, guint pos); -guint gst_byte_reader_get_pos (const GstByteReader *reader); - -guint gst_byte_reader_get_remaining (const GstByteReader *reader); - -guint gst_byte_reader_get_size (const GstByteReader *reader); - -gboolean gst_byte_reader_skip (GstByteReader *reader, guint nbytes); - -gboolean gst_byte_reader_get_uint8 (GstByteReader *reader, guint8 *val); -gboolean gst_byte_reader_get_int8 (GstByteReader *reader, gint8 *val); -gboolean gst_byte_reader_get_uint16_le (GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_get_int16_le (GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_get_uint16_be (GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_get_int16_be (GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_get_uint24_le (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int24_le (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint24_be (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int24_be (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint32_le (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int32_le (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint32_be (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int32_be (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint64_le (GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_get_int64_le (GstByteReader *reader, gint64 *val); -gboolean gst_byte_reader_get_uint64_be (GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_get_int64_be (GstByteReader *reader, gint64 *val); - -gboolean gst_byte_reader_peek_uint8 (const GstByteReader *reader, guint8 *val); -gboolean gst_byte_reader_peek_int8 (const GstByteReader *reader, gint8 *val); -gboolean gst_byte_reader_peek_uint16_le (const GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_peek_int16_le (const GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_peek_uint16_be (const GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_peek_int16_be (const GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_peek_uint24_le (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int24_le (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint24_be (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int24_be (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint32_le (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int32_le (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint32_be (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int32_be (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint64_le (const GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_peek_int64_le (const GstByteReader *reader, gint64 *val); -gboolean gst_byte_reader_peek_uint64_be (const GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_peek_int64_be (const GstByteReader *reader, gint64 *val); - -gboolean gst_byte_reader_get_float32_le (GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_get_float32_be (GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_get_float64_le (GstByteReader *reader, gdouble *val); -gboolean gst_byte_reader_get_float64_be (GstByteReader *reader, gdouble *val); - -gboolean gst_byte_reader_peek_float32_le (const GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_peek_float32_be (const GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_peek_float64_le (const GstByteReader *reader, gdouble *val); -gboolean gst_byte_reader_peek_float64_be (const GstByteReader *reader, gdouble *val); - -gboolean gst_byte_reader_dup_data (GstByteReader * reader, guint size, guint8 ** val); -gboolean gst_byte_reader_get_data (GstByteReader * reader, guint size, const guint8 ** val); -gboolean gst_byte_reader_peek_data (const GstByteReader * reader, guint size, const guint8 ** val); - -#define gst_byte_reader_dup_string(reader,str) \ - gst_byte_reader_dup_string_utf8(reader,str) - -gboolean gst_byte_reader_dup_string_utf8 (GstByteReader * reader, gchar ** str); -gboolean gst_byte_reader_dup_string_utf16 (GstByteReader * reader, guint16 ** str); -gboolean gst_byte_reader_dup_string_utf32 (GstByteReader * reader, guint32 ** str); - -#define gst_byte_reader_skip_string(reader) \ - gst_byte_reader_skip_string_utf8(reader) - -gboolean gst_byte_reader_skip_string_utf8 (GstByteReader * reader); -gboolean gst_byte_reader_skip_string_utf16 (GstByteReader * reader); -gboolean gst_byte_reader_skip_string_utf32 (GstByteReader * reader); - -#define gst_byte_reader_get_string(reader,str) \ - gst_byte_reader_get_string_utf8(reader,str) - -#define gst_byte_reader_peek_string(reader,str) \ - gst_byte_reader_peek_string_utf8(reader,str) - -gboolean gst_byte_reader_get_string_utf8 (GstByteReader * reader, const gchar ** str); -gboolean gst_byte_reader_peek_string_utf8 (const GstByteReader * reader, const gchar ** str); - -guint gst_byte_reader_masked_scan_uint32 (const GstByteReader * reader, - guint32 mask, - guint32 pattern, - guint offset, - guint size); - -/** - * GST_BYTE_READER_INIT: - * @data: Data from which the #GstByteReader should read - * @size: Size of @data in bytes - * - * A #GstByteReader must be initialized with this macro, before it can be - * used. This macro can used be to initialize a variable, but it cannot - * be assigned to a variable. In that case you have to use - * gst_byte_reader_init(). - */ -#define GST_BYTE_READER_INIT(data, size) {data, size, 0} - -/* unchecked variants */ -static inline void -gst_byte_reader_skip_unchecked (GstByteReader * reader, guint nbytes) -{ - reader->byte += nbytes; -} - -#define __GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(bits,type,lower,upper,adj) \ -\ -static inline type \ -gst_byte_reader_peek_##lower##_unchecked (const GstByteReader * reader) \ -{ \ - type val = (type) GST_READ_##upper (reader->data + reader->byte); \ - adj \ - return val; \ -} \ -\ -static inline type \ -gst_byte_reader_get_##lower##_unchecked (GstByteReader * reader) \ -{ \ - type val = gst_byte_reader_peek_##lower##_unchecked (reader); \ - reader->byte += bits / 8; \ - return val; \ -} - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(8,guint8,uint8,UINT8,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(8,gint8,int8,UINT8,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,guint16,uint16_le,UINT16_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,guint16,uint16_be,UINT16_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,gint16,int16_le,UINT16_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,gint16,int16_be,UINT16_BE,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,guint32,uint32_le,UINT32_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,guint32,uint32_be,UINT32_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gint32,int32_le,UINT32_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gint32,int32_be,UINT32_BE,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,guint32,uint24_le,UINT24_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,guint32,uint24_be,UINT24_BE,/* */) - -/* fix up the sign for 24-bit signed ints stored in 32-bit signed ints */ -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,gint32,int24_le,UINT24_LE, - if (val & 0x00800000) val |= 0xff000000;) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,gint32,int24_be,UINT24_BE, - if (val & 0x00800000) val |= 0xff000000;) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,guint64,uint64_le,UINT64_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,guint64,uint64_be,UINT64_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gint64,int64_le,UINT64_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gint64,int64_be,UINT64_BE,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gfloat,float32_le,FLOAT_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gfloat,float32_be,FLOAT_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gdouble,float64_le,DOUBLE_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gdouble,float64_be,DOUBLE_BE,/* */) - -#undef __GET_PEEK_BITS_UNCHECKED - -static inline const guint8 * -gst_byte_reader_peek_data_unchecked (const GstByteReader * reader) -{ - return (const guint8 *) (reader->data + reader->byte); -} - -static inline const guint8 * -gst_byte_reader_get_data_unchecked (GstByteReader * reader, guint size) -{ - const guint8 *data; - - data = gst_byte_reader_peek_data_unchecked (reader); - gst_byte_reader_skip_unchecked (reader, size); - return data; -} - -static inline guint8 * -gst_byte_reader_dup_data_unchecked (GstByteReader * reader, guint size) -{ - gconstpointer data = gst_byte_reader_get_data_unchecked (reader, size); - return (guint8 *) g_memdup (data, size); -} - -/* Unchecked variants that should not be used */ -static inline guint -_gst_byte_reader_get_pos_unchecked (const GstByteReader * reader) -{ - return reader->byte; -} - -static inline guint -_gst_byte_reader_get_remaining_unchecked (const GstByteReader * reader) -{ - return reader->size - reader->byte; -} - -static inline guint -_gst_byte_reader_get_size_unchecked (const GstByteReader * reader) -{ - return reader->size; -} - -/* inlined variants (do not use directly) */ - -static inline guint -_gst_byte_reader_get_remaining_inline (const GstByteReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_byte_reader_get_remaining_unchecked (reader); -} - -static inline guint -_gst_byte_reader_get_size_inline (const GstByteReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_byte_reader_get_size_unchecked (reader); -} - -#define __GST_BYTE_READER_GET_PEEK_BITS_INLINE(bits,type,name) \ -\ -static inline gboolean \ -_gst_byte_reader_peek_##name##_inline (const GstByteReader * reader, type * val) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - \ - if (_gst_byte_reader_get_remaining_unchecked (reader) < (bits / 8)) \ - return FALSE; \ -\ - *val = gst_byte_reader_peek_##name##_unchecked (reader); \ - return TRUE; \ -} \ -\ -static inline gboolean \ -_gst_byte_reader_get_##name##_inline (GstByteReader * reader, type * val) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - \ - if (_gst_byte_reader_get_remaining_unchecked (reader) < (bits / 8)) \ - return FALSE; \ -\ - *val = gst_byte_reader_get_##name##_unchecked (reader); \ - return TRUE; \ -} - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(8,guint8,uint8) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(8,gint8,int8) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,guint16,uint16_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,guint16,uint16_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,gint16,int16_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,gint16,int16_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,guint32,uint32_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,guint32,uint32_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gint32,int32_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gint32,int32_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,guint32,uint24_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,guint32,uint24_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,gint32,int24_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,gint32,int24_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,guint64,uint64_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,guint64,uint64_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gint64,int64_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gint64,int64_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gfloat,float32_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gfloat,float32_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_be) - -#undef __GST_BYTE_READER_GET_PEEK_BITS_INLINE - -#ifndef GST_BYTE_READER_DISABLE_INLINES - -#define gst_byte_reader_get_remaining(reader) \ - _gst_byte_reader_get_remaining_inline(reader) - -#define gst_byte_reader_get_size(reader) \ - _gst_byte_reader_get_size_inline(reader) - -#define gst_byte_reader_get_pos(reader) \ - _gst_byte_reader_get_pos_inline(reader) - -/* we use defines here so we can add the G_LIKELY() */ -#define gst_byte_reader_get_uint8(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint8_inline(reader,val)) -#define gst_byte_reader_get_int8(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int8_inline(reader,val)) -#define gst_byte_reader_get_uint16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint16_le_inline(reader,val)) -#define gst_byte_reader_get_int16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int16_le_inline(reader,val)) -#define gst_byte_reader_get_uint16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint16_be_inline(reader,val)) -#define gst_byte_reader_get_int16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int16_be_inline(reader,val)) -#define gst_byte_reader_get_uint24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint24_le_inline(reader,val)) -#define gst_byte_reader_get_int24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int24_le_inline(reader,val)) -#define gst_byte_reader_get_uint24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint24_be_inline(reader,val)) -#define gst_byte_reader_get_int24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int24_be_inline(reader,val)) -#define gst_byte_reader_get_uint32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint32_le_inline(reader,val)) -#define gst_byte_reader_get_int32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int32_le_inline(reader,val)) -#define gst_byte_reader_get_uint32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint32_be_inline(reader,val)) -#define gst_byte_reader_get_int32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int32_be_inline(reader,val)) -#define gst_byte_reader_get_uint64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint64_le_inline(reader,val)) -#define gst_byte_reader_get_int64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int64_le_inline(reader,val)) -#define gst_byte_reader_get_uint64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint64_be_inline(reader,val)) -#define gst_byte_reader_get_int64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int64_be_inline(reader,val)) - -#define gst_byte_reader_peek_uint8(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint8_inline(reader,val)) -#define gst_byte_reader_peek_int8(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int8_inline(reader,val)) -#define gst_byte_reader_peek_uint16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint16_le_inline(reader,val)) -#define gst_byte_reader_peek_int16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int16_le_inline(reader,val)) -#define gst_byte_reader_peek_uint16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint16_be_inline(reader,val)) -#define gst_byte_reader_peek_int16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int16_be_inline(reader,val)) -#define gst_byte_reader_peek_uint24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint24_le_inline(reader,val)) -#define gst_byte_reader_peek_int24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int24_le_inline(reader,val)) -#define gst_byte_reader_peek_uint24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint24_be_inline(reader,val)) -#define gst_byte_reader_peek_int24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int24_be_inline(reader,val)) -#define gst_byte_reader_peek_uint32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint32_le_inline(reader,val)) -#define gst_byte_reader_peek_int32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int32_le_inline(reader,val)) -#define gst_byte_reader_peek_uint32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint32_be_inline(reader,val)) -#define gst_byte_reader_peek_int32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int32_be_inline(reader,val)) -#define gst_byte_reader_peek_uint64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint64_le_inline(reader,val)) -#define gst_byte_reader_peek_int64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int64_le_inline(reader,val)) -#define gst_byte_reader_peek_uint64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint64_be_inline(reader,val)) -#define gst_byte_reader_peek_int64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int64_be_inline(reader,val)) - -#define gst_byte_reader_get_float32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float32_le_inline(reader,val)) -#define gst_byte_reader_get_float32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float32_be_inline(reader,val)) -#define gst_byte_reader_get_float64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float64_le_inline(reader,val)) -#define gst_byte_reader_get_float64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float64_be_inline(reader,val)) -#define gst_byte_reader_peek_float32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float32_le_inline(reader,val)) -#define gst_byte_reader_peek_float32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float32_be_inline(reader,val)) -#define gst_byte_reader_peek_float64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float64_le_inline(reader,val)) -#define gst_byte_reader_peek_float64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float64_be_inline(reader,val)) - -#endif /* GST_BYTE_READER_DISABLE_INLINES */ - -static inline gboolean -_gst_byte_reader_dup_data_inline (GstByteReader * reader, guint size, guint8 ** val) -{ - g_return_val_if_fail (reader != NULL, FALSE); - g_return_val_if_fail (val != NULL, FALSE); - - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) - return FALSE; - - *val = gst_byte_reader_dup_data_unchecked (reader, size); - return TRUE; -} - -static inline gboolean -_gst_byte_reader_get_data_inline (GstByteReader * reader, guint size, const guint8 ** val) -{ - g_return_val_if_fail (reader != NULL, FALSE); - g_return_val_if_fail (val != NULL, FALSE); - - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) - return FALSE; - - *val = gst_byte_reader_get_data_unchecked (reader, size); - return TRUE; -} - -static inline gboolean -_gst_byte_reader_peek_data_inline (const GstByteReader * reader, guint size, const guint8 ** val) -{ - g_return_val_if_fail (reader != NULL, FALSE); - g_return_val_if_fail (val != NULL, FALSE); - - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) - return FALSE; - - *val = gst_byte_reader_peek_data_unchecked (reader); - return TRUE; -} - -static inline guint -_gst_byte_reader_get_pos_inline (const GstByteReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_byte_reader_get_pos_unchecked (reader); -} - -static inline gboolean -_gst_byte_reader_skip_inline (GstByteReader * reader, guint nbytes) -{ - g_return_val_if_fail (reader != NULL, FALSE); - - if (G_UNLIKELY (_gst_byte_reader_get_remaining_unchecked (reader) < nbytes)) - return FALSE; - - reader->byte += nbytes; - return TRUE; -} - -#ifndef GST_BYTE_READER_DISABLE_INLINES - -#define gst_byte_reader_dup_data(reader,size,val) \ - G_LIKELY(_gst_byte_reader_dup_data_inline(reader,size,val)) -#define gst_byte_reader_get_data(reader,size,val) \ - G_LIKELY(_gst_byte_reader_get_data_inline(reader,size,val)) -#define gst_byte_reader_peek_data(reader,size,val) \ - G_LIKELY(_gst_byte_reader_peek_data_inline(reader,size,val)) -#define gst_byte_reader_skip(reader,nbytes) \ - G_LIKELY(_gst_byte_reader_skip_inline(reader,nbytes)) - -#endif /* GST_BYTE_READER_DISABLE_INLINES */ - -G_END_DECLS - -#endif /* __GST_BYTE_READER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytewriter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytewriter.h deleted file mode 100644 index 079e16fc..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstbytewriter.h +++ /dev/null @@ -1,401 +0,0 @@ -/* GStreamer byte writer - * - * Copyright (C) 2009 Sebastian Dröge . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BYTE_WRITER_H__ -#define __GST_BYTE_WRITER_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_BYTE_WRITER(writer) ((GstByteWriter *) (writer)) - -/** - * GstByteWriter: - * @parent: #GstByteReader parent - * @alloc_size: Allocation size of the data - * @fixed: If %TRUE no reallocations are allowed - * @owned: If %FALSE no reallocations are allowed and copies of data are returned - * - * A byte writer instance. - */ -typedef struct { - GstByteReader parent; - - guint alloc_size; - - gboolean fixed; - gboolean owned; - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstByteWriter; - -GstByteWriter * gst_byte_writer_new (void) G_GNUC_MALLOC; -GstByteWriter * gst_byte_writer_new_with_size (guint size, gboolean fixed) G_GNUC_MALLOC; -GstByteWriter * gst_byte_writer_new_with_data (guint8 *data, guint size, gboolean initialized) G_GNUC_MALLOC; - -void gst_byte_writer_init (GstByteWriter *writer); -void gst_byte_writer_init_with_size (GstByteWriter *writer, guint size, gboolean fixed); -void gst_byte_writer_init_with_data (GstByteWriter *writer, guint8 *data, - guint size, gboolean initialized); - -void gst_byte_writer_free (GstByteWriter *writer); -guint8 * gst_byte_writer_free_and_get_data (GstByteWriter *writer); -GstBuffer * gst_byte_writer_free_and_get_buffer (GstByteWriter *writer) G_GNUC_MALLOC; - -void gst_byte_writer_reset (GstByteWriter *writer); -guint8 * gst_byte_writer_reset_and_get_data (GstByteWriter *writer); -GstBuffer * gst_byte_writer_reset_and_get_buffer (GstByteWriter *writer) G_GNUC_MALLOC; - -/** - * gst_byte_writer_get_pos: - * @writer: #GstByteWriter instance - * - * Returns: The current position of the read/write cursor - */ -/** - * gst_byte_writer_set_pos: - * @writer: #GstByteWriter instance - * @pos: new position - * - * Sets the current read/write cursor of @writer. The new position - * can only be between 0 and the current size. - * - * Returns: %TRUE if the new position could be set - */ -/** - * gst_byte_writer_get_size: - * @writer: #GstByteWriter instance - * - * Returns: The current, initialized size of the data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC guint gst_byte_writer_get_pos (const GstByteWriter *writer); -G_INLINE_FUNC gboolean gst_byte_writer_set_pos (GstByteWriter *writer, guint pos); -G_INLINE_FUNC guint gst_byte_writer_get_size (const GstByteWriter *writer); -#else -static inline guint -gst_byte_writer_get_pos (const GstByteWriter *writer) -{ - return gst_byte_reader_get_pos ((const GstByteReader *) writer); -} - -static inline gboolean -gst_byte_writer_set_pos (GstByteWriter *writer, guint pos) -{ - return gst_byte_reader_set_pos (GST_BYTE_READER (writer), pos); -} - -static inline guint -gst_byte_writer_get_size (const GstByteWriter *writer) -{ - return gst_byte_reader_get_size ((const GstByteReader *) writer); -} -#endif - -guint gst_byte_writer_get_remaining (const GstByteWriter *writer); -gboolean gst_byte_writer_ensure_free_space (GstByteWriter *writer, guint size); - -gboolean gst_byte_writer_put_uint8 (GstByteWriter *writer, guint8 val); -gboolean gst_byte_writer_put_int8 (GstByteWriter *writer, gint8 val); -gboolean gst_byte_writer_put_uint16_be (GstByteWriter *writer, guint16 val); -gboolean gst_byte_writer_put_uint16_le (GstByteWriter *writer, guint16 val); -gboolean gst_byte_writer_put_int16_be (GstByteWriter *writer, gint16 val); -gboolean gst_byte_writer_put_int16_le (GstByteWriter *writer, gint16 val); -gboolean gst_byte_writer_put_uint24_be (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_uint24_le (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_int24_be (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_int24_le (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_uint32_be (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_uint32_le (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_int32_be (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_int32_le (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_uint64_be (GstByteWriter *writer, guint64 val); -gboolean gst_byte_writer_put_uint64_le (GstByteWriter *writer, guint64 val); -gboolean gst_byte_writer_put_int64_be (GstByteWriter *writer, gint64 val); -gboolean gst_byte_writer_put_int64_le (GstByteWriter *writer, gint64 val); - -gboolean gst_byte_writer_put_float32_be (GstByteWriter *writer, gfloat val); -gboolean gst_byte_writer_put_float32_le (GstByteWriter *writer, gfloat val); -gboolean gst_byte_writer_put_float64_be (GstByteWriter *writer, gdouble val); -gboolean gst_byte_writer_put_float64_le (GstByteWriter *writer, gdouble val); - -gboolean gst_byte_writer_put_data (GstByteWriter *writer, const guint8 *data, guint size); -gboolean gst_byte_writer_fill (GstByteWriter *writer, guint8 value, guint size); -gboolean gst_byte_writer_put_string_utf8 (GstByteWriter *writer, const gchar *data); -gboolean gst_byte_writer_put_string_utf16 (GstByteWriter *writer, const guint16 *data); -gboolean gst_byte_writer_put_string_utf32 (GstByteWriter *writer, const guint32 *data); -gboolean gst_byte_writer_put_buffer (GstByteWriter *writer, GstBuffer * buffer, gsize offset, gssize size); - -/** - * gst_byte_writer_put_string: - * @writer: #GstByteWriter instance - * @data: (in) (array zero-terminated=1): Null terminated string - * - * Write a NUL-terminated string to @writer (including the terminator). The - * string is assumed to be in an 8-bit encoding (e.g. ASCII,UTF-8 or - * ISO-8859-1). - * - * Returns: %TRUE if the string could be written - */ -#define gst_byte_writer_put_string(writer, data) \ - gst_byte_writer_put_string_utf8(writer, data) - -static inline guint -_gst_byte_writer_next_pow2 (guint n) -{ - guint ret = 16; - - /* We start with 16, smaller allocations make no sense */ - - while (ret < n && ret > 0) - ret <<= 1; - - return ret ? ret : n; -} - -static inline gboolean -_gst_byte_writer_ensure_free_space_inline (GstByteWriter * writer, guint size) -{ - gpointer data; - - if (G_LIKELY (size <= writer->alloc_size - writer->parent.byte)) - return TRUE; - if (G_UNLIKELY (writer->fixed || !writer->owned)) - return FALSE; - if (G_UNLIKELY (writer->parent.byte > G_MAXUINT - size)) - return FALSE; - - writer->alloc_size = _gst_byte_writer_next_pow2 (writer->parent.byte + size); - data = g_try_realloc ((guint8 *) writer->parent.data, writer->alloc_size); - if (G_UNLIKELY (data == NULL)) - return FALSE; - - writer->parent.data = (guint8 *) data; - - return TRUE; -} - -#define __GST_BYTE_WRITER_CREATE_WRITE_FUNC(bits,type,name,write_func) \ -static inline void \ -gst_byte_writer_put_##name##_unchecked (GstByteWriter *writer, type val) \ -{ \ - guint8 *write_data; \ - \ - write_data = (guint8 *) writer->parent.data + writer->parent.byte; \ - write_func (write_data, val); \ - writer->parent.byte += bits/8; \ - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); \ -} \ -\ -static inline gboolean \ -_gst_byte_writer_put_##name##_inline (GstByteWriter *writer, type val) \ -{ \ - g_return_val_if_fail (writer != NULL, FALSE); \ - \ - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline(writer, bits/8))) \ - return FALSE; \ - \ - gst_byte_writer_put_##name##_unchecked (writer, val); \ - \ - return TRUE; \ -} - -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (8, guint8, uint8, GST_WRITE_UINT8) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (8, gint8, int8, GST_WRITE_UINT8) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, guint16, uint16_le, GST_WRITE_UINT16_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, guint16, uint16_be, GST_WRITE_UINT16_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, gint16, int16_le, GST_WRITE_UINT16_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, gint16, int16_be, GST_WRITE_UINT16_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, guint32, uint24_le, GST_WRITE_UINT24_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, guint32, uint24_be, GST_WRITE_UINT24_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, gint32, int24_le, GST_WRITE_UINT24_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, gint32, int24_be, GST_WRITE_UINT24_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, guint32, uint32_le, GST_WRITE_UINT32_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, guint32, uint32_be, GST_WRITE_UINT32_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gint32, int32_le, GST_WRITE_UINT32_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gint32, int32_be, GST_WRITE_UINT32_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, guint64, uint64_le, GST_WRITE_UINT64_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, guint64, uint64_be, GST_WRITE_UINT64_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gint64, int64_le, GST_WRITE_UINT64_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gint64, int64_be, GST_WRITE_UINT64_BE) - -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gfloat, float32_be, GST_WRITE_FLOAT_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gfloat, float32_le, GST_WRITE_FLOAT_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gdouble, float64_be, GST_WRITE_DOUBLE_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gdouble, float64_le, GST_WRITE_DOUBLE_LE) - -#undef __GST_BYTE_WRITER_CREATE_WRITE_FUNC - -static inline void -gst_byte_writer_put_data_unchecked (GstByteWriter * writer, const guint8 * data, - guint size) -{ - memcpy ((guint8 *) & writer->parent.data[writer->parent.byte], data, size); - writer->parent.byte += size; - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); -} - -static inline gboolean -_gst_byte_writer_put_data_inline (GstByteWriter * writer, const guint8 * data, - guint size) -{ - g_return_val_if_fail (writer != NULL, FALSE); - - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline (writer, size))) - return FALSE; - - gst_byte_writer_put_data_unchecked (writer, data, size); - - return TRUE; -} - -static inline void -gst_byte_writer_fill_unchecked (GstByteWriter * writer, guint8 value, guint size) -{ - memset ((guint8 *) & writer->parent.data[writer->parent.byte], value, size); - writer->parent.byte += size; - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); -} - -static inline gboolean -_gst_byte_writer_fill_inline (GstByteWriter * writer, guint8 value, guint size) -{ - g_return_val_if_fail (writer != NULL, FALSE); - - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline (writer, size))) - return FALSE; - - gst_byte_writer_fill_unchecked (writer, value, size); - - return TRUE; -} - -static inline void -gst_byte_writer_put_buffer_unchecked (GstByteWriter * writer, GstBuffer * buffer, - gsize offset, gssize size) -{ - if (size == -1) { - size = gst_buffer_get_size (buffer); - - if (offset >= (gsize) size) - return; - - size -= offset; - } - - gst_buffer_extract (buffer, offset, - (guint8 *) & writer->parent.data[writer->parent.byte], size); - writer->parent.byte += size; - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); -} - -static inline gboolean -_gst_byte_writer_put_buffer_inline (GstByteWriter * writer, GstBuffer * buffer, - gsize offset, gssize size) -{ - g_return_val_if_fail (writer != NULL, FALSE); - g_return_val_if_fail (size >= -1, FALSE); - - if (size == -1) { - size = gst_buffer_get_size (buffer); - - if (offset >= (gsize) size) - return TRUE; - - size -= offset; - } - - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline (writer, size))) - return FALSE; - - gst_byte_writer_put_buffer_unchecked (writer, buffer, offset, size); - - return TRUE; -} - -#ifndef GST_BYTE_WRITER_DISABLE_INLINES - -/* we use defines here so we can add the G_LIKELY() */ - -#define gst_byte_writer_ensure_free_space(writer, size) \ - G_LIKELY (_gst_byte_writer_ensure_free_space_inline (writer, size)) -#define gst_byte_writer_put_uint8(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint8_inline (writer, val)) -#define gst_byte_writer_put_int8(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int8_inline (writer, val)) -#define gst_byte_writer_put_uint16_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint16_be_inline (writer, val)) -#define gst_byte_writer_put_uint16_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint16_le_inline (writer, val)) -#define gst_byte_writer_put_int16_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int16_be_inline (writer, val)) -#define gst_byte_writer_put_int16_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int16_le_inline (writer, val)) -#define gst_byte_writer_put_uint24_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint24_be_inline (writer, val)) -#define gst_byte_writer_put_uint24_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint24_le_inline (writer, val)) -#define gst_byte_writer_put_int24_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int24_be_inline (writer, val)) -#define gst_byte_writer_put_int24_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int24_le_inline (writer, val)) -#define gst_byte_writer_put_uint32_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint32_be_inline (writer, val)) -#define gst_byte_writer_put_uint32_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint32_le_inline (writer, val)) -#define gst_byte_writer_put_int32_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int32_be_inline (writer, val)) -#define gst_byte_writer_put_int32_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int32_le_inline (writer, val)) -#define gst_byte_writer_put_uint64_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint64_be_inline (writer, val)) -#define gst_byte_writer_put_uint64_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint64_le_inline (writer, val)) -#define gst_byte_writer_put_int64_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int64_be_inline (writer, val)) -#define gst_byte_writer_put_int64_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int64_le_inline (writer, val)) - -#define gst_byte_writer_put_float32_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float32_be_inline (writer, val)) -#define gst_byte_writer_put_float32_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float32_le_inline (writer, val)) -#define gst_byte_writer_put_float64_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float64_be_inline (writer, val)) -#define gst_byte_writer_put_float64_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float64_le_inline (writer, val)) - -#define gst_byte_writer_put_data(writer, data, size) \ - G_LIKELY (_gst_byte_writer_put_data_inline (writer, data, size)) -#define gst_byte_writer_fill(writer, val, size) \ - G_LIKELY (_gst_byte_writer_fill_inline (writer, val, size)) -#define gst_byte_writer_put_buffer(writer, buffer, offset, size) \ - G_LIKELY (_gst_byte_writer_put_buffer_inline (writer, buffer, offset, size)) - -#endif - -G_END_DECLS - -#endif /* __GST_BYTE_WRITER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstcollectpads.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstcollectpads.h deleted file mode 100644 index c33ca4f5..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstcollectpads.h +++ /dev/null @@ -1,358 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Wim Taymans - * Copyright (C) 2008 Mark Nauwelaerts - * - * gstcollectpads.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_COLLECT_PADS_H__ -#define __GST_COLLECT_PADS_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_COLLECT_PADS (gst_collect_pads_get_type()) -#define GST_COLLECT_PADS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_COLLECT_PADS,GstCollectPads)) -#define GST_COLLECT_PADS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_COLLECT_PADS,GstCollectPadsClass)) -#define GST_COLLECT_PADS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_COLLECT_PADS,GstCollectPadsClass)) -#define GST_IS_COLLECT_PADS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_COLLECT_PADS)) -#define GST_IS_COLLECT_PADS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_COLLECT_PADS)) - -typedef struct _GstCollectData GstCollectData; -typedef struct _GstCollectDataPrivate GstCollectDataPrivate; -typedef struct _GstCollectPads GstCollectPads; -typedef struct _GstCollectPadsPrivate GstCollectPadsPrivate; -typedef struct _GstCollectPadsClass GstCollectPadsClass; - -/** - * GstCollectDataDestroyNotify: - * @data: the #GstCollectData that will be freed - * - * A function that will be called when the #GstCollectData will be freed. - * It is passed the pointer to the structure and should free any custom - * memory and resources allocated for it. - */ -typedef void (*GstCollectDataDestroyNotify) (GstCollectData *data); - -/** - * GstCollectPadsStateFlags: - * @GST_COLLECT_PADS_STATE_EOS: Set if collectdata's pad is EOS. - * @GST_COLLECT_PADS_STATE_FLUSHING: Set if collectdata's pad is flushing. - * @GST_COLLECT_PADS_STATE_NEW_SEGMENT: Set if collectdata's pad received a - * new_segment event. - * @GST_COLLECT_PADS_STATE_WAITING: Set if collectdata's pad must be waited - * for when collecting. - * @GST_COLLECT_PADS_STATE_LOCKED: Set collectdata's pad WAITING state must - * not be changed. - * #GstCollectPadsStateFlags indicate private state of a collectdata('s pad). - */ -typedef enum { - GST_COLLECT_PADS_STATE_EOS = 1 << 0, - GST_COLLECT_PADS_STATE_FLUSHING = 1 << 1, - GST_COLLECT_PADS_STATE_NEW_SEGMENT = 1 << 2, - GST_COLLECT_PADS_STATE_WAITING = 1 << 3, - GST_COLLECT_PADS_STATE_LOCKED = 1 << 4 -} GstCollectPadsStateFlags; - -/** - * GST_COLLECT_PADS_STATE: - * @data: a #GstCollectData. - * - * A flags word containing #GstCollectPadsStateFlags flags set - * on this collected pad. - */ -#define GST_COLLECT_PADS_STATE(data) (((GstCollectData *) data)->state) -/** - * GST_COLLECT_PADS_STATE_IS_SET: - * @data: a #GstCollectData. - * @flag: the #GstCollectPadsStateFlags to check. - * - * Gives the status of a specific flag on a collected pad. - */ -#define GST_COLLECT_PADS_STATE_IS_SET(data,flag) !!(GST_COLLECT_PADS_STATE (data) & flag) -/** - * GST_COLLECT_PADS_STATE_SET: - * @data: a #GstCollectData. - * @flag: the #GstCollectPadsStateFlags to set. - * - * Sets a state flag on a collected pad. - */ -#define GST_COLLECT_PADS_STATE_SET(data,flag) (GST_COLLECT_PADS_STATE (data) |= flag) -/** - * GST_COLLECT_PADS_STATE_UNSET: - * @data: a #GstCollectData. - * @flag: the #GstCollectPadsStateFlags to clear. - * - * Clears a state flag on a collected pad. - */ -#define GST_COLLECT_PADS_STATE_UNSET(data,flag) (GST_COLLECT_PADS_STATE (data) &= ~(flag)) - -/** - * GstCollectData: - * @collect: owner #GstCollectPads - * @pad: #GstPad managed by this data - * @buffer: currently queued buffer. - * @pos: position in the buffer - * @segment: last segment received. - * - * Structure used by the collect_pads. - */ -struct _GstCollectData -{ - /* with STREAM_LOCK of @collect */ - GstCollectPads *collect; - GstPad *pad; - GstBuffer *buffer; - guint pos; - GstSegment segment; - - /*< private >*/ - /* state: bitfield for easier extension; - * eos, flushing, new_segment, waiting */ - GstCollectPadsStateFlags state; - - GstCollectDataPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstCollectPadsFunction: - * @pads: the #GstCollectPads that trigered the callback - * @user_data: user data passed to gst_collect_pads_set_function() - * - * A function that will be called when all pads have received data. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstCollectPadsFunction) (GstCollectPads *pads, gpointer user_data); - -/** - * GstCollectPadsBufferFunction: - * @pads: the #GstCollectPads that trigered the callback - * @data: the #GstCollectData of pad that has received the buffer - * @buffer: (transfer full): the #GstBuffer - * @user_data: user data passed to gst_collect_pads_set_buffer_function() - * - * A function that will be called when a (considered oldest) buffer can be muxed. - * If all pads have reached EOS, this function is called with NULL @buffer - * and NULL @data. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstCollectPadsBufferFunction) (GstCollectPads *pads, GstCollectData *data, - GstBuffer *buffer, gpointer user_data); - -/** - * GstCollectPadsCompareFunction: - * @pads: the #GstCollectPads that is comparing the timestamps - * @data1: the first #GstCollectData - * @timestamp1: the first timestamp - * @data2: the second #GstCollectData - * @timestamp2: the second timestamp - * @user_data: user data passed to gst_collect_pads_set_compare_function() - * - * A function for comparing two timestamps of buffers or newsegments collected on one pad. - * - * Returns: Integer less than zero when first timestamp is deemed older than the second one. - * Zero if the timestamps are deemed equally old. - * Integer greate than zero when second timestamp is deemed older than the first one. - */ -typedef gint (*GstCollectPadsCompareFunction) (GstCollectPads *pads, - GstCollectData * data1, GstClockTime timestamp1, - GstCollectData * data2, GstClockTime timestamp2, - gpointer user_data); - -/** - * GstCollectPadsEventFunction: - * @pads: the #GstCollectPads that trigered the callback - * @pad: the #GstPad that received an event - * @event: the #GstEvent received - * @user_data: user data passed to gst_collect_pads_set_event_function() - * - * A function that will be called while processing an event. It takes - * ownership of the event and is responsible for chaining up (to - * gst_collect_pads_event_default()) or dropping events (such typical cases - * being handled by the default handler). - * - * Returns: %TRUE if the pad could handle the event - */ -typedef gboolean (*GstCollectPadsEventFunction) (GstCollectPads *pads, GstCollectData * pad, - GstEvent * event, gpointer user_data); - - -/** - * GstCollectPadsQueryFunction: - * @pads: the #GstCollectPads that trigered the callback - * @pad: the #GstPad that received an event - * @query: the #GstEvent received - * @user_data: user data passed to gst_collect_pads_set_query_function() - * - * A function that will be called while processing a query. It takes - * ownership of the query and is responsible for chaining up (to - * events downstream (with gst_pad_event_default()). - * - * Returns: %TRUE if the pad could handle the event - */ -typedef gboolean (*GstCollectPadsQueryFunction) (GstCollectPads *pads, GstCollectData * pad, - GstQuery * query, gpointer user_data); - -/** - * GstCollectPadsClipFunction: - * @pads: a #GstCollectPads - * @data: a #GstCollectData - * @inbuffer: (transfer full): the input #GstBuffer - * @outbuffer: the output #GstBuffer - * @user_data: user data - * - * A function that will be called when @inbuffer is received on the pad managed - * by @data in the collecpad object @pads. - * - * The function should use the segment of @data and the negotiated media type on - * the pad to perform clipping of @inbuffer. - * - * This function takes ownership of @inbuffer and should output a buffer in - * @outbuffer or return %NULL in @outbuffer if the buffer should be dropped. - * - * Returns: a #GstFlowReturn that corresponds to the result of clipping. - */ -typedef GstFlowReturn (*GstCollectPadsClipFunction) (GstCollectPads *pads, GstCollectData *data, - GstBuffer *inbuffer, GstBuffer **outbuffer, - gpointer user_data); - -/** - * GST_COLLECT_PADS_GET_STREAM_LOCK: - * @pads: a #GstCollectPads - * - * Get the stream lock of @pads. The stream lock is used to coordinate and - * serialize execution among the various streams being collected, and in - * protecting the resources used to accomplish this. - */ -#define GST_COLLECT_PADS_GET_STREAM_LOCK(pads) (&((GstCollectPads *)pads)->stream_lock) -/** - * GST_COLLECT_PADS_STREAM_LOCK: - * @pads: a #GstCollectPads - * - * Lock the stream lock of @pads. - */ -#define GST_COLLECT_PADS_STREAM_LOCK(pads) g_rec_mutex_lock(GST_COLLECT_PADS_GET_STREAM_LOCK (pads)) -/** - * GST_COLLECT_PADS_STREAM_UNLOCK: - * @pads: a #GstCollectPads - * - * Unlock the stream lock of @pads. - */ -#define GST_COLLECT_PADS_STREAM_UNLOCK(pads) g_rec_mutex_unlock(GST_COLLECT_PADS_GET_STREAM_LOCK (pads)) - -/** - * GstCollectPads: - * @data: #GList of #GstCollectData managed by this #GstCollectPads. - * - * Collectpads object. - */ -struct _GstCollectPads { - GstObject object; - - /*< public >*/ /* with LOCK and/or STREAM_LOCK */ - GSList *data; /* list of CollectData items */ - - /*< private >*/ - GRecMutex stream_lock; /* used to serialize collection among several streams */ - - GstCollectPadsPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstCollectPadsClass { - GstObjectClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_collect_pads_get_type(void); - -/* creating the object */ -GstCollectPads* gst_collect_pads_new (void); - -/* set the callbacks */ -void gst_collect_pads_set_function (GstCollectPads *pads, - GstCollectPadsFunction func, - gpointer user_data); -void gst_collect_pads_set_buffer_function (GstCollectPads *pads, - GstCollectPadsBufferFunction func, - gpointer user_data); -void gst_collect_pads_set_event_function (GstCollectPads *pads, - GstCollectPadsEventFunction func, - gpointer user_data); -void gst_collect_pads_set_query_function (GstCollectPads *pads, - GstCollectPadsQueryFunction func, - gpointer user_data); -void gst_collect_pads_set_compare_function (GstCollectPads *pads, - GstCollectPadsCompareFunction func, - gpointer user_data); -void gst_collect_pads_set_clip_function (GstCollectPads *pads, - GstCollectPadsClipFunction clipfunc, - gpointer user_data); - -/* pad management */ -GstCollectData* gst_collect_pads_add_pad (GstCollectPads *pads, GstPad *pad, guint size, - GstCollectDataDestroyNotify destroy_notify, - gboolean lock); -gboolean gst_collect_pads_remove_pad (GstCollectPads *pads, GstPad *pad); - -/* start/stop collection */ -void gst_collect_pads_start (GstCollectPads *pads); -void gst_collect_pads_stop (GstCollectPads *pads); -void gst_collect_pads_set_flushing (GstCollectPads *pads, gboolean flushing); - -/* get collected buffers */ -GstBuffer* gst_collect_pads_peek (GstCollectPads *pads, GstCollectData *data); -GstBuffer* gst_collect_pads_pop (GstCollectPads *pads, GstCollectData *data); - -/* get collected bytes */ -guint gst_collect_pads_available (GstCollectPads *pads); -guint gst_collect_pads_flush (GstCollectPads *pads, GstCollectData *data, - guint size); -GstBuffer* gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data, - guint size); -GstBuffer* gst_collect_pads_take_buffer (GstCollectPads * pads, GstCollectData * data, - guint size); - -/* setting and unsetting waiting mode */ -void gst_collect_pads_set_waiting (GstCollectPads *pads, GstCollectData *data, - gboolean waiting); - -/* convenience helper */ -GstFlowReturn gst_collect_pads_clip_running_time (GstCollectPads * pads, - GstCollectData * cdata, - GstBuffer * buf, GstBuffer ** outbuf, - gpointer user_data); - -/* default handlers */ -gboolean gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data, - GstEvent * event, gboolean discard); -gboolean gst_collect_pads_query_default (GstCollectPads * pads, GstCollectData * data, - GstQuery * query, gboolean discard); - - -G_END_DECLS - -#endif /* __GST_COLLECT_PADS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstpushsrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstpushsrc.h deleted file mode 100644 index b936d83f..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gstpushsrc.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstpushsrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PUSH_SRC_H__ -#define __GST_PUSH_SRC_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PUSH_SRC (gst_push_src_get_type()) -#define GST_PUSH_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PUSH_SRC,GstPushSrc)) -#define GST_PUSH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PUSH_SRC,GstPushSrcClass)) -#define GST_PUSH_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PUSH_SRC, GstPushSrcClass)) -#define GST_IS_PUSH_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PUSH_SRC)) -#define GST_IS_PUSH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PUSH_SRC)) - -typedef struct _GstPushSrc GstPushSrc; -typedef struct _GstPushSrcClass GstPushSrcClass; - -/** - * GstPushSrc: - * - * The opaque #GstPushSrc data structure. - */ -struct _GstPushSrc { - GstBaseSrc parent; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPushSrcClass { - GstBaseSrcClass parent_class; - - /* ask the subclass to create a buffer, the default implementation - * uses alloc and fill */ - GstFlowReturn (*create) (GstPushSrc *src, GstBuffer **buf); - /* allocate memory for a buffer */ - GstFlowReturn (*alloc) (GstPushSrc *src, GstBuffer **buf); - /* ask the subclass to fill a buffer */ - GstFlowReturn (*fill) (GstPushSrc *src, GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_push_src_get_type(void); - -G_END_DECLS - -#endif /* __GST_PUSH_SRC_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gsttypefindhelper.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gsttypefindhelper.h deleted file mode 100644 index a61c0428..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/base/gsttypefindhelper.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * Copyright (C) 2000,2005 Wim Taymans - * Copyright (C) 2006 Tim-Philipp Müller - * - * gsttypefindhelper.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TYPEFINDHELPER_H__ -#define __GST_TYPEFINDHELPER_H__ - -#include - -G_BEGIN_DECLS - -GstCaps * gst_type_find_helper (GstPad *src, guint64 size); - -GstCaps * gst_type_find_helper_for_data (GstObject *obj, - const guint8 *data, - gsize size, - GstTypeFindProbability *prob); -GstCaps * gst_type_find_helper_for_buffer (GstObject *obj, - GstBuffer *buf, - GstTypeFindProbability *prob); - -GstCaps * gst_type_find_helper_for_extension (GstObject * obj, - const gchar * extension); - -/** - * GstTypeFindHelperGetRangeFunction: - * @obj: a #GstObject that will handle the getrange request - * @parent: the parent of @obj or NULL - * @offset: the offset of the range - * @length: the length of the range - * @buffer: a memory location to hold the result buffer - * - * This function will be called by gst_type_find_helper_get_range() when - * typefinding functions request to peek at the data of a stream at certain - * offsets. If this function returns GST_FLOW_OK, the result buffer will be - * stored in @buffer. The contents of @buffer is invalid for any other - * return value. - * - * This function is supposed to behave exactly like a #GstPadGetRangeFunction. - * - * Returns: GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstTypeFindHelperGetRangeFunction) (GstObject *obj, - GstObject *parent, - guint64 offset, - guint length, - GstBuffer **buffer); - -GstCaps * gst_type_find_helper_get_range (GstObject *obj, - GstObject *parent, - GstTypeFindHelperGetRangeFunction func, - guint64 size, - const gchar *extension, - GstTypeFindProbability *prob); - -G_END_DECLS - -#endif /* __GST_TYPEFINDHELPER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h deleted file mode 100644 index d4979f56..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2010 Texas Instruments, Inc - * Copyright (C) 2011 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BASE_CAMERA_SRC_H__ -#define __GST_BASE_CAMERA_SRC_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "GstBaseCameraSrc is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include -#include "gstcamerabin-enum.h" -#include "gstcamerabinpreview.h" - -G_BEGIN_DECLS -#define GST_TYPE_BASE_CAMERA_SRC \ - (gst_base_camera_src_get_type()) -#define GST_BASE_CAMERA_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_CAMERA_SRC,GstBaseCameraSrc)) -#define GST_BASE_CAMERA_SRC_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_CAMERA_SRC, GstBaseCameraSrcClass)) -#define GST_BASE_CAMERA_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_CAMERA_SRC,GstBaseCameraSrcClass)) -#define GST_IS_BASE_CAMERA_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_CAMERA_SRC)) -#define GST_IS_BASE_CAMERA_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_CAMERA_SRC)) -#define GST_BASE_CAMERA_SRC_CAST(obj) \ - ((GstBaseCameraSrc *) (obj)) -GType gst_base_camera_src_get_type (void); - -typedef struct _GstBaseCameraSrc GstBaseCameraSrc; -typedef struct _GstBaseCameraSrcClass GstBaseCameraSrcClass; - -#define GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME "vfsrc" -#define GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME "imgsrc" -#define GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME "vidsrc" - -#define GST_BASE_CAMERA_SRC_PREVIEW_MESSAGE_NAME "preview-image" - -/** - * GstBaseCameraSrc: - */ -struct _GstBaseCameraSrc -{ - GstBin parent; - - GstCameraBinMode mode; - - gboolean capturing; - GMutex capturing_mutex; - - /* Preview convert pipeline */ - GstCaps *preview_caps; - gboolean post_preview; - GstElement *preview_filter; - GstCameraBinPreviewPipelineData *preview_pipeline; - - /* Resolution of the buffers configured to camerabin */ - gint width; - gint height; - - gfloat zoom; - gfloat max_zoom; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - - -/** - * GstBaseCameraSrcClass: - * @construct_pipeline: construct pipeline - * @setup_pipeline: configure pipeline for the chosen settings - * @set_zoom: set the zoom - * @set_mode: set the mode - */ -struct _GstBaseCameraSrcClass -{ - GstBinClass parent; - - /* Construct pipeline. (called in GST_STATE_CHANGE_NULL_TO_READY) Optional. */ - gboolean (*construct_pipeline) (GstBaseCameraSrc *self); - - /* (called in GST_STATE_CHANGE_READY_TO_PAUSED). Optional. */ - gboolean (*setup_pipeline) (GstBaseCameraSrc *self); - - /* Set the zoom. If set, called when changing 'zoom' property. Optional. */ - void (*set_zoom) (GstBaseCameraSrc *self, gfloat zoom); - - /* Set the mode. If set, called when changing 'mode' property. Optional. */ - gboolean (*set_mode) (GstBaseCameraSrc *self, - GstCameraBinMode mode); - - /* Set preview caps. If set, called called when setting new 'preview-caps'. Optional. */ - gboolean (*set_preview) (GstBaseCameraSrc *self, - GstCaps *preview_caps); - - /* Called by the handler for 'start-capture'. Mandatory. */ - gboolean (*start_capture) (GstBaseCameraSrc * src); - - /* Called by the handler for 'stop-capture'. Mandatory. */ - void (*stop_capture) (GstBaseCameraSrc * src); - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - - -#define MIN_ZOOM 1.0f -#define MAX_ZOOM 10.0f -#define ZOOM_1X MIN_ZOOM - -gboolean gst_base_camera_src_set_mode (GstBaseCameraSrc *self, GstCameraBinMode mode); -void gst_base_camera_src_setup_zoom (GstBaseCameraSrc * self); -void gst_base_camera_src_setup_preview (GstBaseCameraSrc * self, GstCaps * preview_caps); -void gst_base_camera_src_finish_capture (GstBaseCameraSrc *self); - - -void gst_base_camera_src_post_preview (GstBaseCameraSrc *self, GstSample * sample); -// XXX add methods to get/set img capture and vid capture caps.. - -#endif /* __GST_BASE_CAMERA_SRC_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h deleted file mode 100644 index c6dbf043..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2009 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CAMERABIN_ENUM_H__ -#define __GST_CAMERABIN_ENUM_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "camerabin enums are unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define DEFAULT_WIDTH 640 -#define DEFAULT_HEIGHT 480 -#define DEFAULT_CAPTURE_WIDTH 800 -#define DEFAULT_CAPTURE_HEIGHT 600 -#define DEFAULT_FPS_N 0 /* makes it use the default */ -#define DEFAULT_FPS_D 1 -#define DEFAULT_ZOOM MIN_ZOOM - - -/** - * GstCameraBinMode: - * @MODE_IMAGE: image capture - * @MODE_VIDEO: video capture - * - * Capture mode to use. - */ -typedef enum -{ - /* MODE_PREVIEW = 0, No use for this */ - MODE_IMAGE = 1, - MODE_VIDEO = 2, -} GstCameraBinMode; - - -#define GST_TYPE_CAMERABIN_MODE (gst_camerabin_mode_get_type ()) -GType gst_camerabin_mode_get_type (void); - -G_END_DECLS - -#endif /* #ifndef __GST_CAMERABIN_ENUM_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h deleted file mode 100644 index 6627cf66..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2008 Nokia Corporation - * Copyright (C) 2010 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __CAMERABIN_PREVIEW_H_ -#define __CAMERABIN_PREVIEW_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "camera bin preview is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -typedef struct -{ - GstElement *pipeline; - - GstElement *appsrc; - GstElement *filter; - GstElement *appsink; - GstElement *vscale; - - GstElement *element; - - GstCaps *pending_preview_caps; - guint processing; - GMutex processing_lock; - GCond processing_cond; - -} GstCameraBinPreviewPipelineData; - -GstCameraBinPreviewPipelineData *gst_camerabin_create_preview_pipeline (GstElement * element, GstElement * filter); -void gst_camerabin_destroy_preview_pipeline (GstCameraBinPreviewPipelineData * preview); -gboolean gst_camerabin_preview_pipeline_post (GstCameraBinPreviewPipelineData * preview, GstSample * sample); -void gst_camerabin_preview_set_caps (GstCameraBinPreviewPipelineData * preview, GstCaps * caps); -gboolean gst_camerabin_preview_set_filter (GstCameraBinPreviewPipelineData * preview, GstElement * filter); - -#endif /* #ifndef __CAMERABIN_PREVIEW_H_ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h deleted file mode 100644 index 6698922e..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h +++ /dev/null @@ -1,723 +0,0 @@ -/* Gstreamer - * Copyright (C) <2011> Intel Corporation - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * Some bits C-c,C-v'ed and s/4/3 from h264parse and videoparsers/h264parse.c: - * Copyright (C) <2010> Mark Nauwelaerts - * Copyright (C) <2010> Collabora Multimedia - * Copyright (C) <2010> Nokia Corporation - * - * (C) 2005 Michal Benes - * (C) 2008 Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_H264_PARSER_H__ -#define __GST_H264_PARSER_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The H.264 parsing library is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define GST_H264_MAX_SPS_COUNT 32 -#define GST_H264_MAX_PPS_COUNT 256 - -#define GST_H264_IS_P_SLICE(slice) (((slice)->type % 5) == GST_H264_P_SLICE) -#define GST_H264_IS_B_SLICE(slice) (((slice)->type % 5) == GST_H264_B_SLICE) -#define GST_H264_IS_I_SLICE(slice) (((slice)->type % 5) == GST_H264_I_SLICE) -#define GST_H264_IS_SP_SLICE(slice) (((slice)->type % 5) == GST_H264_SP_SLICE) -#define GST_H264_IS_SI_SLICE(slice) (((slice)->type % 5) == GST_H264_SI_SLICE) - -/** - * GstH264NalUnitType: - * @GST_H264_NAL_UNKNOWN: Unknown nal type - * @GST_H264_NAL_SLICE: Slice nal - * @GST_H264_NAL_SLICE_DPA: DPA slice nal - * @GST_H264_NAL_SLICE_DPB: DPB slice nal - * @GST_H264_NAL_SLICE_DPC: DPC slice nal - * @GST_H264_NAL_SLICE_IDR: DPR slice nal - * @GST_H264_NAL_SEI: Supplemental enhancement information (SEI) nal unit - * @GST_H264_NAL_SPS: Sequence parameter set (SPS) nal unit - * @GST_H264_NAL_PPS: Picture parameter set (PPS) nal unit - * @GST_H264_NAL_AU_DELIMITER: Access unit (AU) delimiter nal unit - * @GST_H264_NAL_SEQ_END: End of sequence nal unit - * @GST_H264_NAL_STREAM_END: End of stream nal unit - * @GST_H264_NAL_FILLER_DATA: Filler data nal lunit - * - * Indicates the type of H264 Nal Units - */ -typedef enum -{ - GST_H264_NAL_UNKNOWN = 0, - GST_H264_NAL_SLICE = 1, - GST_H264_NAL_SLICE_DPA = 2, - GST_H264_NAL_SLICE_DPB = 3, - GST_H264_NAL_SLICE_DPC = 4, - GST_H264_NAL_SLICE_IDR = 5, - GST_H264_NAL_SEI = 6, - GST_H264_NAL_SPS = 7, - GST_H264_NAL_PPS = 8, - GST_H264_NAL_AU_DELIMITER = 9, - GST_H264_NAL_SEQ_END = 10, - GST_H264_NAL_STREAM_END = 11, - GST_H264_NAL_FILLER_DATA = 12 -} GstH264NalUnitType; - -/** - * GstH264ParserResult: - * @GST_H264_PARSER_OK: The parsing succeded - * @GST_H264_PARSER_BROKEN_DATA: The data to parse is broken - * @GST_H264_PARSER_BROKEN_LINK: The link to structure needed for the parsing couldn't be found - * @GST_H264_PARSER_ERROR: An error accured when parsing - * @GST_H264_PARSER_NO_NAL: No nal found during the parsing - * @GST_H264_PARSER_NO_NAL_END: Start of the nal found, but not the end. - * - * The result of parsing H264 data. - */ -typedef enum -{ - GST_H264_PARSER_OK, - GST_H264_PARSER_BROKEN_DATA, - GST_H264_PARSER_BROKEN_LINK, - GST_H264_PARSER_ERROR, - GST_H264_PARSER_NO_NAL, - GST_H264_PARSER_NO_NAL_END -} GstH264ParserResult; - -/** - * GstH264SEIPayloadType: - * @GST_H264_SEI_BUF_PERIOD: Buffering Period SEI Message - * @GST_H264_SEI_PIC_TIMING: Picture Timing SEI Message - * ... - * - * The type of SEI message. - */ -typedef enum -{ - GST_H264_SEI_BUF_PERIOD = 0, - GST_H264_SEI_PIC_TIMING = 1 - /* and more... */ -} GstH264SEIPayloadType; - -/** - * GstH264SEIPicStructType: - * @GST_H264_SEI_PIC_STRUCT_FRAME: Picture is a frame - * @GST_H264_SEI_PIC_STRUCT_TOP_FIELD: Top field of frame - * @GST_H264_SEI_PIC_STRUCT_BOTTOM_FIELD: Botom field of frame - * @GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM: Top bottom field of frame - * @GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP: bottom top field of frame - * @GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP: top bottom top field of frame - * @GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: bottom top bottom field of frame - * @GST_H264_SEI_PIC_STRUCT_FRAME_DOUBLING: indicates that the frame should - * be displayed two times consecutively - * @GST_H264_SEI_PIC_STRUCT_FRAME_TRIPLING: indicates that the frame should be - * displayed three times consecutively - * - * SEI pic_struct type - */ -typedef enum -{ - GST_H264_SEI_PIC_STRUCT_FRAME = 0, - GST_H264_SEI_PIC_STRUCT_TOP_FIELD = 1, - GST_H264_SEI_PIC_STRUCT_BOTTOM_FIELD = 2, - GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM = 3, - GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP = 4, - GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP = 5, - GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM = 6, - GST_H264_SEI_PIC_STRUCT_FRAME_DOUBLING = 7, - GST_H264_SEI_PIC_STRUCT_FRAME_TRIPLING = 8 -} GstH264SEIPicStructType; - -/** - * GstH264SliceType: - * - * Type of Picture slice - */ - -typedef enum -{ - GST_H264_P_SLICE = 0, - GST_H264_B_SLICE = 1, - GST_H264_I_SLICE = 2, - GST_H264_SP_SLICE = 3, - GST_H264_SI_SLICE = 4, - GST_H264_S_P_SLICE = 5, - GST_H264_S_B_SLICE = 6, - GST_H264_S_I_SLICE = 7, - GST_H264_S_SP_SLICE = 8, - GST_H264_S_SI_SLICE = 9 -} GstH264SliceType; - -typedef struct _GstH264NalParser GstH264NalParser; - -typedef struct _GstH264NalUnit GstH264NalUnit; - -typedef struct _GstH264SPS GstH264SPS; -typedef struct _GstH264PPS GstH264PPS; -typedef struct _GstH264HRDParams GstH264HRDParams; -typedef struct _GstH264VUIParams GstH264VUIParams; - -typedef struct _GstH264RefPicListModification GstH264RefPicListModification; -typedef struct _GstH264DecRefPicMarking GstH264DecRefPicMarking; -typedef struct _GstH264RefPicMarking GstH264RefPicMarking; -typedef struct _GstH264PredWeightTable GstH264PredWeightTable; -typedef struct _GstH264SliceHdr GstH264SliceHdr; - -typedef struct _GstH264ClockTimestamp GstH264ClockTimestamp; -typedef struct _GstH264PicTiming GstH264PicTiming; -typedef struct _GstH264BufferingPeriod GstH264BufferingPeriod; -typedef struct _GstH264SEIMessage GstH264SEIMessage; - -/** - * GstH264NalUnit: - * @ref_idc: not equal to 0 specifies that the content of the NAL unit contains a sequence - * parameter set, a sequence * parameter set extension, a subset sequence parameter set, a - * picture parameter set, a slice of a reference picture, a slice data partition of a - * reference picture, or a prefix NAL unit preceding a slice of a reference picture. - * @type: A #GstH264NalUnitType - * @idr_pic_flag: calculated idr_pic_flag - * @size: The size of the nal unit starting from @offset - * @offset: The offset of the actual start of the nal unit - * @sc_offset:The offset of the start code of the nal unit - * @valid: If the nal unit is valid, which mean it has - * already been parsed - * @data: The data from which the Nalu has been parsed - * - * Structure defining the Nal unit headers - */ -struct _GstH264NalUnit -{ - guint16 ref_idc; - guint16 type; - - /* calculated values */ - guint8 idr_pic_flag; - guint size; - guint offset; - guint sc_offset; - gboolean valid; - - guint8 *data; -}; - -/** - * GstH264HRDParams: - * @cpb_cnt_minus1: plus 1 specifies the number of alternative - * CPB specifications in the bitstream - * @bit_rate_scale: specifies the maximum input bit rate of the - * SchedSelIdx-th CPB - * @cpb_size_scale: specifies the CPB size of the SchedSelIdx-th CPB - * @guint32 bit_rate_value_minus1: specifies the maximum input bit rate for the - * SchedSelIdx-th CPB - * @cpb_size_value_minus1: is used together with cpb_size_scale to specify the - * SchedSelIdx-th CPB size - * @cbr_flag: Specifies if running in itermediate bitrate mode or constant - * @initial_cpb_removal_delay_length_minus1: specifies the length in bits of - * the cpb_removal_delay syntax element - * @cpb_removal_delay_length_minus1: specifies the length in bits of the - * dpb_output_delay syntax element - * @dpb_output_delay_length_minus1: >0 specifies the length in bits of the time_offset syntax element. - * =0 specifies that the time_offset syntax element is not present - * @time_offset_length: Length of the time offset - * - * Defines the HRD parameters - */ -struct _GstH264HRDParams -{ - guint8 cpb_cnt_minus1; - guint8 bit_rate_scale; - guint8 cpb_size_scale; - - guint32 bit_rate_value_minus1[32]; - guint32 cpb_size_value_minus1[32]; - guint8 cbr_flag[32]; - - guint8 initial_cpb_removal_delay_length_minus1; - guint8 cpb_removal_delay_length_minus1; - guint8 dpb_output_delay_length_minus1; - guint8 time_offset_length; -}; - -/** - * GstH264VUIParams: - * @aspect_ratio_info_present_flag: %TRUE specifies that aspect_ratio_idc is present. - * %FALSE specifies that aspect_ratio_idc is not present - * @aspect_ratio_idc specifies the value of the sample aspect ratio of the luma samples - * @sar_width indicates the horizontal size of the sample aspect ratio - * @sar_height indicates the vertical size of the sample aspect ratio - * @overscan_info_present_flag: %TRUE overscan_appropriate_flag is present %FALSE otherwize - * @overscan_appropriate_flag: %TRUE indicates that the cropped decoded pictures - * output are suitable for display using overscan. %FALSE the cropped decoded pictures - * output contain visually important information - * @video_signal_type_present_flag: %TRUE specifies that video_format, video_full_range_flag and - * colour_description_present_flag are present. - * @video_format: indicates the representation of the picture - * @video_full_range_flag: indicates the black level and range of the luma and chroma signals - * @colour_description_present_flag: %TRUE specifies that colour_primaries, - * transfer_characteristics and matrix_coefficients are present - * @colour_primaries: indicates the chromaticity coordinates of the source primaries - * @transfer_characteristics: indicates the opto-electronic transfer characteristic - * @matrix_coefficients: describes the matrix coefficients used in deriving luma and chroma signals - * @chroma_loc_info_present_flag: %TRUE specifies that chroma_sample_loc_type_top_field and - * chroma_sample_loc_type_bottom_field are present, %FALSE otherwize - * @chroma_sample_loc_type_top_field: specify the location of chroma for top field - * @chroma_sample_loc_type_bottom_field specify the location of chroma for bottom field - * @timing_info_present_flag: %TRUE specifies that num_units_in_tick, - * time_scale and fixed_frame_rate_flag are present in the bitstream - * @num_units_in_tick: is the number of time units of a clock operating at the frequency time_scale Hz - * time_scale: is the number of time units that pass in one second - * @fixed_frame_rate_flag: %TRUE indicates that the temporal distance between the HRD output times - * of any two consecutive pictures in output order is constrained as specified in the spec, %FALSE - * otherwize. - * @nal_hrd_parameters_present_flag: %TRUE if nal hrd parameters present in the bitstream - * @vcl_hrd_parameters_present_flag: %TRUE if nal vlc hrd parameters present in the bitstream - * @low_delay_hrd_flag: specifies the HRD operational mode - * @pic_struct_present_flag: %TRUE specifies that picture timing SEI messages are present or not - * @bitstream_restriction_flag: %TRUE specifies that the following coded video sequence bitstream restriction - * parameters are present - * @motion_vectors_over_pic_boundaries_flag: %FALSE indicates that no sample outside the - * picture boundaries and no sample at a fractional sample position, %TRUE indicates that one or more - * samples outside picture boundaries may be used in inter prediction - * @max_bytes_per_pic_denom: indicates a number of bytes not exceeded by the sum of the sizes of - * the VCL NAL units associated with any coded picture in the coded video sequence. - * @max_bits_per_mb_denom: indicates the maximum number of coded bits of macroblock_layer - * @log2_max_mv_length_horizontal: indicate the maximum absolute value of a decoded horizontal - * motion vector component - * @log2_max_mv_length_vertical: indicate the maximum absolute value of a decoded vertical - * motion vector component - * @num_reorder_frames: indicates the maximum number of frames, complementary field pairs, - * or non-paired fields that precede any frame, - * @max_dec_frame_buffering: specifies the required size of the HRD decoded picture buffer in - * units of frame buffers. - * - * The structure representing the VUI parameters. - */ -struct _GstH264VUIParams -{ - guint8 aspect_ratio_info_present_flag; - guint8 aspect_ratio_idc; - /* if aspect_ratio_idc == 255 */ - guint16 sar_width; - guint16 sar_height; - - guint8 overscan_info_present_flag; - /* if overscan_info_present_flag */ - guint8 overscan_appropriate_flag; - - guint8 video_signal_type_present_flag; - guint8 video_format; - guint8 video_full_range_flag; - guint8 colour_description_present_flag; - guint8 colour_primaries; - guint8 transfer_characteristics; - guint8 matrix_coefficients; - - guint8 chroma_loc_info_present_flag; - guint8 chroma_sample_loc_type_top_field; - guint8 chroma_sample_loc_type_bottom_field; - - guint8 timing_info_present_flag; - /* if timing_info_present_flag */ - guint32 num_units_in_tick; - guint32 time_scale; - guint8 fixed_frame_rate_flag; - - guint8 nal_hrd_parameters_present_flag; - /* if nal_hrd_parameters_present_flag */ - GstH264HRDParams nal_hrd_parameters; - - guint8 vcl_hrd_parameters_present_flag; - /* if nal_hrd_parameters_present_flag */ - GstH264HRDParams vcl_hrd_parameters; - - guint8 low_delay_hrd_flag; - guint8 pic_struct_present_flag; - - guint8 bitstream_restriction_flag; - /* if bitstream_restriction_flag */ - guint8 motion_vectors_over_pic_boundaries_flag; - guint32 max_bytes_per_pic_denom; - guint32 max_bits_per_mb_denom; - guint32 log2_max_mv_length_horizontal; - guint32 log2_max_mv_length_vertical; - guint32 num_reorder_frames; - guint32 max_dec_frame_buffering; - - /* calculated values */ - guint par_n; - guint par_d; -}; - -/** - * GstH264SPS: - * @id: The ID of the sequence parameter set - * @profile_idc: indicate the profile to which the coded video sequence conforms - * - * H264 Sequence Parameter Set (SPS) - */ -struct _GstH264SPS -{ - gint id; - - guint8 profile_idc; - guint8 constraint_set0_flag; - guint8 constraint_set1_flag; - guint8 constraint_set2_flag; - guint8 constraint_set3_flag; - guint8 level_idc; - - guint8 chroma_format_idc; - guint8 separate_colour_plane_flag; - guint8 bit_depth_luma_minus8; - guint8 bit_depth_chroma_minus8; - guint8 qpprime_y_zero_transform_bypass_flag; - - guint8 scaling_matrix_present_flag; - guint8 scaling_lists_4x4[6][16]; - guint8 scaling_lists_8x8[6][64]; - - guint8 log2_max_frame_num_minus4; - guint8 pic_order_cnt_type; - - /* if pic_order_cnt_type == 0 */ - guint8 log2_max_pic_order_cnt_lsb_minus4; - - /* else if pic_order_cnt_type == 1 */ - guint8 delta_pic_order_always_zero_flag; - gint32 offset_for_non_ref_pic; - gint32 offset_for_top_to_bottom_field; - guint8 num_ref_frames_in_pic_order_cnt_cycle; - gint32 offset_for_ref_frame[255]; - - guint32 num_ref_frames; - guint8 gaps_in_frame_num_value_allowed_flag; - guint32 pic_width_in_mbs_minus1; - guint32 pic_height_in_map_units_minus1; - guint8 frame_mbs_only_flag; - - guint8 mb_adaptive_frame_field_flag; - - guint8 direct_8x8_inference_flag; - - guint8 frame_cropping_flag; - - /* if frame_cropping_flag */ - guint32 frame_crop_left_offset; - guint32 frame_crop_right_offset; - guint32 frame_crop_top_offset; - guint32 frame_crop_bottom_offset; - - guint8 vui_parameters_present_flag; - /* if vui_parameters_present_flag */ - GstH264VUIParams vui_parameters; - - /* calculated values */ - guint8 chroma_array_type; - guint32 max_frame_num; - gint width, height; - gint fps_num, fps_den; - gboolean valid; -}; - -/** - * GstH264PPS: - * - * H264 Picture Parameter Set - */ -struct _GstH264PPS -{ - gint id; - - GstH264SPS *sequence; - - guint8 entropy_coding_mode_flag; - guint8 pic_order_present_flag; - - guint32 num_slice_groups_minus1; - - /* if num_slice_groups_minus1 > 0 */ - guint8 slice_group_map_type; - /* and if slice_group_map_type == 0 */ - guint32 run_length_minus1[8]; - /* or if slice_group_map_type == 2 */ - guint32 top_left[8]; - guint32 bottom_right[8]; - /* or if slice_group_map_type == (3, 4, 5) */ - guint8 slice_group_change_direction_flag; - guint32 slice_group_change_rate_minus1; - /* or if slice_group_map_type == 6 */ - guint32 pic_size_in_map_units_minus1; - guint8 *slice_group_id; - - guint8 num_ref_idx_l0_active_minus1; - guint8 num_ref_idx_l1_active_minus1; - guint8 weighted_pred_flag; - guint8 weighted_bipred_idc; - gint8 pic_init_qp_minus26; - gint8 pic_init_qs_minus26; - gint8 chroma_qp_index_offset; - guint8 deblocking_filter_control_present_flag; - guint8 constrained_intra_pred_flag; - guint8 redundant_pic_cnt_present_flag; - - guint8 transform_8x8_mode_flag; - - guint8 scaling_lists_4x4[6][16]; - guint8 scaling_lists_8x8[6][64]; - - guint8 second_chroma_qp_index_offset; - - gboolean valid; -}; - -struct _GstH264RefPicListModification -{ - guint8 modification_of_pic_nums_idc; - union - { - /* if modification_of_pic_nums_idc == 0 || 1 */ - guint32 abs_diff_pic_num_minus1; - /* if modification_of_pic_nums_idc == 2 */ - guint32 long_term_pic_num; - } value; -}; - -struct _GstH264PredWeightTable -{ - guint8 luma_log2_weight_denom; - guint8 chroma_log2_weight_denom; - - gint16 luma_weight_l0[32]; - gint8 luma_offset_l0[32]; - - /* if seq->ChromaArrayType != 0 */ - gint16 chroma_weight_l0[32][2]; - gint8 chroma_offset_l0[32][2]; - - /* if slice->slice_type % 5 == 1 */ - gint16 luma_weight_l1[32]; - gint8 luma_offset_l1[32]; - - /* and if seq->ChromaArrayType != 0 */ - gint16 chroma_weight_l1[32][2]; - gint8 chroma_offset_l1[32][2]; -}; - -struct _GstH264RefPicMarking -{ - guint8 memory_management_control_operation; - - guint32 difference_of_pic_nums_minus1; - guint32 long_term_pic_num; - guint32 long_term_frame_idx; - guint32 max_long_term_frame_idx_plus1; -}; - -struct _GstH264DecRefPicMarking -{ - /* if slice->nal_unit.IdrPicFlag */ - guint8 no_output_of_prior_pics_flag; - guint8 long_term_reference_flag; - - guint8 adaptive_ref_pic_marking_mode_flag; - GstH264RefPicMarking ref_pic_marking[10]; - guint8 n_ref_pic_marking; -}; - - -struct _GstH264SliceHdr -{ - guint32 first_mb_in_slice; - guint32 type; - GstH264PPS *pps; - - /* if seq->separate_colour_plane_flag */ - guint8 colour_plane_id; - - guint16 frame_num; - - guint8 field_pic_flag; - guint8 bottom_field_flag; - - /* if nal_unit.type == 5 */ - guint16 idr_pic_id; - - /* if seq->pic_order_cnt_type == 0 */ - guint16 pic_order_cnt_lsb; - /* if seq->pic_order_present_flag && !field_pic_flag */ - gint32 delta_pic_order_cnt_bottom; - - gint32 delta_pic_order_cnt[2]; - guint8 redundant_pic_cnt; - - /* if slice_type == B_SLICE */ - guint8 direct_spatial_mv_pred_flag; - - guint8 num_ref_idx_l0_active_minus1; - guint8 num_ref_idx_l1_active_minus1; - - guint8 ref_pic_list_modification_flag_l0; - guint8 n_ref_pic_list_modification_l0; - GstH264RefPicListModification ref_pic_list_modification_l0[32]; - guint8 ref_pic_list_modification_flag_l1; - guint8 n_ref_pic_list_modification_l1; - GstH264RefPicListModification ref_pic_list_modification_l1[32]; - - GstH264PredWeightTable pred_weight_table; - /* if nal_unit.ref_idc != 0 */ - GstH264DecRefPicMarking dec_ref_pic_marking; - - guint8 cabac_init_idc; - gint8 slice_qp_delta; - gint8 slice_qs_delta; - - guint8 disable_deblocking_filter_idc; - gint8 slice_alpha_c0_offset_div2; - gint8 slice_beta_offset_div2; - - guint16 slice_group_change_cycle; - - /* calculated values */ - guint32 max_pic_num; - gboolean valid; - - /* Size of the slice_header() in bits */ - guint header_size; - - /* Number of emulation prevention bytes (EPB) in this slice_header() */ - guint n_emulation_prevention_bytes; -}; - - -struct _GstH264ClockTimestamp -{ - guint8 ct_type; - guint8 nuit_field_based_flag; - guint8 counting_type; - guint8 discontinuity_flag; - guint8 cnt_dropped_flag; - guint8 n_frames; - - guint8 seconds_flag; - guint8 seconds_value; - - guint8 minutes_flag; - guint8 minutes_value; - - guint8 hours_flag; - guint8 hours_value; - - guint32 time_offset; -}; - -struct _GstH264PicTiming -{ - guint32 cpb_removal_delay; - guint32 dpb_output_delay; - - guint8 pic_struct_present_flag; - /* if pic_struct_present_flag */ - guint8 pic_struct; - - guint8 clock_timestamp_flag[3]; - GstH264ClockTimestamp clock_timestamp[3]; -}; - -struct _GstH264BufferingPeriod -{ - GstH264SPS *sps; - - /* seq->vui_parameters->nal_hrd_parameters_present_flag */ - guint8 nal_initial_cpb_removal_delay[32]; - guint8 nal_initial_cpb_removal_delay_offset[32]; - - /* seq->vui_parameters->vcl_hrd_parameters_present_flag */ - guint8 vcl_initial_cpb_removal_delay[32]; - guint8 vcl_initial_cpb_removal_delay_offset[32]; -}; - -struct _GstH264SEIMessage -{ - GstH264SEIPayloadType payloadType; - - union { - GstH264BufferingPeriod buffering_period; - GstH264PicTiming pic_timing; - /* ... could implement more */ - } payload; -}; - -/** - * GstH264NalParser: - * - * H264 NAL Parser (opaque structure). - */ -struct _GstH264NalParser -{ - /*< private >*/ - GstH264SPS sps[GST_H264_MAX_SPS_COUNT]; - GstH264PPS pps[GST_H264_MAX_PPS_COUNT]; - GstH264SPS *last_sps; - GstH264PPS *last_pps; -}; - -GstH264NalParser *gst_h264_nal_parser_new (void); - -GstH264ParserResult gst_h264_parser_identify_nalu (GstH264NalParser *nalparser, - const guint8 *data, guint offset, - gsize size, GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_identify_nalu_unchecked (GstH264NalParser *nalparser, - const guint8 *data, guint offset, - gsize size, GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_identify_nalu_avc (GstH264NalParser *nalparser, const guint8 *data, - guint offset, gsize size, guint8 nal_length_size, - GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_parse_nal (GstH264NalParser *nalparser, - GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_parse_slice_hdr (GstH264NalParser *nalparser, GstH264NalUnit *nalu, - GstH264SliceHdr *slice, gboolean parse_pred_weight_table, - gboolean parse_dec_ref_pic_marking); - -GstH264ParserResult gst_h264_parser_parse_sps (GstH264NalParser *nalparser, GstH264NalUnit *nalu, - GstH264SPS *sps, gboolean parse_vui_params); - -GstH264ParserResult gst_h264_parser_parse_pps (GstH264NalParser *nalparser, - GstH264NalUnit *nalu, GstH264PPS *pps); - -GstH264ParserResult gst_h264_parser_parse_sei (GstH264NalParser *nalparser, - GstH264NalUnit *nalu, GstH264SEIMessage *sei); - -void gst_h264_nal_parser_free (GstH264NalParser *nalparser); - -GstH264ParserResult gst_h264_parse_sps (GstH264NalUnit *nalu, - GstH264SPS *sps, gboolean parse_vui_params); - -GstH264ParserResult gst_h264_parse_pps (GstH264NalParser *nalparser, - GstH264NalUnit *nalu, GstH264PPS *pps); - -G_END_DECLS -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h deleted file mode 100644 index 457919a2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h +++ /dev/null @@ -1,578 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2009 Carl-Anton Ingmarsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MPEG4UTIL_H__ -#define __GST_MPEG4UTIL_H__ - -#include -#include - -typedef struct _GstMpeg4VisualObjectSequence GstMpeg4VisualObjectSequence; -typedef struct _GstMpeg4VisualObject GstMpeg4VisualObject; -typedef struct _GstMpeg4VideoObjectLayer GstMpeg4VideoObjectLayer; -typedef struct _GstMpeg4GroupOfVOP GstMpeg4GroupOfVOP; -typedef struct _GstMpeg4VideoObjectPlane GstMpeg4VideoObjectPlane; -typedef struct _GstMpeg4VideoSignalType GstMpeg4VideoSignalType; -typedef struct _GstMpeg4VideoPlaneShortHdr GstMpeg4VideoPlaneShortHdr; -typedef struct _GstMpeg4VideoPacketHdr GstMpeg4VideoPacketHdr; - -typedef struct _GstMpeg4SpriteTrajectory GstMpeg4SpriteTrajectory; - -typedef struct _GstMpeg4Packet GstMpeg4Packet; - -/** - * GstMpeg4StartCode: - * - * Defines the different startcodes present in the bitstream as - * defined in: Table 6-3 — Start code values - */ -typedef enum -{ - GST_MPEG4_VIDEO_OBJ_FIRST = 0x00, - GST_MPEG4_VIDEO_OBJ_LAST = 0x1f, - GST_MPEG4_VIDEO_LAYER_FIRST = 0x20, - GST_MPEG4_VIDEO_LAYER_LAST = 0x2f, - GST_MPEG4_VISUAL_OBJ_SEQ_START = 0xb0, - GST_MPEG4_VISUAL_OBJ_SEQ_END = 0xb1, - GST_MPEG4_USER_DATA = 0xb2, - GST_MPEG4_GROUP_OF_VOP = 0xb3, - GST_MPEG4_VIDEO_SESSION_ERR = 0xb4, - GST_MPEG4_VISUAL_OBJ = 0xb5, - GST_MPEG4_VIDEO_OBJ_PLANE = 0xb6, - GST_MPEG4_FBA = 0xba, - GST_MPEG4_FBA_PLAN = 0xbb, - GST_MPEG4_MESH = 0xbc, - GST_MPEG4_MESH_PLAN = 0xbd, - GST_MPEG4_STILL_TEXTURE_OBJ = 0xbe, - GST_MPEG4_TEXTURE_SPATIAL = 0xbf, - GST_MPEG4_TEXTURE_SNR_LAYER = 0xc0, - GST_MPEG4_TEXTURE_TILE = 0xc1, - GST_MPEG4_SHAPE_LAYER = 0xc2, - GST_MPEG4_STUFFING = 0xc3, - GST_MPEG4_SYSTEM_FIRST = 0xc6, - GST_MPEG4_SYSTEM_LAST = 0xff, - GST_MPEG4_RESYNC = 0xfff -} GstMpeg4StartCode; - -/** - * GstMpeg4VisualObjectType: - * - * Defines the different visual object types as - * defined in: Table 6-5 -- Meaning of visual object type - */ -typedef enum { - GST_MPEG4_VIDEO_ID = 0x01, - GST_MPEG4_STILL_TEXTURE_ID = 0x02, - GST_MPEG4_STILL_MESH_ID = 0x03, - GST_MPEG4_STILL_FBA_ID = 0x04, - GST_MPEG4_STILL_3D_MESH_ID = 0x05, - /*... reserved */ - -} GstMpeg4VisualObjectType; - -/** - * GstMpeg4AspectRatioInfo: - * @GST_MPEG4_SQUARE: 1:1 square - * @GST_MPEG4_625_TYPE_4_3: 12:11 (625-type for 4:3 picture) - * @GST_MPEG4_525_TYPE_4_3: 10:11 (525-type for 4:3 picture) - * @GST_MPEG4_625_TYPE_16_9: 16:11 (625-type stretched for 16:9 picture) - * @GST_MPEG4_525_TYPE_16_9: 40:33 (525-type stretched for 16:9 picture) - * @GST_MPEG4_EXTENDED_PAR: Extended par - * - * Defines the different pixel aspect ratios as - * defined in: Table 6-12 -- Meaning of pixel aspect ratio - */ -typedef enum { - GST_MPEG4_SQUARE = 0x01, - GST_MPEG4_625_TYPE_4_3 = 0x02, - GST_MPEG4_525_TYPE_4_3 = 0x03, - GST_MPEG4_625_TYPE_16_9 = 0x04, - GST_MPEG4_525_TYPE_16_9 = 0x05, - GST_MPEG4_EXTENDED_PAR = 0x0f, -} GstMpeg4AspectRatioInfo; - -/** - * GstMpeg4ParseResult: - * @GST_MPEG4_PARSER_OK: The parsing went well - * @GST_MPEG4_PARSER_BROKEN_DATA: The bitstream was broken - * @GST_MPEG4_PARSER_NO_PACKET: There was no packet in the buffer - * @GST_MPEG4_PARSER_NO_PACKET_END: There was no packet end in the buffer - * @GST_MPEG4_PARSER_NO_PACKET_ERROR: An error accured durint the parsing - * - * Result type of any parsing function. - */ -typedef enum { - GST_MPEG4_PARSER_OK, - GST_MPEG4_PARSER_BROKEN_DATA, - GST_MPEG4_PARSER_NO_PACKET, - GST_MPEG4_PARSER_NO_PACKET_END, - GST_MPEG4_PARSER_ERROR, -} GstMpeg4ParseResult; - -/** - * GstMpeg4VideoObjectCodingType: - * @GST_MPEG4_I_VOP: intra-coded (I) - * @GST_MPEG4_P_VOP: predictive-coded (P) - * @GST_MPEG4_B_VOP: bidirectionally-predictive-coded (B) - * @GST_MPEG4_S_VOP: sprite (S) - * - * The vop coding types as defined in: - * Table 6-20 -- Meaning of vop_coding_type - */ -typedef enum { - GST_MPEG4_I_VOP = 0x0, - GST_MPEG4_P_VOP = 0x1, - GST_MPEG4_B_VOP = 0x2, - GST_MPEG4_S_VOP = 0x3 -} GstMpeg4VideoObjectCodingType; - -/** - * GstMpeg4ChromaFormat - * - * The chroma format in use as - * defined in: Table 6-13 -- Meaning of chroma_format - */ -typedef enum { - /* Other value are reserved */ - GST_MPEG4_CHROMA_4_2_0 = 0x01 -} GstMpeg4ChromaFormat; - -/** - * GstMpeg4VideoObjectLayerShape: - * - * The different video object layer shapes as defined in: - * Table 6-16 — Video Object Layer shape type - */ -typedef enum { - GST_MPEG4_RECTANGULAR, - GST_MPEG4_BINARY, - GST_MPEG4_BINARY_ONLY, - GST_MPEG4_GRAYSCALE -} GstMpeg4VideoObjectLayerShape; - -/** - * GstMpeg4SpriteEnable: - * - * Indicates the usage of static sprite coding - * or global motion compensation (GMC) as defined in: - * Table V2 - 2 -- Meaning of sprite_enable codewords - */ -typedef enum { - GST_MPEG4_SPRITE_UNUSED, - GST_MPEG4_SPRITE_STATIC, - GST_MPEG4_SPRITE_GMG -} GstMpeg4SpriteEnable; - -/** - * GstMpeg4Profile: - * - * Different defined profiles as defined in: - * 9- Profiles and levels - * - * It is computed using: - * Table G.1 — FLC table for profile_and_level_indication - */ -typedef enum { - GST_MPEG4_PROFILE_CORE, - GST_MPEG4_PROFILE_MAIN, - GST_MPEG4_PROFILE_N_BIT, - GST_MPEG4_PROFILE_SIMPLE, - GST_MPEG4_PROFILE_HYBRID, - GST_MPEG4_PROFILE_RESERVED, - GST_MPEG4_PROFILE_SIMPLE_FBA, - GST_MPEG4_PROFILE_CORE_STUDIO, - GST_MPEG4_PROFILE_SIMPLE_STUDIO, - GST_MPEG4_PROFILE_CORE_SCALABLE, - GST_MPEG4_PROFILE_ADVANCED_CORE, - GST_MPEG4_PROFILE_ADVANCED_SIMPLE, - GST_MPEG4_PROFILE_SIMPLE_SCALABLE, - GST_MPEG4_PROFILE_SCALABLE_TEXTURE, - GST_MPEG4_PROFILE_SIMPLE_FACE_ANIMATION, - GST_MPEG4_PROFILE_BASIC_ANIMATED_TEXTURE, - GST_MPEG4_PROFILE_ADVANCED_REALTIME_SIMPLE, - GST_MPEG4_PROFILE_ADVANCED_SCALABLE_TEXTURE, - GST_MPEG4_PROFILE_FINE_GRANULARITY_SCALABLE, - GST_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY -} GstMpeg4Profile; - -/** - * GstMpeg4Level: - * - * Different levels as defined in: - * 9- Profiles and levels - * - * It is computed using: - * Table G.1 — FLC table for profile_and_level_indication - */ -typedef enum { - GST_MPEG4_LEVEL0, - GST_MPEG4_LEVEL1, - GST_MPEG4_LEVEL2, - GST_MPEG4_LEVEL3, - GST_MPEG4_LEVEL3b, - GST_MPEG4_LEVEL4, - GST_MPEG4_LEVEL5, - GST_MPEG4_LEVEL_RESERVED -} GstMpeg4Level; - -/** - * GstMpeg4VisualObjectSequence: - * - * The visual object sequence structure as defined in: - * 6.2.2 Visual Object Sequence and Visual Object - */ -struct _GstMpeg4VisualObjectSequence { - guint8 profile_and_level_indication; - - /* Computed according to: - * Table G.1 — FLC table for profile_and_level_indication */ - GstMpeg4Level level; - GstMpeg4Profile profile; -}; - -/** - * The visual object structure as defined in: - * 6.2.2 Visual Object Sequence and Visual Object - */ -struct _GstMpeg4VisualObject { - guint8 is_identifier; - /* If is_identifier */ - guint8 verid; - guint8 priority; - - GstMpeg4VisualObjectType type; -}; - -/** - * GstMpeg4VideoSignalType: - * - * The video signal type structure as defined in: - * 6.2.2 Visual Object Sequence and Visual Object. - */ -struct _GstMpeg4VideoSignalType { - guint8 type; - - guint8 format; - guint8 range; - guint8 color_description; - guint8 color_primaries; - guint8 transfer_characteristics; - guint8 matrix_coefficients; -}; - -/** - * GstMpeg4VideoPlaneShortHdr: - * - * The video plane short header structure as defined in: - * 6.2.5.2 Video Plane with Short Header - */ -struct _GstMpeg4VideoPlaneShortHdr { - guint8 temporal_reference; - guint8 split_screen_indicator; - guint8 document_camera_indicator; - guint8 full_picture_freeze_release; - guint8 source_format; - guint8 picture_coding_type; - guint8 vop_quant; - guint8 pei; - guint8 psupp; - - /* Gob layer specific fields */ - guint8 gob_header_empty; - guint8 gob_number; - guint8 gob_frame_id; - guint8 quant_scale; - - /* Computed - * If all the values are set to 0, then it is reserved - * Table 6-25 -- Parameters Defined by source_format Field - */ - guint16 vop_width; - guint16 vop_height; - guint16 num_macroblocks_in_gob; - guint8 num_gobs_in_vop; - - /* The size in bits */ - guint size; -}; - -/** - * GstMpeg4VideoObjectLayer: - * - * The video object layer structure as defined in: - * 6.2.3 Video Object Layer - */ -struct _GstMpeg4VideoObjectLayer { - guint8 random_accessible_vol; - guint8 video_object_type_indication; - - guint8 is_object_layer_identifier; - /* if is_object_layer_identifier */ - guint8 verid; - guint8 priority; - - GstMpeg4AspectRatioInfo aspect_ratio_info; - guint8 par_width; - guint8 par_height; - - guint8 control_parameters; - /* if control_parameters */ - GstMpeg4ChromaFormat chroma_format; - guint8 low_delay; - guint8 vbv_parameters; - /* if vbv_parameters */ - guint16 first_half_bitrate; - guint16 latter_half_bitrate; - guint16 first_half_vbv_buffer_size; - guint16 latter_half_vbv_buffer_size; - guint16 first_half_vbv_occupancy; - guint16 latter_half_vbv_occupancy; - - /* Computed values */ - guint32 bit_rate; - guint32 vbv_buffer_size; - - GstMpeg4VideoObjectLayerShape shape; - /* if shape == GST_MPEG4_GRAYSCALE && verid =! 1 */ - guint8 shape_extension; - - guint16 vop_time_increment_resolution; - guint8 vop_time_increment_bits; - guint8 fixed_vop_rate; - /* if fixed_vop_rate */ - guint16 fixed_vop_time_increment; - - guint16 width; - guint16 height; - guint8 interlaced; - guint8 obmc_disable; - - GstMpeg4SpriteEnable sprite_enable; - /* if vol->sprite_enable == SPRITE_GMG or SPRITE_STATIC*/ - /* if vol->sprite_enable != GST_MPEG4_SPRITE_GMG */ - guint16 sprite_width; - guint16 sprite_height; - guint16 sprite_left_coordinate; - guint16 sprite_top_coordinate; - - guint8 no_of_sprite_warping_points; - guint8 sprite_warping_accuracy; - guint8 sprite_brightness_change; - /* if vol->sprite_enable != GST_MPEG4_SPRITE_GMG */ - guint8 low_latency_sprite_enable; - - /* if shape != GST_MPEG4_RECTANGULAR */ - guint8 sadct_disable; - - guint8 not_8_bit; - - /* if no_8_bit */ - guint8 quant_precision; - guint8 bits_per_pixel; - - /* if shape == GRAYSCALE */ - guint8 no_gray_quant_update; - guint8 composition_method; - guint8 linear_composition; - - guint8 quant_type; - /* if quant_type */ - guint8 load_intra_quant_mat; - guint8 intra_quant_mat[64]; - guint8 load_non_intra_quant_mat; - guint8 non_intra_quant_mat[64]; - - guint8 quarter_sample; - guint8 complexity_estimation_disable; - guint8 resync_marker_disable; - guint8 data_partitioned; - guint8 reversible_vlc; - guint8 newpred_enable; - guint8 reduced_resolution_vop_enable; - guint8 scalability; - guint8 enhancement_type; - - GstMpeg4VideoPlaneShortHdr short_hdr; -}; - -/** - * GstMpeg4SpriteTrajectory: - * - * The sprite trajectory structure as defined in: - * 7.8.4 Sprite reference point decoding and - * 6.2.5.4 Sprite coding - */ -struct _GstMpeg4SpriteTrajectory { - guint16 vop_ref_points[63]; /* Defined as "du" in 6.2.5.4 */ - guint16 sprite_ref_points[63]; /* Defined as "dv" in 6.2.5.4 */ -}; - -/** - * GstMpeg4GroupOfVOP: - * - * The group of video object plane structure as defined in: - * 6.2.4 Group of Video Object Plane - */ -struct _GstMpeg4GroupOfVOP { - guint8 hours; - guint8 minutes; - guint8 seconds; - - guint8 closed; - guint8 broken_link; -}; - -/** - * GstMpeg4VideoObjectPlane: - * - * The Video object plane structure as defined in: - * 6.2.5 Video Object Plane and Video Plane with Short Header - */ -struct _GstMpeg4VideoObjectPlane { - GstMpeg4VideoObjectCodingType coding_type; - - guint8 modulo_time_base; - guint16 time_increment; - - guint8 coded; - /* if newpred_enable */ - guint16 id; - guint8 id_for_prediction_indication; - guint16 id_for_prediction; - - guint16 width; - guint16 height; - guint16 horizontal_mc_spatial_ref; - guint16 vertical_mc_spatial_ref; - - guint8 rounding_type; - /*if vol->shape != GST_MPEG4_RECTANGULAR */ - guint8 background_composition; - guint8 change_conv_ratio_disable; - guint8 constant_alpha; - guint8 constant_alpha_value; - guint8 reduced_resolution; - - guint8 intra_dc_vlc_thr; - - - guint8 top_field_first; - guint8 alternate_vertical_scan_flag; - - guint16 quant; - - guint8 fcode_forward; - guint8 fcode_backward; - - guint8 shape_coding_type; - guint8 load_backward_shape; - guint8 ref_select_code; - - /* Computed macroblock informations */ - guint16 mb_height; - guint16 mb_width; - guint mb_num; - - /* The size of the header */ - guint size; -}; - -/** - * GstMpeg4VideoPacketHdr: - * @size: Size of the header in bit. - * - * The video packet header structure as defined in: - * 6.2.5.2 Video Plane with Short Header - */ -struct _GstMpeg4VideoPacketHdr { - guint8 header_extension_code; - guint16 macroblock_number; - guint16 quant_scale; - guint size; -}; - -/** - * GstMpeg4Packet: - * @type: the type of the packet that start at @offset - * @data: the data containing packet starting at @offset - * @offset: offset of the start of the packet (without the 3 bytes startcode), but - * including the #GstMpeg4StartCode byte. - * @size: The size in bytes of the packet or %G_MAXUINT if the end wasn't found. - * @marker_size: The size in bit of the resync marker. - * - * A structure that contains the type of a packet, its offset and its size - */ -struct _GstMpeg4Packet -{ - const guint8 *data; - guint offset; - gsize size; - guint marker_size; - - GstMpeg4StartCode type; -}; - -GstMpeg4ParseResult gst_h263_parse (GstMpeg4Packet * packet, - const guint8 * data, guint offset, - gsize size); - - -GstMpeg4ParseResult gst_mpeg4_parse (GstMpeg4Packet * packet, - gboolean skip_user_data, - GstMpeg4VideoObjectPlane *vop, - const guint8 * data, guint offset, - gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_video_object_plane (GstMpeg4VideoObjectPlane *vop, - GstMpeg4SpriteTrajectory *sprite_trajectory, - GstMpeg4VideoObjectLayer *vol, - const guint8 * data, - gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_group_of_vop (GstMpeg4GroupOfVOP *gov, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_video_object_layer (GstMpeg4VideoObjectLayer *vol, - GstMpeg4VisualObject *vo, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_visual_object (GstMpeg4VisualObject *vo, - GstMpeg4VideoSignalType *signal_type, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_visual_object_sequence (GstMpeg4VisualObjectSequence *vos, - const guint8 * data, gsize size); -GstMpeg4ParseResult -gst_mpeg4_parse_video_plane_short_header (GstMpeg4VideoPlaneShortHdr * shorthdr, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_video_packet_header (GstMpeg4VideoPacketHdr * videopackethdr, - GstMpeg4VideoObjectLayer * vol, - GstMpeg4VideoObjectPlane * vop, - GstMpeg4SpriteTrajectory * sprite_trajectory, - const guint8 * data, gsize size); - -#endif /* __GST_MPEG4UTIL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h deleted file mode 100644 index 2b13a064..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h +++ /dev/null @@ -1,431 +0,0 @@ -/* Gstreamer - * Copyright (C) <2011> Intel Corporation - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * From bad/sys/vdpau/mpeg/mpegutil.c: - * Copyright (C) <2007> Jan Schmidt - * Copyright (C) <2009> Carl-Anton Ingmarsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MPEG_VIDEO_UTILS_H__ -#define __GST_MPEG_VIDEO_UTILS_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The Mpeg video parsing library is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -/** - * GstMpegVideoPacketTypeCode: - * @GST_MPEG_VIDEO_PACKET_PICTURE: Picture packet starting code - * @GST_MPEG_VIDEO_PACKET_SLICE_MIN: Slice min packet starting code - * @GST_MPEG_VIDEO_PACKET_SLICE_MAX: Slice max packet starting code - * @GST_MPEG_VIDEO_PACKET_USER_DATA: User data packet starting code - * @GST_MPEG_VIDEO_PACKET_SEQUENCE : Sequence packet starting code - * @GST_MPEG_VIDEO_PACKET_EXTENSION: Extension packet starting code - * @GST_MPEG_VIDEO_PACKET_SEQUENCE_END: Sequence end packet code - * @GST_MPEG_VIDEO_PACKET_GOP: Group of Picture packet starting code - * @GST_MPEG_VIDEO_PACKET_NONE: None packet code - * - * Indicates the type of MPEG packet - */ -typedef enum { - GST_MPEG_VIDEO_PACKET_PICTURE = 0x00, - GST_MPEG_VIDEO_PACKET_SLICE_MIN = 0x01, - GST_MPEG_VIDEO_PACKET_SLICE_MAX = 0xaf, - GST_MPEG_VIDEO_PACKET_USER_DATA = 0xb2, - GST_MPEG_VIDEO_PACKET_SEQUENCE = 0xb3, - GST_MPEG_VIDEO_PACKET_EXTENSION = 0xb5, - GST_MPEG_VIDEO_PACKET_SEQUENCE_END = 0xb7, - GST_MPEG_VIDEO_PACKET_GOP = 0xb8, - GST_MPEG_VIDEO_PACKET_NONE = 0xff -} GstMpegVideoPacketTypeCode; - -/** - * GST_MPEG_VIDEO_PACKET_IS_SLICE: - * @typecode: The MPEG video packet type code - * - * Checks whether a packet type code is a slice. - * - * Returns: %TRUE if the packet type code corresponds to a slice, - * else %FALSE. - */ -#define GST_MPEG_VIDEO_PACKET_IS_SLICE(typecode) ((typecode) >= GST_MPEG_VIDEO_PACKET_SLICE_MIN && \ - (typecode) <= GST_MPEG_VIDEO_PACKET_SLICE_MAX) - -/** - * GstMpegVideoPacketExtensionCode: - * @GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE: Sequence extension code - * @GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY: Sequence Display extension code - * @GST_MPEG_VIDEO_PACKET_EXT_QUANT_MATRIX: Quantization Matrix extension code - * @GST_MPEG_VIDEO_PACKET_EXT_PICTURE: Picture coding extension - * - * Indicates what type of packets are in this block, some are mutually - * exclusive though - ie, sequence packs are accumulated separately. GOP & - * Picture may occur together or separately. - */ -typedef enum { - GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE = 0x01, - GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY = 0x02, - GST_MPEG_VIDEO_PACKET_EXT_QUANT_MATRIX = 0x03, - GST_MPEG_VIDEO_PACKET_EXT_PICTURE = 0x08 -} GstMpegVideoPacketExtensionCode; - -/** - * GstMpegVideoLevel: - * @GST_MPEG_VIDEO_LEVEL_LOW: Low level (LL) - * @GST_MPEG_VIDEO_LEVEL_MAIN: Main level (ML) - * @GST_MPEG_VIDEO_LEVEL_HIGH_1440: High 1440 level (H-14) - * @GST_MPEG_VIDEO_LEVEL_HIGH: High level (HL) - * - * Mpeg-2 Levels. - **/ -typedef enum { - GST_MPEG_VIDEO_LEVEL_HIGH = 0x04, - GST_MPEG_VIDEO_LEVEL_HIGH_1440 = 0x06, - GST_MPEG_VIDEO_LEVEL_MAIN = 0x08, - GST_MPEG_VIDEO_LEVEL_LOW = 0x0a -} GstMpegVideoLevel; - -/** - * GstMpegVideoProfile: - * @GST_MPEG_VIDEO_PROFILE_422: 4:2:2 profile (422) - * @GST_MPEG_VIDEO_PROFILE_HIGH: High profile (HP) - * @GST_MPEG_VIDEO_PROFILE_SPATIALLY_SCALABLE: Spatially Scalable profile (Spatial) - * @GST_MPEG_VIDEO_PROFILE_SNR_SCALABLE: SNR Scalable profile (SNR) - * @GST_MPEG_VIDEO_PROFILE_MAIN: Main profile (MP) - * @GST_MPEG_VIDEO_PROFILE_SIMPLE: Simple profile (SP) - * - * Mpeg-2 Profiles. - **/ -typedef enum { - GST_MPEG_VIDEO_PROFILE_422 = 0x00, - GST_MPEG_VIDEO_PROFILE_HIGH = 0x01, - GST_MPEG_VIDEO_PROFILE_SPATIALLY_SCALABLE = 0x02, - GST_MPEG_VIDEO_PROFILE_SNR_SCALABLE = 0x03, - GST_MPEG_VIDEO_PROFILE_MAIN = 0x04, - GST_MPEG_VIDEO_PROFILE_SIMPLE = 0x05 -} GstMpegVideoProfile; - -/** - * GstMpegVideoChromaFormat: - * @GST_MPEG_VIDEO_CHROMA_RES: Invalid (reserved for future use) - * @GST_MPEG_VIDEO_CHROMA_420: 4:2:0 subsampling - * @GST_MPEG_VIDEO_CHROMA_422: 4:2:2 subsampling - * @GST_MPEG_VIDEO_CHROMA_444: 4:4:4 (non-subsampled) - * - * Chroma subsampling type. - */ -typedef enum { - GST_MPEG_VIDEO_CHROMA_RES = 0x00, - GST_MPEG_VIDEO_CHROMA_420 = 0x01, - GST_MPEG_VIDEO_CHROMA_422 = 0x02, - GST_MPEG_VIDEO_CHROMA_444 = 0x03, -} GstMpegVideoChromaFormat; - -/** - * GstMpegVideoPictureType: - * @GST_MPEG_VIDEO_PICTURE_TYPE_I: Intra-coded (I) frame - * @GST_MPEG_VIDEO_PICTURE_TYPE_P: Predictive-codec (P) frame - * @GST_MPEG_VIDEO_PICTURE_TYPE_B: Bidirectionally predictive-coded (B) frame - * @GST_MPEG_VIDEO_PICTURE_TYPE_D: D frame - * - * Picture type. - */ -typedef enum { - GST_MPEG_VIDEO_PICTURE_TYPE_I = 0x01, - GST_MPEG_VIDEO_PICTURE_TYPE_P = 0x02, - GST_MPEG_VIDEO_PICTURE_TYPE_B = 0x03, - GST_MPEG_VIDEO_PICTURE_TYPE_D = 0x04 -} GstMpegVideoPictureType; - -/** - * GstMpegVideoPictureStructure: - * @GST_MPEG_VIDEO_PICTURE_STRUCTURE_TOP_FIELD: Top field - * @GST_MPEG_VIDEO_PICTURE_STRUCTURE_BOTTOM_FIELD: Bottom field - * @GST_MPEG_VIDEO_PICTURE_STRUCTURE_FRAME: Frame picture - * - * Picture structure type. - */ -typedef enum { - GST_MPEG_VIDEO_PICTURE_STRUCTURE_TOP_FIELD = 0x01, - GST_MPEG_VIDEO_PICTURE_STRUCTURE_BOTTOM_FIELD = 0x02, - GST_MPEG_VIDEO_PICTURE_STRUCTURE_FRAME = 0x03 -} GstMpegVideoPictureStructure; - -typedef struct _GstMpegVideoSequenceHdr GstMpegVideoSequenceHdr; -typedef struct _GstMpegVideoSequenceExt GstMpegVideoSequenceExt; -typedef struct _GstMpegVideoSequenceDisplayExt GstMpegVideoSequenceDisplayExt; -typedef struct _GstMpegVideoPictureHdr GstMpegVideoPictureHdr; -typedef struct _GstMpegVideoGop GstMpegVideoGop; -typedef struct _GstMpegVideoPictureExt GstMpegVideoPictureExt; -typedef struct _GstMpegVideoQuantMatrixExt GstMpegVideoQuantMatrixExt; -typedef struct _GstMpegVideoPacket GstMpegVideoPacket; - -/** - * GstMpegVideoSequenceHdr: - * @width: Width of each frame - * @height: Height of each frame - * @par_w: Calculated Pixel Aspect Ratio width - * @par_h: Calculated Pixel Aspect Ratio height - * @fps_n: Calculated Framrate nominator - * @fps_d: Calculated Framerate denominator - * @bitrate_value: Value of the bitrate as is in the stream (400bps unit) - * @bitrate: the real bitrate of the Mpeg video stream in bits per second, 0 if VBR stream - * @constrained_parameters_flag: %TRUE if this stream uses contrained parameters. - * @intra_quantizer_matrix: intra-quantization table - * @non_intra_quantizer_matrix: non-intra quantization table - * - * The Mpeg2 Video Sequence Header structure. - */ -struct _GstMpegVideoSequenceHdr -{ - guint16 width, height; - guint8 aspect_ratio_info; - guint8 frame_rate_code; - guint32 bitrate_value; - guint16 vbv_buffer_size_value; - - guint8 constrained_parameters_flag; - - guint8 intra_quantizer_matrix[64]; - guint8 non_intra_quantizer_matrix[64]; - - /* Calculated values */ - guint par_w, par_h; - guint fps_n, fps_d; - guint bitrate; -}; - -/** - * GstMpegVideoSequenceExt: - * @profile: mpeg2 decoder profile - * @level: mpeg2 decoder level - * @progressive: %TRUE if the frames are progressive %FALSE otherwise - * @chroma_format: indicates the chrominance format - * @horiz_size_ext: Horizontal size - * @vert_size_ext: Vertical size - * @bitrate_ext: The bitrate - * @vbv_buffer_size_extension: VBV vuffer size - * @low_delay: %TRUE if the sequence doesn't contain any B-pictures, %FALSE - * otherwise - * @fps_n_ext: Framerate nominator code - * @fps_d_ext: Framerate denominator code - * - * The Mpeg2 Video Sequence Extension structure. - **/ -struct _GstMpegVideoSequenceExt -{ - /* mpeg2 decoder profile */ - guint8 profile; - /* mpeg2 decoder level */ - guint8 level; - - guint8 progressive; - guint8 chroma_format; - - guint8 horiz_size_ext, vert_size_ext; - - guint16 bitrate_ext; - guint8 vbv_buffer_size_extension; - guint8 low_delay; - guint8 fps_n_ext, fps_d_ext; - -}; - -/** - * GstMpegVideoSequenceDisplayExt: - * @profile: mpeg2 decoder profil - - */ -struct _GstMpegVideoSequenceDisplayExt -{ - guint8 video_format; - guint8 colour_description_flag; - - /* if colour_description_flag: */ - guint8 colour_primaries; - guint8 transfer_characteristics; - guint8 matrix_coefficients; - - guint16 display_horizontal_size; - guint16 display_vertical_size; -}; - -/** - * GstMpegVideoQuantMatrixExt: - * @load_intra_quantiser_matrix: - * @intra_quantiser_matrix: - * @load_non_intra_quantiser_matrix: - * @non_intra_quantiser_matrix: - * @load_chroma_intra_quantiser_matrix: - * @chroma_intra_quantiser_matrix: - * @load_chroma_non_intra_quantiser_matrix: - * @chroma_non_intra_quantiser_matrix: - * - * The Quant Matrix Extension structure - */ -struct _GstMpegVideoQuantMatrixExt -{ - guint8 load_intra_quantiser_matrix; - guint8 intra_quantiser_matrix[64]; - guint8 load_non_intra_quantiser_matrix; - guint8 non_intra_quantiser_matrix[64]; - guint8 load_chroma_intra_quantiser_matrix; - guint8 chroma_intra_quantiser_matrix[64]; - guint8 load_chroma_non_intra_quantiser_matrix; - guint8 chroma_non_intra_quantiser_matrix[64]; -}; - -/** - * GstMpegVideoPictureHdr: - * @tsn: Temporal Sequence Number - * @pic_type: Type of the frame - * @full_pel_forward_vector: the full pel forward flag of - * the frame: 0 or 1. - * @full_pel_backward_vector: the full pel backward flag - * of the frame: 0 or 1. - * @f_code: F code - * - * The Mpeg2 Video Picture Header structure. - */ -struct _GstMpegVideoPictureHdr -{ - guint16 tsn; - guint8 pic_type; - - guint8 full_pel_forward_vector, full_pel_backward_vector; - - guint8 f_code[2][2]; -}; - -/** - * GstMpegVideoPictureExt: - * @intra_dc_precision: Intra DC precision - * @picture_structure: Structure of the picture - * @top_field_first: Top field first - * @frame_pred_frame_dct: Frame - * @concealment_motion_vectors: Concealment Motion Vectors - * @q_scale_type: Q Scale Type - * @intra_vlc_format: Intra Vlc Format - * @alternate_scan: Alternate Scan - * @repeat_first_field: Repeat First Field - * @chroma_420_type: Chroma 420 Type - * @progressive_frame: %TRUE if the frame is progressive %FALSE otherwize - * - * The Mpeg2 Video Picture Extension structure. - */ -struct _GstMpegVideoPictureExt -{ - guint8 f_code[2][2]; - - guint8 intra_dc_precision; - guint8 picture_structure; - guint8 top_field_first; - guint8 frame_pred_frame_dct; - guint8 concealment_motion_vectors; - guint8 q_scale_type; - guint8 intra_vlc_format; - guint8 alternate_scan; - guint8 repeat_first_field; - guint8 chroma_420_type; - guint8 progressive_frame; - guint8 composite_display; - guint8 v_axis; - guint8 field_sequence; - guint8 sub_carrier; - guint8 burst_amplitude; - guint8 sub_carrier_phase; -}; - -/** - * GstMpegVideoGop: - * @drop_frame_flag: Drop Frame Flag - * @hour: Hour (0-23) - * @minute: Minute (O-59) - * @second: Second (0-59) - * @frame: Frame (0-59) - * @closed_gop: Closed Gop - * @broken_link: Broken link - * - * The Mpeg Video Group of Picture structure. - */ -struct _GstMpegVideoGop -{ - guint8 drop_frame_flag; - - guint8 hour, minute, second, frame; - - guint8 closed_gop; - guint8 broken_link; -}; - -/** - * GstMpegVideoTypeOffsetSize: - * - * @type: the type of the packet that start at @offset - * @data: the data containing the packet starting at @offset - * @offset: the offset of the packet start in bytes, it is the exact, start of the packet, no sync code included - * @size: The size in bytes of the packet or -1 if the end wasn't found. It is the exact size of the packet, no sync code included - * - * A structure that contains the type of a packet, its offset and its size - */ -struct _GstMpegVideoPacket -{ - const guint8 *data; - guint8 type; - guint offset; - gint size; -}; - -gboolean gst_mpeg_video_parse (GstMpegVideoPacket * packet, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * params, - const guint8 * data, gsize size, guint offset); - -/* seqext and displayext may be NULL if not received */ -gboolean gst_mpeg_video_finalise_mpeg2_sequence_header (GstMpegVideoSequenceHdr *hdr, - GstMpegVideoSequenceExt *seqext, GstMpegVideoSequenceDisplayExt *displayext); - -gboolean gst_mpeg_video_parse_picture_header (GstMpegVideoPictureHdr* hdr, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_picture_extension (GstMpegVideoPictureExt *ext, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_gop (GstMpegVideoGop * gop, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_sequence_extension (GstMpegVideoSequenceExt * seqext, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_sequence_display_extension (GstMpegVideoSequenceDisplayExt * seqdisplayext, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_quant_matrix_extension (GstMpegVideoQuantMatrixExt * quant, - const guint8 * data, gsize size, guint offset); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h deleted file mode 100644 index ce463d72..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h +++ /dev/null @@ -1,622 +0,0 @@ -/* Gstreamer - * Copyright (C) <2011> Intel - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VC1_PARSER_H__ -#define __GST_VC1_PARSER_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The VC1 parsing library is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define MAX_HRD_NUM_LEAKY_BUCKETS 31 - -/** - * @GST_VC1_BFRACTION_BASIS: The @bfraction variable should be divided - * by this constant to have the actual value. - */ -#define GST_VC1_BFRACTION_BASIS 840 - -#define GST_VC1_BFRACTION_RESERVED (GST_VC1_BFRACTION_BASIS + 1) -#define GST_VC1_BFRACTION_PTYPE_BI (GST_VC1_BFRACTION_BASIS + 2) - -typedef enum { - GST_VC1_END_OF_SEQ = 0x0A, - GST_VC1_SLICE = 0x0B, - GST_VC1_FIELD = 0x0C, - GST_VC1_FRAME = 0x0D, - GST_VC1_ENTRYPOINT = 0x0E, - GST_VC1_SEQUENCE = 0x0F, - GST_VC1_SLICE_USER = 0x1B, - GST_VC1_FIELD_USER = 0x1C, - GST_VC1_FRAME_USER = 0x1D, - GST_VC1_ENTRY_POINT_USER = 0x1E, - GST_VC1_SEQUENCE_USER = 0x1F -} GstVC1StartCode; - -typedef enum { - GST_VC1_PROFILE_SIMPLE, - GST_VC1_PROFILE_MAIN, - GST_VC1_PROFILE_RESERVED, - GST_VC1_PROFILE_ADVANCED -} GstVC1Profile; - -typedef enum { - GST_VC1_PARSER_OK, - GST_VC1_PARSER_BROKEN_DATA, - GST_VC1_PARSER_NO_BDU, - GST_VC1_PARSER_NO_BDU_END, - GST_VC1_PARSER_ERROR, -} GstVC1ParserResult; - -typedef enum -{ - GST_VC1_PICTURE_TYPE_P, - GST_VC1_PICTURE_TYPE_B, - GST_VC1_PICTURE_TYPE_I, - GST_VC1_PICTURE_TYPE_BI, - GST_VC1_PICTURE_TYPE_SKIPPED -} GstVC1PictureType; - -typedef enum -{ - GST_VC1_LEVEL_LOW = 0, /* Simple/Main profile low level */ - GST_VC1_LEVEL_MEDIUM = 1, /* Simple/Main profile medium level */ - GST_VC1_LEVEL_HIGH = 2, /* Main profile high level */ - - GST_VC1_LEVEL_L0 = 0, /* Advanced profile level 0 */ - GST_VC1_LEVEL_L1 = 1, /* Advanced profile level 1 */ - GST_VC1_LEVEL_L2 = 2, /* Advanced profile level 2 */ - GST_VC1_LEVEL_L3 = 3, /* Advanced profile level 3 */ - GST_VC1_LEVEL_L4 = 4, /* Advanced profile level 4 */ - - /* 5 to 7 reserved */ - GST_VC1_LEVEL_UNKNOWN = 255 /* Unknown profile */ -} GstVC1Level; - -typedef enum -{ - GST_VC1_QUANTIZER_IMPLICITLY, - GST_VC1_QUANTIZER_EXPLICITLY, - GST_VC1_QUANTIZER_NON_UNIFORM, - GST_VC1_QUANTIZER_UNIFORM -} GstVC1QuantizerSpec; - -typedef enum { - GST_VC1_DQPROFILE_FOUR_EDGES, - GST_VC1_DQPROFILE_DOUBLE_EDGES, - GST_VC1_DQPROFILE_SINGLE_EDGE, - GST_VC1_DQPROFILE_ALL_MBS -} GstVC1DQProfile; - -typedef enum { - GST_VC1_CONDOVER_NONE, - GST_VC1_CONDOVER_ALL, - GST_VC1_CONDOVER_SELECT -} GstVC1Condover; - -/** - * GstVC1MvMode: - * - */ -typedef enum -{ - GST_VC1_MVMODE_1MV_HPEL_BILINEAR, - GST_VC1_MVMODE_1MV, - GST_VC1_MVMODE_1MV_HPEL, - GST_VC1_MVMODE_MIXED_MV, - GST_VC1_MVMODE_INTENSITY_COMP -} GstVC1MvMode; - -typedef enum -{ - GST_VC1_FRAME_PROGRESSIVE = 0x0, - GST_VC1_FRAME_INTERLACE = 0x10, - GST_VC1_FIELD_INTERLACE = 0x11 -} GstVC1FrameCodingMode; - -typedef struct _GstVC1SeqHdr GstVC1SeqHdr; -typedef struct _GstVC1AdvancedSeqHdr GstVC1AdvancedSeqHdr; -typedef struct _GstVC1HrdParam GstVC1HrdParam; -typedef struct _GstVC1EntryPointHdr GstVC1EntryPointHdr; - -typedef struct _GstVC1SeqLayer GstVC1SeqLayer; - -typedef struct _GstVC1SeqStructA GstVC1SeqStructA; -typedef struct _GstVC1SeqStructB GstVC1SeqStructB; -typedef struct _GstVC1SeqStructC GstVC1SeqStructC; - -/* Pictures Structures */ -typedef struct _GstVC1FrameLayer GstVC1FrameLayer; -typedef struct _GstVC1FrameHdr GstVC1FrameHdr; -typedef struct _GstVC1PicAdvanced GstVC1PicAdvanced; -typedef struct _GstVC1PicSimpleMain GstVC1PicSimpleMain; -typedef struct _GstVC1Picture GstVC1Picture; - -typedef struct _GstVC1VopDquant GstVC1VopDquant; - -typedef struct _GstVC1BitPlanes GstVC1BitPlanes; - -typedef struct _GstVC1BDU GstVC1BDU; - -struct _GstVC1HrdParam -{ - guint8 hrd_num_leaky_buckets; - guint8 bit_rate_exponent; - guint8 buffer_size_exponent; - guint16 hrd_rate[MAX_HRD_NUM_LEAKY_BUCKETS]; - guint16 hrd_buffer[MAX_HRD_NUM_LEAKY_BUCKETS]; -}; - -/** - * GstVC1EntryPointHdr: - * - * Structure for entrypoint header, this will be used only in advanced profiles - */ -struct _GstVC1EntryPointHdr -{ - guint8 broken_link; - guint8 closed_entry; - guint8 panscan_flag; - guint8 refdist_flag; - guint8 loopfilter; - guint8 fastuvmc; - guint8 extended_mv; - guint8 dquant; - guint8 vstransform; - guint8 overlap; - guint8 quantizer; - guint8 coded_size_flag; - guint16 coded_width; - guint16 coded_height; - guint8 extended_dmv; - guint8 range_mapy_flag; - guint8 range_mapy; - guint8 range_mapuv_flag; - guint8 range_mapuv; - - guint8 hrd_full[MAX_HRD_NUM_LEAKY_BUCKETS]; -}; - -/** - * GstVC1AdvancedSeqHdr: - * - * Structure for the advanced profile sequence headers specific parameters. - */ -struct _GstVC1AdvancedSeqHdr -{ - GstVC1Level level; - - guint8 frmrtq_postproc; - guint8 bitrtq_postproc; - guint8 postprocflag; - guint16 max_coded_width; - guint16 max_coded_height; - guint8 pulldown; - guint8 interlace; - guint8 tfcntrflag; - guint8 finterpflag; - guint8 psf; - guint8 display_ext; - guint16 disp_horiz_size; - guint16 disp_vert_size; - guint8 aspect_ratio_flag; - guint8 aspect_ratio; - guint8 aspect_horiz_size; - guint8 aspect_vert_size; - guint8 framerate_flag; - guint8 framerateind; - guint8 frameratenr; - guint8 frameratedr; - guint16 framerateexp; - guint8 color_format_flag; - guint8 color_prim; - guint8 transfer_char; - guint8 matrix_coef; - guint8 hrd_param_flag; - guint8 colordiff_format; - - GstVC1HrdParam hrd_param; - - /* computed */ - guint framerate; /* Around in fps, 0 if unknown*/ - guint bitrate; /* Around in kpbs, 0 if unknown*/ - guint par_n; - guint par_d; - guint fps_n; - guint fps_d; - - /* The last parsed entry point */ - GstVC1EntryPointHdr entrypoint; -}; - -struct _GstVC1SeqStructA -{ - guint32 vert_size; - guint32 horiz_size; -}; - -struct _GstVC1SeqStructB -{ - GstVC1Level level; - - guint8 cbr; - guint32 framerate; - - /* In simple and main profiles only */ - guint32 hrd_buffer; - guint32 hrd_rate; -}; - -struct _GstVC1SeqStructC -{ - GstVC1Profile profile; - - /* Only in simple and main profiles */ - guint8 frmrtq_postproc; - guint8 bitrtq_postproc; - guint8 res_sprite; - guint8 loop_filter; - guint8 multires; - guint8 fastuvmc; - guint8 extended_mv; - guint8 dquant; - guint8 vstransform; - guint8 overlap; - guint8 syncmarker; - guint8 rangered; - guint8 maxbframes; - guint8 quantizer; - guint8 finterpflag; - - /* Computed */ - guint framerate; /* Around in fps, 0 if unknown*/ - guint bitrate; /* Around in kpbs, 0 if unknown*/ - - /* This should be filled by user if previously known */ - guint16 coded_width; - /* This should be filled by user if previously known */ - guint16 coded_height; - - /* Wmvp specific */ - guint8 wmvp; /* Specify if the stream is wmp or not */ - /* In the wmvp case, the framerate is not computed but in the bistream */ - guint8 slice_code; -}; - -struct _GstVC1SeqLayer -{ - guint32 numframes; - - GstVC1SeqStructA struct_a; - GstVC1SeqStructB struct_b; - GstVC1SeqStructC struct_c; -}; - -/** - * GstVC1SeqHdr: - * - * Structure for sequence headers in any profile. - */ -struct _GstVC1SeqHdr -{ - GstVC1Profile profile; - - GstVC1SeqStructC struct_c; - - /* calculated */ - guint mb_height; - guint mb_width; - guint mb_stride; - - GstVC1AdvancedSeqHdr advanced; - -}; - -/** - * GstVC1PicSimpleMain: - * @bfaction: Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. - */ -struct _GstVC1PicSimpleMain -{ - guint8 frmcnt; - guint8 mvrange; - guint8 rangeredfrm; - - /* I and P pic simple and main profiles only */ - guint8 respic; - - /* I and BI pic simple and main profiles only */ - guint8 transacfrm2; - guint8 bf; - - /* B and P pic simple and main profiles only */ - guint8 mvmode; - guint8 mvtab; - guint8 ttmbf; - - /* P pic simple and main profiles only */ - guint8 mvmode2; - guint8 lumscale; - guint8 lumshift; - - guint8 cbptab; - guint8 ttfrm; - - /* B and BI picture only - * Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. */ - guint16 bfraction; - - /* Biplane value, those fields only mention the fact - * that the bitplane is in raw mode or not */ - guint8 mvtypemb; - guint8 skipmb; - guint8 directmb; /* B pic main profile only */ -}; - -/** - * GstVC1PicAdvanced: - * @bfaction: Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. - */ -struct _GstVC1PicAdvanced -{ - GstVC1FrameCodingMode fcm; - guint8 tfcntr; - - guint8 rptfrm; - guint8 tff; - guint8 rff; - guint8 ps_present; - guint32 ps_hoffset; - guint32 ps_voffset; - guint16 ps_width; - guint16 ps_height; - guint8 rndctrl; - guint8 uvsamp; - guint8 postproc; - - /* B and P picture specific */ - guint8 mvrange; - guint8 mvmode; - guint8 mvtab; - guint8 cbptab; - guint8 ttmbf; - guint8 ttfrm; - - /* B and BI picture only - * Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. */ - guint16 bfraction; - - /* ppic */ - guint8 mvmode2; - guint8 lumscale; - guint8 lumshift; - - /* bipic */ - guint8 bf; - guint8 condover; - guint8 transacfrm2; - - /* Biplane value, those fields only mention the fact - * that the bitplane is in raw mode or not */ - guint8 acpred; - guint8 overflags; - guint8 mvtypemb; - guint8 skipmb; - guint8 directmb; - guint8 forwardmb; /* B pic interlace field only */ - - /* For interlaced pictures only */ - guint8 fieldtx; - - /* P and B pictures */ - guint8 intcomp; - guint8 dmvrange; - guint8 mbmodetab; - guint8 imvtab; - guint8 icbptab; - guint8 mvbptab2; - guint8 mvbptab4; /* If 4mvswitch in ppic */ - - /* P picture */ - guint8 mvswitch4; - - /* For interlaced fields only */ - guint16 refdist; - guint8 fptype; /* Raw value */ - - /* P pic */ - guint8 numref; - guint8 reffield; - guint8 lumscale2; - guint8 lumshift2; - guint8 intcompfield; - -}; - -struct _GstVC1BitPlanes -{ - guint8 *acpred; - guint8 *fieldtx; - guint8 *overflags; - guint8 *mvtypemb; - guint8 *skipmb; - guint8 *directmb; - guint8 *forwardmb; - - guint size; /* Size of the arrays */ -}; - -struct _GstVC1VopDquant -{ - guint8 pqdiff; - guint8 abspq; - - /* Computed */ - guint8 altpquant; - - /* if dqant != 2*/ - guint8 dquantfrm; - guint8 dqprofile; - - /* if dqprofile == GST_VC1_DQPROFILE_SINGLE_EDGE - * or GST_VC1_DQPROFILE_DOUBLE_EDGE:*/ - guint8 dqsbedge; - - /* if dqprofile == GST_VC1_DQPROFILE_SINGLE_EDGE - * or GST_VC1_DQPROFILE_DOUBLE_EDGE:*/ - guint8 dqbedge; - - /* if dqprofile == GST_VC1_DQPROFILE_ALL_MBS */ - guint8 dqbilevel; - -}; - -struct _GstVC1FrameLayer -{ - guint8 key; - guint32 framesize; - - guint32 timestamp; - - /* calculated */ - guint32 next_framelayer_offset; - guint8 skiped_p_frame; -}; - -/** - * GstVC1FrameHdr: - * - * Structure that represent picture in any profile or mode. - * You should look at @ptype and @profile to know what is currently - * in use. - */ -struct _GstVC1FrameHdr -{ - /* common fields */ - GstVC1PictureType ptype; - guint8 interpfrm; - guint8 halfqp; - guint8 transacfrm; - guint8 transdctab; - guint8 pqindex; - guint8 pquantizer; - - /* Computed */ - guint8 pquant; - - /* Convenience fields */ - guint8 profile; - guint8 dquant; - - /* If dquant */ - GstVC1VopDquant vopdquant; - - union { - GstVC1PicSimpleMain simple; - GstVC1PicAdvanced advanced; - } pic; - - /* Size of the picture layer in bits */ - guint header_size; -}; - -/** - * GstVC1BDU: - * - * Structure that represents a Bitstream Data Unit. - */ -struct _GstVC1BDU -{ - GstVC1StartCode type; - guint size; - guint sc_offset; - guint offset; - guint8 * data; -}; - -GstVC1ParserResult gst_vc1_identify_next_bdu (const guint8 *data, - gsize size, - GstVC1BDU *bdu); - - -GstVC1ParserResult gst_vc1_parse_sequence_header (const guint8 *data, - gsize size, - GstVC1SeqHdr * seqhdr); - -GstVC1ParserResult gst_vc1_parse_entry_point_header (const guint8 *data, - gsize size, - GstVC1EntryPointHdr * entrypoint, - GstVC1SeqHdr *seqhdr); - -GstVC1ParserResult gst_vc1_parse_sequence_layer (const guint8 *data, - gsize size, - GstVC1SeqLayer * seqlayer); - -GstVC1ParserResult -gst_vc1_parse_sequence_header_struct_a (const guint8 *data, - gsize size, - GstVC1SeqStructA *structa); -GstVC1ParserResult -gst_vc1_parse_sequence_header_struct_b (const guint8 *data, - gsize size, - GstVC1SeqStructB *structb); - -GstVC1ParserResult -gst_vc1_parse_sequence_header_struct_c (const guint8 *data, - gsize size, - GstVC1SeqStructC *structc); - -GstVC1ParserResult gst_vc1_parse_frame_layer (const guint8 *data, - gsize size, - GstVC1FrameLayer * framelayer); - -GstVC1ParserResult gst_vc1_parse_frame_header (const guint8 *data, - gsize size, - GstVC1FrameHdr * framehdr, - GstVC1SeqHdr *seqhdr, - GstVC1BitPlanes *bitplanes); - -GstVC1ParserResult gst_vc1_parse_field_header (const guint8 *data, - gsize size, - GstVC1FrameHdr * fieldhdr, - GstVC1SeqHdr *seqhdr, - GstVC1BitPlanes *bitplanes); - -GstVC1BitPlanes * gst_vc1_bitplanes_new (void); - -void gst_vc1_bitplanes_free (GstVC1BitPlanes *bitplanes); - -void gst_vc1_bitplanes_free_1 (GstVC1BitPlanes *bitplanes); - -gboolean gst_vc1_bitplanes_ensure_size (GstVC1BitPlanes *bitplanes, - GstVC1SeqHdr *seqhdr); - -G_END_DECLS -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h deleted file mode 100644 index 26bfc6dc..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h +++ /dev/null @@ -1,98 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Stefan Sauer - * - * gstargbcontrolbinding.h: Attachment for multiple control sources to gargb - * properties - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ARGB_CONTROL_BINDING_H__ -#define __GST_ARGB_CONTROL_BINDING_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ARGB_CONTROL_BINDING \ - (gst_argb_control_binding_get_type()) -#define GST_ARGB_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ARGB_CONTROL_BINDING,GstARGBControlBinding)) -#define GST_ARGB_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ARGB_CONTROL_BINDING,GstARGBControlBindingClass)) -#define GST_IS_ARGB_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ARGB_CONTROL_BINDING)) -#define GST_IS_ARGB_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ARGB_CONTROL_BINDING)) -#define GST_ARGB_CONTROL_BINDING_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstARGBControlBindingClass)) - -typedef struct _GstARGBControlBinding GstARGBControlBinding; -typedef struct _GstARGBControlBindingClass GstARGBControlBindingClass; - -/** - * GstARGBControlBinding: - * @name: name of the property of this binding - * - * The instance structure of #GstARGBControlBinding. - */ -struct _GstARGBControlBinding { - GstControlBinding parent; - - /*< private >*/ - GstControlSource *cs_a; /* GstControlSources for this property */ - GstControlSource *cs_r; - GstControlSource *cs_g; - GstControlSource *cs_b; - - GValue cur_value; - guint32 last_value; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstARGBControlBindingClass: - * @parent_class: Parent class - * @convert: Class method to convert control-values - * - * The class structure of #GstARGBControlBinding. - */ - -struct _GstARGBControlBindingClass -{ - GstControlBindingClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_argb_control_binding_get_type (void); - -/* Functions */ - -GstControlBinding * gst_argb_control_binding_new (GstObject * object, const gchar * property_name, - GstControlSource * cs_a, GstControlSource * cs_r, - GstControlSource * cs_g, GstControlSource * cs_b); - -G_END_DECLS - -#endif /* __GST_ARGB_CONTROL_BINDING_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h deleted file mode 100644 index 24ece6d2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Stefan Sauer - * - * gstdirectcontrolbinding.h: Direct attachment for control sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_DIRECT_CONTROL_BINDING_H__ -#define __GST_DIRECT_CONTROL_BINDING_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_DIRECT_CONTROL_BINDING \ - (gst_direct_control_binding_get_type()) -#define GST_DIRECT_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DIRECT_CONTROL_BINDING,GstDirectControlBinding)) -#define GST_DIRECT_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DIRECT_CONTROL_BINDING,GstDirectControlBindingClass)) -#define GST_IS_DIRECT_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DIRECT_CONTROL_BINDING)) -#define GST_IS_DIRECT_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DIRECT_CONTROL_BINDING)) -#define GST_DIRECT_CONTROL_BINDING_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstDirectControlBindingClass)) - -typedef struct _GstDirectControlBinding GstDirectControlBinding; -typedef struct _GstDirectControlBindingClass GstDirectControlBindingClass; - -/** - * GstDirectControlBindingConvertValue: - * @self: the #GstDirectControlBinding instance - * @src_value: the value returned by the cotnrol source - * @dest_value: the target location - * - * Function to map a control-value to the target plain data type. - */ -typedef void (* GstDirectControlBindingConvertValue) (GstDirectControlBinding *self, gdouble src_value, gpointer dest_value); - -/** - * GstDirectControlBindingConvertGValue: - * @self: the #GstDirectControlBinding instance - * @src_value: the value returned by the cotnrol source - * @dest_value: the target GValue - * - * Function to map a control-value to the target GValue. - */ -typedef void (* GstDirectControlBindingConvertGValue) (GstDirectControlBinding *self, gdouble src_value, GValue *dest_value); - -/** - * GstDirectControlBinding: - * @name: name of the property of this binding - * - * The instance structure of #GstDirectControlBinding. - */ -struct _GstDirectControlBinding { - GstControlBinding parent; - - /*< private >*/ - GstControlSource *cs; /* GstControlSource for this property */ - GValue cur_value; - gdouble last_value; - gint byte_size; - - GstDirectControlBindingConvertValue convert_value; - GstDirectControlBindingConvertGValue convert_g_value; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstDirectControlBindingClass: - * @parent_class: Parent class - * @convert: Class method to convert control-values - * - * The class structure of #GstDirectControlBinding. - */ - -struct _GstDirectControlBindingClass -{ - GstControlBindingClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_direct_control_binding_get_type (void); - -/* Functions */ - -GstControlBinding * gst_direct_control_binding_new (GstObject * object, const gchar * property_name, - GstControlSource * cs); -G_END_DECLS - -#endif /* __GST_DIRECT_CONTROL_BINDING_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h deleted file mode 100644 index daf17bd8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h +++ /dev/null @@ -1,97 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * - * gstinterpolationcontrolsource.h: Control source that provides several - * interpolation methods - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_INTERPOLATION_CONTROL_SOURCE_H__ -#define __GST_INTERPOLATION_CONTROL_SOURCE_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_INTERPOLATION_CONTROL_SOURCE \ - (gst_interpolation_control_source_get_type ()) -#define GST_INTERPOLATION_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_INTERPOLATION_CONTROL_SOURCE, GstInterpolationControlSource)) -#define GST_INTERPOLATION_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_INTERPOLATION_CONTROL_SOURCE, GstInterpolationControlSourceClass)) -#define GST_IS_INTERPOLATION_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_INTERPOLATION_CONTROL_SOURCE)) -#define GST_IS_INTERPOLATION_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_INTERPOLATION_CONTROL_SOURCE)) -#define GST_INTERPOLATION_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_INTERPOLATION_CONTROL_SOURCE, GstInterpolationControlSourceClass)) - -#define GST_TYPE_INTERPOLATION_MODE (gst_interpolation_mode_get_type ()) - -typedef struct _GstInterpolationControlSource GstInterpolationControlSource; -typedef struct _GstInterpolationControlSourceClass GstInterpolationControlSourceClass; -typedef struct _GstInterpolationControlSourcePrivate GstInterpolationControlSourcePrivate; - -/** - * GstInterpolationMode: - * @GST_INTERPOLATION_MODE_NONE: steps-like interpolation, default - * @GST_INTERPOLATION_MODE_LINEAR: linear interpolation - * @GST_INTERPOLATION_MODE_CUBIC: cubic interpolation - * - * The various interpolation modes available. - */ -typedef enum -{ - GST_INTERPOLATION_MODE_NONE, - GST_INTERPOLATION_MODE_LINEAR, - GST_INTERPOLATION_MODE_CUBIC -} GstInterpolationMode; - -/** - * GstInterpolationControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstInterpolationControlSource { - GstTimedValueControlSource parent; - - /*< private >*/ - GstInterpolationControlSourcePrivate *priv; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstInterpolationControlSourceClass { - GstTimedValueControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_interpolation_control_source_get_type (void); -GType gst_interpolation_mode_get_type (void); - -/* Functions */ - -GstControlSource * gst_interpolation_control_source_new (void); - -G_END_DECLS - -#endif /* __GST_INTERPOLATION_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h deleted file mode 100644 index 2ce6d842..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * - * gstlfocontrolsource.h: Control source that provides some periodic waveforms - * as control values. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_LFO_CONTROL_SOURCE_H__ -#define __GST_LFO_CONTROL_SOURCE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_LFO_CONTROL_SOURCE \ - (gst_lfo_control_source_get_type ()) -#define GST_LFO_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_LFO_CONTROL_SOURCE, GstLFOControlSource)) -#define GST_LFO_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_LFO_CONTROL_SOURCE, GstLFOControlSourceClass)) -#define GST_IS_LFO_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_LFO_CONTROL_SOURCE)) -#define GST_IS_LFO_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_LFO_CONTROL_SOURCE)) -#define GST_LFO_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_LFO_CONTROL_SOURCE, GstLFOControlSourceClass)) - -#define GST_TYPE_LFO_WAVEFORM (gst_lfo_waveform_get_type ()) - -typedef struct _GstLFOControlSource GstLFOControlSource; -typedef struct _GstLFOControlSourceClass GstLFOControlSourceClass; -typedef struct _GstLFOControlSourcePrivate GstLFOControlSourcePrivate; - -/** - * GstLFOWaveform: - * @GST_LFO_WAVEFORM_SINE: sine waveform - * @GST_LFO_WAVEFORM_SQUARE: square waveform - * @GST_LFO_WAVEFORM_SAW: saw waveform - * @GST_LFO_WAVEFORM_REVERSE_SAW: reverse saw waveform - * @GST_LFO_WAVEFORM_TRIANGLE: triangle waveform - * - * The various waveform modes available. - */ -typedef enum -{ - GST_LFO_WAVEFORM_SINE, - GST_LFO_WAVEFORM_SQUARE, - GST_LFO_WAVEFORM_SAW, - GST_LFO_WAVEFORM_REVERSE_SAW, - GST_LFO_WAVEFORM_TRIANGLE -} GstLFOWaveform; - -/** - * GstLFOControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstLFOControlSource { - GstControlSource parent; - - /* */ - GstLFOControlSourcePrivate *priv; - GMutex lock; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstLFOControlSourceClass { - GstControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_lfo_control_source_get_type (void); -GType gst_lfo_waveform_get_type (void); - -/* Functions */ - -GstControlSource *gst_lfo_control_source_new (void); - -G_END_DECLS - -#endif /* __GST_LFO_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h deleted file mode 100644 index 06577cb3..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h +++ /dev/null @@ -1,133 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * 2011 Stefan Sauer - * - * gsttimedvaluecontrolsource.h: Base class for timeed value based control - * sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TIMED_VALUE_CONTROL_SOURCE_H__ -#define __GST_TIMED_VALUE_CONTROL_SOURCE_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TIMED_VALUE_CONTROL_SOURCE \ - (gst_timed_value_control_source_get_type ()) -#define GST_TIMED_VALUE_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSource)) -#define GST_TIMED_VALUE_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSourceClass)) -#define GST_IS_TIMED_VALUE_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE)) -#define GST_IS_TIMED_VALUE_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE)) -#define GST_TIMED_VALUE_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSourceClass)) - -typedef struct _GstTimedValueControlSource GstTimedValueControlSource; -typedef struct _GstTimedValueControlSourceClass GstTimedValueControlSourceClass; -typedef struct _GstTimedValueControlSourcePrivate GstTimedValueControlSourcePrivate; -typedef struct _GstControlPoint GstControlPoint; - -/** - * GstControlPoint: - * - * a internal structure for value+time and various temporary - * values used for interpolation. This "inherits" from - * GstTimedValue. - */ -struct _GstControlPoint -{ - /* fields from GstTimedValue. DO NOT CHANGE! */ - GstClockTime timestamp; /* timestamp of the value change */ - gdouble value; /* the new value */ - - /* internal fields */ - - /* Caches for the interpolators */ - /* FIXME: we should not have this here already ... */ - union { - struct { - gdouble h; - gdouble z; - } cubic; - } cache; - -}; - -/** - * GstTimedValueControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstTimedValueControlSource { - GstControlSource parent; - - /*< protected >*/ - GMutex lock; - - GSequence *values; /* List of GstControlPoint */ - gint nvalues; /* Number of control points */ - gboolean valid_cache; - - /*< private >*/ - GstTimedValueControlSourcePrivate *priv; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTimedValueControlSourceClass { - GstControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_TIMED_VALUE_CONTROL_SOURCE_LOCK(o) \ - g_mutex_lock(&((GstTimedValueControlSource *)o)->lock) -#define GST_TIMED_VALUE_CONTROL_SOURCE_UNLOCK(o) \ - g_mutex_unlock(&((GstTimedValueControlSource *)o)->lock) - -GType gst_timed_value_control_source_get_type (void); - -/* Functions */ - -GSequenceIter * gst_timed_value_control_source_find_control_point_iter ( - GstTimedValueControlSource * self, - GstClockTime timestamp); - -gboolean gst_timed_value_control_source_set (GstTimedValueControlSource * self, - GstClockTime timestamp, - const gdouble value); -gboolean gst_timed_value_control_source_set_from_list (GstTimedValueControlSource * self, - const GSList * timedvalues); -gboolean gst_timed_value_control_source_unset (GstTimedValueControlSource * self, - GstClockTime timestamp); -void gst_timed_value_control_source_unset_all (GstTimedValueControlSource *self); -GList * gst_timed_value_control_source_get_all (GstTimedValueControlSource * self); -gint gst_timed_value_control_source_get_count (GstTimedValueControlSource * self); -void gst_timed_value_control_invalidate_cache (GstTimedValueControlSource * self); - -G_END_DECLS - -#endif /* __GST_TIMED_VALUE_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h deleted file mode 100644 index 1f1f1326..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h +++ /dev/null @@ -1,83 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * 2011 Stefan Sauer - * - * gsttriggercontrolsource.h: Control source that provides some values at time- - * stamps - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TRIGGER_CONTROL_SOURCE_H__ -#define __GST_TRIGGER_CONTROL_SOURCE_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TRIGGER_CONTROL_SOURCE \ - (gst_trigger_control_source_get_type ()) -#define GST_TRIGGER_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TRIGGER_CONTROL_SOURCE, GstTriggerControlSource)) -#define GST_TRIGGER_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_TRIGGER_CONTROL_SOURCE, GstTriggerControlSourceClass)) -#define GST_IS_TRIGGER_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TRIGGER_CONTROL_SOURCE)) -#define GST_IS_TRIGGER_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_TRIGGER_CONTROL_SOURCE)) -#define GST_TRIGGER_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_TRIGGER_CONTROL_SOURCE, GstTriggerControlSourceClass)) - -#define GST_TYPE_TRIGGER_WAVEFORM (gst_trigger_waveform_get_type ()) - -typedef struct _GstTriggerControlSource GstTriggerControlSource; -typedef struct _GstTriggerControlSourceClass GstTriggerControlSourceClass; -typedef struct _GstTriggerControlSourcePrivate GstTriggerControlSourcePrivate; - -/** - * GstTriggerControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstTriggerControlSource { - GstTimedValueControlSource parent; - - /*< private >*/ - GstTriggerControlSourcePrivate *priv; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTriggerControlSourceClass { - GstTimedValueControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_trigger_control_source_get_type (void); - -/* Functions */ - -GstControlSource *gst_trigger_control_source_new (void); - -G_END_DECLS - -#endif /* __GST_TRIGGER_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfft.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfft.h deleted file mode 100644 index 9071b1c8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfft.h +++ /dev/null @@ -1,53 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include - -#ifndef __GST_FFT_H__ -#define __GST_FFT_H__ - -G_BEGIN_DECLS - -/** - * GstFFTWindow: - * @GST_FFT_WINDOW_RECTANGULAR: Rectangular window - * @GST_FFT_WINDOW_HAMMING: Hamming window - * @GST_FFT_WINDOW_HANN: Hann (sometimes also called Hanning) window - * @GST_FFT_WINDOW_BARTLETT: Bartlett window - * @GST_FFT_WINDOW_BLACKMAN: Blackman window - * - * The various window functions available. - */ -typedef enum -{ - GST_FFT_WINDOW_RECTANGULAR, - GST_FFT_WINDOW_HAMMING, - GST_FFT_WINDOW_HANN, - GST_FFT_WINDOW_BARTLETT, - GST_FFT_WINDOW_BLACKMAN -} GstFFTWindow; - -/* Functions */ - -gint gst_fft_next_fast_length (gint n) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __GST_FFT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf32.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf32.h deleted file mode 100644 index 60bf98c0..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf32.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_F32_H__ -#define __GST_FFT_F32_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTF32 GstFFTF32; -typedef struct _GstFFTF32Complex GstFFTF32Complex; - -/* Copy of kiss_fft_f32_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTF32Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * 32 bit float. - */ -struct _GstFFTF32Complex -{ - gfloat r; - gfloat i; -}; - -/* Functions */ -GstFFTF32 * gst_fft_f32_new (gint len, gboolean inverse); -void gst_fft_f32_free (GstFFTF32 *self); - -void gst_fft_f32_fft (GstFFTF32 *self, const gfloat *timedata, - GstFFTF32Complex *freqdata); -void gst_fft_f32_inverse_fft (GstFFTF32 *self, const GstFFTF32Complex *freqdata, - gfloat *timedata); - -void gst_fft_f32_window (GstFFTF32 *self, gfloat *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_F32_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf64.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf64.h deleted file mode 100644 index 782bd8b7..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstfftf64.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_F64_H__ -#define __GST_FFT_F64_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTF64 GstFFTF64; -typedef struct _GstFFTF64Complex GstFFTF64Complex; - -/* Copy of kiss_fft_f64_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTF64Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * 64 bit float. - */ -struct _GstFFTF64Complex -{ - gdouble r; - gdouble i; -}; - -/* Functions */ -GstFFTF64 * gst_fft_f64_new (gint len, gboolean inverse); -void gst_fft_f64_free (GstFFTF64 *self); - -void gst_fft_f64_fft (GstFFTF64 *self, const gdouble *timedata, - GstFFTF64Complex *freqdata); -void gst_fft_f64_inverse_fft (GstFFTF64 *self, const GstFFTF64Complex *freqdata, - gdouble *timedata); - -void gst_fft_f64_window (GstFFTF64 *self, gdouble *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_F64_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts16.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts16.h deleted file mode 100644 index 4f94bb01..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts16.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_S16_H__ -#define __GST_FFT_S16_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTS16 GstFFTS16; -typedef struct _GstFFTS16Complex GstFFTS16Complex; - -/* Copy of kiss_fft_s16_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTS16Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * signed 16 bit integers. - */ -struct _GstFFTS16Complex -{ - gint16 r; - gint16 i; -}; - -/* Functions */ -GstFFTS16 * gst_fft_s16_new (gint len, gboolean inverse); -void gst_fft_s16_free (GstFFTS16 *self); - -void gst_fft_s16_fft (GstFFTS16 *self, const gint16 *timedata, - GstFFTS16Complex *freqdata); -void gst_fft_s16_inverse_fft (GstFFTS16 *self, const GstFFTS16Complex *freqdata, - gint16 *timedata); - -void gst_fft_s16_window (GstFFTS16 *self, gint16 *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_S16_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts32.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts32.h deleted file mode 100644 index 99d7815d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/fft/gstffts32.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_S32_H__ -#define __GST_FFT_S32_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTS32 GstFFTS32; -typedef struct _GstFFTS32Complex GstFFTS32Complex; - -/* Copy of kiss_fft_s32_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTS32Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * signed 32 bit integers. - */ -struct _GstFFTS32Complex -{ - gint32 r; - gint32 i; -}; - -/* Functions */ -GstFFTS32 * gst_fft_s32_new (gint len, gboolean inverse); -void gst_fft_s32_free (GstFFTS32 *self); - -void gst_fft_s32_fft (GstFFTS32 *self, const gint32 *timedata, - GstFFTS32Complex *freqdata); -void gst_fft_s32_inverse_fft (GstFFTS32 *self, const GstFFTS32Complex *freqdata, - gint32 *timedata); - -void gst_fft_s32_window (GstFFTS32 *self, gint32 *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_S32_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/glib-compat.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/glib-compat.h deleted file mode 100644 index 77943068..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/glib-compat.h +++ /dev/null @@ -1,37 +0,0 @@ -/* GStreamer - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * glib-compat.h: Public GLib compatibility shims - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS file from - * glib-2.8.0 for a list of people on the GLib Team. See the ChangeLog files - * from glib-2.8.0 for a list of changes. These files are distributed with GLib - * at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GST_GLIB_COMPAT_H__ -#define __GST_GLIB_COMPAT_H__ - -G_BEGIN_DECLS - -G_END_DECLS - -#endif /* __GST_GLIB_COMPAT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gst.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gst.h deleted file mode 100644 index 31887583..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gst.h +++ /dev/null @@ -1,108 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gst.h: Main header for GStreamer, apps should include this - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_H__ -#define __GST_H__ - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* API compatibility stuff */ -#include - -G_BEGIN_DECLS - -void gst_init (int *argc, char **argv[]); -gboolean gst_init_check (int *argc, char **argv[], - GError ** err); -gboolean gst_is_initialized (void); -GOptionGroup * gst_init_get_option_group (void); -void gst_deinit (void); - -void gst_version (guint *major, guint *minor, - guint *micro, guint *nano); -gchar * gst_version_string (void); - -gboolean gst_segtrap_is_enabled (void); -void gst_segtrap_set_enabled (gboolean enabled); - -gboolean gst_registry_fork_is_enabled (void); -void gst_registry_fork_set_enabled (gboolean enabled); - -gboolean gst_update_registry (void); - -G_END_DECLS - -#endif /* __GST_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstallocator.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstallocator.h deleted file mode 100644 index f9edd50f..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstallocator.h +++ /dev/null @@ -1,159 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Wim Taymans - * - * gstallocator.h: Header for memory allocation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_ALLOCATOR_H__ -#define __GST_ALLOCATOR_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GstAllocatorPrivate GstAllocatorPrivate; -typedef struct _GstAllocatorClass GstAllocatorClass; - -#define GST_TYPE_ALLOCATOR (gst_allocator_get_type()) -#define GST_IS_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ALLOCATOR)) -#define GST_IS_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ALLOCATOR)) -#define GST_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ALLOCATOR, GstAllocatorClass)) -#define GST_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ALLOCATOR, GstAllocator)) -#define GST_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ALLOCATOR, GstAllocatorClass)) -#define GST_ALLOCATOR_CAST(obj) ((GstAllocator *)(obj)) - -#define GST_TYPE_ALLOCATION_PARAMS (gst_allocation_params_get_type()) -GType gst_allocation_params_get_type(void); - -typedef struct _GstAllocationParams GstAllocationParams; - -/** - * gst_memory_alignment: - * - * The default memory alignment in bytes - 1 - * an alignment of 7 would be the same as what malloc() guarantees. - */ -GST_EXPORT gsize gst_memory_alignment; - -/** - * GST_ALLOCATOR_SYSMEM: - * - * The allocator name for the default system memory allocator - */ -#define GST_ALLOCATOR_SYSMEM "SystemMemory" - -/** - * GstAllocationParams: - * @flags: flags to control allocation - * @align: the desired alignment of the memory - * @prefix: the desired prefix - * @padding: the desired padding - * - * Parameters to control the allocation of memory - */ -struct _GstAllocationParams { - GstMemoryFlags flags; - gsize align; - gsize prefix; - gsize padding; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAllocatorFlags: - * @GST_ALLOCATOR_FLAG_CUSTOM_ALLOC: The allocator has a custom alloc function. - * @GST_ALLOCATOR_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags for allocators. - */ -typedef enum { - GST_ALLOCATOR_FLAG_CUSTOM_ALLOC = (GST_OBJECT_FLAG_LAST << 0), - - GST_ALLOCATOR_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) -} GstAllocatorFlags; - -/** - * GstAllocator: - * @object: parent structure - * @mem_type: the memory type this allocator provides - * @mem_map: the implementation of the GstMemoryMapFunction - * @mem_unmap: the implementation of the GstMemoryUnmapFunction - * @mem_copy: the implementation of the GstMemoryCopyFunction - * @mem_share: the implementation of the GstMemoryShareFunction - * @mem_is_span: the implementation of the GstMemoryIsSpanFunction - * - * The #GstAllocator is used to create new memory. - */ -struct _GstAllocator -{ - GstObject object; - - const gchar *mem_type; - - GstMemoryMapFunction mem_map; - GstMemoryUnmapFunction mem_unmap; - - GstMemoryCopyFunction mem_copy; - GstMemoryShareFunction mem_share; - GstMemoryIsSpanFunction mem_is_span; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; - - GstAllocatorPrivate *priv; -}; - -struct _GstAllocatorClass { - GstObjectClass object_class; - - GstMemory * (*alloc) (GstAllocator *allocator, gsize size, - GstAllocationParams *params); - void (*free) (GstAllocator *allocator, GstMemory *memory); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_allocator_get_type(void); - -/* allocators */ -void gst_allocator_register (const gchar *name, GstAllocator *allocator); -GstAllocator * gst_allocator_find (const gchar *name); -void gst_allocator_set_default (GstAllocator * allocator); - -/* allocation parameters */ -void gst_allocation_params_init (GstAllocationParams *params); -GstAllocationParams * - gst_allocation_params_copy (const GstAllocationParams *params) G_GNUC_MALLOC; -void gst_allocation_params_free (GstAllocationParams *params); - -/* allocating memory blocks */ -GstMemory * gst_allocator_alloc (GstAllocator * allocator, gsize size, - GstAllocationParams *params); -void gst_allocator_free (GstAllocator * allocator, GstMemory *memory); - -GstMemory * gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data, gsize maxsize, - gsize offset, gsize size, gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif /* __GST_ALLOCATOR_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstatomicqueue.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstatomicqueue.h deleted file mode 100644 index af6d693c..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstatomicqueue.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GStreamer - * Copyright (C) 2009-2010 Edward Hervey - * (C) 2011 Wim Taymans - * - * gstatomicqueue.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#ifndef __GST_ATOMIC_QUEUE_H__ -#define __GST_ATOMIC_QUEUE_H__ - -G_BEGIN_DECLS - -#define GST_TYPE_ATOMIC_QUEUE (gst_atomic_queue_get_type()) - -/** - * GstAtomicQueue: - * - * Opaque atomic data queue. - * - * Use the acessor functions to get the stored values. - */ -typedef struct _GstAtomicQueue GstAtomicQueue; - - -GType gst_atomic_queue_get_type (void); - -GstAtomicQueue * gst_atomic_queue_new (guint initial_size) G_GNUC_MALLOC; - -void gst_atomic_queue_ref (GstAtomicQueue * queue); -void gst_atomic_queue_unref (GstAtomicQueue * queue); - -void gst_atomic_queue_push (GstAtomicQueue* queue, gpointer data); -gpointer gst_atomic_queue_pop (GstAtomicQueue* queue); -gpointer gst_atomic_queue_peek (GstAtomicQueue* queue); - -guint gst_atomic_queue_length (GstAtomicQueue * queue); - -G_END_DECLS - -#endif /* __GST_ATOMIC_QUEUE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbin.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbin.h deleted file mode 100644 index 06cbc743..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbin.h +++ /dev/null @@ -1,204 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstbin.h: Header for GstBin container object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BIN_H__ -#define __GST_BIN_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BIN (gst_bin_get_type ()) -#define GST_IS_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_BIN)) -#define GST_IS_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_BIN)) -#define GST_BIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BIN, GstBinClass)) -#define GST_BIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_BIN, GstBin)) -#define GST_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_BIN, GstBinClass)) -#define GST_BIN_CAST(obj) ((GstBin*)(obj)) - -/** - * GstBinFlags: - * @GST_BIN_FLAG_NO_RESYNC: don't resync a state change when elements are - * added or linked in the bin (Since 1.0.5) - * @GST_BIN_FLAG_LAST: the last enum in the series of flags for bins. - * Derived classes can use this as first value in a list of flags. - * - * GstBinFlags are a set of flags specific to bins. Most are set/used - * internally. They can be checked using the GST_OBJECT_FLAG_IS_SET () macro, - * and (un)set using GST_OBJECT_FLAG_SET () and GST_OBJECT_FLAG_UNSET (). - */ -typedef enum { - GST_BIN_FLAG_NO_RESYNC = (GST_ELEMENT_FLAG_LAST << 0), - /* padding */ - GST_BIN_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 5) -} GstBinFlags; - -/** - * GST_BIN_IS_NO_RESYNC: - * @bin: A #GstBin - * - * Check if @bin will resync its state change when elements are added and - * removed. - * - * Since: 1.0.5 - */ -#define GST_BIN_IS_NO_RESYNC(bin) (GST_OBJECT_FLAG_IS_SET(bin,GST_BIN_FLAG_NO_RESYNC)) - -typedef struct _GstBin GstBin; -typedef struct _GstBinClass GstBinClass; -typedef struct _GstBinPrivate GstBinPrivate; - -/** - * GST_BIN_NUMCHILDREN: - * @bin: a #GstBin - * - * Gets the number of children in a bin. - */ -#define GST_BIN_NUMCHILDREN(bin) (GST_BIN_CAST(bin)->numchildren) -/** - * GST_BIN_CHILDREN: - * @bin: a #GstBin - * - * Gets the list with children in a bin. - */ -#define GST_BIN_CHILDREN(bin) (GST_BIN_CAST(bin)->children) -/** - * GST_BIN_CHILDREN_COOKIE: - * @bin: a #GstBin - * - * Gets the children cookie that watches the children list. - */ -#define GST_BIN_CHILDREN_COOKIE(bin) (GST_BIN_CAST(bin)->children_cookie) - -/** - * GstBin: - * @numchildren: the number of children in this bin - * @children: (element-type Gst.Element): the list of children in this bin - * @children_cookie: updated whenever @children changes - * @child_bus: internal bus for handling child messages - * @messages: (element-type Gst.Message): queued and cached messages - * @polling: the bin is currently calculating its state - * @state_dirty: the bin needs to recalculate its state (deprecated) - * @clock_dirty: the bin needs to select a new clock - * @provided_clock: the last clock selected - * @clock_provider: the element that provided @provided_clock - * - * The GstBin base class. Subclasses can access these fields provided - * the LOCK is taken. - */ -struct _GstBin { - GstElement element; - - /*< public >*/ /* with LOCK */ - /* our children, subclass are supposed to update these - * fields to reflect their state with _iterate_*() */ - gint numchildren; - GList *children; - guint32 children_cookie; - - GstBus *child_bus; - GList *messages; - - gboolean polling; - gboolean state_dirty; - - gboolean clock_dirty; - GstClock *provided_clock; - GstElement *clock_provider; - - /*< private >*/ - GstBinPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstBinClass: - * @parent_class: bin parent class - * @add_element: method to add an element to a bin - * @remove_element: method to remove an element from a bin - * @handle_message: method to handle a message from the children - * - * Subclasses can override the @add_element and @remove_element to - * update the list of children in the bin. - * - * The @handle_message method can be overridden to implement custom - * message handling. @handle_message takes ownership of the message, just like - * #gst_element_post_message. - */ -struct _GstBinClass { - GstElementClass parent_class; - - /*< private >*/ - GThreadPool *pool; - - /* signals */ - void (*element_added) (GstBin *bin, GstElement *child); - void (*element_removed) (GstBin *bin, GstElement *child); - - /*< public >*/ - /* virtual methods for subclasses */ - gboolean (*add_element) (GstBin *bin, GstElement *element); - gboolean (*remove_element) (GstBin *bin, GstElement *element); - - void (*handle_message) (GstBin *bin, GstMessage *message); - - /*< private >*/ - /* signal */ - gboolean (*do_latency) (GstBin *bin); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_bin_get_type (void); -GstElement* gst_bin_new (const gchar *name); - -/* add and remove elements from the bin */ -gboolean gst_bin_add (GstBin *bin, GstElement *element); -gboolean gst_bin_remove (GstBin *bin, GstElement *element); - -/* retrieve a single child */ -GstElement* gst_bin_get_by_name (GstBin *bin, const gchar *name); -GstElement* gst_bin_get_by_name_recurse_up (GstBin *bin, const gchar *name); -GstElement* gst_bin_get_by_interface (GstBin *bin, GType iface); - -/* retrieve multiple children */ -GstIterator* gst_bin_iterate_elements (GstBin *bin); -GstIterator* gst_bin_iterate_sorted (GstBin *bin); -GstIterator* gst_bin_iterate_recurse (GstBin *bin); - -GstIterator* gst_bin_iterate_sinks (GstBin *bin); -GstIterator* gst_bin_iterate_sources (GstBin *bin); -GstIterator* gst_bin_iterate_all_by_interface (GstBin *bin, GType iface); - -/* latency */ -gboolean gst_bin_recalculate_latency (GstBin * bin); - - -G_END_DECLS - - -#endif /* __GST_BIN_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbuffer.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbuffer.h deleted file mode 100644 index 49ad3d54..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbuffer.h +++ /dev/null @@ -1,543 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstbuffer.h: Header for GstBuffer object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BUFFER_H__ -#define __GST_BUFFER_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_buffer_type; - -typedef struct _GstBuffer GstBuffer; -typedef struct _GstBufferPool GstBufferPool; - -#define GST_TYPE_BUFFER (_gst_buffer_type) -#define GST_IS_BUFFER(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER)) -#define GST_BUFFER_CAST(obj) ((GstBuffer *)(obj)) -#define GST_BUFFER(obj) (GST_BUFFER_CAST(obj)) - -/** - * GST_BUFFER_FLAGS: - * @buf: a #GstBuffer. - * - * A flags word containing #GstBufferFlag flags set on this buffer. - */ -#define GST_BUFFER_FLAGS(buf) GST_MINI_OBJECT_FLAGS(buf) -/** - * GST_BUFFER_FLAG_IS_SET: - * @buf: a #GstBuffer. - * @flag: the #GstBufferFlag to check. - * - * Gives the status of a specific flag on a buffer. - */ -#define GST_BUFFER_FLAG_IS_SET(buf,flag) GST_MINI_OBJECT_FLAG_IS_SET (buf, flag) -/** - * GST_BUFFER_FLAG_SET: - * @buf: a #GstBuffer. - * @flag: the #GstBufferFlag to set. - * - * Sets a buffer flag on a buffer. - */ -#define GST_BUFFER_FLAG_SET(buf,flag) GST_MINI_OBJECT_FLAG_SET (buf, flag) -/** - * GST_BUFFER_FLAG_UNSET: - * @buf: a #GstBuffer. - * @flag: the #GstBufferFlag to clear. - * - * Clears a buffer flag. - */ -#define GST_BUFFER_FLAG_UNSET(buf,flag) GST_MINI_OBJECT_FLAG_UNSET (buf, flag) - - -/** - * GST_BUFFER_PTS: - * @buf: a #GstBuffer.: - * - * The presentation timestamp (pts) in nanoseconds (as a #GstClockTime) - * of the data in the buffer. This is the timestamp when the media should be - * presented to the user. - * Value will be %GST_CLOCK_TIME_NONE if the pts is unknown. - */ -#define GST_BUFFER_PTS(buf) (GST_BUFFER_CAST(buf)->pts) -/** - * GST_BUFFER_DTS: - * @buf: a #GstBuffer.: - * - * The decoding timestamp (dts) in nanoseconds (as a #GstClockTime) - * of the data in the buffer. This is the timestamp when the media should be - * decoded or processed otherwise. - * Value will be %GST_CLOCK_TIME_NONE if the dts is unknown. - */ -#define GST_BUFFER_DTS(buf) (GST_BUFFER_CAST(buf)->dts) -/** - * GST_BUFFER_DURATION: - * @buf: a #GstBuffer. - * - * The duration in nanoseconds (as a #GstClockTime) of the data in the buffer. - * Value will be %GST_CLOCK_TIME_NONE if the duration is unknown. - */ -#define GST_BUFFER_DURATION(buf) (GST_BUFFER_CAST(buf)->duration) -/** - * GST_BUFFER_OFFSET: - * @buf: a #GstBuffer. - * - * The offset in the source file of the beginning of this buffer. - */ -#define GST_BUFFER_OFFSET(buf) (GST_BUFFER_CAST(buf)->offset) -/** - * GST_BUFFER_OFFSET_END: - * @buf: a #GstBuffer. - * - * The offset in the source file of the end of this buffer. - */ -#define GST_BUFFER_OFFSET_END(buf) (GST_BUFFER_CAST(buf)->offset_end) - -/** - * GST_BUFFER_OFFSET_NONE: - * - * Constant for no-offset return results. - */ -#define GST_BUFFER_OFFSET_NONE ((guint64)-1) - -/** - * GST_BUFFER_DURATION_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the duration is known. - */ -#define GST_BUFFER_DURATION_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) -/** - * GST_BUFFER_PTS_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the pts is known. - */ -#define GST_BUFFER_PTS_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buffer))) -/** - * GST_BUFFER_DTS_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the dts is known. - */ -#define GST_BUFFER_DTS_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (buffer))) -/** - * GST_BUFFER_OFFSET_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the start offset is known. - */ -#define GST_BUFFER_OFFSET_IS_VALID(buffer) (GST_BUFFER_OFFSET (buffer) != GST_BUFFER_OFFSET_NONE) -/** - * GST_BUFFER_OFFSET_END_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the end offset is known. - */ -#define GST_BUFFER_OFFSET_END_IS_VALID(buffer) (GST_BUFFER_OFFSET_END (buffer) != GST_BUFFER_OFFSET_NONE) -/** - * GST_BUFFER_IS_DISCONT: - * @buffer: a #GstBuffer - * - * Tests if the buffer marks a discontinuity in the stream. - */ -#define GST_BUFFER_IS_DISCONT(buffer) (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) - -/** - * GstBufferFlags: - * @GST_BUFFER_FLAG_LIVE: the buffer is live data and should be discarded in - * the PAUSED state. - * @GST_BUFFER_FLAG_DECODE_ONLY: the buffer contains data that should be dropped - * because it will be clipped against the segment - * boundaries or because it does not contain data - * that should be shown to the user. - * @GST_BUFFER_FLAG_DISCONT: the buffer marks a data discontinuity in the stream. - * This typically occurs after a seek or a dropped buffer - * from a live or network source. - * @GST_BUFFER_FLAG_RESYNC: the buffer timestamps might have a discontinuity - * and this buffer is a good point to resynchronize. - * @GST_BUFFER_FLAG_CORRUPTED: the buffer data is corrupted. - * @GST_BUFFER_FLAG_MARKER: the buffer contains a media specific marker. for - * video this is typically the end of a frame boundary, for audio - * this is usually the start of a talkspurt. - * @GST_BUFFER_FLAG_HEADER: the buffer contains header information that is - * needed to decode the following data. - * @GST_BUFFER_FLAG_GAP: the buffer has been created to fill a gap in the - * stream and contains media neutral data (elements can - * switch to optimized code path that ignores the buffer - * content). - * @GST_BUFFER_FLAG_DROPPABLE: the buffer can be dropped without breaking the - * stream, for example to reduce bandwidth. - * @GST_BUFFER_FLAG_DELTA_UNIT: this unit cannot be decoded independently. - * @GST_BUFFER_FLAG_LAST: additional media specific flags can be added starting from - * this flag. - * - * A set of buffer flags used to describe properties of a #GstBuffer. - */ -typedef enum { - GST_BUFFER_FLAG_LIVE = (GST_MINI_OBJECT_FLAG_LAST << 0), - GST_BUFFER_FLAG_DECODE_ONLY = (GST_MINI_OBJECT_FLAG_LAST << 1), - GST_BUFFER_FLAG_DISCONT = (GST_MINI_OBJECT_FLAG_LAST << 2), - GST_BUFFER_FLAG_RESYNC = (GST_MINI_OBJECT_FLAG_LAST << 3), - GST_BUFFER_FLAG_CORRUPTED = (GST_MINI_OBJECT_FLAG_LAST << 4), - GST_BUFFER_FLAG_MARKER = (GST_MINI_OBJECT_FLAG_LAST << 5), - GST_BUFFER_FLAG_HEADER = (GST_MINI_OBJECT_FLAG_LAST << 6), - GST_BUFFER_FLAG_GAP = (GST_MINI_OBJECT_FLAG_LAST << 7), - GST_BUFFER_FLAG_DROPPABLE = (GST_MINI_OBJECT_FLAG_LAST << 8), - GST_BUFFER_FLAG_DELTA_UNIT = (GST_MINI_OBJECT_FLAG_LAST << 9), - - GST_BUFFER_FLAG_LAST = (GST_MINI_OBJECT_FLAG_LAST << 16) -} GstBufferFlags; - -/** - * GstBuffer: - * @mini_object: the parent structure - * @pool: pointer to the pool owner of the buffer - * @pts: presentation timestamp of the buffer, can be #GST_CLOCK_TIME_NONE when the - * pts is not known or relevant. The pts contains the timestamp when the - * media should be presented to the user. - * @dts: decoding timestamp of the buffer, can be #GST_CLOCK_TIME_NONE when the - * dts is not known or relevant. The dts contains the timestamp when the - * media should be processed. - * @duration: duration in time of the buffer data, can be #GST_CLOCK_TIME_NONE - * when the duration is not known or relevant. - * @offset: a media specific offset for the buffer data. - * For video frames, this is the frame number of this buffer. - * For audio samples, this is the offset of the first sample in this buffer. - * For file data or compressed data this is the byte offset of the first - * byte in this buffer. - * @offset_end: the last offset contained in this buffer. It has the same - * format as @offset. - * - * The structure of a #GstBuffer. Use the associated macros to access the public - * variables. - */ -struct _GstBuffer { - GstMiniObject mini_object; - - /*< public >*/ /* with COW */ - GstBufferPool *pool; - - /* timestamp */ - GstClockTime pts; - GstClockTime dts; - GstClockTime duration; - - /* media specific offset */ - guint64 offset; - guint64 offset_end; -}; - -GType gst_buffer_get_type (void); - -/* allocation */ -GstBuffer * gst_buffer_new (void); -GstBuffer * gst_buffer_new_allocate (GstAllocator * allocator, gsize size, - GstAllocationParams * params); -GstBuffer * gst_buffer_new_wrapped_full (GstMemoryFlags flags, gpointer data, gsize maxsize, - gsize offset, gsize size, gpointer user_data, - GDestroyNotify notify); -GstBuffer * gst_buffer_new_wrapped (gpointer data, gsize size); - -/* memory blocks */ -guint gst_buffer_n_memory (GstBuffer *buffer); -void gst_buffer_insert_memory (GstBuffer *buffer, gint idx, GstMemory *mem); -void gst_buffer_replace_memory_range (GstBuffer *buffer, guint idx, gint length, GstMemory *mem); -GstMemory * gst_buffer_peek_memory (GstBuffer *buffer, guint idx); -GstMemory * gst_buffer_get_memory_range (GstBuffer *buffer, guint idx, gint length); -void gst_buffer_remove_memory_range (GstBuffer *buffer, guint idx, gint length); - -void gst_buffer_prepend_memory (GstBuffer *buffer, GstMemory *mem); -void gst_buffer_append_memory (GstBuffer *buffer, GstMemory *mem); -void gst_buffer_replace_memory (GstBuffer *buffer, guint idx, GstMemory *mem); -void gst_buffer_replace_all_memory (GstBuffer *buffer, GstMemory *mem); -GstMemory * gst_buffer_get_memory (GstBuffer *buffer, guint idx); -GstMemory * gst_buffer_get_all_memory (GstBuffer *buffer); -void gst_buffer_remove_memory (GstBuffer *buffer, guint idx); -void gst_buffer_remove_all_memory (GstBuffer *buffer); - -gboolean gst_buffer_find_memory (GstBuffer *buffer, gsize offset, gsize size, - guint *idx, guint *length, gsize *skip); - -gsize gst_buffer_fill (GstBuffer *buffer, gsize offset, - gconstpointer src, gsize size); -gsize gst_buffer_extract (GstBuffer *buffer, gsize offset, - gpointer dest, gsize size); -gint gst_buffer_memcmp (GstBuffer *buffer, gsize offset, - gconstpointer mem, gsize size); -gsize gst_buffer_memset (GstBuffer *buffer, gsize offset, - guint8 val, gsize size); - -gsize gst_buffer_get_sizes_range (GstBuffer *buffer, guint idx, gint length, - gsize *offset, gsize *maxsize); -void gst_buffer_resize_range (GstBuffer *buffer, guint idx, gint length, - gssize offset, gssize size); - -gsize gst_buffer_get_sizes (GstBuffer *buffer, gsize *offset, gsize *maxsize); -gsize gst_buffer_get_size (GstBuffer *buffer); -void gst_buffer_resize (GstBuffer *buffer, gssize offset, gssize size); -void gst_buffer_set_size (GstBuffer *buffer, gssize size); - -gboolean gst_buffer_map_range (GstBuffer *buffer, guint idx, gint length, - GstMapInfo *info, GstMapFlags flags); -gboolean gst_buffer_map (GstBuffer *buffer, GstMapInfo *info, GstMapFlags flags); - -void gst_buffer_unmap (GstBuffer *buffer, GstMapInfo *info); - - -/* refcounting */ -/** - * gst_buffer_ref: - * @buf: a #GstBuffer. - * - * Increases the refcount of the given buffer by one. - * - * Note that the refcount affects the writeability - * of @buf and its metadata, see gst_buffer_is_writable(). - * It is important to note that keeping additional references to - * GstBuffer instances can potentially increase the number - * of memcpy operations in a pipeline. - * - * Returns: (transfer full): @buf - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBuffer * gst_buffer_ref (GstBuffer * buf); -#endif - -static inline GstBuffer * -gst_buffer_ref (GstBuffer * buf) -{ - return (GstBuffer *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (buf)); -} - -/** - * gst_buffer_unref: - * @buf: (transfer full): a #GstBuffer. - * - * Decreases the refcount of the buffer. If the refcount reaches 0, the buffer - * with the associated metadata and memory will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_buffer_unref (GstBuffer * buf); -#endif - -static inline void -gst_buffer_unref (GstBuffer * buf) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (buf)); -} - -/* copy buffer */ -/** - * gst_buffer_copy: - * @buf: a #GstBuffer. - * - * Create a copy of the given buffer. This will also make a newly allocated - * copy of the data the source buffer contains. - * - * Returns: (transfer full): a new copy of @buf. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBuffer * gst_buffer_copy (const GstBuffer * buf); -#endif - -static inline GstBuffer * -gst_buffer_copy (const GstBuffer * buf) -{ - return GST_BUFFER (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (buf))); -} - - -/** - * GstBufferCopyFlags: - * @GST_BUFFER_COPY_NONE: copy nothing - * @GST_BUFFER_COPY_FLAGS: flag indicating that buffer flags should be copied - * @GST_BUFFER_COPY_TIMESTAMPS: flag indicating that buffer pts, dts, - * duration, offset and offset_end should be copied - * @GST_BUFFER_COPY_MEMORY: flag indicating that buffer memory should be copied - * and appended to already existing memory - * @GST_BUFFER_COPY_MERGE: flag indicating that buffer memory should be - * merged - * @GST_BUFFER_COPY_META: flag indicating that buffer meta should be - * copied - * - * A set of flags that can be provided to the gst_buffer_copy_into() - * function to specify which items should be copied. - */ -typedef enum { - GST_BUFFER_COPY_NONE = 0, - GST_BUFFER_COPY_FLAGS = (1 << 0), - GST_BUFFER_COPY_TIMESTAMPS = (1 << 1), - GST_BUFFER_COPY_META = (1 << 2), - GST_BUFFER_COPY_MEMORY = (1 << 3), - GST_BUFFER_COPY_MERGE = (1 << 4) -} GstBufferCopyFlags; - -/** - * GST_BUFFER_COPY_METADATA: - * - * Combination of all possible metadata fields that can be copied with - * gst_buffer_copy_into(). - */ -#define GST_BUFFER_COPY_METADATA (GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS |\ - GST_BUFFER_COPY_META) - -/** - * GST_BUFFER_COPY_ALL: - * - * Combination of all possible fields that can be copied with - * gst_buffer_copy_into(). - */ -#define GST_BUFFER_COPY_ALL ((GstBufferCopyFlags)(GST_BUFFER_COPY_METADATA | GST_BUFFER_COPY_MEMORY)) - -/* copies memory or metadata into newly allocated buffer */ -void gst_buffer_copy_into (GstBuffer *dest, GstBuffer *src, - GstBufferCopyFlags flags, - gsize offset, gsize size); - -/** - * gst_buffer_is_writable: - * @buf: a #GstBuffer - * - * Tests if you can safely write to a buffer's metadata or its memory array. - * It is only safe to change buffer metadata when the current reference is - * writable, i.e. nobody can see the modifications you will make. - */ -#define gst_buffer_is_writable(buf) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (buf)) -/** - * gst_buffer_make_writable: - * @buf: (transfer full): a #GstBuffer - * - * Makes a writable buffer from the given buffer. If the source buffer is - * already writable, this will simply return the same buffer. A copy will - * otherwise be made using gst_buffer_copy(). - * - * Returns: (transfer full): a writable buffer which may or may not be the - * same as @buf - */ -#define gst_buffer_make_writable(buf) GST_BUFFER_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (buf))) - -/** - * gst_buffer_replace: - * @obuf: (inout) (transfer full): pointer to a pointer to a #GstBuffer to be - * replaced. - * @nbuf: (transfer none) (allow-none): pointer to a #GstBuffer that will - * replace the buffer pointed to by @obuf. - * - * Modifies a pointer to a #GstBuffer to point to a different #GstBuffer. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * buffer is unreffed, the new is reffed). - * - * Either @nbuf or the #GstBuffer pointed to by @obuf may be NULL. - * - * Returns: TRUE when @obuf was different from @nbuf. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_buffer_replace (GstBuffer **obuf, GstBuffer *nbuf); -#endif - -static inline gboolean -gst_buffer_replace (GstBuffer **obuf, GstBuffer *nbuf) -{ - return gst_mini_object_replace ((GstMiniObject **) obuf, (GstMiniObject *) nbuf); -} - -/* creating a region */ -GstBuffer* gst_buffer_copy_region (GstBuffer *parent, GstBufferCopyFlags flags, - gsize offset, gsize size); - -/* append two buffers */ -GstBuffer* gst_buffer_append_region (GstBuffer *buf1, GstBuffer *buf2, - gssize offset, gssize size); -GstBuffer* gst_buffer_append (GstBuffer *buf1, GstBuffer *buf2); - -/* metadata */ -#include - -/** - * GstBufferForeachMetaFunc: - * @buffer: a #GstBuffer - * @meta: a pointer to a #GstMeta - * @user_data: user data passed to gst_buffer_foreach_meta() - * - * A function that will be called from gst_buffer_foreach_meta(). The @meta - * field will point to a the reference of the meta. - * - * @buffer should not be modified from this callback. - * - * When this function returns %TRUE, the next meta will be - * returned. When %FALSE is returned, gst_buffer_foreach_meta() will return. - * - * When @meta is set to NULL, the item will be removed from the buffer. - * - * Returns: %FALSE when gst_buffer_foreach_meta() should stop - */ -typedef gboolean (*GstBufferForeachMetaFunc) (GstBuffer *buffer, GstMeta **meta, - gpointer user_data); - -GstMeta * gst_buffer_get_meta (GstBuffer *buffer, GType api); -GstMeta * gst_buffer_add_meta (GstBuffer *buffer, const GstMetaInfo *info, - gpointer params); -gboolean gst_buffer_remove_meta (GstBuffer *buffer, GstMeta *meta); - -GstMeta * gst_buffer_iterate_meta (GstBuffer *buffer, gpointer *state); - -gboolean gst_buffer_foreach_meta (GstBuffer *buffer, - GstBufferForeachMetaFunc func, - gpointer user_data); - -/** - * gst_value_set_buffer: - * @v: a #GValue to receive the data - * @b: (transfer none): a #GstBuffer to assign to the GstValue - * - * Sets @b as the value of @v. Caller retains reference to buffer. - */ -#define gst_value_set_buffer(v,b) g_value_set_boxed((v),(b)) -/** - * gst_value_take_buffer: - * @v: a #GValue to receive the data - * @b: (transfer full): a #GstBuffer to assign to the GstValue - * - * Sets @b as the value of @v. Caller gives away reference to buffer. - */ -#define gst_value_take_buffer(v,b) g_value_take_boxed(v,(b)) -/** - * gst_value_get_buffer: - * @v: a #GValue to query - * - * Receives a #GstBuffer as the value of @v. Does not return a reference to - * the buffer, so the pointer is only valid for as long as the caller owns - * a reference to @v. - * - * Returns: (transfer none): buffer - */ -#define gst_value_get_buffer(v) GST_BUFFER_CAST (g_value_get_boxed(v)) - -G_END_DECLS - -#endif /* __GST_BUFFER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferlist.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferlist.h deleted file mode 100644 index eff9d9ca..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferlist.h +++ /dev/null @@ -1,166 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Axis Communications - * @author Jonas Holmberg - * - * gstbufferlist.h: Header for GstBufferList object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BUFFER_LIST_H__ -#define __GST_BUFFER_LIST_H__ - -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_buffer_list_type; - -#define GST_TYPE_BUFFER_LIST (_gst_buffer_list_type) -#define GST_IS_BUFFER_LIST(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER_LIST)) -#define GST_BUFFER_LIST_CAST(obj) ((GstBufferList *)obj) -#define GST_BUFFER_LIST(obj) (GST_BUFFER_LIST_CAST(obj)) - -typedef struct _GstBufferList GstBufferList; - -/** - * GstBufferListFunc: - * @buffer: pointer the buffer - * @idx: the index of @buffer - * @user_data: user data passed to gst_buffer_list_foreach() - * - * A function that will be called from gst_buffer_list_foreach(). The @buffer - * field will point to a the reference of the buffer at @idx. - * - * When this function returns %TRUE, the next buffer will be - * returned. When %FALSE is returned, gst_buffer_list_foreach() will return. - * - * When @buffer is set to NULL, the item will be removed from the bufferlist. - * When @buffer has been made writable, the new buffer reference can be assigned - * to @buffer. This function is responsible for unreffing the old buffer when - * removing or modifying. - * - * Returns: %FALSE when gst_buffer_list_foreach() should stop - */ -typedef gboolean (*GstBufferListFunc) (GstBuffer **buffer, guint idx, - gpointer user_data); - - -/* refcounting */ -/** - * gst_buffer_list_ref: - * @list: a #GstBufferList - * - * Increases the refcount of the given buffer list by one. - * - * Note that the refcount affects the writeability of @list and its data, see - * gst_buffer_list_make_writable(). It is important to note that keeping - * additional references to GstBufferList instances can potentially increase - * the number of memcpy operations in a pipeline. - * - * Returns: (transfer full): @list - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBufferList * gst_buffer_list_ref (GstBufferList * list); -#endif - -static inline GstBufferList * -gst_buffer_list_ref (GstBufferList * list) -{ - return GST_BUFFER_LIST_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST ( - list))); -} - -/** - * gst_buffer_list_unref: - * @list: (transfer full): a #GstBufferList - * - * Decreases the refcount of the buffer list. If the refcount reaches 0, the - * buffer list will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_buffer_list_unref (GstBufferList * list); -#endif - -static inline void -gst_buffer_list_unref (GstBufferList * list) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (list)); -} - -/* copy */ -/** - * gst_buffer_list_copy: - * @list: a #GstBufferList - * - * Create a shallow copy of the given buffer list. This will make a newly - * allocated copy of the source list with copies of buffer pointers. The - * refcount of buffers pointed to will be increased by one. - * - * Returns: (transfer full): a new copy of @list. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBufferList * gst_buffer_list_copy (const GstBufferList * list); -#endif - -static inline GstBufferList * -gst_buffer_list_copy (const GstBufferList * list) -{ - return GST_BUFFER_LIST_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (list))); -} - -/** - * gst_buffer_list_is_writable: - * @list: a #GstBufferList - * - * Tests if you can safely add buffers and groups into a buffer list. - */ -#define gst_buffer_list_is_writable(list) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (list)) - -/** - * gst_buffer_list_make_writable: - * @list: (transfer full): a #GstBufferList - * - * Makes a writable buffer list from the given buffer list. If the source buffer - * list is already writable, this will simply return the same buffer list. A - * copy will otherwise be made using gst_buffer_list_copy(). - * - * Returns: (transfer full): a writable list, which may or may not be the - * same as @list - */ -#define gst_buffer_list_make_writable(list) GST_BUFFER_LIST_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (list))) - -GType gst_buffer_list_get_type (void); - -/* allocation */ -GstBufferList * gst_buffer_list_new (void) G_GNUC_MALLOC; -GstBufferList * gst_buffer_list_new_sized (guint size) G_GNUC_MALLOC; - -guint gst_buffer_list_length (GstBufferList *list); - -GstBuffer * gst_buffer_list_get (GstBufferList *list, guint idx); -void gst_buffer_list_insert (GstBufferList *list, gint idx, GstBuffer *buffer); -void gst_buffer_list_remove (GstBufferList *list, guint idx, guint length); - -gboolean gst_buffer_list_foreach (GstBufferList *list, - GstBufferListFunc func, - gpointer user_data); - -#define gst_buffer_list_add(l,b) gst_buffer_list_insert((l),-1,(b)); - -G_END_DECLS - -#endif /* __GST_BUFFER_LIST_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferpool.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferpool.h deleted file mode 100644 index b718f995..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbufferpool.h +++ /dev/null @@ -1,208 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 Wim Taymans - * - * gstbufferpool.h: Header for GstBufferPool object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BUFFER_POOL_H__ -#define __GST_BUFFER_POOL_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstBufferPoolPrivate GstBufferPoolPrivate; -typedef struct _GstBufferPoolClass GstBufferPoolClass; - -#define GST_TYPE_BUFFER_POOL (gst_buffer_pool_get_type()) -#define GST_IS_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_BUFFER_POOL)) -#define GST_IS_BUFFER_POOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_BUFFER_POOL)) -#define GST_BUFFER_POOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BUFFER_POOL, GstBufferPoolClass)) -#define GST_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_BUFFER_POOL, GstBufferPool)) -#define GST_BUFFER_POOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_BUFFER_POOL, GstBufferPoolClass)) -#define GST_BUFFER_POOL_CAST(obj) ((GstBufferPool *)(obj)) - -/** - * GstBufferPoolAcquireFlags: - * @GST_BUFFER_POOL_ACQUIRE_FLAG_NONE: no flags - * @GST_BUFFER_POOL_ACQUIRE_FLAG_KEY_UNIT: buffer is keyframe - * @GST_BUFFER_POOL_ACQUIRE_FLAG_DONTWAIT: when the bufferpool is empty, acquire_buffer - * will by default block until a buffer is released into the pool again. Setting - * this flag makes acquire_buffer return #GST_FLOW_EOS instead of blocking. - * @GST_BUFFER_POOL_ACQUIRE_FLAG_DISCONT: buffer is discont - * @GST_BUFFER_POOL_ACQUIRE_FLAG_LAST: last flag, subclasses can use private flags - * starting from this value. - * - * Additional flags to control the allocation of a buffer - */ -typedef enum { - GST_BUFFER_POOL_ACQUIRE_FLAG_NONE = 0, - GST_BUFFER_POOL_ACQUIRE_FLAG_KEY_UNIT = (1 << 0), - GST_BUFFER_POOL_ACQUIRE_FLAG_DONTWAIT = (1 << 1), - GST_BUFFER_POOL_ACQUIRE_FLAG_DISCONT = (1 << 2), - GST_BUFFER_POOL_ACQUIRE_FLAG_LAST = (1 << 16), -} GstBufferPoolAcquireFlags; - -typedef struct _GstBufferPoolAcquireParams GstBufferPoolAcquireParams; - -/** - * GstBufferPoolAcquireParams: - * @format: the format of @start and @stop - * @start: the start position - * @stop: the stop position - * @flags: additional flags - * - * Parameters passed to the gst_buffer_pool_acquire_buffer() function to control the - * allocation of the buffer. - * - * The default implementation ignores the @start and @stop members but other - * implementations can use this extra information to decide what buffer to - * return. - */ -struct _GstBufferPoolAcquireParams { - GstFormat format; - gint64 start; - gint64 stop; - GstBufferPoolAcquireFlags flags; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GST_BUFFER_POOL_IS_FLUSHING: - * @pool: a GstBufferPool - * - * Check if the bufferpool is flushing. Subclasses might want to check the - * state of the pool in the acquire function. - */ -#define GST_BUFFER_POOL_IS_FLUSHING(pool) (g_atomic_int_get (&pool->flushing)) - -/** - * GstBufferPool: - * @object: the parent structure - * - * The structure of a #GstBufferPool. Use the associated macros to access the public - * variables. - */ -struct _GstBufferPool { - GstObject object; - - /*< protected >*/ - gint flushing; - - /*< private >*/ - GstBufferPoolPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstBufferPoolClass: - * @object_class: Object parent class - * @get_options: get a list of options supported by this pool - * @set_config: apply the bufferpool configuration. The default configuration - * will parse the default config parameters - * @start: start the bufferpool. The default implementation will preallocate - * min-buffers buffers and put them in the queue - * @stop: stop the bufferpool. the default implementation will free the - * preallocated buffers. This function is called when all the buffers are - * returned to the pool. - * @acquire_buffer: get a new buffer from the pool. The default implementation - * will take a buffer from the queue and optionally wait for a buffer to - * be released when there are no buffers available. - * @alloc_buffer: allocate a buffer. the default implementation allocates - * buffers from the configured memory allocator and with the configured - * parameters. All metadata that is present on the allocated buffer will - * be marked as #GST_META_FLAG_POOLED and #GST_META_FLAG_LOCKED and will - * not be removed from the buffer in @reset_buffer. - * @reset_buffer: reset the buffer to its state when it was freshly allocated. - * The default implementation will clear the flags, timestamps and - * will remove the metadata without the #GST_META_FLAG_POOLED flag (even - * the metadata with #GST_META_FLAG_LOCKED). - * @release_buffer: release a buffer back in the pool. The default - * implementation will put the buffer back in the queue and notify any - * blocking acquire_buffer calls. - * @free_buffer: free a buffer. The default implementation unrefs the buffer. - * - * The GstBufferPool class. - */ -struct _GstBufferPoolClass { - GstObjectClass object_class; - - /* vmethods */ - const gchar ** (*get_options) (GstBufferPool *pool); - gboolean (*set_config) (GstBufferPool *pool, GstStructure *config); - - gboolean (*start) (GstBufferPool *pool); - gboolean (*stop) (GstBufferPool *pool); - - GstFlowReturn (*acquire_buffer) (GstBufferPool *pool, GstBuffer **buffer, - GstBufferPoolAcquireParams *params); - GstFlowReturn (*alloc_buffer) (GstBufferPool *pool, GstBuffer **buffer, - GstBufferPoolAcquireParams *params); - void (*reset_buffer) (GstBufferPool *pool, GstBuffer *buffer); - void (*release_buffer) (GstBufferPool *pool, GstBuffer *buffer); - void (*free_buffer) (GstBufferPool *pool, GstBuffer *buffer); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_buffer_pool_get_type (void); - -/* allocation */ -GstBufferPool * gst_buffer_pool_new (void); - -/* state management */ -gboolean gst_buffer_pool_set_active (GstBufferPool *pool, gboolean active); -gboolean gst_buffer_pool_is_active (GstBufferPool *pool); - -gboolean gst_buffer_pool_set_config (GstBufferPool *pool, GstStructure *config); -GstStructure * gst_buffer_pool_get_config (GstBufferPool *pool); - -const gchar ** gst_buffer_pool_get_options (GstBufferPool *pool); -gboolean gst_buffer_pool_has_option (GstBufferPool *pool, const gchar *option); - -/* helpers for configuring the config structure */ -void gst_buffer_pool_config_set_params (GstStructure *config, GstCaps *caps, - guint size, guint min_buffers, guint max_buffers); -gboolean gst_buffer_pool_config_get_params (GstStructure *config, GstCaps **caps, - guint *size, guint *min_buffers, guint *max_buffers); -void gst_buffer_pool_config_set_allocator (GstStructure *config, GstAllocator *allocator, - const GstAllocationParams *params); -gboolean gst_buffer_pool_config_get_allocator (GstStructure *config, GstAllocator **allocator, - GstAllocationParams *params); - -/* options */ -guint gst_buffer_pool_config_n_options (GstStructure *config); -void gst_buffer_pool_config_add_option (GstStructure *config, const gchar *option); -const gchar * gst_buffer_pool_config_get_option (GstStructure *config, guint index); -gboolean gst_buffer_pool_config_has_option (GstStructure *config, const gchar *option); - -/* buffer management */ -GstFlowReturn gst_buffer_pool_acquire_buffer (GstBufferPool *pool, GstBuffer **buffer, - GstBufferPoolAcquireParams *params); -void gst_buffer_pool_release_buffer (GstBufferPool *pool, GstBuffer *buffer); - -G_END_DECLS - -#endif /* __GST_BUFFER_POOL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbus.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbus.h deleted file mode 100644 index ed05ddba..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstbus.h +++ /dev/null @@ -1,183 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Wim Taymans - * - * gstbus.h: Header for GstBus subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BUS_H__ -#define __GST_BUS_H__ - -typedef struct _GstBus GstBus; -typedef struct _GstBusPrivate GstBusPrivate; -typedef struct _GstBusClass GstBusClass; - -#include -#include - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -#define GST_TYPE_BUS (gst_bus_get_type ()) -#define GST_BUS(bus) (G_TYPE_CHECK_INSTANCE_CAST ((bus), GST_TYPE_BUS, GstBus)) -#define GST_IS_BUS(bus) (G_TYPE_CHECK_INSTANCE_TYPE ((bus), GST_TYPE_BUS)) -#define GST_BUS_CLASS(bclass) (G_TYPE_CHECK_CLASS_CAST ((bclass), GST_TYPE_BUS, GstBusClass)) -#define GST_IS_BUS_CLASS(bclass) (G_TYPE_CHECK_CLASS_TYPE ((bclass), GST_TYPE_BUS)) -#define GST_BUS_GET_CLASS(bus) (G_TYPE_INSTANCE_GET_CLASS ((bus), GST_TYPE_BUS, GstBusClass)) -#define GST_BUS_CAST(bus) ((GstBus*)(bus)) - -/** - * GstBusFlags: - * @GST_BUS_FLUSHING: The bus is currently dropping all messages - * @GST_BUS_FLAG_LAST: offset to define more flags - * - * The standard flags that a bus may have. - */ -typedef enum { - GST_BUS_FLUSHING = (GST_OBJECT_FLAG_LAST << 0), - /* padding */ - GST_BUS_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 1) -} GstBusFlags; - -/** - * GstBusSyncReply: - * @GST_BUS_DROP: drop the message - * @GST_BUS_PASS: pass the message to the async queue - * @GST_BUS_ASYNC: pass message to async queue, continue if message is handled - * - * The result values for a GstBusSyncHandler. - */ -typedef enum -{ - GST_BUS_DROP = 0, - GST_BUS_PASS = 1, - GST_BUS_ASYNC = 2 -} GstBusSyncReply; - -/** - * GstBusSyncHandler: - * @bus: the #GstBus that sent the message - * @message: the #GstMessage - * @user_data: user data that has been given, when registering the handler - * - * Handler will be invoked synchronously, when a new message has been injected - * into the bus. This function is mostly used internally. Only one sync handler - * can be attached to a given bus. - * - * If the handler returns GST_BUS_DROP, it should unref the message, else the - * message should not be unreffed by the sync handler. - * - * Returns: #GstBusSyncReply stating what to do with the message - */ -typedef GstBusSyncReply (*GstBusSyncHandler) (GstBus * bus, GstMessage * message, gpointer user_data); - -/** - * GstBusFunc: - * @bus: the #GstBus that sent the message - * @message: the #GstMessage - * @user_data: user data that has been given, when registering the handler - * - * Specifies the type of function passed to gst_bus_add_watch() or - * gst_bus_add_watch_full(), which is called from the mainloop when a message - * is available on the bus. - * - * The message passed to the function will be unreffed after execution of this - * function so it should not be freed in the function. - * - * Note that this function is used as a GSourceFunc which means that returning - * FALSE will remove the GSource from the mainloop. - * - * Returns: %FALSE if the event source should be removed. - */ -typedef gboolean (*GstBusFunc) (GstBus * bus, GstMessage * message, gpointer user_data); - -/** - * GstBus: - * - * The opaque #GstBus data structure. - */ -struct _GstBus -{ - GstObject object; - - /*< private >*/ - GstBusPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstBusClass -{ - GstObjectClass parent_class; - - /* signals */ - void (*message) (GstBus *bus, GstMessage *message); - void (*sync_message) (GstBus *bus, GstMessage *message); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_bus_get_type (void); - -GstBus* gst_bus_new (void); - -gboolean gst_bus_post (GstBus * bus, GstMessage * message); - -gboolean gst_bus_have_pending (GstBus * bus); -GstMessage * gst_bus_peek (GstBus * bus); -GstMessage * gst_bus_pop (GstBus * bus); -GstMessage * gst_bus_pop_filtered (GstBus * bus, GstMessageType types); -GstMessage * gst_bus_timed_pop (GstBus * bus, GstClockTime timeout); -GstMessage * gst_bus_timed_pop_filtered (GstBus * bus, GstClockTime timeout, GstMessageType types); -void gst_bus_set_flushing (GstBus * bus, gboolean flushing); - -/* synchronous dispatching */ -void gst_bus_set_sync_handler (GstBus * bus, GstBusSyncHandler func, - gpointer user_data, GDestroyNotify notify); -/* GSource based dispatching */ -GSource * gst_bus_create_watch (GstBus * bus); -guint gst_bus_add_watch_full (GstBus * bus, - gint priority, - GstBusFunc func, - gpointer user_data, - GDestroyNotify notify); -guint gst_bus_add_watch (GstBus * bus, - GstBusFunc func, - gpointer user_data); - -/* polling the bus */ -GstMessage* gst_bus_poll (GstBus *bus, GstMessageType events, - GstClockTime timeout); - -/* signal based dispatching helper functions. */ -gboolean gst_bus_async_signal_func (GstBus *bus, GstMessage *message, - gpointer data); -GstBusSyncReply gst_bus_sync_signal_handler (GstBus *bus, GstMessage *message, - gpointer data); - -/* convenience api to add/remove a gsource that emits the async signals */ -void gst_bus_add_signal_watch (GstBus * bus); -void gst_bus_add_signal_watch_full (GstBus * bus, gint priority); -void gst_bus_remove_signal_watch (GstBus * bus); - -void gst_bus_enable_sync_message_emission (GstBus * bus); -void gst_bus_disable_sync_message_emission (GstBus * bus); - -G_END_DECLS - -#endif /* __GST_BUS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcaps.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcaps.h deleted file mode 100644 index 923199bd..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcaps.h +++ /dev/null @@ -1,447 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 David A. Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CAPS_H__ -#define __GST_CAPS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_caps_type; - -#define GST_TYPE_CAPS (_gst_caps_type) -#define GST_IS_CAPS(obj) (GST_IS_MINI_OBJECT_TYPE((obj), GST_TYPE_CAPS)) -#define GST_CAPS_CAST(obj) ((GstCaps*)(obj)) -#define GST_CAPS(obj) (GST_CAPS_CAST(obj)) - -#define GST_TYPE_STATIC_CAPS (gst_static_caps_get_type()) - -/** - * GstCapsFlags: - * @GST_CAPS_FLAG_ANY: Caps has no specific content, but can contain - * anything. - * - * Extra flags for a caps. - */ -typedef enum { - GST_CAPS_FLAG_ANY = (GST_MINI_OBJECT_FLAG_LAST << 0) -} GstCapsFlags; - -/** - * GstCapsIntersectMode: - * @GST_CAPS_INTERSECT_ZIG_ZAG : Zig-zags over both caps. - * @GST_CAPS_INTERSECT_FIRST : Keeps the first caps order. - * - * Modes of caps intersection - * - * @GST_CAPS_INTERSECT_ZIG_ZAG tries to preserve overall order of both caps - * by iterating on the caps' structures as the following matrix shows: - * |[ - * caps1 - * +------------- - * | 1 2 4 7 - * caps2 | 3 5 8 10 - * | 6 9 11 12 - * ]| - * Used when there is no explicit precedence of one caps over the other. e.g. - * tee's sink pad getcaps function, it will probe its src pad peers' for their - * caps and intersect them with this mode. - * - * @GST_CAPS_INTERSECT_FIRST is useful when an element wants to preserve - * another element's caps priority order when intersecting with its own caps. - * Example: If caps1 is [A, B, C] and caps2 is [E, B, D, A], the result - * would be [A, B], maintaining the first caps priority on the intersection. - */ -typedef enum { - GST_CAPS_INTERSECT_ZIG_ZAG = 0, - GST_CAPS_INTERSECT_FIRST = 1 -} GstCapsIntersectMode; - -/** - * GST_CAPS_ANY: - * - * Means that the element/pad can output 'anything'. Useful for elements - * that output unknown media, such as filesrc. This macro returns a singleton and - * should not be unreffed. - */ -#define GST_CAPS_ANY _gst_caps_any -/** - * GST_CAPS_NONE: - * - * The opposite of %GST_CAPS_ANY: it means that the pad/element outputs an - * undefined media type that can not be detected. This macro returns a singleton - * and should not be unreffed. - */ -#define GST_CAPS_NONE _gst_caps_none - -/** - * GST_STATIC_CAPS_ANY: - * - * Creates a new #GstCaps static caps that matches anything. - * This can be used in pad templates. - */ -#define GST_STATIC_CAPS_ANY GST_STATIC_CAPS("ANY") -/** - * GST_STATIC_CAPS_NONE: - * - * Creates a new #GstCaps static caps that matches nothing. - * This can be used in pad templates. - */ -#define GST_STATIC_CAPS_NONE GST_STATIC_CAPS("NONE") - -/** - * GST_CAPS_IS_SIMPLE: - * @caps: the #GstCaps instance to check - * - * Convenience macro that checks if the number of structures in the given caps - * is exactly one. - */ -#define GST_CAPS_IS_SIMPLE(caps) (gst_caps_get_size(caps) == 1) - -/** - * GST_STATIC_CAPS: - * @string: the string describing the caps - * - * Creates a new #GstCaps static caps from an input string. - * This can be used in pad templates. - */ -#define GST_STATIC_CAPS(string) \ -{ \ - /* caps */ NULL, \ - /* string */ string, \ - GST_PADDING_INIT \ -} - -typedef struct _GstCaps GstCaps; -typedef struct _GstStaticCaps GstStaticCaps; - -GST_EXPORT GstCaps * _gst_caps_any; -GST_EXPORT GstCaps * _gst_caps_none; -/** - * GST_CAPS_FLAGS: - * @caps: a #GstCaps. - * - * A flags word containing #GstCapsFlags flags set on this caps. - */ -#define GST_CAPS_FLAGS(caps) GST_MINI_OBJECT_FLAGS(caps) - -/* refcount */ -/** - * GST_CAPS_REFCOUNT: - * @caps: a #GstCaps - * - * Get access to the reference count field of the caps - */ -#define GST_CAPS_REFCOUNT(caps) GST_MINI_OBJECT_REFCOUNT(caps) -/** - * GST_CAPS_REFCOUNT_VALUE: - * @caps: a #GstCaps - * - * Get the reference count value of the caps. - */ -#define GST_CAPS_REFCOUNT_VALUE(caps) GST_MINI_OBJECT_REFCOUNT_VALUE(caps) - -/** - * GST_CAPS_FLAG_IS_SET: - * @caps: a #GstCaps. - * @flag: the #GstCapsFlags to check. - * - * Gives the status of a specific flag on a caps. - */ -#define GST_CAPS_FLAG_IS_SET(caps,flag) GST_MINI_OBJECT_FLAG_IS_SET (caps, flag) -/** - * GST_CAPS_FLAG_SET: - * @caps: a #GstCaps. - * @flag: the #GstCapsFlags to set. - * - * Sets a caps flag on a caps. - */ -#define GST_CAPS_FLAG_SET(caps,flag) GST_MINI_OBJECT_FLAG_SET (caps, flag) -/** - * GST_CAPS_FLAG_UNSET: - * @caps: a #GstCaps. - * @flag: the #GstCapsFlags to clear. - * - * Clears a caps flag. - */ -#define GST_CAPS_FLAG_UNSET(caps,flag) GST_MINI_OBJECT_FLAG_UNSET (caps, flag) - -/* refcounting */ -/** - * gst_caps_ref: - * @caps: the #GstCaps to reference - * - * Add a reference to a #GstCaps object. - * - * From this point on, until the caller calls gst_caps_unref() or - * gst_caps_make_writable(), it is guaranteed that the caps object will not - * change. This means its structures won't change, etc. To use a #GstCaps - * object, you must always have a refcount on it -- either the one made - * implicitly by e.g. gst_caps_new_simple(), or via taking one explicitly with - * this function. - * - * Returns: the same #GstCaps object. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstCaps * gst_caps_ref (GstCaps * caps); -#endif - -static inline GstCaps * -gst_caps_ref (GstCaps * caps) -{ - return (GstCaps *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (caps)); -} - -/** - * gst_caps_unref: - * @caps: a #GstCaps. - * - * Unref a #GstCaps and and free all its structures and the - * structures' values when the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_caps_unref (GstCaps * caps); -#endif - -static inline void -gst_caps_unref (GstCaps * caps) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (caps)); -} - -/* copy caps */ -/** - * gst_caps_copy: - * @caps: a #GstCaps. - * - * Creates a new #GstCaps as a copy of the old @caps. The new caps will have a - * refcount of 1, owned by the caller. The structures are copied as well. - * - * Note that this function is the semantic equivalent of a gst_caps_ref() - * followed by a gst_caps_make_writable(). If you only want to hold on to a - * reference to the data, you should use gst_caps_ref(). - * - * When you are finished with the caps, call gst_caps_unref() on it. - * - * Returns: the new #GstCaps - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstCaps * gst_caps_copy (const GstCaps * caps); -#endif - -static inline GstCaps * -gst_caps_copy (const GstCaps * caps) -{ - return GST_CAPS (gst_mini_object_copy (GST_MINI_OBJECT_CAST (caps))); -} - -/** - * gst_caps_is_writable: - * @caps: a #GstCaps - * - * Tests if you can safely modify @caps. It is only safe to modify caps when - * there is only one owner of the caps - ie, the object is writable. - */ -#define gst_caps_is_writable(caps) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (caps)) - -/** - * gst_caps_make_writable: - * @caps: (transfer full): a #GstCaps - * - * Returns a writable copy of @caps. - * - * If there is only one reference count on @caps, the caller must be the owner, - * and so this function will return the caps object unchanged. If on the other - * hand there is more than one reference on the object, a new caps object will - * be returned. The caller's reference on @caps will be removed, and instead the - * caller will own a reference to the returned object. - * - * In short, this function unrefs the caps in the argument and refs the caps - * that it returns. Don't access the argument after calling this function. See - * also: gst_caps_ref(). - * - * Returns: (transfer full): a writable caps which may or may not be the - * same as @caps - */ -#define gst_caps_make_writable(caps) GST_CAPS_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (caps))) - -/** - * gst_caps_replace: - * @old_caps: (inout) (transfer full): pointer to a pointer to a #GstCaps to be - * replaced. - * @new_caps: (transfer none) (allow-none): pointer to a #GstCaps that will - * replace the caps pointed to by @ocaps. - * - * Modifies a pointer to a #GstCaps to point to a different #GstCaps. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * caps is unreffed, the new is reffed). - * - * Either @ncaps or the #GstCaps pointed to by @ocaps may be NULL. - * - * Returns: TRUE if @new_caps was different from @old_caps - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_caps_replace (GstCaps **old_caps, GstCaps *new_caps); -#endif - -static inline gboolean -gst_caps_replace (GstCaps **old_caps, GstCaps *new_caps) -{ - return gst_mini_object_replace ((GstMiniObject **) old_caps, (GstMiniObject *) new_caps); -} - -/** - * gst_caps_take: - * @old_caps: (inout) (transfer full): pointer to a pointer to a #GstCaps to be - * replaced. - * @new_caps: (transfer full) (allow-none): pointer to a #GstCaps that will - * replace the caps pointed to by @ocaps. - * - * Modifies a pointer to a #GstCaps to point to a different #GstCaps. This - * function is similar to gst_caps_replace() except that it takes ownership - * of @new_caps. - * - * Returns: TRUE if @new_caps was different from @old_caps - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_caps_take (GstCaps **old_caps, GstCaps *new_caps); -#endif - -static inline gboolean -gst_caps_take (GstCaps **old_caps, GstCaps *new_caps) -{ - return gst_mini_object_take ((GstMiniObject **) old_caps, (GstMiniObject *) new_caps); -} - -/** - * GstCaps: - * @mini_object: the parent type - * - * Object describing media types. - */ -struct _GstCaps { - GstMiniObject mini_object; -}; - -/** - * GstStaticCaps: - * @caps: the cached #GstCaps - * @string: a string describing a caps - * - * Datastructure to initialize #GstCaps from a string description usually - * used in conjunction with GST_STATIC_CAPS() and gst_static_caps_get() to - * instantiate a #GstCaps. - */ -struct _GstStaticCaps { - /*< public >*/ - GstCaps *caps; - const char *string; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_caps_get_type (void); - -GstCaps * gst_caps_new_empty (void); -GstCaps * gst_caps_new_any (void); -GstCaps * gst_caps_new_empty_simple (const char *media_type) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_new_simple (const char *media_type, - const char *fieldname, - ...) G_GNUC_NULL_TERMINATED G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_new_full (GstStructure *struct1, - ...) G_GNUC_NULL_TERMINATED G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_new_full_valist (GstStructure *structure, - va_list var_args) G_GNUC_WARN_UNUSED_RESULT; - -GType gst_static_caps_get_type (void); -GstCaps * gst_static_caps_get (GstStaticCaps *static_caps); -void gst_static_caps_cleanup (GstStaticCaps *static_caps); - -/* manipulation */ -void gst_caps_append (GstCaps *caps1, - GstCaps *caps2); -void gst_caps_append_structure (GstCaps *caps, - GstStructure *structure); -void gst_caps_remove_structure (GstCaps *caps, guint idx); -GstCaps * gst_caps_merge (GstCaps *caps1, - GstCaps *caps2) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_merge_structure (GstCaps *caps, - GstStructure *structure) G_GNUC_WARN_UNUSED_RESULT; -guint gst_caps_get_size (const GstCaps *caps); -GstStructure * gst_caps_get_structure (const GstCaps *caps, - guint index); -GstStructure * gst_caps_steal_structure (GstCaps *caps, - guint index) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_copy_nth (const GstCaps *caps, guint nth) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_truncate (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; -void gst_caps_set_value (GstCaps *caps, - const char *field, - const GValue *value); -void gst_caps_set_simple (GstCaps *caps, - const char *field, ...) G_GNUC_NULL_TERMINATED; -void gst_caps_set_simple_valist (GstCaps *caps, - const char *field, - va_list varargs); - -/* tests */ -gboolean gst_caps_is_any (const GstCaps *caps); -gboolean gst_caps_is_empty (const GstCaps *caps); -gboolean gst_caps_is_fixed (const GstCaps *caps); -gboolean gst_caps_is_always_compatible (const GstCaps *caps1, - const GstCaps *caps2); -gboolean gst_caps_is_subset (const GstCaps *subset, - const GstCaps *superset); -gboolean gst_caps_is_subset_structure (const GstCaps *caps, - const GstStructure *structure); -gboolean gst_caps_is_equal (const GstCaps *caps1, - const GstCaps *caps2); -gboolean gst_caps_is_equal_fixed (const GstCaps *caps1, - const GstCaps *caps2); -gboolean gst_caps_can_intersect (const GstCaps * caps1, - const GstCaps * caps2); -gboolean gst_caps_is_strictly_equal (const GstCaps *caps1, - const GstCaps *caps2); - - -/* operations */ -GstCaps * gst_caps_intersect (GstCaps *caps1, - GstCaps *caps2) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_intersect_full (GstCaps *caps1, - GstCaps *caps2, - GstCapsIntersectMode mode) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_subtract (GstCaps *minuend, - GstCaps *subtrahend) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_normalize (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_simplify (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; - -GstCaps * gst_caps_fixate (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; - -/* utility */ -gchar * gst_caps_to_string (const GstCaps *caps) G_GNUC_MALLOC; -GstCaps * gst_caps_from_string (const gchar *string) G_GNUC_WARN_UNUSED_RESULT; - -G_END_DECLS - -#endif /* __GST_CAPS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstchildproxy.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstchildproxy.h deleted file mode 100644 index 1614d4b1..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstchildproxy.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Stefan Kost - * - * gstchildproxy.h: interface header for multi child elements - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CHILD_PROXY_H__ -#define __GST_CHILD_PROXY_H__ - -#include -#include - -G_BEGIN_DECLS - - -#define GST_TYPE_CHILD_PROXY (gst_child_proxy_get_type ()) -#define GST_CHILD_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CHILD_PROXY, GstChildProxy)) -#define GST_IS_CHILD_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CHILD_PROXY)) -#define GST_CHILD_PROXY_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_CHILD_PROXY, GstChildProxyInterface)) - -/** - * GstChildProxy: - * - * Opaque #GstChildProxy data structure. - */ -typedef struct _GstChildProxy GstChildProxy; /* dummy object */ -typedef struct _GstChildProxyInterface GstChildProxyInterface; - -/** - * GstChildProxyInterface: - * @parent: parent interface type. - * @get_child_by_name: virtual method to fetch the child by name - * @get_child_by_index: virtual method to fetch the child by index - * @get_children_count: virtual method to get the children count - * - * #GstChildProxy interface. - */ -struct _GstChildProxyInterface -{ - GTypeInterface parent; - - /* methods */ - GObject * (*get_child_by_name) (GstChildProxy * parent, const gchar * name); - GObject * (*get_child_by_index) (GstChildProxy * parent, guint index); - guint (*get_children_count) (GstChildProxy * parent); - /*< private >*/ - /* signals */ - void (*child_added) (GstChildProxy * parent, GObject * child, const gchar * name); - void (*child_removed) (GstChildProxy * parent, GObject * child, const gchar * name); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_child_proxy_get_type (void); - -GObject * gst_child_proxy_get_child_by_name (GstChildProxy * parent, const gchar * name); - -guint gst_child_proxy_get_children_count (GstChildProxy * parent); -GObject * gst_child_proxy_get_child_by_index (GstChildProxy * parent, guint index); - -gboolean gst_child_proxy_lookup (GstChildProxy *object, const gchar *name, - GObject **target, GParamSpec **pspec); - -void gst_child_proxy_get_property (GstChildProxy * object, const gchar *name, - GValue *value); -void gst_child_proxy_get_valist (GstChildProxy * object, - const gchar * first_property_name, - va_list var_args); -void gst_child_proxy_get (GstChildProxy * object, - const gchar * first_property_name, - ...) G_GNUC_NULL_TERMINATED; - -void gst_child_proxy_set_property (GstChildProxy * object, const gchar *name, - const GValue *value); -void gst_child_proxy_set_valist (GstChildProxy* object, - const gchar * first_property_name, - va_list var_args); -void gst_child_proxy_set (GstChildProxy * object, - const gchar * first_property_name, - ...) G_GNUC_NULL_TERMINATED; - -void gst_child_proxy_child_added (GstChildProxy * parent, GObject * child, - const gchar *name); -void gst_child_proxy_child_removed (GstChildProxy * parent, GObject * child, - const gchar *name); - -G_END_DECLS - -#endif /* __GST_CHILD_PROXY_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstclock.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstclock.h deleted file mode 100644 index 5d42ce60..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstclock.h +++ /dev/null @@ -1,521 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstclock.h: Header for clock subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CLOCK_H__ -#define __GST_CLOCK_H__ - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -#define GST_TYPE_CLOCK (gst_clock_get_type ()) -#define GST_CLOCK(clock) (G_TYPE_CHECK_INSTANCE_CAST ((clock), GST_TYPE_CLOCK, GstClock)) -#define GST_IS_CLOCK(clock) (G_TYPE_CHECK_INSTANCE_TYPE ((clock), GST_TYPE_CLOCK)) -#define GST_CLOCK_CLASS(cclass) (G_TYPE_CHECK_CLASS_CAST ((cclass), GST_TYPE_CLOCK, GstClockClass)) -#define GST_IS_CLOCK_CLASS(cclass) (G_TYPE_CHECK_CLASS_TYPE ((cclass), GST_TYPE_CLOCK)) -#define GST_CLOCK_GET_CLASS(clock) (G_TYPE_INSTANCE_GET_CLASS ((clock), GST_TYPE_CLOCK, GstClockClass)) -#define GST_CLOCK_CAST(clock) ((GstClock*)(clock)) - -/** - * GstClockTime: - * - * A datatype to hold a time, measured in nanoseconds. - */ -typedef guint64 GstClockTime; - -/** - * GST_TYPE_CLOCK_TIME: - * - * The #GType of a #GstClockTime. - */ -#define GST_TYPE_CLOCK_TIME G_TYPE_UINT64 - -/** - * GstClockTimeDiff: - * - * A datatype to hold a time difference, measured in nanoseconds. - */ -typedef gint64 GstClockTimeDiff; -/** - * GstClockID: - * - * A datatype to hold the handle to an outstanding sync or async clock callback. - */ -typedef gpointer GstClockID; - -/** - * GST_CLOCK_TIME_NONE: - * - * Constant to define an undefined clock time. - * - * Value: 18446744073709551615 - * Type: GstClockTime - */ -#define GST_CLOCK_TIME_NONE ((GstClockTime) -1) -/** - * GST_CLOCK_TIME_IS_VALID: - * @time: clock time to validate - * - * Tests if a given #GstClockTime represents a valid defined time. - */ -#define GST_CLOCK_TIME_IS_VALID(time) (((GstClockTime)(time)) != GST_CLOCK_TIME_NONE) - -/* FIXME: still need to explicitly force types on the defines below */ -/** - * GST_SECOND: - * - * Constant that defines one GStreamer second. - * - * Value: 1000000000 - * Type: GstClockTime - */ -#define GST_SECOND (G_USEC_PER_SEC * G_GINT64_CONSTANT (1000)) -/** - * GST_MSECOND: - * - * Constant that defines one GStreamer millisecond. - * - * Value: 1000000 - * Type: GstClockTime - */ -#define GST_MSECOND (GST_SECOND / G_GINT64_CONSTANT (1000)) -/** - * GST_USECOND: - * - * Constant that defines one GStreamer microsecond. - * - * Value: 1000 - * Type: GstClockTime - */ -#define GST_USECOND (GST_SECOND / G_GINT64_CONSTANT (1000000)) -/** - * GST_NSECOND: - * - * Constant that defines one GStreamer nanosecond - * - * Value: 1 - * Type: GstClockTime - */ -#define GST_NSECOND (GST_SECOND / G_GINT64_CONSTANT (1000000000)) - - -/** - * GST_TIME_AS_SECONDS: - * @time: the time - * - * Convert a #GstClockTime to seconds. - */ -#define GST_TIME_AS_SECONDS(time) ((time) / GST_SECOND) -/** - * GST_TIME_AS_MSECONDS: - * @time: the time - * - * Convert a #GstClockTime to milliseconds (1/1000 of a second). - */ -#define GST_TIME_AS_MSECONDS(time) ((time) / G_GINT64_CONSTANT (1000000)) -/** - * GST_TIME_AS_USECONDS: - * @time: the time - * - * Convert a #GstClockTime to microseconds (1/1000000 of a second). - */ -#define GST_TIME_AS_USECONDS(time) ((time) / G_GINT64_CONSTANT (1000)) -/** - * GST_TIME_AS_NSECONDS: - * @time: the time - * - * Convert a #GstClockTime to nanoseconds (1/1000000000 of a second). - */ -#define GST_TIME_AS_NSECONDS(time) (time) - -/** - * GST_CLOCK_DIFF: - * @s: the first time - * @e: the second time - * - * Calculate a difference between two clock times as a #GstClockTimeDiff. - * The difference is calculated as @e - @s. - */ -#define GST_CLOCK_DIFF(s, e) (GstClockTimeDiff)((e) - (s)) - -/** - * GST_TIMEVAL_TO_TIME: - * @tv: the timeval to convert - * - * Convert a #GTimeVal to a #GstClockTime. - */ -#define GST_TIMEVAL_TO_TIME(tv) (GstClockTime)((tv).tv_sec * GST_SECOND + (tv).tv_usec * GST_USECOND) - -/** - * GST_TIME_TO_TIMEVAL: - * @t: The #GstClockTime to convert - * @tv: The target timeval - * - * Convert a #GstClockTime to a #GTimeVal - * - * on 32-bit systems, a timeval has a range of only 2^32 - 1 seconds, - * which is about 68 years. Expect trouble if you want to schedule stuff - * in your pipeline for 2038. - */ -#define GST_TIME_TO_TIMEVAL(t,tv) \ -G_STMT_START { \ - g_assert ("Value of time " #t " is out of timeval's range" && \ - ((t) / GST_SECOND) < G_MAXLONG); \ - (tv).tv_sec = (glong) (((GstClockTime) (t)) / GST_SECOND); \ - (tv).tv_usec = (glong) ((((GstClockTime) (t)) - \ - ((GstClockTime) (tv).tv_sec) * GST_SECOND) \ - / GST_USECOND); \ -} G_STMT_END - -/** - * GST_TIMESPEC_TO_TIME: - * @ts: the timespec to convert - * - * Convert a struct timespec (see man pselect) to a #GstClockTime. - */ -#define GST_TIMESPEC_TO_TIME(ts) (GstClockTime)((ts).tv_sec * GST_SECOND + (ts).tv_nsec * GST_NSECOND) -/** - * GST_TIME_TO_TIMESPEC: - * @t: The #GstClockTime to convert - * @ts: The target timespec - * - * Convert a #GstClockTime to a struct timespec (see man pselect) - */ -#define GST_TIME_TO_TIMESPEC(t,ts) \ -G_STMT_START { \ - g_assert ("Value of time " #t " is out of timespec's range" && \ - ((t) / GST_SECOND) < G_MAXLONG); \ - (ts).tv_sec = (glong) ((t) / GST_SECOND); \ - (ts).tv_nsec = (glong) (((t) - (ts).tv_sec * GST_SECOND) / GST_NSECOND); \ -} G_STMT_END - -/* timestamp debugging macros */ -/** - * GST_TIME_FORMAT: - * - * A string that can be used in printf-like format strings to display a - * #GstClockTime value in h:m:s format. Use GST_TIME_ARGS() to construct - * the matching arguments. - * - * Example: - * |[ - * printf("%" GST_TIME_FORMAT "\n", GST_TIME_ARGS(ts)); - * ]| - */ -#define GST_TIME_FORMAT "u:%02u:%02u.%09u" -/** - * GST_TIME_ARGS: - * @t: a #GstClockTime - * - * Format @t for the #GST_TIME_FORMAT format string. Note: @t will be - * evaluated more than once. - */ -#define GST_TIME_ARGS(t) \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) (((GstClockTime)(t)) / (GST_SECOND * 60 * 60)) : 99, \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) ((((GstClockTime)(t)) / (GST_SECOND * 60)) % 60) : 99, \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) ((((GstClockTime)(t)) / GST_SECOND) % 60) : 99, \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) (((GstClockTime)(t)) % GST_SECOND) : 999999999 - -typedef struct _GstClockEntry GstClockEntry; -typedef struct _GstClock GstClock; -typedef struct _GstClockClass GstClockClass; -typedef struct _GstClockPrivate GstClockPrivate; - -/* --- prototype for async callbacks --- */ -/** - * GstClockCallback: - * @clock: The clock that triggered the callback - * @time: The time it was triggered - * @id: The #GstClockID that expired - * @user_data: user data passed in the gst_clock_id_wait_async() function - * - * The function prototype of the callback. - * - * Returns: %TRUE or %FALSE (currently unused) - */ -typedef gboolean (*GstClockCallback) (GstClock *clock, GstClockTime time, - GstClockID id, gpointer user_data); -/** - * GstClockReturn: - * @GST_CLOCK_OK: The operation succeeded. - * @GST_CLOCK_EARLY: The operation was scheduled too late. - * @GST_CLOCK_UNSCHEDULED: The clockID was unscheduled - * @GST_CLOCK_BUSY: The ClockID is busy - * @GST_CLOCK_BADTIME: A bad time was provided to a function. - * @GST_CLOCK_ERROR: An error occurred - * @GST_CLOCK_UNSUPPORTED: Operation is not supported - * @GST_CLOCK_DONE: The ClockID is done waiting - * - * The return value of a clock operation. - */ -typedef enum -{ - GST_CLOCK_OK = 0, - GST_CLOCK_EARLY = 1, - GST_CLOCK_UNSCHEDULED = 2, - GST_CLOCK_BUSY = 3, - GST_CLOCK_BADTIME = 4, - GST_CLOCK_ERROR = 5, - GST_CLOCK_UNSUPPORTED = 6, - GST_CLOCK_DONE = 7 -} GstClockReturn; - -/** - * GstClockEntryType: - * @GST_CLOCK_ENTRY_SINGLE: a single shot timeout - * @GST_CLOCK_ENTRY_PERIODIC: a periodic timeout request - * - * The type of the clock entry - */ -typedef enum { - GST_CLOCK_ENTRY_SINGLE, - GST_CLOCK_ENTRY_PERIODIC -} GstClockEntryType; - -/** - * GST_CLOCK_ENTRY: - * @entry: the entry to cast - * - * Cast to a clock entry - */ -#define GST_CLOCK_ENTRY(entry) ((GstClockEntry *)(entry)) -/** - * GST_CLOCK_ENTRY_CLOCK: - * @entry: the entry to query - * - * Get the owner clock of the entry - */ -#define GST_CLOCK_ENTRY_CLOCK(entry) ((entry)->clock) -/** - * GST_CLOCK_ENTRY_TYPE: - * @entry: the entry to query - * - * Get the type of the clock entry - */ -#define GST_CLOCK_ENTRY_TYPE(entry) ((entry)->type) -/** - * GST_CLOCK_ENTRY_TIME: - * @entry: the entry to query - * - * Get the requested time of this entry - */ -#define GST_CLOCK_ENTRY_TIME(entry) ((entry)->time) -/** - * GST_CLOCK_ENTRY_INTERVAL: - * @entry: the entry to query - * - * Get the interval of this periodic entry - */ -#define GST_CLOCK_ENTRY_INTERVAL(entry) ((entry)->interval) -/** - * GST_CLOCK_ENTRY_STATUS: - * @entry: the entry to query - * - * The status of the entry - */ -#define GST_CLOCK_ENTRY_STATUS(entry) ((entry)->status) - -/** - * GstClockEntry: - * @refcount: reference counter (read-only) - * - * All pending timeouts or periodic notifies are converted into - * an entry. - * Note that GstClockEntry should be treated as an opaque structure. It must - * not be extended or allocated using a custom allocator. - */ -struct _GstClockEntry { - gint refcount; - /*< protected >*/ - GstClock *clock; - GstClockEntryType type; - GstClockTime time; - GstClockTime interval; - GstClockReturn status; - GstClockCallback func; - gpointer user_data; - GDestroyNotify destroy_data; - gboolean unscheduled; - gboolean woken_up; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#include - -/** - * GstClockFlags: - * @GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC: clock can do a single sync timeout request - * @GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC: clock can do a single async timeout request - * @GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC: clock can do sync periodic timeout requests - * @GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC: clock can do async periodic timeout callbacks - * @GST_CLOCK_FLAG_CAN_SET_RESOLUTION: clock's resolution can be changed - * @GST_CLOCK_FLAG_CAN_SET_MASTER: clock can be slaved to a master clock - * @GST_CLOCK_FLAG_LAST: subclasses can add additional flags starting from this flag - * - * The capabilities of this clock - */ -typedef enum { - GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC = (GST_OBJECT_FLAG_LAST << 0), - GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC = (GST_OBJECT_FLAG_LAST << 1), - GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC = (GST_OBJECT_FLAG_LAST << 2), - GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC = (GST_OBJECT_FLAG_LAST << 3), - GST_CLOCK_FLAG_CAN_SET_RESOLUTION = (GST_OBJECT_FLAG_LAST << 4), - GST_CLOCK_FLAG_CAN_SET_MASTER = (GST_OBJECT_FLAG_LAST << 5), - /* padding */ - GST_CLOCK_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 8) -} GstClockFlags; - -/** - * GST_CLOCK_FLAGS: - * @clock: the clock to query - * - * Gets the #GstClockFlags clock flags. - */ -#define GST_CLOCK_FLAGS(clock) GST_OBJECT_FLAGS(clock) - -/** - * GstClock: - * - * #GstClock base structure. The values of this structure are - * protected for subclasses, use the methods to use the #GstClock. - */ -struct _GstClock { - GstObject object; - - /*< private >*/ - GstClockPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstClockClass: - * @parent_class: the parent class structure - * @change_resolution: change the resolution of the clock. Not all values might - * be acceptable. The new resolution should be returned. - * @get_resolution: get the resolution of the clock. - * @get_internal_time: get the internal unadjusted time of the clock. - * implement @wait_jitter instead. - * @wait: perform a blocking wait on the given #GstClockEntry and return - * the jitter. - * @wait_async: perform an asynchronous wait for the given #GstClockEntry. - * @unschedule: unblock a blocking or async wait operation. - * - * GStreamer clock class. Override the vmethods to implement the clock - * functionality. - */ -struct _GstClockClass { - GstObjectClass parent_class; - - /*< public >*/ - /* vtable */ - GstClockTime (*change_resolution) (GstClock *clock, - GstClockTime old_resolution, - GstClockTime new_resolution); - GstClockTime (*get_resolution) (GstClock *clock); - - GstClockTime (*get_internal_time) (GstClock *clock); - - /* waiting on an ID */ - GstClockReturn (*wait) (GstClock *clock, GstClockEntry *entry, - GstClockTimeDiff *jitter); - GstClockReturn (*wait_async) (GstClock *clock, GstClockEntry *entry); - void (*unschedule) (GstClock *clock, GstClockEntry *entry); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_clock_get_type (void); - -GstClockTime gst_clock_set_resolution (GstClock *clock, - GstClockTime resolution); -GstClockTime gst_clock_get_resolution (GstClock *clock); - -GstClockTime gst_clock_get_time (GstClock *clock); -void gst_clock_set_calibration (GstClock *clock, GstClockTime internal, - GstClockTime external, - GstClockTime rate_num, - GstClockTime rate_denom); -void gst_clock_get_calibration (GstClock *clock, GstClockTime *internal, - GstClockTime *external, - GstClockTime *rate_num, - GstClockTime *rate_denom); - -/* master/slave clocks */ -gboolean gst_clock_set_master (GstClock *clock, GstClock *master); -GstClock* gst_clock_get_master (GstClock *clock); - -void gst_clock_set_timeout (GstClock *clock, - GstClockTime timeout); -GstClockTime gst_clock_get_timeout (GstClock *clock); - -gboolean gst_clock_add_observation (GstClock *clock, GstClockTime slave, - GstClockTime master, gdouble *r_squared); - - -/* getting and adjusting internal/external time */ -GstClockTime gst_clock_get_internal_time (GstClock *clock); -GstClockTime gst_clock_adjust_unlocked (GstClock *clock, GstClockTime internal); -GstClockTime gst_clock_unadjust_unlocked (GstClock * clock, GstClockTime external); - - -/* creating IDs that can be used to get notifications */ -GstClockID gst_clock_new_single_shot_id (GstClock *clock, - GstClockTime time); -GstClockID gst_clock_new_periodic_id (GstClock *clock, - GstClockTime start_time, - GstClockTime interval); - -/* reference counting */ -GstClockID gst_clock_id_ref (GstClockID id); -void gst_clock_id_unref (GstClockID id); - -/* operations on IDs */ -gint gst_clock_id_compare_func (gconstpointer id1, gconstpointer id2); - -GstClockTime gst_clock_id_get_time (GstClockID id); -GstClockReturn gst_clock_id_wait (GstClockID id, - GstClockTimeDiff *jitter); -GstClockReturn gst_clock_id_wait_async (GstClockID id, - GstClockCallback func, - gpointer user_data, - GDestroyNotify destroy_data); -void gst_clock_id_unschedule (GstClockID id); - -gboolean gst_clock_single_shot_id_reinit (GstClock * clock, - GstClockID id, - GstClockTime time); -gboolean gst_clock_periodic_id_reinit (GstClock * clock, - GstClockID id, - GstClockTime start_time, - GstClockTime interval); - -G_END_DECLS - -#endif /* __GST_CLOCK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcompat.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcompat.h deleted file mode 100644 index cace2e1d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcompat.h +++ /dev/null @@ -1,98 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2004 Wim Taymans - * - * gstcompat.h: backwards compatibility stuff - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/** - * SECTION:gstcompat - * @short_description: Deprecated API entries - * - * Please do not use these in new code. - * These symbols are only available by defining GST_DISABLE_DEPRECATED. - * This can be done in CFLAGS for compiling old code. - */ - -/* API compatibility stuff */ -#ifndef __GSTCOMPAT_H__ -#define __GSTCOMPAT_H__ - -G_BEGIN_DECLS - -/* added to ease the transition to 0.11 */ -#define gst_element_class_set_details_simple gst_element_class_set_metadata - -#define gst_element_factory_get_longname(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_LONGNAME) -#define gst_element_factory_get_klass(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_KLASS) -#define gst_element_factory_get_description(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_DESCRIPTION) -#define gst_element_factory_get_author(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_AUTHOR) -#define gst_element_factory_get_documentation_uri(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_DOC_URI) -#define gst_element_factory_get_icon_name(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_ICON_NAME) - -#define gst_pad_get_caps_reffed(p) gst_pad_get_caps(p) -#define gst_pad_peer_get_caps_reffed(p) gst_pad_peer_get_caps(p) - -#define gst_buffer_new_and_alloc(s) gst_buffer_new_allocate(NULL, s, NULL) - -#define GST_BUFFER_TIMESTAMP GST_BUFFER_PTS -#define GST_BUFFER_TIMESTAMP_IS_VALID GST_BUFFER_PTS_IS_VALID - -#define gst_adapter_prev_timestamp gst_adapter_prev_pts - -#define gst_tag_list_free(taglist) gst_tag_list_unref(taglist) - -static inline gboolean -gst_pad_set_caps (GstPad * pad, GstCaps * caps) -{ - GstEvent *event; - gboolean res = TRUE; - - g_return_val_if_fail (GST_IS_PAD (pad), FALSE); - g_return_val_if_fail (caps != NULL && gst_caps_is_fixed (caps), FALSE); - - event = gst_event_new_caps (caps); - - if (GST_PAD_IS_SRC (pad)) - res = gst_pad_push_event (pad, event); - else - res = gst_pad_send_event (pad, event); - - return res; -} - - -#ifndef GST_DISABLE_DEPRECATED - -#define GST_MESSAGE_DURATION GST_MESSAGE_DURATION_CHANGED -#define gst_message_new_duration(src,fmt,dur) \ - gst_message_new_duration_changed(src) -#define gst_message_parse_duration(msg,fmt,dur) \ -G_STMT_START { \ - GstFormat *p_fmt = fmt; \ - gint64 *p_dur = dur; \ - if (p_fmt) \ - *p_fmt = GST_FORMAT_TIME; \ - if (p_dur) \ - *p_dur = GST_CLOCK_TIME_NONE; \ -} G_STMT_END - -#endif /* not GST_DISABLE_DEPRECATED */ - -G_END_DECLS - -#endif /* __GSTCOMPAT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstconfig.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstconfig.h deleted file mode 100644 index b23beb3e..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstconfig.h +++ /dev/null @@ -1,201 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2004,2005 Wim Taymans - * - * gstconfig.h: GST_DISABLE_* macros for build configuration - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/** - * SECTION:gstconfig - * @short_description: Build configuration options - * - * This describes the configuration options for GStreamer. When building - * GStreamer there are a lot of parts (known internally as "subsystems" ) that - * can be disabled for various reasons. The most common reasons are speed and - * size, which is important because GStreamer is designed to run on embedded - * systems. - * - * If a subsystem is disabled, most of this changes are done in an API - * compatible way, so you don't need to adapt your code in most cases. It is - * never done in an ABI compatible way though. So if you want to disable a - * suybsystem, you have to rebuild all programs depending on GStreamer, too. - * - * If a subsystem is disabled in GStreamer, a value is defined in - * <gst/gst.h>. You can check this if you do subsystem-specific stuff. - * - * Doing subsystem specific things - * - * &hash;ifndef GST_DISABLE_GST_DEBUG - * // do stuff specific to the debugging subsystem - * &hash;endif // GST_DISABLE_GST_DEBUG - * - * - */ - -#ifndef __GST_CONFIG_H__ -#define __GST_CONFIG_H__ - -/* trick gtk-doc into believing these symbols are defined (yes, it's ugly) */ - -#if 0 -#define GST_DISABLE_GST_DEBUG 1 -#define GST_DISABLE_PARSE 1 -#define GST_DISABLE_TRACE 1 -#define GST_DISABLE_ALLOC_TRACE 1 -#define GST_DISABLE_REGISTRY 1 -#define GST_DISABLE_PLUGIN 1 -#define GST_HAVE_GLIB_2_8 1 -#endif - -/***** default padding of structures *****/ -#define GST_PADDING 4 -#define GST_PADDING_INIT { NULL } - -/***** padding for very extensible base classes *****/ -#define GST_PADDING_LARGE 20 - -/***** disabling of subsystems *****/ - -/** - * GST_DISABLE_GST_DEBUG: - * - * Configures the inclusion of the debugging subsystem - */ -/* #undef GST_DISABLE_GST_DEBUG */ - -/** - * GST_DISABLE_PARSE: - * - * Configures the inclusion of the gst-lauch parser - */ -/* #undef GST_DISABLE_PARSE */ - -/** - * GST_DISABLE_TRACE: - * - * Configures the inclusion of a resource tracing facillity - * (seems to be unused) - */ -/* #undef GST_DISABLE_TRACE */ - -/** - * GST_DISABLE_ALLOC_TRACE: - * - * Configures the use of a memory tracer based on the resource tracer - * if TRACE is disabled, ALLOC_TRACE is disabled as well - */ -/* #undef GST_DISABLE_ALLOC_TRACE */ - -/** - * GST_DISABLE_REGISTRY: - * - * Configures the use of the plugin registry. - * If one disables this, required plugins need to be loaded and registered - * manually - */ -/* #undef GST_DISABLE_REGISTRY */ - -/* FIXME: test and document these! */ -/* Configures the use of external plugins */ -/* #undef GST_DISABLE_PLUGIN */ - -/* printf extension format */ -/** - * GST_PTR_FORMAT: - * - * printf format type used to debug GStreamer types. - * This can only be used on types whose size is >= sizeof(gpointer). - */ -#define GST_PTR_FORMAT "p" -/** - * GST_SEGMENT_FORMAT: - * - * printf format type used to debug GStreamer segments. - * This can only be used on pointers to GstSegment structures. - */ -#define GST_SEGMENT_FORMAT "p" - -/* whether or not GST_PTR_FORMAT or GST_SEGMENT_FORMAT are using - * the printf extension mechanism. This is for internal use in our - * header files so we know whether we can use G_GNUC_PRINTF or not */ -#undef GST_USING_PRINTF_EXTENSION - -/* GST_DISABLE_PRINTF_EXTENSION: - * - * Define this to debug your debug log messages and make gcc spew warnings - * if printf format string and arguments don't match up (this is usually - * not the case when libc and gcc are used because printf format warnings - * have to be disabled when the printf extension mechanism is in use). - * - * Note that using this option disables 'pretty logging' of GStreamer objects - * like caps, tags, structures, events, pads etc., so that only their address - * will be printed in the log. - * - * This define only disables use of the special registered printf format - * extensions in the code compiled with it defined. It does not stop - * GStreamer from registering these extensions in the first place if it - * was compiled against a libc that supports this. - * - * (not official API) - */ -/* If GLib is not using the system printf, we can't use the registered - * extensions because the GLib-internal printf won't know how to parse them */ -#if defined(GST_DISABLE_PRINTF_EXTENSION) || !defined(GLIB_USING_SYSTEM_PRINTF) - #undef GST_PTR_FORMAT - #define GST_PTR_FORMAT "p" - #undef GST_SEGMENT_FORMAT - #define GST_SEGMENT_FORMAT "p" - #undef GST_USING_PRINTF_EXTENSION -#endif - -/* whether or not the CPU supports unaligned access */ -#define GST_HAVE_UNALIGNED_ACCESS 1 - -/** - * GST_EXPORT: - * - * Export the given variable from the built shared object. - * - * On Windows, this exports the variable from the DLL. - * On other platforms, this gets defined to "extern". - */ -/** - * GST_PLUGIN_EXPORT: - * - * Export the plugin's definition. - * - * On Windows, this exports the plugin definition from the DLL. - * On other platforms, this gets defined as a no-op. - */ -#ifdef _MSC_VER -#define GST_PLUGIN_EXPORT __declspec(dllexport) extern -#ifdef GST_EXPORTS -#define GST_EXPORT __declspec(dllexport) extern -#else -#define GST_EXPORT __declspec(dllimport) extern -#endif -#else /* not _MSC_VER */ -#define GST_PLUGIN_EXPORT -#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -#define GST_EXPORT extern __attribute__ ((visibility ("default"))) -#else -#define GST_EXPORT extern -#endif -#endif - -#endif /* __GST_CONFIG_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolbinding.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolbinding.h deleted file mode 100644 index a37be1d4..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolbinding.h +++ /dev/null @@ -1,122 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Stefan Sauer - * - * gstcontrolbinding.h: Attachment for control sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CONTROL_BINDING_H__ -#define __GST_CONTROL_BINDING_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_CONTROL_BINDING \ - (gst_control_binding_get_type()) -#define GST_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CONTROL_BINDING,GstControlBinding)) -#define GST_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CONTROL_BINDING,GstControlBindingClass)) -#define GST_IS_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CONTROL_BINDING)) -#define GST_IS_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CONTROL_BINDING)) -#define GST_CONTROL_BINDING_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstControlBindingClass)) - -typedef struct _GstControlBinding GstControlBinding; -typedef struct _GstControlBindingClass GstControlBindingClass; - -/** - * GstControlBindingConvert: - * @binding: the #GstControlBinding instance - * @src_value: the value returned by the cotnrol source - * @dest_value: the target GValue - * - * Function to map a control-value to the target GValue. - */ -typedef void (* GstControlBindingConvert) (GstControlBinding *binding, gdouble src_value, GValue *dest_value); - -/** - * GstControlBinding: - * @name: name of the property of this binding - * @pspec: #GParamSpec for this property - * - * The instance structure of #GstControlBinding. - */ -struct _GstControlBinding { - GstObject parent; - - /*< public >*/ - gchar *name; - GParamSpec *pspec; - - /*< private >*/ - GstObject *object; /* GstObject owning the property - * (== parent when bound) */ - gboolean disabled; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstControlBindingClass: - * @parent_class: Parent class - * - * The class structure of #GstControlBinding. - */ - -struct _GstControlBindingClass -{ - GstObjectClass parent_class; - - /* virtual methods */ - gboolean (* sync_values) (GstControlBinding *binding, GstObject *object, GstClockTime timestamp, GstClockTime last_sync); - GValue * (* get_value) (GstControlBinding *binding, GstClockTime timestamp); - gboolean (* get_value_array) (GstControlBinding *binding, GstClockTime timestamp,GstClockTime interval, guint n_values, gpointer values); - gboolean (* get_g_value_array) (GstControlBinding *binding, GstClockTime timestamp,GstClockTime interval, guint n_values, GValue *values); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_CONTROL_BINDING_PSPEC(cb) (((GstControlBinding *) cb)->pspec) - -GType gst_control_binding_get_type (void); - -/* Functions */ - -gboolean gst_control_binding_sync_values (GstControlBinding * binding, GstObject *object, - GstClockTime timestamp, GstClockTime last_sync); -GValue * gst_control_binding_get_value (GstControlBinding *binding, - GstClockTime timestamp); -gboolean gst_control_binding_get_value_array (GstControlBinding *binding, GstClockTime timestamp, - GstClockTime interval, guint n_values, gpointer values); -gboolean gst_control_binding_get_g_value_array (GstControlBinding *binding, GstClockTime timestamp, - GstClockTime interval, guint n_values, GValue *values); - -void gst_control_binding_set_disabled (GstControlBinding * binding, gboolean disabled); -gboolean gst_control_binding_is_disabled (GstControlBinding * binding); -G_END_DECLS - -#endif /* __GST_CONTROL_BINDING_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolsource.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolsource.h deleted file mode 100644 index e61c59a7..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstcontrolsource.h +++ /dev/null @@ -1,139 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * - * gstcontrolsource.h: Interface declaration for control sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CONTROL_SOURCE_H__ -#define __GST_CONTROL_SOURCE_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_CONTROL_SOURCE \ - (gst_control_source_get_type()) -#define GST_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CONTROL_SOURCE,GstControlSource)) -#define GST_CONTROL_SOURCE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CONTROL_SOURCE,GstControlSourceClass)) -#define GST_IS_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CONTROL_SOURCE)) -#define GST_IS_CONTROL_SOURCE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CONTROL_SOURCE)) -#define GST_CONTROL_SOURCE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstControlSourceClass)) - -typedef struct _GstControlSource GstControlSource; -typedef struct _GstControlSourceClass GstControlSourceClass; -typedef struct _GstTimedValue GstTimedValue; -typedef struct _GstValueArray GstValueArray; - -/** - * GstTimedValue: - * @timestamp: timestamp of the value change - * @value: the corresponding value - * - * Structure for saving a timestamp and a value. - */ -struct _GstTimedValue -{ - GstClockTime timestamp; - gdouble value; -}; - -/** - * GstControlSourceGetValue: - * @self: the #GstControlSource instance - * @timestamp: timestamp for which a value should be calculated - * @value: a #GValue which will be set to the result. It must be initialized to the correct type. - * - * Function for returning a value for a given timestamp. - * - * Returns: %TRUE if the value was successfully calculated. - * - */ -typedef gboolean (* GstControlSourceGetValue) (GstControlSource *self, - GstClockTime timestamp, gdouble *value); - -/** - * GstControlSourceGetValueArray: - * @self: the #GstControlSource instance - * @timestamp: timestamp for which a value should be calculated - * @interval: the time spacing between subsequent values - * @n_values: the number of values - * @values: array to put control-values in - * - * Function for returning an array of values for starting at a given timestamp. - * - * Returns: %TRUE if the values were successfully calculated. - * - */ -typedef gboolean (* GstControlSourceGetValueArray) (GstControlSource *self, - GstClockTime timestamp, GstClockTime interval, guint n_values, gdouble *values); - -/** - * GstControlSource: - * @get_value: Function for returning a value for a given timestamp - * @get_value_array: Function for returning a #GstValueArray for a given timestamp - * - * The instance structure of #GstControlSource. - */ -struct _GstControlSource { - GstObject parent; - - /*< public >*/ - GstControlSourceGetValue get_value; /* Returns the value for a property at a given timestamp */ - GstControlSourceGetValueArray get_value_array; /* Returns values for a property in a given timespan */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstControlSourceClass: - * @parent_class: Parent class - * @bind: Class method for binding the #GstControlSource to a specific GParamSpec - * - * The class structure of #GstControlSource. - */ - -struct _GstControlSourceClass -{ - GstObjectClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_control_source_get_type (void); - -/* Functions */ -gboolean gst_control_source_get_value (GstControlSource *self, GstClockTime timestamp, - gdouble *value); -gboolean gst_control_source_get_value_array (GstControlSource *self, GstClockTime timestamp, - GstClockTime interval, guint n_values, - gdouble *values); -G_END_DECLS - -#endif /* __GST_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdatetime.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdatetime.h deleted file mode 100644 index 500b9cc2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdatetime.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_DATE_TIME_H__ -#define __GST_DATE_TIME_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstDateTime: - * - * Opaque, immutable, refcounted struct that stores date, time and timezone - * information. It currently supports ranges from 0001-01-01 to - * 9999-12-31 in the Gregorian proleptic calendar. - * - * Use the acessor functions to get the stored values. - */ -typedef struct _GstDateTime GstDateTime; - -/* query which fields are set */ - -gboolean gst_date_time_has_year (const GstDateTime * datetime); -gboolean gst_date_time_has_month (const GstDateTime * datetime); -gboolean gst_date_time_has_day (const GstDateTime * datetime); -gboolean gst_date_time_has_time (const GstDateTime * datetime); -gboolean gst_date_time_has_second (const GstDateTime * datetime); - -/* field getters */ - -gint gst_date_time_get_year (const GstDateTime * datetime); -gint gst_date_time_get_month (const GstDateTime * datetime); -gint gst_date_time_get_day (const GstDateTime * datetime); -gint gst_date_time_get_hour (const GstDateTime * datetime); -gint gst_date_time_get_minute (const GstDateTime * datetime); -gint gst_date_time_get_second (const GstDateTime * datetime); -gint gst_date_time_get_microsecond (const GstDateTime * datetime); -gfloat gst_date_time_get_time_zone_offset (const GstDateTime * datetime); - -/* constructors */ - -GstDateTime * gst_date_time_new_from_unix_epoch_local_time (gint64 secs) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_from_unix_epoch_utc (gint64 secs) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_local_time (gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_y (gint year) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_ym (gint year, - gint month) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_ymd (gint year, - gint month, - gint day) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new (gfloat tzoffset, - gint year, gint month, - gint day, gint hour, - gint minute, - gdouble seconds) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_now_local_time (void) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_now_utc (void) G_GNUC_MALLOC; - - -gchar * gst_date_time_to_iso8601_string (GstDateTime * datetime) G_GNUC_MALLOC; -GstDateTime * gst_date_time_new_from_iso8601_string (const gchar * string) G_GNUC_MALLOC; - -GDateTime * gst_date_time_to_g_date_time (GstDateTime * datetime); - -GstDateTime * gst_date_time_new_from_g_date_time (GDateTime * dt); - -/* refcounting */ - -GstDateTime * gst_date_time_ref (GstDateTime * datetime); - -void gst_date_time_unref (GstDateTime * datetime); - -G_END_DECLS - -#endif /* __GST_DATE_TIME_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdebugutils.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdebugutils.h deleted file mode 100644 index 39decd85..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstdebugutils.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Stefan Kost - * - * gstdebugutils.h: debugging and analysis utillities - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GSTDEBUGUTILS_H__ -#define __GSTDEBUGUTILS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstDebugGraphDetails: - * @GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE: show caps-name on edges - * @GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS: show caps-details on edges - * @GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS: show modified parameters on elements - * @GST_DEBUG_GRAPH_SHOW_STATES: show element states - * @GST_DEBUG_GRAPH_SHOW_ALL: show all details - * - * Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE() - * and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(). - */ -typedef enum { - GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE = (1<<0), - GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS = (1<<1), - GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS = (1<<2), - GST_DEBUG_GRAPH_SHOW_STATES = (1<<3), - GST_DEBUG_GRAPH_SHOW_ALL = ((1<<4)-1) -} GstDebugGraphDetails; - - -/********** pipeline graphs **********/ - -void gst_debug_bin_to_dot_file (GstBin *bin, GstDebugGraphDetails details, const gchar *file_name); -void gst_debug_bin_to_dot_file_with_ts (GstBin *bin, GstDebugGraphDetails details, const gchar *file_name); - -#ifndef GST_DISABLE_GST_DEBUG - -/** - * GST_DEBUG_BIN_TO_DOT_FILE: - * @bin: the top-level pipeline that should be analyzed - * @details: details to show in the graph, e.g. #GST_DEBUG_GRAPH_SHOW_ALL or - * one or more other #GstDebugGraphDetails flags. - * @file_name: output base filename (e.g. "myplayer") - * - * To aid debugging applications one can use this method to write out the whole - * network of gstreamer elements that form the pipeline into an dot file. - * This file can be processed with graphviz to get an image. - * - * dot -Tpng -oimage.png graph_lowlevel.dot - * - * - * The macro is only active if gstreamer is configured with - * "--gst-enable-gst-debug" and the environment variable - * GST_DEBUG_DUMP_DOT_DIR is set to a basepath (e.g. /tmp). - */ -#define GST_DEBUG_BIN_TO_DOT_FILE(bin, details, file_name) gst_debug_bin_to_dot_file (bin, details, file_name) - -/** - * GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS: - * @bin: the top-level pipeline that should be analyzed - * @details: details to show in the graph, e.g. #GST_DEBUG_GRAPH_SHOW_ALL or - * one or more other #GstDebugGraphDetails flags. - * @file_name: output base filename (e.g. "myplayer") - * - * This works like GST_DEBUG_BIN_TO_DOT_FILE(), but adds the current timestamp - * to the filename, so that it can be used to take multiple snapshots. - */ -#define GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(bin, details, file_name) gst_debug_bin_to_dot_file_with_ts (bin, details, file_name) - - -#else /* GST_DISABLE_GST_DEBUG */ - - -#define GST_DEBUG_BIN_TO_DOT_FILE(bin, details, file_name) -#define GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(bin, details, file_name) - -#endif /* GST_DISABLE_GST_DEBUG */ - -G_END_DECLS - -#endif /* __GSTDEBUGUTILS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelement.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelement.h deleted file mode 100644 index df71720c..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelement.h +++ /dev/null @@ -1,801 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000,2004 Wim Taymans - * - * gstelement.h: Header for GstElement - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_ELEMENT_H__ -#define __GST_ELEMENT_H__ - -/* gstelement.h and gstelementfactory.h include eachother */ -typedef struct _GstElement GstElement; -typedef struct _GstElementClass GstElementClass; - -/* gstmessage.h needs State */ -/** - * GstState: - * @GST_STATE_VOID_PENDING: no pending state. - * @GST_STATE_NULL : the NULL state or initial state of an element. - * @GST_STATE_READY : the element is ready to go to PAUSED. - * @GST_STATE_PAUSED : the element is PAUSED, it is ready to accept and - * process data. Sink elements however only accept one - * buffer and then block. - * @GST_STATE_PLAYING : the element is PLAYING, the #GstClock is running and - * the data is flowing. - * - * The possible states an element can be in. States can be changed using - * gst_element_set_state() and checked using gst_element_get_state(). - */ -typedef enum { - GST_STATE_VOID_PENDING = 0, - GST_STATE_NULL = 1, - GST_STATE_READY = 2, - GST_STATE_PAUSED = 3, - GST_STATE_PLAYING = 4 -} GstState; - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ELEMENT (gst_element_get_type ()) -#define GST_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ELEMENT)) -#define GST_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ELEMENT)) -#define GST_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ELEMENT, GstElementClass)) -#define GST_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ELEMENT, GstElement)) -#define GST_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ELEMENT, GstElementClass)) -#define GST_ELEMENT_CAST(obj) ((GstElement*)(obj)) - -/** - * GstStateChangeReturn: - * @GST_STATE_CHANGE_FAILURE : the state change failed - * @GST_STATE_CHANGE_SUCCESS : the state change succeeded - * @GST_STATE_CHANGE_ASYNC : the state change will happen asynchronously - * @GST_STATE_CHANGE_NO_PREROLL: the state change succeeded but the element - * cannot produce data in %GST_STATE_PAUSED. - * This typically happens with live sources. - * - * The possible return values from a state change function such as - * gst_element_set_state(). Only @GST_STATE_CHANGE_FAILURE is a real failure. - */ -typedef enum { - GST_STATE_CHANGE_FAILURE = 0, - GST_STATE_CHANGE_SUCCESS = 1, - GST_STATE_CHANGE_ASYNC = 2, - GST_STATE_CHANGE_NO_PREROLL = 3 -} GstStateChangeReturn; - -/* NOTE: this probably should be done with an #ifdef to decide - * whether to safe-cast or to just do the non-checking cast. - */ - -/** - * GST_STATE: - * @elem: a #GstElement to return state for. - * - * This macro returns the current #GstState of the element. - */ -#define GST_STATE(elem) (GST_ELEMENT_CAST(elem)->current_state) - -/** - * GST_STATE_NEXT: - * @elem: a #GstElement to return the next state for. - * - * This macro returns the next #GstState of the element. - */ -#define GST_STATE_NEXT(elem) (GST_ELEMENT_CAST(elem)->next_state) - -/** - * GST_STATE_PENDING: - * @elem: a #GstElement to return the pending state for. - * - * This macro returns the currently pending #GstState of the element. - */ -#define GST_STATE_PENDING(elem) (GST_ELEMENT_CAST(elem)->pending_state) - -/** - * GST_STATE_TARGET: - * @elem: a #GstElement to return the target state for. - * - * This macro returns the target #GstState of the element. - */ -#define GST_STATE_TARGET(elem) (GST_ELEMENT_CAST(elem)->target_state) - -/** - * GST_STATE_RETURN: - * @elem: a #GstElement to return the last state result for. - * - * This macro returns the last #GstStateChangeReturn value. - */ -#define GST_STATE_RETURN(elem) (GST_ELEMENT_CAST(elem)->last_return) - -#define __GST_SIGN(val) ((val) < 0 ? -1 : ((val) > 0 ? 1 : 0)) -/** - * GST_STATE_GET_NEXT: - * @cur: A starting #GstState - * @pending: A target #GstState - * - * Given a current state @cur and a target state @pending, calculate the next (intermediate) - * #GstState. - */ -#define GST_STATE_GET_NEXT(cur,pending) ((GstState)((cur) + __GST_SIGN ((gint)(pending) - (gint)(cur)))) -/** - * GST_STATE_TRANSITION: - * @cur: A current state - * @next: A next state - * - * Given a current state @cur and a next state @next, calculate the associated - * #GstStateChange transition. - */ -#define GST_STATE_TRANSITION(cur,next) ((GstStateChange)(((cur)<<3)|(next))) -/** - * GST_STATE_TRANSITION_CURRENT: - * @trans: A #GstStateChange - * - * Given a state transition @trans, extract the current #GstState. - */ -#define GST_STATE_TRANSITION_CURRENT(trans) ((GstState)((trans)>>3)) -/** - * GST_STATE_TRANSITION_NEXT: - * @trans: A #GstStateChange - * - * Given a state transition @trans, extract the next #GstState. - */ -#define GST_STATE_TRANSITION_NEXT(trans) ((GstState)((trans)&0x7)) - -/** - * GstStateChange: - * @GST_STATE_CHANGE_NULL_TO_READY : state change from NULL to READY. - * - * - * The element must check if the resources it needs are available. Device - * sinks and -sources typically try to probe the device to constrain their - * caps. - * - * - * The element opens the device (in case feature need to be probed). - * - * - * @GST_STATE_CHANGE_READY_TO_PAUSED : state change from READY to PAUSED. - * - * - * The element pads are activated in order to receive data in PAUSED. - * Streaming threads are started. - * - * - * Some elements might need to return %GST_STATE_CHANGE_ASYNC and complete - * the state change when they have enough information. It is a requirement - * for sinks to return %GST_STATE_CHANGE_ASYNC and complete the state change - * when they receive the first buffer or %GST_EVENT_EOS (preroll). - * Sinks also block the dataflow when in PAUSED. - * - * - * A pipeline resets the running_time to 0. - * - * - * Live sources return %GST_STATE_CHANGE_NO_PREROLL and don't generate data. - * - * - * @GST_STATE_CHANGE_PAUSED_TO_PLAYING: state change from PAUSED to PLAYING. - * - * - * Most elements ignore this state change. - * - * - * The pipeline selects a #GstClock and distributes this to all the children - * before setting them to PLAYING. This means that it is only alowed to - * synchronize on the #GstClock in the PLAYING state. - * - * - * The pipeline uses the #GstClock and the running_time to calculate the - * base_time. The base_time is distributed to all children when performing - * the state change. - * - * - * Sink elements stop blocking on the preroll buffer or event and start - * rendering the data. - * - * - * Sinks can post %GST_MESSAGE_EOS in the PLAYING state. It is not allowed - * to post %GST_MESSAGE_EOS when not in the PLAYING state. - * - * - * While streaming in PAUSED or PLAYING elements can create and remove - * sometimes pads. - * - * - * Live sources start generating data and return %GST_STATE_CHANGE_SUCCESS. - * - * - * @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED. - * - * - * Most elements ignore this state change. - * - * - * The pipeline calculates the running_time based on the last selected - * #GstClock and the base_time. It stores this information to continue - * playback when going back to the PLAYING state. - * - * - * Sinks unblock any #GstClock wait calls. - * - * - * When a sink does not have a pending buffer to play, it returns - * %GST_STATE_CHANGE_ASYNC from this state change and completes the state - * change when it receives a new buffer or an %GST_EVENT_EOS. - * - * - * Any queued %GST_MESSAGE_EOS items are removed since they will be reposted - * when going back to the PLAYING state. The EOS messages are queued in - * #GstBin containers. - * - * - * Live sources stop generating data and return %GST_STATE_CHANGE_NO_PREROLL. - * - * - * @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY. - * - * - * Sinks unblock any waits in the preroll. - * - * - * Elements unblock any waits on devices - * - * - * Chain or get_range functions return %GST_FLOW_FLUSHING. - * - * - * The element pads are deactivated so that streaming becomes impossible and - * all streaming threads are stopped. - * - * - * The sink forgets all negotiated formats - * - * - * Elements remove all sometimes pads - * - * - * @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL. - * - * - * Elements close devices - * - * - * Elements reset any internal state. - * - * - * - * These are the different state changes an element goes through. - * %GST_STATE_NULL ⇒ %GST_STATE_PLAYING is called an upwards state change - * and %GST_STATE_PLAYING ⇒ %GST_STATE_NULL a downwards state change. - */ -typedef enum /*< flags=0 >*/ -{ - GST_STATE_CHANGE_NULL_TO_READY = (GST_STATE_NULL<<3) | GST_STATE_READY, - GST_STATE_CHANGE_READY_TO_PAUSED = (GST_STATE_READY<<3) | GST_STATE_PAUSED, - GST_STATE_CHANGE_PAUSED_TO_PLAYING = (GST_STATE_PAUSED<<3) | GST_STATE_PLAYING, - GST_STATE_CHANGE_PLAYING_TO_PAUSED = (GST_STATE_PLAYING<<3) | GST_STATE_PAUSED, - GST_STATE_CHANGE_PAUSED_TO_READY = (GST_STATE_PAUSED<<3) | GST_STATE_READY, - GST_STATE_CHANGE_READY_TO_NULL = (GST_STATE_READY<<3) | GST_STATE_NULL -} GstStateChange; - -/** - * GstElementFlags: - * @GST_ELEMENT_FLAG_LOCKED_STATE: ignore state changes from parent - * @GST_ELEMENT_FLAG_SINK: the element is a sink - * @GST_ELEMENT_FLAG_SOURCE: the element is a source. - * @GST_ELEMENT_FLAG_PROVIDE_CLOCK: the element can provide a clock - * @GST_ELEMENT_FLAG_REQUIRE_CLOCK: the element requires a clock - * @GST_ELEMENT_FLAG_INDEXABLE: the element can use an index - * @GST_ELEMENT_FLAG_LAST: offset to define more flags - * - * The standard flags that an element may have. - */ -typedef enum -{ - GST_ELEMENT_FLAG_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 0), - GST_ELEMENT_FLAG_SINK = (GST_OBJECT_FLAG_LAST << 1), - GST_ELEMENT_FLAG_SOURCE = (GST_OBJECT_FLAG_LAST << 2), - GST_ELEMENT_FLAG_PROVIDE_CLOCK = (GST_OBJECT_FLAG_LAST << 3), - GST_ELEMENT_FLAG_REQUIRE_CLOCK = (GST_OBJECT_FLAG_LAST << 4), - GST_ELEMENT_FLAG_INDEXABLE = (GST_OBJECT_FLAG_LAST << 5), - /* padding */ - GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 10) -} GstElementFlags; - -/** - * GST_ELEMENT_IS_LOCKED_STATE: - * @elem: A #GstElement to query - * - * Check if the element is in the locked state and therefore will ignore state - * changes from its parent object. - */ -#define GST_ELEMENT_IS_LOCKED_STATE(elem) (GST_OBJECT_FLAG_IS_SET(elem,GST_ELEMENT_FLAG_LOCKED_STATE)) - -/** - * GST_ELEMENT_NAME: - * @elem: A #GstElement to query - * - * Gets the name of this element. Use only in core as this is not - * ABI-compatible. Others use gst_element_get_name() - */ -#define GST_ELEMENT_NAME(elem) (GST_OBJECT_NAME(elem)) - -/** - * GST_ELEMENT_PARENT: - * @elem: A #GstElement to query - * - * Get the parent object of this element. - */ -#define GST_ELEMENT_PARENT(elem) (GST_ELEMENT_CAST(GST_OBJECT_PARENT(elem))) - -/** - * GST_ELEMENT_BUS: - * @elem: A #GstElement to query - * - * Get the message bus of this element. - */ -#define GST_ELEMENT_BUS(elem) (GST_ELEMENT_CAST(elem)->bus) - -/** - * GST_ELEMENT_CLOCK: - * @elem: A #GstElement to query - * - * Get the clock of this element - */ -#define GST_ELEMENT_CLOCK(elem) (GST_ELEMENT_CAST(elem)->clock) - -/** - * GST_ELEMENT_PADS: - * @elem: A #GstElement to query - * - * Get the pads of this elements. - */ -#define GST_ELEMENT_PADS(elem) (GST_ELEMENT_CAST(elem)->pads) - -/** - * GST_ELEMENT_START_TIME: - * @elem: a #GstElement to return the start time for. - * - * This macro returns the start_time of the @elem. The start_time is the - * running_time of the pipeline when the element went to PAUSED. - */ -#define GST_ELEMENT_START_TIME(elem) (GST_ELEMENT_CAST(elem)->start_time) - -/** - * GST_ELEMENT_ERROR: - * @el: the element that generates the error - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - parentheses) - * @debug: debugging information for the message (format string and args - enclosed in parentheses) - * - * Utility function that elements can use in case they encountered a fatal - * data processing error. The pipeline will post an error message and the - * application will be requested to stop further media processing. - */ -#define GST_ELEMENT_ERROR(el, domain, code, text, debug) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - if (__txt) \ - GST_WARNING_OBJECT (el, "error: %s", __txt); \ - if (__dbg) \ - GST_WARNING_OBJECT (el, "error: %s", __dbg); \ - gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR, \ - GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ - __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/** - * GST_ELEMENT_WARNING: - * @el: the element that generates the warning - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - parentheses) - * @debug: debugging information for the message (format string and args - enclosed in parentheses) - * - * Utility function that elements can use in case they encountered a non-fatal - * data processing problem. The pipeline will post a warning message and the - * application will be informed. - */ -#define GST_ELEMENT_WARNING(el, domain, code, text, debug) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - if (__txt) \ - GST_WARNING_OBJECT (el, "warning: %s", __txt); \ - if (__dbg) \ - GST_WARNING_OBJECT (el, "warning: %s", __dbg); \ - gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_WARNING, \ - GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ - __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/** - * GST_ELEMENT_INFO: - * @el: the element that generates the information - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - parentheses) - * @debug: debugging information for the message (format string and args - enclosed in parentheses) - * - * Utility function that elements can use in case they want to inform - * the application of something noteworthy that is not an error. - * The pipeline will post a info message and the - * application will be informed. - */ -#define GST_ELEMENT_INFO(el, domain, code, text, debug) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - if (__txt) \ - GST_INFO_OBJECT (el, "info: %s", __txt); \ - if (__dbg) \ - GST_INFO_OBJECT (el, "info: %s", __dbg); \ - gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_INFO, \ - GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ - __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/* the state change mutexes and conds */ -/** - * GST_STATE_GET_LOCK: - * @elem: a #GstElement - * - * Get a reference to the state lock of @elem. - * This lock is used by the core. It is taken while getting or setting - * the state, during state changes, and while finalizing. - */ -#define GST_STATE_GET_LOCK(elem) (&(GST_ELEMENT_CAST(elem)->state_lock)) -/** - * GST_STATE_GET_COND: - * @elem: a #GstElement - * - * Get the conditional used to signal the completion of a state change. - */ -#define GST_STATE_GET_COND(elem) (&GST_ELEMENT_CAST(elem)->state_cond) - -#define GST_STATE_LOCK(elem) g_rec_mutex_lock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_TRYLOCK(elem) g_rec_mutex_trylock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_UNLOCK(elem) g_rec_mutex_unlock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_UNLOCK_FULL(elem) g_rec_mutex_unlock_full(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_LOCK_FULL(elem,t) g_rec_mutex_lock_full(GST_STATE_GET_LOCK(elem), t) -#define GST_STATE_WAIT(elem) g_cond_wait (GST_STATE_GET_COND (elem), \ - GST_OBJECT_GET_LOCK (elem)) -#define GST_STATE_WAIT_UNTIL(elem, end_time) g_cond_wait_until (GST_STATE_GET_COND (elem), \ - GST_OBJECT_GET_LOCK (elem), end_time) -#define GST_STATE_SIGNAL(elem) g_cond_signal (GST_STATE_GET_COND (elem)); -#define GST_STATE_BROADCAST(elem) g_cond_broadcast (GST_STATE_GET_COND (elem)); - -/** - * GstElement: - * @state_lock: Used to serialize execution of gst_element_set_state() - * @state_cond: Used to signal completion of a state change - * @state_cookie: Used to detect concurrent execution of - * gst_element_set_state() and gst_element_get_state() - * @target_state: the target state of an element as set by the application - * @current_state: the current state of an element - * @next_state: the next state of an element, can be #GST_STATE_VOID_PENDING if - * the element is in the correct state. - * @pending_state: the final state the element should go to, can be - * #GST_STATE_VOID_PENDING if the element is in the correct state - * @last_return: the last return value of an element state change - * @bus: the bus of the element. This bus is provided to the element by the - * parent element or the application. A #GstPipeline has a bus of its own. - * @clock: the clock of the element. This clock is usually provided to the - * element by the toplevel #GstPipeline. - * @base_time: the time of the clock right before the element is set to - * PLAYING. Subtracting @base_time from the current clock time in the PLAYING - * state will yield the running_time against the clock. - * @start_time: the running_time of the last PAUSED state - * @numpads: number of pads of the element, includes both source and sink pads. - * @pads: (element-type Gst.Pad): list of pads - * @numsrcpads: number of source pads of the element. - * @srcpads: (element-type Gst.Pad): list of source pads - * @numsinkpads: number of sink pads of the element. - * @sinkpads: (element-type Gst.Pad): list of sink pads - * @pads_cookie: updated whenever the a pad is added or removed - * - * GStreamer element abstract base class. - */ -struct _GstElement -{ - GstObject object; - - /*< public >*/ /* with LOCK */ - GRecMutex state_lock; - - /* element state */ - GCond state_cond; - guint32 state_cookie; - GstState target_state; - GstState current_state; - GstState next_state; - GstState pending_state; - GstStateChangeReturn last_return; - - GstBus *bus; - - /* allocated clock */ - GstClock *clock; - GstClockTimeDiff base_time; /* NULL/READY: 0 - PAUSED: current time - PLAYING: difference to clock */ - GstClockTime start_time; - - /* element pads, these lists can only be iterated while holding - * the LOCK or checking the cookie after each LOCK. */ - guint16 numpads; - GList *pads; - guint16 numsrcpads; - GList *srcpads; - guint16 numsinkpads; - GList *sinkpads; - guint32 pads_cookie; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstElementClass: - * @parent_class: the parent class structure - * @metadata: metadata for elements of this class - * @elementfactory: the #GstElementFactory that creates these elements - * @padtemplates: a #GList of #GstPadTemplate - * @numpadtemplates: the number of padtemplates - * @pad_templ_cookie: changed whenever the padtemplates change - * @request_new_pad: called when a new pad is requested - * @release_pad: called when a request pad is to be released - * @get_state: get the state of the element - * @set_state: set a new state on the element - * @change_state: called by @set_state to perform an incremental state change - * @set_bus: set a #GstBus on the element - * @provide_clock: gets the #GstClock provided by the element - * @set_clock: set the #GstClock on the element - * @send_event: send a #GstEvent to the element - * @query: perform a #GstQuery on the element - * @state_changed: called immediately after a new state was set. - * @post_message: called when a message is posted on the element. Chain up to - * the parent class' handler to have it posted on the bus. - * - * GStreamer element class. Override the vmethods to implement the element - * functionality. - */ -struct _GstElementClass -{ - GstObjectClass parent_class; - - /*< public >*/ - /* the element metadata */ - gpointer metadata; - - /* factory that the element was created from */ - GstElementFactory *elementfactory; - - /* templates for our pads */ - GList *padtemplates; - gint numpadtemplates; - guint32 pad_templ_cookie; - - /*< private >*/ - /* signal callbacks */ - void (*pad_added) (GstElement *element, GstPad *pad); - void (*pad_removed) (GstElement *element, GstPad *pad); - void (*no_more_pads) (GstElement *element); - - /*< public >*/ - /* virtual methods for subclasses */ - - /* request/release pads */ - GstPad* (*request_new_pad) (GstElement *element, GstPadTemplate *templ, - const gchar* name, const GstCaps *caps); - void (*release_pad) (GstElement *element, GstPad *pad); - - /* state changes */ - GstStateChangeReturn (*get_state) (GstElement * element, GstState * state, - GstState * pending, GstClockTime timeout); - GstStateChangeReturn (*set_state) (GstElement *element, GstState state); - GstStateChangeReturn (*change_state) (GstElement *element, GstStateChange transition); - void (*state_changed) (GstElement *element, GstState oldstate, - GstState newstate, GstState pending); - - /* bus */ - void (*set_bus) (GstElement * element, GstBus * bus); - - /* set/get clocks */ - GstClock* (*provide_clock) (GstElement *element); - gboolean (*set_clock) (GstElement *element, GstClock *clock); - - /* query functions */ - gboolean (*send_event) (GstElement *element, GstEvent *event); - - gboolean (*query) (GstElement *element, GstQuery *query); - - gboolean (*post_message) (GstElement *element, GstMessage *message); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE-1]; -}; - -/* element class pad templates */ -void gst_element_class_add_pad_template (GstElementClass *klass, GstPadTemplate *templ); -GstPadTemplate* gst_element_class_get_pad_template (GstElementClass *element_class, const gchar *name); -GList* gst_element_class_get_pad_template_list (GstElementClass *element_class); - -/* element class meta data */ -void gst_element_class_set_metadata (GstElementClass *klass, - const gchar *longname, - const gchar *classification, - const gchar *description, - const gchar *author); -void gst_element_class_set_static_metadata (GstElementClass *klass, - const gchar *longname, - const gchar *classification, - const gchar *description, - const gchar *author); -void gst_element_class_add_metadata (GstElementClass * klass, - const gchar * key, const gchar * value); -void gst_element_class_add_static_metadata (GstElementClass * klass, - const gchar * key, const gchar * value); -const gchar * gst_element_class_get_metadata (GstElementClass * klass, - const gchar * key); - - -/* element instance */ -GType gst_element_get_type (void); - -/* basic name and parentage stuff from GstObject */ - -/** - * gst_element_get_name: - * @elem: a #GstElement to get the name of @elem. - * - * Returns a copy of the name of @elem. - * Caller should g_free() the return value after usage. - * For a nameless element, this returns NULL, which you can safely g_free() - * as well. - * - * Returns: (transfer full): the name of @elem. g_free() after usage. MT safe. - * - */ -#define gst_element_get_name(elem) gst_object_get_name(GST_OBJECT_CAST(elem)) - -/** - * gst_element_set_name: - * @elem: a #GstElement to set the name of. - * @name: the new name - * - * Sets the name of the element, getting rid of the old name if there was one. - */ -#define gst_element_set_name(elem,name) gst_object_set_name(GST_OBJECT_CAST(elem),name) - -/** - * gst_element_get_parent: - * @elem: a #GstElement to get the parent of. - * - * Get the parent of an element. - * - * Returns: (transfer full): the parent of an element. - */ -#define gst_element_get_parent(elem) gst_object_get_parent(GST_OBJECT_CAST(elem)) - -/** - * gst_element_set_parent: - * @elem: a #GstElement to set the parent of. - * @parent: the new parent #GstObject of the element. - * - * Sets the parent of an element. - */ -#define gst_element_set_parent(elem,parent) gst_object_set_parent(GST_OBJECT_CAST(elem),parent) - -/* clocking */ -GstClock* gst_element_provide_clock (GstElement *element); -GstClock* gst_element_get_clock (GstElement *element); -gboolean gst_element_set_clock (GstElement *element, GstClock *clock); -void gst_element_set_base_time (GstElement *element, GstClockTime time); -GstClockTime gst_element_get_base_time (GstElement *element); -void gst_element_set_start_time (GstElement *element, GstClockTime time); -GstClockTime gst_element_get_start_time (GstElement *element); - -/* bus */ -void gst_element_set_bus (GstElement * element, GstBus * bus); -GstBus * gst_element_get_bus (GstElement * element); - -/* pad management */ -gboolean gst_element_add_pad (GstElement *element, GstPad *pad); -gboolean gst_element_remove_pad (GstElement *element, GstPad *pad); -void gst_element_no_more_pads (GstElement *element); - -GstPad* gst_element_get_static_pad (GstElement *element, const gchar *name); -GstPad* gst_element_get_request_pad (GstElement *element, const gchar *name); -GstPad* gst_element_request_pad (GstElement *element, GstPadTemplate *templ, - const gchar * name, const GstCaps *caps); -void gst_element_release_request_pad (GstElement *element, GstPad *pad); - -GstIterator * gst_element_iterate_pads (GstElement * element); -GstIterator * gst_element_iterate_src_pads (GstElement * element); -GstIterator * gst_element_iterate_sink_pads (GstElement * element); - -/* event/query/format stuff */ -gboolean gst_element_send_event (GstElement *element, GstEvent *event); -gboolean gst_element_seek (GstElement *element, gdouble rate, - GstFormat format, GstSeekFlags flags, - GstSeekType start_type, gint64 start, - GstSeekType stop_type, gint64 stop); -gboolean gst_element_query (GstElement *element, GstQuery *query); - -/* messages */ -gboolean gst_element_post_message (GstElement * element, GstMessage * message); - -/* error handling */ -/* gcc versions < 3.3 warn about NULL being passed as format to printf */ -#if (defined(GST_USING_PRINTF_EXTENSION) || !defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)) -gchar * _gst_element_error_printf (const gchar *format, ...); -#else -gchar * _gst_element_error_printf (const gchar *format, ...) G_GNUC_PRINTF (1, 2); -#endif -void gst_element_message_full (GstElement * element, GstMessageType type, - GQuark domain, gint code, gchar * text, - gchar * debug, const gchar * file, - const gchar * function, gint line); - -/* state management */ -gboolean gst_element_is_locked_state (GstElement *element); -gboolean gst_element_set_locked_state (GstElement *element, gboolean locked_state); -gboolean gst_element_sync_state_with_parent (GstElement *element); - -GstStateChangeReturn gst_element_get_state (GstElement * element, - GstState * state, - GstState * pending, - GstClockTime timeout); -GstStateChangeReturn gst_element_set_state (GstElement *element, GstState state); - -void gst_element_abort_state (GstElement * element); -GstStateChangeReturn gst_element_change_state (GstElement * element, - GstStateChange transition); -GstStateChangeReturn gst_element_continue_state (GstElement * element, - GstStateChangeReturn ret); -void gst_element_lost_state (GstElement * element); - -/* factory management */ -GstElementFactory* gst_element_get_factory (GstElement *element); - -G_END_DECLS - -#endif /* __GST_ELEMENT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementfactory.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementfactory.h deleted file mode 100644 index 337cc4c2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementfactory.h +++ /dev/null @@ -1,222 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000,2004 Wim Taymans - * - * gstelement.h: Header for GstElement - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_ELEMENT_FACTORY_H__ -#define __GST_ELEMENT_FACTORY_H__ - -/** - * GstElementFactory: - * - * The opaque #GstElementFactory data structure. - */ -typedef struct _GstElementFactory GstElementFactory; -typedef struct _GstElementFactoryClass GstElementFactoryClass; - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ELEMENT_FACTORY (gst_element_factory_get_type()) -#define GST_ELEMENT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ELEMENT_FACTORY,\ - GstElementFactory)) -#define GST_ELEMENT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT_FACTORY,\ - GstElementFactoryClass)) -#define GST_IS_ELEMENT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ELEMENT_FACTORY)) -#define GST_IS_ELEMENT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT_FACTORY)) -#define GST_ELEMENT_FACTORY_CAST(obj) ((GstElementFactory *)(obj)) - -GType gst_element_factory_get_type (void); - -GstElementFactory * gst_element_factory_find (const gchar *name); - -GType gst_element_factory_get_element_type (GstElementFactory *factory); - -const gchar * gst_element_factory_get_metadata (GstElementFactory *factory, const gchar *key); -gchar ** gst_element_factory_get_metadata_keys (GstElementFactory *factory); - -guint gst_element_factory_get_num_pad_templates (GstElementFactory *factory); -const GList * gst_element_factory_get_static_pad_templates (GstElementFactory *factory); - -GstURIType gst_element_factory_get_uri_type (GstElementFactory *factory); -const gchar * const * gst_element_factory_get_uri_protocols (GstElementFactory *factory); - -gboolean gst_element_factory_has_interface (GstElementFactory *factory, - const gchar *interfacename); - -GstElement* gst_element_factory_create (GstElementFactory *factory, - const gchar *name) G_GNUC_MALLOC; -GstElement* gst_element_factory_make (const gchar *factoryname, const gchar *name) G_GNUC_MALLOC; - -gboolean gst_element_register (GstPlugin *plugin, const gchar *name, - guint rank, GType type); - -/* Factory list functions */ - -/** - * GstFactoryListType: - * @GST_ELEMENT_FACTORY_TYPE_DECODER: Decoder elements - * @GST_ELEMENT_FACTORY_TYPE_ENCODER: Encoder elements - * @GST_ELEMENT_FACTORY_TYPE_SINK: Sink elements - * @GST_ELEMENT_FACTORY_TYPE_SRC: Source elements - * @GST_ELEMENT_FACTORY_TYPE_MUXER: Muxer elements - * @GST_ELEMENT_FACTORY_TYPE_DEMUXER: Demuxer elements - * @GST_ELEMENT_FACTORY_TYPE_PARSER: Parser elements - * @GST_ELEMENT_FACTORY_TYPE_PAYLOADER: Payloader elements - * @GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER: Depayloader elements - * @GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS: Private, do not use - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO: Elements handling video media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO: Elements handling audio media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE: Elements handling image media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_SUBTITLE: Elements handling subtitle media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_METADATA: Elements handling metadata media types - * - * The type of #GstElementFactory to filter. - * - * All @GstFactoryListType up to @GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS are exclusive. - * - * If one or more of the MEDIA types are specified, then only elements - * matching the specified media types will be selected. - */ - -typedef guint64 GstElementFactoryListType; - -#define GST_ELEMENT_FACTORY_TYPE_DECODER (G_GUINT64_CONSTANT (1) << 0) -#define GST_ELEMENT_FACTORY_TYPE_ENCODER (G_GUINT64_CONSTANT (1) << 1) -#define GST_ELEMENT_FACTORY_TYPE_SINK (G_GUINT64_CONSTANT (1) << 2) -#define GST_ELEMENT_FACTORY_TYPE_SRC (G_GUINT64_CONSTANT (1) << 3) -#define GST_ELEMENT_FACTORY_TYPE_MUXER (G_GUINT64_CONSTANT (1) << 4) -#define GST_ELEMENT_FACTORY_TYPE_DEMUXER (G_GUINT64_CONSTANT (1) << 5) -#define GST_ELEMENT_FACTORY_TYPE_PARSER (G_GUINT64_CONSTANT (1) << 6) -#define GST_ELEMENT_FACTORY_TYPE_PAYLOADER (G_GUINT64_CONSTANT (1) << 7) -#define GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER (G_GUINT64_CONSTANT (1) << 8) -#define GST_ELEMENT_FACTORY_TYPE_FORMATTER (G_GUINT64_CONSTANT (1) << 9) - -#define GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS (G_GUINT64_CONSTANT (1) << 48) - -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO (G_GUINT64_CONSTANT (1) << 49) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO (G_GUINT64_CONSTANT (1) << 50) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE (G_GUINT64_CONSTANT (1) << 51) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_SUBTITLE (G_GUINT64_CONSTANT (1) << 52) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_METADATA (G_GUINT64_CONSTANT (1) << 53) - -/** - * GST_ELEMENT_FACTORY_TYPE_ANY: - * - * Elements of any of the defined GST_ELEMENT_FACTORY_LIST types - * - * Value: 562949953421311 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_ANY ((G_GUINT64_CONSTANT (1) << 49) - 1) - -/** - * GST_ELEMENT_FACTORY_TYPE_MEDIA_ANY: - * - * Elements matching any of the defined GST_ELEMENT_FACTORY_TYPE_MEDIA types - * - * Note: Do not use this if you wish to not filter against any of the defined - * media types. If you wish to do this, simply don't specify any - * GST_ELEMENT_FACTORY_TYPE_MEDIA flag. - * - * Value: 18446462598732840960 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_ANY (~G_GUINT64_CONSTANT (0) << 48) - -/** - * GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER: - * - * All encoders handling video or image media types - * - * Value: 2814749767106562 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER (GST_ELEMENT_FACTORY_TYPE_ENCODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO | GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE) - -/** - * GST_ELEMENT_FACTORY_TYPE_AUDIO_ENCODER: - * - * All encoders handling audio media types - * - * Value: 1125899906842626 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_AUDIO_ENCODER (GST_ELEMENT_FACTORY_TYPE_ENCODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO) - -/** - * GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS: - * - * All sinks handling audio, video or image media types - * - * Value: 3940649673949188 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS (GST_ELEMENT_FACTORY_TYPE_SINK | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO | GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE) - -/** - * GST_ELEMENT_FACTORY_TYPE_DECODABLE: - * - * All elements used to 'decode' streams (decoders, demuxers, parsers, depayloaders) - * - * Value: 353 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_DECODABLE \ - (GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_DEMUXER | GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER | GST_ELEMENT_FACTORY_TYPE_PARSER) - -/* Element klass defines */ -#define GST_ELEMENT_FACTORY_KLASS_DECODER "Decoder" -#define GST_ELEMENT_FACTORY_KLASS_ENCODER "Encoder" -#define GST_ELEMENT_FACTORY_KLASS_SINK "Sink" -#define GST_ELEMENT_FACTORY_KLASS_SRC "Source" -#define GST_ELEMENT_FACTORY_KLASS_MUXER "Muxer" -#define GST_ELEMENT_FACTORY_KLASS_DEMUXER "Demuxer" -#define GST_ELEMENT_FACTORY_KLASS_PARSER "Parser" -#define GST_ELEMENT_FACTORY_KLASS_PAYLOADER "Payloader" -#define GST_ELEMENT_FACTORY_KLASS_DEPAYLOADER "Depayloader" -#define GST_ELEMENT_FACTORY_KLASS_FORMATTER "Formatter" - -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_VIDEO "Video" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_AUDIO "Audio" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_IMAGE "Image" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_SUBTITLE "Subtitle" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_METADATA "Metadata" - -gboolean gst_element_factory_list_is_type (GstElementFactory *factory, - GstElementFactoryListType type); - -GList * gst_element_factory_list_get_elements (GstElementFactoryListType type, - GstRank minrank) G_GNUC_MALLOC; - - -GList * gst_element_factory_list_filter (GList *list, const GstCaps *caps, - GstPadDirection direction, - gboolean subsetonly) G_GNUC_MALLOC; -G_END_DECLS - -#endif /* __GST_ELEMENT_FACTORY_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementmetadata.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementmetadata.h deleted file mode 100644 index 6c331d90..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstelementmetadata.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000,2004 Wim Taymans - * - * gstelementmetadata.h: Metadata for GstElement classes - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ELEMENT_METADATA_H__ -#define __GST_ELEMENT_METADATA_H__ - -G_BEGIN_DECLS - -/** - * GST_ELEMENT_METADATA_LONGNAME: - * - * The long English name of the element. E.g. "File Sink" - */ -#define GST_ELEMENT_METADATA_LONGNAME "long-name" -/** - * GST_ELEMENT_METADATA_KLASS: - * - * String describing the type of element, as an unordered list - * separated with slashes ('/'). See draft-klass.txt of the design docs - * for more details and common types. E.g: "Sink/File" - */ -#define GST_ELEMENT_METADATA_KLASS "klass" - -/** - * GST_ELEMENT_METADATA_DESCRIPTION: - * - * Sentence describing the purpose of the element. - * E.g: "Write stream to a file" - */ -#define GST_ELEMENT_METADATA_DESCRIPTION "description" -/** - * GST_ELEMENT_METADATA_AUTHOR: - * - * Name and contact details of the author(s). Use \n to separate - * multiple author details. - * E.g: "Joe Bloggs <joe.blogs at foo.com>" - */ -#define GST_ELEMENT_METADATA_AUTHOR "author" - -/** - * GST_ELEMENT_METADATA_DOC_URI: - * - * Set uri pointing to user documentation. Applications can use this to show - * help for e.g. effects to users. - */ -#define GST_ELEMENT_METADATA_DOC_URI "doc-uri" -/** - * GST_ELEMENT_METADATA_ICON_NAME: - * - * Elements that bridge to certain other products can include an icon of that - * used product. Application can show the icon in menus/selectors to help - * identifying specific elements. - */ -#define GST_ELEMENT_METADATA_ICON_NAME "icon-name" - -G_END_DECLS - -#endif /* __GST_ELEMENT_METADATA_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstenumtypes.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstenumtypes.h deleted file mode 100644 index c15314f4..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstenumtypes.h +++ /dev/null @@ -1,231 +0,0 @@ - - - -#ifndef __GST_ENUM_TYPES_H__ -#define __GST_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "gstobject.h" */ -GType gst_object_flags_get_type (void); -#define GST_TYPE_OBJECT_FLAGS (gst_object_flags_get_type()) - -/* enumerations from "gstallocator.h" */ -GType gst_allocator_flags_get_type (void); -#define GST_TYPE_ALLOCATOR_FLAGS (gst_allocator_flags_get_type()) - -/* enumerations from "gstbin.h" */ -GType gst_bin_flags_get_type (void); -#define GST_TYPE_BIN_FLAGS (gst_bin_flags_get_type()) - -/* enumerations from "gstbuffer.h" */ -GType gst_buffer_flags_get_type (void); -#define GST_TYPE_BUFFER_FLAGS (gst_buffer_flags_get_type()) -GType gst_buffer_copy_flags_get_type (void); -#define GST_TYPE_BUFFER_COPY_FLAGS (gst_buffer_copy_flags_get_type()) - -/* enumerations from "gstbufferpool.h" */ -GType gst_buffer_pool_acquire_flags_get_type (void); -#define GST_TYPE_BUFFER_POOL_ACQUIRE_FLAGS (gst_buffer_pool_acquire_flags_get_type()) - -/* enumerations from "gstbus.h" */ -GType gst_bus_flags_get_type (void); -#define GST_TYPE_BUS_FLAGS (gst_bus_flags_get_type()) -GType gst_bus_sync_reply_get_type (void); -#define GST_TYPE_BUS_SYNC_REPLY (gst_bus_sync_reply_get_type()) - -/* enumerations from "gstcaps.h" */ -GType gst_caps_flags_get_type (void); -#define GST_TYPE_CAPS_FLAGS (gst_caps_flags_get_type()) -GType gst_caps_intersect_mode_get_type (void); -#define GST_TYPE_CAPS_INTERSECT_MODE (gst_caps_intersect_mode_get_type()) - -/* enumerations from "gstclock.h" */ -GType gst_clock_return_get_type (void); -#define GST_TYPE_CLOCK_RETURN (gst_clock_return_get_type()) -GType gst_clock_entry_type_get_type (void); -#define GST_TYPE_CLOCK_ENTRY_TYPE (gst_clock_entry_type_get_type()) -GType gst_clock_flags_get_type (void); -#define GST_TYPE_CLOCK_FLAGS (gst_clock_flags_get_type()) - -/* enumerations from "gstdebugutils.h" */ -GType gst_debug_graph_details_get_type (void); -#define GST_TYPE_DEBUG_GRAPH_DETAILS (gst_debug_graph_details_get_type()) - -/* enumerations from "gstelement.h" */ -GType gst_state_get_type (void); -#define GST_TYPE_STATE (gst_state_get_type()) -GType gst_state_change_return_get_type (void); -#define GST_TYPE_STATE_CHANGE_RETURN (gst_state_change_return_get_type()) -GType gst_state_change_get_type (void); -#define GST_TYPE_STATE_CHANGE (gst_state_change_get_type()) -GType gst_element_flags_get_type (void); -#define GST_TYPE_ELEMENT_FLAGS (gst_element_flags_get_type()) - -/* enumerations from "gsterror.h" */ -GType gst_core_error_get_type (void); -#define GST_TYPE_CORE_ERROR (gst_core_error_get_type()) -GType gst_library_error_get_type (void); -#define GST_TYPE_LIBRARY_ERROR (gst_library_error_get_type()) -GType gst_resource_error_get_type (void); -#define GST_TYPE_RESOURCE_ERROR (gst_resource_error_get_type()) -GType gst_stream_error_get_type (void); -#define GST_TYPE_STREAM_ERROR (gst_stream_error_get_type()) - -/* enumerations from "gstevent.h" */ -GType gst_event_type_flags_get_type (void); -#define GST_TYPE_EVENT_TYPE_FLAGS (gst_event_type_flags_get_type()) -GType gst_event_type_get_type (void); -#define GST_TYPE_EVENT_TYPE (gst_event_type_get_type()) -GType gst_qos_type_get_type (void); -#define GST_TYPE_QOS_TYPE (gst_qos_type_get_type()) - -/* enumerations from "gstformat.h" */ -GType gst_format_get_type (void); -#define GST_TYPE_FORMAT (gst_format_get_type()) - -/* enumerations from "gstinfo.h" */ -GType gst_debug_level_get_type (void); -#define GST_TYPE_DEBUG_LEVEL (gst_debug_level_get_type()) -GType gst_debug_color_flags_get_type (void); -#define GST_TYPE_DEBUG_COLOR_FLAGS (gst_debug_color_flags_get_type()) - -/* enumerations from "gstiterator.h" */ -GType gst_iterator_result_get_type (void); -#define GST_TYPE_ITERATOR_RESULT (gst_iterator_result_get_type()) -GType gst_iterator_item_get_type (void); -#define GST_TYPE_ITERATOR_ITEM (gst_iterator_item_get_type()) - -/* enumerations from "gstmessage.h" */ -GType gst_message_type_get_type (void); -#define GST_TYPE_MESSAGE_TYPE (gst_message_type_get_type()) -GType gst_structure_change_type_get_type (void); -#define GST_TYPE_STRUCTURE_CHANGE_TYPE (gst_structure_change_type_get_type()) -GType gst_stream_status_type_get_type (void); -#define GST_TYPE_STREAM_STATUS_TYPE (gst_stream_status_type_get_type()) -GType gst_progress_type_get_type (void); -#define GST_TYPE_PROGRESS_TYPE (gst_progress_type_get_type()) - -/* enumerations from "gstmeta.h" */ -GType gst_meta_flags_get_type (void); -#define GST_TYPE_META_FLAGS (gst_meta_flags_get_type()) - -/* enumerations from "gstmemory.h" */ -GType gst_memory_flags_get_type (void); -#define GST_TYPE_MEMORY_FLAGS (gst_memory_flags_get_type()) -GType gst_map_flags_get_type (void); -#define GST_TYPE_MAP_FLAGS (gst_map_flags_get_type()) - -/* enumerations from "gstminiobject.h" */ -GType gst_mini_object_flags_get_type (void); -#define GST_TYPE_MINI_OBJECT_FLAGS (gst_mini_object_flags_get_type()) -GType gst_lock_flags_get_type (void); -#define GST_TYPE_LOCK_FLAGS (gst_lock_flags_get_type()) - -/* enumerations from "gstpad.h" */ -GType gst_pad_direction_get_type (void); -#define GST_TYPE_PAD_DIRECTION (gst_pad_direction_get_type()) -GType gst_pad_mode_get_type (void); -#define GST_TYPE_PAD_MODE (gst_pad_mode_get_type()) -GType gst_pad_link_return_get_type (void); -#define GST_TYPE_PAD_LINK_RETURN (gst_pad_link_return_get_type()) -GType gst_flow_return_get_type (void); -#define GST_TYPE_FLOW_RETURN (gst_flow_return_get_type()) -GType gst_pad_link_check_get_type (void); -#define GST_TYPE_PAD_LINK_CHECK (gst_pad_link_check_get_type()) -GType gst_pad_probe_type_get_type (void); -#define GST_TYPE_PAD_PROBE_TYPE (gst_pad_probe_type_get_type()) -GType gst_pad_probe_return_get_type (void); -#define GST_TYPE_PAD_PROBE_RETURN (gst_pad_probe_return_get_type()) -GType gst_pad_flags_get_type (void); -#define GST_TYPE_PAD_FLAGS (gst_pad_flags_get_type()) - -/* enumerations from "gstpadtemplate.h" */ -GType gst_pad_presence_get_type (void); -#define GST_TYPE_PAD_PRESENCE (gst_pad_presence_get_type()) -GType gst_pad_template_flags_get_type (void); -#define GST_TYPE_PAD_TEMPLATE_FLAGS (gst_pad_template_flags_get_type()) - -/* enumerations from "gstpipeline.h" */ -GType gst_pipeline_flags_get_type (void); -#define GST_TYPE_PIPELINE_FLAGS (gst_pipeline_flags_get_type()) - -/* enumerations from "gstplugin.h" */ -GType gst_plugin_error_get_type (void); -#define GST_TYPE_PLUGIN_ERROR (gst_plugin_error_get_type()) -GType gst_plugin_flags_get_type (void); -#define GST_TYPE_PLUGIN_FLAGS (gst_plugin_flags_get_type()) -GType gst_plugin_dependency_flags_get_type (void); -#define GST_TYPE_PLUGIN_DEPENDENCY_FLAGS (gst_plugin_dependency_flags_get_type()) - -/* enumerations from "gstpluginfeature.h" */ -GType gst_rank_get_type (void); -#define GST_TYPE_RANK (gst_rank_get_type()) - -/* enumerations from "gstquery.h" */ -GType gst_query_type_flags_get_type (void); -#define GST_TYPE_QUERY_TYPE_FLAGS (gst_query_type_flags_get_type()) -GType gst_query_type_get_type (void); -#define GST_TYPE_QUERY_TYPE (gst_query_type_get_type()) -GType gst_buffering_mode_get_type (void); -#define GST_TYPE_BUFFERING_MODE (gst_buffering_mode_get_type()) -GType gst_scheduling_flags_get_type (void); -#define GST_TYPE_SCHEDULING_FLAGS (gst_scheduling_flags_get_type()) - -/* enumerations from "gstsegment.h" */ -GType gst_seek_type_get_type (void); -#define GST_TYPE_SEEK_TYPE (gst_seek_type_get_type()) -GType gst_seek_flags_get_type (void); -#define GST_TYPE_SEEK_FLAGS (gst_seek_flags_get_type()) -GType gst_segment_flags_get_type (void); -#define GST_TYPE_SEGMENT_FLAGS (gst_segment_flags_get_type()) - -/* enumerations from "gstsystemclock.h" */ -GType gst_clock_type_get_type (void); -#define GST_TYPE_CLOCK_TYPE (gst_clock_type_get_type()) - -/* enumerations from "gsttaglist.h" */ -GType gst_tag_merge_mode_get_type (void); -#define GST_TYPE_TAG_MERGE_MODE (gst_tag_merge_mode_get_type()) -GType gst_tag_flag_get_type (void); -#define GST_TYPE_TAG_FLAG (gst_tag_flag_get_type()) -GType gst_tag_scope_get_type (void); -#define GST_TYPE_TAG_SCOPE (gst_tag_scope_get_type()) - -/* enumerations from "gsttask.h" */ -GType gst_task_state_get_type (void); -#define GST_TYPE_TASK_STATE (gst_task_state_get_type()) - -/* enumerations from "gsttoc.h" */ -GType gst_toc_scope_get_type (void); -#define GST_TYPE_TOC_SCOPE (gst_toc_scope_get_type()) -GType gst_toc_entry_type_get_type (void); -#define GST_TYPE_TOC_ENTRY_TYPE (gst_toc_entry_type_get_type()) - -/* enumerations from "gsttypefind.h" */ -GType gst_type_find_probability_get_type (void); -#define GST_TYPE_TYPE_FIND_PROBABILITY (gst_type_find_probability_get_type()) - -/* enumerations from "gsturi.h" */ -GType gst_uri_error_get_type (void); -#define GST_TYPE_URI_ERROR (gst_uri_error_get_type()) -GType gst_uri_type_get_type (void); -#define GST_TYPE_URI_TYPE (gst_uri_type_get_type()) - -/* enumerations from "gstutils.h" */ -GType gst_search_mode_get_type (void); -#define GST_TYPE_SEARCH_MODE (gst_search_mode_get_type()) - -/* enumerations from "gstparse.h" */ -GType gst_parse_error_get_type (void); -#define GST_TYPE_PARSE_ERROR (gst_parse_error_get_type()) -GType gst_parse_flags_get_type (void); -#define GST_TYPE_PARSE_FLAGS (gst_parse_flags_get_type()) -G_END_DECLS - -#endif /* __GST_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsterror.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsterror.h deleted file mode 100644 index a066be92..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsterror.h +++ /dev/null @@ -1,248 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Thomas Vander Stichele - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ERROR_H__ -#define __GST_ERROR_H__ - -#include -#include -#include - -G_BEGIN_DECLS -/* - * we define FIXME error domains: - * GST_CORE_ERROR - * GST_LIBRARY_ERROR - * GST_RESOURCE_ERROR - * GST_STREAM_ERROR - * - * Check GError API docs for rationale for naming. - */ -/** - * GstCoreError: - * @GST_CORE_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_CORE_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_CORE_ERROR_NOT_IMPLEMENTED: use this when you do not want to implement - * this functionality yet. - * @GST_CORE_ERROR_STATE_CHANGE: used for state change errors. - * @GST_CORE_ERROR_PAD: used for pad-related errors. - * @GST_CORE_ERROR_THREAD: used for thread-related errors. - * @GST_CORE_ERROR_NEGOTIATION: used for negotiation-related errors. - * @GST_CORE_ERROR_EVENT: used for event-related errors. - * @GST_CORE_ERROR_SEEK: used for seek-related errors. - * @GST_CORE_ERROR_CAPS: used for caps-related errors. - * @GST_CORE_ERROR_TAG: used for negotiation-related errors. - * @GST_CORE_ERROR_MISSING_PLUGIN: used if a plugin is missing. - * @GST_CORE_ERROR_CLOCK: used for clock related errors. - * @GST_CORE_ERROR_DISABLED: used if functionality has been disabled at - * compile time. - * @GST_CORE_ERROR_NUM_ERRORS: the number of core error types. - * - * Core errors are errors inside the core GStreamer library. - */ -/* FIXME: should we divide in numerical blocks so we can easily add - for example PAD errors later ? */ -typedef enum -{ - GST_CORE_ERROR_FAILED = 1, - GST_CORE_ERROR_TOO_LAZY, - GST_CORE_ERROR_NOT_IMPLEMENTED, - GST_CORE_ERROR_STATE_CHANGE, - GST_CORE_ERROR_PAD, - GST_CORE_ERROR_THREAD, - GST_CORE_ERROR_NEGOTIATION, - GST_CORE_ERROR_EVENT, - GST_CORE_ERROR_SEEK, - GST_CORE_ERROR_CAPS, - GST_CORE_ERROR_TAG, - GST_CORE_ERROR_MISSING_PLUGIN, - GST_CORE_ERROR_CLOCK, - GST_CORE_ERROR_DISABLED, - GST_CORE_ERROR_NUM_ERRORS -} GstCoreError; - -/** - * GstLibraryError: - * @GST_LIBRARY_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_LIBRARY_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_LIBRARY_ERROR_INIT: used when the library could not be opened. - * @GST_LIBRARY_ERROR_SHUTDOWN: used when the library could not be closed. - * @GST_LIBRARY_ERROR_SETTINGS: used when the library doesn't accept settings. - * @GST_LIBRARY_ERROR_ENCODE: used when the library generated an encoding error. - * @GST_LIBRARY_ERROR_NUM_ERRORS: the number of library error types. - * - * Library errors are for errors from the library being used by elements - * (initializing, finalizing, settings, ...) - */ -typedef enum -{ - GST_LIBRARY_ERROR_FAILED = 1, - GST_LIBRARY_ERROR_TOO_LAZY, - GST_LIBRARY_ERROR_INIT, - GST_LIBRARY_ERROR_SHUTDOWN, - GST_LIBRARY_ERROR_SETTINGS, - GST_LIBRARY_ERROR_ENCODE, - GST_LIBRARY_ERROR_NUM_ERRORS -} GstLibraryError; - -/** - * GstResourceError: - * @GST_RESOURCE_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_RESOURCE_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_RESOURCE_ERROR_NOT_FOUND: used when the resource could not be found. - * @GST_RESOURCE_ERROR_BUSY: used when resource is busy. - * @GST_RESOURCE_ERROR_OPEN_READ: used when resource fails to open for reading. - * @GST_RESOURCE_ERROR_OPEN_WRITE: used when resource fails to open for writing. - * @GST_RESOURCE_ERROR_OPEN_READ_WRITE: used when resource cannot be opened for - * both reading and writing, or either (but unspecified which). - * @GST_RESOURCE_ERROR_CLOSE: used when the resource can't be closed. - * @GST_RESOURCE_ERROR_READ: used when the resource can't be read from. - * @GST_RESOURCE_ERROR_WRITE: used when the resource can't be written to. - * @GST_RESOURCE_ERROR_SEEK: used when a seek on the resource fails. - * @GST_RESOURCE_ERROR_SYNC: used when a synchronize on the resource fails. - * @GST_RESOURCE_ERROR_SETTINGS: used when settings can't be manipulated on. - * @GST_RESOURCE_ERROR_NO_SPACE_LEFT: used when the resource has no space left. - * @GST_RESOURCE_ERROR_NUM_ERRORS: the number of resource error types. - * - * Resource errors are for any resource used by an element: - * memory, files, network connections, process space, ... - * They're typically used by source and sink elements. - */ -typedef enum -{ - GST_RESOURCE_ERROR_FAILED = 1, - GST_RESOURCE_ERROR_TOO_LAZY, - GST_RESOURCE_ERROR_NOT_FOUND, - GST_RESOURCE_ERROR_BUSY, - GST_RESOURCE_ERROR_OPEN_READ, - GST_RESOURCE_ERROR_OPEN_WRITE, - GST_RESOURCE_ERROR_OPEN_READ_WRITE, - GST_RESOURCE_ERROR_CLOSE, - GST_RESOURCE_ERROR_READ, - GST_RESOURCE_ERROR_WRITE, - GST_RESOURCE_ERROR_SEEK, - GST_RESOURCE_ERROR_SYNC, - GST_RESOURCE_ERROR_SETTINGS, - GST_RESOURCE_ERROR_NO_SPACE_LEFT, - GST_RESOURCE_ERROR_NUM_ERRORS -} GstResourceError; - -/** - * GstStreamError: - * @GST_STREAM_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_STREAM_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_STREAM_ERROR_NOT_IMPLEMENTED: use this when you do not want to implement - * this functionality yet. - * @GST_STREAM_ERROR_TYPE_NOT_FOUND: used when the element doesn't know the - * stream's type. - * @GST_STREAM_ERROR_WRONG_TYPE: used when the element doesn't handle this type - * of stream. - * @GST_STREAM_ERROR_CODEC_NOT_FOUND: used when there's no codec to handle the - * stream's type. - * @GST_STREAM_ERROR_DECODE: used when decoding fails. - * @GST_STREAM_ERROR_ENCODE: used when encoding fails. - * @GST_STREAM_ERROR_DEMUX: used when demuxing fails. - * @GST_STREAM_ERROR_MUX: used when muxing fails. - * @GST_STREAM_ERROR_FORMAT: used when the stream is of the wrong format - * (for example, wrong caps). - * @GST_STREAM_ERROR_DECRYPT: used when the stream is encrypted and can't be - * decrypted because this is not supported by the element. - * @GST_STREAM_ERROR_DECRYPT_NOKEY: used when the stream is encrypted and - * can't be decrypted because no suitable key is available. - * @GST_STREAM_ERROR_NUM_ERRORS: the number of stream error types. - * - * Stream errors are for anything related to the stream being processed: - * format errors, media type errors, ... - * They're typically used by decoders, demuxers, converters, ... - */ -typedef enum -{ - GST_STREAM_ERROR_FAILED = 1, - GST_STREAM_ERROR_TOO_LAZY, - GST_STREAM_ERROR_NOT_IMPLEMENTED, - GST_STREAM_ERROR_TYPE_NOT_FOUND, - GST_STREAM_ERROR_WRONG_TYPE, - GST_STREAM_ERROR_CODEC_NOT_FOUND, - GST_STREAM_ERROR_DECODE, - GST_STREAM_ERROR_ENCODE, - GST_STREAM_ERROR_DEMUX, - GST_STREAM_ERROR_MUX, - GST_STREAM_ERROR_FORMAT, - GST_STREAM_ERROR_DECRYPT, - GST_STREAM_ERROR_DECRYPT_NOKEY, - GST_STREAM_ERROR_NUM_ERRORS -} GstStreamError; - -/** - * GST_LIBRARY_ERROR: - * - * Error domain for library loading. Errors in this domain will - * be from the #GstLibraryError enumeration. - * See #GError for information on error domains. - */ -#define GST_LIBRARY_ERROR gst_library_error_quark () -/** - * GST_RESOURCE_ERROR: - * - * Error domain for resource handling. Errors in this domain will - * be from the #GstResourceError enumeration. - * See #GError for information on error domains. - */ -#define GST_RESOURCE_ERROR gst_resource_error_quark () -/** - * GST_CORE_ERROR: - * - * Error domain for core system. Errors in this domain will - * be from the #GstCoreError enumeration. - * See #GError for information on error domains. - */ -#define GST_CORE_ERROR gst_core_error_quark () -/** - * GST_STREAM_ERROR: - * - * Error domain for media stream processing. Errors in this domain will - * be from the #GstStreamError enumeration. - * See #GError for information on error domains. - */ -#define GST_STREAM_ERROR gst_stream_error_quark () - -/** - * GST_ERROR_SYSTEM: - * - * Builds a string using errno describing the previously failed system - * call. To be used as the debug argument in #GST_ELEMENT_ERROR. - */ -#define GST_ERROR_SYSTEM ("system error: %s", g_strerror (errno)) - -gchar *gst_error_get_message (GQuark domain, gint code); -GQuark gst_stream_error_quark (void); -GQuark gst_core_error_quark (void); -GQuark gst_resource_error_quark (void); -GQuark gst_library_error_quark (void); - -G_END_DECLS -#endif /* __GST_ERROR_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstevent.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstevent.h deleted file mode 100644 index 7907a69d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstevent.h +++ /dev/null @@ -1,550 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstevent.h: Header for GstEvent subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_EVENT_H__ -#define __GST_EVENT_H__ - -typedef struct _GstEvent GstEvent; - -/** - * GstEventTypeFlags: - * @GST_EVENT_TYPE_UPSTREAM: Set if the event can travel upstream. - * @GST_EVENT_TYPE_DOWNSTREAM: Set if the event can travel downstream. - * @GST_EVENT_TYPE_SERIALIZED: Set if the event should be serialized with data - * flow. - * @GST_EVENT_TYPE_STICKY: Set if the event is sticky on the pads. - * @GST_EVENT_TYPE_STICKY_MULTI: Multiple sticky events can be on a pad, each - * identified by the event name. - * - * #GstEventTypeFlags indicate the aspects of the different #GstEventType - * values. You can get the type flags of a #GstEventType with the - * gst_event_type_get_flags() function. - */ -typedef enum { - GST_EVENT_TYPE_UPSTREAM = 1 << 0, - GST_EVENT_TYPE_DOWNSTREAM = 1 << 1, - GST_EVENT_TYPE_SERIALIZED = 1 << 2, - GST_EVENT_TYPE_STICKY = 1 << 3, - GST_EVENT_TYPE_STICKY_MULTI = 1 << 4 -} GstEventTypeFlags; - -/** - * GST_EVENT_TYPE_BOTH: - * - * The same thing as #GST_EVENT_TYPE_UPSTREAM | #GST_EVENT_TYPE_DOWNSTREAM. - */ -#define GST_EVENT_TYPE_BOTH \ - (GST_EVENT_TYPE_UPSTREAM | GST_EVENT_TYPE_DOWNSTREAM) - -#define GST_EVENT_NUM_SHIFT (8) - -/** - * GST_EVENT_MAKE_TYPE: - * @num: the event number to create - * @flags: the event flags - * - * when making custom event types, use this macro with the num and - * the given flags - */ -#define GST_EVENT_MAKE_TYPE(num,flags) \ - (((num) << GST_EVENT_NUM_SHIFT) | (flags)) - -#define FLAG(name) GST_EVENT_TYPE_##name - -/** - * GstEventType: - * @GST_EVENT_UNKNOWN: unknown event. - * @GST_EVENT_FLUSH_START: Start a flush operation. This event clears all data - * from the pipeline and unblock all streaming threads. - * @GST_EVENT_FLUSH_STOP: Stop a flush operation. This event resets the - * running-time of the pipeline. - * @GST_EVENT_STREAM_START: Event to mark the start of a new stream. Sent before any - * other serialized event and only sent at the start of a new stream, - * not after flushing seeks. - * @GST_EVENT_CAPS: #GstCaps event. Notify the pad of a new media type. - * @GST_EVENT_SEGMENT: A new media segment follows in the dataflow. The - * segment events contains information for clipping buffers and - * converting buffer timestamps to running-time and - * stream-time. - * @GST_EVENT_TAG: A new set of metadata tags has been found in the stream. - * @GST_EVENT_BUFFERSIZE: Notification of buffering requirements. Currently not - * used yet. - * @GST_EVENT_SINK_MESSAGE: An event that sinks turn into a message. Used to - * send messages that should be emitted in sync with - * rendering. - * @GST_EVENT_EOS: End-Of-Stream. No more data is to be expected to follow - * without a SEGMENT event. - * @GST_EVENT_SEGMENT_DONE: Marks the end of a segment playback. - * @GST_EVENT_GAP: Marks a gap in the datastream. - * @GST_EVENT_TOC: An event which indicates that a new table of contents (TOC) - * was found or updated. - * @GST_EVENT_QOS: A quality message. Used to indicate to upstream elements - * that the downstream elements should adjust their processing - * rate. - * @GST_EVENT_SEEK: A request for a new playback position and rate. - * @GST_EVENT_NAVIGATION: Navigation events are usually used for communicating - * user requests, such as mouse or keyboard movements, - * to upstream elements. - * @GST_EVENT_LATENCY: Notification of new latency adjustment. Sinks will use - * the latency information to adjust their synchronisation. - * @GST_EVENT_STEP: A request for stepping through the media. Sinks will usually - * execute the step operation. - * @GST_EVENT_RECONFIGURE: A request for upstream renegotiating caps and reconfiguring. - * @GST_EVENT_TOC_SELECT: A request for a new playback position based on TOC - * entry's UID. - * @GST_EVENT_CUSTOM_UPSTREAM: Upstream custom event - * @GST_EVENT_CUSTOM_DOWNSTREAM: Downstream custom event that travels in the - * data flow. - * @GST_EVENT_CUSTOM_DOWNSTREAM_OOB: Custom out-of-band downstream event. - * @GST_EVENT_CUSTOM_DOWNSTREAM_STICKY: Custom sticky downstream event. - * @GST_EVENT_CUSTOM_BOTH: Custom upstream or downstream event. - * In-band when travelling downstream. - * @GST_EVENT_CUSTOM_BOTH_OOB: Custom upstream or downstream out-of-band event. - * - * #GstEventType lists the standard event types that can be sent in a pipeline. - * - * The custom event types can be used for private messages between elements - * that can't be expressed using normal - * GStreamer buffer passing semantics. Custom events carry an arbitrary - * #GstStructure. - * Specific custom events are distinguished by the name of the structure. - */ -/* NOTE: keep in sync with quark registration in gstevent.c */ -typedef enum { - GST_EVENT_UNKNOWN = GST_EVENT_MAKE_TYPE (0, 0), - - /* bidirectional events */ - GST_EVENT_FLUSH_START = GST_EVENT_MAKE_TYPE (10, FLAG(BOTH)), - GST_EVENT_FLUSH_STOP = GST_EVENT_MAKE_TYPE (20, FLAG(BOTH) | FLAG(SERIALIZED)), - - /* downstream serialized events */ - GST_EVENT_STREAM_START = GST_EVENT_MAKE_TYPE (40, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_CAPS = GST_EVENT_MAKE_TYPE (50, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_SEGMENT = GST_EVENT_MAKE_TYPE (70, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TAG = GST_EVENT_MAKE_TYPE (80, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (90, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (100, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - GST_EVENT_EOS = GST_EVENT_MAKE_TYPE (110, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - - /* non-sticky downstream serialized */ - GST_EVENT_SEGMENT_DONE = GST_EVENT_MAKE_TYPE (150, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_EVENT_GAP = GST_EVENT_MAKE_TYPE (160, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - - /* upstream events */ - GST_EVENT_QOS = GST_EVENT_MAKE_TYPE (190, FLAG(UPSTREAM)), - GST_EVENT_SEEK = GST_EVENT_MAKE_TYPE (200, FLAG(UPSTREAM)), - GST_EVENT_NAVIGATION = GST_EVENT_MAKE_TYPE (210, FLAG(UPSTREAM)), - GST_EVENT_LATENCY = GST_EVENT_MAKE_TYPE (220, FLAG(UPSTREAM)), - GST_EVENT_STEP = GST_EVENT_MAKE_TYPE (230, FLAG(UPSTREAM)), - GST_EVENT_RECONFIGURE = GST_EVENT_MAKE_TYPE (240, FLAG(UPSTREAM)), - GST_EVENT_TOC_SELECT = GST_EVENT_MAKE_TYPE (250, FLAG(UPSTREAM)), - - /* custom events start here */ - GST_EVENT_CUSTOM_UPSTREAM = GST_EVENT_MAKE_TYPE (270, FLAG(UPSTREAM)), - GST_EVENT_CUSTOM_DOWNSTREAM = GST_EVENT_MAKE_TYPE (280, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_EVENT_CUSTOM_DOWNSTREAM_OOB = GST_EVENT_MAKE_TYPE (290, FLAG(DOWNSTREAM)), - GST_EVENT_CUSTOM_DOWNSTREAM_STICKY = GST_EVENT_MAKE_TYPE (300, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - GST_EVENT_CUSTOM_BOTH = GST_EVENT_MAKE_TYPE (310, FLAG(BOTH) | FLAG(SERIALIZED)), - GST_EVENT_CUSTOM_BOTH_OOB = GST_EVENT_MAKE_TYPE (320, FLAG(BOTH)) -} GstEventType; -#undef FLAG - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_event_type; - -#define GST_TYPE_EVENT (_gst_event_type) -#define GST_IS_EVENT(obj) (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_EVENT)) -#define GST_EVENT_CAST(obj) ((GstEvent *)(obj)) -#define GST_EVENT(obj) (GST_EVENT_CAST(obj)) - -/** - * GST_EVENT_TYPE: - * @event: the event to query - * - * Get the #GstEventType of the event. - */ -#define GST_EVENT_TYPE(event) (GST_EVENT_CAST(event)->type) - -/** - * GST_EVENT_TYPE_NAME: - * @event: the event to query - * - * Get a constant string representation of the #GstEventType of the event. - */ -#define GST_EVENT_TYPE_NAME(event) (gst_event_type_get_name(GST_EVENT_TYPE(event))) - -/** - * GST_EVENT_TIMESTAMP: - * @event: the event to query - * - * Get the #GstClockTime timestamp of the event. This is the time when the event - * was created. - */ -#define GST_EVENT_TIMESTAMP(event) (GST_EVENT_CAST(event)->timestamp) - -/** - * GST_EVENT_SEQNUM: - * @event: the event to query - * - * The sequence number of @event. - */ -#define GST_EVENT_SEQNUM(event) (GST_EVENT_CAST(event)->seqnum) - -/** - * GST_EVENT_IS_UPSTREAM: - * @ev: the event to query - * - * Check if an event can travel upstream. - */ -#define GST_EVENT_IS_UPSTREAM(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_UPSTREAM) -/** - * GST_EVENT_IS_DOWNSTREAM: - * @ev: the event to query - * - * Check if an event can travel downstream. - */ -#define GST_EVENT_IS_DOWNSTREAM(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_DOWNSTREAM) -/** - * GST_EVENT_IS_SERIALIZED: - * @ev: the event to query - * - * Check if an event is serialized with the data stream. - */ -#define GST_EVENT_IS_SERIALIZED(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_SERIALIZED) -/** - * GST_EVENT_IS_STICKY: - * @ev: the event to query - * - * Check if an event is sticky on the pads. - */ -#define GST_EVENT_IS_STICKY(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_STICKY) - -/** - * gst_event_is_writable: - * @ev: a #GstEvent - * - * Tests if you can safely write data into a event's structure or validly - * modify the seqnum and timestamp field. - */ -#define gst_event_is_writable(ev) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (ev)) -/** - * gst_event_make_writable: - * @ev: (transfer full): a #GstEvent - * - * Makes a writable event from the given event. If the source event is - * already writable, this will simply return the same event. A copy will - * otherwise be made using gst_event_copy(). - * - * Returns: (transfer full): a writable event which may or may not be the - * same as @ev - */ -#define gst_event_make_writable(ev) GST_EVENT_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (ev))) -/** - * gst_event_replace: - * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent - * to be replaced. - * @new_event: (allow-none) (transfer none): pointer to a #GstEvent that will - * replace the event pointed to by @old_event. - * - * Modifies a pointer to a #GstEvent to point to a different #GstEvent. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * event is unreffed, the new one is reffed). - * - * Either @new_event or the #GstEvent pointed to by @old_event may be NULL. - * - * Returns: TRUE if @new_event was different from @old_event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_event_replace (GstEvent **old_event, GstEvent *new_event); -#endif - -static inline gboolean -gst_event_replace (GstEvent **old_event, GstEvent *new_event) -{ - return gst_mini_object_replace ((GstMiniObject **) old_event, (GstMiniObject *) new_event); -} - -/** - * gst_event_steal: - * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent - * to be stolen. - * - * Atomically replace the #GstEvent pointed to by @old_event with NULL and - * return the original event. - * - * Returns: the #GstEvent that was in @old_event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstEvent * gst_event_steal (GstEvent **old_event); -#endif - -static inline GstEvent * -gst_event_steal (GstEvent **old_event) -{ - return GST_EVENT_CAST (gst_mini_object_steal ((GstMiniObject **) old_event)); -} - -/** - * gst_event_take: - * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent - * to be stolen. - * @new_event: (allow-none) (transfer full): pointer to a #GstEvent that will - * replace the event pointed to by @old_event. - * - * Modifies a pointer to a #GstEvent to point to a different #GstEvent. This - * function is similar to gst_event_replace() except that it takes ownership of - * @new_event. - * - * Either @new_event or the #GstEvent pointed to by @old_event may be NULL. - * - * Returns: TRUE if @new_event was different from @old_event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_event_take (GstEvent **old_event, GstEvent *new_event); -#endif - -static inline gboolean -gst_event_take (GstEvent **old_event, GstEvent *new_event) -{ - return gst_mini_object_take ((GstMiniObject **) old_event, (GstMiniObject *) new_event); -} - -/** - * GstQOSType: - * @GST_QOS_TYPE_OVERFLOW: The QoS event type that is produced when downstream - * elements are producing data too quickly and the element can't keep up - * processing the data. Upstream should reduce their processing rate. This - * type is also used when buffers arrive early or in time. - * @GST_QOS_TYPE_UNDERFLOW: The QoS event type that is produced when downstream - * elements are producing data too slowly and need to speed up their processing - * rate. - * @GST_QOS_TYPE_THROTTLE: The QoS event type that is produced when the - * application enabled throttling to limit the datarate. - * - * The different types of QoS events that can be given to the - * gst_event_new_qos() method. - */ -typedef enum { - GST_QOS_TYPE_OVERFLOW = 0, - GST_QOS_TYPE_UNDERFLOW = 1, - GST_QOS_TYPE_THROTTLE = 2 -} GstQOSType; - -/** - * GstEvent: - * @mini_object: the parent structure - * @type: the #GstEventType of the event - * @timestamp: the timestamp of the event - * @seqnum: the sequence number of the event - * - * A #GstEvent. - */ -struct _GstEvent { - GstMiniObject mini_object; - - /*< public >*/ /* with COW */ - GstEventType type; - guint64 timestamp; - guint32 seqnum; -}; - -const gchar* gst_event_type_get_name (GstEventType type); -GQuark gst_event_type_to_quark (GstEventType type); -GstEventTypeFlags - gst_event_type_get_flags (GstEventType type); - - -/* refcounting */ -/** - * gst_event_ref: - * @event: The event to refcount - * - * Increase the refcount of this event. - * - * Returns: (transfer full): @event (for convenience when doing assignments) - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstEvent * gst_event_ref (GstEvent * event); -#endif - -static inline GstEvent * -gst_event_ref (GstEvent * event) -{ - return (GstEvent *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (event)); -} - -/** - * gst_event_unref: - * @event: (transfer full): the event to refcount - * - * Decrease the refcount of an event, freeing it if the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_event_unref (GstEvent * event); -#endif - -static inline void -gst_event_unref (GstEvent * event) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (event)); -} - -/* copy event */ -/** - * gst_event_copy: - * @event: The event to copy - * - * Copy the event using the event specific copy function. - * - * Returns: (transfer full): the new event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstEvent * gst_event_copy (const GstEvent * event); -#endif - -static inline GstEvent * -gst_event_copy (const GstEvent * event) -{ - return GST_EVENT_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (event))); -} - -GType gst_event_get_type (void); - -/* custom event */ -GstEvent* gst_event_new_custom (GstEventType type, GstStructure *structure) G_GNUC_MALLOC; - -const GstStructure * - gst_event_get_structure (GstEvent *event); -GstStructure * gst_event_writable_structure (GstEvent *event); - -gboolean gst_event_has_name (GstEvent *event, const gchar *name); - -/* identifiers for events and messages */ -guint32 gst_event_get_seqnum (GstEvent *event); -void gst_event_set_seqnum (GstEvent *event, guint32 seqnum); - -/* Stream start event */ -GstEvent * gst_event_new_stream_start (const gchar *stream_id) G_GNUC_MALLOC; -void gst_event_parse_stream_start (GstEvent *event, const gchar **stream_id); - -/* flush events */ -GstEvent * gst_event_new_flush_start (void) G_GNUC_MALLOC; - -GstEvent * gst_event_new_flush_stop (gboolean reset_time) G_GNUC_MALLOC; -void gst_event_parse_flush_stop (GstEvent *event, gboolean *reset_time); - -/* EOS event */ -GstEvent * gst_event_new_eos (void) G_GNUC_MALLOC; - -/* GAP event */ -GstEvent * gst_event_new_gap (GstClockTime timestamp, - GstClockTime duration) G_GNUC_MALLOC; - -void gst_event_parse_gap (GstEvent * event, - GstClockTime * timestamp, - GstClockTime * duration); - -/* Caps events */ -GstEvent * gst_event_new_caps (GstCaps *caps) G_GNUC_MALLOC; -void gst_event_parse_caps (GstEvent *event, GstCaps **caps); - -/* segment event */ -GstEvent* gst_event_new_segment (const GstSegment *segment) G_GNUC_MALLOC; -void gst_event_parse_segment (GstEvent *event, const GstSegment **segment); -void gst_event_copy_segment (GstEvent *event, GstSegment *segment); - -/* tag event */ -GstEvent* gst_event_new_tag (GstTagList *taglist) G_GNUC_MALLOC; -void gst_event_parse_tag (GstEvent *event, GstTagList **taglist); - -/* TOC event */ -GstEvent* gst_event_new_toc (GstToc *toc, gboolean updated); -void gst_event_parse_toc (GstEvent *event, GstToc **toc, gboolean *updated); - - -/* buffer */ -GstEvent * gst_event_new_buffer_size (GstFormat format, gint64 minsize, gint64 maxsize, - gboolean async) G_GNUC_MALLOC; -void gst_event_parse_buffer_size (GstEvent *event, GstFormat *format, gint64 *minsize, - gint64 *maxsize, gboolean *async); - -/* sink message */ -GstEvent* gst_event_new_sink_message (const gchar *name, GstMessage *msg) G_GNUC_MALLOC; -void gst_event_parse_sink_message (GstEvent *event, GstMessage **msg); - -/* QOS events */ -GstEvent* gst_event_new_qos (GstQOSType type, gdouble proportion, - GstClockTimeDiff diff, GstClockTime timestamp) G_GNUC_MALLOC; -void gst_event_parse_qos (GstEvent *event, GstQOSType *type, - gdouble *proportion, GstClockTimeDiff *diff, - GstClockTime *timestamp); -/* seek event */ -GstEvent* gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags, - GstSeekType start_type, gint64 start, - GstSeekType stop_type, gint64 stop) G_GNUC_MALLOC; -void gst_event_parse_seek (GstEvent *event, gdouble *rate, GstFormat *format, - GstSeekFlags *flags, - GstSeekType *start_type, gint64 *start, - GstSeekType *stop_type, gint64 *stop); - -/* navigation event */ -GstEvent* gst_event_new_navigation (GstStructure *structure) G_GNUC_MALLOC; - -/* latency event */ -GstEvent* gst_event_new_latency (GstClockTime latency) G_GNUC_MALLOC; -void gst_event_parse_latency (GstEvent *event, GstClockTime *latency); - -/* step event */ -GstEvent* gst_event_new_step (GstFormat format, guint64 amount, gdouble rate, - gboolean flush, gboolean intermediate) G_GNUC_MALLOC; -void gst_event_parse_step (GstEvent *event, GstFormat *format, guint64 *amount, - gdouble *rate, gboolean *flush, gboolean *intermediate); - -/* renegotiate event */ -GstEvent* gst_event_new_reconfigure (void) G_GNUC_MALLOC; - -/* TOC select event */ -GstEvent* gst_event_new_toc_select (const gchar *uid) G_GNUC_MALLOC; -void gst_event_parse_toc_select (GstEvent *event, gchar **uid); - -/* segment-done event */ -GstEvent* gst_event_new_segment_done (GstFormat format, gint64 position) G_GNUC_MALLOC; -void gst_event_parse_segment_done (GstEvent *event, GstFormat *format, gint64 *position); - -G_END_DECLS - -#endif /* __GST_EVENT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstformat.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstformat.h deleted file mode 100644 index 13dad037..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstformat.h +++ /dev/null @@ -1,113 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstformat.h: Header for GstFormat types used in queries and - * seeking. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_FORMAT_H__ -#define __GST_FORMAT_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstFormat: - * @GST_FORMAT_UNDEFINED: undefined format - * @GST_FORMAT_DEFAULT: the default format of the pad/element. This can be - * samples for raw audio, frames/fields for raw video (some, but not all, - * elements support this; use @GST_FORMAT_TIME if you don't have a good - * reason to query for samples/frames) - * @GST_FORMAT_BYTES: bytes - * @GST_FORMAT_TIME: time in nanoseconds - * @GST_FORMAT_BUFFERS: buffers (few, if any, elements implement this as of - * May 2009) - * @GST_FORMAT_PERCENT: percentage of stream (few, if any, elements implement - * this as of May 2009) - * - * Standard predefined formats - */ -/* NOTE: don't forget to update the table in gstformat.c when changing - * this enum */ -typedef enum { - GST_FORMAT_UNDEFINED = 0, /* must be first in list */ - GST_FORMAT_DEFAULT = 1, - GST_FORMAT_BYTES = 2, - GST_FORMAT_TIME = 3, - GST_FORMAT_BUFFERS = 4, - GST_FORMAT_PERCENT = 5 -} GstFormat; - -/* a percentage is always relative to 1000000 */ -/** - * GST_FORMAT_PERCENT_MAX: - * - * The PERCENT format is between 0 and this value - */ -#define GST_FORMAT_PERCENT_MAX G_GINT64_CONSTANT (1000000) -/** - * GST_FORMAT_PERCENT_SCALE: - * - * The value used to scale down the reported PERCENT format value to - * its real value. - */ -#define GST_FORMAT_PERCENT_SCALE G_GINT64_CONSTANT (10000) - -typedef struct _GstFormatDefinition GstFormatDefinition; - -/** - * GstFormatDefinition: - * @value: The unique id of this format - * @nick: A short nick of the format - * @description: A longer description of the format - * @quark: A quark for the nick - * - * A format definition - */ -struct _GstFormatDefinition -{ - GstFormat value; - const gchar *nick; - const gchar *description; - GQuark quark; -}; - -const gchar* gst_format_get_name (GstFormat format); -GQuark gst_format_to_quark (GstFormat format); - -/* register a new format */ -GstFormat gst_format_register (const gchar *nick, - const gchar *description); -GstFormat gst_format_get_by_nick (const gchar *nick); - -/* check if a format is in an array of formats */ -gboolean gst_formats_contains (const GstFormat *formats, GstFormat format); - -/* query for format details */ -const GstFormatDefinition* - gst_format_get_details (GstFormat format); -GstIterator* gst_format_iterate_definitions (void); - -G_END_DECLS - -#endif /* __GST_FORMAT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstghostpad.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstghostpad.h deleted file mode 100644 index 77c79c4f..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstghostpad.h +++ /dev/null @@ -1,128 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Andy Wingo - * - * gstghostpad.h: Proxy pads - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_GHOST_PAD_H__ -#define __GST_GHOST_PAD_H__ - - -#include - - -G_BEGIN_DECLS - -#define GST_TYPE_PROXY_PAD (gst_proxy_pad_get_type ()) -#define GST_IS_PROXY_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PROXY_PAD)) -#define GST_IS_PROXY_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PROXY_PAD)) -#define GST_PROXY_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PROXY_PAD, GstProxyPad)) -#define GST_PROXY_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PROXY_PAD, GstProxyPadClass)) - -typedef struct _GstProxyPad GstProxyPad; -typedef struct _GstProxyPadPrivate GstProxyPadPrivate; -typedef struct _GstProxyPadClass GstProxyPadClass; - -struct _GstProxyPad -{ - GstPad pad; - - /*< private >*/ - GstProxyPadPrivate *priv; -}; - -struct _GstProxyPadClass -{ - GstPadClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[1]; -}; - -GType gst_proxy_pad_get_type (void); - -GstProxyPad* gst_proxy_pad_get_internal (GstProxyPad *pad); - - -GstIterator* gst_proxy_pad_iterate_internal_links_default (GstPad *pad, GstObject *parent) G_GNUC_MALLOC; -GstFlowReturn gst_proxy_pad_chain_default (GstPad *pad, GstObject *parent, - GstBuffer *buffer); -GstFlowReturn gst_proxy_pad_chain_list_default (GstPad *pad, GstObject *parent, - GstBufferList *list); -GstFlowReturn gst_proxy_pad_getrange_default (GstPad *pad, GstObject *parent, - guint64 offset, guint size, - GstBuffer **buffer); - -#define GST_TYPE_GHOST_PAD (gst_ghost_pad_get_type ()) -#define GST_IS_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GHOST_PAD)) -#define GST_IS_GHOST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GHOST_PAD)) -#define GST_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GHOST_PAD, GstGhostPad)) -#define GST_GHOST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GHOST_PAD, GstGhostPadClass)) -#define GST_GHOST_PAD_CAST(obj) ((GstGhostPad*)(obj)) - -/** - * GstGhostPad: - * - * Opaque #GstGhostPad structure. - */ -typedef struct _GstGhostPad GstGhostPad; -typedef struct _GstGhostPadPrivate GstGhostPadPrivate; -typedef struct _GstGhostPadClass GstGhostPadClass; - -struct _GstGhostPad -{ - GstProxyPad pad; - - /*< private >*/ - GstGhostPadPrivate *priv; -}; - -struct _GstGhostPadClass -{ - GstProxyPadClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - - -GType gst_ghost_pad_get_type (void); - -GstPad* gst_ghost_pad_new (const gchar *name, GstPad *target) G_GNUC_MALLOC; -GstPad* gst_ghost_pad_new_no_target (const gchar *name, GstPadDirection dir) G_GNUC_MALLOC; - -GstPad* gst_ghost_pad_new_from_template (const gchar *name, GstPad * target, GstPadTemplate * templ) G_GNUC_MALLOC; -GstPad* gst_ghost_pad_new_no_target_from_template (const gchar *name, GstPadTemplate * templ) G_GNUC_MALLOC; - -GstPad* gst_ghost_pad_get_target (GstGhostPad *gpad); -gboolean gst_ghost_pad_set_target (GstGhostPad *gpad, GstPad *newtarget); - -gboolean gst_ghost_pad_construct (GstGhostPad *gpad); - -gboolean gst_ghost_pad_activate_mode_default (GstPad * pad, GstObject * parent, - GstPadMode mode, gboolean active); - -gboolean gst_ghost_pad_internal_activate_mode_default (GstPad * pad, GstObject * parent, - GstPadMode mode, gboolean active); - -G_END_DECLS - -#endif /* __GST_GHOST_PAD_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstinfo.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstinfo.h deleted file mode 100644 index 155851cc..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstinfo.h +++ /dev/null @@ -1,1515 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2003 Benjamin Otte - * - * gstinfo.h: debugging functions - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GSTINFO_H__ -#define __GSTINFO_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstDebugLevel: - * @GST_LEVEL_NONE: No debugging level specified or desired. Used to deactivate - * debugging output. - * @GST_LEVEL_ERROR: Error messages are to be used only when an error occured - * that stops the application from keeping working correctly. - * An examples is gst_element_error, which outputs a message with this priority. - * It does not mean that the application is terminating as with g_errror. - * @GST_LEVEL_WARNING: Warning messages are to inform about abnormal behaviour - * that could lead to problems or weird behaviour later on. An example of this - * would be clocking issues ("your computer is pretty slow") or broken input - * data ("Can't synchronize to stream.") - * @GST_LEVEL_FIXME: Fixme messages are messages that indicate that something - * in the executed code path is not fully implemented or handled yet. Note - * that this does not replace proper error handling in any way, the purpose - * of this message is to make it easier to spot incomplete/unfinished pieces - * of code when reading the debug log. - * @GST_LEVEL_INFO: Informational messages should be used to keep the developer - * updated about what is happening. - * Examples where this should be used are when a typefind function has - * successfully determined the type of the stream or when an mp3 plugin detects - * the format to be used. ("This file has mono sound.") - * @GST_LEVEL_DEBUG: Debugging messages should be used when something common - * happens that is not the expected default behavior, or something that's - * useful to know but doesn't happen all the time (ie. per loop iteration or - * buffer processed or event handled). - * An example would be notifications about state changes or receiving/sending - * of events. - * @GST_LEVEL_LOG: Log messages are messages that are very common but might be - * useful to know. As a rule of thumb a pipeline that is iterating as expected - * should never output anything else but LOG messages. Use this log level to - * log recurring information in chain functions and loop functions, for - * example. - * @GST_LEVEL_TRACE: Tracing-related messages. - * Examples for this are referencing/dereferencing of objects. - * @GST_LEVEL_MEMDUMP: memory dump messages are used to log (small) chunks of - * data as memory dumps in the log. They will be displayed as hexdump with - * ASCII characters. - * @GST_LEVEL_COUNT: The number of defined debugging levels. - * - * The level defines the importance of a debugging message. The more important a - * message is, the greater the probability that the debugging system outputs it. - */ -typedef enum { - GST_LEVEL_NONE = 0, - GST_LEVEL_ERROR = 1, - GST_LEVEL_WARNING = 2, - GST_LEVEL_FIXME = 3, - GST_LEVEL_INFO = 4, - GST_LEVEL_DEBUG = 5, - GST_LEVEL_LOG = 6, - GST_LEVEL_TRACE = 7, - /* add more */ - GST_LEVEL_MEMDUMP = 9, - /* add more */ - GST_LEVEL_COUNT -} GstDebugLevel; - -/** - * GST_LEVEL_DEFAULT: - * - * Defines the default debugging level to be used with GStreamer. It is normally - * set to #GST_LEVEL_NONE so nothing get printed. - * As it can be configured at compile time, developer builds may chose to - * override that though. - * You can use this as an argument to gst_debug_set_default_threshold() to - * reset the debugging output to default behaviour. - */ -#ifndef GST_LEVEL_DEFAULT -#define GST_LEVEL_DEFAULT GST_LEVEL_NONE -#endif - -/* defines for format (colors etc) - * don't change them around, it uses terminal layout - * Terminal color strings: - * 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed - * Text color codes: - * 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white - * Background color codes: - * 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white - */ -/** - * GstDebugColorFlags: - * @GST_DEBUG_FG_BLACK: Use black as foreground color. - * @GST_DEBUG_FG_RED: Use red as foreground color. - * @GST_DEBUG_FG_GREEN: Use green as foreground color. - * @GST_DEBUG_FG_YELLOW: Use yellow as foreground color. - * @GST_DEBUG_FG_BLUE: Use blue as foreground color. - * @GST_DEBUG_FG_MAGENTA: Use magenta as foreground color. - * @GST_DEBUG_FG_CYAN: Use cyan as foreground color. - * @GST_DEBUG_FG_WHITE: Use white as foreground color. - * @GST_DEBUG_BG_BLACK: Use black as background color. - * @GST_DEBUG_BG_RED: Use red as background color. - * @GST_DEBUG_BG_GREEN: Use green as background color. - * @GST_DEBUG_BG_YELLOW: Use yellow as background color. - * @GST_DEBUG_BG_BLUE: Use blue as background color. - * @GST_DEBUG_BG_MAGENTA: Use magenta as background color. - * @GST_DEBUG_BG_CYAN: Use cyan as background color. - * @GST_DEBUG_BG_WHITE: Use white as background color. - * @GST_DEBUG_BOLD: Make the output bold. - * @GST_DEBUG_UNDERLINE: Underline the output. - * - * These are some terminal style flags you can use when creating your - * debugging categories to make them stand out in debugging output. - */ -typedef enum { - /* colors */ - GST_DEBUG_FG_BLACK = 0x0000, - GST_DEBUG_FG_RED = 0x0001, - GST_DEBUG_FG_GREEN = 0x0002, - GST_DEBUG_FG_YELLOW = 0x0003, - GST_DEBUG_FG_BLUE = 0x0004, - GST_DEBUG_FG_MAGENTA = 0x0005, - GST_DEBUG_FG_CYAN = 0x0006, - GST_DEBUG_FG_WHITE = 0x0007, - /* background colors */ - GST_DEBUG_BG_BLACK = 0x0000, - GST_DEBUG_BG_RED = 0x0010, - GST_DEBUG_BG_GREEN = 0x0020, - GST_DEBUG_BG_YELLOW = 0x0030, - GST_DEBUG_BG_BLUE = 0x0040, - GST_DEBUG_BG_MAGENTA = 0x0050, - GST_DEBUG_BG_CYAN = 0x0060, - GST_DEBUG_BG_WHITE = 0x0070, - /* other formats */ - GST_DEBUG_BOLD = 0x0100, - GST_DEBUG_UNDERLINE = 0x0200 -} GstDebugColorFlags; - -#define GST_DEBUG_FG_MASK (0x000F) -#define GST_DEBUG_BG_MASK (0x00F0) -#define GST_DEBUG_FORMAT_MASK (0xFF00) - -typedef struct _GstDebugCategory GstDebugCategory; -/** - * GstDebugCategory: - * - * This is the struct that describes the categories. Once initialized with - * #GST_DEBUG_CATEGORY_INIT, its values can't be changed anymore. - */ -struct _GstDebugCategory { - /*< private >*/ - gint threshold; - guint color; /* see defines above */ - - const gchar * name; - const gchar * description; -}; - -/********** some convenience macros for debugging **********/ - -/** - * GST_STR_NULL: - * @str: The string to check. - * - * Macro to use when a string must not be NULL, but may be NULL. If the string - * is NULL, "(NULL)" is printed instead. - * In GStreamer printf string arguments may not be NULL, because on some - * platforms (ie Solaris) the libc crashes in that case. This includes debugging - * strings. - */ -#define GST_STR_NULL(str) ((str) ? (str) : "(NULL)") - -/* FIXME, not MT safe */ -/** - * GST_DEBUG_PAD_NAME: - * @pad: The pad to debug. - * - * Evaluates to 2 strings, that describe the pad. Often used in debugging - * statements. - */ -#define GST_DEBUG_PAD_NAME(pad) \ - (pad != NULL) ? \ - ((GST_OBJECT_PARENT(pad) != NULL) ? \ - GST_STR_NULL (GST_OBJECT_NAME (GST_OBJECT_PARENT(pad))) : \ - "''" ) : "''", \ - (pad != NULL) ? GST_STR_NULL (GST_OBJECT_NAME (pad)) : "''" - -/** - * GST_FUNCTION: - * - * This macro should evaluate to the name of the current function and be should - * be defined when configuring your project, as it is compiler dependant. If it - * is not defined, some default value is used. It is used to provide debugging - * output with the function name of the message. - * - * Note that this is different from G_STRFUNC as we do not want the full - * function signature in C++ code. - */ -#ifndef GST_FUNCTION -#if defined (__GNUC__) || (defined (_MSC_VER) && _MSC_VER >= 1300) -# define GST_FUNCTION ((const char*) (__FUNCTION__)) -#elif defined (__STDC__) && defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -# define GST_FUNCTION ((const char*) (__func__)) -#else -# define GST_FUNCTION ((const char*) ("???")) -#endif -#endif /* ifndef GST_FUNCTION */ - - -typedef struct _GstDebugMessage GstDebugMessage; - -/** - * GstLogFunction: - * @category: a #GstDebugCategory - * @level: a #GstDebugLevel - * @file: file name - * @function: function name - * @line: line number - * @object: a #GObject - * @message: the message - * @user_data: user data for the log function - * - * Function prototype for a logging function that can be registered with - * gst_debug_add_log_function(). - * Use G_GNUC_NO_INSTRUMENT on that function. - */ -typedef void (*GstLogFunction) (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - GstDebugMessage * message, - gpointer user_data); - -#ifdef GST_USING_PRINTF_EXTENSION - -/* not using G_GNUC_PRINTF, since gcc will choke on GST_PTR_FORMAT being %P */ -void gst_debug_log (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - const gchar * format, - ...) G_GNUC_NO_INSTRUMENT; - -#else /* GST_USING_PRINTF_EXTENSION */ - -void gst_debug_log (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - const gchar * format, - ...) G_GNUC_PRINTF (7, 8) G_GNUC_NO_INSTRUMENT; - -#endif /* GST_USING_PRINTF_EXTENSION */ - -void gst_debug_log_valist (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - const gchar * format, - va_list args) G_GNUC_NO_INSTRUMENT; - -/* do not use this function, use the GST_DEBUG_CATEGORY_INIT macro */ -GstDebugCategory *_gst_debug_category_new (const gchar * name, - guint color, - const gchar * description); -/* do not use this function, use the GST_DEBUG_CATEGORY_GET macro */ -GstDebugCategory *_gst_debug_get_category (const gchar *name); - - -/* do not use this function, use the GST_CAT_MEMDUMP_* macros */ -void _gst_debug_dump_mem (GstDebugCategory * cat, const gchar * file, - const gchar * func, gint line, GObject * obj, const gchar * msg, - const guint8 * data, guint length); - -/* we define this to avoid a compiler warning regarding a cast from a function - * pointer to a void pointer - * (see https://bugzilla.gnome.org/show_bug.cgi?id=309253) - */ -typedef void (* GstDebugFuncPtr) (void); - -/* do no use these functions, use the GST_DEBUG*_FUNCPTR macros */ -void _gst_debug_register_funcptr (GstDebugFuncPtr func, - const gchar * ptrname); -const gchar * - _gst_debug_nameof_funcptr (GstDebugFuncPtr func) G_GNUC_NO_INSTRUMENT; - - -const gchar * gst_debug_message_get (GstDebugMessage * message); - -void gst_debug_log_default (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - GstDebugMessage * message, - gpointer unused) G_GNUC_NO_INSTRUMENT; - -const gchar * gst_debug_level_get_name (GstDebugLevel level); - -void gst_debug_add_log_function (GstLogFunction func, - gpointer user_data, - GDestroyNotify notify); - -guint gst_debug_remove_log_function (GstLogFunction func); -guint gst_debug_remove_log_function_by_data (gpointer data); - -void gst_debug_set_active (gboolean active); -gboolean gst_debug_is_active (void); - -void gst_debug_set_colored (gboolean colored); -gboolean gst_debug_is_colored (void); - -void gst_debug_set_default_threshold (GstDebugLevel level); -GstDebugLevel gst_debug_get_default_threshold (void); -void gst_debug_set_threshold_for_name (const gchar * name, - GstDebugLevel level); -void gst_debug_unset_threshold_for_name (const gchar * name); - - -void gst_debug_category_free (GstDebugCategory * category); -void gst_debug_category_set_threshold (GstDebugCategory * category, - GstDebugLevel level); -void gst_debug_category_reset_threshold (GstDebugCategory * category); -GstDebugLevel gst_debug_category_get_threshold (GstDebugCategory * category); -const gchar * gst_debug_category_get_name (GstDebugCategory * category); -guint gst_debug_category_get_color (GstDebugCategory * category); -const gchar * gst_debug_category_get_description (GstDebugCategory * category); -GSList * gst_debug_get_all_categories (void); - - -gchar * gst_debug_construct_term_color (guint colorinfo); -gint gst_debug_construct_win_color (guint colorinfo); - - -#ifndef GST_DISABLE_GST_DEBUG - -#define gst_debug_add_log_function(func,data,notify) \ -G_STMT_START{ \ - if (func == gst_debug_log_default) { \ - gst_debug_add_log_function(NULL,data,notify); \ - } else { \ - gst_debug_add_log_function(func,data,notify); \ - } \ -}G_STMT_END - -#define gst_debug_remove_log_function(func) \ - (func == gst_debug_log_default) ? \ - gst_debug_remove_log_function(NULL) : \ - gst_debug_remove_log_function(func) - -/** - * GST_DEBUG_CATEGORY: - * @cat: the category - * - * Defines a GstDebugCategory variable. - * This macro expands to nothing if debugging is disabled. - */ -#define GST_DEBUG_CATEGORY(cat) GstDebugCategory *cat = NULL -/** - * GST_DEBUG_CATEGORY_EXTERN: - * @cat: the category - * - * Declares a GstDebugCategory variable as extern. Use in header files. - * This macro expands to nothing if debugging is disabled. - */ -#define GST_DEBUG_CATEGORY_EXTERN(cat) extern GstDebugCategory *cat - -/** - * GST_DEBUG_CATEGORY_STATIC: - * @cat: the category - * - * Defines a static GstDebugCategory variable. - * This macro expands to nothing if debugging is disabled. - */ -#define GST_DEBUG_CATEGORY_STATIC(cat) static GstDebugCategory *cat = NULL - -/** - * GST_DEBUG_CATEGORY_INIT: - * @cat: the category to initialize. - * @name: the name of the category. - * @color: the colors to use for a color representation or 0 for no color. - * @description: optional description of the category. - * - * Initializes a new #GstDebugCategory with the given properties and set to - * the default threshold. - * - * - * - * This macro expands to nothing if debugging is disabled. - * - * - * When naming your category, please follow the following conventions to ensure - * that the pattern matching for categories works as expected. It is not - * earth-shattering if you don't follow these conventions, but it would be nice - * for everyone. - * - * - * If you define a category for a plugin or a feature of it, name the category - * like the feature. So if you wanted to write a "filesrc" element, you would - * name the category "filesrc". Use lowercase letters only. - * If you define more than one category for the same element, append an - * underscore and an identifier to your categories, like this: "filesrc_cache" - * - * - * If you create a library or an application using debugging categories, use a - * common prefix followed by an underscore for all your categories. GStreamer - * uses the GST prefix so GStreamer categories look like "GST_STATES". Be sure - * to include uppercase letters. - * - * - */ -#define GST_DEBUG_CATEGORY_INIT(cat,name,color,description) G_STMT_START{\ - if (cat == NULL) \ - cat = _gst_debug_category_new (name,color,description); \ -}G_STMT_END - -/** - * GST_DEBUG_CATEGORY_GET: - * @cat: the category to initialize. - * @name: log category name - * - * Looks up an existing #GstDebugCategory by its @name and sets @cat. If the - * category is not found, but GST_CAT_DEFAULT is defined, that is assigned to - * @cat. Otherwise @cat will be NULL. - * - * |[ - * GST_DEBUG_CATEGORY_STATIC (gst_myplugin_debug); - * #define GST_CAT_DEFAULT gst_myplugin_debug - * GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE); - * ... - * GST_DEBUG_CATEGORY_INIT (gst_myplugin_debug, "myplugin", 0, "nice element"); - * GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE"); - * ]| - */ -#ifdef GST_CAT_DEFAULT -#define GST_DEBUG_CATEGORY_GET(cat,name) G_STMT_START{\ - cat = _gst_debug_get_category (name); \ - if (!cat) { \ - cat = GST_CAT_DEFAULT; \ - } \ -}G_STMT_END -#else -#define GST_DEBUG_CATEGORY_GET(cat,name) G_STMT_START{\ - cat = _gst_debug_get_category (name); \ -}G_STMT_END -#endif - -/** - * GST_CAT_DEFAULT: - * - * Default gstreamer core debug log category. Please define your own. - */ -GST_EXPORT GstDebugCategory * GST_CAT_DEFAULT; -/* this symbol may not be used */ -GST_EXPORT gboolean _gst_debug_enabled; - -/* the min debug level, used for quickly discarding debug - * messages that fall under the threshold. */ -GST_EXPORT GstDebugLevel _gst_debug_min; - -/** - * GST_CAT_LEVEL_LOG: - * @cat: category to use - * @level: the severity of the message - * @object: the #GObject the message belongs to or NULL if none - * @...: A printf-style message to output - * - * Outputs a debugging message. This is the most general macro for outputting - * debugging messages. You will probably want to use one of the ones described - * below. - */ -#ifdef G_HAVE_ISO_VARARGS -#define GST_CAT_LEVEL_LOG(cat,level,object,...) G_STMT_START{ \ - if (G_UNLIKELY (level <= _gst_debug_min)) { \ - gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \ - (GObject *) (object), __VA_ARGS__); \ - } \ -}G_STMT_END -#else /* G_HAVE_GNUC_VARARGS */ -#ifdef G_HAVE_GNUC_VARARGS -#define GST_CAT_LEVEL_LOG(cat,level,object,args...) G_STMT_START{ \ - if (G_UNLIKELY (level <= _gst_debug_min)) { \ - gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \ - (GObject *) (object), ##args ); \ - } \ -}G_STMT_END -#else /* no variadic macros, use inline */ -static inline void -GST_CAT_LEVEL_LOG_valist (GstDebugCategory * cat, - GstDebugLevel level, gpointer object, const char *format, va_list varargs) -{ - if (G_UNLIKELY (level <= _gst_debug_min)) { - gst_debug_log_valist (cat, level, "", "", 0, (GObject *) object, format, - varargs); - } -} - -static inline void -GST_CAT_LEVEL_LOG (GstDebugCategory * cat, GstDebugLevel level, - gpointer object, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, level, object, format, varargs); - va_end (varargs); -} -#endif -#endif /* G_HAVE_ISO_VARARGS */ - -/* This one doesn't have varargs in the macro, so it's different than all the - * other macros and hence in a separate block right here. Docs chunks are - * with the other doc chunks below though. */ -#define __GST_CAT_MEMDUMP_LOG(cat,object,msg,data,length) G_STMT_START{ \ - if (G_UNLIKELY (GST_LEVEL_MEMDUMP <= _gst_debug_min)) { \ - _gst_debug_dump_mem ((cat), __FILE__, GST_FUNCTION, __LINE__, \ - (GObject *) (object), (msg), (data), (length)); \ - } \ -}G_STMT_END - -#define GST_CAT_MEMDUMP_OBJECT(cat,obj,msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(cat,obj,msg,data,length) -#define GST_CAT_MEMDUMP(cat,msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(cat,NULL,msg,data,length) -#define GST_MEMDUMP_OBJECT(obj,msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(GST_CAT_DEFAULT,obj,msg,data,length) -#define GST_MEMDUMP(msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(GST_CAT_DEFAULT,NULL,msg,data,length) - -/** - * GST_CAT_ERROR_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an error message belonging to the given object in the given category. - */ -/** - * GST_CAT_WARNING_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a warning message belonging to the given object in the given category. - */ -/** - * GST_CAT_INFO_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an informational message belonging to the given object in the given - * category. - */ -/** - * GST_CAT_DEBUG_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an debugging message belonging to the given object in the given category. - */ -/** - * GST_CAT_LOG_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an logging message belonging to the given object in the given category. - */ -/** - * GST_CAT_FIXME_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a fixme message belonging to the given object in the given category. - */ -/** - * GST_CAT_TRACE_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a tracing message belonging to the given object in the given - * category. - */ -/** - * GST_CAT_MEMDUMP_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a hexdump of @data relating to the given object in the given - * category. - */ - - -/** - * GST_CAT_ERROR: - * @cat: category to use - * @...: printf-style message to output - * - * Output an error message in the given category. - */ -/** - * GST_CAT_WARNING: - * @cat: category to use - * @...: printf-style message to output - * - * Output an warning message in the given category. - */ -/** - * GST_CAT_INFO: - * @cat: category to use - * @...: printf-style message to output - * - * Output an informational message in the given category. - */ -/** - * GST_CAT_DEBUG: - * @cat: category to use - * @...: printf-style message to output - * - * Output an debugging message in the given category. - */ -/** - * GST_CAT_LOG: - * @cat: category to use - * @...: printf-style message to output - * - * Output an logging message in the given category. - */ -/** - * GST_CAT_FIXME: - * @cat: category to use - * @...: printf-style message to output - * - * Output an fixme message in the given category. - */ -/** - * GST_CAT_TRACE: - * @cat: category to use - * @...: printf-style message to output - * - * Output a tracing message in the given category. - */ -/** - * GST_CAT_MEMDUMP: - * @cat: category to use - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a hexdump of @data in the given category. - */ - - -/** - * GST_ERROR_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an error message belonging to the given object in the default category. - */ -/** - * GST_WARNING_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a warning message belonging to the given object in the default category. - */ -/** - * GST_INFO_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an informational message belonging to the given object in the default - * category. - */ -/** - * GST_DEBUG_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a debugging message belonging to the given object in the default - * category. - */ -/** - * GST_LOG_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a logging message belonging to the given object in the default category. - */ -/** - * GST_FIXME_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a fixme message belonging to the given object in the default category. - */ -/** - * GST_TRACE_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a tracing message belonging to the given object in the default category. - */ -/** - * GST_MEMDUMP_OBJECT: - * @obj: the #GObject the message belongs to - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a logging message belonging to the given object in the default category. - */ - - -/** - * GST_ERROR: - * @...: printf-style message to output - * - * Output an error message in the default category. - */ -/** - * GST_WARNING: - * @...: printf-style message to output - * - * Output a warning message in the default category. - */ -/** - * GST_INFO: - * @...: printf-style message to output - * - * Output an informational message in the default category. - */ -/** - * GST_DEBUG: - * @...: printf-style message to output - * - * Output a debugging message in the default category. - */ -/** - * GST_LOG: - * @...: printf-style message to output - * - * Output a logging message in the default category. - */ -/** - * GST_FIXME: - * @...: printf-style message to output - * - * Output a fixme message in the default category. - */ -/** - * GST_TRACE: - * @...: printf-style message to output - * - * Output a tracing message in the default category. - */ -/** - * GST_MEMDUMP: - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a hexdump of @data. - */ - -#ifdef G_HAVE_ISO_VARARGS - -#define GST_CAT_ERROR_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, obj, __VA_ARGS__) -#define GST_CAT_WARNING_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, obj, __VA_ARGS__) -#define GST_CAT_INFO_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, obj, __VA_ARGS__) -#define GST_CAT_DEBUG_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, obj, __VA_ARGS__) -#define GST_CAT_LOG_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, obj, __VA_ARGS__) -#define GST_CAT_FIXME_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, obj, __VA_ARGS__) -#define GST_CAT_TRACE_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, obj, __VA_ARGS__) - -#define GST_CAT_ERROR(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, NULL, __VA_ARGS__) -#define GST_CAT_WARNING(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, NULL, __VA_ARGS__) -#define GST_CAT_INFO(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, NULL, __VA_ARGS__) -#define GST_CAT_DEBUG(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, NULL, __VA_ARGS__) -#define GST_CAT_LOG(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, NULL, __VA_ARGS__) -#define GST_CAT_FIXME(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, NULL, __VA_ARGS__) -#define GST_CAT_TRACE(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, NULL, __VA_ARGS__) - -#define GST_ERROR_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, obj, __VA_ARGS__) -#define GST_WARNING_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, obj, __VA_ARGS__) -#define GST_INFO_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, obj, __VA_ARGS__) -#define GST_DEBUG_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, obj, __VA_ARGS__) -#define GST_LOG_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, obj, __VA_ARGS__) -#define GST_FIXME_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, obj, __VA_ARGS__) -#define GST_TRACE_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, obj, __VA_ARGS__) - -#define GST_ERROR(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, NULL, __VA_ARGS__) -#define GST_WARNING(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, NULL, __VA_ARGS__) -#define GST_INFO(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, NULL, __VA_ARGS__) -#define GST_DEBUG(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, NULL, __VA_ARGS__) -#define GST_LOG(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, NULL, __VA_ARGS__) -#define GST_FIXME(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, NULL, __VA_ARGS__) -#define GST_TRACE(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, NULL, __VA_ARGS__) - -#else -#ifdef G_HAVE_GNUC_VARARGS - -#define GST_CAT_ERROR_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, obj, ##args ) -#define GST_CAT_WARNING_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, obj, ##args ) -#define GST_CAT_INFO_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, obj, ##args ) -#define GST_CAT_DEBUG_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, obj, ##args ) -#define GST_CAT_LOG_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, obj, ##args ) -#define GST_CAT_FIXME_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, obj, ##args ) -#define GST_CAT_TRACE_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, obj, ##args ) - -#define GST_CAT_ERROR(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, NULL, ##args ) -#define GST_CAT_WARNING(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, NULL, ##args ) -#define GST_CAT_INFO(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, NULL, ##args ) -#define GST_CAT_DEBUG(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, NULL, ##args ) -#define GST_CAT_LOG(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, NULL, ##args ) -#define GST_CAT_FIXME(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, NULL, ##args ) -#define GST_CAT_TRACE(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, NULL, ##args ) - -#define GST_ERROR_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, obj, ##args ) -#define GST_WARNING_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, obj, ##args ) -#define GST_INFO_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, obj, ##args ) -#define GST_DEBUG_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, obj, ##args ) -#define GST_LOG_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, obj, ##args ) -#define GST_FIXME_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, obj, ##args ) -#define GST_TRACE_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, obj, ##args ) - -#define GST_ERROR(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, NULL, ##args ) -#define GST_WARNING(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, NULL, ##args ) -#define GST_INFO(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, NULL, ##args ) -#define GST_DEBUG(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, NULL, ##args ) -#define GST_LOG(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, NULL, ##args ) -#define GST_FIXME(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, NULL, ##args ) -#define GST_TRACE(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, NULL, ##args ) - -#else -/* no variadic macros, use inline */ -static inline void -GST_CAT_ERROR_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_ERROR, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_WARNING_OBJECT (GstDebugCategory * cat, gpointer obj, - const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_WARNING, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_INFO_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_INFO, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_DEBUG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_DEBUG, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_LOG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_LOG, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_FIXME_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_FIXME, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_TRACE_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_TRACE, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_ERROR (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_ERROR, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_WARNING (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_WARNING, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_INFO (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_INFO, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_DEBUG (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_DEBUG, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_LOG (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_LOG, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_FIXME (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_FIXME, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_TRACE (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_TRACE, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_ERROR_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_ERROR, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_WARNING_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_WARNING, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_INFO_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_INFO, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_DEBUG_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_LOG_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_LOG, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_FIXME_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_FIXME, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_TRACE_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_TRACE, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_ERROR (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_ERROR, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_WARNING (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_WARNING, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_INFO (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_INFO, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_DEBUG (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_LOG (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_LOG, NULL, - format, varargs); - va_end (varargs); -} - -static inline void -GST_FIXME (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_FIXME, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_TRACE (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_TRACE, NULL, format, - varargs); - va_end (varargs); -} -#endif -#endif - - -/********** function pointer stuff **********/ - -/** - * GST_DEBUG_REGISTER_FUNCPTR: - * @ptr: pointer to the function to register - * - * Register a pointer to a function with its name, so it can later be used by - * GST_DEBUG_FUNCPTR_NAME(). - * - * Use this variant of #GST_DEBUG_FUNCPTR if you do not need to use @ptr. - */ -#define GST_DEBUG_REGISTER_FUNCPTR(ptr) \ - _gst_debug_register_funcptr((GstDebugFuncPtr)(ptr), #ptr) -/** - * GST_DEBUG_FUNCPTR: - * @ptr: pointer to the function to register - * - * Register a pointer to a function with its name, so it can later be used by - * GST_DEBUG_FUNCPTR_NAME(). - * - * Returns: the value passed to @ptr. - */ -#define GST_DEBUG_FUNCPTR(ptr) \ - (_gst_debug_register_funcptr((GstDebugFuncPtr)(ptr), #ptr) , ptr) - -/** - * GST_DEBUG_FUNCPTR_NAME: - * @ptr: address of the function of which to look up the name - * - * Retrieves the name of the function, if it was previously registered with - * GST_DEBUG_FUNCPTR(). If not, it returns a description of the pointer. - * - * This macro returns a constant string which must not be modified or - * freed by the caller. - */ -#define GST_DEBUG_FUNCPTR_NAME(ptr) \ - _gst_debug_nameof_funcptr((GstDebugFuncPtr)ptr) - - -#else /* GST_DISABLE_GST_DEBUG */ - - -#ifndef GST_INFO_C - -#if defined(__GNUC__) && __GNUC__ >= 3 -# pragma GCC poison gst_debug_log -# pragma GCC poison gst_debug_log_valist -# pragma GCC poison _gst_debug_category_new -#endif - -#define _gst_debug_min GST_LEVEL_NONE - -#define gst_debug_set_default_threshold(level) G_STMT_START{ }G_STMT_END -#define gst_debug_get_default_threshold() (GST_LEVEL_NONE) - -#define gst_debug_level_get_name(level) ("NONE") -#define gst_debug_message_get(message) ("") -#define gst_debug_add_log_function(func,data,notify) G_STMT_START{ }G_STMT_END -#define gst_debug_set_active(active) G_STMT_START{ }G_STMT_END -#define gst_debug_is_active() (FALSE) -#define gst_debug_set_colored(colored) G_STMT_START{ }G_STMT_END -#define gst_debug_is_colored() (FALSE) -#define gst_debug_set_default_threshold(level) G_STMT_START{ }G_STMT_END -#define gst_debug_get_default_threshold() (GST_LEVEL_NONE) -#define gst_debug_set_threshold_for_name(name,level) G_STMT_START{ }G_STMT_END -#define gst_debug_unset_threshold_for_name(name) G_STMT_START{ }G_STMT_END - -/* we are using dummy function prototypes here to eat ';' as these macros are - * used outside of functions */ -#define GST_DEBUG_CATEGORY(var) void _gst_debug_dummy_##var (void) -#define GST_DEBUG_CATEGORY_EXTERN(var) void _gst_debug_dummy_extern_##var (void) -#define GST_DEBUG_CATEGORY_STATIC(var) void _gst_debug_dummy_static_##var (void) - -#define GST_DEBUG_CATEGORY_INIT(var,name,color,desc) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_CATEGORY_GET(var,name) G_STMT_START{ }G_STMT_END -#define gst_debug_category_free(category) G_STMT_START{ }G_STMT_END -#define gst_debug_category_set_threshold(category,level) G_STMT_START{ }G_STMT_END -#define gst_debug_category_reset_threshold(category) G_STMT_START{ }G_STMT_END -#define gst_debug_category_get_threshold(category) (GST_LEVEL_NONE) -#define gst_debug_category_get_name(cat) ("") -#define gst_debug_category_get_color(cat) (0) -#define gst_debug_category_get_description(cat) ("") -#define gst_debug_get_all_categories() (NULL) -#define gst_debug_construct_term_color(colorinfo) (g_strdup ("00")) -#define gst_debug_construct_win_color(colorinfo) (0) - -#endif /* !GST_INFO_C */ - -#ifdef G_HAVE_ISO_VARARGS - -#define GST_CAT_LEVEL_LOG(cat,level,...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE_OBJECT(...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE(...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_WARNING_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_INFO_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_LOG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_FIXME_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_TRACE_OBJECT(...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR(...) G_STMT_START{ }G_STMT_END -#define GST_WARNING(...) G_STMT_START{ }G_STMT_END -#define GST_INFO(...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG(...) G_STMT_START{ }G_STMT_END -#define GST_LOG(...) G_STMT_START{ }G_STMT_END -#define GST_FIXME(...) G_STMT_START{ }G_STMT_END -#define GST_TRACE(...) G_STMT_START{ }G_STMT_END - -#else /* !G_HAVE_ISO_VARARGS */ -#ifdef G_HAVE_GNUC_VARARGS - -#define GST_CAT_LEVEL_LOG(cat,level,args...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE_OBJECT(args...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE(args...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_WARNING_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_INFO_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_LOG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_FIXME_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_TRACE_OBJECT(args...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR(args...) G_STMT_START{ }G_STMT_END -#define GST_WARNING(args...) G_STMT_START{ }G_STMT_END -#define GST_INFO(args...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG(args...) G_STMT_START{ }G_STMT_END -#define GST_LOG(args...) G_STMT_START{ }G_STMT_END -#define GST_FIXME(args...) G_STMT_START{ }G_STMT_END -#define GST_TRACE(args...) G_STMT_START{ }G_STMT_END - -#else /* !G_HAVE_GNUC_VARARGS */ -static inline void -GST_CAT_LEVEL_LOG_valist (GstDebugCategory * cat, - GstDebugLevel level, gpointer object, const char *format, va_list varargs) -{ -} - -static inline void -GST_CAT_ERROR_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_WARNING_OBJECT (GstDebugCategory * cat, gpointer obj, - const char *format, ...) -{ -} - -static inline void -GST_CAT_INFO_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_DEBUG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_LOG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_FIXME_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_TRACE_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_ERROR (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_WARNING (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_INFO (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_DEBUG (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_LOG (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_FIXME (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_TRACE (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_ERROR_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_WARNING_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_INFO_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_DEBUG_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_LOG_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_FIXME_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_TRACE_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_ERROR (const char *format, ...) -{ -} - -static inline void -GST_WARNING (const char *format, ...) -{ -} - -static inline void -GST_INFO (const char *format, ...) -{ -} - -static inline void -GST_DEBUG (const char *format, ...) -{ -} - -static inline void -GST_LOG (const char *format, ...) -{ -} - -static inline void -GST_FIXME (const char *format, ...) -{ -} - -static inline void -GST_TRACE (const char *format, ...) -{ -} - -#endif /* G_HAVE_GNUC_VARARGS */ -#endif /* G_HAVE_ISO_VARARGS */ - -#define GST_DEBUG_REGISTER_FUNCPTR(ptr) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_FUNCPTR(ptr) (ptr) -#define GST_DEBUG_FUNCPTR_NAME(ptr) (g_strdup_printf ("%p", ptr)) - -#define GST_CAT_MEMDUMP_OBJECT(cat,obj,msg,data,length) G_STMT_START{ }G_STMT_END -#define GST_CAT_MEMDUMP(cat,msg,data,length) G_STMT_START{ }G_STMT_END -#define GST_MEMDUMP_OBJECT(obj,msg,data,length) G_STMT_START{ }G_STMT_END -#define GST_MEMDUMP(msg,data,length) G_STMT_START{ }G_STMT_END - -#endif /* GST_DISABLE_GST_DEBUG */ - - -void gst_debug_print_stack_trace (void); - -G_END_DECLS - -#endif /* __GSTINFO_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstiterator.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstiterator.h deleted file mode 100644 index 2a21f8b3..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstiterator.h +++ /dev/null @@ -1,273 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Wim Taymans - * Copyright (C) 2011 Sebastian Dröge - * - * gstiterator.h: Header for GstIterator - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ITERATOR_H__ -#define __GST_ITERATOR_H__ - -#include /* for GValue in the fold */ -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ITERATOR (gst_iterator_get_type ()) - -/** - * GstIteratorResult: - * @GST_ITERATOR_DONE: No more items in the iterator - * @GST_ITERATOR_OK: An item was retrieved - * @GST_ITERATOR_RESYNC: Datastructure changed while iterating - * @GST_ITERATOR_ERROR: An error happened - * - * The result of gst_iterator_next(). - */ -typedef enum { - GST_ITERATOR_DONE = 0, - GST_ITERATOR_OK = 1, - GST_ITERATOR_RESYNC = 2, - GST_ITERATOR_ERROR = 3 -} GstIteratorResult; - -typedef struct _GstIterator GstIterator; - -/** - * GstIteratorItem: - * @GST_ITERATOR_ITEM_SKIP: Skip this item - * @GST_ITERATOR_ITEM_PASS: Return item - * @GST_ITERATOR_ITEM_END: Stop after this item. - * - * The result of a #GstIteratorItemFunction. - */ -typedef enum { - GST_ITERATOR_ITEM_SKIP = 0, - GST_ITERATOR_ITEM_PASS = 1, - GST_ITERATOR_ITEM_END = 2 -} GstIteratorItem; - -/** - * GstIteratorCopyFunction: - * @it: The original iterator - * @copy: The copied iterator - * - * This function will be called when creating a copy of @it and should - * create a copy of all custom iterator fields or increase their - * reference counts. - */ -typedef void (*GstIteratorCopyFunction) (const GstIterator *it, GstIterator *copy); - -/** - * GstIteratorItemFunction: - * @it: the iterator - * @item: the item being retrieved. - * - * The function that will be called after the next item of the iterator - * has been retrieved. This function can be used to skip items or stop - * the iterator. - * - * The function will be called with the iterator lock held. - * - * Returns: the result of the operation. - */ -typedef GstIteratorItem (*GstIteratorItemFunction) (GstIterator *it, const GValue * item); - -/** - * GstIteratorNextFunction: - * @it: the iterator - * @result: a pointer to hold the next item - * - * The function that will be called when the next element of the iterator - * should be retrieved. - * - * Implementors of a #GstIterator should implement this - * function and pass it to the constructor of the custom iterator. - * The function will be called with the iterator lock held. - * - * Returns: the result of the operation. - */ -typedef GstIteratorResult (*GstIteratorNextFunction) (GstIterator *it, GValue *result); -/** - * GstIteratorResyncFunction: - * @it: the iterator - * - * This function will be called whenever a concurrent update happened - * to the iterated datastructure. The implementor of the iterator should - * restart the iterator from the beginning and clean up any state it might - * have. - * - * Implementors of a #GstIterator should implement this - * function and pass it to the constructor of the custom iterator. - * The function will be called with the iterator lock held. - */ -typedef void (*GstIteratorResyncFunction) (GstIterator *it); -/** - * GstIteratorFreeFunction: - * @it: the iterator - * - * This function will be called when the iterator is freed. - * - * Implementors of a #GstIterator should implement this - * function and pass it to the constructor of the custom iterator. - * The function will be called with the iterator lock held. - */ -typedef void (*GstIteratorFreeFunction) (GstIterator *it); - -/** - * GstIteratorForeachFunction: - * @item: The item - * @user_data: User data - * - * A function that is called by gst_iterator_foreach() for every element. - */ -typedef void (*GstIteratorForeachFunction) (const GValue * item, gpointer user_data); - -/** - * GstIteratorFoldFunction: - * @item: the item to fold - * @ret: a #GValue collecting the result - * @user_data: data passed to gst_iterator_fold() - * - * A function to be passed to gst_iterator_fold(). - * - * Returns: TRUE if the fold should continue, FALSE if it should stop. - */ -typedef gboolean (*GstIteratorFoldFunction) (const GValue * item, GValue * ret, gpointer user_data); - -/** - * GST_ITERATOR: - * @it: the #GstIterator value - * - * Macro to cast to a #GstIterator - */ -#define GST_ITERATOR(it) ((GstIterator*)(it)) -/** - * GST_ITERATOR_LOCK: - * @it: the #GstIterator to get the lock of - * - * Macro to get the lock protecting the datastructure being iterated. - */ -#define GST_ITERATOR_LOCK(it) (GST_ITERATOR(it)->lock) -/** - * GST_ITERATOR_COOKIE: - * @it: the #GstIterator to get the cookie of - * - * Macro to get the cookie of a #GstIterator. The cookie of the - * iterator is the value of the master cookie when the iterator - * was created. - * Whenever the iterator is iterated, the value is compared to the - * value of the master cookie. If they are different, a concurrent - * modification happened to the iterator and a resync is needed. - */ -#define GST_ITERATOR_COOKIE(it) (GST_ITERATOR(it)->cookie) -/** - * GST_ITERATOR_ORIG_COOKIE: - * @it: the #GstIterator to get the master cookie of - * - * Macro to get a pointer to where the master cookie is stored. The - * master cookie protects the structure being iterated and gets updated - * whenever the datastructure changes. - */ -#define GST_ITERATOR_ORIG_COOKIE(it) (GST_ITERATOR(it)->master_cookie) - -/** - * GstIterator: - * @copy: The function to copy the iterator - * @next: The function to get the next item in the iterator - * @item: The function to be called for each item retrieved - * @resync: The function to call when a resync is needed. - * @free: The function to call when the iterator is freed - * @pushed: The iterator that is currently pushed with gst_iterator_push() - * @type: The type of the object that this iterator will return - * @lock: The lock protecting the data structure and the cookie. - * @cookie: The cookie; the value of the master_cookie when this iterator was - * created. - * @master_cookie: A pointer to the master cookie. - * @size: the size of the iterator - * - * #GstIterator base structure. The values of this structure are - * protected for subclasses, use the methods to use the #GstIterator. - */ -struct _GstIterator { - /*< protected >*/ - GstIteratorCopyFunction copy; - GstIteratorNextFunction next; - GstIteratorItemFunction item; - GstIteratorResyncFunction resync; - GstIteratorFreeFunction free; - - GstIterator *pushed; /* pushed iterator */ - - GType type; - GMutex *lock; - guint32 cookie; /* cookie of the iterator */ - guint32 *master_cookie; /* pointer to guint32 holding the cookie when this - iterator was created */ - guint size; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_iterator_get_type (void); - -/* creating iterators */ -GstIterator* gst_iterator_new (guint size, - GType type, - GMutex *lock, - guint32 *master_cookie, - GstIteratorCopyFunction copy, - GstIteratorNextFunction next, - GstIteratorItemFunction item, - GstIteratorResyncFunction resync, - GstIteratorFreeFunction free) G_GNUC_MALLOC; - -GstIterator* gst_iterator_new_list (GType type, - GMutex *lock, - guint32 *master_cookie, - GList **list, - GObject * owner, - GstIteratorItemFunction item) G_GNUC_MALLOC; - -GstIterator* gst_iterator_new_single (GType type, - const GValue * object) G_GNUC_MALLOC; - -GstIterator* gst_iterator_copy (const GstIterator *it) G_GNUC_MALLOC; - -/* using iterators */ -GstIteratorResult gst_iterator_next (GstIterator *it, GValue * elem); -void gst_iterator_resync (GstIterator *it); -void gst_iterator_free (GstIterator *it); - -void gst_iterator_push (GstIterator *it, GstIterator *other); - -/* higher-order functions that operate on iterators */ -GstIterator* gst_iterator_filter (GstIterator *it, GCompareFunc func, - const GValue * user_data) G_GNUC_MALLOC; -GstIteratorResult gst_iterator_fold (GstIterator *it, - GstIteratorFoldFunction func, - GValue *ret, gpointer user_data); -GstIteratorResult gst_iterator_foreach (GstIterator *it, - GstIteratorForeachFunction func, gpointer user_data); -gboolean gst_iterator_find_custom (GstIterator *it, GCompareFunc func, - GValue *elem, gpointer user_data); - -G_END_DECLS - -#endif /* __GST_ITERATOR_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmacros.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmacros.h deleted file mode 100644 index e38af539..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmacros.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __GST_MACROS_H__ -#define __GST_MACROS_H__ - -G_BEGIN_DECLS - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -# define GST_GNUC_CONSTRUCTOR \ - __attribute__ ((constructor)) -#else /* !__GNUC__ */ -# define GST_GNUC_CONSTRUCTOR -#endif /* !__GNUC__ */ - -#if defined (__GNUC__) && !defined (GST_IMPLEMENT_INLINES) -# define GST_INLINE_FUNC extern __inline__ -# define GST_CAN_INLINE 1 -#elif defined(_MSC_VER) -# define GST_INLINE_FUNC extern __inline -# define GST_CAN_INLINE 1 -#else -# define GST_INLINE_FUNC extern -# undef GST_CAN_INLINE -#endif - -#if (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) && !defined(restrict) -# if defined(__GNUC__) && __GNUC__ >= 4 -# define restrict __restrict__ -# else -# define restrict -# endif -#endif - -G_END_DECLS - -#endif /* __GST_MACROS_H__ */ - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmemory.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmemory.h deleted file mode 100644 index 08208186..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmemory.h +++ /dev/null @@ -1,325 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Wim Taymans - * - * gstmemory.h: Header for memory blocks - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_MEMORY_H__ -#define __GST_MEMORY_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_MEMORY (gst_memory_get_type()) -GType gst_memory_get_type(void); - -typedef struct _GstMemory GstMemory; -typedef struct _GstAllocator GstAllocator; - -#define GST_MEMORY_CAST(mem) ((GstMemory *)(mem)) - -/** - * GstMemoryFlags: - * @GST_MEMORY_FLAG_READONLY: memory is readonly. It is not allowed to map the - * memory with #GST_MAP_WRITE. - * @GST_MEMORY_FLAG_NO_SHARE: memory must not be shared. Copies will have to be - * made when this memory needs to be shared between buffers. - * @GST_MEMORY_FLAG_ZERO_PREFIXED: the memory prefix is filled with 0 bytes - * @GST_MEMORY_FLAG_ZERO_PADDED: the memory padding is filled with 0 bytes - * @GST_MEMORY_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags for wrapped memory. - */ -typedef enum { - GST_MEMORY_FLAG_READONLY = GST_MINI_OBJECT_FLAG_LOCK_READONLY, - GST_MEMORY_FLAG_NO_SHARE = (GST_MINI_OBJECT_FLAG_LAST << 0), - GST_MEMORY_FLAG_ZERO_PREFIXED = (GST_MINI_OBJECT_FLAG_LAST << 1), - GST_MEMORY_FLAG_ZERO_PADDED = (GST_MINI_OBJECT_FLAG_LAST << 2), - - GST_MEMORY_FLAG_LAST = (GST_MINI_OBJECT_FLAG_LAST << 16) -} GstMemoryFlags; - -/** - * GST_MEMORY_FLAGS: - * @mem: a #GstMemory. - * - * A flags word containing #GstMemoryFlags flags set on @mem - */ -#define GST_MEMORY_FLAGS(mem) GST_MINI_OBJECT_FLAGS (mem) -/** - * GST_MEMORY_FLAG_IS_SET: - * @mem: a #GstMemory. - * @flag: the #GstMemoryFlags to check. - * - * Gives the status of a specific flag on a @mem. - */ -#define GST_MEMORY_FLAG_IS_SET(mem,flag) GST_MINI_OBJECT_FLAG_IS_SET (mem,flag) -/** - * GST_MEMORY_FLAG_UNSET: - * @mem: a #GstMemory. - * @flag: the #GstMemoryFlags to clear. - * - * Clear a specific flag on a @mem. - */ -#define GST_MEMORY_FLAG_UNSET(mem,flag) GST_MINI_OBJECT_FLAG_UNSET (mem, flag) - -/** - * GST_MEMORY_IS_READONLY: - * @mem: a #GstMemory. - * - * Check if @mem is readonly. - */ -#define GST_MEMORY_IS_READONLY(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_READONLY) -/** - * GST_MEMORY_IS_NO_SHARE: - * @mem: a #GstMemory. - * - * Check if @mem cannot be shared between buffers - */ -#define GST_MEMORY_IS_NO_SHARE(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_NO_SHARE) -/** - * GST_MEMORY_IS_ZERO_PREFIXED: - * @mem: a #GstMemory. - * - * Check if the prefix in @mem is 0 filled. - */ -#define GST_MEMORY_IS_ZERO_PREFIXED(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_ZERO_PREFIXED) -/** - * GST_MEMORY_IS_ZERO_PADDED: - * @mem: a #GstMemory. - * - * Check if the padding in @mem is 0 filled. - */ -#define GST_MEMORY_IS_ZERO_PADDED(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_ZERO_PADDED) - - -/** - * GstMemory: - * @mini_object: parent structure - * @allocator: pointer to the #GstAllocator - * @parent: parent memory block - * @maxsize: the maximum size allocated - * @align: the alignment of the memory - * @offset: the offset where valid data starts - * @size: the size of valid data - * - * Base structure for memory implementations. Custom memory will put this structure - * as the first member of their structure. - */ -struct _GstMemory { - GstMiniObject mini_object; - - GstAllocator *allocator; - - GstMemory *parent; - gsize maxsize; - gsize align; - gsize offset; - gsize size; -}; - -/** - * GstMapFlags: - * @GST_MAP_READ: map for read access - * @GST_MAP_WRITE: map for write access - * @GST_MAP_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags used when mapping memory - */ -typedef enum { - GST_MAP_READ = GST_LOCK_FLAG_READ, - GST_MAP_WRITE = GST_LOCK_FLAG_WRITE, - - GST_MAP_FLAG_LAST = (1 << 16) -} GstMapFlags; - -/** - * GST_MAP_READWRITE: - * - * GstMapFlags value alias for GST_MAP_READ | GST_MAP_WRITE - */ -#define GST_MAP_READWRITE (GST_MAP_READ | GST_MAP_WRITE) - - -/** - * GstMapInfo: - * @memory: a pointer to the mapped memory - * @flags: flags used when mapping the memory - * @data: (array length=size): a pointer to the mapped data - * @size: the valid size in @data - * @maxsize: the maximum bytes in @data - * @user_data: extra private user_data that the implementation of the memory - * can use to store extra info. - * - * A structure containing the result of a map operation such as - * gst_memory_map(). It contains the data and size. - */ -typedef struct { - GstMemory *memory; - GstMapFlags flags; - guint8 *data; - gsize size; - gsize maxsize; - /*< protected >*/ - gpointer user_data[4]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstMapInfo; - -/** - * GST_MAP_INFO_INIT: - * - * Initializer for #GstMapInfo - */ -#define GST_MAP_INFO_INIT { NULL, 0, NULL, 0, 0, } - -/** - * GstMemoryMapFunction: - * @mem: a #GstMemory - * @maxsize: size to map - * @flags: access mode for the memory - * - * Get the memory of @mem that can be accessed according to the mode specified - * in @flags. The function should return a pointer that contains at least - * @maxsize bytes. - * - * Returns: a pointer to memory of which at least @maxsize bytes can be - * accessed according to the access pattern in @flags. - */ -typedef gpointer (*GstMemoryMapFunction) (GstMemory *mem, gsize maxsize, GstMapFlags flags); - -/** - * GstMemoryUnmapFunction: - * @mem: a #GstMemory - * - * Return the pointer previously retrieved with gst_memory_map(). - * - * Returns: %TRUE on success. - */ -typedef void (*GstMemoryUnmapFunction) (GstMemory *mem); - -/** - * GstMemoryCopyFunction: - * @mem: a #GstMemory - * @offset: an offset - * @size: a size or -1 - * - * Copy @size bytes from @mem starting at @offset and return them wrapped in a - * new GstMemory object. - * If @size is set to -1, all bytes starting at @offset are copied. - * - * Returns: a new #GstMemory object wrapping a copy of the requested region in - * @mem. - */ -typedef GstMemory * (*GstMemoryCopyFunction) (GstMemory *mem, gssize offset, gssize size); - -/** - * GstMemoryShareFunction: - * @mem: a #GstMemory - * @offset: an offset - * @size: a size or -1 - * - * Share @size bytes from @mem starting at @offset and return them wrapped in a - * new GstMemory object. If @size is set to -1, all bytes starting at @offset are - * shared. This function does not make a copy of the bytes in @mem. - * - * Returns: a new #GstMemory object sharing the requested region in @mem. - */ -typedef GstMemory * (*GstMemoryShareFunction) (GstMemory *mem, gssize offset, gssize size); - -/** - * GstMemoryIsSpanFunction: - * @mem1: a #GstMemory - * @mem2: a #GstMemory - * @offset: a result offset - * - * Check if @mem1 and @mem2 occupy contiguous memory and return the offset of - * @mem1 in the parent buffer in @offset. - * - * Returns: %TRUE if @mem1 and @mem2 are in contiguous memory. - */ -typedef gboolean (*GstMemoryIsSpanFunction) (GstMemory *mem1, GstMemory *mem2, gsize *offset); - -void gst_memory_init (GstMemory *mem, GstMemoryFlags flags, - GstAllocator *allocator, GstMemory *parent, - gsize maxsize, gsize align, - gsize offset, gsize size); -/* refcounting */ -/** - * gst_memory_ref: - * @memory: The memory to refcount - * - * Increase the refcount of this memory. - * - * Returns: (transfer full): @memory (for convenience when doing assignments) - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMemory * gst_memory_ref (GstMemory * memory); -#endif - -static inline GstMemory * -gst_memory_ref (GstMemory * memory) -{ - return (GstMemory *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (memory)); -} - -/** - * gst_memory_unref: - * @memory: (transfer full): the memory to refcount - * - * Decrease the refcount of an memory, freeing it if the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_memory_unref (GstMemory * memory); -#endif - -static inline void -gst_memory_unref (GstMemory * memory) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (memory)); -} - -/* getting/setting memory properties */ -gsize gst_memory_get_sizes (GstMemory *mem, gsize *offset, gsize *maxsize); -void gst_memory_resize (GstMemory *mem, gssize offset, gsize size); - -#define gst_memory_lock(m,f) gst_mini_object_lock (GST_MINI_OBJECT_CAST (m), (f)) -#define gst_memory_unlock(m,f) gst_mini_object_unlock (GST_MINI_OBJECT_CAST (m), (f)) -#define gst_memory_is_writable(m) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (m)) -#define gst_memory_make_writable(m) GST_MEMORY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (m))) - -/* retrieving data */ -GstMemory * gst_memory_make_mapped (GstMemory *mem, GstMapInfo *info, GstMapFlags flags); -gboolean gst_memory_map (GstMemory *mem, GstMapInfo *info, GstMapFlags flags); -void gst_memory_unmap (GstMemory *mem, GstMapInfo *info); - -/* copy and subregions */ -GstMemory * gst_memory_copy (GstMemory *mem, gssize offset, gssize size); -GstMemory * gst_memory_share (GstMemory *mem, gssize offset, gssize size); - -/* span memory */ -gboolean gst_memory_is_span (GstMemory *mem1, GstMemory *mem2, gsize *offset); - -G_END_DECLS - -#endif /* __GST_MEMORY_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmessage.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmessage.h deleted file mode 100644 index 03286674..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmessage.h +++ /dev/null @@ -1,562 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Wim Taymans - * - * gstmessage.h: Header for GstMessage subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MESSAGE_H__ -#define __GST_MESSAGE_H__ - -G_BEGIN_DECLS - -typedef struct _GstMessage GstMessage; - -/** - * GstMessageType: - * @GST_MESSAGE_UNKNOWN: an undefined message - * @GST_MESSAGE_EOS: end-of-stream reached in a pipeline. The application will - * only receive this message in the PLAYING state and every time it sets a - * pipeline to PLAYING that is in the EOS state. The application can perform a - * flushing seek in the pipeline, which will undo the EOS state again. - * @GST_MESSAGE_ERROR: an error occured. When the application receives an error - * message it should stop playback of the pipeline and not assume that more - * data will be played. - * @GST_MESSAGE_WARNING: a warning occured. - * @GST_MESSAGE_INFO: an info message occured - * @GST_MESSAGE_TAG: a tag was found. - * @GST_MESSAGE_BUFFERING: the pipeline is buffering. When the application - * receives a buffering message in the PLAYING state for a non-live pipeline it - * must PAUSE the pipeline until the buffering completes, when the percentage - * field in the message is 100%. For live pipelines, no action must be - * performed and the buffering percentage can be used to inform the user about - * the progress. - * @GST_MESSAGE_STATE_CHANGED: a state change happened - * @GST_MESSAGE_STATE_DIRTY: an element changed state in a streaming thread. - * This message is deprecated. - * @GST_MESSAGE_STEP_DONE: a stepping operation finished. - * @GST_MESSAGE_CLOCK_PROVIDE: an element notifies its capability of providing - * a clock. This message is used internally and - * never forwarded to the application. - * @GST_MESSAGE_CLOCK_LOST: The current clock as selected by the pipeline became - * unusable. The pipeline will select a new clock on - * the next PLAYING state change. The application - * should set the pipeline to PAUSED and back to - * PLAYING when this message is received. - * @GST_MESSAGE_NEW_CLOCK: a new clock was selected in the pipeline. - * @GST_MESSAGE_STRUCTURE_CHANGE: the structure of the pipeline changed. This - * message is used internally and never forwarded to the application. - * @GST_MESSAGE_STREAM_STATUS: status about a stream, emitted when it starts, - * stops, errors, etc.. - * @GST_MESSAGE_APPLICATION: message posted by the application, possibly - * via an application-specific element. - * @GST_MESSAGE_ELEMENT: element-specific message, see the specific element's - * documentation - * @GST_MESSAGE_SEGMENT_START: pipeline started playback of a segment. This - * message is used internally and never forwarded to the application. - * @GST_MESSAGE_SEGMENT_DONE: pipeline completed playback of a segment. This - * message is forwarded to the application after all elements that posted - * @GST_MESSAGE_SEGMENT_START posted a GST_MESSAGE_SEGMENT_DONE message. - * @GST_MESSAGE_DURATION_CHANGED: The duration of a pipeline changed. The - * application can get the new duration with a duration query. - * @GST_MESSAGE_ASYNC_START: Posted by elements when they start an ASYNC - * #GstStateChange. This message is not forwarded to the application but is used - * internally. - * @GST_MESSAGE_ASYNC_DONE: Posted by elements when they complete an ASYNC - * #GstStateChange. The application will only receive this message from the toplevel - * pipeline. - * @GST_MESSAGE_LATENCY: Posted by elements when their latency changes. The - * application should recalculate and distribute a new latency. - * @GST_MESSAGE_REQUEST_STATE: Posted by elements when they want the pipeline to - * change state. This message is a suggestion to the application which can - * decide to perform the state change on (part of) the pipeline. - * @GST_MESSAGE_STEP_START: A stepping operation was started. - * @GST_MESSAGE_QOS: A buffer was dropped or an element changed its processing - * strategy for Quality of Service reasons. - * @GST_MESSAGE_PROGRESS: A progress message. - * @GST_MESSAGE_TOC: A new table of contents (TOC) was found or previously found TOC - * was updated. - * @GST_MESSAGE_RESET_TIME: Message to request resetting the pipeline's - * running time from the pipeline. This is an internal message which - * applications will likely never receive. - * @GST_MESSAGE_STREAM_START: Message indicating start of a new stream. Useful - * e.g. when using playbin in gapless playback mode, to get notified when - * the next title actually starts playing (which will be some time after - * the URI for the next title has been set). - * @GST_MESSAGE_ANY: mask for all of the above messages. - * - * The different message types that are available. - */ -/* NOTE: keep in sync with quark registration in gstmessage.c - * NOTE: keep GST_MESSAGE_ANY a valid gint to avoid compiler warnings. - */ -typedef enum -{ - GST_MESSAGE_UNKNOWN = 0, - GST_MESSAGE_EOS = (1 << 0), - GST_MESSAGE_ERROR = (1 << 1), - GST_MESSAGE_WARNING = (1 << 2), - GST_MESSAGE_INFO = (1 << 3), - GST_MESSAGE_TAG = (1 << 4), - GST_MESSAGE_BUFFERING = (1 << 5), - GST_MESSAGE_STATE_CHANGED = (1 << 6), - GST_MESSAGE_STATE_DIRTY = (1 << 7), - GST_MESSAGE_STEP_DONE = (1 << 8), - GST_MESSAGE_CLOCK_PROVIDE = (1 << 9), - GST_MESSAGE_CLOCK_LOST = (1 << 10), - GST_MESSAGE_NEW_CLOCK = (1 << 11), - GST_MESSAGE_STRUCTURE_CHANGE = (1 << 12), - GST_MESSAGE_STREAM_STATUS = (1 << 13), - GST_MESSAGE_APPLICATION = (1 << 14), - GST_MESSAGE_ELEMENT = (1 << 15), - GST_MESSAGE_SEGMENT_START = (1 << 16), - GST_MESSAGE_SEGMENT_DONE = (1 << 17), - GST_MESSAGE_DURATION_CHANGED = (1 << 18), - GST_MESSAGE_LATENCY = (1 << 19), - GST_MESSAGE_ASYNC_START = (1 << 20), - GST_MESSAGE_ASYNC_DONE = (1 << 21), - GST_MESSAGE_REQUEST_STATE = (1 << 22), - GST_MESSAGE_STEP_START = (1 << 23), - GST_MESSAGE_QOS = (1 << 24), - GST_MESSAGE_PROGRESS = (1 << 25), - GST_MESSAGE_TOC = (1 << 26), - GST_MESSAGE_RESET_TIME = (1 << 27), - GST_MESSAGE_STREAM_START = (1 << 28), - GST_MESSAGE_ANY = ~0 -} GstMessageType; - -#include -#include -#include -#include -#include -#include -#include - -#define GST_TYPE_MESSAGE (gst_message_get_type()) -#define GST_IS_MESSAGE(obj) (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_MESSAGE)) -#define GST_MESSAGE_CAST(obj) ((GstMessage*)(obj)) -#define GST_MESSAGE(obj) (GST_MESSAGE_CAST(obj)) - -/* the lock is used to handle the synchronous handling of messages, - * the emiting thread is block until the handling thread processed - * the message using this mutex/cond pair */ -#define GST_MESSAGE_GET_LOCK(message) (&GST_MESSAGE_CAST(message)->lock) -#define GST_MESSAGE_LOCK(message) g_mutex_lock(GST_MESSAGE_GET_LOCK(message)) -#define GST_MESSAGE_UNLOCK(message) g_mutex_unlock(GST_MESSAGE_GET_LOCK(message)) -#define GST_MESSAGE_GET_COND(message) (&GST_MESSAGE_CAST(message)->cond) -#define GST_MESSAGE_WAIT(message) g_cond_wait(GST_MESSAGE_GET_COND(message),GST_MESSAGE_GET_LOCK(message)) -#define GST_MESSAGE_SIGNAL(message) g_cond_signal(GST_MESSAGE_GET_COND(message)) - -/** - * GST_MESSAGE_TYPE: - * @message: a #GstMessage - * - * Get the #GstMessageType of @message. - */ -#define GST_MESSAGE_TYPE(message) (GST_MESSAGE_CAST(message)->type) -/** - * GST_MESSAGE_TYPE_NAME: - * @message: a #GstMessage - * - * Get a constant string representation of the #GstMessageType of @message. - */ -#define GST_MESSAGE_TYPE_NAME(message) gst_message_type_get_name(GST_MESSAGE_TYPE(message)) -/** - * GST_MESSAGE_TIMESTAMP: - * @message: a #GstMessage - * - * Get the timestamp of @message. This is the timestamp when the message - * was created. - */ -#define GST_MESSAGE_TIMESTAMP(message) (GST_MESSAGE_CAST(message)->timestamp) -/** - * GST_MESSAGE_SRC: - * @message: a #GstMessage - * - * Get the object that posted @message. - */ -#define GST_MESSAGE_SRC(message) (GST_MESSAGE_CAST(message)->src) - -/** - * GST_MESSAGE_SEQNUM: - * @message: a #GstMessage - * - * Get the sequence number of @message. - */ -#define GST_MESSAGE_SEQNUM(message) (GST_MESSAGE_CAST(message)->seqnum) - -/** - * GST_MESSAGE_SRC_NAME: - * @message: a #GstMessage - * - * Get the name of the object that posted @message. Returns "(NULL)" if - * the message has no source object set. - */ -#define GST_MESSAGE_SRC_NAME(message) (GST_MESSAGE_SRC(message) ? \ - GST_OBJECT_NAME (GST_MESSAGE_SRC(message)) : "(NULL)") - -/** - * GstStructureChangeType: - * @GST_STRUCTURE_CHANGE_TYPE_PAD_LINK: Pad linking is starting or done. - * @GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK: Pad unlinking is starting or done. - * - * The type of a %GST_MESSAGE_STRUCTURE_CHANGE. - */ -typedef enum { - GST_STRUCTURE_CHANGE_TYPE_PAD_LINK = 0, - GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK = 1 -} GstStructureChangeType; - -/** - * GstStreamStatusType: - * @GST_STREAM_STATUS_TYPE_CREATE: A new thread need to be created. - * @GST_STREAM_STATUS_TYPE_ENTER: a thread entered its loop function - * @GST_STREAM_STATUS_TYPE_LEAVE: a thread left its loop function - * @GST_STREAM_STATUS_TYPE_DESTROY: a thread is destroyed - * @GST_STREAM_STATUS_TYPE_START: a thread is started - * @GST_STREAM_STATUS_TYPE_PAUSE: a thread is paused - * @GST_STREAM_STATUS_TYPE_STOP: a thread is stopped - * - * The type of a %GST_MESSAGE_STREAM_STATUS. The stream status messages inform the - * application of new streaming threads and their status. - */ -typedef enum { - GST_STREAM_STATUS_TYPE_CREATE = 0, - GST_STREAM_STATUS_TYPE_ENTER = 1, - GST_STREAM_STATUS_TYPE_LEAVE = 2, - GST_STREAM_STATUS_TYPE_DESTROY = 3, - - GST_STREAM_STATUS_TYPE_START = 8, - GST_STREAM_STATUS_TYPE_PAUSE = 9, - GST_STREAM_STATUS_TYPE_STOP = 10 -} GstStreamStatusType; - -/** - * GstProgressType: - * @GST_PROGRESS_TYPE_START: A new task started. - * @GST_PROGRESS_TYPE_CONTINUE: A task completed and a new one continues. - * @GST_PROGRESS_TYPE_COMPLETE: A task completed. - * @GST_PROGRESS_TYPE_CANCELED: A task was canceled. - * @GST_PROGRESS_TYPE_ERROR: A task caused an error. An error message is also - * posted on the bus. - * - * The type of a %GST_MESSAGE_PROGRESS. The progress messages inform the - * application of the status of assynchronous tasks. - */ -typedef enum { - GST_PROGRESS_TYPE_START = 0, - GST_PROGRESS_TYPE_CONTINUE = 1, - GST_PROGRESS_TYPE_COMPLETE = 2, - GST_PROGRESS_TYPE_CANCELED = 3, - GST_PROGRESS_TYPE_ERROR = 4 -} GstProgressType; - -/** - * GstMessage: - * @mini_object: the parent structure - * @type: the #GstMessageType of the message - * @timestamp: the timestamp of the message - * @src: the src of the message - * @seqnum: the sequence number of the message - * - * A #GstMessage. - */ -struct _GstMessage -{ - GstMiniObject mini_object; - - /*< public > *//* with COW */ - GstMessageType type; - guint64 timestamp; - GstObject *src; - guint32 seqnum; - - /*< private >*//* with MESSAGE_LOCK */ - GMutex lock; /* lock and cond for async delivery */ - GCond cond; -}; - -GType gst_message_get_type (void); - -const gchar* gst_message_type_get_name (GstMessageType type); -GQuark gst_message_type_to_quark (GstMessageType type); - -/* refcounting */ -/** - * gst_message_ref: - * @msg: the message to ref - * - * Convenience macro to increase the reference count of the message. - * - * Returns: @msg (for convenience when doing assignments) - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMessage * gst_message_ref (GstMessage * msg); -#endif - -static inline GstMessage * -gst_message_ref (GstMessage * msg) -{ - return (GstMessage *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (msg)); -} - -/** - * gst_message_unref: - * @msg: the message to unref - * - * Convenience macro to decrease the reference count of the message, possibly - * freeing it. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_message_unref (GstMessage * msg); -#endif - -static inline void -gst_message_unref (GstMessage * msg) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (msg)); -} - -/* copy message */ -/** - * gst_message_copy: - * @msg: the message to copy - * - * Creates a copy of the message. Returns a copy of the message. - * - * Returns: (transfer full): a new copy of @msg. - * - * MT safe - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMessage * gst_message_copy (const GstMessage * msg); -#endif - -static inline GstMessage * -gst_message_copy (const GstMessage * msg) -{ - return GST_MESSAGE_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (msg))); -} - -/** - * gst_message_is_writable: - * @msg: a #GstMessage - * - * Tests if you can safely write into a message's structure or validly - * modify the seqnum and timestamp fields. - */ -#define gst_message_is_writable(msg) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (msg)) -/** - * gst_message_make_writable: - * @msg: (transfer full): the message to make writable - * - * Checks if a message is writable. If not, a writable copy is made and - * returned. - * - * Returns: (transfer full): a message (possibly a duplicate) that is writable. - * - * MT safe - */ -#define gst_message_make_writable(msg) GST_MESSAGE_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (msg))) -/** - * gst_message_replace: - * @old_message: (inout) (transfer full): pointer to a pointer to a #GstMessage - * to be replaced. - * @new_message: (allow-none) (transfer none): pointer to a #GstMessage that will - * replace the message pointed to by @old_message. - * - * Modifies a pointer to a #GstMessage to point to a different #GstMessage. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * message is unreffed, the new one is reffed). - * - * Either @new_message or the #GstMessage pointed to by @old_message may be NULL. - * - * Returns: TRUE if @new_message was different from @old_message - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_message_replace (GstMessage **old_message, GstMessage *new_message); -#endif - -static inline gboolean -gst_message_replace (GstMessage **old_message, GstMessage *new_message) -{ - return gst_mini_object_replace ((GstMiniObject **) old_message, (GstMiniObject *) new_message); -} - - -/* custom messages */ -GstMessage * gst_message_new_custom (GstMessageType type, - GstObject * src, - GstStructure * structure) G_GNUC_MALLOC; -const GstStructure * - gst_message_get_structure (GstMessage *message); - -gboolean gst_message_has_name (GstMessage *message, const gchar *name); - -/* identifiers for events and messages */ -guint32 gst_message_get_seqnum (GstMessage *message); -void gst_message_set_seqnum (GstMessage *message, guint32 seqnum); - -/* EOS */ -GstMessage * gst_message_new_eos (GstObject * src) G_GNUC_MALLOC; - -/* ERROR */ - -GstMessage * gst_message_new_error (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC; -void gst_message_parse_error (GstMessage *message, GError **gerror, gchar **debug); - -/* WARNING */ -GstMessage * gst_message_new_warning (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC; -void gst_message_parse_warning (GstMessage *message, GError **gerror, gchar **debug); - -/* INFO */ -GstMessage * gst_message_new_info (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC; -void gst_message_parse_info (GstMessage *message, GError **gerror, gchar **debug); - -/* TAG */ -GstMessage * gst_message_new_tag (GstObject * src, GstTagList * tag_list) G_GNUC_MALLOC; -void gst_message_parse_tag (GstMessage *message, GstTagList **tag_list); - -/* BUFFERING */ -GstMessage * gst_message_new_buffering (GstObject * src, gint percent) G_GNUC_MALLOC; -void gst_message_parse_buffering (GstMessage *message, gint *percent); -void gst_message_set_buffering_stats (GstMessage *message, GstBufferingMode mode, - gint avg_in, gint avg_out, - gint64 buffering_left); -void gst_message_parse_buffering_stats (GstMessage *message, GstBufferingMode *mode, - gint *avg_in, gint *avg_out, - gint64 *buffering_left); - -/* STATE_CHANGED */ -GstMessage * gst_message_new_state_changed (GstObject * src, GstState oldstate, - GstState newstate, GstState pending) G_GNUC_MALLOC; -void gst_message_parse_state_changed (GstMessage *message, GstState *oldstate, - GstState *newstate, GstState *pending); - -/* STATE_DIRTY */ -GstMessage * gst_message_new_state_dirty (GstObject * src) G_GNUC_MALLOC; - -/* STEP_DONE */ -GstMessage * gst_message_new_step_done (GstObject * src, GstFormat format, guint64 amount, - gdouble rate, gboolean flush, gboolean intermediate, - guint64 duration, gboolean eos) G_GNUC_MALLOC; -void gst_message_parse_step_done (GstMessage * message, GstFormat *format, guint64 *amount, - gdouble *rate, gboolean *flush, gboolean *intermediate, - guint64 *duration, gboolean *eos); -/* CLOCK_PROVIDE */ -GstMessage * gst_message_new_clock_provide (GstObject * src, GstClock *clock, gboolean ready) G_GNUC_MALLOC; -void gst_message_parse_clock_provide (GstMessage *message, GstClock **clock, - gboolean *ready); - -/* CLOCK_LOST */ -GstMessage * gst_message_new_clock_lost (GstObject * src, GstClock *clock) G_GNUC_MALLOC; -void gst_message_parse_clock_lost (GstMessage *message, GstClock **clock); - -/* NEW_CLOCK */ -GstMessage * gst_message_new_new_clock (GstObject * src, GstClock *clock) G_GNUC_MALLOC; -void gst_message_parse_new_clock (GstMessage *message, GstClock **clock); - -/* APPLICATION */ -GstMessage * gst_message_new_application (GstObject * src, GstStructure * structure) G_GNUC_MALLOC; - -/* ELEMENT */ -GstMessage * gst_message_new_element (GstObject * src, GstStructure * structure) G_GNUC_MALLOC; - -/* SEGMENT_START */ -GstMessage * gst_message_new_segment_start (GstObject * src, GstFormat format, gint64 position) G_GNUC_MALLOC; -void gst_message_parse_segment_start (GstMessage *message, GstFormat *format, - gint64 *position); - -/* SEGMENT_DONE */ -GstMessage * gst_message_new_segment_done (GstObject * src, GstFormat format, gint64 position) G_GNUC_MALLOC; -void gst_message_parse_segment_done (GstMessage *message, GstFormat *format, - gint64 *position); - -/* DURATION_CHANGED */ -GstMessage * gst_message_new_duration_changed (GstObject * src) G_GNUC_MALLOC; - -/* LATENCY */ -GstMessage * gst_message_new_latency (GstObject * src) G_GNUC_MALLOC; - -/* ASYNC_START */ -GstMessage * gst_message_new_async_start (GstObject * src) G_GNUC_MALLOC; - -/* ASYNC_DONE */ -GstMessage * gst_message_new_async_done (GstObject * src, GstClockTime running_time) G_GNUC_MALLOC; -void gst_message_parse_async_done (GstMessage *message, GstClockTime *running_time); - -/* STRUCTURE CHANGE */ -GstMessage * gst_message_new_structure_change (GstObject * src, GstStructureChangeType type, - GstElement *owner, gboolean busy) G_GNUC_MALLOC; -void gst_message_parse_structure_change (GstMessage *message, GstStructureChangeType *type, - GstElement **owner, gboolean *busy); - -/* STREAM STATUS */ -GstMessage * gst_message_new_stream_status (GstObject * src, GstStreamStatusType type, - GstElement *owner) G_GNUC_MALLOC; -void gst_message_parse_stream_status (GstMessage *message, GstStreamStatusType *type, - GstElement **owner); -void gst_message_set_stream_status_object (GstMessage *message, const GValue *object); -const GValue * gst_message_get_stream_status_object (GstMessage *message); - -/* REQUEST_STATE */ -GstMessage * gst_message_new_request_state (GstObject * src, GstState state) G_GNUC_MALLOC; -void gst_message_parse_request_state (GstMessage * message, GstState *state); - -/* STEP_START */ -GstMessage * gst_message_new_step_start (GstObject * src, gboolean active, GstFormat format, - guint64 amount, gdouble rate, gboolean flush, - gboolean intermediate) G_GNUC_MALLOC; -void gst_message_parse_step_start (GstMessage * message, gboolean *active, GstFormat *format, - guint64 *amount, gdouble *rate, gboolean *flush, - gboolean *intermediate); - -/* QOS */ -GstMessage * gst_message_new_qos (GstObject * src, gboolean live, guint64 running_time, - guint64 stream_time, guint64 timestamp, guint64 duration) G_GNUC_MALLOC; -void gst_message_set_qos_values (GstMessage * message, gint64 jitter, gdouble proportion, - gint quality); -void gst_message_set_qos_stats (GstMessage * message, GstFormat format, guint64 processed, - guint64 dropped); -void gst_message_parse_qos (GstMessage * message, gboolean * live, guint64 * running_time, - guint64 * stream_time, guint64 * timestamp, guint64 * duration); -void gst_message_parse_qos_values (GstMessage * message, gint64 * jitter, gdouble * proportion, - gint * quality); -void gst_message_parse_qos_stats (GstMessage * message, GstFormat * format, guint64 * processed, - guint64 * dropped); -/* PROGRESS */ -GstMessage * gst_message_new_progress (GstObject * src, GstProgressType type, const gchar *code, - const gchar *text) G_GNUC_MALLOC; -void gst_message_parse_progress (GstMessage * message, GstProgressType * type, gchar ** code, - gchar ** text); - -/* TOC */ -GstMessage * gst_message_new_toc (GstObject *src, GstToc *toc, gboolean updated); -void gst_message_parse_toc (GstMessage *message, GstToc **toc, gboolean *updated); - -/* RESET_TIME */ -GstMessage * gst_message_new_reset_time (GstObject * src, GstClockTime running_time) G_GNUC_MALLOC; -void gst_message_parse_reset_time (GstMessage *message, GstClockTime *running_time); - -/* STREAM_START */ -GstMessage * gst_message_new_stream_start (GstObject * src) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_MESSAGE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmeta.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmeta.h deleted file mode 100644 index e6d4f006..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstmeta.h +++ /dev/null @@ -1,216 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Wim Taymans - * - * gstmeta.h: Header for Metadata structures - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_META_H__ -#define __GST_META_H__ - -G_BEGIN_DECLS - -typedef struct _GstMeta GstMeta; -typedef struct _GstMetaInfo GstMetaInfo; - -#define GST_META_CAST(meta) ((GstMeta *)(meta)) - -/** - * GstMetaFlags: - * @GST_META_FLAG_NONE: no flags - * @GST_META_FLAG_READONLY: metadata should not be modified - * @GST_META_FLAG_POOLED: metadata is managed by a bufferpool - * @GST_META_FLAG_LOCKED: metadata should not be removed - * @GST_META_FLAG_LAST: additional flags can be added starting from this flag. - * - * Extra metadata flags. - */ -typedef enum { - GST_META_FLAG_NONE = 0, - GST_META_FLAG_READONLY = (1 << 0), - GST_META_FLAG_POOLED = (1 << 1), - GST_META_FLAG_LOCKED = (1 << 2), - - GST_META_FLAG_LAST = (1 << 16) -} GstMetaFlags; - -/** - * GST_META_FLAGS: - * @meta: a #GstMeta. - * - * A flags word containing #GstMetaFlags flags set on @meta - */ -#define GST_META_FLAGS(meta) (GST_META_CAST (meta)->flags) -/** - * GST_META_FLAG_IS_SET: - * @meta: a #GstMeta. - * @flag: the #GstMetaFlags to check. - * - * Gives the status of a specific flag on a metadata. - */ -#define GST_META_FLAG_IS_SET(meta,flag) !!(GST_META_FLAGS (meta) & (flag)) -/** - * GST_META_FLAG_SET: - * @meta: a #GstMeta. - * @flag: the #GstMetaFlags to set. - * - * Sets a metadata flag on a metadata. - */ -#define GST_META_FLAG_SET(meta,flag) (GST_META_FLAGS (meta) |= (flag)) -/** - * GST_META_FLAG_UNSET: - * @meta: a #GstMeta. - * @flag: the #GstMetaFlags to clear. - * - * Clears a metadata flag. - */ -#define GST_META_FLAG_UNSET(meta,flag) (GST_META_FLAGS (meta) &= ~(flag)) - -/** - * GstMeta: - * @flags: extra flags for the metadata - * @info: pointer to the #GstMetaInfo - * - * Base structure for metadata. Custom metadata will put this structure - * as the first member of their structure. - */ -struct _GstMeta { - GstMetaFlags flags; - const GstMetaInfo *info; -}; - -/** - * GstMetaInitFunction: - * @meta: a #GstMeta - * @params: parameters passed to the init function - * @buffer: a #GstBuffer - * - * Function called when @meta is initialized in @buffer. - */ -typedef gboolean (*GstMetaInitFunction) (GstMeta *meta, gpointer params, GstBuffer *buffer); - -/** - * GstMetaFreeFunction: - * @meta: a #GstMeta - * @buffer: a #GstBuffer - * - * Function called when @meta is freed in @buffer. - */ -typedef void (*GstMetaFreeFunction) (GstMeta *meta, GstBuffer *buffer); - -/** - * gst_meta_transform_copy: - * - * GQuark for the "gst-copy" transform. - */ -GST_EXPORT GQuark _gst_meta_transform_copy; - -/** - * GST_META_TRANSFORM_IS_COPY: - * @type: a transform type - * - * Check if the transform type is a copy transform - */ -#define GST_META_TRANSFORM_IS_COPY(type) ((type) == _gst_meta_transform_copy) - -/** - * GstMetaTransformCopy: - * @region: %TRUE if only region is copied - * @offset: the offset to copy, 0 if @region is %FALSE, otherwise > 0 - * @size: the size to copy, -1 or the buffer size when @region is %FALSE - * - * Extra data passed to a "gst-copy" transform #GstMetaTransformFunction. - */ -typedef struct { - gboolean region; - gsize offset; - gsize size; -} GstMetaTransformCopy; - -/** - * GstMetaTransformFunction: - * @transbuf: a #GstBuffer - * @meta: a #GstMeta - * @buffer: a #GstBuffer - * @type: the transform type - * @data: transform specific data. - * - * Function called for each @meta in @buffer as a result of performing a - * transformation on @transbuf. Additional @type specific transform data - * is passed to the function as @data. - * - * Implementations should check the @type of the transform and parse - * additional type specific fields in @data that should be used to update - * the metadata on @transbuf. - * - * Returns: %TRUE if the transform could be performed - */ -typedef gboolean (*GstMetaTransformFunction) (GstBuffer *transbuf, - GstMeta *meta, GstBuffer *buffer, - GQuark type, gpointer data); - -/** - * GstMetaInfo: - * @api: tag indentifying the metadata structure and api - * @type: type indentifying the implementor of the api - * @size: size of the metadata - * @init_func: function for initializing the metadata - * @free_func: function for freeing the metadata - * @transform_func: function for transforming the metadata - * - * The #GstMetaInfo provides information about a specific metadata - * structure. - */ -struct _GstMetaInfo { - GType api; - GType type; - gsize size; - - GstMetaInitFunction init_func; - GstMetaFreeFunction free_func; - GstMetaTransformFunction transform_func; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_meta_api_type_register (const gchar *api, - const gchar **tags); -gboolean gst_meta_api_type_has_tag (GType api, GQuark tag); - -const GstMetaInfo * gst_meta_register (GType api, const gchar *impl, - gsize size, - GstMetaInitFunction init_func, - GstMetaFreeFunction free_func, - GstMetaTransformFunction transform_func); -const GstMetaInfo * gst_meta_get_info (const gchar * impl); - -/* some default tags */ -GST_EXPORT GQuark _gst_meta_tag_memory; - -/** - * GST_META_TAG_MEMORY: - * - * Metadata tagged with this tag depends on the particular memory - * or buffer that it is on. - */ -#define GST_META_TAG_MEMORY (_gst_meta_tag_memory) - -G_END_DECLS - -#endif /* __GST_META_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstminiobject.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstminiobject.h deleted file mode 100644 index f873b7a8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstminiobject.h +++ /dev/null @@ -1,275 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 David Schleef - * - * gstminiobject.h: Header for GstMiniObject - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_MINI_OBJECT_H__ -#define __GST_MINI_OBJECT_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_IS_MINI_OBJECT_TYPE(obj,type) ((obj) && GST_MINI_OBJECT_TYPE(obj) == (type)) -#define GST_MINI_OBJECT_CAST(obj) ((GstMiniObject*)(obj)) -#define GST_MINI_OBJECT_CONST_CAST(obj) ((const GstMiniObject*)(obj)) -#define GST_MINI_OBJECT(obj) (GST_MINI_OBJECT_CAST(obj)) - -typedef struct _GstMiniObject GstMiniObject; - -/** - * GstMiniObjectCopyFunction: - * @obj: MiniObject to copy - * - * Function prototype for methods to create copies of instances. - * - * Returns: reference to cloned instance. - */ -typedef GstMiniObject * (*GstMiniObjectCopyFunction) (const GstMiniObject *obj); -/** - * GstMiniObjectDisposeFunction: - * @obj: MiniObject to dispose - * - * Function prototype for when a miniobject has lost its last refcount. - * Implementation of the mini object are allowed to revive the - * passed object by doing a gst_mini_object_ref(). If the object is not - * revived after the dispose function, the function should return %TRUE - * and the memory associated with the object is freed. - * - * Returns: %TRUE if the object should be cleaned up. - */ -typedef gboolean (*GstMiniObjectDisposeFunction) (GstMiniObject *obj); -/** - * GstMiniObjectFreeFunction: - * @obj: MiniObject to free - * - * Virtual function prototype for methods to free ressources used by - * mini-objects. - */ -typedef void (*GstMiniObjectFreeFunction) (GstMiniObject *obj); - - /** - * GstMiniObjectNotify: - * @user_data: data that was provided when the notify was added - * @obj: the mini object - * - * A #GstMiniObjectNotify function can be added to a mini object as a - * callback that gets triggered when gst_mini_object_unref() drops the - * last ref and @obj is about to be freed. - */ -typedef void (*GstMiniObjectNotify) (gpointer user_data, GstMiniObject * obj); - -/** - * GST_MINI_OBJECT_TYPE: - * @obj: MiniObject to return type for. - * - * This macro returns the type of the mini-object. - */ -#define GST_MINI_OBJECT_TYPE(obj) (GST_MINI_OBJECT_CAST(obj)->type) - -/** - * GST_MINI_OBJECT_FLAGS: - * @obj: MiniObject to return flags for. - * - * This macro returns the entire set of flags for the mini-object. - */ -#define GST_MINI_OBJECT_FLAGS(obj) (GST_MINI_OBJECT_CAST(obj)->flags) -/** - * GST_MINI_OBJECT_FLAG_IS_SET: - * @obj: MiniObject to check for flags. - * @flag: Flag to check for - * - * This macro checks to see if the given flag is set. - */ -#define GST_MINI_OBJECT_FLAG_IS_SET(obj,flag) !!(GST_MINI_OBJECT_FLAGS (obj) & (flag)) -/** - * GST_MINI_OBJECT_FLAG_SET: - * @obj: MiniObject to set flag in. - * @flag: Flag to set, can by any number of bits in guint32. - * - * This macro sets the given bits. - */ -#define GST_MINI_OBJECT_FLAG_SET(obj,flag) (GST_MINI_OBJECT_FLAGS (obj) |= (flag)) -/** - * GST_MINI_OBJECT_FLAG_UNSET: - * @obj: MiniObject to unset flag in. - * @flag: Flag to set, must be a single bit in guint32. - * - * This macro usets the given bits. - */ -#define GST_MINI_OBJECT_FLAG_UNSET(obj,flag) (GST_MINI_OBJECT_FLAGS (obj) &= ~(flag)) - -/** - * GstMiniObjectFlags: - * @GST_MINI_OBJECT_FLAG_LOCKABLE: the object can be locked and unlocked with - * gst_mini_object_lock() and gst_mini_object_unlock(). - * @GST_MINI_OBJECT_FLAG_LOCK_READONLY: the object is permanently locked in - * READONLY mode. Only read locks can be performed on the object. - * @GST_MINI_OBJECT_FLAG_LAST: first flag that can be used by subclasses. - * - * Flags for the mini object - */ -typedef enum -{ - GST_MINI_OBJECT_FLAG_LOCKABLE = (1 << 0), - GST_MINI_OBJECT_FLAG_LOCK_READONLY = (1 << 1), - /* padding */ - GST_MINI_OBJECT_FLAG_LAST = (1 << 4) -} GstMiniObjectFlags; - -/** - * GST_MINI_OBJECT_IS_LOCKABLE: - * @obj: a #GstMiniObject - * - * Check if @obj is lockable. A lockable object can be locked and unlocked with - * gst_mini_object_lock() and gst_mini_object_unlock(). - */ -#define GST_MINI_OBJECT_IS_LOCKABLE(obj) GST_MINI_OBJECT_FLAG_IS_SET(obj, GST_MINI_OBJECT_FLAG_LOCKABLE) - -/** - * GstLockFlags: - * @GST_LOCK_FLAG_READ: lock for read access - * @GST_LOCK_FLAG_WRITE: lock for write access - * @GST_LOCK_FLAG_EXCLUSIVE: lock for exclusive access - * @GST_LOCK_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags used when locking miniobjects - */ -typedef enum { - GST_LOCK_FLAG_READ = (1 << 0), - GST_LOCK_FLAG_WRITE = (1 << 1), - GST_LOCK_FLAG_EXCLUSIVE = (1 << 2), - - GST_LOCK_FLAG_LAST = (1 << 8) -} GstLockFlags; - -/** - * GST_LOCK_FLAG_READWRITE: - * - * GstLockFlags value alias for GST_LOCK_FLAG_READ | GST_LOCK_FLAG_WRITE - */ -#define GST_LOCK_FLAG_READWRITE (GST_LOCK_FLAG_READ | GST_LOCK_FLAG_WRITE) - -/** - * GST_MINI_OBJECT_REFCOUNT: - * @obj: a #GstMiniObject - * - * Get access to the reference count field of the mini-object. - */ -#define GST_MINI_OBJECT_REFCOUNT(obj) ((GST_MINI_OBJECT_CAST(obj))->refcount) -/** - * GST_MINI_OBJECT_REFCOUNT_VALUE: - * @obj: a #GstMiniObject - * - * Get the reference count value of the mini-object. - */ -#define GST_MINI_OBJECT_REFCOUNT_VALUE(obj) (g_atomic_int_get (&(GST_MINI_OBJECT_CAST(obj))->refcount)) - -/** - * GstMiniObject: - * @type: the GType of the object - * @refcount: atomic refcount - * @lockstate: atomic state of the locks - * @flags: extra flags. - * @copy: a copy function - * @dispose: a dispose function - * @free: the free function - * - * Base class for refcounted lightweight objects. - * Ref Func: gst_mini_object_ref - * Unref Func: gst_mini_object_unref - * Set Value Func: g_value_set_boxed - * Get Value Func: g_value_get_boxed - */ -struct _GstMiniObject { - GType type; - - /*< public >*/ /* with COW */ - gint refcount; - gint lockstate; - guint flags; - - GstMiniObjectCopyFunction copy; - GstMiniObjectDisposeFunction dispose; - GstMiniObjectFreeFunction free; - - /* < private > */ - /* Used to keep track of weak ref notifies and qdata */ - guint n_qdata; - gpointer qdata; -}; - -void gst_mini_object_init (GstMiniObject *mini_object, - guint flags, GType type, - GstMiniObjectCopyFunction copy_func, - GstMiniObjectDisposeFunction dispose_func, - GstMiniObjectFreeFunction free_func); - - -/* refcounting */ -GstMiniObject * gst_mini_object_ref (GstMiniObject *mini_object); -void gst_mini_object_unref (GstMiniObject *mini_object); - -void gst_mini_object_weak_ref (GstMiniObject *object, - GstMiniObjectNotify notify, - gpointer data); -void gst_mini_object_weak_unref (GstMiniObject *object, - GstMiniObjectNotify notify, - gpointer data); - -/* locking */ -gboolean gst_mini_object_lock (GstMiniObject *object, GstLockFlags flags); -void gst_mini_object_unlock (GstMiniObject *object, GstLockFlags flags); - -gboolean gst_mini_object_is_writable (const GstMiniObject *mini_object); -GstMiniObject * gst_mini_object_make_writable (GstMiniObject *mini_object); - -/* copy */ -GstMiniObject * gst_mini_object_copy (const GstMiniObject *mini_object) G_GNUC_MALLOC; - - -void gst_mini_object_set_qdata (GstMiniObject *object, GQuark quark, - gpointer data, GDestroyNotify destroy); -gpointer gst_mini_object_get_qdata (GstMiniObject *object, GQuark quark); -gpointer gst_mini_object_steal_qdata (GstMiniObject *object, GQuark quark); - - -gboolean gst_mini_object_replace (GstMiniObject **olddata, GstMiniObject *newdata); -gboolean gst_mini_object_take (GstMiniObject **olddata, GstMiniObject *newdata); -GstMiniObject * gst_mini_object_steal (GstMiniObject **olddata); - -/** - * GST_DEFINE_MINI_OBJECT_TYPE: - * @TypeName: name of the new type in CamelCase - * @type_name: name of the new type - * - * Define a new mini-object type with the given name - */ -#define GST_DEFINE_MINI_OBJECT_TYPE(TypeName,type_name) \ - G_DEFINE_BOXED_TYPE(TypeName,type_name, \ - (GBoxedCopyFunc) gst_mini_object_ref, \ - (GBoxedFreeFunc) gst_mini_object_unref) - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstobject.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstobject.h deleted file mode 100644 index 6c9f9f5c..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstobject.h +++ /dev/null @@ -1,267 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstobject.h: Header for base GstObject - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_OBJECT_H__ -#define __GST_OBJECT_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_OBJECT (gst_object_get_type ()) -#define GST_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_OBJECT)) -#define GST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_OBJECT)) -#define GST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_OBJECT, GstObjectClass)) -#define GST_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_OBJECT, GstObject)) -#define GST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_OBJECT, GstObjectClass)) -#define GST_OBJECT_CAST(obj) ((GstObject*)(obj)) -#define GST_OBJECT_CLASS_CAST(klass) ((GstObjectClass*)(klass)) - -/** - * GstObjectFlags: - * @GST_OBJECT_FLAG_LAST: subclasses can add additional flags starting from this flag - * - * The standard flags that an gstobject may have. - */ -typedef enum -{ - /* padding */ - GST_OBJECT_FLAG_LAST = (1<<4) -} GstObjectFlags; - -/** - * GST_OBJECT_REFCOUNT: - * @obj: a #GstObject - * - * Get access to the reference count field of the object. - */ -#define GST_OBJECT_REFCOUNT(obj) (((GObject*)(obj))->ref_count) -/** - * GST_OBJECT_REFCOUNT_VALUE: - * @obj: a #GstObject - * - * Get the reference count value of the object. - */ -#define GST_OBJECT_REFCOUNT_VALUE(obj) g_atomic_int_get ((gint *) &GST_OBJECT_REFCOUNT(obj)) - -/* we do a GST_OBJECT_CAST to avoid type checking, better call these - * function with a valid object! */ - -/** - * GST_OBJECT_GET_LOCK: - * @obj: a #GstObject - * - * Acquire a reference to the mutex of this object. - */ -#define GST_OBJECT_GET_LOCK(obj) (&GST_OBJECT_CAST(obj)->lock) -/** - * GST_OBJECT_LOCK: - * @obj: a #GstObject to lock - * - * This macro will obtain a lock on the object, making serialization possible. - * It blocks until the lock can be obtained. - */ -#define GST_OBJECT_LOCK(obj) g_mutex_lock(GST_OBJECT_GET_LOCK(obj)) -/** - * GST_OBJECT_TRYLOCK: - * @obj: a #GstObject. - * - * This macro will try to obtain a lock on the object, but will return with - * FALSE if it can't get it immediately. - */ -#define GST_OBJECT_TRYLOCK(obj) g_mutex_trylock(GST_OBJECT_GET_LOCK(obj)) -/** - * GST_OBJECT_UNLOCK: - * @obj: a #GstObject to unlock. - * - * This macro releases a lock on the object. - */ -#define GST_OBJECT_UNLOCK(obj) g_mutex_unlock(GST_OBJECT_GET_LOCK(obj)) - - -/** - * GST_OBJECT_NAME: - * @obj: a #GstObject - * - * Get the name of this object - */ -#define GST_OBJECT_NAME(obj) (GST_OBJECT_CAST(obj)->name) -/** - * GST_OBJECT_PARENT: - * @obj: a #GstObject - * - * Get the parent of this object - */ -#define GST_OBJECT_PARENT(obj) (GST_OBJECT_CAST(obj)->parent) - - -/** - * GST_OBJECT_FLAGS: - * @obj: a #GstObject - * - * This macro returns the entire set of flags for the object. - */ -#define GST_OBJECT_FLAGS(obj) (GST_OBJECT_CAST (obj)->flags) -/** - * GST_OBJECT_FLAG_IS_SET: - * @obj: a #GstObject - * @flag: Flag to check for - * - * This macro checks to see if the given flag is set. - */ -#define GST_OBJECT_FLAG_IS_SET(obj,flag) ((GST_OBJECT_FLAGS (obj) & (flag)) == (flag)) -/** - * GST_OBJECT_FLAG_SET: - * @obj: a #GstObject - * @flag: Flag to set - * - * This macro sets the given bits. - */ -#define GST_OBJECT_FLAG_SET(obj,flag) (GST_OBJECT_FLAGS (obj) |= (flag)) -/** - * GST_OBJECT_FLAG_UNSET: - * @obj: a #GstObject - * @flag: Flag to set - * - * This macro usets the given bits. - */ -#define GST_OBJECT_FLAG_UNSET(obj,flag) (GST_OBJECT_FLAGS (obj) &= ~(flag)) - -typedef struct _GstObject GstObject; -typedef struct _GstObjectClass GstObjectClass; - -/** - * GstObject: - * @lock: object LOCK - * @name: The name of the object - * @parent: this object's parent, weak ref - * @flags: flags for this object - * - * GStreamer base object class. - */ -struct _GstObject { - GInitiallyUnowned object; - - /*< public >*/ /* with LOCK */ - GMutex lock; /* object LOCK */ - gchar *name; /* object name */ - GstObject *parent; /* this object's parent, weak ref */ - guint32 flags; - - /*< private >*/ - GList *control_bindings; /* List of GstControlBinding */ - guint64 control_rate; - guint64 last_sync; - - gpointer _gst_reserved; -}; - -/** - * GstObjectClass: - * @parent_class: parent - * @path_string_separator: separator used by gst_object_get_path_string() - * @deep_notify: default signal handler - * - * GStreamer base object class. - */ -struct _GstObjectClass { - GInitiallyUnownedClass parent_class; - - const gchar *path_string_separator; - - /* signals */ - void (*deep_notify) (GstObject * object, GstObject * orig, GParamSpec * pspec); - - /*< public >*/ - /* virtual methods for subclasses */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/* normal GObject stuff */ -GType gst_object_get_type (void); - -/* name routines */ -gboolean gst_object_set_name (GstObject *object, const gchar *name); -gchar* gst_object_get_name (GstObject *object); - -/* parentage routines */ -gboolean gst_object_set_parent (GstObject *object, GstObject *parent); -GstObject* gst_object_get_parent (GstObject *object); -void gst_object_unparent (GstObject *object); -gboolean gst_object_has_ancestor (GstObject *object, GstObject *ancestor); - -void gst_object_default_deep_notify (GObject *object, GstObject *orig, - GParamSpec *pspec, gchar **excluded_props); - -/* refcounting + life cycle */ -gpointer gst_object_ref (gpointer object); -void gst_object_unref (gpointer object); -gpointer gst_object_ref_sink (gpointer object); - -/* replace object pointer */ -gboolean gst_object_replace (GstObject **oldobj, GstObject *newobj); - -/* printing out the 'path' of the object */ -gchar * gst_object_get_path_string (GstObject *object); - -/* misc utils */ -gboolean gst_object_check_uniqueness (GList *list, const gchar *name); - -/* controller functions */ -#include -#include - -GstClockTime gst_object_suggest_next_sync (GstObject * object); -gboolean gst_object_sync_values (GstObject * object, GstClockTime timestamp); - -gboolean gst_object_has_active_control_bindings (GstObject *object); -void gst_object_set_control_bindings_disabled (GstObject *object, gboolean disabled); -void gst_object_set_control_binding_disabled (GstObject *object, - const gchar * property_name, - gboolean disabled); - -gboolean gst_object_add_control_binding (GstObject * object, GstControlBinding * binding); -GstControlBinding * - gst_object_get_control_binding (GstObject *object, const gchar * property_name); -gboolean gst_object_remove_control_binding (GstObject * object, GstControlBinding * binding); - -GValue * gst_object_get_value (GstObject * object, const gchar * property_name, - GstClockTime timestamp); -gboolean gst_object_get_value_array (GstObject * object, const gchar * property_name, - GstClockTime timestamp, GstClockTime interval, - guint n_values, gpointer values); -gboolean gst_object_get_g_value_array (GstObject * object, const gchar * property_name, - GstClockTime timestamp, GstClockTime interval, - guint n_values, GValue *values); - -GstClockTime gst_object_get_control_rate (GstObject * object); -void gst_object_set_control_rate (GstObject * object, GstClockTime control_rate); - -G_END_DECLS - -#endif /* __GST_OBJECT_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpad.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpad.h deleted file mode 100644 index 0170ab42..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpad.h +++ /dev/null @@ -1,1006 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpad.h: Header for GstPad object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PAD_H__ -#define __GST_PAD_H__ - -#include - -typedef struct _GstPad GstPad; -typedef struct _GstPadPrivate GstPadPrivate; -typedef struct _GstPadClass GstPadClass; -typedef struct _GstPadProbeInfo GstPadProbeInfo; - -/** - * GstPadDirection: - * @GST_PAD_UNKNOWN: direction is unknown. - * @GST_PAD_SRC: the pad is a source pad. - * @GST_PAD_SINK: the pad is a sink pad. - * - * The direction of a pad. - */ -typedef enum { - GST_PAD_UNKNOWN, - GST_PAD_SRC, - GST_PAD_SINK -} GstPadDirection; - -/** - * GstPadMode: - * @GST_PAD_MODE_NONE: Pad will not handle dataflow - * @GST_PAD_MODE_PUSH: Pad handles dataflow in downstream push mode - * @GST_PAD_MODE_PULL: Pad handles dataflow in upstream pull mode - * - * The status of a GstPad. After activating a pad, which usually happens when the - * parent element goes from READY to PAUSED, the GstPadMode defines if the - * pad operates in push or pull mode. - */ -typedef enum { - GST_PAD_MODE_NONE, - GST_PAD_MODE_PUSH, - GST_PAD_MODE_PULL -} GstPadMode; - -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* - * Pad base class - */ -#define GST_TYPE_PAD (gst_pad_get_type ()) -#define GST_IS_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD)) -#define GST_IS_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD)) -#define GST_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD, GstPad)) -#define GST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD, GstPadClass)) -#define GST_PAD_CAST(obj) ((GstPad*)(obj)) - - - -/** - * GstPadLinkReturn: - * @GST_PAD_LINK_OK : link succeeded - * @GST_PAD_LINK_WRONG_HIERARCHY: pads have no common grandparent - * @GST_PAD_LINK_WAS_LINKED : pad was already linked - * @GST_PAD_LINK_WRONG_DIRECTION: pads have wrong direction - * @GST_PAD_LINK_NOFORMAT : pads do not have common format - * @GST_PAD_LINK_NOSCHED : pads cannot cooperate in scheduling - * @GST_PAD_LINK_REFUSED : refused for some reason - * - * Result values from gst_pad_link and friends. - */ -typedef enum { - GST_PAD_LINK_OK = 0, - GST_PAD_LINK_WRONG_HIERARCHY = -1, - GST_PAD_LINK_WAS_LINKED = -2, - GST_PAD_LINK_WRONG_DIRECTION = -3, - GST_PAD_LINK_NOFORMAT = -4, - GST_PAD_LINK_NOSCHED = -5, - GST_PAD_LINK_REFUSED = -6 -} GstPadLinkReturn; - -/** - * GST_PAD_LINK_FAILED: - * @ret: the #GstPadLinkReturn value - * - * Macro to test if the given #GstPadLinkReturn value indicates a failed - * link step. - */ -#define GST_PAD_LINK_FAILED(ret) ((ret) < GST_PAD_LINK_OK) - -/** - * GST_PAD_LINK_SUCCESSFUL: - * @ret: the #GstPadLinkReturn value - * - * Macro to test if the given #GstPadLinkReturn value indicates a successful - * link step. - */ -#define GST_PAD_LINK_SUCCESSFUL(ret) ((ret) >= GST_PAD_LINK_OK) - -/** - * GstFlowReturn: - * @GST_FLOW_OK: Data passing was ok. - * @GST_FLOW_NOT_LINKED: Pad is not linked. - * @GST_FLOW_FLUSHING: Pad is flushing. - * @GST_FLOW_EOS: Pad is EOS. - * @GST_FLOW_NOT_NEGOTIATED: Pad is not negotiated. - * @GST_FLOW_ERROR: Some (fatal) error occured. Element generating - * this error should post an error message with more - * details. - * @GST_FLOW_NOT_SUPPORTED: This operation is not supported. - * @GST_FLOW_CUSTOM_SUCCESS: Elements can use values starting from - * this (and higher) to define custom success - * codes. - * @GST_FLOW_CUSTOM_SUCCESS_1: Pre-defined custom success code (define your - * custom success code to this to avoid compiler - * warnings). - * @GST_FLOW_CUSTOM_SUCCESS_2: Pre-defined custom success code. - * @GST_FLOW_CUSTOM_ERROR: Elements can use values starting from - * this (and lower) to define custom error codes. - * @GST_FLOW_CUSTOM_ERROR_1: Pre-defined custom error code (define your - * custom error code to this to avoid compiler - * warnings). - * @GST_FLOW_CUSTOM_ERROR_2: Pre-defined custom error code. - * - * The result of passing data to a pad. - * - * Note that the custom return values should not be exposed outside of the - * element scope. - */ -typedef enum { - /* custom success starts here */ - GST_FLOW_CUSTOM_SUCCESS_2 = 102, - GST_FLOW_CUSTOM_SUCCESS_1 = 101, - GST_FLOW_CUSTOM_SUCCESS = 100, - - /* core predefined */ - GST_FLOW_OK = 0, - /* expected failures */ - GST_FLOW_NOT_LINKED = -1, - GST_FLOW_FLUSHING = -2, - /* error cases */ - GST_FLOW_EOS = -3, - GST_FLOW_NOT_NEGOTIATED = -4, - GST_FLOW_ERROR = -5, - GST_FLOW_NOT_SUPPORTED = -6, - - /* custom error starts here */ - GST_FLOW_CUSTOM_ERROR = -100, - GST_FLOW_CUSTOM_ERROR_1 = -101, - GST_FLOW_CUSTOM_ERROR_2 = -102 -} GstFlowReturn; - -const gchar* gst_flow_get_name (GstFlowReturn ret); -GQuark gst_flow_to_quark (GstFlowReturn ret); - -/** - * GstPadLinkCheck: - * @GST_PAD_LINK_CHECK_NOTHING: Don't check hierarchy or caps compatibility. - * @GST_PAD_LINK_CHECK_HIERARCHY: Check the pads have same parents/grandparents. - * Could be omitted if it is already known that the two elements that own the - * pads are in the same bin. - * @GST_PAD_LINK_CHECK_TEMPLATE_CAPS: Check if the pads are compatible by using - * their template caps. This is much faster than @GST_PAD_LINK_CHECK_CAPS, but - * would be unsafe e.g. if one pad has %GST_CAPS_ANY. - * @GST_PAD_LINK_CHECK_CAPS: Check if the pads are compatible by comparing the - * caps returned by gst_pad_query_caps(). - * @GST_PAD_LINK_CHECK_DEFAULT: The default checks done when linking - * pads (i.e. the ones used by gst_pad_link()). - * - * The amount of checking to be done when linking pads. @GST_PAD_LINK_CHECK_CAPS - * and @GST_PAD_LINK_CHECK_TEMPLATE_CAPS are mutually exclusive. If both are - * specified, expensive but safe @GST_PAD_LINK_CHECK_CAPS are performed. - * - * - * Only disable some of the checks if you are 100% certain you know the link - * will not fail because of hierarchy/caps compatibility failures. If uncertain, - * use the default checks (%GST_PAD_LINK_CHECK_DEFAULT) or the regular methods - * for linking the pads. - * - */ - -typedef enum { - GST_PAD_LINK_CHECK_NOTHING = 0, - GST_PAD_LINK_CHECK_HIERARCHY = 1 << 0, - GST_PAD_LINK_CHECK_TEMPLATE_CAPS = 1 << 1, - GST_PAD_LINK_CHECK_CAPS = 1 << 2, - - GST_PAD_LINK_CHECK_DEFAULT = GST_PAD_LINK_CHECK_HIERARCHY | GST_PAD_LINK_CHECK_CAPS -} GstPadLinkCheck; - -/* pad states */ -/** - * GstPadActivateFunction: - * @pad: a #GstPad - * @parent: the parent of @pad - * - * This function is called when the pad is activated during the element - * READY to PAUSED state change. By default this function will call the - * activate function that puts the pad in push mode but elements can - * override this function to activate the pad in pull mode if they wish. - * - * Returns: TRUE if the pad could be activated. - */ -typedef gboolean (*GstPadActivateFunction) (GstPad *pad, GstObject *parent); -/** - * GstPadActivateModeFunction: - * @pad: a #GstPad - * @parent: the parent of @pad - * @mode: the requested activation mode of @pad - * @active: activate or deactivate the pad. - * - * The prototype of the push and pull activate functions. - * - * Returns: TRUE if the pad could be activated or deactivated. - */ -typedef gboolean (*GstPadActivateModeFunction) (GstPad *pad, GstObject *parent, - GstPadMode mode, gboolean active); - - -/* data passing */ -/** - * GstPadChainFunction: - * @pad: the sink #GstPad that performed the chain. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @buffer: the #GstBuffer that is chained, not %NULL. - * - * A function that will be called on sinkpads when chaining buffers. - * The function typically processes the data contained in the buffer and - * either consumes the data or passes it on to the internally linked pad(s). - * - * The implementer of this function receives a refcount to @buffer and should - * gst_buffer_unref() when the buffer is no longer needed. - * - * When a chain function detects an error in the data stream, it must post an - * error on the bus and return an appropriate #GstFlowReturn value. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstPadChainFunction) (GstPad *pad, GstObject *parent, - GstBuffer *buffer); - -/** - * GstPadChainListFunction: - * @pad: the sink #GstPad that performed the chain. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @list: the #GstBufferList that is chained, not %NULL. - * - * A function that will be called on sinkpads when chaining buffer lists. - * The function typically processes the data contained in the buffer list and - * either consumes the data or passes it on to the internally linked pad(s). - * - * The implementer of this function receives a refcount to @list and - * should gst_buffer_list_unref() when the list is no longer needed. - * - * When a chainlist function detects an error in the data stream, it must - * post an error on the bus and return an appropriate #GstFlowReturn value. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstPadChainListFunction) (GstPad *pad, GstObject *parent, - GstBufferList *list); - -/** - * GstPadGetRangeFunction: - * @pad: the src #GstPad to perform the getrange on. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @offset: the offset of the range - * @length: the length of the range - * @buffer: a memory location to hold the result buffer, cannot be NULL. - * - * This function will be called on source pads when a peer element - * request a buffer at the specified @offset and @length. If this function - * returns #GST_FLOW_OK, the result buffer will be stored in @buffer. The - * contents of @buffer is invalid for any other return value. - * - * This function is installed on a source pad with - * gst_pad_set_getrange_function() and can only be called on source pads after - * they are successfully activated with gst_pad_activate_mode() with the - * #GST_PAD_MODE_PULL. - * - * @offset and @length are always given in byte units. @offset must normally be a value - * between 0 and the length in bytes of the data available on @pad. The - * length (duration in bytes) can be retrieved with a #GST_QUERY_DURATION or with a - * #GST_QUERY_SEEKING. - * - * Any @offset larger or equal than the length will make the function return - * #GST_FLOW_EOS, which corresponds to EOS. In this case @buffer does not - * contain a valid buffer. - * - * The buffer size of @buffer will only be smaller than @length when @offset is - * near the end of the stream. In all other cases, the size of @buffer must be - * exactly the requested size. - * - * It is allowed to call this function with a 0 @length and valid @offset, in - * which case @buffer will contain a 0-sized buffer and the function returns - * #GST_FLOW_OK. - * - * When this function is called with a -1 @offset, the sequentially next buffer - * of length @length in the stream is returned. - * - * When this function is called with a -1 @length, a buffer with a default - * optimal length is returned in @buffer. The length might depend on the value - * of @offset. - * - * Returns: #GST_FLOW_OK for success and a valid buffer in @buffer. Any other - * return value leaves @buffer undefined. - */ -typedef GstFlowReturn (*GstPadGetRangeFunction) (GstPad *pad, GstObject *parent, - guint64 offset, guint length, - GstBuffer **buffer); - -/** - * GstPadEventFunction: - * @pad: the #GstPad to handle the event. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @event: the #GstEvent to handle. - * - * Function signature to handle an event for the pad. - * - * Returns: TRUE if the pad could handle the event. - */ -typedef gboolean (*GstPadEventFunction) (GstPad *pad, GstObject *parent, - GstEvent *event); - - -/* internal links */ -/** - * GstPadIterIntLinkFunction: - * @pad: The #GstPad to query. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * - * The signature of the internal pad link iterator function. - * - * Returns: a new #GstIterator that will iterate over all pads that are - * linked to the given pad on the inside of the parent element. - * - * the caller must call gst_iterator_free() after usage. - */ -typedef GstIterator* (*GstPadIterIntLinkFunction) (GstPad *pad, GstObject *parent); - -/* generic query function */ -/** - * GstPadQueryFunction: - * @pad: the #GstPad to query. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @query: the #GstQuery object to execute - * - * The signature of the query function. - * - * Returns: TRUE if the query could be performed. - */ -typedef gboolean (*GstPadQueryFunction) (GstPad *pad, GstObject *parent, - GstQuery *query); - - -/* linking */ -/** - * GstPadLinkFunction: - * @pad: the #GstPad that is linked. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @peer: the peer #GstPad of the link - * - * Function signature to handle a new link on the pad. - * - * Returns: the result of the link with the specified peer. - */ -typedef GstPadLinkReturn (*GstPadLinkFunction) (GstPad *pad, GstObject *parent, GstPad *peer); -/** - * GstPadUnlinkFunction: - * @pad: the #GstPad that is linked. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * - * Function signature to handle a unlinking the pad prom its peer. - */ -typedef void (*GstPadUnlinkFunction) (GstPad *pad, GstObject *parent); - - -/* misc */ -/** - * GstPadForwardFunction: - * @pad: the #GstPad that is forwarded. - * @user_data: the gpointer to optional user data. - * - * A forward function is called for all internally linked pads, see - * gst_pad_forward(). - * - * Returns: TRUE if the dispatching procedure has to be stopped. - */ -typedef gboolean (*GstPadForwardFunction) (GstPad *pad, gpointer user_data); - -/** - * GstPadProbeType: - * @GST_PAD_PROBE_TYPE_INVALID: invalid probe type - * @GST_PAD_PROBE_TYPE_IDLE: probe idle pads and block - * @GST_PAD_PROBE_TYPE_BLOCK: probe and block pads - * @GST_PAD_PROBE_TYPE_BUFFER: probe buffers - * @GST_PAD_PROBE_TYPE_BUFFER_LIST: probe buffer lists - * @GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM: probe downstream events - * @GST_PAD_PROBE_TYPE_EVENT_UPSTREAM: probe upstream events - * @GST_PAD_PROBE_TYPE_EVENT_FLUSH: probe flush events. This probe has to be - * explicitly enabled and is not included in the - * @@GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM or - * @@GST_PAD_PROBE_TYPE_EVENT_UPSTREAM probe types. - * @GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM: probe downstream queries - * @GST_PAD_PROBE_TYPE_QUERY_UPSTREAM: probe upstream queries - * @GST_PAD_PROBE_TYPE_PUSH: probe push - * @GST_PAD_PROBE_TYPE_PULL: probe pull - * @GST_PAD_PROBE_TYPE_BLOCKING: probe and block at the next opportunity, at data flow or when idle - * @GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM: probe downstream data (buffers, buffer lists, and events) - * @GST_PAD_PROBE_TYPE_DATA_UPSTREAM: probe upstream data (events) - * @GST_PAD_PROBE_TYPE_DATA_BOTH: probe upstream and downstream data (buffers, buffer lists, and events) - * @GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM: probe and block downstream data (buffers, buffer lists, and events) - * @GST_PAD_PROBE_TYPE_BLOCK_UPSTREAM: probe and block upstream data (events) - * @GST_PAD_PROBE_TYPE_EVENT_BOTH: probe upstream and downstream events - * @GST_PAD_PROBE_TYPE_QUERY_BOTH: probe upstream and downstream queries - * @GST_PAD_PROBE_TYPE_ALL_BOTH: probe upstream events and queries and downstream buffers, buffer lists, events and queries - * @GST_PAD_PROBE_TYPE_SCHEDULING: probe push and pull - * - * The different probing types that can occur. When either one of - * @GST_PAD_PROBE_TYPE_IDLE or @GST_PAD_PROBE_TYPE_BLOCK is used, the probe will be a - * blocking probe. - */ -typedef enum -{ - GST_PAD_PROBE_TYPE_INVALID = 0, - /* flags to control blocking */ - GST_PAD_PROBE_TYPE_IDLE = (1 << 0), - GST_PAD_PROBE_TYPE_BLOCK = (1 << 1), - /* flags to select datatypes */ - GST_PAD_PROBE_TYPE_BUFFER = (1 << 4), - GST_PAD_PROBE_TYPE_BUFFER_LIST = (1 << 5), - GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM = (1 << 6), - GST_PAD_PROBE_TYPE_EVENT_UPSTREAM = (1 << 7), - GST_PAD_PROBE_TYPE_EVENT_FLUSH = (1 << 8), - GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM = (1 << 9), - GST_PAD_PROBE_TYPE_QUERY_UPSTREAM = (1 << 10), - /* flags to select scheduling mode */ - GST_PAD_PROBE_TYPE_PUSH = (1 << 12), - GST_PAD_PROBE_TYPE_PULL = (1 << 13), - - /* flag combinations */ - GST_PAD_PROBE_TYPE_BLOCKING = GST_PAD_PROBE_TYPE_IDLE | GST_PAD_PROBE_TYPE_BLOCK, - GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM = GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, - GST_PAD_PROBE_TYPE_DATA_UPSTREAM = GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, - GST_PAD_PROBE_TYPE_DATA_BOTH = GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM | GST_PAD_PROBE_TYPE_DATA_UPSTREAM, - GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM = GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM, - GST_PAD_PROBE_TYPE_BLOCK_UPSTREAM = GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_DATA_UPSTREAM, - GST_PAD_PROBE_TYPE_EVENT_BOTH = GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM | GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, - GST_PAD_PROBE_TYPE_QUERY_BOTH = GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM | GST_PAD_PROBE_TYPE_QUERY_UPSTREAM, - GST_PAD_PROBE_TYPE_ALL_BOTH = GST_PAD_PROBE_TYPE_DATA_BOTH | GST_PAD_PROBE_TYPE_QUERY_BOTH, - GST_PAD_PROBE_TYPE_SCHEDULING = GST_PAD_PROBE_TYPE_PUSH | GST_PAD_PROBE_TYPE_PULL -} GstPadProbeType; - - -/** - * GstPadProbeReturn: - * @GST_PAD_PROBE_OK: normal probe return value - * @GST_PAD_PROBE_DROP: drop data in data probes. For push mode this means that - * the data item is not sent downstream. For pull mode, it means that the - * data item is not passed upstream. In both cases, this result code - * returns #GST_FLOW_OK or %TRUE to the caller. - * @GST_PAD_PROBE_REMOVE: remove probe - * @GST_PAD_PROBE_PASS: pass the data item in the block probe and block on - * the next item - * - * Different return values for the #GstPadProbeCallback. - */ -typedef enum -{ - GST_PAD_PROBE_DROP, - GST_PAD_PROBE_OK, - GST_PAD_PROBE_REMOVE, - GST_PAD_PROBE_PASS, -} GstPadProbeReturn; - - -/** - * GstPadProbeInfo: - * @type: the current probe type - * @id: the id of the probe - * @data: type specific data, check the @type field to know the datatype. - * This field can be NULL. - * @offset: offset of pull probe, this field is valid when @type contains - * #GST_PAD_PROBE_TYPE_PULL - * @size: size of pull probe, this field is valid when @type contains - * #GST_PAD_PROBE_TYPE_PULL - * - * Info passed in the #GstPadProbeCallback. - */ -struct _GstPadProbeInfo -{ - GstPadProbeType type; - gulong id; - gpointer data; - guint64 offset; - guint size; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_PAD_PROBE_INFO_TYPE(d) ((d)->type) -#define GST_PAD_PROBE_INFO_ID(d) ((d)->id) -#define GST_PAD_PROBE_INFO_DATA(d) ((d)->data) - -#define GST_PAD_PROBE_INFO_BUFFER(d) GST_BUFFER_CAST(GST_PAD_PROBE_INFO_DATA(d)) -#define GST_PAD_PROBE_INFO_BUFFER_LIST(d) GST_BUFFER_LIST_CAST(GST_PAD_PROBE_INFO_DATA(d)) -#define GST_PAD_PROBE_INFO_EVENT(d) GST_EVENT_CAST(GST_PAD_PROBE_INFO_DATA(d)) -#define GST_PAD_PROBE_INFO_QUERY(d) GST_QUERY_CAST(GST_PAD_PROBE_INFO_DATA(d)) - -#define GST_PAD_PROBE_INFO_OFFSET(d) ((d)->offset) -#define GST_PAD_PROBE_INFO_SIZE(d) ((d)->size) - -GstEvent* gst_pad_probe_info_get_event (GstPadProbeInfo * info); -GstQuery* gst_pad_probe_info_get_query (GstPadProbeInfo * info); -GstBuffer* gst_pad_probe_info_get_buffer (GstPadProbeInfo * info); -GstBufferList* gst_pad_probe_info_get_buffer_list (GstPadProbeInfo * info); - -/** - * GstPadProbeCallback: - * @pad: the #GstPad that is blocked - * @info: #GstPadProbeInfo - * @user_data: the gpointer to optional user data. - * - * Callback used by gst_pad_add_probe(). Gets called to notify about the current - * blocking type. - * - * The callback is allowed to modify the data pointer in @info. - * - * Returns: a #GstPadProbeReturn - */ -typedef GstPadProbeReturn (*GstPadProbeCallback) (GstPad *pad, GstPadProbeInfo *info, - gpointer user_data); - -/** - * GstPadStickyEventsForeachFunction: - * @pad: the #GstPad. - * @event: a sticky #GstEvent. - * @user_data: the #gpointer to optional user data. - * - * Callback used by gst_pad_sticky_events_foreach(). - * - * When this function returns %TRUE, the next event will be - * returned. When %FALSE is returned, gst_pad_sticky_events_foreach() will return. - * - * When @event is set to NULL, the item will be removed from the list of sticky events. - * When @event has been made writable, the new buffer reference can be assigned - * to @event. This function is responsible for unreffing the old event when - * removing or modifying. - * - * Returns: %TRUE if the iteration should continue - */ -typedef gboolean (*GstPadStickyEventsForeachFunction) (GstPad *pad, GstEvent **event, - gpointer user_data); - -/** - * GstPadFlags: - * @GST_PAD_FLAG_BLOCKED: is dataflow on a pad blocked - * @GST_PAD_FLAG_FLUSHING: is pad flushing - * @GST_PAD_FLAG_EOS: is pad in EOS state - * @GST_PAD_FLAG_BLOCKING: is pad currently blocking on a buffer or event - * @GST_PAD_FLAG_NEED_PARENT: ensure that there is a parent object before calling - * into the pad callbacks. - * @GST_PAD_FLAG_NEED_RECONFIGURE: the pad should be reconfigured/renegotiated. - * The flag has to be unset manually after - * reconfiguration happened. - * @GST_PAD_FLAG_PENDING_EVENTS: the pad has pending events - * @GST_PAD_FLAG_FIXED_CAPS: the pad is using fixed caps this means that once the - * caps are set on the pad, the caps query function only - * returns those caps. - * @GST_PAD_FLAG_PROXY_CAPS: the default event and query handler will forward - * all events and queries to the internally linked pads - * instead of discarding them. - * @GST_PAD_FLAG_PROXY_ALLOCATION: the default query handler will forward - * allocation queries to the internally linked pads - * instead of discarding them. - * @GST_PAD_FLAG_PROXY_SCHEDULING: the default query handler will forward - * scheduling queries to the internally linked pads - * instead of discarding them. - * @GST_PAD_FLAG_LAST: offset to define more flags - * - * Pad state flags - */ -typedef enum { - GST_PAD_FLAG_BLOCKED = (GST_OBJECT_FLAG_LAST << 0), - GST_PAD_FLAG_FLUSHING = (GST_OBJECT_FLAG_LAST << 1), - GST_PAD_FLAG_EOS = (GST_OBJECT_FLAG_LAST << 2), - GST_PAD_FLAG_BLOCKING = (GST_OBJECT_FLAG_LAST << 3), - GST_PAD_FLAG_NEED_PARENT = (GST_OBJECT_FLAG_LAST << 4), - GST_PAD_FLAG_NEED_RECONFIGURE = (GST_OBJECT_FLAG_LAST << 5), - GST_PAD_FLAG_PENDING_EVENTS = (GST_OBJECT_FLAG_LAST << 6), - GST_PAD_FLAG_FIXED_CAPS = (GST_OBJECT_FLAG_LAST << 7), - GST_PAD_FLAG_PROXY_CAPS = (GST_OBJECT_FLAG_LAST << 8), - GST_PAD_FLAG_PROXY_ALLOCATION = (GST_OBJECT_FLAG_LAST << 9), - GST_PAD_FLAG_PROXY_SCHEDULING = (GST_OBJECT_FLAG_LAST << 10), - /* padding */ - GST_PAD_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) -} GstPadFlags; - -/** - * GstPad: - * @element_private: private data owned by the parent element - * @padtemplate: padtemplate for this pad - * @direction: the direction of the pad, cannot change after creating - * the pad. - * - * The #GstPad structure. Use the functions to update the variables. - */ -struct _GstPad { - GstObject object; - - /*< public >*/ - gpointer element_private; - - GstPadTemplate *padtemplate; - - GstPadDirection direction; - - /*< private >*/ - /* streaming rec_lock */ - GRecMutex stream_rec_lock; - GstTask *task; - - /* block cond, mutex is from the object */ - GCond block_cond; - GHookList probes; - - GstPadMode mode; - GstPadActivateFunction activatefunc; - gpointer activatedata; - GDestroyNotify activatenotify; - GstPadActivateModeFunction activatemodefunc; - gpointer activatemodedata; - GDestroyNotify activatemodenotify; - - /* pad link */ - GstPad *peer; - GstPadLinkFunction linkfunc; - gpointer linkdata; - GDestroyNotify linknotify; - GstPadUnlinkFunction unlinkfunc; - gpointer unlinkdata; - GDestroyNotify unlinknotify; - - /* data transport functions */ - GstPadChainFunction chainfunc; - gpointer chaindata; - GDestroyNotify chainnotify; - GstPadChainListFunction chainlistfunc; - gpointer chainlistdata; - GDestroyNotify chainlistnotify; - GstPadGetRangeFunction getrangefunc; - gpointer getrangedata; - GDestroyNotify getrangenotify; - GstPadEventFunction eventfunc; - gpointer eventdata; - GDestroyNotify eventnotify; - - /* pad offset */ - gint64 offset; - - /* generic query method */ - GstPadQueryFunction queryfunc; - gpointer querydata; - GDestroyNotify querynotify; - - /* internal links */ - GstPadIterIntLinkFunction iterintlinkfunc; - gpointer iterintlinkdata; - GDestroyNotify iterintlinknotify; - - /* counts number of probes attached. */ - gint num_probes; - gint num_blocked; - - GstPadPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPadClass { - GstObjectClass parent_class; - - /* signal callbacks */ - void (*linked) (GstPad *pad, GstPad *peer); - void (*unlinked) (GstPad *pad, GstPad *peer); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - - -/***** helper macros *****/ -/* GstPad */ -#define GST_PAD_NAME(pad) (GST_OBJECT_NAME(pad)) -#define GST_PAD_PARENT(pad) (GST_ELEMENT_CAST(GST_OBJECT_PARENT(pad))) -#define GST_PAD_ELEMENT_PRIVATE(pad) (GST_PAD_CAST(pad)->element_private) -#define GST_PAD_PAD_TEMPLATE(pad) (GST_PAD_CAST(pad)->padtemplate) -#define GST_PAD_DIRECTION(pad) (GST_PAD_CAST(pad)->direction) -#define GST_PAD_TASK(pad) (GST_PAD_CAST(pad)->task) -#define GST_PAD_MODE(pad) (GST_PAD_CAST(pad)->mode) - -#define GST_PAD_ACTIVATEFUNC(pad) (GST_PAD_CAST(pad)->activatefunc) -#define GST_PAD_ACTIVATEMODEFUNC(pad) (GST_PAD_CAST(pad)->activatemodefunc) -#define GST_PAD_CHAINFUNC(pad) (GST_PAD_CAST(pad)->chainfunc) -#define GST_PAD_CHAINLISTFUNC(pad) (GST_PAD_CAST(pad)->chainlistfunc) -#define GST_PAD_GETRANGEFUNC(pad) (GST_PAD_CAST(pad)->getrangefunc) -#define GST_PAD_EVENTFUNC(pad) (GST_PAD_CAST(pad)->eventfunc) -#define GST_PAD_QUERYFUNC(pad) (GST_PAD_CAST(pad)->queryfunc) -#define GST_PAD_ITERINTLINKFUNC(pad) (GST_PAD_CAST(pad)->iterintlinkfunc) - -#define GST_PAD_PEER(pad) (GST_PAD_CAST(pad)->peer) -#define GST_PAD_LINKFUNC(pad) (GST_PAD_CAST(pad)->linkfunc) -#define GST_PAD_UNLINKFUNC(pad) (GST_PAD_CAST(pad)->unlinkfunc) - -#define GST_PAD_IS_SRC(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SRC) -#define GST_PAD_IS_SINK(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SINK) - -#define GST_PAD_IS_LINKED(pad) (GST_PAD_PEER(pad) != NULL) - -#define GST_PAD_IS_ACTIVE(pad) (GST_PAD_MODE(pad) != GST_PAD_MODE_NONE) - -#define GST_PAD_IS_BLOCKED(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_BLOCKED)) -#define GST_PAD_IS_BLOCKING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_BLOCKING)) - -#define GST_PAD_IS_FLUSHING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_FLUSHING)) -#define GST_PAD_SET_FLUSHING(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_FLUSHING)) -#define GST_PAD_UNSET_FLUSHING(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_FLUSHING)) - -#define GST_PAD_IS_EOS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_EOS)) - -#define GST_PAD_NEEDS_RECONFIGURE(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_NEED_RECONFIGURE)) -#define GST_PAD_HAS_PENDING_EVENTS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PENDING_EVENTS)) -#define GST_PAD_IS_FIXED_CAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_FIXED_CAPS)) -#define GST_PAD_NEEDS_PARENT(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_NEED_PARENT)) - -#define GST_PAD_IS_PROXY_CAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PROXY_CAPS)) -#define GST_PAD_SET_PROXY_CAPS(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PROXY_CAPS)) -#define GST_PAD_UNSET_PROXY_CAPS(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PROXY_CAPS)) - -#define GST_PAD_IS_PROXY_ALLOCATION(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PROXY_ALLOCATION)) -#define GST_PAD_SET_PROXY_ALLOCATION(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PROXY_ALLOCATION)) -#define GST_PAD_UNSET_PROXY_ALLOCATION(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PROXY_ALLOCATION)) - -#define GST_PAD_IS_PROXY_SCHEDULING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PROXY_SCHEDULING)) -#define GST_PAD_SET_PROXY_SCHEDULING(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PROXY_SCHEDULING)) -#define GST_PAD_UNSET_PROXY_SCHEDULING(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PROXY_SCHEDULING)) - -/** - * GST_PAD_GET_STREAM_LOCK: - * @pad: a #GstPad - * - * Get the stream lock of @pad. The stream lock is protecting the - * resources used in the data processing functions of @pad. - */ -#define GST_PAD_GET_STREAM_LOCK(pad) (&(GST_PAD_CAST(pad)->stream_rec_lock)) -/** - * GST_PAD_STREAM_LOCK: - * @pad: a #GstPad - * - * Lock the stream lock of @pad. - */ -#define GST_PAD_STREAM_LOCK(pad) g_rec_mutex_lock(GST_PAD_GET_STREAM_LOCK(pad)) -/** - * GST_PAD_STREAM_TRYLOCK: - * @pad: a #GstPad - * - * Try to Lock the stream lock of the pad, return TRUE if the lock could be - * taken. - */ -#define GST_PAD_STREAM_TRYLOCK(pad) g_rec_mutex_trylock(GST_PAD_GET_STREAM_LOCK(pad)) -/** - * GST_PAD_STREAM_UNLOCK: - * @pad: a #GstPad - * - * Unlock the stream lock of @pad. - */ -#define GST_PAD_STREAM_UNLOCK(pad) g_rec_mutex_unlock(GST_PAD_GET_STREAM_LOCK(pad)) - -#define GST_PAD_BLOCK_GET_COND(pad) (&GST_PAD_CAST(pad)->block_cond) -#define GST_PAD_BLOCK_WAIT(pad) (g_cond_wait(GST_PAD_BLOCK_GET_COND (pad), GST_OBJECT_GET_LOCK (pad))) -#define GST_PAD_BLOCK_SIGNAL(pad) (g_cond_signal(GST_PAD_BLOCK_GET_COND (pad))) -#define GST_PAD_BLOCK_BROADCAST(pad) (g_cond_broadcast(GST_PAD_BLOCK_GET_COND (pad))) - -GType gst_pad_get_type (void); - -/* creating pads */ -GstPad* gst_pad_new (const gchar *name, GstPadDirection direction); -GstPad* gst_pad_new_from_template (GstPadTemplate *templ, const gchar *name); -GstPad* gst_pad_new_from_static_template (GstStaticPadTemplate *templ, const gchar *name); - - -/** - * gst_pad_get_name: - * @pad: the pad to get the name from - * - * Get a copy of the name of the pad. g_free() after usage. - * - * MT safe. - */ -#define gst_pad_get_name(pad) gst_object_get_name (GST_OBJECT_CAST (pad)) -/** - * gst_pad_get_parent: - * @pad: the pad to get the parent of - * - * Get the parent of @pad. This function increases the refcount - * of the parent object so you should gst_object_unref() it after usage. - * Can return NULL if the pad did not have a parent. - * - * MT safe. - */ -#define gst_pad_get_parent(pad) gst_object_get_parent (GST_OBJECT_CAST (pad)) - -GstPadDirection gst_pad_get_direction (GstPad *pad); - -gboolean gst_pad_set_active (GstPad *pad, gboolean active); -gboolean gst_pad_is_active (GstPad *pad); -gboolean gst_pad_activate_mode (GstPad *pad, GstPadMode mode, - gboolean active); - -gulong gst_pad_add_probe (GstPad *pad, - GstPadProbeType mask, - GstPadProbeCallback callback, - gpointer user_data, - GDestroyNotify destroy_data); -void gst_pad_remove_probe (GstPad *pad, gulong id); - -gboolean gst_pad_is_blocked (GstPad *pad); -gboolean gst_pad_is_blocking (GstPad *pad); - -void gst_pad_mark_reconfigure (GstPad *pad); -gboolean gst_pad_needs_reconfigure (GstPad *pad); -gboolean gst_pad_check_reconfigure (GstPad *pad); - -void gst_pad_set_element_private (GstPad *pad, gpointer priv); -gpointer gst_pad_get_element_private (GstPad *pad); - -GstPadTemplate* gst_pad_get_pad_template (GstPad *pad); - -GstEvent* gst_pad_get_sticky_event (GstPad *pad, GstEventType event_type, - guint idx); -void gst_pad_sticky_events_foreach (GstPad *pad, GstPadStickyEventsForeachFunction foreach_func, gpointer user_data); - -/* data passing setup functions */ -void gst_pad_set_activate_function_full (GstPad *pad, - GstPadActivateFunction activate, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_activatemode_function_full (GstPad *pad, - GstPadActivateModeFunction activatemode, - gpointer user_data, - GDestroyNotify notify); -/* data passing functions */ -void gst_pad_set_chain_function_full (GstPad *pad, - GstPadChainFunction chain, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_chain_list_function_full (GstPad *pad, - GstPadChainListFunction chainlist, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_getrange_function_full (GstPad *pad, - GstPadGetRangeFunction get, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_event_function_full (GstPad *pad, - GstPadEventFunction event, - gpointer user_data, - GDestroyNotify notify); - -#define gst_pad_set_activate_function(p,f) gst_pad_set_activate_function_full((p),(f),NULL,NULL) -#define gst_pad_set_activatemode_function(p,f) gst_pad_set_activatemode_function_full((p),(f),NULL,NULL) -#define gst_pad_set_chain_function(p,f) gst_pad_set_chain_function_full((p),(f),NULL,NULL) -#define gst_pad_set_chain_list_function(p,f) gst_pad_set_chain_list_function_full((p),(f),NULL,NULL) -#define gst_pad_set_getrange_function(p,f) gst_pad_set_getrange_function_full((p),(f),NULL,NULL) -#define gst_pad_set_event_function(p,f) gst_pad_set_event_function_full((p),(f),NULL,NULL) - -/* pad links */ -void gst_pad_set_link_function_full (GstPad *pad, - GstPadLinkFunction link, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_unlink_function_full (GstPad *pad, - GstPadUnlinkFunction unlink, - gpointer user_data, - GDestroyNotify notify); - -#define gst_pad_set_link_function(p,f) gst_pad_set_link_function_full((p),(f),NULL,NULL) -#define gst_pad_set_unlink_function(p,f) gst_pad_set_unlink_function_full((p),(f),NULL,NULL) - -gboolean gst_pad_can_link (GstPad *srcpad, GstPad *sinkpad); -GstPadLinkReturn gst_pad_link (GstPad *srcpad, GstPad *sinkpad); -GstPadLinkReturn gst_pad_link_full (GstPad *srcpad, GstPad *sinkpad, GstPadLinkCheck flags); -gboolean gst_pad_unlink (GstPad *srcpad, GstPad *sinkpad); -gboolean gst_pad_is_linked (GstPad *pad); - -GstPad* gst_pad_get_peer (GstPad *pad); - -GstCaps* gst_pad_get_pad_template_caps (GstPad *pad); - -/* capsnego function for linked/unlinked pads */ -GstCaps * gst_pad_get_current_caps (GstPad * pad); -gboolean gst_pad_has_current_caps (GstPad * pad); - -/* capsnego for linked pads */ -GstCaps * gst_pad_get_allowed_caps (GstPad * pad); - -/* pad offsets */ -gint64 gst_pad_get_offset (GstPad *pad); -void gst_pad_set_offset (GstPad *pad, gint64 offset); - -/* data passing functions to peer */ -GstFlowReturn gst_pad_push (GstPad *pad, GstBuffer *buffer); -GstFlowReturn gst_pad_push_list (GstPad *pad, GstBufferList *list); -GstFlowReturn gst_pad_pull_range (GstPad *pad, guint64 offset, guint size, - GstBuffer **buffer); -gboolean gst_pad_push_event (GstPad *pad, GstEvent *event); -gboolean gst_pad_event_default (GstPad *pad, GstObject *parent, - GstEvent *event); - -/* data passing functions on pad */ -GstFlowReturn gst_pad_chain (GstPad *pad, GstBuffer *buffer); -GstFlowReturn gst_pad_chain_list (GstPad *pad, GstBufferList *list); -GstFlowReturn gst_pad_get_range (GstPad *pad, guint64 offset, guint size, - GstBuffer **buffer); -gboolean gst_pad_send_event (GstPad *pad, GstEvent *event); - -/* pad tasks */ -gboolean gst_pad_start_task (GstPad *pad, GstTaskFunction func, - gpointer user_data, GDestroyNotify notify); -gboolean gst_pad_pause_task (GstPad *pad); -gboolean gst_pad_stop_task (GstPad *pad); - -/* internal links */ -void gst_pad_set_iterate_internal_links_function_full (GstPad * pad, - GstPadIterIntLinkFunction iterintlink, - gpointer user_data, - GDestroyNotify notify); -GstIterator * gst_pad_iterate_internal_links (GstPad * pad); -GstIterator * gst_pad_iterate_internal_links_default (GstPad * pad, GstObject *parent); - -#define gst_pad_set_iterate_internal_links_function(p,f) gst_pad_set_iterate_internal_links_function_full((p),(f),NULL,NULL) - -/* generic query function */ -gboolean gst_pad_query (GstPad *pad, GstQuery *query); -gboolean gst_pad_peer_query (GstPad *pad, GstQuery *query); -void gst_pad_set_query_function_full (GstPad *pad, GstPadQueryFunction query, - gpointer user_data, - GDestroyNotify notify); -gboolean gst_pad_query_default (GstPad *pad, GstObject *parent, - GstQuery *query); - -#define gst_pad_set_query_function(p,f) gst_pad_set_query_function_full((p),(f),NULL,NULL) - -/* misc helper functions */ -gboolean gst_pad_forward (GstPad *pad, GstPadForwardFunction forward, - gpointer user_data); - -const gchar * gst_pad_mode_get_name (GstPadMode mode); - -G_END_DECLS - -#endif /* __GST_PAD_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpadtemplate.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpadtemplate.h deleted file mode 100644 index 90f9b252..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpadtemplate.h +++ /dev/null @@ -1,194 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpadtemplate.h: Header for GstPadTemplate object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PAD_TEMPLATE_H__ -#define __GST_PAD_TEMPLATE_H__ - -#include - -typedef struct _GstPadTemplate GstPadTemplate; -typedef struct _GstPadTemplateClass GstPadTemplateClass; -typedef struct _GstStaticPadTemplate GstStaticPadTemplate; - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_STATIC_PAD_TEMPLATE (gst_static_pad_template_get_type ()) - -#define GST_TYPE_PAD_TEMPLATE (gst_pad_template_get_type ()) -#define GST_PAD_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD_TEMPLATE,GstPadTemplate)) -#define GST_PAD_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD_TEMPLATE,GstPadTemplateClass)) -#define GST_IS_PAD_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD_TEMPLATE)) -#define GST_IS_PAD_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD_TEMPLATE)) - -/** - * GstPadPresence: - * @GST_PAD_ALWAYS: the pad is always available - * @GST_PAD_SOMETIMES: the pad will become available depending on the media stream - * @GST_PAD_REQUEST: the pad is only available on request with - * gst_element_get_request_pad(). - * - * Indicates when this pad will become available. - */ -typedef enum { - GST_PAD_ALWAYS, - GST_PAD_SOMETIMES, - GST_PAD_REQUEST -} GstPadPresence; - -/** - * GST_PAD_TEMPLATE_NAME_TEMPLATE: - * @templ: the template to query - * - * Get the nametemplate of the padtemplate. - */ -#define GST_PAD_TEMPLATE_NAME_TEMPLATE(templ) (((GstPadTemplate *)(templ))->name_template) - -/** - * GST_PAD_TEMPLATE_DIRECTION: - * @templ: the template to query - * - * Get the #GstPadDirection of the padtemplate. - */ -#define GST_PAD_TEMPLATE_DIRECTION(templ) (((GstPadTemplate *)(templ))->direction) - -/** - * GST_PAD_TEMPLATE_PRESENCE: - * @templ: the template to query - * - * Get the #GstPadPresence of the padtemplate. - */ -#define GST_PAD_TEMPLATE_PRESENCE(templ) (((GstPadTemplate *)(templ))->presence) - -/** - * GST_PAD_TEMPLATE_CAPS: - * @templ: the template to query - * - * Get a handle to the padtemplate #GstCaps - */ -#define GST_PAD_TEMPLATE_CAPS(templ) (((GstPadTemplate *)(templ))->caps) - -/** - * GstPadTemplateFlags: - * @GST_PAD_TEMPLATE_FLAG_LAST: first flag that can be used by subclasses. - * - * Flags for the padtemplate - */ -typedef enum { - /* padding */ - GST_PAD_TEMPLATE_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 4) -} GstPadTemplateFlags; - -/** - * GST_PAD_TEMPLATE_IS_FIXED: - * @templ: the template to query - * - * Check if the properties of the padtemplate are fixed - */ -#define GST_PAD_TEMPLATE_IS_FIXED(templ) (GST_OBJECT_FLAG_IS_SET(templ, GST_PAD_TEMPLATE_FIXED)) - -/** - * GstPadTemplate: - * - * The padtemplate object. - */ -struct _GstPadTemplate { - GstObject object; - - gchar *name_template; - GstPadDirection direction; - GstPadPresence presence; - GstCaps *caps; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPadTemplateClass { - GstObjectClass parent_class; - - /* signal callbacks */ - void (*pad_created) (GstPadTemplate *templ, GstPad *pad); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstStaticPadTemplate: - * @name_template: the name of the template - * @direction: the direction of the template - * @presence: the presence of the template - * @static_caps: the caps of the template. - * - * Structure describing the #GstStaticPadTemplate. - */ -struct _GstStaticPadTemplate { - const gchar *name_template; - GstPadDirection direction; - GstPadPresence presence; - GstStaticCaps static_caps; -}; - -/** - * GST_STATIC_PAD_TEMPLATE: - * @padname: the name template of the pad - * @dir: the GstPadDirection of the pad - * @pres: the GstPadPresence of the pad - * @caps: the GstStaticCaps of the pad - * - * Convenience macro to fill the values of a GstStaticPadTemplate - * structure. - */ -#define GST_STATIC_PAD_TEMPLATE(padname, dir, pres, caps) \ -{ \ - /* name_template */ padname, \ - /* direction */ dir, \ - /* presence */ pres, \ - /* caps */ caps \ -} - -/* templates and factories */ -GType gst_pad_template_get_type (void); -GType gst_static_pad_template_get_type (void); - -GstPadTemplate* gst_pad_template_new (const gchar *name_template, - GstPadDirection direction, GstPadPresence presence, - GstCaps *caps) G_GNUC_MALLOC; - -GstPadTemplate * gst_static_pad_template_get (GstStaticPadTemplate *pad_template); -GstCaps* gst_static_pad_template_get_caps (GstStaticPadTemplate *templ); -GstCaps* gst_pad_template_get_caps (GstPadTemplate *templ); - -void gst_pad_template_pad_created (GstPadTemplate * templ, GstPad * pad); - -G_END_DECLS - -#endif /* __GST_PAD_TEMPLATE_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparamspecs.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparamspecs.h deleted file mode 100644 index e7e5fd57..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparamspecs.h +++ /dev/null @@ -1,122 +0,0 @@ -/* GStreamer - GParamSpecs for some of our types - * Copyright (C) 2007 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PARAMSPECS_H__ -#define __GST_PARAMSPECS_H__ - -#include - -G_BEGIN_DECLS - -/* --- paramspec flags */ - -/** - * GST_PARAM_CONTROLLABLE: - * - * Use this flag on GObject properties to signal they can make sense to be. - * controlled over time. This hint is used by the GstController. - */ -#define GST_PARAM_CONTROLLABLE (1 << (G_PARAM_USER_SHIFT + 1)) - -/** - * GST_PARAM_MUTABLE_READY: - * - * Use this flag on GObject properties of GstElements to indicate that - * they can be changed when the element is in the READY or lower state. - */ -#define GST_PARAM_MUTABLE_READY (1 << (G_PARAM_USER_SHIFT + 2)) - -/** - * GST_PARAM_MUTABLE_PAUSED: - * - * Use this flag on GObject properties of GstElements to indicate that - * they can be changed when the element is in the PAUSED or lower state. - * This flag implies GST_PARAM_MUTABLE_READY. - */ -#define GST_PARAM_MUTABLE_PAUSED (1 << (G_PARAM_USER_SHIFT + 3)) - -/** - * GST_PARAM_MUTABLE_PLAYING: - * - * Use this flag on GObject properties of GstElements to indicate that - * they can be changed when the element is in the PLAYING or lower state. - * This flag implies GST_PARAM_MUTABLE_PAUSED. - */ -#define GST_PARAM_MUTABLE_PLAYING (1 << (G_PARAM_USER_SHIFT + 4)) - -/** - * GST_PARAM_USER_SHIFT: - * - * Bits based on GST_PARAM_USER_SHIFT can be used by 3rd party applications. - */ -#define GST_PARAM_USER_SHIFT (1 << (G_PARAM_USER_SHIFT + 8)) - - -/* --- type macros --- */ - -#define GST_TYPE_PARAM_FRACTION (gst_param_spec_fraction_get_type ()) -#define GST_IS_PARAM_SPEC_FRACTION(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GST_TYPE_PARAM_FRACTION)) -#define GST_PARAM_SPEC_FRACTION(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), GST_TYPE_PARAM_FRACTION, GstParamSpecFraction)) - - -/* --- get_type functions --- */ - -GType gst_param_spec_fraction_get_type (void); - - -/* --- typedefs & structures --- */ - -typedef struct _GstParamSpecFraction GstParamSpecFraction; - -/** - * GstParamSpecFraction: - * @parent_instance: super class - * @min_num: minimal numerator - * @min_den: minimal denominator - * @max_num: maximal numerator - * @max_den: maximal denominator - * @def_num: default numerator - * @def_den: default denominator - * - * A GParamSpec derived structure that contains the meta data for fractional - * properties. - */ -struct _GstParamSpecFraction { - GParamSpec parent_instance; - - gint min_num, min_den; - gint max_num, max_den; - gint def_num, def_den; -}; - - -/* --- GParamSpec prototypes --- */ - -GParamSpec * gst_param_spec_fraction (const gchar * name, - const gchar * nick, - const gchar * blurb, - gint min_num, gint min_denom, - gint max_num, gint max_denom, - gint default_num, gint default_denom, - GParamFlags flags) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_PARAMSPECS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparse.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparse.h deleted file mode 100644 index 630c3cef..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstparse.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstparse.h: get a pipeline from a text pipeline description - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PARSE_H__ -#define __GST_PARSE_H__ - -#include - -G_BEGIN_DECLS - -GQuark gst_parse_error_quark (void); -/** - * GST_PARSE_ERROR: - * - * Get access to the error quark of the parse subsystem. - */ -#define GST_PARSE_ERROR gst_parse_error_quark () - -/** - * GstParseError: - * @GST_PARSE_ERROR_SYNTAX: A syntax error occured. - * @GST_PARSE_ERROR_NO_SUCH_ELEMENT: The description contained an unknown element - * @GST_PARSE_ERROR_NO_SUCH_PROPERTY: An element did not have a specified property - * @GST_PARSE_ERROR_LINK: There was an error linking two pads. - * @GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY: There was an error setting a property - * @GST_PARSE_ERROR_EMPTY_BIN: An empty bin was specified. - * @GST_PARSE_ERROR_EMPTY: An empty description was specified - * - * The different parsing errors that can occur. - */ -typedef enum -{ - GST_PARSE_ERROR_SYNTAX, - GST_PARSE_ERROR_NO_SUCH_ELEMENT, - GST_PARSE_ERROR_NO_SUCH_PROPERTY, - GST_PARSE_ERROR_LINK, - GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY, - GST_PARSE_ERROR_EMPTY_BIN, - GST_PARSE_ERROR_EMPTY -} GstParseError; - -/** - * GstParseFlags: - * @GST_PARSE_FLAG_NONE: Do not use any special parsing options. - * @GST_PARSE_FLAG_FATAL_ERRORS: Always return NULL when an error occurs - * (default behaviour is to return partially constructed bins or elements - * in some cases) - * - * Parsing options. - */ -typedef enum -{ - GST_PARSE_FLAG_NONE = 0, - GST_PARSE_FLAG_FATAL_ERRORS = (1 << 0) -} GstParseFlags; - -#define GST_TYPE_PARSE_CONTEXT (gst_parse_context_get_type()) - -/** - * GstParseContext: - * - * Opaque structure. - */ -typedef struct _GstParseContext GstParseContext; - -/* create, process and free a parse context */ - -GType gst_parse_context_get_type (void); -GstParseContext * gst_parse_context_new (void) G_GNUC_MALLOC; - -gchar ** gst_parse_context_get_missing_elements (GstParseContext * context) G_GNUC_MALLOC; - -void gst_parse_context_free (GstParseContext * context); - - -/* parse functions */ - -GstElement * gst_parse_launch (const gchar * pipeline_description, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_parse_launchv (const gchar ** argv, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_parse_launch_full (const gchar * pipeline_description, - GstParseContext * context, - GstParseFlags flags, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_parse_launchv_full (const gchar ** argv, - GstParseContext * context, - GstParseFlags flags, - GError ** error) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_PARSE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpipeline.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpipeline.h deleted file mode 100644 index 43563cb8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpipeline.h +++ /dev/null @@ -1,110 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpipeline.h: Header for GstPipeline element - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PIPELINE_H__ -#define __GST_PIPELINE_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PIPELINE (gst_pipeline_get_type ()) -#define GST_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PIPELINE, GstPipeline)) -#define GST_IS_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PIPELINE)) -#define GST_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PIPELINE, GstPipelineClass)) -#define GST_IS_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PIPELINE)) -#define GST_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PIPELINE, GstPipelineClass)) -#define GST_PIPELINE_CAST(obj) ((GstPipeline*)(obj)) - -typedef struct _GstPipeline GstPipeline; -typedef struct _GstPipelineClass GstPipelineClass; -typedef struct _GstPipelinePrivate GstPipelinePrivate; - -/** - * GstPipelineFlags: - * @GST_PIPELINE_FLAG_FIXED_CLOCK: this pipeline works with a fixed clock - * @GST_PIPELINE_FLAG_LAST: offset to define more flags - * - * Pipeline flags - */ -typedef enum { - GST_PIPELINE_FLAG_FIXED_CLOCK = (GST_BIN_FLAG_LAST << 0), - /* padding */ - GST_PIPELINE_FLAG_LAST = (GST_BIN_FLAG_LAST << 4) -} GstPipelineFlags; - -/** - * GstPipeline: - * @fixed_clock: The fixed clock of the pipeline, used when - * GST_PIPELINE_FLAG_FIXED_CLOCK is set. - * @stream_time: The stream time of the pipeline. A better name for this - * property would be the running_time, the total time spent in the - * PLAYING state without being flushed. (deprecated, use the start_time - * on GstElement). - * @delay: Extra delay added to base_time to compensate for computing delays - * when setting elements to PLAYING. - * - * The #GstPipeline structure. - */ -struct _GstPipeline { - GstBin bin; - - /*< public >*/ /* with LOCK */ - GstClock *fixed_clock; - - GstClockTime stream_time; - GstClockTime delay; - - /*< private >*/ - GstPipelinePrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPipelineClass { - GstBinClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_pipeline_get_type (void); -GstElement* gst_pipeline_new (const gchar *name) G_GNUC_MALLOC; - -GstBus* gst_pipeline_get_bus (GstPipeline *pipeline); - -void gst_pipeline_use_clock (GstPipeline *pipeline, GstClock *clock); -gboolean gst_pipeline_set_clock (GstPipeline *pipeline, GstClock *clock); -GstClock* gst_pipeline_get_clock (GstPipeline *pipeline); -void gst_pipeline_auto_clock (GstPipeline *pipeline); - -void gst_pipeline_set_delay (GstPipeline *pipeline, GstClockTime delay); -GstClockTime gst_pipeline_get_delay (GstPipeline *pipeline); - -void gst_pipeline_set_auto_flush_bus (GstPipeline *pipeline, gboolean auto_flush); -gboolean gst_pipeline_get_auto_flush_bus (GstPipeline *pipeline); - -G_END_DECLS - -#endif /* __GST_PIPELINE_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstplugin.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstplugin.h deleted file mode 100644 index 68071865..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstplugin.h +++ /dev/null @@ -1,315 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstplugin.h: Header for plugin subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PLUGIN_H__ -#define __GST_PLUGIN_H__ - -#include - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstPlugin: - * - * The opaque plugin object - */ -typedef struct _GstPlugin GstPlugin; -typedef struct _GstPluginClass GstPluginClass; -typedef struct _GstPluginDesc GstPluginDesc; - -/** - * gst_plugin_error_quark: - * - * Get the error quark. - * - * Returns: The error quark used in GError messages - */ -GQuark gst_plugin_error_quark (void); -/** - * GST_PLUGIN_ERROR: - * - * The error message category quark - */ -#define GST_PLUGIN_ERROR gst_plugin_error_quark () - -/** - * GstPluginError: - * @GST_PLUGIN_ERROR_MODULE: The plugin could not be loaded - * @GST_PLUGIN_ERROR_DEPENDENCIES: The plugin has unresolved dependencies - * @GST_PLUGIN_ERROR_NAME_MISMATCH: The plugin has already be loaded from a different file - * - * The plugin loading errors - */ -typedef enum -{ - GST_PLUGIN_ERROR_MODULE, - GST_PLUGIN_ERROR_DEPENDENCIES, - GST_PLUGIN_ERROR_NAME_MISMATCH -} GstPluginError; - -/** - * GstPluginFlags: - * @GST_PLUGIN_FLAG_CACHED: Temporarily loaded plugins - * @GST_PLUGIN_FLAG_BLACKLISTED: The plugin won't be scanned (again) - * - * The plugin loading state - */ -typedef enum -{ - GST_PLUGIN_FLAG_CACHED = (GST_OBJECT_FLAG_LAST << 0), - GST_PLUGIN_FLAG_BLACKLISTED = (GST_OBJECT_FLAG_LAST << 1) -} GstPluginFlags; - -/** - * GstPluginDependencyFlags: - * @GST_PLUGIN_DEPENDENCY_FLAG_NONE : no special flags - * @GST_PLUGIN_DEPENDENCY_FLAG_RECURSE : recurse into subdirectories - * @GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY : use paths - * argument only if none of the environment variables is set - * @GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX : interpret - * filename argument as filter suffix and check all matching files in - * the directory - * - * Flags used in connection with gst_plugin_add_dependency(). - */ -typedef enum { - GST_PLUGIN_DEPENDENCY_FLAG_NONE = 0, - GST_PLUGIN_DEPENDENCY_FLAG_RECURSE = (1 << 0), - GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY = (1 << 1), - GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX = (1 << 2) -} GstPluginDependencyFlags; - -/** - * GstPluginInitFunc: - * @plugin: The plugin object - * - * A plugin should provide a pointer to a function of this type in the - * plugin_desc struct. - * This function will be called by the loader at startup. One would then - * register each #GstPluginFeature. - * - * Returns: %TRUE if plugin initialised successfully - */ -/* FIXME 0.11: Make return void */ -typedef gboolean (*GstPluginInitFunc) (GstPlugin *plugin); - -/** - * GstPluginInitFullFunc: - * @plugin: The plugin object - * @user_data: extra data - * - * A plugin should provide a pointer to a function of either #GstPluginInitFunc - * or this type in the plugin_desc struct. - * The function will be called by the loader at startup. One would then - * register each #GstPluginFeature. This version allows - * user data to be passed to init function (useful for bindings). - * - * Returns: %TRUE if plugin initialised successfully - */ -/* FIXME 0.11: Merge with GstPluginInitFunc */ -typedef gboolean (*GstPluginInitFullFunc) (GstPlugin *plugin, gpointer user_data); - -/** - * GstPluginDesc: - * @major_version: the major version number of core that plugin was compiled for - * @minor_version: the minor version number of core that plugin was compiled for - * @name: a unique name of the plugin - * @description: description of plugin - * @plugin_init: pointer to the init function of this plugin. - * @version: version of the plugin - * @license: effective license of plugin - * @source: source module plugin belongs to - * @package: shipped package plugin belongs to - * @origin: URL to provider of plugin - * @release_datetime: date time string in ISO 8601 format (or rather, a - * subset thereof), or NULL. Allowed are the following formats: - * "YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with 'T' a separator and 'Z' - * indicating UTC/Zulu time). This field should be set via the - * GST_PACKAGE_RELEASE_DATETIME preprocessor macro. - * - * A plugin should export a variable of this type called plugin_desc. The plugin - * loader will use the data provided there to initialize the plugin. - * - * The @licence parameter must be one of: LGPL, GPL, QPL, GPL/QPL, MPL, - * BSD, MIT/X11, Proprietary, unknown. - */ -struct _GstPluginDesc { - gint major_version; - gint minor_version; - const gchar *name; - const gchar *description; - GstPluginInitFunc plugin_init; - const gchar *version; - const gchar *license; - const gchar *source; - const gchar *package; - const gchar *origin; - const gchar *release_datetime; - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - - -#define GST_TYPE_PLUGIN (gst_plugin_get_type()) -#define GST_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLUGIN)) -#define GST_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLUGIN)) -#define GST_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLUGIN, GstPluginClass)) -#define GST_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLUGIN, GstPlugin)) -#define GST_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLUGIN, GstPluginClass)) -#define GST_PLUGIN_CAST(obj) ((GstPlugin*)(obj)) - -#ifdef GST_PACKAGE_RELEASE_DATETIME -#define __GST_PACKAGE_RELEASE_DATETIME GST_PACKAGE_RELEASE_DATETIME -#else -#define __GST_PACKAGE_RELEASE_DATETIME NULL -#endif - -/** - * GST_PLUGIN_DEFINE: - * @major: major version number of the gstreamer-core that plugin was compiled for - * @minor: minor version number of the gstreamer-core that plugin was compiled for - * @name: short, but unique name of the plugin - * @description: information about the purpose of the plugin - * @init: function pointer to the plugin_init method with the signature of static gboolean plugin_init (GstPlugin * plugin). - * @version: full version string (e.g. VERSION from config.h) - * @license: under which licence the package has been released, e.g. GPL, LGPL. - * @package: the package-name (e.g. PACKAGE_NAME from config.h) - * @origin: a description from where the package comes from (e.g. the homepage URL) - * - * This macro needs to be used to define the entry point and meta data of a - * plugin. One would use this macro to export a plugin, so that it can be used - * by other applications. - * - * The macro uses a define named PACKAGE for the #GstPluginDesc,source field. - * When using autoconf, this is usually set automatically via the AC_INIT - * macro, and set in config.h. If you are not using autoconf, you will need to - * define PACKAGE yourself and set it to a short mnemonic string identifying - * your application/package, e.g. 'someapp' or 'my-plugins-foo. - * - * If defined, the GST_PACKAGE_RELEASE_DATETIME will also be used for the - * #GstPluginDesc,release_datetime field. - */ -#define GST_PLUGIN_DEFINE(major,minor,name,description,init,version,license,package,origin) \ -G_BEGIN_DECLS \ -GST_PLUGIN_EXPORT GstPluginDesc gst_plugin_desc = { \ - major, \ - minor, \ - #name, \ - (gchar *) description, \ - init, \ - version, \ - license, \ - PACKAGE, \ - package, \ - origin, \ - __GST_PACKAGE_RELEASE_DATETIME, \ - GST_PADDING_INIT \ -}; \ -G_END_DECLS - -/** - * GST_LICENSE_UNKNOWN: - * - * To be used in GST_PLUGIN_DEFINE if usure about the licence. - */ -#define GST_LICENSE_UNKNOWN "unknown" - - -/* function for filters */ -/** - * GstPluginFilter: - * @plugin: the plugin to check - * @user_data: the user_data that has been passed on e.g. gst_registry_plugin_filter() - * - * A function that can be used with e.g. gst_registry_plugin_filter() - * to get a list of plugins that match certain criteria. - * - * Returns: TRUE for a positive match, FALSE otherwise - */ -typedef gboolean (*GstPluginFilter) (GstPlugin *plugin, - gpointer user_data); - -GType gst_plugin_get_type (void); - -gboolean gst_plugin_register_static (gint major_version, - gint minor_version, - const gchar *name, - const gchar *description, - GstPluginInitFunc init_func, - const gchar *version, - const gchar *license, - const gchar *source, - const gchar *package, - const gchar *origin); - -gboolean gst_plugin_register_static_full (gint major_version, - gint minor_version, - const gchar *name, - const gchar *description, - GstPluginInitFullFunc init_full_func, - const gchar *version, - const gchar *license, - const gchar *source, - const gchar *package, - const gchar *origin, - gpointer user_data); - -const gchar* gst_plugin_get_name (GstPlugin *plugin); -const gchar* gst_plugin_get_description (GstPlugin *plugin); -const gchar* gst_plugin_get_filename (GstPlugin *plugin); -const gchar* gst_plugin_get_version (GstPlugin *plugin); -const gchar* gst_plugin_get_license (GstPlugin *plugin); -const gchar* gst_plugin_get_source (GstPlugin *plugin); -const gchar* gst_plugin_get_package (GstPlugin *plugin); -const gchar* gst_plugin_get_origin (GstPlugin *plugin); -const gchar* gst_plugin_get_release_date_string (GstPlugin *plugin); -const GstStructure* gst_plugin_get_cache_data (GstPlugin * plugin); -void gst_plugin_set_cache_data (GstPlugin * plugin, GstStructure *cache_data); - -gboolean gst_plugin_is_loaded (GstPlugin *plugin); - -GstPlugin * gst_plugin_load_file (const gchar *filename, GError** error); - -GstPlugin * gst_plugin_load (GstPlugin *plugin); -GstPlugin * gst_plugin_load_by_name (const gchar *name); - -void gst_plugin_add_dependency (GstPlugin * plugin, - const gchar ** env_vars, - const gchar ** paths, - const gchar ** names, - GstPluginDependencyFlags flags); -void gst_plugin_add_dependency_simple (GstPlugin * plugin, - const gchar * env_vars, - const gchar * paths, - const gchar * names, - GstPluginDependencyFlags flags); - -void gst_plugin_list_free (GList *list); - -G_END_DECLS - -#endif /* __GST_PLUGIN_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpluginfeature.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpluginfeature.h deleted file mode 100644 index 69ba44d4..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpluginfeature.h +++ /dev/null @@ -1,145 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpluginfeature.h: Header for base GstPluginFeature - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PLUGIN_FEATURE_H__ -#define __GST_PLUGIN_FEATURE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PLUGIN_FEATURE (gst_plugin_feature_get_type()) -#define GST_PLUGIN_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLUGIN_FEATURE, GstPluginFeature)) -#define GST_IS_PLUGIN_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLUGIN_FEATURE)) -#define GST_PLUGIN_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLUGIN_FEATURE, GstPluginFeatureClass)) -#define GST_IS_PLUGIN_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLUGIN_FEATURE)) -#define GST_PLUGIN_FEATURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLUGIN_FEATURE, GstPluginFeatureClass)) -#define GST_PLUGIN_FEATURE_CAST(obj) ((GstPluginFeature*)(obj)) - -/** - * GstPluginFeature: - * - * Opaque #GstPluginFeature structure. - */ -typedef struct _GstPluginFeature GstPluginFeature; -typedef struct _GstPluginFeatureClass GstPluginFeatureClass; - -/** - * GstRank: - * @GST_RANK_NONE: will be chosen last or not at all - * @GST_RANK_MARGINAL: unlikely to be chosen - * @GST_RANK_SECONDARY: likely to be chosen - * @GST_RANK_PRIMARY: will be chosen first - * - * Element priority ranks. Defines the order in which the autoplugger (or - * similar rank-picking mechanisms, such as e.g. gst_element_make_from_uri()) - * will choose this element over an alternative one with the same function. - * - * These constants serve as a rough guidance for defining the rank of a - * #GstPluginFeature. Any value is valid, including values bigger than - * @GST_RANK_PRIMARY. - */ -typedef enum { - GST_RANK_NONE = 0, - GST_RANK_MARGINAL = 64, - GST_RANK_SECONDARY = 128, - GST_RANK_PRIMARY = 256 -} GstRank; - -/** - * gst_plugin_feature_get_name: - * @feature: a #GstPluginFeature to get the name of @feature. - * - * Returns the name of @feature. - * For a nameless plugin feature, this returns NULL. - * - * Returns: (transfer none): the name of @feature. MT safe. - * - */ -#define gst_plugin_feature_get_name(feature) GST_OBJECT_NAME(feature) - -/** - * gst_plugin_feature_set_name: - * @feature: a #GstPluginFeature to set the name of. - * @name: the new name - * - * Sets the name of the plugin feature, getting rid of the old name if there was one. - */ -#define gst_plugin_feature_set_name(feature,name) gst_object_set_name(GST_OBJECT_CAST(feature),name) - -/** - * GstPluginFeatureFilter: - * @feature: the pluginfeature to check - * @user_data: the user_data that has been passed on e.g. - * gst_registry_feature_filter() - * - * A function that can be used with e.g. gst_registry_feature_filter() - * to get a list of pluginfeature that match certain criteria. - * - * Returns: %TRUE for a positive match, %FALSE otherwise - */ -typedef gboolean (*GstPluginFeatureFilter) (GstPluginFeature *feature, - gpointer user_data); - -/* normal GObject stuff */ -GType gst_plugin_feature_get_type (void); - -GstPluginFeature * - gst_plugin_feature_load (GstPluginFeature *feature); - -void gst_plugin_feature_set_rank (GstPluginFeature *feature, guint rank); -guint gst_plugin_feature_get_rank (GstPluginFeature *feature); - -GstPlugin * gst_plugin_feature_get_plugin (GstPluginFeature *feature); - -void gst_plugin_feature_list_free (GList *list); -GList *gst_plugin_feature_list_copy (GList *list) G_GNUC_MALLOC; -void gst_plugin_feature_list_debug (GList *list); - -/** - * GST_PLUGIN_FEATURE_LIST_DEBUG: - * @list: (transfer none) (element-type Gst.PluginFeature): a #GList of - * plugin features - * - * Debug the plugin feature names in @list. - */ -#ifndef GST_DISABLE_GST_DEBUG -#define GST_PLUGIN_FEATURE_LIST_DEBUG(list) gst_plugin_feature_list_debug(list) -#else -#define GST_PLUGIN_FEATURE_LIST_DEBUG(list) -#endif - -gboolean gst_plugin_feature_check_version (GstPluginFeature *feature, - guint min_major, - guint min_minor, - guint min_micro); -gint gst_plugin_feature_rank_compare_func (gconstpointer p1, - gconstpointer p2); - -G_END_DECLS - - -#endif /* __GST_PLUGIN_FEATURE_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpoll.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpoll.h deleted file mode 100644 index b0662769..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpoll.h +++ /dev/null @@ -1,95 +0,0 @@ -/* GStreamer - * Copyright (C) 1999 Erik Walthinsen - * Copyright (C) 2004 Wim Taymans - * Copyright (C) 2007 Peter Kjellerstedt - * - * gstpoll.h: File descriptor set - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_POLL_H__ -#define __GST_POLL_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -/** - * GstPoll: - * - * A set of file/network descriptors. - */ -typedef struct _GstPoll GstPoll; - -/** - * GstPollFD: - * @fd: a file descriptor - * - * A file descriptor object. - */ -typedef struct { - int fd; - - /*< private >*/ - gint idx; -} GstPollFD; - -/** - * GST_POLL_FD_INIT: - * - * A #GstPollFD must be initialized with this macro, before it can be - * used. This macro can used be to initialize a variable, but it cannot - * be assigned to a variable. In that case you have to use - * gst_poll_fd_init(). - */ -#define GST_POLL_FD_INIT { -1, -1 } - -GstPoll* gst_poll_new (gboolean controllable) G_GNUC_MALLOC; -GstPoll* gst_poll_new_timer (void) G_GNUC_MALLOC; -void gst_poll_free (GstPoll *set); - -void gst_poll_get_read_gpollfd (GstPoll *set, GPollFD *fd); - -void gst_poll_fd_init (GstPollFD *fd); - -gboolean gst_poll_add_fd (GstPoll *set, GstPollFD *fd); -gboolean gst_poll_remove_fd (GstPoll *set, GstPollFD *fd); - -gboolean gst_poll_fd_ctl_write (GstPoll *set, GstPollFD *fd, gboolean active); -gboolean gst_poll_fd_ctl_read (GstPoll *set, GstPollFD *fd, gboolean active); -void gst_poll_fd_ignored (GstPoll *set, GstPollFD *fd); - -gboolean gst_poll_fd_has_closed (const GstPoll *set, GstPollFD *fd); -gboolean gst_poll_fd_has_error (const GstPoll *set, GstPollFD *fd); -gboolean gst_poll_fd_can_read (const GstPoll *set, GstPollFD *fd); -gboolean gst_poll_fd_can_write (const GstPoll *set, GstPollFD *fd); - -gint gst_poll_wait (GstPoll *set, GstClockTime timeout); - -gboolean gst_poll_set_controllable (GstPoll *set, gboolean controllable); -void gst_poll_restart (GstPoll *set); -void gst_poll_set_flushing (GstPoll *set, gboolean flushing); - -gboolean gst_poll_write_control (GstPoll *set); -gboolean gst_poll_read_control (GstPoll *set); - -G_END_DECLS - -#endif /* __GST_POLL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpreset.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpreset.h deleted file mode 100644 index 30973f3a..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstpreset.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GStreamer - * Copyright (C) 2006 Stefan Kost - * - * gstpreset.h: helper interface header for element presets - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PRESET_H__ -#define __GST_PRESET_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PRESET (gst_preset_get_type()) -#define GST_PRESET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PRESET, GstPreset)) -#define GST_IS_PRESET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PRESET)) -#define GST_PRESET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_PRESET, GstPresetInterface)) - -/** - * GstPreset: - * - * Opaque #GstPreset data structure. - */ -typedef struct _GstPreset GstPreset; /* dummy object */ -typedef struct _GstPresetInterface GstPresetInterface; - -/** - * GstPresetInterface: - * @parent: parent interface type. - * @get_preset_names: virtual method to get list of presets - * @get_property_names: virtual methods to get properties that are persistent - * @load_preset: virtual methods to load a preset into properties - * @save_preset: virtual methods to save properties into a preset - * @rename_preset: virtual methods to rename a preset - * @delete_preset: virtual methods to remove a preset - * @set_meta: virtual methods to set textual meta data to a preset - * @get_meta: virtual methods to get textual meta data from a preset - * - * #GstPreset interface. - */ -struct _GstPresetInterface -{ - GTypeInterface parent; - - /* methods */ - gchar** (*get_preset_names) (GstPreset *preset); - - gchar** (*get_property_names) (GstPreset *preset); - - gboolean (*load_preset) (GstPreset *preset, const gchar *name); - gboolean (*save_preset) (GstPreset *preset, const gchar *name); - gboolean (*rename_preset) (GstPreset *preset, const gchar *old_name, - const gchar *new_name); - gboolean (*delete_preset) (GstPreset *preset, const gchar *name); - - gboolean (*set_meta) (GstPreset *preset, const gchar *name, - const gchar *tag, const gchar *value); - gboolean (*get_meta) (GstPreset *preset, const gchar *name, - const gchar *tag, gchar **value); - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_preset_get_type(void); - -gchar** gst_preset_get_preset_names (GstPreset *preset) G_GNUC_MALLOC; - -gchar** gst_preset_get_property_names (GstPreset *preset) G_GNUC_MALLOC; - -gboolean gst_preset_load_preset (GstPreset *preset, const gchar *name); -gboolean gst_preset_save_preset (GstPreset *preset, const gchar *name); -gboolean gst_preset_rename_preset (GstPreset *preset, const gchar *old_name, - const gchar *new_name); -gboolean gst_preset_delete_preset (GstPreset *preset, const gchar *name); - -gboolean gst_preset_set_meta (GstPreset *preset, const gchar *name, - const gchar *tag, const gchar *value); -gboolean gst_preset_get_meta (GstPreset *preset, const gchar *name, - const gchar *tag, gchar **value); - -gboolean gst_preset_set_app_dir (const gchar *app_dir); -const gchar *gst_preset_get_app_dir (void); - -G_END_DECLS - -#endif /* __GST_PRESET_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstquery.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstquery.h deleted file mode 100644 index 47fec237..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstquery.h +++ /dev/null @@ -1,481 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * 2011 Wim Taymans - * - * gstquery.h: GstQuery API declaration - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_QUERY_H__ -#define __GST_QUERY_H__ - -#include - -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstQuery GstQuery; - -/** - * GstQueryTypeFlags: - * @GST_QUERY_TYPE_UPSTREAM: Set if the query can travel upstream. - * @GST_QUERY_TYPE_DOWNSTREAM: Set if the query can travel downstream. - * @GST_QUERY_TYPE_SERIALIZED: Set if the query should be serialized with data - * flow. - * - * #GstQueryTypeFlags indicate the aspects of the different #GstQueryType - * values. You can get the type flags of a #GstQueryType with the - * gst_query_type_get_flags() function. - */ -typedef enum { - GST_QUERY_TYPE_UPSTREAM = 1 << 0, - GST_QUERY_TYPE_DOWNSTREAM = 1 << 1, - GST_QUERY_TYPE_SERIALIZED = 1 << 2 -} GstQueryTypeFlags; - -/** - * GST_QUERY_TYPE_BOTH: - * - * The same thing as #GST_QUERY_TYPE_UPSTREAM | #GST_QUERY_TYPE_DOWNSTREAM. - */ -#define GST_QUERY_TYPE_BOTH \ - (GST_QUERY_TYPE_UPSTREAM | GST_QUERY_TYPE_DOWNSTREAM) - -#define GST_QUERY_NUM_SHIFT (8) - -/** - * GST_QUERY_MAKE_TYPE: - * @num: the query number to create - * @flags: the query flags - * - * when making custom query types, use this macro with the num and - * the given flags - */ -#define GST_QUERY_MAKE_TYPE(num,flags) \ - (((num) << GST_QUERY_NUM_SHIFT) | (flags)) - -#define FLAG(name) GST_QUERY_TYPE_##name - - -/** - * GstQueryType: - * @GST_QUERY_UNKNOWN: unknown query type - * @GST_QUERY_POSITION: current position in stream - * @GST_QUERY_DURATION: total duration of the stream - * @GST_QUERY_LATENCY: latency of stream - * @GST_QUERY_JITTER: current jitter of stream - * @GST_QUERY_RATE: current rate of the stream - * @GST_QUERY_SEEKING: seeking capabilities - * @GST_QUERY_SEGMENT: segment start/stop positions - * @GST_QUERY_CONVERT: convert values between formats - * @GST_QUERY_FORMATS: query supported formats for convert - * @GST_QUERY_BUFFERING: query available media for efficient seeking. - * @GST_QUERY_CUSTOM: a custom application or element defined query. - * @GST_QUERY_URI: query the URI of the source or sink. - * @GST_QUERY_ALLOCATION: the buffer allocation properties - * @GST_QUERY_SCHEDULING: the scheduling properties - * @GST_QUERY_ACCEPT_CAPS: the accept caps query - * @GST_QUERY_CAPS: the caps query - * @GST_QUERY_DRAIN: wait till all serialized data is consumed downstream - * - * Standard predefined Query types - */ -/* NOTE: don't forget to update the table in gstquery.c when changing - * this enum */ -typedef enum { - GST_QUERY_UNKNOWN = GST_QUERY_MAKE_TYPE (0, 0), - GST_QUERY_POSITION = GST_QUERY_MAKE_TYPE (10, FLAG(BOTH)), - GST_QUERY_DURATION = GST_QUERY_MAKE_TYPE (20, FLAG(BOTH)), - GST_QUERY_LATENCY = GST_QUERY_MAKE_TYPE (30, FLAG(BOTH)), - GST_QUERY_JITTER = GST_QUERY_MAKE_TYPE (40, FLAG(BOTH)), - GST_QUERY_RATE = GST_QUERY_MAKE_TYPE (50, FLAG(BOTH)), - GST_QUERY_SEEKING = GST_QUERY_MAKE_TYPE (60, FLAG(BOTH)), - GST_QUERY_SEGMENT = GST_QUERY_MAKE_TYPE (70, FLAG(BOTH)), - GST_QUERY_CONVERT = GST_QUERY_MAKE_TYPE (80, FLAG(BOTH)), - GST_QUERY_FORMATS = GST_QUERY_MAKE_TYPE (90, FLAG(BOTH)), - GST_QUERY_BUFFERING = GST_QUERY_MAKE_TYPE (110, FLAG(BOTH)), - GST_QUERY_CUSTOM = GST_QUERY_MAKE_TYPE (120, FLAG(BOTH)), - GST_QUERY_URI = GST_QUERY_MAKE_TYPE (130, FLAG(BOTH)), - GST_QUERY_ALLOCATION = GST_QUERY_MAKE_TYPE (140, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_QUERY_SCHEDULING = GST_QUERY_MAKE_TYPE (150, FLAG(UPSTREAM)), - GST_QUERY_ACCEPT_CAPS = GST_QUERY_MAKE_TYPE (160, FLAG(BOTH)), - GST_QUERY_CAPS = GST_QUERY_MAKE_TYPE (170, FLAG(BOTH)), - GST_QUERY_DRAIN = GST_QUERY_MAKE_TYPE (180, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)) -} GstQueryType; -#undef FLAG - -#define GST_TYPE_QUERY (gst_query_get_type()) -#define GST_IS_QUERY(obj) (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_QUERY)) -#define GST_QUERY_CAST(obj) ((GstQuery*)(obj)) -#define GST_QUERY(obj) (GST_QUERY_CAST(obj)) - -/** - * GST_QUERY_TYPE: - * @query: the query to query - * - * Get the #GstQueryType of the query. - */ -#define GST_QUERY_TYPE(query) (((GstQuery*)(query))->type) - -/** - * GST_QUERY_TYPE_NAME: - * @query: the query to query - * - * Get a constant string representation of the #GstQueryType of the query. - */ -#define GST_QUERY_TYPE_NAME(query) (gst_query_type_get_name(GST_QUERY_TYPE(query))) - -/** - * GST_QUERY_IS_UPSTREAM: - * @ev: the query to query - * - * Check if an query can travel upstream. - */ -#define GST_QUERY_IS_UPSTREAM(ev) !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_UPSTREAM) -/** - * GST_QUERY_IS_DOWNSTREAM: - * @ev: the query to query - * - * Check if an query can travel downstream. - */ -#define GST_QUERY_IS_DOWNSTREAM(ev) !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_DOWNSTREAM) -/** - * GST_QUERY_IS_SERIALIZED: - * @ev: the query to query - * - * Check if an query is serialized with the data stream. - */ -#define GST_QUERY_IS_SERIALIZED(ev) !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_SERIALIZED) - - -/** - * GstQuery: - * @mini_object: The parent #GstMiniObject type - * @type: the #GstQueryType - * - * The #GstQuery structure. - */ -struct _GstQuery -{ - GstMiniObject mini_object; - - /*< public > *//* with COW */ - GstQueryType type; -}; - -const gchar* gst_query_type_get_name (GstQueryType type); -GQuark gst_query_type_to_quark (GstQueryType type); -GstQueryTypeFlags - gst_query_type_get_flags (GstQueryType type); - - -GType gst_query_get_type (void); - -/* refcounting */ -/** - * gst_query_ref: - * @q: a #GstQuery to increase the refcount of. - * - * Increases the refcount of the given query by one. - * - * Returns: @q - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstQuery * gst_query_ref (GstQuery * q); -#endif - -static inline GstQuery * -gst_query_ref (GstQuery * q) -{ - return GST_QUERY_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST (q))); -} - -/** - * gst_query_unref: - * @q: a #GstQuery to decrease the refcount of. - * - * Decreases the refcount of the query. If the refcount reaches 0, the query - * will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_query_unref (GstQuery * q); -#endif - -static inline void -gst_query_unref (GstQuery * q) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (q)); -} - -/* copy query */ -/** - * gst_query_copy: - * @q: a #GstQuery to copy. - * - * Copies the given query using the copy function of the parent #GstStructure. - * - * Free-function: gst_query_unref - * - * Returns: (transfer full): a new copy of @q. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstQuery * gst_query_copy (const GstQuery * q); -#endif - -static inline GstQuery * -gst_query_copy (const GstQuery * q) -{ - return GST_QUERY_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (q))); -} - -/** - * gst_query_is_writable: - * @q: a #GstQuery - * - * Tests if you can safely write data into a query's structure. - */ -#define gst_query_is_writable(q) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (q)) -/** - * gst_query_make_writable: - * @q: (transfer full): a #GstQuery to make writable - * - * Makes a writable query from the given query. - * - * Returns: (transfer full): a new writable query (possibly same as @q) - */ -#define gst_query_make_writable(q) GST_QUERY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (q))) -/** - * gst_query_replace: - * @old_query: (inout) (transfer full): pointer to a pointer to a #GstQuery - * to be replaced. - * @new_query: (allow-none) (transfer none): pointer to a #GstQuery that will - * replace the query pointed to by @old_query. - * - * Modifies a pointer to a #GstQuery to point to a different #GstQuery. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * query is unreffed, the new one is reffed). - * - * Either @new_query or the #GstQuery pointed to by @old_query may be NULL. - * - * Returns: TRUE if @new_query was different from @old_query - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_query_replace (GstQuery **old_query, GstQuery *new_query); -#endif - -static inline gboolean -gst_query_replace (GstQuery **old_query, GstQuery *new_query) -{ - return gst_mini_object_replace ((GstMiniObject **) old_query, (GstMiniObject *) new_query); -} - -/* application specific query */ -GstQuery * gst_query_new_custom (GstQueryType type, GstStructure *structure) G_GNUC_MALLOC; -const GstStructure * - gst_query_get_structure (GstQuery *query); -GstStructure * gst_query_writable_structure (GstQuery *query); - -/* position query */ -GstQuery* gst_query_new_position (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_position (GstQuery *query, GstFormat format, gint64 cur); -void gst_query_parse_position (GstQuery *query, GstFormat *format, gint64 *cur); - -/* duration query */ -GstQuery* gst_query_new_duration (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_duration (GstQuery *query, GstFormat format, gint64 duration); -void gst_query_parse_duration (GstQuery *query, GstFormat *format, gint64 *duration); - -/* latency query */ -GstQuery* gst_query_new_latency (void) G_GNUC_MALLOC; -void gst_query_set_latency (GstQuery *query, gboolean live, GstClockTime min_latency, - GstClockTime max_latency); -void gst_query_parse_latency (GstQuery *query, gboolean *live, GstClockTime *min_latency, - GstClockTime *max_latency); - -/* convert query */ -GstQuery* gst_query_new_convert (GstFormat src_format, gint64 value, GstFormat dest_format) G_GNUC_MALLOC; -void gst_query_set_convert (GstQuery *query, GstFormat src_format, gint64 src_value, - GstFormat dest_format, gint64 dest_value); -void gst_query_parse_convert (GstQuery *query, GstFormat *src_format, gint64 *src_value, - GstFormat *dest_format, gint64 *dest_value); -/* segment query */ -GstQuery* gst_query_new_segment (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_segment (GstQuery *query, gdouble rate, GstFormat format, - gint64 start_value, gint64 stop_value); -void gst_query_parse_segment (GstQuery *query, gdouble *rate, GstFormat *format, - gint64 *start_value, gint64 *stop_value); - -/* seeking query */ -GstQuery* gst_query_new_seeking (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_seeking (GstQuery *query, GstFormat format, - gboolean seekable, - gint64 segment_start, - gint64 segment_end); -void gst_query_parse_seeking (GstQuery *query, GstFormat *format, - gboolean *seekable, - gint64 *segment_start, - gint64 *segment_end); -/* formats query */ -GstQuery* gst_query_new_formats (void) G_GNUC_MALLOC; -void gst_query_set_formats (GstQuery *query, gint n_formats, ...); -void gst_query_set_formatsv (GstQuery *query, gint n_formats, const GstFormat *formats); -void gst_query_parse_n_formats (GstQuery *query, guint *n_formats); -void gst_query_parse_nth_format (GstQuery *query, guint nth, GstFormat *format); - -/* buffering query */ -/** - * GstBufferingMode: - * @GST_BUFFERING_STREAM: a small amount of data is buffered - * @GST_BUFFERING_DOWNLOAD: the stream is being downloaded - * @GST_BUFFERING_TIMESHIFT: the stream is being downloaded in a ringbuffer - * @GST_BUFFERING_LIVE: the stream is a live stream - * - * The different types of buffering methods. - */ -typedef enum { - GST_BUFFERING_STREAM, - GST_BUFFERING_DOWNLOAD, - GST_BUFFERING_TIMESHIFT, - GST_BUFFERING_LIVE -} GstBufferingMode; - -GstQuery* gst_query_new_buffering (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_buffering_percent (GstQuery *query, gboolean busy, gint percent); -void gst_query_parse_buffering_percent (GstQuery *query, gboolean *busy, gint *percent); - -void gst_query_set_buffering_stats (GstQuery *query, GstBufferingMode mode, - gint avg_in, gint avg_out, - gint64 buffering_left); -void gst_query_parse_buffering_stats (GstQuery *query, GstBufferingMode *mode, - gint *avg_in, gint *avg_out, - gint64 *buffering_left); - -void gst_query_set_buffering_range (GstQuery *query, GstFormat format, - gint64 start, gint64 stop, - gint64 estimated_total); -void gst_query_parse_buffering_range (GstQuery *query, GstFormat *format, - gint64 *start, gint64 *stop, - gint64 *estimated_total); - -gboolean gst_query_add_buffering_range (GstQuery *query, - gint64 start, gint64 stop); -guint gst_query_get_n_buffering_ranges (GstQuery *query); -gboolean gst_query_parse_nth_buffering_range (GstQuery *query, - guint index, gint64 *start, - gint64 *stop); - -/* URI query */ -GstQuery * gst_query_new_uri (void) G_GNUC_MALLOC; -void gst_query_parse_uri (GstQuery *query, gchar **uri); -void gst_query_set_uri (GstQuery *query, const gchar *uri); - -/* allocation query */ -GstQuery * gst_query_new_allocation (GstCaps *caps, gboolean need_pool) G_GNUC_MALLOC; -void gst_query_parse_allocation (GstQuery *query, GstCaps **caps, gboolean *need_pool); - -/* pools */ -void gst_query_add_allocation_pool (GstQuery *query, GstBufferPool *pool, - guint size, guint min_buffers, - guint max_buffers); -guint gst_query_get_n_allocation_pools (GstQuery *query); -void gst_query_parse_nth_allocation_pool (GstQuery *query, guint index, - GstBufferPool **pool, - guint *size, guint *min_buffers, - guint *max_buffers); -void gst_query_set_nth_allocation_pool (GstQuery *query, guint index, - GstBufferPool *pool, - guint size, guint min_buffers, - guint max_buffers); - -/* allocators */ -void gst_query_add_allocation_param (GstQuery *query, GstAllocator *allocator, - const GstAllocationParams *params); -guint gst_query_get_n_allocation_params (GstQuery *query); -void gst_query_parse_nth_allocation_param (GstQuery *query, guint index, - GstAllocator **allocator, - GstAllocationParams *params); -void gst_query_set_nth_allocation_param (GstQuery *query, guint index, - GstAllocator *allocator, - const GstAllocationParams *params); - -/* metadata */ -void gst_query_add_allocation_meta (GstQuery *query, GType api, const GstStructure *params); -guint gst_query_get_n_allocation_metas (GstQuery *query); -GType gst_query_parse_nth_allocation_meta (GstQuery *query, guint index, - const GstStructure **params); -void gst_query_remove_nth_allocation_meta (GstQuery *query, guint index); -gboolean gst_query_find_allocation_meta (GstQuery *query, GType api, guint *index); - - -/* scheduling query */ -/** - * GstSchedulingFlags: - * @GST_SCHEDULING_FLAG_SEEKABLE: if seeking is possible - * @GST_SCHEDULING_FLAG_SEQUENTIAL: if sequential access is recommended - * - * The different scheduling flags. - */ -typedef enum { - GST_SCHEDULING_FLAG_SEEKABLE = (1 << 0), - GST_SCHEDULING_FLAG_SEQUENTIAL = (1 << 1) -} GstSchedulingFlags; - -GstQuery * gst_query_new_scheduling (void) G_GNUC_MALLOC; - -void gst_query_set_scheduling (GstQuery *query, GstSchedulingFlags flags, - gint minsize, gint maxsize, gint align); -void gst_query_parse_scheduling (GstQuery *query, GstSchedulingFlags *flags, - gint *minsize, gint *maxsize, gint *align); - -void gst_query_add_scheduling_mode (GstQuery *query, GstPadMode mode); -guint gst_query_get_n_scheduling_modes (GstQuery *query); -GstPadMode gst_query_parse_nth_scheduling_mode (GstQuery *query, guint index); -gboolean gst_query_has_scheduling_mode (GstQuery *query, GstPadMode mode); -gboolean gst_query_has_scheduling_mode_with_flags (GstQuery * query, GstPadMode mode, - GstSchedulingFlags flags); - -/* accept-caps query */ -GstQuery * gst_query_new_accept_caps (GstCaps *caps) G_GNUC_MALLOC; -void gst_query_parse_accept_caps (GstQuery *query, GstCaps **caps); -void gst_query_set_accept_caps_result (GstQuery *query, gboolean result); -void gst_query_parse_accept_caps_result (GstQuery *query, gboolean *result); - -/* caps query */ -GstQuery * gst_query_new_caps (GstCaps *filter) G_GNUC_MALLOC; -void gst_query_parse_caps (GstQuery *query, GstCaps **filter); - -void gst_query_set_caps_result (GstQuery *query, GstCaps *caps); -void gst_query_parse_caps_result (GstQuery *query, GstCaps **caps); - -/* drain query */ -GstQuery * gst_query_new_drain (void) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_QUERY_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstregistry.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstregistry.h deleted file mode 100644 index f17fe7f9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstregistry.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstregistry.h: Header for registry handling - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_REGISTRY_H__ -#define __GST_REGISTRY_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_REGISTRY (gst_registry_get_type ()) -#define GST_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_REGISTRY, GstRegistry)) -#define GST_IS_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_REGISTRY)) -#define GST_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_REGISTRY, GstRegistryClass)) -#define GST_IS_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_REGISTRY)) -#define GST_REGISTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_REGISTRY, GstRegistryClass)) - -typedef struct _GstRegistry GstRegistry; -typedef struct _GstRegistryClass GstRegistryClass; -typedef struct _GstRegistryPrivate GstRegistryPrivate; - -/** - * GstRegistry: - * - * Opaque #GstRegistry structure. - */ -struct _GstRegistry { - GstObject object; - - /*< private >*/ - GstRegistryPrivate *priv; -}; - -struct _GstRegistryClass { - GstObjectClass parent_class; -}; - -GType gst_registry_get_type (void); - -GstRegistry * gst_registry_get (void); - -gboolean gst_registry_scan_path (GstRegistry *registry, const gchar *path); - -#if 0 -void gst_registry_add_path (GstRegistry * registry, const gchar * path); -GList* gst_registry_get_path_list (GstRegistry *registry); -#endif - -gboolean gst_registry_add_plugin (GstRegistry *registry, GstPlugin *plugin); -void gst_registry_remove_plugin (GstRegistry *registry, GstPlugin *plugin); -gboolean gst_registry_add_feature (GstRegistry * registry, GstPluginFeature * feature); -void gst_registry_remove_feature (GstRegistry * registry, GstPluginFeature * feature); - -GList* gst_registry_get_plugin_list (GstRegistry *registry); -GList* gst_registry_plugin_filter (GstRegistry *registry, - GstPluginFilter filter, - gboolean first, - gpointer user_data); -GList* gst_registry_feature_filter (GstRegistry *registry, - GstPluginFeatureFilter filter, - gboolean first, - gpointer user_data); -GList * gst_registry_get_feature_list (GstRegistry *registry, - GType type); -GList * gst_registry_get_feature_list_by_plugin (GstRegistry *registry, const gchar *name); -guint32 gst_registry_get_feature_list_cookie (GstRegistry *registry); - -GstPlugin* gst_registry_find_plugin (GstRegistry *registry, const gchar *name); -GstPluginFeature* gst_registry_find_feature (GstRegistry *registry, const gchar *name, GType type); - -GstPlugin * gst_registry_lookup (GstRegistry *registry, const char *filename); -GstPluginFeature * gst_registry_lookup_feature (GstRegistry *registry, const char *name); - -gboolean gst_registry_check_feature_version (GstRegistry *registry, - const gchar *feature_name, - guint min_major, - guint min_minor, - guint min_micro); - -G_END_DECLS - -#endif /* __GST_REGISTRY_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsample.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsample.h deleted file mode 100644 index 97a3843b..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsample.h +++ /dev/null @@ -1,129 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstsample.h: Header for GstSample object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SAMPLE_H__ -#define __GST_SAMPLE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_sample_type; - -#define GST_TYPE_SAMPLE (_gst_sample_type) -#define GST_IS_SAMPLE(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_SAMPLE)) -#define GST_SAMPLE_CAST(obj) ((GstSample *)obj) -#define GST_SAMPLE(obj) (GST_SAMPLE_CAST(obj)) - -/** - * GstSample: - * - * The opaque structure of a #GstSample. A sample contains a typed memory - * block and the associated timing information. It is mainly used to - * exchange buffers with an application. - */ -typedef struct _GstSample GstSample; - -GType gst_sample_get_type (void); - -/* allocation */ -GstSample * gst_sample_new (GstBuffer *buffer, - GstCaps *caps, - const GstSegment *segment, - GstStructure *info); - -GstBuffer * gst_sample_get_buffer (GstSample *sample); -GstCaps * gst_sample_get_caps (GstSample *sample); -GstSegment * gst_sample_get_segment (GstSample *sample); -const GstStructure * gst_sample_get_info (GstSample *sample); - -/* refcounting */ -/** - * gst_sample_ref: - * @sample: a #GstSample - * - * Increases the refcount of the given sample by one. - * - * Returns: (transfer full): @sample - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstSample * gst_sample_ref (GstSample * sample); -#endif - -static inline GstSample * -gst_sample_ref (GstSample * sample) -{ - return GST_SAMPLE_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST ( - sample))); -} - -/** - * gst_sample_unref: - * @sample: (transfer full): a #GstSample - * - * Decreases the refcount of the sample. If the refcount reaches 0, the - * sample will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_sample_unref (GstSample * sample); -#endif - -static inline void -gst_sample_unref (GstSample * sample) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (sample)); -} - -/** - * gst_value_set_sample: - * @v: a #GValue to receive the data - * @b: (transfer none): a #GstSample to assign to the GstValue - * - * Sets @b as the value of @v. Caller retains reference to sample. - */ -#define gst_value_set_sample(v,b) g_value_set_boxed((v),(b)) -/** - * gst_value_take_sample: - * @v: a #GValue to receive the data - * @b: (transfer full): a #GstSample to assign to the GstValue - * - * Sets @b as the value of @v. Caller gives away reference to sample. - */ -#define gst_value_take_sample(v,b) g_value_take_boxed(v,(b)) -/** - * gst_value_get_sample: - * @v: a #GValue to query - * - * Receives a #GstSample as the value of @v. Does not return a reference to - * the sample, so the pointer is only valid for as long as the caller owns - * a reference to @v. - * - * Returns: (transfer none): sample - */ -#define gst_value_get_sample(v) GST_SAMPLE_CAST (g_value_get_boxed(v)) - -G_END_DECLS - -#endif /* __GST_SAMPLE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsegment.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsegment.h deleted file mode 100644 index c364ce60..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsegment.h +++ /dev/null @@ -1,205 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Wim Taymans - * - * gstsegment.h: Header for GstSegment subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SEGMENT_H__ -#define __GST_SEGMENT_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_SEGMENT (gst_segment_get_type()) - -typedef struct _GstSegment GstSegment; - -/** - * GstSeekType: - * @GST_SEEK_TYPE_NONE: no change in position is required - * @GST_SEEK_TYPE_SET: absolute position is requested - * @GST_SEEK_TYPE_END: relative position to duration is requested - * - * The different types of seek events. When constructing a seek event with - * gst_event_new_seek() or when doing gst_segment_do_seek (). - */ -typedef enum { - /* one of these */ - GST_SEEK_TYPE_NONE = 0, - GST_SEEK_TYPE_SET = 1, - GST_SEEK_TYPE_END = 2 -} GstSeekType; - -/** - * GstSeekFlags: - * @GST_SEEK_FLAG_NONE: no flag - * @GST_SEEK_FLAG_FLUSH: flush pipeline - * @GST_SEEK_FLAG_ACCURATE: accurate position is requested, this might - * be considerably slower for some formats. - * @GST_SEEK_FLAG_KEY_UNIT: seek to the nearest keyframe. This might be - * faster but less accurate. - * @GST_SEEK_FLAG_SEGMENT: perform a segment seek. - * @GST_SEEK_FLAG_SKIP: when doing fast foward or fast reverse playback, allow - * elements to skip frames instead of generating all - * frames. - * @GST_SEEK_FLAG_SNAP_BEFORE: go to a location before the requested position, - * if KEY_UNIT this means the keyframe at or before the - * requested position the one at or before the seek target. - * @GST_SEEK_FLAG_SNAP_AFTER: go to a location after the requested position, - * if KEY_UNIT this means the keyframe at of after the - * requested position. - * @GST_SEEK_FLAG_SNAP_NEAREST: go to a position near the requested position, - * if KEY_UNIT this means the keyframe closest to the - * requested position, if both keyframes are at an equal - * distance, behaves like SNAP_BEFORE. - * - * Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags - * can be used together. - * - * A non flushing seek might take some time to perform as the currently - * playing data in the pipeline will not be cleared. - * - * An accurate seek might be slower for formats that don't have any indexes - * or timestamp markers in the stream. Specifying this flag might require a - * complete scan of the file in those cases. - * - * When performing a segment seek: after the playback of the segment completes, - * no EOS will be emmited by the element that performed the seek, but a - * #GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element. - * When this message is posted, it is possible to send a new seek event to - * continue playback. With this seek method it is possible to perform seamless - * looping or simple linear editing. - * - * When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode - * playback, the @GST_SEEK_FLAG_SKIP flag can be used to instruct decoders - * and demuxers to adjust the playback rate by skipping frames. This can improve - * performance and decrease CPU usage because not all frames need to be decoded. - * - * The @GST_SEEK_FLAG_SNAP_BEFORE flag can be used to snap to the previous - * relevant location, and the @GST_SEEK_FLAG_SNAP_AFTER flag can be used to - * select the next relevant location. If KEY_UNIT is specified, the relevant - * location is a keyframe. If both flags are specified, the nearest of these - * locations will be selected. If none are specified, the implementation is - * free to select whichever it wants. - * The before and after here are in running time, so when playing backwards, - * the next location refers to the one that will played in next, and not the - * one that is located after in the actual source stream. - * - * Also see part-seeking.txt in the GStreamer design documentation for more - * details on the meaning of these flags and the behaviour expected of - * elements that handle them. - */ -typedef enum { - GST_SEEK_FLAG_NONE = 0, - GST_SEEK_FLAG_FLUSH = (1 << 0), - GST_SEEK_FLAG_ACCURATE = (1 << 1), - GST_SEEK_FLAG_KEY_UNIT = (1 << 2), - GST_SEEK_FLAG_SEGMENT = (1 << 3), - GST_SEEK_FLAG_SKIP = (1 << 4), - GST_SEEK_FLAG_SNAP_BEFORE = (1 << 5), - GST_SEEK_FLAG_SNAP_AFTER = (1 << 6), - GST_SEEK_FLAG_SNAP_NEAREST = GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER, - /* Careful to restart next flag with 1<<7 here */ -} GstSeekFlags; - -/** - * GstSegmentFlags: - * @GST_SEGMENT_FLAG_NONE: no flags - * @GST_SEGMENT_FLAG_RESET: reset the pipeline running_time to the segment - * running_time - * @GST_SEGMENT_FLAG_SKIP: perform skip playback - * @GST_SEGMENT_FLAG_SEGMENT: send SEGMENT_DONE instead of EOS - * - * Flags for the GstSegment structure. Currently mapped to the corresponding - * values of the seek flags. - */ -/* Note: update gst_segment_do_seek() when adding new flags here */ -typedef enum { /*< flags >*/ - GST_SEGMENT_FLAG_NONE = GST_SEEK_FLAG_NONE, - GST_SEGMENT_FLAG_RESET = GST_SEEK_FLAG_FLUSH, - GST_SEGMENT_FLAG_SKIP = GST_SEEK_FLAG_SKIP, - GST_SEGMENT_FLAG_SEGMENT = GST_SEEK_FLAG_SEGMENT -} GstSegmentFlags; - -/** - * GstSegment: - * @flags: flags for this segment - * @rate: the rate of the segment - * @applied_rate: the already applied rate to the segment - * @format: the format of the segment values - * @base: the base of the segment - * @offset: the offset to apply to @start or @stop - * @start: the start of the segment - * @stop: the stop of the segment - * @time: the stream time of the segment - * @position: the position in the segment - * @duration: the duration of the segment - * - * A helper structure that holds the configured region of - * interest in a media file. - */ -struct _GstSegment { - /*< public >*/ - GstSegmentFlags flags; - - gdouble rate; - gdouble applied_rate; - - GstFormat format; - guint64 base; - guint64 offset; - guint64 start; - guint64 stop; - guint64 time; - - guint64 position; - guint64 duration; - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_segment_get_type (void); - -GstSegment * gst_segment_new (void) G_GNUC_MALLOC; -GstSegment * gst_segment_copy (const GstSegment *segment) G_GNUC_MALLOC; -void gst_segment_copy_into (const GstSegment *src, GstSegment *dest); -void gst_segment_free (GstSegment *segment); - -void gst_segment_init (GstSegment *segment, GstFormat format); - -guint64 gst_segment_to_stream_time (const GstSegment *segment, GstFormat format, guint64 position); -guint64 gst_segment_to_running_time (const GstSegment *segment, GstFormat format, guint64 position); -guint64 gst_segment_to_position (const GstSegment *segment, GstFormat format, guint64 running_time); - -gboolean gst_segment_set_running_time (GstSegment *segment, GstFormat format, guint64 running_time); - -gboolean gst_segment_clip (const GstSegment *segment, GstFormat format, guint64 start, - guint64 stop, guint64 *clip_start, guint64 *clip_stop); - - -gboolean gst_segment_do_seek (GstSegment * segment, gdouble rate, - GstFormat format, GstSeekFlags flags, - GstSeekType start_type, guint64 start, - GstSeekType stop_type, guint64 stop, gboolean * update); - -G_END_DECLS - -#endif /* __GST_SEGMENT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gststructure.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gststructure.h deleted file mode 100644 index 90c4b59b..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gststructure.h +++ /dev/null @@ -1,260 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 David A. Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_STRUCTURE_H__ -#define __GST_STRUCTURE_H__ - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_structure_type; - -typedef struct _GstStructure GstStructure; - -#define GST_TYPE_STRUCTURE (_gst_structure_type) -#define GST_IS_STRUCTURE(object) ((object) && (GST_STRUCTURE(object)->type == GST_TYPE_STRUCTURE)) -#define GST_STRUCTURE_CAST(object) ((GstStructure *)(object)) -#define GST_STRUCTURE(object) (GST_STRUCTURE_CAST(object)) - - -/** - * GstStructureForeachFunc: - * @field_id: the #GQuark of the field name - * @value: the #GValue of the field - * @user_data: user data - * - * A function that will be called in gst_structure_foreach(). The function may - * not modify @value. - * - * Returns: TRUE if the foreach operation should continue, FALSE if - * the foreach operation should stop with FALSE. - */ -typedef gboolean (*GstStructureForeachFunc) (GQuark field_id, - const GValue * value, - gpointer user_data); - -/** - * GstStructureMapFunc: - * @field_id: the #GQuark of the field name - * @value: the #GValue of the field - * @user_data: user data - * - * A function that will be called in gst_structure_map_in_place(). The function - * may modify @value. - * - * Returns: TRUE if the map operation should continue, FALSE if - * the map operation should stop with FALSE. - */ -typedef gboolean (*GstStructureMapFunc) (GQuark field_id, - GValue * value, - gpointer user_data); - -/** - * GstStructure: - * @type: the GType of a structure - * - * The GstStructure object. Most fields are private. - */ -struct _GstStructure { - GType type; - - /*< private >*/ - GQuark name; -}; - -GType gst_structure_get_type (void); - -GstStructure * gst_structure_new_empty (const gchar * name) G_GNUC_MALLOC; -GstStructure * gst_structure_new_id_empty (GQuark quark) G_GNUC_MALLOC; -GstStructure * gst_structure_new (const gchar * name, - const gchar * firstfield, - ...) G_GNUC_NULL_TERMINATED G_GNUC_MALLOC; -GstStructure * gst_structure_new_valist (const gchar * name, - const gchar * firstfield, - va_list varargs) G_GNUC_MALLOC; -GstStructure * gst_structure_new_id (GQuark name_quark, - GQuark field_quark, - ...) G_GNUC_MALLOC; -GstStructure * gst_structure_copy (const GstStructure *structure) G_GNUC_MALLOC; -gboolean gst_structure_set_parent_refcount (GstStructure *structure, - gint *refcount); -void gst_structure_free (GstStructure *structure); - -const gchar * gst_structure_get_name (const GstStructure *structure); -GQuark gst_structure_get_name_id (const GstStructure *structure); -gboolean gst_structure_has_name (const GstStructure *structure, - const gchar *name); -void gst_structure_set_name (GstStructure *structure, - const gchar *name); - -void gst_structure_id_set_value (GstStructure *structure, - GQuark field, - const GValue *value); -void gst_structure_set_value (GstStructure *structure, - const gchar *fieldname, - const GValue *value); -void gst_structure_id_take_value (GstStructure *structure, - GQuark field, - GValue *value); -void gst_structure_take_value (GstStructure *structure, - const gchar *fieldname, - GValue *value); -void gst_structure_set (GstStructure *structure, - const gchar *fieldname, - ...) G_GNUC_NULL_TERMINATED; - -void gst_structure_set_valist (GstStructure *structure, - const gchar *fieldname, - va_list varargs); - -void gst_structure_id_set (GstStructure *structure, - GQuark fieldname, - ...) G_GNUC_NULL_TERMINATED; - -void gst_structure_id_set_valist (GstStructure *structure, - GQuark fieldname, - va_list varargs); - -gboolean gst_structure_get_valist (const GstStructure *structure, - const char *first_fieldname, - va_list args); - -gboolean gst_structure_get (const GstStructure *structure, - const char *first_fieldname, - ...) G_GNUC_NULL_TERMINATED; - -gboolean gst_structure_id_get_valist (const GstStructure *structure, - GQuark first_field_id, - va_list args); - -gboolean gst_structure_id_get (const GstStructure *structure, - GQuark first_field_id, - ...) G_GNUC_NULL_TERMINATED; - -const GValue * gst_structure_id_get_value (const GstStructure *structure, - GQuark field); -const GValue * gst_structure_get_value (const GstStructure *structure, - const gchar *fieldname); -void gst_structure_remove_field (GstStructure *structure, - const gchar *fieldname); -void gst_structure_remove_fields (GstStructure *structure, - const gchar *fieldname, - ...) G_GNUC_NULL_TERMINATED; -void gst_structure_remove_fields_valist (GstStructure *structure, - const gchar *fieldname, - va_list varargs); -void gst_structure_remove_all_fields (GstStructure *structure); - -GType gst_structure_get_field_type (const GstStructure *structure, - const gchar *fieldname); -gboolean gst_structure_foreach (const GstStructure *structure, - GstStructureForeachFunc func, - gpointer user_data); -gboolean gst_structure_map_in_place (GstStructure *structure, - GstStructureMapFunc func, - gpointer user_data); -gint gst_structure_n_fields (const GstStructure *structure); -const gchar * gst_structure_nth_field_name (const GstStructure *structure, guint index); -gboolean gst_structure_id_has_field (const GstStructure *structure, - GQuark field); -gboolean gst_structure_id_has_field_typed (const GstStructure *structure, - GQuark field, - GType type); -gboolean gst_structure_has_field (const GstStructure *structure, - const gchar *fieldname); -gboolean gst_structure_has_field_typed (const GstStructure *structure, - const gchar *fieldname, - GType type); - -/* utility functions */ -gboolean gst_structure_get_boolean (const GstStructure *structure, - const gchar *fieldname, - gboolean *value); -gboolean gst_structure_get_int (const GstStructure *structure, - const gchar *fieldname, - gint *value); -gboolean gst_structure_get_uint (const GstStructure *structure, - const gchar *fieldname, - guint *value); -gboolean gst_structure_get_double (const GstStructure *structure, - const gchar *fieldname, - gdouble *value); -gboolean gst_structure_get_date (const GstStructure *structure, - const gchar *fieldname, - GDate **value); -gboolean gst_structure_get_date_time (const GstStructure *structure, - const gchar *fieldname, - GstDateTime **value); -gboolean gst_structure_get_clock_time (const GstStructure *structure, - const gchar *fieldname, - GstClockTime *value); -const gchar * gst_structure_get_string (const GstStructure *structure, - const gchar *fieldname); -gboolean gst_structure_get_enum (const GstStructure *structure, - const gchar *fieldname, - GType enumtype, - gint *value); -gboolean gst_structure_get_fraction (const GstStructure *structure, - const gchar *fieldname, - gint *value_numerator, - gint *value_denominator); - -gchar * gst_structure_to_string (const GstStructure *structure) G_GNUC_MALLOC; -GstStructure * gst_structure_from_string (const gchar *string, - gchar **end) G_GNUC_MALLOC; - -gboolean gst_structure_fixate_field_nearest_int (GstStructure *structure, - const char *field_name, - int target); -gboolean gst_structure_fixate_field_nearest_double (GstStructure *structure, - const char *field_name, - double target); - -gboolean gst_structure_fixate_field_boolean (GstStructure *structure, - const char *field_name, - gboolean target); -gboolean gst_structure_fixate_field_string (GstStructure *structure, - const char *field_name, - const gchar *target); -gboolean gst_structure_fixate_field_nearest_fraction (GstStructure *structure, - const char *field_name, - const gint target_numerator, - const gint target_denominator); -gboolean gst_structure_fixate_field (GstStructure *structure, - const char *field_name); - -gboolean gst_structure_is_equal(const GstStructure *structure1, - const GstStructure *structure2); -gboolean gst_structure_is_subset(const GstStructure *subset, - const GstStructure *superset); -gboolean gst_structure_can_intersect(const GstStructure *struct1, - const GstStructure *struct2); -GstStructure* gst_structure_intersect (const GstStructure *struct1, - const GstStructure *struct2) G_GNUC_MALLOC; -void gst_structure_fixate (GstStructure *structure); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsystemclock.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsystemclock.h deleted file mode 100644 index fc3b9b18..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstsystemclock.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstsystemclock.h: A clock implementation based on system time - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SYSTEM_CLOCK_H__ -#define __GST_SYSTEM_CLOCK_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_SYSTEM_CLOCK (gst_system_clock_get_type ()) -#define GST_SYSTEM_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SYSTEM_CLOCK, GstSystemClock)) -#define GST_SYSTEM_CLOCK_CAST(obj) ((GstSystemClock *)(obj)) -#define GST_IS_SYSTEM_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SYSTEM_CLOCK)) -#define GST_SYSTEM_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SYSTEM_CLOCK, GstSystemClockClass)) -#define GST_IS_SYSTEM_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SYSTEM_CLOCK)) -#define GST_SYSTEM_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_SYSTEM_CLOCK, GstSystemClockClass)) - - -typedef struct _GstSystemClock GstSystemClock; -typedef struct _GstSystemClockClass GstSystemClockClass; -typedef struct _GstSystemClockPrivate GstSystemClockPrivate; - -/** - * GstClockType: - * @GST_CLOCK_TYPE_REALTIME: time since Epoch - * @GST_CLOCK_TYPE_MONOTONIC: monotonic time since some unspecified starting - * point - * @GST_CLOCK_TYPE_OTHER: some other time source is used (Since: 1.0.5) - * - * The different kind of clocks. - */ -typedef enum { - GST_CLOCK_TYPE_REALTIME = 0, - GST_CLOCK_TYPE_MONOTONIC = 1, - GST_CLOCK_TYPE_OTHER = 2 -} GstClockType; - -/** - * GstSystemClock: - * - * The default implementation of a #GstClock that uses the system time. - */ -struct _GstSystemClock { - GstClock clock; - - /*< private >*/ - GstSystemClockPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstSystemClockClass { - GstClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_system_clock_get_type (void); - -GstClock* gst_system_clock_obtain (void); - -G_END_DECLS - -#endif /* __GST_SYSTEM_CLOCK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaglist.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaglist.h deleted file mode 100644 index a818105e..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaglist.h +++ /dev/null @@ -1,1049 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttaglist.h: Header for tag support - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TAGLIST_H__ -#define __GST_TAGLIST_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstTagMergeMode: - * @GST_TAG_MERGE_UNDEFINED: undefined merge mode - * @GST_TAG_MERGE_REPLACE_ALL: replace all tags (clear list and append) - * @GST_TAG_MERGE_REPLACE: replace tags - * @GST_TAG_MERGE_APPEND: append tags - * @GST_TAG_MERGE_PREPEND: prepend tags - * @GST_TAG_MERGE_KEEP: keep existing tags - * @GST_TAG_MERGE_KEEP_ALL: keep all existing tags - * @GST_TAG_MERGE_COUNT: the number of merge modes - * - * The different tag merging modes are basically replace, overwrite and append, - * but they can be seen from two directions. Given two taglists: (A) the tags - * already in the element and (B) the ones that are supplied to the element ( - * e.g. via gst_tag_setter_merge_tags() / gst_tag_setter_add_tags() or a - * %GST_EVENT_TAG), how are these tags merged? - * In the table below this is shown for the cases that a tag exists in the list - * (A) or does not exists (!A) and combinations thereof. - * - * - * merge mode - * - * - * - * merge mode - * A + B - * A + !B - * !A + B - * !A + !B - * - * - * - * - * REPLACE_ALL - * B - * - - * B - * - - * - * - * REPLACE - * B - * A - * B - * - - * - * - * APPEND - * A, B - * A - * B - * - - * - * - * PREPEND - * B, A - * A - * B - * - - * - * - * KEEP - * A - * A - * B - * - - * - * - * KEEP_ALL - * A - * A - * - - * - - * - * - * - *
    - */ -typedef enum { - GST_TAG_MERGE_UNDEFINED, - GST_TAG_MERGE_REPLACE_ALL, - GST_TAG_MERGE_REPLACE, - GST_TAG_MERGE_APPEND, - GST_TAG_MERGE_PREPEND, - GST_TAG_MERGE_KEEP, - GST_TAG_MERGE_KEEP_ALL, - /* add more */ - GST_TAG_MERGE_COUNT -} GstTagMergeMode; - -#define GST_TAG_MODE_IS_VALID(mode) (((mode) > GST_TAG_MERGE_UNDEFINED) && ((mode) < GST_TAG_MERGE_COUNT)) - -/** - * GstTagFlag: - * @GST_TAG_FLAG_UNDEFINED: undefined flag - * @GST_TAG_FLAG_META: tag is meta data - * @GST_TAG_FLAG_ENCODED: tag is encoded - * @GST_TAG_FLAG_DECODED: tag is decoded - * @GST_TAG_FLAG_COUNT: number of tag flags - * - * Extra tag flags used when registering tags. - */ -/* FIXME: these are not really flags .. */ -typedef enum { - GST_TAG_FLAG_UNDEFINED, - GST_TAG_FLAG_META, - GST_TAG_FLAG_ENCODED, - GST_TAG_FLAG_DECODED, - GST_TAG_FLAG_COUNT -} GstTagFlag; - -#define GST_TAG_FLAG_IS_VALID(flag) (((flag) > GST_TAG_FLAG_UNDEFINED) && ((flag) < GST_TAG_FLAG_COUNT)) - -/** - * GstTagList: - * @mini_object: the parent type - * - * Object describing tags / metadata. - */ -typedef struct _GstTagList GstTagList; -struct _GstTagList { - GstMiniObject mini_object; -}; - -#define GST_TAG_LIST(x) ((GstTagList *) (x)) -#define GST_TYPE_TAG_LIST (gst_tag_list_get_type ()) -#define GST_IS_TAG_LIST(obj) (GST_IS_MINI_OBJECT_TYPE((obj), GST_TYPE_TAG_LIST)) - -/** - * GstTagForeachFunc: - * @list: the #GstTagList - * @tag: a name of a tag in @list - * @user_data: user data - * - * A function that will be called in gst_tag_list_foreach(). The function may - * not modify the tag list. - */ -typedef void (*GstTagForeachFunc) (const GstTagList * list, - const gchar * tag, - gpointer user_data); - -/** - * GstTagMergeFunc: - * @dest: the destination #GValue - * @src: the source #GValue - * - * A function for merging multiple values of a tag used when registering - * tags. - */ -typedef void (* GstTagMergeFunc) (GValue *dest, const GValue *src); - -GType gst_tag_list_get_type (void); - -/* tag registration */ -void gst_tag_register (const gchar * name, - GstTagFlag flag, - GType type, - const gchar * nick, - const gchar * blurb, - GstTagMergeFunc func); - -void gst_tag_register_static (const gchar * name, - GstTagFlag flag, - GType type, - const gchar * nick, - const gchar * blurb, - GstTagMergeFunc func); - -/* some default merging functions */ -void gst_tag_merge_use_first (GValue * dest, const GValue * src); -void gst_tag_merge_strings_with_comma (GValue * dest, const GValue * src); - -/* basic tag support */ -gboolean gst_tag_exists (const gchar * tag); -GType gst_tag_get_type (const gchar * tag); -const gchar * gst_tag_get_nick (const gchar * tag); -const gchar * gst_tag_get_description (const gchar * tag); -GstTagFlag gst_tag_get_flag (const gchar * tag); -gboolean gst_tag_is_fixed (const gchar * tag); - -/* tag lists */ - -/** - * GstTagScope: - * @GST_TAG_SCOPE_STREAM: tags specific to this single stream - * @GST_TAG_SCOPE_GLOBAL: global tags for the complete medium - * - * GstTagScope specifies if a taglist applies to the complete - * medium or only to one single stream. - */ -typedef enum { - GST_TAG_SCOPE_STREAM, - GST_TAG_SCOPE_GLOBAL -} GstTagScope; - -GstTagList * gst_tag_list_new_empty (void) G_GNUC_MALLOC; -GstTagList * gst_tag_list_new (const gchar * tag, ...) G_GNUC_MALLOC; -GstTagList * gst_tag_list_new_valist (va_list var_args) G_GNUC_MALLOC; - -void gst_tag_list_set_scope (GstTagList * list, GstTagScope scope); -GstTagScope gst_tag_list_get_scope (const GstTagList * list); - -gchar * gst_tag_list_to_string (const GstTagList * list) G_GNUC_MALLOC; -GstTagList * gst_tag_list_new_from_string (const gchar * str) G_GNUC_MALLOC; - -gint gst_tag_list_n_tags (const GstTagList * list); -const gchar* gst_tag_list_nth_tag_name (const GstTagList * list, guint index); -gboolean gst_tag_list_is_empty (const GstTagList * list); -gboolean gst_tag_list_is_equal (const GstTagList * list1, - const GstTagList * list2); -void gst_tag_list_insert (GstTagList * into, - const GstTagList * from, - GstTagMergeMode mode); -GstTagList * gst_tag_list_merge (const GstTagList * list1, - const GstTagList * list2, - GstTagMergeMode mode) G_GNUC_MALLOC; -guint gst_tag_list_get_tag_size (const GstTagList * list, - const gchar * tag); -void gst_tag_list_add (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; -void gst_tag_list_add_values (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; -void gst_tag_list_add_valist (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); -void gst_tag_list_add_valist_values (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); -void gst_tag_list_add_value (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - const GValue * value); -void gst_tag_list_remove_tag (GstTagList * list, - const gchar * tag); -void gst_tag_list_foreach (const GstTagList * list, - GstTagForeachFunc func, - gpointer user_data); - -const GValue * - gst_tag_list_get_value_index (const GstTagList * list, - const gchar * tag, - guint index); -gboolean gst_tag_list_copy_value (GValue * dest, - const GstTagList * list, - const gchar * tag); - -/* simplifications (FIXME: do we want them?) */ -gboolean gst_tag_list_get_boolean (const GstTagList * list, - const gchar * tag, - gboolean * value); -gboolean gst_tag_list_get_boolean_index (const GstTagList * list, - const gchar * tag, - guint index, - gboolean * value); -gboolean gst_tag_list_get_int (const GstTagList * list, - const gchar * tag, - gint * value); -gboolean gst_tag_list_get_int_index (const GstTagList * list, - const gchar * tag, - guint index, - gint * value); -gboolean gst_tag_list_get_uint (const GstTagList * list, - const gchar * tag, - guint * value); -gboolean gst_tag_list_get_uint_index (const GstTagList * list, - const gchar * tag, - guint index, - guint * value); -gboolean gst_tag_list_get_int64 (const GstTagList * list, - const gchar * tag, - gint64 * value); -gboolean gst_tag_list_get_int64_index (const GstTagList * list, - const gchar * tag, - guint index, - gint64 * value); -gboolean gst_tag_list_get_uint64 (const GstTagList * list, - const gchar * tag, - guint64 * value); -gboolean gst_tag_list_get_uint64_index (const GstTagList * list, - const gchar * tag, - guint index, - guint64 * value); -gboolean gst_tag_list_get_float (const GstTagList * list, - const gchar * tag, - gfloat * value); -gboolean gst_tag_list_get_float_index (const GstTagList * list, - const gchar * tag, - guint index, - gfloat * value); -gboolean gst_tag_list_get_double (const GstTagList * list, - const gchar * tag, - gdouble * value); -gboolean gst_tag_list_get_double_index (const GstTagList * list, - const gchar * tag, - guint index, - gdouble * value); -gboolean gst_tag_list_get_string (const GstTagList * list, - const gchar * tag, - gchar ** value); -gboolean gst_tag_list_get_string_index (const GstTagList * list, - const gchar * tag, - guint index, - gchar ** value); -gboolean gst_tag_list_peek_string_index (const GstTagList * list, - const gchar * tag, - guint index, - const gchar ** value); -gboolean gst_tag_list_get_pointer (const GstTagList * list, - const gchar * tag, - gpointer * value); -gboolean gst_tag_list_get_pointer_index (const GstTagList * list, - const gchar * tag, - guint index, - gpointer * value); -gboolean gst_tag_list_get_date (const GstTagList * list, - const gchar * tag, - GDate ** value); -gboolean gst_tag_list_get_date_index (const GstTagList * list, - const gchar * tag, - guint index, - GDate ** value); -gboolean gst_tag_list_get_date_time (const GstTagList * list, - const gchar * tag, - GstDateTime ** value); -gboolean gst_tag_list_get_date_time_index (const GstTagList * list, - const gchar * tag, - guint index, - GstDateTime ** value); -gboolean gst_tag_list_get_sample (const GstTagList * list, - const gchar * tag, - GstSample ** sample); -gboolean gst_tag_list_get_sample_index (const GstTagList * list, - const gchar * tag, - guint index, - GstSample ** sample); - -/* refcounting */ -/** - * gst_tag_list_ref: - * @taglist: the #GstTagList to reference - * - * Add a reference to a #GstTagList mini object. - * - * From this point on, until the caller calls gst_tag_list_unref() or - * gst_tag_list_make_writable(), it is guaranteed that the taglist object will - * not change. To use a #GstTagList object, you must always have a refcount on - * it -- either the one made implicitly by e.g. gst_tag_list_new(), or via - * taking one explicitly with this function. - * - * Returns: the same #GstTagList mini object. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstTagList * gst_tag_list_ref (GstTagList * taglist); -#endif - -static inline GstTagList * -gst_tag_list_ref (GstTagList * taglist) -{ - return (GstTagList *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (taglist)); -} - -/** - * gst_tag_list_unref: - * @taglist: a #GstTagList. - * - * Unref a #GstTagList, and and free all its memory when the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_tag_list_unref (GstTagList * taglist); -#endif - -static inline void -gst_tag_list_unref (GstTagList * taglist) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (taglist)); -} - -/** - * gst_tag_list_copy: - * @taglist: a #GstTagList. - * - * Creates a new #GstTagList as a copy of the old @taglist. The new taglist - * will have a refcount of 1, owned by the caller, and will be writable as - * a result. - * - * Note that this function is the semantic equivalent of a gst_tag_list_ref() - * followed by a gst_tag_list_make_writable(). If you only want to hold on to a - * reference to the data, you should use gst_tag_list_ref(). - * - * When you are finished with the taglist, call gst_tag_list_unref() on it. - * - * Returns: the new #GstTagList - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstTagList * gst_tag_list_copy (const GstTagList * taglist); -#endif - -static inline GstTagList * -gst_tag_list_copy (const GstTagList * taglist) -{ - return GST_TAG_LIST (gst_mini_object_copy (GST_MINI_OBJECT_CAST (taglist))); -} - -/** - * gst_tag_list_is_writable: - * @taglist: a #GstTagList - * - * Tests if you can safely modify @taglist. It is only safe to modify taglist - * when there is only one owner of the taglist - ie, the refcount is 1. - */ -#define gst_tag_list_is_writable(taglist) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (taglist)) - -/** - * gst_tag_list_make_writable: - * @taglist: (transfer full): a #GstTagList - * - * Returns a writable copy of @taglist. - * - * If there is only one reference count on @taglist, the caller must be the - * owner, and so this function will return the taglist object unchanged. If on - * the other hand there is more than one reference on the object, a new taglist - * object will be returned (which will be a copy of @taglist). The caller's - * reference on @taglist will be removed, and instead the caller will own a - * reference to the returned object. - * - * In short, this function unrefs the taglist in the argument and refs the - * taglist that it returns. Don't access the argument after calling this - * function. See also: gst_tag_list_ref(). - * - * Returns: (transfer full): a writable taglist which may or may not be the - * same as @taglist - */ -#define gst_tag_list_make_writable(taglist) GST_TAG_LIST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (taglist))) - -/* GStreamer core tags */ -/** - * GST_TAG_TITLE: - * - * commonly used title (string) - * - * The title as it should be displayed, e.g. 'The Doll House' - */ -#define GST_TAG_TITLE "title" -/** - * GST_TAG_TITLE_SORTNAME: - * - * commonly used title, as used for sorting (string) - * - * The title as it should be sorted, e.g. 'Doll House, The' - */ -#define GST_TAG_TITLE_SORTNAME "title-sortname" -/** - * GST_TAG_ARTIST: - * - * person(s) responsible for the recording (string) - * - * The artist name as it should be displayed, e.g. 'Jimi Hendrix' or - * 'The Guitar Heroes' - */ -#define GST_TAG_ARTIST "artist" -/** - * GST_TAG_ARTIST_SORTNAME: - * - * person(s) responsible for the recording, as used for sorting (string) - * - * The artist name as it should be sorted, e.g. 'Hendrix, Jimi' or - * 'Guitar Heroes, The' - */ -#define GST_TAG_ARTIST_SORTNAME "artist-sortname" -/** - * GST_TAG_ALBUM: - * - * album containing this data (string) - * - * The album name as it should be displayed, e.g. 'The Jazz Guitar' - */ -#define GST_TAG_ALBUM "album" -/** - * GST_TAG_ALBUM_SORTNAME: - * - * album containing this data, as used for sorting (string) - * - * The album name as it should be sorted, e.g. 'Jazz Guitar, The' - */ -#define GST_TAG_ALBUM_SORTNAME "album-sortname" -/** - * GST_TAG_ALBUM_ARTIST: - * - * The artist of the entire album, as it should be displayed. - */ -#define GST_TAG_ALBUM_ARTIST "album-artist" -/** - * GST_TAG_ALBUM_ARTIST_SORTNAME: - * - * The artist of the entire album, as it should be sorted. - */ -#define GST_TAG_ALBUM_ARTIST_SORTNAME "album-artist-sortname" -/** - * GST_TAG_COMPOSER: - * - * person(s) who composed the recording (string) - */ -#define GST_TAG_COMPOSER "composer" -/** - * GST_TAG_DATE: - * - * date the data was created (#GDate structure) - */ -#define GST_TAG_DATE "date" -/** - * GST_TAG_DATE_TIME: - * - * date and time the data was created (#GstDateTime structure) - */ -#define GST_TAG_DATE_TIME "datetime" -/** - * GST_TAG_GENRE: - * - * genre this data belongs to (string) - */ -#define GST_TAG_GENRE "genre" -/** - * GST_TAG_COMMENT: - * - * free text commenting the data (string) - */ -#define GST_TAG_COMMENT "comment" -/** - * GST_TAG_EXTENDED_COMMENT: - * - * key/value text commenting the data (string) - * - * Must be in the form of 'key=comment' or - * 'key[lc]=comment' where 'lc' is an ISO-639 - * language code. - * - * This tag is used for unknown Vorbis comment tags, - * unknown APE tags and certain ID3v2 comment fields. - */ -#define GST_TAG_EXTENDED_COMMENT "extended-comment" -/** - * GST_TAG_TRACK_NUMBER: - * - * track number inside a collection (unsigned integer) - */ -#define GST_TAG_TRACK_NUMBER "track-number" -/** - * GST_TAG_TRACK_COUNT: - * - * count of tracks inside collection this track belongs to (unsigned integer) - */ -#define GST_TAG_TRACK_COUNT "track-count" -/** - * GST_TAG_ALBUM_VOLUME_NUMBER: - * - * disc number inside a collection (unsigned integer) - */ -#define GST_TAG_ALBUM_VOLUME_NUMBER "album-disc-number" -/** - * GST_TAG_ALBUM_VOLUME_COUNT: - * - * count of discs inside collection this disc belongs to (unsigned integer) - */ -#define GST_TAG_ALBUM_VOLUME_COUNT "album-disc-count" -/** - * GST_TAG_LOCATION: - * - * Origin of media as a URI (location, where the original of the file or stream - * is hosted) (string) - */ -#define GST_TAG_LOCATION "location" -/** - * GST_TAG_HOMEPAGE: - * - * Homepage for this media (i.e. artist or movie homepage) (string) - */ -#define GST_TAG_HOMEPAGE "homepage" -/** - * GST_TAG_DESCRIPTION: - * - * short text describing the content of the data (string) - */ -#define GST_TAG_DESCRIPTION "description" -/** - * GST_TAG_VERSION: - * - * version of this data (string) - */ -#define GST_TAG_VERSION "version" -/** - * GST_TAG_ISRC: - * - * International Standard Recording Code - see http://www.ifpi.org/isrc/ (string) - */ -#define GST_TAG_ISRC "isrc" -/** - * GST_TAG_ORGANIZATION: - * - * organization (string) - */ -#define GST_TAG_ORGANIZATION "organization" -/** - * GST_TAG_COPYRIGHT: - * - * copyright notice of the data (string) - */ -#define GST_TAG_COPYRIGHT "copyright" -/** - * GST_TAG_COPYRIGHT_URI: - * - * URI to location where copyright details can be found (string) - */ -#define GST_TAG_COPYRIGHT_URI "copyright-uri" -/** - * GST_TAG_ENCODED_BY: - * - * name of the person or organisation that encoded the file. May contain a - * copyright message if the person or organisation also holds the copyright - * (string) - * - * Note: do not use this field to describe the encoding application. Use - * #GST_TAG_APPLICATION_NAME or #GST_TAG_COMMENT for that. - */ -#define GST_TAG_ENCODED_BY "encoded-by" -/** - * GST_TAG_CONTACT: - * - * contact information (string) - */ -#define GST_TAG_CONTACT "contact" -/** - * GST_TAG_LICENSE: - * - * license of data (string) - */ -#define GST_TAG_LICENSE "license" -/** - * GST_TAG_LICENSE_URI: - * - * URI to location where license details can be found (string) - */ -#define GST_TAG_LICENSE_URI "license-uri" -/** - * GST_TAG_PERFORMER: - * - * person(s) performing (string) - */ -#define GST_TAG_PERFORMER "performer" -/** - * GST_TAG_DURATION: - * - * length in GStreamer time units (nanoseconds) (unsigned 64-bit integer) - */ -#define GST_TAG_DURATION "duration" -/** - * GST_TAG_CODEC: - * - * codec the data is stored in (string) - */ -#define GST_TAG_CODEC "codec" -/** - * GST_TAG_VIDEO_CODEC: - * - * codec the video data is stored in (string) - */ -#define GST_TAG_VIDEO_CODEC "video-codec" -/** - * GST_TAG_AUDIO_CODEC: - * - * codec the audio data is stored in (string) - */ -#define GST_TAG_AUDIO_CODEC "audio-codec" -/** - * GST_TAG_SUBTITLE_CODEC: - * - * codec/format the subtitle data is stored in (string) - */ -#define GST_TAG_SUBTITLE_CODEC "subtitle-codec" -/** - * GST_TAG_CONTAINER_FORMAT: - * - * container format the data is stored in (string) - */ -#define GST_TAG_CONTAINER_FORMAT "container-format" -/** - * GST_TAG_BITRATE: - * - * exact or average bitrate in bits/s (unsigned integer) - */ -#define GST_TAG_BITRATE "bitrate" -/** - * GST_TAG_NOMINAL_BITRATE: - * - * nominal bitrate in bits/s (unsigned integer). The actual bitrate might be - * different from this target bitrate. - */ -#define GST_TAG_NOMINAL_BITRATE "nominal-bitrate" -/** - * GST_TAG_MINIMUM_BITRATE: - * - * minimum bitrate in bits/s (unsigned integer) - */ -#define GST_TAG_MINIMUM_BITRATE "minimum-bitrate" -/** - * GST_TAG_MAXIMUM_BITRATE: - * - * maximum bitrate in bits/s (unsigned integer) - */ -#define GST_TAG_MAXIMUM_BITRATE "maximum-bitrate" -/** - * GST_TAG_SERIAL: - * - * serial number of track (unsigned integer) - */ -#define GST_TAG_SERIAL "serial" -/** - * GST_TAG_ENCODER: - * - * encoder used to encode this stream (string) - */ -#define GST_TAG_ENCODER "encoder" -/** - * GST_TAG_ENCODER_VERSION: - * - * version of the encoder used to encode this stream (unsigned integer) - */ -#define GST_TAG_ENCODER_VERSION "encoder-version" -/** - * GST_TAG_TRACK_GAIN: - * - * track gain in db (double) - */ -#define GST_TAG_TRACK_GAIN "replaygain-track-gain" -/** - * GST_TAG_TRACK_PEAK: - * - * peak of the track (double) - */ -#define GST_TAG_TRACK_PEAK "replaygain-track-peak" -/** - * GST_TAG_ALBUM_GAIN: - * - * album gain in db (double) - */ -#define GST_TAG_ALBUM_GAIN "replaygain-album-gain" -/** - * GST_TAG_ALBUM_PEAK: - * - * peak of the album (double) - */ -#define GST_TAG_ALBUM_PEAK "replaygain-album-peak" -/** - * GST_TAG_REFERENCE_LEVEL: - * - * reference level of track and album gain values (double) - */ -#define GST_TAG_REFERENCE_LEVEL "replaygain-reference-level" -/** - * GST_TAG_LANGUAGE_CODE: - * - * ISO-639-2 or ISO-639-1 code for the language the content is in (string) - * - * There is utility API in libgsttag in gst-plugins-base to obtain a translated - * language name from the language code: gst_tag_get_language_name() - */ -#define GST_TAG_LANGUAGE_CODE "language-code" -/** - * GST_TAG_LANGUAGE_NAME: - * - * Name of the language the content is in (string) - * - * Free-form name of the language the content is in, if a language code - * is not available. This tag should not be set in addition to a language - * code. It is undefined what language or locale the language name is in. - */ -#define GST_TAG_LANGUAGE_NAME "language-name" -/** - * GST_TAG_IMAGE: - * - * image (sample) (sample taglist should specify the content type and preferably - * also set "image-type" field as #GstTagImageType) - */ -#define GST_TAG_IMAGE "image" -/** - * GST_TAG_PREVIEW_IMAGE: - * - * image that is meant for preview purposes, e.g. small icon-sized version - * (sample) (sample taglist should specify the content type) - */ -#define GST_TAG_PREVIEW_IMAGE "preview-image" - -/** - * GST_TAG_ATTACHMENT: - * - * generic file attachment (sample) (sample taglist should specify the content - * type and if possible set "filename" to the file name of the - * attachment) - */ -#define GST_TAG_ATTACHMENT "attachment" - -/** - * GST_TAG_BEATS_PER_MINUTE: - * - * number of beats per minute in audio (double) - */ -#define GST_TAG_BEATS_PER_MINUTE "beats-per-minute" - -/** - * GST_TAG_KEYWORDS: - * - * comma separated keywords describing the content (string). - */ -#define GST_TAG_KEYWORDS "keywords" - -/** - * GST_TAG_GEO_LOCATION_NAME: - * - * human readable descriptive location of where the media has been recorded or - * produced. (string). - */ -#define GST_TAG_GEO_LOCATION_NAME "geo-location-name" - -/** - * GST_TAG_GEO_LOCATION_LATITUDE: - * - * geo latitude location of where the media has been recorded or produced in - * degrees according to WGS84 (zero at the equator, negative values for southern - * latitudes) (double). - */ -#define GST_TAG_GEO_LOCATION_LATITUDE "geo-location-latitude" - -/** - * GST_TAG_GEO_LOCATION_LONGITUDE: - * - * geo longitude location of where the media has been recorded or produced in - * degrees according to WGS84 (zero at the prime meridian in Greenwich/UK, - * negative values for western longitudes). (double). - */ -#define GST_TAG_GEO_LOCATION_LONGITUDE "geo-location-longitude" - -/** - * GST_TAG_GEO_LOCATION_ELEVATION: - * - * geo elevation of where the media has been recorded or produced in meters - * according to WGS84 (zero is average sea level) (double). - */ -#define GST_TAG_GEO_LOCATION_ELEVATION "geo-location-elevation" -/** - * GST_TAG_GEO_LOCATION_COUNTRY: - * - * The country (english name) where the media has been produced (string). - */ -#define GST_TAG_GEO_LOCATION_COUNTRY "geo-location-country" -/** - * GST_TAG_GEO_LOCATION_CITY: - * - * The city (english name) where the media has been produced (string). - */ -#define GST_TAG_GEO_LOCATION_CITY "geo-location-city" -/** - * GST_TAG_GEO_LOCATION_SUBLOCATION: - * - * A location 'smaller' than GST_TAG_GEO_LOCATION_CITY that specifies better - * where the media has been produced. (e.g. the neighborhood) (string). - * - * This tag has been added as this is how it is handled/named in XMP's - * Iptc4xmpcore schema. - */ -#define GST_TAG_GEO_LOCATION_SUBLOCATION "geo-location-sublocation" -/** - * GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR: - * - * Represents the expected error on the horizontal positioning in - * meters (double). - */ -#define GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR "geo-location-horizontal-error" -/** - * GST_TAG_GEO_LOCATION_MOVEMENT_SPEED: - * - * Speed of the capturing device when performing the capture. - * Represented in m/s. (double) - * - * See also #GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION - */ -#define GST_TAG_GEO_LOCATION_MOVEMENT_SPEED "geo-location-movement-speed" -/** - * GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION: - * - * Indicates the movement direction of the device performing the capture - * of a media. It is represented as degrees in floating point representation, - * 0 means the geographic north, and increases clockwise (double from 0 to 360) - * - * See also #GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION - */ -#define GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION "geo-location-movement-direction" -/** - * GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION: - * - * Indicates the direction the device is pointing to when capturing - * a media. It is represented as degrees in floating point representation, - * 0 means the geographic north, and increases clockwise (double from 0 to 360) - * - * See also #GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION - */ -#define GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION "geo-location-capture-direction" -/** - * GST_TAG_SHOW_NAME: - * - * Name of the show, used for displaying (string) - */ -#define GST_TAG_SHOW_NAME "show-name" -/** - * GST_TAG_SHOW_SORTNAME: - * - * Name of the show, used for sorting (string) - */ -#define GST_TAG_SHOW_SORTNAME "show-sortname" -/** - * GST_TAG_SHOW_EPISODE_NUMBER: - * - * Number of the episode within a season/show (unsigned integer) - */ -#define GST_TAG_SHOW_EPISODE_NUMBER "show-episode-number" -/** - * GST_TAG_SHOW_SEASON_NUMBER: - * - * Number of the season of a show/series (unsigned integer) - */ -#define GST_TAG_SHOW_SEASON_NUMBER "show-season-number" -/** - * GST_TAG_LYRICS: - * - * The lyrics of the media (string) - */ -#define GST_TAG_LYRICS "lyrics" -/** - * GST_TAG_COMPOSER_SORTNAME: - * - * The composer's name, used for sorting (string) - */ -#define GST_TAG_COMPOSER_SORTNAME "composer-sortname" -/** - * GST_TAG_GROUPING: - * - * Groups together media that are related and spans multiple tracks. An - * example are multiple pieces of a concerto. (string) - */ -#define GST_TAG_GROUPING "grouping" -/** - * GST_TAG_USER_RATING: - * - * Rating attributed by a person (likely the application user). - * The higher the value, the more the user likes this media - * (unsigned int from 0 to 100) - */ -#define GST_TAG_USER_RATING "user-rating" -/** - * GST_TAG_DEVICE_MANUFACTURER: - * - * Manufacturer of the device used to create the media (string) - */ -#define GST_TAG_DEVICE_MANUFACTURER "device-manufacturer" -/** - * GST_TAG_DEVICE_MODEL: - * - * Model of the device used to create the media (string) - */ -#define GST_TAG_DEVICE_MODEL "device-model" -/** - * GST_TAG_APPLICATION_NAME: - * - * Name of the application used to create the media (string) - */ -#define GST_TAG_APPLICATION_NAME "application-name" -/** - * GST_TAG_APPLICATION_DATA: - * - * Arbitrary application data (sample) - * - * Some formats allow applications to add their own arbitrary data - * into files. This data is application dependent. - */ -#define GST_TAG_APPLICATION_DATA "application-data" -/** - * GST_TAG_IMAGE_ORIENTATION: - * - * Represents the 'Orientation' tag from EXIF. Defines how the image - * should be rotated and mirrored for display. (string) - * - * This tag has a predefined set of allowed values: - * "rotate-0" - * "rotate-90" - * "rotate-180" - * "rotate-270" - * "flip-rotate-0" - * "flip-rotate-90" - * "flip-rotate-180" - * "flip-rotate-270" - * - * The naming is adopted according to a possible transformation to perform - * on the image to fix its orientation, obviously equivalent operations will - * yield the same result. - * - * Rotations indicated by the values are in clockwise direction and - * 'flip' means an horizontal mirroring. - */ -#define GST_TAG_IMAGE_ORIENTATION "image-orientation" - -G_END_DECLS - -#endif /* __GST_TAGLIST_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttagsetter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttagsetter.h deleted file mode 100644 index 580053cc..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttagsetter.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttagsetter.h: Interfaces for tagging - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TAG_SETTER_H__ -#define __GST_TAG_SETTER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_SETTER (gst_tag_setter_get_type ()) -#define GST_TAG_SETTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TAG_SETTER, GstTagSetter)) -#define GST_IS_TAG_SETTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TAG_SETTER)) -#define GST_TAG_SETTER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_TAG_SETTER, GstTagSetterInterface)) - -/** - * GstTagSetter: - * - * Opaque #GstTagSetter data structure. - */ -typedef struct _GstTagSetter GstTagSetter; /* Dummy typedef */ -typedef struct _GstTagSetterInterface GstTagSetterInterface; - -/** - * GstTagSetterInterface: - * @g_iface: parent interface type. - * - * #GstTagSetterInterface interface. - */ -/* use an empty interface here to allow detection of elements using user-set - tags */ -struct _GstTagSetterInterface -{ - GTypeInterface g_iface; - - /* signals */ - - /* virtual table */ -}; - -GType gst_tag_setter_get_type (void); - -void gst_tag_setter_reset_tags (GstTagSetter * setter); - -void gst_tag_setter_merge_tags (GstTagSetter * setter, - const GstTagList * list, - GstTagMergeMode mode); -void gst_tag_setter_add_tags (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; - -void gst_tag_setter_add_tag_values (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; - -void gst_tag_setter_add_tag_valist (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); - -void gst_tag_setter_add_tag_valist_values(GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); - -void gst_tag_setter_add_tag_value (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - const GValue * value); - -const GstTagList * - gst_tag_setter_get_tag_list (GstTagSetter * setter); - -void gst_tag_setter_set_tag_merge_mode (GstTagSetter * setter, - GstTagMergeMode mode); -GstTagMergeMode gst_tag_setter_get_tag_merge_mode (GstTagSetter * setter); - -G_END_DECLS - -#endif /* __GST_TAG_SETTER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttask.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttask.h deleted file mode 100644 index 6464d865..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttask.h +++ /dev/null @@ -1,199 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * <2005> Wim Taymans - * - * gsttask.h: Streaming tasks - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TASK_H__ -#define __GST_TASK_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstTaskFunction: - * @user_data: user data passed to the function - * - * A function that will repeatedly be called in the thread created by - * a #GstTask. - */ -typedef void (*GstTaskFunction) (gpointer user_data); - -/* --- standard type macros --- */ -#define GST_TYPE_TASK (gst_task_get_type ()) -#define GST_TASK(task) (G_TYPE_CHECK_INSTANCE_CAST ((task), GST_TYPE_TASK, GstTask)) -#define GST_IS_TASK(task) (G_TYPE_CHECK_INSTANCE_TYPE ((task), GST_TYPE_TASK)) -#define GST_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), GST_TYPE_TASK, GstTaskClass)) -#define GST_IS_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), GST_TYPE_TASK)) -#define GST_TASK_GET_CLASS(task) (G_TYPE_INSTANCE_GET_CLASS ((task), GST_TYPE_TASK, GstTaskClass)) -#define GST_TASK_CAST(task) ((GstTask*)(task)) - -typedef struct _GstTask GstTask; -typedef struct _GstTaskClass GstTaskClass; -typedef struct _GstTaskPrivate GstTaskPrivate; - -/** - * GstTaskState: - * @GST_TASK_STARTED: the task is started and running - * @GST_TASK_STOPPED: the task is stopped - * @GST_TASK_PAUSED: the task is paused - * - * The different states a task can be in - */ -typedef enum { - GST_TASK_STARTED, - GST_TASK_STOPPED, - GST_TASK_PAUSED -} GstTaskState; - -/** - * GST_TASK_STATE: - * @task: Task to get the state of - * - * Get access to the state of the task. - */ -#define GST_TASK_STATE(task) (GST_TASK_CAST(task)->state) - -/** - * GST_TASK_GET_COND: - * @task: Task to get the cond of - * - * Get access to the cond of the task. - */ -#define GST_TASK_GET_COND(task) (&GST_TASK_CAST(task)->cond) -/** - * GST_TASK_WAIT: - * @task: Task to wait for - * - * Wait for the task cond to be signalled - */ -#define GST_TASK_WAIT(task) g_cond_wait(GST_TASK_GET_COND (task), GST_OBJECT_GET_LOCK (task)) -/** - * GST_TASK_SIGNAL: - * @task: Task to signal - * - * Signal the task cond - */ -#define GST_TASK_SIGNAL(task) g_cond_signal(GST_TASK_GET_COND (task)) -/** - * GST_TASK_BROADCAST: - * @task: Task to broadcast - * - * Send a broadcast signal to all waiting task conds - */ -#define GST_TASK_BROADCAST(task) g_cond_broadcast(GST_TASK_GET_COND (task)) - -/** - * GST_TASK_GET_LOCK: - * @task: Task to get the lock of - * - * Get access to the task lock. - */ -#define GST_TASK_GET_LOCK(task) (GST_TASK_CAST(task)->lock) - -/** - * GstTaskThreadFunc: - * @task: The #GstTask - * @thread: The #GThread - * @user_data: user data - * - * Custom GstTask thread callback functions that can be installed. - */ -typedef void (*GstTaskThreadFunc) (GstTask *task, GThread *thread, gpointer user_data); - -/** - * GstTask: - * @state: the state of the task - * @cond: used to pause/resume the task - * @lock: The lock taken when iterating the task function - * @func: the function executed by this task - * @user_data: user_data passed to the task function - * @notify: GDestroyNotify for @user_data - * @running: a flag indicating that the task is running - * - * The #GstTask object. - */ -struct _GstTask { - GstObject object; - - /*< public >*/ /* with LOCK */ - GstTaskState state; - GCond cond; - - GRecMutex *lock; - - GstTaskFunction func; - gpointer user_data; - GDestroyNotify notify; - - gboolean running; - - /*< private >*/ - GThread *thread; - - GstTaskPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTaskClass { - GstObjectClass parent_class; - - /*< private >*/ - GstTaskPool *pool; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -void gst_task_cleanup_all (void); - -GType gst_task_get_type (void); - -GstTask* gst_task_new (GstTaskFunction func, - gpointer user_data, GDestroyNotify notify); - -void gst_task_set_lock (GstTask *task, GRecMutex *mutex); - -GstTaskPool * gst_task_get_pool (GstTask *task); -void gst_task_set_pool (GstTask *task, GstTaskPool *pool); - -void gst_task_set_enter_callback (GstTask *task, - GstTaskThreadFunc enter_func, - gpointer user_data, - GDestroyNotify notify); -void gst_task_set_leave_callback (GstTask *task, - GstTaskThreadFunc leave_func, - gpointer user_data, - GDestroyNotify notify); - -GstTaskState gst_task_get_state (GstTask *task); -gboolean gst_task_set_state (GstTask *task, GstTaskState state); - -gboolean gst_task_start (GstTask *task); -gboolean gst_task_stop (GstTask *task); -gboolean gst_task_pause (GstTask *task); - -gboolean gst_task_join (GstTask *task); - -G_END_DECLS - -#endif /* __GST_TASK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaskpool.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaskpool.h deleted file mode 100644 index 4eccbfb9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttaskpool.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GStreamer - * Copyright (C) <2009> Wim Taymans - * - * gsttaskpool.h: Pool for creating streaming threads - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TASK_POOL_H__ -#define __GST_TASK_POOL_H__ - -#include - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -#define GST_TYPE_TASK_POOL (gst_task_pool_get_type ()) -#define GST_TASK_POOL(pool) (G_TYPE_CHECK_INSTANCE_CAST ((pool), GST_TYPE_TASK_POOL, GstTaskPool)) -#define GST_IS_TASK_POOL(pool) (G_TYPE_CHECK_INSTANCE_TYPE ((pool), GST_TYPE_TASK_POOL)) -#define GST_TASK_POOL_CLASS(pclass) (G_TYPE_CHECK_CLASS_CAST ((pclass), GST_TYPE_TASK_POOL, GstTaskPoolClass)) -#define GST_IS_TASK_POOL_CLASS(pclass) (G_TYPE_CHECK_CLASS_TYPE ((pclass), GST_TYPE_TASK_POOL)) -#define GST_TASK_POOL_GET_CLASS(pool) (G_TYPE_INSTANCE_GET_CLASS ((pool), GST_TYPE_TASK_POOL, GstTaskPoolClass)) -#define GST_TASK_POOL_CAST(pool) ((GstTaskPool*)(pool)) - -typedef struct _GstTaskPool GstTaskPool; -typedef struct _GstTaskPoolClass GstTaskPoolClass; - -/** - * GstTaskPoolFunction: - * @user_data: user data for the task function - * - * Task function, see gst_task_pool_push(). - */ -typedef void (*GstTaskPoolFunction) (void *user_data); - -/** - * GstTaskPool: - * - * The #GstTaskPool object. - */ -struct _GstTaskPool { - GstObject object; - - /*< private >*/ - GThreadPool *pool; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstTaskPoolClass: - * @parent_class: the parent class structure - * @prepare: prepare the threadpool - * @cleanup: make sure all threads are stopped - * @push: start a new thread - * @join: join a thread - * - * The #GstTaskPoolClass object. - */ -struct _GstTaskPoolClass { - GstObjectClass parent_class; - - /*< public >*/ - void (*prepare) (GstTaskPool *pool, GError **error); - void (*cleanup) (GstTaskPool *pool); - - gpointer (*push) (GstTaskPool *pool, GstTaskPoolFunction func, - gpointer user_data, GError **error); - void (*join) (GstTaskPool *pool, gpointer id); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_task_pool_get_type (void); - -GstTaskPool * gst_task_pool_new (void); -void gst_task_pool_prepare (GstTaskPool *pool, GError **error); - -gpointer gst_task_pool_push (GstTaskPool *pool, GstTaskPoolFunction func, - gpointer user_data, GError **error); -void gst_task_pool_join (GstTaskPool *pool, gpointer id); - -void gst_task_pool_cleanup (GstTaskPool *pool); - -G_END_DECLS - -#endif /* __GST_TASK_POOL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttoc.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttoc.h deleted file mode 100644 index 9439cca2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttoc.h +++ /dev/null @@ -1,142 +0,0 @@ -/* GStreamer - * (c) 2010, 2012 Alexander Saprykin - * - * gsttoc.h: generic TOC API declaration - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TOC_H__ -#define __GST_TOC_H__ - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TOC (gst_toc_get_type ()) -#define GST_TYPE_TOC_ENTRY (gst_toc_entry_get_type ()) - -typedef struct _GstTocEntry GstTocEntry; -typedef struct _GstToc GstToc; - -/** - * GstTocScope: - * @GST_TOC_SCOPE_GLOBAL: global TOC representing all selectable options - * (this is what applications are usually interested in) - * @GST_TOC_SCOPE_CURRENT: TOC for the currently active/selected stream - * (this is a TOC representing the current stream from start to EOS, - * and is what a TOC writer / muxer is usually interested in; it will - * usually be a subset of the global TOC, e.g. just the chapters of - * the current title, or the chapters selected for playback from the - * current title) - * - * The scope of a TOC. - */ -typedef enum { - GST_TOC_SCOPE_GLOBAL = 1, - GST_TOC_SCOPE_CURRENT = 2 -} GstTocScope; - -/** - * GstTocEntryType: - * @GST_TOC_ENTRY_TYPE_ANGLE: entry is an angle (i.e. an alternative) - * @GST_TOC_ENTRY_TYPE_VERSION: entry is a version (i.e. alternative) - * @GST_TOC_ENTRY_TYPE_EDITION: entry is an edition (i.e. alternative) - * @GST_TOC_ENTRY_TYPE_INVALID: invalid entry type value - * @GST_TOC_ENTRY_TYPE_TITLE: entry is a title (i.e. a part of a sequence) - * @GST_TOC_ENTRY_TYPE_TRACK: entry is a track (i.e. a part of a sequence) - * @GST_TOC_ENTRY_TYPE_CHAPTER: entry is a chapter (i.e. a part of a sequence) - * - * The different types of TOC entries (see #GstTocEntry). - * - * There are two types of TOC entries: alternatives or parts in a sequence. - */ -typedef enum { - GST_TOC_ENTRY_TYPE_ANGLE = -3, - GST_TOC_ENTRY_TYPE_VERSION = -2, - GST_TOC_ENTRY_TYPE_EDITION = -1, - GST_TOC_ENTRY_TYPE_INVALID = 0, - GST_TOC_ENTRY_TYPE_TITLE = 1, - GST_TOC_ENTRY_TYPE_TRACK = 2, - GST_TOC_ENTRY_TYPE_CHAPTER = 3, -} GstTocEntryType; - -#define GST_TOC_ENTRY_TYPE_IS_ALTERNATIVE(entry_type) (entry_type < 0) -#define GST_TOC_ENTRY_TYPE_IS_SEQUENCE(entry_type) (entry_type > 0) - -/* functions to return type structures */ -GType gst_toc_get_type (void); -GType gst_toc_entry_get_type (void); - -/* functions to create, ref and unref/free TOCs */ -GstToc * gst_toc_new (GstTocScope scope); - -GstTocScope gst_toc_get_scope (const GstToc *toc); - -void gst_toc_set_tags (GstToc *toc, GstTagList * tags); -void gst_toc_merge_tags (GstToc *toc, GstTagList *tags, GstTagMergeMode mode); -GstTagList * gst_toc_get_tags (const GstToc *toc); - -void gst_toc_append_entry (GstToc *toc, GstTocEntry *entry); -GList * gst_toc_get_entries (const GstToc *toc); - -void gst_toc_dump (GstToc *toc); - -#define gst_toc_ref(toc) (GstToc*)gst_mini_object_ref(GST_MINI_OBJECT_CAST(toc)) -#define gst_toc_unref(toc) gst_mini_object_unref(GST_MINI_OBJECT_CAST(toc)) -#define gst_toc_copy(toc) (GstToc*)gst_mini_object_copy(GST_MINI_OBJECT_CAST(toc)) -#define gst_toc_make_writable(toc) (GstToc*)gst_mini_object_make_writable(GST_MINI_OBJECT_CAST(toc)) - -/* functions to create, ref and unref/free TOC entries */ -GstTocEntry * gst_toc_entry_new (GstTocEntryType type, const gchar *uid); - -#define gst_toc_entry_ref(entry) (GstTocEntry*)gst_mini_object_ref(GST_MINI_OBJECT_CAST(entry)) -#define gst_toc_entry_unref(entry) gst_mini_object_unref(GST_MINI_OBJECT_CAST(entry)) -#define gst_toc_entry_copy(entry) (GstTocEntry*)gst_mini_object_copy(GST_MINI_OBJECT_CAST(entry)) -#define gst_toc_entry_make_writable(entry) (GstTocEntry*)gst_mini_object_make_writable(GST_MINI_OBJECT_CAST(entry)) - -GstTocEntry * gst_toc_find_entry (const GstToc *toc, const gchar *uid); - -GstTocEntryType gst_toc_entry_get_entry_type (const GstTocEntry *entry); -const gchar * gst_toc_entry_get_uid (const GstTocEntry *entry); - -void gst_toc_entry_append_sub_entry (GstTocEntry *entry, GstTocEntry *subentry); -GList * gst_toc_entry_get_sub_entries (const GstTocEntry *entry); - -void gst_toc_entry_set_tags (GstTocEntry *entry, GstTagList *tags); -void gst_toc_entry_merge_tags (GstTocEntry *entry, GstTagList *tags, GstTagMergeMode mode); -GstTagList * gst_toc_entry_get_tags (const GstTocEntry *entry); - -gboolean gst_toc_entry_is_alternative (const GstTocEntry *entry); -gboolean gst_toc_entry_is_sequence (const GstTocEntry *entry); - -void gst_toc_entry_set_start_stop_times (GstTocEntry *entry, gint64 start, gint64 stop); -gboolean gst_toc_entry_get_start_stop_times (const GstTocEntry *entry, gint64 *start, gint64 *stop); - -GstToc * gst_toc_entry_get_toc (GstTocEntry *entry); -GstTocEntry * gst_toc_entry_get_parent (GstTocEntry *entry); - - -const gchar * gst_toc_entry_type_get_nick (GstTocEntryType type); - -G_END_DECLS - -#endif /* __GST_TOC_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttocsetter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttocsetter.h deleted file mode 100644 index 9c59fa56..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttocsetter.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GStreamer - * Copyright (C) 2010, 2012 Alexander Saprykin - * - * gsttocsetter.h: Interfaces for TOC - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TOC_SETTER_H__ -#define __GST_TOC_SETTER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TOC_SETTER (gst_toc_setter_get_type ()) -#define GST_TOC_SETTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TOC_SETTER, GstTocSetter)) -#define GST_IS_TOC_SETTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TOC_SETTER)) -#define GST_TOC_SETTER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_TOC_SETTER, GstTocSetterInterface)) -/** - * GstTocSetter: - * - * Opaque #GstTocSetter data structure. - */ -typedef struct _GstTocSetter GstTocSetter; -typedef struct _GstTocSetterInterface GstTocSetterInterface; - -/** - * GstTocSetterInterface: - * @g_iface: parent interface type. - * - * #GstTocSetterInterface interface. - */ - -struct _GstTocSetterInterface -{ - GTypeInterface g_iface; - - /* signals */ - - /* virtual table */ -}; - -GType gst_toc_setter_get_type (void); - -void gst_toc_setter_reset (GstTocSetter *setter); - -GstToc * gst_toc_setter_get_toc (GstTocSetter *setter); - -void gst_toc_setter_set_toc (GstTocSetter *setter, GstToc *toc); - -G_END_DECLS - -#endif /* __GST_TOC_SETTER_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefind.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefind.h deleted file mode 100644 index 0a987e4a..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefind.h +++ /dev/null @@ -1,124 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttypefind.h: typefinding subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TYPE_FIND_H__ -#define __GST_TYPE_FIND_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TYPE_FIND (gst_type_find_get_type()) - -typedef struct _GstTypeFind GstTypeFind; - -/** - * GstTypeFindFunction: - * @find: A #GstTypeFind structure - * @user_data: optionnal data to pass to the function - * - * A function that will be called by typefinding. - */ -typedef void (* GstTypeFindFunction) (GstTypeFind *find, gpointer user_data); - -/** - * GstTypeFindProbability: - * @GST_TYPE_FIND_NONE: type undetected. - * @GST_TYPE_FIND_MINIMUM: unlikely typefind. - * @GST_TYPE_FIND_POSSIBLE: possible type detected. - * @GST_TYPE_FIND_LIKELY: likely a type was detected. - * @GST_TYPE_FIND_NEARLY_CERTAIN: nearly certain that a type was detected. - * @GST_TYPE_FIND_MAXIMUM: very certain a type was detected. - * - * The probability of the typefind function. Higher values have more certainty - * in doing a reliable typefind. - */ -typedef enum { - GST_TYPE_FIND_NONE = 0, - GST_TYPE_FIND_MINIMUM = 1, - GST_TYPE_FIND_POSSIBLE = 50, - GST_TYPE_FIND_LIKELY = 80, - GST_TYPE_FIND_NEARLY_CERTAIN = 99, - GST_TYPE_FIND_MAXIMUM = 100 -} GstTypeFindProbability; - -/** - * GstTypeFind: - * @peek: Method to peek data. - * @suggest: Method to suggest #GstCaps with a given probability. - * @data: The data used by the caller of the typefinding function. - * @get_length: Returns the length of current data. - * - * Object that stores typefind callbacks. To use with #GstTypeFindFactory. - */ -struct _GstTypeFind { - /* private to the caller of the typefind function */ - const guint8 * (* peek) (gpointer data, - gint64 offset, - guint size); - - void (* suggest) (gpointer data, - guint probability, - GstCaps *caps); - - gpointer data; - - /* optional */ - guint64 (* get_length) (gpointer data); - - /* */ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_type_find_get_type (void); - -/* typefind function interface */ -const guint8 * gst_type_find_peek (GstTypeFind * find, - gint64 offset, - guint size); - -void gst_type_find_suggest (GstTypeFind * find, - guint probability, - GstCaps * caps); - -void gst_type_find_suggest_simple (GstTypeFind * find, - guint probability, - const char * media_type, - const char * fieldname, ...); - -guint64 gst_type_find_get_length (GstTypeFind * find); - -/* registration interface */ -gboolean gst_type_find_register (GstPlugin * plugin, - const gchar * name, - guint rank, - GstTypeFindFunction func, - const gchar * extensions, - GstCaps * possible_caps, - gpointer data, - GDestroyNotify data_notify); - -G_END_DECLS - -#endif /* __GST_TYPE_FIND_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefindfactory.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefindfactory.h deleted file mode 100644 index 332134bf..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsttypefindfactory.h +++ /dev/null @@ -1,62 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttypefindfactory.h: typefinding subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TYPE_FIND_FACTORY_H__ -#define __GST_TYPE_FIND_FACTORY_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TYPE_FIND_FACTORY (gst_type_find_factory_get_type()) -#define GST_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactory)) -#define GST_IS_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TYPE_FIND_FACTORY)) -#define GST_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) -#define GST_IS_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TYPE_FIND_FACTORY)) -#define GST_TYPE_FIND_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) - -/** - * GstTypeFindFactory: - * - * Opaque object that stores information about a typefind function. - */ -typedef struct _GstTypeFindFactory GstTypeFindFactory; -typedef struct _GstTypeFindFactoryClass GstTypeFindFactoryClass; - -/* typefinding interface */ - -GType gst_type_find_factory_get_type (void); - -GList * gst_type_find_factory_get_list (void); - -const gchar * const * gst_type_find_factory_get_extensions (GstTypeFindFactory *factory); - -GstCaps * gst_type_find_factory_get_caps (GstTypeFindFactory *factory); -gboolean gst_type_find_factory_has_function (GstTypeFindFactory *factory); -void gst_type_find_factory_call_function (GstTypeFindFactory *factory, - GstTypeFind *find); - -G_END_DECLS - -#endif /* __GST_TYPE_FIND_FACTORY_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsturi.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsturi.h deleted file mode 100644 index d140c3d4..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gsturi.h +++ /dev/null @@ -1,156 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gsturi.h: Header for uri to element mappings - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_URI_H__ -#define __GST_URI_H__ - -#include -#include - -G_BEGIN_DECLS - -GQuark gst_uri_error_quark (void); - -/** - * GST_URI_ERROR: - * - * Get access to the error quark of the uri subsystem. - */ -#define GST_URI_ERROR gst_uri_error_quark () - -/** - * GstURIError: - * @GST_URI_ERROR_UNSUPPORTED_PROTOCOL: The protocol is not supported - * @GST_URI_ERROR_BAD_URI: There was a problem with the URI - * @GST_URI_ERROR_BAD_STATE: Could not set or change the URI because the - * URI handler was in a state where that is not possible or not permitted - * @GST_URI_ERROR_BAD_REFERENCE: There was a problem with the entity that - * the URI references - * - * Different URI-related errors that can occur. - */ -typedef enum -{ - GST_URI_ERROR_UNSUPPORTED_PROTOCOL, - GST_URI_ERROR_BAD_URI, - GST_URI_ERROR_BAD_STATE, - GST_URI_ERROR_BAD_REFERENCE -} GstURIError; - -/** - * GstURIType: - * @GST_URI_UNKNOWN: The URI direction is unknown - * @GST_URI_SINK: The URI is a consumer. - * @GST_URI_SRC: The URI is a producer. - * - * The different types of URI direction. - */ - -typedef enum { - GST_URI_UNKNOWN, - GST_URI_SINK, - GST_URI_SRC -} GstURIType; - -/** - * GST_URI_TYPE_IS_VALID: - * @type: A #GstURIType - * - * Tests if the type direction is valid. - */ -#define GST_URI_TYPE_IS_VALID(type) ((type) == GST_URI_SRC || (type) == GST_URI_SINK) - -/* uri handler functions */ -#define GST_TYPE_URI_HANDLER (gst_uri_handler_get_type ()) -#define GST_URI_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_URI_HANDLER, GstURIHandler)) -#define GST_IS_URI_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_URI_HANDLER)) -#define GST_URI_HANDLER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_URI_HANDLER, GstURIHandlerInterface)) - -/** - * GstURIHandler: - * - * Opaque #GstURIHandler structure. - */ -typedef struct _GstURIHandler GstURIHandler; -typedef struct _GstURIHandlerInterface GstURIHandlerInterface; - -/** - * GstURIHandlerInterface: - * @parent: The parent interface type - * @get_type: Method to tell whether the element handles source or sink URI. - * @get_protocols: Method to return the list of protocols handled by the element. - * @get_uri: Method to return the URI currently handled by the element. - * @set_uri: Method to set a new URI. - * - * Any #GstElement using this interface should implement these methods. - */ -struct _GstURIHandlerInterface { - GTypeInterface parent; - - /* vtable */ - /*< public >*/ - /* querying capabilities */ - GstURIType (* get_type) (GType type); - const gchar * const * (* get_protocols) (GType type); - - /* using the interface */ - gchar * (* get_uri) (GstURIHandler * handler); - gboolean (* set_uri) (GstURIHandler * handler, - const gchar * uri, - GError ** error); -}; - -/* general URI functions */ - -gboolean gst_uri_protocol_is_valid (const gchar * protocol); -gboolean gst_uri_protocol_is_supported (const GstURIType type, - const gchar *protocol); -gboolean gst_uri_is_valid (const gchar * uri); -gchar * gst_uri_get_protocol (const gchar * uri) G_GNUC_MALLOC; -gboolean gst_uri_has_protocol (const gchar * uri, - const gchar * protocol); -gchar * gst_uri_get_location (const gchar * uri) G_GNUC_MALLOC; -gchar * gst_uri_construct (const gchar * protocol, - const gchar * location) G_GNUC_MALLOC; - -gchar * gst_filename_to_uri (const gchar * filename, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_element_make_from_uri (const GstURIType type, - const gchar * uri, - const gchar * elementname, - GError ** error) G_GNUC_MALLOC; - -/* accessing the interface */ -GType gst_uri_handler_get_type (void); - -GstURIType gst_uri_handler_get_uri_type (GstURIHandler * handler); -const gchar * const * gst_uri_handler_get_protocols (GstURIHandler * handler); -gchar * gst_uri_handler_get_uri (GstURIHandler * handler) G_GNUC_MALLOC; -gboolean gst_uri_handler_set_uri (GstURIHandler * handler, - const gchar * uri, - GError ** error); - -G_END_DECLS - -#endif /* __GST_URI_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstutils.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstutils.h deleted file mode 100644 index 269b3752..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstutils.h +++ /dev/null @@ -1,948 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2002 Thomas Vander Stichele - * - * gstutils.h: Header for various utility functions - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_UTILS_H__ -#define __GST_UTILS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -void gst_util_set_value_from_string (GValue *value, const gchar *value_str); -void gst_util_set_object_arg (GObject *object, const gchar *name, const gchar *value); -void gst_util_dump_mem (const guchar *mem, guint size); - -guint64 gst_util_gdouble_to_guint64 (gdouble value) G_GNUC_CONST; -gdouble gst_util_guint64_to_gdouble (guint64 value) G_GNUC_CONST; - -/** - * gst_guint64_to_gdouble: - * @value: the #guint64 value to convert - * - * Convert @value to a gdouble. - * - * Returns: @value converted to a #gdouble. - */ - -/** - * gst_gdouble_to_guint64: - * @value: the #gdouble value to convert - * - * Convert @value to a guint64. - * - * Returns: @value converted to a #guint64. - */ -#ifdef WIN32 -#define gst_gdouble_to_guint64(value) gst_util_gdouble_to_guint64(value) -#define gst_guint64_to_gdouble(value) gst_util_guint64_to_gdouble(value) -#else -#define gst_gdouble_to_guint64(value) ((guint64) (value)) -#define gst_guint64_to_gdouble(value) ((gdouble) (value)) -#endif - -guint64 gst_util_uint64_scale (guint64 val, guint64 num, guint64 denom); -guint64 gst_util_uint64_scale_round (guint64 val, guint64 num, guint64 denom); -guint64 gst_util_uint64_scale_ceil (guint64 val, guint64 num, guint64 denom); - -guint64 gst_util_uint64_scale_int (guint64 val, gint num, gint denom); -guint64 gst_util_uint64_scale_int_round (guint64 val, gint num, gint denom); -guint64 gst_util_uint64_scale_int_ceil (guint64 val, gint num, gint denom); - -guint32 gst_util_seqnum_next (void); -gint32 gst_util_seqnum_compare (guint32 s1, guint32 s2); - - -/** - * GST_CALL_PARENT: - * @parent_class_cast: the name of the class cast macro for the parent type - * @name: name of the function to call - * @args: arguments enclosed in '( )' - * - * Just call the parent handler. This assumes that there is a variable - * named parent_class that points to the (duh!) parent class. Note that - * this macro is not to be used with things that return something, use - * the _WITH_DEFAULT version for that - */ -#define GST_CALL_PARENT(parent_class_cast, name, args) \ - ((parent_class_cast(parent_class)->name != NULL) ? \ - parent_class_cast(parent_class)->name args : (void) 0) - -/** - * GST_CALL_PARENT_WITH_DEFAULT: - * @parent_class_cast: the name of the class cast macro for the parent type - * @name: name of the function to call - * @args: arguments enclosed in '( )' - * @def_return: default result - * - * Same as GST_CALL_PARENT(), but in case there is no implementation, it - * evaluates to @def_return. - */ -#define GST_CALL_PARENT_WITH_DEFAULT(parent_class_cast, name, args, def_return)\ - ((parent_class_cast(parent_class)->name != NULL) ? \ - parent_class_cast(parent_class)->name args : def_return) - -/* Define PUT and GET functions for unaligned memory */ -#define _GST_GET(__data, __idx, __size, __shift) \ - (((guint##__size) (((const guint8 *) (__data))[__idx])) << (__shift)) - -#define _GST_PUT(__data, __idx, __size, __shift, __num) \ - (((guint8 *) (__data))[__idx] = (((guint##__size) (__num)) >> (__shift)) & 0xff) - -#if GST_HAVE_UNALIGNED_ACCESS -static inline guint16 __gst_fast_read16(const guint8 *v) { - return *(const guint16*)(v); -} -static inline guint32 __gst_fast_read32(const guint8 *v) { - return *(const guint32*)(v); -} -static inline guint64 __gst_fast_read64(const guint8 *v) { - return *(const guint64*)(v); -} -static inline guint16 __gst_fast_read_swap16(const guint8 *v) { - return GUINT16_SWAP_LE_BE(*(const guint16*)(v)); -} -static inline guint32 __gst_fast_read_swap32(const guint8 *v) { - return GUINT32_SWAP_LE_BE(*(const guint32*)(v)); -} -static inline guint64 __gst_fast_read_swap64(const guint8 *v) { - return GUINT64_SWAP_LE_BE(*(const guint64*)(v)); -} -# define _GST_FAST_READ(s, d) __gst_fast_read##s((const guint8 *)(d)) -# define _GST_FAST_READ_SWAP(s, d) __gst_fast_read_swap##s((const guint8 *)(d)) -#endif - - -/** - * GST_READ_UINT64_BE: - * @data: memory location - * - * Read a 64 bit unsigned integer value in big endian format from the memory buffer. - */ - -/** - * GST_READ_UINT64_LE: - * @data: memory location - * - * Read a 64 bit unsigned integer value in little endian format from the memory buffer. - */ -#if GST_HAVE_UNALIGNED_ACCESS -# if (G_BYTE_ORDER == G_BIG_ENDIAN) -# define GST_READ_UINT64_BE(data) _GST_FAST_READ (64, data) -# define GST_READ_UINT64_LE(data) _GST_FAST_READ_SWAP (64, data) -# else -# define GST_READ_UINT64_BE(data) _GST_FAST_READ_SWAP (64, data) -# define GST_READ_UINT64_LE(data) _GST_FAST_READ (64, data) -# endif -#else -# define GST_READ_UINT64_BE(data) (_GST_GET (data, 0, 64, 56) | \ - _GST_GET (data, 1, 64, 48) | \ - _GST_GET (data, 2, 64, 40) | \ - _GST_GET (data, 3, 64, 32) | \ - _GST_GET (data, 4, 64, 24) | \ - _GST_GET (data, 5, 64, 16) | \ - _GST_GET (data, 6, 64, 8) | \ - _GST_GET (data, 7, 64, 0)) - -# define GST_READ_UINT64_LE(data) (_GST_GET (data, 7, 64, 56) | \ - _GST_GET (data, 6, 64, 48) | \ - _GST_GET (data, 5, 64, 40) | \ - _GST_GET (data, 4, 64, 32) | \ - _GST_GET (data, 3, 64, 24) | \ - _GST_GET (data, 2, 64, 16) | \ - _GST_GET (data, 1, 64, 8) | \ - _GST_GET (data, 0, 64, 0)) -#endif - -/** - * GST_READ_UINT32_BE: - * @data: memory location - * - * Read a 32 bit unsigned integer value in big endian format from the memory buffer. - */ - -/** - * GST_READ_UINT32_LE: - * @data: memory location - * - * Read a 32 bit unsigned integer value in little endian format from the memory buffer. - */ -#if GST_HAVE_UNALIGNED_ACCESS -# if (G_BYTE_ORDER == G_BIG_ENDIAN) -# define GST_READ_UINT32_BE(data) _GST_FAST_READ (32, data) -# define GST_READ_UINT32_LE(data) _GST_FAST_READ_SWAP (32, data) -# else -# define GST_READ_UINT32_BE(data) _GST_FAST_READ_SWAP (32, data) -# define GST_READ_UINT32_LE(data) _GST_FAST_READ (32, data) -# endif -#else -# define GST_READ_UINT32_BE(data) (_GST_GET (data, 0, 32, 24) | \ - _GST_GET (data, 1, 32, 16) | \ - _GST_GET (data, 2, 32, 8) | \ - _GST_GET (data, 3, 32, 0)) - -# define GST_READ_UINT32_LE(data) (_GST_GET (data, 3, 32, 24) | \ - _GST_GET (data, 2, 32, 16) | \ - _GST_GET (data, 1, 32, 8) | \ - _GST_GET (data, 0, 32, 0)) -#endif - -/** - * GST_READ_UINT24_BE: - * @data: memory location - * - * Read a 24 bit unsigned integer value in big endian format from the memory buffer. - */ -#define GST_READ_UINT24_BE(data) (_GST_GET (data, 0, 32, 16) | \ - _GST_GET (data, 1, 32, 8) | \ - _GST_GET (data, 2, 32, 0)) - -/** - * GST_READ_UINT24_LE: - * @data: memory location - * - * Read a 24 bit unsigned integer value in little endian format from the memory buffer. - */ -#define GST_READ_UINT24_LE(data) (_GST_GET (data, 2, 32, 16) | \ - _GST_GET (data, 1, 32, 8) | \ - _GST_GET (data, 0, 32, 0)) - -/** - * GST_READ_UINT16_BE: - * @data: memory location - * - * Read a 16 bit unsigned integer value in big endian format from the memory buffer. - */ -/** - * GST_READ_UINT16_LE: - * @data: memory location - * - * Read a 16 bit unsigned integer value in little endian format from the memory buffer. - */ -#if GST_HAVE_UNALIGNED_ACCESS -# if (G_BYTE_ORDER == G_BIG_ENDIAN) -# define GST_READ_UINT16_BE(data) _GST_FAST_READ (16, data) -# define GST_READ_UINT16_LE(data) _GST_FAST_READ_SWAP (16, data) -# else -# define GST_READ_UINT16_BE(data) _GST_FAST_READ_SWAP (16, data) -# define GST_READ_UINT16_LE(data) _GST_FAST_READ (16, data) -# endif -#else -# define GST_READ_UINT16_BE(data) (_GST_GET (data, 0, 16, 8) | \ - _GST_GET (data, 1, 16, 0)) - -# define GST_READ_UINT16_LE(data) (_GST_GET (data, 1, 16, 8) | \ - _GST_GET (data, 0, 16, 0)) -#endif - -/** - * GST_READ_UINT8: - * @data: memory location - * - * Read an 8 bit unsigned integer value from the memory buffer. - */ -#define GST_READ_UINT8(data) (_GST_GET (data, 0, 8, 0)) - -/** - * GST_WRITE_UINT64_BE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT64_BE(data, num) do { \ - _GST_PUT (data, 0, 64, 56, num); \ - _GST_PUT (data, 1, 64, 48, num); \ - _GST_PUT (data, 2, 64, 40, num); \ - _GST_PUT (data, 3, 64, 32, num); \ - _GST_PUT (data, 4, 64, 24, num); \ - _GST_PUT (data, 5, 64, 16, num); \ - _GST_PUT (data, 6, 64, 8, num); \ - _GST_PUT (data, 7, 64, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT64_LE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT64_LE(data, num) do { \ - _GST_PUT (data, 0, 64, 0, num); \ - _GST_PUT (data, 1, 64, 8, num); \ - _GST_PUT (data, 2, 64, 16, num); \ - _GST_PUT (data, 3, 64, 24, num); \ - _GST_PUT (data, 4, 64, 32, num); \ - _GST_PUT (data, 5, 64, 40, num); \ - _GST_PUT (data, 6, 64, 48, num); \ - _GST_PUT (data, 7, 64, 56, num); \ - } while (0) - -/** - * GST_WRITE_UINT32_BE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT32_BE(data, num) do { \ - _GST_PUT (data, 0, 32, 24, num); \ - _GST_PUT (data, 1, 32, 16, num); \ - _GST_PUT (data, 2, 32, 8, num); \ - _GST_PUT (data, 3, 32, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT32_LE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT32_LE(data, num) do { \ - _GST_PUT (data, 0, 32, 0, num); \ - _GST_PUT (data, 1, 32, 8, num); \ - _GST_PUT (data, 2, 32, 16, num); \ - _GST_PUT (data, 3, 32, 24, num); \ - } while (0) - -/** - * GST_WRITE_UINT24_BE: - * @data: memory location - * @num: value to store - * - * Store a 24 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT24_BE(data, num) do { \ - _GST_PUT (data, 0, 32, 16, num); \ - _GST_PUT (data, 1, 32, 8, num); \ - _GST_PUT (data, 2, 32, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT24_LE: - * @data: memory location - * @num: value to store - * - * Store a 24 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT24_LE(data, num) do { \ - _GST_PUT (data, 0, 32, 0, num); \ - _GST_PUT (data, 1, 32, 8, num); \ - _GST_PUT (data, 2, 32, 16, num); \ - } while (0) - -/** - * GST_WRITE_UINT16_BE: - * @data: memory location - * @num: value to store - * - * Store a 16 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT16_BE(data, num) do { \ - _GST_PUT (data, 0, 16, 8, num); \ - _GST_PUT (data, 1, 16, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT16_LE: - * @data: memory location - * @num: value to store - * - * Store a 16 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT16_LE(data, num) do { \ - _GST_PUT (data, 0, 16, 0, num); \ - _GST_PUT (data, 1, 16, 8, num); \ - } while (0) - -/** - * GST_WRITE_UINT8: - * @data: memory location - * @num: value to store - * - * Store an 8 bit unsigned integer value into the memory buffer. - */ -#define GST_WRITE_UINT8(data, num) do { \ - _GST_PUT (data, 0, 8, 0, num); \ - } while (0) - -/* Float endianness conversion macros */ - -/* FIXME: Remove this once we depend on a GLib version with this */ -#ifndef GFLOAT_FROM_LE -/** - * GFLOAT_SWAP_LE_BE: - * @in: input value - * - * Swap byte order of a 32-bit floating point value (float). - * - * Returns: @in byte-swapped. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gfloat GFLOAT_SWAP_LE_BE (gfloat in); -#endif - -inline static gfloat -GFLOAT_SWAP_LE_BE(gfloat in) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.f = in; - u.i = GUINT32_SWAP_LE_BE (u.i); - return u.f; -} - -/** - * GDOUBLE_SWAP_LE_BE: - * @in: input value - * - * Swap byte order of a 64-bit floating point value (double). - * - * Returns: @in byte-swapped. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gdouble GDOUBLE_SWAP_LE_BE (gdouble in); -#endif - -inline static gdouble -GDOUBLE_SWAP_LE_BE(gdouble in) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.d = in; - u.i = GUINT64_SWAP_LE_BE (u.i); - return u.d; -} - -/** - * GDOUBLE_TO_LE: - * @val: value - * - * Convert 64-bit floating point value (double) from native byte order into - * little endian byte order. - */ -/** - * GDOUBLE_TO_BE: - * @val: value - * - * Convert 64-bit floating point value (double) from native byte order into - * big endian byte order. - */ -/** - * GDOUBLE_FROM_LE: - * @val: value - * - * Convert 64-bit floating point value (double) from little endian byte order - * into native byte order. - */ -/** - * GDOUBLE_FROM_BE: - * @val: value - * - * Convert 64-bit floating point value (double) from big endian byte order - * into native byte order. - */ - -/** - * GFLOAT_TO_LE: - * @val: value - * - * Convert 32-bit floating point value (float) from native byte order into - * little endian byte order. - */ -/** - * GFLOAT_TO_BE: - * @val: value - * - * Convert 32-bit floating point value (float) from native byte order into - * big endian byte order. - */ -/** - * GFLOAT_FROM_LE: - * @val: value - * - * Convert 32-bit floating point value (float) from little endian byte order - * into native byte order. - */ -/** - * GFLOAT_FROM_BE: - * @val: value - * - * Convert 32-bit floating point value (float) from big endian byte order - * into native byte order. - */ - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define GFLOAT_TO_LE(val) ((gfloat) (val)) -#define GFLOAT_TO_BE(val) (GFLOAT_SWAP_LE_BE (val)) -#define GDOUBLE_TO_LE(val) ((gdouble) (val)) -#define GDOUBLE_TO_BE(val) (GDOUBLE_SWAP_LE_BE (val)) - -#elif G_BYTE_ORDER == G_BIG_ENDIAN -#define GFLOAT_TO_LE(val) (GFLOAT_SWAP_LE_BE (val)) -#define GFLOAT_TO_BE(val) ((gfloat) (val)) -#define GDOUBLE_TO_LE(val) (GDOUBLE_SWAP_LE_BE (val)) -#define GDOUBLE_TO_BE(val) ((gdouble) (val)) - -#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ -#error unknown ENDIAN type -#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ - -#define GFLOAT_FROM_LE(val) (GFLOAT_TO_LE (val)) -#define GFLOAT_FROM_BE(val) (GFLOAT_TO_BE (val)) -#define GDOUBLE_FROM_LE(val) (GDOUBLE_TO_LE (val)) -#define GDOUBLE_FROM_BE(val) (GDOUBLE_TO_BE (val)) - -#endif /* !defined(GFLOAT_FROM_LE) */ - -/** - * GST_READ_FLOAT_LE: - * @data: memory location - * - * Read a 32 bit float value in little endian format from the memory buffer. - * - * Returns: The floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gfloat GST_READ_FLOAT_LE (const guint8 *data); -#endif - -inline static gfloat -GST_READ_FLOAT_LE(const guint8 *data) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.i = GST_READ_UINT32_LE (data); - return u.f; -} - -/** - * GST_READ_FLOAT_BE: - * @data: memory location - * - * Read a 32 bit float value in big endian format from the memory buffer. - * - * Returns: The floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gfloat GST_READ_FLOAT_BE (const guint8 *data); -#endif - -inline static gfloat -GST_READ_FLOAT_BE(const guint8 *data) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.i = GST_READ_UINT32_BE (data); - return u.f; -} - -/** - * GST_READ_DOUBLE_LE: - * @data: memory location - * - * Read a 64 bit double value in little endian format from the memory buffer. - * - * Returns: The double-precision floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gdouble GST_READ_DOUBLE_LE (const guint8 *data); -#endif - -inline static gdouble -GST_READ_DOUBLE_LE(const guint8 *data) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.i = GST_READ_UINT64_LE (data); - return u.d; -} - -/** - * GST_READ_DOUBLE_BE: - * @data: memory location - * - * Read a 64 bit double value in big endian format from the memory buffer. - * - * Returns: The double-precision floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gdouble GST_READ_DOUBLE_BE (const guint8 *data); -#endif - -inline static gdouble -GST_READ_DOUBLE_BE(const guint8 *data) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.i = GST_READ_UINT64_BE (data); - return u.d; -} - -/** - * GST_WRITE_FLOAT_LE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit float value in little endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_FLOAT_LE (guint8 *data, gfloat num); -#endif - -inline static void -GST_WRITE_FLOAT_LE(guint8 *data, gfloat num) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.f = num; - GST_WRITE_UINT32_LE (data, u.i); -} - -/** - * GST_WRITE_FLOAT_BE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit float value in big endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_FLOAT_BE (guint8 *data, gfloat num); -#endif - -inline static void -GST_WRITE_FLOAT_BE(guint8 *data, gfloat num) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.f = num; - GST_WRITE_UINT32_BE (data, u.i); -} - -/** - * GST_WRITE_DOUBLE_LE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit double value in little endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_DOUBLE_LE (guint8 *data, gdouble num); -#endif - -inline static void -GST_WRITE_DOUBLE_LE(guint8 *data, gdouble num) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.d = num; - GST_WRITE_UINT64_LE (data, u.i); -} - -/** - * GST_WRITE_DOUBLE_BE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit double value in big endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_DOUBLE_BE (guint8 *data, gdouble num); -#endif - -inline static void -GST_WRITE_DOUBLE_BE(guint8 *data, gdouble num) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.d = num; - GST_WRITE_UINT64_BE (data, u.i); -} - -/* Miscellaneous utility macros */ - -/** - * GST_ROUND_UP_2: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 2. - */ -#define GST_ROUND_UP_2(num) (((num)+1)&~1) -/** - * GST_ROUND_UP_4: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 4. - */ -#define GST_ROUND_UP_4(num) (((num)+3)&~3) -/** - * GST_ROUND_UP_8: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 8. - */ -#define GST_ROUND_UP_8(num) (((num)+7)&~7) -/** - * GST_ROUND_UP_16: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 16. - */ -#define GST_ROUND_UP_16(num) (((num)+15)&~15) -/** - * GST_ROUND_UP_32: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 32. - */ -#define GST_ROUND_UP_32(num) (((num)+31)&~31) -/** - * GST_ROUND_UP_64: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 64. - */ -#define GST_ROUND_UP_64(num) (((num)+63)&~63) - -/** - * GST_ROUND_DOWN_2: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 2. - */ -#define GST_ROUND_DOWN_2(num) ((num)&(~1)) -/** - * GST_ROUND_DOWN_4: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 4. - */ -#define GST_ROUND_DOWN_4(num) ((num)&(~3)) -/** - * GST_ROUND_DOWN_8: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 8. - */ -#define GST_ROUND_DOWN_8(num) ((num)&(~7)) -/** - * GST_ROUND_DOWN_16: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 16. - */ -#define GST_ROUND_DOWN_16(num) ((num)&(~15)) -/** - * GST_ROUND_DOWN_32: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 32. - */ -#define GST_ROUND_DOWN_32(num) ((num)&(~31)) -/** - * GST_ROUND_DOWN_64: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 64. - */ -#define GST_ROUND_DOWN_64(num) ((num)&(~63)) - -void gst_object_default_error (GstObject * source, - const GError * error, - const gchar * debug); - -/* element functions */ -void gst_element_create_all_pads (GstElement *element); -GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad, - GstCaps *caps); - -GstPadTemplate* gst_element_get_compatible_pad_template (GstElement *element, GstPadTemplate *compattempl); - -const gchar* gst_element_state_get_name (GstState state); -const gchar * gst_element_state_change_return_get_name (GstStateChangeReturn state_ret); - -gboolean gst_element_link (GstElement *src, GstElement *dest); -gboolean gst_element_link_many (GstElement *element_1, - GstElement *element_2, ...) G_GNUC_NULL_TERMINATED; -gboolean gst_element_link_filtered (GstElement * src, - GstElement * dest, - GstCaps *filter); -void gst_element_unlink (GstElement *src, GstElement *dest); -void gst_element_unlink_many (GstElement *element_1, - GstElement *element_2, ...) G_GNUC_NULL_TERMINATED; - -gboolean gst_element_link_pads (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname); -gboolean gst_element_link_pads_full (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname, - GstPadLinkCheck flags); -void gst_element_unlink_pads (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname); - -gboolean gst_element_link_pads_filtered (GstElement * src, const gchar * srcpadname, - GstElement * dest, const gchar * destpadname, - GstCaps *filter); - -gboolean gst_element_seek_simple (GstElement *element, - GstFormat format, - GstSeekFlags seek_flags, - gint64 seek_pos); - -/* util elementfactory functions */ -gboolean gst_element_factory_can_sink_all_caps (GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_src_all_caps (GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_sink_any_caps (GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_src_any_caps (GstElementFactory *factory, const GstCaps *caps); - -/* util query functions */ -gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur); -gboolean gst_element_query_duration (GstElement *element, GstFormat format, gint64 *duration); -gboolean gst_element_query_convert (GstElement *element, GstFormat src_format, gint64 src_val, - GstFormat dest_format, gint64 *dest_val); - -/* pad functions */ -void gst_pad_use_fixed_caps (GstPad *pad); -GstElement* gst_pad_get_parent_element (GstPad *pad); - -/* util query functions */ -gboolean gst_pad_proxy_query_accept_caps (GstPad *pad, GstQuery *query); -gboolean gst_pad_proxy_query_caps (GstPad *pad, GstQuery *query); - -gboolean gst_pad_query_position (GstPad *pad, GstFormat format, gint64 *cur); -gboolean gst_pad_query_duration (GstPad *pad, GstFormat format, gint64 *duration); -gboolean gst_pad_query_convert (GstPad *pad, GstFormat src_format, gint64 src_val, - GstFormat dest_format, gint64 *dest_val); -GstCaps * gst_pad_query_caps (GstPad *pad, GstCaps *filter); -gboolean gst_pad_query_accept_caps (GstPad *pad, GstCaps *caps); - - -gboolean gst_pad_peer_query_position (GstPad *pad, GstFormat format, gint64 *cur); -gboolean gst_pad_peer_query_duration (GstPad *pad, GstFormat format, gint64 *duration); -gboolean gst_pad_peer_query_convert (GstPad *pad, GstFormat src_format, gint64 src_val, - GstFormat dest_format, gint64 *dest_val); -GstCaps * gst_pad_peer_query_caps (GstPad * pad, GstCaps *filter); -gboolean gst_pad_peer_query_accept_caps (GstPad * pad, GstCaps *caps); - -gchar * gst_pad_create_stream_id (GstPad * pad, GstElement * parent, const gchar *stream_id); -gchar * gst_pad_create_stream_id_printf (GstPad * pad, GstElement * parent, const gchar *stream_id, ...); -gchar * gst_pad_create_stream_id_printf_valist (GstPad * pad, GstElement * parent, const gchar *stream_id, va_list var_args); - -/* bin functions */ -void gst_bin_add_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED; -void gst_bin_remove_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED; -GstPad * gst_bin_find_unlinked_pad (GstBin *bin, GstPadDirection direction); - -/* parse utility functions */ -GstElement * gst_parse_bin_from_description (const gchar * bin_description, - gboolean ghost_unlinked_pads, - GError ** err); - -GstElement * gst_parse_bin_from_description_full (const gchar * bin_description, - gboolean ghost_unlinked_pads, - GstParseContext * context, - GstParseFlags flags, - GError ** err); - -GstClockTime gst_util_get_timestamp (void); - -/** - * GstSearchMode: - * @GST_SEARCH_MODE_EXACT : Only search for exact matches. - * @GST_SEARCH_MODE_BEFORE: Search for an exact match or the element just before. - * @GST_SEARCH_MODE_AFTER : Search for an exact match or the element just after. - * - * The different search modes. - */ -typedef enum { - GST_SEARCH_MODE_EXACT = 0, - GST_SEARCH_MODE_BEFORE, - GST_SEARCH_MODE_AFTER -} GstSearchMode; - -gpointer gst_util_array_binary_search (gpointer array, guint num_elements, - gsize element_size, GCompareDataFunc search_func, - GstSearchMode mode, gconstpointer search_data, - gpointer user_data); - -/* fraction operations */ -gint gst_util_greatest_common_divisor (gint a, gint b); -gint64 gst_util_greatest_common_divisor_int64 (gint64 a, gint64 b); - -void gst_util_fraction_to_double (gint src_n, gint src_d, gdouble *dest); -void gst_util_double_to_fraction (gdouble src, gint *dest_n, gint *dest_d); - -gboolean gst_util_fraction_multiply (gint a_n, gint a_d, gint b_n, gint b_d, - gint *res_n, gint *res_d); -gboolean gst_util_fraction_add (gint a_n, gint a_d, gint b_n, gint b_d, - gint *res_n, gint *res_d); -gint gst_util_fraction_compare (gint a_n, gint a_d, gint b_n, gint b_d); - - -G_END_DECLS - -#endif /* __GST_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstvalue.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstvalue.h deleted file mode 100644 index 4ea492fc..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstvalue.h +++ /dev/null @@ -1,528 +0,0 @@ -/* GStreamer - * Copyright (C) <2003> David A. Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VALUE_H__ -#define __GST_VALUE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GST_MAKE_FOURCC: - * @a: the first character - * @b: the second character - * @c: the third character - * @d: the fourth character - * - * Transform four characters into a #guint32 fourcc value with host - * endianness. - * - * - * guint32 fourcc = GST_MAKE_FOURCC ('M', 'J', 'P', 'G'); - * - * - */ -#define GST_MAKE_FOURCC(a,b,c,d) ((guint32)((a)|(b)<<8|(c)<<16|(d)<<24)) - -/** - * GST_STR_FOURCC: - * @f: a string with at least four characters - * - * Transform an input string into a #guint32 fourcc value with host - * endianness. - * Caller is responsible for ensuring the input string consists of at least - * four characters. - * - * - * guint32 fourcc = GST_STR_FOURCC ("MJPG"); - * - * - */ -#define GST_STR_FOURCC(f) ((guint32)(((f)[0])|((f)[1]<<8)|((f)[2]<<16)|((f)[3]<<24))) - -/** - * GST_FOURCC_FORMAT: - * - * Can be used together with #GST_FOURCC_ARGS to properly output a - * #guint32 fourcc value in a printf()-style text message. - * - * - * printf ("fourcc: %" GST_FOURCC_FORMAT "\n", GST_FOURCC_ARGS (fcc)); - * - * - */ -#define GST_FOURCC_FORMAT "c%c%c%c" - -/** - * GST_FOURCC_ARGS: - * @fourcc: a #guint32 fourcc value to output - * - * Can be used together with #GST_FOURCC_FORMAT to properly output a - * #guint32 fourcc value in a printf()-style text message. - */ -#define GST_FOURCC_ARGS(fourcc) \ - ((gchar) ((fourcc) &0xff)), \ - ((gchar) (((fourcc)>>8 )&0xff)), \ - ((gchar) (((fourcc)>>16)&0xff)), \ - ((gchar) (((fourcc)>>24)&0xff)) - -/** - * GST_VALUE_HOLDS_INT_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_INT_RANGE value. - */ -#define GST_VALUE_HOLDS_INT_RANGE(x) (G_VALUE_HOLDS((x), gst_int_range_get_type ())) - -/** - * GST_VALUE_HOLDS_INT64_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_INT64_RANGE value. - */ -#define GST_VALUE_HOLDS_INT64_RANGE(x) (G_VALUE_HOLDS((x), gst_int64_range_get_type ())) - -/** - * GST_VALUE_HOLDS_DOUBLE_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_DOUBLE_RANGE value. - */ -#define GST_VALUE_HOLDS_DOUBLE_RANGE(x) (G_VALUE_HOLDS((x), gst_double_range_get_type ())) - -/** - * GST_VALUE_HOLDS_FRACTION_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_FRACTION_RANGE value. - */ -#define GST_VALUE_HOLDS_FRACTION_RANGE(x) (G_VALUE_HOLDS((x), gst_fraction_range_get_type ())) - -/** - * GST_VALUE_HOLDS_LIST: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_LIST value. - */ -#define GST_VALUE_HOLDS_LIST(x) (G_VALUE_HOLDS((x), gst_value_list_get_type ())) - -/** - * GST_VALUE_HOLDS_ARRAY: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_ARRAY value. - */ -#define GST_VALUE_HOLDS_ARRAY(x) (G_VALUE_HOLDS((x), gst_value_array_get_type ())) - -/** - * GST_VALUE_HOLDS_CAPS: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_CAPS value. - */ -#define GST_VALUE_HOLDS_CAPS(x) (G_VALUE_HOLDS((x), GST_TYPE_CAPS)) - -/** - * GST_VALUE_HOLDS_STRUCTURE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_STRUCTURE value. - */ -#define GST_VALUE_HOLDS_STRUCTURE(x) (G_VALUE_HOLDS((x), GST_TYPE_STRUCTURE)) - -/** - * GST_VALUE_HOLDS_BUFFER: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_BUFFER value. - */ -#define GST_VALUE_HOLDS_BUFFER(x) (G_VALUE_HOLDS((x), GST_TYPE_BUFFER)) - -/** - * GST_VALUE_HOLDS_SAMPLE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_SAMPLE value. - */ -#define GST_VALUE_HOLDS_SAMPLE(x) (G_VALUE_HOLDS((x), GST_TYPE_SAMPLE)) - -/** - * GST_VALUE_HOLDS_FRACTION: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_FRACTION value. - */ -#define GST_VALUE_HOLDS_FRACTION(x) (G_VALUE_HOLDS((x), gst_fraction_get_type ())) - -/** - * GST_VALUE_HOLDS_DATE_TIME: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_DATE_TIME value. - */ -#define GST_VALUE_HOLDS_DATE_TIME(x) (G_VALUE_HOLDS((x), gst_date_time_get_type ())) - -/** - * GST_VALUE_HOLDS_BITMASK: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_BITMASK value. - */ -#define GST_VALUE_HOLDS_BITMASK(x) (G_VALUE_HOLDS((x), gst_bitmask_get_type ())) - -/** - * GST_TYPE_INT_RANGE: - * - * a #GValue type that represents an integer range - * - * Returns: the #GType of GstIntRange - */ -#define GST_TYPE_INT_RANGE gst_int_range_get_type () - -/** - * GST_TYPE_INT64_RANGE: - * - * a #GValue type that represents an #gint64 range - * - * Returns: the #GType of GstInt64Range - */ -#define GST_TYPE_INT64_RANGE gst_int64_range_get_type () - -/** - * GST_TYPE_DOUBLE_RANGE: - * - * a #GValue type that represents a floating point range with double precission - * - * Returns: the #GType of GstIntRange - */ -#define GST_TYPE_DOUBLE_RANGE gst_double_range_get_type () - -/** - * GST_TYPE_FRACTION_RANGE: - * - * a #GValue type that represents a GstFraction range - * - * Returns: the #GType of GstFractionRange - */ -#define GST_TYPE_FRACTION_RANGE gst_fraction_range_get_type () - -/** - * GST_TYPE_LIST: - * - * a #GValue type that represents an unordered list of #GValue values. This - * is used for example to express a list of possible values for a field in - * a caps structure, like a list of possible sample rates, of which only one - * will be chosen in the end. This means that all values in the list are - * meaningful on their own. - * - * Returns: the #GType of GstValueList (which is not explicitly typed) - */ -#define GST_TYPE_LIST gst_value_list_get_type () - -/** - * GST_TYPE_ARRAY: - * - * a #GValue type that represents an ordered list of #GValue values. This is - * used to express a set of values that is meaningful only in their specific - * combination and order of values. Each value on its own is not particularly - * meaningful, only the ordered array in its entirety is meaningful. This is - * used for example to express channel layouts for multichannel audio where - * each channel needs to be mapped to a position in the room. - * - * Returns: the #GType of GstArrayList (which is not explicitly typed) - */ -#define GST_TYPE_ARRAY gst_value_array_get_type () - -/** - * GST_TYPE_FRACTION: - * - * a #GValue type that represents a fraction of an integer numerator over - * an integer denominator - * - * Returns: the #GType of GstFraction (which is not explicitly typed) - */ - -#define GST_TYPE_FRACTION gst_fraction_get_type () - -/** - * GST_TYPE_DATE_TIME: - * - * a boxed #GValue type for #GstDateTime that represents a date and time. - * - * Returns: the #GType of GstDateTime - */ - -#define GST_TYPE_DATE_TIME gst_date_time_get_type () - -/** - * GST_TYPE_BITMASK: - * - * a #GValue type that represents a 64-bit bitmask. - * - * Returns: the #GType of GstBitmask (which is not explicitly typed) - */ - -#define GST_TYPE_BITMASK gst_bitmask_get_type () - -/** - * GST_VALUE_LESS_THAN: - * - * Indicates that the first value provided to a comparison function - * (gst_value_compare()) is lesser than the second one. - */ -#define GST_VALUE_LESS_THAN (-1) - -/** - * GST_VALUE_EQUAL: - * - * Indicates that the first value provided to a comparison function - * (gst_value_compare()) is equal to the second one. - */ -#define GST_VALUE_EQUAL 0 - -/** - * GST_VALUE_GREATER_THAN: - * - * Indicates that the first value provided to a comparison function - * (gst_value_compare()) is greater than the second one. - */ -#define GST_VALUE_GREATER_THAN 1 - -/** - * GST_VALUE_UNORDERED: - * - * Indicates that the comparison function (gst_value_compare()) can not - * determine a order for the two provided values. - */ -#define GST_VALUE_UNORDERED 2 - -/** - * GstValueCompareFunc: - * @value1: first value for comparison - * @value2: second value for comparison - * - * Used together with gst_value_compare() to compare #GValue items. - * - * Returns: one of GST_VALUE_LESS_THAN, GST_VALUE_EQUAL, GST_VALUE_GREATER_THAN - * or GST_VALUE_UNORDERED - */ -typedef gint (* GstValueCompareFunc) (const GValue *value1, - const GValue *value2); - -/** - * GstValueSerializeFunc: - * @value1: a #GValue - * - * Used by gst_value_serialize() to obtain a non-binary form of the #GValue. - * - * Free-function: g_free - * - * Returns: (transfer full): the string representation of the value - */ -typedef gchar * (* GstValueSerializeFunc) (const GValue *value1); - -/** - * GstValueDeserializeFunc: - * @dest: a #GValue - * @s: a string - * - * Used by gst_value_deserialize() to parse a non-binary form into the #GValue. - * - * Returns: %TRUE for success - */ -typedef gboolean (* GstValueDeserializeFunc) (GValue *dest, - const gchar *s); - -typedef struct _GstValueTable GstValueTable; -/** - * GstValueTable: - * @type: a #GType - * @compare: a #GstValueCompareFunc - * @serialize: a #GstValueSerializeFunc - * @deserialize: a #GstValueDeserializeFunc - * - * VTable for the #GValue @type. - */ -struct _GstValueTable { - GType type; - GstValueCompareFunc compare; - GstValueSerializeFunc serialize; - GstValueDeserializeFunc deserialize; - - /*< private >*/ - gpointer _gst_reserved [GST_PADDING]; -}; - -GType gst_int_range_get_type (void); -GType gst_int64_range_get_type (void); -GType gst_double_range_get_type (void); -GType gst_fraction_range_get_type (void); -GType gst_fraction_get_type (void); -GType gst_value_list_get_type (void); -GType gst_value_array_get_type (void); -GType gst_bitmask_get_type (void); - -GType gst_date_time_get_type (void); - -void gst_value_register (const GstValueTable *table); -void gst_value_init_and_copy (GValue *dest, - const GValue *src); - -gchar * gst_value_serialize (const GValue *value) G_GNUC_MALLOC; -gboolean gst_value_deserialize (GValue *dest, - const gchar *src); - -/* list */ -void gst_value_list_append_value (GValue *value, - const GValue *append_value); -void gst_value_list_prepend_value (GValue *value, - const GValue *prepend_value); -void gst_value_list_concat (GValue *dest, - const GValue *value1, - const GValue *value2); -void gst_value_list_merge (GValue *dest, - const GValue *value1, - const GValue *value2); -guint gst_value_list_get_size (const GValue *value); -const GValue * gst_value_list_get_value (const GValue *value, - guint index); - -/* array */ -void gst_value_array_append_value (GValue *value, - const GValue *append_value); -void gst_value_array_prepend_value (GValue *value, - const GValue *prepend_value); -guint gst_value_array_get_size (const GValue *value); -const GValue * gst_value_array_get_value (const GValue *value, - guint index); - -/* int range */ -void gst_value_set_int_range (GValue *value, - gint start, - gint end); -void gst_value_set_int_range_step (GValue *value, - gint start, - gint end, - gint step); -gint gst_value_get_int_range_min (const GValue *value); -gint gst_value_get_int_range_max (const GValue *value); -gint gst_value_get_int_range_step (const GValue *value); - -/* int64 range */ -void gst_value_set_int64_range (GValue *value, - gint64 start, - gint64 end); -void gst_value_set_int64_range_step (GValue *value, - gint64 start, - gint64 end, - gint64 step); -gint64 gst_value_get_int64_range_min (const GValue *value); -gint64 gst_value_get_int64_range_max (const GValue *value); -gint64 gst_value_get_int64_range_step (const GValue *value); - -/* double range */ -void gst_value_set_double_range (GValue *value, - gdouble start, - gdouble end); -gdouble gst_value_get_double_range_min (const GValue *value); -gdouble gst_value_get_double_range_max (const GValue *value); - -/* caps */ -const GstCaps * gst_value_get_caps (const GValue *value); -void gst_value_set_caps (GValue *value, - const GstCaps *caps); - -/* structure */ -const GstStructure * - gst_value_get_structure (const GValue *value); -void gst_value_set_structure (GValue *value, - const GstStructure *structure); - -/* fraction */ -void gst_value_set_fraction (GValue *value, - gint numerator, - gint denominator); -gint gst_value_get_fraction_numerator (const GValue *value); -gint gst_value_get_fraction_denominator (const GValue *value); -gboolean gst_value_fraction_multiply (GValue *product, - const GValue *factor1, - const GValue *factor2); -gboolean gst_value_fraction_subtract (GValue * dest, - const GValue * minuend, - const GValue * subtrahend); - -/* fraction range */ -void gst_value_set_fraction_range (GValue *value, - const GValue *start, - const GValue *end); -void gst_value_set_fraction_range_full (GValue *value, - gint numerator_start, - gint denominator_start, - gint numerator_end, - gint denominator_end); -const GValue *gst_value_get_fraction_range_min (const GValue *value); -const GValue *gst_value_get_fraction_range_max (const GValue *value); - -/* bitmask */ -guint64 gst_value_get_bitmask (const GValue *value); -void gst_value_set_bitmask (GValue *value, - guint64 bitmask); - -/* compare */ -gint gst_value_compare (const GValue *value1, - const GValue *value2); -gboolean gst_value_can_compare (const GValue *value1, - const GValue *value2); -gboolean gst_value_is_subset (const GValue *value1, - const GValue *value2); - -/* union */ -gboolean gst_value_union (GValue *dest, - const GValue *value1, - const GValue *value2); -gboolean gst_value_can_union (const GValue *value1, - const GValue *value2); - -/* intersection */ -gboolean gst_value_intersect (GValue *dest, - const GValue *value1, - const GValue *value2); -gboolean gst_value_can_intersect (const GValue *value1, - const GValue *value2); - -/* subtraction */ -gboolean gst_value_subtract (GValue *dest, - const GValue *minuend, - const GValue *subtrahend); -gboolean gst_value_can_subtract (const GValue *minuend, - const GValue *subtrahend); - -/* fixation */ -gboolean gst_value_is_fixed (const GValue *value); -gboolean gst_value_fixate (GValue *dest, - const GValue *src); - -G_END_DECLS - -#endif - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstversion.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstversion.h deleted file mode 100644 index 82b17344..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/gstversion.h +++ /dev/null @@ -1,88 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstversion.h: Version information for GStreamer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/** - * SECTION:gstversion - * @short_description: GStreamer version macros. - * - * Use the GST_VERSION_* macros e.g. when defining own plugins. The GStreamer - * runtime checks if these plugin and core version match and refuses to use a - * plugin compiled against a different version of GStreamer. - * You can also use the macros to keep the GStreamer version information in - * your application. - * - * Use the gst_version() function if you want to know which version of - * GStreamer you are currently linked against. - * - * The version macros get defined by including "gst/gst.h". - */ - -#ifndef __GST_VERSION_H__ -#define __GST_VERSION_H__ - -G_BEGIN_DECLS - -/** - * GST_VERSION_MAJOR: - * - * The major version of GStreamer at compile time: - */ -#define GST_VERSION_MAJOR (1) -/** - * GST_VERSION_MINOR: - * - * The minor version of GStreamer at compile time: - */ -#define GST_VERSION_MINOR (0) -/** - * GST_VERSION_MICRO: - * - * The micro version of GStreamer at compile time: - */ -#define GST_VERSION_MICRO (5) -/** - * GST_VERSION_NANO: - * - * The nano version of GStreamer at compile time: - * Actual releases have 0, GIT versions have 1, prerelease versions have 2-... - */ -#define GST_VERSION_NANO (0) - -/** - * GST_CHECK_VERSION: - * @major: a number indicating the major version - * @minor: a number indicating the minor version - * @micro: a number indicating the micro version - * - * Check whether a GStreamer version equal to or greater than - * major.minor.micro is present. - */ -#define GST_CHECK_VERSION(major,minor,micro) \ - (GST_VERSION_MAJOR > (major) || \ - (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR > (minor)) || \ - (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR == (minor) && \ - GST_VERSION_MICRO >= (micro)) || \ - (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR == (minor) && \ - GST_VERSION_MICRO + 1 == (micro) && GST_VERSION_NANO > 0)) - -G_END_DECLS - -#endif /* __GST_VERSION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h deleted file mode 100644 index 4c0a5aa3..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h +++ /dev/null @@ -1,39 +0,0 @@ - - - -#ifndef __GST_PHOTOGRAPHY_ENUM_TYPES_H__ -#define __GST_PHOTOGRAPHY_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "photography.h" */ -GType gst_photography_noise_reduction_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_NOISE_REDUCTION (gst_photography_noise_reduction_get_type()) -GType gst_photography_white_balance_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_WHITE_BALANCE_MODE (gst_photography_white_balance_mode_get_type()) -GType gst_photography_color_tone_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_COLOR_TONE_MODE (gst_photography_color_tone_mode_get_type()) -GType gst_photography_scene_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_SCENE_MODE (gst_photography_scene_mode_get_type()) -GType gst_photography_flash_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FLASH_MODE (gst_photography_flash_mode_get_type()) -GType gst_photography_focus_status_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FOCUS_STATUS (gst_photography_focus_status_get_type()) -GType gst_photography_caps_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_CAPS (gst_photography_caps_get_type()) -GType gst_photography_shake_risk_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_SHAKE_RISK (gst_photography_shake_risk_get_type()) -GType gst_photography_flicker_reduction_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FLICKER_REDUCTION_MODE (gst_photography_flicker_reduction_mode_get_type()) -GType gst_photography_focus_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FOCUS_MODE (gst_photography_focus_mode_get_type()) -GType gst_photography_exposure_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_EXPOSURE_MODE (gst_photography_exposure_mode_get_type()) -G_END_DECLS - -#endif /* __GST_PHOTOGRAPHY_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography.h deleted file mode 100644 index d3a16e9d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/interfaces/photography.h +++ /dev/null @@ -1,590 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2008 Nokia Corporation - * - * photography.h: photography interface for digital imaging - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PHOTOGRAPHY_H__ -#define __GST_PHOTOGRAPHY_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The GstPhotography interface is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PHOTOGRAPHY \ - (gst_photography_get_type ()) -#define GST_PHOTOGRAPHY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PHOTOGRAPHY, GstPhotography)) -#define GST_IS_PHOTOGRAPHY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PHOTOGRAPHY)) -#define GST_PHOTOGRAPHY_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_PHOTOGRAPHY, GstPhotographyInterface)) - - -/** - * GST_PHOTOGRAPHY_AUTOFOCUS_DONE: - * - * Name of custom GstMessage that will be posted to #GstBus when autofocusing - * is complete. - * This message contains following fields: - * - * - * - * #GstPhotographyFocusStatus - * "status": - * Tells if focusing succeeded or failed. - * - * - * - * - * #G_TYPE_INT - * "focus-window-rows": - * Tells number of focus matrix rows. - * - * - * - * - * #G_TYPE_INT - * "focus-window-columns": - * Tells number of focus matrix columns. - * - * - * - * - * #G_TYPE_INT - * "focus-window-mask": - * Bitmask containing rows x columns bits which mark the focus points in the - * focus matrix. Lowest bit (LSB) always represents the top-left corner of the - * focus matrix. This field is only valid when focusing status is SUCCESS. - * - * - * - */ -#define GST_PHOTOGRAPHY_AUTOFOCUS_DONE "autofocus-done" - -/** - * GST_PHOTOGRAPHY_SHAKE_RISK: - * - * Name of custom GstMessage that is posted to #GstBus during autofocusing - * process. It is posted if there is change in the risk of captured image - * becoming "shaken" due to camera movement and too long exposure time. - * - * This message contains following fields: - * - * - * - * #GstPhotographyShakeRisk - * "status": - * Tells risk level of capturing shaken image. - * - * - * - */ -#define GST_PHOTOGRAPHY_SHAKE_RISK "shake-risk" - -/* Maximum white point values used in #GstPhotographySettings */ -#define MAX_WHITE_POINT_VALUES 4 - -/* Interface property names */ -#define GST_PHOTOGRAPHY_PROP_WB_MODE "white-balance-mode" -#define GST_PHOTOGRAPHY_PROP_COLOR_TONE "color-tone-mode" -#define GST_PHOTOGRAPHY_PROP_SCENE_MODE "scene-mode" -#define GST_PHOTOGRAPHY_PROP_FLASH_MODE "flash-mode" -#define GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION "noise-reduction" -#define GST_PHOTOGRAPHY_PROP_FOCUS_STATUS "focus-status" -#define GST_PHOTOGRAPHY_PROP_CAPABILITIES "capabilities" -#define GST_PHOTOGRAPHY_PROP_SHAKE_RISK "shake-risk" -#define GST_PHOTOGRAPHY_PROP_EV_COMP "ev-compensation" -#define GST_PHOTOGRAPHY_PROP_ISO_SPEED "iso-speed" -#define GST_PHOTOGRAPHY_PROP_APERTURE "aperture" -#define GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME "exposure-time" -#define GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS \ - "image-capture-supported-caps" -#define GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS \ - "image-preview-supported-caps" -#define GST_PHOTOGRAPHY_PROP_FLICKER_MODE "flicker-mode" -#define GST_PHOTOGRAPHY_PROP_FOCUS_MODE "focus-mode" -#define GST_PHOTOGRAPHY_PROP_ZOOM "zoom" -#define GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE "color-temperature" -#define GST_PHOTOGRAPHY_PROP_WHITE_POINT "white-point" -#define GST_PHOTOGRAPHY_PROP_ANALOG_GAIN "analog-gain" -#define GST_PHOTOGRAPHY_PROP_EXPOSURE_MODE "exposure-mode" -#define GST_PHOTOGRAPHY_PROP_LENS_FOCUS "lens-focus" -#define GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME "min-exposure-time" -#define GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME "max-exposure-time" - -/** - * GstPhotography: - * - * Opaque #GstPhotography data structure. - */ -typedef struct _GstPhotography GstPhotography; - -/** - * GstPhotographyNoiseReduction: - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER: Adaptive noise reduction on Bayer - * format - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC: reduces the noise on Y and 2-chroma - * images. - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL: Multi-frame adaptive NR, - * provided for the video mode - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED: Fixed Pattern Noise refers to noise - * that does not change between frames. The noise is removed from the sensor - * image, by subtracting a previously-captured black image in memory. - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA: Extra Noise Reduction. In the case - * of high-ISO capturing, some noise remains after YCC NR. XNR reduces this - * remaining noise. - * - * Noise Reduction features of a photography capture or filter element. - * - * Since: 0.10.21 - */ -typedef enum -{ - GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER = ( 1<<0 ), - GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC = ( 1<<1 ), - GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL= ( 1<< 2), - GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED = (1 << 3), - GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA = (1 << 4) -} GstPhotographyNoiseReduction; - -/** - * GstPhotographyWhiteBalanceMode: - * @GST_PHOTOGRAPHY_WB_MODE_AUTO: Choose white balance mode automatically - * @GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT: Mode for daylight conditions - * @GST_PHOTOGRAPHY_WB_MODE_CLOUDY: Mode for cloudy conditions - * @GST_PHOTOGRAPHY_WB_MODE_SUNSET: Mode for sunset conditions - * @GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN: Mode for tungsten lighting - * @GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT: Mode for fluorescent lighting - * @GST_PHOTOGRAPHY_WB_MODE_MANUAL: Disable automatic white balance adjustment - * and keep current values. - * - * Modes for white balance control. - */ -typedef enum -{ - GST_PHOTOGRAPHY_WB_MODE_AUTO = 0, - GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT, - GST_PHOTOGRAPHY_WB_MODE_CLOUDY, - GST_PHOTOGRAPHY_WB_MODE_SUNSET, - GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN, - GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT, - GST_PHOTOGRAPHY_WB_MODE_MANUAL -} GstPhotographyWhiteBalanceMode; - -/** - * GstPhotographyColorToneMode: - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL: No effects - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA: Sepia - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE: Negative - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE: Grayscale - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL: Natural - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID: Vivid - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP: Colorswap - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE: Solarize - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS: Out of focus - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE: Sky blue - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN: Grass green - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN: Skin whiten - * - * Modes for special color effects. - */ -typedef enum -{ - GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL = 0, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN -} GstPhotographyColorToneMode; - -/** - * GstPhotographySceneMode: - * @GST_PHOTOGRAPHY_SCENE_MODE_MANUAL: Set individual options manually - * @GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP: Mode for close objects - * @GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT: Mode for portraits - * @GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE: Mode for landscapes - * @GST_PHOTOGRAPHY_SCENE_MODE_SPORT: Mode for scene with fast motion - * @GST_PHOTOGRAPHY_SCENE_MODE_NIGHT: Mode for night conditions - * @GST_PHOTOGRAPHY_SCENE_MODE_AUTO: Choose scene mode automatically - * - * Each mode contains preset #GstPhotography options in order to produce - * good capturing result in certain scene. - */ -typedef enum -{ - GST_PHOTOGRAPHY_SCENE_MODE_MANUAL = 0, - GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP, - GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT, - GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE, - GST_PHOTOGRAPHY_SCENE_MODE_SPORT, - GST_PHOTOGRAPHY_SCENE_MODE_NIGHT, - GST_PHOTOGRAPHY_SCENE_MODE_AUTO -} GstPhotographySceneMode; - -/** - * GstPhotographyFlashMode: - * @GST_PHOTOGRAPHY_FLASH_MODE_AUTO: Fire flash automatically according to - * lighting conditions. - * @GST_PHOTOGRAPHY_FLASH_MODE_OFF: Never fire flash - * @GST_PHOTOGRAPHY_FLASH_MODE_ON: Always fire flash - * @GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN: Fill in flash - * @GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE: Flash mode for reducing chance of - * capturing red eyes - * - * Modes for flash control. - */ -typedef enum -{ - GST_PHOTOGRAPHY_FLASH_MODE_AUTO = 0, - GST_PHOTOGRAPHY_FLASH_MODE_OFF, - GST_PHOTOGRAPHY_FLASH_MODE_ON, - GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN, - GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE -} GstPhotographyFlashMode; - -/** - * GstPhotographyFocusStatus: - * @GST_PHOTOGRAPHY_FOCUS_STATUS_NONE: No status available - * @GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING: Focusing is ongoing - * @GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL: Focusing failed - * @GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS: Focusing succeeded - * - * Status of the focusing operation, used in #GST_PHOTOGRAPHY_AUTOFOCUS_DONE - * message. - */ -typedef enum -{ - GST_PHOTOGRAPHY_FOCUS_STATUS_NONE = 0, - GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING, - GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL, - GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS -} GstPhotographyFocusStatus; - -/** - * GstPhotographyCaps: - * - * Bitmask that indicates which #GstPhotography interface features an instance - * supports. - */ -typedef enum -{ - GST_PHOTOGRAPHY_CAPS_NONE = (0 << 0), - GST_PHOTOGRAPHY_CAPS_EV_COMP = (1 << 0), - GST_PHOTOGRAPHY_CAPS_ISO_SPEED = (1 << 1), - GST_PHOTOGRAPHY_CAPS_WB_MODE = (1 << 2), - GST_PHOTOGRAPHY_CAPS_TONE = (1 << 3), - GST_PHOTOGRAPHY_CAPS_SCENE = (1 << 4), - GST_PHOTOGRAPHY_CAPS_FLASH = (1 << 5), - GST_PHOTOGRAPHY_CAPS_ZOOM = (1 << 6), - GST_PHOTOGRAPHY_CAPS_FOCUS = (1 << 7), - GST_PHOTOGRAPHY_CAPS_APERTURE = (1 << 8), - GST_PHOTOGRAPHY_CAPS_EXPOSURE = (1 << 9), - GST_PHOTOGRAPHY_CAPS_SHAKE = (1 << 10), - GST_PHOTOGRAPHY_CAPS_WHITE_BALANCE = (1 << 11), - GST_PHOTOGRAPHY_CAPS_NOISE_REDUCTION = (1 << 12), - GST_PHOTOGRAPHY_CAPS_FLICKER_REDUCTION = (1 << 13), - GST_PHOTOGRAPHY_CAPS_ALL = (~0) -} GstPhotographyCaps; - -/** - * GstPhotographyShakeRisk: - * @GST_PHOTOGRAPHY_SHAKE_RISK_LOW: Low risk - * @GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM: Medium risk - * @GST_PHOTOGRAPHY_SHAKE_RISK_HIGH: High risk - * - * Risk level of captured image becoming "shaken" due to camera movement and - * too long exposure time. Used in #GST_PHOTOGRAPHY_SHAKE_RISK #GstMessage. - */ -typedef enum -{ - GST_PHOTOGRAPHY_SHAKE_RISK_LOW = 0, - GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM, - GST_PHOTOGRAPHY_SHAKE_RISK_HIGH, -} GstPhotographyShakeRisk; - -/** - * GstPhotographyFlickerReductionMode: - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF: Disable flicker reduction - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ: 50Hz flicker reduction - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ: 60Hz flicker reduction - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO: Choose mode automatically - * - * Reduce flicker in video caused by light source fluctuation. - */ -typedef enum -{ - GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF = 0, - GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ, - GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ, - GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO, -} GstPhotographyFlickerReductionMode; - -/** - * GstPhotographyFocusMode: - * @GST_PHOTOGRAPHY_FOCUS_MODE_AUTO: Choose focus mode automatically - * @GST_PHOTOGRAPHY_FOCUS_MODE_MACRO: Mode for focusing objects close to lens - * @GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT: Mode for portraits - * @GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY: Mode for landscapes and far away objects - * @GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL: Mode for maximum depth of field, keeping - * focus acceptable both in infinify and as close objects as possible - * @GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED: Extended focus mode - * @GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL: Continuous autofocus mode - * @GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED: Extended continuous - * autofocus mode - * @GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL: Disable automatic focusing - * and keep current value. #GstPhotography:lens-focus property can - * be used to change focus manually. - * - * Choose mode for focusing algorithm. - */ -typedef enum { - GST_PHOTOGRAPHY_FOCUS_MODE_AUTO = 0, - GST_PHOTOGRAPHY_FOCUS_MODE_MACRO, - GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT, - GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY, - GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL, - GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED, - GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL, - GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED, - GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL -} GstPhotographyFocusMode; - -/** - * GstPhotographyExposureMode: - * @GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO: Adjust exposure automatically - * @GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL: Disable automatic exposure adjustment - * and keep current values. - * - */ -typedef enum { - GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO = 0, - GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL -} GstPhotographyExposureMode; - -/** - * GstPhotographySettings: - * - * Structure containing all #GstPhotography settings, used to set all - * settings in one call with @gst_photography_set_config(). - */ -typedef struct -{ - GstPhotographyWhiteBalanceMode wb_mode; - GstPhotographyColorToneMode tone_mode; - GstPhotographySceneMode scene_mode; - GstPhotographyFlashMode flash_mode; - guint32 exposure_time; - guint aperture; - gfloat ev_compensation; - guint iso_speed; - gfloat zoom; - GstPhotographyFlickerReductionMode flicker_mode; - GstPhotographyFocusMode focus_mode; - GstPhotographyNoiseReduction noise_reduction; - GstPhotographyExposureMode exposure_mode; - guint color_temperature; - guint white_point[MAX_WHITE_POINT_VALUES]; - gfloat analog_gain; - gfloat lens_focus; - guint min_exposure_time; - guint max_exposure_time; -} GstPhotographySettings; - -/** - * GstPhotographyCapturePrepared: - * @data: user data that has been given, when registering the callback - * @configured_caps: #GstCaps defining the configured capture format. - * Ownership of these caps stays in the element. - * - * This callback will be called when the element has finished preparations - * and is ready for image capture. The next buffer that element produces - * will be of @configured_caps format, so this callback allows the application - * to e.g. reconfigure capsfilters in pipeline if any. - */ -typedef void (*GstPhotographyCapturePrepared) (gpointer data, - const GstCaps *configured_caps); - -/** - * GstPhotographyInterface: - * @parent: parent interface type. - * @get_ev_compensation: vmethod to get ev exposure compensation value - * @get_iso_speed: vmethod to get iso speed (light sensitivity) value - * @get_aperture: vmethod to get aperture value - * @get_exposure: vmethod to get exposure time value - * @get_white_balance_mode: vmethod to get white balance mode value - * @get_color_tone_mode: vmethod to get color tone mode value - * @get_scene_mode: vmethod to get scene mode value - * @get_flash_mode: vmethod to get flash mode value - * @get_noise_reduction: vmethod to get noise reduction mode value - * @get_zoom: vmethod to get zoom factor value - * @set_ev_compensation: vmethod to set ev exposure compensation value - * @set_iso_speed: vmethod to set iso speed (light sensitivity) value - * @set_aperture: vmethod to set aperture value - * @set_exposure: vmethod to set exposure time value - * @set_white_balance_mode: vmethod to set white balance mode value - * @set_color_tone_mode: vmethod to set color tone mode value - * @set_scene_mode: vmethod to set scene mode value - * @set_flash_mode: vmethod to set flash mode value - * @set_noise_reduction: vmethod to set noise reduction mode value - * @set_zoom: vmethod to set zoom factor value - * @get_capabilities: vmethod to get supported capabilities of the interface - * @prepare_for_capture: vmethod to tell the element to prepare for capturing - * @set_autofocus: vmethod to set autofocus on/off - * @set_config: vmethod to set all configuration parameters at once - * @get_config: vmethod to get all configuration parameters at once - * @get_image_capture_supported_caps: vmethod to get caps describing supported image capture formats - * - * #GstPhotographyInterface interface. - */ -typedef struct _GstPhotographyInterface -{ - GTypeInterface parent; - - /* virtual functions */ - gboolean (*get_ev_compensation) (GstPhotography * photo, gfloat * ev_comp); - gboolean (*get_iso_speed) (GstPhotography * photo, guint * iso_speed); - gboolean (*get_aperture) (GstPhotography * photo, guint * aperture); - gboolean (*get_exposure) (GstPhotography * photo, guint32 * exposure); - gboolean (*get_white_balance_mode) (GstPhotography * photo, - GstPhotographyWhiteBalanceMode * wb_mode); - gboolean (*get_color_tone_mode) (GstPhotography * photo, - GstPhotographyColorToneMode * tone_mode); - gboolean (*get_scene_mode) (GstPhotography * photo, - GstPhotographySceneMode * scene_mode); - gboolean (*get_flash_mode) (GstPhotography * photo, - GstPhotographyFlashMode * flash_mode); - gboolean (*get_zoom) (GstPhotography * photo, gfloat * zoom); - gboolean (*get_flicker_mode) (GstPhotography * photo, - GstPhotographyFlickerReductionMode * flicker_mode); - gboolean (*get_focus_mode) (GstPhotography * photo, - GstPhotographyFocusMode * focus_mode); - - gboolean (*set_ev_compensation) (GstPhotography * photo, gfloat ev_comp); - gboolean (*set_iso_speed) (GstPhotography * photo, guint iso_speed); - gboolean (*set_aperture) (GstPhotography * photo, guint aperture); - gboolean (*set_exposure) (GstPhotography * photo, guint32 exposure); - gboolean (*set_white_balance_mode) (GstPhotography * photo, - GstPhotographyWhiteBalanceMode wb_mode); - gboolean (*set_color_tone_mode) (GstPhotography * photo, - GstPhotographyColorToneMode tone_mode); - gboolean (*set_scene_mode) (GstPhotography * photo, - GstPhotographySceneMode scene_mode); - gboolean (*set_flash_mode) (GstPhotography * photo, - GstPhotographyFlashMode flash_mode); - gboolean (*set_zoom) (GstPhotography * photo, gfloat zoom); - gboolean (*set_flicker_mode) (GstPhotography * photo, - GstPhotographyFlickerReductionMode flicker_mode); - gboolean (*set_focus_mode) (GstPhotography * photo, - GstPhotographyFocusMode focus_mode); - - GstPhotographyCaps (*get_capabilities) (GstPhotography * photo); - gboolean (*prepare_for_capture) (GstPhotography * photo, - GstPhotographyCapturePrepared func, GstCaps *capture_caps, gpointer user_data); - void (*set_autofocus) (GstPhotography * photo, gboolean on); - gboolean (*set_config) (GstPhotography * photo, GstPhotographySettings * config); - gboolean (*get_config) (GstPhotography * photo, GstPhotographySettings * config); - - gboolean (*get_noise_reduction) (GstPhotography * photo, - GstPhotographyNoiseReduction * noise_reduction); - gboolean (*set_noise_reduction) (GstPhotography * photo, - GstPhotographyNoiseReduction noise_reduction); - - /*< private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstPhotographyInterface; - -GType gst_photography_get_type (void); - -/* virtual class function wrappers */ -gboolean gst_photography_get_ev_compensation (GstPhotography * photo, - gfloat * ev_comp); -gboolean gst_photography_get_iso_speed (GstPhotography * photo, - guint * iso_speed); -gboolean gst_photography_get_aperture (GstPhotography * photo, - guint * aperture); -gboolean gst_photography_get_exposure (GstPhotography * photo, - guint32 * exposure); -gboolean gst_photography_get_white_balance_mode (GstPhotography * photo, - GstPhotographyWhiteBalanceMode * wb_mode); -gboolean gst_photography_get_color_tone_mode (GstPhotography * photo, - GstPhotographyColorToneMode * tone_mode); -gboolean gst_photography_get_scene_mode (GstPhotography * photo, - GstPhotographySceneMode * scene_mode); -gboolean gst_photography_get_flash_mode (GstPhotography * photo, - GstPhotographyFlashMode * flash_mode); -gboolean gst_photography_get_noise_reduction (GstPhotography * photo, - GstPhotographyNoiseReduction * noise_reduction); -gboolean gst_photography_get_zoom (GstPhotography * photo, gfloat * zoom); -gboolean gst_photography_get_flicker_mode (GstPhotography * photo, - GstPhotographyFlickerReductionMode *mode); -gboolean gst_photography_get_focus_mode (GstPhotography * photo, - GstPhotographyFocusMode *mode); - -gboolean gst_photography_set_ev_compensation (GstPhotography * photo, - gfloat ev_comp); -gboolean gst_photography_set_iso_speed (GstPhotography * photo, - guint iso_speed); -gboolean gst_photography_set_aperture (GstPhotography * photo, guint aperture); -gboolean gst_photography_set_exposure (GstPhotography * photo, guint exposure); -gboolean gst_photography_set_white_balance_mode (GstPhotography * photo, - GstPhotographyWhiteBalanceMode wb_mode); -gboolean gst_photography_set_color_tone_mode (GstPhotography * photo, - GstPhotographyColorToneMode tone_mode); -gboolean gst_photography_set_scene_mode (GstPhotography * photo, - GstPhotographySceneMode scene_mode); -gboolean gst_photography_set_flash_mode (GstPhotography * photo, - GstPhotographyFlashMode flash_mode); -gboolean gst_photography_set_noise_reduction (GstPhotography * photo, - GstPhotographyNoiseReduction noise_reduction); -gboolean gst_photography_set_zoom (GstPhotography * photo, gfloat zoom); -gboolean gst_photography_set_flicker_mode (GstPhotography * photo, - GstPhotographyFlickerReductionMode mode); -gboolean gst_photography_set_focus_mode (GstPhotography * photo, - GstPhotographyFocusMode mode); - -GstPhotographyCaps gst_photography_get_capabilities (GstPhotography * photo); - -gboolean gst_photography_prepare_for_capture (GstPhotography * photo, - GstPhotographyCapturePrepared func, GstCaps *capture_caps, gpointer user_data); - -void gst_photography_set_autofocus (GstPhotography * photo, gboolean on); - -gboolean gst_photography_set_config (GstPhotography * photo, - GstPhotographySettings * config); -gboolean gst_photography_get_config (GstPhotography * photo, - GstPhotographySettings * config); - -G_END_DECLS - -#endif /* __GST_PHOTOGRAPHY_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/math-compat.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/math-compat.h deleted file mode 100644 index d160c2cf..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/math-compat.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MATH_COMPAT_H__ -#define __GST_MATH_COMPAT_H__ - -/* This header is not included automatically via gst/gst.h, you need to - * include it explicitly if you need it. */ - -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES /* so MSVC defines M_PI etc. */ -#endif -#include - -#include - -G_BEGIN_DECLS - -/* http://en.wikipedia.org/wiki/Math.h */ - -#define __GST_MATH_COMPAT_NEED_RINT -#define __GST_MATH_COMPAT_NEED_RINTF -#define __GST_MATH_COMPAT_NEED_ISNAN - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#undef __GST_MATH_COMPAT_NEED_RINT -#undef __GST_MATH_COMPAT_NEED_RINTF -#undef __GST_MATH_COMPAT_NEED_ISNAN -#endif - -#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L -#undef __GST_MATH_COMPAT_NEED_RINT -#undef __GST_MATH_COMPAT_NEED_RINTF -#undef __GST_MATH_COMPAT_NEED_ISNAN -#endif - -#ifndef M_PI -#define M_PI G_PI -#endif - -#ifndef M_PI_2 -#define M_PI_2 G_PI_2 -#endif - -#ifndef M_PI_4 -#define M_PI_4 G_PI_4 -#endif - -static inline double -__gst_math_compat_rint (double x) -{ - return floor (x + 0.5); -} - -static inline float -__gst_math_compat_rintf (float x) -{ - return floorf (x + 0.5); -} - -static inline gboolean -__gst_math_compat_isnan (double x) -{ - return x != x; -} - -#if defined (__GST_MATH_COMPAT_NEED_RINT) && !defined (rint) -#define rint(x) __gst_math_compat_rint(x) -#endif - -#if defined (__GST_MATH_COMPAT_NEED_RINTF) && !defined (rintf) -#define rintf(x) __gst_math_compat_rintf(x) -#endif - -#if defined (__GST_MATH_COMPAT_NEED_ISNAN) && !defined (isnan) -#define isnan(x) __gst_math_compat_isnan (x) -#endif - -#ifndef NAN -#if G_BYTE_ORDER == G_BIG_ENDIAN -#define __GST_NAN_BYTES { 0x7f, 0xc0, 0, 0 } -#elif G_BYTE_ORDER == G_LITTLE_ENDIAN -#define __GST_NAN_BYTES { 0, 0, 0xc0, 0x7f } -#endif -static union { - unsigned char __c[4]; - float __d; -} __gst_nan_union G_GNUC_UNUSED = { - __GST_NAN_BYTES -}; -#define NAN (__gst_nan_union.__d) -#endif - -G_END_DECLS - -#endif /* __GST_MATH_COMPAT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnet.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnet.h deleted file mode 100644 index 078cad59..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnet.h +++ /dev/null @@ -1,30 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_H__ -#define __GST_NET_H__ - - -#include -#include -#include - - -#endif /* __GST_NET_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h deleted file mode 100644 index 0173d874..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_NET_ADDRESS_META_H__ -#define __GST_NET_ADDRESS_META_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstNetAddressMeta GstNetAddressMeta; - -/** - * GstNetAddressMeta: - * - * Buffer metadata for network addresses. - */ -struct _GstNetAddressMeta { - GstMeta meta; - - GSocketAddress *addr; -}; - -GType gst_net_address_meta_api_get_type (void); -#define GST_NET_ADDRESS_META_API_TYPE (gst_net_address_meta_api_get_type()) - -#define gst_buffer_get_net_address_meta(b) \ - ((GstNetAddressMeta*)gst_buffer_get_meta((b),GST_NET_ADDRESS_META_API_TYPE)) - -/* implementation */ -const GstMetaInfo *gst_net_address_meta_get_info (void); -#define GST_NET_ADDRESS_META_INFO (gst_net_address_meta_get_info()) - -GstNetAddressMeta * gst_buffer_add_net_address_meta (GstBuffer *buffer, - GSocketAddress *addr); - -G_END_DECLS - -#endif /* __GST_NET_ADDRESS_META_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetclientclock.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetclientclock.h deleted file mode 100644 index a0fcf1f9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnetclientclock.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * 2005 Andy Wingo - * Copyright (C) 2012 Collabora Ltd. - * - * gstnetclientclock.h: clock that synchronizes itself to a time provider over - * the network - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_CLIENT_CLOCK_H__ -#define __GST_NET_CLIENT_CLOCK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_NET_CLIENT_CLOCK \ - (gst_net_client_clock_get_type()) -#define GST_NET_CLIENT_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NET_CLIENT_CLOCK,GstNetClientClock)) -#define GST_NET_CLIENT_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NET_CLIENT_CLOCK,GstNetClientClockClass)) -#define GST_IS_NET_CLIENT_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NET_CLIENT_CLOCK)) -#define GST_IS_NET_CLIENT_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NET_CLIENT_CLOCK)) - -typedef struct _GstNetClientClock GstNetClientClock; -typedef struct _GstNetClientClockClass GstNetClientClockClass; -typedef struct _GstNetClientClockPrivate GstNetClientClockPrivate; - -/** - * GstNetClientClock: - * - * Opaque #GstNetClientClock structure. - */ -struct _GstNetClientClock { - GstSystemClock clock; - - /*< private >*/ - GstNetClientClockPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstNetClientClockClass { - GstSystemClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_net_client_clock_get_type (void); - -GstClock* gst_net_client_clock_new (gchar *name, const gchar *remote_address, - gint remote_port, GstClockTime base_time); - -G_END_DECLS - -#endif /* __GST_NET_CLIENT_CLOCK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimepacket.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimepacket.h deleted file mode 100644 index 88395967..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimepacket.h +++ /dev/null @@ -1,70 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_TIME_PACKET_H__ -#define __GST_NET_TIME_PACKET_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_NET_TIME_PACKET_SIZE: - * - * The size of the packets sent between network clocks. - */ -#define GST_NET_TIME_PACKET_SIZE 16 - -typedef struct _GstNetTimePacket GstNetTimePacket; - -/** - * GstNetTimePacket: - * @local_time: the local time when this packet was sent - * @remote_time: the remote time observation - * - * Content of a #GstNetTimePacket. - */ -struct _GstNetTimePacket { - GstClockTime local_time; - GstClockTime remote_time; -}; - -GType gst_net_time_packet_get_type(void); - -GstNetTimePacket* gst_net_time_packet_new (const guint8 *buffer); -GstNetTimePacket* gst_net_time_packet_copy (const GstNetTimePacket *packet); -void gst_net_time_packet_free (GstNetTimePacket *packet); - -guint8* gst_net_time_packet_serialize (const GstNetTimePacket *packet); - -GstNetTimePacket* gst_net_time_packet_receive (GSocket * socket, - GSocketAddress ** src_address, - GError ** error); - -gboolean gst_net_time_packet_send (const GstNetTimePacket * packet, - GSocket * socket, - GSocketAddress * dest_address, - GError ** error); - -G_END_DECLS - - -#endif /* __GST_NET_TIME_PACKET_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimeprovider.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimeprovider.h deleted file mode 100644 index 81c0fbe9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/net/gstnettimeprovider.h +++ /dev/null @@ -1,74 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo - * 2006 Joni Valtanen - * Copyright (C) 2012 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_TIME_PROVIDER_H__ -#define __GST_NET_TIME_PROVIDER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_NET_TIME_PROVIDER \ - (gst_net_time_provider_get_type()) -#define GST_NET_TIME_PROVIDER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NET_TIME_PROVIDER,GstNetTimeProvider)) -#define GST_NET_TIME_PROVIDER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NET_TIME_PROVIDER,GstNetTimeProviderClass)) -#define GST_IS_NET_TIME_PROVIDER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NET_TIME_PROVIDER)) -#define GST_IS_NET_TIME_PROVIDER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NET_TIME_PROVIDER)) - -typedef struct _GstNetTimeProvider GstNetTimeProvider; -typedef struct _GstNetTimeProviderClass GstNetTimeProviderClass; -typedef struct _GstNetTimeProviderPrivate GstNetTimeProviderPrivate; - -/** - * GstNetTimeProvider: - * - * Opaque #GstNetTimeProvider structure. - */ -struct _GstNetTimeProvider { - GstObject parent; - - /*< private >*/ - GstNetTimeProviderPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstNetTimeProviderClass { - GstObjectClass parent_class; - - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_net_time_provider_get_type (void); - -GstNetTimeProvider* gst_net_time_provider_new (GstClock *clock, - const gchar *address, - gint port); - -G_END_DECLS - - -#endif /* __GST_NET_TIME_PROVIDER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/codec-utils.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/codec-utils.h deleted file mode 100644 index 7c2febf7..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/codec-utils.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GStreamer base utils library codec-specific utility functions - * Copyright (C) 2010 Arun Raghavan - * 2010 Collabora Multimedia - * 2010 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_CODEC_UTILS_H__ -#define __GST_PB_UTILS_CODEC_UTILS_H__ - -#include - -G_BEGIN_DECLS - -/* AAC */ - -guint gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx); - -const gchar * gst_codec_utils_aac_get_profile (const guint8 * audio_config, guint len); - -const gchar * gst_codec_utils_aac_get_level (const guint8 * audio_config, guint len); - -gboolean gst_codec_utils_aac_caps_set_level_and_profile (GstCaps * caps, - const guint8 * audio_config, - guint len); - -/* H.264 */ - -const gchar * gst_codec_utils_h264_get_profile (const guint8 * sps, guint len); - -const gchar * gst_codec_utils_h264_get_level (const guint8 * sps, guint len); - -guint8 gst_codec_utils_h264_get_level_idc (const gchar * level); - -gboolean gst_codec_utils_h264_caps_set_level_and_profile (GstCaps * caps, - const guint8 * sps, - guint len); - -/* MPEG-4 part 2 */ - -const gchar * gst_codec_utils_mpeg4video_get_profile (const guint8 * vis_obj_seq, guint len); - -const gchar * gst_codec_utils_mpeg4video_get_level (const guint8 * vis_obj_seq, guint len); - -gboolean gst_codec_utils_mpeg4video_caps_set_level_and_profile (GstCaps * caps, - const guint8 * vis_obj_seq, - guint len); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_CODEC_UTILS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/descriptions.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/descriptions.h deleted file mode 100644 index 5b19ecca..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/descriptions.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GStreamer base utils library source/sink/codec description support - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_DESCRIPTIONS_H__ -#define __GST_PB_UTILS_DESCRIPTIONS_H__ - -#include -#include - -G_BEGIN_DECLS - -/* - * functions for use by demuxers or decoders to add CODEC tags to tag lists - * from caps - */ - -gboolean gst_pb_utils_add_codec_description_to_tag_list (GstTagList * taglist, - const gchar * codec_tag, - const GstCaps * caps); - -gchar * gst_pb_utils_get_codec_description (const GstCaps * caps); - -/* - * functions mainly used by the missing plugins message creation functions to - * find descriptions of what exactly is missing - */ - -gchar * gst_pb_utils_get_source_description (const gchar * protocol); - -gchar * gst_pb_utils_get_sink_description (const gchar * protocol); - -gchar * gst_pb_utils_get_decoder_description (const GstCaps * caps); - -gchar * gst_pb_utils_get_encoder_description (const GstCaps * caps); - -gchar * gst_pb_utils_get_element_description (const gchar * factory_name); - - -G_END_DECLS - -#endif /* __GST_PB_UTILS_DESCRIPTIONS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-profile.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-profile.h deleted file mode 100644 index f6de6ed3..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-profile.h +++ /dev/null @@ -1,183 +0,0 @@ -/* GStreamer encoding profiles library - * Copyright (C) 2009-2010 Edward Hervey - * (C) 2009-2010 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PROFILE_H__ -#define __GST_PROFILE_H__ - -#include - -G_BEGIN_DECLS - -#include -#include - -/** - * GstEncodingProfile: - * - * The opaque base class object for all encoding profiles. This contains generic - * information like name, description, format and preset. - */ - -#define GST_TYPE_ENCODING_PROFILE \ - (gst_encoding_profile_get_type ()) -#define GST_ENCODING_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_PROFILE, GstEncodingProfile)) -#define GST_IS_ENCODING_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_PROFILE)) -typedef struct _GstEncodingProfile GstEncodingProfile; -typedef struct _GstEncodingProfileClass GstEncodingProfileClass; -GType gst_encoding_profile_get_type (void); - - - -/** - * GstEncodingContainerProfile: - * - * Encoding profiles for containers. Keeps track of a list of #GstEncodingProfile - */ -#define GST_TYPE_ENCODING_CONTAINER_PROFILE \ - (gst_encoding_container_profile_get_type ()) -#define GST_ENCODING_CONTAINER_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE, GstEncodingContainerProfile)) -#define GST_IS_ENCODING_CONTAINER_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE)) -typedef struct _GstEncodingContainerProfile GstEncodingContainerProfile; -typedef struct _GstEncodingContainerProfileClass GstEncodingContainerProfileClass; -GType gst_encoding_container_profile_get_type (void); - - - -/** - * GstEncodingVideoProfile: - * - * Variant of #GstEncodingProfile for video streams, allows specifying the @pass. - */ -#define GST_TYPE_ENCODING_VIDEO_PROFILE \ - (gst_encoding_video_profile_get_type ()) -#define GST_ENCODING_VIDEO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_VIDEO_PROFILE, GstEncodingVideoProfile)) -#define GST_IS_ENCODING_VIDEO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_VIDEO_PROFILE)) -typedef struct _GstEncodingVideoProfile GstEncodingVideoProfile; -typedef struct _GstEncodingVideoProfileClass GstEncodingVideoProfileClass; -GType gst_encoding_video_profile_get_type (void); - - - -/** - * GstEncodingAudioProfile: - * - * Variant of #GstEncodingProfile for audio streams. - */ -#define GST_TYPE_ENCODING_AUDIO_PROFILE \ - (gst_encoding_audio_profile_get_type ()) -#define GST_ENCODING_AUDIO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_AUDIO_PROFILE, GstEncodingAudioProfile)) -#define GST_IS_ENCODING_AUDIO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_AUDIO_PROFILE)) -typedef struct _GstEncodingAudioProfile GstEncodingAudioProfile; -typedef struct _GstEncodingAudioProfileClass GstEncodingAudioProfileClass; -GType gst_encoding_audio_profile_get_type (void); - - - -/* GstEncodingProfile API */ - -/** - * gst_encoding_profile_unref: - * @profile: a #GstEncodingProfile - * - * Decreases the reference count of the @profile, possibly freeing the @profile. - */ -#define gst_encoding_profile_unref(profile) (g_object_unref ((GObject*) profile)) - -/** - * gst_encoding_profile_ref: - * @profile: a #GstEncodingProfile - * - * Increases the reference count of the @profile. - */ -#define gst_encoding_profile_ref(profile) (g_object_ref ((GObject*) profile)) - -const gchar * gst_encoding_profile_get_name (GstEncodingProfile *profile); -void gst_encoding_profile_set_name (GstEncodingProfile *profile, - const gchar *name); -const gchar * gst_encoding_profile_get_description (GstEncodingProfile *profile); -void gst_encoding_profile_set_description (GstEncodingProfile *profile, - const gchar *description); -GstCaps * gst_encoding_profile_get_format (GstEncodingProfile *profile); -void gst_encoding_profile_set_format (GstEncodingProfile *profile, - GstCaps *format); -const gchar * gst_encoding_profile_get_preset (GstEncodingProfile *profile); -void gst_encoding_profile_set_preset (GstEncodingProfile *profile, - const gchar *preset); -guint gst_encoding_profile_get_presence (GstEncodingProfile *profile); -void gst_encoding_profile_set_presence (GstEncodingProfile *profile, - guint presence); -GstCaps * gst_encoding_profile_get_restriction (GstEncodingProfile *profile); -void gst_encoding_profile_set_restriction (GstEncodingProfile *profile, - GstCaps *restriction); - -gboolean gst_encoding_profile_is_equal (GstEncodingProfile *a, - GstEncodingProfile *b); -GstCaps * gst_encoding_profile_get_input_caps (GstEncodingProfile *profile); -const gchar * gst_encoding_profile_get_type_nick (GstEncodingProfile *profile); - -GstEncodingProfile * gst_encoding_profile_find (const gchar *targetname, - const gchar *profilename, - const gchar *category); - -/* GstEncodingContainerProfile API */ -gboolean gst_encoding_container_profile_add_profile (GstEncodingContainerProfile *container, - GstEncodingProfile *profile); -gboolean gst_encoding_container_profile_contains_profile (GstEncodingContainerProfile * container, - GstEncodingProfile *profile); -const GList * gst_encoding_container_profile_get_profiles (GstEncodingContainerProfile *profile); - - -GstEncodingContainerProfile * gst_encoding_container_profile_new (const gchar *name, - const gchar *description, - GstCaps *format, - const gchar *preset); - - -/* Invidual stream encodingprofile API */ -GstEncodingVideoProfile * gst_encoding_video_profile_new (GstCaps *format, - const gchar *preset, - GstCaps *restriction, - guint presence); -GstEncodingAudioProfile * gst_encoding_audio_profile_new (GstCaps *format, - const gchar *preset, - GstCaps *restriction, - guint presence); - -guint gst_encoding_video_profile_get_pass (GstEncodingVideoProfile *prof); -gboolean gst_encoding_video_profile_get_variableframerate (GstEncodingVideoProfile *prof); - -void gst_encoding_video_profile_set_pass (GstEncodingVideoProfile *prof, - guint pass); -void gst_encoding_video_profile_set_variableframerate (GstEncodingVideoProfile *prof, - gboolean variableframerate); - -GstEncodingProfile * gst_encoding_profile_from_discoverer (GstDiscovererInfo *info); - -G_END_DECLS - -#endif /* __GST_PROFILE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-target.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-target.h deleted file mode 100644 index bdfe3065..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/encoding-target.h +++ /dev/null @@ -1,143 +0,0 @@ -/* GStreamer encoding profile registry - * Copyright (C) 2010 Edward Hervey - * (C) 2010 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PROFILE_REGISTRY_H__ -#define __GST_PROFILE_REGISTRY_H__ - -#include - -G_BEGIN_DECLS - - -/* FIXME/UNKNOWNS - * - * Should encoding categories be well-known strings/quarks ? - * - */ - -/** - * GST_ENCODING_CATEGORY_DEVICE: - * - * #GstEncodingTarget category for device-specific targets. - * The name of the target will usually be the constructor and model of the device, - * and that target will contain #GstEncodingProfiles suitable for that device. - */ -#define GST_ENCODING_CATEGORY_DEVICE "device" - -/** - * GST_ENCODING_CATEGORY_ONLINE_SERVICE: - * - * #GstEncodingTarget category for online-services. - * The name of the target will usually be the name of the online service - * and that target will contain #GstEncodingProfiles suitable for that online - * service. - */ - -#define GST_ENCODING_CATEGORY_ONLINE_SERVICE "online-service" - -/** - * GST_ENCODING_CATEGORY_STORAGE_EDITING: - * - * #GstEncodingTarget category for storage, archiving and editing targets. - * Those targets can be lossless and/or provide very fast random access content. - * The name of the target will usually be the container type or editing target, - * and that target will contain #GstEncodingProfiles suitable for editing or - * storage. - */ -#define GST_ENCODING_CATEGORY_STORAGE_EDITING "storage-editing" - -/** - * GST_ENCODING_CATEGORY_CAPTURE: - * - * #GstEncodingTarget category for recording and capture. - * Targets within this category are optimized for low latency encoding. - */ -#define GST_ENCODING_CATEGORY_CAPTURE "capture" - -/** - * GstEncodingTarget: - * - * Collection of #GstEncodingProfile for a specific target or use-case. - * - * When being stored/loaded, targets come from a specific category, like - * #GST_ENCODING_CATEGORY_DEVICE. - */ -#define GST_TYPE_ENCODING_TARGET \ - (gst_encoding_target_get_type ()) -#define GST_ENCODING_TARGET(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_TARGET, GstEncodingTarget)) -#define GST_IS_ENCODING_TARGET(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_TARGET)) - -typedef struct _GstEncodingTarget GstEncodingTarget; -typedef GObjectClass GstEncodingTargetClass; - -GType gst_encoding_target_get_type (void); - -/** - * gst_encoding_target_unref: - * @target: a #GstEncodingTarget - * - * Decreases the reference count of the @target, possibly freeing it. - */ -#define gst_encoding_target_unref(target) \ - (g_object_unref ((GObject*) target)) - -/** - * gst_encoding_target_ref: - * @target: a #GstEncodingTarget - * - * Increases the reference count of the @target. - */ -#define gst_encoding_target_ref(target) \ - (g_object_ref ((GObject*) target)) - -GstEncodingTarget * gst_encoding_target_new (const gchar *name, - const gchar *category, - const gchar *description, - const GList *profiles); - -const gchar * gst_encoding_target_get_name (GstEncodingTarget *target); -const gchar * gst_encoding_target_get_category (GstEncodingTarget *target); -const gchar * gst_encoding_target_get_description (GstEncodingTarget *target); -const GList * gst_encoding_target_get_profiles (GstEncodingTarget *target); -GstEncodingProfile * gst_encoding_target_get_profile (GstEncodingTarget *target, - const gchar *name); - -gboolean gst_encoding_target_add_profile (GstEncodingTarget *target, - GstEncodingProfile *profile); - -gboolean gst_encoding_target_save (GstEncodingTarget *target, - GError **error); -gboolean gst_encoding_target_save_to_file (GstEncodingTarget *target, - const gchar *filepath, - GError **error); -GstEncodingTarget * gst_encoding_target_load (const gchar *name, - const gchar *category, - GError **error); -GstEncodingTarget * gst_encoding_target_load_from_file (const gchar *filepath, - GError **error); - -GList * gst_encoding_list_available_categories (void); -GList * gst_encoding_list_all_targets (const gchar * categoryname); - -G_END_DECLS - -#endif /* __GST_PROFILE_REGISTRY_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h deleted file mode 100644 index d71272ca..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h +++ /dev/null @@ -1,277 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Edward Hervey - * 2009 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_DISCOVERER_H_ -#define _GST_DISCOVERER_H_ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_DISCOVERER_STREAM_INFO \ - (gst_discoverer_stream_info_get_type ()) -#define GST_DISCOVERER_STREAM_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_STREAM_INFO, GstDiscovererStreamInfo)) -#define GST_IS_DISCOVERER_STREAM_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_STREAM_INFO)) -typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo; -typedef GObjectClass GstDiscovererStreamInfoClass; -GType gst_discoverer_stream_info_get_type (void); - -/** - * GstDiscovererStreamInfo: - * - * Base structure for information concerning a media stream. Depending on the - * stream type, one can find more media-specific information in - * #GstDiscovererAudioInfo, #GstDiscovererVideoInfo, and - * #GstDiscovererContainerInfo. - * - * The #GstDiscovererStreamInfo represents the topology of the stream. Siblings - * can be iterated over with gst_discoverer_stream_info_get_next() and - * gst_discoverer_stream_info_get_previous(). Children (sub-streams) of a - * stream can be accessed using the #GstDiscovererContainerInfo API. - * - * As a simple example, if you run #GstDiscoverer on an AVI file with one audio - * and one video stream, you will get a #GstDiscovererContainerInfo - * corresponding to the AVI container, which in turn will have a - * #GstDiscovererAudioInfo sub-stream and a #GstDiscovererVideoInfo sub-stream - * for the audio and video streams respectively. - */ -#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info)) -#define gst_discoverer_stream_info_unref(info) (g_object_unref((GObject*) info)) - -GstDiscovererStreamInfo* gst_discoverer_stream_info_get_previous(GstDiscovererStreamInfo* info); -GstDiscovererStreamInfo* gst_discoverer_stream_info_get_next(GstDiscovererStreamInfo* info); -GstCaps* gst_discoverer_stream_info_get_caps(GstDiscovererStreamInfo* info); -const GstTagList* gst_discoverer_stream_info_get_tags(GstDiscovererStreamInfo* info); -const GstToc* gst_discoverer_stream_info_get_toc(GstDiscovererStreamInfo* info); -const GstStructure* gst_discoverer_stream_info_get_misc(GstDiscovererStreamInfo* info); -const gchar * gst_discoverer_stream_info_get_stream_type_nick(GstDiscovererStreamInfo* info); - -/** - * GstDiscovererContainerInfo: - * - * #GstDiscovererStreamInfo specific to container streams. - */ -#define GST_TYPE_DISCOVERER_CONTAINER_INFO \ - (gst_discoverer_container_info_get_type ()) -#define GST_DISCOVERER_CONTAINER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO, GstDiscovererContainerInfo)) -#define GST_IS_DISCOVERER_CONTAINER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO)) -typedef struct _GstDiscovererContainerInfo GstDiscovererContainerInfo; -typedef GObjectClass GstDiscovererContainerInfoClass; - -GType gst_discoverer_container_info_get_type (void); - -GList *gst_discoverer_container_info_get_streams(GstDiscovererContainerInfo *info); - - -/** - * GstDiscovererAudioInfo: - * - * #GstDiscovererStreamInfo specific to audio streams. - */ -#define GST_TYPE_DISCOVERER_AUDIO_INFO \ - (gst_discoverer_audio_info_get_type ()) -#define GST_DISCOVERER_AUDIO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_AUDIO_INFO, GstDiscovererAudioInfo)) -#define GST_IS_DISCOVERER_AUDIO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_AUDIO_INFO)) -typedef struct _GstDiscovererAudioInfo GstDiscovererAudioInfo; -typedef GObjectClass GstDiscovererAudioInfoClass; - -GType gst_discoverer_audio_info_get_type (void); - -guint gst_discoverer_audio_info_get_channels(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_depth(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_bitrate(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_max_bitrate(const GstDiscovererAudioInfo* info); -const gchar * gst_discoverer_audio_info_get_language(const GstDiscovererAudioInfo* info); - -/** - * GstDiscovererVideoInfo: - * - * #GstDiscovererStreamInfo specific to video streams (this includes images). - */ -#define GST_TYPE_DISCOVERER_VIDEO_INFO \ - (gst_discoverer_video_info_get_type ()) -#define GST_DISCOVERER_VIDEO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_VIDEO_INFO, GstDiscovererVideoInfo)) -#define GST_IS_DISCOVERER_VIDEO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_VIDEO_INFO)) -typedef struct _GstDiscovererVideoInfo GstDiscovererVideoInfo; -typedef GObjectClass GstDiscovererVideoInfoClass; -GType gst_discoverer_video_info_get_type (void); - -guint gst_discoverer_video_info_get_width(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_height(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_depth(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_framerate_num(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_framerate_denom(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_par_num(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_par_denom(const GstDiscovererVideoInfo* info); -gboolean gst_discoverer_video_info_is_interlaced(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_bitrate(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_max_bitrate(const GstDiscovererVideoInfo* info); -gboolean gst_discoverer_video_info_is_image(const GstDiscovererVideoInfo* info); - -/** - * GstDiscovererSubtitleInfo: - * - * #GstDiscovererStreamInfo specific to subtitle streams (this includes text and - * image based ones). - */ -#define GST_TYPE_DISCOVERER_SUBTITLE_INFO \ - (gst_discoverer_subtitle_info_get_type ()) -#define GST_DISCOVERER_SUBTITLE_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO, GstDiscovererSubtitleInfo)) -#define GST_IS_DISCOVERER_SUBTITLE_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO)) -typedef struct _GstDiscovererSubtitleInfo GstDiscovererSubtitleInfo; -typedef GObjectClass GstDiscovererSubtitleInfoClass; -GType gst_discoverer_subtitle_info_get_type (void); - -const gchar * gst_discoverer_subtitle_info_get_language(const GstDiscovererSubtitleInfo* info); - -/** - * GstDiscovererResult: - * @GST_DISCOVERER_OK: The discovery was successful - * @GST_DISCOVERER_URI_INVALID: the URI is invalid - * @GST_DISCOVERER_ERROR: an error happened and the GError is set - * @GST_DISCOVERER_TIMEOUT: the discovery timed-out - * @GST_DISCOVERER_BUSY: the discoverer was already discovering a file - * @GST_DISCOVERER_MISSING_PLUGINS: Some plugins are missing for full discovery - * - * Result values for the discovery process. - */ -typedef enum { - GST_DISCOVERER_OK = 0, - GST_DISCOVERER_URI_INVALID = 1, - GST_DISCOVERER_ERROR = 2, - GST_DISCOVERER_TIMEOUT = 3, - GST_DISCOVERER_BUSY = 4, - GST_DISCOVERER_MISSING_PLUGINS = 5 -} GstDiscovererResult; - - -/** - * GstDiscovererInfo: - * - * Structure containing the information of a URI analyzed by #GstDiscoverer. - */ -typedef struct _GstDiscovererInfo GstDiscovererInfo; - -#define GST_TYPE_DISCOVERER_INFO \ - (gst_discoverer_info_get_type ()) -#define GST_DISCOVERER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_INFO, GstDiscovererInfo)) -#define GST_IS_DISCOVERER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_INFO)) -typedef GObjectClass GstDiscovererInfoClass; -GType gst_discoverer_info_get_type (void); - -#define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info)) -#define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info)) - -GstDiscovererInfo* gst_discoverer_info_copy (GstDiscovererInfo * ptr); - -const gchar* gst_discoverer_info_get_uri(const GstDiscovererInfo* info); -GstDiscovererResult gst_discoverer_info_get_result(const GstDiscovererInfo* info); -GstDiscovererStreamInfo* gst_discoverer_info_get_stream_info(GstDiscovererInfo* info); -GList* gst_discoverer_info_get_stream_list(GstDiscovererInfo* info); -GstClockTime gst_discoverer_info_get_duration(const GstDiscovererInfo* info); -gboolean gst_discoverer_info_get_seekable(const GstDiscovererInfo* info); -const GstStructure* gst_discoverer_info_get_misc(const GstDiscovererInfo* info); -const GstTagList* gst_discoverer_info_get_tags(const GstDiscovererInfo* info); -const GstToc* gst_discoverer_info_get_toc(const GstDiscovererInfo* info); - -GList * gst_discoverer_info_get_streams (GstDiscovererInfo *info, - GType streamtype); -GList * gst_discoverer_info_get_audio_streams (GstDiscovererInfo *info); -GList * gst_discoverer_info_get_video_streams (GstDiscovererInfo *info); -GList * gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info); -GList * gst_discoverer_info_get_container_streams (GstDiscovererInfo *info); - -void gst_discoverer_stream_info_list_free (GList *infos); - -#define GST_TYPE_DISCOVERER \ - (gst_discoverer_get_type()) -#define GST_DISCOVERER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER,GstDiscoverer)) -#define GST_DISCOVERER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISCOVERER,GstDiscovererClass)) -#define GST_IS_DISCOVERER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER)) -#define GST_IS_DISCOVERER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISCOVERER)) - -typedef struct _GstDiscoverer GstDiscoverer; -typedef struct _GstDiscovererClass GstDiscovererClass; -typedef struct _GstDiscovererPrivate GstDiscovererPrivate; - -/** - * GstDiscoverer: - * - * The #GstDiscoverer structure. - **/ -struct _GstDiscoverer { - GObject parent; - - /*< private >*/ - GstDiscovererPrivate *priv; - - gpointer _reserved[GST_PADDING]; -}; - -struct _GstDiscovererClass { - GObjectClass parentclass; - - /* signals */ - void (*finished) (GstDiscoverer *discoverer); - void (*starting) (GstDiscoverer *discoverer); - void (*discovered) (GstDiscoverer *discoverer, - GstDiscovererInfo *info, - const GError *err); - void (*source_setup) (GstDiscoverer *discoverer, - GstElement *source); - - gpointer _reserved[GST_PADDING]; -}; - -GType gst_discoverer_get_type (void); -GstDiscoverer *gst_discoverer_new (GstClockTime timeout, GError **err); - -/* Asynchronous API */ -void gst_discoverer_start (GstDiscoverer *discoverer); -void gst_discoverer_stop (GstDiscoverer *discoverer); -gboolean gst_discoverer_discover_uri_async (GstDiscoverer *discoverer, - const gchar *uri); - -/* Synchronous API */ -GstDiscovererInfo * -gst_discoverer_discover_uri (GstDiscoverer * discoverer, - const gchar * uri, - GError ** err); - -G_END_DECLS - -#endif /* _GST_DISCOVERER_H */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h deleted file mode 100644 index c8ff07a2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GStreamer base plugins libraries version information - * Copyright (C) 2010 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PLUGINS_BASE_VERSION_H__ -#define __GST_PLUGINS_BASE_VERSION_H__ - -#include - -G_BEGIN_DECLS - -/** - * GST_PLUGINS_BASE_VERSION_MAJOR: - * - * The major version of GStreamer's gst-plugins-base libraries at compile time. - */ -#define GST_PLUGINS_BASE_VERSION_MAJOR (1) -/** - * GST_PLUGINS_BASE_VERSION_MINOR: - * - * The minor version of GStreamer's gst-plugins-base libraries at compile time. - */ -#define GST_PLUGINS_BASE_VERSION_MINOR (0) -/** - * GST_PLUGINS_BASE_VERSION_MICRO: - * - * The micro version of GStreamer's gst-plugins-base libraries at compile time. - */ -#define GST_PLUGINS_BASE_VERSION_MICRO (5) -/** - * GST_PLUGINS_BASE_VERSION_NANO: - * - * The nano version of GStreamer's gst-plugins-base libraries at compile time. - * Actual releases have 0, GIT versions have 1, prerelease versions have 2-... - */ -#define GST_PLUGINS_BASE_VERSION_NANO (0) - -/** - * GST_CHECK_PLUGIN_BASE_VERSION: - * @major: a number indicating the major version - * @minor: a number indicating the minor version - * @micro: a number indicating the micro version - * - * Check whether a GStreamer's gst-plugins-base libraries' version equal to - * or greater than major.minor.micro is present. - */ -#define GST_CHECK_PLUGINS_BASE_VERSION(major,minor,micro) \ - (GST_PLUGINS_BASE_VERSION_MAJOR > (major) || \ - (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR > (minor)) || \ - (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \ - GST_PLUGINS_BASE_VERSION_MICRO >= (micro)) || \ - (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \ - GST_PLUGINS_BASE_VERSION_MICRO + 1 == (micro) && GST_PLUGINS_BASE_VERSION_NANO > 0)) - -void gst_plugins_base_version (guint *major, guint *minor, guint *micro, guint *nano); - -gchar * gst_plugins_base_version_string (void); - -G_END_DECLS - -#endif /* __GST_PLUGINS_BASE_VERSION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/install-plugins.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/install-plugins.h deleted file mode 100644 index 173adb1b..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/install-plugins.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GStreamer base utils library plugin install support for applications - * Copyright (C) 2007 Tim-Philipp Müller - * Copyright (C) 2006 Ryan Lortie - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_INSTALL_PLUGINS_H__ -#define __GST_PB_UTILS_INSTALL_PLUGINS_H__ - -#include - -G_BEGIN_DECLS - -/* - * functions for use by applications to initiate installation of missing plugins - */ - -/** - * GstInstallPluginsReturn: - * @GST_INSTALL_PLUGINS_SUCCESS: all of the requested plugins could be - * installed - * @GST_INSTALL_PLUGINS_NOT_FOUND: no appropriate installation candidate for - * any of the requested plugins could be found. Only return this if nothing - * has been installed. Return #GST_INSTALL_PLUGINS_PARTIAL_SUCCESS if - * some (but not all) of the requested plugins could be installed. - * @GST_INSTALL_PLUGINS_ERROR: an error occured during the installation. If - * this happens, the user has already seen an error message and another - * one should not be displayed - * @GST_INSTALL_PLUGINS_CRASHED: the installer had an unclean exit code - * (ie. death by signal) - * @GST_INSTALL_PLUGINS_PARTIAL_SUCCESS: some of the requested plugins could - * be installed, but not all - * @GST_INSTALL_PLUGINS_USER_ABORT: the user has aborted the installation - * @GST_INSTALL_PLUGINS_INVALID: the helper returned an invalid status code - * @GST_INSTALL_PLUGINS_STARTED_OK: returned by gst_install_plugins_async() to - * indicate that everything went fine so far and the provided callback - * will be called with the result of the installation later - * @GST_INSTALL_PLUGINS_INTERNAL_FAILURE: some internal failure has - * occured when trying to start the installer - * @GST_INSTALL_PLUGINS_HELPER_MISSING: the helper script to call the - * actual installer is not installed - * @GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS: a previously-started plugin - * installation is still in progress, try again later - * - * Result codes returned by gst_install_plugins_async() and - * gst_install_plugins_sync(), and also the result code passed to the - * #GstInstallPluginsResultFunc specified with gst_install_plugins_async(). - * - * These codes indicate success or failure of starting an external installer - * program and to what extent the requested plugins could be installed. - */ -typedef enum { - /* Return codes from the installer. Returned by gst_install_plugins_sync(), - * or passed as result code to your #GstInstallPluginsResultFunc */ - GST_INSTALL_PLUGINS_SUCCESS = 0, - GST_INSTALL_PLUGINS_NOT_FOUND = 1, - GST_INSTALL_PLUGINS_ERROR = 2, - GST_INSTALL_PLUGINS_PARTIAL_SUCCESS = 3, - GST_INSTALL_PLUGINS_USER_ABORT = 4, - - /* Returned by gst_install_plugins_sync(), or passed as result code to your - * #GstInstallPluginsResultFunc */ - GST_INSTALL_PLUGINS_CRASHED = 100, - GST_INSTALL_PLUGINS_INVALID, - - /* Return codes from starting the external helper, may be returned by both - * gst_install_plugins_sync() and gst_install_plugins_async(), but should - * never be seen by a #GstInstallPluginsResultFunc */ - GST_INSTALL_PLUGINS_STARTED_OK = 200, - GST_INSTALL_PLUGINS_INTERNAL_FAILURE, - GST_INSTALL_PLUGINS_HELPER_MISSING, - GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS -} GstInstallPluginsReturn; - -/** - * GstInstallPluginsContext: - * - * Opaque context structure for the plugin installation. Use the provided - * API to set details on it. - */ - -#define GST_TYPE_INSTALL_PLUGINS_CONTEXT (gst_install_plugins_context_get_type()) - -typedef struct _GstInstallPluginsContext GstInstallPluginsContext; - -GstInstallPluginsContext * gst_install_plugins_context_new (void); - -void gst_install_plugins_context_free (GstInstallPluginsContext * ctx); - -void gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx, - guint xid); - -GType gst_install_plugins_context_get_type (void); - -/** - * GstInstallPluginsResultFunc: - * @result: whether the installation of the requested plugins succeeded or not - * @user_data: the user data passed to gst_install_plugins_async() - * - * The prototype of the callback function that will be called once the - * external plugin installer program has returned. You only need to provide - * a callback function if you are using the asynchronous interface. - */ -typedef void (*GstInstallPluginsResultFunc) (GstInstallPluginsReturn result, - gpointer user_data); - -GstInstallPluginsReturn gst_install_plugins_async (const gchar * const * details, - GstInstallPluginsContext * ctx, - GstInstallPluginsResultFunc func, - gpointer user_data); - -GstInstallPluginsReturn gst_install_plugins_sync (const gchar * const * details, - GstInstallPluginsContext * ctx); - -const gchar * gst_install_plugins_return_get_name (GstInstallPluginsReturn ret); - -gboolean gst_install_plugins_installation_in_progress (void); - -gboolean gst_install_plugins_supported (void); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/missing-plugins.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/missing-plugins.h deleted file mode 100644 index 508304e4..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/missing-plugins.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer base utils library missing plugins support - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_MISSING_PLUGINS_H__ -#define __GST_PB_UTILS_MISSING_PLUGINS_H__ - -#include -#include - -G_BEGIN_DECLS - -/* - * functions to create missing-plugin messages, for use by plugins primarily - */ - -GstMessage * gst_missing_uri_source_message_new (GstElement * element, - const gchar * protocol); - -GstMessage * gst_missing_uri_sink_message_new (GstElement * element, - const gchar * protocol); - -GstMessage * gst_missing_element_message_new (GstElement * element, - const gchar * factory_name); - -GstMessage * gst_missing_decoder_message_new (GstElement * element, - const GstCaps * decode_caps); - -GstMessage * gst_missing_encoder_message_new (GstElement * element, - const GstCaps * encode_caps); - -/* - * functions for use by applications when dealing with missing-plugin messages - */ - -gchar * gst_missing_plugin_message_get_installer_detail (GstMessage * msg); - -gchar * gst_missing_plugin_message_get_description (GstMessage * msg); - -gboolean gst_is_missing_plugin_message (GstMessage * msg); - - -/* - * functions for use by applications that know exactly what plugins they are - * missing and want to request them directly rather than just react to - * missing-plugin messages posted by elements such as playbin or decodebin - */ - -gchar * gst_missing_uri_source_installer_detail_new (const gchar * protocol); - -gchar * gst_missing_uri_sink_installer_detail_new (const gchar * protocol); - -gchar * gst_missing_element_installer_detail_new (const gchar * factory_name); - -gchar * gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps); - -gchar * gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_MISSING_PLUGINS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h deleted file mode 100644 index 30dadfd9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h +++ /dev/null @@ -1,23 +0,0 @@ - - - -#ifndef __PB_UTILS_ENUM_TYPES_H__ -#define __PB_UTILS_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "install-plugins.h" */ -GType gst_install_plugins_return_get_type (void); -#define GST_TYPE_INSTALL_PLUGINS_RETURN (gst_install_plugins_return_get_type()) - -/* enumerations from "gstdiscoverer.h" */ -GType gst_discoverer_result_get_type (void); -#define GST_TYPE_DISCOVERER_RESULT (gst_discoverer_result_get_type()) -G_END_DECLS - -#endif /* __PB_UTILS_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils.h deleted file mode 100644 index b9277b13..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/pbutils/pbutils.h +++ /dev/null @@ -1,42 +0,0 @@ -/* GStreamer base utils library - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_BASE_UTILS_H__ -#define __GST_PB_UTILS_BASE_UTILS_H__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -void gst_pb_utils_init (void); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_BASE_UTILS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-ids.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-ids.h deleted file mode 100644 index ab561792..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-ids.h +++ /dev/null @@ -1,523 +0,0 @@ -/* GStreamer RIFF I/O - * Copyright (C) 2003 Ronald Bultje - * - * riff-ids.h: RIFF IDs and structs - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RIFF_IDS_H__ -#define __GST_RIFF_IDS_H__ - -#include - -G_BEGIN_DECLS - -/* RIFF types */ -#define GST_RIFF_RIFF_WAVE GST_MAKE_FOURCC ('W','A','V','E') -#define GST_RIFF_RIFF_AVI GST_MAKE_FOURCC ('A','V','I',' ') -#define GST_RIFF_RIFF_CDXA GST_MAKE_FOURCC ('C','D','X','A') - -/* tags */ -#define GST_RIFF_TAG_RIFF GST_MAKE_FOURCC ('R','I','F','F') -#define GST_RIFF_TAG_AVF0 GST_MAKE_FOURCC ('A','V','F','0') -#define GST_RIFF_TAG_RIFX GST_MAKE_FOURCC ('R','I','F','X') -#define GST_RIFF_TAG_LIST GST_MAKE_FOURCC ('L','I','S','T') -#define GST_RIFF_TAG_avih GST_MAKE_FOURCC ('a','v','i','h') -#define GST_RIFF_TAG_strd GST_MAKE_FOURCC ('s','t','r','d') -#define GST_RIFF_TAG_strn GST_MAKE_FOURCC ('s','t','r','n') -#define GST_RIFF_TAG_strh GST_MAKE_FOURCC ('s','t','r','h') -#define GST_RIFF_TAG_strf GST_MAKE_FOURCC ('s','t','r','f') -#define GST_RIFF_TAG_vedt GST_MAKE_FOURCC ('v','e','d','t') -#define GST_RIFF_TAG_JUNK GST_MAKE_FOURCC ('J','U','N','K') -#define GST_RIFF_TAG_JUNQ GST_MAKE_FOURCC ('J','U','N','Q') -#define GST_RIFF_TAG_idx1 GST_MAKE_FOURCC ('i','d','x','1') -#define GST_RIFF_TAG_dmlh GST_MAKE_FOURCC ('d','m','l','h') -#define GST_RIFF_TAG_ID32 GST_MAKE_FOURCC ('I','D','3','2') -#define GST_RIFF_TAG_IDVX GST_MAKE_FOURCC ('I','D','V','X') -/* WAV stuff */ -#define GST_RIFF_TAG_fmt GST_MAKE_FOURCC ('f','m','t',' ') -#define GST_RIFF_TAG_data GST_MAKE_FOURCC ('d','a','t','a') -#define GST_RIFF_TAG_plst GST_MAKE_FOURCC ('p','l','s','t') -#define GST_RIFF_TAG_cue GST_MAKE_FOURCC ('c','u','e',' ') -#define GST_RIFF_TAG_bext GST_MAKE_FOURCC ('b','e','x','t') -#define GST_RIFF_TAG_BEXT GST_MAKE_FOURCC ('B','E','X','T') -#define GST_RIFF_TAG_fact GST_MAKE_FOURCC ('f','a','c','t') -#define GST_RIFF_TAG_acid GST_MAKE_FOURCC ('a','c','i','d') -#define GST_RIFF_TAG_labl GST_MAKE_FOURCC ('l','a','b','l') - -/* LIST types */ -#define GST_RIFF_LIST_movi GST_MAKE_FOURCC ('m','o','v','i') -#define GST_RIFF_LIST_hdrl GST_MAKE_FOURCC ('h','d','r','l') -#define GST_RIFF_LIST_odml GST_MAKE_FOURCC ('o','d','m','l') -#define GST_RIFF_LIST_strl GST_MAKE_FOURCC ('s','t','r','l') -#define GST_RIFF_LIST_INFO GST_MAKE_FOURCC ('I','N','F','O') -#define GST_RIFF_LIST_AVIX GST_MAKE_FOURCC ('A','V','I','X') -#define GST_RIFF_LIST_adtl GST_MAKE_FOURCC ('a','d','t','l') - -/* fcc types */ -#define GST_RIFF_FCC_vids GST_MAKE_FOURCC ('v','i','d','s') -#define GST_RIFF_FCC_auds GST_MAKE_FOURCC ('a','u','d','s') -#define GST_RIFF_FCC_pads GST_MAKE_FOURCC ('p','a','d','s') -#define GST_RIFF_FCC_txts GST_MAKE_FOURCC ('t','x','t','s') -#define GST_RIFF_FCC_vidc GST_MAKE_FOURCC ('v','i','d','c') -#define GST_RIFF_FCC_iavs GST_MAKE_FOURCC ('i','a','v','s') -/* fcc handlers */ -#define GST_RIFF_FCCH_RLE GST_MAKE_FOURCC ('R','L','E',' ') -#define GST_RIFF_FCCH_msvc GST_MAKE_FOURCC ('m','s','v','c') -#define GST_RIFF_FCCH_MSVC GST_MAKE_FOURCC ('M','S','V','C') - -/* INFO types - see http://www.saettler.com/RIFFMCI/riffmci.html */ -#define GST_RIFF_INFO_IARL GST_MAKE_FOURCC ('I','A','R','L') /* location */ -#define GST_RIFF_INFO_IART GST_MAKE_FOURCC ('I','A','R','T') /* artist */ -#define GST_RIFF_INFO_ICMS GST_MAKE_FOURCC ('I','C','M','S') /* commissioned */ -#define GST_RIFF_INFO_ICMT GST_MAKE_FOURCC ('I','C','M','T') /* comment */ -#define GST_RIFF_INFO_ICOP GST_MAKE_FOURCC ('I','C','O','P') /* copyright */ -#define GST_RIFF_INFO_ICRD GST_MAKE_FOURCC ('I','C','R','D') /* creation date */ -#define GST_RIFF_INFO_ICRP GST_MAKE_FOURCC ('I','C','R','P') /* cropped */ -#define GST_RIFF_INFO_IDIM GST_MAKE_FOURCC ('I','D','I','M') /* dimensions */ -#define GST_RIFF_INFO_IDPI GST_MAKE_FOURCC ('I','D','P','I') /* dots-per-inch */ -#define GST_RIFF_INFO_IENG GST_MAKE_FOURCC ('I','E','N','G') /* engineer(s) */ -#define GST_RIFF_INFO_IGNR GST_MAKE_FOURCC ('I','G','N','R') /* genre */ -#define GST_RIFF_INFO_IKEY GST_MAKE_FOURCC ('I','K','E','Y') /* keywords */ -#define GST_RIFF_INFO_ILGT GST_MAKE_FOURCC ('I','L','G','T') /* lightness */ -#define GST_RIFF_INFO_IMED GST_MAKE_FOURCC ('I','M','E','D') /* medium */ -#define GST_RIFF_INFO_INAM GST_MAKE_FOURCC ('I','N','A','M') /* name */ -#define GST_RIFF_INFO_IPLT GST_MAKE_FOURCC ('I','P','L','T') /* palette setting */ -#define GST_RIFF_INFO_IPRD GST_MAKE_FOURCC ('I','P','R','D') /* product (album) */ -#define GST_RIFF_INFO_ISBJ GST_MAKE_FOURCC ('I','S','B','J') /* subject */ -#define GST_RIFF_INFO_ISFT GST_MAKE_FOURCC ('I','S','F','T') /* software */ -#define GST_RIFF_INFO_ISHP GST_MAKE_FOURCC ('I','S','H','P') /* sharpness */ -#define GST_RIFF_INFO_ISRC GST_MAKE_FOURCC ('I','S','R','C') /* source */ -#define GST_RIFF_INFO_ISRF GST_MAKE_FOURCC ('I','S','R','F') /* source form */ -#define GST_RIFF_INFO_ITCH GST_MAKE_FOURCC ('I','T','C','H') /* technician(s) */ - -#define GST_RIFF_INFO_IAAR GST_MAKE_FOURCC ('I','A','A','R') /* album artist */ -#define GST_RIFF_INFO_ITRK GST_MAKE_FOURCC ('I','T','R','K') /* track number */ - -/*********Chunk Names***************/ -#define GST_RIFF_FF00 GST_MAKE_FOURCC (0xFF,0xFF,0x00,0x00) -#define GST_RIFF_00 GST_MAKE_FOURCC ('0', '0',0x00,0x00) -#define GST_RIFF_01 GST_MAKE_FOURCC ('0', '1',0x00,0x00) -#define GST_RIFF_02 GST_MAKE_FOURCC ('0', '2',0x00,0x00) -#define GST_RIFF_03 GST_MAKE_FOURCC ('0', '3',0x00,0x00) -#define GST_RIFF_04 GST_MAKE_FOURCC ('0', '4',0x00,0x00) -#define GST_RIFF_05 GST_MAKE_FOURCC ('0', '5',0x00,0x00) -#define GST_RIFF_06 GST_MAKE_FOURCC ('0', '6',0x00,0x00) -#define GST_RIFF_07 GST_MAKE_FOURCC ('0', '7',0x00,0x00) -#define GST_RIFF_00pc GST_MAKE_FOURCC ('0', '0', 'p', 'c') -#define GST_RIFF_01pc GST_MAKE_FOURCC ('0', '1', 'p', 'c') -#define GST_RIFF_00dc GST_MAKE_FOURCC ('0', '0', 'd', 'c') -#define GST_RIFF_00dx GST_MAKE_FOURCC ('0', '0', 'd', 'x') -#define GST_RIFF_00db GST_MAKE_FOURCC ('0', '0', 'd', 'b') -#define GST_RIFF_00xx GST_MAKE_FOURCC ('0', '0', 'x', 'x') -#define GST_RIFF_00id GST_MAKE_FOURCC ('0', '0', 'i', 'd') -#define GST_RIFF_00rt GST_MAKE_FOURCC ('0', '0', 'r', 't') -#define GST_RIFF_0021 GST_MAKE_FOURCC ('0', '0', '2', '1') -#define GST_RIFF_00iv GST_MAKE_FOURCC ('0', '0', 'i', 'v') -#define GST_RIFF_0031 GST_MAKE_FOURCC ('0', '0', '3', '1') -#define GST_RIFF_0032 GST_MAKE_FOURCC ('0', '0', '3', '2') -#define GST_RIFF_00vc GST_MAKE_FOURCC ('0', '0', 'v', 'c') -#define GST_RIFF_00xm GST_MAKE_FOURCC ('0', '0', 'x', 'm') -#define GST_RIFF_01wb GST_MAKE_FOURCC ('0', '1', 'w', 'b') -#define GST_RIFF_01dc GST_MAKE_FOURCC ('0', '1', 'd', 'c') -#define GST_RIFF_00__ GST_MAKE_FOURCC ('0', '0', '_', '_') - -/*********VIDEO CODECS**************/ -#define GST_RIFF_cram GST_MAKE_FOURCC ('c', 'r', 'a', 'm') -#define GST_RIFF_CRAM GST_MAKE_FOURCC ('C', 'R', 'A', 'M') -#define GST_RIFF_wham GST_MAKE_FOURCC ('w', 'h', 'a', 'm') -#define GST_RIFF_WHAM GST_MAKE_FOURCC ('W', 'H', 'A', 'M') -#define GST_RIFF_rgb GST_MAKE_FOURCC (0x00,0x00,0x00,0x00) -#define GST_RIFF_RGB GST_MAKE_FOURCC ('R', 'G', 'B', ' ') -#define GST_RIFF_RAW GST_MAKE_FOURCC ('R', 'A', 'W', ' ') -#define GST_RIFF_DIB GST_MAKE_FOURCC ('D', 'I', 'B', ' ') -#define GST_RIFF_rle8 GST_MAKE_FOURCC (0x01,0x00,0x00,0x00) -#define GST_RIFF_RLE8 GST_MAKE_FOURCC ('R', 'L', 'E', '8') -#define GST_RIFF_rle4 GST_MAKE_FOURCC (0x02,0x00,0x00,0x00) -#define GST_RIFF_RLE4 GST_MAKE_FOURCC ('R', 'L', 'E', '4') -#define GST_RIFF_none GST_MAKE_FOURCC (0x00,0x00,0xFF,0xFF) -#define GST_RIFF_NONE GST_MAKE_FOURCC ('N', 'O', 'N', 'E') -#define GST_RIFF_pack GST_MAKE_FOURCC (0x01,0x00,0xFF,0xFF) -#define GST_RIFF_PACK GST_MAKE_FOURCC ('P', 'A', 'C', 'K') -#define GST_RIFF_tran GST_MAKE_FOURCC (0x02,0x00,0xFF,0xFF) -#define GST_RIFF_TRAN GST_MAKE_FOURCC ('T', 'R', 'A', 'N') -#define GST_RIFF_ccc GST_MAKE_FOURCC (0x03,0x00,0xFF,0xFF) -#define GST_RIFF_CCC GST_MAKE_FOURCC ('C', 'C', 'C', ' ') -#define GST_RIFF_cyuv GST_MAKE_FOURCC ('c', 'y', 'u', 'v') -#define GST_RIFF_CYUV GST_MAKE_FOURCC ('C', 'Y', 'U', 'V') -#define GST_RIFF_jpeg GST_MAKE_FOURCC (0x04,0x00,0xFF,0xFF) -#define GST_RIFF_JPEG GST_MAKE_FOURCC ('J', 'P', 'E', 'G') -#define GST_RIFF_MJPG GST_MAKE_FOURCC ('M', 'J', 'P', 'G') -#define GST_RIFF_mJPG GST_MAKE_FOURCC ('m', 'J', 'P', 'G') -#define GST_RIFF_IJPG GST_MAKE_FOURCC ('I', 'J', 'P', 'G') -#define GST_RIFF_rt21 GST_MAKE_FOURCC ('r', 't', '2', '1') -#define GST_RIFF_RT21 GST_MAKE_FOURCC ('R', 'T', '2', '1') -#define GST_RIFF_iv31 GST_MAKE_FOURCC ('i', 'v', '3', '1') -#define GST_RIFF_IV31 GST_MAKE_FOURCC ('I', 'V', '3', '1') -#define GST_RIFF_iv32 GST_MAKE_FOURCC ('i', 'v', '3', '2') -#define GST_RIFF_IV32 GST_MAKE_FOURCC ('I', 'V', '3', '2') -#define GST_RIFF_iv41 GST_MAKE_FOURCC ('i', 'v', '4', '1') -#define GST_RIFF_IV41 GST_MAKE_FOURCC ('I', 'V', '4', '1') -#define GST_RIFF_iv50 GST_MAKE_FOURCC ('i', 'v', '5', '0') -#define GST_RIFF_IV50 GST_MAKE_FOURCC ('I', 'V', '5', '0') -#define GST_RIFF_cvid GST_MAKE_FOURCC ('c', 'v', 'i', 'd') -#define GST_RIFF_CVID GST_MAKE_FOURCC ('C', 'V', 'I', 'D') -#define GST_RIFF_ULTI GST_MAKE_FOURCC ('U', 'L', 'T', 'I') -#define GST_RIFF_ulti GST_MAKE_FOURCC ('u', 'l', 't', 'i') -#define GST_RIFF_YUV9 GST_MAKE_FOURCC ('Y', 'V', 'U', '9') -#define GST_RIFF_YVU9 GST_MAKE_FOURCC ('Y', 'U', 'V', '9') -#define GST_RIFF_XMPG GST_MAKE_FOURCC ('X', 'M', 'P', 'G') -#define GST_RIFF_xmpg GST_MAKE_FOURCC ('x', 'm', 'p', 'g') -#define GST_RIFF_VDOW GST_MAKE_FOURCC ('V', 'D', 'O', 'W') -#define GST_RIFF_MVI1 GST_MAKE_FOURCC ('M', 'V', 'I', '1') -#define GST_RIFF_v422 GST_MAKE_FOURCC ('v', '4', '2', '2') -#define GST_RIFF_V422 GST_MAKE_FOURCC ('V', '4', '2', '2') -#define GST_RIFF_mvi1 GST_MAKE_FOURCC ('m', 'v', 'i', '1') -#define GST_RIFF_MPIX GST_MAKE_FOURCC (0x04,0x00, 'i', '1') /* MotionPixels munged their id */ -#define GST_RIFF_AURA GST_MAKE_FOURCC ('A', 'U', 'R', 'A') -#define GST_RIFF_DMB1 GST_MAKE_FOURCC ('D', 'M', 'B', '1') -#define GST_RIFF_dmb1 GST_MAKE_FOURCC ('d', 'm', 'b', '1') - -#define GST_RIFF_BW10 GST_MAKE_FOURCC ('B', 'W', '1', '0') -#define GST_RIFF_bw10 GST_MAKE_FOURCC ('b', 'w', '1', '0') - -#define GST_RIFF_yuy2 GST_MAKE_FOURCC ('y', 'u', 'y', '2') -#define GST_RIFF_YUY2 GST_MAKE_FOURCC ('Y', 'U', 'Y', '2') -#define GST_RIFF_YUV8 GST_MAKE_FOURCC ('Y', 'U', 'V', '8') -#define GST_RIFF_WINX GST_MAKE_FOURCC ('W', 'I', 'N', 'X') -#define GST_RIFF_WPY2 GST_MAKE_FOURCC ('W', 'P', 'Y', '2') -#define GST_RIFF_m263 GST_MAKE_FOURCC ('m', '2', '6', '3') -#define GST_RIFF_M263 GST_MAKE_FOURCC ('M', '2', '6', '3') -#define GST_RIFF_H263 GST_MAKE_FOURCC ('H', '2', '6', '3') -#define GST_RIFF_h263 GST_MAKE_FOURCC ('h', '2', '6', '3') -#define GST_RIFF_i263 GST_MAKE_FOURCC ('i', '2', '6', '3') -#define GST_RIFF_L263 GST_MAKE_FOURCC ('L', '2', '6', '3') -#define GST_RIFF_x263 GST_MAKE_FOURCC ('x', '2', '6', '3') -#define GST_RIFF_VSSH GST_MAKE_FOURCC ( 'V', 'S', 'S', 'H') /* H2.64 */ - -#define GST_RIFF_Q1_0 GST_MAKE_FOURCC ('Q', '1',0x2e, '0') -#define GST_RIFF_SFMC GST_MAKE_FOURCC ('S', 'F', 'M', 'C') - -#define GST_RIFF_y41p GST_MAKE_FOURCC ('y', '4', '1', 'p') -#define GST_RIFF_Y41P GST_MAKE_FOURCC ('Y', '4', '1', 'P') -#define GST_RIFF_yv12 GST_MAKE_FOURCC ('y', 'v', '1', '2') -#define GST_RIFF_YV12 GST_MAKE_FOURCC ('Y', 'V', '1', '2') -#define GST_RIFF_vixl GST_MAKE_FOURCC ('v', 'i', 'x', 'l') -#define GST_RIFF_VIXL GST_MAKE_FOURCC ('V', 'I', 'X', 'L') -#define GST_RIFF_iyuv GST_MAKE_FOURCC ('i', 'y', 'u', 'v') -#define GST_RIFF_IYUV GST_MAKE_FOURCC ('I', 'Y', 'U', 'V') -#define GST_RIFF_i420 GST_MAKE_FOURCC ('i', '4', '2', '0') -#define GST_RIFF_I420 GST_MAKE_FOURCC ('I', '4', '2', '0') -#define GST_RIFF_vyuy GST_MAKE_FOURCC ('v', 'y', 'u', 'y') -#define GST_RIFF_VYUY GST_MAKE_FOURCC ('V', 'Y', 'U', 'Y') - -#define GST_RIFF_DIV3 GST_MAKE_FOURCC ('D', 'I', 'V', '3') - -#define GST_RIFF_rpza GST_MAKE_FOURCC ('r', 'p', 'z', 'a') -/* And this here's the mistakes that need to be supported */ -#define GST_RIFF_azpr GST_MAKE_FOURCC ('a', 'z', 'p', 'r') /* recognize Apple's rpza mangled? */ - -/*********** FND in MJPG **********/ -#define GST_RIFF_ISFT GST_MAKE_FOURCC ('I', 'S', 'F', 'T') -#define GST_RIFF_IDIT GST_MAKE_FOURCC ('I', 'D', 'I', 'T') - -#define GST_RIFF_00AM GST_MAKE_FOURCC ('0', '0', 'A', 'M') -#define GST_RIFF_DISP GST_MAKE_FOURCC ('D', 'I', 'S', 'P') -#define GST_RIFF_ISBJ GST_MAKE_FOURCC ('I', 'S', 'B', 'J') - -#define GST_RIFF_rec GST_MAKE_FOURCC ('r', 'e', 'c', ' ') - -/* common data structures */ -typedef struct _gst_riff_strh { - guint32 type; /* stream type */ - guint32 fcc_handler; /* fcc_handler */ - guint32 flags; -/* flags values */ -#define GST_RIFF_STRH_DISABLED 0x000000001 -#define GST_RIFF_STRH_VIDEOPALCHANGES 0x000010000 - guint32 priority; - guint32 init_frames; /* initial frames (???) */ - guint32 scale; - guint32 rate; - guint32 start; - guint32 length; - guint32 bufsize; /* suggested buffer size */ - guint32 quality; - guint32 samplesize; - /* rcFrame, RECT structure(struct of 4 shorts) - gint32 left; - gint32 top; - gint32 right; - gint32 bottom; - */ -} gst_riff_strh; - -typedef struct _gst_riff_strf_vids { /* == BitMapInfoHeader */ - guint32 size; - guint32 width; - guint32 height; - guint16 planes; - guint16 bit_cnt; - guint32 compression; - guint32 image_size; - guint32 xpels_meter; - guint32 ypels_meter; - guint32 num_colors; /* used colors */ - guint32 imp_colors; /* important colors */ - /* may be more for some codecs */ -} gst_riff_strf_vids; - - -typedef struct _gst_riff_strf_auds { /* == WaveHeader (?) */ - guint16 format; -/**** from public Microsoft RIFF docs ******/ -#define GST_RIFF_WAVE_FORMAT_UNKNOWN (0x0000) -#define GST_RIFF_WAVE_FORMAT_PCM (0x0001) -#define GST_RIFF_WAVE_FORMAT_ADPCM (0x0002) -#define GST_RIFF_WAVE_FORMAT_IEEE_FLOAT (0x0003) -#define GST_RIFF_WAVE_FORMAT_VSELP (0x0004) -#define GST_RIFF_WAVE_FORMAT_IBM_CVSD (0x0005) -#define GST_RIFF_WAVE_FORMAT_ALAW (0x0006) -#define GST_RIFF_WAVE_FORMAT_MULAW (0x0007) -#define GST_RIFF_WAVE_FORMAT_WMS (0x000a) /* WMS Windows Media Audio Speech */ -#define GST_RIFF_WAVE_FORMAT_OKI_ADPCM (0x0010) -#define GST_RIFF_WAVE_FORMAT_DVI_ADPCM (0x0011) -#define GST_RIFF_WAVE_FORMAT_MEDIASPACE_ADPCM (0x0012) -#define GST_RIFF_WAVE_FORMAT_SIERRA_ADPCM (0x0013) -#define GST_RIFF_WAVE_FORMAT_G723_ADPCM (0x0014) -#define GST_RIFF_WAVE_FORMAT_DIGISTD (0x0015) -#define GST_RIFF_WAVE_FORMAT_DIGIFIX (0x0016) -#define GST_RIFF_WAVE_FORMAT_DIALOGIC_OKI_ADPCM (0x0017) -#define GST_RIFF_WAVE_FORMAT_MEDIAVISION_ADPCM (0x0018) -#define GST_RIFF_WAVE_FORMAT_CU_CODEC (0x0019) -#define GST_RIFF_WAVE_FORMAT_YAMAHA_ADPCM (0x0020) -#define GST_RIFF_WAVE_FORMAT_SONARC (0x0021) -#define GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH (0x0022) -#define GST_RIFF_WAVE_FORMAT_ECHOSC1 (0x0023) -#define GST_RIFF_WAVE_FORMAT_AUDIOFILE_AF36 (0x0024) -#define GST_RIFF_WAVE_FORMAT_APTX (0x0025) -#define GST_RIFF_WAVE_FORMAT_AUDIOFILE_AF10 (0x0026) -#define GST_RIFF_WAVE_FORMAT_PROSODY_1612 (0x0027) -#define GST_RIFF_WAVE_FORMAT_LRC (0x0028) -#define GST_RIFF_WAVE_FORMAT_DOLBY_AC2 (0x0030) -#define GST_RIFF_WAVE_FORMAT_GSM610 (0x0031) -#define GST_RIFF_WAVE_FORMAT_MSN (0x0032) -#define GST_RIFF_WAVE_FORMAT_ANTEX_ADPCME (0x0033 -#define GST_RIFF_WAVE_FORMAT_CONTROL_RES_VQLPC (0x0034) -#define GST_RIFF_WAVE_FORMAT_DIGIREAL (0x0035) -#define GST_RIFF_WAVE_FORMAT_DIGIADPCM (0x0036) -#define GST_RIFF_WAVE_FORMAT_CONTROL_RES_CR10 (0x0037) -#define GST_RIFF_WAVE_FORMAT_NMS_VBXADPCM (0x0038) -#define GST_RIFF_WAVE_FORMAT_CS_IMAADPCM (0x0039) -#define GST_RIFF_WAVE_FORMAT_ECHOSC3 (0x003A) -#define GST_RIFF_WAVE_FORMAT_ROCKWELL_ADPCM (0x003B) -#define GST_RIFF_WAVE_FORMAT_ROCKWELL_DIGITALK (0x003C) -#define GST_RIFF_WAVE_FORMAT_XEBEC (0x003D) -#define GST_RIFF_WAVE_FORMAT_ITU_G721_ADPCM (0x0040) -#define GST_RIFF_WAVE_FORMAT_G728_CELP (0x0041) -#define GST_RIFF_WAVE_FORMAT_MSG723 (0x0042) -#define GST_RIFF_WAVE_FORMAT_MPEGL12 (0x0050) -#define GST_RIFF_WAVE_FORMAT_RT24 (0x0052) -#define GST_RIFF_WAVE_FORMAT_PAC (0x0053) -#define GST_RIFF_WAVE_FORMAT_MPEGL3 (0x0055) -#define GST_RIFF_WAVE_FORMAT_AMR_NB (0x0057) -#define GST_RIFF_WAVE_FORMAT_AMR_WB (0x0058) -#define GST_RIFF_WAVE_FORMAT_LUCENT_G723 (0x0059) -#define GST_RIFF_WAVE_FORMAT_CIRRUS (0x0060) -#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK4 (0x0061) /* not official */ -#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK3 (0x0062) /* not official */ -/* FIXME: where are these from? are they used at all? */ -#if 0 -#define GST_RIFF_WAVE_FORMAT_ESPCM (0x0061) -#define GST_RIFF_WAVE_FORMAT_VOXWARE (0x0062) -#endif -#define GST_RIFF_WAVE_FORMAT_CANOPUS_ATRAC (0x0063) -#define GST_RIFF_WAVE_FORMAT_G726_ADPCM (0x0064) -#define GST_RIFF_WAVE_FORMAT_G722_ADPCM (0x0065) -#define GST_RIFF_WAVE_FORMAT_DSAT_DISPLAY (0x0067) -#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_WAV (0x0069) -/* FIXME: where are these from? are they used at all? */ -#if 0 -#define GST_RIFF_WAVE_FORMAT_VOXWARE_BYTE_ALIGNED (0x0069) -#endif -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC8 (0x0070) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC10 (0x0071) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC16 (0x0072) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC20 (0x0073) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_METAVOICE (0x0074) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_METASOUND (0x0075) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_RT29HW (0x0076) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_VR12 (0x0077) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_VR18 (0x0078) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_TQ40 (0x0079) -#define GST_RIFF_WAVE_FORMAT_SOFTSOUND (0x0080) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_TQ60 (0x0081) -#define GST_RIFF_WAVE_FORMAT_MSRT24 (0x0082) -#define GST_RIFF_WAVE_FORMAT_G729A (0x0083) -#define GST_RIFF_WAVE_FORMAT_MVI_MVI2 (0x0084) -#define GST_RIFF_WAVE_FORMAT_DF_G726 (0x0085) -#define GST_RIFF_WAVE_FORMAT_DF_GSM610 (0x0086) -#define GST_RIFF_WAVE_FORMAT_ISIAUDIO (0x0088) -#define GST_RIFF_WAVE_FORMAT_ONLIVE (0x0089) -#define GST_RIFF_WAVE_FORMAT_SBC24 (0x0091) -#define GST_RIFF_WAVE_FORMAT_DOLBY_AC3_SPDIF (0x0092) -#define GST_RIFF_WAVE_FORMAT_MEDIASONIC_G723 (0x0093) -#define GST_RIFF_WAVE_FORMAT_PROSODY_8KBPS (0x0094) -#define GST_RIFF_WAVE_FORMAT_ZYXEL_ADPCM (0x0097) -#define GST_RIFF_WAVE_FORMAT_PHILIPS_LPCBB (0x0098) -#define GST_RIFF_WAVE_FORMAT_PACKED (0x0099) -#define GST_RIFF_WAVE_FORMAT_MALDEN_PHONYTALK (0x00A0) -#define GST_RIFF_WAVE_FORMAT_AAC (0x00ff) -#define GST_RIFF_WAVE_FORMAT_RHETOREX_ADPCM (0x0100) -#define GST_RIFF_IBM_FORMAT_MULAW (0x0101) -#define GST_RIFF_IBM_FORMAT_ALAW (0x0102) -#define GST_RIFF_IBM_FORMAT_ADPCM (0x0103) -#define GST_RIFF_WAVE_FORMAT_VIVO_G723 (0x0111) -#define GST_RIFF_WAVE_FORMAT_VIVO_SIREN (0x0112) -#define GST_RIFF_WAVE_FORMAT_DIGITAL_G723 (0x0123) -#define GST_RIFF_WAVE_FORMAT_SANYO_LD_ADPCM (0x0125) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACEPLNET (0x0130) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACELP4800 (0x0131) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACELP8V3 (0x0132) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_G729 (0x0133) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_G729A (0x0134) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_KELVIN (0x0135) -#define GST_RIFF_WAVE_FORMAT_G726ADPCM (0x0140) -#define GST_RIFF_WAVE_FORMAT_QUALCOMM_PUREVOICE (0x0150) -#define GST_RIFF_WAVE_FORMAT_QUALCOMM_HALFRATE (0x0151) -#define GST_RIFF_WAVE_FORMAT_TUBGSM (0x0155) -#define GST_RIFF_WAVE_FORMAT_WMAV1 (0x0160) -#define GST_RIFF_WAVE_FORMAT_WMAV2 (0x0161) -#define GST_RIFF_WAVE_FORMAT_WMAV3 (0x0162) -#define GST_RIFF_WAVE_FORMAT_WMAV3_L (0x0163) -#define GST_RIFF_WAVE_FORMAT_CREATIVE_ADPCM (0x0200) -#define GST_RIFF_WAVE_FORMAT_CREATIVE_FASTSPEECH8 (0x0202) -#define GST_RIFF_WAVE_FORMAT_CREATIVE_FASTSPEECH10 (0x0203) -#define GST_RIFF_WAVE_FORMAT_UHER_ADPCM (0x0210) -#define GST_RIFF_WAVE_FORMAT_QUARTERDECK (0x0220) -#define GST_RIFF_WAVE_FORMAT_ILINK_VC (0x0230) -#define GST_RIFF_WAVE_FORMAT_RAW_SPORT (0x0240) -#define GST_RIFF_WAVE_FORMAT_IPI_HSX (0x0250) -#define GST_RIFF_WAVE_FORMAT_IPI_RPELP (0x0251) -#define GST_RIFF_WAVE_FORMAT_CS2 (0x0260) -#define GST_RIFF_WAVE_FORMAT_SONY_ATRAC3 (0x0270) -#define GST_RIFF_WAVE_FORMAT_SIREN (0x028E) -#define GST_RIFF_WAVE_FORMAT_FM_TOWNS_SND (0x0300) -#define GST_RIFF_WAVE_FORMAT_BTV_DIGITAL (0x0400) -#define GST_RIFF_WAVE_FORMAT_IMC (0x0401) -#define GST_RIFF_WAVE_FORMAT_QDESIGN_MUSIC (0x0450) -#define GST_RIFF_WAVE_FORMAT_VME_VMPCM (0x0680) -#define GST_RIFF_WAVE_FORMAT_TPC (0x0681) -#define GST_RIFF_WAVE_FORMAT_OLIGSM (0x1000) -#define GST_RIFF_WAVE_FORMAT_OLIADPCM (0x1001) -#define GST_RIFF_WAVE_FORMAT_OLICELP (0x1002) -#define GST_RIFF_WAVE_FORMAT_OLISBC (0x1003) -#define GST_RIFF_WAVE_FORMAT_OLIOPR (0x1004) -#define GST_RIFF_WAVE_FORMAT_LH_CODEC (0x1100) -#define GST_RIFF_WAVE_FORMAT_NORRIS (0x1400) -#define GST_RIFF_WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS (0x1500) -#define GST_RIFF_WAVE_FORMAT_A52 (0x2000) -#define GST_RIFF_WAVE_FORMAT_DTS (0x2001) -#define GST_RIFF_WAVE_FORMAT_SONIC (0x2048) -#define GST_RIFF_WAVE_FORMAT_SONIC_LS (0x2048) -#define GST_RIFF_WAVE_FORMAT_AAC_AC (0x4143) -#define GST_RIFF_WAVE_FORMAT_VORBIS1 (0x674f) -#define GST_RIFF_WAVE_FORMAT_VORBIS2 (0x6750) -#define GST_RIFF_WAVE_FORMAT_VORBIS3 (0x6751) -#define GST_RIFF_WAVE_FORMAT_VORBIS1PLUS (0x676f) -#define GST_RIFF_WAVE_FORMAT_VORBIS2PLUS (0x6770) -#define GST_RIFF_WAVE_FORMAT_VORBIS3PLUS (0x6771) -#define GST_RIFF_WAVE_FORMAT_AAC_pm (0x706d) -#define GST_RIFF_WAVE_FORMAT_GSM_AMR_CBR (0x7A21) -#define GST_RIFF_WAVE_FORMAT_GSM_AMR_VBR (0x7A22) -#define GST_RIFF_WAVE_FORMAT_FLAC (0xF1AC) -#define GST_RIFF_WAVE_FORMAT_EXTENSIBLE (0xFFFE) - guint16 channels; - guint32 rate; - guint32 av_bps; - guint16 blockalign; - guint16 bits_per_sample; -#if 0 - /* missing field */ - guint16 extra_size; -#endif -} gst_riff_strf_auds; - -typedef struct _gst_riff_strf_iavs { - guint32 DVAAuxSrc; - guint32 DVAAuxCtl; - guint32 DVAAuxSrc1; - guint32 DVAAuxCtl1; - guint32 DVVAuxSrc; - guint32 DVVAuxCtl; - guint32 DVReserved1; - guint32 DVReserved2; -} gst_riff_strf_iavs; - -typedef struct _gst_riff_index_entry { - guint32 id; - guint32 flags; -#define GST_RIFF_IF_LIST (0x00000001L) -#define GST_RIFF_IF_KEYFRAME (0x00000010L) -#define GST_RIFF_IF_NO_TIME (0x00000100L) -#define GST_RIFF_IF_COMPUSE (0x0FFF0000L) - guint32 offset; - guint32 size; -} gst_riff_index_entry; - -typedef struct _gst_riff_dmlh { - guint32 totalframes; -} gst_riff_dmlh; - -/* taken from libsndfile/wav.c (LGPL) */ -typedef struct _gst_riff_acid { - /* 4 bytes (int) type of file: - * this appears to be a bit mask,however some combinations - * are probably impossible and/or qualified as "errors" - * - * 0x01 On: One Shot Off: Loop - * 0x02 On: Root note is Set Off: No root - * 0x04 On: Stretch is On, Off: Strech is OFF - * 0x08 On: Disk Based Off: Ram based - * 0x10 On: ?????????? Off: ????????? (Acidizer puts that ON) - */ - guint32 loop_type; - /* 2 bytes (short) root note - * if type 0x10 is OFF : [C,C#,(...),B] -> [0x30 to 0x3B] - * if type 0x10 is ON : [C,C#,(...),B] -> [0x3C to 0x47] - * (both types fit on same MIDI pitch albeit different octaves, so who cares) - */ - guint16 root_note; - /* 2 bytes (short) ??? always set to 0x8000 - * 4 bytes (float) ??? seems to be always 0 - */ - guint16 unknown1; - gfloat unknown2; - /* 4 bytes (int) number of beats - * 2 bytes (short) meter denominator //always 4 in SF/ACID - * 2 bytes (short) meter numerator //always 4 in SF/ACID - * //are we sure about the order?? usually its num/denom - * 4 bytes (float) tempo - */ - guint32 number_of_beats; - guint16 meter_d, meter_n; - gfloat tempo; -} gst_riff_acid; - -G_END_DECLS - -#endif /* __GST_RIFF_IDS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-media.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-media.h deleted file mode 100644 index ef5bc2bc..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-media.h +++ /dev/null @@ -1,66 +0,0 @@ -/* GStreamer RIFF I/O - * Copyright (C) 2003 Ronald Bultje - * - * riff-media.h: RIFF-id to/from caps routines - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RIFF_MEDIA_H__ -#define __GST_RIFF_MEDIA_H__ - -#include -#include -#include "riff-ids.h" - -G_BEGIN_DECLS - -/* - * Create caos. strh/strf, strf/strd_data and codec_name can be NULL. - */ - -GstCaps * gst_riff_create_video_caps (guint32 codec_fcc, - gst_riff_strh * strh, - gst_riff_strf_vids * strf, - GstBuffer * strf_data, - GstBuffer * strd_data, - char ** codec_name); - -GstCaps * gst_riff_create_audio_caps (guint16 codec_id, - gst_riff_strh * strh, - gst_riff_strf_auds * strf, - GstBuffer * strf_data, - GstBuffer * strd_data, - char ** codec_name, - gint channel_reorder_map[18]); - -GstCaps * gst_riff_create_iavs_caps (guint32 codec_fcc, - gst_riff_strh * strh, - gst_riff_strf_iavs * strf, - GstBuffer * strf_data, - GstBuffer * strd_data, - char ** codec_name); -/* - * Create template caps (includes all known types). - */ - -GstCaps * gst_riff_create_video_template_caps (void); -GstCaps * gst_riff_create_audio_template_caps (void); -GstCaps * gst_riff_create_iavs_template_caps (void); - -G_END_DECLS - -#endif /* __GST_RIFF_READ_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-read.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-read.h deleted file mode 100644 index cf07dda2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/riff/riff-read.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer RIFF I/O - * Copyright (C) 2003 Ronald Bultje - * - * riff-read.h: function declarations for parsing a RIFF file - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RIFF_READ_H__ -#define __GST_RIFF_READ_H__ - -#include -#include - -#include "riff-ids.h" - -G_BEGIN_DECLS - -/* - * Operate using pull_range(). - */ - -GstFlowReturn gst_riff_read_chunk (GstElement * element, - GstPad * pad, - guint64 * offset, - guint32 * tag, - GstBuffer ** chunk_data); - -/* - * These functions operate on provided data (the caller is - * supposed to strip the chunk headers). The buffer is - * provided by the caller, the strf/strh/data are filled in - * by the function. - */ - -gboolean gst_riff_parse_chunk (GstElement * element, - GstBuffer * buf, - guint * offset, - guint32 * fourcc, - GstBuffer ** chunk_data); - -gboolean gst_riff_parse_file_header (GstElement * element, - GstBuffer * buf, - guint32 * doctype); - -gboolean gst_riff_parse_strh (GstElement * element, - GstBuffer * buf, - gst_riff_strh ** strh); - -gboolean gst_riff_parse_strf_vids (GstElement * element, - GstBuffer * buf, - gst_riff_strf_vids ** strf, - GstBuffer ** data); -gboolean gst_riff_parse_strf_auds (GstElement * element, - GstBuffer * buf, - gst_riff_strf_auds ** strf, - GstBuffer ** data); -gboolean gst_riff_parse_strf_iavs (GstElement * element, - GstBuffer * buf, - gst_riff_strf_iavs ** strf, - GstBuffer ** data); - -void gst_riff_parse_info (GstElement * element, - GstBuffer * buf, - GstTagList ** taglist); - -/* - * Init. - */ -void gst_riff_init (void); - -G_END_DECLS - -#endif /* __GST_RIFF_READ_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h deleted file mode 100644 index b1a76559..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h +++ /dev/null @@ -1,310 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Wim Taymans - * - * gstrtcpbuffer.h: various helper functions to manipulate buffers - * with RTCP payload. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTCPBUFFER_H__ -#define __GST_RTCPBUFFER_H__ - -#include - -G_BEGIN_DECLS - -/** - * GST_RTCP_VERSION: - * - * The supported RTCP version 2. - */ -#define GST_RTCP_VERSION 2 - -/** - * GstRTCPType: - * @GST_RTCP_TYPE_INVALID: Invalid type - * @GST_RTCP_TYPE_SR: Sender report - * @GST_RTCP_TYPE_RR: Receiver report - * @GST_RTCP_TYPE_SDES: Source description - * @GST_RTCP_TYPE_BYE: Goodbye - * @GST_RTCP_TYPE_APP: Application defined - * @GST_RTCP_TYPE_RTPFB: Transport layer feedback. - * @GST_RTCP_TYPE_PSFB: Payload-specific feedback. - * - * Different RTCP packet types. - */ -typedef enum -{ - GST_RTCP_TYPE_INVALID = 0, - GST_RTCP_TYPE_SR = 200, - GST_RTCP_TYPE_RR = 201, - GST_RTCP_TYPE_SDES = 202, - GST_RTCP_TYPE_BYE = 203, - GST_RTCP_TYPE_APP = 204, - GST_RTCP_TYPE_RTPFB = 205, - GST_RTCP_TYPE_PSFB = 206 -} GstRTCPType; - -/** - * GstRTCPFBType: - * @GST_RTCP_FB_TYPE_INVALID: Invalid type - * @GST_RTCP_RTPFB_TYPE_NACK: Generic NACK - * @GST_RTCP_RTPFB_TYPE_TMMBR: Temporary Maximum Media Stream Bit Rate Request - * @GST_RTCP_RTPFB_TYPE_TMMBN: Temporary Maximum Media Stream Bit Rate - * Notification - * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication - * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication - * @GST_RTCP_PSFB_TYPE_RPSI: Reference Picture Selection Indication - * @GST_RTCP_PSFB_TYPE_AFB: Application layer Feedback - * @GST_RTCP_PSFB_TYPE_FIR: Full Intra Request Command - * @GST_RTCP_PSFB_TYPE_TSTR: Temporal-Spatial Trade-off Request - * @GST_RTCP_PSFB_TYPE_TSTN: Temporal-Spatial Trade-off Notification - * @GST_RTCP_PSFB_TYPE_VBCN: Video Back Channel Message - * - * Different types of feedback messages. - */ -typedef enum -{ - /* generic */ - GST_RTCP_FB_TYPE_INVALID = 0, - /* RTPFB types */ - GST_RTCP_RTPFB_TYPE_NACK = 1, - /* RTPFB types assigned in RFC 5104 */ - GST_RTCP_RTPFB_TYPE_TMMBR = 3, - GST_RTCP_RTPFB_TYPE_TMMBN = 4, - /* PSFB types */ - GST_RTCP_PSFB_TYPE_PLI = 1, - GST_RTCP_PSFB_TYPE_SLI = 2, - GST_RTCP_PSFB_TYPE_RPSI = 3, - GST_RTCP_PSFB_TYPE_AFB = 15, - /* PSFB types assigned in RFC 5104 */ - GST_RTCP_PSFB_TYPE_FIR = 4, - GST_RTCP_PSFB_TYPE_TSTR = 5, - GST_RTCP_PSFB_TYPE_TSTN = 6, - GST_RTCP_PSFB_TYPE_VBCN = 7, -} GstRTCPFBType; - -/** - * GstRTCPSDESType: - * @GST_RTCP_SDES_INVALID: Invalid SDES entry - * @GST_RTCP_SDES_END: End of SDES list - * @GST_RTCP_SDES_CNAME: Canonical name - * @GST_RTCP_SDES_NAME: User name - * @GST_RTCP_SDES_EMAIL: User's electronic mail address - * @GST_RTCP_SDES_PHONE: User's phone number - * @GST_RTCP_SDES_LOC: Geographic user location - * @GST_RTCP_SDES_TOOL: Name of application or tool - * @GST_RTCP_SDES_NOTE: Notice about the source - * @GST_RTCP_SDES_PRIV: Private extensions - * - * Different types of SDES content. - */ -typedef enum -{ - GST_RTCP_SDES_INVALID = -1, - GST_RTCP_SDES_END = 0, - GST_RTCP_SDES_CNAME = 1, - GST_RTCP_SDES_NAME = 2, - GST_RTCP_SDES_EMAIL = 3, - GST_RTCP_SDES_PHONE = 4, - GST_RTCP_SDES_LOC = 5, - GST_RTCP_SDES_TOOL = 6, - GST_RTCP_SDES_NOTE = 7, - GST_RTCP_SDES_PRIV = 8 -} GstRTCPSDESType; - -/** - * GST_RTCP_MAX_SDES: - * - * The maximum text length for an SDES item. - */ -#define GST_RTCP_MAX_SDES 255 - -/** - * GST_RTCP_MAX_RB_COUNT: - * - * The maximum amount of Receiver report blocks in RR and SR messages. - */ -#define GST_RTCP_MAX_RB_COUNT 31 - -/** - * GST_RTCP_MAX_SDES_ITEM_COUNT: - * - * The maximum amount of SDES items. - */ -#define GST_RTCP_MAX_SDES_ITEM_COUNT 31 - -/** - * GST_RTCP_MAX_BYE_SSRC_COUNT: - * - * The maximum amount of SSRCs in a BYE packet. - */ -#define GST_RTCP_MAX_BYE_SSRC_COUNT 31 - -/** - * GST_RTCP_VALID_MASK: - * - * Mask for version, padding bit and packet type pair - */ -#define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe) -/** - * GST_RTCP_VALID_VALUE: - * - * Valid value for the first two bytes of an RTCP packet after applying - * #GST_RTCP_VALID_MASK to them. - */ -#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR) - -typedef struct _GstRTCPBuffer GstRTCPBuffer; -typedef struct _GstRTCPPacket GstRTCPPacket; - -struct _GstRTCPBuffer -{ - GstBuffer *buffer; - GstMapInfo map; -}; - -#define GST_RTCP_BUFFER_INIT { NULL, GST_MAP_INFO_INIT } - -/** - * GstRTCPPacket: - * @rtcp: pointer to RTCP buffer - * @offset: offset of packet in buffer data - * - * Data structure that points to a packet at @offset in @buffer. - * The size of the structure is made public to allow stack allocations. - */ -struct _GstRTCPPacket -{ - GstRTCPBuffer *rtcp; - guint offset; - - /*< private >*/ - gboolean padding; /* padding field of current packet */ - guint8 count; /* count field of current packet */ - GstRTCPType type; /* type of current packet */ - guint16 length; /* length of current packet in 32-bits words */ - - guint item_offset; /* current item offset for navigating SDES */ - guint item_count; /* current item count */ - guint entry_offset; /* current entry offset for navigating SDES items */ -}; - -/* creating buffers */ -GstBuffer* gst_rtcp_buffer_new_take_data (gpointer data, guint len); -GstBuffer* gst_rtcp_buffer_new_copy_data (gpointer data, guint len); - -gboolean gst_rtcp_buffer_validate_data (guint8 *data, guint len); -gboolean gst_rtcp_buffer_validate (GstBuffer *buffer); - -GstBuffer* gst_rtcp_buffer_new (guint mtu); - -gboolean gst_rtcp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp); -gboolean gst_rtcp_buffer_unmap (GstRTCPBuffer *rtcp); - -/* adding/retrieving packets */ -guint gst_rtcp_buffer_get_packet_count (GstRTCPBuffer *rtcp); -gboolean gst_rtcp_buffer_get_first_packet (GstRTCPBuffer *rtcp, GstRTCPPacket *packet); -gboolean gst_rtcp_packet_move_to_next (GstRTCPPacket *packet); - -gboolean gst_rtcp_buffer_add_packet (GstRTCPBuffer *rtcp, GstRTCPType type, - GstRTCPPacket *packet); -gboolean gst_rtcp_packet_remove (GstRTCPPacket *packet); - -/* working with packets */ -gboolean gst_rtcp_packet_get_padding (GstRTCPPacket *packet); -guint8 gst_rtcp_packet_get_count (GstRTCPPacket *packet); -GstRTCPType gst_rtcp_packet_get_type (GstRTCPPacket *packet); -guint16 gst_rtcp_packet_get_length (GstRTCPPacket *packet); - - -/* sender reports */ -void gst_rtcp_packet_sr_get_sender_info (GstRTCPPacket *packet, guint32 *ssrc, - guint64 *ntptime, guint32 *rtptime, - guint32 *packet_count, guint32 *octet_count); -void gst_rtcp_packet_sr_set_sender_info (GstRTCPPacket *packet, guint32 ssrc, - guint64 ntptime, guint32 rtptime, - guint32 packet_count, guint32 octet_count); -/* receiver reports */ -guint32 gst_rtcp_packet_rr_get_ssrc (GstRTCPPacket *packet); -void gst_rtcp_packet_rr_set_ssrc (GstRTCPPacket *packet, guint32 ssrc); - - -/* report blocks for SR and RR */ -guint gst_rtcp_packet_get_rb_count (GstRTCPPacket *packet); -void gst_rtcp_packet_get_rb (GstRTCPPacket *packet, guint nth, guint32 *ssrc, - guint8 *fractionlost, gint32 *packetslost, - guint32 *exthighestseq, guint32 *jitter, - guint32 *lsr, guint32 *dlsr); -gboolean gst_rtcp_packet_add_rb (GstRTCPPacket *packet, guint32 ssrc, - guint8 fractionlost, gint32 packetslost, - guint32 exthighestseq, guint32 jitter, - guint32 lsr, guint32 dlsr); -void gst_rtcp_packet_set_rb (GstRTCPPacket *packet, guint nth, guint32 ssrc, - guint8 fractionlost, gint32 packetslost, - guint32 exthighestseq, guint32 jitter, - guint32 lsr, guint32 dlsr); - -/* source description packet */ -guint gst_rtcp_packet_sdes_get_item_count (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_first_item (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_next_item (GstRTCPPacket *packet); -guint32 gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_first_entry (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_next_entry (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_get_entry (GstRTCPPacket *packet, - GstRTCPSDESType *type, guint8 *len, - guint8 **data); -gboolean gst_rtcp_packet_sdes_copy_entry (GstRTCPPacket *packet, - GstRTCPSDESType *type, guint8 *len, - guint8 **data); - -gboolean gst_rtcp_packet_sdes_add_item (GstRTCPPacket *packet, guint32 ssrc); -gboolean gst_rtcp_packet_sdes_add_entry (GstRTCPPacket *packet, GstRTCPSDESType type, - guint8 len, const guint8 *data); - -/* bye packet */ -guint gst_rtcp_packet_bye_get_ssrc_count (GstRTCPPacket *packet); -guint32 gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket *packet, guint nth); -gboolean gst_rtcp_packet_bye_add_ssrc (GstRTCPPacket *packet, guint32 ssrc); -gboolean gst_rtcp_packet_bye_add_ssrcs (GstRTCPPacket *packet, guint32 *ssrc, guint len); -guint8 gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket *packet); -gchar* gst_rtcp_packet_bye_get_reason (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_bye_set_reason (GstRTCPPacket *packet, const gchar *reason); - -/* feedback packets */ -guint32 gst_rtcp_packet_fb_get_sender_ssrc (GstRTCPPacket *packet); -void gst_rtcp_packet_fb_set_sender_ssrc (GstRTCPPacket *packet, guint32 ssrc); -guint32 gst_rtcp_packet_fb_get_media_ssrc (GstRTCPPacket *packet); -void gst_rtcp_packet_fb_set_media_ssrc (GstRTCPPacket *packet, guint32 ssrc); -GstRTCPFBType gst_rtcp_packet_fb_get_type (GstRTCPPacket *packet); -void gst_rtcp_packet_fb_set_type (GstRTCPPacket *packet, GstRTCPFBType type); -guint16 gst_rtcp_packet_fb_get_fci_length (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_fb_set_fci_length (GstRTCPPacket *packet, guint16 wordlen); -guint8 * gst_rtcp_packet_fb_get_fci (GstRTCPPacket *packet); - -/* helper functions */ -guint64 gst_rtcp_ntp_to_unix (guint64 ntptime); -guint64 gst_rtcp_unix_to_ntp (guint64 unixtime); - -const gchar * gst_rtcp_sdes_type_to_name (GstRTCPSDESType type); -GstRTCPSDESType gst_rtcp_sdes_name_to_type (const gchar *name); - -G_END_DECLS - -#endif /* __GST_RTCPBUFFER_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h deleted file mode 100644 index a6dedd86..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GStreamer - * Copyright (C) <2006> Philippe Khalaf - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTP_BASE_AUDIO_PAYLOAD_H__ -#define __GST_RTP_BASE_AUDIO_PAYLOAD_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstRTPBaseAudioPayload GstRTPBaseAudioPayload; -typedef struct _GstRTPBaseAudioPayloadClass GstRTPBaseAudioPayloadClass; - -typedef struct _GstRTPBaseAudioPayloadPrivate GstRTPBaseAudioPayloadPrivate; - -#define GST_TYPE_RTP_BASE_AUDIO_PAYLOAD \ - (gst_rtp_base_audio_payload_get_type()) -#define GST_RTP_BASE_AUDIO_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GST_TYPE_RTP_BASE_AUDIO_PAYLOAD,GstRTPBaseAudioPayload)) -#define GST_RTP_BASE_AUDIO_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GST_TYPE_RTP_BASE_AUDIO_PAYLOAD,GstRTPBaseAudioPayloadClass)) -#define GST_IS_RTP_BASE_AUDIO_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_AUDIO_PAYLOAD)) -#define GST_IS_RTP_BASE_AUDIO_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_AUDIO_PAYLOAD)) -#define GST_RTP_BASE_AUDIO_PAYLOAD_CAST(obj) \ - ((GstRTPBaseAudioPayload *) (obj)) - -struct _GstRTPBaseAudioPayload -{ - GstRTPBasePayload payload; - - GstRTPBaseAudioPayloadPrivate *priv; - - GstClockTime base_ts; - gint frame_size; - gint frame_duration; - - gint sample_size; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstRTPBaseAudioPayloadClass: - * @parent_class: the parent class - * - * Base class for audio RTP payloader. - */ -struct _GstRTPBaseAudioPayloadClass -{ - GstRTPBasePayloadClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtp_base_audio_payload_get_type (void); - -/* configure frame based */ -void gst_rtp_base_audio_payload_set_frame_based (GstRTPBaseAudioPayload *rtpbaseaudiopayload); - -void gst_rtp_base_audio_payload_set_frame_options (GstRTPBaseAudioPayload *rtpbaseaudiopayload, - gint frame_duration, gint frame_size); - -/* configure sample based */ -void gst_rtp_base_audio_payload_set_sample_based (GstRTPBaseAudioPayload *rtpbaseaudiopayload); -void gst_rtp_base_audio_payload_set_sample_options (GstRTPBaseAudioPayload *rtpbaseaudiopayload, - gint sample_size); -void gst_rtp_base_audio_payload_set_samplebits_options (GstRTPBaseAudioPayload *rtpbaseaudiopayload, - gint sample_size); - -/* get the internal adapter */ -GstAdapter* gst_rtp_base_audio_payload_get_adapter (GstRTPBaseAudioPayload *rtpbaseaudiopayload); - -/* push and flushing data */ -GstFlowReturn gst_rtp_base_audio_payload_push (GstRTPBaseAudioPayload * baseaudiopayload, - const guint8 * data, guint payload_len, - GstClockTime timestamp); -GstFlowReturn gst_rtp_base_audio_payload_flush (GstRTPBaseAudioPayload * baseaudiopayload, - guint payload_len, GstClockTime timestamp); - -G_END_DECLS - -#endif /* __GST_RTP_BASE_AUDIO_PAYLOAD_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h deleted file mode 100644 index fc838a2c..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h +++ /dev/null @@ -1,110 +0,0 @@ -/* GStreamer - * Copyright (C) <2005> Philippe Khalaf - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTP_BASE_DEPAYLOAD_H__ -#define __GST_RTP_BASE_DEPAYLOAD_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_RTP_BASE_DEPAYLOAD (gst_rtp_base_depayload_get_type()) -#define GST_RTP_BASE_DEPAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_BASE_DEPAYLOAD,GstRTPBaseDepayload)) -#define GST_RTP_BASE_DEPAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_BASE_DEPAYLOAD,GstRTPBaseDepayloadClass)) -#define GST_RTP_BASE_DEPAYLOAD_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_RTP_BASE_DEPAYLOAD,GstRTPBaseDepayloadClass)) -#define GST_IS_RTP_BASE_DEPAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_DEPAYLOAD)) -#define GST_IS_RTP_BASE_DEPAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_DEPAYLOAD)) - -#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->sinkpad) -#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->srcpad) - -typedef struct _GstRTPBaseDepayload GstRTPBaseDepayload; -typedef struct _GstRTPBaseDepayloadClass GstRTPBaseDepayloadClass; -typedef struct _GstRTPBaseDepayloadPrivate GstRTPBaseDepayloadPrivate; - -struct _GstRTPBaseDepayload -{ - GstElement parent; - - GstPad *sinkpad, *srcpad; - - /* this attribute must be set by the child */ - guint clock_rate; - - GstSegment segment; - gboolean need_newsegment; - - /*< private >*/ - GstRTPBaseDepayloadPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstRTPBaseDepayloadClass: - * @parent_class: the parent class - * @set_caps: configure the depayloader - * @process: process incoming rtp packets - * @packet_lost: signal the depayloader about packet loss - * @handle_event: custom event handling - * - * Base class for audio RTP payloader. - */ -struct _GstRTPBaseDepayloadClass -{ - GstElementClass parent_class; - - /* virtuals, inform the subclass of the caps. */ - gboolean (*set_caps) (GstRTPBaseDepayload *filter, GstCaps *caps); - - /* pure virtual function, child must use this to process incoming - * rtp packets. If the child returns a buffer without a valid timestamp, - * the timestamp of @in will be applied to the result buffer and the - * buffer will be pushed. If this function returns %NULL, nothing is - * pushed. */ - GstBuffer * (*process) (GstRTPBaseDepayload *base, GstBuffer *in); - - /* non-pure function used to to signal the depayloader about packet loss. the - * timestamp and duration are the estimated values of the lost packet. - * The default implementation of this message pushes a segment update. */ - gboolean (*packet_lost) (GstRTPBaseDepayload *filter, GstEvent *event); - - /* the default implementation does the default actions for events but - * implementation can override. */ - gboolean (*handle_event) (GstRTPBaseDepayload * filter, GstEvent * event); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtp_base_depayload_get_type (void); - -GstFlowReturn gst_rtp_base_depayload_push (GstRTPBaseDepayload *filter, GstBuffer *out_buf); -GstFlowReturn gst_rtp_base_depayload_push_list (GstRTPBaseDepayload *filter, GstBufferList *out_list); - - -G_END_DECLS - -#endif /* __GST_RTP_BASE_DEPAYLOAD_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h deleted file mode 100644 index 39ce430a..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h +++ /dev/null @@ -1,170 +0,0 @@ -/* GStreamer - * Copyright (C) <2005> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTP_BASE_PAYLOAD_H__ -#define __GST_RTP_BASE_PAYLOAD_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_RTP_BASE_PAYLOAD \ - (gst_rtp_base_payload_get_type()) -#define GST_RTP_BASE_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_BASE_PAYLOAD,GstRTPBasePayload)) -#define GST_RTP_BASE_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_BASE_PAYLOAD,GstRTPBasePayloadClass)) -#define GST_RTP_BASE_PAYLOAD_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RTP_BASE_PAYLOAD, GstRTPBasePayloadClass)) -#define GST_IS_RTP_BASE_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_PAYLOAD)) -#define GST_IS_RTP_BASE_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_PAYLOAD)) -#define GST_RTP_BASE_PAYLOAD_CAST(obj) \ - ((GstRTPBasePayload*)(obj)) - -typedef struct _GstRTPBasePayload GstRTPBasePayload; -typedef struct _GstRTPBasePayloadPrivate GstRTPBasePayloadPrivate; -typedef struct _GstRTPBasePayloadClass GstRTPBasePayloadClass; - -/** - * GST_RTP_BASE_PAYLOAD_SINKPAD: - * @payload: a #GstRTPBasePayload - * - * Get access to the sinkpad of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_SINKPAD(payload) (GST_RTP_BASE_PAYLOAD (payload)->sinkpad) -/** - * GST_RTP_BASE_PAYLOAD_SRCPAD: - * @payload: a #GstRTPBasePayload - * - * Get access to the srcpad of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_SRCPAD(payload) (GST_RTP_BASE_PAYLOAD (payload)->srcpad) - -/** - * GST_RTP_BASE_PAYLOAD_PT: - * @payload: a #GstRTPBasePayload - * - * Get access to the configured payload type of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_PT(payload) (GST_RTP_BASE_PAYLOAD (payload)->pt) -/** - * GST_RTP_BASE_PAYLOAD_MTU: - * @payload: a #GstRTPBasePayload - * - * Get access to the configured MTU of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_MTU(payload) (GST_RTP_BASE_PAYLOAD (payload)->mtu) - -struct _GstRTPBasePayload -{ - GstElement element; - - /*< private >*/ - GstPad *sinkpad; - GstPad *srcpad; - - guint32 ts_base; - guint16 seqnum_base; - - gchar *media; - gchar *encoding_name; - gboolean dynamic; - guint32 clock_rate; - - gint32 ts_offset; - guint32 timestamp; - gint16 seqnum_offset; - guint16 seqnum; - gint64 max_ptime; - guint pt; - guint ssrc; - guint current_ssrc; - guint mtu; - - GstSegment segment; - - guint64 min_ptime; - guint64 ptime; /* in ns */ - guint64 ptime_multiple; /* in ns */ - - /*< private >*/ - GstRTPBasePayloadPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstRTPBasePayloadClass: - * @parent_class: the parent class - * @get_caps: get desired caps - * @set_caps: configure the payloader - * @handle_buffer: process data - * @sink_event: custom event handling on the sinkpad - * @src_event: custom event handling on the srcpad - * @query: custom query handling - * - * Base class for audio RTP payloader. - */ -struct _GstRTPBasePayloadClass -{ - GstElementClass parent_class; - - /* query accepted caps */ - GstCaps * (*get_caps) (GstRTPBasePayload *payload, GstPad * pad, GstCaps * filter); - /* receive caps on the sink pad, configure the payloader. */ - gboolean (*set_caps) (GstRTPBasePayload *payload, GstCaps *caps); - - /* handle a buffer, perform 0 or more gst_rtp_base_payload_push() on - * the RTP buffers. This function takes ownership of the buffer. */ - GstFlowReturn (*handle_buffer) (GstRTPBasePayload *payload, - GstBuffer *buffer); - /* handle events and queries */ - gboolean (*sink_event) (GstRTPBasePayload *payload, GstEvent * event); - gboolean (*src_event) (GstRTPBasePayload *payload, GstEvent * event); - gboolean (*query) (GstRTPBasePayload *payload, GstPad *pad, GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtp_base_payload_get_type (void); - -void gst_rtp_base_payload_set_options (GstRTPBasePayload *payload, - const gchar *media, - gboolean dynamic, - const gchar *encoding_name, - guint32 clock_rate); - -gboolean gst_rtp_base_payload_set_outcaps (GstRTPBasePayload *payload, - const gchar *fieldname, ...); - -gboolean gst_rtp_base_payload_is_filled (GstRTPBasePayload *payload, - guint size, GstClockTime duration); - -GstFlowReturn gst_rtp_base_payload_push (GstRTPBasePayload *payload, - GstBuffer *buffer); - -GstFlowReturn gst_rtp_base_payload_push_list (GstRTPBasePayload *payload, - GstBufferList *list); - -G_END_DECLS - -#endif /* __GST_RTP_BASE_PAYLOAD_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h deleted file mode 100644 index 5551c5a3..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h +++ /dev/null @@ -1,155 +0,0 @@ -/* GStreamer - * Copyright (C) <2005> Philippe Khalaf - * <2005> Wim Taymans - * - * gstrtpbuffer.h: various helper functions to manipulate buffers - * with RTP payload. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTPBUFFER_H__ -#define __GST_RTPBUFFER_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_RTP_VERSION: - * - * The supported RTP version 2. - */ -#define GST_RTP_VERSION 2 - - -typedef struct _GstRTPBuffer GstRTPBuffer; - -/** - * GstRTPBuffer: - * @buffer: pointer to RTP buffer - * @state: internal state - * @data: array of data - * @size: array of size - * @map: array of #GstMapInfo - * - * Data structure that points to an RTP packet. - * The size of the structure is made public to allow stack allocations. - */ -struct _GstRTPBuffer -{ - GstBuffer *buffer; - guint state; - gpointer data[4]; - gsize size[4]; - GstMapInfo map[4]; -}; - -#define GST_RTP_BUFFER_INIT { NULL, 0, { NULL, NULL, NULL, NULL}, { 0, 0, 0, 0 }, \ - { GST_MAP_INFO_INIT, GST_MAP_INFO_INIT, GST_MAP_INFO_INIT, GST_MAP_INFO_INIT} } - -/* creating buffers */ -void gst_rtp_buffer_allocate_data (GstBuffer *buffer, guint payload_len, - guint8 pad_len, guint8 csrc_count); - -GstBuffer* gst_rtp_buffer_new_take_data (gpointer data, gsize len); -GstBuffer* gst_rtp_buffer_new_copy_data (gpointer data, gsize len); -GstBuffer* gst_rtp_buffer_new_allocate (guint payload_len, guint8 pad_len, guint8 csrc_count); -GstBuffer* gst_rtp_buffer_new_allocate_len (guint packet_len, guint8 pad_len, guint8 csrc_count); - -guint gst_rtp_buffer_calc_header_len (guint8 csrc_count); -guint gst_rtp_buffer_calc_packet_len (guint payload_len, guint8 pad_len, guint8 csrc_count); -guint gst_rtp_buffer_calc_payload_len (guint packet_len, guint8 pad_len, guint8 csrc_count); - -gboolean gst_rtp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTPBuffer *rtp); -void gst_rtp_buffer_unmap (GstRTPBuffer *rtp); - -void gst_rtp_buffer_set_packet_len (GstRTPBuffer *rtp, guint len); -guint gst_rtp_buffer_get_packet_len (GstRTPBuffer *rtp); - -guint gst_rtp_buffer_get_header_len (GstRTPBuffer *rtp); - -guint8 gst_rtp_buffer_get_version (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_version (GstRTPBuffer *rtp, guint8 version); - -gboolean gst_rtp_buffer_get_padding (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_padding (GstRTPBuffer *rtp, gboolean padding); -void gst_rtp_buffer_pad_to (GstRTPBuffer *rtp, guint len); - -gboolean gst_rtp_buffer_get_extension (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_extension (GstRTPBuffer *rtp, gboolean extension); -gboolean gst_rtp_buffer_get_extension_data (GstRTPBuffer *rtp, guint16 *bits, - gpointer *data, guint *wordlen); -gboolean gst_rtp_buffer_set_extension_data (GstRTPBuffer *rtp, guint16 bits, guint16 length); - -guint32 gst_rtp_buffer_get_ssrc (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_ssrc (GstRTPBuffer *rtp, guint32 ssrc); - -guint8 gst_rtp_buffer_get_csrc_count (GstRTPBuffer *rtp); -guint32 gst_rtp_buffer_get_csrc (GstRTPBuffer *rtp, guint8 idx); -void gst_rtp_buffer_set_csrc (GstRTPBuffer *rtp, guint8 idx, guint32 csrc); - -gboolean gst_rtp_buffer_get_marker (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_marker (GstRTPBuffer *rtp, gboolean marker); - -guint8 gst_rtp_buffer_get_payload_type (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_payload_type (GstRTPBuffer *rtp, guint8 payload_type); - -guint16 gst_rtp_buffer_get_seq (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_seq (GstRTPBuffer *rtp, guint16 seq); - -guint32 gst_rtp_buffer_get_timestamp (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_timestamp (GstRTPBuffer *rtp, guint32 timestamp); - -GstBuffer* gst_rtp_buffer_get_payload_buffer (GstRTPBuffer *rtp); -GstBuffer* gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer *rtp, guint offset, guint len); - -guint gst_rtp_buffer_get_payload_len (GstRTPBuffer *rtp); -gpointer gst_rtp_buffer_get_payload (GstRTPBuffer *rtp); - -/* some helpers */ -guint32 gst_rtp_buffer_default_clock_rate (guint8 payload_type); -gint gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2); -guint64 gst_rtp_buffer_ext_timestamp (guint64 *exttimestamp, guint32 timestamp); - -gboolean gst_rtp_buffer_get_extension_onebyte_header (GstRTPBuffer *rtp, - guint8 id, - guint nth, - gpointer * data, - guint * size); -gboolean gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer *rtp, - guint8 * appbits, - guint8 id, - guint nth, - gpointer * data, - guint * size); - -gboolean gst_rtp_buffer_add_extension_onebyte_header (GstRTPBuffer *rtp, - guint8 id, - gpointer data, - guint size); -gboolean gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer *rtp, - guint8 appbits, - guint8 id, - gpointer data, - guint size); - - -G_END_DECLS - -#endif /* __GST_RTPBUFFER_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h deleted file mode 100644 index cdfef135..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h +++ /dev/null @@ -1,196 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Wim Taymans - * - * gstrtppayloads.h: various helper functions to deal with RTP payload - * types. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTPPAYLOADS_H__ -#define __GST_RTPPAYLOADS_H__ - -#include - -G_BEGIN_DECLS - -/** - * GstRTPPayload: - * @GST_RTP_PAYLOAD_PCMU: ITU-T G.711. mu-law audio (RFC 3551) - * @GST_RTP_PAYLOAD_1016: RFC 3551 says reserved - * @GST_RTP_PAYLOAD_G721: RFC 3551 says reserved - * @GST_RTP_PAYLOAD_GSM: GSM audio - * @GST_RTP_PAYLOAD_G723: ITU G.723.1 audio - * @GST_RTP_PAYLOAD_DVI4_8000: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_DVI4_16000: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_LPC: experimental linear predictive encoding - * @GST_RTP_PAYLOAD_PCMA: ITU-T G.711 A-law audio (RFC 3551) - * @GST_RTP_PAYLOAD_G722: ITU-T G.722 (RFC 3551) - * @GST_RTP_PAYLOAD_L16_STEREO: stereo PCM - * @GST_RTP_PAYLOAD_L16_MONO: mono PCM - * @GST_RTP_PAYLOAD_QCELP: EIA & TIA standard IS-733 - * @GST_RTP_PAYLOAD_CN: Comfort Noise (RFC 3389) - * @GST_RTP_PAYLOAD_MPA: Audio MPEG 1-3. - * @GST_RTP_PAYLOAD_G728: ITU-T G.728 Speech coder (RFC 3551) - * @GST_RTP_PAYLOAD_DVI4_11025: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_DVI4_22050: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_G729: ITU-T G.729 Speech coder (RFC 3551) - * @GST_RTP_PAYLOAD_CELLB: See RFC 2029 - * @GST_RTP_PAYLOAD_JPEG: ISO Standards 10918-1 and 10918-2 (RFC 2435) - * @GST_RTP_PAYLOAD_NV: nv encoding by Ron Frederick - * @GST_RTP_PAYLOAD_H261: ITU-T Recommendation H.261 (RFC 2032) - * @GST_RTP_PAYLOAD_MPV: Video MPEG 1 & 2 (RFC 2250) - * @GST_RTP_PAYLOAD_MP2T: MPEG-2 transport stream (RFC 2250) - * @GST_RTP_PAYLOAD_H263: Video H263 (RFC 2190) - * - * - * Standard predefined fixed payload types. - * - * The official list is at: - * http://www.iana.org/assignments/rtp-parameters - * - * Audio: - * reserved: 19 - * unassigned: 20-23, - * - * Video: - * unassigned: 24, 27, 29, 30, 35-71, 77-95 - * Reserved for RTCP conflict avoidance: 72-76 - */ -typedef enum -{ - /* Audio: */ - GST_RTP_PAYLOAD_PCMU = 0, - GST_RTP_PAYLOAD_1016 = 1, /* RFC 3551 says reserved */ - GST_RTP_PAYLOAD_G721 = 2, /* RFC 3551 says reserved */ - GST_RTP_PAYLOAD_GSM = 3, - GST_RTP_PAYLOAD_G723 = 4, - GST_RTP_PAYLOAD_DVI4_8000 = 5, - GST_RTP_PAYLOAD_DVI4_16000 = 6, - GST_RTP_PAYLOAD_LPC = 7, - GST_RTP_PAYLOAD_PCMA = 8, - GST_RTP_PAYLOAD_G722 = 9, - GST_RTP_PAYLOAD_L16_STEREO = 10, - GST_RTP_PAYLOAD_L16_MONO = 11, - GST_RTP_PAYLOAD_QCELP = 12, - GST_RTP_PAYLOAD_CN = 13, - GST_RTP_PAYLOAD_MPA = 14, - GST_RTP_PAYLOAD_G728 = 15, - GST_RTP_PAYLOAD_DVI4_11025 = 16, - GST_RTP_PAYLOAD_DVI4_22050 = 17, - GST_RTP_PAYLOAD_G729 = 18, - - /* Video: */ - - GST_RTP_PAYLOAD_CELLB = 25, - GST_RTP_PAYLOAD_JPEG = 26, - GST_RTP_PAYLOAD_NV = 28, - GST_RTP_PAYLOAD_H261 = 31, - GST_RTP_PAYLOAD_MPV = 32, - GST_RTP_PAYLOAD_MP2T = 33, - GST_RTP_PAYLOAD_H263 = 34, - - /* BOTH */ -} GstRTPPayload; - -/* backward compatibility */ -#define GST_RTP_PAYLOAD_G723_63 16 -#define GST_RTP_PAYLOAD_G723_53 17 -#define GST_RTP_PAYLOAD_TS48 18 -#define GST_RTP_PAYLOAD_TS41 19 - -#define GST_RTP_PAYLOAD_G723_63_STRING "16" -#define GST_RTP_PAYLOAD_G723_53_STRING "17" -#define GST_RTP_PAYLOAD_TS48_STRING "18" -#define GST_RTP_PAYLOAD_TS41_STRING "19" - -/* Defining the above as strings, to make the declaration of pad_templates - * easier. So if please keep these synchronized with the above. - */ -#define GST_RTP_PAYLOAD_PCMU_STRING "0" -#define GST_RTP_PAYLOAD_1016_STRING "1" -#define GST_RTP_PAYLOAD_G721_STRING "2" -#define GST_RTP_PAYLOAD_GSM_STRING "3" -#define GST_RTP_PAYLOAD_G723_STRING "4" -#define GST_RTP_PAYLOAD_DVI4_8000_STRING "5" -#define GST_RTP_PAYLOAD_DVI4_16000_STRING "6" -#define GST_RTP_PAYLOAD_LPC_STRING "7" -#define GST_RTP_PAYLOAD_PCMA_STRING "8" -#define GST_RTP_PAYLOAD_G722_STRING "9" -#define GST_RTP_PAYLOAD_L16_STEREO_STRING "10" -#define GST_RTP_PAYLOAD_L16_MONO_STRING "11" -#define GST_RTP_PAYLOAD_QCELP_STRING "12" -#define GST_RTP_PAYLOAD_CN_STRING "13" -#define GST_RTP_PAYLOAD_MPA_STRING "14" -#define GST_RTP_PAYLOAD_G728_STRING "15" -#define GST_RTP_PAYLOAD_DVI4_11025_STRING "16" -#define GST_RTP_PAYLOAD_DVI4_22050_STRING "17" -#define GST_RTP_PAYLOAD_G729_STRING "18" - -#define GST_RTP_PAYLOAD_CELLB_STRING "25" -#define GST_RTP_PAYLOAD_JPEG_STRING "26" -#define GST_RTP_PAYLOAD_NV_STRING "28" - -#define GST_RTP_PAYLOAD_H261_STRING "31" -#define GST_RTP_PAYLOAD_MPV_STRING "32" -#define GST_RTP_PAYLOAD_MP2T_STRING "33" -#define GST_RTP_PAYLOAD_H263_STRING "34" - -#define GST_RTP_PAYLOAD_DYNAMIC_STRING "[96, 127]" - -/** - * GST_RTP_PAYLOAD_IS_DYNAMIC: - * @pt: a payload type - * - * Check if @pt is a dynamic payload type. - */ -#define GST_RTP_PAYLOAD_IS_DYNAMIC(pt) ((pt) >= 96 && (pt) <= 127) - -typedef struct _GstRTPPayloadInfo GstRTPPayloadInfo; - -/** - * GstRTPPayloadInfo: - * @payload_type: payload type, -1 means dynamic - * @media: the media type(s), usually "audio", "video", "application", "text", - * "message". - * @encoding_name: the encoding name of @pt - * @clock_rate: default clock rate, 0 = unknown/variable - * @encoding_parameters: encoding parameters. For audio this is the number of - * channels. NULL = not applicable. - * @bitrate: the bitrate of the media. 0 = unknown/variable. - * - * Structure holding default payload type information. - */ -struct _GstRTPPayloadInfo -{ - guint8 payload_type; - const gchar *media; - const gchar *encoding_name; - guint clock_rate; - const gchar *encoding_parameters; - guint bitrate; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -const GstRTPPayloadInfo * gst_rtp_payload_info_for_pt (guint8 payload_type); -const GstRTPPayloadInfo * gst_rtp_payload_info_for_name (const gchar *media, const gchar *encoding_name); - -G_END_DECLS - -#endif /* __GST_RTPPAYLOADS_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h deleted file mode 100644 index 3254324f..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h +++ /dev/null @@ -1,35 +0,0 @@ - - - -#ifndef __gst_rtsp_ENUM_TYPES_H__ -#define __gst_rtsp_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "gstrtspdefs.h" */ -GType gst_rtsp_result_get_type (void); -#define GST_TYPE_RTSP_RESULT (gst_rtsp_result_get_type()) -GType gst_rtsp_event_get_type (void); -#define GST_TYPE_RTSP_EVENT (gst_rtsp_event_get_type()) -GType gst_rtsp_family_get_type (void); -#define GST_TYPE_RTSP_FAMILY (gst_rtsp_family_get_type()) -GType gst_rtsp_state_get_type (void); -#define GST_TYPE_RTSP_STATE (gst_rtsp_state_get_type()) -GType gst_rtsp_version_get_type (void); -#define GST_TYPE_RTSP_VERSION (gst_rtsp_version_get_type()) -GType gst_rtsp_method_get_type (void); -#define GST_TYPE_RTSP_METHOD (gst_rtsp_method_get_type()) -GType gst_rtsp_auth_method_get_type (void); -#define GST_TYPE_RTSP_AUTH_METHOD (gst_rtsp_auth_method_get_type()) -GType gst_rtsp_header_field_get_type (void); -#define GST_TYPE_RTSP_HEADER_FIELD (gst_rtsp_header_field_get_type()) -GType gst_rtsp_status_code_get_type (void); -#define GST_TYPE_RTSP_STATUS_CODE (gst_rtsp_status_code_get_type()) -G_END_DECLS - -#endif /* __gst_rtsp_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h deleted file mode 100644 index c004535a..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h +++ /dev/null @@ -1,199 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2009> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_CONNECTION_H__ -#define __GST_RTSP_CONNECTION_H__ - -#include - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstRTSPConnection: - * - * Opaque RTSP connection object. - */ -typedef struct _GstRTSPConnection GstRTSPConnection; - -/* opening/closing a connection */ -GstRTSPResult gst_rtsp_connection_create (const GstRTSPUrl *url, GstRTSPConnection **conn); -GstRTSPResult gst_rtsp_connection_create_from_socket (GSocket * socket, - const gchar * ip, - guint16 port, - const gchar * initial_buffer, - GstRTSPConnection ** conn); -GstRTSPResult gst_rtsp_connection_accept (GSocket *socket, GstRTSPConnection **conn, GCancellable *cancellable); -GstRTSPResult gst_rtsp_connection_connect (GstRTSPConnection *conn, GTimeVal *timeout); -GstRTSPResult gst_rtsp_connection_close (GstRTSPConnection *conn); -GstRTSPResult gst_rtsp_connection_free (GstRTSPConnection *conn); - - -/* sending/receiving raw bytes */ -GstRTSPResult gst_rtsp_connection_read (GstRTSPConnection * conn, guint8 * data, - guint size, GTimeVal * timeout); -GstRTSPResult gst_rtsp_connection_write (GstRTSPConnection * conn, const guint8 * data, - guint size, GTimeVal * timeout); - -/* sending/receiving messages */ -GstRTSPResult gst_rtsp_connection_send (GstRTSPConnection *conn, GstRTSPMessage *message, - GTimeVal *timeout); -GstRTSPResult gst_rtsp_connection_receive (GstRTSPConnection *conn, GstRTSPMessage *message, - GTimeVal *timeout); - -/* status management */ -GstRTSPResult gst_rtsp_connection_poll (GstRTSPConnection *conn, GstRTSPEvent events, - GstRTSPEvent *revents, GTimeVal *timeout); - -/* reset the timeout */ -GstRTSPResult gst_rtsp_connection_next_timeout (GstRTSPConnection *conn, GTimeVal *timeout); -GstRTSPResult gst_rtsp_connection_reset_timeout (GstRTSPConnection *conn); - -/* flushing state */ -GstRTSPResult gst_rtsp_connection_flush (GstRTSPConnection *conn, gboolean flush); - -/* HTTP proxy support */ -GstRTSPResult gst_rtsp_connection_set_proxy (GstRTSPConnection *conn, - const gchar *host, guint port); - -/* configure authentication data */ -GstRTSPResult gst_rtsp_connection_set_auth (GstRTSPConnection *conn, GstRTSPAuthMethod method, - const gchar *user, const gchar *pass); - -void gst_rtsp_connection_set_auth_param (GstRTSPConnection *conn, - const gchar * param, - const gchar *value); -void gst_rtsp_connection_clear_auth_params (GstRTSPConnection *conn); - -/* configure DSCP */ -GstRTSPResult gst_rtsp_connection_set_qos_dscp (GstRTSPConnection *conn, - guint qos_dscp); - -/* accessors */ -GstRTSPUrl * gst_rtsp_connection_get_url (const GstRTSPConnection *conn); -const gchar * gst_rtsp_connection_get_ip (const GstRTSPConnection *conn); -void gst_rtsp_connection_set_ip (GstRTSPConnection *conn, const gchar *ip); - -GSocket * gst_rtsp_connection_get_read_socket (const GstRTSPConnection *conn); -GSocket * gst_rtsp_connection_get_write_socket (const GstRTSPConnection *conn); - -void gst_rtsp_connection_set_http_mode (GstRTSPConnection *conn, - gboolean enable); - -/* tunneling */ -void gst_rtsp_connection_set_tunneled (GstRTSPConnection *conn, gboolean tunneled); -gboolean gst_rtsp_connection_is_tunneled (const GstRTSPConnection *conn); - -const gchar * gst_rtsp_connection_get_tunnelid (const GstRTSPConnection *conn); -GstRTSPResult gst_rtsp_connection_do_tunnel (GstRTSPConnection *conn, GstRTSPConnection *conn2); - -/* async IO */ - -/** - * GstRTSPWatch: - * - * Opaque RTSP watch object that can be used for asynchronous RTSP - * operations. - */ -typedef struct _GstRTSPWatch GstRTSPWatch; - -/** - * GstRTSPWatchFuncs: - * @message_received: callback when a message was received - * @message_sent: callback when a message was sent - * @closed: callback when the connection is closed - * @error: callback when an error occured - * @tunnel_start: a client started a tunneled connection. The tunnelid of the - * connection must be saved. - * @tunnel_complete: a client finished a tunneled connection. In this callback - * you usually pair the tunnelid of this connection with the saved one using - * gst_rtsp_connection_do_tunnel(). - * @error_full: callback when an error occured with more information than - * the @error callback. - * @tunnel_lost: callback when the post connection of a tunnel is closed. - * - * Callback functions from a #GstRTSPWatch. - */ -typedef struct { - GstRTSPResult (*message_received) (GstRTSPWatch *watch, GstRTSPMessage *message, - gpointer user_data); - GstRTSPResult (*message_sent) (GstRTSPWatch *watch, guint id, - gpointer user_data); - GstRTSPResult (*closed) (GstRTSPWatch *watch, gpointer user_data); - GstRTSPResult (*error) (GstRTSPWatch *watch, GstRTSPResult result, - gpointer user_data); - GstRTSPStatusCode (*tunnel_start) (GstRTSPWatch *watch, gpointer user_data); - GstRTSPResult (*tunnel_complete) (GstRTSPWatch *watch, gpointer user_data); - GstRTSPResult (*error_full) (GstRTSPWatch *watch, GstRTSPResult result, - GstRTSPMessage *message, guint id, - gpointer user_data); - GstRTSPResult (*tunnel_lost) (GstRTSPWatch *watch, gpointer user_data); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstRTSPWatchFuncs; - -GstRTSPWatch * gst_rtsp_watch_new (GstRTSPConnection *conn, - GstRTSPWatchFuncs *funcs, - gpointer user_data, - GDestroyNotify notify); -void gst_rtsp_watch_reset (GstRTSPWatch *watch); -void gst_rtsp_watch_unref (GstRTSPWatch *watch); - -guint gst_rtsp_watch_attach (GstRTSPWatch *watch, - GMainContext *context); - -GstRTSPResult gst_rtsp_watch_write_data (GstRTSPWatch *watch, - const guint8 *data, - guint size, guint *id); -GstRTSPResult gst_rtsp_watch_send_message (GstRTSPWatch *watch, - GstRTSPMessage *message, - guint *id); - -G_END_DECLS - -#endif /* __GST_RTSP_CONNECTION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h deleted file mode 100644 index e0b37935..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h +++ /dev/null @@ -1,410 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_DEFS_H__ -#define __GST_RTSP_DEFS_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_RTSP_CHECK: - * @stmt: a statement - * @label: a label - * - * Macro that checks the return value of @stmt and jumps to @label when it does - * not equal #GST_RTSP_OK. - */ -#define GST_RTSP_CHECK(stmt, label) \ -G_STMT_START { \ - if (G_UNLIKELY ((res = (stmt)) != GST_RTSP_OK)) \ - goto label; \ -} G_STMT_END - -/** - * GstRTSPResult: - * @GST_RTSP_OK: no error - * @GST_RTSP_ERROR: some unspecified error occured - * @GST_RTSP_EINVAL: invalid arguments were provided to a function - * @GST_RTSP_EINTR: an operation was canceled - * @GST_RTSP_ENOMEM: no memory was available for the operation - * @GST_RTSP_ERESOLV: a host resolve error occured - * @GST_RTSP_ENOTIMPL: function not implemented - * @GST_RTSP_ESYS: a system error occured, errno contains more details - * @GST_RTSP_EPARSE: a persing error occured - * @GST_RTSP_EWSASTART: windows networking could not start - * @GST_RTSP_EWSAVERSION: windows networking stack has wrong version - * @GST_RTSP_EEOF: end-of-file was reached - * @GST_RTSP_ENET: a network problem occured, h_errno contains more details - * @GST_RTSP_ENOTIP: the host is not an IP host - * @GST_RTSP_ETIMEOUT: a timeout occured - * @GST_RTSP_ETGET: the tunnel GET request has been performed - * @GST_RTSP_ETPOST: the tunnel POST request has been performed - * @GST_RTSP_ELAST: last error - * - * Result codes from the RTSP functions. - */ -typedef enum { - GST_RTSP_OK = 0, - /* errors */ - GST_RTSP_ERROR = -1, - GST_RTSP_EINVAL = -2, - GST_RTSP_EINTR = -3, - GST_RTSP_ENOMEM = -4, - GST_RTSP_ERESOLV = -5, - GST_RTSP_ENOTIMPL = -6, - GST_RTSP_ESYS = -7, - GST_RTSP_EPARSE = -8, - GST_RTSP_EWSASTART = -9, - GST_RTSP_EWSAVERSION = -10, - GST_RTSP_EEOF = -11, - GST_RTSP_ENET = -12, - GST_RTSP_ENOTIP = -13, - GST_RTSP_ETIMEOUT = -14, - GST_RTSP_ETGET = -15, - GST_RTSP_ETPOST = -16, - - GST_RTSP_ELAST = -17 -} GstRTSPResult; - -/** - * GstRTSPEvent: - * @GST_RTSP_EV_READ: connection is readable - * @GST_RTSP_EV_WRITE: connection is writable - * - * The possible events for the connection. - */ -typedef enum { - GST_RTSP_EV_READ = (1 << 0), - GST_RTSP_EV_WRITE = (1 << 1) -} GstRTSPEvent; - -/** - * GstRTSPFamily: - * @GST_RTSP_FAM_NONE: unknown network family - * @GST_RTSP_FAM_INET: internet - * @GST_RTSP_FAM_INET6: internet V6 - * - * The possible network families. - */ -typedef enum { - GST_RTSP_FAM_NONE, - GST_RTSP_FAM_INET, - GST_RTSP_FAM_INET6 -} GstRTSPFamily; - -/** - * GstRTSPState: - * @GST_RTSP_STATE_INVALID: invalid state - * @GST_RTSP_STATE_INIT: initializing - * @GST_RTSP_STATE_READY: ready for operation - * @GST_RTSP_STATE_SEEKING: seeking in progress - * @GST_RTSP_STATE_PLAYING: playing - * @GST_RTSP_STATE_RECORDING: recording - * - * The different RTSP states. - */ -typedef enum { - GST_RTSP_STATE_INVALID, - GST_RTSP_STATE_INIT, - GST_RTSP_STATE_READY, - GST_RTSP_STATE_SEEKING, - GST_RTSP_STATE_PLAYING, - GST_RTSP_STATE_RECORDING -} GstRTSPState; - -/** - * GstRTSPVersion: - * @GST_RTSP_VERSION_INVALID: unknown/invalid version - * @GST_RTSP_VERSION_1_0: version 1.0 - * @GST_RTSP_VERSION_1_1: version 1.1. - * - * The supported RTSP versions. - */ -typedef enum { - GST_RTSP_VERSION_INVALID = 0x00, - GST_RTSP_VERSION_1_0 = 0x10, - GST_RTSP_VERSION_1_1 = 0x11 -} GstRTSPVersion; - -/** - * GstRTSPMethod: - * @GST_RTSP_INVALID: invalid method - * @GST_RTSP_DESCRIBE: the DESCRIBE method - * @GST_RTSP_ANNOUNCE: the ANNOUNCE method - * @GST_RTSP_GET_PARAMETER: the GET_PARAMETER method - * @GST_RTSP_OPTIONS: the OPTIONS method - * @GST_RTSP_PAUSE: the PAUSE method - * @GST_RTSP_PLAY: the PLAY method - * @GST_RTSP_RECORD: the RECORD method - * @GST_RTSP_REDIRECT: the REDIRECT method - * @GST_RTSP_SETUP: the SETUP method - * @GST_RTSP_SET_PARAMETER: the SET_PARAMETER method - * @GST_RTSP_TEARDOWN: the TEARDOWN method - * @GST_RTSP_GET: the GET method (HTTP). - * @GST_RTSP_POST: the POST method (HTTP). - * - * The different supported RTSP methods. - */ -typedef enum { - GST_RTSP_INVALID = 0, - GST_RTSP_DESCRIBE = (1 << 0), - GST_RTSP_ANNOUNCE = (1 << 1), - GST_RTSP_GET_PARAMETER = (1 << 2), - GST_RTSP_OPTIONS = (1 << 3), - GST_RTSP_PAUSE = (1 << 4), - GST_RTSP_PLAY = (1 << 5), - GST_RTSP_RECORD = (1 << 6), - GST_RTSP_REDIRECT = (1 << 7), - GST_RTSP_SETUP = (1 << 8), - GST_RTSP_SET_PARAMETER = (1 << 9), - GST_RTSP_TEARDOWN = (1 << 10), - GST_RTSP_GET = (1 << 11), - GST_RTSP_POST = (1 << 12) -} GstRTSPMethod; - -/** - * GstRTSPAuthMethod: - * @GST_RTSP_AUTH_NONE: no authentication - * @GST_RTSP_AUTH_BASIC: basic authentication - * @GST_RTSP_AUTH_DIGEST: digest authentication - * - * Authentication methods, ordered by strength - */ -typedef enum { - GST_RTSP_AUTH_NONE = 0x00, - GST_RTSP_AUTH_BASIC = 0x01, - GST_RTSP_AUTH_DIGEST = 0x02 -} GstRTSPAuthMethod; - -/** - * GST_RTSP_AUTH_MAX: - * - * Strongest available authentication method - */ -#define GST_RTSP_AUTH_MAX GST_RTSP_AUTH_DIGEST - -/** - * GstRTSPHeaderField: - * - * Enumeration of rtsp header fields - */ -typedef enum { - GST_RTSP_HDR_INVALID, - - /* - * R = Request - * r = response - * g = general - * e = entity - */ - GST_RTSP_HDR_ACCEPT, /* Accept R opt. entity */ - GST_RTSP_HDR_ACCEPT_ENCODING, /* Accept-Encoding R opt. entity */ - GST_RTSP_HDR_ACCEPT_LANGUAGE, /* Accept-Language R opt. all */ - GST_RTSP_HDR_ALLOW, /* Allow r opt. all */ - GST_RTSP_HDR_AUTHORIZATION, /* Authorization R opt. all */ - GST_RTSP_HDR_BANDWIDTH, /* Bandwidth R opt. all */ - GST_RTSP_HDR_BLOCKSIZE, /* Blocksize R opt. all but OPTIONS, TEARDOWN */ - GST_RTSP_HDR_CACHE_CONTROL, /* Cache-Control g opt. SETUP */ - GST_RTSP_HDR_CONFERENCE, /* Conference R opt. SETUP */ - GST_RTSP_HDR_CONNECTION, /* Connection g req. all */ - GST_RTSP_HDR_CONTENT_BASE, /* Content-Base e opt. entity */ - GST_RTSP_HDR_CONTENT_ENCODING, /* Content-Encoding e req. SET_PARAMETER, DESCRIBE, ANNOUNCE */ - GST_RTSP_HDR_CONTENT_LANGUAGE, /* Content-Language e req. DESCRIBE, ANNOUNCE */ - GST_RTSP_HDR_CONTENT_LENGTH, /* Content-Length e req. SET_PARAMETER, ANNOUNCE, entity */ - GST_RTSP_HDR_CONTENT_LOCATION, /* Content-Location e opt. entity */ - GST_RTSP_HDR_CONTENT_TYPE, /* Content-Type e req. SET_PARAMETER, ANNOUNCE, entity */ - GST_RTSP_HDR_CSEQ, /* CSeq g req. all */ - GST_RTSP_HDR_DATE, /* Date g opt. all */ - GST_RTSP_HDR_EXPIRES, /* Expires e opt. DESCRIBE, ANNOUNCE */ - GST_RTSP_HDR_FROM, /* From R opt. all */ - GST_RTSP_HDR_IF_MODIFIED_SINCE, /* If-Modified-Since R opt. DESCRIBE, SETUP */ - GST_RTSP_HDR_LAST_MODIFIED, /* Last-Modified e opt. entity */ - GST_RTSP_HDR_PROXY_AUTHENTICATE, /* Proxy-Authenticate */ - GST_RTSP_HDR_PROXY_REQUIRE, /* Proxy-Require R req. all */ - GST_RTSP_HDR_PUBLIC, /* Public r opt. all */ - GST_RTSP_HDR_RANGE, /* Range Rr opt. PLAY, PAUSE, RECORD */ - GST_RTSP_HDR_REFERER, /* Referer R opt. all */ - GST_RTSP_HDR_REQUIRE, /* Require R req. all */ - GST_RTSP_HDR_RETRY_AFTER, /* Retry-After r opt. all */ - GST_RTSP_HDR_RTP_INFO, /* RTP-Info r req. PLAY */ - GST_RTSP_HDR_SCALE, /* Scale Rr opt. PLAY, RECORD */ - GST_RTSP_HDR_SESSION, /* Session Rr req. all but SETUP, OPTIONS */ - GST_RTSP_HDR_SERVER, /* Server r opt. all */ - GST_RTSP_HDR_SPEED, /* Speed Rr opt. PLAY */ - GST_RTSP_HDR_TRANSPORT, /* Transport Rr req. SETUP */ - GST_RTSP_HDR_UNSUPPORTED, /* Unsupported r req. all */ - GST_RTSP_HDR_USER_AGENT, /* User-Agent R opt. all */ - GST_RTSP_HDR_VIA, /* Via g opt. all */ - GST_RTSP_HDR_WWW_AUTHENTICATE, /* WWW-Authenticate r opt. all */ - - /* Real extensions */ - GST_RTSP_HDR_CLIENT_CHALLENGE, /* ClientChallenge */ - GST_RTSP_HDR_REAL_CHALLENGE1, /* RealChallenge1 */ - GST_RTSP_HDR_REAL_CHALLENGE2, /* RealChallenge2 */ - GST_RTSP_HDR_REAL_CHALLENGE3, /* RealChallenge3 */ - GST_RTSP_HDR_SUBSCRIBE, /* Subscribe */ - GST_RTSP_HDR_ALERT, /* Alert */ - GST_RTSP_HDR_CLIENT_ID, /* ClientID */ - GST_RTSP_HDR_COMPANY_ID, /* CompanyID */ - GST_RTSP_HDR_GUID, /* GUID */ - GST_RTSP_HDR_REGION_DATA, /* RegionData */ - GST_RTSP_HDR_MAX_ASM_WIDTH, /* SupportsMaximumASMBandwidth */ - GST_RTSP_HDR_LANGUAGE, /* Language */ - GST_RTSP_HDR_PLAYER_START_TIME, /* PlayerStarttime */ - - /* Since 0.10.16 */ - GST_RTSP_HDR_LOCATION, /* Location */ - - /* Since 0.10.23 */ - GST_RTSP_HDR_ETAG, /* ETag */ - GST_RTSP_HDR_IF_MATCH, /* If-Match */ - - /* WM extensions [MS-RTSP] Since 0.10.23 */ - GST_RTSP_HDR_ACCEPT_CHARSET, /* Accept-Charset */ - GST_RTSP_HDR_SUPPORTED, /* Supported */ - GST_RTSP_HDR_VARY, /* Vary */ - GST_RTSP_HDR_X_ACCELERATE_STREAMING, /* X-Accelerate-Streaming */ - GST_RTSP_HDR_X_ACCEPT_AUTHENT, /* X-Accept-Authentication */ - GST_RTSP_HDR_X_ACCEPT_PROXY_AUTHENT, /* X-Accept-Proxy-Authentication */ - GST_RTSP_HDR_X_BROADCAST_ID, /* X-Broadcast-Id */ - GST_RTSP_HDR_X_BURST_STREAMING, /* X-Burst-Streaming */ - GST_RTSP_HDR_X_NOTICE, /* X-Notice */ - GST_RTSP_HDR_X_PLAYER_LAG_TIME, /* X-Player-Lag-Time */ - GST_RTSP_HDR_X_PLAYLIST, /* X-Playlist */ - GST_RTSP_HDR_X_PLAYLIST_CHANGE_NOTICE, /* X-Playlist-Change-Notice */ - GST_RTSP_HDR_X_PLAYLIST_GEN_ID, /* X-Playlist-Gen-Id */ - GST_RTSP_HDR_X_PLAYLIST_SEEK_ID, /* X-Playlist-Seek-Id */ - GST_RTSP_HDR_X_PROXY_CLIENT_AGENT, /* X-Proxy-Client-Agent */ - GST_RTSP_HDR_X_PROXY_CLIENT_VERB, /* X-Proxy-Client-Verb */ - GST_RTSP_HDR_X_RECEDING_PLAYLISTCHANGE, /* X-Receding-PlaylistChange */ - GST_RTSP_HDR_X_RTP_INFO, /* X-RTP-Info */ - GST_RTSP_HDR_X_STARTUPPROFILE, /* X-StartupProfile */ - - /* Since 0.10.24 */ - GST_RTSP_HDR_TIMESTAMP, /* Timestamp */ - - /* Since 0.10.25 */ - GST_RTSP_HDR_AUTHENTICATION_INFO, /* Authentication-Info */ - GST_RTSP_HDR_HOST, /* Host */ - GST_RTSP_HDR_PRAGMA, /* Pragma */ - GST_RTSP_HDR_X_SERVER_IP_ADDRESS, /* X-Server-IP-Address */ - GST_RTSP_HDR_X_SESSIONCOOKIE, /* X-Sessioncookie */ - - /* Since 0.10.36 */ - GST_RTSP_HDR_RTCP_INTERVAL, /* RTCP-Interval */ - - GST_RTSP_HDR_LAST -} GstRTSPHeaderField; - -/** - * GstRTSPStatusCode: - * - * Enumeration of rtsp status codes - */ -typedef enum { - GST_RTSP_STS_INVALID = 0, - GST_RTSP_STS_CONTINUE = 100, - GST_RTSP_STS_OK = 200, - GST_RTSP_STS_CREATED = 201, - GST_RTSP_STS_LOW_ON_STORAGE = 250, - GST_RTSP_STS_MULTIPLE_CHOICES = 300, - GST_RTSP_STS_MOVED_PERMANENTLY = 301, - GST_RTSP_STS_MOVE_TEMPORARILY = 302, - GST_RTSP_STS_SEE_OTHER = 303, - GST_RTSP_STS_NOT_MODIFIED = 304, - GST_RTSP_STS_USE_PROXY = 305, - GST_RTSP_STS_BAD_REQUEST = 400, - GST_RTSP_STS_UNAUTHORIZED = 401, - GST_RTSP_STS_PAYMENT_REQUIRED = 402, - GST_RTSP_STS_FORBIDDEN = 403, - GST_RTSP_STS_NOT_FOUND = 404, - GST_RTSP_STS_METHOD_NOT_ALLOWED = 405, - GST_RTSP_STS_NOT_ACCEPTABLE = 406, - GST_RTSP_STS_PROXY_AUTH_REQUIRED = 407, - GST_RTSP_STS_REQUEST_TIMEOUT = 408, - GST_RTSP_STS_GONE = 410, - GST_RTSP_STS_LENGTH_REQUIRED = 411, - GST_RTSP_STS_PRECONDITION_FAILED = 412, - GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE = 413, - GST_RTSP_STS_REQUEST_URI_TOO_LARGE = 414, - GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE = 415, - GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD = 451, - GST_RTSP_STS_CONFERENCE_NOT_FOUND = 452, - GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH = 453, - GST_RTSP_STS_SESSION_NOT_FOUND = 454, - GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE = 455, - GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE = 456, - GST_RTSP_STS_INVALID_RANGE = 457, - GST_RTSP_STS_PARAMETER_IS_READONLY = 458, - GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED = 459, - GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED = 460, - GST_RTSP_STS_UNSUPPORTED_TRANSPORT = 461, - GST_RTSP_STS_DESTINATION_UNREACHABLE = 462, - GST_RTSP_STS_INTERNAL_SERVER_ERROR = 500, - GST_RTSP_STS_NOT_IMPLEMENTED = 501, - GST_RTSP_STS_BAD_GATEWAY = 502, - GST_RTSP_STS_SERVICE_UNAVAILABLE = 503, - GST_RTSP_STS_GATEWAY_TIMEOUT = 504, - GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED = 505, - GST_RTSP_STS_OPTION_NOT_SUPPORTED = 551 -} GstRTSPStatusCode; - -gchar* gst_rtsp_strresult (GstRTSPResult result); - -const gchar* gst_rtsp_method_as_text (GstRTSPMethod method); -const gchar* gst_rtsp_version_as_text (GstRTSPVersion version); -const gchar* gst_rtsp_header_as_text (GstRTSPHeaderField field); -const gchar* gst_rtsp_status_as_text (GstRTSPStatusCode code); - -gchar* gst_rtsp_options_as_text (GstRTSPMethod options); - -GstRTSPHeaderField gst_rtsp_find_header_field (const gchar *header); -GstRTSPMethod gst_rtsp_find_method (const gchar *method); - -gboolean gst_rtsp_header_allow_multiple (GstRTSPHeaderField field); - -G_END_DECLS - -#endif /* __GST_RTSP_DEFS_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h deleted file mode 100644 index 66aa7ac7..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h +++ /dev/null @@ -1,97 +0,0 @@ -/* GStreamer RTSP Extension - * Copyright (C) 2007 Wim Taymans - * - * gstrtspextension.h: RTSP Extension interface. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTSP_EXTENSION_H__ -#define __GST_RTSP_EXTENSION_H__ - -#include - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_RTSP_EXTENSION \ - (gst_rtsp_extension_get_type ()) -#define GST_RTSP_EXTENSION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTSP_EXTENSION, GstRTSPExtension)) -#define GST_IS_RTSP_EXTENSION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_EXTENSION)) -#define GST_RTSP_EXTENSION_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_RTSP_EXTENSION, GstRTSPExtensionInterface)) - -typedef struct _GstRTSPExtension GstRTSPExtension; -typedef struct _GstRTSPExtensionInterface GstRTSPExtensionInterface; - -struct _GstRTSPExtensionInterface { - GTypeInterface parent; - - /* vfunctions */ - gboolean (*detect_server) (GstRTSPExtension *ext, GstRTSPMessage *resp); - - GstRTSPResult (*before_send) (GstRTSPExtension *ext, GstRTSPMessage *req); - GstRTSPResult (*after_send) (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp); - - GstRTSPResult (*parse_sdp) (GstRTSPExtension *ext, GstSDPMessage *sdp, GstStructure *s); - GstRTSPResult (*setup_media) (GstRTSPExtension *ext, GstSDPMedia *media); - - gboolean (*configure_stream) (GstRTSPExtension *ext, GstCaps *caps); - - GstRTSPResult (*get_transports) (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, gchar **transport); - - GstRTSPResult (*stream_select) (GstRTSPExtension *ext, GstRTSPUrl *url); - - /* signals */ - GstRTSPResult (*send) (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp); - - /* ABI: more vfunctions added later */ - GstRTSPResult (*receive_request) (GstRTSPExtension *ext, GstRTSPMessage *req); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtsp_extension_get_type (void); - -/* invoke vfunction on interface */ -gboolean gst_rtsp_extension_detect_server (GstRTSPExtension *ext, GstRTSPMessage *resp); - -GstRTSPResult gst_rtsp_extension_before_send (GstRTSPExtension *ext, GstRTSPMessage *req); -GstRTSPResult gst_rtsp_extension_after_send (GstRTSPExtension *ext, GstRTSPMessage *req, - GstRTSPMessage *resp); -GstRTSPResult gst_rtsp_extension_parse_sdp (GstRTSPExtension *ext, GstSDPMessage *sdp, - GstStructure *s); -GstRTSPResult gst_rtsp_extension_setup_media (GstRTSPExtension *ext, GstSDPMedia *media); -gboolean gst_rtsp_extension_configure_stream (GstRTSPExtension *ext, GstCaps *caps); -GstRTSPResult gst_rtsp_extension_get_transports (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, - gchar **transport); -GstRTSPResult gst_rtsp_extension_stream_select (GstRTSPExtension *ext, GstRTSPUrl *url); -GstRTSPResult gst_rtsp_extension_receive_request (GstRTSPExtension *ext, GstRTSPMessage *req); - -/* signal emision */ -GstRTSPResult gst_rtsp_extension_send (GstRTSPExtension *ext, GstRTSPMessage *req, - GstRTSPMessage *resp); - -G_END_DECLS - -#endif /* __GST_RTSP_EXTENSION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h deleted file mode 100644 index b430ce29..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h +++ /dev/null @@ -1,189 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_MESSAGE_H__ -#define __GST_RTSP_MESSAGE_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstRTSPMsgType: - * @GST_RTSP_MESSAGE_INVALID: invalid message type - * @GST_RTSP_MESSAGE_REQUEST: RTSP request message - * @GST_RTSP_MESSAGE_RESPONSE: RTSP response message - * @GST_RTSP_MESSAGE_HTTP_REQUEST: HTTP request message. - * @GST_RTSP_MESSAGE_HTTP_RESPONSE: HTTP response message. - * @GST_RTSP_MESSAGE_DATA: data message - * - * The type of a message. - */ -typedef enum -{ - GST_RTSP_MESSAGE_INVALID, - GST_RTSP_MESSAGE_REQUEST, - GST_RTSP_MESSAGE_RESPONSE, - GST_RTSP_MESSAGE_HTTP_REQUEST, - GST_RTSP_MESSAGE_HTTP_RESPONSE, - GST_RTSP_MESSAGE_DATA -} GstRTSPMsgType; - -typedef struct _GstRTSPMessage GstRTSPMessage; - -/** - * GstRTSPMessage: - * @type: the message type - * - * An RTSP message containing request, response or data messages. Depending on - * the @type, the appropriate structure may be accessed. - */ -struct _GstRTSPMessage -{ - GstRTSPMsgType type; - - union { - struct { - GstRTSPMethod method; - gchar *uri; - GstRTSPVersion version; - } request; - struct { - GstRTSPStatusCode code; - gchar *reason; - GstRTSPVersion version; - } response; - struct { - guint8 channel; - } data; - } type_data; - - /*< private >*/ - GArray *hdr_fields; - - guint8 *body; - guint body_size; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/* memory management */ -GstRTSPResult gst_rtsp_message_new (GstRTSPMessage **msg); -GstRTSPResult gst_rtsp_message_init (GstRTSPMessage *msg); -GstRTSPResult gst_rtsp_message_unset (GstRTSPMessage *msg); -GstRTSPResult gst_rtsp_message_free (GstRTSPMessage *msg); - -GstRTSPMsgType gst_rtsp_message_get_type (GstRTSPMessage *msg); - -/* request */ -GstRTSPResult gst_rtsp_message_new_request (GstRTSPMessage **msg, - GstRTSPMethod method, - const gchar *uri); -GstRTSPResult gst_rtsp_message_init_request (GstRTSPMessage *msg, - GstRTSPMethod method, - const gchar *uri); -GstRTSPResult gst_rtsp_message_parse_request (GstRTSPMessage *msg, - GstRTSPMethod *method, - const gchar **uri, - GstRTSPVersion *version); - -/* response */ -GstRTSPResult gst_rtsp_message_new_response (GstRTSPMessage **msg, - GstRTSPStatusCode code, - const gchar *reason, - const GstRTSPMessage *request); -GstRTSPResult gst_rtsp_message_init_response (GstRTSPMessage *msg, - GstRTSPStatusCode code, - const gchar *reason, - const GstRTSPMessage *request); -GstRTSPResult gst_rtsp_message_parse_response (GstRTSPMessage *msg, - GstRTSPStatusCode *code, - const gchar **reason, - GstRTSPVersion *version); - -/* data */ -GstRTSPResult gst_rtsp_message_new_data (GstRTSPMessage **msg, - guint8 channel); -GstRTSPResult gst_rtsp_message_init_data (GstRTSPMessage *msg, - guint8 channel); -GstRTSPResult gst_rtsp_message_parse_data (GstRTSPMessage *msg, - guint8 *channel); - -/* headers */ -GstRTSPResult gst_rtsp_message_add_header (GstRTSPMessage *msg, - GstRTSPHeaderField field, - const gchar *value); -GstRTSPResult gst_rtsp_message_take_header (GstRTSPMessage *msg, - GstRTSPHeaderField field, - gchar *value); -GstRTSPResult gst_rtsp_message_remove_header (GstRTSPMessage *msg, - GstRTSPHeaderField field, - gint indx); -GstRTSPResult gst_rtsp_message_get_header (const GstRTSPMessage *msg, - GstRTSPHeaderField field, - gchar **value, - gint indx); -GstRTSPResult gst_rtsp_message_append_headers (const GstRTSPMessage *msg, - GString *str); - -/* handling the body */ -GstRTSPResult gst_rtsp_message_set_body (GstRTSPMessage *msg, - const guint8 *data, - guint size); -GstRTSPResult gst_rtsp_message_take_body (GstRTSPMessage *msg, - guint8 *data, - guint size); -GstRTSPResult gst_rtsp_message_get_body (const GstRTSPMessage *msg, - guint8 **data, - guint *size); -GstRTSPResult gst_rtsp_message_steal_body (GstRTSPMessage *msg, - guint8 **data, - guint *size); - -/* debug */ -GstRTSPResult gst_rtsp_message_dump (GstRTSPMessage *msg); - -G_END_DECLS - -#endif /* __GST_RTSP_MESSAGE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h deleted file mode 100644 index 6778fea8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h +++ /dev/null @@ -1,121 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_RANGE_H__ -#define __GST_RTSP_RANGE_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstRTSPRangeUnit: - * @GST_RTSP_RANGE_SMPTE: SMPTE timecode - * @GST_RTSP_RANGE_SMPTE_30_DROP: 29.97 frames per second - * @GST_RTSP_RANGE_SMPTE_25: 25 frames per second - * @GST_RTSP_RANGE_NPT: Normal play time - * @GST_RTSP_RANGE_CLOCK: Absolute time expressed as ISO 8601 timestamps - * - * Different possible time range units. - */ -typedef enum -{ - GST_RTSP_RANGE_SMPTE, - GST_RTSP_RANGE_SMPTE_30_DROP, - GST_RTSP_RANGE_SMPTE_25, - GST_RTSP_RANGE_NPT, - GST_RTSP_RANGE_CLOCK -} GstRTSPRangeUnit; - -typedef struct _GstRTSPTimeRange GstRTSPTimeRange; -typedef struct _GstRTSPTime GstRTSPTime; - -/** - * GstRTSPTimeType: - * @GST_RTSP_TIME_SECONDS: seconds - * @GST_RTSP_TIME_NOW: now - * @GST_RTSP_TIME_END: end - * - * Possible time types. - */ -typedef enum { - GST_RTSP_TIME_SECONDS, - GST_RTSP_TIME_NOW, - GST_RTSP_TIME_END -} GstRTSPTimeType; - -/** - * GstRTSPTime: - * @type: the time of the time - * @seconds: seconds when @type is GST_RTSP_TIME_SECONDS - * - * A time indication. - */ -struct _GstRTSPTime { - GstRTSPTimeType type; - gdouble seconds; -}; - -/** - * GstRTSPTimeRange: - * @unit: the time units used - * @min: the minimum interval - * @max: the maximum interval - * - * A time range. - */ -struct _GstRTSPTimeRange { - GstRTSPRangeUnit unit; - - GstRTSPTime min; - GstRTSPTime max; -}; - -GstRTSPResult gst_rtsp_range_parse (const gchar *rangestr, GstRTSPTimeRange **range); -gchar * gst_rtsp_range_to_string (const GstRTSPTimeRange *range); -void gst_rtsp_range_free (GstRTSPTimeRange *range); - -G_END_DECLS - -#endif /* __GST_RTSP_RANGE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h deleted file mode 100644 index e971ef7b..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h +++ /dev/null @@ -1,177 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_TRANSPORT_H__ -#define __GST_RTSP_TRANSPORT_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstRTSPTransMode: - * @GST_RTSP_TRANS_UNKNOWN: invalid tansport mode - * @GST_RTSP_TRANS_RTP: transfer RTP data - * @GST_RTSP_TRANS_RDT: transfer RDT (RealMedia) data - * - * The transfer mode to use. - */ -typedef enum { - GST_RTSP_TRANS_UNKNOWN = 0, - GST_RTSP_TRANS_RTP = (1 << 0), - GST_RTSP_TRANS_RDT = (1 << 1) -} GstRTSPTransMode; - -/** - * GstRTSPProfile: - * @GST_RTSP_PROFILE_UNKNOWN: invalid profile - * @GST_RTSP_PROFILE_AVP: the Audio/Visual profile - * @GST_RTSP_PROFILE_SAVP: the secure Audio/Visual profile - * - * The transfer profile to use. - */ -typedef enum { - GST_RTSP_PROFILE_UNKNOWN = 0, - GST_RTSP_PROFILE_AVP = (1 << 0), - GST_RTSP_PROFILE_SAVP = (1 << 1) -} GstRTSPProfile; - -/** - * GstRTSPLowerTrans: - * @GST_RTSP_LOWER_TRANS_UNKNOWN: invalid transport flag - * @GST_RTSP_LOWER_TRANS_UDP: stream data over UDP - * @GST_RTSP_LOWER_TRANS_UDP_MCAST: stream data over UDP multicast - * @GST_RTSP_LOWER_TRANS_TCP: stream data over TCP - * @GST_RTSP_LOWER_TRANS_HTTP: stream data tunneled over HTTP. - * - * The different transport methods. - */ -typedef enum { - GST_RTSP_LOWER_TRANS_UNKNOWN = 0, - GST_RTSP_LOWER_TRANS_UDP = (1 << 0), - GST_RTSP_LOWER_TRANS_UDP_MCAST = (1 << 1), - GST_RTSP_LOWER_TRANS_TCP = (1 << 2), - GST_RTSP_LOWER_TRANS_HTTP = (1 << 4) -} GstRTSPLowerTrans; - -#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type()) -GType gst_rtsp_lower_trans_get_type (void); - -typedef struct _GstRTSPRange GstRTSPRange; -typedef struct _GstRTSPTransport GstRTSPTransport; - -/** - * GstRTSPRange: - * @min: minimum value of the range - * @max: maximum value of the range - * - * A type to specify a range. - */ - -struct _GstRTSPRange { - gint min; - gint max; -}; - -/** - * GstRTSPTransport: - * @trans: the transport mode - * @profile: the tansport profile - * @lower_transport: the lower transport - * @destination: the destination ip/hostname - * @source: the source ip/hostname - * @layers: the number of layers - * @mode_play: if play mode was selected - * @mode_record: if record mode was selected - * @append: is append mode was selected - * @interleaved: the interleave range - * @ttl: the time to live for multicast UDP - * @port: the port pair for multicast sessions - * @client_port: the client port pair for receiving data - * @server_port: the server port pair for receiving data - * @ssrc: the ssrc that the sender/receiver will use - * - * A structure holding the RTSP transport values. - */ - -struct _GstRTSPTransport { - GstRTSPTransMode trans; - GstRTSPProfile profile; - GstRTSPLowerTrans lower_transport; - - gchar *destination; - gchar *source; - guint layers; - gboolean mode_play; - gboolean mode_record; - gboolean append; - GstRTSPRange interleaved; - - /* multicast specific */ - guint ttl; - - /* UDP specific */ - GstRTSPRange port; - GstRTSPRange client_port; - GstRTSPRange server_port; - /* RTP specific */ - guint ssrc; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GstRTSPResult gst_rtsp_transport_new (GstRTSPTransport **transport); -GstRTSPResult gst_rtsp_transport_init (GstRTSPTransport *transport); - -GstRTSPResult gst_rtsp_transport_parse (const gchar *str, GstRTSPTransport *transport); -gchar* gst_rtsp_transport_as_text (GstRTSPTransport *transport); - -GstRTSPResult gst_rtsp_transport_get_mime (GstRTSPTransMode trans, const gchar **mime); -GstRTSPResult gst_rtsp_transport_get_manager (GstRTSPTransMode trans, const gchar **manager, guint option); - -GstRTSPResult gst_rtsp_transport_free (GstRTSPTransport *transport); - -G_END_DECLS - -#endif /* __GST_RTSP_TRANSPORT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h deleted file mode 100644 index 61b2dfaa..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_URL_H__ -#define __GST_RTSP_URL_H__ - -#include -#include - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_RTSP_DEFAULT_PORT: - * - * The default RTSP port to connect to. - */ -#define GST_RTSP_DEFAULT_PORT 554 - -#define GST_TYPE_RTSP_URL (gst_rtsp_url_get_type()) - -typedef struct _GstRTSPUrl GstRTSPUrl; - -/** - * GstRTSPUrl: - * @transports: the transports allowed - * @family: the family - * @user: the user - * @passwd: the password - * @host: the host - * @port: the port - * @abspath: the absolute path - * @query: additional query parameters - * - * This structure contains the result of a parsed RTSP URL - */ -struct _GstRTSPUrl { - GstRTSPLowerTrans transports; - GstRTSPFamily family; - gchar *user; - gchar *passwd; - gchar *host; - guint16 port; - gchar *abspath; - gchar *query; -}; - -GType gst_rtsp_url_get_type (void); - -GstRTSPResult gst_rtsp_url_parse (const gchar *urlstr, GstRTSPUrl **url); -GstRTSPUrl* gst_rtsp_url_copy (const GstRTSPUrl *url); -void gst_rtsp_url_free (GstRTSPUrl *url); -gchar* gst_rtsp_url_get_request_uri (const GstRTSPUrl *url); -gchar** gst_rtsp_url_decode_path_components - (const GstRTSPUrl *url); - -GstRTSPResult gst_rtsp_url_set_port (GstRTSPUrl *url, guint16 port); -GstRTSPResult gst_rtsp_url_get_port (const GstRTSPUrl *url, guint16 *port); - -G_END_DECLS - -#endif /* __GST_RTSP_URL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdp.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdp.h deleted file mode 100644 index 3dbd86d2..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdp.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_SDP_H__ -#define __GST_SDP_H__ - -/** - * GstSDPResult: - * @GST_SDP_OK: A successful return value - * @GST_SDP_EINVAL: a function was given invalid parameters - * - * Return values for the SDP functions. - */ -typedef enum { - GST_SDP_OK = 0, - GST_SDP_EINVAL = -1 -} GstSDPResult; - -#endif /* __GST_SDP_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h deleted file mode 100644 index d1e65ddb..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h +++ /dev/null @@ -1,417 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_SDP_MESSAGE_H__ -#define __GST_SDP_MESSAGE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstSDPOrigin: - * @username: the user's login on the originating host, or it is "-" - * if the originating host does not support the concept of user ids. - * @sess_id: is a numeric string such that the tuple of @username, @sess_id, - * @nettype, @addrtype and @addr form a globally unique identifier for the - * session. - * @sess_version: a version number for this announcement - * @nettype: the type of network. "IN" is defined to have the meaning - * "Internet". - * @addrtype: the type of @addr. - * @addr: the globally unique address of the machine from which the session was - * created. - * - * The contents of the SDP "o=" field which gives the originator of the session - * (their username and the address of the user's host) plus a session id and - * session version number. - */ -typedef struct { - gchar *username; - gchar *sess_id; - gchar *sess_version; - gchar *nettype; - gchar *addrtype; - gchar *addr; -} GstSDPOrigin; - -/** - * GstSDPConnection: - * @nettype: the type of network. "IN" is defined to have the meaning - * "Internet". - * @addrtype: the type of @address. - * @address: the address - * @ttl: the time to live of the address - * @addr_number: the number of layers - * - * The contents of the SDP "c=" field which contains connection data. - */ -typedef struct { - gchar *nettype; - gchar *addrtype; - gchar *address; - guint ttl; - guint addr_number; -} GstSDPConnection; - -/** - * GST_SDP_BWTYPE_CT: - * - * The Conference Total bandwidth modifier. - */ -#define GST_SDP_BWTYPE_CT "CT" -/** - * GST_SDP_BWTYPE_AS: - * - * The Application-Specific Maximum bandwidth modifier. - */ -#define GST_SDP_BWTYPE_AS "AS" -/** - * GST_SDP_BWTYPE_EXT_PREFIX: - * - * The extension prefix bandwidth modifier. - */ -#define GST_SDP_BWTYPE_EXT_PREFIX "X-" - -/** - * GST_SDP_BWTYPE_RS: - * - * RTCP bandwidth allocated to active data senders (RFC 3556). - */ -#define GST_SDP_BWTYPE_RS "RS" -/** - * GST_SDP_BWTYPE_RR: - * - * RTCP bandwidth allocated to data receivers (RFC 3556). - */ -#define GST_SDP_BWTYPE_RR "RR" -/** - * GST_SDP_BWTYPE_TIAS: - * - * Transport Independent Application Specific Maximum bandwidth (RFC 3890). - */ -#define GST_SDP_BWTYPE_TIAS "TIAS" - - -/** - * GstSDPBandwidth: - * @bwtype: the bandwidth modifier type - * @bandwidth: the bandwidth in kilobits per second - * - * The contents of the SDP "b=" field which specifies the proposed bandwidth to - * be used by the session or media. - */ -typedef struct { - gchar *bwtype; - guint bandwidth; -} GstSDPBandwidth; - -/** - * GstSDPTime: - * @start: start time for the conference. The value is the decimal - * representation of Network Time Protocol (NTP) time values in seconds - * @stop: stop time for the conference. The value is the decimal - * representation of Network Time Protocol (NTP) time values in seconds - * @repeat: repeat times for a session - * - * The contents of the SDP "t=" field which specify the start and stop times for - * a conference session. - */ -typedef struct { - gchar *start; - gchar *stop; - GArray *repeat; -} GstSDPTime; - -/** - * GstSDPZone: - * @time: the NTP time that a time zone adjustment happens - * @typed_time: the offset from the time when the session was first scheduled - * - * The contents of the SDP "z=" field which allows the sender to - * specify a list of time zone adjustments and offsets from the base - * time. - */ -typedef struct { - gchar *time; - gchar *typed_time; -} GstSDPZone; - -/** - * GstSDPKey: - * @type: the encryption type - * @data: the encryption data - * - * The contents of the SDP "k=" field which is used to convey encryption - * keys. - */ -typedef struct { - gchar *type; - gchar *data; -} GstSDPKey; - -/** - * GstSDPAttribute: - * @key: the attribute key - * @value: the attribute value or NULL when it was a property attribute - * - * The contents of the SDP "a=" field which contains a key/value pair. - */ -typedef struct { - gchar *key; - gchar *value; -} GstSDPAttribute; - -/** - * GstSDPMedia: - * @media: the media type - * @port: the transport port to which the media stream will be sent - * @num_ports: the number of ports or -1 if only one port was specified - * @proto: the transport protocol - * @fmts: an array of #gchar formats - * @information: the media title - * @connections: array of #GstSDPConnection with media connection information - * @bandwidths: array of #GstSDPBandwidth with media bandwidth information - * @key: the encryption key - * @attributes: array of #GstSDPAttribute with the additional media attributes - * - * The contents of the SDP "m=" field with all related fields. - */ -typedef struct { - gchar *media; - guint port; - guint num_ports; - gchar *proto; - GArray *fmts; - gchar *information; - GArray *connections; - GArray *bandwidths; - GstSDPKey key; - GArray *attributes; -} GstSDPMedia; - -/** - * GstSDPMessage: - * @version: the protocol version - * @origin: owner/creator and session identifier - * @session_name: session name - * @information: session information - * @uri: URI of description - * @emails: array of #gchar with email addresses - * @phones: array of #gchar with phone numbers - * @connection: connection information for the session - * @bandwidths: array of #GstSDPBandwidth with bandwidth information - * @times: array of #GstSDPTime with time descriptions - * @zones: array of #GstSDPZone with time zone adjustments - * @key: encryption key - * @attributes: array of #GstSDPAttribute with session attributes - * @medias: array of #GstSDPMedia with media descriptions - * - * The contents of the SDP message. - */ -typedef struct { - gchar *version; - GstSDPOrigin origin; - gchar *session_name; - gchar *information; - gchar *uri; - GArray *emails; - GArray *phones; - GstSDPConnection connection; - GArray *bandwidths; - GArray *times; - GArray *zones; - GstSDPKey key; - GArray *attributes; - GArray *medias; -} GstSDPMessage; - -/* Session descriptions */ -GstSDPResult gst_sdp_message_new (GstSDPMessage **msg); -GstSDPResult gst_sdp_message_init (GstSDPMessage *msg); -GstSDPResult gst_sdp_message_uninit (GstSDPMessage *msg); -GstSDPResult gst_sdp_message_free (GstSDPMessage *msg); - -GstSDPResult gst_sdp_message_parse_buffer (const guint8 *data, guint size, GstSDPMessage *msg); -gchar* gst_sdp_message_as_text (const GstSDPMessage *msg); - -/* convert from/to uri */ -GstSDPResult gst_sdp_message_parse_uri (const gchar *uri, GstSDPMessage *msg); -gchar* gst_sdp_message_as_uri (const gchar *scheme, const GstSDPMessage *msg); - -/* utils */ -gboolean gst_sdp_address_is_multicast (const gchar *nettype, const gchar *addrtype, - const gchar *addr); -/* v=.. */ -const gchar* gst_sdp_message_get_version (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_version (GstSDPMessage *msg, const gchar *version); - -/* o= */ -const GstSDPOrigin* gst_sdp_message_get_origin (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_origin (GstSDPMessage *msg, const gchar *username, - const gchar *sess_id, const gchar *sess_version, - const gchar *nettype, const gchar *addrtype, - const gchar *addr); - -/* s= */ -const gchar* gst_sdp_message_get_session_name (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_session_name (GstSDPMessage *msg, const gchar *session_name); - -/* i= */ -const gchar* gst_sdp_message_get_information (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_information (GstSDPMessage *msg, const gchar *information); - -/* u= */ -const gchar* gst_sdp_message_get_uri (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_uri (GstSDPMessage *msg, const gchar *uri); - -/* e= */ -guint gst_sdp_message_emails_len (const GstSDPMessage *msg); -const gchar* gst_sdp_message_get_email (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_email (GstSDPMessage *msg, const gchar *email); - -/* p= */ -guint gst_sdp_message_phones_len (const GstSDPMessage *msg); -const gchar* gst_sdp_message_get_phone (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_phone (GstSDPMessage *msg, const gchar *phone); - -/* c= [/][/] */ -const GstSDPConnection* gst_sdp_message_get_connection (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_connection (GstSDPMessage *msg, const gchar *nettype, - const gchar *addrtype, const gchar *address, - guint ttl, guint addr_number); -/* b=: */ -guint gst_sdp_message_bandwidths_len (const GstSDPMessage *msg); -const GstSDPBandwidth* gst_sdp_message_get_bandwidth (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_bandwidth (GstSDPMessage *msg, const gchar *bwtype, - guint bandwidth); -/* t= and - * r= */ -guint gst_sdp_message_times_len (const GstSDPMessage *msg); -const GstSDPTime* gst_sdp_message_get_time (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_time (GstSDPMessage *msg, const gchar *start, const gchar *stop, const gchar **repeat); - -/* z= .... */ -guint gst_sdp_message_zones_len (const GstSDPMessage *msg); -const GstSDPZone* gst_sdp_message_get_zone (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_zone (GstSDPMessage *msg, const gchar *adj_time, - const gchar *typed_time); - -/* k=[:] */ -const GstSDPKey* gst_sdp_message_get_key (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_key (GstSDPMessage *msg, const gchar *type, - const gchar *data); -/* a=... */ -guint gst_sdp_message_attributes_len (const GstSDPMessage *msg); -const GstSDPAttribute* gst_sdp_message_get_attribute (const GstSDPMessage *msg, guint idx); -const gchar* gst_sdp_message_get_attribute_val (const GstSDPMessage *msg, const gchar *key); -const gchar* gst_sdp_message_get_attribute_val_n (const GstSDPMessage *msg, const gchar *key, - guint nth); -GstSDPResult gst_sdp_message_add_attribute (GstSDPMessage *msg, const gchar *key, - const gchar *value); - -/* m=.. sections */ -guint gst_sdp_message_medias_len (const GstSDPMessage *msg); -const GstSDPMedia* gst_sdp_message_get_media (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_media (GstSDPMessage *msg, GstSDPMedia *media); - -GstSDPResult gst_sdp_message_dump (const GstSDPMessage *msg); - -/* Media descriptions */ -GstSDPResult gst_sdp_media_new (GstSDPMedia **media); -GstSDPResult gst_sdp_media_init (GstSDPMedia *media); -GstSDPResult gst_sdp_media_uninit (GstSDPMedia *media); -GstSDPResult gst_sdp_media_free (GstSDPMedia *media); - -gchar* gst_sdp_media_as_text (const GstSDPMedia *media); - -/* m= / ... */ -const gchar* gst_sdp_media_get_media (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_media (GstSDPMedia *media, const gchar *med); - -guint gst_sdp_media_get_port (const GstSDPMedia *media); -guint gst_sdp_media_get_num_ports (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_port_info (GstSDPMedia *media, guint port, - guint num_ports); - -const gchar* gst_sdp_media_get_proto (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_proto (GstSDPMedia *media, const gchar *proto); - -guint gst_sdp_media_formats_len (const GstSDPMedia *media); -const gchar* gst_sdp_media_get_format (const GstSDPMedia *media, guint idx); -GstSDPResult gst_sdp_media_add_format (GstSDPMedia *media, const gchar *format); - -/* i= */ -const gchar* gst_sdp_media_get_information (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_information (GstSDPMedia *media, const gchar *information); - -/* c= [/][/] */ -guint gst_sdp_media_connections_len (const GstSDPMedia *media); -const GstSDPConnection* gst_sdp_media_get_connection (const GstSDPMedia *media, guint idx); -GstSDPResult gst_sdp_media_add_connection (GstSDPMedia *media, const gchar *nettype, - const gchar *addrtype, const gchar *address, - guint ttl, guint addr_number); - -/* b=: */ -guint gst_sdp_media_bandwidths_len (const GstSDPMedia *media); -const GstSDPBandwidth* gst_sdp_media_get_bandwidth (const GstSDPMedia *media, guint idx); -GstSDPResult gst_sdp_media_add_bandwidth (GstSDPMedia *media, const gchar *bwtype, - guint bandwidth); - -/* k=: */ -const GstSDPKey* gst_sdp_media_get_key (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_key (GstSDPMedia *media, const gchar *type, - const gchar *data); -/* a=... */ -guint gst_sdp_media_attributes_len (const GstSDPMedia *media); -const GstSDPAttribute * gst_sdp_media_get_attribute (const GstSDPMedia *media, guint idx); -const gchar* gst_sdp_media_get_attribute_val (const GstSDPMedia *media, const gchar *key); -const gchar* gst_sdp_media_get_attribute_val_n (const GstSDPMedia *media, const gchar *key, - guint nth); -GstSDPResult gst_sdp_media_add_attribute (GstSDPMedia *media, const gchar *key, - const gchar *value); - -G_END_DECLS - -#endif /* __GST_SDP_MESSAGE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h deleted file mode 100644 index 05dd3dee..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h +++ /dev/null @@ -1,136 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstsignalprocessor.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SIGNAL_PROCESSOR_H__ -#define __GST_SIGNAL_PROCESSOR_H__ - -#include -#include - -G_BEGIN_DECLS - - -typedef enum -{ - GST_SIGNAL_PROCESSOR_CLASS_FLAG_CAN_PROCESS_IN_PLACE = 1<<0 -} GstSignalProcessorClassFlags; - -#define GST_SIGNAL_PROCESSOR_CLASS_CAN_PROCESS_IN_PLACE(klass) \ - (GST_SIGNAL_PROCESSOR_CLASS (klass)->flags & \ - GST_SIGNAL_PROCESSOR_CLASS_FLAG_CAN_PROCESS_IN_PLACE) -#define GST_SIGNAL_PROCESSOR_CLASS_SET_CAN_PROCESS_IN_PLACE(klass) \ - GST_SIGNAL_PROCESSOR_CLASS (klass)->flags |= \ - GST_SIGNAL_PROCESSOR_CLASS_FLAG_CAN_PROCESS_IN_PLACE - -typedef enum -{ - GST_SIGNAL_PROCESSOR_STATE_NULL, - GST_SIGNAL_PROCESSOR_STATE_INITIALIZED, - GST_SIGNAL_PROCESSOR_STATE_RUNNING -} GstSignalProcessorState; - - -#define GST_TYPE_SIGNAL_PROCESSOR (gst_signal_processor_get_type()) -#define GST_SIGNAL_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SIGNAL_PROCESSOR,GstSignalProcessor)) -#define GST_SIGNAL_PROCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SIGNAL_PROCESSOR,GstSignalProcessorClass)) -#define GST_SIGNAL_PROCESSOR_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_SIGNAL_PROCESSOR,GstSignalProcessorClass)) -#define GST_IS_SIGNAL_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SIGNAL_PROCESSOR)) -#define GST_IS_SIGNAL_PROCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SIGNAL_PROCESSOR)) - -#define GST_SIGNAL_PROCESSOR_IS_INITIALIZED(obj) \ - (GST_SIGNAL_PROCESSOR (obj)->state >= GST_SIGNAL_PROCESSOR_STATE_INITIALIZED) -#define GST_SIGNAL_PROCESSOR_IS_RUNNING(obj) \ - (GST_SIGNAL_PROCESSOR (obj)->state == GST_SIGNAL_PROCESSOR_STATE_RUNNING) - -typedef struct _GstSignalProcessorGroup GstSignalProcessorGroup; -typedef struct _GstSignalProcessor GstSignalProcessor; -typedef struct _GstSignalProcessorClass GstSignalProcessorClass; - - -struct _GstSignalProcessorGroup { - guint channels; /**< Number of channels in buffers */ - guint nframes; /**< Number of frames currently allocated per channel */ - GstMapInfo interleaved_map; /**< Interleaved buffer (c1c2c1c2...)*/ - gfloat *buffer; /**< De-interleaved buffer (c1c1...c2c2...) */ -}; - -struct _GstSignalProcessor { - GstElement element; - - /* state */ - GstCaps *caps; - GstSignalProcessorState state; - GstFlowReturn flow_state; - GstPadMode mode; - - /* pending inputs before processing can take place */ - guint pending_in; - /* pending outputs to be filled */ - guint pending_out; - - /* multi-channel signal pads */ - GstSignalProcessorGroup *group_in; - GstSignalProcessorGroup *group_out; - - /* single channel signal pads */ - GstMapInfo *audio_in; - GstMapInfo *audio_out; - - /* sampling rate */ - gint sample_rate; - -}; - -struct _GstSignalProcessorClass { - GstElementClass parent_class; - - /*< public >*/ - guint num_group_in; - guint num_group_out; - guint num_audio_in; - guint num_audio_out; - - guint flags; - - /* virtual methods for subclasses */ - - gboolean (*setup) (GstSignalProcessor *self, GstCaps *caps); - gboolean (*start) (GstSignalProcessor *self); - void (*stop) (GstSignalProcessor *self); - void (*cleanup) (GstSignalProcessor *self); - void (*process) (GstSignalProcessor *self, guint num_frames); - gboolean (*event) (GstSignalProcessor *self, GstEvent *event); -}; - - -GType gst_signal_processor_get_type (void); -void gst_signal_processor_class_add_pad_template (GstSignalProcessorClass *klass, - const gchar *name, GstPadDirection direction, guint index, guint channels); - - - -G_END_DECLS - - -#endif /* __GST_SIGNAL_PROCESSOR_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagdemux.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagdemux.h deleted file mode 100644 index ba49447a..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagdemux.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GStreamer Base Class for Tag Demuxing - * Copyright (C) 2005 Jan Schmidt - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TAG_DEMUX_H__ -#define __GST_TAG_DEMUX_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_DEMUX (gst_tag_demux_get_type()) -#define GST_TAG_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TAG_DEMUX,GstTagDemux)) -#define GST_TAG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAG_DEMUX,GstTagDemuxClass)) -#define GST_IS_TAG_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAG_DEMUX)) -#define GST_IS_TAG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAG_DEMUX)) - -typedef struct _GstTagDemux GstTagDemux; -typedef struct _GstTagDemuxClass GstTagDemuxClass; -typedef struct _GstTagDemuxPrivate GstTagDemuxPrivate; - -/** - * GstTagDemuxResult: - * @GST_TAG_DEMUX_RESULT_BROKEN_TAG: cannot parse tag, just skip it - * @GST_TAG_DEMUX_RESULT_AGAIN : call again with less or more data - * @GST_TAG_DEMUX_RESULT_OK : parsed tag successfully - * - * Result values from the parse_tag virtual function. - */ -typedef enum { - GST_TAG_DEMUX_RESULT_BROKEN_TAG, - GST_TAG_DEMUX_RESULT_AGAIN, - GST_TAG_DEMUX_RESULT_OK -} GstTagDemuxResult; - -GType gst_tag_demux_result_get_type (void); -#define GST_TYPE_TAG_DEMUX_RESULT (gst_tag_demux_result_get_type()) - -/** - * GstTagDemux: - * @element: parent element - * - * Opaque #GstTagDemux structure. - */ -struct _GstTagDemux -{ - GstElement element; - - /*< private >*/ - GstTagDemuxPrivate *priv; - - gpointer reserved[GST_PADDING]; -}; - -/** - * GstTagDemuxClass: - * @parent_class: the parent class. - * @min_start_size: minimum size required to identify a tag at the start and - * determine its total size. Set to 0 if not interested in start tags. - * Subclasses should set this in their class_init function. - * @min_end_size: minimum size required to identify a tag at the end and - * determine its total size. Set to 0 if not interested in end tags. - * Subclasses should set this in their class_init function. - * @identify_tag: identify tag and determine the size required to parse the - * tag. Buffer may be larger than the specified minimum size. - * Subclassed MUST override this vfunc in their class_init function. - * @parse_tag: parse the tag. Buffer will be exactly of the size determined by - * the identify_tag vfunc before. The parse_tag vfunc may change the size - * stored in *tag_size and return GST_TAG_DEMUX_RESULT_AGAIN to request a - * larger or smaller buffer. It is also permitted to adjust the tag_size to a - * smaller value and then return GST_TAG_DEMUX_RESULT_OK in one go. - * Subclassed MUST override the parse_tag vfunc in their class_init function. - * @merge_tags: merge start and end tags. Subclasses may want to override this - * vfunc to allow prioritising of start or end tag according to user - * preference. Note that both start_tags and end_tags may be NULL. By default - * start tags are prefered over end tags. - * - * The #GstTagDemuxClass structure. See documentation at beginning of section - * for details about what subclasses need to override and do. - */ -struct _GstTagDemuxClass -{ - GstElementClass parent_class; - - /* minimum size required to identify a tag at the start and determine - * its total size */ - guint min_start_size; - - /* minimum size required to identify a tag at the end and determine - * its total size */ - guint min_end_size; - - /* vtable */ - - /* identify tag and determine the size required to parse the tag */ - gboolean (*identify_tag) (GstTagDemux * demux, - GstBuffer * buffer, - gboolean start_tag, - guint * tag_size); - - /* parse the tag once it is identified and its size is known */ - GstTagDemuxResult (*parse_tag) (GstTagDemux * demux, - GstBuffer * buffer, - gboolean start_tag, - guint * tag_size, - GstTagList ** tags); - - /* merge start and end tags (optional) */ - GstTagList * (*merge_tags) (GstTagDemux * demux, - const GstTagList * start_tags, - const GstTagList * end_tags); - - /*< private >*/ - gpointer reserved[GST_PADDING]; -}; - -GType gst_tag_demux_get_type (void); - -G_END_DECLS - -#endif /* __GST_TAG_DEMUX_H__ */ - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagmux.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagmux.h deleted file mode 100644 index 8b103e06..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/gsttagmux.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GStreamer tag muxer base class - * Copyright (C) 2006 Christophe Fergeau - * Copyright (C) 2006,2011 Tim-Philipp Müller - * Copyright (C) 2009 Pioneers of the Inevitable - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef GST_TAG_MUX_H -#define GST_TAG_MUX_H - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_MUX \ - (gst_tag_mux_get_type()) -#define GST_TAG_MUX(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TAG_MUX,GstTagMux)) -#define GST_TAG_MUX_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAG_MUX,GstTagMuxClass)) -#define GST_IS_TAG_MUX(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAG_MUX)) -#define GST_IS_TAG_MUX_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAG_MUX)) - -typedef struct _GstTagMux GstTagMux; -typedef struct _GstTagMuxClass GstTagMuxClass; -typedef struct _GstTagMuxPrivate GstTagMuxPrivate; - -/** - * GstTagMux: - * @element: parent element - * - * Opaque #GstTagMux structure. - */ -struct _GstTagMux { - GstElement element; - - /*< private >*/ - GstTagMuxPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstTagMuxClass: - * @parent_class: the parent class. - * @render_start_tag: create a tag buffer to add to the beginning of the - * input stream given a tag list, or NULL - * @render_end_tag: create a tag buffer to add to the end of the - * input stream given a tag list, or NULL - * - * The #GstTagMuxClass structure. Subclasses need to override at least one - * of the two render vfuncs. - */ -struct _GstTagMuxClass { - GstElementClass parent_class; - - /* vfuncs */ - GstBuffer * (*render_start_tag) (GstTagMux * mux, const GstTagList * tag_list); - GstBuffer * (*render_end_tag) (GstTagMux * mux, const GstTagList * tag_list); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_tag_mux_get_type (void); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/tag.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/tag.h deleted file mode 100644 index b75ad6ea..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/tag.h +++ /dev/null @@ -1,591 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * Copyright (C) 2006-2011 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TAG_TAG_H__ -#define __GST_TAG_TAG_H__ - -#include - -G_BEGIN_DECLS - -/* Tag names */ - -/** - * GST_TAG_MUSICBRAINZ_TRACKID: - * - * MusicBrainz track ID - */ -#define GST_TAG_MUSICBRAINZ_TRACKID "musicbrainz-trackid" -/** - * GST_TAG_MUSICBRAINZ_ARTISTID: - * - * MusicBrainz artist ID - */ -#define GST_TAG_MUSICBRAINZ_ARTISTID "musicbrainz-artistid" -/** - * GST_TAG_MUSICBRAINZ_ALBUMID: - * - * MusicBrainz album ID - */ -#define GST_TAG_MUSICBRAINZ_ALBUMID "musicbrainz-albumid" -/** - * GST_TAG_MUSICBRAINZ_ALBUMARTISTID: - * - * MusicBrainz album artist ID - */ -#define GST_TAG_MUSICBRAINZ_ALBUMARTISTID "musicbrainz-albumartistid" -/** - * GST_TAG_MUSICBRAINZ_TRMID: - * - * MusicBrainz track TRM ID - */ -#define GST_TAG_MUSICBRAINZ_TRMID "musicbrainz-trmid" - -/** - * GST_TAG_CMML_STREAM: - * - * Annodex CMML stream element tag - */ -#define GST_TAG_CMML_STREAM "cmml-stream" -/** - * GST_TAG_CMML_HEAD: - * - * Annodex CMML head element tag - */ - -#define GST_TAG_CMML_HEAD "cmml-head" -/** - * GST_TAG_CMML_CLIP: - * - * Annodex CMML clip element tag - */ -#define GST_TAG_CMML_CLIP "cmml-clip" - -/* CDDA tags */ - -/** - * GST_TAG_CDDA_CDDB_DISCID: - * - * CDDB disc id in its short form (e.g. 'aa063d0f') - */ -#define GST_TAG_CDDA_CDDB_DISCID "discid" - -/** - * GST_TAG_CDDA_CDDB_DISCID_FULL: - * - * CDDB disc id including all details - */ -#define GST_TAG_CDDA_CDDB_DISCID_FULL "discid-full" - -/** - * GST_TAG_CDDA_MUSICBRAINZ_DISCID: - * - * Musicbrainz disc id (e.g. 'ahg7JUcfR3vCYBphSDIogOOWrr0-') - */ -#define GST_TAG_CDDA_MUSICBRAINZ_DISCID "musicbrainz-discid" - -/** - * GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL: - * - * Musicbrainz disc id details - */ -#define GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL "musicbrainz-discid-full" - -/** - * GST_TAG_CAPTURING_SHUTTER_SPEED: - * - * Shutter speed used when capturing an image, in seconds. (fraction) - */ -#define GST_TAG_CAPTURING_SHUTTER_SPEED "capturing-shutter-speed" - -/** - * GST_TAG_CAPTURING_FOCAL_RATIO: - * - * Focal ratio (f-number) used when capturing an image. (double) - * - * The value stored is the denominator of the focal ratio (f-number). - * For example, if this tag value is 2, the focal ratio is f/2. - */ -#define GST_TAG_CAPTURING_FOCAL_RATIO "capturing-focal-ratio" - -/** - * GST_TAG_CAPTURING_FOCAL_LENGTH: - * - * Focal length used when capturing an image, in mm. (double) - */ -#define GST_TAG_CAPTURING_FOCAL_LENGTH "capturing-focal-length" - -/** - * GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO: - * - * Digital zoom ratio used when capturing an image. (double) - */ -#define GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO "capturing-digital-zoom-ratio" - -/** - * GST_TAG_CAPTURING_ISO_SPEED: - * - * ISO speed used when capturing an image. (integer) - */ -#define GST_TAG_CAPTURING_ISO_SPEED "capturing-iso-speed" - -/** - * GST_TAG_CAPTURING_EXPOSURE_PROGRAM: - * - * Type of exposure control used when capturing an image. (string) - * - * The allowed values are: - * "undefined" - * "manual" - * "normal" - automatically controlled - * "aperture-priority" - user selects aperture value - * "shutter-priority" - user selects shutter speed - * "creative" - biased towards depth of field - * "action" - biased towards fast shutter speed - * "portrait" - closeup, leaving background out of focus - * "landscape" - landscape photos, background in focus - */ -#define GST_TAG_CAPTURING_EXPOSURE_PROGRAM "capturing-exposure-program" - -/** - * GST_TAG_CAPTURING_EXPOSURE_MODE: - * - * Exposure mode used when capturing an image. (string) - * - * The allowed values are: - * "auto-exposure" - * "manual-exposure" - * "auto-bracket" - */ -#define GST_TAG_CAPTURING_EXPOSURE_MODE "capturing-exposure-mode" - -/** - * GST_TAG_CAPTURING_EXPOSURE_COMPENSATION: - * - * Exposure compensation using when capturing an image in EV. (double) - */ -#define GST_TAG_CAPTURING_EXPOSURE_COMPENSATION "capturing-exposure-compensation" - -/** - * GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE: - * - * Scene mode used when capturing an image. (string) - * - * The allowed values are: - * "standard" - * "landscape" - * "portrait" - * "night-scene" - */ -#define GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE "capturing-scene-capture-type" - -/** - * GST_TAG_CAPTURING_GAIN_ADJUSTMENT: - * - * Gain adjustment applied to an image. (string) - * - * The allowed values are: - * "none" - * "low-gain-up" - * "high-gain-up" - * "low-gain-down" - * "high-gain-down" - */ -#define GST_TAG_CAPTURING_GAIN_ADJUSTMENT "capturing-gain-adjustment" - -/** - * GST_TAG_CAPTURING_WHITE_BALANCE: - * - * White balance mode used when capturing an image. (string) - * - * The allowed values are: - * "auto" - * "manual" - * "daylight" - * "cloudy" - * "tungsten" - * "fluorescent" - * "fluorescent h" (newer daylight-calibrated fluorescents) - * "flash" - */ -#define GST_TAG_CAPTURING_WHITE_BALANCE "capturing-white-balance" - -/** - * GST_TAG_CAPTURING_CONTRAST: - * - * Direction of contrast processing applied when capturing an image. (string) - * - * The allowed values are: - * "normal" - * "soft" - * "hard" - */ -#define GST_TAG_CAPTURING_CONTRAST "capturing-contrast" - -/** - * GST_TAG_CAPTURING_SATURATION: - * - * Direction of saturation processing applied when capturing an image. (string) - * - * The allowed values are: - * "normal" - * "low-saturation" - * "high-saturation" - */ -#define GST_TAG_CAPTURING_SATURATION "capturing-saturation" - -/** - * GST_TAG_CAPTURING_SHARPNESS: - * - * Direction of sharpness processing applied when capturing an image. (string) - * - * The allowed values are: - * "normal" - * "soft" - * "hard" - */ -#define GST_TAG_CAPTURING_SHARPNESS "capturing-sharpness" - -/** - * GST_TAG_CAPTURING_FLASH_FIRED: - * - * If flash was fired during the capture of an image. (boolean) - * - * Note that if this tag isn't present, it should not be assumed that - * the flash did not fire. It should be treated as unknown. - */ -#define GST_TAG_CAPTURING_FLASH_FIRED "capturing-flash-fired" - -/** - * GST_TAG_CAPTURING_FLASH_MODE: - * - * The flash mode selected during the capture of an image. (string) - * - * The allowed values are: - * "auto" - * "always" - * "never" - */ -#define GST_TAG_CAPTURING_FLASH_MODE "capturing-flash-mode" - -/** - * GST_TAG_CAPTURING_METERING_MODE: - * - * Defines the way a camera determines the exposure. (string) - * - * The allowed values are: - * "unknown" - * "average" - * "center-weighted-average" - * "spot" - * "multi-spot" - * "pattern" - * "partial" - * "other" - */ -#define GST_TAG_CAPTURING_METERING_MODE "capturing-metering-mode" - -/** - * GST_TAG_CAPTURING_SOURCE: - * - * Indicates the source of capture. The device/medium used to do the - * capture. (string) - * - * Allowed values are: - * "dsc" (= digital still camera) - * "transparent-scanner" - * "reflex-scanner" - * "other" - */ -#define GST_TAG_CAPTURING_SOURCE "capturing-source" - -/** - * GST_TAG_IMAGE_HORIZONTAL_PPI: - * - * Media (image/video) intended horizontal pixel density in ppi. (double) - */ -#define GST_TAG_IMAGE_HORIZONTAL_PPI "image-horizontal-ppi" -/** - * GST_TAG_IMAGE_VERTICAL_PPI: - * - * Media (image/video) intended vertical pixel density in ppi. (double) - */ -#define GST_TAG_IMAGE_VERTICAL_PPI "image-vertical-ppi" - - -/* additional information for image tags */ - -/** - * GstTagImageType: - * @GST_TAG_IMAGE_TYPE_NONE : No image type. Can be used to - * tell functions such as gst_tag_image_data_to_image_sample() that no - * image type should be set. - * @GST_TAG_IMAGE_TYPE_UNDEFINED : Undefined/other image type - * @GST_TAG_IMAGE_TYPE_FRONT_COVER : Cover (front) - * @GST_TAG_IMAGE_TYPE_BACK_COVER : Cover (back) - * @GST_TAG_IMAGE_TYPE_LEAFLET_PAGE : Leaflet page - * @GST_TAG_IMAGE_TYPE_MEDIUM : Medium (e.g. label side of CD) - * @GST_TAG_IMAGE_TYPE_LEAD_ARTIST : Lead artist/lead performer/soloist - * @GST_TAG_IMAGE_TYPE_ARTIST : Artist/performer - * @GST_TAG_IMAGE_TYPE_CONDUCTOR : Conductor - * @GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA : Band/orchestra - * @GST_TAG_IMAGE_TYPE_COMPOSER : Composer - * @GST_TAG_IMAGE_TYPE_LYRICIST : Lyricist/text writer - * @GST_TAG_IMAGE_TYPE_RECORDING_LOCATION : Recording location - * @GST_TAG_IMAGE_TYPE_DURING_RECORDING : During recording - * @GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE : During performance - * @GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE : Movie/video screen capture - * @GST_TAG_IMAGE_TYPE_FISH : A fish as funny as the ID3v2 spec - * @GST_TAG_IMAGE_TYPE_ILLUSTRATION : Illustration - * @GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO : Band/artist logotype - * @GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO : Publisher/studio logotype - * - * Type of image contained in an image tag (specified as field in - * the image buffer's caps structure) - */ -/* Note: keep in sync with register_tag_image_type_enum() */ -typedef enum { - GST_TAG_IMAGE_TYPE_NONE = -1, - GST_TAG_IMAGE_TYPE_UNDEFINED = 0, - GST_TAG_IMAGE_TYPE_FRONT_COVER, - GST_TAG_IMAGE_TYPE_BACK_COVER, - GST_TAG_IMAGE_TYPE_LEAFLET_PAGE, - GST_TAG_IMAGE_TYPE_MEDIUM, - GST_TAG_IMAGE_TYPE_LEAD_ARTIST, - GST_TAG_IMAGE_TYPE_ARTIST, - GST_TAG_IMAGE_TYPE_CONDUCTOR, - GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA, - GST_TAG_IMAGE_TYPE_COMPOSER, - GST_TAG_IMAGE_TYPE_LYRICIST, - GST_TAG_IMAGE_TYPE_RECORDING_LOCATION, - GST_TAG_IMAGE_TYPE_DURING_RECORDING, - GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE, - GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE, - GST_TAG_IMAGE_TYPE_FISH, - GST_TAG_IMAGE_TYPE_ILLUSTRATION, - GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO, - GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO -} GstTagImageType; - -#define GST_TYPE_TAG_IMAGE_TYPE (gst_tag_image_type_get_type ()) -GType gst_tag_image_type_get_type (void); - -/** - * GST_TAG_ID3V2_HEADER_SIZE: - * - * ID3V2 header size considered minimum input for some functions such as - * gst_tag_list_from_id3v2_tag() and gst_tag_get_id3v2_tag_size() for example. - */ -#define GST_TAG_ID3V2_HEADER_SIZE 10 - -/* functions for vorbis comment manipulation */ - -const gchar * gst_tag_from_vorbis_tag (const gchar * vorbis_tag); -const gchar * gst_tag_to_vorbis_tag (const gchar * gst_tag); -void gst_vorbis_tag_add (GstTagList * list, - const gchar * tag, - const gchar * value); - -GList * gst_tag_to_vorbis_comments (const GstTagList * list, - const gchar * tag); - -/* functions to convert GstBuffers with vorbiscomment contents to GstTagLists and back */ -GstTagList * gst_tag_list_from_vorbiscomment (const guint8 * data, - gsize size, - const guint8 * id_data, - const guint id_data_length, - gchar ** vendor_string); -GstTagList * gst_tag_list_from_vorbiscomment_buffer (GstBuffer * buffer, - const guint8 * id_data, - const guint id_data_length, - gchar ** vendor_string); -GstBuffer * gst_tag_list_to_vorbiscomment_buffer (const GstTagList * list, - const guint8 * id_data, - const guint id_data_length, - const gchar * vendor_string); - -/* functions for ID3 tag manipulation */ - -/* FIXME 0.11: inconsistent API naming: gst_tag_list_new_from_id3v1(), gst_tag_list_from_*_buffer(), - * gst_tag_list_from_id3v2_tag(). Also, note gst.tag.list_xyz() namespace vs. gst.tag_list_xyz(), - * which is a bit confusing and possibly doesn't map too well */ - -guint gst_tag_id3_genre_count (void); -const gchar * gst_tag_id3_genre_get (const guint id); -GstTagList * gst_tag_list_new_from_id3v1 (const guint8 * data); - -const gchar * gst_tag_from_id3_tag (const gchar * id3_tag); -const gchar * gst_tag_from_id3_user_tag (const gchar * type, - const gchar * id3_user_tag); -const gchar * gst_tag_to_id3_tag (const gchar * gst_tag); - -gboolean gst_tag_list_add_id3_image (GstTagList * tag_list, - const guint8 * image_data, - guint image_data_len, - guint id3_picture_type); - -GstTagList * gst_tag_list_from_id3v2_tag (GstBuffer * buffer); - -guint gst_tag_get_id3v2_tag_size (GstBuffer * buffer); - -/* functions to convert GstBuffers with xmp packets contents to GstTagLists and back */ -GstTagList * gst_tag_list_from_xmp_buffer (GstBuffer * buffer); -GstBuffer * gst_tag_list_to_xmp_buffer (const GstTagList * list, - gboolean read_only, - const gchar ** schemas); -const gchar** gst_tag_xmp_list_schemas (void); - -/* functions related to exif */ -GstBuffer * gst_tag_list_to_exif_buffer (const GstTagList * taglist, - gint byte_order, - guint32 base_offset); - -GstBuffer * gst_tag_list_to_exif_buffer_with_tiff_header (const GstTagList * taglist); - -GstTagList * gst_tag_list_from_exif_buffer (GstBuffer * buffer, - gint byte_order, - guint32 base_offset); - -GstTagList * gst_tag_list_from_exif_buffer_with_tiff_header ( - GstBuffer * buffer); - -/* other tag-related functions */ - -gboolean gst_tag_parse_extended_comment (const gchar * ext_comment, - gchar ** key, - gchar ** lang, - gchar ** value, - gboolean fail_if_no_key); - -gchar * gst_tag_freeform_string_to_utf8 (const gchar * data, - gint size, - const gchar ** env_vars); - -GstSample * gst_tag_image_data_to_image_sample (const guint8 * image_data, - guint image_data_len, - GstTagImageType image_type); - -/* FIXME 0.11: get rid of this awkward register/init function, see tags.c */ -void gst_tag_register_musicbrainz_tags (void); - - -/* language tag related functions */ - -gchar ** gst_tag_get_language_codes (void); - -const gchar * gst_tag_get_language_name (const gchar * language_code); - -const gchar * gst_tag_get_language_code_iso_639_1 (const gchar * lang_code); - -const gchar * gst_tag_get_language_code_iso_639_2B (const gchar * lang_code); - -const gchar * gst_tag_get_language_code_iso_639_2T (const gchar * lang_code); - -gboolean gst_tag_check_language_code (const gchar * lang_code); - -/** - * gst_tag_get_language_code: - * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de") - * - * Convenience macro wrapping gst_tag_get_language_code_iso_639_1(). - */ -#define gst_tag_get_language_code(lang_code) \ - gst_tag_get_language_code_iso_639_1(lang_code) - - -/* functions to deal with (mostly) Creative Commons licenses */ - -/** - * GstTagLicenseFlags: - * @GST_TAG_LICENSE_PERMITS_REPRODUCTION: making multiple copies - * is allowed - * @GST_TAG_LICENSE_PERMITS_DISTRIBUTION: distribution, public display - * and public performance are allowed - * @GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS: distribution of derivative - * works is allowed - * @GST_TAG_LICENSE_PERMITS_SHARING: commercial derivatives are allowed, - * but only non-commercial distribution is allowed - * @GST_TAG_LICENSE_REQUIRES_NOTICE: copyright and license notices - * must be kept intact - * @GST_TAG_LICENSE_REQUIRES_ATTRIBUTION: credit must be given to - * copyright holder and/or author - * @GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE: derivative works must be - * licensed under the same terms or compatible terms as the original work - * @GST_TAG_LICENSE_REQUIRES_SOURCE_CODE: source code (the preferred - * form for making modifications) must be provided when exercising some - * rights granted by the license - * @GST_TAG_LICENSE_REQUIRES_COPYLEFT: derivative and combined works - * must be licensed under specified terms, similar to those of the original - * work - * @GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT: derivative works must be - * licensed under specified terms, with at least the same conditions as - * the original work; combinations with the work may be licensed under - * different terms - * @GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE: exercising rights for - * commercial purposes is prohibited - * @GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE: use in a - * non-developing country is prohibited - * @GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE: this license was created - * by the Creative Commons project - * @GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE: this license was - * created by the Free Software Foundation (FSF) - * - * See http://creativecommons.org/ns for more information. - */ -typedef enum { - GST_TAG_LICENSE_PERMITS_REPRODUCTION = (1 << 0), - GST_TAG_LICENSE_PERMITS_DISTRIBUTION = (1 << 1), - GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS = (1 << 2), - GST_TAG_LICENSE_PERMITS_SHARING = (1 << 3), - - GST_TAG_LICENSE_REQUIRES_NOTICE = (1 << 8), - GST_TAG_LICENSE_REQUIRES_ATTRIBUTION = (1 << 9), - GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE = (1 << 10), - GST_TAG_LICENSE_REQUIRES_SOURCE_CODE = (1 << 11), - GST_TAG_LICENSE_REQUIRES_COPYLEFT = (1 << 12), - GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT = (1 << 13), - - GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE = (1 << 16), - GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE = (1 << 17), - - GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE = (1 << 24), - GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE = (1 << 25) -} GstTagLicenseFlags; - -gchar ** gst_tag_get_licenses (void); - -GstTagLicenseFlags gst_tag_get_license_flags (const gchar * license_ref); - -const gchar * gst_tag_get_license_nick (const gchar * license_ref); - -const gchar * gst_tag_get_license_title (const gchar * license_ref); - -const gchar * gst_tag_get_license_version (const gchar * license_ref); - -const gchar * gst_tag_get_license_description (const gchar * license_ref); - -const gchar * gst_tag_get_license_jurisdiction (const gchar * license_ref); - -GType gst_tag_license_flags_get_type (void); - -G_END_DECLS - -#endif /* __GST_TAG_TAG_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/xmpwriter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/xmpwriter.h deleted file mode 100644 index a7f6e4a9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/tag/xmpwriter.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GStreamer XmpConfig - * Copyright (C) 2011 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __TAG_XMP_WRITER_H__ -#define __TAG_XMP_WRITER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_XMP_WRITER \ - (gst_tag_xmp_writer_get_type ()) -#define GST_TAG_XMP_WRITER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriter)) -#define GST_TAG_XMP_WRITER_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_CAST ((iface), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriterInterface)) -#define GST_IS_TAG_XMP_WRITER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TAG_XMP_WRITER)) -#define GST_IS_TAG_XMP_WRITER_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_TYPE ((iface), GST_TYPE_TAG_XMP_WRITER)) -#define GST_TAG_XMP_WRITER_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriterInterface)) - -typedef struct _GstTagXmpWriter GstTagXmpWriter; -typedef struct _GstTagXmpWriterInterface GstTagXmpWriterInterface; - -struct _GstTagXmpWriterInterface { - GTypeInterface parent; -}; - -GType gst_tag_xmp_writer_get_type (void); - -void gst_tag_xmp_writer_add_all_schemas (GstTagXmpWriter * config); - -void gst_tag_xmp_writer_add_schema (GstTagXmpWriter * config, - const gchar * schema); - -gboolean gst_tag_xmp_writer_has_schema (GstTagXmpWriter * config, - const gchar * schema); - -void gst_tag_xmp_writer_remove_schema (GstTagXmpWriter * config, - const gchar * schema); - -void gst_tag_xmp_writer_remove_all_schemas (GstTagXmpWriter * config); - -GstBuffer* gst_tag_xmp_writer_tag_list_to_xmp_buffer (GstTagXmpWriter * config, - const GstTagList * taglist, - gboolean read_only); - -G_END_DECLS - -#endif /* __TAG_XMP_WRITER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalance.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalance.h deleted file mode 100644 index ec5d1722..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalance.h +++ /dev/null @@ -1,114 +0,0 @@ -/* GStreamer Color Balance - * Copyright (C) 2003 Ronald Bultje - * - * color-balance.h: image color balance interface design - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_COLOR_BALANCE_H__ -#define __GST_COLOR_BALANCE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_COLOR_BALANCE \ - (gst_color_balance_get_type ()) -#define GST_COLOR_BALANCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE, GstColorBalance)) -#define GST_IS_COLOR_BALANCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE)) -#define GST_COLOR_BALANCE_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_COLOR_BALANCE, GstColorBalanceInterface)) - -typedef struct _GstColorBalance GstColorBalance; -typedef struct _GstColorBalanceInterface GstColorBalanceInterface; - -/** - * GstColorBalanceType: - * @GST_COLOR_BALANCE_HARDWARE: Color balance is implemented with dedicated - * hardware. - * @GST_COLOR_BALANCE_SOFTWARE: Color balance is implemented via software - * processing. - * - * An enumeration indicating whether an element implements color balancing - * operations in software or in dedicated hardware. In general, dedicated - * hardware implementations (such as those provided by xvimagesink) are - * preferred. - */ -typedef enum -{ - GST_COLOR_BALANCE_HARDWARE, - GST_COLOR_BALANCE_SOFTWARE -} GstColorBalanceType; - -/** - * GstColorBalanceInterface: - * @iface: the parent interface - * @balance_type: implementation type - * @list_channels: list handled channels - * @set_value: set a channel value - * @get_value: get a channel value - * @value_changed: default handler for value changed notification - * - * Color-balance interface. - */ -struct _GstColorBalanceInterface { - GTypeInterface iface; - - /* virtual functions */ - const GList * (* list_channels) (GstColorBalance *balance); - - void (* set_value) (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); - gint (* get_value) (GstColorBalance *balance, - GstColorBalanceChannel *channel); - GstColorBalanceType (*get_balance_type) (GstColorBalance *balance); - - /* signals */ - void (* value_changed) (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_color_balance_get_type (void); - -/* virtual class function wrappers */ -const GList * - gst_color_balance_list_channels (GstColorBalance *balance); -void gst_color_balance_set_value (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); -gint gst_color_balance_get_value (GstColorBalance *balance, - GstColorBalanceChannel *channel); - -GstColorBalanceType - gst_color_balance_get_balance_type (GstColorBalance *balance); - -/* trigger signal */ -void gst_color_balance_value_changed (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); - -G_END_DECLS - -#endif /* __GST_COLOR_BALANCE_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalancechannel.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalancechannel.h deleted file mode 100644 index ca23ee2c..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/colorbalancechannel.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GStreamer Color Balance - * Copyright (C) 2003 Ronald Bultje - * - * colorbalancechannel.h: individual channel object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_COLOR_BALANCE_CHANNEL_H__ -#define __GST_COLOR_BALANCE_CHANNEL_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_COLOR_BALANCE_CHANNEL \ - (gst_color_balance_channel_get_type ()) -#define GST_COLOR_BALANCE_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL, \ - GstColorBalanceChannel)) -#define GST_COLOR_BALANCE_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL, \ - GstColorBalanceChannelClass)) -#define GST_IS_COLOR_BALANCE_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL)) -#define GST_IS_COLOR_BALANCE_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL)) - -typedef struct _GstColorBalanceChannel GstColorBalanceChannel; -typedef struct _GstColorBalanceChannelClass GstColorBalanceChannelClass; - -/** - * GstColorBalanceChannel: - * @label: A string containing a descriptive name for this channel - * @min_value: The minimum valid value for this channel. - * @max_value: The maximum valid value for this channel. - */ -struct _GstColorBalanceChannel { - GObject parent; - - /*< public >*/ - gchar *label; - gint min_value; - gint max_value; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstColorBalanceChannelClass: - * @parent: the parent class - * @value_changed: default handler for value changed notification - * - * Color-balance channel class. - */ -struct _GstColorBalanceChannelClass { - GObjectClass parent; - - /* signals */ - void (* value_changed) (GstColorBalanceChannel *channel, - gint value); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_color_balance_channel_get_type (void); - -G_END_DECLS - -#endif /* __GST_COLOR_BALANCE_CHANNEL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h deleted file mode 100644 index 70249449..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2011 Intel - * - * Author: Nicolas Dufresne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_SURFACE_CONVERTER_H_ -#define _GST_SURFACE_CONVERTER_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "GstSurfaceConverter is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_SURFACE_CONVERTER (gst_surface_converter_get_type ()) -#define GST_SURFACE_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverter)) -#define GST_IS_SURFACE_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SURFACE_CONVERTER)) -#define GST_SURFACE_CONVERTER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverterInterface)) - -typedef struct _GstSurfaceConverter GstSurfaceConverter; -typedef struct _GstSurfaceConverterInterface GstSurfaceConverterInterface; - -/** - * GstSurfaceConverterInterface: - * @parent: parent interface type. - * @upload: vmethod to upload #GstSurfaceBuffer. - * - * #GstSurfaceConverterInterface interface. - */ -struct _GstSurfaceConverterInterface -{ - GTypeInterface parent; - - gboolean (*upload) (GstSurfaceConverter *converter, - GstBuffer *buffer); -}; - -GType gst_surface_converter_get_type (void); - -gboolean gst_surface_converter_upload (GstSurfaceConverter *converter, - GstBuffer *buffer); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfacemeta.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfacemeta.h deleted file mode 100644 index ed04bc28..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstsurfacemeta.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2011 Intel - * - * Author: Nicolas Dufresne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_SURFACE_META_H_ -#define _GST_SURFACE_META_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "GstSurfaceMeta is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstSurfaceMeta GstSurfaceMeta; - -/** - * GstSurfaceMeta: - * @create_converter: vmethod to create a converter. - * - */ -struct _GstSurfaceMeta { - GstMeta meta; - - GstSurfaceConverter * (*create_converter) (GstSurfaceMeta *meta, - const gchar *type, - GValue *dest); -}; - -GType gst_surface_meta_api_get_type (void); -#define GST_SURFACE_META_API_TYPE (gst_surface_meta_api_get_type()) - -const GstMetaInfo *gst_surface_meta_get_info (void); -#define GST_SURFACE_META_INFO (gst_surface_meta_get_info()) - -#define gst_buffer_get_surface_meta(b) \ - ((GstSurfaceMeta*)gst_buffer_get_meta((b),GST_SURFACE_META_API_TYPE)) -#define gst_buffer_add_surface_meta(b) \ - ((GstSurfaceMeta*)gst_buffer_add_meta((b),GST_SURFACE_META_INFO,NULL)) - -GstSurfaceConverter *gst_surface_meta_create_converter (GstSurfaceMeta *meta, - const gchar *type, - GValue *dest); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideodecoder.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideodecoder.h deleted file mode 100644 index 8e2b7c70..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideodecoder.h +++ /dev/null @@ -1,371 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * Copyright (C) 2012 Collabora Ltd. - * Author : Edward Hervey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_VIDEO_DECODER_H_ -#define _GST_VIDEO_DECODER_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_DECODER \ - (gst_video_decoder_get_type()) -#define GST_VIDEO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_DECODER,GstVideoDecoder)) -#define GST_VIDEO_DECODER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_DECODER,GstVideoDecoderClass)) -#define GST_VIDEO_DECODER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_VIDEO_DECODER,GstVideoDecoderClass)) -#define GST_IS_VIDEO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_DECODER)) -#define GST_IS_VIDEO_DECODER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_DECODER)) - -/** - * GST_VIDEO_DECODER_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_VIDEO_DECODER_SINK_NAME "sink" -/** - * GST_VIDEO_DECODER_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_VIDEO_DECODER_SRC_NAME "src" - -/** - * GST_VIDEO_DECODER_SRC_PAD: - * @obj: a #GstVideoDecoder - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_VIDEO_DECODER_SRC_PAD(obj) (((GstVideoDecoder *) (obj))->srcpad) - -/** - * GST_VIDEO_DECODER_SINK_PAD: - * @obj: a #GstVideoDecoder - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_VIDEO_DECODER_SINK_PAD(obj) (((GstVideoDecoder *) (obj))->sinkpad) -/** - * GST_VIDEO_DECODER_FLOW_NEED_DATA: - * - * Returned while parsing to indicate more data is needed. - **/ -#define GST_VIDEO_DECODER_FLOW_NEED_DATA GST_FLOW_CUSTOM_SUCCESS - -/** - * GST_VIDEO_DECODER_INPUT_SEGMENT: - * @obj: base decoder instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_DECODER_INPUT_SEGMENT(obj) (GST_VIDEO_DECODER_CAST (obj)->input_segment) - -/** - * GST_VIDEO_DECODER_OUTPUT_SEGMENT: - * @obj: base decoder instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_DECODER_OUTPUT_SEGMENT(obj) (GST_VIDEO_DECODER_CAST (obj)->output_segment) - -/** - * GST_VIDEO_DECODER_STREAM_LOCK: - * @decoder: video decoder instance - * - * Obtain a lock to protect the decoder function from concurrent access. - */ -#define GST_VIDEO_DECODER_STREAM_LOCK(decoder) g_rec_mutex_lock (&GST_VIDEO_DECODER (decoder)->stream_lock) - -/** - * GST_VIDEO_DECODER_STREAM_UNLOCK: - * @decoder: video decoder instance - * - * Release the lock that protects the decoder function from concurrent access. - */ -#define GST_VIDEO_DECODER_STREAM_UNLOCK(decoder) g_rec_mutex_unlock (&GST_VIDEO_DECODER (decoder)->stream_lock) - -typedef struct _GstVideoDecoder GstVideoDecoder; -typedef struct _GstVideoDecoderClass GstVideoDecoderClass; -typedef struct _GstVideoDecoderPrivate GstVideoDecoderPrivate; - - -/* do not use this one, use macro below */ -GstFlowReturn _gst_video_decoder_error (GstVideoDecoder *dec, gint weight, - GQuark domain, gint code, - gchar *txt, gchar *debug, - const gchar *file, const gchar *function, - gint line); - -/** - * GST_VIDEO_DECODER_ERROR: - * @el: the base video decoder element that generates the error - * @w: element defined weight of the error, added to error count - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - * parentheses) - * @debug: debugging information for the message (format string and args - * enclosed in parentheses) - * @ret: variable to receive return value - * - * Utility function that video decoder elements can use in case they encountered - * a data processing error that may be fatal for the current "data unit" but - * need not prevent subsequent decoding. Such errors are counted and if there - * are too many, as configured in the context's max_errors, the pipeline will - * post an error message and the application will be requested to stop further - * media processing. Otherwise, it is considered a "glitch" and only a warning - * is logged. In either case, @ret is set to the proper value to - * return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK). - */ -#define GST_VIDEO_DECODER_ERROR(el, w, domain, code, text, debug, ret) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - GstVideoDecoder *dec = GST_VIDEO_DECODER (el); \ - ret = _gst_video_decoder_error (dec, w, GST_ ## domain ## _ERROR, \ - GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__, \ - GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/** - * GST_VIDEO_DECODER_MAX_ERRORS: - * - * Default maximum number of errors tolerated before signaling error. - */ -#define GST_VIDEO_DECODER_MAX_ERRORS 10 - - -/** - * GstVideoDecoder: - * - * The opaque #GstVideoDecoder data structure. - */ -struct _GstVideoDecoder -{ - /*< private >*/ - GstElement element; - - /*< protected >*/ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - GstVideoDecoderPrivate *priv; - - /*< private >*/ - void *padding[GST_PADDING_LARGE]; -}; - -/** - * GstVideoDecoderClass: - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Notifies subclass of incoming data format (caps). - * @parse: Required for non-packetized input. - * Allows chopping incoming data into manageable units (frames) - * for subsequent decoding. - * @reset: Optional. - * Allows subclass (decoder) to perform post-seek semantics reset. - * @handle_frame: Provides input data frame to subclass. - * @finish: Optional. - * Called to request subclass to dispatch any pending remaining - * data (e.g. at EOS). - * @sink_event: Optional. - * Event handler on the sink pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @src_event: Optional. - * Event handler on the source pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @handle_frame needs to be overridden, and @set_format - * and likely as well. If non-packetized input is supported or expected, - * @parse needs to be overridden as well. - */ -struct _GstVideoDecoderClass -{ - /*< private >*/ - GstElementClass element_class; - - /*< public >*/ - gboolean (*open) (GstVideoDecoder *decoder); - - gboolean (*close) (GstVideoDecoder *decoder); - - gboolean (*start) (GstVideoDecoder *decoder); - - gboolean (*stop) (GstVideoDecoder *decoder); - - GstFlowReturn (*parse) (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame, - GstAdapter *adapter, - gboolean at_eos); - - gboolean (*set_format) (GstVideoDecoder *decoder, - GstVideoCodecState * state); - - gboolean (*reset) (GstVideoDecoder *decoder, - gboolean hard); - - GstFlowReturn (*finish) (GstVideoDecoder *decoder); - - GstFlowReturn (*handle_frame) (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - - gboolean (*sink_event) (GstVideoDecoder *decoder, - GstEvent *event); - - gboolean (*src_event) (GstVideoDecoder *decoder, - GstEvent *event); - - gboolean (*negotiate) (GstVideoDecoder *decoder); - - gboolean (*decide_allocation) (GstVideoDecoder *decoder, GstQuery *query); - - gboolean (*propose_allocation) (GstVideoDecoder *decoder, GstQuery * query); - - /*< private >*/ - void *padding[GST_PADDING_LARGE]; -}; - -GType gst_video_decoder_get_type (void); - -/* Context parameters */ -void gst_video_decoder_set_packetized (GstVideoDecoder * decoder, - gboolean packetized); - -gboolean gst_video_decoder_get_packetized (GstVideoDecoder * decoder); - -void gst_video_decoder_set_estimate_rate (GstVideoDecoder * dec, - gboolean enabled); - -gint gst_video_decoder_get_estimate_rate (GstVideoDecoder * dec); - -void gst_video_decoder_set_max_errors (GstVideoDecoder * dec, - gint num); - -gint gst_video_decoder_get_max_errors (GstVideoDecoder * dec); - -void gst_video_decoder_set_latency (GstVideoDecoder *decoder, - GstClockTime min_latency, - GstClockTime max_latency); -void gst_video_decoder_get_latency (GstVideoDecoder *decoder, - GstClockTime *min_latency, - GstClockTime *max_latency); - -void gst_video_decoder_get_allocator (GstVideoDecoder *decoder, - GstAllocator **allocator, - GstAllocationParams *params); -GstBufferPool *gst_video_decoder_get_buffer_pool (GstVideoDecoder *decoder); - -/* Object methods */ - -GstVideoCodecFrame *gst_video_decoder_get_frame (GstVideoDecoder *decoder, - int frame_number); - -GstVideoCodecFrame *gst_video_decoder_get_oldest_frame (GstVideoDecoder *decoder); - -GList * gst_video_decoder_get_frames (GstVideoDecoder *decoder); - -/* Parsing related methods */ -void gst_video_decoder_add_to_frame (GstVideoDecoder *decoder, - int n_bytes); -GstFlowReturn gst_video_decoder_have_frame (GstVideoDecoder *decoder); - -GstBuffer *gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder); - -GstFlowReturn gst_video_decoder_allocate_output_frame (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - -GstVideoCodecState *gst_video_decoder_set_output_state (GstVideoDecoder *decoder, - GstVideoFormat fmt, guint width, guint height, - GstVideoCodecState *reference); - -GstVideoCodecState *gst_video_decoder_get_output_state (GstVideoDecoder *decoder); - -gboolean gst_video_decoder_negotiate (GstVideoDecoder * decoder); - -GstClockTimeDiff gst_video_decoder_get_max_decode_time (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - -gdouble gst_video_decoder_get_qos_proportion (GstVideoDecoder * decoder); - -GstFlowReturn gst_video_decoder_finish_frame (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - -GstFlowReturn gst_video_decoder_drop_frame (GstVideoDecoder *dec, - GstVideoCodecFrame *frame); - -void gst_video_decoder_merge_tags (GstVideoDecoder *dec, - const GstTagList *tags, - GstTagMergeMode mode); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoencoder.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoencoder.h deleted file mode 100644 index da420365..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoencoder.h +++ /dev/null @@ -1,320 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * Copyright (C) 2012 Collabora Ltd. - * Author : Edward Hervey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_VIDEO_ENCODER_H_ -#define _GST_VIDEO_ENCODER_H_ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_ENCODER \ - (gst_video_encoder_get_type()) -#define GST_VIDEO_ENCODER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_ENCODER,GstVideoEncoder)) -#define GST_VIDEO_ENCODER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_ENCODER,GstVideoEncoderClass)) -#define GST_VIDEO_ENCODER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_VIDEO_ENCODER,GstVideoEncoderClass)) -#define GST_IS_VIDEO_ENCODER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_ENCODER)) -#define GST_IS_VIDEO_ENCODER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_ENCODER)) -#define GST_VIDEO_ENCODER_CAST(enc) ((GstVideoEncoder*)enc) - -/** - * GST_VIDEO_ENCODER_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_VIDEO_ENCODER_SINK_NAME "sink" -/** - * GST_VIDEO_ENCODER_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_VIDEO_ENCODER_SRC_NAME "src" - -/** - * GST_VIDEO_ENCODER_SRC_PAD: - * @obj: a #GstVideoEncoder - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_VIDEO_ENCODER_SRC_PAD(obj) (((GstVideoEncoder *) (obj))->srcpad) - -/** - * GST_VIDEO_ENCODER_SINK_PAD: - * @obj: a #GstVideoEncoder - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_VIDEO_ENCODER_SINK_PAD(obj) (((GstVideoEncoder *) (obj))->sinkpad) - -/** - * GST_VIDEO_ENCODER_FLOW_NEED_DATA: - * - * Returned while parsing to indicate more data is needed. - **/ -#define GST_VIDEO_ENCODER_FLOW_NEED_DATA GST_FLOW_CUSTOM_SUCCESS - -/** - * GST_VIDEO_ENCODER_FLOW_DROPPED: - * - * Returned when the event/buffer should be dropped. - */ -#define GST_VIDEO_ENCODER_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS_1 - -/** - * GST_VIDEO_ENCODER_INPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_ENCODER_INPUT_SEGMENT(obj) (GST_VIDEO_ENCODER_CAST (obj)->input_segment) - -/** - * GST_VIDEO_ENCODER_OUTPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_ENCODER_OUTPUT_SEGMENT(obj) (GST_VIDEO_ENCODER_CAST (obj)->output_segment) - -/** - * GST_VIDEO_ENCODER_STREAM_LOCK: - * @encoder: video encoder instance - * - * Obtain a lock to protect the encoder function from concurrent access. - */ -#define GST_VIDEO_ENCODER_STREAM_LOCK(encoder) g_rec_mutex_lock (&GST_VIDEO_ENCODER (encoder)->stream_lock) - -/** - * GST_VIDEO_ENCODER_STREAM_UNLOCK: - * @encoder: video encoder instance - * - * Release the lock that protects the encoder function from concurrent access. - */ -#define GST_VIDEO_ENCODER_STREAM_UNLOCK(encoder) g_rec_mutex_unlock (&GST_VIDEO_ENCODER (encoder)->stream_lock) - -typedef struct _GstVideoEncoder GstVideoEncoder; -typedef struct _GstVideoEncoderPrivate GstVideoEncoderPrivate; -typedef struct _GstVideoEncoderClass GstVideoEncoderClass; - -/** - * GstVideoEncoder: - * - * The opaque #GstVideoEncoder data structure. - */ -struct _GstVideoEncoder -{ - /*< private >*/ - GstElement element; - - /*< protected >*/ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - /*< private >*/ - GstVideoEncoderPrivate *priv; - - void *padding[GST_PADDING_LARGE]; -}; - -/** - * GstVideoEncoderClass: - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Optional. - * Notifies subclass of incoming data format. - * GstVideoCodecState fields have already been - * set according to provided caps. - * @handle_frame: Provides input frame to subclass. - * @reset: Optional. - * Allows subclass (encoder) to perform post-seek semantics reset. - * @finish: Optional. - * Called to request subclass to dispatch any pending remaining - * data (e.g. at EOS). - * @pre_push: Optional. - * Allows subclass to push frame downstream in whatever - * shape or form it deems appropriate. If not provided, - * provided encoded frame data is simply pushed downstream. - * @getcaps: Optional. - * Allows for a custom sink getcaps implementation (e.g. - * for multichannel input specification). If not implemented, - * default returns gst_video_encoder_proxy_getcaps - * applied to sink template caps. - * @sink_event: Optional. - * Event handler on the sink pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @src_event: Optional. - * Event handler on the source pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @handle_frame needs to be overridden, and @set_format - * and @get_caps are likely needed as well. - */ -struct _GstVideoEncoderClass -{ - /*< private >*/ - GstElementClass element_class; - - /*< public >*/ - /* virtual methods for subclasses */ - gboolean (*open) (GstVideoEncoder *encoder); - - gboolean (*close) (GstVideoEncoder *encoder); - - gboolean (*start) (GstVideoEncoder *encoder); - - gboolean (*stop) (GstVideoEncoder *encoder); - - gboolean (*set_format) (GstVideoEncoder *encoder, - GstVideoCodecState *state); - - GstFlowReturn (*handle_frame) (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame); - - gboolean (*reset) (GstVideoEncoder *encoder, - gboolean hard); - - GstFlowReturn (*finish) (GstVideoEncoder *encoder); - - GstFlowReturn (*pre_push) (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame); - - GstCaps * (*getcaps) (GstVideoEncoder *enc, - GstCaps *filter); - - gboolean (*sink_event) (GstVideoEncoder *encoder, - GstEvent *event); - - gboolean (*src_event) (GstVideoEncoder *encoder, - GstEvent *event); - - gboolean (*negotiate) (GstVideoEncoder *encoder); - - gboolean (*decide_allocation) (GstVideoEncoder *encoder, GstQuery *query); - - gboolean (*propose_allocation) (GstVideoEncoder * encoder, - GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_video_encoder_get_type (void); - -GstVideoCodecState* gst_video_encoder_get_output_state (GstVideoEncoder *encoder); - -GstVideoCodecState* gst_video_encoder_set_output_state (GstVideoEncoder * encoder, - GstCaps * caps, - GstVideoCodecState * reference); - -gboolean gst_video_encoder_negotiate (GstVideoEncoder * encoder); - -GstVideoCodecFrame* gst_video_encoder_get_frame (GstVideoEncoder *encoder, - int frame_number); -GstVideoCodecFrame* gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder); - -GList * gst_video_encoder_get_frames (GstVideoEncoder *encoder); - -GstBuffer * gst_video_encoder_allocate_output_buffer (GstVideoEncoder * encoder, - gsize size); - -GstFlowReturn gst_video_encoder_allocate_output_frame (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame, - gsize size); - -GstFlowReturn gst_video_encoder_finish_frame (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame); - -GstCaps * gst_video_encoder_proxy_getcaps (GstVideoEncoder * enc, - GstCaps * caps, - GstCaps * filter); -void gst_video_encoder_set_discont (GstVideoEncoder *encoder); -gboolean gst_video_encoder_get_discont (GstVideoEncoder *encoder); - -void gst_video_encoder_set_latency (GstVideoEncoder *encoder, - GstClockTime min_latency, - GstClockTime max_latency); -void gst_video_encoder_get_latency (GstVideoEncoder *encoder, - GstClockTime *min_latency, - GstClockTime *max_latency); - -void gst_video_encoder_set_headers (GstVideoEncoder *encoder, - GList *headers); - -void gst_video_encoder_merge_tags (GstVideoEncoder *encoder, - const GstTagList *tags, - GstTagMergeMode mode); - -void gst_video_encoder_get_allocator (GstVideoEncoder *encoder, - GstAllocator **allocator, - GstAllocationParams *params); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideofilter.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideofilter.h deleted file mode 100644 index 8e21ba5d..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideofilter.h +++ /dev/null @@ -1,86 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_VIDEO_FILTER_H__ -#define __GST_VIDEO_FILTER_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstVideoFilter GstVideoFilter; -typedef struct _GstVideoFilterClass GstVideoFilterClass; - -#define GST_TYPE_VIDEO_FILTER \ - (gst_video_filter_get_type()) -#define GST_VIDEO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_FILTER,GstVideoFilter)) -#define GST_VIDEO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_FILTER,GstVideoFilterClass)) -#define GST_VIDEO_FILTER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_VIDEO_FILTER, GstVideoFilterClass)) -#define GST_IS_VIDEO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_FILTER)) -#define GST_IS_VIDEO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_FILTER)) -#define GST_VIDEO_FILTER_CAST(obj) ((GstVideoFilter *)(obj)) - -struct _GstVideoFilter { - GstBaseTransform element; - - gboolean negotiated; - GstVideoInfo in_info; - GstVideoInfo out_info; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstVideoFilterClass: - * @parent_class: the parent class structure - * @set_info: function to be called with the negotiated caps and video infos - * @transform_frame: transform a video frame - * @transform_frame_ip: transform a video frame in place - * - * The video filter class structure. - */ -struct _GstVideoFilterClass { - GstBaseTransformClass parent_class; - - gboolean (*set_info) (GstVideoFilter *filter, - GstCaps *incaps, GstVideoInfo *in_info, - GstCaps *outcaps, GstVideoInfo *out_info); - - /* transform */ - GstFlowReturn (*transform_frame) (GstVideoFilter *filter, - GstVideoFrame *inframe, GstVideoFrame *outframe); - GstFlowReturn (*transform_frame_ip) (GstVideoFilter *trans, GstVideoFrame *frame); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_video_filter_get_type (void); - -G_END_DECLS - -#endif /* __GST_VIDEO_FILTER_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideometa.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideometa.h deleted file mode 100644 index ffba35eb..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideometa.h +++ /dev/null @@ -1,143 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_META_H__ -#define __GST_VIDEO_META_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_VIDEO_META_API_TYPE (gst_video_meta_api_get_type()) -#define GST_VIDEO_META_INFO (gst_video_meta_get_info()) -typedef struct _GstVideoMeta GstVideoMeta; - -#define GST_VIDEO_CROP_META_API_TYPE (gst_video_crop_meta_api_get_type()) -#define GST_VIDEO_CROP_META_INFO (gst_video_crop_meta_get_info()) -typedef struct _GstVideoCropMeta GstVideoCropMeta; - -/** - * GstVideoMeta: - * @meta: parent #GstMeta - * @buffer: the buffer this metadata belongs to - * @flags: additional video flags - * @format: the video format - * @id: identifier of the frame - * @width: the video width - * @height: the video height - * @n_planes: the number of planes in the image - * @offset: array of offsets for the planes. This field might not always be - * valid, it is used by the default implementation of @map. - * @stride: array of strides for the planes. This field might not always be - * valid, it is used by the default implementation of @map. - * @map: map the memory of a plane - * @unmap: unmap the memory of a plane - * - * Extra buffer metadata describing image properties - */ -struct _GstVideoMeta { - GstMeta meta; - - GstBuffer *buffer; - - GstVideoFrameFlags flags; - GstVideoFormat format; - gint id; - guint width; - guint height; - - guint n_planes; - gsize offset[GST_VIDEO_MAX_PLANES]; - gint stride[GST_VIDEO_MAX_PLANES]; - - gboolean (*map) (GstVideoMeta *meta, guint plane, GstMapInfo *info, - gpointer *data, gint * stride, GstMapFlags flags); - gboolean (*unmap) (GstVideoMeta *meta, guint plane, GstMapInfo *info); -}; - -GType gst_video_meta_api_get_type (void); -const GstMetaInfo * gst_video_meta_get_info (void); - -#define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE)) -GstVideoMeta * gst_buffer_get_video_meta_id (GstBuffer *buffer, gint id); - -GstVideoMeta * gst_buffer_add_video_meta (GstBuffer *buffer, GstVideoFrameFlags flags, - GstVideoFormat format, guint width, guint height); -GstVideoMeta * gst_buffer_add_video_meta_full (GstBuffer *buffer, GstVideoFrameFlags flags, - GstVideoFormat format, guint width, guint height, - guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES], - gint stride[GST_VIDEO_MAX_PLANES]); - -gboolean gst_video_meta_map (GstVideoMeta *meta, guint plane, GstMapInfo *info, - gpointer *data, gint *stride, GstMapFlags flags); -gboolean gst_video_meta_unmap (GstVideoMeta *meta, guint plane, GstMapInfo *info); - -/** - * GstVideoCropMeta: - * @meta: parent #GstMeta - * @x: the horizontal offset - * @y: the vertical offset - * @width: the cropped width - * @height: the cropped height - * - * Extra buffer metadata describing image cropping. - */ -struct _GstVideoCropMeta { - GstMeta meta; - - guint x; - guint y; - guint width; - guint height; -}; - -GType gst_video_crop_meta_api_get_type (void); -const GstMetaInfo * gst_video_crop_meta_get_info (void); - -#define gst_buffer_get_video_crop_meta(b) ((GstVideoCropMeta*)gst_buffer_get_meta((b),GST_VIDEO_CROP_META_API_TYPE)) -#define gst_buffer_add_video_crop_meta(b) ((GstVideoCropMeta*)gst_buffer_add_meta((b),GST_VIDEO_CROP_META_INFO, NULL)) - -/* video metadata transforms */ - -GQuark gst_video_meta_transform_scale_get_quark (void); -/** - * gst_video_meta_transform_scale: - * - * GQuark for the video "gst-video-scale" transform. - */ -#define GST_VIDEO_META_TRANSFORM_IS_SCALE(type) ((type) == gst_video_meta_transform_scale_get_quark()) - -/** - * GstVideoMetaTransform: - * @old_info: the old #GstVideoInfo - * @new_info: the new #GstVideoInfo - * - * Extra data passed to a video transform #GstMetaTransformFunction such as: - * "gst-video-scale". - */ -typedef struct { - GstVideoInfo *in_info; - GstVideoInfo *out_info; -} GstVideoMetaTransform; - -G_END_DECLS - -#endif /* __GST_VIDEO_META_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideopool.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideopool.h deleted file mode 100644 index c1b3e1e9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideopool.h +++ /dev/null @@ -1,80 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_POOL_H__ -#define __GST_VIDEO_POOL_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GST_BUFFER_POOL_OPTION_VIDEO_META: - * - * An option that can be activated on bufferpool to request video metadata - * on buffers from the pool. - */ -#define GST_BUFFER_POOL_OPTION_VIDEO_META "GstBufferPoolOptionVideoMeta" - -/** - * GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT: - * - * A bufferpool option to enable extra padding. When a bufferpool supports this - * option, gst_buffer_pool_config_set_video_alignment() can be called. - * - * When this option is enabled on the bufferpool, - * #GST_BUFFER_POOL_OPTION_VIDEO_META should also be enabled. - */ -#define GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT "GstBufferPoolOptionVideoAlignment" - -/* setting a bufferpool config */ -void gst_buffer_pool_config_set_video_alignment (GstStructure *config, GstVideoAlignment *align); -gboolean gst_buffer_pool_config_get_video_alignment (GstStructure *config, GstVideoAlignment *align); - -/* video bufferpool */ -typedef struct _GstVideoBufferPool GstVideoBufferPool; -typedef struct _GstVideoBufferPoolClass GstVideoBufferPoolClass; -typedef struct _GstVideoBufferPoolPrivate GstVideoBufferPoolPrivate; - -#define GST_TYPE_VIDEO_BUFFER_POOL (gst_video_buffer_pool_get_type()) -#define GST_IS_VIDEO_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_BUFFER_POOL)) -#define GST_VIDEO_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_BUFFER_POOL, GstVideoBufferPool)) -#define GST_VIDEO_BUFFER_POOL_CAST(obj) ((GstVideoBufferPool*)(obj)) - -struct _GstVideoBufferPool -{ - GstBufferPool bufferpool; - - GstVideoBufferPoolPrivate *priv; -}; - -struct _GstVideoBufferPoolClass -{ - GstBufferPoolClass parent_class; -}; - -GType gst_video_buffer_pool_get_type (void); - -GstBufferPool * gst_video_buffer_pool_new (void); - -G_END_DECLS - -#endif /* __GST_VIDEO_POOL_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideosink.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideosink.h deleted file mode 100644 index ac8dc956..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideosink.h +++ /dev/null @@ -1,130 +0,0 @@ -/* GStreamer video sink base class - * Copyright (C) <2003> Julien Moutte - * Copyright (C) <2009> Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* FIXME 0.11: turn this into a proper base class */ - -#ifndef __GST_VIDEO_SINK_H__ -#define __GST_VIDEO_SINK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_SINK (gst_video_sink_get_type()) -#define GST_VIDEO_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_SINK, GstVideoSink)) -#define GST_VIDEO_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VIDEO_SINK, GstVideoSinkClass)) -#define GST_IS_VIDEO_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_SINK)) -#define GST_IS_VIDEO_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VIDEO_SINK)) -#define GST_VIDEO_SINK_GET_CLASS(klass) \ - (G_TYPE_INSTANCE_GET_CLASS ((klass), GST_TYPE_VIDEO_SINK, GstVideoSinkClass)) - -/** - * GST_VIDEO_SINK_CAST: - * @obj: a #GstVideoSink or derived object - * - * Cast @obj to a #GstVideoSink without runtime type check. - */ -#define GST_VIDEO_SINK_CAST(obj) ((GstVideoSink *) (obj)) - -/** - * GST_VIDEO_SINK_PAD: - * @obj: a #GstVideoSink - * - * Get the sink #GstPad of @obj. - */ -#define GST_VIDEO_SINK_PAD(obj) GST_BASE_SINK_PAD(obj) - -#define GST_VIDEO_SINK_WIDTH(obj) (GST_VIDEO_SINK_CAST (obj)->width) -#define GST_VIDEO_SINK_HEIGHT(obj) (GST_VIDEO_SINK_CAST (obj)->height) - -typedef struct _GstVideoSink GstVideoSink; -typedef struct _GstVideoSinkClass GstVideoSinkClass; -typedef struct _GstVideoRectangle GstVideoRectangle; -typedef struct _GstVideoSinkPrivate GstVideoSinkPrivate; - -/** - * GstVideoRectangle: - * @x: X coordinate of rectangle's top-left point - * @y: Y coordinate of rectangle's top-left point - * @w: width of the rectangle - * @h: height of the rectangle - * - * Helper structure representing a rectangular area. - */ -struct _GstVideoRectangle { - gint x; - gint y; - gint w; - gint h; -}; - -/** - * GstVideoSink: - * @height: video height (derived class needs to set this) - * @width: video width (derived class needs to set this) - * - * The video sink instance structure. Derived video sinks should set the - * @height and @width members. - */ -struct _GstVideoSink { - GstBaseSink element; /* FIXME 0.11: this should not be called 'element' */ - - /*< public >*/ - gint width, height; - - /*< private >*/ - GstVideoSinkPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstVideoSinkClass: - * @parent_class: the parent class structure - * @show_frame: render a video frame. Maps to #GstBaseSinkClass.render() and - * #GstBaseSinkClass.preroll() vfuncs. Rendering during preroll will be - * suppressed if the #GstVideoSink:show-preroll-frame property is set to - * %FALSE. - * - * The video sink class structure. Derived classes should override the - * @show_frame virtual function. - */ -struct _GstVideoSinkClass { - GstBaseSinkClass parent_class; - - GstFlowReturn (*show_frame) (GstVideoSink *video_sink, GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_video_sink_get_type (void); - -void gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst, - GstVideoRectangle *result, gboolean scaling); - -G_END_DECLS - -#endif /* __GST_VIDEO_SINK_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoutils.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoutils.h deleted file mode 100644 index 63833e23..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/gstvideoutils.h +++ /dev/null @@ -1,278 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * Copyright (C) 2012 Collabora Ltd. - * Author : Edward Hervey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_VIDEO_UTILS_H_ -#define _GST_VIDEO_UTILS_H_ - -#include -#include - -G_BEGIN_DECLS -#define GST_TYPE_VIDEO_CODEC_STATE \ - (gst_video_codec_state_get_type()) - -#define GST_TYPE_VIDEO_CODEC_FRAME \ - (gst_video_codec_frame_get_type()) - -typedef struct _GstVideoCodecState GstVideoCodecState; -typedef struct _GstVideoCodecFrame GstVideoCodecFrame; - -/** - * GstVideoCodecState: - * @info: The #GstVideoInfo describing the stream - * @caps: The #GstCaps - * @codec_data: (optional) a #GstBuffer corresponding to the - * 'codec_data' field of a stream. - * - * Structure representing the state of an incoming or outgoing video - * stream for encoders and decoders. - * - * Decoders and encoders will receive such a state through their - * respective @set_format vmethods. - * - * Decoders and encoders can set the downstream state, by using the - * @gst_video_decoder_set_output_state() or - * @gst_video_encoder_set_output_state() methods. - */ -struct _GstVideoCodecState -{ - /*< private >*/ - gint ref_count; - - /*< public >*/ - GstVideoInfo info; - - GstCaps *caps; - - GstBuffer *codec_data; - - /*< private >*/ - void *padding[GST_PADDING_LARGE]; -}; - -/** - * GstVideoCodecFrameFlags: - * @GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY: is the frame only meant to be decoded - * @GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT: is the frame a synchronization point (keyframe) - * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME: should the output frame be made a keyframe - * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS: should the encoder output stream headers - * - * Flags for #GstVideoCodecFrame - */ -typedef enum -{ - GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY = (1<<0), - GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT = (1<<1), - GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME = (1<<2), - GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS = (1<<3) -} GstVideoCodecFrameFlags; - -/** - * GST_VIDEO_CODEC_FRAME_FLAGS: - * @frame: a #GstVideoCodecFrame - * - * The entire set of flags for the @frame - */ -#define GST_VIDEO_CODEC_FRAME_FLAGS(frame) ((frame)->flags) - -/** - * GST_VIDEO_CODEC_FRAME_FLAG_IS_SET: - * @frame: a #GstVideoCodecFrame - * @flag: a flag to check for - * - * Checks whether the given @flag is set - */ -#define GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame,flag) !!(GST_VIDEO_CODEC_FRAME_FLAGS(frame) & (flag)) - -/** - * GST_VIDEO_CODEC_FRAME_FLAG_SET: - * @frame: a #GstVideoCodecFrame - * @flag: Flag to set, can be any number of bits in guint32. - * - * This macro sets the given bits - */ -#define GST_VIDEO_CODEC_FRAME_FLAG_SET(frame,flag) (GST_VIDEO_CODEC_FRAME_FLAGS(frame) |= (flag)) - -/** - * GST_VIDEO_CODEC_FRAME_FLAG_UNSET: - * @frame: a #GstVideoCodecFrame - * @flag: Flag to unset - * - * This macro usets the given bits. - */ -#define GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame,flag) (GST_VIDEO_CODEC_FRAME_FLAGS(frame) &= ~(flag)) - -/** - * GST_VIDEO_CODEC_FRAME_IS_DECODE_ONLY: - * @frame: a #GstVideoCodecFrame - * - * Tests if the buffer should only be decoded but not sent downstream. - */ -#define GST_VIDEO_CODEC_FRAME_IS_DECODE_ONLY(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY)) - -/** - * GST_VIDEO_CODEC_FRAME_SET_DECODE_ONLY: - * @frame: a #GstVideoCodecFrame - * - * Sets the buffer to not be sent downstream. - * - * Decoder implementation can use this if they have frames that - * are not meant to be displayed. - * - * Encoder implementation can safely ignore this field. - */ -#define GST_VIDEO_CODEC_FRAME_SET_DECODE_ONLY(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY)) - -/** - * GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT: - * @frame: a #GstVideoCodecFrame - * - * Tests if the frame is a synchronization point (like a keyframe). - * - * Decoder implementations can use this to detect keyframes. - */ -#define GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT)) - -/** - * GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT: - * @frame: a #GstVideoCodecFrame - * - * Sets the frame to be a synchronization point (like a keyframe). - * - * Encoder implementations should set this accordingly. - * - * Decoder implementing parsing features should set this when they - * detect such a synchronization point. - */ -#define GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT)) -#define GST_VIDEO_CODEC_FRAME_UNSET_SYNC_POINT(frame) (GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame, GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT)) - - -/** - * GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME: - * @frame: a #GstVideoCodecFrame - * - * Tests if the frame must be encoded as a keyframe. Applies only to - * frames provided to encoders. Decoders can safely ignore this field. - */ -#define GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME)) -#define GST_VIDEO_CODEC_FRAME_SET_FORCE_KEYFRAME(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME)) -#define GST_VIDEO_CODEC_FRAME_UNSET_FORCE_KEYFRAME(frame) (GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME)) - -/** - * GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME_HEADERS: - * @frame: a #GstVideoCodecFrame - * - * Tests if encoder should output stream headers before outputting the - * resulting encoded buffer for the given frame. - * - * Applies only to frames provided to encoders. Decoders can safely - * ignore this field. - */ -#define GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME_HEADERS(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS)) -#define GST_VIDEO_CODEC_FRAME_SET_FORCE_KEYFRAME_HEADERS(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS)) -#define GST_VIDEO_CODEC_FRAME_UNSET_FORCE_KEYFRAME_HEADERS(frame) (GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS)) - -/** - * GstVideoCodecFrame: - * @pts: Presentation timestamp - * @dts: Decoding timestamp - * @duration: Duration of the frame - * @system_frame_number: Unique identifier for the frame. Use this if you need - * to get hold of the frame later (like when data is being decoded). - * Typical usage in decoders is to set this on the opaque value provided - * to the library and get back the frame using gst_video_decoder_get_frame() - * @distance_from_sync: Distance in frames from the last synchronization point. - * @input_buffer: the input #GstBuffer that created this frame. The buffer is owned - * by the frame and references to the frame instead of the buffer should - * @output_buffer: the output #GstBuffer. Implementations should set this either - * directly, or by using the @gst_video_decoder_alloc_output_frame() or - * @gst_video_decoder_alloc_output_buffer() methods. The buffer is owned - * by the frame and references to the frame instead of the buffer should - * be kept. - * @deadline: Running time when the frame will be used. - * @events: Events that will be pushed downstream before this frame is pushed. - * - * A #GstVideoCodecFrame represents a video frame both in raw and - * encoded form. - */ -struct _GstVideoCodecFrame -{ - /*< private >*/ - gint ref_count; - - guint32 flags; - - /*< public >*/ - guint32 system_frame_number; /* ED */ - guint32 decode_frame_number; /* ED */ - guint32 presentation_frame_number; /* ED */ - - GstClockTime dts; /* ED */ - GstClockTime pts; /* ED */ - GstClockTime duration; /* ED */ - - int distance_from_sync; /* ED */ - - GstBuffer *input_buffer; /* ED */ - GstBuffer *output_buffer; /* ED */ - - GstClockTime deadline; /* D */ - - /*< private >*/ - - /* Events that should be pushed downstream *before* - * the next output_buffer */ - GList *events; /* ED */ - - gpointer user_data; - GDestroyNotify user_data_destroy_notify; - - union { - struct { - GstClockTime ts; - GstClockTime ts2; - } ABI; - void *padding[GST_PADDING_LARGE]; - } abidata; -}; - -/* GstVideoCodecState */ -GType gst_video_codec_state_get_type (void); - -GstVideoCodecState *gst_video_codec_state_ref (GstVideoCodecState * state); - -void gst_video_codec_state_unref (GstVideoCodecState * state); - - -/* GstVideoCodecFrame */ -GType gst_video_codec_frame_get_type (void); - -GstVideoCodecFrame *gst_video_codec_frame_ref (GstVideoCodecFrame * frame); -void gst_video_codec_frame_unref (GstVideoCodecFrame * frame); -void gst_video_codec_frame_set_user_data (GstVideoCodecFrame *frame, - gpointer user_data, - GDestroyNotify notify); -gpointer gst_video_codec_frame_get_user_data (GstVideoCodecFrame *frame); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/navigation.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/navigation.h deleted file mode 100644 index 2cec16d9..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/navigation.h +++ /dev/null @@ -1,265 +0,0 @@ -/* GStreamer Navigation - * Copyright (C) 2003 Ronald Bultje - * Copyright (C) 2003 David A. Schleef - * - * navigation.h: navigation interface design - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_NAVIGATION_H__ -#define __GST_NAVIGATION_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_NAVIGATION \ - (gst_navigation_get_type ()) -#define GST_NAVIGATION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NAVIGATION, GstNavigation)) -#define GST_IS_NAVIGATION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NAVIGATION)) -#define GST_NAVIGATION_GET_INTERFACE(obj) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_NAVIGATION, GstNavigationInterface)) - -typedef struct _GstNavigation GstNavigation; -typedef struct _GstNavigationInterface GstNavigationInterface; - -/** - * GstNavigationInterface: - * @iface: the parent interface - * @send_event: sending a navigation event - * - * Navigation interface. - */ -struct _GstNavigationInterface { - GTypeInterface iface; - - /* virtual functions */ - void (*send_event) (GstNavigation *navigation, GstStructure *structure); -}; - -GType gst_navigation_get_type (void); - -/* Navigation commands */ - -/** - * GstNavigationCommand: - * @GST_NAVIGATION_COMMAND_INVALID: An invalid command entry - * @GST_NAVIGATION_COMMAND_MENU1: Execute navigation menu command 1. For DVD, - * this enters the DVD root menu, or exits back to the title from the menu. - * @GST_NAVIGATION_COMMAND_MENU2: Execute navigation menu command 2. For DVD, - * this jumps to the DVD title menu. - * @GST_NAVIGATION_COMMAND_MENU3: Execute navigation menu command 3. For DVD, - * this jumps into the DVD root menu. - * @GST_NAVIGATION_COMMAND_MENU4: Execute navigation menu command 4. For DVD, - * this jumps to the Subpicture menu. - * @GST_NAVIGATION_COMMAND_MENU5: Execute navigation menu command 5. For DVD, - * the jumps to the audio menu. - * @GST_NAVIGATION_COMMAND_MENU6: Execute navigation menu command 6. For DVD, - * this jumps to the angles menu. - * @GST_NAVIGATION_COMMAND_MENU7: Execute navigation menu command 7. For DVD, - * this jumps to the chapter menu. - * @GST_NAVIGATION_COMMAND_LEFT: Select the next button to the left in a menu, - * if such a button exists. - * @GST_NAVIGATION_COMMAND_RIGHT: Select the next button to the right in a menu, - * if such a button exists. - * @GST_NAVIGATION_COMMAND_UP: Select the button above the current one in a - * menu, if such a button exists. - * @GST_NAVIGATION_COMMAND_DOWN: Select the button below the current one in a - * menu, if such a button exists. - * @GST_NAVIGATION_COMMAND_ACTIVATE: Activate (click) the currently selected - * button in a menu, if such a button exists. - * @GST_NAVIGATION_COMMAND_PREV_ANGLE: Switch to the previous angle in a - * multiangle feature. - * @GST_NAVIGATION_COMMAND_NEXT_ANGLE: Switch to the next angle in a multiangle - * feature. - * - * A set of commands that may be issued to an element providing the - * #GstNavigation interface. The available commands can be queried via - * the gst_navigation_query_new_commands() query. - * - * For convenience in handling DVD navigation, the MENU commands are aliased as: - * GST_NAVIGATION_COMMAND_DVD_MENU = @GST_NAVIGATION_COMMAND_MENU1 - * GST_NAVIGATION_COMMAND_DVD_TITLE_MENU = @GST_NAVIGATION_COMMAND_MENU2 - * GST_NAVIGATION_COMMAND_DVD_ROOT_MENU = @GST_NAVIGATION_COMMAND_MENU3 - * GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = @GST_NAVIGATION_COMMAND_MENU4 - * GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU = @GST_NAVIGATION_COMMAND_MENU5 - * GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU = @GST_NAVIGATION_COMMAND_MENU6 - * GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU = @GST_NAVIGATION_COMMAND_MENU7 - */ -typedef enum { - GST_NAVIGATION_COMMAND_INVALID = 0, - - GST_NAVIGATION_COMMAND_MENU1 = 1, - GST_NAVIGATION_COMMAND_MENU2 = 2, - GST_NAVIGATION_COMMAND_MENU3 = 3, - GST_NAVIGATION_COMMAND_MENU4 = 4, - GST_NAVIGATION_COMMAND_MENU5 = 5, - GST_NAVIGATION_COMMAND_MENU6 = 6, - GST_NAVIGATION_COMMAND_MENU7 = 7, - - GST_NAVIGATION_COMMAND_LEFT = 20, - GST_NAVIGATION_COMMAND_RIGHT = 21, - GST_NAVIGATION_COMMAND_UP = 22, - GST_NAVIGATION_COMMAND_DOWN = 23, - GST_NAVIGATION_COMMAND_ACTIVATE = 24, - - GST_NAVIGATION_COMMAND_PREV_ANGLE = 30, - GST_NAVIGATION_COMMAND_NEXT_ANGLE = 31 -} GstNavigationCommand; - -/* Some aliases for the menu command types */ -#define GST_NAVIGATION_COMMAND_DVD_MENU GST_NAVIGATION_COMMAND_MENU1 -#define GST_NAVIGATION_COMMAND_DVD_TITLE_MENU GST_NAVIGATION_COMMAND_MENU2 -#define GST_NAVIGATION_COMMAND_DVD_ROOT_MENU GST_NAVIGATION_COMMAND_MENU3 -#define GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU GST_NAVIGATION_COMMAND_MENU4 -#define GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU GST_NAVIGATION_COMMAND_MENU5 -#define GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU GST_NAVIGATION_COMMAND_MENU6 -#define GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU GST_NAVIGATION_COMMAND_MENU7 - -/* Queries */ -/** - * GstNavigationQueryType: - * @GST_NAVIGATION_QUERY_INVALID: invalid query - * @GST_NAVIGATION_QUERY_COMMANDS: command query - * @GST_NAVIGATION_QUERY_ANGLES: viewing angle query - * - * Tyoes of navigation interface queries. - */ -typedef enum -{ - GST_NAVIGATION_QUERY_INVALID = 0, - GST_NAVIGATION_QUERY_COMMANDS = 1, - GST_NAVIGATION_QUERY_ANGLES = 2 -} GstNavigationQueryType; - -GstNavigationQueryType gst_navigation_query_get_type (GstQuery *query); - -GstQuery * gst_navigation_query_new_commands (void); -void gst_navigation_query_set_commands (GstQuery *query, gint n_cmds, ...); -void gst_navigation_query_set_commandsv (GstQuery *query, gint n_cmds, - GstNavigationCommand *cmds); -gboolean gst_navigation_query_parse_commands_length (GstQuery *query, - guint *n_cmds); -gboolean gst_navigation_query_parse_commands_nth (GstQuery *query, guint nth, - GstNavigationCommand *cmd); - -GstQuery * gst_navigation_query_new_angles (void); -void gst_navigation_query_set_angles (GstQuery *query, guint cur_angle, - guint n_angles); -gboolean gst_navigation_query_parse_angles (GstQuery *query, guint *cur_angle, - guint *n_angles); - -/* Element messages */ -/** - * GstNavigationMessageType: - * @GST_NAVIGATION_MESSAGE_INVALID: Returned from - * gst_navigation_message_get_type() when the passed message is not a - * navigation message. - * @GST_NAVIGATION_MESSAGE_MOUSE_OVER: Sent when the mouse moves over or leaves a - * clickable region of the output, such as a DVD menu button. - * @GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED: Sent when the set of available commands - * changes and should re-queried by interested applications. - * @GST_NAVIGATION_MESSAGE_ANGLES_CHANGED: Sent when display angles in a multi-angle - * feature (such as a multiangle DVD) change - either angles have appeared or - * disappeared. - * - * A set of notifications that may be received on the bus when navigation - * related status changes. - */ -typedef enum { - GST_NAVIGATION_MESSAGE_INVALID, - GST_NAVIGATION_MESSAGE_MOUSE_OVER, - GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED, - GST_NAVIGATION_MESSAGE_ANGLES_CHANGED -} GstNavigationMessageType; - -GstNavigationMessageType gst_navigation_message_get_type (GstMessage *message); - -GstMessage * gst_navigation_message_new_mouse_over (GstObject *src, - gboolean active); -gboolean gst_navigation_message_parse_mouse_over (GstMessage *message, - gboolean *active); - -GstMessage * gst_navigation_message_new_commands_changed (GstObject *src); - -GstMessage * gst_navigation_message_new_angles_changed (GstObject *src, - guint cur_angle, - guint n_angles); -gboolean gst_navigation_message_parse_angles_changed (GstMessage *message, - guint *cur_angle, - guint *n_angles); - -/* event parsing functions */ -/** - * GstNavigationEventType: - * @GST_NAVIGATION_EVENT_INVALID: Returned from - * gst_navigation_event_get_type() when the passed event is not a navigation event. - * @GST_NAVIGATION_EVENT_KEY_PRESS: A key press event. Use - * gst_navigation_event_parse_key_event() to extract the details from the event. - * @GST_NAVIGATION_EVENT_KEY_RELEASE: A key release event. Use - * gst_navigation_event_parse_key_event() to extract the details from the event. - * @GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: A mouse button press event. Use - * gst_navigation_event_parse_mouse_button_event() to extract the details from the - * event. - * @GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE: A mouse button release event. Use - * gst_navigation_event_parse_mouse_button_event() to extract the details from the - * event. - * @GST_NAVIGATION_EVENT_MOUSE_MOVE: A mouse movement event. Use - * gst_navigation_event_parse_mouse_move_event() to extract the details from the - * event. - * @GST_NAVIGATION_EVENT_COMMAND: A navigation command event. Use - * gst_navigation_event_parse_command() to extract the details from the event. - * - * Enum values for the various events that an element implementing the - * GstNavigation interface might send up the pipeline. - */ -typedef enum { - GST_NAVIGATION_EVENT_INVALID = 0, - GST_NAVIGATION_EVENT_KEY_PRESS = 1, - GST_NAVIGATION_EVENT_KEY_RELEASE = 2, - GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS = 3, - GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE = 4, - GST_NAVIGATION_EVENT_MOUSE_MOVE = 5, - GST_NAVIGATION_EVENT_COMMAND = 6 -} GstNavigationEventType; - -GstNavigationEventType gst_navigation_event_get_type (GstEvent *event); - -gboolean gst_navigation_event_parse_key_event (GstEvent *event, - const gchar **key); -gboolean gst_navigation_event_parse_mouse_button_event (GstEvent *event, - gint *button, gdouble *x, gdouble *y); -gboolean gst_navigation_event_parse_mouse_move_event (GstEvent *event, - gdouble *x, gdouble *y); -gboolean gst_navigation_event_parse_command (GstEvent *event, - GstNavigationCommand *command); - -/* interface virtual function wrappers */ -void gst_navigation_send_event (GstNavigation *navigation, - GstStructure *structure); -void gst_navigation_send_key_event (GstNavigation *navigation, - const char *event, const char *key); -void gst_navigation_send_mouse_event (GstNavigation *navigation, - const char *event, int button, double x, double y); -void gst_navigation_send_command (GstNavigation *navigation, - GstNavigationCommand command); - -G_END_DECLS - -#endif /* __GST_NAVIGATION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-blend.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-blend.h deleted file mode 100644 index 906752ba..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-blend.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Gstreamer video blending utility functions - * - * Copyright (C) <2011> Intel Corporation - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_VIDEO_BLEND__ -#define __GST_VIDEO_BLEND__ - -#include -#include - -void gst_video_blend_scale_linear_RGBA (GstVideoInfo * src, GstBuffer * src_buffer, - gint dest_height, gint dest_width, - GstVideoInfo * dest, GstBuffer ** dest_buffer); - -gboolean gst_video_blend (GstVideoFrame * dest, - GstVideoFrame * src, - gint x, gint y, - gfloat global_alpha); - -#endif diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-color.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-color.h deleted file mode 100644 index dcbb66f4..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-color.h +++ /dev/null @@ -1,161 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_COLOR_H__ -#define __GST_VIDEO_COLOR_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstVideoColorRange: - * @GST_VIDEO_COLOR_RANGE_UNKNOWN: unknown range - * @GST_VIDEO_COLOR_RANGE_0_255: [0..255] for 8 bit components - * @GST_VIDEO_COLOR_RANGE_16_235: [16..235] for 8 bit components. Chroma has - * [16..240] range. - * - * Possible color range values. These constants are defined for 8 bit color - * values and can be scaled for other bit depths. - */ -typedef enum { - GST_VIDEO_COLOR_RANGE_UNKNOWN = 0, - GST_VIDEO_COLOR_RANGE_0_255, - GST_VIDEO_COLOR_RANGE_16_235 -} GstVideoColorRange; - -/** - * GstVideoColorMatrix: - * @GST_VIDEO_COLOR_MATRIX_UNKNOWN: unknown matrix - * @GST_VIDEO_COLOR_MATRIX_RGB: identity matrix - * @GST_VIDEO_COLOR_MATRIX_FCC: FCC color matrix - * @GST_VIDEO_COLOR_MATRIX_BT709: ITU-R BT.709 color matrix - * @GST_VIDEO_COLOR_MATRIX_BT601: ITU-R BT.601 color matrix - * @GST_VIDEO_COLOR_MATRIX_SMPTE240M: SMPTE 240M color matrix - * - * The color matrix is used to convert between Y'PbPr and - * non-linear RGB (R'G'B') - */ -typedef enum { - GST_VIDEO_COLOR_MATRIX_UNKNOWN = 0, - GST_VIDEO_COLOR_MATRIX_RGB, - GST_VIDEO_COLOR_MATRIX_FCC, - GST_VIDEO_COLOR_MATRIX_BT709, - GST_VIDEO_COLOR_MATRIX_BT601, - GST_VIDEO_COLOR_MATRIX_SMPTE240M -} GstVideoColorMatrix; - -/** - * GstVideoTransferFunction: - * @GST_VIDEO_TRANSFER_UNKNOWN: unknown transfer function - * @GST_VIDEO_TRANSFER_GAMMA10: linear RGB, gamma 1.0 curve - * @GST_VIDEO_TRANSFER_GAMMA18: Gamma 1.8 curve - * @GST_VIDEO_TRANSFER_GAMMA20: Gamma 2.0 curve - * @GST_VIDEO_TRANSFER_GAMMA22: Gamma 2.2 curve - * @GST_VIDEO_TRANSFER_BT709: Gamma 2.2 curve with a linear segment in the lower - * range - * @GST_VIDEO_TRANSFER_SMPTE240M: Gamma 2.2 curve with a linear segment in the - * lower range - * @GST_VIDEO_TRANSFER_SRGB: Gamma 2.4 curve with a linear segment in the lower - * range - * @GST_VIDEO_TRANSFER_GAMMA28: Gamma 2.8 curve - * @GST_VIDEO_TRANSFER_LOG100: Logarithmic transfer characteristic - * 100:1 range - * @GST_VIDEO_TRANSFER_LOG316: Logarithmic transfer characteristic - * 316.22777:1 range - * - * The video transfer function defines the formula for converting between - * non-linear RGB (R'G'B') and linear RGB - */ -typedef enum { - GST_VIDEO_TRANSFER_UNKNOWN = 0, - GST_VIDEO_TRANSFER_GAMMA10, - GST_VIDEO_TRANSFER_GAMMA18, - GST_VIDEO_TRANSFER_GAMMA20, - GST_VIDEO_TRANSFER_GAMMA22, - GST_VIDEO_TRANSFER_BT709, - GST_VIDEO_TRANSFER_SMPTE240M, - GST_VIDEO_TRANSFER_SRGB, - GST_VIDEO_TRANSFER_GAMMA28, - GST_VIDEO_TRANSFER_LOG100, - GST_VIDEO_TRANSFER_LOG316 -} GstVideoTransferFunction; - -/** - * GstVideoColorPrimaries: - * @GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: unknown color primaries - * @GST_VIDEO_COLOR_PRIMARIES_BT709: BT709 primaries - * @GST_VIDEO_COLOR_PRIMARIES_BT470M: BT470M primaries - * @GST_VIDEO_COLOR_PRIMARIES_BT470BG: BT470BG primaries - * @GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: SMPTE170M primaries - * @GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: SMPTE240M primaries - * @GST_VIDEO_COLOR_PRIMARIES_FILM: Generic film - * - * The color primaries define the how to transform linear RGB values to and from - * the CIE XYZ colorspace. - */ -typedef enum { - GST_VIDEO_COLOR_PRIMARIES_UNKNOWN = 0, - GST_VIDEO_COLOR_PRIMARIES_BT709, - GST_VIDEO_COLOR_PRIMARIES_BT470M, - GST_VIDEO_COLOR_PRIMARIES_BT470BG, - GST_VIDEO_COLOR_PRIMARIES_SMPTE170M, - GST_VIDEO_COLOR_PRIMARIES_SMPTE240M, - GST_VIDEO_COLOR_PRIMARIES_FILM -} GstVideoColorPrimaries; - -/** - * GstVideoColorimetry: - * @range: the color range. This is the valid range for the samples. - * It is used to convert the samples to Y'PbPr values. - * @matrix: the color matrix. Used to convert between Y'PbPr and - * non-linear RGB (R'G'B') - * @transfer: the transfer function. used to convert between R'G'B' and RGB - * @primaries: color primaries. used to convert between R'G'B' and CIE XYZ - * - * Structure describing the color info. - */ -typedef struct { - GstVideoColorRange range; - GstVideoColorMatrix matrix; - GstVideoTransferFunction transfer; - GstVideoColorPrimaries primaries; -} GstVideoColorimetry; - -/* predefined colorimetry */ -#define GST_VIDEO_COLORIMETRY_BT601 "bt601" -#define GST_VIDEO_COLORIMETRY_BT709 "bt709" -#define GST_VIDEO_COLORIMETRY_SMPTE240M "smpte240m" - -gboolean gst_video_colorimetry_matches (GstVideoColorimetry *cinfo, const gchar *color); -gboolean gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo, const gchar *color); -gchar * gst_video_colorimetry_to_string (GstVideoColorimetry *cinfo); - -/* compute offset and scale */ -void gst_video_color_range_offsets (GstVideoColorRange range, - const GstVideoFormatInfo *info, - gint offset[GST_VIDEO_MAX_COMPONENTS], - gint scale[GST_VIDEO_MAX_COMPONENTS]); - - -G_END_DECLS - -#endif /* __GST_VIDEO_COLOR_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-enumtypes.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-enumtypes.h deleted file mode 100644 index 6e78a829..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-enumtypes.h +++ /dev/null @@ -1,55 +0,0 @@ - - - -#ifndef __GST_VIDEO_ENUM_TYPES_H__ -#define __GST_VIDEO_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "video-format.h" */ -GType gst_video_format_get_type (void); -#define GST_TYPE_VIDEO_FORMAT (gst_video_format_get_type()) -GType gst_video_chroma_site_get_type (void); -#define GST_TYPE_VIDEO_CHROMA_SITE (gst_video_chroma_site_get_type()) -GType gst_video_format_flags_get_type (void); -#define GST_TYPE_VIDEO_FORMAT_FLAGS (gst_video_format_flags_get_type()) -GType gst_video_pack_flags_get_type (void); -#define GST_TYPE_VIDEO_PACK_FLAGS (gst_video_pack_flags_get_type()) - -/* enumerations from "video-color.h" */ -GType gst_video_color_range_get_type (void); -#define GST_TYPE_VIDEO_COLOR_RANGE (gst_video_color_range_get_type()) -GType gst_video_color_matrix_get_type (void); -#define GST_TYPE_VIDEO_COLOR_MATRIX (gst_video_color_matrix_get_type()) -GType gst_video_transfer_function_get_type (void); -#define GST_TYPE_VIDEO_TRANSFER_FUNCTION (gst_video_transfer_function_get_type()) -GType gst_video_color_primaries_get_type (void); -#define GST_TYPE_VIDEO_COLOR_PRIMARIES (gst_video_color_primaries_get_type()) - -/* enumerations from "video-info.h" */ -GType gst_video_interlace_mode_get_type (void); -#define GST_TYPE_VIDEO_INTERLACE_MODE (gst_video_interlace_mode_get_type()) -GType gst_video_flags_get_type (void); -#define GST_TYPE_VIDEO_FLAGS (gst_video_flags_get_type()) - -/* enumerations from "colorbalance.h" */ -GType gst_color_balance_type_get_type (void); -#define GST_TYPE_COLOR_BALANCE_TYPE (gst_color_balance_type_get_type()) - -/* enumerations from "navigation.h" */ -GType gst_navigation_command_get_type (void); -#define GST_TYPE_NAVIGATION_COMMAND (gst_navigation_command_get_type()) -GType gst_navigation_query_type_get_type (void); -#define GST_TYPE_NAVIGATION_QUERY_TYPE (gst_navigation_query_type_get_type()) -GType gst_navigation_message_type_get_type (void); -#define GST_TYPE_NAVIGATION_MESSAGE_TYPE (gst_navigation_message_type_get_type()) -GType gst_navigation_event_type_get_type (void); -#define GST_TYPE_NAVIGATION_EVENT_TYPE (gst_navigation_event_type_get_type()) -G_END_DECLS - -#endif /* __GST_VIDEO_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-event.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-event.h deleted file mode 100644 index 78559f6f..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-event.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_EVENT_H__ -#define __GST_VIDEO_EVENT_H__ - -#include - -G_BEGIN_DECLS - -/* video still frame event creation and parsing */ - -GstEvent * gst_video_event_new_still_frame (gboolean in_still); - -gboolean gst_video_event_parse_still_frame (GstEvent * event, gboolean * in_still); - -/* video force key unit event creation and parsing */ - -GstEvent * gst_video_event_new_downstream_force_key_unit (GstClockTime timestamp, - GstClockTime stream_time, - GstClockTime running_time, - gboolean all_headers, - guint count); - -gboolean gst_video_event_parse_downstream_force_key_unit (GstEvent * event, - GstClockTime * timestamp, - GstClockTime * stream_time, - GstClockTime * running_time, - gboolean * all_headers, - guint * count); - -GstEvent * gst_video_event_new_upstream_force_key_unit (GstClockTime running_time, - gboolean all_headers, - guint count); - -gboolean gst_video_event_parse_upstream_force_key_unit (GstEvent * event, - GstClockTime * running_time, - gboolean * all_headers, - guint * count); - -gboolean gst_video_event_is_force_key_unit(GstEvent *event); - -G_END_DECLS - -#endif /* __GST_VIDEO_EVENT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-format.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-format.h deleted file mode 100644 index 25229cc8..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-format.h +++ /dev/null @@ -1,458 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_FORMAT_H__ -#define __GST_VIDEO_FORMAT_H__ - -#include - -G_BEGIN_DECLS - -#include - -/** - * GstVideoFormat: - * @GST_VIDEO_FORMAT_UNKNOWN: Unknown or unset video format id - * @GST_VIDEO_FORMAT_ENCODED: Encoded video format - * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV - * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped) - * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...) - * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...) - * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last - * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last - * @GST_VIDEO_FORMAT_xRGB: sparse rgb packed into 32 bit, space first - * @GST_VIDEO_FORMAT_xBGR: sparse reverse rgb packed into 32 bit, space first - * @GST_VIDEO_FORMAT_RGBA: rgb with alpha channel last - * @GST_VIDEO_FORMAT_BGRA: reverse rgb with alpha channel last - * @GST_VIDEO_FORMAT_ARGB: rgb with alpha channel first - * @GST_VIDEO_FORMAT_ABGR: reverse rgb with alpha channel first - * @GST_VIDEO_FORMAT_RGB: rgb - * @GST_VIDEO_FORMAT_BGR: reverse rgb - * @GST_VIDEO_FORMAT_Y41B: planar 4:1:1 YUV - * @GST_VIDEO_FORMAT_Y42B: planar 4:2:2 YUV - * @GST_VIDEO_FORMAT_YVYU: packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) - * @GST_VIDEO_FORMAT_Y444: planar 4:4:4 YUV - * @GST_VIDEO_FORMAT_v210: packed 4:2:2 10-bit YUV, complex format - * @GST_VIDEO_FORMAT_v216: packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order - * @GST_VIDEO_FORMAT_NV12: planar 4:2:0 YUV with interleaved UV plane - * @GST_VIDEO_FORMAT_NV21: planar 4:2:0 YUV with interleaved VU plane - * @GST_VIDEO_FORMAT_GRAY8: 8-bit grayscale - * @GST_VIDEO_FORMAT_GRAY16_BE: 16-bit grayscale, most significant byte first - * @GST_VIDEO_FORMAT_GRAY16_LE: 16-bit grayscale, least significant byte first - * @GST_VIDEO_FORMAT_v308: packed 4:4:4 YUV - * @GST_VIDEO_FORMAT_RGB16: rgb 5-6-5 bits per component - * @GST_VIDEO_FORMAT_BGR16: reverse rgb 5-6-5 bits per component - * @GST_VIDEO_FORMAT_RGB15: rgb 5-5-5 bits per component - * @GST_VIDEO_FORMAT_BGR15: reverse rgb 5-5-5 bits per component - * @GST_VIDEO_FORMAT_UYVP: packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - * @GST_VIDEO_FORMAT_A420: planar 4:4:2:0 AYUV - * @GST_VIDEO_FORMAT_RGB8P: 8-bit paletted RGB - * @GST_VIDEO_FORMAT_YUV9: planar 4:1:0 YUV - * @GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (like YUV9 but UV planes swapped) - * @GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) - * @GST_VIDEO_FORMAT_ARGB64: rgb with alpha channel first, 16 bits per channel - * @GST_VIDEO_FORMAT_AYUV64: packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) - * @GST_VIDEO_FORMAT_r210: packed 4:4:4 RGB, 10 bits per channel - * @GST_VIDEO_FORMAT_I420_10BE: planar 4:2:0 YUV, 10 bits per channel - * @GST_VIDEO_FORMAT_I420_10LE: planar 4:2:0 YUV, 10 bits per channel - * @GST_VIDEO_FORMAT_I422_10BE: planar 4:2:2 YUV, 10 bits per channel - * @GST_VIDEO_FORMAT_I422_10LE: planar 4:2:2 YUV, 10 bits per channel - * - * Enum value describing the most common video formats. - */ -typedef enum { - GST_VIDEO_FORMAT_UNKNOWN, - GST_VIDEO_FORMAT_ENCODED, - GST_VIDEO_FORMAT_I420, - GST_VIDEO_FORMAT_YV12, - GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_FORMAT_RGBx, - GST_VIDEO_FORMAT_BGRx, - GST_VIDEO_FORMAT_xRGB, - GST_VIDEO_FORMAT_xBGR, - GST_VIDEO_FORMAT_RGBA, - GST_VIDEO_FORMAT_BGRA, - GST_VIDEO_FORMAT_ARGB, - GST_VIDEO_FORMAT_ABGR, - GST_VIDEO_FORMAT_RGB, - GST_VIDEO_FORMAT_BGR, - GST_VIDEO_FORMAT_Y41B, - GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_FORMAT_YVYU, - GST_VIDEO_FORMAT_Y444, - GST_VIDEO_FORMAT_v210, - GST_VIDEO_FORMAT_v216, - GST_VIDEO_FORMAT_NV12, - GST_VIDEO_FORMAT_NV21, - GST_VIDEO_FORMAT_GRAY8, - GST_VIDEO_FORMAT_GRAY16_BE, - GST_VIDEO_FORMAT_GRAY16_LE, - GST_VIDEO_FORMAT_v308, - GST_VIDEO_FORMAT_RGB16, - GST_VIDEO_FORMAT_BGR16, - GST_VIDEO_FORMAT_RGB15, - GST_VIDEO_FORMAT_BGR15, - GST_VIDEO_FORMAT_UYVP, - GST_VIDEO_FORMAT_A420, - GST_VIDEO_FORMAT_RGB8P, - GST_VIDEO_FORMAT_YUV9, - GST_VIDEO_FORMAT_YVU9, - GST_VIDEO_FORMAT_IYU1, - GST_VIDEO_FORMAT_ARGB64, - GST_VIDEO_FORMAT_AYUV64, - GST_VIDEO_FORMAT_r210, - GST_VIDEO_FORMAT_I420_10BE, - GST_VIDEO_FORMAT_I420_10LE, - GST_VIDEO_FORMAT_I422_10BE, - GST_VIDEO_FORMAT_I422_10LE, -} GstVideoFormat; - -#define GST_VIDEO_MAX_PLANES 4 -#define GST_VIDEO_MAX_COMPONENTS 4 - -typedef struct _GstVideoFormatInfo GstVideoFormatInfo; - -/** - * GstVideoChromaSite: - * @GST_VIDEO_CHROMA_SITE_UNKNOWN: unknown cositing - * @GST_VIDEO_CHROMA_SITE_NONE: no cositing - * @GST_VIDEO_CHROMA_SITE_H_COSITED: chroma is horizontally cosited - * @GST_VIDEO_CHROMA_SITE_V_COSITED: chroma is vertically cosited - * @GST_VIDEO_CHROMA_SITE_ALT_LINE: choma samples are sited on alternate lines - * @GST_VIDEO_CHROMA_SITE_COSITED: chroma samples cosited with luma samples - * @GST_VIDEO_CHROMA_SITE_JPEG: jpeg style cositing, also for mpeg1 and mjpeg - * @GST_VIDEO_CHROMA_SITE_MPEG2: mpeg2 style cositing - * @GST_VIDEO_CHROMA_SITE_DV: DV style cositing - * - * Various Chroma sitings. - */ -typedef enum { - GST_VIDEO_CHROMA_SITE_UNKNOWN = 0, - GST_VIDEO_CHROMA_SITE_NONE = (1 << 0), - GST_VIDEO_CHROMA_SITE_H_COSITED = (1 << 1), - GST_VIDEO_CHROMA_SITE_V_COSITED = (1 << 2), - GST_VIDEO_CHROMA_SITE_ALT_LINE = (1 << 3), - /* some common chroma cositing */ - GST_VIDEO_CHROMA_SITE_COSITED = (GST_VIDEO_CHROMA_SITE_H_COSITED | GST_VIDEO_CHROMA_SITE_V_COSITED), - GST_VIDEO_CHROMA_SITE_JPEG = (GST_VIDEO_CHROMA_SITE_NONE), - GST_VIDEO_CHROMA_SITE_MPEG2 = (GST_VIDEO_CHROMA_SITE_H_COSITED), - GST_VIDEO_CHROMA_SITE_DV = (GST_VIDEO_CHROMA_SITE_COSITED | GST_VIDEO_CHROMA_SITE_ALT_LINE), -} GstVideoChromaSite; - -GstVideoChromaSite gst_video_chroma_from_string (const gchar * s); -const gchar * gst_video_chroma_to_string (GstVideoChromaSite site); - -/** - * GstVideoFormatFlags: - * @GST_VIDEO_FORMAT_FLAG_YUV: The video format is YUV, components are numbered - * 0=Y, 1=U, 2=V. - * @GST_VIDEO_FORMAT_FLAG_RGB: The video format is RGB, components are numbered - * 0=R, 1=G, 2=B. - * @GST_VIDEO_FORMAT_FLAG_GRAY: The video is gray, there is one gray component - * with index 0. - * @GST_VIDEO_FORMAT_FLAG_ALPHA: The video format has an alpha components with - * the number 3. - * @GST_VIDEO_FORMAT_FLAG_LE: The video format has data stored in little - * endianness. - * @GST_VIDEO_FORMAT_FLAG_PALETTE: The video format has a palette. The palette - * is stored in the second plane and indexes are stored in the first plane. - * @GST_VIDEO_FORMAT_FLAG_COMPLEX: The video format has a complex layout that - * can't be described with the usual information in the #GstVideoFormatInfo. - * @GST_VIDEO_FORMAT_FLAG_UNPACK: This format can be used in a - * #GstVideoFormatUnpack and #GstVideoFormatPack function. - * - * The different video flags that a format info can have. - */ -typedef enum -{ - GST_VIDEO_FORMAT_FLAG_YUV = (1 << 0), - GST_VIDEO_FORMAT_FLAG_RGB = (1 << 1), - GST_VIDEO_FORMAT_FLAG_GRAY = (1 << 2), - GST_VIDEO_FORMAT_FLAG_ALPHA = (1 << 3), - GST_VIDEO_FORMAT_FLAG_LE = (1 << 4), - GST_VIDEO_FORMAT_FLAG_PALETTE = (1 << 5), - GST_VIDEO_FORMAT_FLAG_COMPLEX = (1 << 6), - GST_VIDEO_FORMAT_FLAG_UNPACK = (1 << 7) -} GstVideoFormatFlags; - -/* YUV components */ -#define GST_VIDEO_COMP_Y 0 -#define GST_VIDEO_COMP_U 1 -#define GST_VIDEO_COMP_V 2 - -/* RGB components */ -#define GST_VIDEO_COMP_R 0 -#define GST_VIDEO_COMP_G 1 -#define GST_VIDEO_COMP_B 2 - -/* alpha component */ -#define GST_VIDEO_COMP_A 3 - -/* palette components */ -#define GST_VIDEO_COMP_INDEX 0 -#define GST_VIDEO_COMP_PALETTE 1 - -/** - * GstVideoPackFlags: - * @GST_VIDEO_PACK_FLAG_NONE: No flag - * @GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE: When the source has a smaller depth - * than the target format, set the least significant bits of the target - * to 0. This is likely sightly faster but less accurate. When this flag - * is not specified, the most significant bits of the source are duplicated - * in the least significant bits of the destination. - * - * The different flags that can be used when packing and unpacking. - */ -typedef enum -{ - GST_VIDEO_PACK_FLAG_NONE = 0, - GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE = 1 -} GstVideoPackFlags; - -/** - * GstVideoFormatUnpack: - * @info: a #GstVideoFormatInfo - * @flags: flags to control the unpacking - * @dest: a destination array - * @data: pointers to the data planes - * @stride: strides of the planes - * @x: the x position in the image to start from - * @y: the y position in the image to start from - * @width: the amount of pixels to unpack. - * - * Unpacks @width pixels from the given planes and strides containing data of - * format @info. The pixels will be unpacked into @dest which each component - * interleaved. @dest should at least be big enough to hold @width * - * n_components * size(unpack_format) bytes. - */ -typedef void (*GstVideoFormatUnpack) (const GstVideoFormatInfo *info, - GstVideoPackFlags flags, gpointer dest, - const gpointer data[GST_VIDEO_MAX_PLANES], - const gint stride[GST_VIDEO_MAX_PLANES], - gint x, gint y, gint width); -/** - * GstVideoFormatPack: - * @info: a #GstVideoFormatInfo - * @flags: flags to control the packing - * @src: a source array - * @sstride: the source array stride - * @data: pointers to the destination data planes - * @stride: strides of the destination planes - * @chroma_site: the chroma siting of the target when subsampled - * @y: the y position in the image to pack to - * @width: the amount of pixels to pack. - * - * Packs @width pixels from @src to the given planes and strides in the - * format @info. The pixels from source have each component interleaved - * and will be packed into the planes in @data. - * - * This function operates on pack_lines lines, meaning that @src should - * contain at least pack_lines lines with a stride of @sstride and @y - * should be a multiple of pack_lines. - */ -typedef void (*GstVideoFormatPack) (const GstVideoFormatInfo *info, - GstVideoPackFlags flags, - const gpointer src, gint sstride, - gpointer data[GST_VIDEO_MAX_PLANES], - const gint stride[GST_VIDEO_MAX_PLANES], - GstVideoChromaSite chroma_site, - gint y, gint width); - -/** - * GstVideoFormatInfo: - * @format: #GstVideoFormat - * @name: string representation of the format - * @description: use readable description of the format - * @flags: #GstVideoFormatFlags - * @bits: The number of bits used to pack data items. This can be less than 8 - * when multiple pixels are stored in a byte. for values > 8 multiple bytes - * should be read according to the endianness flag before applying the shift - * and mask. - * @n_components: the number of components in the video format. - * @shift: the number of bits to shift away to get the component data - * @depth: the depth in bits for each component - * @pixel_stride: the pixel stride of each component. This is the amount of - * bytes to the pixel immediately to the right. When bits < 8, the stride is - * expressed in bits. For 24-bit RGB, this would be 3 bytes, for example, - * while it would be 4 bytes for RGBx or ARGB. - * @n_planes: the number of planes for this format. The number of planes can be - * less than the amount of components when multiple components are packed into - * one plane. - * @plane: the plane number where a component can be found - * @poffset: the offset in the plane where the first pixel of the components - * can be found. - * @w_sub: subsampling factor of the width for the component. Use - * GST_VIDEO_SUB_SCALE to scale a width. - * @h_sub: subsampling factor of the height for the component. Use - * GST_VIDEO_SUB_SCALE to scale a height. - * @unpack_format: the format of the unpacked pixels. This format must have the - * #GST_VIDEO_FORMAT_FLAG_UNPACK flag set. - * @unpack_func: an unpack function for this format - * @pack_lines: the amount of lines that will be packed - * @pack_func: an pack function for this format - * - * Information for a video format. - */ -struct _GstVideoFormatInfo { - GstVideoFormat format; - const gchar *name; - const gchar *description; - GstVideoFormatFlags flags; - guint bits; - guint n_components; - guint shift[GST_VIDEO_MAX_COMPONENTS]; - guint depth[GST_VIDEO_MAX_COMPONENTS]; - gint pixel_stride[GST_VIDEO_MAX_COMPONENTS]; - guint n_planes; - guint plane[GST_VIDEO_MAX_COMPONENTS]; - guint poffset[GST_VIDEO_MAX_COMPONENTS]; - guint w_sub[GST_VIDEO_MAX_COMPONENTS]; - guint h_sub[GST_VIDEO_MAX_COMPONENTS]; - - GstVideoFormat unpack_format; - GstVideoFormatUnpack unpack_func; - gint pack_lines; - GstVideoFormatPack pack_func; - - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_VIDEO_FORMAT_INFO_FORMAT(info) ((info)->format) -#define GST_VIDEO_FORMAT_INFO_NAME(info) ((info)->name) -#define GST_VIDEO_FORMAT_INFO_FLAGS(info) ((info)->flags) - -#define GST_VIDEO_FORMAT_INFO_IS_YUV(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_YUV) -#define GST_VIDEO_FORMAT_INFO_IS_RGB(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_RGB) -#define GST_VIDEO_FORMAT_INFO_IS_GRAY(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_GRAY) -#define GST_VIDEO_FORMAT_INFO_HAS_ALPHA(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_ALPHA) -#define GST_VIDEO_FORMAT_INFO_IS_LE(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_LE) -#define GST_VIDEO_FORMAT_INFO_HAS_PALETTE(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_PALETTE) -#define GST_VIDEO_FORMAT_INFO_IS_COMPLEX(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_COMPLEX) - -#define GST_VIDEO_FORMAT_INFO_BITS(info) ((info)->bits) -#define GST_VIDEO_FORMAT_INFO_N_COMPONENTS(info) ((info)->n_components) -#define GST_VIDEO_FORMAT_INFO_SHIFT(info,c) ((info)->shift[c]) -#define GST_VIDEO_FORMAT_INFO_DEPTH(info,c) ((info)->depth[c]) -/** - * GST_VIDEO_FORMAT_INFO_PSTRIDE: - * - * pixel stride for the given component. This is the amount of bytes to the - * pixel immediately to the right, so basically bytes from one pixel to the - * next. When bits < 8, the stride is expressed in bits. - * - * Examples: for 24-bit RGB, the pixel stride would be 3 bytes, while it - * would be 4 bytes for RGBx or ARGB, and 8 bytes for ARGB64 or AYUV64. - * For planar formats such as I420 the pixel stride is usually 1. For - * YUY2 it would be 2 bytes. - */ -#define GST_VIDEO_FORMAT_INFO_PSTRIDE(info,c) ((info)->pixel_stride[c]) -/** - * GST_VIDEO_FORMAT_INFO_N_PLANES: - * - * Number of planes. This is the number of planes the pixel layout is - * organized in in memory. The number of planes can be less than the - * number of components (e.g. Y,U,V,A or R, G, B, A) when multiple - * components are packed into one plane. - * - * Examples: RGB/RGBx/RGBA: 1 plane, 3/3/4 components; - * I420: 3 planes, 3 components; NV21/NV12: 2 planes, 3 components. - */ -#define GST_VIDEO_FORMAT_INFO_N_PLANES(info) ((info)->n_planes) -/** - * GST_VIDEO_FORMAT_INFO_PLANE: - * - * Plane number where the given component can be found. A plane may - * contain data for multiple components. - */ -#define GST_VIDEO_FORMAT_INFO_PLANE(info,c) ((info)->plane[c]) -#define GST_VIDEO_FORMAT_INFO_POFFSET(info,c) ((info)->poffset[c]) -#define GST_VIDEO_FORMAT_INFO_W_SUB(info,c) ((info)->w_sub[c]) -#define GST_VIDEO_FORMAT_INFO_H_SUB(info,c) ((info)->h_sub[c]) - -/* rounds up */ -#define GST_VIDEO_SUB_SCALE(scale,val) (-((-((gint)(val)))>>(scale))) - -#define GST_VIDEO_FORMAT_INFO_SCALE_WIDTH(info,c,w) GST_VIDEO_SUB_SCALE ((info)->w_sub[c],(w)) -#define GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT(info,c,h) GST_VIDEO_SUB_SCALE ((info)->h_sub[c],(h)) - -#define GST_VIDEO_FORMAT_INFO_DATA(info,planes,comp) \ - (((guint8*)(planes)[(info)->plane[comp]]) + (info)->poffset[comp]) -/** - * GST_VIDEO_FORMAT_INFO_STRIDE: - * - * Row stride in bytes, that is number of bytes from the first pixel component - * of a row to the first pixel component in the next row. This might include - * some row padding (memory not actually used for anything, to make sure the - * beginning of the next row is aligned in a particular way). - */ -#define GST_VIDEO_FORMAT_INFO_STRIDE(info,strides,comp) ((strides)[(info)->plane[comp]]) -#define GST_VIDEO_FORMAT_INFO_OFFSET(info,offsets,comp) \ - (((offsets)[(info)->plane[comp]]) + (info)->poffset[comp]) - -/* format properties */ -GstVideoFormat gst_video_format_from_masks (gint depth, gint bpp, gint endianness, - gint red_mask, gint green_mask, - gint blue_mask, gint alpha_mask) G_GNUC_CONST; - -GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc) G_GNUC_CONST; -GstVideoFormat gst_video_format_from_string (const gchar *format) G_GNUC_CONST; - -guint32 gst_video_format_to_fourcc (GstVideoFormat format) G_GNUC_CONST; -const gchar * gst_video_format_to_string (GstVideoFormat format) G_GNUC_CONST; - -const GstVideoFormatInfo * - gst_video_format_get_info (GstVideoFormat format) G_GNUC_CONST; - -#define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]" -#define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]" - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -# define GST_VIDEO_NE(s) G_STRINGIFY(s)"_LE" -# define GST_VIDEO_OE(s) G_STRINGIFY(s)"_BE" -#else -# define GST_VIDEO_NE(s) G_STRINGIFY(s)"_BE" -# define GST_VIDEO_OE(s) G_STRINGIFY(s)"_LE" -#endif - -#define GST_VIDEO_FORMATS_ALL "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, " \ - "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, " \ - "YVYU, Y444, v210, v216, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, " \ - "v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, " \ - "IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE }" - -/** - * GST_VIDEO_CAPS_MAKE: - * @format: string format that describes the pixel layout, as string - * (e.g. "I420", "RGB", "YV12", "YUY2", "AYUV", etc.) - * - * Generic caps string for video, for use in pad templates. - */ -#define GST_VIDEO_CAPS_MAKE(format) \ - "video/x-raw, " \ - "format = (string) " format ", " \ - "width = " GST_VIDEO_SIZE_RANGE ", " \ - "height = " GST_VIDEO_SIZE_RANGE ", " \ - "framerate = " GST_VIDEO_FPS_RANGE - -G_END_DECLS - -#endif /* __GST_VIDEO_FORMAT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-frame.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-frame.h deleted file mode 100644 index 8f55fbd3..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-frame.h +++ /dev/null @@ -1,151 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_FRAME_H__ -#define __GST_VIDEO_FRAME_H__ - -#include -#include - -G_BEGIN_DECLS - -#include - -typedef struct _GstVideoFrame GstVideoFrame; - -/** - * GstVideoFrameFlags: - * @GST_VIDEO_FRAME_FLAG_NONE: no flags - * @GST_VIDEO_FRAME_FLAG_INTERLACED: The video frame is interlaced. In mixed - * interlace-mode, this flags specifies if the frame is interlace or - * progressive. - * @GST_VIDEO_FRAME_FLAG_TFF: The video frame has the top field first - * @GST_VIDEO_FRAME_FLAG_RFF: The video frame has the repeat flag - * @GST_VIDEO_FRAME_FLAG_ONEFIELD: The video frame has one field - * - * Extra video frame flags - */ -typedef enum { - GST_VIDEO_FRAME_FLAG_NONE = 0, - GST_VIDEO_FRAME_FLAG_INTERLACED = (1 << 0), - GST_VIDEO_FRAME_FLAG_TFF = (1 << 1), - GST_VIDEO_FRAME_FLAG_RFF = (1 << 2), - GST_VIDEO_FRAME_FLAG_ONEFIELD = (1 << 3) -} GstVideoFrameFlags; - -/** - * GstVideoFrame: - * @info: the #GstVideoInfo - * @buffer: the mapped buffer - * @meta: pointer to metadata if any - * @id: id of the mapped frame. the id can for example be used to - * indentify the frame in case of multiview video. - * @data: pointers to the plane data - * @map: mappings of the planes - * - * A video frame obtained from gst_video_frame_map() - */ -struct _GstVideoFrame { - GstVideoInfo info; - GstVideoFrameFlags flags; - - GstBuffer *buffer; - gpointer meta; - gint id; - - gpointer data[GST_VIDEO_MAX_PLANES]; - GstMapInfo map[GST_VIDEO_MAX_PLANES]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -gboolean gst_video_frame_map (GstVideoFrame *frame, GstVideoInfo *info, - GstBuffer *buffer, GstMapFlags flags); -gboolean gst_video_frame_map_id (GstVideoFrame *frame, GstVideoInfo *info, - GstBuffer *buffer, gint id, GstMapFlags flags); -void gst_video_frame_unmap (GstVideoFrame *frame); - -gboolean gst_video_frame_copy (GstVideoFrame *dest, const GstVideoFrame *src); -gboolean gst_video_frame_copy_plane (GstVideoFrame *dest, const GstVideoFrame *src, - guint plane); - -/* general info */ -#define GST_VIDEO_FRAME_FORMAT(f) (GST_VIDEO_INFO_FORMAT(&(f)->info)) -#define GST_VIDEO_FRAME_WIDTH(f) (GST_VIDEO_INFO_WIDTH(&(f)->info)) -#define GST_VIDEO_FRAME_HEIGHT(f) (GST_VIDEO_INFO_HEIGHT(&(f)->info)) -#define GST_VIDEO_FRAME_SIZE(f) (GST_VIDEO_INFO_SIZE(&(f)->info)) - -/* flags */ -#define GST_VIDEO_FRAME_FLAGS(f) ((f)->flags) -#define GST_VIDEO_FRAME_FLAG_IS_SET(f,fl) ((GST_VIDEO_FRAME_FLAGS(f) & (fl)) == (fl)) -#define GST_VIDEO_FRAME_IS_INTERLACED(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_INTERLACED)) -#define GST_VIDEO_FRAME_IS_TFF(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_TFF)) -#define GST_VIDEO_FRAME_IS_RFF(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_RFF)) -#define GST_VIDEO_FRAME_IS_ONEFIELD(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_ONEFIELD)) - -/* dealing with planes */ -#define GST_VIDEO_FRAME_N_PLANES(f) (GST_VIDEO_INFO_N_PLANES(&(f)->info)) -#define GST_VIDEO_FRAME_PLANE_DATA(f,p) ((f)->data[p]) -#define GST_VIDEO_FRAME_PLANE_OFFSET(f,p) (GST_VIDEO_INFO_PLANE_OFFSET(&(f)->info,(p))) -#define GST_VIDEO_FRAME_PLANE_STRIDE(f,p) (GST_VIDEO_INFO_PLANE_STRIDE(&(f)->info,(p))) - -/* dealing with components */ -#define GST_VIDEO_FRAME_N_COMPONENTS(f) GST_VIDEO_INFO_N_COMPONENTS(&(f)->info) -#define GST_VIDEO_FRAME_COMP_DEPTH(f,c) GST_VIDEO_INFO_COMP_DEPTH(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_DATA(f,c) GST_VIDEO_INFO_COMP_DATA(&(f)->info,(f)->data,(c)) -#define GST_VIDEO_FRAME_COMP_STRIDE(f,c) GST_VIDEO_INFO_COMP_STRIDE(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_OFFSET(f,c) GST_VIDEO_INFO_COMP_OFFSET(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_WIDTH(f,c) GST_VIDEO_INFO_COMP_WIDTH(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_HEIGHT(f,c) GST_VIDEO_INFO_COMP_HEIGHT(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_PLANE(f,c) GST_VIDEO_INFO_COMP_PLANE(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_PSTRIDE(f,c) GST_VIDEO_INFO_COMP_PSTRIDE(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_POFFSET(f,c) GST_VIDEO_INFO_COMP_POFFSET(&(f)->info,(c)) - -/* buffer flags */ - -/** - * GstVideoBufferFlags: - * @GST_VIDEO_BUFFER_FLAG_INTERLACED: If the #GstBuffer is interlaced. In mixed - * interlace-mode, this flags specifies if the frame is - * interlaced or progressive. - * @GST_VIDEO_BUFFER_FLAG_TFF: If the #GstBuffer is interlaced, then the first field - * in the video frame is the top field. If unset, the - * bottom field is first. - * @GST_VIDEO_BUFFER_FLAG_RFF: If the #GstBuffer is interlaced, then the first field - * (as defined by the %GST_VIDEO_BUFFER_TFF flag setting) - * is repeated. - * @GST_VIDEO_BUFFER_FLAG_ONEFIELD: If the #GstBuffer is interlaced, then only the - * first field (as defined by the %GST_VIDEO_BUFFER_TFF - * flag setting) is to be displayed. - * - * Additional video buffer flags. - */ -typedef enum { - GST_VIDEO_BUFFER_FLAG_INTERLACED = (GST_BUFFER_FLAG_LAST << 0), - GST_VIDEO_BUFFER_FLAG_TFF = (GST_BUFFER_FLAG_LAST << 1), - GST_VIDEO_BUFFER_FLAG_RFF = (GST_BUFFER_FLAG_LAST << 2), - GST_VIDEO_BUFFER_FLAG_ONEFIELD = (GST_BUFFER_FLAG_LAST << 3), - - GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8) -} GstVideoBufferFlags; - -G_END_DECLS - -#endif /* __GST_VIDEO_FRAME_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-info.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-info.h deleted file mode 100644 index ce0f0fef..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-info.h +++ /dev/null @@ -1,190 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_INFO_H__ -#define __GST_VIDEO_INFO_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#include - -typedef struct _GstVideoInfo GstVideoInfo; - -/** - * GstVideoInterlaceMode: - * @GST_VIDEO_INTERLACE_MODE_PROGRESSIVE: all frames are progressive - * @GST_VIDEO_INTERLACE_MODE_INTERLEAVED: 2 fields are interleaved in one video - * frame. Extra buffer flags describe the field order. - * @GST_VIDEO_INTERLACE_MODE_MIXED: frames contains both interlaced and - * progressive video, the buffer flags describe the frame and fields. - * @GST_VIDEO_INTERLACE_MODE_FIELDS: 2 fields are stored in one buffer, use the - * frame ID to get access to the required field. For multiview (the - * 'views' property > 1) the fields of view N can be found at frame ID - * (N * 2) and (N * 2) + 1. - * Each field has only half the amount of lines as noted in the - * height property. This mode requires multiple GstVideoMeta metadata - * to describe the fields. - * - * The possible values of the #GstVideoInterlaceMode describing the interlace - * mode of the stream. - */ -typedef enum { - GST_VIDEO_INTERLACE_MODE_PROGRESSIVE = 0, - GST_VIDEO_INTERLACE_MODE_INTERLEAVED, - GST_VIDEO_INTERLACE_MODE_MIXED, - GST_VIDEO_INTERLACE_MODE_FIELDS -} GstVideoInterlaceMode; - -/** - * GstVideoFlags: - * @GST_VIDEO_FLAG_NONE: no flags - * @GST_VIDEO_FLAG_VARIABLE_FPS: a variable fps is selected, fps_n and fps_d - * denote the maximum fps of the video - * @GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA: Each color has been scaled by the alpha - * value. - * - * Extra video flags - */ -typedef enum { - GST_VIDEO_FLAG_NONE = 0, - GST_VIDEO_FLAG_VARIABLE_FPS = (1 << 0), - GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA = (1 << 1) -} GstVideoFlags; - -/** - * GstVideoInfo: - * @finfo: the format info of the video - * @interlace_mode: the interlace mode - * @flags: additional video flags - * @width: the width of the video - * @height: the height of the video - * @views: the number of views for multiview video - * @size: the default size of one frame - * @chroma_site: a #GstVideoChromaSite. - * @colorimetry: the colorimetry info - * @par_n: the pixel-aspect-ratio numerator - * @par_d: the pixel-aspect-ratio demnominator - * @fps_n: the framerate numerator - * @fps_d: the framerate demnominator - * @offset: offsets of the planes - * @stride: strides of the planes - * - * Information describing image properties. This information can be filled - * in from GstCaps with gst_video_info_from_caps(). The information is also used - * to store the specific video info when mapping a video frame with - * gst_video_frame_map(). - * - * Use the provided macros to access the info in this structure. - */ -struct _GstVideoInfo { - const GstVideoFormatInfo *finfo; - - GstVideoInterlaceMode interlace_mode; - GstVideoFlags flags; - gint width; - gint height; - gsize size; - gint views; - - GstVideoChromaSite chroma_site; - GstVideoColorimetry colorimetry; - - gint par_n; - gint par_d; - gint fps_n; - gint fps_d; - - gsize offset[GST_VIDEO_MAX_PLANES]; - gint stride[GST_VIDEO_MAX_PLANES]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/* general info */ -#define GST_VIDEO_INFO_FORMAT(i) (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo)) -#define GST_VIDEO_INFO_NAME(i) (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo)) -#define GST_VIDEO_INFO_IS_YUV(i) (GST_VIDEO_FORMAT_INFO_IS_YUV((i)->finfo)) -#define GST_VIDEO_INFO_IS_RGB(i) (GST_VIDEO_FORMAT_INFO_IS_RGB((i)->finfo)) -#define GST_VIDEO_INFO_IS_GRAY(i) (GST_VIDEO_FORMAT_INFO_IS_GRAY((i)->finfo)) -#define GST_VIDEO_INFO_HAS_ALPHA(i) (GST_VIDEO_FORMAT_INFO_HAS_ALPHA((i)->finfo)) - -#define GST_VIDEO_INFO_INTERLACE_MODE(i) ((i)->interlace_mode) -#define GST_VIDEO_INFO_IS_INTERLACED(i) ((i)->interlace_mode != GST_VIDEO_INTERLACE_MODE_PROGRESSIVE) -#define GST_VIDEO_INFO_FLAGS(i) ((i)->flags) -#define GST_VIDEO_INFO_WIDTH(i) ((i)->width) -#define GST_VIDEO_INFO_HEIGHT(i) ((i)->height) -#define GST_VIDEO_INFO_SIZE(i) ((i)->size) -#define GST_VIDEO_INFO_VIEWS(i) ((i)->views) -#define GST_VIDEO_INFO_PAR_N(i) ((i)->par_n) -#define GST_VIDEO_INFO_PAR_D(i) ((i)->par_d) -#define GST_VIDEO_INFO_FPS_N(i) ((i)->fps_n) -#define GST_VIDEO_INFO_FPS_D(i) ((i)->fps_d) - -/* dealing with GstVideoInfo flags */ -#define GST_VIDEO_INFO_FLAG_IS_SET(i,flag) ((GST_VIDEO_INFO_FLAGS(i) & (flag)) == (flag)) -#define GST_VIDEO_INFO_FLAG_SET(i,flag) (GST_VIDEO_INFO_FLAGS(i) |= (flag)) -#define GST_VIDEO_INFO_FLAG_UNSET(i,flag) (GST_VIDEO_INFO_FLAGS(i) &= ~(flag)) - -/* dealing with planes */ -#define GST_VIDEO_INFO_N_PLANES(i) (GST_VIDEO_FORMAT_INFO_N_PLANES((i)->finfo)) -#define GST_VIDEO_INFO_PLANE_OFFSET(i,p) ((i)->offset[p]) -#define GST_VIDEO_INFO_PLANE_STRIDE(i,p) ((i)->stride[p]) - -/* dealing with components */ -#define GST_VIDEO_INFO_N_COMPONENTS(i) GST_VIDEO_FORMAT_INFO_N_COMPONENTS((i)->finfo) -#define GST_VIDEO_INFO_COMP_DEPTH(i,c) GST_VIDEO_FORMAT_INFO_DEPTH((i)->finfo,(c)) -#define GST_VIDEO_INFO_COMP_DATA(i,d,c) GST_VIDEO_FORMAT_INFO_DATA((i)->finfo,d,(c)) -#define GST_VIDEO_INFO_COMP_OFFSET(i,c) GST_VIDEO_FORMAT_INFO_OFFSET((i)->finfo,(i)->offset,(c)) -#define GST_VIDEO_INFO_COMP_STRIDE(i,c) GST_VIDEO_FORMAT_INFO_STRIDE((i)->finfo,(i)->stride,(c)) -#define GST_VIDEO_INFO_COMP_WIDTH(i,c) GST_VIDEO_FORMAT_INFO_SCALE_WIDTH((i)->finfo,(c),(i)->width) -#define GST_VIDEO_INFO_COMP_HEIGHT(i,c) GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT((i)->finfo,(c),(i)->height) -#define GST_VIDEO_INFO_COMP_PLANE(i,c) GST_VIDEO_FORMAT_INFO_PLANE((i)->finfo,(c)) -#define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,(c)) -#define GST_VIDEO_INFO_COMP_POFFSET(i,c) GST_VIDEO_FORMAT_INFO_POFFSET((i)->finfo,(c)) - -void gst_video_info_init (GstVideoInfo *info); - -void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format, - guint width, guint height); - -gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps); - -GstCaps * gst_video_info_to_caps (GstVideoInfo *info); - -gboolean gst_video_info_convert (GstVideoInfo *info, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 *dest_value); -gboolean gst_video_info_is_equal (const GstVideoInfo *info, - const GstVideoInfo *other); - -#include - -void gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align); - - -G_END_DECLS - -#endif /* __GST_VIDEO_INFO_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-overlay-composition.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-overlay-composition.h deleted file mode 100644 index d2f62d03..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video-overlay-composition.h +++ /dev/null @@ -1,285 +0,0 @@ -/* GStreamer Video Overlay Composition - * Copyright (C) 2011 Intel Corporation - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2011 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_OVERLAY_COMPOSITION_H__ -#define __GST_VIDEO_OVERLAY_COMPOSITION_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstVideoOverlayRectangle: - * - * An opaque video overlay rectangle object. A rectangle contains a single - * overlay rectangle which can be added to a composition. - */ -#define GST_TYPE_VIDEO_OVERLAY_RECTANGLE \ - (gst_video_overlay_rectangle_get_type ()) -#define GST_VIDEO_OVERLAY_RECTANGLE_CAST(obj) \ - ((GstVideoOverlayRectangle *)(obj) -#define GST_VIDEO_OVERLAY_RECTANGLE(obj) \ - (GST_VIDEO_OVERLAY_RECTANGLE_CAST(obj)) -#define GST_IS_VIDEO_OVERLAY_RECTANGLE(obj) \ - (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_VIDEO_OVERLAY_RECTANGLE)) - -typedef struct _GstVideoOverlayRectangle GstVideoOverlayRectangle; - -/** - * gst_video_overlay_rectangle_ref: - * @comp: a a #GstVideoOverlayRectangle. - * - * Increases the refcount of the given rectangle by one. - * - * Note that the refcount affects the writeability - * of @comp, use gst_video_overlay_rectangle_copy() to ensure a rectangle can - * be modified (there is no gst_video_overlay_rectangle_make_writable() because - * it is unlikely that someone will hold the single reference to the rectangle - * and not know that that's the case). - * - * Returns: (transfer full): @comp - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstVideoOverlayRectangle * -gst_video_overlay_rectangle_ref (GstVideoOverlayRectangle * comp); -#endif - -static inline GstVideoOverlayRectangle * -gst_video_overlay_rectangle_ref (GstVideoOverlayRectangle * comp) -{ - return (GstVideoOverlayRectangle *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (comp)); -} - -/** - * gst_video_overlay_rectangle_unref: - * @comp: (transfer full): a #GstVideoOverlayRectangle. - * - * Decreases the refcount of the rectangle. If the refcount reaches 0, the - * rectangle will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void -gst_video_overlay_rectangle_unref (GstVideoOverlayRectangle * comp); -#endif - -static inline void -gst_video_overlay_rectangle_unref (GstVideoOverlayRectangle * comp) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (comp)); -} - -/** - * GstVideoOverlayFormatFlags: - * @GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE: no flags - * @GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA: RGB are premultiplied by A/255. - * @GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA: a global-alpha value != 1 is set. - * - * Overlay format flags. - */ -typedef enum { - GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE = 0, - GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA = 1, - GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA = 2 -} GstVideoOverlayFormatFlags; - -/** - * GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB: - * - * Supported RGB overlay video format. - */ -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB GST_VIDEO_FORMAT_BGRA -#else -#define GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB GST_VIDEO_FORMAT_ARGB -#endif - -/** - * GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_YUV: - * - * Supported YUV overlay video format. - */ -#define GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_YUV GST_VIDEO_FORMAT_AYUV - -GType gst_video_overlay_rectangle_get_type (void); - -GstVideoOverlayRectangle * gst_video_overlay_rectangle_new_raw (GstBuffer * pixels, - gint render_x, gint render_y, - guint render_width, guint render_height, - GstVideoOverlayFormatFlags flags); - -GstVideoOverlayRectangle * gst_video_overlay_rectangle_copy (GstVideoOverlayRectangle * rectangle); - -guint gst_video_overlay_rectangle_get_seqnum (GstVideoOverlayRectangle * rectangle); - -void gst_video_overlay_rectangle_set_render_rectangle (GstVideoOverlayRectangle * rectangle, - gint render_x, - gint render_y, - guint render_width, - guint render_height); - -gboolean gst_video_overlay_rectangle_get_render_rectangle (GstVideoOverlayRectangle * rectangle, - gint * render_x, - gint * render_y, - guint * render_width, - guint * render_height); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_raw (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_argb (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_ayuv (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_unscaled_raw (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_unscaled_argb (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_unscaled_ayuv (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstVideoOverlayFormatFlags gst_video_overlay_rectangle_get_flags (GstVideoOverlayRectangle * rectangle); - -gfloat gst_video_overlay_rectangle_get_global_alpha (GstVideoOverlayRectangle * rectangle); -void gst_video_overlay_rectangle_set_global_alpha (GstVideoOverlayRectangle * rectangle, - gfloat global_alpha); - -/** - * GstVideoOverlayComposition: - * - * An opaque video overlay composition object. A composition contains - * multiple overlay rectangles. - */ -#define GST_TYPE_VIDEO_OVERLAY_COMPOSITION \ - (gst_video_overlay_composition_get_type ()) -#define GST_VIDEO_OVERLAY_COMPOSITION_CAST(obj) \ - ((GstVideoOverlayComposition *)(obj) -#define GST_VIDEO_OVERLAY_COMPOSITION(obj) \ - (GST_VIDEO_OVERLAY_COMPOSITION_CAST(obj)) -#define GST_IS_VIDEO_OVERLAY_COMPOSITION(obj) \ - (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_VIDEO_OVERLAY_COMPOSITION)) - -typedef struct _GstVideoOverlayComposition GstVideoOverlayComposition; - -/** - * gst_video_overlay_composition_ref: - * @comp: a a #GstVideoOverlayComposition. - * - * Increases the refcount of the given composition by one. - * - * Note that the refcount affects the writeability - * of @comp, use gst_video_overlay_composition_make_writable() to ensure - * a composition and its rectangles can be modified. - * - * Returns: (transfer full): @comp - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstVideoOverlayComposition * -gst_video_overlay_composition_ref (GstVideoOverlayComposition * comp); -#endif - -static inline GstVideoOverlayComposition * -gst_video_overlay_composition_ref (GstVideoOverlayComposition * comp) -{ - return (GstVideoOverlayComposition *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (comp)); -} - -/** - * gst_video_overlay_composition_unref: - * @comp: (transfer full): a #GstVideoOverlayComposition. - * - * Decreases the refcount of the composition. If the refcount reaches 0, the - * composition will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void -gst_video_overlay_composition_unref (GstVideoOverlayComposition * comp); -#endif - -static inline void -gst_video_overlay_composition_unref (GstVideoOverlayComposition * comp) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (comp)); -} - -GType gst_video_overlay_composition_get_type (void); - -GstVideoOverlayComposition * gst_video_overlay_composition_copy (GstVideoOverlayComposition * comp); - -GstVideoOverlayComposition * gst_video_overlay_composition_make_writable (GstVideoOverlayComposition * comp); - -GstVideoOverlayComposition * gst_video_overlay_composition_new (GstVideoOverlayRectangle * rectangle); - -void gst_video_overlay_composition_add_rectangle (GstVideoOverlayComposition * comp, - GstVideoOverlayRectangle * rectangle); - -guint gst_video_overlay_composition_n_rectangles (GstVideoOverlayComposition * comp); - -GstVideoOverlayRectangle * gst_video_overlay_composition_get_rectangle (GstVideoOverlayComposition * comp, guint n); - -guint gst_video_overlay_composition_get_seqnum (GstVideoOverlayComposition * comp); - -/* blend composition onto raw video buffer */ - -gboolean gst_video_overlay_composition_blend (GstVideoOverlayComposition * comp, - GstVideoFrame * video_buf); - -/* attach/retrieve composition from buffers */ - -#define GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE \ - (gst_video_overlay_composition_meta_api_get_type()) -#define GST_VIDEO_OVERLAY_COMPOSITION_META_INFO \ - (gst_video_overlay_composition_meta_get_info()) - -typedef struct _GstVideoOverlayCompositionMeta GstVideoOverlayCompositionMeta; - -/** - * GstVideoOverlayCompositionMeta: - * @meta: parent #GstMeta - * @overlay: the attached #GstVideoOverlayComposition - * - * Extra buffer metadata describing image overlay data. - */ -struct _GstVideoOverlayCompositionMeta -{ - GstMeta meta; - - GstVideoOverlayComposition *overlay; -}; - -GType gst_video_overlay_composition_meta_api_get_type (void); -const GstMetaInfo *gst_video_overlay_composition_meta_get_info (void); - -GstVideoOverlayCompositionMeta * gst_buffer_add_video_overlay_composition_meta (GstBuffer * buf, - GstVideoOverlayComposition * comp); - -#define gst_buffer_get_video_overlay_composition_meta(b) \ - ((GstVideoOverlayCompositionMeta*)gst_buffer_get_meta((b),GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE)) -#define gst_buffer_remove_video_overlay_composition_meta(b,m) \ - gst_buffer_remove_meta((b),((GstMeta *) m)) - -G_END_DECLS - -#endif /* __GST_VIDEO_OVERLAY_COMPOSITION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video.h deleted file mode 100644 index cafa58c6..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/video.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_H__ -#define __GST_VIDEO_H__ - -#include - -typedef struct _GstVideoAlignment GstVideoAlignment; - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstVideoAlignment: - * @padding_left: extra pixels on the left side - * @padding_right: extra pixels on the right side - * @padding_top: extra pixels on the top - * @padding_bottom: extra pixels on the bottom - * @stride_align: array with extra alignment requirements for the strides - * - * Extra alignment paramters for the memory of video buffers. This - * structure is usually used to configure the bufferpool if it supports the - * #GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT. - */ -struct _GstVideoAlignment -{ - guint padding_top; - guint padding_bottom; - guint padding_left; - guint padding_right; - guint stride_align[GST_VIDEO_MAX_PLANES]; -}; - -void gst_video_alignment_reset (GstVideoAlignment *align); - - -/* some helper functions */ -gboolean gst_video_calculate_display_ratio (guint * dar_n, - guint * dar_d, - guint video_width, - guint video_height, - guint video_par_n, - guint video_par_d, - guint display_par_n, - guint display_par_d); - -/* convert/encode video sample from one format to another */ - -typedef void (*GstVideoConvertSampleCallback) (GstSample * sample, GError *error, gpointer user_data); - -void gst_video_convert_sample_async (GstSample * sample, - const GstCaps * to_caps, - GstClockTime timeout, - GstVideoConvertSampleCallback callback, - gpointer user_data, - GDestroyNotify destroy_notify); - -GstSample * gst_video_convert_sample (GstSample * sample, - const GstCaps * to_caps, - GstClockTime timeout, - GError ** error); -G_END_DECLS - -#endif /* __GST_VIDEO_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videocontext.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videocontext.h deleted file mode 100644 index 98d4b542..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videocontext.h +++ /dev/null @@ -1,117 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Intel - * Copyright (C) 2011 Collabora Ltd. - * Author: Nicolas Dufresne - * - * video-context.h: Video Context interface and helpers - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_CONTEXT_H__ -#define __GST_VIDEO_CONTEXT_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The GstVideoContext interface is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_CONTEXT (gst_video_context_iface_get_type ()) -#define GST_VIDEO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_CONTEXT, GstVideoContext)) -#define GST_IS_VIDEO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_CONTEXT)) -#define GST_VIDEO_CONTEXT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_CONTEXT, GstVideoContextInterface)) - -/** - * GstVideoContext: - * - * Opaque #GstVideoContext data structure. - */ -typedef struct _GstVideoContext GstVideoContext; -typedef struct _GstVideoContextInterface GstVideoContextInterface; - -/** - * GstVideoContextInterface: - * @parent: parent interface type. - * @set_context: vmethod to set video context. - * - * #GstVideoContextInterface interface. - */ -struct _GstVideoContextInterface -{ - GTypeInterface parent; - - /* virtual functions */ - void (*set_context) (GstVideoContext * context, - const gchar * type, - const GValue * value); - -}; - -GType gst_video_context_iface_get_type (void); - -/* virtual class method and associated helpers */ -void gst_video_context_set_context (GstVideoContext * context, - const gchar * type, - const GValue * value); -void gst_video_context_set_context_string (GstVideoContext * context, - const gchar * type, - const gchar * value); -void gst_video_context_set_context_pointer (GstVideoContext * context, - const gchar * type, - gpointer value); -void gst_video_context_set_context_object (GstVideoContext * context, - const gchar * type, - GObject * value); - - -/* message helpers */ -void gst_video_context_prepare (GstVideoContext *context, - const gchar ** types); - -gboolean gst_video_context_message_parse_prepare (GstMessage * message, - const gchar *** types, - GstVideoContext ** ctx); - -/* query helpers */ -GstQuery * gst_video_context_query_new (const gchar ** types); -gboolean gst_video_context_run_query (GstElement *element, - GstQuery *query); -const gchar ** gst_video_context_query_get_supported_types (GstQuery * query); -void gst_video_context_query_parse_value (GstQuery * query, - const gchar ** type, - const GValue ** value); -void gst_video_context_query_set_value (GstQuery * query, - const gchar * type, - GValue * value); -void gst_video_context_query_set_string (GstQuery * query, - const gchar * type, - const gchar * value); -void gst_video_context_query_set_pointer (GstQuery * query, - const gchar * type, - gpointer value); -void gst_video_context_query_set_object (GstQuery * query, - const gchar * type, - GObject * value); - -G_END_DECLS - -#endif /* __GST_VIDEO_CONTEXT_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videoorientation.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videoorientation.h deleted file mode 100644 index c7407b71..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videoorientation.h +++ /dev/null @@ -1,94 +0,0 @@ -/* GStreamer - * Copyright (C) 2006 Nokia - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_ORIENTATION \ - (gst_video_orientation_get_type ()) -#define GST_VIDEO_ORIENTATION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_ORIENTATION, GstVideoOrientation)) -#define GST_IS_VIDEO_ORIENTATION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_ORIENTATION)) -#define GST_VIDEO_ORIENTATION_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_ORIENTATION, GstVideoOrientationInterface)) - -/** - * GstVideoOrientation: - * - * Opaque #GstVideoOrientation data structure. - */ -typedef struct _GstVideoOrientation GstVideoOrientation; -typedef struct _GstVideoOrientationInterface GstVideoOrientationInterface; - -/** - * GstVideoOrientationInterface: - * @iface: parent interface type. - * @get_hflip: virtual method to get horizontal flipping state - * @get_vflip: virtual method to get vertical flipping state - * @get_hcenter: virtual method to get horizontal centering state - * @get_vcenter: virtual method to get vertical centering state - * @set_hflip: virtual method to set horizontal flipping state - * @set_vflip: virtual method to set vertical flipping state - * @set_hcenter: virtual method to set horizontal centering state - * @set_vcenter: virtual method to set vertical centering state - * - * #GstVideoOrientationInterface interface. - */ -struct _GstVideoOrientationInterface { - GTypeInterface iface; - - /* FIXME 0.11: fix awkward API? add some kind of get_supported flags thing - * and then just return booleans/int from all vfuncs requiring the caller - * to check the flags first */ - - /* virtual functions */ - gboolean (* get_hflip) (GstVideoOrientation *video_orientation, gboolean *flip); - gboolean (* get_vflip) (GstVideoOrientation *video_orientation, gboolean *flip); - gboolean (* get_hcenter) (GstVideoOrientation *video_orientation, gint *center); - gboolean (* get_vcenter) (GstVideoOrientation *video_orientation, gint *center); - - gboolean (* set_hflip) (GstVideoOrientation *video_orientation, gboolean flip); - gboolean (* set_vflip) (GstVideoOrientation *video_orientation, gboolean flip); - gboolean (* set_hcenter) (GstVideoOrientation *video_orientation, gint center); - gboolean (* set_vcenter) (GstVideoOrientation *video_orientation, gint center); -}; - -GType gst_video_orientation_get_type (void); - -/* virtual class function wrappers */ -gboolean gst_video_orientation_get_hflip (GstVideoOrientation *video_orientation, gboolean *flip); -gboolean gst_video_orientation_get_vflip (GstVideoOrientation *video_orientation, gboolean *flip); -gboolean gst_video_orientation_get_hcenter (GstVideoOrientation *video_orientation, gint *center); -gboolean gst_video_orientation_get_vcenter (GstVideoOrientation *video_orientation, gint *center); - -gboolean gst_video_orientation_set_hflip (GstVideoOrientation *video_orientation, gboolean flip); -gboolean gst_video_orientation_set_vflip (GstVideoOrientation *video_orientation, gboolean flip); -gboolean gst_video_orientation_set_hcenter (GstVideoOrientation *video_orientation, gint center); -gboolean gst_video_orientation_set_vcenter (GstVideoOrientation *video_orientation, gint center); - -G_END_DECLS - -#endif /* __GST_VIDEO_ORIENTATION_H__ */ diff --git a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videooverlay.h b/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videooverlay.h deleted file mode 100644 index 2c01c5d6..00000000 --- a/GstreamerHelper/x64/include/gstreamer-1.0/gst/video/videooverlay.h +++ /dev/null @@ -1,99 +0,0 @@ -/* GStreamer Video Overlay Interface - * Copyright (C) 2003 Ronald Bultje - * Copyright (C) 2003 Julien Moutte - * Copyright (C) 2011 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_OVERLAY_H__ -#define __GST_VIDEO_OVERLAY_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_OVERLAY \ - (gst_video_overlay_get_type ()) -#define GST_VIDEO_OVERLAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_OVERLAY, GstVideoOverlay)) -#define GST_IS_VIDEO_OVERLAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_OVERLAY)) -#define GST_VIDEO_OVERLAY_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_OVERLAY, GstVideoOverlayInterface)) - -/** - * GstVideoOverlay: - * - * Opaque #GstVideoOverlay interface structure - */ -typedef struct _GstVideoOverlay GstVideoOverlay; -typedef struct _GstVideoOverlayInterface GstVideoOverlayInterface; - -/** - * GstVideoOverlayInterface: - * @iface: parent interface type. - * @expose: virtual method to handle expose events - * @handle_events: virtual method to handle events - * @set_render_rectangle: virtual method to set the render rectangle - * @set_window_handle: virtual method to configure the window handle - * - * #GstVideoOverlay interface - */ -struct _GstVideoOverlayInterface { - GTypeInterface iface; - - /* virtual functions */ - void (*expose) (GstVideoOverlay *overlay); - - void (*handle_events) (GstVideoOverlay *overlay, gboolean handle_events); - - void (*set_render_rectangle) (GstVideoOverlay *overlay, - gint x, gint y, - gint width, gint height); - - void (*set_window_handle) (GstVideoOverlay *overlay, guintptr handle); -}; - -GType gst_video_overlay_get_type (void); - -/* virtual function wrappers */ - -gboolean gst_video_overlay_set_render_rectangle (GstVideoOverlay * overlay, - gint x, - gint y, - gint width, - gint height); - -void gst_video_overlay_expose (GstVideoOverlay * overlay); - -void gst_video_overlay_handle_events (GstVideoOverlay * overlay, - gboolean handle_events); - -void gst_video_overlay_set_window_handle (GstVideoOverlay * overlay, - guintptr handle); - -/* public methods to dispatch bus messages */ -void gst_video_overlay_got_window_handle (GstVideoOverlay * overlay, - guintptr handle); - -void gst_video_overlay_prepare_window_handle (GstVideoOverlay * overlay); - -gboolean gst_is_video_overlay_prepare_window_handle_message (GstMessage * msg); - -G_END_DECLS - -#endif /* __GST_VIDEO_OVERLAY_H__ */ diff --git a/GstreamerHelper/x64/lib/glib-2.0.lib b/GstreamerHelper/x64/lib/glib-2.0.lib deleted file mode 100644 index b02dd3f9c47dd43824e6c680484ed6f5ea191aaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1193670 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 Voq+UN`=Y1`R;vZF_9=@;{R0FBobCVs diff --git a/GstreamerHelper/x64/lib/glib-2.0/include/glibconfig.h b/GstreamerHelper/x64/lib/glib-2.0/include/glibconfig.h deleted file mode 100644 index 4d169fb2..00000000 --- a/GstreamerHelper/x64/lib/glib-2.0/include/glibconfig.h +++ /dev/null @@ -1,266 +0,0 @@ -/* glibconfig.h.win32.in. Originally merged from two versions of - * glibconfig.h, generated by the GLib configure script, for gcc and - * MSVC. - */ - -/* glibconfig.h - * - * This is a generated file. Please modify 'glibconfig.h.win32.in' - */ - -#ifndef __G_LIBCONFIG_H__ -#define __G_LIBCONFIG_H__ - -#include - -#include -#include - -G_BEGIN_DECLS - -#define G_MINFLOAT FLT_MIN -#define G_MAXFLOAT FLT_MAX -#define G_MINDOUBLE DBL_MIN -#define G_MAXDOUBLE DBL_MAX -#define G_MINSHORT SHRT_MIN -#define G_MAXSHORT SHRT_MAX -#define G_MAXUSHORT USHRT_MAX -#define G_MININT INT_MIN -#define G_MAXINT INT_MAX -#define G_MAXUINT UINT_MAX -#define G_MINLONG LONG_MIN -#define G_MAXLONG LONG_MAX -#define G_MAXULONG ULONG_MAX - -typedef signed char gint8; -typedef unsigned char guint8; -typedef signed short gint16; -typedef unsigned short guint16; -#define G_GINT16_MODIFIER "h" -#define G_GINT16_FORMAT "hi" -#define G_GUINT16_FORMAT "hu" -typedef signed int gint32; -typedef unsigned int guint32; -#define G_GINT32_MODIFIER "" -#define G_GINT32_FORMAT "i" -#define G_GUINT32_FORMAT "u" -#define G_HAVE_GINT64 1 /* deprecated, always true */ - -#ifndef _MSC_VER -G_GNUC_EXTENSION typedef signed long long gint64; -G_GNUC_EXTENSION typedef unsigned long long guint64; -#else /* _MSC_VER */ -typedef signed __int64 gint64; -typedef unsigned __int64 guint64; -#endif /* _MSC_VER */ - -#ifndef _MSC_VER -#define G_GINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##LL)) -#else /* _MSC_VER */ -#define G_GINT64_CONSTANT(val) (val##i64) -#endif /* _MSC_VER */ -#ifndef _MSC_VER -#define G_GUINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##ULL)) -#else /* _MSC_VER */ -#define G_GUINT64_CONSTANT(val) (val##Ui64) -#endif /* _MSC_VER */ -#define G_GINT64_MODIFIER "I64" -#define G_GINT64_FORMAT "I64i" -#define G_GUINT64_FORMAT "I64u" - -#if defined(_WIN64) || defined(_M_X64) || defined(_M_AMD64) - -#define GLIB_SIZEOF_VOID_P 8 -#define GLIB_SIZEOF_LONG 4 -#define GLIB_SIZEOF_SIZE_T 8 - -typedef signed long long gssize; -typedef unsigned long long gsize; -#define G_GSIZE_MODIFIER "I64" -#define G_GSSIZE_FORMAT "I64d" -#define G_GSIZE_FORMAT "I64u" - -#define G_MAXSIZE G_MAXUINT64 -#define G_MINSSIZE G_MININT64 -#define G_MAXSSIZE G_MAXINT64 - -#else - -#define GLIB_SIZEOF_VOID_P 4 -#define GLIB_SIZEOF_LONG 4 -#define GLIB_SIZEOF_SIZE_T 4 - -typedef signed int gssize; -typedef unsigned int gsize; -#define G_GSIZE_MODIFIER "" -#define G_GSSIZE_FORMAT "i" -#define G_GSIZE_FORMAT "u" - -#define G_MAXSIZE G_MAXUINT -#define G_MINSSIZE G_MININT -#define G_MAXSSIZE G_MAXINT - -#endif - -typedef gint64 goffset; -#define G_MINOFFSET G_MININT64 -#define G_MAXOFFSET G_MAXINT64 - -#define G_GOFFSET_MODIFIER G_GINT64_MODIFIER -#define G_GOFFSET_FORMAT G_GINT64_FORMAT -#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val) - - -#ifndef _WIN64 - -#define GPOINTER_TO_INT(p) ((gint) (p)) -#define GPOINTER_TO_UINT(p) ((guint) (p)) - -#define GINT_TO_POINTER(i) ((gpointer) (i)) -#define GUINT_TO_POINTER(u) ((gpointer) (u)) - -typedef signed int gintptr; -typedef unsigned int guintptr; - -#define G_GINTPTR_MODIFIER "" -#define G_GINTPTR_FORMAT "i" -#define G_GUINTPTR_FORMAT "u" - -#else - -#define GPOINTER_TO_INT(p) ((gint) (gint64) (p)) -#define GPOINTER_TO_UINT(p) ((guint) (guint64) (p)) - -#define GINT_TO_POINTER(i) ((gpointer) (gint64) (i)) -#define GUINT_TO_POINTER(u) ((gpointer) (guint64) (u)) - -#ifndef _MSC_VER -typedef signed long long gintptr; -typedef unsigned long long guintptr; -#else -typedef signed __int64 gintptr; -typedef unsigned __int64 guintptr; -#endif - -#define G_GINTPTR_MODIFIER "I64" -#define G_GINTPTR_FORMAT "I64i" -#define G_GUINTPTR_FORMAT "I64u" - -#endif - -#ifdef NeXT /* @#%@! NeXTStep */ -# define g_ATEXIT(proc) (!atexit (proc)) -#else -# define g_ATEXIT(proc) (atexit (proc)) -#endif - -#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END - -#define GLIB_MAJOR_VERSION 2 -#define GLIB_MINOR_VERSION 34 -#define GLIB_MICRO_VERSION 2 - -#define G_OS_WIN32 -#define G_PLATFORM_WIN32 - - -#ifndef _MSC_VER -#define G_VA_COPY va_copy -#endif /* not _MSC_VER */ - -#ifdef __cplusplus -#define G_HAVE_INLINE 1 -#else /* !__cplusplus */ -#ifndef _MSC_VER -#define G_HAVE_INLINE 1 -#endif /* _MSC_VER */ -#define G_HAVE___INLINE 1 -#if !defined(_MSC_VER) && !defined(__DMC__) -#define G_HAVE___INLINE__ 1 -#endif /* !_MSC_VER and !__DMC__ */ -#endif /* !__cplusplus */ - -#define G_CAN_INLINE 1 - -#ifndef _MSC_VER -#define G_HAVE_ISO_VARARGS 1 - -/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi - * is passed ISO vararg support is turned off, and there is no work - * around to turn it on, so we unconditionally turn it off. - */ -#if __GNUC__ == 2 && __GNUC_MINOR__ == 95 -# undef G_HAVE_ISO_VARARGS -#endif - -#define G_HAVE_GNUC_VARARGS 1 -#else /* _MSC_VER */ -/* varargs macros available since msvc8 (vs2005) */ -# if _MSC_VER >= 1400 -# define G_HAVE_ISO_VARARGS 1 -# endif -#endif /* not _MSC_VER */ -#define G_HAVE_GROWING_STACK 0 - -#define G_GNUC_INTERNAL - -#define G_THREADS_ENABLED -#define G_THREADS_IMPL_WIN32 - -#define G_ATOMIC_LOCK_FREE - -#define GINT16_TO_LE(val) ((gint16) (val)) -#define GUINT16_TO_LE(val) ((guint16) (val)) -#define GINT16_TO_BE(val) ((gint16) GUINT16_SWAP_LE_BE (val)) -#define GUINT16_TO_BE(val) (GUINT16_SWAP_LE_BE (val)) -#define GINT32_TO_LE(val) ((gint32) (val)) -#define GUINT32_TO_LE(val) ((guint32) (val)) -#define GINT32_TO_BE(val) ((gint32) GUINT32_SWAP_LE_BE (val)) -#define GUINT32_TO_BE(val) (GUINT32_SWAP_LE_BE (val)) -#define GINT64_TO_LE(val) ((gint64) (val)) -#define GUINT64_TO_LE(val) ((guint64) (val)) -#define GINT64_TO_BE(val) ((gint64) GUINT64_SWAP_LE_BE (val)) -#define GUINT64_TO_BE(val) (GUINT64_SWAP_LE_BE (val)) -#define GLONG_TO_LE(val) ((glong) GINT32_TO_LE (val)) -#define GULONG_TO_LE(val) ((gulong) GUINT32_TO_LE (val)) -#define GLONG_TO_BE(val) ((glong) GINT32_TO_BE (val)) -#define GULONG_TO_BE(val) ((gulong) GUINT32_TO_BE (val)) -#define GINT_TO_LE(val) ((gint) GINT32_TO_LE (val)) -#define GUINT_TO_LE(val) ((guint) GUINT32_TO_LE (val)) -#define GINT_TO_BE(val) ((gint) GINT32_TO_BE (val)) -#define GUINT_TO_BE(val) ((guint) GUINT32_TO_BE (val)) -#define GSIZE_TO_LE(val) ((gsize) GUINT32_TO_LE (val)) -#define GSSIZE_TO_LE(val) ((gssize) GINT32_TO_LE (val)) -#define GSIZE_TO_BE(val) ((gsize) GUINT32_TO_BE (val)) -#define GSSIZE_TO_BE(val) ((gssize) GINT32_TO_BE (val)) -#define G_BYTE_ORDER G_LITTLE_ENDIAN - -#define GLIB_SYSDEF_POLLIN =1 -#define GLIB_SYSDEF_POLLOUT =4 -#define GLIB_SYSDEF_POLLPRI =2 -#define GLIB_SYSDEF_POLLHUP =16 -#define GLIB_SYSDEF_POLLERR =8 -#define GLIB_SYSDEF_POLLNVAL =32 - -#define G_MODULE_SUFFIX "dll" - -/* A GPid is an abstraction for a process "handle". It is *not* an - * abstraction for a process identifier in general. GPid is used in - * GLib only for descendant processes spawned with the g_spawn* - * functions. On POSIX there is no "process handle" concept as such, - * but on Windows a GPid is a handle to a process, a kind of pointer, - * not a process identifier. - */ -typedef void * GPid; - -#define GLIB_SYSDEF_AF_UNIX 1 -#define GLIB_SYSDEF_AF_INET 2 -#define GLIB_SYSDEF_AF_INET6 23 - -#define GLIB_SYSDEF_MSG_OOB 1 -#define GLIB_SYSDEF_MSG_PEEK 2 -#define GLIB_SYSDEF_MSG_DONTROUTE 4 - -G_END_DECLS - -#endif /* GLIBCONFIG_H */ diff --git a/GstreamerHelper/x64/lib/gobject-2.0.lib b/GstreamerHelper/x64/lib/gobject-2.0.lib deleted file mode 100644 index 2104b94235c92d7fd321f7c91453613e23381af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323452 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 KLv)REu>Ef$q4NU( diff --git a/GstreamerHelper/x64/lib/gstreamer-1.0.lib b/GstreamerHelper/x64/lib/gstreamer-1.0.lib deleted file mode 100644 index ebd01a0bc05cda19ad740c175df1f4d893ec3d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007936 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%0AYIhHq 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 - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_H__ -#define __G_ACTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_ACTION (g_action_get_type ()) -#define G_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_ACTION, GAction)) -#define G_IS_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_ACTION)) -#define G_ACTION_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_ACTION, GActionInterface)) - -typedef struct _GActionInterface GActionInterface; - -struct _GActionInterface -{ - GTypeInterface g_iface; - - /* virtual functions */ - const gchar * (* get_name) (GAction *action); - const GVariantType * (* get_parameter_type) (GAction *action); - const GVariantType * (* get_state_type) (GAction *action); - GVariant * (* get_state_hint) (GAction *action); - - gboolean (* get_enabled) (GAction *action); - GVariant * (* get_state) (GAction *action); - - void (* change_state) (GAction *action, - GVariant *value); - void (* activate) (GAction *action, - GVariant *parameter); -}; - -GLIB_AVAILABLE_IN_2_30 -GType g_action_get_type (void) G_GNUC_CONST; - -const gchar * g_action_get_name (GAction *action); -const GVariantType * g_action_get_parameter_type (GAction *action); -const GVariantType * g_action_get_state_type (GAction *action); -GVariant * g_action_get_state_hint (GAction *action); - -gboolean g_action_get_enabled (GAction *action); -GVariant * g_action_get_state (GAction *action); - -void g_action_change_state (GAction *action, - GVariant *value); -void g_action_activate (GAction *action, - GVariant *parameter); -G_END_DECLS - -#endif /* __G_ACTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gactiongroup.h b/GstreamerHelper/x86/include/glib-2.0/gio/gactiongroup.h deleted file mode 100644 index b300aefd..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gactiongroup.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_GROUP_H__ -#define __G_ACTION_GROUP_H__ - -#include - -G_BEGIN_DECLS - - -#define G_TYPE_ACTION_GROUP (g_action_group_get_type ()) -#define G_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_ACTION_GROUP, GActionGroup)) -#define G_IS_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_ACTION_GROUP)) -#define G_ACTION_GROUP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_ACTION_GROUP, GActionGroupInterface)) - -typedef struct _GActionGroupInterface GActionGroupInterface; - -struct _GActionGroupInterface -{ - GTypeInterface g_iface; - - /* virtual functions */ - gboolean (* has_action) (GActionGroup *action_group, - const gchar *action_name); - - gchar ** (* list_actions) (GActionGroup *action_group); - - gboolean (* get_action_enabled) (GActionGroup *action_group, - const gchar *action_name); - - const GVariantType * (* get_action_parameter_type) (GActionGroup *action_group, - const gchar *action_name); - - const GVariantType * (* get_action_state_type) (GActionGroup *action_group, - const gchar *action_name); - - GVariant * (* get_action_state_hint) (GActionGroup *action_group, - const gchar *action_name); - - GVariant * (* get_action_state) (GActionGroup *action_group, - const gchar *action_name); - - void (* change_action_state) (GActionGroup *action_group, - const gchar *action_name, - GVariant *value); - - void (* activate_action) (GActionGroup *action_group, - const gchar *action_name, - GVariant *parameter); - - /* signals */ - void (* action_added) (GActionGroup *action_group, - const gchar *action_name); - void (* action_removed) (GActionGroup *action_group, - const gchar *action_name); - void (* action_enabled_changed) (GActionGroup *action_group, - const gchar *action_name, - gboolean enabled); - void (* action_state_changed) (GActionGroup *action_group, - const gchar *action_name, - GVariant *state); - - /* more virtual functions */ - gboolean (* query_action) (GActionGroup *action_group, - const gchar *action_name, - gboolean *enabled, - const GVariantType **parameter_type, - const GVariantType **state_type, - GVariant **state_hint, - GVariant **state); -}; - -GType g_action_group_get_type (void) G_GNUC_CONST; - -gboolean g_action_group_has_action (GActionGroup *action_group, - const gchar *action_name); -gchar ** g_action_group_list_actions (GActionGroup *action_group); - -const GVariantType * g_action_group_get_action_parameter_type (GActionGroup *action_group, - const gchar *action_name); -const GVariantType * g_action_group_get_action_state_type (GActionGroup *action_group, - const gchar *action_name); -GVariant * g_action_group_get_action_state_hint (GActionGroup *action_group, - const gchar *action_name); - -gboolean g_action_group_get_action_enabled (GActionGroup *action_group, - const gchar *action_name); - -GVariant * g_action_group_get_action_state (GActionGroup *action_group, - const gchar *action_name); -void g_action_group_change_action_state (GActionGroup *action_group, - const gchar *action_name, - GVariant *value); - -void g_action_group_activate_action (GActionGroup *action_group, - const gchar *action_name, - GVariant *parameter); - -/* signals */ -void g_action_group_action_added (GActionGroup *action_group, - const gchar *action_name); -void g_action_group_action_removed (GActionGroup *action_group, - const gchar *action_name); -void g_action_group_action_enabled_changed (GActionGroup *action_group, - const gchar *action_name, - gboolean enabled); - -void g_action_group_action_state_changed (GActionGroup *action_group, - const gchar *action_name, - GVariant *state); - -GLIB_AVAILABLE_IN_2_32 -gboolean g_action_group_query_action (GActionGroup *action_group, - const gchar *action_name, - gboolean *enabled, - const GVariantType **parameter_type, - const GVariantType **state_type, - GVariant **state_hint, - GVariant **state); - -G_END_DECLS - -#endif /* __G_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gactiongroupexporter.h b/GstreamerHelper/x86/include/glib-2.0/gio/gactiongroupexporter.h deleted file mode 100644 index eaa18e66..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gactiongroupexporter.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * Copyright © 2011 Canonical Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_GROUP_EXPORTER_H__ -#define __G_ACTION_GROUP_EXPORTER_H__ - -#include - -G_BEGIN_DECLS - -GLIB_AVAILABLE_IN_2_32 -guint g_dbus_connection_export_action_group (GDBusConnection *connection, - const gchar *object_path, - GActionGroup *action_group, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -void g_dbus_connection_unexport_action_group (GDBusConnection *connection, - guint export_id); - -G_END_DECLS - -#endif /* __G_ACTION_GROUP_EXPORTER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gactionmap.h b/GstreamerHelper/x86/include/glib-2.0/gio/gactionmap.h deleted file mode 100644 index 8e5993e2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gactionmap.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ACTION_MAP_H__ -#define __G_ACTION_MAP_H__ - -#include - -G_BEGIN_DECLS - - -#define G_TYPE_ACTION_MAP (g_action_map_get_type ()) -#define G_ACTION_MAP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_ACTION_MAP, GActionMap)) -#define G_IS_ACTION_MAP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_ACTION_MAP)) -#define G_ACTION_MAP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_ACTION_MAP, GActionMapInterface)) - -typedef struct _GActionMapInterface GActionMapInterface; -typedef struct _GActionEntry GActionEntry; - -struct _GActionMapInterface -{ - GTypeInterface g_iface; - - GAction * (* lookup_action) (GActionMap *action_map, - const gchar *action_name); - void (* add_action) (GActionMap *action_map, - GAction *action); - void (* remove_action) (GActionMap *action_map, - const gchar *action_name); -}; - -struct _GActionEntry -{ - const gchar *name; - - void (* activate) (GSimpleAction *action, - GVariant *parameter, - gpointer user_data); - - const gchar *parameter_type; - - const gchar *state; - - void (* change_state) (GSimpleAction *action, - GVariant *value, - gpointer user_data); - - /*< private >*/ - gsize padding[3]; -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_action_map_get_type (void) G_GNUC_CONST; - -GAction * g_action_map_lookup_action (GActionMap *action_map, - const gchar *action_name); -void g_action_map_add_action (GActionMap *action_map, - GAction *action); -void g_action_map_remove_action (GActionMap *action_map, - const gchar *action_name); -void g_action_map_add_action_entries (GActionMap *action_map, - const GActionEntry *entries, - gint n_entries, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_ACTION_MAP_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gappinfo.h b/GstreamerHelper/x86/include/glib-2.0/gio/gappinfo.h deleted file mode 100644 index 578f62f1..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gappinfo.h +++ /dev/null @@ -1,262 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_APP_INFO_H__ -#define __G_APP_INFO_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_APP_INFO (g_app_info_get_type ()) -#define G_APP_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_APP_INFO, GAppInfo)) -#define G_IS_APP_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_APP_INFO)) -#define G_APP_INFO_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_APP_INFO, GAppInfoIface)) - -#define G_TYPE_APP_LAUNCH_CONTEXT (g_app_launch_context_get_type ()) -#define G_APP_LAUNCH_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContext)) -#define G_APP_LAUNCH_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContextClass)) -#define G_IS_APP_LAUNCH_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_APP_LAUNCH_CONTEXT)) -#define G_IS_APP_LAUNCH_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_APP_LAUNCH_CONTEXT)) -#define G_APP_LAUNCH_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContextClass)) - -typedef struct _GAppLaunchContextClass GAppLaunchContextClass; -typedef struct _GAppLaunchContextPrivate GAppLaunchContextPrivate; - -/** - * GAppInfo: - * - * Information about an installed application and methods to launch - * it (with file arguments). - */ - -/** - * GAppInfoIface: - * @g_iface: The parent interface. - * @dup: Copies a #GAppInfo. - * @equal: Checks two #GAppInfos for equality. - * @get_id: Gets a string identifier for a #GAppInfo. - * @get_name: Gets the name of the application for a #GAppInfo. - * @get_description: Gets a short description for the application described by the #GAppInfo. - * @get_executable: Gets the executable name for the #GAppInfo. - * @get_icon: Gets the #GIcon for the #GAppInfo. - * @launch: Launches an application specified by the #GAppInfo. - * @supports_uris: Indicates whether the application specified supports launching URIs. - * @supports_files: Indicates whether the application specified accepts filename arguments. - * @launch_uris: Launches an application with a list of URIs. - * @should_show: Returns whether an application should be shown (e.g. when getting a list of installed applications). - * - * FreeDesktop.Org Startup Notification Specification. - * @set_as_default_for_type: Sets an application as default for a given content type. - * @set_as_default_for_extension: Sets an application as default for a given file extension. - * @add_supports_type: Adds to the #GAppInfo information about supported file types. - * @can_remove_supports_type: Checks for support for removing supported file types from a #GAppInfo. - * @remove_supports_type: Removes a supported application type from a #GAppInfo. - * @can_delete: Checks if a #GAppInfo can be deleted. Since 2.20 - * @do_delete: Deletes a #GAppInfo. Since 2.20 - * @get_commandline: Gets the commandline for the #GAppInfo. Since 2.20 - * @get_display_name: Gets the display name for the #GAppInfo. Since 2.24 - * @set_as_last_used_for_type: Sets the application as the last used. See g_app_info_set_as_last_used_for_type(). - * - * Application Information interface, for operating system portability. - */ -typedef struct _GAppInfoIface GAppInfoIface; - -struct _GAppInfoIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GAppInfo * (* dup) (GAppInfo *appinfo); - gboolean (* equal) (GAppInfo *appinfo1, - GAppInfo *appinfo2); - const char * (* get_id) (GAppInfo *appinfo); - const char * (* get_name) (GAppInfo *appinfo); - const char * (* get_description) (GAppInfo *appinfo); - const char * (* get_executable) (GAppInfo *appinfo); - GIcon * (* get_icon) (GAppInfo *appinfo); - gboolean (* launch) (GAppInfo *appinfo, - GList *files, - GAppLaunchContext *launch_context, - GError **error); - gboolean (* supports_uris) (GAppInfo *appinfo); - gboolean (* supports_files) (GAppInfo *appinfo); - gboolean (* launch_uris) (GAppInfo *appinfo, - GList *uris, - GAppLaunchContext *launch_context, - GError **error); - gboolean (* should_show) (GAppInfo *appinfo); - - /* For changing associations */ - gboolean (* set_as_default_for_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - gboolean (* set_as_default_for_extension) (GAppInfo *appinfo, - const char *extension, - GError **error); - gboolean (* add_supports_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - gboolean (* can_remove_supports_type) (GAppInfo *appinfo); - gboolean (* remove_supports_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - gboolean (* can_delete) (GAppInfo *appinfo); - gboolean (* do_delete) (GAppInfo *appinfo); - const char * (* get_commandline) (GAppInfo *appinfo); - const char * (* get_display_name) (GAppInfo *appinfo); - gboolean (* set_as_last_used_for_type) (GAppInfo *appinfo, - const char *content_type, - GError **error); - const char ** (* get_supported_types) (GAppInfo *appinfo); -}; - -GType g_app_info_get_type (void) G_GNUC_CONST; -GAppInfo * g_app_info_create_from_commandline (const char *commandline, - const char *application_name, - GAppInfoCreateFlags flags, - GError **error); -GAppInfo * g_app_info_dup (GAppInfo *appinfo); -gboolean g_app_info_equal (GAppInfo *appinfo1, - GAppInfo *appinfo2); -const char *g_app_info_get_id (GAppInfo *appinfo); -const char *g_app_info_get_name (GAppInfo *appinfo); -const char *g_app_info_get_display_name (GAppInfo *appinfo); -const char *g_app_info_get_description (GAppInfo *appinfo); -const char *g_app_info_get_executable (GAppInfo *appinfo); -const char *g_app_info_get_commandline (GAppInfo *appinfo); -GIcon * g_app_info_get_icon (GAppInfo *appinfo); -gboolean g_app_info_launch (GAppInfo *appinfo, - GList *files, - GAppLaunchContext *launch_context, - GError **error); -gboolean g_app_info_supports_uris (GAppInfo *appinfo); -gboolean g_app_info_supports_files (GAppInfo *appinfo); -gboolean g_app_info_launch_uris (GAppInfo *appinfo, - GList *uris, - GAppLaunchContext *launch_context, - GError **error); -gboolean g_app_info_should_show (GAppInfo *appinfo); - -gboolean g_app_info_set_as_default_for_type (GAppInfo *appinfo, - const char *content_type, - GError **error); -gboolean g_app_info_set_as_default_for_extension (GAppInfo *appinfo, - const char *extension, - GError **error); -gboolean g_app_info_add_supports_type (GAppInfo *appinfo, - const char *content_type, - GError **error); -gboolean g_app_info_can_remove_supports_type (GAppInfo *appinfo); -gboolean g_app_info_remove_supports_type (GAppInfo *appinfo, - const char *content_type, - GError **error); -GLIB_AVAILABLE_IN_2_34 -const char **g_app_info_get_supported_types (GAppInfo *appinfo); - -gboolean g_app_info_can_delete (GAppInfo *appinfo); -gboolean g_app_info_delete (GAppInfo *appinfo); - -gboolean g_app_info_set_as_last_used_for_type (GAppInfo *appinfo, - const char *content_type, - GError **error); - -GList * g_app_info_get_all (void); -GList * g_app_info_get_all_for_type (const char *content_type); -GList * g_app_info_get_recommended_for_type (const gchar *content_type); -GList * g_app_info_get_fallback_for_type (const gchar *content_type); - -void g_app_info_reset_type_associations (const char *content_type); -GAppInfo *g_app_info_get_default_for_type (const char *content_type, - gboolean must_support_uris); -GAppInfo *g_app_info_get_default_for_uri_scheme (const char *uri_scheme); - -gboolean g_app_info_launch_default_for_uri (const char *uri, - GAppLaunchContext *launch_context, - GError **error); - -/** - * GAppLaunchContext: - * - * Integrating the launch with the launching application. This is used to - * handle for instance startup notification and launching the new application - * on the same screen as the launching window. - */ -struct _GAppLaunchContext -{ - GObject parent_instance; - - /*< private >*/ - GAppLaunchContextPrivate *priv; -}; - -struct _GAppLaunchContextClass -{ - GObjectClass parent_class; - - char * (* get_display) (GAppLaunchContext *context, - GAppInfo *info, - GList *files); - char * (* get_startup_notify_id) (GAppLaunchContext *context, - GAppInfo *info, - GList *files); - void (* launch_failed) (GAppLaunchContext *context, - const char *startup_notify_id); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_app_launch_context_get_type (void) G_GNUC_CONST; -GAppLaunchContext *g_app_launch_context_new (void); - -GLIB_AVAILABLE_IN_2_32 -void g_app_launch_context_setenv (GAppLaunchContext *context, - const char *variable, - const char *value); -GLIB_AVAILABLE_IN_2_32 -void g_app_launch_context_unsetenv (GAppLaunchContext *context, - const char *variable); -GLIB_AVAILABLE_IN_2_32 -char ** g_app_launch_context_get_environment (GAppLaunchContext *context); - -char * g_app_launch_context_get_display (GAppLaunchContext *context, - GAppInfo *info, - GList *files); -char * g_app_launch_context_get_startup_notify_id (GAppLaunchContext *context, - GAppInfo *info, - GList *files); -void g_app_launch_context_launch_failed (GAppLaunchContext *context, - const char * startup_notify_id); - -G_END_DECLS - -#endif /* __G_APP_INFO_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gapplication.h b/GstreamerHelper/x86/include/glib-2.0/gio/gapplication.h deleted file mode 100644 index 087682eb..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gapplication.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_APPLICATION_H__ -#define __G_APPLICATION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_APPLICATION (g_application_get_type ()) -#define G_APPLICATION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_APPLICATION, GApplication)) -#define G_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_APPLICATION, GApplicationClass)) -#define G_IS_APPLICATION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_APPLICATION)) -#define G_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_APPLICATION)) -#define G_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_APPLICATION, GApplicationClass)) - -typedef struct _GApplicationPrivate GApplicationPrivate; -typedef struct _GApplicationClass GApplicationClass; - -/** - * GApplication: - * - * Since: 2.28 - */ -struct _GApplication -{ - /*< private >*/ - GObject parent_instance; - - GApplicationPrivate *priv; -}; - -struct _GApplicationClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - /* signals */ - void (* startup) (GApplication *application); - - void (* activate) (GApplication *application); - - void (* open) (GApplication *application, - GFile **files, - gint n_files, - const gchar *hint); - - int (* command_line) (GApplication *application, - GApplicationCommandLine *command_line); - - /* vfuncs */ - gboolean (* local_command_line) (GApplication *application, - gchar ***arguments, - int *exit_status); - - void (* before_emit) (GApplication *application, - GVariant *platform_data); - void (* after_emit) (GApplication *application, - GVariant *platform_data); - void (* add_platform_data) (GApplication *application, - GVariantBuilder *builder); - void (* quit_mainloop) (GApplication *application); - void (* run_mainloop) (GApplication *application); - void (* shutdown) (GApplication *application); - - gboolean (* dbus_register) (GApplication *application, - GDBusConnection *connection, - const gchar *object_path, - GError **error); - void (* dbus_unregister) (GApplication *application, - GDBusConnection *connection, - const gchar *object_path); - - /*< private >*/ - gpointer padding[9]; -}; - -GType g_application_get_type (void) G_GNUC_CONST; - -gboolean g_application_id_is_valid (const gchar *application_id); - -GApplication * g_application_new (const gchar *application_id, - GApplicationFlags flags); - -const gchar * g_application_get_application_id (GApplication *application); -void g_application_set_application_id (GApplication *application, - const gchar *application_id); - -GLIB_AVAILABLE_IN_2_34 -GDBusConnection * g_application_get_dbus_connection (GApplication *application); -GLIB_AVAILABLE_IN_2_34 -const gchar * g_application_get_dbus_object_path (GApplication *application); - -guint g_application_get_inactivity_timeout (GApplication *application); -void g_application_set_inactivity_timeout (GApplication *application, - guint inactivity_timeout); - -GApplicationFlags g_application_get_flags (GApplication *application); -void g_application_set_flags (GApplication *application, - GApplicationFlags flags); - -GLIB_DEPRECATED -void g_application_set_action_group (GApplication *application, - GActionGroup *action_group); - -gboolean g_application_get_is_registered (GApplication *application); -gboolean g_application_get_is_remote (GApplication *application); - -gboolean g_application_register (GApplication *application, - GCancellable *cancellable, - GError **error); - -void g_application_hold (GApplication *application); -void g_application_release (GApplication *application); - -void g_application_activate (GApplication *application); - -void g_application_open (GApplication *application, - GFile **files, - gint n_files, - const gchar *hint); - -int g_application_run (GApplication *application, - int argc, - char **argv); - -void g_application_quit (GApplication *application); - -GLIB_AVAILABLE_IN_2_32 -GApplication * g_application_get_default (void); -GLIB_AVAILABLE_IN_2_32 -void g_application_set_default (GApplication *application); - -G_END_DECLS - -#endif /* __G_APPLICATION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gapplicationcommandline.h b/GstreamerHelper/x86/include/glib-2.0/gio/gapplicationcommandline.h deleted file mode 100644 index 25def211..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gapplicationcommandline.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_APPLICATION_COMMAND_LINE_H__ -#define __G_APPLICATION_COMMAND_LINE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_APPLICATION_COMMAND_LINE (g_application_command_line_get_type ()) -#define G_APPLICATION_COMMAND_LINE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_APPLICATION_COMMAND_LINE, \ - GApplicationCommandLine)) -#define G_APPLICATION_COMMAND_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_APPLICATION_COMMAND_LINE, \ - GApplicationCommandLineClass)) -#define G_IS_APPLICATION_COMMAND_LINE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_APPLICATION_COMMAND_LINE)) -#define G_IS_APPLICATION_COMMAND_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_APPLICATION_COMMAND_LINE)) -#define G_APPLICATION_COMMAND_LINE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_APPLICATION_COMMAND_LINE, \ - GApplicationCommandLineClass)) - -typedef struct _GApplicationCommandLinePrivate GApplicationCommandLinePrivate; -typedef struct _GApplicationCommandLineClass GApplicationCommandLineClass; - -struct _GApplicationCommandLine -{ - /*< private >*/ - GObject parent_instance; - - GApplicationCommandLinePrivate *priv; -}; - -struct _GApplicationCommandLineClass -{ - /*< private >*/ - GObjectClass parent_class; - - void (* print_literal) (GApplicationCommandLine *cmdline, - const gchar *message); - void (* printerr_literal) (GApplicationCommandLine *cmdline, - const gchar *message); - - gpointer padding[12]; -}; - -GType g_application_command_line_get_type (void) G_GNUC_CONST; - -gchar ** g_application_command_line_get_arguments (GApplicationCommandLine *cmdline, - int *argc); - -const gchar * const * g_application_command_line_get_environ (GApplicationCommandLine *cmdline); - -const gchar * g_application_command_line_getenv (GApplicationCommandLine *cmdline, - const gchar *name); - -const gchar * g_application_command_line_get_cwd (GApplicationCommandLine *cmdline); - -gboolean g_application_command_line_get_is_remote (GApplicationCommandLine *cmdline); - -void g_application_command_line_print (GApplicationCommandLine *cmdline, - const gchar *format, - ...) G_GNUC_PRINTF(2, 3); -void g_application_command_line_printerr (GApplicationCommandLine *cmdline, - const gchar *format, - ...) G_GNUC_PRINTF(2, 3); - -int g_application_command_line_get_exit_status (GApplicationCommandLine *cmdline); -void g_application_command_line_set_exit_status (GApplicationCommandLine *cmdline, - int exit_status); - -GVariant * g_application_command_line_get_platform_data (GApplicationCommandLine *cmdline); - -G_END_DECLS - -#endif /* __G_APPLICATION_COMMAND_LINE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gasyncinitable.h b/GstreamerHelper/x86/include/glib-2.0/gio/gasyncinitable.h deleted file mode 100644 index 84428215..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gasyncinitable.h +++ /dev/null @@ -1,119 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ASYNC_INITABLE_H__ -#define __G_ASYNC_INITABLE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_ASYNC_INITABLE (g_async_initable_get_type ()) -#define G_ASYNC_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ASYNC_INITABLE, GAsyncInitable)) -#define G_IS_ASYNC_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ASYNC_INITABLE)) -#define G_ASYNC_INITABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ASYNC_INITABLE, GAsyncInitableIface)) -#define G_TYPE_IS_ASYNC_INITABLE(type) (g_type_is_a ((type), G_TYPE_ASYNC_INITABLE)) - -/** - * GAsyncInitable: - * - * Interface for asynchronously initializable objects. - * - * Since: 2.22 - **/ -typedef struct _GAsyncInitableIface GAsyncInitableIface; - -/** - * GAsyncInitableIface: - * @g_iface: The parent interface. - * @init_async: Starts initialization of the object. - * @init_finish: Finishes initialization of the object. - * - * Provides an interface for asynchronous initializing object such that - * initialization may fail. - * - * Since: 2.22 - **/ -struct _GAsyncInitableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - void (* init_async) (GAsyncInitable *initable, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* init_finish) (GAsyncInitable *initable, - GAsyncResult *res, - GError **error); -}; - -GType g_async_initable_get_type (void) G_GNUC_CONST; - - -void g_async_initable_init_async (GAsyncInitable *initable, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_async_initable_init_finish (GAsyncInitable *initable, - GAsyncResult *res, - GError **error); - -void g_async_initable_new_async (GType object_type, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data, - const gchar *first_property_name, - ...); -void g_async_initable_newv_async (GType object_type, - guint n_parameters, - GParameter *parameters, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -void g_async_initable_new_valist_async (GType object_type, - const gchar *first_property_name, - va_list var_args, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GObject *g_async_initable_new_finish (GAsyncInitable *initable, - GAsyncResult *res, - GError **error); - - - -G_END_DECLS - - -#endif /* __G_ASYNC_INITABLE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gasyncresult.h b/GstreamerHelper/x86/include/glib-2.0/gio/gasyncresult.h deleted file mode 100644 index e898401a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gasyncresult.h +++ /dev/null @@ -1,84 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ASYNC_RESULT_H__ -#define __G_ASYNC_RESULT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_ASYNC_RESULT (g_async_result_get_type ()) -#define G_ASYNC_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ASYNC_RESULT, GAsyncResult)) -#define G_IS_ASYNC_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ASYNC_RESULT)) -#define G_ASYNC_RESULT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ASYNC_RESULT, GAsyncResultIface)) - -/** - * GAsyncResult: - * - * Holds results information for an asynchronous operation, - * usually passed directly to a asynchronous _finish() operation. - **/ -typedef struct _GAsyncResultIface GAsyncResultIface; - - -/** - * GAsyncResultIface: - * @g_iface: The parent interface. - * @get_user_data: Gets the user data passed to the callback. - * @get_source_object: Gets the source object that issued the asynchronous operation. - * @is_tagged: Checks if a result is tagged with a particular source. - * - * Interface definition for #GAsyncResult. - **/ -struct _GAsyncResultIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - gpointer (* get_user_data) (GAsyncResult *res); - GObject * (* get_source_object) (GAsyncResult *res); - - gboolean (* is_tagged) (GAsyncResult *res, - gpointer tag); -}; - -GType g_async_result_get_type (void) G_GNUC_CONST; - -gpointer g_async_result_get_user_data (GAsyncResult *res); -GObject *g_async_result_get_source_object (GAsyncResult *res); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_async_result_legacy_propagate_error (GAsyncResult *res, - GError **error); -GLIB_AVAILABLE_IN_2_34 -gboolean g_async_result_is_tagged (GAsyncResult *res, - gpointer source_tag); - -G_END_DECLS - -#endif /* __G_ASYNC_RESULT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gbufferedinputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gbufferedinputstream.h deleted file mode 100644 index 029426c2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gbufferedinputstream.h +++ /dev/null @@ -1,123 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BUFFERED_INPUT_STREAM_H__ -#define __G_BUFFERED_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_BUFFERED_INPUT_STREAM (g_buffered_input_stream_get_type ()) -#define G_BUFFERED_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStream)) -#define G_BUFFERED_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStreamClass)) -#define G_IS_BUFFERED_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_BUFFERED_INPUT_STREAM)) -#define G_IS_BUFFERED_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_BUFFERED_INPUT_STREAM)) -#define G_BUFFERED_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStreamClass)) - -/** - * GBufferedInputStream: - * - * Implements #GFilterInputStream with a sized input buffer. - **/ -typedef struct _GBufferedInputStreamClass GBufferedInputStreamClass; -typedef struct _GBufferedInputStreamPrivate GBufferedInputStreamPrivate; - -struct _GBufferedInputStream -{ - GFilterInputStream parent_instance; - - /*< private >*/ - GBufferedInputStreamPrivate *priv; -}; - -struct _GBufferedInputStreamClass -{ - GFilterInputStreamClass parent_class; - - gssize (* fill) (GBufferedInputStream *stream, - gssize count, - GCancellable *cancellable, - GError **error); - - /* Async ops: (optional in derived classes) */ - void (* fill_async) (GBufferedInputStream *stream, - gssize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* fill_finish) (GBufferedInputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - - -GType g_buffered_input_stream_get_type (void) G_GNUC_CONST; -GInputStream* g_buffered_input_stream_new (GInputStream *base_stream); -GInputStream* g_buffered_input_stream_new_sized (GInputStream *base_stream, - gsize size); - -gsize g_buffered_input_stream_get_buffer_size (GBufferedInputStream *stream); -void g_buffered_input_stream_set_buffer_size (GBufferedInputStream *stream, - gsize size); -gsize g_buffered_input_stream_get_available (GBufferedInputStream *stream); -gsize g_buffered_input_stream_peek (GBufferedInputStream *stream, - void *buffer, - gsize offset, - gsize count); -const void* g_buffered_input_stream_peek_buffer (GBufferedInputStream *stream, - gsize *count); - -gssize g_buffered_input_stream_fill (GBufferedInputStream *stream, - gssize count, - GCancellable *cancellable, - GError **error); -void g_buffered_input_stream_fill_async (GBufferedInputStream *stream, - gssize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_buffered_input_stream_fill_finish (GBufferedInputStream *stream, - GAsyncResult *result, - GError **error); - -int g_buffered_input_stream_read_byte (GBufferedInputStream *stream, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_BUFFERED_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gbufferedoutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gbufferedoutputstream.h deleted file mode 100644 index 0d84790b..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gbufferedoutputstream.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BUFFERED_OUTPUT_STREAM_H__ -#define __G_BUFFERED_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_BUFFERED_OUTPUT_STREAM (g_buffered_output_stream_get_type ()) -#define G_BUFFERED_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStream)) -#define G_BUFFERED_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStreamClass)) -#define G_IS_BUFFERED_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_BUFFERED_OUTPUT_STREAM)) -#define G_IS_BUFFERED_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_BUFFERED_OUTPUT_STREAM)) -#define G_BUFFERED_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStreamClass)) - -/** - * GBufferedOutputStream: - * - * An implementation of #GFilterOutputStream with a sized buffer. - **/ -typedef struct _GBufferedOutputStreamClass GBufferedOutputStreamClass; -typedef struct _GBufferedOutputStreamPrivate GBufferedOutputStreamPrivate; - -struct _GBufferedOutputStream -{ - GFilterOutputStream parent_instance; - - /*< protected >*/ - GBufferedOutputStreamPrivate *priv; -}; - -struct _GBufferedOutputStreamClass -{ - GFilterOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); -}; - - -GType g_buffered_output_stream_get_type (void) G_GNUC_CONST; -GOutputStream* g_buffered_output_stream_new (GOutputStream *base_stream); -GOutputStream* g_buffered_output_stream_new_sized (GOutputStream *base_stream, - gsize size); -gsize g_buffered_output_stream_get_buffer_size (GBufferedOutputStream *stream); -void g_buffered_output_stream_set_buffer_size (GBufferedOutputStream *stream, - gsize size); -gboolean g_buffered_output_stream_get_auto_grow (GBufferedOutputStream *stream); -void g_buffered_output_stream_set_auto_grow (GBufferedOutputStream *stream, - gboolean auto_grow); - -G_END_DECLS - -#endif /* __G_BUFFERED_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gcancellable.h b/GstreamerHelper/x86/include/glib-2.0/gio/gcancellable.h deleted file mode 100644 index d8fa6336..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gcancellable.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CANCELLABLE_H__ -#define __G_CANCELLABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_CANCELLABLE (g_cancellable_get_type ()) -#define G_CANCELLABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CANCELLABLE, GCancellable)) -#define G_CANCELLABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CANCELLABLE, GCancellableClass)) -#define G_IS_CANCELLABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CANCELLABLE)) -#define G_IS_CANCELLABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CANCELLABLE)) -#define G_CANCELLABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CANCELLABLE, GCancellableClass)) - -/** - * GCancellable: - * - * Allows actions to be cancelled. - */ -typedef struct _GCancellableClass GCancellableClass; -typedef struct _GCancellablePrivate GCancellablePrivate; - -struct _GCancellable -{ - GObject parent_instance; - - /*< private >*/ - GCancellablePrivate *priv; -}; - -struct _GCancellableClass -{ - GObjectClass parent_class; - - void (* cancelled) (GCancellable *cancellable); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_cancellable_get_type (void) G_GNUC_CONST; - -GCancellable *g_cancellable_new (void); - -/* These are only safe to call inside a cancellable op */ -gboolean g_cancellable_is_cancelled (GCancellable *cancellable); -gboolean g_cancellable_set_error_if_cancelled (GCancellable *cancellable, - GError **error); - -int g_cancellable_get_fd (GCancellable *cancellable); -gboolean g_cancellable_make_pollfd (GCancellable *cancellable, - GPollFD *pollfd); -void g_cancellable_release_fd (GCancellable *cancellable); - -GSource * g_cancellable_source_new (GCancellable *cancellable); - -GCancellable *g_cancellable_get_current (void); -void g_cancellable_push_current (GCancellable *cancellable); -void g_cancellable_pop_current (GCancellable *cancellable); -void g_cancellable_reset (GCancellable *cancellable); -gulong g_cancellable_connect (GCancellable *cancellable, - GCallback callback, - gpointer data, - GDestroyNotify data_destroy_func); -void g_cancellable_disconnect (GCancellable *cancellable, - gulong handler_id); - - -/* This is safe to call from another thread */ -void g_cancellable_cancel (GCancellable *cancellable); - -G_END_DECLS - -#endif /* __G_CANCELLABLE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gcharsetconverter.h b/GstreamerHelper/x86/include/glib-2.0/gio/gcharsetconverter.h deleted file mode 100644 index 5198d463..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gcharsetconverter.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CHARSET_CONVERTER_H__ -#define __G_CHARSET_CONVERTER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_CHARSET_CONVERTER (g_charset_converter_get_type ()) -#define G_CHARSET_CONVERTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CHARSET_CONVERTER, GCharsetConverter)) -#define G_CHARSET_CONVERTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CHARSET_CONVERTER, GCharsetConverterClass)) -#define G_IS_CHARSET_CONVERTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CHARSET_CONVERTER)) -#define G_IS_CHARSET_CONVERTER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CHARSET_CONVERTER)) -#define G_CHARSET_CONVERTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CHARSET_CONVERTER, GCharsetConverterClass)) - -typedef struct _GCharsetConverterClass GCharsetConverterClass; - -struct _GCharsetConverterClass -{ - GObjectClass parent_class; -}; - -GType g_charset_converter_get_type (void) G_GNUC_CONST; - -GCharsetConverter *g_charset_converter_new (const gchar *to_charset, - const gchar *from_charset, - GError **error); -void g_charset_converter_set_use_fallback (GCharsetConverter *converter, - gboolean use_fallback); -gboolean g_charset_converter_get_use_fallback (GCharsetConverter *converter); -guint g_charset_converter_get_num_fallbacks (GCharsetConverter *converter); - -G_END_DECLS - -#endif /* __G_CHARSET_CONVERTER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gcontenttype.h b/GstreamerHelper/x86/include/glib-2.0/gio/gcontenttype.h deleted file mode 100644 index fb4b8619..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gcontenttype.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONTENT_TYPE_H__ -#define __G_CONTENT_TYPE_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_content_type_equals (const gchar *type1, - const gchar *type2); -gboolean g_content_type_is_a (const gchar *type, - const gchar *supertype); -gboolean g_content_type_is_unknown (const gchar *type); -gchar * g_content_type_get_description (const gchar *type); -gchar * g_content_type_get_mime_type (const gchar *type); -GIcon * g_content_type_get_icon (const gchar *type); -GIcon * g_content_type_get_symbolic_icon (const gchar *type); -GLIB_AVAILABLE_IN_2_34 -gchar * g_content_type_get_generic_icon_name (const gchar *type); - -gboolean g_content_type_can_be_executable (const gchar *type); - -gchar * g_content_type_from_mime_type (const gchar *mime_type); - -gchar * g_content_type_guess (const gchar *filename, - const guchar *data, - gsize data_size, - gboolean *result_uncertain); - -gchar ** g_content_type_guess_for_tree (GFile *root); - -GList * g_content_types_get_registered (void); - -G_END_DECLS - -#endif /* __G_CONTENT_TYPE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gconverter.h b/GstreamerHelper/x86/include/glib-2.0/gio/gconverter.h deleted file mode 100644 index 6770aaf9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gconverter.h +++ /dev/null @@ -1,95 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERTER_H__ -#define __G_CONVERTER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_CONVERTER (g_converter_get_type ()) -#define G_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_CONVERTER, GConverter)) -#define G_IS_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_CONVERTER)) -#define G_CONVERTER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_CONVERTER, GConverterIface)) - -/** - * GConverter: - * - * Seek object for streaming operations. - * - * Since: 2.24 - **/ -typedef struct _GConverterIface GConverterIface; - -/** - * GConverterIface: - * @g_iface: The parent interface. - * @convert: Converts data. - * @reset: Reverts the internal state of the converter to its initial state. - * - * Provides an interface for converting data from one type - * to another type. The conversion can be stateful - * and may fail at any place. - * - * Since: 2.24 - **/ -struct _GConverterIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GConverterResult (* convert) (GConverter *converter, - const void *inbuf, - gsize inbuf_size, - void *outbuf, - gsize outbuf_size, - GConverterFlags flags, - gsize *bytes_read, - gsize *bytes_written, - GError **error); - void (* reset) (GConverter *converter); -}; - -GType g_converter_get_type (void) G_GNUC_CONST; - -GConverterResult g_converter_convert (GConverter *converter, - const void *inbuf, - gsize inbuf_size, - void *outbuf, - gsize outbuf_size, - GConverterFlags flags, - gsize *bytes_read, - gsize *bytes_written, - GError **error); -void g_converter_reset (GConverter *converter); - - -G_END_DECLS - - -#endif /* __G_CONVERTER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gconverterinputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gconverterinputstream.h deleted file mode 100644 index 8e4f1d4f..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gconverterinputstream.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERTER_INPUT_STREAM_H__ -#define __G_CONVERTER_INPUT_STREAM_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_CONVERTER_INPUT_STREAM (g_converter_input_stream_get_type ()) -#define G_CONVERTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CONVERTER_INPUT_STREAM, GConverterInputStream)) -#define G_CONVERTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CONVERTER_INPUT_STREAM, GConverterInputStreamClass)) -#define G_IS_CONVERTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CONVERTER_INPUT_STREAM)) -#define G_IS_CONVERTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CONVERTER_INPUT_STREAM)) -#define G_CONVERTER_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CONVERTER_INPUT_STREAM, GConverterInputStreamClass)) - -/** - * GConverterInputStream: - * - * An implementation of #GFilterInputStream that allows data - * conversion. - **/ -typedef struct _GConverterInputStreamClass GConverterInputStreamClass; -typedef struct _GConverterInputStreamPrivate GConverterInputStreamPrivate; - -struct _GConverterInputStream -{ - GFilterInputStream parent_instance; - - /*< private >*/ - GConverterInputStreamPrivate *priv; -}; - -struct _GConverterInputStreamClass -{ - GFilterInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_converter_input_stream_get_type (void) G_GNUC_CONST; -GInputStream *g_converter_input_stream_new (GInputStream *base_stream, - GConverter *converter); -GConverter *g_converter_input_stream_get_converter (GConverterInputStream *converter_stream); - -G_END_DECLS - -#endif /* __G_CONVERTER_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gconverteroutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gconverteroutputstream.h deleted file mode 100644 index ceac2008..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gconverteroutputstream.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERTER_OUTPUT_STREAM_H__ -#define __G_CONVERTER_OUTPUT_STREAM_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_CONVERTER_OUTPUT_STREAM (g_converter_output_stream_get_type ()) -#define G_CONVERTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CONVERTER_OUTPUT_STREAM, GConverterOutputStream)) -#define G_CONVERTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CONVERTER_OUTPUT_STREAM, GConverterOutputStreamClass)) -#define G_IS_CONVERTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CONVERTER_OUTPUT_STREAM)) -#define G_IS_CONVERTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CONVERTER_OUTPUT_STREAM)) -#define G_CONVERTER_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CONVERTER_OUTPUT_STREAM, GConverterOutputStreamClass)) - -/** - * GConverterOutputStream: - * - * An implementation of #GFilterOutputStream that allows data - * conversion. - **/ -typedef struct _GConverterOutputStreamClass GConverterOutputStreamClass; -typedef struct _GConverterOutputStreamPrivate GConverterOutputStreamPrivate; - -struct _GConverterOutputStream -{ - GFilterOutputStream parent_instance; - - /*< private >*/ - GConverterOutputStreamPrivate *priv; -}; - -struct _GConverterOutputStreamClass -{ - GFilterOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_converter_output_stream_get_type (void) G_GNUC_CONST; -GOutputStream *g_converter_output_stream_new (GOutputStream *base_stream, - GConverter *converter); -GConverter *g_converter_output_stream_get_converter (GConverterOutputStream *converter_stream); - -G_END_DECLS - -#endif /* __G_CONVERTER_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gcredentials.h b/GstreamerHelper/x86/include/glib-2.0/gio/gcredentials.h deleted file mode 100644 index 8e09f779..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gcredentials.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CREDENTIALS_H__ -#define __G_CREDENTIALS_H__ - -#include - -#ifdef G_OS_UNIX -/* To get the uid_t type */ -#include -#include -#endif - -G_BEGIN_DECLS - -#define G_TYPE_CREDENTIALS (g_credentials_get_type ()) -#define G_CREDENTIALS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CREDENTIALS, GCredentials)) -#define G_CREDENTIALS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CREDENTIALS, GCredentialsClass)) -#define G_CREDENTIALS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CREDENTIALS, GCredentialsClass)) -#define G_IS_CREDENTIALS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CREDENTIALS)) -#define G_IS_CREDENTIALS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CREDENTIALS)) - -typedef struct _GCredentialsClass GCredentialsClass; - -GType g_credentials_get_type (void) G_GNUC_CONST; - -GCredentials *g_credentials_new (void); - -gchar *g_credentials_to_string (GCredentials *credentials); - -gpointer g_credentials_get_native (GCredentials *credentials, - GCredentialsType native_type); - -void g_credentials_set_native (GCredentials *credentials, - GCredentialsType native_type, - gpointer native); - -gboolean g_credentials_is_same_user (GCredentials *credentials, - GCredentials *other_credentials, - GError **error); - -#ifdef G_OS_UNIX -uid_t g_credentials_get_unix_user (GCredentials *credentials, - GError **error); -gboolean g_credentials_set_unix_user (GCredentials *credentials, - uid_t uid, - GError **error); -#endif - -G_END_DECLS - -#endif /* __G_DBUS_PROXY_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdatainputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdatainputstream.h deleted file mode 100644 index 0f205c65..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdatainputstream.h +++ /dev/null @@ -1,160 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATA_INPUT_STREAM_H__ -#define __G_DATA_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DATA_INPUT_STREAM (g_data_input_stream_get_type ()) -#define G_DATA_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DATA_INPUT_STREAM, GDataInputStream)) -#define G_DATA_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DATA_INPUT_STREAM, GDataInputStreamClass)) -#define G_IS_DATA_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DATA_INPUT_STREAM)) -#define G_IS_DATA_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DATA_INPUT_STREAM)) -#define G_DATA_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DATA_INPUT_STREAM, GDataInputStreamClass)) - -/** - * GDataInputStream: - * - * An implementation of #GBufferedInputStream that allows for high-level - * data manipulation of arbitrary data (including binary operations). - **/ -typedef struct _GDataInputStreamClass GDataInputStreamClass; -typedef struct _GDataInputStreamPrivate GDataInputStreamPrivate; - -struct _GDataInputStream -{ - GBufferedInputStream parent_instance; - - /*< private >*/ - GDataInputStreamPrivate *priv; -}; - -struct _GDataInputStreamClass -{ - GBufferedInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_data_input_stream_get_type (void) G_GNUC_CONST; -GDataInputStream * g_data_input_stream_new (GInputStream *base_stream); - -void g_data_input_stream_set_byte_order (GDataInputStream *stream, - GDataStreamByteOrder order); -GDataStreamByteOrder g_data_input_stream_get_byte_order (GDataInputStream *stream); -void g_data_input_stream_set_newline_type (GDataInputStream *stream, - GDataStreamNewlineType type); -GDataStreamNewlineType g_data_input_stream_get_newline_type (GDataInputStream *stream); -guchar g_data_input_stream_read_byte (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -gint16 g_data_input_stream_read_int16 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -guint16 g_data_input_stream_read_uint16 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -gint32 g_data_input_stream_read_int32 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -guint32 g_data_input_stream_read_uint32 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -gint64 g_data_input_stream_read_int64 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -guint64 g_data_input_stream_read_uint64 (GDataInputStream *stream, - GCancellable *cancellable, - GError **error); -char * g_data_input_stream_read_line (GDataInputStream *stream, - gsize *length, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_30 -char * g_data_input_stream_read_line_utf8 (GDataInputStream *stream, - gsize *length, - GCancellable *cancellable, - GError **error); -void g_data_input_stream_read_line_async (GDataInputStream *stream, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -char * g_data_input_stream_read_line_finish (GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); -GLIB_AVAILABLE_IN_2_30 -char * g_data_input_stream_read_line_finish_utf8(GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); -char * g_data_input_stream_read_until (GDataInputStream *stream, - const gchar *stop_chars, - gsize *length, - GCancellable *cancellable, - GError **error); -void g_data_input_stream_read_until_async (GDataInputStream *stream, - const gchar *stop_chars, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -char * g_data_input_stream_read_until_finish (GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); - -char * g_data_input_stream_read_upto (GDataInputStream *stream, - const gchar *stop_chars, - gssize stop_chars_len, - gsize *length, - GCancellable *cancellable, - GError **error); -void g_data_input_stream_read_upto_async (GDataInputStream *stream, - const gchar *stop_chars, - gssize stop_chars_len, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -char * g_data_input_stream_read_upto_finish (GDataInputStream *stream, - GAsyncResult *result, - gsize *length, - GError **error); - -G_END_DECLS - -#endif /* __G_DATA_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdataoutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdataoutputstream.h deleted file mode 100644 index 0fb3cbfe..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdataoutputstream.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATA_OUTPUT_STREAM_H__ -#define __G_DATA_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DATA_OUTPUT_STREAM (g_data_output_stream_get_type ()) -#define G_DATA_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStream)) -#define G_DATA_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStreamClass)) -#define G_IS_DATA_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DATA_OUTPUT_STREAM)) -#define G_IS_DATA_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DATA_OUTPUT_STREAM)) -#define G_DATA_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStreamClass)) - -/** - * GDataOutputStream: - * - * An implementation of #GBufferedOutputStream that allows for high-level - * data manipulation of arbitrary data (including binary operations). - **/ -typedef struct _GDataOutputStream GDataOutputStream; -typedef struct _GDataOutputStreamClass GDataOutputStreamClass; -typedef struct _GDataOutputStreamPrivate GDataOutputStreamPrivate; - -struct _GDataOutputStream -{ - GFilterOutputStream parent_instance; - - /*< private >*/ - GDataOutputStreamPrivate *priv; -}; - -struct _GDataOutputStreamClass -{ - GFilterOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - - -GType g_data_output_stream_get_type (void) G_GNUC_CONST; -GDataOutputStream * g_data_output_stream_new (GOutputStream *base_stream); - -void g_data_output_stream_set_byte_order (GDataOutputStream *stream, - GDataStreamByteOrder order); -GDataStreamByteOrder g_data_output_stream_get_byte_order (GDataOutputStream *stream); - -gboolean g_data_output_stream_put_byte (GDataOutputStream *stream, - guchar data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_int16 (GDataOutputStream *stream, - gint16 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_uint16 (GDataOutputStream *stream, - guint16 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_int32 (GDataOutputStream *stream, - gint32 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_uint32 (GDataOutputStream *stream, - guint32 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_int64 (GDataOutputStream *stream, - gint64 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_uint64 (GDataOutputStream *stream, - guint64 data, - GCancellable *cancellable, - GError **error); -gboolean g_data_output_stream_put_string (GDataOutputStream *stream, - const char *str, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_DATA_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusactiongroup.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusactiongroup.h deleted file mode 100644 index 12a2f60c..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusactiongroup.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * Copyright © 2011 Canonical Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_ACTION_GROUP_H__ -#define __G_DBUS_ACTION_GROUP_H__ - -#include "giotypes.h" - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_ACTION_GROUP (g_dbus_action_group_get_type ()) -#define G_DBUS_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_DBUS_ACTION_GROUP, GDBusActionGroup)) -#define G_DBUS_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_DBUS_ACTION_GROUP, GDBusActionGroupClass)) -#define G_IS_DBUS_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_DBUS_ACTION_GROUP)) -#define G_IS_DBUS_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_DBUS_ACTION_GROUP)) -#define G_DBUS_ACTION_GROUP_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_DBUS_ACTION_GROUP, GDBusActionGroupClass)) - -GType g_dbus_action_group_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GDBusActionGroup * g_dbus_action_group_get (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusaddress.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusaddress.h deleted file mode 100644 index 955c39e9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusaddress.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_ADDRESS_H__ -#define __G_DBUS_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_dbus_is_address (const gchar *string); -gboolean g_dbus_is_supported_address (const gchar *string, - GError **error); - -void g_dbus_address_get_stream (const gchar *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GIOStream *g_dbus_address_get_stream_finish (GAsyncResult *res, - gchar **out_guid, - GError **error); - -GIOStream *g_dbus_address_get_stream_sync (const gchar *address, - gchar **out_guid, - GCancellable *cancellable, - GError **error); - -gchar *g_dbus_address_get_for_bus_sync (GBusType bus_type, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_DBUS_ADDRESS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusauthobserver.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusauthobserver.h deleted file mode 100644 index ffb1ddf1..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusauthobserver.h +++ /dev/null @@ -1,50 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_AUTH_OBSERVER_H__ -#define __G_DBUS_AUTH_OBSERVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_AUTH_OBSERVER (g_dbus_auth_observer_get_type ()) -#define G_DBUS_AUTH_OBSERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_AUTH_OBSERVER, GDBusAuthObserver)) -#define G_IS_DBUS_AUTH_OBSERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_AUTH_OBSERVER)) - -GType g_dbus_auth_observer_get_type (void) G_GNUC_CONST; -GDBusAuthObserver *g_dbus_auth_observer_new (void); -gboolean g_dbus_auth_observer_authorize_authenticated_peer (GDBusAuthObserver *observer, - GIOStream *stream, - GCredentials *credentials); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_dbus_auth_observer_allow_mechanism (GDBusAuthObserver *observer, - const gchar *mechanism); - -G_END_DECLS - -#endif /* _G_DBUS_AUTH_OBSERVER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusconnection.h deleted file mode 100644 index 6c1ec5c3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusconnection.h +++ /dev/null @@ -1,599 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_CONNECTION_H__ -#define __G_DBUS_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_CONNECTION (g_dbus_connection_get_type ()) -#define G_DBUS_CONNECTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_CONNECTION, GDBusConnection)) -#define G_IS_DBUS_CONNECTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_CONNECTION)) - -GType g_dbus_connection_get_type (void) G_GNUC_CONST; - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_bus_get (GBusType bus_type, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusConnection *g_bus_get_finish (GAsyncResult *res, - GError **error); -GDBusConnection *g_bus_get_sync (GBusType bus_type, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_new (GIOStream *stream, - const gchar *guid, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusConnection *g_dbus_connection_new_finish (GAsyncResult *res, - GError **error); -GDBusConnection *g_dbus_connection_new_sync (GIOStream *stream, - const gchar *guid, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GError **error); - -void g_dbus_connection_new_for_address (const gchar *address, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusConnection *g_dbus_connection_new_for_address_finish (GAsyncResult *res, - GError **error); -GDBusConnection *g_dbus_connection_new_for_address_sync (const gchar *address, - GDBusConnectionFlags flags, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_start_message_processing (GDBusConnection *connection); -gboolean g_dbus_connection_is_closed (GDBusConnection *connection); -GIOStream *g_dbus_connection_get_stream (GDBusConnection *connection); -const gchar *g_dbus_connection_get_guid (GDBusConnection *connection); -const gchar *g_dbus_connection_get_unique_name (GDBusConnection *connection); -GCredentials *g_dbus_connection_get_peer_credentials (GDBusConnection *connection); - -GLIB_AVAILABLE_IN_2_34 -guint32 g_dbus_connection_get_last_serial (GDBusConnection *connection); - -gboolean g_dbus_connection_get_exit_on_close (GDBusConnection *connection); -void g_dbus_connection_set_exit_on_close (GDBusConnection *connection, - gboolean exit_on_close); -GDBusCapabilityFlags g_dbus_connection_get_capabilities (GDBusConnection *connection); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_close (GDBusConnection *connection, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_dbus_connection_close_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -gboolean g_dbus_connection_close_sync (GDBusConnection *connection, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -void g_dbus_connection_flush (GDBusConnection *connection, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_dbus_connection_flush_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -gboolean g_dbus_connection_flush_sync (GDBusConnection *connection, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -gboolean g_dbus_connection_send_message (GDBusConnection *connection, - GDBusMessage *message, - GDBusSendMessageFlags flags, - volatile guint32 *out_serial, - GError **error); -void g_dbus_connection_send_message_with_reply (GDBusConnection *connection, - GDBusMessage *message, - GDBusSendMessageFlags flags, - gint timeout_msec, - volatile guint32 *out_serial, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusMessage *g_dbus_connection_send_message_with_reply_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -GDBusMessage *g_dbus_connection_send_message_with_reply_sync (GDBusConnection *connection, - GDBusMessage *message, - GDBusSendMessageFlags flags, - gint timeout_msec, - volatile guint32 *out_serial, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - -gboolean g_dbus_connection_emit_signal (GDBusConnection *connection, - const gchar *destination_bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - GError **error); -void g_dbus_connection_call (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GVariant *g_dbus_connection_call_finish (GDBusConnection *connection, - GAsyncResult *res, - GError **error); -GVariant *g_dbus_connection_call_sync (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_30 -void g_dbus_connection_call_with_unix_fd_list (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_30 -GVariant *g_dbus_connection_call_with_unix_fd_list_finish (GDBusConnection *connection, - GUnixFDList **out_fd_list, - GAsyncResult *res, - GError **error); -GLIB_AVAILABLE_IN_2_30 -GVariant *g_dbus_connection_call_with_unix_fd_list_sync (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - const GVariantType *reply_type, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GUnixFDList **out_fd_list, - GCancellable *cancellable, - GError **error); - -/* ---------------------------------------------------------------------------------------------------- */ - - -/** - * GDBusInterfaceMethodCallFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that the method was invoked on. - * @interface_name: The D-Bus interface name the method was invoked on. - * @method_name: The name of the method that was invoked. - * @parameters: A #GVariant tuple with parameters. - * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_object(). - * - * The type of the @method_call function in #GDBusInterfaceVTable. - * - * Since: 2.26 - */ -typedef void (*GDBusInterfaceMethodCallFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - GDBusMethodInvocation *invocation, - gpointer user_data); - -/** - * GDBusInterfaceGetPropertyFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that the method was invoked on. - * @interface_name: The D-Bus interface name for the property. - * @property_name: The name of the property to get the value of. - * @error: Return location for error. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_object(). - * - * The type of the @get_property function in #GDBusInterfaceVTable. - * - * Returns: A #GVariant with the value for @property_name or %NULL if - * @error is set. If the returned #GVariant is floating, it is - * consumed - otherwise its reference count is decreased by one. - * - * Since: 2.26 - */ -typedef GVariant *(*GDBusInterfaceGetPropertyFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *property_name, - GError **error, - gpointer user_data); - -/** - * GDBusInterfaceSetPropertyFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that the method was invoked on. - * @interface_name: The D-Bus interface name for the property. - * @property_name: The name of the property to get the value of. - * @value: The value to set the property to. - * @error: Return location for error. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_object(). - * - * The type of the @set_property function in #GDBusInterfaceVTable. - * - * Returns: %TRUE if the property was set to @value, %FALSE if @error is set. - * - * Since: 2.26 - */ -typedef gboolean (*GDBusInterfaceSetPropertyFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *property_name, - GVariant *value, - GError **error, - gpointer user_data); - -/** - * GDBusInterfaceVTable: - * @method_call: Function for handling incoming method calls. - * @get_property: Function for getting a property. - * @set_property: Function for setting a property. - * - * Virtual table for handling properties and method calls for a D-Bus - * interface. - * - * If you want to handle getting/setting D-Bus properties asynchronously, simply - * register an object with the org.freedesktop.DBus.Properties - * D-Bus interface using g_dbus_connection_register_object(). - * - * Since: 2.26 - */ -struct _GDBusInterfaceVTable -{ - GDBusInterfaceMethodCallFunc method_call; - GDBusInterfaceGetPropertyFunc get_property; - GDBusInterfaceSetPropertyFunc set_property; - - /*< private >*/ - /* Padding for future expansion - also remember to update - * gdbusconnection.c:_g_dbus_interface_vtable_copy() when - * changing this. - */ - gpointer padding[8]; -}; - -guint g_dbus_connection_register_object (GDBusConnection *connection, - const gchar *object_path, - GDBusInterfaceInfo *interface_info, - const GDBusInterfaceVTable *vtable, - gpointer user_data, - GDestroyNotify user_data_free_func, - GError **error); -gboolean g_dbus_connection_unregister_object (GDBusConnection *connection, - guint registration_id); - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * GDBusSubtreeEnumerateFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). - * - * The type of the @enumerate function in #GDBusSubtreeVTable. - * - * This function is called when generating introspection data and also - * when preparing to dispatch incoming messages in the event that the - * %G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES flag is not - * specified (ie: to verify that the object path is valid). - * - * Hierarchies are not supported; the items that you return should not - * contain the '/' character. - * - * The return value will be freed with g_strfreev(). - * - * Returns: A newly allocated array of strings for node names that are children of @object_path. - * - * Since: 2.26 - */ -typedef gchar** (*GDBusSubtreeEnumerateFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - gpointer user_data); - -/** - * GDBusSubtreeIntrospectFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @node: A node that is a child of @object_path (relative to @object_path) or %NULL for the root of the subtree. - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). - * - * The type of the @introspect function in #GDBusSubtreeVTable. - * - * Subtrees are flat. @node, if non-%NULL, is always exactly one - * segment of the object path (ie: it never contains a slash). - * - * This function should return %NULL to indicate that there is no object - * at this node. - * - * If this function returns non-%NULL, the return value is expected to - * be a %NULL-terminated array of pointers to #GDBusInterfaceInfo - * structures describing the interfaces implemented by @node. This - * array will have g_dbus_interface_info_unref() called on each item - * before being freed with g_free(). - * - * The difference between returning %NULL and an array containing zero - * items is that the standard DBus interfaces will returned to the - * remote introspector in the empty array case, but not in the %NULL - * case. - * - * Returns: A %NULL-terminated array of pointers to #GDBusInterfaceInfo, or %NULL. - * - * Since: 2.26 - */ -typedef GDBusInterfaceInfo ** (*GDBusSubtreeIntrospectFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *node, - gpointer user_data); - -/** - * GDBusSubtreeDispatchFunc: - * @connection: A #GDBusConnection. - * @sender: The unique bus name of the remote caller. - * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @interface_name: The D-Bus interface name that the method call or property access is for. - * @node: A node that is a child of @object_path (relative to @object_path) or %NULL for the root of the subtree. - * @out_user_data: Return location for user data to pass to functions in the returned #GDBusInterfaceVTable (never %NULL). - * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). - * - * The type of the @dispatch function in #GDBusSubtreeVTable. - * - * Subtrees are flat. @node, if non-%NULL, is always exactly one - * segment of the object path (ie: it never contains a slash). - * - * Returns: A #GDBusInterfaceVTable or %NULL if you don't want to handle the methods. - * - * Since: 2.26 - */ -typedef const GDBusInterfaceVTable * (*GDBusSubtreeDispatchFunc) (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *node, - gpointer *out_user_data, - gpointer user_data); - -/** - * GDBusSubtreeVTable: - * @enumerate: Function for enumerating child nodes. - * @introspect: Function for introspecting a child node. - * @dispatch: Function for dispatching a remote call on a child node. - * - * Virtual table for handling subtrees registered with g_dbus_connection_register_subtree(). - * - * Since: 2.26 - */ -struct _GDBusSubtreeVTable -{ - GDBusSubtreeEnumerateFunc enumerate; - GDBusSubtreeIntrospectFunc introspect; - GDBusSubtreeDispatchFunc dispatch; - - /*< private >*/ - /* Padding for future expansion - also remember to update - * gdbusconnection.c:_g_dbus_subtree_vtable_copy() when - * changing this. - */ - gpointer padding[8]; -}; - -guint g_dbus_connection_register_subtree (GDBusConnection *connection, - const gchar *object_path, - const GDBusSubtreeVTable *vtable, - GDBusSubtreeFlags flags, - gpointer user_data, - GDestroyNotify user_data_free_func, - GError **error); -gboolean g_dbus_connection_unregister_subtree (GDBusConnection *connection, - guint registration_id); - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * GDBusSignalCallback: - * @connection: A #GDBusConnection. - * @sender_name: The unique bus name of the sender of the signal. - * @object_path: The object path that the signal was emitted on. - * @interface_name: The name of the interface. - * @signal_name: The name of the signal. - * @parameters: A #GVariant tuple with parameters for the signal. - * @user_data: User data passed when subscribing to the signal. - * - * Signature for callback function used in g_dbus_connection_signal_subscribe(). - * - * Since: 2.26 - */ -typedef void (*GDBusSignalCallback) (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data); - -guint g_dbus_connection_signal_subscribe (GDBusConnection *connection, - const gchar *sender, - const gchar *interface_name, - const gchar *member, - const gchar *object_path, - const gchar *arg0, - GDBusSignalFlags flags, - GDBusSignalCallback callback, - gpointer user_data, - GDestroyNotify user_data_free_func); -void g_dbus_connection_signal_unsubscribe (GDBusConnection *connection, - guint subscription_id); - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * GDBusMessageFilterFunction: - * @connection: (transfer none): A #GDBusConnection. - * @message: (transfer full): A locked #GDBusMessage that the filter function takes ownership of. - * @incoming: %TRUE if it is a message received from the other peer, %FALSE if it is - * a message to be sent to the other peer. - * @user_data: User data passed when adding the filter. - * - * Signature for function used in g_dbus_connection_add_filter(). - * - * A filter function is passed a #GDBusMessage and expected to return - * a #GDBusMessage too. Passive filter functions that don't modify the - * message can simply return the @message object: - * |[ - * static GDBusMessage * - * passive_filter (GDBusConnection *connection - * GDBusMessage *message, - * gboolean incoming, - * gpointer user_data) - * { - * /* inspect @message */ - * return message; - * } - * ]| - * Filter functions that wants to drop a message can simply return %NULL: - * |[ - * static GDBusMessage * - * drop_filter (GDBusConnection *connection - * GDBusMessage *message, - * gboolean incoming, - * gpointer user_data) - * { - * if (should_drop_message) - * { - * g_object_unref (message); - * message = NULL; - * } - * return message; - * } - * ]| - * Finally, a filter function may modify a message by copying it: - * |[ - * static GDBusMessage * - * modifying_filter (GDBusConnection *connection - * GDBusMessage *message, - * gboolean incoming, - * gpointer user_data) - * { - * GDBusMessage *copy; - * GError *error; - * - * error = NULL; - * copy = g_dbus_message_copy (message, &error); - * /* handle @error being is set */ - * g_object_unref (message); - * - * /* modify @copy */ - * - * return copy; - * } - * ]| - * If the returned #GDBusMessage is different from @message and cannot - * be sent on @connection (it could use features, such as file - * descriptors, not compatible with @connection), then a warning is - * logged to standard error. Applications can - * check this ahead of time using g_dbus_message_to_blob() passing a - * #GDBusCapabilityFlags value obtained from @connection. - * - * Returns: (transfer full) (allow-none): A #GDBusMessage that will be freed with - * g_object_unref() or %NULL to drop the message. Passive filter - * functions can simply return the passed @message object. - * - * Since: 2.26 - */ -typedef GDBusMessage *(*GDBusMessageFilterFunction) (GDBusConnection *connection, - GDBusMessage *message, - gboolean incoming, - gpointer user_data); - -guint g_dbus_connection_add_filter (GDBusConnection *connection, - GDBusMessageFilterFunction filter_function, - gpointer user_data, - GDestroyNotify user_data_free_func); - -void g_dbus_connection_remove_filter (GDBusConnection *connection, - guint filter_id); - -/* ---------------------------------------------------------------------------------------------------- */ - - -G_END_DECLS - -#endif /* __G_DBUS_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbuserror.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbuserror.h deleted file mode 100644 index 85e2f881..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbuserror.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_ERROR_H__ -#define __G_DBUS_ERROR_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_DBUS_ERROR: - * - * Error domain for errors generated by a remote message bus. Errors - * in this domain will be from the #GDBusError enumeration. See - * #GError for more information on error domains. - * - * Note that errors in this error domain is intended only for - * returning errors from a remote message bus process. Errors - * generated locally in-process by e.g. #GDBusConnection is from the - * %G_IO_ERROR domain. - * - * Since: 2.26 - */ -#define G_DBUS_ERROR g_dbus_error_quark() - -GQuark g_dbus_error_quark (void); - -/* Used by applications to check, get and strip the D-Bus error name */ -gboolean g_dbus_error_is_remote_error (const GError *error); -gchar *g_dbus_error_get_remote_error (const GError *error); -gboolean g_dbus_error_strip_remote_error (GError *error); - -/** - * GDBusErrorEntry: - * @error_code: An error code. - * @dbus_error_name: The D-Bus error name to associate with @error_code. - * - * Struct used in g_dbus_error_register_error_domain(). - * - * Since: 2.26 - */ -struct _GDBusErrorEntry -{ - gint error_code; - const gchar *dbus_error_name; -}; - -gboolean g_dbus_error_register_error (GQuark error_domain, - gint error_code, - const gchar *dbus_error_name); -gboolean g_dbus_error_unregister_error (GQuark error_domain, - gint error_code, - const gchar *dbus_error_name); -void g_dbus_error_register_error_domain (const gchar *error_domain_quark_name, - volatile gsize *quark_volatile, - const GDBusErrorEntry *entries, - guint num_entries); - -/* Only used by object mappings to map back and forth to GError */ -GError *g_dbus_error_new_for_dbus_error (const gchar *dbus_error_name, - const gchar *dbus_error_message); -void g_dbus_error_set_dbus_error (GError **error, - const gchar *dbus_error_name, - const gchar *dbus_error_message, - const gchar *format, - ...); -void g_dbus_error_set_dbus_error_valist (GError **error, - const gchar *dbus_error_name, - const gchar *dbus_error_message, - const gchar *format, - va_list var_args); -gchar *g_dbus_error_encode_gerror (const GError *error); - -G_END_DECLS - -#endif /* __G_DBUS_ERROR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterface.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterface.h deleted file mode 100644 index 9536e627..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterface.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_INTERFACE_H__ -#define __G_DBUS_INTERFACE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_INTERFACE (g_dbus_interface_get_type()) -#define G_DBUS_INTERFACE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_INTERFACE, GDBusInterface)) -#define G_IS_DBUS_INTERFACE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_INTERFACE)) -#define G_DBUS_INTERFACE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), G_TYPE_DBUS_INTERFACE, GDBusInterfaceIface)) - -/** - * GDBusInterface: - * - * Base type for D-Bus interfaces. - * - * Since: 2.30 - */ - -typedef struct _GDBusInterfaceIface GDBusInterfaceIface; - -/** - * GDBusInterfaceIface: - * @parent_iface: The parent interface. - * @get_info: Returns a #GDBusInterfaceInfo. See g_dbus_interface_get_info(). - * @get_object: Gets the enclosing #GDBusObject. See g_dbus_interface_get_object(). - * @set_object: Sets the enclosing #GDBusObject. See g_dbus_interface_set_object(). - * @dup_object: Gets a reference to the enclosing #GDBusObject. See g_dbus_interface_dup_object(). Added in 2.32. - * - * Base type for D-Bus interfaces. - * - * Since: 2.30 - */ -struct _GDBusInterfaceIface -{ - GTypeInterface parent_iface; - - /* Virtual Functions */ - GDBusInterfaceInfo *(*get_info) (GDBusInterface *interface_); - GDBusObject *(*get_object) (GDBusInterface *interface_); - void (*set_object) (GDBusInterface *interface_, - GDBusObject *object); - GDBusObject *(*dup_object) (GDBusInterface *interface_); -}; - -GType g_dbus_interface_get_type (void) G_GNUC_CONST; -GDBusInterfaceInfo *g_dbus_interface_get_info (GDBusInterface *interface_); -GDBusObject *g_dbus_interface_get_object (GDBusInterface *interface_); -void g_dbus_interface_set_object (GDBusInterface *interface_, - GDBusObject *object); -GLIB_AVAILABLE_IN_2_32 -GDBusObject *g_dbus_interface_dup_object (GDBusInterface *interface_); - -G_END_DECLS - -#endif /* __G_DBUS_INTERFACE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterfaceskeleton.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterfaceskeleton.h deleted file mode 100644 index 5f1c1663..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusinterfaceskeleton.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_INTERFACE_SKELETON_H__ -#define __G_DBUS_INTERFACE_SKELETON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_INTERFACE_SKELETON (g_dbus_interface_skeleton_get_type ()) -#define G_DBUS_INTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_INTERFACE_SKELETON, GDBusInterfaceSkeleton)) -#define G_DBUS_INTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_INTERFACE_SKELETON, GDBusInterfaceSkeletonClass)) -#define G_DBUS_INTERFACE_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_INTERFACE_SKELETON, GDBusInterfaceSkeletonClass)) -#define G_IS_DBUS_INTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_INTERFACE_SKELETON)) -#define G_IS_DBUS_INTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_INTERFACE_SKELETON)) - -typedef struct _GDBusInterfaceSkeletonClass GDBusInterfaceSkeletonClass; -typedef struct _GDBusInterfaceSkeletonPrivate GDBusInterfaceSkeletonPrivate; - -/** - * GDBusInterfaceSkeleton: - * - * The #GDBusInterfaceSkeleton structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusInterfaceSkeleton -{ - /*< private >*/ - GObject parent_instance; - GDBusInterfaceSkeletonPrivate *priv; -}; - -/** - * GDBusInterfaceSkeletonClass: - * @parent_class: The parent class. - * @get_info: Returns a #GDBusInterfaceInfo. See g_dbus_interface_skeleton_get_info() for details. - * @get_vtable: Returns a #GDBusInterfaceVTable. See g_dbus_interface_skeleton_get_vtable() for details. - * @get_properties: Returns a #GVariant with all properties. See g_dbus_interface_skeleton_get_properties(). - * @flush: Emits outstanding changes, if any. See g_dbus_interface_skeleton_flush(). - * @g_authorize_method: Signal class handler for the #GDBusInterfaceSkeleton::g-authorize-method signal. - * - * Class structure for #GDBusInterfaceSkeleton. - * - * Since: 2.30 - */ -struct _GDBusInterfaceSkeletonClass -{ - GObjectClass parent_class; - - /* Virtual Functions */ - GDBusInterfaceInfo *(*get_info) (GDBusInterfaceSkeleton *interface_); - GDBusInterfaceVTable *(*get_vtable) (GDBusInterfaceSkeleton *interface_); - GVariant *(*get_properties) (GDBusInterfaceSkeleton *interface_); - void (*flush) (GDBusInterfaceSkeleton *interface_); - - /*< private >*/ - gpointer vfunc_padding[8]; - /*< public >*/ - - /* Signals */ - gboolean (*g_authorize_method) (GDBusInterfaceSkeleton *interface_, - GDBusMethodInvocation *invocation); - - /*< private >*/ - gpointer signal_padding[8]; -}; - -GType g_dbus_interface_skeleton_get_type (void) G_GNUC_CONST; -GDBusInterfaceSkeletonFlags g_dbus_interface_skeleton_get_flags (GDBusInterfaceSkeleton *interface_); -void g_dbus_interface_skeleton_set_flags (GDBusInterfaceSkeleton *interface_, - GDBusInterfaceSkeletonFlags flags); -GDBusInterfaceInfo *g_dbus_interface_skeleton_get_info (GDBusInterfaceSkeleton *interface_); -GDBusInterfaceVTable *g_dbus_interface_skeleton_get_vtable (GDBusInterfaceSkeleton *interface_); -GVariant *g_dbus_interface_skeleton_get_properties (GDBusInterfaceSkeleton *interface_); -void g_dbus_interface_skeleton_flush (GDBusInterfaceSkeleton *interface_); - -gboolean g_dbus_interface_skeleton_export (GDBusInterfaceSkeleton *interface_, - GDBusConnection *connection, - const gchar *object_path, - GError **error); -void g_dbus_interface_skeleton_unexport (GDBusInterfaceSkeleton *interface_); -void g_dbus_interface_skeleton_unexport_from_connection (GDBusInterfaceSkeleton *interface_, - GDBusConnection *connection); - -GDBusConnection *g_dbus_interface_skeleton_get_connection (GDBusInterfaceSkeleton *interface_); -GList *g_dbus_interface_skeleton_get_connections (GDBusInterfaceSkeleton *interface_); -gboolean g_dbus_interface_skeleton_has_connection (GDBusInterfaceSkeleton *interface_, - GDBusConnection *connection); -const gchar *g_dbus_interface_skeleton_get_object_path (GDBusInterfaceSkeleton *interface_); - -G_END_DECLS - -#endif /* __G_DBUS_INTERFACE_SKELETON_H */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusintrospection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusintrospection.h deleted file mode 100644 index 884c733c..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusintrospection.h +++ /dev/null @@ -1,296 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_INTROSPECTION_H__ -#define __G_DBUS_INTROSPECTION_H__ - -#include - -G_BEGIN_DECLS - -/** - * GDBusAnnotationInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @key: The name of the annotation, e.g. "org.freedesktop.DBus.Deprecated". - * @value: The value of the annotation. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about an annotation. - * - * Since: 2.26 - */ -struct _GDBusAnnotationInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *key; - gchar *value; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusArgInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: Name of the argument, e.g. @unix_user_id. - * @signature: D-Bus signature of the argument (a single complete type). - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about an argument for a method or a signal. - * - * Since: 2.26 - */ -struct _GDBusArgInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - gchar *signature; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusMethodInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus method, e.g. @RequestName. - * @in_args: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusArgInfo structures or %NULL if there are no in arguments. - * @out_args: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusArgInfo structures or %NULL if there are no out arguments. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a method on an D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusMethodInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - GDBusArgInfo **in_args; - GDBusArgInfo **out_args; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusSignalInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus signal, e.g. "NameOwnerChanged". - * @args: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusArgInfo structures or %NULL if there are no arguments. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a signal on a D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusSignalInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - GDBusArgInfo **args; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusPropertyInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus property, e.g. "SupportedFilesystems". - * @signature: The D-Bus signature of the property (a single complete type). - * @flags: Access control flags for the property. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a D-Bus property on a D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusPropertyInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - gchar *signature; - GDBusPropertyInfoFlags flags; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusInterfaceInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @name: The name of the D-Bus interface, e.g. "org.freedesktop.DBus.Properties". - * @methods: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusMethodInfo structures or %NULL if there are no methods. - * @signals: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusSignalInfo structures or %NULL if there are no signals. - * @properties: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusPropertyInfo structures or %NULL if there are no properties. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about a D-Bus interface. - * - * Since: 2.26 - */ -struct _GDBusInterfaceInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *name; - GDBusMethodInfo **methods; - GDBusSignalInfo **signals; - GDBusPropertyInfo **properties; - GDBusAnnotationInfo **annotations; -}; - -/** - * GDBusNodeInfo: - * @ref_count: The reference count or -1 if statically allocated. - * @path: The path of the node or %NULL if omitted. Note that this may be a relative path. See the D-Bus specification for more details. - * @interfaces: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusInterfaceInfo structures or %NULL if there are no interfaces. - * @nodes: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusNodeInfo structures or %NULL if there are no nodes. - * @annotations: (array zero-terminated=1): A pointer to a %NULL-terminated array of pointers to #GDBusAnnotationInfo structures or %NULL if there are no annotations. - * - * Information about nodes in a remote object hierarchy. - * - * Since: 2.26 - */ -struct _GDBusNodeInfo -{ - /*< public >*/ - volatile gint ref_count; - gchar *path; - GDBusInterfaceInfo **interfaces; - GDBusNodeInfo **nodes; - GDBusAnnotationInfo **annotations; -}; - -const gchar *g_dbus_annotation_info_lookup (GDBusAnnotationInfo **annotations, - const gchar *name); -GDBusMethodInfo *g_dbus_interface_info_lookup_method (GDBusInterfaceInfo *info, - const gchar *name); -GDBusSignalInfo *g_dbus_interface_info_lookup_signal (GDBusInterfaceInfo *info, - const gchar *name); -GDBusPropertyInfo *g_dbus_interface_info_lookup_property (GDBusInterfaceInfo *info, - const gchar *name); -void g_dbus_interface_info_cache_build (GDBusInterfaceInfo *info); -void g_dbus_interface_info_cache_release (GDBusInterfaceInfo *info); - -void g_dbus_interface_info_generate_xml (GDBusInterfaceInfo *info, - guint indent, - GString *string_builder); - -GDBusNodeInfo *g_dbus_node_info_new_for_xml (const gchar *xml_data, - GError **error); -GDBusInterfaceInfo *g_dbus_node_info_lookup_interface (GDBusNodeInfo *info, - const gchar *name); -void g_dbus_node_info_generate_xml (GDBusNodeInfo *info, - guint indent, - GString *string_builder); - -GDBusNodeInfo *g_dbus_node_info_ref (GDBusNodeInfo *info); -GDBusInterfaceInfo *g_dbus_interface_info_ref (GDBusInterfaceInfo *info); -GDBusMethodInfo *g_dbus_method_info_ref (GDBusMethodInfo *info); -GDBusSignalInfo *g_dbus_signal_info_ref (GDBusSignalInfo *info); -GDBusPropertyInfo *g_dbus_property_info_ref (GDBusPropertyInfo *info); -GDBusArgInfo *g_dbus_arg_info_ref (GDBusArgInfo *info); -GDBusAnnotationInfo *g_dbus_annotation_info_ref (GDBusAnnotationInfo *info); - -void g_dbus_node_info_unref (GDBusNodeInfo *info); -void g_dbus_interface_info_unref (GDBusInterfaceInfo *info); -void g_dbus_method_info_unref (GDBusMethodInfo *info); -void g_dbus_signal_info_unref (GDBusSignalInfo *info); -void g_dbus_property_info_unref (GDBusPropertyInfo *info); -void g_dbus_arg_info_unref (GDBusArgInfo *info); -void g_dbus_annotation_info_unref (GDBusAnnotationInfo *info); - -/** - * G_TYPE_DBUS_NODE_INFO: - * - * The #GType for a boxed type holding a #GDBusNodeInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_NODE_INFO (g_dbus_node_info_get_type ()) - -/** - * G_TYPE_DBUS_INTERFACE_INFO: - * - * The #GType for a boxed type holding a #GDBusInterfaceInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_INTERFACE_INFO (g_dbus_interface_info_get_type ()) - -/** - * G_TYPE_DBUS_METHOD_INFO: - * - * The #GType for a boxed type holding a #GDBusMethodInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_METHOD_INFO (g_dbus_method_info_get_type ()) - -/** - * G_TYPE_DBUS_SIGNAL_INFO: - * - * The #GType for a boxed type holding a #GDBusSignalInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_SIGNAL_INFO (g_dbus_signal_info_get_type ()) - -/** - * G_TYPE_DBUS_PROPERTY_INFO: - * - * The #GType for a boxed type holding a #GDBusPropertyInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_PROPERTY_INFO (g_dbus_property_info_get_type ()) - -/** - * G_TYPE_DBUS_ARG_INFO: - * - * The #GType for a boxed type holding a #GDBusArgInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_ARG_INFO (g_dbus_arg_info_get_type ()) - -/** - * G_TYPE_DBUS_ANNOTATION_INFO: - * - * The #GType for a boxed type holding a #GDBusAnnotationInfo. - * - * Since: 2.26 - */ -#define G_TYPE_DBUS_ANNOTATION_INFO (g_dbus_annotation_info_get_type ()) - -GType g_dbus_node_info_get_type (void) G_GNUC_CONST; -GType g_dbus_interface_info_get_type (void) G_GNUC_CONST; -GType g_dbus_method_info_get_type (void) G_GNUC_CONST; -GType g_dbus_signal_info_get_type (void) G_GNUC_CONST; -GType g_dbus_property_info_get_type (void) G_GNUC_CONST; -GType g_dbus_arg_info_get_type (void) G_GNUC_CONST; -GType g_dbus_annotation_info_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_DBUS_INTROSPECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmenumodel.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmenumodel.h deleted file mode 100644 index 4cbdf2d6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmenumodel.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_DBUS_MENU_MODEL_H__ -#define __G_DBUS_MENU_MODEL_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_MENU_MODEL (g_dbus_menu_model_get_type ()) -#define G_DBUS_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_DBUS_MENU_MODEL, GDBusMenuModel)) -#define G_IS_DBUS_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_DBUS_MENU_MODEL)) - -typedef struct _GDBusMenuModel GDBusMenuModel; - -GType g_dbus_menu_model_get_type (void) G_GNUC_CONST; - -GDBusMenuModel * g_dbus_menu_model_get (GDBusConnection *connection, - const gchar *bus_name, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_MENU_MODEL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmessage.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmessage.h deleted file mode 100644 index 5c4febd2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmessage.h +++ /dev/null @@ -1,149 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_MESSAGE_H__ -#define __G_DBUS_MESSAGE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_MESSAGE (g_dbus_message_get_type ()) -#define G_DBUS_MESSAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_MESSAGE, GDBusMessage)) -#define G_IS_DBUS_MESSAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_MESSAGE)) - -GType g_dbus_message_get_type (void) G_GNUC_CONST; -GDBusMessage *g_dbus_message_new (void); -GDBusMessage *g_dbus_message_new_signal (const gchar *path, - const gchar *interface_, - const gchar *signal); -GDBusMessage *g_dbus_message_new_method_call (const gchar *name, - const gchar *path, - const gchar *interface_, - const gchar *method); -GDBusMessage *g_dbus_message_new_method_reply (GDBusMessage *method_call_message); -GDBusMessage *g_dbus_message_new_method_error (GDBusMessage *method_call_message, - const gchar *error_name, - const gchar *error_message_format, - ...); -GDBusMessage *g_dbus_message_new_method_error_valist (GDBusMessage *method_call_message, - const gchar *error_name, - const gchar *error_message_format, - va_list var_args); -GDBusMessage *g_dbus_message_new_method_error_literal (GDBusMessage *method_call_message, - const gchar *error_name, - const gchar *error_message); -gchar *g_dbus_message_print (GDBusMessage *message, - guint indent); -gboolean g_dbus_message_get_locked (GDBusMessage *message); -void g_dbus_message_lock (GDBusMessage *message); -GDBusMessage *g_dbus_message_copy (GDBusMessage *message, - GError **error); -GDBusMessageByteOrder g_dbus_message_get_byte_order (GDBusMessage *message); -void g_dbus_message_set_byte_order (GDBusMessage *message, - GDBusMessageByteOrder byte_order); - -GDBusMessageType g_dbus_message_get_message_type (GDBusMessage *message); -void g_dbus_message_set_message_type (GDBusMessage *message, - GDBusMessageType type); -GDBusMessageFlags g_dbus_message_get_flags (GDBusMessage *message); -void g_dbus_message_set_flags (GDBusMessage *message, - GDBusMessageFlags flags); -guint32 g_dbus_message_get_serial (GDBusMessage *message); -void g_dbus_message_set_serial (GDBusMessage *message, - guint32 serial); -GVariant *g_dbus_message_get_header (GDBusMessage *message, - GDBusMessageHeaderField header_field); -void g_dbus_message_set_header (GDBusMessage *message, - GDBusMessageHeaderField header_field, - GVariant *value); -guchar *g_dbus_message_get_header_fields (GDBusMessage *message); -GVariant *g_dbus_message_get_body (GDBusMessage *message); -void g_dbus_message_set_body (GDBusMessage *message, - GVariant *body); -GUnixFDList *g_dbus_message_get_unix_fd_list (GDBusMessage *message); -void g_dbus_message_set_unix_fd_list (GDBusMessage *message, - GUnixFDList *fd_list); - -guint32 g_dbus_message_get_reply_serial (GDBusMessage *message); -void g_dbus_message_set_reply_serial (GDBusMessage *message, - guint32 value); - -const gchar *g_dbus_message_get_interface (GDBusMessage *message); -void g_dbus_message_set_interface (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_member (GDBusMessage *message); -void g_dbus_message_set_member (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_path (GDBusMessage *message); -void g_dbus_message_set_path (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_sender (GDBusMessage *message); -void g_dbus_message_set_sender (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_destination (GDBusMessage *message); -void g_dbus_message_set_destination (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_error_name (GDBusMessage *message); -void g_dbus_message_set_error_name (GDBusMessage *message, - const gchar *value); - -const gchar *g_dbus_message_get_signature (GDBusMessage *message); -void g_dbus_message_set_signature (GDBusMessage *message, - const gchar *value); - -guint32 g_dbus_message_get_num_unix_fds (GDBusMessage *message); -void g_dbus_message_set_num_unix_fds (GDBusMessage *message, - guint32 value); - -const gchar *g_dbus_message_get_arg0 (GDBusMessage *message); - - -GDBusMessage *g_dbus_message_new_from_blob (guchar *blob, - gsize blob_len, - GDBusCapabilityFlags capabilities, - GError **error); - -gssize g_dbus_message_bytes_needed (guchar *blob, - gsize blob_len, - GError **error); - -guchar *g_dbus_message_to_blob (GDBusMessage *message, - gsize *out_size, - GDBusCapabilityFlags capabilities, - GError **error); - -gboolean g_dbus_message_to_gerror (GDBusMessage *message, - GError **error); - -G_END_DECLS - -#endif /* __G_DBUS_MESSAGE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmethodinvocation.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmethodinvocation.h deleted file mode 100644 index b1a87ac9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusmethodinvocation.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_METHOD_INVOCATION_H__ -#define __G_DBUS_METHOD_INVOCATION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_METHOD_INVOCATION (g_dbus_method_invocation_get_type ()) -#define G_DBUS_METHOD_INVOCATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_METHOD_INVOCATION, GDBusMethodInvocation)) -#define G_IS_DBUS_METHOD_INVOCATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_METHOD_INVOCATION)) - -GType g_dbus_method_invocation_get_type (void) G_GNUC_CONST; -const gchar *g_dbus_method_invocation_get_sender (GDBusMethodInvocation *invocation); -const gchar *g_dbus_method_invocation_get_object_path (GDBusMethodInvocation *invocation); -const gchar *g_dbus_method_invocation_get_interface_name (GDBusMethodInvocation *invocation); -const gchar *g_dbus_method_invocation_get_method_name (GDBusMethodInvocation *invocation); -const GDBusMethodInfo *g_dbus_method_invocation_get_method_info (GDBusMethodInvocation *invocation); -GDBusConnection *g_dbus_method_invocation_get_connection (GDBusMethodInvocation *invocation); -GDBusMessage *g_dbus_method_invocation_get_message (GDBusMethodInvocation *invocation); -GVariant *g_dbus_method_invocation_get_parameters (GDBusMethodInvocation *invocation); -gpointer g_dbus_method_invocation_get_user_data (GDBusMethodInvocation *invocation); - -void g_dbus_method_invocation_return_value (GDBusMethodInvocation *invocation, - GVariant *parameters); -void g_dbus_method_invocation_return_value_with_unix_fd_list (GDBusMethodInvocation *invocation, - GVariant *parameters, - GUnixFDList *fd_list); -void g_dbus_method_invocation_return_error (GDBusMethodInvocation *invocation, - GQuark domain, - gint code, - const gchar *format, - ...); -void g_dbus_method_invocation_return_error_valist (GDBusMethodInvocation *invocation, - GQuark domain, - gint code, - const gchar *format, - va_list var_args); -void g_dbus_method_invocation_return_error_literal (GDBusMethodInvocation *invocation, - GQuark domain, - gint code, - const gchar *message); -void g_dbus_method_invocation_return_gerror (GDBusMethodInvocation *invocation, - const GError *error); -void g_dbus_method_invocation_take_error (GDBusMethodInvocation *invocation, - GError *error); -void g_dbus_method_invocation_return_dbus_error (GDBusMethodInvocation *invocation, - const gchar *error_name, - const gchar *error_message); - -G_END_DECLS - -#endif /* __G_DBUS_METHOD_INVOCATION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusnameowning.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusnameowning.h deleted file mode 100644 index fc4b92c9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusnameowning.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_NAME_OWNING_H__ -#define __G_DBUS_NAME_OWNING_H__ - -#include - -G_BEGIN_DECLS - -/** - * GBusAcquiredCallback: - * @connection: The #GDBusConnection to a message bus. - * @name: The name that is requested to be owned. - * @user_data: User data passed to g_bus_own_name(). - * - * Invoked when a connection to a message bus has been obtained. - * - * Since: 2.26 - */ -typedef void (*GBusAcquiredCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -/** - * GBusNameAcquiredCallback: - * @connection: The #GDBusConnection on which to acquired the name. - * @name: The name being owned. - * @user_data: User data passed to g_bus_own_name() or g_bus_own_name_on_connection(). - * - * Invoked when the name is acquired. - * - * Since: 2.26 - */ -typedef void (*GBusNameAcquiredCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -/** - * GBusNameLostCallback: - * @connection: The #GDBusConnection on which to acquire the name or %NULL if - * the connection was disconnected. - * @name: The name being owned. - * @user_data: User data passed to g_bus_own_name() or g_bus_own_name_on_connection(). - * - * Invoked when the name is lost or @connection has been closed. - * - * Since: 2.26 - */ -typedef void (*GBusNameLostCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -guint g_bus_own_name (GBusType bus_type, - const gchar *name, - GBusNameOwnerFlags flags, - GBusAcquiredCallback bus_acquired_handler, - GBusNameAcquiredCallback name_acquired_handler, - GBusNameLostCallback name_lost_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); - -guint g_bus_own_name_on_connection (GDBusConnection *connection, - const gchar *name, - GBusNameOwnerFlags flags, - GBusNameAcquiredCallback name_acquired_handler, - GBusNameLostCallback name_lost_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); - -guint g_bus_own_name_with_closures (GBusType bus_type, - const gchar *name, - GBusNameOwnerFlags flags, - GClosure *bus_acquired_closure, - GClosure *name_acquired_closure, - GClosure *name_lost_closure); - -guint g_bus_own_name_on_connection_with_closures ( - GDBusConnection *connection, - const gchar *name, - GBusNameOwnerFlags flags, - GClosure *name_acquired_closure, - GClosure *name_lost_closure); - -void g_bus_unown_name (guint owner_id); - -G_END_DECLS - -#endif /* __G_DBUS_NAME_OWNING_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusnamewatching.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusnamewatching.h deleted file mode 100644 index 3e3f75a2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusnamewatching.h +++ /dev/null @@ -1,94 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_NAME_WATCHING_H__ -#define __G_DBUS_NAME_WATCHING_H__ - -#include - -G_BEGIN_DECLS - -/** - * GBusNameAppearedCallback: - * @connection: The #GDBusConnection the name is being watched on. - * @name: The name being watched. - * @name_owner: Unique name of the owner of the name being watched. - * @user_data: User data passed to g_bus_watch_name(). - * - * Invoked when the name being watched is known to have to have a owner. - * - * Since: 2.26 - */ -typedef void (*GBusNameAppearedCallback) (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, - gpointer user_data); - -/** - * GBusNameVanishedCallback: - * @connection: The #GDBusConnection the name is being watched on. - * @name: The name being watched. - * @user_data: User data passed to g_bus_watch_name(). - * - * Invoked when the name being watched is known not to have to have a owner. - * - * Since: 2.26 - */ -typedef void (*GBusNameVanishedCallback) (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - - -guint g_bus_watch_name (GBusType bus_type, - const gchar *name, - GBusNameWatcherFlags flags, - GBusNameAppearedCallback name_appeared_handler, - GBusNameVanishedCallback name_vanished_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); -guint g_bus_watch_name_on_connection (GDBusConnection *connection, - const gchar *name, - GBusNameWatcherFlags flags, - GBusNameAppearedCallback name_appeared_handler, - GBusNameVanishedCallback name_vanished_handler, - gpointer user_data, - GDestroyNotify user_data_free_func); -guint g_bus_watch_name_with_closures (GBusType bus_type, - const gchar *name, - GBusNameWatcherFlags flags, - GClosure *name_appeared_closure, - GClosure *name_vanished_closure); -guint g_bus_watch_name_on_connection_with_closures ( - GDBusConnection *connection, - const gchar *name, - GBusNameWatcherFlags flags, - GClosure *name_appeared_closure, - GClosure *name_vanished_closure); -void g_bus_unwatch_name (guint watcher_id); - -G_END_DECLS - -#endif /* __G_DBUS_NAME_WATCHING_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobject.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobject.h deleted file mode 100644 index 30983b11..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobject.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_H__ -#define __G_DBUS_OBJECT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT (g_dbus_object_get_type()) -#define G_DBUS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT, GDBusObject)) -#define G_IS_DBUS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT)) -#define G_DBUS_OBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), G_TYPE_DBUS_OBJECT, GDBusObjectIface)) - -typedef struct _GDBusObjectIface GDBusObjectIface; - -/** - * GDBusObjectIface: - * @parent_iface: The parent interface. - * @get_object_path: Returns the object path. See g_dbus_object_get_object_path(). - * @get_interfaces: Returns all interfaces. See g_dbus_object_get_interfaces(). - * @get_interface: Returns an interface by name. See g_dbus_object_get_interface(). - * @interface_added: Signal handler for the #GDBusObject::interface-added signal. - * @interface_removed: Signal handler for the #GDBusObject::interface-removed signal. - * - * Base object type for D-Bus objects. - * - * Since: 2.30 - */ -struct _GDBusObjectIface -{ - GTypeInterface parent_iface; - - /* Virtual Functions */ - const gchar *(*get_object_path) (GDBusObject *object); - GList *(*get_interfaces) (GDBusObject *object); - GDBusInterface *(*get_interface) (GDBusObject *object, - const gchar *interface_name); - - /* Signals */ - void (*interface_added) (GDBusObject *object, - GDBusInterface *interface_); - void (*interface_removed) (GDBusObject *object, - GDBusInterface *interface_); - -}; - -GType g_dbus_object_get_type (void) G_GNUC_CONST; -const gchar *g_dbus_object_get_object_path (GDBusObject *object); -GList *g_dbus_object_get_interfaces (GDBusObject *object); -GDBusInterface *g_dbus_object_get_interface (GDBusObject *object, - const gchar *interface_name); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanager.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanager.h deleted file mode 100644 index 05cec1a4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanager.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_MANAGER_H__ -#define __G_DBUS_OBJECT_MANAGER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_MANAGER (g_dbus_object_manager_get_type()) -#define G_DBUS_OBJECT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_MANAGER, GDBusObjectManager)) -#define G_IS_DBUS_OBJECT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_MANAGER)) -#define G_DBUS_OBJECT_MANAGER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), G_TYPE_DBUS_OBJECT_MANAGER, GDBusObjectManagerIface)) - -typedef struct _GDBusObjectManagerIface GDBusObjectManagerIface; - -/** - * GDBusObjectManagerIface: - * @parent_iface: The parent interface. - * @get_object_path: Virtual function for g_dbus_object_manager_get_object_path(). - * @get_objects: Virtual function for g_dbus_object_manager_get_objects(). - * @get_object: Virtual function for g_dbus_object_manager_get_object(). - * @get_interface: Virtual function for g_dbus_object_manager_get_interface(). - * @object_added: Signal handler for the #GDBusObjectManager::object-added signal. - * @object_removed: Signal handler for the #GDBusObjectManager::object-removed signal. - * @interface_added: Signal handler for the #GDBusObjectManager::interface-added signal. - * @interface_removed: Signal handler for the #GDBusObjectManager::interface-removed signal. - * - * Base type for D-Bus object managers. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerIface -{ - GTypeInterface parent_iface; - - /* Virtual Functions */ - const gchar *(*get_object_path) (GDBusObjectManager *manager); - GList *(*get_objects) (GDBusObjectManager *manager); - GDBusObject *(*get_object) (GDBusObjectManager *manager, - const gchar *object_path); - GDBusInterface *(*get_interface) (GDBusObjectManager *manager, - const gchar *object_path, - const gchar *interface_name); - - /* Signals */ - void (*object_added) (GDBusObjectManager *manager, - GDBusObject *object); - void (*object_removed) (GDBusObjectManager *manager, - GDBusObject *object); - - void (*interface_added) (GDBusObjectManager *manager, - GDBusObject *object, - GDBusInterface *interface_); - void (*interface_removed) (GDBusObjectManager *manager, - GDBusObject *object, - GDBusInterface *interface_); -}; - -GType g_dbus_object_manager_get_type (void) G_GNUC_CONST; -const gchar *g_dbus_object_manager_get_object_path (GDBusObjectManager *manager); -GList *g_dbus_object_manager_get_objects (GDBusObjectManager *manager); -GDBusObject *g_dbus_object_manager_get_object (GDBusObjectManager *manager, - const gchar *object_path); -GDBusInterface *g_dbus_object_manager_get_interface (GDBusObjectManager *manager, - const gchar *object_path, - const gchar *interface_name); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_MANAGER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerclient.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerclient.h deleted file mode 100644 index ad41fee6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerclient.h +++ /dev/null @@ -1,137 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_MANAGER_CLIENT_H__ -#define __G_DBUS_OBJECT_MANAGER_CLIENT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_MANAGER_CLIENT (g_dbus_object_manager_client_get_type ()) -#define G_DBUS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT, GDBusObjectManagerClient)) -#define G_DBUS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT, GDBusObjectManagerClientClass)) -#define G_DBUS_OBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT, GDBusObjectManagerClientClass)) -#define G_IS_DBUS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT)) -#define G_IS_DBUS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_MANAGER_CLIENT)) - -typedef struct _GDBusObjectManagerClientClass GDBusObjectManagerClientClass; -typedef struct _GDBusObjectManagerClientPrivate GDBusObjectManagerClientPrivate; - -/** - * GDBusObjectManagerClient: - * - * The #GDBusObjectManagerClient structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerClient -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectManagerClientPrivate *priv; -}; - -/** - * GDBusObjectManagerClientClass: - * @parent_class: The parent class. - * @interface_proxy_signal: Signal class handler for the #GDBusObjectManagerClient::interface-proxy-signal signal. - * @interface_proxy_properties_changed: Signal class handler for the #GDBusObjectManagerClient::interface-proxy-properties-changed signal. - * - * Class structure for #GDBusObjectManagerClient. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerClientClass -{ - GObjectClass parent_class; - - /* signals */ - void (*interface_proxy_signal) (GDBusObjectManagerClient *manager, - GDBusObjectProxy *object_proxy, - GDBusProxy *interface_proxy, - const gchar *sender_name, - const gchar *signal_name, - GVariant *parameters); - - void (*interface_proxy_properties_changed) (GDBusObjectManagerClient *manager, - GDBusObjectProxy *object_proxy, - GDBusProxy *interface_proxy, - GVariant *changed_properties, - const gchar* const *invalidated_properties); - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_manager_client_get_type (void) G_GNUC_CONST; -void g_dbus_object_manager_client_new (GDBusConnection *connection, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusObjectManager *g_dbus_object_manager_client_new_finish (GAsyncResult *res, - GError **error); -GDBusObjectManager *g_dbus_object_manager_client_new_sync (GDBusConnection *connection, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GError **error); -void g_dbus_object_manager_client_new_for_bus (GBusType bus_type, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusObjectManager *g_dbus_object_manager_client_new_for_bus_finish (GAsyncResult *res, - GError **error); -GDBusObjectManager *g_dbus_object_manager_client_new_for_bus_sync (GBusType bus_type, - GDBusObjectManagerClientFlags flags, - const gchar *name, - const gchar *object_path, - GDBusProxyTypeFunc get_proxy_type_func, - gpointer get_proxy_type_user_data, - GDestroyNotify get_proxy_type_destroy_notify, - GCancellable *cancellable, - GError **error); -GDBusConnection *g_dbus_object_manager_client_get_connection (GDBusObjectManagerClient *manager); -GDBusObjectManagerClientFlags g_dbus_object_manager_client_get_flags (GDBusObjectManagerClient *manager); -const gchar *g_dbus_object_manager_client_get_name (GDBusObjectManagerClient *manager); -gchar *g_dbus_object_manager_client_get_name_owner (GDBusObjectManagerClient *manager); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_MANAGER_CLIENT_H */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerserver.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerserver.h deleted file mode 100644 index 90668dd8..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectmanagerserver.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_MANAGER_SERVER_H__ -#define __G_DBUS_OBJECT_MANAGER_SERVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_MANAGER_SERVER (g_dbus_object_manager_server_get_type ()) -#define G_DBUS_OBJECT_MANAGER_SERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_MANAGER_SERVER, GDBusObjectManagerServer)) -#define G_DBUS_OBJECT_MANAGER_SERVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_MANAGER_SERVER, GDBusObjectManagerServerClass)) -#define G_DBUS_OBJECT_MANAGER_SERVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_MANAGER_SERVER, GDBusObjectManagerServerClass)) -#define G_IS_DBUS_OBJECT_MANAGER_SERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_MANAGER_SERVER)) -#define G_IS_DBUS_OBJECT_MANAGER_SERVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_MANAGER_SERVER)) - -typedef struct _GDBusObjectManagerServerClass GDBusObjectManagerServerClass; -typedef struct _GDBusObjectManagerServerPrivate GDBusObjectManagerServerPrivate; - -/** - * GDBusObjectManagerServer: - * - * The #GDBusObjectManagerServer structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerServer -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectManagerServerPrivate *priv; -}; - -/** - * GDBusObjectManagerServerClass: - * @parent_class: The parent class. - * - * Class structure for #GDBusObjectManagerServer. - * - * Since: 2.30 - */ -struct _GDBusObjectManagerServerClass -{ - GObjectClass parent_class; - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_manager_server_get_type (void) G_GNUC_CONST; -GDBusObjectManagerServer *g_dbus_object_manager_server_new (const gchar *object_path); -GDBusConnection *g_dbus_object_manager_server_get_connection (GDBusObjectManagerServer *manager); -void g_dbus_object_manager_server_set_connection (GDBusObjectManagerServer *manager, - GDBusConnection *connection); -void g_dbus_object_manager_server_export (GDBusObjectManagerServer *manager, - GDBusObjectSkeleton *object); -void g_dbus_object_manager_server_export_uniquely (GDBusObjectManagerServer *manager, - GDBusObjectSkeleton *object); -gboolean g_dbus_object_manager_server_is_exported (GDBusObjectManagerServer *manager, - GDBusObjectSkeleton *object); -gboolean g_dbus_object_manager_server_unexport (GDBusObjectManagerServer *manager, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_MANAGER_SERVER_H */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectproxy.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectproxy.h deleted file mode 100644 index 58aef853..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectproxy.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_PROXY_H__ -#define __G_DBUS_OBJECT_PROXY_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_PROXY (g_dbus_object_proxy_get_type ()) -#define G_DBUS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_PROXY, GDBusObjectProxy)) -#define G_DBUS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_PROXY, GDBusObjectProxyClass)) -#define G_DBUS_OBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_PROXY, GDBusObjectProxyClass)) -#define G_IS_DBUS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_PROXY)) -#define G_IS_DBUS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_PROXY)) - -typedef struct _GDBusObjectProxyClass GDBusObjectProxyClass; -typedef struct _GDBusObjectProxyPrivate GDBusObjectProxyPrivate; - -/** - * GDBusObjectProxy: - * - * The #GDBusObjectProxy structure contains private data and should - * only be accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectProxy -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectProxyPrivate *priv; -}; - -/** - * GDBusObjectProxyClass: - * @parent_class: The parent class. - * - * Class structure for #GDBusObjectProxy. - * - * Since: 2.30 - */ -struct _GDBusObjectProxyClass -{ - GObjectClass parent_class; - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_proxy_get_type (void) G_GNUC_CONST; -GDBusObjectProxy *g_dbus_object_proxy_new (GDBusConnection *connection, - const gchar *object_path); -GDBusConnection *g_dbus_object_proxy_get_connection (GDBusObjectProxy *proxy); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_PROXY_H */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectskeleton.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectskeleton.h deleted file mode 100644 index 918a3353..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusobjectskeleton.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#ifndef __G_DBUS_OBJECT_SKELETON_H__ -#define __G_DBUS_OBJECT_SKELETON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_OBJECT_SKELETON (g_dbus_object_skeleton_get_type ()) -#define G_DBUS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_OBJECT_SKELETON, GDBusObjectSkeleton)) -#define G_DBUS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_OBJECT_SKELETON, GDBusObjectSkeletonClass)) -#define G_DBUS_OBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_OBJECT_SKELETON, GDBusObjectSkeletonClass)) -#define G_IS_DBUS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_OBJECT_SKELETON)) -#define G_IS_DBUS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_OBJECT_SKELETON)) - -typedef struct _GDBusObjectSkeletonClass GDBusObjectSkeletonClass; -typedef struct _GDBusObjectSkeletonPrivate GDBusObjectSkeletonPrivate; - -/** - * GDBusObjectSkeleton: - * - * The #GDBusObjectSkeleton structure contains private data and should only be - * accessed using the provided API. - * - * Since: 2.30 - */ -struct _GDBusObjectSkeleton -{ - /*< private >*/ - GObject parent_instance; - GDBusObjectSkeletonPrivate *priv; -}; - -/** - * GDBusObjectSkeletonClass: - * @parent_class: The parent class. - * @authorize_method: Signal class handler for the #GDBusObjectSkeleton::authorize-method signal. - * - * Class structure for #GDBusObjectSkeleton. - * - * Since: 2.30 - */ -struct _GDBusObjectSkeletonClass -{ - GObjectClass parent_class; - - /* Signals */ - gboolean (*authorize_method) (GDBusObjectSkeleton *object, - GDBusInterfaceSkeleton *interface_, - GDBusMethodInvocation *invocation); - - /*< private >*/ - gpointer padding[8]; -}; - -GType g_dbus_object_skeleton_get_type (void) G_GNUC_CONST; -GDBusObjectSkeleton *g_dbus_object_skeleton_new (const gchar *object_path); -void g_dbus_object_skeleton_flush (GDBusObjectSkeleton *object); -void g_dbus_object_skeleton_add_interface (GDBusObjectSkeleton *object, - GDBusInterfaceSkeleton *interface_); -void g_dbus_object_skeleton_remove_interface (GDBusObjectSkeleton *object, - GDBusInterfaceSkeleton *interface_); -void g_dbus_object_skeleton_remove_interface_by_name (GDBusObjectSkeleton *object, - const gchar *interface_name); -void g_dbus_object_skeleton_set_object_path (GDBusObjectSkeleton *object, - const gchar *object_path); - -G_END_DECLS - -#endif /* __G_DBUS_OBJECT_SKELETON_H */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusproxy.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusproxy.h deleted file mode 100644 index 1e920d30..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusproxy.h +++ /dev/null @@ -1,190 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_PROXY_H__ -#define __G_DBUS_PROXY_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_PROXY (g_dbus_proxy_get_type ()) -#define G_DBUS_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_PROXY, GDBusProxy)) -#define G_DBUS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DBUS_PROXY, GDBusProxyClass)) -#define G_DBUS_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DBUS_PROXY, GDBusProxyClass)) -#define G_IS_DBUS_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_PROXY)) -#define G_IS_DBUS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DBUS_PROXY)) - -typedef struct _GDBusProxyClass GDBusProxyClass; -typedef struct _GDBusProxyPrivate GDBusProxyPrivate; - -/** - * GDBusProxy: - * - * The #GDBusProxy structure contains only private data and - * should only be accessed using the provided API. - * - * Since: 2.26 - */ -struct _GDBusProxy -{ - /*< private >*/ - GObject parent_instance; - GDBusProxyPrivate *priv; -}; - -/** - * GDBusProxyClass: - * @g_properties_changed: Signal class handler for the #GDBusProxy::g-properties-changed signal. - * @g_signal: Signal class handler for the #GDBusProxy::g-signal signal. - * - * Class structure for #GDBusProxy. - * - * Since: 2.26 - */ -struct _GDBusProxyClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - /* Signals */ - void (*g_properties_changed) (GDBusProxy *proxy, - GVariant *changed_properties, - const gchar* const *invalidated_properties); - void (*g_signal) (GDBusProxy *proxy, - const gchar *sender_name, - const gchar *signal_name, - GVariant *parameters); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[32]; -}; - -GType g_dbus_proxy_get_type (void) G_GNUC_CONST; -void g_dbus_proxy_new (GDBusConnection *connection, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusProxy *g_dbus_proxy_new_finish (GAsyncResult *res, - GError **error); -GDBusProxy *g_dbus_proxy_new_sync (GDBusConnection *connection, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GError **error); -void g_dbus_proxy_new_for_bus (GBusType bus_type, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GDBusProxy *g_dbus_proxy_new_for_bus_finish (GAsyncResult *res, - GError **error); -GDBusProxy *g_dbus_proxy_new_for_bus_sync (GBusType bus_type, - GDBusProxyFlags flags, - GDBusInterfaceInfo *info, - const gchar *name, - const gchar *object_path, - const gchar *interface_name, - GCancellable *cancellable, - GError **error); -GDBusConnection *g_dbus_proxy_get_connection (GDBusProxy *proxy); -GDBusProxyFlags g_dbus_proxy_get_flags (GDBusProxy *proxy); -const gchar *g_dbus_proxy_get_name (GDBusProxy *proxy); -gchar *g_dbus_proxy_get_name_owner (GDBusProxy *proxy); -const gchar *g_dbus_proxy_get_object_path (GDBusProxy *proxy); -const gchar *g_dbus_proxy_get_interface_name (GDBusProxy *proxy); -gint g_dbus_proxy_get_default_timeout (GDBusProxy *proxy); -void g_dbus_proxy_set_default_timeout (GDBusProxy *proxy, - gint timeout_msec); -GDBusInterfaceInfo *g_dbus_proxy_get_interface_info (GDBusProxy *proxy); -void g_dbus_proxy_set_interface_info (GDBusProxy *proxy, - GDBusInterfaceInfo *info); -GVariant *g_dbus_proxy_get_cached_property (GDBusProxy *proxy, - const gchar *property_name); -void g_dbus_proxy_set_cached_property (GDBusProxy *proxy, - const gchar *property_name, - GVariant *value); -gchar **g_dbus_proxy_get_cached_property_names (GDBusProxy *proxy); -void g_dbus_proxy_call (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GVariant *g_dbus_proxy_call_finish (GDBusProxy *proxy, - GAsyncResult *res, - GError **error); -GVariant *g_dbus_proxy_call_sync (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GCancellable *cancellable, - GError **error); - -void g_dbus_proxy_call_with_unix_fd_list (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GVariant *g_dbus_proxy_call_with_unix_fd_list_finish (GDBusProxy *proxy, - GUnixFDList **out_fd_list, - GAsyncResult *res, - GError **error); -GVariant *g_dbus_proxy_call_with_unix_fd_list_sync (GDBusProxy *proxy, - const gchar *method_name, - GVariant *parameters, - GDBusCallFlags flags, - gint timeout_msec, - GUnixFDList *fd_list, - GUnixFDList **out_fd_list, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_DBUS_PROXY_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusserver.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusserver.h deleted file mode 100644 index 3d10c1b4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusserver.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_SERVER_H__ -#define __G_DBUS_SERVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DBUS_SERVER (g_dbus_server_get_type ()) -#define G_DBUS_SERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DBUS_SERVER, GDBusServer)) -#define G_IS_DBUS_SERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DBUS_SERVER)) - -GType g_dbus_server_get_type (void) G_GNUC_CONST; -GDBusServer *g_dbus_server_new_sync (const gchar *address, - GDBusServerFlags flags, - const gchar *guid, - GDBusAuthObserver *observer, - GCancellable *cancellable, - GError **error); -const gchar *g_dbus_server_get_client_address (GDBusServer *server); -const gchar *g_dbus_server_get_guid (GDBusServer *server); -GDBusServerFlags g_dbus_server_get_flags (GDBusServer *server); -void g_dbus_server_start (GDBusServer *server); -void g_dbus_server_stop (GDBusServer *server); -gboolean g_dbus_server_is_active (GDBusServer *server); - -G_END_DECLS - -#endif /* __G_DBUS_SERVER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusutils.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdbusutils.h deleted file mode 100644 index a05a2300..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdbusutils.h +++ /dev/null @@ -1,49 +0,0 @@ -/* GDBus - GLib D-Bus Library - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DBUS_UTILS_H__ -#define __G_DBUS_UTILS_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_dbus_is_guid (const gchar *string); -gchar *g_dbus_generate_guid (void); - -gboolean g_dbus_is_name (const gchar *string); -gboolean g_dbus_is_unique_name (const gchar *string); -gboolean g_dbus_is_member_name (const gchar *string); -gboolean g_dbus_is_interface_name (const gchar *string); - -void g_dbus_gvariant_to_gvalue (GVariant *value, - GValue *out_gvalue); -GVariant *g_dbus_gvalue_to_gvariant (const GValue *gvalue, - const GVariantType *type); - -G_END_DECLS - -#endif /* __G_DBUS_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gdrive.h b/GstreamerHelper/x86/include/glib-2.0/gio/gdrive.h deleted file mode 100644 index d42b0b70..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gdrive.h +++ /dev/null @@ -1,236 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DRIVE_H__ -#define __G_DRIVE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_DRIVE (g_drive_get_type ()) -#define G_DRIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DRIVE, GDrive)) -#define G_IS_DRIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DRIVE)) -#define G_DRIVE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_DRIVE, GDriveIface)) - -/** - * GDriveIface: - * @g_iface: The parent interface. - * @changed: Signal emitted when the drive is changed. - * @disconnected: The removed signal that is emitted when the #GDrive have been disconnected. If the recipient is holding references to the object they should release them so the object can be finalized. - * @eject_button: Signal emitted when the physical eject button (if any) of a drive have been pressed. - * @get_name: Returns the name for the given #GDrive. - * @get_icon: Returns a #GIcon for the given #GDrive. - * @has_volumes: Returns %TRUE if the #GDrive has mountable volumes. - * @get_volumes: Returns a list #GList of #GVolume for the #GDrive. - * @is_media_removable: Returns %TRUE if the #GDrive supports removal and insertion of media. - * @has_media: Returns %TRUE if the #GDrive has media inserted. - * @is_media_check_automatic: Returns %TRUE if the #GDrive is capabable of automatically detecting media changes. - * @can_poll_for_media: Returns %TRUE if the #GDrive is capable of manually polling for media change. - * @can_eject: Returns %TRUE if the #GDrive can eject media. - * @eject: Ejects a #GDrive. - * @eject_finish: Finishes an eject operation. - * @poll_for_media: Poll for media insertion/removal on a #GDrive. - * @poll_for_media_finish: Finishes a media poll operation. - * @get_identifier: Returns the identifier of the given kind, or %NULL if - * the #GDrive doesn't have one. - * @enumerate_identifiers: Returns an array strings listing the kinds - * of identifiers which the #GDrive has. - * @get_start_stop_type: Gets a #GDriveStartStopType with details about starting/stopping the drive. Since 2.22. - * @can_stop: Returns %TRUE if a #GDrive can be stopped. Since 2.22. - * @stop: Stops a #GDrive. Since 2.22. - * @stop_finish: Finishes a stop operation. Since 2.22. - * @can_start: Returns %TRUE if a #GDrive can be started. Since 2.22. - * @can_start_degraded: Returns %TRUE if a #GDrive can be started degraded. Since 2.22. - * @start: Starts a #GDrive. Since 2.22. - * @start_finish: Finishes a start operation. Since 2.22. - * @stop_button: Signal emitted when the physical stop button (if any) of a drive have been pressed. Since 2.22. - * @eject_with_operation: Starts ejecting a #GDrive using a #GMountOperation. Since 2.22. - * @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @get_sort_key: Gets a key used for sorting #GDrive instances or %NULL if no such key exists. Since 2.32. - * @get_symbolic_icon: Returns a symbolic #GIcon for the given #GDrive. Since 2.34. - * - * Interface for creating #GDrive implementations. - */ -typedef struct _GDriveIface GDriveIface; - -struct _GDriveIface -{ - GTypeInterface g_iface; - - /* signals */ - void (* changed) (GDrive *drive); - void (* disconnected) (GDrive *drive); - void (* eject_button) (GDrive *drive); - - /* Virtual Table */ - char * (* get_name) (GDrive *drive); - GIcon * (* get_icon) (GDrive *drive); - gboolean (* has_volumes) (GDrive *drive); - GList * (* get_volumes) (GDrive *drive); - gboolean (* is_media_removable) (GDrive *drive); - gboolean (* has_media) (GDrive *drive); - gboolean (* is_media_check_automatic) (GDrive *drive); - gboolean (* can_eject) (GDrive *drive); - gboolean (* can_poll_for_media) (GDrive *drive); - void (* eject) (GDrive *drive, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - void (* poll_for_media) (GDrive *drive, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* poll_for_media_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - - char * (* get_identifier) (GDrive *drive, - const char *kind); - char ** (* enumerate_identifiers) (GDrive *drive); - - GDriveStartStopType (* get_start_stop_type) (GDrive *drive); - - gboolean (* can_start) (GDrive *drive); - gboolean (* can_start_degraded) (GDrive *drive); - void (* start) (GDrive *drive, - GDriveStartFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* start_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - - gboolean (* can_stop) (GDrive *drive); - void (* stop) (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* stop_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - /* signal, not VFunc */ - void (* stop_button) (GDrive *drive); - - void (* eject_with_operation) (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_with_operation_finish) (GDrive *drive, - GAsyncResult *result, - GError **error); - - const gchar * (* get_sort_key) (GDrive *drive); - GIcon * (* get_symbolic_icon) (GDrive *drive); - -}; - -GType g_drive_get_type (void) G_GNUC_CONST; - -char * g_drive_get_name (GDrive *drive); -GIcon * g_drive_get_icon (GDrive *drive); -GIcon * g_drive_get_symbolic_icon (GDrive *drive); -gboolean g_drive_has_volumes (GDrive *drive); -GList * g_drive_get_volumes (GDrive *drive); -gboolean g_drive_is_media_removable (GDrive *drive); -gboolean g_drive_has_media (GDrive *drive); -gboolean g_drive_is_media_check_automatic (GDrive *drive); -gboolean g_drive_can_poll_for_media (GDrive *drive); -gboolean g_drive_can_eject (GDrive *drive); -GLIB_DEPRECATED_FOR(g_drive_eject_with_operation) -void g_drive_eject (GDrive *drive, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_drive_eject_with_operation_finish) -gboolean g_drive_eject_finish (GDrive *drive, - GAsyncResult *result, - GError **error); -void g_drive_poll_for_media (GDrive *drive, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_poll_for_media_finish (GDrive *drive, - GAsyncResult *result, - GError **error); -char * g_drive_get_identifier (GDrive *drive, - const char *kind); -char ** g_drive_enumerate_identifiers (GDrive *drive); - -GDriveStartStopType g_drive_get_start_stop_type (GDrive *drive); - -gboolean g_drive_can_start (GDrive *drive); -gboolean g_drive_can_start_degraded (GDrive *drive); -void g_drive_start (GDrive *drive, - GDriveStartFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_start_finish (GDrive *drive, - GAsyncResult *result, - GError **error); - -gboolean g_drive_can_stop (GDrive *drive); -void g_drive_stop (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_stop_finish (GDrive *drive, - GAsyncResult *result, - GError **error); - -void g_drive_eject_with_operation (GDrive *drive, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_drive_eject_with_operation_finish (GDrive *drive, - GAsyncResult *result, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -const gchar *g_drive_get_sort_key (GDrive *drive); - -G_END_DECLS - -#endif /* __G_DRIVE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gemblem.h b/GstreamerHelper/x86/include/glib-2.0/gio/gemblem.h deleted file mode 100644 index 06816e12..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gemblem.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Clemens N. Buss - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_EMBLEM_H__ -#define __G_EMBLEM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_EMBLEM (g_emblem_get_type ()) -#define G_EMBLEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_EMBLEM, GEmblem)) -#define G_EMBLEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_EMBLEM, GEmblemClass)) -#define G_IS_EMBLEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_EMBLEM)) -#define G_IS_EMBLEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_EMBLEM)) -#define G_EMBLEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_EMBLEM, GEmblemClass)) - -/** - * GEmblem: - * - * An object for Emblems - */ -typedef struct _GEmblem GEmblem; -typedef struct _GEmblemClass GEmblemClass; - -GType g_emblem_get_type (void) G_GNUC_CONST; - -GEmblem *g_emblem_new (GIcon *icon); -GEmblem *g_emblem_new_with_origin (GIcon *icon, - GEmblemOrigin origin); -GIcon *g_emblem_get_icon (GEmblem *emblem); -GEmblemOrigin g_emblem_get_origin (GEmblem *emblem); - -G_END_DECLS - -#endif /* __G_EMBLEM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gemblemedicon.h b/GstreamerHelper/x86/include/glib-2.0/gio/gemblemedicon.h deleted file mode 100644 index ded69281..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gemblemedicon.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Gio - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Matthias Clasen - * Clemens N. Buss - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_EMBLEMED_ICON_H__ -#define __G_EMBLEMED_ICON_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_EMBLEMED_ICON (g_emblemed_icon_get_type ()) -#define G_EMBLEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_EMBLEMED_ICON, GEmblemedIcon)) -#define G_EMBLEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_EMBLEMED_ICON, GEmblemedIconClass)) -#define G_IS_EMBLEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_EMBLEMED_ICON)) -#define G_IS_EMBLEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_EMBLEMED_ICON)) -#define G_EMBLEMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_EMBLEMED_ICON, GEmblemedIconClass)) - -/** - * GEmblemedIcon: - * - * An implementation of #GIcon for icons with emblems. - **/ -typedef struct _GEmblemedIcon GEmblemedIcon; -typedef struct _GEmblemedIconClass GEmblemedIconClass; -typedef struct _GEmblemedIconPrivate GEmblemedIconPrivate; - -struct _GEmblemedIcon -{ - GObject parent_instance; - - /*< private >*/ - GEmblemedIconPrivate *priv; -}; - -struct _GEmblemedIconClass -{ - GObjectClass parent_class; -}; - -GType g_emblemed_icon_get_type (void) G_GNUC_CONST; - -GIcon *g_emblemed_icon_new (GIcon *icon, - GEmblem *emblem); -GIcon *g_emblemed_icon_get_icon (GEmblemedIcon *emblemed); -GList *g_emblemed_icon_get_emblems (GEmblemedIcon *emblemed); -void g_emblemed_icon_add_emblem (GEmblemedIcon *emblemed, - GEmblem *emblem); -void g_emblemed_icon_clear_emblems (GEmblemedIcon *emblemed); - -G_END_DECLS - -#endif /* __G_EMBLEMED_ICON_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfile.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfile.h deleted file mode 100644 index 1a724db6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfile.h +++ /dev/null @@ -1,1042 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_H__ -#define __G_FILE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE (g_file_get_type ()) -#define G_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_FILE, GFile)) -#define G_IS_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_FILE)) -#define G_FILE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_FILE, GFileIface)) - -#if 0 -/** - * GFile: - * - * A handle to an object implementing the #GFileIface interface. - * Generally stores a location within the file system. Handles do not - * necessarily represent files or directories that currently exist. - **/ -typedef struct _GFile GFile; /* Dummy typedef */ -#endif -typedef struct _GFileIface GFileIface; - - -/** - * GFileIface: - * @g_iface: The parent interface. - * @dup: Duplicates a #GFile. - * @hash: Creates a hash of a #GFile. - * @equal: Checks equality of two given #GFiles. - * @is_native: Checks to see if a file is native to the system. - * @has_uri_scheme: Checks to see if a #GFile has a given URI scheme. - * @get_uri_scheme: Gets the URI scheme for a #GFile. - * @get_basename: Gets the basename for a given #GFile. - * @get_path: Gets the current path within a #GFile. - * @get_uri: Gets a URI for the path within a #GFile. - * @get_parse_name: Gets the parsed name for the #GFile. - * @get_parent: Gets the parent directory for the #GFile. - * @prefix_matches: Checks whether a #GFile contains a specified file. - * @get_relative_path: Gets the path for a #GFile relative to a given path. - * @resolve_relative_path: Resolves a relative path for a #GFile to an absolute path. - * @get_child_for_display_name: Gets the child #GFile for a given display name. - * @enumerate_children: Gets a #GFileEnumerator with the children of a #GFile. - * @enumerate_children_async: Asynchronously gets a #GFileEnumerator with the children of a #GFile. - * @enumerate_children_finish: Finishes asynchronously enumerating the children. - * @query_info: Gets the #GFileInfo for a #GFile. - * @query_info_async: Asynchronously gets the #GFileInfo for a #GFile. - * @query_info_finish: Finishes an asynchronous query info operation. - * @query_filesystem_info: Gets a #GFileInfo for the file system #GFile is on. - * @query_filesystem_info_async: Asynchronously gets a #GFileInfo for the file system #GFile is on. - * @query_filesystem_info_finish: Finishes asynchronously getting the file system info. - * @find_enclosing_mount: Gets a #GMount for the #GFile. - * @find_enclosing_mount_async: Asynchronously gets the #GMount for a #GFile. - * @find_enclosing_mount_finish: Finishes asynchronously getting the volume. - * @set_display_name: Sets the display name for a #GFile. - * @set_display_name_async: Asynchronously sets a #GFile's display name. - * @set_display_name_finish: Finishes asynchronously setting a #GFile's display name. - * @query_settable_attributes: Returns a list of #GFileAttributes that can be set. - * @_query_settable_attributes_async: Asynchronously gets a list of #GFileAttributes that can be set. - * @_query_settable_attributes_finish: Finishes asynchronously querying settable attributes. - * @query_writable_namespaces: Returns a list of #GFileAttribute namespaces that are writable. - * @_query_writable_namespaces_async: Asynchronously gets a list of #GFileAttribute namespaces that are writable. - * @_query_writable_namespaces_finish: Finishes asynchronously querying the writable namespaces. - * @set_attribute: Sets a #GFileAttribute. - * @set_attributes_from_info: Sets a #GFileAttribute with information from a #GFileInfo. - * @set_attributes_async: Asynchronously sets a file's attributes. - * @set_attributes_finish: Finishes setting a file's attributes asynchronously. - * @read_fn: Reads a file asynchronously. - * @read_async: Asynchronously reads a file. - * @read_finish: Finishes asynchronously reading a file. - * @append_to: Writes to the end of a file. - * @append_to_async: Asynchronously writes to the end of a file. - * @append_to_finish: Finishes an asynchronous file append operation. - * @create: Creates a new file. - * @create_async: Asynchronously creates a file. - * @create_finish: Finishes asynchronously creating a file. - * @replace: Replaces the contents of a file. - * @replace_async: Asynchronously replaces the contents of a file. - * @replace_finish: Finishes asynchronously replacing a file. - * @delete_file: Deletes a file. - * @delete_file_async: Asynchronously deletes a file. - * @delete_file_finish: Finishes an asynchronous delete. - * @trash: Sends a #GFile to the Trash location. - * @_trash_async: Asynchronously sends a #GFile to the Trash location. - * @_trash_finish: Finishes an asynchronous file trashing operation. - * @make_directory: Makes a directory. - * @_make_directory_async: Asynchronously makes a directory. - * @_make_directory_finish: Finishes making a directory asynchronously. - * @make_symbolic_link: Makes a symbolic link. - * @_make_symbolic_link_async: Asynchronously makes a symbolic link - * @_make_symbolic_link_finish: Finishes making a symbolic link asynchronously. - * @copy: Copies a file. - * @copy_async: Asynchronously copies a file. - * @copy_finish: Finishes an asynchronous copy operation. - * @move: Moves a file. - * @_move_async: Asynchronously moves a file. - * @_move_finish: Finishes an asynchronous move operation. - * @mount_mountable: Mounts a mountable object. - * @mount_mountable_finish: Finishes a mounting operation. - * @unmount_mountable: Unmounts a mountable object. - * @unmount_mountable_finish: Finishes an unmount operation. - * @eject_mountable: Ejects a mountable. - * @eject_mountable_finish: Finishes an eject operation. - * @mount_enclosing_volume: Mounts a specified location. - * @mount_enclosing_volume_finish: Finishes mounting a specified location. - * @monitor_dir: Creates a #GFileMonitor for the location. - * @monitor_file: Creates a #GFileMonitor for the location. - * @open_readwrite: Open file read/write. Since 2.22. - * @open_readwrite_async: Asynchronously opens file read/write. Since 2.22. - * @open_readwrite_finish: Finishes an asynchronous open read/write. Since 2.22. - * @create_readwrite: Creates file read/write. Since 2.22. - * @create_readwrite_async: Asynchronously creates file read/write. Since 2.22. - * @create_readwrite_finish: Finishes an asynchronous creates read/write. Since 2.22. - * @replace_readwrite: Replaces file read/write. Since 2.22. - * @replace_readwrite_async: Asynchronously replaces file read/write. Since 2.22. - * @replace_readwrite_finish: Finishes an asynchronous replace read/write. Since 2.22. - * @start_mountable: Starts a mountable object. Since 2.22. - * @start_mountable_finish: Finishes an start operation. Since 2.22. - * @stop_mountable: Stops a mountable. Since 2.22. - * @stop_mountable_finish: Finishes an stop operation. Since 2.22. - * @supports_thread_contexts: a boolean that indicates whether the #GFile implementation supports thread-default contexts. Since 2.22. - * @unmount_mountable_with_operation: Unmounts a mountable object using a #GMountOperation. Since 2.22. - * @unmount_mountable_with_operation_finish: Finishes an unmount operation using a #GMountOperation. Since 2.22. - * @eject_mountable_with_operation: Ejects a mountable object using a #GMountOperation. Since 2.22. - * @eject_mountable_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @poll_mountable: Polls a mountable object for media changes. Since 2.22. - * @poll_mountable_finish: Finishes an poll operation for media changes. Since 2.22. - * - * An interface for writing VFS file handles. - **/ -struct _GFileIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GFile * (* dup) (GFile *file); - guint (* hash) (GFile *file); - gboolean (* equal) (GFile *file1, - GFile *file2); - gboolean (* is_native) (GFile *file); - gboolean (* has_uri_scheme) (GFile *file, - const char *uri_scheme); - char * (* get_uri_scheme) (GFile *file); - char * (* get_basename) (GFile *file); - char * (* get_path) (GFile *file); - char * (* get_uri) (GFile *file); - char * (* get_parse_name) (GFile *file); - GFile * (* get_parent) (GFile *file); - gboolean (* prefix_matches) (GFile *prefix, - GFile *file); - char * (* get_relative_path) (GFile *parent, - GFile *descendant); - GFile * (* resolve_relative_path) (GFile *file, - const char *relative_path); - GFile * (* get_child_for_display_name) (GFile *file, - const char *display_name, - GError **error); - - GFileEnumerator * (* enumerate_children) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* enumerate_children_async) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileEnumerator * (* enumerate_children_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileInfo * (* query_info) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileInfo * (* query_filesystem_info) (GFile *file, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_filesystem_info_async) (GFile *file, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_filesystem_info_finish)(GFile *file, - GAsyncResult *res, - GError **error); - - GMount * (* find_enclosing_mount) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* find_enclosing_mount_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GMount * (* find_enclosing_mount_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFile * (* set_display_name) (GFile *file, - const char *display_name, - GCancellable *cancellable, - GError **error); - void (* set_display_name_async) (GFile *file, - const char *display_name, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFile * (* set_display_name_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileAttributeInfoList * (* query_settable_attributes) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _query_settable_attributes_async) (void); - void (* _query_settable_attributes_finish) (void); - - GFileAttributeInfoList * (* query_writable_namespaces) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _query_writable_namespaces_async) (void); - void (* _query_writable_namespaces_finish) (void); - - gboolean (* set_attribute) (GFile *file, - const char *attribute, - GFileAttributeType type, - gpointer value_p, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - gboolean (* set_attributes_from_info) (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* set_attributes_async) (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* set_attributes_finish) (GFile *file, - GAsyncResult *result, - GFileInfo **info, - GError **error); - - GFileInputStream * (* read_fn) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* read_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInputStream * (* read_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileOutputStream * (* append_to) (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* append_to_async) (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileOutputStream * (* append_to_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileOutputStream * (* create) (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* create_async) (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileOutputStream * (* create_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - GFileOutputStream * (* replace) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* replace_async) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileOutputStream * (* replace_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - gboolean (* delete_file) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* delete_file_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* delete_file_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - gboolean (* trash) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _trash_async) (void); - void (* _trash_finish) (void); - - gboolean (* make_directory) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* _make_directory_async) (void); - void (* _make_directory_finish) (void); - - gboolean (* make_symbolic_link) (GFile *file, - const char *symlink_value, - GCancellable *cancellable, - GError **error); - void (* _make_symbolic_link_async) (void); - void (* _make_symbolic_link_finish) (void); - - gboolean (* copy) (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); - void (* copy_async) (GFile *source, - GFile *destination, - GFileCopyFlags flags, - int io_priority, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* copy_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - gboolean (* move) (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); - void (* _move_async) (void); - void (* _move_finish) (void); - - void (* mount_mountable) (GFile *file, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFile * (* mount_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* unmount_mountable) (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* eject_mountable) (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* mount_enclosing_volume) (GFile *location, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* mount_enclosing_volume_finish) (GFile *location, - GAsyncResult *result, - GError **error); - - GFileMonitor * (* monitor_dir) (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); - GFileMonitor * (* monitor_file) (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); - - GFileIOStream * (* open_readwrite) (GFile *file, - GCancellable *cancellable, - GError **error); - void (* open_readwrite_async) (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileIOStream * (* open_readwrite_finish) (GFile *file, - GAsyncResult *res, - GError **error); - GFileIOStream * (* create_readwrite) (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* create_readwrite_async) (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileIOStream * (* create_readwrite_finish) (GFile *file, - GAsyncResult *res, - GError **error); - GFileIOStream * (* replace_readwrite) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); - void (* replace_readwrite_async) (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileIOStream * (* replace_readwrite_finish) (GFile *file, - GAsyncResult *res, - GError **error); - - void (* start_mountable) (GFile *file, - GDriveStartFlags flags, - GMountOperation *start_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* start_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* stop_mountable) (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* stop_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - gboolean supports_thread_contexts; - - void (* unmount_mountable_with_operation) (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_mountable_with_operation_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* eject_mountable_with_operation) (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_mountable_with_operation_finish) (GFile *file, - GAsyncResult *result, - GError **error); - - void (* poll_mountable) (GFile *file, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* poll_mountable_finish) (GFile *file, - GAsyncResult *result, - GError **error); -}; - -GType g_file_get_type (void) G_GNUC_CONST; - -GFile * g_file_new_for_path (const char *path); -GFile * g_file_new_for_uri (const char *uri); -GFile * g_file_new_for_commandline_arg (const char *arg); -GLIB_AVAILABLE_IN_2_32 -GFile * g_file_new_tmp (const char *tmpl, - GFileIOStream **iostream, - GError **error); -GFile * g_file_parse_name (const char *parse_name); -GFile * g_file_dup (GFile *file); -guint g_file_hash (gconstpointer file); -gboolean g_file_equal (GFile *file1, - GFile *file2); -char * g_file_get_basename (GFile *file); -char * g_file_get_path (GFile *file); -char * g_file_get_uri (GFile *file); -char * g_file_get_parse_name (GFile *file); -GFile * g_file_get_parent (GFile *file); -gboolean g_file_has_parent (GFile *file, - GFile *parent); -GFile * g_file_get_child (GFile *file, - const char *name); -GFile * g_file_get_child_for_display_name (GFile *file, - const char *display_name, - GError **error); -gboolean g_file_has_prefix (GFile *file, - GFile *prefix); -char * g_file_get_relative_path (GFile *parent, - GFile *descendant); -GFile * g_file_resolve_relative_path (GFile *file, - const char *relative_path); -gboolean g_file_is_native (GFile *file); -gboolean g_file_has_uri_scheme (GFile *file, - const char *uri_scheme); -char * g_file_get_uri_scheme (GFile *file); -GFileInputStream * g_file_read (GFile *file, - GCancellable *cancellable, - GError **error); -void g_file_read_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInputStream * g_file_read_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileOutputStream * g_file_append_to (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -GFileOutputStream * g_file_create (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -GFileOutputStream * g_file_replace (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_append_to_async (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileOutputStream * g_file_append_to_finish (GFile *file, - GAsyncResult *res, - GError **error); -void g_file_create_async (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileOutputStream * g_file_create_finish (GFile *file, - GAsyncResult *res, - GError **error); -void g_file_replace_async (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileOutputStream * g_file_replace_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileIOStream * g_file_open_readwrite (GFile *file, - GCancellable *cancellable, - GError **error); -void g_file_open_readwrite_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileIOStream * g_file_open_readwrite_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileIOStream * g_file_create_readwrite (GFile *file, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_create_readwrite_async (GFile *file, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileIOStream * g_file_create_readwrite_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileIOStream * g_file_replace_readwrite (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_replace_readwrite_async (GFile *file, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileIOStream * g_file_replace_readwrite_finish (GFile *file, - GAsyncResult *res, - GError **error); -gboolean g_file_query_exists (GFile *file, - GCancellable *cancellable); -GFileType g_file_query_file_type (GFile *file, - GFileQueryInfoFlags flags, - GCancellable *cancellable); -GFileInfo * g_file_query_info (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_query_info_async (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo * g_file_query_info_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileInfo * g_file_query_filesystem_info (GFile *file, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_query_filesystem_info_async (GFile *file, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo * g_file_query_filesystem_info_finish (GFile *file, - GAsyncResult *res, - GError **error); -GMount * g_file_find_enclosing_mount (GFile *file, - GCancellable *cancellable, - GError **error); -void g_file_find_enclosing_mount_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GMount * g_file_find_enclosing_mount_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFileEnumerator * g_file_enumerate_children (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_enumerate_children_async (GFile *file, - const char *attributes, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileEnumerator * g_file_enumerate_children_finish (GFile *file, - GAsyncResult *res, - GError **error); -GFile * g_file_set_display_name (GFile *file, - const char *display_name, - GCancellable *cancellable, - GError **error); -void g_file_set_display_name_async (GFile *file, - const char *display_name, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFile * g_file_set_display_name_finish (GFile *file, - GAsyncResult *res, - GError **error); -gboolean g_file_delete (GFile *file, - GCancellable *cancellable, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -void g_file_delete_async (GFile *file, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_file_delete_finish (GFile *file, - GAsyncResult *result, - GError **error); - -gboolean g_file_trash (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_copy (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); -void g_file_copy_async (GFile *source, - GFile *destination, - GFileCopyFlags flags, - int io_priority, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_copy_finish (GFile *file, - GAsyncResult *res, - GError **error); -gboolean g_file_move (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GFileProgressCallback progress_callback, - gpointer progress_callback_data, - GError **error); -gboolean g_file_make_directory (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_make_directory_with_parents (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_make_symbolic_link (GFile *file, - const char *symlink_value, - GCancellable *cancellable, - GError **error); -GFileAttributeInfoList *g_file_query_settable_attributes (GFile *file, - GCancellable *cancellable, - GError **error); -GFileAttributeInfoList *g_file_query_writable_namespaces (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute (GFile *file, - const char *attribute, - GFileAttributeType type, - gpointer value_p, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attributes_from_info (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_set_attributes_async (GFile *file, - GFileInfo *info, - GFileQueryInfoFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_set_attributes_finish (GFile *file, - GAsyncResult *result, - GFileInfo **info, - GError **error); -gboolean g_file_set_attribute_string (GFile *file, - const char *attribute, - const char *value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_byte_string (GFile *file, - const char *attribute, - const char *value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_uint32 (GFile *file, - const char *attribute, - guint32 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_int32 (GFile *file, - const char *attribute, - gint32 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_uint64 (GFile *file, - const char *attribute, - guint64 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_file_set_attribute_int64 (GFile *file, - const char *attribute, - gint64 value, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); -void g_file_mount_enclosing_volume (GFile *location, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_mount_enclosing_volume_finish (GFile *location, - GAsyncResult *result, - GError **error); -void g_file_mount_mountable (GFile *file, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFile * g_file_mount_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -GLIB_DEPRECATED_FOR(g_file_unmount_mountable_with_operation) -void g_file_unmount_mountable (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_file_unmount_mountable_with_operation_finish) -gboolean g_file_unmount_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -void g_file_unmount_mountable_with_operation (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_unmount_mountable_with_operation_finish (GFile *file, - GAsyncResult *result, - GError **error); -GLIB_DEPRECATED_FOR(g_file_eject_mountable_with_operation) -void g_file_eject_mountable (GFile *file, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_file_eject_mountable_with_operation_finish) -gboolean g_file_eject_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -void g_file_eject_mountable_with_operation (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_eject_mountable_with_operation_finish (GFile *file, - GAsyncResult *result, - GError **error); - -gboolean g_file_copy_attributes (GFile *source, - GFile *destination, - GFileCopyFlags flags, - GCancellable *cancellable, - GError **error); - - -GFileMonitor* g_file_monitor_directory (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); -GFileMonitor* g_file_monitor_file (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); -GFileMonitor* g_file_monitor (GFile *file, - GFileMonitorFlags flags, - GCancellable *cancellable, - GError **error); - -void g_file_start_mountable (GFile *file, - GDriveStartFlags flags, - GMountOperation *start_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_start_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); -void g_file_stop_mountable (GFile *file, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_stop_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); - -void g_file_poll_mountable (GFile *file, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_poll_mountable_finish (GFile *file, - GAsyncResult *result, - GError **error); - -/* Utilities */ - -GAppInfo *g_file_query_default_handler (GFile *file, - GCancellable *cancellable, - GError **error); -gboolean g_file_load_contents (GFile *file, - GCancellable *cancellable, - char **contents, - gsize *length, - char **etag_out, - GError **error); -void g_file_load_contents_async (GFile *file, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_load_contents_finish (GFile *file, - GAsyncResult *res, - char **contents, - gsize *length, - char **etag_out, - GError **error); -void g_file_load_partial_contents_async (GFile *file, - GCancellable *cancellable, - GFileReadMoreCallback read_more_callback, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_load_partial_contents_finish (GFile *file, - GAsyncResult *res, - char **contents, - gsize *length, - char **etag_out, - GError **error); -gboolean g_file_replace_contents (GFile *file, - const char *contents, - gsize length, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - char **new_etag, - GCancellable *cancellable, - GError **error); -void g_file_replace_contents_async (GFile *file, - const char *contents, - gsize length, - const char *etag, - gboolean make_backup, - GFileCreateFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_replace_contents_finish (GFile *file, - GAsyncResult *res, - char **new_etag, - GError **error); - -gboolean g_file_supports_thread_contexts (GFile *file); - -G_END_DECLS - -#endif /* __G_FILE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileattribute.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileattribute.h deleted file mode 100644 index 445cdd77..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileattribute.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_ATTRIBUTE_H__ -#define __G_FILE_ATTRIBUTE_H__ - -#include - -G_BEGIN_DECLS - -/** - * GFileAttributeInfo: - * @name: the name of the attribute. - * @type: the #GFileAttributeType type of the attribute. - * @flags: a set of #GFileAttributeInfoFlags. - * - * Information about a specific attribute. - **/ -struct _GFileAttributeInfo -{ - char *name; - GFileAttributeType type; - GFileAttributeInfoFlags flags; -}; - -/** - * GFileAttributeInfoList: - * @infos: an array of #GFileAttributeInfos. - * @n_infos: the number of values in the array. - * - * Acts as a lightweight registry for possible valid file attributes. - * The registry stores Key-Value pair formats as #GFileAttributeInfos. - **/ -struct _GFileAttributeInfoList -{ - GFileAttributeInfo *infos; - int n_infos; -}; - -#define G_TYPE_FILE_ATTRIBUTE_INFO_LIST (g_file_attribute_info_list_get_type ()) -GType g_file_attribute_info_list_get_type (void); - -GFileAttributeInfoList * g_file_attribute_info_list_new (void); -GFileAttributeInfoList * g_file_attribute_info_list_ref (GFileAttributeInfoList *list); -void g_file_attribute_info_list_unref (GFileAttributeInfoList *list); -GFileAttributeInfoList * g_file_attribute_info_list_dup (GFileAttributeInfoList *list); -const GFileAttributeInfo *g_file_attribute_info_list_lookup (GFileAttributeInfoList *list, - const char *name); -void g_file_attribute_info_list_add (GFileAttributeInfoList *list, - const char *name, - GFileAttributeType type, - GFileAttributeInfoFlags flags); - -G_END_DECLS - -#endif /* __G_FILE_INFO_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileenumerator.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileenumerator.h deleted file mode 100644 index 9cd2f3ec..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileenumerator.h +++ /dev/null @@ -1,132 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_ENUMERATOR_H__ -#define __G_FILE_ENUMERATOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_ENUMERATOR (g_file_enumerator_get_type ()) -#define G_FILE_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_ENUMERATOR, GFileEnumerator)) -#define G_FILE_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_ENUMERATOR, GFileEnumeratorClass)) -#define G_IS_FILE_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_ENUMERATOR)) -#define G_IS_FILE_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_ENUMERATOR)) -#define G_FILE_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_ENUMERATOR, GFileEnumeratorClass)) - -/** - * GFileEnumerator: - * - * A per matched file iterator. - **/ -typedef struct _GFileEnumeratorClass GFileEnumeratorClass; -typedef struct _GFileEnumeratorPrivate GFileEnumeratorPrivate; - -struct _GFileEnumerator -{ - GObject parent_instance; - - /*< private >*/ - GFileEnumeratorPrivate *priv; -}; - -struct _GFileEnumeratorClass -{ - GObjectClass parent_class; - - /* Virtual Table */ - - GFileInfo * (* next_file) (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - gboolean (* close_fn) (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - - void (* next_files_async) (GFileEnumerator *enumerator, - int num_files, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GList * (* next_files_finish) (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); - void (* close_async) (GFileEnumerator *enumerator, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); -}; - -GType g_file_enumerator_get_type (void) G_GNUC_CONST; - -GFileInfo *g_file_enumerator_next_file (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); -gboolean g_file_enumerator_close (GFileEnumerator *enumerator, - GCancellable *cancellable, - GError **error); -void g_file_enumerator_next_files_async (GFileEnumerator *enumerator, - int num_files, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList * g_file_enumerator_next_files_finish (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); -void g_file_enumerator_close_async (GFileEnumerator *enumerator, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_file_enumerator_close_finish (GFileEnumerator *enumerator, - GAsyncResult *result, - GError **error); -gboolean g_file_enumerator_is_closed (GFileEnumerator *enumerator); -gboolean g_file_enumerator_has_pending (GFileEnumerator *enumerator); -void g_file_enumerator_set_pending (GFileEnumerator *enumerator, - gboolean pending); -GFile * g_file_enumerator_get_container (GFileEnumerator *enumerator); - -G_END_DECLS - -#endif /* __G_FILE_ENUMERATOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileicon.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileicon.h deleted file mode 100644 index 08ae7919..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileicon.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_ICON_H__ -#define __G_FILE_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_ICON (g_file_icon_get_type ()) -#define G_FILE_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_ICON, GFileIcon)) -#define G_FILE_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_ICON, GFileIconClass)) -#define G_IS_FILE_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_ICON)) -#define G_IS_FILE_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_ICON)) -#define G_FILE_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_ICON, GFileIconClass)) - -/** - * GFileIcon: - * - * Gets an icon for a #GFile. Implements #GLoadableIcon. - **/ -typedef struct _GFileIconClass GFileIconClass; - -GType g_file_icon_get_type (void) G_GNUC_CONST; - -GIcon * g_file_icon_new (GFile *file); - -GFile * g_file_icon_get_file (GFileIcon *icon); - -G_END_DECLS - -#endif /* __G_FILE_ICON_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileinfo.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileinfo.h deleted file mode 100644 index 9399e534..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileinfo.h +++ /dev/null @@ -1,983 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_INFO_H__ -#define __G_FILE_INFO_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_INFO (g_file_info_get_type ()) -#define G_FILE_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_INFO, GFileInfo)) -#define G_FILE_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_INFO, GFileInfoClass)) -#define G_IS_FILE_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_INFO)) -#define G_IS_FILE_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_INFO)) -#define G_FILE_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_INFO, GFileInfoClass)) - -/** - * GFileInfo: - * - * Stores information about a file system object referenced by a #GFile. - **/ -typedef struct _GFileInfoClass GFileInfoClass; - - -/* Common Attributes: */ -/** - * G_FILE_ATTRIBUTE_STANDARD_TYPE: - * - * A key in the "standard" namespace for storing file types. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - * The value for this key should contain a #GFileType. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_TYPE "standard::type" /* uint32 (GFileType) */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN: - * - * A key in the "standard" namespace for checking if a file is hidden. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN "standard::is-hidden" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP: - * - * A key in the "standard" namespace for checking if a file is a backup file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP "standard::is-backup" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK: - * - * A key in the "standard" namespace for checking if the file is a symlink. - * Typically the actual type is something else, if we followed the symlink - * to get the type. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK "standard::is-symlink" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL: - * - * A key in the "standard" namespace for checking if a file is virtual. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL "standard::is-virtual" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_NAME: - * - * A key in the "standard" namespace for getting the name of the file. - * The name is the on-disk filename which may not be in any known encoding, - * and can thus not be generally displayed as is. - * Use #G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME if you need to display the - * name in a user interface. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_NAME "standard::name" /* byte string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME: - * - * A key in the "standard" namespace for getting the display name of the file. - * A display name is guaranteed to be in UTF8 and can thus be displayed in - * the UI. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "standard::display-name" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME: - * - * A key in the "standard" namespace for edit name of the file. - * An edit name is similar to the display name, but it is meant to be - * used when you want to rename the file in the UI. The display name - * might contain information you don't want in the new filename (such as - * "(invalid unicode)" if the filename was in an invalid encoding). - * - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME "standard::edit-name" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_COPY_NAME: - * - * A key in the "standard" namespace for getting the copy name of the file. - * The copy name is an optional version of the name. If available it's always - * in UTF8, and corresponds directly to the original filename (only transcoded to - * UTF8). This is useful if you want to copy the file to another filesystem that - * might have a different encoding. If the filename is not a valid string in the - * encoding selected for the filesystem it is in then the copy name will not be set. - * - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_COPY_NAME "standard::copy-name" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION: - * - * A key in the "standard" namespace for getting the description of the file. - * The description is a utf8 string that describes the file, generally containing - * the filename, but can also contain furter information. Example descriptions - * could be "filename (on hostname)" for a remote file or "filename (in trash)" - * for a file in the trash. This is useful for instance as the window title - * when displaying a directory or for a bookmarks menu. - * - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION "standard::description" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_ICON: - * - * A key in the "standard" namespace for getting the icon for the file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT. - * The value for this key should contain a #GIcon. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_ICON "standard::icon" /* object (GIcon) */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON: - * - * A key in the "standard" namespace for getting the symbolic icon for the file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT. - * The value for this key should contain a #GIcon. - * - * Since: 2.34 - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON "standard::symbolic-icon" /* object (GIcon) */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE: - * - * A key in the "standard" namespace for getting the content type of the file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * The value for this key should contain a valid content type. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "standard::content-type" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE: - * - * A key in the "standard" namespace for getting the fast content type. - * The fast content type isn't as reliable as the regular one, as it - * only uses the filename to guess it, but it is faster to calculate than the - * regular content type. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * - **/ -#define G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE "standard::fast-content-type" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SIZE: - * - * A key in the "standard" namespace for getting the file's size (in bytes). - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SIZE "standard::size" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE: - * - * A key in the "standard" namespace for getting the amount of disk space - * that is consumed by the file (in bytes). This will generally be larger - * than the file size (due to block size overhead) but can occasionally be - * smaller (for example, for sparse files). - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - * - * Since: 2.20 - **/ -#define G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE "standard::allocated-size" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET: - * - * A key in the "standard" namespace for getting the symlink target, if the file - * is a symlink. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET "standard::symlink-target" /* byte string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_TARGET_URI: - * - * A key in the "standard" namespace for getting the target URI for the file, in - * the case of %G_FILE_TYPE_SHORTCUT or %G_FILE_TYPE_MOUNTABLE files. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_TARGET_URI "standard::target-uri" /* string */ - -/** - * G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER: - * - * A key in the "standard" namespace for setting the sort order of a file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_INT32. - * An example use would be in file managers, which would use this key - * to set the order files are displayed. Files with smaller sort order - * should be sorted first, and files without sort order as if sort order - * was zero. - **/ -#define G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER "standard::sort-order" /* int32 */ - -/* Entity tags, used to avoid missing updates on save */ - -/** - * G_FILE_ATTRIBUTE_ETAG_VALUE: - * - * A key in the "etag" namespace for getting the value of the file's - * entity tag. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_ETAG_VALUE "etag::value" /* string */ - -/* File identifier, for e.g. avoiding loops when doing recursive - * directory scanning - */ - -/** - * G_FILE_ATTRIBUTE_ID_FILE: - * - * A key in the "id" namespace for getting a file identifier. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * An example use would be during listing files, to avoid recursive - * directory scanning. - **/ -#define G_FILE_ATTRIBUTE_ID_FILE "id::file" /* string */ - -/** - * G_FILE_ATTRIBUTE_ID_FILESYSTEM: - * - * A key in the "id" namespace for getting the file system identifier. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * An example use would be during drag and drop to see if the source - * and target are on the same filesystem (default to move) or not (default - * to copy). - **/ -#define G_FILE_ATTRIBUTE_ID_FILESYSTEM "id::filesystem" /* string */ - -/* Calculated Access Rights for current user */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_READ: - * - * A key in the "access" namespace for getting read privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to read the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_READ "access::can-read" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE: - * - * A key in the "access" namespace for getting write privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to write to the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE "access::can-write" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE: - * - * A key in the "access" namespace for getting execution privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to execute the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE "access::can-execute" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE: - * - * A key in the "access" namespace for checking deletion privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to delete the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE "access::can-delete" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH: - * - * A key in the "access" namespace for checking trashing privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to move the file to - * the trash. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH "access::can-trash" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME: - * - * A key in the "access" namespace for checking renaming privileges. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * This attribute will be %TRUE if the user is able to rename the file. - **/ -#define G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME "access::can-rename" /* boolean */ - -/* TODO: Should we have special version for directories? can_enumerate, etc */ - -/* Mountable attributes */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) is mountable. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT "mountable::can-mount" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) is unmountable. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT "mountable::can-unmount" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be ejected. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT "mountable::can-eject" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE: - * - * A key in the "mountable" namespace for getting the unix device. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE "mountable::unix-device" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE: - * - * A key in the "mountable" namespace for getting the unix device file. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * - * Since: 2.22 - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE "mountable::unix-device-file" /* string */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI: - * - * A key in the "mountable" namespace for getting the HAL UDI for the mountable - * file. Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI "mountable::hal-udi" /* string */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be started. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START "mountable::can-start" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be started - * degraded. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED "mountable::can-start-degraded" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be stopped. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP "mountable::can-stop" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE: - * - * A key in the "mountable" namespace for getting the #GDriveStartStopType. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE "mountable::start-stop-type" /* uint32 (GDriveStartStopType) */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be polled. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL "mountable::can-poll" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC: - * - * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) - * is automatically polled for media. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - * - * Since: 2.22 - */ -#define G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC "mountable::is-media-check-automatic" /* boolean */ - -/* Time attributes */ - -/** - * G_FILE_ATTRIBUTE_TIME_MODIFIED: - * - * A key in the "time" namespace for getting the time the file was last - * modified. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64, and contains the UNIX time since the - * file was modified. - **/ -#define G_FILE_ATTRIBUTE_TIME_MODIFIED "time::modified" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC: - * - * A key in the "time" namespace for getting the miliseconds of the time - * the file was last modified. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_MODIFIED. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC "time::modified-usec" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TIME_ACCESS: - * - * A key in the "time" namespace for getting the time the file was last - * accessed. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64, and contains the UNIX time since the - * file was last accessed. - **/ -#define G_FILE_ATTRIBUTE_TIME_ACCESS "time::access" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_ACCESS_USEC: - * - * A key in the "time" namespace for getting the microseconds of the time - * the file was last accessed. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_ACCESS. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_ACCESS_USEC "time::access-usec" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CHANGED: - * - * A key in the "time" namespace for getting the time the file was last - * changed. Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64, - * and contains the UNIX time since the file was last changed. - * - * This corresponds to the traditional UNIX ctime. - **/ -#define G_FILE_ATTRIBUTE_TIME_CHANGED "time::changed" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CHANGED_USEC: - * - * A key in the "time" namespace for getting the microseconds of the time - * the file was last changed. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_CHANGED. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_CHANGED_USEC "time::changed-usec" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CREATED: - * - * A key in the "time" namespace for getting the time the file was created. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64, - * and contains the UNIX time since the file was created. - * - * This corresponds to the NTFS ctime. - **/ -#define G_FILE_ATTRIBUTE_TIME_CREATED "time::created" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_TIME_CREATED_USEC: - * - * A key in the "time" namespace for getting the microseconds of the time - * the file was created. This should be used in conjunction with - * #G_FILE_ATTRIBUTE_TIME_CREATED. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TIME_CREATED_USEC "time::created-usec" /* uint32 */ - -/* Unix specific attributes */ - -/** - * G_FILE_ATTRIBUTE_UNIX_DEVICE: - * - * A key in the "unix" namespace for getting the device id of the device the - * file is located on (see stat() documentation). This attribute is only - * available for UNIX file systems. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_DEVICE "unix::device" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_INODE: - * - * A key in the "unix" namespace for getting the inode of the file. - * This attribute is only available for UNIX file systems. Corresponding - * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_UNIX_INODE "unix::inode" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_MODE: - * - * A key in the "unix" namespace for getting the mode of the file - * (e.g. whether the file is a regular file, symlink, etc). See lstat() - * documentation. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_MODE "unix::mode" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_NLINK: - * - * A key in the "unix" namespace for getting the number of hard links - * for a file. See lstat() documentation. This attribute is only available - * for UNIX file systems. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_NLINK "unix::nlink" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_UID: - * - * A key in the "unix" namespace for getting the user ID for the file. - * This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_UID "unix::uid" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_GID: - * - * A key in the "unix" namespace for getting the group ID for the file. - * This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_GID "unix::gid" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_RDEV: - * - * A key in the "unix" namespace for getting the device ID for the file - * (if it is a special file). See lstat() documentation. This attribute - * is only available for UNIX file systems. Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_RDEV "unix::rdev" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE: - * - * A key in the "unix" namespace for getting the block size for the file - * system. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE "unix::block-size" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_BLOCKS: - * - * A key in the "unix" namespace for getting the number of blocks allocated - * for the file. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_UNIX_BLOCKS "unix::blocks" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT: - * - * A key in the "unix" namespace for checking if the file represents a - * UNIX mount point. This attribute is %TRUE if the file is a UNIX mount - * point. This attribute is only available for UNIX file systems. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT "unix::is-mountpoint" /* boolean */ - -/* DOS specific attributes */ - -/** - * G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE: - * - * A key in the "dos" namespace for checking if the file's archive flag - * is set. This attribute is %TRUE if the archive flag is set. This attribute - * is only available for DOS file systems. Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE "dos::is-archive" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_DOS_IS_SYSTEM: - * - * A key in the "dos" namespace for checking if the file's backup flag - * is set. This attribute is %TRUE if the backup flag is set. This attribute - * is only available for DOS file systems. Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_DOS_IS_SYSTEM "dos::is-system" /* boolean */ - -/* Owner attributes */ - -/** - * G_FILE_ATTRIBUTE_OWNER_USER: - * - * A key in the "owner" namespace for getting the user name of the - * file's owner. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_OWNER_USER "owner::user" /* string */ - -/** - * G_FILE_ATTRIBUTE_OWNER_USER_REAL: - * - * A key in the "owner" namespace for getting the real name of the - * user that owns the file. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_OWNER_USER_REAL "owner::user-real" /* string */ - -/** - * G_FILE_ATTRIBUTE_OWNER_GROUP: - * - * A key in the "owner" namespace for getting the file owner's group. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_OWNER_GROUP "owner::group" /* string */ - -/* Thumbnails */ - -/** - * G_FILE_ATTRIBUTE_THUMBNAIL_PATH: - * - * A key in the "thumbnail" namespace for getting the path to the thumbnail - * image. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - **/ -#define G_FILE_ATTRIBUTE_THUMBNAIL_PATH "thumbnail::path" /* bytestring */ -/** - * G_FILE_ATTRIBUTE_THUMBNAILING_FAILED: - * - * A key in the "thumbnail" namespace for checking if thumbnailing failed. - * This attribute is %TRUE if thumbnailing failed. Corresponding - * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_THUMBNAILING_FAILED "thumbnail::failed" /* boolean */ - -/* Preview */ - -/** - * G_FILE_ATTRIBUTE_PREVIEW_ICON: - * - * A key in the "preview" namespace for getting a #GIcon that can be - * used to get preview of the file. For example, it may be a low - * resolution thumbnail without metadata. Corresponding - * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT. The value - * for this key should contain a #GIcon. - * - * Since: 2.20 - **/ -#define G_FILE_ATTRIBUTE_PREVIEW_ICON "preview::icon" /* object (GIcon) */ - -/* File system info (for g_file_get_filesystem_info) */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_SIZE: - * - * A key in the "filesystem" namespace for getting the total size (in bytes) of the file system, - * used in g_file_query_filesystem_info(). Corresponding #GFileAttributeType - * is %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_SIZE "filesystem::size" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_FREE: - * - * A key in the "filesystem" namespace for getting the number of bytes of free space left on the - * file system. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_FREE "filesystem::free" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_USED: - * - * A key in the "filesystem" namespace for getting the number of bytes of used on the - * file system. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_UINT64. - * - * Since: 2.32 - */ -#define G_FILE_ATTRIBUTE_FILESYSTEM_USED "filesystem::used" /* uint64 */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_TYPE: - * - * A key in the "filesystem" namespace for getting the file system's type. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_TYPE "filesystem::type" /* string */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_READONLY: - * - * A key in the "filesystem" namespace for checking if the file system - * is read only. Is set to %TRUE if the file system is read only. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_READONLY "filesystem::readonly" /* boolean */ - -/** - * G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW: - * - * A key in the "filesystem" namespace for hinting a file manager - * application whether it should preview (e.g. thumbnail) files on the - * file system. The value for this key contain a - * #GFilesystemPreviewType. - **/ -#define G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW "filesystem::use-preview" /* uint32 (GFilesystemPreviewType) */ - -/** - * G_FILE_ATTRIBUTE_GVFS_BACKEND: - * - * A key in the "gvfs" namespace that gets the name of the current - * GVFS backend in use. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. - **/ -#define G_FILE_ATTRIBUTE_GVFS_BACKEND "gvfs::backend" /* string */ - -/** - * G_FILE_ATTRIBUTE_SELINUX_CONTEXT: - * - * A key in the "selinux" namespace for getting the file's SELinux - * context. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_STRING. Note that this attribute is only - * available if GLib has been built with SELinux support. - **/ -#define G_FILE_ATTRIBUTE_SELINUX_CONTEXT "selinux::context" /* string */ - -/** - * G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT: - * - * A key in the "trash" namespace. When requested against - * "trash:///" returns the number of (toplevel) items in the trash folder. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32. - **/ -#define G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT "trash::item-count" /* uint32 */ - -/** - * G_FILE_ATTRIBUTE_TRASH_ORIG_PATH: - * - * A key in the "trash" namespace. When requested against - * items in "trash:///", will return the original path to the file before it - * was trashed. Corresponding #GFileAttributeType is - * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING. - * - * Since: 2.24. - **/ -#define G_FILE_ATTRIBUTE_TRASH_ORIG_PATH "trash::orig-path" /* byte string */ - -/** - * G_FILE_ATTRIBUTE_TRASH_DELETION_DATE: - * - * A key in the "trash" namespace. When requested against - * items in "trash:///", will return the date and time when the file - * was trashed. The format of the returned string is YYYY-MM-DDThh:mm:ss. - * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING. - * - * Since: 2.24. - **/ -#define G_FILE_ATTRIBUTE_TRASH_DELETION_DATE "trash::deletion-date" /* string */ - -GType g_file_info_get_type (void) G_GNUC_CONST; - -GFileInfo * g_file_info_new (void); -GFileInfo * g_file_info_dup (GFileInfo *other); -void g_file_info_copy_into (GFileInfo *src_info, - GFileInfo *dest_info); -gboolean g_file_info_has_attribute (GFileInfo *info, - const char *attribute); -gboolean g_file_info_has_namespace (GFileInfo *info, - const char *name_space); -char ** g_file_info_list_attributes (GFileInfo *info, - const char *name_space); -gboolean g_file_info_get_attribute_data (GFileInfo *info, - const char *attribute, - GFileAttributeType *type, - gpointer *value_pp, - GFileAttributeStatus *status); -GFileAttributeType g_file_info_get_attribute_type (GFileInfo *info, - const char *attribute); -void g_file_info_remove_attribute (GFileInfo *info, - const char *attribute); -GFileAttributeStatus g_file_info_get_attribute_status (GFileInfo *info, - const char *attribute); -gboolean g_file_info_set_attribute_status (GFileInfo *info, - const char *attribute, - GFileAttributeStatus status); -char * g_file_info_get_attribute_as_string (GFileInfo *info, - const char *attribute); -const char * g_file_info_get_attribute_string (GFileInfo *info, - const char *attribute); -const char * g_file_info_get_attribute_byte_string (GFileInfo *info, - const char *attribute); -gboolean g_file_info_get_attribute_boolean (GFileInfo *info, - const char *attribute); -guint32 g_file_info_get_attribute_uint32 (GFileInfo *info, - const char *attribute); -gint32 g_file_info_get_attribute_int32 (GFileInfo *info, - const char *attribute); -guint64 g_file_info_get_attribute_uint64 (GFileInfo *info, - const char *attribute); -gint64 g_file_info_get_attribute_int64 (GFileInfo *info, - const char *attribute); -GObject * g_file_info_get_attribute_object (GFileInfo *info, - const char *attribute); -char ** g_file_info_get_attribute_stringv (GFileInfo *info, - const char *attribute); - -void g_file_info_set_attribute (GFileInfo *info, - const char *attribute, - GFileAttributeType type, - gpointer value_p); -void g_file_info_set_attribute_string (GFileInfo *info, - const char *attribute, - const char *attr_value); -void g_file_info_set_attribute_byte_string (GFileInfo *info, - const char *attribute, - const char *attr_value); -void g_file_info_set_attribute_boolean (GFileInfo *info, - const char *attribute, - gboolean attr_value); -void g_file_info_set_attribute_uint32 (GFileInfo *info, - const char *attribute, - guint32 attr_value); -void g_file_info_set_attribute_int32 (GFileInfo *info, - const char *attribute, - gint32 attr_value); -void g_file_info_set_attribute_uint64 (GFileInfo *info, - const char *attribute, - guint64 attr_value); -void g_file_info_set_attribute_int64 (GFileInfo *info, - const char *attribute, - gint64 attr_value); -void g_file_info_set_attribute_object (GFileInfo *info, - const char *attribute, - GObject *attr_value); -void g_file_info_set_attribute_stringv (GFileInfo *info, - const char *attribute, - char **attr_value); - -void g_file_info_clear_status (GFileInfo *info); - -/* Helper getters: */ -GFileType g_file_info_get_file_type (GFileInfo *info); -gboolean g_file_info_get_is_hidden (GFileInfo *info); -gboolean g_file_info_get_is_backup (GFileInfo *info); -gboolean g_file_info_get_is_symlink (GFileInfo *info); -const char * g_file_info_get_name (GFileInfo *info); -const char * g_file_info_get_display_name (GFileInfo *info); -const char * g_file_info_get_edit_name (GFileInfo *info); -GIcon * g_file_info_get_icon (GFileInfo *info); -GIcon * g_file_info_get_symbolic_icon (GFileInfo *info); -const char * g_file_info_get_content_type (GFileInfo *info); -goffset g_file_info_get_size (GFileInfo *info); -void g_file_info_get_modification_time (GFileInfo *info, - GTimeVal *result); -const char * g_file_info_get_symlink_target (GFileInfo *info); -const char * g_file_info_get_etag (GFileInfo *info); -gint32 g_file_info_get_sort_order (GFileInfo *info); - -void g_file_info_set_attribute_mask (GFileInfo *info, - GFileAttributeMatcher *mask); -void g_file_info_unset_attribute_mask (GFileInfo *info); - -/* Helper setters: */ -void g_file_info_set_file_type (GFileInfo *info, - GFileType type); -void g_file_info_set_is_hidden (GFileInfo *info, - gboolean is_hidden); -void g_file_info_set_is_symlink (GFileInfo *info, - gboolean is_symlink); -void g_file_info_set_name (GFileInfo *info, - const char *name); -void g_file_info_set_display_name (GFileInfo *info, - const char *display_name); -void g_file_info_set_edit_name (GFileInfo *info, - const char *edit_name); -void g_file_info_set_icon (GFileInfo *info, - GIcon *icon); -void g_file_info_set_symbolic_icon (GFileInfo *info, - GIcon *icon); -void g_file_info_set_content_type (GFileInfo *info, - const char *content_type); -void g_file_info_set_size (GFileInfo *info, - goffset size); -void g_file_info_set_modification_time (GFileInfo *info, - GTimeVal *mtime); -void g_file_info_set_symlink_target (GFileInfo *info, - const char *symlink_target); -void g_file_info_set_sort_order (GFileInfo *info, - gint32 sort_order); - -#define G_TYPE_FILE_ATTRIBUTE_MATCHER (g_file_attribute_matcher_get_type ()) -GType g_file_attribute_matcher_get_type (void) G_GNUC_CONST; - -GFileAttributeMatcher *g_file_attribute_matcher_new (const char *attributes); -GFileAttributeMatcher *g_file_attribute_matcher_ref (GFileAttributeMatcher *matcher); -void g_file_attribute_matcher_unref (GFileAttributeMatcher *matcher); -GFileAttributeMatcher *g_file_attribute_matcher_subtract (GFileAttributeMatcher *matcher, - GFileAttributeMatcher *subtract); -gboolean g_file_attribute_matcher_matches (GFileAttributeMatcher *matcher, - const char *attribute); -gboolean g_file_attribute_matcher_matches_only (GFileAttributeMatcher *matcher, - const char *attribute); -gboolean g_file_attribute_matcher_enumerate_namespace (GFileAttributeMatcher *matcher, - const char *ns); -const char * g_file_attribute_matcher_enumerate_next (GFileAttributeMatcher *matcher); -GLIB_AVAILABLE_IN_2_32 -char * g_file_attribute_matcher_to_string (GFileAttributeMatcher *matcher); - -G_END_DECLS - -#endif /* __G_FILE_INFO_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileinputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileinputstream.h deleted file mode 100644 index 08c056e1..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileinputstream.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_INPUT_STREAM_H__ -#define __G_FILE_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_INPUT_STREAM (g_file_input_stream_get_type ()) -#define G_FILE_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_INPUT_STREAM, GFileInputStream)) -#define G_FILE_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_INPUT_STREAM, GFileInputStreamClass)) -#define G_IS_FILE_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_INPUT_STREAM)) -#define G_IS_FILE_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_INPUT_STREAM)) -#define G_FILE_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_INPUT_STREAM, GFileInputStreamClass)) - -/** - * GFileInputStream: - * - * A subclass of GInputStream for opened files. This adds - * a few file-specific operations and seeking. - * - * #GFileInputStream implements #GSeekable. - **/ -typedef struct _GFileInputStreamClass GFileInputStreamClass; -typedef struct _GFileInputStreamPrivate GFileInputStreamPrivate; - -struct _GFileInputStream -{ - GInputStream parent_instance; - - /*< private >*/ - GFileInputStreamPrivate *priv; -}; - -struct _GFileInputStreamClass -{ - GInputStreamClass parent_class; - - goffset (* tell) (GFileInputStream *stream); - gboolean (* can_seek) (GFileInputStream *stream); - gboolean (* seek) (GFileInputStream *stream, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - GFileInfo * (* query_info) (GFileInputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFileInputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFileInputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_input_stream_get_type (void) G_GNUC_CONST; - -GFileInfo *g_file_input_stream_query_info (GFileInputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_input_stream_query_info_async (GFileInputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo *g_file_input_stream_query_info_finish (GFileInputStream *stream, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_FILE_FILE_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileiostream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileiostream.h deleted file mode 100644 index 31497e38..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileiostream.h +++ /dev/null @@ -1,118 +0,0 @@ -/* GIO - GLib Input, Io and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_IO_STREAM_H__ -#define __G_FILE_IO_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_IO_STREAM (g_file_io_stream_get_type ()) -#define G_FILE_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_IO_STREAM, GFileIOStream)) -#define G_FILE_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_IO_STREAM, GFileIOStreamClass)) -#define G_IS_FILE_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_IO_STREAM)) -#define G_IS_FILE_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_IO_STREAM)) -#define G_FILE_IO_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_IO_STREAM, GFileIOStreamClass)) - -/** - * GFileIOStream: - * - * A subclass of GIOStream for opened files. This adds - * a few file-specific operations and seeking and truncating. - * - * #GFileIOStream implements GSeekable. - **/ -typedef struct _GFileIOStreamClass GFileIOStreamClass; -typedef struct _GFileIOStreamPrivate GFileIOStreamPrivate; - -struct _GFileIOStream -{ - GIOStream parent_instance; - - /*< private >*/ - GFileIOStreamPrivate *priv; -}; - -struct _GFileIOStreamClass -{ - GIOStreamClass parent_class; - - goffset (* tell) (GFileIOStream *stream); - gboolean (* can_seek) (GFileIOStream *stream); - gboolean (* seek) (GFileIOStream *stream, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - gboolean (* can_truncate) (GFileIOStream *stream); - gboolean (* truncate_fn) (GFileIOStream *stream, - goffset size, - GCancellable *cancellable, - GError **error); - GFileInfo * (* query_info) (GFileIOStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFileIOStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFileIOStream *stream, - GAsyncResult *result, - GError **error); - char * (* get_etag) (GFileIOStream *stream); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_io_stream_get_type (void) G_GNUC_CONST; - -GFileInfo *g_file_io_stream_query_info (GFileIOStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_io_stream_query_info_async (GFileIOStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo *g_file_io_stream_query_info_finish (GFileIOStream *stream, - GAsyncResult *result, - GError **error); -char * g_file_io_stream_get_etag (GFileIOStream *stream); - -G_END_DECLS - -#endif /* __G_FILE_FILE_IO_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfilemonitor.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfilemonitor.h deleted file mode 100644 index 8e27d22e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfilemonitor.h +++ /dev/null @@ -1,95 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_MONITOR_H__ -#define __G_FILE_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_MONITOR (g_file_monitor_get_type ()) -#define G_FILE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_MONITOR, GFileMonitor)) -#define G_FILE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_MONITOR, GFileMonitorClass)) -#define G_IS_FILE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_MONITOR)) -#define G_IS_FILE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_MONITOR)) -#define G_FILE_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_MONITOR, GFileMonitorClass)) - -typedef struct _GFileMonitorClass GFileMonitorClass; -typedef struct _GFileMonitorPrivate GFileMonitorPrivate; - -/** - * GFileMonitor: - * - * Watches for changes to a file. - **/ -struct _GFileMonitor -{ - GObject parent_instance; - - /*< private >*/ - GFileMonitorPrivate *priv; -}; - -struct _GFileMonitorClass -{ - GObjectClass parent_class; - - /* Signals */ - void (* changed) (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type); - - /* Virtual Table */ - gboolean (* cancel) (GFileMonitor *monitor); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_monitor_get_type (void) G_GNUC_CONST; - -gboolean g_file_monitor_cancel (GFileMonitor *monitor); -gboolean g_file_monitor_is_cancelled (GFileMonitor *monitor); -void g_file_monitor_set_rate_limit (GFileMonitor *monitor, - gint limit_msecs); - - -/* For implementations */ -void g_file_monitor_emit_event (GFileMonitor *monitor, - GFile *child, - GFile *other_file, - GFileMonitorEvent event_type); - -G_END_DECLS - -#endif /* __G_FILE_MONITOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfilenamecompleter.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfilenamecompleter.h deleted file mode 100644 index 1899c27d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfilenamecompleter.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILENAME_COMPLETER_H__ -#define __G_FILENAME_COMPLETER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILENAME_COMPLETER (g_filename_completer_get_type ()) -#define G_FILENAME_COMPLETER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILENAME_COMPLETER, GFilenameCompleter)) -#define G_FILENAME_COMPLETER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILENAME_COMPLETER, GFilenameCompleterClass)) -#define G_FILENAME_COMPLETER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILENAME_COMPLETER, GFilenameCompleterClass)) -#define G_IS_FILENAME_COMPLETER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILENAME_COMPLETER)) -#define G_IS_FILENAME_COMPLETER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILENAME_COMPLETER)) - -/** - * GFilenameCompleter: - * - * Completes filenames based on files that exist within the file system. - **/ -typedef struct _GFilenameCompleterClass GFilenameCompleterClass; - -struct _GFilenameCompleterClass -{ - GObjectClass parent_class; - - /*< public >*/ - /* signals */ - void (* got_completion_data) (GFilenameCompleter *filename_completer); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); -}; - -GType g_filename_completer_get_type (void) G_GNUC_CONST; - -GFilenameCompleter *g_filename_completer_new (void); - -char * g_filename_completer_get_completion_suffix (GFilenameCompleter *completer, - const char *initial_text); -char ** g_filename_completer_get_completions (GFilenameCompleter *completer, - const char *initial_text); -void g_filename_completer_set_dirs_only (GFilenameCompleter *completer, - gboolean dirs_only); - -G_END_DECLS - -#endif /* __G_FILENAME_COMPLETER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfileoutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfileoutputstream.h deleted file mode 100644 index 3b5f85d3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfileoutputstream.h +++ /dev/null @@ -1,119 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILE_OUTPUT_STREAM_H__ -#define __G_FILE_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILE_OUTPUT_STREAM (g_file_output_stream_get_type ()) -#define G_FILE_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStream)) -#define G_FILE_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStreamClass)) -#define G_IS_FILE_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_OUTPUT_STREAM)) -#define G_IS_FILE_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_OUTPUT_STREAM)) -#define G_FILE_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStreamClass)) - -/** - * GFileOutputStream: - * - * A subclass of GOutputStream for opened files. This adds - * a few file-specific operations and seeking and truncating. - * - * #GFileOutputStream implements GSeekable. - **/ -typedef struct _GFileOutputStreamClass GFileOutputStreamClass; -typedef struct _GFileOutputStreamPrivate GFileOutputStreamPrivate; - -struct _GFileOutputStream -{ - GOutputStream parent_instance; - - /*< private >*/ - GFileOutputStreamPrivate *priv; -}; - -struct _GFileOutputStreamClass -{ - GOutputStreamClass parent_class; - - goffset (* tell) (GFileOutputStream *stream); - gboolean (* can_seek) (GFileOutputStream *stream); - gboolean (* seek) (GFileOutputStream *stream, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - gboolean (* can_truncate) (GFileOutputStream *stream); - gboolean (* truncate_fn) (GFileOutputStream *stream, - goffset size, - GCancellable *cancellable, - GError **error); - GFileInfo * (* query_info) (GFileOutputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); - void (* query_info_async) (GFileOutputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GFileInfo * (* query_info_finish) (GFileOutputStream *stream, - GAsyncResult *result, - GError **error); - char * (* get_etag) (GFileOutputStream *stream); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_file_output_stream_get_type (void) G_GNUC_CONST; - - -GFileInfo *g_file_output_stream_query_info (GFileOutputStream *stream, - const char *attributes, - GCancellable *cancellable, - GError **error); -void g_file_output_stream_query_info_async (GFileOutputStream *stream, - const char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GFileInfo *g_file_output_stream_query_info_finish (GFileOutputStream *stream, - GAsyncResult *result, - GError **error); -char * g_file_output_stream_get_etag (GFileOutputStream *stream); - -G_END_DECLS - -#endif /* __G_FILE_FILE_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfilterinputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfilterinputstream.h deleted file mode 100644 index 1514104a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfilterinputstream.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILTER_INPUT_STREAM_H__ -#define __G_FILTER_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILTER_INPUT_STREAM (g_filter_input_stream_get_type ()) -#define G_FILTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStream)) -#define G_FILTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamClass)) -#define G_IS_FILTER_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILTER_INPUT_STREAM)) -#define G_IS_FILTER_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILTER_INPUT_STREAM)) -#define G_FILTER_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamClass)) - -/** - * GFilterInputStream: - * - * A base class for all input streams that work on an underlying stream. - **/ -typedef struct _GFilterInputStreamClass GFilterInputStreamClass; - -struct _GFilterInputStream -{ - GInputStream parent_instance; - - /**/ - GInputStream *base_stream; -}; - -struct _GFilterInputStreamClass -{ - GInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); -}; - - -GType g_filter_input_stream_get_type (void) G_GNUC_CONST; -GInputStream * g_filter_input_stream_get_base_stream (GFilterInputStream *stream); -gboolean g_filter_input_stream_get_close_base_stream (GFilterInputStream *stream); -void g_filter_input_stream_set_close_base_stream (GFilterInputStream *stream, - gboolean close_base); - -G_END_DECLS - -#endif /* __G_FILTER_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gfilteroutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gfilteroutputstream.h deleted file mode 100644 index 10350e5a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gfilteroutputstream.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILTER_OUTPUT_STREAM_H__ -#define __G_FILTER_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_FILTER_OUTPUT_STREAM (g_filter_output_stream_get_type ()) -#define G_FILTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStream)) -#define G_FILTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamClass)) -#define G_IS_FILTER_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILTER_OUTPUT_STREAM)) -#define G_IS_FILTER_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILTER_OUTPUT_STREAM)) -#define G_FILTER_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamClass)) - -/** - * GFilterOutputStream: - * - * A base class for all output streams that work on an underlying stream. - **/ -typedef struct _GFilterOutputStreamClass GFilterOutputStreamClass; - -struct _GFilterOutputStream -{ - GOutputStream parent_instance; - - /*< protected >*/ - GOutputStream *base_stream; -}; - -struct _GFilterOutputStreamClass -{ - GOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); -}; - - -GType g_filter_output_stream_get_type (void) G_GNUC_CONST; -GOutputStream * g_filter_output_stream_get_base_stream (GFilterOutputStream *stream); -gboolean g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream); -void g_filter_output_stream_set_close_base_stream (GFilterOutputStream *stream, - gboolean close_base); - -G_END_DECLS - -#endif /* __G_FILTER_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gicon.h b/GstreamerHelper/x86/include/glib-2.0/gio/gicon.h deleted file mode 100644 index 8f339f69..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gicon.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ICON_H__ -#define __G_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_ICON (g_icon_get_type ()) -#define G_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ICON, GIcon)) -#define G_IS_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ICON)) -#define G_ICON_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ICON, GIconIface)) - -/** - * GIcon: - * - * An abstract type that specifies an icon. - **/ -typedef struct _GIconIface GIconIface; - -/** - * GIconIface: - * @g_iface: The parent interface. - * @hash: A hash for a given #GIcon. - * @equal: Checks if two #GIcons are equal. - * @to_tokens: Serializes a #GIcon into tokens. The tokens must not - * contain any whitespace. Don't implement if the #GIcon can't be - * serialized (Since 2.20). - * @from_tokens: Constructs a #GIcon from tokens. Set the #GError if - * the tokens are malformed. Don't implement if the #GIcon can't be - * serialized (Since 2.20). - * - * GIconIface is used to implement GIcon types for various - * different systems. See #GThemedIcon and #GLoadableIcon for - * examples of how to implement this interface. - */ -struct _GIconIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - guint (* hash) (GIcon *icon); - gboolean (* equal) (GIcon *icon1, - GIcon *icon2); - gboolean (* to_tokens) (GIcon *icon, - GPtrArray *tokens, - gint *out_version); - GIcon * (* from_tokens) (gchar **tokens, - gint num_tokens, - gint version, - GError **error); -}; - -GType g_icon_get_type (void) G_GNUC_CONST; - -guint g_icon_hash (gconstpointer icon); -gboolean g_icon_equal (GIcon *icon1, - GIcon *icon2); -gchar *g_icon_to_string (GIcon *icon); -GIcon *g_icon_new_for_string (const gchar *str, - GError **error); - -G_END_DECLS - -#endif /* __G_ICON_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/ginetaddress.h b/GstreamerHelper/x86/include/glib-2.0/gio/ginetaddress.h deleted file mode 100644 index d523cd65..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/ginetaddress.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Christian Kellner, Samuel Cormier-Iijima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INET_ADDRESS_H__ -#define __G_INET_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INET_ADDRESS (g_inet_address_get_type ()) -#define G_INET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INET_ADDRESS, GInetAddress)) -#define G_INET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INET_ADDRESS, GInetAddressClass)) -#define G_IS_INET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INET_ADDRESS)) -#define G_IS_INET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INET_ADDRESS)) -#define G_INET_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INET_ADDRESS, GInetAddressClass)) - -typedef struct _GInetAddressClass GInetAddressClass; -typedef struct _GInetAddressPrivate GInetAddressPrivate; - -struct _GInetAddress -{ - GObject parent_instance; - - /*< private >*/ - GInetAddressPrivate *priv; -}; - -struct _GInetAddressClass -{ - GObjectClass parent_class; - - gchar * (*to_string) (GInetAddress *address); - const guint8 * (*to_bytes) (GInetAddress *address); -}; - -GType g_inet_address_get_type (void) G_GNUC_CONST; - -GInetAddress * g_inet_address_new_from_string (const gchar *string); - -GInetAddress * g_inet_address_new_from_bytes (const guint8 *bytes, - GSocketFamily family); - -GInetAddress * g_inet_address_new_loopback (GSocketFamily family); - -GInetAddress * g_inet_address_new_any (GSocketFamily family); - -gboolean g_inet_address_equal (GInetAddress *address, - GInetAddress *other_address); - -gchar * g_inet_address_to_string (GInetAddress *address); - -const guint8 * g_inet_address_to_bytes (GInetAddress *address); - -gsize g_inet_address_get_native_size (GInetAddress *address); - -GSocketFamily g_inet_address_get_family (GInetAddress *address); - -gboolean g_inet_address_get_is_any (GInetAddress *address); - -gboolean g_inet_address_get_is_loopback (GInetAddress *address); - -gboolean g_inet_address_get_is_link_local (GInetAddress *address); - -gboolean g_inet_address_get_is_site_local (GInetAddress *address); - -gboolean g_inet_address_get_is_multicast (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_global (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_link_local (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_node_local (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_org_local (GInetAddress *address); - -gboolean g_inet_address_get_is_mc_site_local (GInetAddress *address); - -G_END_DECLS - -#endif /* __G_INET_ADDRESS_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/ginetaddressmask.h b/GstreamerHelper/x86/include/glib-2.0/gio/ginetaddressmask.h deleted file mode 100644 index 53b0aac6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/ginetaddressmask.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INET_ADDRESS_MASK_H__ -#define __G_INET_ADDRESS_MASK_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INET_ADDRESS_MASK (g_inet_address_mask_get_type ()) -#define G_INET_ADDRESS_MASK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INET_ADDRESS_MASK, GInetAddressMask)) -#define G_INET_ADDRESS_MASK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INET_ADDRESS_MASK, GInetAddressMaskClass)) -#define G_IS_INET_ADDRESS_MASK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INET_ADDRESS_MASK)) -#define G_IS_INET_ADDRESS_MASK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INET_ADDRESS_MASK)) -#define G_INET_ADDRESS_MASK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INET_ADDRESS_MASK, GInetAddressMaskClass)) - -typedef struct _GInetAddressMaskClass GInetAddressMaskClass; -typedef struct _GInetAddressMaskPrivate GInetAddressMaskPrivate; - -struct _GInetAddressMask -{ - GObject parent_instance; - - /*< private >*/ - GInetAddressMaskPrivate *priv; -}; - -struct _GInetAddressMaskClass -{ - GObjectClass parent_class; - -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_inet_address_mask_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GInetAddressMask *g_inet_address_mask_new (GInetAddress *addr, - guint length, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -GInetAddressMask *g_inet_address_mask_new_from_string (const gchar *mask_string, - GError **error); -gchar *g_inet_address_mask_to_string (GInetAddressMask *mask); - -GSocketFamily g_inet_address_mask_get_family (GInetAddressMask *mask); -GInetAddress *g_inet_address_mask_get_address (GInetAddressMask *mask); -guint g_inet_address_mask_get_length (GInetAddressMask *mask); - -gboolean g_inet_address_mask_matches (GInetAddressMask *mask, - GInetAddress *address); -gboolean g_inet_address_mask_equal (GInetAddressMask *mask, - GInetAddressMask *mask2); - -G_END_DECLS - -#endif /* __G_INET_ADDRESS_MASK_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/ginetsocketaddress.h b/GstreamerHelper/x86/include/glib-2.0/gio/ginetsocketaddress.h deleted file mode 100644 index ab20235d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/ginetsocketaddress.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Christian Kellner, Samuel Cormier-Iijima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INET_SOCKET_ADDRESS_H__ -#define __G_INET_SOCKET_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INET_SOCKET_ADDRESS (g_inet_socket_address_get_type ()) -#define G_INET_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INET_SOCKET_ADDRESS, GInetSocketAddress)) -#define G_INET_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INET_SOCKET_ADDRESS, GInetSocketAddressClass)) -#define G_IS_INET_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INET_SOCKET_ADDRESS)) -#define G_IS_INET_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INET_SOCKET_ADDRESS)) -#define G_INET_SOCKET_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INET_SOCKET_ADDRESS, GInetSocketAddressClass)) - -typedef struct _GInetSocketAddressClass GInetSocketAddressClass; -typedef struct _GInetSocketAddressPrivate GInetSocketAddressPrivate; - -struct _GInetSocketAddress -{ - GSocketAddress parent_instance; - - /*< private >*/ - GInetSocketAddressPrivate *priv; -}; - -struct _GInetSocketAddressClass -{ - GSocketAddressClass parent_class; -}; - -GType g_inet_socket_address_get_type (void) G_GNUC_CONST; - -GSocketAddress *g_inet_socket_address_new (GInetAddress *address, - guint16 port); - -GInetAddress * g_inet_socket_address_get_address (GInetSocketAddress *address); -guint16 g_inet_socket_address_get_port (GInetSocketAddress *address); - -GLIB_AVAILABLE_IN_2_32 -guint32 g_inet_socket_address_get_flowinfo (GInetSocketAddress *address); -GLIB_AVAILABLE_IN_2_32 -guint32 g_inet_socket_address_get_scope_id (GInetSocketAddress *address); - -G_END_DECLS - -#endif /* __G_INET_SOCKET_ADDRESS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/ginitable.h b/GstreamerHelper/x86/include/glib-2.0/gio/ginitable.h deleted file mode 100644 index 1a2d13d9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/ginitable.h +++ /dev/null @@ -1,96 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INITABLE_H__ -#define __G_INITABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INITABLE (g_initable_get_type ()) -#define G_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_INITABLE, GInitable)) -#define G_IS_INITABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_INITABLE)) -#define G_INITABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_INITABLE, GInitableIface)) -#define G_TYPE_IS_INITABLE(type) (g_type_is_a ((type), G_TYPE_INITABLE)) - -/** - * GInitable: - * - * Interface for initializable objects. - * - * Since: 2.22 - **/ -typedef struct _GInitableIface GInitableIface; - -/** - * GInitableIface: - * @g_iface: The parent interface. - * @init: Initializes the object. - * - * Provides an interface for initializing object such that initialization - * may fail. - * - * Since: 2.22 - **/ -struct _GInitableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - gboolean (* init) (GInitable *initable, - GCancellable *cancellable, - GError **error); -}; - - -GType g_initable_get_type (void) G_GNUC_CONST; - -gboolean g_initable_init (GInitable *initable, - GCancellable *cancellable, - GError **error); - -gpointer g_initable_new (GType object_type, - GCancellable *cancellable, - GError **error, - const gchar *first_property_name, - ...); -gpointer g_initable_newv (GType object_type, - guint n_parameters, - GParameter *parameters, - GCancellable *cancellable, - GError **error); -GObject* g_initable_new_valist (GType object_type, - const gchar *first_property_name, - va_list var_args, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_INITABLE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/ginputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/ginputstream.h deleted file mode 100644 index e9b36f7e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/ginputstream.h +++ /dev/null @@ -1,188 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_INPUT_STREAM_H__ -#define __G_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_INPUT_STREAM (g_input_stream_get_type ()) -#define G_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INPUT_STREAM, GInputStream)) -#define G_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INPUT_STREAM, GInputStreamClass)) -#define G_IS_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INPUT_STREAM)) -#define G_IS_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INPUT_STREAM)) -#define G_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INPUT_STREAM, GInputStreamClass)) - -/** - * GInputStream: - * - * Base class for streaming input operations. - **/ -typedef struct _GInputStreamClass GInputStreamClass; -typedef struct _GInputStreamPrivate GInputStreamPrivate; - -struct _GInputStream -{ - GObject parent_instance; - - /*< private >*/ - GInputStreamPrivate *priv; -}; - -struct _GInputStreamClass -{ - GObjectClass parent_class; - - /* Sync ops: */ - - gssize (* read_fn) (GInputStream *stream, - void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - gssize (* skip) (GInputStream *stream, - gsize count, - GCancellable *cancellable, - GError **error); - gboolean (* close_fn) (GInputStream *stream, - GCancellable *cancellable, - GError **error); - - /* Async ops: (optional in derived classes) */ - void (* read_async) (GInputStream *stream, - void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* read_finish) (GInputStream *stream, - GAsyncResult *result, - GError **error); - void (* skip_async) (GInputStream *stream, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* skip_finish) (GInputStream *stream, - GAsyncResult *result, - GError **error); - void (* close_async) (GInputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GInputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType g_input_stream_get_type (void) G_GNUC_CONST; - -gssize g_input_stream_read (GInputStream *stream, - void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); -gboolean g_input_stream_read_all (GInputStream *stream, - void *buffer, - gsize count, - gsize *bytes_read, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -GBytes *g_input_stream_read_bytes (GInputStream *stream, - gsize count, - GCancellable *cancellable, - GError **error); -gssize g_input_stream_skip (GInputStream *stream, - gsize count, - GCancellable *cancellable, - GError **error); -gboolean g_input_stream_close (GInputStream *stream, - GCancellable *cancellable, - GError **error); -void g_input_stream_read_async (GInputStream *stream, - void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_input_stream_read_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); -GLIB_AVAILABLE_IN_2_34 -void g_input_stream_read_bytes_async (GInputStream *stream, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -GBytes *g_input_stream_read_bytes_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); -void g_input_stream_skip_async (GInputStream *stream, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_input_stream_skip_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); -void g_input_stream_close_async (GInputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_input_stream_close_finish (GInputStream *stream, - GAsyncResult *result, - GError **error); - -/* For implementations: */ - -gboolean g_input_stream_is_closed (GInputStream *stream); -gboolean g_input_stream_has_pending (GInputStream *stream); -gboolean g_input_stream_set_pending (GInputStream *stream, - GError **error); -void g_input_stream_clear_pending (GInputStream *stream); - -G_END_DECLS - -#endif /* __G_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gio.h b/GstreamerHelper/x86/include/glib-2.0/gio/gio.h deleted file mode 100644 index 3fb914d2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gio.h +++ /dev/null @@ -1,162 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#ifndef __G_IO_H__ -#define __G_IO_H__ - -#define __GIO_GIO_H_INSIDE__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef __GIO_GIO_H_INSIDE__ - -#endif /* __G_IO_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gioenums.h b/GstreamerHelper/x86/include/glib-2.0/gio/gioenums.h deleted file mode 100644 index b3706237..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gioenums.h +++ /dev/null @@ -1,1658 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GIO_ENUMS_H__ -#define __GIO_ENUMS_H__ - -#include - -G_BEGIN_DECLS - - -/** - * GAppInfoCreateFlags: - * @G_APP_INFO_CREATE_NONE: No flags. - * @G_APP_INFO_CREATE_NEEDS_TERMINAL: Application opens in a terminal window. - * @G_APP_INFO_CREATE_SUPPORTS_URIS: Application supports URI arguments. - * @G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION: Application supports startup notification. Since 2.26 - * - * Flags used when creating a #GAppInfo. - */ -typedef enum { - G_APP_INFO_CREATE_NONE = 0, /*< nick=none >*/ - G_APP_INFO_CREATE_NEEDS_TERMINAL = (1 << 0), /*< nick=needs-terminal >*/ - G_APP_INFO_CREATE_SUPPORTS_URIS = (1 << 1), /*< nick=supports-uris >*/ - G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION = (1 << 2) /*< nick=supports-startup-notification >*/ -} GAppInfoCreateFlags; - -/** - * GConverterFlags: - * @G_CONVERTER_NO_FLAGS: No flags. - * @G_CONVERTER_INPUT_AT_END: At end of input data - * @G_CONVERTER_FLUSH: Flush data - * - * Flags used when calling a g_converter_convert(). - * - * Since: 2.24 - */ -typedef enum { - G_CONVERTER_NO_FLAGS = 0, /*< nick=none >*/ - G_CONVERTER_INPUT_AT_END = (1 << 0), /*< nick=input-at-end >*/ - G_CONVERTER_FLUSH = (1 << 1) /*< nick=flush >*/ -} GConverterFlags; - -/** - * GConverterResult: - * @G_CONVERTER_ERROR: There was an error during conversion. - * @G_CONVERTER_CONVERTED: Some data was consumed or produced - * @G_CONVERTER_FINISHED: The conversion is finished - * @G_CONVERTER_FLUSHED: Flushing is finished - * - * Results returned from g_converter_convert(). - * - * Since: 2.24 - */ -typedef enum { - G_CONVERTER_ERROR = 0, /*< nick=error >*/ - G_CONVERTER_CONVERTED = 1, /*< nick=converted >*/ - G_CONVERTER_FINISHED = 2, /*< nick=finished >*/ - G_CONVERTER_FLUSHED = 3 /*< nick=flushed >*/ -} GConverterResult; - - -/** - * GDataStreamByteOrder: - * @G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN: Selects Big Endian byte order. - * @G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN: Selects Little Endian byte order. - * @G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN: Selects endianness based on host machine's architecture. - * - * #GDataStreamByteOrder is used to ensure proper endianness of streaming data sources - * across various machine architectures. - * - **/ -typedef enum { - G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN, - G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN, - G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN -} GDataStreamByteOrder; - - -/** - * GDataStreamNewlineType: - * @G_DATA_STREAM_NEWLINE_TYPE_LF: Selects "LF" line endings, common on most modern UNIX platforms. - * @G_DATA_STREAM_NEWLINE_TYPE_CR: Selects "CR" line endings. - * @G_DATA_STREAM_NEWLINE_TYPE_CR_LF: Selects "CR, LF" line ending, common on Microsoft Windows. - * @G_DATA_STREAM_NEWLINE_TYPE_ANY: Automatically try to handle any line ending type. - * - * #GDataStreamNewlineType is used when checking for or setting the line endings for a given file. - **/ -typedef enum { - G_DATA_STREAM_NEWLINE_TYPE_LF, - G_DATA_STREAM_NEWLINE_TYPE_CR, - G_DATA_STREAM_NEWLINE_TYPE_CR_LF, - G_DATA_STREAM_NEWLINE_TYPE_ANY -} GDataStreamNewlineType; - - -/** - * GFileAttributeType: - * @G_FILE_ATTRIBUTE_TYPE_INVALID: indicates an invalid or uninitalized type. - * @G_FILE_ATTRIBUTE_TYPE_STRING: a null terminated UTF8 string. - * @G_FILE_ATTRIBUTE_TYPE_BYTE_STRING: a zero terminated string of non-zero bytes. - * @G_FILE_ATTRIBUTE_TYPE_BOOLEAN: a boolean value. - * @G_FILE_ATTRIBUTE_TYPE_UINT32: an unsigned 4-byte/32-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_INT32: a signed 4-byte/32-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_UINT64: an unsigned 8-byte/64-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_INT64: a signed 8-byte/64-bit integer. - * @G_FILE_ATTRIBUTE_TYPE_OBJECT: a #GObject. - * @G_FILE_ATTRIBUTE_TYPE_STRINGV: a %NULL terminated char **. Since 2.22 - * - * The data types for file attributes. - **/ -typedef enum { - G_FILE_ATTRIBUTE_TYPE_INVALID = 0, - G_FILE_ATTRIBUTE_TYPE_STRING, - G_FILE_ATTRIBUTE_TYPE_BYTE_STRING, /* zero terminated string of non-zero bytes */ - G_FILE_ATTRIBUTE_TYPE_BOOLEAN, - G_FILE_ATTRIBUTE_TYPE_UINT32, - G_FILE_ATTRIBUTE_TYPE_INT32, - G_FILE_ATTRIBUTE_TYPE_UINT64, - G_FILE_ATTRIBUTE_TYPE_INT64, - G_FILE_ATTRIBUTE_TYPE_OBJECT, - G_FILE_ATTRIBUTE_TYPE_STRINGV -} GFileAttributeType; - - -/** - * GFileAttributeInfoFlags: - * @G_FILE_ATTRIBUTE_INFO_NONE: no flags set. - * @G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE: copy the attribute values when the file is copied. - * @G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED: copy the attribute values when the file is moved. - * - * Flags specifying the behaviour of an attribute. - **/ -typedef enum { - G_FILE_ATTRIBUTE_INFO_NONE = 0, - G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE = (1 << 0), - G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED = (1 << 1) -} GFileAttributeInfoFlags; - - -/** - * GFileAttributeStatus: - * @G_FILE_ATTRIBUTE_STATUS_UNSET: Attribute value is unset (empty). - * @G_FILE_ATTRIBUTE_STATUS_SET: Attribute value is set. - * @G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING: Indicates an error in setting the value. - * - * Used by g_file_set_attributes_from_info() when setting file attributes. - **/ -typedef enum { - G_FILE_ATTRIBUTE_STATUS_UNSET = 0, - G_FILE_ATTRIBUTE_STATUS_SET, - G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING -} GFileAttributeStatus; - - -/** - * GFileQueryInfoFlags: - * @G_FILE_QUERY_INFO_NONE: No flags set. - * @G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS: Don't follow symlinks. - * - * Flags used when querying a #GFileInfo. - */ -typedef enum { - G_FILE_QUERY_INFO_NONE = 0, - G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS = (1 << 0) /*< nick=nofollow-symlinks >*/ -} GFileQueryInfoFlags; - - -/** - * GFileCreateFlags: - * @G_FILE_CREATE_NONE: No flags set. - * @G_FILE_CREATE_PRIVATE: Create a file that can only be - * accessed by the current user. - * @G_FILE_CREATE_REPLACE_DESTINATION: Replace the destination - * as if it didn't exist before. Don't try to keep any old - * permissions, replace instead of following links. This - * is generally useful if you're doing a "copy over" - * rather than a "save new version of" replace operation. - * You can think of it as "unlink destination" before - * writing to it, although the implementation may not - * be exactly like that. Since 2.20 - * - * Flags used when an operation may create a file. - */ -typedef enum { - G_FILE_CREATE_NONE = 0, - G_FILE_CREATE_PRIVATE = (1 << 0), - G_FILE_CREATE_REPLACE_DESTINATION = (1 << 1) -} GFileCreateFlags; - - -/** - * GMountMountFlags: - * @G_MOUNT_MOUNT_NONE: No flags set. - * - * Flags used when mounting a mount. - */ -typedef enum /*< flags >*/ { - G_MOUNT_MOUNT_NONE = 0 -} GMountMountFlags; - - -/** - * GMountUnmountFlags: - * @G_MOUNT_UNMOUNT_NONE: No flags set. - * @G_MOUNT_UNMOUNT_FORCE: Unmount even if there are outstanding - * file operations on the mount. - * - * Flags used when an unmounting a mount. - */ -typedef enum { - G_MOUNT_UNMOUNT_NONE = 0, - G_MOUNT_UNMOUNT_FORCE = (1 << 0) -} GMountUnmountFlags; - -/** - * GDriveStartFlags: - * @G_DRIVE_START_NONE: No flags set. - * - * Flags used when starting a drive. - * - * Since: 2.22 - */ -typedef enum /*< flags >*/ { - G_DRIVE_START_NONE = 0 -} GDriveStartFlags; - -/** - * GDriveStartStopType: - * @G_DRIVE_START_STOP_TYPE_UNKNOWN: Unknown or drive doesn't support - * start/stop. - * @G_DRIVE_START_STOP_TYPE_SHUTDOWN: The stop method will physically - * shut down the drive and e.g. power down the port the drive is - * attached to. - * @G_DRIVE_START_STOP_TYPE_NETWORK: The start/stop methods are used - * for connecting/disconnect to the drive over the network. - * @G_DRIVE_START_STOP_TYPE_MULTIDISK: The start/stop methods will - * assemble/disassemble a virtual drive from several physical - * drives. - * @G_DRIVE_START_STOP_TYPE_PASSWORD: The start/stop methods will - * unlock/lock the disk (for example using the ATA SECURITY - * UNLOCK DEVICE command) - * - * Enumeration describing how a drive can be started/stopped. - * - * Since: 2.22 - */ -typedef enum { - G_DRIVE_START_STOP_TYPE_UNKNOWN, - G_DRIVE_START_STOP_TYPE_SHUTDOWN, - G_DRIVE_START_STOP_TYPE_NETWORK, - G_DRIVE_START_STOP_TYPE_MULTIDISK, - G_DRIVE_START_STOP_TYPE_PASSWORD -} GDriveStartStopType; - -/** - * GFileCopyFlags: - * @G_FILE_COPY_NONE: No flags set. - * @G_FILE_COPY_OVERWRITE: Overwrite any existing files - * @G_FILE_COPY_BACKUP: Make a backup of any existing files. - * @G_FILE_COPY_NOFOLLOW_SYMLINKS: Don't follow symlinks. - * @G_FILE_COPY_ALL_METADATA: Copy all file metadata instead of just default set used for copy (see #GFileInfo). - * @G_FILE_COPY_NO_FALLBACK_FOR_MOVE: Don't use copy and delete fallback if native move not supported. - * @G_FILE_COPY_TARGET_DEFAULT_PERMS: Leaves target file with default perms, instead of setting the source file perms. - * - * Flags used when copying or moving files. - */ -typedef enum { - G_FILE_COPY_NONE = 0, /*< nick=none >*/ - G_FILE_COPY_OVERWRITE = (1 << 0), - G_FILE_COPY_BACKUP = (1 << 1), - G_FILE_COPY_NOFOLLOW_SYMLINKS = (1 << 2), - G_FILE_COPY_ALL_METADATA = (1 << 3), - G_FILE_COPY_NO_FALLBACK_FOR_MOVE = (1 << 4), - G_FILE_COPY_TARGET_DEFAULT_PERMS = (1 << 5) -} GFileCopyFlags; - - -/** - * GFileMonitorFlags: - * @G_FILE_MONITOR_NONE: No flags set. - * @G_FILE_MONITOR_WATCH_MOUNTS: Watch for mount events. - * @G_FILE_MONITOR_SEND_MOVED: Pair DELETED and CREATED events caused - * by file renames (moves) and send a single G_FILE_MONITOR_EVENT_MOVED - * event instead (NB: not supported on all backends; the default - * behaviour -without specifying this flag- is to send single DELETED - * and CREATED events). - * - * Flags used to set what a #GFileMonitor will watch for. - */ -typedef enum { - G_FILE_MONITOR_NONE = 0, - G_FILE_MONITOR_WATCH_MOUNTS = (1 << 0), - G_FILE_MONITOR_SEND_MOVED = (1 << 1) -} GFileMonitorFlags; - - -/** - * GFileType: - * @G_FILE_TYPE_UNKNOWN: File's type is unknown. - * @G_FILE_TYPE_REGULAR: File handle represents a regular file. - * @G_FILE_TYPE_DIRECTORY: File handle represents a directory. - * @G_FILE_TYPE_SYMBOLIC_LINK: File handle represents a symbolic link - * (Unix systems). - * @G_FILE_TYPE_SPECIAL: File is a "special" file, such as a socket, fifo, - * block device, or character device. - * @G_FILE_TYPE_SHORTCUT: File is a shortcut (Windows systems). - * @G_FILE_TYPE_MOUNTABLE: File is a mountable location. - * - * Indicates the file's on-disk type. - **/ -typedef enum { - G_FILE_TYPE_UNKNOWN = 0, - G_FILE_TYPE_REGULAR, - G_FILE_TYPE_DIRECTORY, - G_FILE_TYPE_SYMBOLIC_LINK, - G_FILE_TYPE_SPECIAL, /* socket, fifo, blockdev, chardev */ - G_FILE_TYPE_SHORTCUT, - G_FILE_TYPE_MOUNTABLE -} GFileType; - - -/** - * GFilesystemPreviewType: - * @G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS: Only preview files if user has explicitly requested it. - * @G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL: Preview files if user has requested preview of "local" files. - * @G_FILESYSTEM_PREVIEW_TYPE_NEVER: Never preview files. - * - * Indicates a hint from the file system whether files should be - * previewed in a file manager. Returned as the value of the key - * #G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW. - **/ -typedef enum { - G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS = 0, - G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL, - G_FILESYSTEM_PREVIEW_TYPE_NEVER -} GFilesystemPreviewType; - - -/** - * GFileMonitorEvent: - * @G_FILE_MONITOR_EVENT_CHANGED: a file changed. - * @G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: a hint that this was probably the last change in a set of changes. - * @G_FILE_MONITOR_EVENT_DELETED: a file was deleted. - * @G_FILE_MONITOR_EVENT_CREATED: a file was created. - * @G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: a file attribute was changed. - * @G_FILE_MONITOR_EVENT_PRE_UNMOUNT: the file location will soon be unmounted. - * @G_FILE_MONITOR_EVENT_UNMOUNTED: the file location was unmounted. - * @G_FILE_MONITOR_EVENT_MOVED: the file was moved. - * - * Specifies what type of event a monitor event is. - **/ -typedef enum { - G_FILE_MONITOR_EVENT_CHANGED, - G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT, - G_FILE_MONITOR_EVENT_DELETED, - G_FILE_MONITOR_EVENT_CREATED, - G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED, - G_FILE_MONITOR_EVENT_PRE_UNMOUNT, - G_FILE_MONITOR_EVENT_UNMOUNTED, - G_FILE_MONITOR_EVENT_MOVED -} GFileMonitorEvent; - - -/* This enumeration conflicts with GIOError in giochannel.h. However, - * that is only used as a return value in some deprecated functions. - * So, we reuse the same prefix for the enumeration values, but call - * the actual enumeration (which is rarely used) GIOErrorEnum. - */ -/** - * GIOErrorEnum: - * @G_IO_ERROR_FAILED: Generic error condition for when any operation fails. - * @G_IO_ERROR_NOT_FOUND: File not found. - * @G_IO_ERROR_EXISTS: File already exists. - * @G_IO_ERROR_IS_DIRECTORY: File is a directory. - * @G_IO_ERROR_NOT_DIRECTORY: File is not a directory. - * @G_IO_ERROR_NOT_EMPTY: File is a directory that isn't empty. - * @G_IO_ERROR_NOT_REGULAR_FILE: File is not a regular file. - * @G_IO_ERROR_NOT_SYMBOLIC_LINK: File is not a symbolic link. - * @G_IO_ERROR_NOT_MOUNTABLE_FILE: File cannot be mounted. - * @G_IO_ERROR_FILENAME_TOO_LONG: Filename is too many characters. - * @G_IO_ERROR_INVALID_FILENAME: Filename is invalid or contains invalid characters. - * @G_IO_ERROR_TOO_MANY_LINKS: File contains too many symbolic links. - * @G_IO_ERROR_NO_SPACE: No space left on drive. - * @G_IO_ERROR_INVALID_ARGUMENT: Invalid argument. - * @G_IO_ERROR_PERMISSION_DENIED: Permission denied. - * @G_IO_ERROR_NOT_SUPPORTED: Operation not supported for the current backend. - * @G_IO_ERROR_NOT_MOUNTED: File isn't mounted. - * @G_IO_ERROR_ALREADY_MOUNTED: File is already mounted. - * @G_IO_ERROR_CLOSED: File was closed. - * @G_IO_ERROR_CANCELLED: Operation was cancelled. See #GCancellable. - * @G_IO_ERROR_PENDING: Operations are still pending. - * @G_IO_ERROR_READ_ONLY: File is read only. - * @G_IO_ERROR_CANT_CREATE_BACKUP: Backup couldn't be created. - * @G_IO_ERROR_WRONG_ETAG: File's Entity Tag was incorrect. - * @G_IO_ERROR_TIMED_OUT: Operation timed out. - * @G_IO_ERROR_WOULD_RECURSE: Operation would be recursive. - * @G_IO_ERROR_BUSY: File is busy. - * @G_IO_ERROR_WOULD_BLOCK: Operation would block. - * @G_IO_ERROR_HOST_NOT_FOUND: Host couldn't be found (remote operations). - * @G_IO_ERROR_WOULD_MERGE: Operation would merge files. - * @G_IO_ERROR_FAILED_HANDLED: Operation failed and a helper program has - * already interacted with the user. Do not display any error dialog. - * @G_IO_ERROR_TOO_MANY_OPEN_FILES: The current process has too many files - * open and can't open any more. Duplicate descriptors do count toward - * this limit. Since 2.20 - * @G_IO_ERROR_NOT_INITIALIZED: The object has not been initialized. Since 2.22 - * @G_IO_ERROR_ADDRESS_IN_USE: The requested address is already in use. Since 2.22 - * @G_IO_ERROR_PARTIAL_INPUT: Need more input to finish operation. Since 2.24 - * @G_IO_ERROR_INVALID_DATA: There input data was invalid. Since 2.24 - * @G_IO_ERROR_DBUS_ERROR: A remote object generated an error that - * doesn't correspond to a locally registered #GError error - * domain. Use g_dbus_error_get_remote_error() to extract the D-Bus - * error name and g_dbus_error_strip_remote_error() to fix up the - * message so it matches what was received on the wire. Since 2.26. - * @G_IO_ERROR_HOST_UNREACHABLE: Host unreachable. Since 2.26 - * @G_IO_ERROR_NETWORK_UNREACHABLE: Network unreachable. Since 2.26 - * @G_IO_ERROR_CONNECTION_REFUSED: Connection refused. Since 2.26 - * @G_IO_ERROR_PROXY_FAILED: Connection to proxy server failed. Since 2.26 - * @G_IO_ERROR_PROXY_AUTH_FAILED: Proxy authentication failed. Since 2.26 - * @G_IO_ERROR_PROXY_NEED_AUTH: Proxy server needs authentication. Since 2.26 - * @G_IO_ERROR_PROXY_NOT_ALLOWED: Proxy connection is not allowed by ruleset. - * Since 2.26 - * - * Error codes returned by GIO functions. - * - **/ -typedef enum { - G_IO_ERROR_FAILED, - G_IO_ERROR_NOT_FOUND, - G_IO_ERROR_EXISTS, - G_IO_ERROR_IS_DIRECTORY, - G_IO_ERROR_NOT_DIRECTORY, - G_IO_ERROR_NOT_EMPTY, - G_IO_ERROR_NOT_REGULAR_FILE, - G_IO_ERROR_NOT_SYMBOLIC_LINK, - G_IO_ERROR_NOT_MOUNTABLE_FILE, - G_IO_ERROR_FILENAME_TOO_LONG, - G_IO_ERROR_INVALID_FILENAME, - G_IO_ERROR_TOO_MANY_LINKS, - G_IO_ERROR_NO_SPACE, - G_IO_ERROR_INVALID_ARGUMENT, - G_IO_ERROR_PERMISSION_DENIED, - G_IO_ERROR_NOT_SUPPORTED, - G_IO_ERROR_NOT_MOUNTED, - G_IO_ERROR_ALREADY_MOUNTED, - G_IO_ERROR_CLOSED, - G_IO_ERROR_CANCELLED, - G_IO_ERROR_PENDING, - G_IO_ERROR_READ_ONLY, - G_IO_ERROR_CANT_CREATE_BACKUP, - G_IO_ERROR_WRONG_ETAG, - G_IO_ERROR_TIMED_OUT, - G_IO_ERROR_WOULD_RECURSE, - G_IO_ERROR_BUSY, - G_IO_ERROR_WOULD_BLOCK, - G_IO_ERROR_HOST_NOT_FOUND, - G_IO_ERROR_WOULD_MERGE, - G_IO_ERROR_FAILED_HANDLED, - G_IO_ERROR_TOO_MANY_OPEN_FILES, - G_IO_ERROR_NOT_INITIALIZED, - G_IO_ERROR_ADDRESS_IN_USE, - G_IO_ERROR_PARTIAL_INPUT, - G_IO_ERROR_INVALID_DATA, - G_IO_ERROR_DBUS_ERROR, - G_IO_ERROR_HOST_UNREACHABLE, - G_IO_ERROR_NETWORK_UNREACHABLE, - G_IO_ERROR_CONNECTION_REFUSED, - G_IO_ERROR_PROXY_FAILED, - G_IO_ERROR_PROXY_AUTH_FAILED, - G_IO_ERROR_PROXY_NEED_AUTH, - G_IO_ERROR_PROXY_NOT_ALLOWED -} GIOErrorEnum; - - -/** - * GAskPasswordFlags: - * @G_ASK_PASSWORD_NEED_PASSWORD: operation requires a password. - * @G_ASK_PASSWORD_NEED_USERNAME: operation requires a username. - * @G_ASK_PASSWORD_NEED_DOMAIN: operation requires a domain. - * @G_ASK_PASSWORD_SAVING_SUPPORTED: operation supports saving settings. - * @G_ASK_PASSWORD_ANONYMOUS_SUPPORTED: operation supports anonymous users. - * - * #GAskPasswordFlags are used to request specific information from the - * user, or to notify the user of their choices in an authentication - * situation. - **/ -typedef enum { - G_ASK_PASSWORD_NEED_PASSWORD = (1 << 0), - G_ASK_PASSWORD_NEED_USERNAME = (1 << 1), - G_ASK_PASSWORD_NEED_DOMAIN = (1 << 2), - G_ASK_PASSWORD_SAVING_SUPPORTED = (1 << 3), - G_ASK_PASSWORD_ANONYMOUS_SUPPORTED = (1 << 4) -} GAskPasswordFlags; - - -/** - * GPasswordSave: - * @G_PASSWORD_SAVE_NEVER: never save a password. - * @G_PASSWORD_SAVE_FOR_SESSION: save a password for the session. - * @G_PASSWORD_SAVE_PERMANENTLY: save a password permanently. - * - * #GPasswordSave is used to indicate the lifespan of a saved password. - * - * #Gvfs stores passwords in the Gnome keyring when this flag allows it - * to, and later retrieves it again from there. - **/ -typedef enum { - G_PASSWORD_SAVE_NEVER, - G_PASSWORD_SAVE_FOR_SESSION, - G_PASSWORD_SAVE_PERMANENTLY -} GPasswordSave; - - -/** - * GMountOperationResult: - * @G_MOUNT_OPERATION_HANDLED: The request was fulfilled and the - * user specified data is now available - * @G_MOUNT_OPERATION_ABORTED: The user requested the mount operation - * to be aborted - * @G_MOUNT_OPERATION_UNHANDLED: The request was unhandled (i.e. not - * implemented) - * - * #GMountOperationResult is returned as a result when a request for - * information is send by the mounting operation. - **/ -typedef enum { - G_MOUNT_OPERATION_HANDLED, - G_MOUNT_OPERATION_ABORTED, - G_MOUNT_OPERATION_UNHANDLED -} GMountOperationResult; - - -/** - * GOutputStreamSpliceFlags: - * @G_OUTPUT_STREAM_SPLICE_NONE: Do not close either stream. - * @G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE: Close the source stream after - * the splice. - * @G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET: Close the target stream after - * the splice. - * - * GOutputStreamSpliceFlags determine how streams should be spliced. - **/ -typedef enum { - G_OUTPUT_STREAM_SPLICE_NONE = 0, - G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE = (1 << 0), - G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET = (1 << 1) -} GOutputStreamSpliceFlags; - - -/** - * GIOStreamSpliceFlags: - * @G_IO_STREAM_SPLICE_NONE: Do not close either stream. - * @G_IO_STREAM_SPLICE_CLOSE_STREAM1: Close the first stream after - * the splice. - * @G_IO_STREAM_SPLICE_CLOSE_STREAM2: Close the second stream after - * the splice. - * @G_IO_STREAM_SPLICE_WAIT_FOR_BOTH: Wait for both splice operations to finish - * before calling the callback. - * - * GIOStreamSpliceFlags determine how streams should be spliced. - * - * Since: 2.28 - **/ -typedef enum { - G_IO_STREAM_SPLICE_NONE = 0, - G_IO_STREAM_SPLICE_CLOSE_STREAM1 = (1 << 0), - G_IO_STREAM_SPLICE_CLOSE_STREAM2 = (1 << 1), - G_IO_STREAM_SPLICE_WAIT_FOR_BOTH = (1 << 2) -} GIOStreamSpliceFlags; - -/** - * GEmblemOrigin: - * @G_EMBLEM_ORIGIN_UNKNOWN: Emblem of unknown origin - * @G_EMBLEM_ORIGIN_DEVICE: Emblem adds device-specific information - * @G_EMBLEM_ORIGIN_LIVEMETADATA: Emblem depicts live metadata, such as "readonly" - * @G_EMBLEM_ORIGIN_TAG: Emblem comes from a user-defined tag, e.g. set by nautilus (in the future) - * - * GEmblemOrigin is used to add information about the origin of the emblem - * to #GEmblem. - * - * Since: 2.18 - */ -typedef enum { - G_EMBLEM_ORIGIN_UNKNOWN, - G_EMBLEM_ORIGIN_DEVICE, - G_EMBLEM_ORIGIN_LIVEMETADATA, - G_EMBLEM_ORIGIN_TAG -} GEmblemOrigin; - -/** - * GResolverError: - * @G_RESOLVER_ERROR_NOT_FOUND: the requested name/address/service was not - * found - * @G_RESOLVER_ERROR_TEMPORARY_FAILURE: the requested information could not - * be looked up due to a network error or similar problem - * @G_RESOLVER_ERROR_INTERNAL: unknown error - * - * An error code used with %G_RESOLVER_ERROR in a #GError returned - * from a #GResolver routine. - * - * Since: 2.22 - */ -typedef enum { - G_RESOLVER_ERROR_NOT_FOUND, - G_RESOLVER_ERROR_TEMPORARY_FAILURE, - G_RESOLVER_ERROR_INTERNAL -} GResolverError; - -/** - * GResolverRecordType: - * @G_RESOLVER_RECORD_SRV: lookup DNS SRV records for a domain - * @G_RESOLVER_RECORD_MX: lookup DNS MX records for a domain - * @G_RESOLVER_RECORD_TXT: lookup DNS TXT records for a name - * @G_RESOLVER_RECORD_SOA: lookup DNS SOA records for a zone - * @G_RESOLVER_RECORD_NS: lookup DNS NS records for a domain - * - * The type of record that g_resolver_lookup_records() or - * g_resolver_lookup_records_async() should retrieve. The records are returned - * as lists of #GVariant tuples. Each record type has different values in - * the variant tuples returned. - * - * %G_RESOLVER_RECORD_SRV records are returned as variants with the signature - * '(qqqs)', containing a guint16 with the priority, a guint16 with the - * weight, a guint16 with the port, and a string of the hostname. - * - * %G_RESOLVER_RECORD_MX records are returned as variants with the signature - * '(qs)', representing a guint16 with the preference, and a string containing - * the mail exchanger hostname. - * - * %G_RESOLVER_RECORD_TXT records are returned as variants with the signature - * '(as)', representing an array of the strings in the text record. - * - * %G_RESOLVER_RECORD_SOA records are returned as variants with the signature - * '(ssuuuuu)', representing a string containing the primary name server, a - * string containing the administrator, the serial as a guint32, the refresh - * interval as guint32, the retry interval as a guint32, the expire timeout - * as a guint32, and the ttl as a guint32. - * - * %G_RESOLVER_RECORD_NS records are returned as variants with the signature - * '(s)', representing a string of the hostname of the name server. - * - * Since: 2.34 - */ -typedef enum { - G_RESOLVER_RECORD_SRV = 1, - G_RESOLVER_RECORD_MX, - G_RESOLVER_RECORD_TXT, - G_RESOLVER_RECORD_SOA, - G_RESOLVER_RECORD_NS -} GResolverRecordType; - -/** - * GResourceError: - * @G_RESOURCE_ERROR_NOT_FOUND: no file was found at the requested path - * @G_RESOURCE_ERROR_INTERNAL: unknown error - * - * An error code used with %G_RESOURCE_ERROR in a #GError returned - * from a #GResource routine. - * - * Since: 2.32 - */ -typedef enum { - G_RESOURCE_ERROR_NOT_FOUND, - G_RESOURCE_ERROR_INTERNAL -} GResourceError; - -/** - * GResourceFlags: - * @G_RESOURCE_FLAGS_NONE: No flags set. - * @G_RESOURCE_FLAGS_COMPRESSED: The file is compressed. - * - * GResourceFlags give information about a particular file inside a resource - * bundle. - * - * Since: 2.32 - **/ -typedef enum { - G_RESOURCE_FLAGS_NONE = 0, - G_RESOURCE_FLAGS_COMPRESSED = (1<<0) -} GResourceFlags; - -/** - * GResourceLookupFlags: - * @G_RESOURCE_LOOKUP_FLAGS_NONE: No flags set. - * - * GResourceLookupFlags determine how resource path lookups are handled. - * - * Since: 2.32 - **/ -typedef enum /*< flags >*/ { - G_RESOURCE_LOOKUP_FLAGS_NONE = 0 -} GResourceLookupFlags; - -/** - * GSocketFamily: - * @G_SOCKET_FAMILY_INVALID: no address family - * @G_SOCKET_FAMILY_IPV4: the IPv4 family - * @G_SOCKET_FAMILY_IPV6: the IPv6 family - * @G_SOCKET_FAMILY_UNIX: the UNIX domain family - * - * The protocol family of a #GSocketAddress. (These values are - * identical to the system defines %AF_INET, %AF_INET6 and %AF_UNIX, - * if available.) - * - * Since: 2.22 - */ -typedef enum { - G_SOCKET_FAMILY_INVALID, - G_SOCKET_FAMILY_UNIX = GLIB_SYSDEF_AF_UNIX, - G_SOCKET_FAMILY_IPV4 = GLIB_SYSDEF_AF_INET, - G_SOCKET_FAMILY_IPV6 = GLIB_SYSDEF_AF_INET6 -} GSocketFamily; - -/** - * GSocketType: - * @G_SOCKET_TYPE_INVALID: Type unknown or wrong - * @G_SOCKET_TYPE_STREAM: Reliable connection-based byte streams (e.g. TCP). - * @G_SOCKET_TYPE_DATAGRAM: Connectionless, unreliable datagram passing. - * (e.g. UDP) - * @G_SOCKET_TYPE_SEQPACKET: Reliable connection-based passing of datagrams - * of fixed maximum length (e.g. SCTP). - * - * Flags used when creating a #GSocket. Some protocols may not implement - * all the socket types. - * - * Since: 2.22 - */ -typedef enum -{ - G_SOCKET_TYPE_INVALID, - G_SOCKET_TYPE_STREAM, - G_SOCKET_TYPE_DATAGRAM, - G_SOCKET_TYPE_SEQPACKET -} GSocketType; - -/** - * GSocketMsgFlags: - * @G_SOCKET_MSG_NONE: No flags. - * @G_SOCKET_MSG_OOB: Request to send/receive out of band data. - * @G_SOCKET_MSG_PEEK: Read data from the socket without removing it from - * the queue. - * @G_SOCKET_MSG_DONTROUTE: Don't use a gateway to send out the packet, - * only send to hosts on directly connected networks. - * - * Flags used in g_socket_receive_message() and g_socket_send_message(). - * The flags listed in the enum are some commonly available flags, but the - * values used for them are the same as on the platform, and any other flags - * are passed in/out as is. So to use a platform specific flag, just include - * the right system header and pass in the flag. - * - * Since: 2.22 - */ -typedef enum /*< flags >*/ -{ - G_SOCKET_MSG_NONE, - G_SOCKET_MSG_OOB = GLIB_SYSDEF_MSG_OOB, - G_SOCKET_MSG_PEEK = GLIB_SYSDEF_MSG_PEEK, - G_SOCKET_MSG_DONTROUTE = GLIB_SYSDEF_MSG_DONTROUTE -} GSocketMsgFlags; - -/** - * GSocketProtocol: - * @G_SOCKET_PROTOCOL_UNKNOWN: The protocol type is unknown - * @G_SOCKET_PROTOCOL_DEFAULT: The default protocol for the family/type - * @G_SOCKET_PROTOCOL_TCP: TCP over IP - * @G_SOCKET_PROTOCOL_UDP: UDP over IP - * @G_SOCKET_PROTOCOL_SCTP: SCTP over IP - * - * A protocol identifier is specified when creating a #GSocket, which is a - * family/type specific identifier, where 0 means the default protocol for - * the particular family/type. - * - * This enum contains a set of commonly available and used protocols. You - * can also pass any other identifiers handled by the platform in order to - * use protocols not listed here. - * - * Since: 2.22 - */ -typedef enum { - G_SOCKET_PROTOCOL_UNKNOWN = -1, - G_SOCKET_PROTOCOL_DEFAULT = 0, - G_SOCKET_PROTOCOL_TCP = 6, - G_SOCKET_PROTOCOL_UDP = 17, - G_SOCKET_PROTOCOL_SCTP = 132 -} GSocketProtocol; - -/** - * GZlibCompressorFormat: - * @G_ZLIB_COMPRESSOR_FORMAT_ZLIB: deflate compression with zlib header - * @G_ZLIB_COMPRESSOR_FORMAT_GZIP: gzip file format - * @G_ZLIB_COMPRESSOR_FORMAT_RAW: deflate compression with no header - * - * Used to select the type of data format to use for #GZlibDecompressor - * and #GZlibCompressor. - * - * Since: 2.24 - */ -typedef enum { - G_ZLIB_COMPRESSOR_FORMAT_ZLIB, - G_ZLIB_COMPRESSOR_FORMAT_GZIP, - G_ZLIB_COMPRESSOR_FORMAT_RAW -} GZlibCompressorFormat; - -/** - * GUnixSocketAddressType: - * @G_UNIX_SOCKET_ADDRESS_INVALID: invalid - * @G_UNIX_SOCKET_ADDRESS_ANONYMOUS: anonymous - * @G_UNIX_SOCKET_ADDRESS_PATH: a filesystem path - * @G_UNIX_SOCKET_ADDRESS_ABSTRACT: an abstract name - * @G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED: an abstract name, 0-padded - * to the full length of a unix socket name - * - * The type of name used by a #GUnixSocketAddress. - * %G_UNIX_SOCKET_ADDRESS_PATH indicates a traditional unix domain - * socket bound to a filesystem path. %G_UNIX_SOCKET_ADDRESS_ANONYMOUS - * indicates a socket not bound to any name (eg, a client-side socket, - * or a socket created with socketpair()). - * - * For abstract sockets, there are two incompatible ways of naming - * them; the man pages suggest using the entire struct - * sockaddr_un as the name, padding the unused parts of the - * %sun_path field with zeroes; this corresponds to - * %G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED. However, many programs - * instead just use a portion of %sun_path, and pass an appropriate - * smaller length to bind() or connect(). This is - * %G_UNIX_SOCKET_ADDRESS_ABSTRACT. - * - * Since: 2.26 - */ -typedef enum { - G_UNIX_SOCKET_ADDRESS_INVALID, - G_UNIX_SOCKET_ADDRESS_ANONYMOUS, - G_UNIX_SOCKET_ADDRESS_PATH, - G_UNIX_SOCKET_ADDRESS_ABSTRACT, - G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED -} GUnixSocketAddressType; - -/** - * GBusType: - * @G_BUS_TYPE_STARTER: An alias for the message bus that activated the process, if any. - * @G_BUS_TYPE_NONE: Not a message bus. - * @G_BUS_TYPE_SYSTEM: The system-wide message bus. - * @G_BUS_TYPE_SESSION: The login session message bus. - * - * An enumeration for well-known message buses. - * - * Since: 2.26 - */ -typedef enum -{ - G_BUS_TYPE_STARTER = -1, - G_BUS_TYPE_NONE = 0, - G_BUS_TYPE_SYSTEM = 1, - G_BUS_TYPE_SESSION = 2 -} GBusType; - -/** - * GBusNameOwnerFlags: - * @G_BUS_NAME_OWNER_FLAGS_NONE: No flags set. - * @G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT: Allow another message bus connection to claim the name. - * @G_BUS_NAME_OWNER_FLAGS_REPLACE: If another message bus connection owns the name and have - * specified #G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT, then take the name from the other connection. - * - * Flags used in g_bus_own_name(). - * - * Since: 2.26 - */ -typedef enum -{ - G_BUS_NAME_OWNER_FLAGS_NONE = 0, /*< nick=none >*/ - G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT = (1<<0), /*< nick=allow-replacement >*/ - G_BUS_NAME_OWNER_FLAGS_REPLACE = (1<<1) /*< nick=replace >*/ -} GBusNameOwnerFlags; - -/** - * GBusNameWatcherFlags: - * @G_BUS_NAME_WATCHER_FLAGS_NONE: No flags set. - * @G_BUS_NAME_WATCHER_FLAGS_AUTO_START: If no-one owns the name when - * beginning to watch the name, ask the bus to launch an owner for the - * name. - * - * Flags used in g_bus_watch_name(). - * - * Since: 2.26 - */ -typedef enum -{ - G_BUS_NAME_WATCHER_FLAGS_NONE = 0, - G_BUS_NAME_WATCHER_FLAGS_AUTO_START = (1<<0) -} GBusNameWatcherFlags; - -/** - * GDBusProxyFlags: - * @G_DBUS_PROXY_FLAGS_NONE: No flags set. - * @G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES: Don't load properties. - * @G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS: Don't connect to signals on the remote object. - * @G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START: If not set and the proxy if for a well-known name, - * then request the bus to launch an owner for the name if no-one owns the name. This flag can - * only be used in proxies for well-known names. - * @G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES: If set, the property value for any invalidated property will be (asynchronously) retrieved upon receiving the PropertiesChanged D-Bus signal and the property will not cause emission of the #GDBusProxy::g-properties-changed signal. When the value is received the #GDBusProxy::g-properties-changed signal is emitted for the property along with the retrieved value. Since 2.32. - * - * Flags used when constructing an instance of a #GDBusProxy derived class. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_PROXY_FLAGS_NONE = 0, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES = (1<<0), - G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS = (1<<1), - G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START = (1<<2), - G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES = (1<<3) -} GDBusProxyFlags; - -/** - * GDBusError: - * @G_DBUS_ERROR_FAILED: - * A generic error; "something went wrong" - see the error message for - * more. - * @G_DBUS_ERROR_NO_MEMORY: - * There was not enough memory to complete an operation. - * @G_DBUS_ERROR_SERVICE_UNKNOWN: - * The bus doesn't know how to launch a service to supply the bus name - * you wanted. - * @G_DBUS_ERROR_NAME_HAS_NO_OWNER: - * The bus name you referenced doesn't exist (i.e. no application owns - * it). - * @G_DBUS_ERROR_NO_REPLY: - * No reply to a message expecting one, usually means a timeout occurred. - * @G_DBUS_ERROR_IO_ERROR: - * Something went wrong reading or writing to a socket, for example. - * @G_DBUS_ERROR_BAD_ADDRESS: - * A D-Bus bus address was malformed. - * @G_DBUS_ERROR_NOT_SUPPORTED: - * Requested operation isn't supported (like ENOSYS on UNIX). - * @G_DBUS_ERROR_LIMITS_EXCEEDED: - * Some limited resource is exhausted. - * @G_DBUS_ERROR_ACCESS_DENIED: - * Security restrictions don't allow doing what you're trying to do. - * @G_DBUS_ERROR_AUTH_FAILED: - * Authentication didn't work. - * @G_DBUS_ERROR_NO_SERVER: - * Unable to connect to server (probably caused by ECONNREFUSED on a - * socket). - * @G_DBUS_ERROR_TIMEOUT: - * Certain timeout errors, possibly ETIMEDOUT on a socket. Note that - * %G_DBUS_ERROR_NO_REPLY is used for message reply timeouts. Warning: - * this is confusingly-named given that %G_DBUS_ERROR_TIMED_OUT also - * exists. We can't fix it for compatibility reasons so just be - * careful. - * @G_DBUS_ERROR_NO_NETWORK: - * No network access (probably ENETUNREACH on a socket). - * @G_DBUS_ERROR_ADDRESS_IN_USE: - * Can't bind a socket since its address is in use (i.e. EADDRINUSE). - * @G_DBUS_ERROR_DISCONNECTED: - * The connection is disconnected and you're trying to use it. - * @G_DBUS_ERROR_INVALID_ARGS: - * Invalid arguments passed to a method call. - * @G_DBUS_ERROR_FILE_NOT_FOUND: - * Missing file. - * @G_DBUS_ERROR_FILE_EXISTS: - * Existing file and the operation you're using does not silently overwrite. - * @G_DBUS_ERROR_UNKNOWN_METHOD: - * Method name you invoked isn't known by the object you invoked it on. - * @G_DBUS_ERROR_TIMED_OUT: - * Certain timeout errors, e.g. while starting a service. Warning: this is - * confusingly-named given that %G_DBUS_ERROR_TIMEOUT also exists. We - * can't fix it for compatibility reasons so just be careful. - * @G_DBUS_ERROR_MATCH_RULE_NOT_FOUND: - * Tried to remove or modify a match rule that didn't exist. - * @G_DBUS_ERROR_MATCH_RULE_INVALID: - * The match rule isn't syntactically valid. - * @G_DBUS_ERROR_SPAWN_EXEC_FAILED: - * While starting a new process, the exec() call failed. - * @G_DBUS_ERROR_SPAWN_FORK_FAILED: - * While starting a new process, the fork() call failed. - * @G_DBUS_ERROR_SPAWN_CHILD_EXITED: - * While starting a new process, the child exited with a status code. - * @G_DBUS_ERROR_SPAWN_CHILD_SIGNALED: - * While starting a new process, the child exited on a signal. - * @G_DBUS_ERROR_SPAWN_FAILED: - * While starting a new process, something went wrong. - * @G_DBUS_ERROR_SPAWN_SETUP_FAILED: - * We failed to setup the environment correctly. - * @G_DBUS_ERROR_SPAWN_CONFIG_INVALID: - * We failed to setup the config parser correctly. - * @G_DBUS_ERROR_SPAWN_SERVICE_INVALID: - * Bus name was not valid. - * @G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND: - * Service file not found in system-services directory. - * @G_DBUS_ERROR_SPAWN_PERMISSIONS_INVALID: - * Permissions are incorrect on the setuid helper. - * @G_DBUS_ERROR_SPAWN_FILE_INVALID: - * Service file invalid (Name, User or Exec missing). - * @G_DBUS_ERROR_SPAWN_NO_MEMORY: - * Tried to get a UNIX process ID and it wasn't available. - * @G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN: - * Tried to get a UNIX process ID and it wasn't available. - * @G_DBUS_ERROR_INVALID_SIGNATURE: - * A type signature is not valid. - * @G_DBUS_ERROR_INVALID_FILE_CONTENT: - * A file contains invalid syntax or is otherwise broken. - * @G_DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN: - * Asked for SELinux security context and it wasn't available. - * @G_DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN: - * Asked for ADT audit data and it wasn't available. - * @G_DBUS_ERROR_OBJECT_PATH_IN_USE: - * There's already an object with the requested object path. - * - * Error codes for the %G_DBUS_ERROR error domain. - * - * Since: 2.26 - */ -typedef enum -{ - /* Well-known errors in the org.freedesktop.DBus.Error namespace */ - G_DBUS_ERROR_FAILED, /* org.freedesktop.DBus.Error.Failed */ - G_DBUS_ERROR_NO_MEMORY, /* org.freedesktop.DBus.Error.NoMemory */ - G_DBUS_ERROR_SERVICE_UNKNOWN, /* org.freedesktop.DBus.Error.ServiceUnknown */ - G_DBUS_ERROR_NAME_HAS_NO_OWNER, /* org.freedesktop.DBus.Error.NameHasNoOwner */ - G_DBUS_ERROR_NO_REPLY, /* org.freedesktop.DBus.Error.NoReply */ - G_DBUS_ERROR_IO_ERROR, /* org.freedesktop.DBus.Error.IOError */ - G_DBUS_ERROR_BAD_ADDRESS, /* org.freedesktop.DBus.Error.BadAddress */ - G_DBUS_ERROR_NOT_SUPPORTED, /* org.freedesktop.DBus.Error.NotSupported */ - G_DBUS_ERROR_LIMITS_EXCEEDED, /* org.freedesktop.DBus.Error.LimitsExceeded */ - G_DBUS_ERROR_ACCESS_DENIED, /* org.freedesktop.DBus.Error.AccessDenied */ - G_DBUS_ERROR_AUTH_FAILED, /* org.freedesktop.DBus.Error.AuthFailed */ - G_DBUS_ERROR_NO_SERVER, /* org.freedesktop.DBus.Error.NoServer */ - G_DBUS_ERROR_TIMEOUT, /* org.freedesktop.DBus.Error.Timeout */ - G_DBUS_ERROR_NO_NETWORK, /* org.freedesktop.DBus.Error.NoNetwork */ - G_DBUS_ERROR_ADDRESS_IN_USE, /* org.freedesktop.DBus.Error.AddressInUse */ - G_DBUS_ERROR_DISCONNECTED, /* org.freedesktop.DBus.Error.Disconnected */ - G_DBUS_ERROR_INVALID_ARGS, /* org.freedesktop.DBus.Error.InvalidArgs */ - G_DBUS_ERROR_FILE_NOT_FOUND, /* org.freedesktop.DBus.Error.FileNotFound */ - G_DBUS_ERROR_FILE_EXISTS, /* org.freedesktop.DBus.Error.FileExists */ - G_DBUS_ERROR_UNKNOWN_METHOD, /* org.freedesktop.DBus.Error.UnknownMethod */ - G_DBUS_ERROR_TIMED_OUT, /* org.freedesktop.DBus.Error.TimedOut */ - G_DBUS_ERROR_MATCH_RULE_NOT_FOUND, /* org.freedesktop.DBus.Error.MatchRuleNotFound */ - G_DBUS_ERROR_MATCH_RULE_INVALID, /* org.freedesktop.DBus.Error.MatchRuleInvalid */ - G_DBUS_ERROR_SPAWN_EXEC_FAILED, /* org.freedesktop.DBus.Error.Spawn.ExecFailed */ - G_DBUS_ERROR_SPAWN_FORK_FAILED, /* org.freedesktop.DBus.Error.Spawn.ForkFailed */ - G_DBUS_ERROR_SPAWN_CHILD_EXITED, /* org.freedesktop.DBus.Error.Spawn.ChildExited */ - G_DBUS_ERROR_SPAWN_CHILD_SIGNALED, /* org.freedesktop.DBus.Error.Spawn.ChildSignaled */ - G_DBUS_ERROR_SPAWN_FAILED, /* org.freedesktop.DBus.Error.Spawn.Failed */ - G_DBUS_ERROR_SPAWN_SETUP_FAILED, /* org.freedesktop.DBus.Error.Spawn.FailedToSetup */ - G_DBUS_ERROR_SPAWN_CONFIG_INVALID, /* org.freedesktop.DBus.Error.Spawn.ConfigInvalid */ - G_DBUS_ERROR_SPAWN_SERVICE_INVALID, /* org.freedesktop.DBus.Error.Spawn.ServiceNotValid */ - G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND, /* org.freedesktop.DBus.Error.Spawn.ServiceNotFound */ - G_DBUS_ERROR_SPAWN_PERMISSIONS_INVALID, /* org.freedesktop.DBus.Error.Spawn.PermissionsInvalid */ - G_DBUS_ERROR_SPAWN_FILE_INVALID, /* org.freedesktop.DBus.Error.Spawn.FileInvalid */ - G_DBUS_ERROR_SPAWN_NO_MEMORY, /* org.freedesktop.DBus.Error.Spawn.NoMemory */ - G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, /* org.freedesktop.DBus.Error.UnixProcessIdUnknown */ - G_DBUS_ERROR_INVALID_SIGNATURE, /* org.freedesktop.DBus.Error.InvalidSignature */ - G_DBUS_ERROR_INVALID_FILE_CONTENT, /* org.freedesktop.DBus.Error.InvalidFileContent */ - G_DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN, /* org.freedesktop.DBus.Error.SELinuxSecurityContextUnknown */ - G_DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN, /* org.freedesktop.DBus.Error.AdtAuditDataUnknown */ - G_DBUS_ERROR_OBJECT_PATH_IN_USE /* org.freedesktop.DBus.Error.ObjectPathInUse */ -} GDBusError; -/* Remember to update g_dbus_error_quark() in gdbuserror.c if you extend this enumeration */ - -/** - * GDBusConnectionFlags: - * @G_DBUS_CONNECTION_FLAGS_NONE: No flags set. - * @G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT: Perform authentication against server. - * @G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER: Perform authentication against client. - * @G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: When - * authenticating as a server, allow the anonymous authentication - * method. - * @G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION: Pass this flag if connecting to a peer that is a - * message bus. This means that the Hello() method will be invoked as part of the connection setup. - * @G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING: If set, processing of D-Bus messages is - * delayed until g_dbus_connection_start_message_processing() is called. - * - * Flags used when creating a new #GDBusConnection. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_CONNECTION_FLAGS_NONE = 0, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT = (1<<0), - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER = (1<<1), - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS = (1<<2), - G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION = (1<<3), - G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING = (1<<4) -} GDBusConnectionFlags; - -/** - * GDBusCapabilityFlags: - * @G_DBUS_CAPABILITY_FLAGS_NONE: No flags set. - * @G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING: The connection - * supports exchanging UNIX file descriptors with the remote peer. - * - * Capabilities negotiated with the remote peer. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_CAPABILITY_FLAGS_NONE = 0, - G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING = (1<<0) -} GDBusCapabilityFlags; - -/** - * GDBusCallFlags: - * @G_DBUS_CALL_FLAGS_NONE: No flags set. - * @G_DBUS_CALL_FLAGS_NO_AUTO_START: The bus must not launch - * an owner for the destination name in response to this method - * invocation. - * - * Flags used in g_dbus_connection_call() and similar APIs. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_CALL_FLAGS_NONE = 0, - G_DBUS_CALL_FLAGS_NO_AUTO_START = (1<<0) -} GDBusCallFlags; -/* (1<<31) is reserved for internal use by GDBusConnection, do not use it. */ - -/** - * GDBusMessageType: - * @G_DBUS_MESSAGE_TYPE_INVALID: Message is of invalid type. - * @G_DBUS_MESSAGE_TYPE_METHOD_CALL: Method call. - * @G_DBUS_MESSAGE_TYPE_METHOD_RETURN: Method reply. - * @G_DBUS_MESSAGE_TYPE_ERROR: Error reply. - * @G_DBUS_MESSAGE_TYPE_SIGNAL: Signal emission. - * - * Message types used in #GDBusMessage. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_MESSAGE_TYPE_INVALID, - G_DBUS_MESSAGE_TYPE_METHOD_CALL, - G_DBUS_MESSAGE_TYPE_METHOD_RETURN, - G_DBUS_MESSAGE_TYPE_ERROR, - G_DBUS_MESSAGE_TYPE_SIGNAL -} GDBusMessageType; - -/** - * GDBusMessageFlags: - * @G_DBUS_MESSAGE_FLAGS_NONE: No flags set. - * @G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED: A reply is not expected. - * @G_DBUS_MESSAGE_FLAGS_NO_AUTO_START: The bus must not launch an - * owner for the destination name in response to this message. - * - * Message flags used in #GDBusMessage. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_MESSAGE_FLAGS_NONE = 0, - G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED = (1<<0), - G_DBUS_MESSAGE_FLAGS_NO_AUTO_START = (1<<1) -} GDBusMessageFlags; - -/** - * GDBusMessageHeaderField: - * @G_DBUS_MESSAGE_HEADER_FIELD_INVALID: Not a valid header field. - * @G_DBUS_MESSAGE_HEADER_FIELD_PATH: The object path. - * @G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE: The interface name. - * @G_DBUS_MESSAGE_HEADER_FIELD_MEMBER: The method or signal name. - * @G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME: The name of the error that occurred. - * @G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL: The serial number the message is a reply to. - * @G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION: The name the message is intended for. - * @G_DBUS_MESSAGE_HEADER_FIELD_SENDER: Unique name of the sender of the message (filled in by the bus). - * @G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE: The signature of the message body. - * @G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS: The number of UNIX file descriptors that accompany the message. - * - * Header fields used in #GDBusMessage. - * - * Since: 2.26 - */ -typedef enum { - G_DBUS_MESSAGE_HEADER_FIELD_INVALID, - G_DBUS_MESSAGE_HEADER_FIELD_PATH, - G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE, - G_DBUS_MESSAGE_HEADER_FIELD_MEMBER, - G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME, - G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL, - G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION, - G_DBUS_MESSAGE_HEADER_FIELD_SENDER, - G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE, - G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS -} GDBusMessageHeaderField; - -/** - * GDBusPropertyInfoFlags: - * @G_DBUS_PROPERTY_INFO_FLAGS_NONE: No flags set. - * @G_DBUS_PROPERTY_INFO_FLAGS_READABLE: Property is readable. - * @G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE: Property is writable. - * - * Flags describing the access control of a D-Bus property. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_PROPERTY_INFO_FLAGS_NONE = 0, - G_DBUS_PROPERTY_INFO_FLAGS_READABLE = (1<<0), - G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE = (1<<1) -} GDBusPropertyInfoFlags; - -/** - * GDBusSubtreeFlags: - * @G_DBUS_SUBTREE_FLAGS_NONE: No flags set. - * @G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES: Method calls to objects not in the enumerated range - * will still be dispatched. This is useful if you want - * to dynamically spawn objects in the subtree. - * - * Flags passed to g_dbus_connection_register_subtree(). - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_SUBTREE_FLAGS_NONE = 0, - G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES = (1<<0) -} GDBusSubtreeFlags; - -/** - * GDBusServerFlags: - * @G_DBUS_SERVER_FLAGS_NONE: No flags set. - * @G_DBUS_SERVER_FLAGS_RUN_IN_THREAD: All #GDBusServer::new-connection - * signals will run in separated dedicated threads (see signal for - * details). - * @G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: Allow the anonymous - * authentication method. - * - * Flags used when creating a #GDBusServer. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_SERVER_FLAGS_NONE = 0, - G_DBUS_SERVER_FLAGS_RUN_IN_THREAD = (1<<0), - G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS = (1<<1) -} GDBusServerFlags; - -/** - * GDBusSignalFlags: - * @G_DBUS_SIGNAL_FLAGS_NONE: No flags set. - * @G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE: Don't actually send the AddMatch - * D-Bus call for this signal subscription. This gives you more control - * over which match rules you add (but you must add them manually). - * - * Flags used when subscribing to signals via g_dbus_connection_signal_subscribe(). - * - * Since: 2.26 - */ -typedef enum /*< flags >*/ -{ - G_DBUS_SIGNAL_FLAGS_NONE = 0, - G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE = (1<<0) -} GDBusSignalFlags; - -/** - * GDBusSendMessageFlags: - * @G_DBUS_SEND_MESSAGE_FLAGS_NONE: No flags set. - * @G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL: Do not automatically - * assign a serial number from the #GDBusConnection object when - * sending a message. - * - * Flags used when sending #GDBusMessages on a #GDBusConnection. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_SEND_MESSAGE_FLAGS_NONE = 0, - G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL = (1<<0) -} GDBusSendMessageFlags; -/* (1<<31) is reserved for internal use by GDBusConnection, do not use it. */ - -/** - * GCredentialsType: - * @G_CREDENTIALS_TYPE_INVALID: Indicates an invalid native credential type. - * @G_CREDENTIALS_TYPE_LINUX_UCRED: The native credentials type is a struct ucred. - * @G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED: The native credentials type is a struct cmsgcred. - * @G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED: The native credentials type is a struct sockpeercred. Added in 2.30. - * - * Enumeration describing different kinds of native credential types. - * - * Since: 2.26 - */ -typedef enum -{ - G_CREDENTIALS_TYPE_INVALID, - G_CREDENTIALS_TYPE_LINUX_UCRED, - G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED, - G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED -} GCredentialsType; - -/** - * GDBusMessageByteOrder: - * @G_DBUS_MESSAGE_BYTE_ORDER_BIG_ENDIAN: The byte order is big endian. - * @G_DBUS_MESSAGE_BYTE_ORDER_LITTLE_ENDIAN: The byte order is little endian. - * - * Enumeration used to describe the byte order of a D-Bus message. - * - * Since: 2.26 - */ -typedef enum -{ - G_DBUS_MESSAGE_BYTE_ORDER_BIG_ENDIAN = 'B', - G_DBUS_MESSAGE_BYTE_ORDER_LITTLE_ENDIAN = 'l' -} GDBusMessageByteOrder; - -/** - * GApplicationFlags: - * @G_APPLICATION_FLAGS_NONE: Default - * @G_APPLICATION_IS_SERVICE: Run as a service. In this mode, registration - * fails if the service is already running, and the application will - * stay around for a while when the use count falls to zero. - * @G_APPLICATION_IS_LAUNCHER: Don't try to become the primary instance. - * @G_APPLICATION_HANDLES_OPEN: This application handles opening files (in - * the primary instance). Note that this flag only affects the default - * implementation of local_command_line(), and has no effect if - * %G_APPLICATION_HANDLES_COMMAND_LINE is given. - * See g_application_run() for details. - * @G_APPLICATION_HANDLES_COMMAND_LINE: This application handles command line - * arguments (in the primary instance). Note that this flag only affect - * the default implementation of local_command_line(). - * See g_application_run() for details. - * @G_APPLICATION_SEND_ENVIRONMENT: Send the environment of the - * launching process to the primary instance. Set this flag if your - * application is expected to behave differently depending on certain - * environment variables. For instance, an editor might be expected - * to use the GIT_COMMITTER_NAME environment variable - * when editing a git commit message. The environment is available - * to the #GApplication::command-line signal handler, via - * g_application_command_line_getenv(). - * @G_APPLICATION_NON_UNIQUE: Make no attempts to do any of the typical - * single-instance application negotiation, even if the application - * ID is given. The application neither attempts to become the - * owner of the application ID nor does it check if an existing - * owner already exists. Everything occurs in the local process. - * Since: 2.30. - * - * Flags used to define the behaviour of a #GApplication. - * - * Since: 2.28 - **/ -typedef enum -{ - G_APPLICATION_FLAGS_NONE, - G_APPLICATION_IS_SERVICE = (1 << 0), - G_APPLICATION_IS_LAUNCHER = (1 << 1), - - G_APPLICATION_HANDLES_OPEN = (1 << 2), - G_APPLICATION_HANDLES_COMMAND_LINE = (1 << 3), - G_APPLICATION_SEND_ENVIRONMENT = (1 << 4), - - G_APPLICATION_NON_UNIQUE = (1 << 5) -} GApplicationFlags; - -/** - * GTlsError: - * @G_TLS_ERROR_UNAVAILABLE: No TLS provider is available - * @G_TLS_ERROR_MISC: Miscellaneous TLS error - * @G_TLS_ERROR_BAD_CERTIFICATE: A certificate could not be parsed - * @G_TLS_ERROR_NOT_TLS: The TLS handshake failed because the - * peer does not seem to be a TLS server. - * @G_TLS_ERROR_HANDSHAKE: The TLS handshake failed because the - * peer's certificate was not acceptable. - * @G_TLS_ERROR_CERTIFICATE_REQUIRED: The TLS handshake failed because - * the server requested a client-side certificate, but none was - * provided. See g_tls_connection_set_certificate(). - * @G_TLS_ERROR_EOF: The TLS connection was closed without proper - * notice, which may indicate an attack. See - * g_tls_connection_set_require_close_notify(). - * - * An error code used with %G_TLS_ERROR in a #GError returned from a - * TLS-related routine. - * - * Since: 2.28 - */ -typedef enum { - G_TLS_ERROR_UNAVAILABLE, - G_TLS_ERROR_MISC, - G_TLS_ERROR_BAD_CERTIFICATE, - G_TLS_ERROR_NOT_TLS, - G_TLS_ERROR_HANDSHAKE, - G_TLS_ERROR_CERTIFICATE_REQUIRED, - G_TLS_ERROR_EOF -} GTlsError; - -/** - * GTlsCertificateFlags: - * @G_TLS_CERTIFICATE_UNKNOWN_CA: The signing certificate authority is - * not known. - * @G_TLS_CERTIFICATE_BAD_IDENTITY: The certificate does not match the - * expected identity of the site that it was retrieved from. - * @G_TLS_CERTIFICATE_NOT_ACTIVATED: The certificate's activation time - * is still in the future - * @G_TLS_CERTIFICATE_EXPIRED: The certificate has expired - * @G_TLS_CERTIFICATE_REVOKED: The certificate has been revoked - * according to the #GTlsConnection's certificate revocation list. - * @G_TLS_CERTIFICATE_INSECURE: The certificate's algorithm is - * considered insecure. - * @G_TLS_CERTIFICATE_GENERIC_ERROR: Some other error occurred validating - * the certificate - * @G_TLS_CERTIFICATE_VALIDATE_ALL: the combination of all of the above - * flags - * - * A set of flags describing TLS certification validation. This can be - * used to set which validation steps to perform (eg, with - * g_tls_client_connection_set_validation_flags()), or to describe why - * a particular certificate was rejected (eg, in - * #GTlsConnection::accept-certificate). - * - * Since: 2.28 - */ -typedef enum { - G_TLS_CERTIFICATE_UNKNOWN_CA = (1 << 0), - G_TLS_CERTIFICATE_BAD_IDENTITY = (1 << 1), - G_TLS_CERTIFICATE_NOT_ACTIVATED = (1 << 2), - G_TLS_CERTIFICATE_EXPIRED = (1 << 3), - G_TLS_CERTIFICATE_REVOKED = (1 << 4), - G_TLS_CERTIFICATE_INSECURE = (1 << 5), - G_TLS_CERTIFICATE_GENERIC_ERROR = (1 << 6), - - G_TLS_CERTIFICATE_VALIDATE_ALL = 0x007f -} GTlsCertificateFlags; - -/** - * GTlsAuthenticationMode: - * @G_TLS_AUTHENTICATION_NONE: client authentication not required - * @G_TLS_AUTHENTICATION_REQUESTED: client authentication is requested - * @G_TLS_AUTHENTICATION_REQUIRED: client authentication is required - * - * The client authentication mode for a #GTlsServerConnection. - * - * Since: 2.28 - */ -typedef enum { - G_TLS_AUTHENTICATION_NONE, - G_TLS_AUTHENTICATION_REQUESTED, - G_TLS_AUTHENTICATION_REQUIRED -} GTlsAuthenticationMode; - -/** - * GTlsRehandshakeMode: - * @G_TLS_REHANDSHAKE_NEVER: Never allow rehandshaking - * @G_TLS_REHANDSHAKE_SAFELY: Allow safe rehandshaking only - * @G_TLS_REHANDSHAKE_UNSAFELY: Allow unsafe rehandshaking - * - * When to allow rehandshaking. See - * g_tls_connection_set_rehandshake_mode(). - * - * Since: 2.28 - */ -typedef enum { - G_TLS_REHANDSHAKE_NEVER, - G_TLS_REHANDSHAKE_SAFELY, - G_TLS_REHANDSHAKE_UNSAFELY -} GTlsRehandshakeMode; - -/** - * GTlsPasswordFlags: - * @G_TLS_PASSWORD_NONE: No flags - * @G_TLS_PASSWORD_RETRY: The password was wrong, and the user should retry. - * @G_TLS_PASSWORD_MANY_TRIES: Hint to the user that the password has been - * wrong many times, and the user may not have many chances left. - * @G_TLS_PASSWORD_FINAL_TRY: Hint to the user that this is the last try to get - * this password right. - * - * Various flags for the password. - * - * Since: 2.30 - */ - -typedef enum _GTlsPasswordFlags -{ - G_TLS_PASSWORD_NONE = 0, - G_TLS_PASSWORD_RETRY = 1 << 1, - G_TLS_PASSWORD_MANY_TRIES = 1 << 2, - G_TLS_PASSWORD_FINAL_TRY = 1 << 3 -} GTlsPasswordFlags; - -/** - * GTlsInteractionResult: - * @G_TLS_INTERACTION_UNHANDLED: The interaction was unhandled (i.e. not - * implemented). - * @G_TLS_INTERACTION_HANDLED: The interaction completed, and resulting data - * is available. - * @G_TLS_INTERACTION_FAILED: The interaction has failed, or was cancelled. - * and the operation should be aborted. - * - * #GTlsInteractionResult is returned by various functions in #GTlsInteraction - * when finishing an interaction request. - * - * Since: 2.30 - */ -typedef enum { - G_TLS_INTERACTION_UNHANDLED, - G_TLS_INTERACTION_HANDLED, - G_TLS_INTERACTION_FAILED -} GTlsInteractionResult; - -/** - * GDBusInterfaceSkeletonFlags: - * @G_DBUS_INTERFACE_SKELETON_FLAGS_NONE: No flags set. - * @G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD: Each method invocation is handled in - * a thread dedicated to the invocation. This means that the method implementation can use blocking IO - * without blocking any other part of the process. It also means that the method implementation must - * use locking to access data structures used by other threads. - * - * Flags describing the behavior of a #GDBusInterfaceSkeleton instance. - * - * Since: 2.30 - */ -typedef enum -{ - G_DBUS_INTERFACE_SKELETON_FLAGS_NONE = 0, - G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD = (1<<0) -} GDBusInterfaceSkeletonFlags; - -/** - * GDBusObjectManagerClientFlags: - * @G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE: No flags set. - * @G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START: If not set and the - * manager is for a well-known name, then request the bus to launch - * an owner for the name if no-one owns the name. This flag can only - * be used in managers for well-known names. - * - * Flags used when constructing a #GDBusObjectManagerClient. - * - * Since: 2.30 - */ -typedef enum -{ - G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE = 0, - G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START = (1<<0) -} GDBusObjectManagerClientFlags; - -/** - * GTlsDatabaseVerifyFlags: - * @G_TLS_DATABASE_VERIFY_NONE: No verification flags - * - * Flags for g_tls_database_verify_chain(). - * - * Since: 2.30 - */ -typedef enum /*< flags >*/ { - G_TLS_DATABASE_VERIFY_NONE = 0 -} GTlsDatabaseVerifyFlags; - -/** - * GTlsDatabaseLookupFlags: - * @G_TLS_DATABASE_LOOKUP_NONE: No lookup flags - * @G_TLS_DATABASE_LOOKUP_KEYPAIR: Restrict lookup to certificates that have - * a private key. - * - * Flags for g_tls_database_lookup_certificate_handle(), - * g_tls_database_lookup_certificate_issuer(), - * and g_tls_database_lookup_certificates_issued_by(). - * - * Since: 2.30 - */ -typedef enum { - G_TLS_DATABASE_LOOKUP_NONE = 0, - G_TLS_DATABASE_LOOKUP_KEYPAIR = 1 -} GTlsDatabaseLookupFlags; - -/** - * GIOModuleScopeFlags: - * @G_IO_MODULE_SCOPE_NONE: No module scan flags - * @G_IO_MODULE_SCOPE_BLOCK_DUPLICATES: When using this scope to load or - * scan modules, automatically block a modules which has the same base - * basename as previously loaded module. - * - * Flags for use with g_io_module_scope_new(). - * - * Since: 2.30 - */ -typedef enum { - G_IO_MODULE_SCOPE_NONE, - G_IO_MODULE_SCOPE_BLOCK_DUPLICATES -} GIOModuleScopeFlags; - -/** - * GSocketClientEvent: - * @G_SOCKET_CLIENT_RESOLVING: The client is doing a DNS lookup. - * @G_SOCKET_CLIENT_RESOLVED: The client has completed a DNS lookup. - * @G_SOCKET_CLIENT_CONNECTING: The client is connecting to a remote - * host (either a proxy or the destination server). - * @G_SOCKET_CLIENT_CONNECTED: The client has connected to a remote - * host. - * @G_SOCKET_CLIENT_PROXY_NEGOTIATING: The client is negotiating - * with a proxy to connect to the destination server. - * @G_SOCKET_CLIENT_PROXY_NEGOTIATED: The client has negotiated - * with the proxy server. - * @G_SOCKET_CLIENT_TLS_HANDSHAKING: The client is performing a - * TLS handshake. - * @G_SOCKET_CLIENT_TLS_HANDSHAKED: The client has performed a - * TLS handshake. - * @G_SOCKET_CLIENT_COMPLETE: The client is done with a particular - * #GSocketConnectable. - * - * Describes an event occurring on a #GSocketClient. See the - * #GSocketClient::event signal for more details. - * - * Additional values may be added to this type in the future. - * - * Since: 2.32 - */ -typedef enum { - G_SOCKET_CLIENT_RESOLVING, - G_SOCKET_CLIENT_RESOLVED, - G_SOCKET_CLIENT_CONNECTING, - G_SOCKET_CLIENT_CONNECTED, - G_SOCKET_CLIENT_PROXY_NEGOTIATING, - G_SOCKET_CLIENT_PROXY_NEGOTIATED, - G_SOCKET_CLIENT_TLS_HANDSHAKING, - G_SOCKET_CLIENT_TLS_HANDSHAKED, - G_SOCKET_CLIENT_COMPLETE -} GSocketClientEvent; - -/** - * GTestDBusFlags: - * @G_TEST_DBUS_NONE: No flags. - * - * Flags to define future #GTestDBus behaviour. - * - * Since: 2.34 - */ -typedef enum /*< flags >*/ { - G_TEST_DBUS_NONE = 0 -} GTestDBusFlags; - -G_END_DECLS - -#endif /* __GIO_ENUMS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gioenumtypes.h b/GstreamerHelper/x86/include/glib-2.0/gio/gioenumtypes.h deleted file mode 100644 index 70b2630e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gioenumtypes.h +++ /dev/null @@ -1,159 +0,0 @@ - -/* Generated data (by glib-mkenums) */ - -#ifndef __GIO_ENUM_TYPES_H__ -#define __GIO_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "gioenums.h" */ -GType g_app_info_create_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_APP_INFO_CREATE_FLAGS (g_app_info_create_flags_get_type ()) -GType g_converter_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_CONVERTER_FLAGS (g_converter_flags_get_type ()) -GType g_converter_result_get_type (void) G_GNUC_CONST; -#define G_TYPE_CONVERTER_RESULT (g_converter_result_get_type ()) -GType g_data_stream_byte_order_get_type (void) G_GNUC_CONST; -#define G_TYPE_DATA_STREAM_BYTE_ORDER (g_data_stream_byte_order_get_type ()) -GType g_data_stream_newline_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_DATA_STREAM_NEWLINE_TYPE (g_data_stream_newline_type_get_type ()) -GType g_file_attribute_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_ATTRIBUTE_TYPE (g_file_attribute_type_get_type ()) -GType g_file_attribute_info_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_ATTRIBUTE_INFO_FLAGS (g_file_attribute_info_flags_get_type ()) -GType g_file_attribute_status_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_ATTRIBUTE_STATUS (g_file_attribute_status_get_type ()) -GType g_file_query_info_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_QUERY_INFO_FLAGS (g_file_query_info_flags_get_type ()) -GType g_file_create_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_CREATE_FLAGS (g_file_create_flags_get_type ()) -GType g_mount_mount_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_MOUNT_MOUNT_FLAGS (g_mount_mount_flags_get_type ()) -GType g_mount_unmount_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_MOUNT_UNMOUNT_FLAGS (g_mount_unmount_flags_get_type ()) -GType g_drive_start_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DRIVE_START_FLAGS (g_drive_start_flags_get_type ()) -GType g_drive_start_stop_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_DRIVE_START_STOP_TYPE (g_drive_start_stop_type_get_type ()) -GType g_file_copy_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_COPY_FLAGS (g_file_copy_flags_get_type ()) -GType g_file_monitor_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_MONITOR_FLAGS (g_file_monitor_flags_get_type ()) -GType g_file_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_TYPE (g_file_type_get_type ()) -GType g_filesystem_preview_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILESYSTEM_PREVIEW_TYPE (g_filesystem_preview_type_get_type ()) -GType g_file_monitor_event_get_type (void) G_GNUC_CONST; -#define G_TYPE_FILE_MONITOR_EVENT (g_file_monitor_event_get_type ()) -GType g_io_error_enum_get_type (void) G_GNUC_CONST; -#define G_TYPE_IO_ERROR_ENUM (g_io_error_enum_get_type ()) -GType g_ask_password_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_ASK_PASSWORD_FLAGS (g_ask_password_flags_get_type ()) -GType g_password_save_get_type (void) G_GNUC_CONST; -#define G_TYPE_PASSWORD_SAVE (g_password_save_get_type ()) -GType g_mount_operation_result_get_type (void) G_GNUC_CONST; -#define G_TYPE_MOUNT_OPERATION_RESULT (g_mount_operation_result_get_type ()) -GType g_output_stream_splice_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_OUTPUT_STREAM_SPLICE_FLAGS (g_output_stream_splice_flags_get_type ()) -GType g_io_stream_splice_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_IO_STREAM_SPLICE_FLAGS (g_io_stream_splice_flags_get_type ()) -GType g_emblem_origin_get_type (void) G_GNUC_CONST; -#define G_TYPE_EMBLEM_ORIGIN (g_emblem_origin_get_type ()) -GType g_resolver_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOLVER_ERROR (g_resolver_error_get_type ()) -GType g_resolver_record_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOLVER_RECORD_TYPE (g_resolver_record_type_get_type ()) -GType g_resource_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOURCE_ERROR (g_resource_error_get_type ()) -GType g_resource_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOURCE_FLAGS (g_resource_flags_get_type ()) -GType g_resource_lookup_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_RESOURCE_LOOKUP_FLAGS (g_resource_lookup_flags_get_type ()) -GType g_socket_family_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_FAMILY (g_socket_family_get_type ()) -GType g_socket_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_TYPE (g_socket_type_get_type ()) -GType g_socket_msg_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_MSG_FLAGS (g_socket_msg_flags_get_type ()) -GType g_socket_protocol_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_PROTOCOL (g_socket_protocol_get_type ()) -GType g_zlib_compressor_format_get_type (void) G_GNUC_CONST; -#define G_TYPE_ZLIB_COMPRESSOR_FORMAT (g_zlib_compressor_format_get_type ()) -GType g_unix_socket_address_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_UNIX_SOCKET_ADDRESS_TYPE (g_unix_socket_address_type_get_type ()) -GType g_bus_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_BUS_TYPE (g_bus_type_get_type ()) -GType g_bus_name_owner_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_BUS_NAME_OWNER_FLAGS (g_bus_name_owner_flags_get_type ()) -GType g_bus_name_watcher_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_BUS_NAME_WATCHER_FLAGS (g_bus_name_watcher_flags_get_type ()) -GType g_dbus_proxy_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_PROXY_FLAGS (g_dbus_proxy_flags_get_type ()) -GType g_dbus_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_ERROR (g_dbus_error_get_type ()) -GType g_dbus_connection_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_CONNECTION_FLAGS (g_dbus_connection_flags_get_type ()) -GType g_dbus_capability_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_CAPABILITY_FLAGS (g_dbus_capability_flags_get_type ()) -GType g_dbus_call_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_CALL_FLAGS (g_dbus_call_flags_get_type ()) -GType g_dbus_message_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_TYPE (g_dbus_message_type_get_type ()) -GType g_dbus_message_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_FLAGS (g_dbus_message_flags_get_type ()) -GType g_dbus_message_header_field_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_HEADER_FIELD (g_dbus_message_header_field_get_type ()) -GType g_dbus_property_info_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_PROPERTY_INFO_FLAGS (g_dbus_property_info_flags_get_type ()) -GType g_dbus_subtree_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SUBTREE_FLAGS (g_dbus_subtree_flags_get_type ()) -GType g_dbus_server_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SERVER_FLAGS (g_dbus_server_flags_get_type ()) -GType g_dbus_signal_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SIGNAL_FLAGS (g_dbus_signal_flags_get_type ()) -GType g_dbus_send_message_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_SEND_MESSAGE_FLAGS (g_dbus_send_message_flags_get_type ()) -GType g_credentials_type_get_type (void) G_GNUC_CONST; -#define G_TYPE_CREDENTIALS_TYPE (g_credentials_type_get_type ()) -GType g_dbus_message_byte_order_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_MESSAGE_BYTE_ORDER (g_dbus_message_byte_order_get_type ()) -GType g_application_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_APPLICATION_FLAGS (g_application_flags_get_type ()) -GType g_tls_error_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_ERROR (g_tls_error_get_type ()) -GType g_tls_certificate_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_CERTIFICATE_FLAGS (g_tls_certificate_flags_get_type ()) -GType g_tls_authentication_mode_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_AUTHENTICATION_MODE (g_tls_authentication_mode_get_type ()) -GType g_tls_rehandshake_mode_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_REHANDSHAKE_MODE (g_tls_rehandshake_mode_get_type ()) -GType g_tls_password_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_PASSWORD_FLAGS (g_tls_password_flags_get_type ()) -GType g_tls_interaction_result_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_INTERACTION_RESULT (g_tls_interaction_result_get_type ()) -GType g_dbus_interface_skeleton_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_INTERFACE_SKELETON_FLAGS (g_dbus_interface_skeleton_flags_get_type ()) -GType g_dbus_object_manager_client_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_DBUS_OBJECT_MANAGER_CLIENT_FLAGS (g_dbus_object_manager_client_flags_get_type ()) -GType g_tls_database_verify_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_DATABASE_VERIFY_FLAGS (g_tls_database_verify_flags_get_type ()) -GType g_tls_database_lookup_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TLS_DATABASE_LOOKUP_FLAGS (g_tls_database_lookup_flags_get_type ()) -GType g_io_module_scope_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_IO_MODULE_SCOPE_FLAGS (g_io_module_scope_flags_get_type ()) -GType g_socket_client_event_get_type (void) G_GNUC_CONST; -#define G_TYPE_SOCKET_CLIENT_EVENT (g_socket_client_event_get_type ()) -GType g_test_dbus_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_TEST_DBUS_FLAGS (g_test_dbus_flags_get_type ()) - -/* enumerations from "gsettings.h" */ -GType g_settings_bind_flags_get_type (void) G_GNUC_CONST; -#define G_TYPE_SETTINGS_BIND_FLAGS (g_settings_bind_flags_get_type ()) -G_END_DECLS - -#endif /* __GIO_ENUM_TYPES_H__ */ - -/* Generated data ends here */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gioerror.h b/GstreamerHelper/x86/include/glib-2.0/gio/gioerror.h deleted file mode 100644 index 12c2b062..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gioerror.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_ERROR_H__ -#define __G_IO_ERROR_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * G_IO_ERROR: - * - * Error domain for GIO. Errors in this domain will be from the #GIOErrorEnum enumeration. - * See #GError for more information on error domains. - **/ -#define G_IO_ERROR g_io_error_quark() - -GQuark g_io_error_quark (void); -GIOErrorEnum g_io_error_from_errno (gint err_no); - -#ifdef G_OS_WIN32 -GIOErrorEnum g_io_error_from_win32_error (gint error_code); -#endif - -G_END_DECLS - -#endif /* __G_IO_ERROR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/giomodule.h b/GstreamerHelper/x86/include/glib-2.0/gio/giomodule.h deleted file mode 100644 index e98dd9d2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/giomodule.h +++ /dev/null @@ -1,176 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_MODULE_H__ -#define __G_IO_MODULE_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GIOModuleScope GIOModuleScope; - -GIOModuleScope * g_io_module_scope_new (GIOModuleScopeFlags flags); -void g_io_module_scope_free (GIOModuleScope *scope); -void g_io_module_scope_block (GIOModuleScope *scope, - const gchar *basename); - -#define G_IO_TYPE_MODULE (g_io_module_get_type ()) -#define G_IO_MODULE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_IO_TYPE_MODULE, GIOModule)) -#define G_IO_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_IO_TYPE_MODULE, GIOModuleClass)) -#define G_IO_IS_MODULE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_IO_TYPE_MODULE)) -#define G_IO_IS_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_IO_TYPE_MODULE)) -#define G_IO_MODULE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_IO_TYPE_MODULE, GIOModuleClass)) - -/** - * GIOModule: - * - * Opaque module base class for extending GIO. - **/ -typedef struct _GIOModuleClass GIOModuleClass; - -GType g_io_module_get_type (void) G_GNUC_CONST; -GIOModule *g_io_module_new (const gchar *filename); - -void g_io_modules_scan_all_in_directory (const char *dirname); -GList *g_io_modules_load_all_in_directory (const gchar *dirname); - -void g_io_modules_scan_all_in_directory_with_scope (const gchar *dirname, - GIOModuleScope *scope); -GList *g_io_modules_load_all_in_directory_with_scope (const gchar *dirname, - GIOModuleScope *scope); - -gboolean g_io_module_load_static_module (const char *name); - -GIOExtensionPoint *g_io_extension_point_register (const char *name); -GIOExtensionPoint *g_io_extension_point_lookup (const char *name); -void g_io_extension_point_set_required_type (GIOExtensionPoint *extension_point, - GType type); -GType g_io_extension_point_get_required_type (GIOExtensionPoint *extension_point); -GList *g_io_extension_point_get_extensions (GIOExtensionPoint *extension_point); -GIOExtension * g_io_extension_point_get_extension_by_name (GIOExtensionPoint *extension_point, - const char *name); -GIOExtension * g_io_extension_point_implement (const char *extension_point_name, - GType type, - const char *extension_name, - gint priority); - -GType g_io_extension_get_type (GIOExtension *extension); -const char * g_io_extension_get_name (GIOExtension *extension); -gint g_io_extension_get_priority (GIOExtension *extension); -GTypeClass* g_io_extension_ref_class (GIOExtension *extension); - - -/* API for the modules to implement */ - -/** - * g_io_module_load: - * @module: a #GIOModule. - * - * Required API for GIO modules to implement. - * This function is ran after the module has been loaded into GIO, - * to initialize the module. - **/ -void g_io_module_load (GIOModule *module); - -/** - * g_io_module_unload: - * @module: a #GIOModule. - * - * Required API for GIO modules to implement. - * This function is ran when the module is being unloaded from GIO, - * to finalize the module. - **/ -void g_io_module_unload (GIOModule *module); - -/** - * g_io_module_query: - * - * Optional API for GIO modules to implement. - * - * Should return a list of all the extension points that may be - * implemented in this module. - * - * This method will not be called in normal use, however it may be - * called when probing existing modules and recording which extension - * points that this model is used for. This means we won't have to - * load and initialze this module unless its needed. - * - * If this function is not implemented by the module the module will - * always be loaded, initialized and then unloaded on application startup - * so that it can register its extension points during init. - * - * Note that a module need not actually implement all the extension points - * that g_io_module_query returns, since the exact list of extension may - * depend on runtime issues. However all extension points actually implemented - * must be returned by g_io_module_query() (if defined). - * - * When installing a module that implements g_io_module_query you must - * run gio-querymodules in order to build the cache files required for - * lazy loading. - * - * Returns: (transfer full): A %NULL-terminated array of strings, listing the supported - * extension points of the module. The array must be suitable for - * freeing with g_strfreev(). - * - * Since: 2.24 - **/ -char **g_io_module_query (void); - -#define G_IO_MODULE_DECLARE(name) \ -extern gboolean G_PASTE(g_io_module_, G_PASTE(name, _load_static)) (void); - -#define G_IO_MODULE_LOAD(name) \ -G_PASTE(g_io_module_, G_PASTE(name, _load_static)) () - -#ifdef G_IO_MODULE_BUILD_STATIC -#define G_IO_MODULE_DEFINE(name) \ -G_BEGIN_DECLS \ -void G_PASTE(g_io_module_, G_PASTE(name, _load_static)) (void); \ -void G_PASTE(g_io_module_, G_PASTE(name, _load_static)) (void) \ -{g_io_module_load_static_module (#name);} \ -void G_PASTE(g_io_module_, G_PASTE(name, _load)) (GIOModule *module); \ -void G_PASTE(g_io_module_, G_PASTE(name, _unload)) (GIOModule *module); \ -gchar ** G_PASTE(g_io_module_, G_PASTE(name, _query)) (void); \ -void G_PASTE(g_io_module_, G_PASTE(name, _load)) (GIOModule *module) \ -{_g_io_module_load(module);} \ -void G_PASTE(g_io_module_, G_PASTE(name, _unload)) (GIOModule *module) \ -{_g_io_module_unload(module);} \ -gchar ** G_PASTE(g_io_module_, G_PASTE(name, _query)) (void) \ -{return _g_io_module_query();} \ -G_END_DECLS -#else -#define G_IO_MODULE_DEFINE(name) \ -G_BEGIN_DECLS \ -g_io_module_load(GIOModule *module) { _g_io_module_load(module);} \ -g_io_module_unload(GIOModule *module) { _g_io_module_unload(module);} \ -gchar ** g_io_module_query(void) {return _g_io_module_query();} \ -G_END_DECLS -#endif - -G_END_DECLS -#endif /* __G_IO_MODULE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gioscheduler.h b/GstreamerHelper/x86/include/glib-2.0/gio/gioscheduler.h deleted file mode 100644 index 7d6b5273..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gioscheduler.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_SCHEDULER_H__ -#define __G_IO_SCHEDULER_H__ - -#include - -G_BEGIN_DECLS - - -void g_io_scheduler_push_job (GIOSchedulerJobFunc job_func, - gpointer user_data, - GDestroyNotify notify, - gint io_priority, - GCancellable *cancellable); -void g_io_scheduler_cancel_all_jobs (void); -gboolean g_io_scheduler_job_send_to_mainloop (GIOSchedulerJob *job, - GSourceFunc func, - gpointer user_data, - GDestroyNotify notify); -void g_io_scheduler_job_send_to_mainloop_async (GIOSchedulerJob *job, - GSourceFunc func, - gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif /* __G_IO_SCHEDULER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/giostream.h b/GstreamerHelper/x86/include/glib-2.0/gio/giostream.h deleted file mode 100644 index 90283ddb..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/giostream.h +++ /dev/null @@ -1,123 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008, 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * See the included COPYING file for more information. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IO_STREAM_H__ -#define __G_IO_STREAM_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_IO_STREAM (g_io_stream_get_type ()) -#define G_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_IO_STREAM, GIOStream)) -#define G_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_IO_STREAM, GIOStreamClass)) -#define G_IS_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_IO_STREAM)) -#define G_IS_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_IO_STREAM)) -#define G_IO_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_IO_STREAM, GIOStreamClass)) - -typedef struct _GIOStreamPrivate GIOStreamPrivate; -typedef struct _GIOStreamClass GIOStreamClass; - -/** - * GIOStream: - * - * Base class for read-write streams. - **/ -struct _GIOStream -{ - GObject parent_instance; - - /*< private >*/ - GIOStreamPrivate *priv; -}; - -struct _GIOStreamClass -{ - GObjectClass parent_class; - - GInputStream * (*get_input_stream) (GIOStream *stream); - GOutputStream * (*get_output_stream) (GIOStream *stream); - - gboolean (* close_fn) (GIOStream *stream, - GCancellable *cancellable, - GError **error); - void (* close_async) (GIOStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GIOStream *stream, - GAsyncResult *result, - GError **error); - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); - void (*_g_reserved9) (void); - void (*_g_reserved10) (void); -}; - -GType g_io_stream_get_type (void) G_GNUC_CONST; - -GInputStream * g_io_stream_get_input_stream (GIOStream *stream); -GOutputStream *g_io_stream_get_output_stream (GIOStream *stream); - -void g_io_stream_splice_async (GIOStream *stream1, - GIOStream *stream2, - GIOStreamSpliceFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -gboolean g_io_stream_splice_finish (GAsyncResult *result, - GError **error); - -gboolean g_io_stream_close (GIOStream *stream, - GCancellable *cancellable, - GError **error); - -void g_io_stream_close_async (GIOStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_io_stream_close_finish (GIOStream *stream, - GAsyncResult *result, - GError **error); - -gboolean g_io_stream_is_closed (GIOStream *stream); -gboolean g_io_stream_has_pending (GIOStream *stream); -gboolean g_io_stream_set_pending (GIOStream *stream, - GError **error); -void g_io_stream_clear_pending (GIOStream *stream); - -G_END_DECLS - -#endif /* __G_IO_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/giotypes.h b/GstreamerHelper/x86/include/glib-2.0/gio/giotypes.h deleted file mode 100644 index 876d856c..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/giotypes.h +++ /dev/null @@ -1,472 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GIO_TYPES_H__ -#define __GIO_TYPES_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GAppLaunchContext GAppLaunchContext; -typedef struct _GAppInfo GAppInfo; /* Dummy typedef */ -typedef struct _GAsyncResult GAsyncResult; /* Dummy typedef */ -typedef struct _GAsyncInitable GAsyncInitable; -typedef struct _GBufferedInputStream GBufferedInputStream; -typedef struct _GBufferedOutputStream GBufferedOutputStream; -typedef struct _GCancellable GCancellable; -typedef struct _GCharsetConverter GCharsetConverter; -typedef struct _GConverter GConverter; -typedef struct _GConverterInputStream GConverterInputStream; -typedef struct _GConverterOutputStream GConverterOutputStream; -typedef struct _GDataInputStream GDataInputStream; -typedef struct _GSimplePermission GSimplePermission; -typedef struct _GZlibCompressor GZlibCompressor; -typedef struct _GZlibDecompressor GZlibDecompressor; - -typedef struct _GSimpleActionGroup GSimpleActionGroup; -typedef struct _GRemoteActionGroup GRemoteActionGroup; -typedef struct _GDBusActionGroup GDBusActionGroup; -typedef struct _GActionMap GActionMap; -typedef struct _GActionGroup GActionGroup; -typedef struct _GSimpleAction GSimpleAction; -typedef struct _GAction GAction; -typedef struct _GApplication GApplication; -typedef struct _GApplicationCommandLine GApplicationCommandLine; -typedef struct _GSettingsBackend GSettingsBackend; -typedef struct _GSettings GSettings; -typedef struct _GPermission GPermission; - -typedef struct _GMenuModel GMenuModel; - -/** - * GDrive: - * - * Opaque drive object. - **/ -typedef struct _GDrive GDrive; /* Dummy typedef */ -typedef struct _GFileEnumerator GFileEnumerator; -typedef struct _GFileMonitor GFileMonitor; -typedef struct _GFilterInputStream GFilterInputStream; -typedef struct _GFilterOutputStream GFilterOutputStream; - -/** - * GFile: - * - * A handle to an object implementing the #GFileIface interface. - * Generally stores a location within the file system. Handles do not - * necessarily represent files or directories that currently exist. - **/ -typedef struct _GFile GFile; /* Dummy typedef */ -typedef struct _GFileInfo GFileInfo; - -/** - * GFileAttributeMatcher: - * - * Determines if a string matches a file attribute. - **/ -typedef struct _GFileAttributeMatcher GFileAttributeMatcher; -typedef struct _GFileAttributeInfo GFileAttributeInfo; -typedef struct _GFileAttributeInfoList GFileAttributeInfoList; -typedef struct _GFileDescriptorBased GFileDescriptorBased; -typedef struct _GFileInputStream GFileInputStream; -typedef struct _GFileOutputStream GFileOutputStream; -typedef struct _GFileIOStream GFileIOStream; -typedef struct _GFileIcon GFileIcon; -typedef struct _GFilenameCompleter GFilenameCompleter; - - -typedef struct _GIcon GIcon; /* Dummy typedef */ -typedef struct _GInetAddress GInetAddress; -typedef struct _GInetAddressMask GInetAddressMask; -typedef struct _GInetSocketAddress GInetSocketAddress; -typedef struct _GInputStream GInputStream; -typedef struct _GInitable GInitable; -typedef struct _GIOModule GIOModule; -typedef struct _GIOExtensionPoint GIOExtensionPoint; -typedef struct _GIOExtension GIOExtension; - -/** - * GIOSchedulerJob: - * - * Opaque class for defining and scheduling IO jobs. - **/ -typedef struct _GIOSchedulerJob GIOSchedulerJob; -typedef struct _GIOStreamAdapter GIOStreamAdapter; -typedef struct _GLoadableIcon GLoadableIcon; /* Dummy typedef */ -typedef struct _GMemoryInputStream GMemoryInputStream; -typedef struct _GMemoryOutputStream GMemoryOutputStream; - -/** - * GMount: - * - * A handle to an object implementing the #GMountIface interface. - **/ -typedef struct _GMount GMount; /* Dummy typedef */ -typedef struct _GMountOperation GMountOperation; -typedef struct _GNetworkAddress GNetworkAddress; -typedef struct _GNetworkMonitor GNetworkMonitor; -typedef struct _GNetworkService GNetworkService; -typedef struct _GOutputStream GOutputStream; -typedef struct _GIOStream GIOStream; -typedef struct _GPollableInputStream GPollableInputStream; /* Dummy typedef */ -typedef struct _GPollableOutputStream GPollableOutputStream; /* Dummy typedef */ -typedef struct _GResolver GResolver; -/** - * GResource: - * - * A resource bundle. - * - * Since: 2.32 - */ -typedef struct _GResource GResource; -typedef struct _GSeekable GSeekable; -typedef struct _GSimpleAsyncResult GSimpleAsyncResult; - -/** - * GSocket: - * - * A lowlevel network socket object. - * - * Since: 2.22 - **/ -typedef struct _GSocket GSocket; - -/** - * GSocketControlMessage: - * - * Base class for socket-type specific control messages that can be sent and - * received over #GSocket. - **/ -typedef struct _GSocketControlMessage GSocketControlMessage; -/** - * GSocketClient: - * - * A helper class for network clients to make connections. - * - * Since: 2.22 - **/ -typedef struct _GSocketClient GSocketClient; -/** - * GSocketConnection: - * - * A socket connection GIOStream object for connection-oriented sockets. - * - * Since: 2.22 - **/ -typedef struct _GSocketConnection GSocketConnection; -/** - * GSocketListener: - * - * A helper class for network servers to listen for and accept connections. - * - * Since: 2.22 - **/ -typedef struct _GSocketListener GSocketListener; -/** - * GSocketService: - * - * A helper class for handling accepting incomming connections in the - * glib mainloop. - * - * Since: 2.22 - **/ -typedef struct _GSocketService GSocketService; -typedef struct _GSocketAddress GSocketAddress; -typedef struct _GSocketAddressEnumerator GSocketAddressEnumerator; -typedef struct _GSocketConnectable GSocketConnectable; -typedef struct _GSrvTarget GSrvTarget; -/** - * GTcpConnection: - * - * A #GSocketConnection for TCP/IP connections. - * - * Since: 2.22 - **/ -typedef struct _GTcpConnection GTcpConnection; -typedef struct _GTcpWrapperConnection GTcpWrapperConnection; -/** - * GThreadedSocketService: - * - * A helper class for handling accepting incoming connections in the - * glib mainloop and handling them in a thread. - * - * Since: 2.22 - **/ -typedef struct _GThreadedSocketService GThreadedSocketService; -typedef struct _GThemedIcon GThemedIcon; -typedef struct _GTlsCertificate GTlsCertificate; -typedef struct _GTlsClientConnection GTlsClientConnection; /* Dummy typedef */ -typedef struct _GTlsConnection GTlsConnection; -typedef struct _GTlsDatabase GTlsDatabase; -typedef struct _GTlsFileDatabase GTlsFileDatabase; -typedef struct _GTlsInteraction GTlsInteraction; -typedef struct _GTlsPassword GTlsPassword; -typedef struct _GTlsServerConnection GTlsServerConnection; /* Dummy typedef */ -typedef struct _GVfs GVfs; /* Dummy typedef */ - -/** - * GProxyResolver: - * - * A helper class to enumerate proxies base on URI. - * - * Since: 2.26 - **/ -typedef struct _GProxyResolver GProxyResolver; -typedef struct _GProxy GProxy; -typedef struct _GProxyAddress GProxyAddress; -typedef struct _GProxyAddressEnumerator GProxyAddressEnumerator; - -/** - * GVolume: - * - * Opaque mountable volume object. - **/ -typedef struct _GVolume GVolume; /* Dummy typedef */ -typedef struct _GVolumeMonitor GVolumeMonitor; - -/** - * GAsyncReadyCallback: - * @source_object: the object the asynchronous operation was started with. - * @res: a #GAsyncResult. - * @user_data: user data passed to the callback. - * - * Type definition for a function that will be called back when an asynchronous - * operation within GIO has been completed. - **/ -typedef void (*GAsyncReadyCallback) (GObject *source_object, - GAsyncResult *res, - gpointer user_data); - -/** - * GFileProgressCallback: - * @current_num_bytes: the current number of bytes in the operation. - * @total_num_bytes: the total number of bytes in the operation. - * @user_data: user data passed to the callback. - * - * When doing file operations that may take a while, such as moving - * a file or copying a file, a progress callback is used to pass how - * far along that operation is to the application. - **/ -typedef void (*GFileProgressCallback) (goffset current_num_bytes, - goffset total_num_bytes, - gpointer user_data); - -/** - * GFileReadMoreCallback: - * @file_contents: the data as currently read. - * @file_size: the size of the data currently read. - * @callback_data: data passed to the callback. - * - * When loading the partial contents of a file with g_file_load_partial_contents_async(), - * it may become necessary to determine if any more data from the file should be loaded. - * A #GFileReadMoreCallback function facilitates this by returning %TRUE if more data - * should be read, or %FALSE otherwise. - * - * Returns: %TRUE if more data should be read back. %FALSE otherwise. - **/ -typedef gboolean (* GFileReadMoreCallback) (const char *file_contents, - goffset file_size, - gpointer callback_data); - - -/** - * GIOSchedulerJobFunc: - * @job: a #GIOSchedulerJob. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * @user_data: the data to pass to callback function - * - * I/O Job function. - * - * Long-running jobs should periodically check the @cancellable - * to see if they have been cancelled. - * - * Returns: %TRUE if this function should be called again to - * complete the job, %FALSE if the job is complete (or cancelled) - **/ -typedef gboolean (*GIOSchedulerJobFunc) (GIOSchedulerJob *job, - GCancellable *cancellable, - gpointer user_data); - -/** - * GSimpleAsyncThreadFunc: - * @res: a #GSimpleAsyncResult. - * @object: a #GObject. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * - * Simple thread function that runs an asynchronous operation and - * checks for cancellation. - **/ -typedef void (*GSimpleAsyncThreadFunc) (GSimpleAsyncResult *res, - GObject *object, - GCancellable *cancellable); - -/** - * GSocketSourceFunc: - * @socket: the #GSocket - * @condition: the current condition at the source fired. - * @user_data: data passed in by the user. - * - * This is the function type of the callback used for the #GSource - * returned by g_socket_create_source(). - * - * Returns: it should return %FALSE if the source should be removed. - * - * Since: 2.22 - */ -typedef gboolean (*GSocketSourceFunc) (GSocket *socket, - GIOCondition condition, - gpointer user_data); - -/** - * GInputVector: - * @buffer: Pointer to a buffer where data will be written. - * @size: the available size in @buffer. - * - * Structure used for scatter/gather data input. - * You generally pass in an array of #GInputVectors - * and the operation will store the read data starting in the - * first buffer, switching to the next as needed. - * - * Since: 2.22 - */ -typedef struct _GInputVector GInputVector; - -struct _GInputVector { - gpointer buffer; - gsize size; -}; - -/** - * GOutputVector: - * @buffer: Pointer to a buffer of data to read. - * @size: the size of @buffer. - * - * Structure used for scatter/gather data output. - * You generally pass in an array of #GOutputVectors - * and the operation will use all the buffers as if they were - * one buffer. - * - * Since: 2.22 - */ -typedef struct _GOutputVector GOutputVector; - -struct _GOutputVector { - gconstpointer buffer; - gsize size; -}; - -typedef struct _GCredentials GCredentials; -typedef struct _GUnixCredentialsMessage GUnixCredentialsMessage; -typedef struct _GUnixFDList GUnixFDList; -typedef struct _GDBusMessage GDBusMessage; -typedef struct _GDBusConnection GDBusConnection; -typedef struct _GDBusProxy GDBusProxy; -typedef struct _GDBusMethodInvocation GDBusMethodInvocation; -typedef struct _GDBusServer GDBusServer; -typedef struct _GDBusAuthObserver GDBusAuthObserver; -typedef struct _GDBusErrorEntry GDBusErrorEntry; -typedef struct _GDBusInterfaceVTable GDBusInterfaceVTable; -typedef struct _GDBusSubtreeVTable GDBusSubtreeVTable; -typedef struct _GDBusAnnotationInfo GDBusAnnotationInfo; -typedef struct _GDBusArgInfo GDBusArgInfo; -typedef struct _GDBusMethodInfo GDBusMethodInfo; -typedef struct _GDBusSignalInfo GDBusSignalInfo; -typedef struct _GDBusPropertyInfo GDBusPropertyInfo; -typedef struct _GDBusInterfaceInfo GDBusInterfaceInfo; -typedef struct _GDBusNodeInfo GDBusNodeInfo; - -/** - * GCancellableSourceFunc: - * @cancellable: the #GCancellable - * @user_data: data passed in by the user. - * - * This is the function type of the callback used for the #GSource - * returned by g_cancellable_source_new(). - * - * Returns: it should return %FALSE if the source should be removed. - * - * Since: 2.28 - */ -typedef gboolean (*GCancellableSourceFunc) (GCancellable *cancellable, - gpointer user_data); - -/** - * GPollableSourceFunc: - * @pollable_stream: the #GPollableInputStream or #GPollableOutputStream - * @user_data: data passed in by the user. - * - * This is the function type of the callback used for the #GSource - * returned by g_pollable_input_stream_create_source() and - * g_pollable_output_stream_create_source(). - * - * Returns: it should return %FALSE if the source should be removed. - * - * Since: 2.28 - */ -typedef gboolean (*GPollableSourceFunc) (GObject *pollable_stream, - gpointer user_data); - -typedef struct _GDBusInterface GDBusInterface; /* Dummy typedef */ -typedef struct _GDBusInterfaceSkeleton GDBusInterfaceSkeleton; -typedef struct _GDBusObject GDBusObject; /* Dummy typedef */ -typedef struct _GDBusObjectSkeleton GDBusObjectSkeleton; -typedef struct _GDBusObjectProxy GDBusObjectProxy; -typedef struct _GDBusObjectManager GDBusObjectManager; /* Dummy typedef */ -typedef struct _GDBusObjectManagerClient GDBusObjectManagerClient; -typedef struct _GDBusObjectManagerServer GDBusObjectManagerServer; - -/** - * GDBusProxyTypeFunc: - * @manager: A #GDBusObjectManagerClient. - * @object_path: The object path of the remote object. - * @interface_name: (allow-none): The interface name of the remote object or %NULL if a #GDBusObjectProxy #GType is requested. - * @user_data: User data. - * - * Function signature for a function used to determine the #GType to - * use for an interface proxy (if @interface_name is not %NULL) or - * object proxy (if @interface_name is %NULL). - * - * This function is called in the - * thread-default main loop - * that @manager was constructed in. - * - * Returns: A #GType to use for the remote object. The returned type - * must be a #GDBusProxy- or #GDBusObjectProxy-derived - * type. - * - * Since: 2.30 - */ -typedef GType (*GDBusProxyTypeFunc) (GDBusObjectManagerClient *manager, - const gchar *object_path, - const gchar *interface_name, - gpointer user_data); - -typedef struct _GTestDBus GTestDBus; - -G_END_DECLS - -#endif /* __GIO_TYPES_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gloadableicon.h b/GstreamerHelper/x86/include/glib-2.0/gio/gloadableicon.h deleted file mode 100644 index 754090fe..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gloadableicon.h +++ /dev/null @@ -1,97 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_LOADABLE_ICON_H__ -#define __G_LOADABLE_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_LOADABLE_ICON (g_loadable_icon_get_type ()) -#define G_LOADABLE_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_LOADABLE_ICON, GLoadableIcon)) -#define G_IS_LOADABLE_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_LOADABLE_ICON)) -#define G_LOADABLE_ICON_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_LOADABLE_ICON, GLoadableIconIface)) - -/** - * GLoadableIcon: - * - * Generic type for all kinds of icons that can be loaded - * as a stream. - **/ -typedef struct _GLoadableIconIface GLoadableIconIface; - -/** - * GLoadableIconIface: - * @g_iface: The parent interface. - * @load: Loads an icon. - * @load_async: Loads an icon asynchronously. - * @load_finish: Finishes an asynchronous icon load. - * - * Interface for icons that can be loaded as a stream. - **/ -struct _GLoadableIconIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GInputStream * (* load) (GLoadableIcon *icon, - int size, - char **type, - GCancellable *cancellable, - GError **error); - void (* load_async) (GLoadableIcon *icon, - int size, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GInputStream * (* load_finish) (GLoadableIcon *icon, - GAsyncResult *res, - char **type, - GError **error); -}; - -GType g_loadable_icon_get_type (void) G_GNUC_CONST; - -GInputStream *g_loadable_icon_load (GLoadableIcon *icon, - int size, - char **type, - GCancellable *cancellable, - GError **error); -void g_loadable_icon_load_async (GLoadableIcon *icon, - int size, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GInputStream *g_loadable_icon_load_finish (GLoadableIcon *icon, - GAsyncResult *res, - char **type, - GError **error); - -G_END_DECLS - -#endif /* __G_LOADABLE_ICON_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmemoryinputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmemoryinputstream.h deleted file mode 100644 index 1625ae94..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmemoryinputstream.h +++ /dev/null @@ -1,88 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MEMORY_INPUT_STREAM_H__ -#define __G_MEMORY_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MEMORY_INPUT_STREAM (g_memory_input_stream_get_type ()) -#define G_MEMORY_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStream)) -#define G_MEMORY_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStreamClass)) -#define G_IS_MEMORY_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MEMORY_INPUT_STREAM)) -#define G_IS_MEMORY_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MEMORY_INPUT_STREAM)) -#define G_MEMORY_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStreamClass)) - -/** - * GMemoryInputStream: - * - * Implements #GInputStream for arbitrary memory chunks. - **/ -typedef struct _GMemoryInputStreamClass GMemoryInputStreamClass; -typedef struct _GMemoryInputStreamPrivate GMemoryInputStreamPrivate; - -struct _GMemoryInputStream -{ - GInputStream parent_instance; - - /*< private >*/ - GMemoryInputStreamPrivate *priv; -}; - -struct _GMemoryInputStreamClass -{ - GInputStreamClass parent_class; - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - - -GType g_memory_input_stream_get_type (void) G_GNUC_CONST; -GInputStream * g_memory_input_stream_new (void); -GInputStream * g_memory_input_stream_new_from_data (const void *data, - gssize len, - GDestroyNotify destroy); -GLIB_AVAILABLE_IN_2_34 -GInputStream * g_memory_input_stream_new_from_bytes (GBytes *bytes); - -void g_memory_input_stream_add_data (GMemoryInputStream *stream, - const void *data, - gssize len, - GDestroyNotify destroy); -GLIB_AVAILABLE_IN_2_34 -void g_memory_input_stream_add_bytes (GMemoryInputStream *stream, - GBytes *bytes); - -G_END_DECLS - -#endif /* __G_MEMORY_INPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmemoryoutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmemoryoutputstream.h deleted file mode 100644 index faf0364c..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmemoryoutputstream.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Christian Kellner - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MEMORY_OUTPUT_STREAM_H__ -#define __G_MEMORY_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MEMORY_OUTPUT_STREAM (g_memory_output_stream_get_type ()) -#define G_MEMORY_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStream)) -#define G_MEMORY_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStreamClass)) -#define G_IS_MEMORY_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MEMORY_OUTPUT_STREAM)) -#define G_IS_MEMORY_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MEMORY_OUTPUT_STREAM)) -#define G_MEMORY_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStreamClass)) - -/** - * GMemoryOutputStream: - * - * Implements #GOutputStream for arbitrary memory chunks. - **/ -typedef struct _GMemoryOutputStreamClass GMemoryOutputStreamClass; -typedef struct _GMemoryOutputStreamPrivate GMemoryOutputStreamPrivate; - -struct _GMemoryOutputStream -{ - GOutputStream parent_instance; - - /*< private >*/ - GMemoryOutputStreamPrivate *priv; -}; - -struct _GMemoryOutputStreamClass -{ - GOutputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -/** - * GReallocFunc: - * @data: memory block to reallocate - * @size: size to reallocate @data to - * - * Changes the size of the memory block pointed to by @data to - * @size bytes. - * - * The function should have the same semantics as realloc(). - * - * Returns: a pointer to the reallocated memory - */ -typedef gpointer (* GReallocFunc) (gpointer data, - gsize size); - -GType g_memory_output_stream_get_type (void) G_GNUC_CONST; - -GOutputStream *g_memory_output_stream_new (gpointer data, - gsize size, - GReallocFunc realloc_function, - GDestroyNotify destroy_function); -gpointer g_memory_output_stream_get_data (GMemoryOutputStream *ostream); -gsize g_memory_output_stream_get_size (GMemoryOutputStream *ostream); -gsize g_memory_output_stream_get_data_size (GMemoryOutputStream *ostream); -gpointer g_memory_output_stream_steal_data (GMemoryOutputStream *ostream); - -GLIB_AVAILABLE_IN_2_34 -GBytes * g_memory_output_stream_steal_as_bytes (GMemoryOutputStream *ostream); - -G_END_DECLS - -#endif /* __G_MEMORY_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmenu.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmenu.h deleted file mode 100644 index 35001c87..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmenu.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_MENU_H__ -#define __G_MENU_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MENU (g_menu_get_type ()) -#define G_MENU(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU, GMenu)) -#define G_IS_MENU(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU)) - -#define G_TYPE_MENU_ITEM (g_menu_item_get_type ()) -#define G_MENU_ITEM(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_ITEM, GMenuItem)) -#define G_IS_MENU_ITEM(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_ITEM)) - -typedef struct _GMenuItem GMenuItem; -typedef struct _GMenu GMenu; - -GLIB_AVAILABLE_IN_2_32 -GType g_menu_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_32 -GMenu * g_menu_new (void); - -void g_menu_freeze (GMenu *menu); - -void g_menu_insert_item (GMenu *menu, - gint position, - GMenuItem *item); -void g_menu_prepend_item (GMenu *menu, - GMenuItem *item); -void g_menu_append_item (GMenu *menu, - GMenuItem *item); -void g_menu_remove (GMenu *menu, - gint position); - -void g_menu_insert (GMenu *menu, - gint position, - const gchar *label, - const gchar *detailed_action); -void g_menu_prepend (GMenu *menu, - const gchar *label, - const gchar *detailed_action); -void g_menu_append (GMenu *menu, - const gchar *label, - const gchar *detailed_action); - -void g_menu_insert_section (GMenu *menu, - gint position, - const gchar *label, - GMenuModel *section); -void g_menu_prepend_section (GMenu *menu, - const gchar *label, - GMenuModel *section); -void g_menu_append_section (GMenu *menu, - const gchar *label, - GMenuModel *section); - -void g_menu_insert_submenu (GMenu *menu, - gint position, - const gchar *label, - GMenuModel *submenu); -void g_menu_prepend_submenu (GMenu *menu, - const gchar *label, - GMenuModel *submenu); -void g_menu_append_submenu (GMenu *menu, - const gchar *label, - GMenuModel *submenu); - - -GType g_menu_item_get_type (void) G_GNUC_CONST; -GMenuItem * g_menu_item_new (const gchar *label, - const gchar *detailed_action); - -GLIB_AVAILABLE_IN_2_34 -GMenuItem * g_menu_item_new_from_model (GMenuModel *model, - gint item_index); - -GMenuItem * g_menu_item_new_submenu (const gchar *label, - GMenuModel *submenu); - -GMenuItem * g_menu_item_new_section (const gchar *label, - GMenuModel *section); - -GLIB_AVAILABLE_IN_2_34 -GVariant * g_menu_item_get_attribute_value (GMenuItem *menu_item, - const gchar *attribute, - const GVariantType *expected_type); -GLIB_AVAILABLE_IN_2_34 -gboolean g_menu_item_get_attribute (GMenuItem *menu_item, - const gchar *attribute, - const gchar *format_string, - ...); -GLIB_AVAILABLE_IN_2_34 -GMenuModel *g_menu_item_get_link (GMenuItem *menu_item, - const gchar *link); - -void g_menu_item_set_attribute_value (GMenuItem *menu_item, - const gchar *attribute, - GVariant *value); -void g_menu_item_set_attribute (GMenuItem *menu_item, - const gchar *attribute, - const gchar *format_string, - ...); -void g_menu_item_set_link (GMenuItem *menu_item, - const gchar *link, - GMenuModel *model); -void g_menu_item_set_label (GMenuItem *menu_item, - const gchar *label); -void g_menu_item_set_submenu (GMenuItem *menu_item, - GMenuModel *submenu); -void g_menu_item_set_section (GMenuItem *menu_item, - GMenuModel *section); -void g_menu_item_set_action_and_target_value (GMenuItem *menu_item, - const gchar *action, - GVariant *target_value); -void g_menu_item_set_action_and_target (GMenuItem *menu_item, - const gchar *action, - const gchar *format_string, - ...); -void g_menu_item_set_detailed_action (GMenuItem *menu_item, - const gchar *detailed_action); - -G_END_DECLS - -#endif /* __G_MENU_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmenuexporter.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmenuexporter.h deleted file mode 100644 index 1673b227..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmenuexporter.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_MENU_EXPORTER_H__ -#define __G_MENU_EXPORTER_H__ - -#include -#include - -G_BEGIN_DECLS - -GLIB_AVAILABLE_IN_2_32 -guint g_dbus_connection_export_menu_model (GDBusConnection *connection, - const gchar *object_path, - GMenuModel *menu, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -void g_dbus_connection_unexport_menu_model (GDBusConnection *connection, - guint export_id); - -G_END_DECLS - -#endif /* __G_MENU_EXPORTER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmenumodel.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmenumodel.h deleted file mode 100644 index 689c2ced..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmenumodel.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright © 2011 Canonical Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_MENU_MODEL_H__ -#define __G_MENU_MODEL_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define G_MENU_ATTRIBUTE_ACTION "action" -#define G_MENU_ATTRIBUTE_TARGET "target" -#define G_MENU_ATTRIBUTE_LABEL "label" - -#define G_MENU_LINK_SUBMENU "submenu" -#define G_MENU_LINK_SECTION "section" - -#define G_TYPE_MENU_MODEL (g_menu_model_get_type ()) -#define G_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_MODEL, GMenuModel)) -#define G_MENU_MODEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_MENU_MODEL, GMenuModelClass)) -#define G_IS_MENU_MODEL(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_MODEL)) -#define G_IS_MENU_MODEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_MENU_MODEL)) -#define G_MENU_MODEL_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_MENU_MODEL, GMenuModelClass)) - -typedef struct _GMenuModelPrivate GMenuModelPrivate; -typedef struct _GMenuModelClass GMenuModelClass; - -typedef struct _GMenuAttributeIterPrivate GMenuAttributeIterPrivate; -typedef struct _GMenuAttributeIterClass GMenuAttributeIterClass; -typedef struct _GMenuAttributeIter GMenuAttributeIter; - -typedef struct _GMenuLinkIterPrivate GMenuLinkIterPrivate; -typedef struct _GMenuLinkIterClass GMenuLinkIterClass; -typedef struct _GMenuLinkIter GMenuLinkIter; - -struct _GMenuModel -{ - GObject parent_instance; - GMenuModelPrivate *priv; -}; - -struct _GMenuModelClass -{ - GObjectClass parent_class; - - gboolean (*is_mutable) (GMenuModel *model); - gint (*get_n_items) (GMenuModel *model); - void (*get_item_attributes) (GMenuModel *model, - gint item_index, - GHashTable **attributes); - GMenuAttributeIter * (*iterate_item_attributes) (GMenuModel *model, - gint item_index); - GVariant * (*get_item_attribute_value) (GMenuModel *model, - gint item_index, - const gchar *attribute, - const GVariantType *expected_type); - void (*get_item_links) (GMenuModel *model, - gint item_index, - GHashTable **links); - GMenuLinkIter * (*iterate_item_links) (GMenuModel *model, - gint item_index); - GMenuModel * (*get_item_link) (GMenuModel *model, - gint item_index, - const gchar *link); -}; - -GType g_menu_model_get_type (void) G_GNUC_CONST; - -gboolean g_menu_model_is_mutable (GMenuModel *model); -gint g_menu_model_get_n_items (GMenuModel *model); - -GMenuAttributeIter * g_menu_model_iterate_item_attributes (GMenuModel *model, - gint item_index); -GVariant * g_menu_model_get_item_attribute_value (GMenuModel *model, - gint item_index, - const gchar *attribute, - const GVariantType *expected_type); -gboolean g_menu_model_get_item_attribute (GMenuModel *model, - gint item_index, - const gchar *attribute, - const gchar *format_string, - ...); -GMenuLinkIter * g_menu_model_iterate_item_links (GMenuModel *model, - gint item_index); -GMenuModel * g_menu_model_get_item_link (GMenuModel *model, - gint item_index, - const gchar *link); - -void g_menu_model_items_changed (GMenuModel *model, - gint position, - gint removed, - gint added); - - -#define G_TYPE_MENU_ATTRIBUTE_ITER (g_menu_attribute_iter_get_type ()) -#define G_MENU_ATTRIBUTE_ITER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_ATTRIBUTE_ITER, GMenuAttributeIter)) -#define G_MENU_ATTRIBUTE_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_MENU_ATTRIBUTE_ITER, GMenuAttributeIterClass)) -#define G_IS_MENU_ATTRIBUTE_ITER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_ATTRIBUTE_ITER)) -#define G_IS_MENU_ATTRIBUTE_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_MENU_ATTRIBUTE_ITER)) -#define G_MENU_ATTRIBUTE_ITER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_MENU_ATTRIBUTE_ITER, GMenuAttributeIterClass)) - -struct _GMenuAttributeIter -{ - GObject parent_instance; - GMenuAttributeIterPrivate *priv; -}; - -struct _GMenuAttributeIterClass -{ - GObjectClass parent_class; - - gboolean (*get_next) (GMenuAttributeIter *iter, - const gchar **out_type, - GVariant **value); -}; - -GType g_menu_attribute_iter_get_type (void) G_GNUC_CONST; - -gboolean g_menu_attribute_iter_get_next (GMenuAttributeIter *iter, - const gchar **out_name, - GVariant **value); -gboolean g_menu_attribute_iter_next (GMenuAttributeIter *iter); -const gchar * g_menu_attribute_iter_get_name (GMenuAttributeIter *iter); -GVariant * g_menu_attribute_iter_get_value (GMenuAttributeIter *iter); - - -#define G_TYPE_MENU_LINK_ITER (g_menu_link_iter_get_type ()) -#define G_MENU_LINK_ITER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_MENU_LINK_ITER, GMenuLinkIter)) -#define G_MENU_LINK_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_MENU_LINK_ITER, GMenuLinkIterClass)) -#define G_IS_MENU_LINK_ITER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_MENU_LINK_ITER)) -#define G_IS_MENU_LINK_ITER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_MENU_LINK_ITER)) -#define G_MENU_LINK_ITER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_MENU_LINK_ITER, GMenuLinkIterClass)) - -struct _GMenuLinkIter -{ - GObject parent_instance; - GMenuLinkIterPrivate *priv; -}; - -struct _GMenuLinkIterClass -{ - GObjectClass parent_class; - - gboolean (*get_next) (GMenuLinkIter *iter, - const gchar **out_name, - GMenuModel **value); -}; - -GType g_menu_link_iter_get_type (void) G_GNUC_CONST; - -gboolean g_menu_link_iter_get_next (GMenuLinkIter *iter, - const gchar **out_link, - GMenuModel **value); -gboolean g_menu_link_iter_next (GMenuLinkIter *iter); -const gchar * g_menu_link_iter_get_name (GMenuLinkIter *iter); -GMenuModel * g_menu_link_iter_get_value (GMenuLinkIter *iter); - -G_END_DECLS - -#endif /* __G_MENU_MODEL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmount.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmount.h deleted file mode 100644 index 33728920..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmount.h +++ /dev/null @@ -1,254 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MOUNT_H__ -#define __G_MOUNT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MOUNT (g_mount_get_type ()) -#define G_MOUNT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_MOUNT, GMount)) -#define G_IS_MOUNT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_MOUNT)) -#define G_MOUNT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_MOUNT, GMountIface)) - -typedef struct _GMountIface GMountIface; - -/** - * GMountIface: - * @g_iface: The parent interface. - * @changed: Changed signal that is emitted when the mount's state has changed. - * @unmounted: The unmounted signal that is emitted when the #GMount have been unmounted. If the recipient is holding references to the object they should release them so the object can be finalized. - * @pre_unmount: The ::pre-unmount signal that is emitted when the #GMount will soon be emitted. If the recipient is somehow holding the mount open by keeping an open file on it it should close the file. - * @get_root: Gets a #GFile to the root directory of the #GMount. - * @get_name: Gets a string containing the name of the #GMount. - * @get_icon: Gets a #GIcon for the #GMount. - * @get_uuid: Gets the UUID for the #GMount. The reference is typically based on the file system UUID for the mount in question and should be considered an opaque string. Returns %NULL if there is no UUID available. - * @get_volume: Gets a #GVolume the mount is located on. Returns %NULL if the #GMount is not associated with a #GVolume. - * @get_drive: Gets a #GDrive the volume of the mount is located on. Returns %NULL if the #GMount is not associated with a #GDrive or a #GVolume. This is convenience method for getting the #GVolume and using that to get the #GDrive. - * @can_unmount: Checks if a #GMount can be unmounted. - * @can_eject: Checks if a #GMount can be ejected. - * @unmount: Starts unmounting a #GMount. - * @unmount_finish: Finishes an unmounting operation. - * @eject: Starts ejecting a #GMount. - * @eject_finish: Finishes an eject operation. - * @remount: Starts remounting a #GMount. - * @remount_finish: Finishes a remounting operation. - * @guess_content_type: Starts guessing the type of the content of a #GMount. - * See g_mount_guess_content_type() for more information on content - * type guessing. This operation was added in 2.18. - * @guess_content_type_finish: Finishes a content type guessing operation. Added in 2.18. - * @guess_content_type_sync: Synchronous variant of @guess_content_type. Added in 2.18 - * @unmount_with_operation: Starts unmounting a #GMount using a #GMountOperation. Since 2.22. - * @unmount_with_operation_finish: Finishes an unmounting operation using a #GMountOperation. Since 2.22. - * @eject_with_operation: Starts ejecting a #GMount using a #GMountOperation. Since 2.22. - * @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @get_default_location: Gets a #GFile indication a start location that can be use as the entry point for this mount. Since 2.24. - * @get_sort_key: Gets a key used for sorting #GMount instance or %NULL if no such key exists. Since 2.32. - * @get_symbolic_icon: Gets a symbolic #GIcon for the #GMount. Since 2.34. - * - * Interface for implementing operations for mounts. - **/ -struct _GMountIface -{ - GTypeInterface g_iface; - - /* signals */ - - void (* changed) (GMount *mount); - void (* unmounted) (GMount *mount); - - /* Virtual Table */ - - GFile * (* get_root) (GMount *mount); - char * (* get_name) (GMount *mount); - GIcon * (* get_icon) (GMount *mount); - char * (* get_uuid) (GMount *mount); - GVolume * (* get_volume) (GMount *mount); - GDrive * (* get_drive) (GMount *mount); - gboolean (* can_unmount) (GMount *mount); - gboolean (* can_eject) (GMount *mount); - - void (* unmount) (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* eject) (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* remount) (GMount *mount, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* remount_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* guess_content_type) (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gchar ** (* guess_content_type_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - gchar ** (* guess_content_type_sync) (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GError **error); - - /* Signal, not VFunc */ - void (* pre_unmount) (GMount *mount); - - void (* unmount_with_operation) (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* unmount_with_operation_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - - void (* eject_with_operation) (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_with_operation_finish) (GMount *mount, - GAsyncResult *result, - GError **error); - GFile * (* get_default_location) (GMount *mount); - - const gchar * (* get_sort_key) (GMount *mount); - GIcon * (* get_symbolic_icon) (GMount *mount); -}; - -GType g_mount_get_type (void) G_GNUC_CONST; - -GFile * g_mount_get_root (GMount *mount); -GFile * g_mount_get_default_location (GMount *mount); -char * g_mount_get_name (GMount *mount); -GIcon * g_mount_get_icon (GMount *mount); -GIcon * g_mount_get_symbolic_icon (GMount *mount); -char * g_mount_get_uuid (GMount *mount); -GVolume * g_mount_get_volume (GMount *mount); -GDrive * g_mount_get_drive (GMount *mount); -gboolean g_mount_can_unmount (GMount *mount); -gboolean g_mount_can_eject (GMount *mount); - -GLIB_DEPRECATED_FOR(g_mount_unmount_with_operation) -void g_mount_unmount (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_mount_unmount_with_operation_finish) -gboolean g_mount_unmount_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -GLIB_DEPRECATED_FOR(g_mount_eject_with_operation) -void g_mount_eject (GMount *mount, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_mount_eject_with_operation_finish) -gboolean g_mount_eject_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -void g_mount_remount (GMount *mount, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_mount_remount_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -void g_mount_guess_content_type (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gchar ** g_mount_guess_content_type_finish (GMount *mount, - GAsyncResult *result, - GError **error); -gchar ** g_mount_guess_content_type_sync (GMount *mount, - gboolean force_rescan, - GCancellable *cancellable, - GError **error); - -gboolean g_mount_is_shadowed (GMount *mount); -void g_mount_shadow (GMount *mount); -void g_mount_unshadow (GMount *mount); - -void g_mount_unmount_with_operation (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_mount_unmount_with_operation_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -void g_mount_eject_with_operation (GMount *mount, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_mount_eject_with_operation_finish (GMount *mount, - GAsyncResult *result, - GError **error); - -const gchar *g_mount_get_sort_key (GMount *mount); - -G_END_DECLS - -#endif /* __G_MOUNT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gmountoperation.h b/GstreamerHelper/x86/include/glib-2.0/gio/gmountoperation.h deleted file mode 100644 index 0c112658..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gmountoperation.h +++ /dev/null @@ -1,127 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MOUNT_OPERATION_H__ -#define __G_MOUNT_OPERATION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_MOUNT_OPERATION (g_mount_operation_get_type ()) -#define G_MOUNT_OPERATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MOUNT_OPERATION, GMountOperation)) -#define G_MOUNT_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MOUNT_OPERATION, GMountOperationClass)) -#define G_IS_MOUNT_OPERATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MOUNT_OPERATION)) -#define G_IS_MOUNT_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MOUNT_OPERATION)) -#define G_MOUNT_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MOUNT_OPERATION, GMountOperationClass)) - -/** - * GMountOperation: - * - * Class for providing authentication methods for mounting operations, - * such as mounting a file locally, or authenticating with a server. - **/ -typedef struct _GMountOperationClass GMountOperationClass; -typedef struct _GMountOperationPrivate GMountOperationPrivate; - -struct _GMountOperation -{ - GObject parent_instance; - - GMountOperationPrivate *priv; -}; - -struct _GMountOperationClass -{ - GObjectClass parent_class; - - /* signals: */ - - void (* ask_password) (GMountOperation *op, - const char *message, - const char *default_user, - const char *default_domain, - GAskPasswordFlags flags); - - void (* ask_question) (GMountOperation *op, - const char *message, - const char *choices[]); - - void (* reply) (GMountOperation *op, - GMountOperationResult result); - - void (* aborted) (GMountOperation *op); - - void (* show_processes) (GMountOperation *op, - const gchar *message, - GArray *processes, - const gchar *choices[]); - - void (* show_unmount_progress) (GMountOperation *op, - const gchar *message, - gint64 time_left, - gint64 bytes_left); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); - void (*_g_reserved9) (void); -}; - -GType g_mount_operation_get_type (void) G_GNUC_CONST; -GMountOperation * g_mount_operation_new (void); - -const char * g_mount_operation_get_username (GMountOperation *op); -void g_mount_operation_set_username (GMountOperation *op, - const char *username); -const char * g_mount_operation_get_password (GMountOperation *op); -void g_mount_operation_set_password (GMountOperation *op, - const char *password); -gboolean g_mount_operation_get_anonymous (GMountOperation *op); -void g_mount_operation_set_anonymous (GMountOperation *op, - gboolean anonymous); -const char * g_mount_operation_get_domain (GMountOperation *op); -void g_mount_operation_set_domain (GMountOperation *op, - const char *domain); -GPasswordSave g_mount_operation_get_password_save (GMountOperation *op); -void g_mount_operation_set_password_save (GMountOperation *op, - GPasswordSave save); -int g_mount_operation_get_choice (GMountOperation *op); -void g_mount_operation_set_choice (GMountOperation *op, - int choice); -void g_mount_operation_reply (GMountOperation *op, - GMountOperationResult result); - -G_END_DECLS - -#endif /* __G_MOUNT_OPERATION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gnativevolumemonitor.h b/GstreamerHelper/x86/include/glib-2.0/gio/gnativevolumemonitor.h deleted file mode 100644 index e072576f..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gnativevolumemonitor.h +++ /dev/null @@ -1,62 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NATIVE_VOLUME_MONITOR_H__ -#define __G_NATIVE_VOLUME_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_NATIVE_VOLUME_MONITOR (g_native_volume_monitor_get_type ()) -#define G_NATIVE_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NATIVE_VOLUME_MONITOR, GNativeVolumeMonitor)) -#define G_NATIVE_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NATIVE_VOLUME_MONITOR, GNativeVolumeMonitorClass)) -#define G_IS_NATIVE_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NATIVE_VOLUME_MONITOR)) -#define G_IS_NATIVE_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NATIVE_VOLUME_MONITOR)) - -#define G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME "gio-native-volume-monitor" - -typedef struct _GNativeVolumeMonitor GNativeVolumeMonitor; -typedef struct _GNativeVolumeMonitorClass GNativeVolumeMonitorClass; - -struct _GNativeVolumeMonitor -{ - GVolumeMonitor parent_instance; -}; - -struct _GNativeVolumeMonitorClass -{ - GVolumeMonitorClass parent_class; - - GMount * (* get_mount_for_mount_path) (const char *mount_path, - GCancellable *cancellable); -}; - -GType g_native_volume_monitor_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_NATIVE_VOLUME_MONITOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkaddress.h b/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkaddress.h deleted file mode 100644 index af163211..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkaddress.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NETWORK_ADDRESS_H__ -#define __G_NETWORK_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_NETWORK_ADDRESS (g_network_address_get_type ()) -#define G_NETWORK_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NETWORK_ADDRESS, GNetworkAddress)) -#define G_NETWORK_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NETWORK_ADDRESS, GNetworkAddressClass)) -#define G_IS_NETWORK_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NETWORK_ADDRESS)) -#define G_IS_NETWORK_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NETWORK_ADDRESS)) -#define G_NETWORK_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_NETWORK_ADDRESS, GNetworkAddressClass)) - -typedef struct _GNetworkAddressClass GNetworkAddressClass; -typedef struct _GNetworkAddressPrivate GNetworkAddressPrivate; - -struct _GNetworkAddress -{ - GObject parent_instance; - - /*< private >*/ - GNetworkAddressPrivate *priv; -}; - -struct _GNetworkAddressClass -{ - GObjectClass parent_class; - -}; - -GType g_network_address_get_type (void) G_GNUC_CONST; - -GSocketConnectable *g_network_address_new (const gchar *hostname, - guint16 port); -GSocketConnectable *g_network_address_parse (const gchar *host_and_port, - guint16 default_port, - GError **error); -GSocketConnectable *g_network_address_parse_uri (const gchar *uri, - guint16 default_port, - GError **error); -const gchar *g_network_address_get_hostname (GNetworkAddress *addr); -guint16 g_network_address_get_port (GNetworkAddress *addr); -const gchar *g_network_address_get_scheme (GNetworkAddress *addr); - - -G_END_DECLS - -#endif /* __G_NETWORK_ADDRESS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkmonitor.h b/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkmonitor.h deleted file mode 100644 index 995ff545..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkmonitor.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NETWORK_MONITOR_H__ -#define __G_NETWORK_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_NETWORK_MONITOR_EXTENSION_POINT_NAME: - * - * Extension point for network status monitoring functionality. - * See Extending GIO. - * - * Since: 2.30 - */ -#define G_NETWORK_MONITOR_EXTENSION_POINT_NAME "gio-network-monitor" - -#define G_TYPE_NETWORK_MONITOR (g_network_monitor_get_type ()) -#define G_NETWORK_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NETWORK_MONITOR, GNetworkMonitor)) -#define G_IS_NETWORK_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NETWORK_MONITOR)) -#define G_NETWORK_MONITOR_GET_INTERFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), G_TYPE_NETWORK_MONITOR, GNetworkMonitorInterface)) - -typedef struct _GNetworkMonitorInterface GNetworkMonitorInterface; - -struct _GNetworkMonitorInterface { - GTypeInterface g_iface; - - void (*network_changed) (GNetworkMonitor *monitor, - gboolean available); - - gboolean (*can_reach) (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GError **error); - void (*can_reach_async) (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (*can_reach_finish) (GNetworkMonitor *monitor, - GAsyncResult *result, - GError **error); -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_network_monitor_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_32 -GNetworkMonitor *g_network_monitor_get_default (void); - -gboolean g_network_monitor_get_network_available (GNetworkMonitor *monitor); - -gboolean g_network_monitor_can_reach (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GError **error); -void g_network_monitor_can_reach_async (GNetworkMonitor *monitor, - GSocketConnectable *connectable, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_network_monitor_can_reach_finish (GNetworkMonitor *monitor, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_NETWORK_MONITOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkservice.h b/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkservice.h deleted file mode 100644 index 1f6dbea8..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gnetworkservice.h +++ /dev/null @@ -1,71 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NETWORK_SERVICE_H__ -#define __G_NETWORK_SERVICE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_NETWORK_SERVICE (g_network_service_get_type ()) -#define G_NETWORK_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NETWORK_SERVICE, GNetworkService)) -#define G_NETWORK_SERVICE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NETWORK_SERVICE, GNetworkServiceClass)) -#define G_IS_NETWORK_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NETWORK_SERVICE)) -#define G_IS_NETWORK_SERVICE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NETWORK_SERVICE)) -#define G_NETWORK_SERVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_NETWORK_SERVICE, GNetworkServiceClass)) - -typedef struct _GNetworkServiceClass GNetworkServiceClass; -typedef struct _GNetworkServicePrivate GNetworkServicePrivate; - -struct _GNetworkService -{ - GObject parent_instance; - - /*< private >*/ - GNetworkServicePrivate *priv; -}; - -struct _GNetworkServiceClass -{ - GObjectClass parent_class; - -}; - -GType g_network_service_get_type (void) G_GNUC_CONST; - -GSocketConnectable *g_network_service_new (const gchar *service, - const gchar *protocol, - const gchar *domain); - -const gchar *g_network_service_get_service (GNetworkService *srv); -const gchar *g_network_service_get_protocol (GNetworkService *srv); -const gchar *g_network_service_get_domain (GNetworkService *srv); -const gchar *g_network_service_get_scheme (GNetworkService *srv); -void g_network_service_set_scheme (GNetworkService *srv, const gchar *scheme); - -G_END_DECLS - -#endif /* __G_NETWORK_SERVICE_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/goutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/goutputstream.h deleted file mode 100644 index 5e9850c8..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/goutputstream.h +++ /dev/null @@ -1,223 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_OUTPUT_STREAM_H__ -#define __G_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_OUTPUT_STREAM (g_output_stream_get_type ()) -#define G_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_OUTPUT_STREAM, GOutputStream)) -#define G_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_OUTPUT_STREAM, GOutputStreamClass)) -#define G_IS_OUTPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_OUTPUT_STREAM)) -#define G_IS_OUTPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_OUTPUT_STREAM)) -#define G_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_OUTPUT_STREAM, GOutputStreamClass)) - -/** - * GOutputStream: - * - * Base class for writing output. - * - * All classes derived from GOutputStream should implement synchronous - * writing, splicing, flushing and closing streams, but may implement - * asynchronous versions. - **/ -typedef struct _GOutputStreamClass GOutputStreamClass; -typedef struct _GOutputStreamPrivate GOutputStreamPrivate; - -struct _GOutputStream -{ - GObject parent_instance; - - /*< private >*/ - GOutputStreamPrivate *priv; -}; - - -struct _GOutputStreamClass -{ - GObjectClass parent_class; - - /* Sync ops: */ - - gssize (* write_fn) (GOutputStream *stream, - const void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - gssize (* splice) (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - GCancellable *cancellable, - GError **error); - gboolean (* flush) (GOutputStream *stream, - GCancellable *cancellable, - GError **error); - gboolean (* close_fn) (GOutputStream *stream, - GCancellable *cancellable, - GError **error); - - /* Async ops: (optional in derived classes) */ - - void (* write_async) (GOutputStream *stream, - const void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* write_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - void (* splice_async) (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gssize (* splice_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - void (* flush_async) (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* flush_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - void (* close_async) (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* close_finish) (GOutputStream *stream, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); -}; - -GType g_output_stream_get_type (void) G_GNUC_CONST; - -gssize g_output_stream_write (GOutputStream *stream, - const void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); -gboolean g_output_stream_write_all (GOutputStream *stream, - const void *buffer, - gsize count, - gsize *bytes_written, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -gssize g_output_stream_write_bytes (GOutputStream *stream, - GBytes *bytes, - GCancellable *cancellable, - GError **error); -gssize g_output_stream_splice (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - GCancellable *cancellable, - GError **error); -gboolean g_output_stream_flush (GOutputStream *stream, - GCancellable *cancellable, - GError **error); -gboolean g_output_stream_close (GOutputStream *stream, - GCancellable *cancellable, - GError **error); -void g_output_stream_write_async (GOutputStream *stream, - const void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_output_stream_write_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -GLIB_AVAILABLE_IN_2_34 -void g_output_stream_write_bytes_async (GOutputStream *stream, - GBytes *bytes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gssize g_output_stream_write_bytes_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -void g_output_stream_splice_async (GOutputStream *stream, - GInputStream *source, - GOutputStreamSpliceFlags flags, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gssize g_output_stream_splice_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -void g_output_stream_flush_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_output_stream_flush_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -void g_output_stream_close_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_output_stream_close_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); - -gboolean g_output_stream_is_closed (GOutputStream *stream); -gboolean g_output_stream_is_closing (GOutputStream *stream); -gboolean g_output_stream_has_pending (GOutputStream *stream); -gboolean g_output_stream_set_pending (GOutputStream *stream, - GError **error); -void g_output_stream_clear_pending (GOutputStream *stream); - - -G_END_DECLS - -#endif /* __G_OUTPUT_STREAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gpermission.h b/GstreamerHelper/x86/include/glib-2.0/gio/gpermission.h deleted file mode 100644 index 3f742578..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gpermission.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PERMISSION_H__ -#define __G_PERMISSION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PERMISSION (g_permission_get_type ()) -#define G_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_PERMISSION, GPermission)) -#define G_PERMISSION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_PERMISSION, GPermissionClass)) -#define G_IS_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_PERMISSION)) -#define G_IS_PERMISSION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_PERMISSION)) -#define G_PERMISSION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_PERMISSION, GPermissionClass)) - -typedef struct _GPermissionPrivate GPermissionPrivate; -typedef struct _GPermissionClass GPermissionClass; - -struct _GPermission -{ - GObject parent_instance; - - /*< private >*/ - GPermissionPrivate *priv; -}; - -struct _GPermissionClass { - GObjectClass parent_class; - - gboolean (*acquire) (GPermission *permission, - GCancellable *cancellable, - GError **error); - void (*acquire_async) (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (*acquire_finish) (GPermission *permission, - GAsyncResult *result, - GError **error); - - gboolean (*release) (GPermission *permission, - GCancellable *cancellable, - GError **error); - void (*release_async) (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (*release_finish) (GPermission *permission, - GAsyncResult *result, - GError **error); - - gpointer reserved[16]; -}; - -GType g_permission_get_type (void); -gboolean g_permission_acquire (GPermission *permission, - GCancellable *cancellable, - GError **error); -void g_permission_acquire_async (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_permission_acquire_finish (GPermission *permission, - GAsyncResult *result, - GError **error); - -gboolean g_permission_release (GPermission *permission, - GCancellable *cancellable, - GError **error); -void g_permission_release_async (GPermission *permission, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_permission_release_finish (GPermission *permission, - GAsyncResult *result, - GError **error); - -gboolean g_permission_get_allowed (GPermission *permission); -gboolean g_permission_get_can_acquire (GPermission *permission); -gboolean g_permission_get_can_release (GPermission *permission); - -void g_permission_impl_update (GPermission *permission, - gboolean allowed, - gboolean can_acquire, - gboolean can_release); - -G_END_DECLS - -#endif /* __G_PERMISSION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gpollableinputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gpollableinputstream.h deleted file mode 100644 index 49af7ee2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gpollableinputstream.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLLABLE_INPUT_STREAM_H__ -#define __G_POLLABLE_INPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_POLLABLE_INPUT_STREAM (g_pollable_input_stream_get_type ()) -#define G_POLLABLE_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_POLLABLE_INPUT_STREAM, GPollableInputStream)) -#define G_IS_POLLABLE_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_POLLABLE_INPUT_STREAM)) -#define G_POLLABLE_INPUT_STREAM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_POLLABLE_INPUT_STREAM, GPollableInputStreamInterface)) - -/** - * GPollableInputStream: - * - * An interface for a #GInputStream that can be polled for readability. - * - * Since: 2.28 - */ -typedef struct _GPollableInputStreamInterface GPollableInputStreamInterface; - -/** - * GPollableInputStreamInterface: - * @g_iface: The parent interface. - * @can_poll: Checks if the #GPollableInputStream instance is actually pollable - * @is_readable: Checks if the stream is readable - * @create_source: Creates a #GSource to poll the stream - * @read_nonblocking: Does a non-blocking read or returns - * %G_IO_ERROR_WOULD_BLOCK - * - * The interface for pollable input streams. - * - * The default implementation of @can_poll always returns %TRUE. - * - * The default implementation of @read_nonblocking calls - * g_pollable_input_stream_is_readable(), and then calls - * g_input_stream_read() if it returns %TRUE. This means you only need - * to override it if it is possible that your @is_readable - * implementation may return %TRUE when the stream is not actually - * readable. - * - * Since: 2.28 - */ -struct _GPollableInputStreamInterface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - gboolean (*can_poll) (GPollableInputStream *stream); - - gboolean (*is_readable) (GPollableInputStream *stream); - GSource * (*create_source) (GPollableInputStream *stream, - GCancellable *cancellable); - gssize (*read_nonblocking) (GPollableInputStream *stream, - void *buffer, - gsize count, - GError **error); -}; - -GType g_pollable_input_stream_get_type (void) G_GNUC_CONST; - -gboolean g_pollable_input_stream_can_poll (GPollableInputStream *stream); - -gboolean g_pollable_input_stream_is_readable (GPollableInputStream *stream); -GSource *g_pollable_input_stream_create_source (GPollableInputStream *stream, - GCancellable *cancellable); - -gssize g_pollable_input_stream_read_nonblocking (GPollableInputStream *stream, - void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_POLLABLE_INPUT_STREAM_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gpollableoutputstream.h b/GstreamerHelper/x86/include/glib-2.0/gio/gpollableoutputstream.h deleted file mode 100644 index c5945ce3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gpollableoutputstream.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLLABLE_OUTPUT_STREAM_H__ -#define __G_POLLABLE_OUTPUT_STREAM_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_POLLABLE_OUTPUT_STREAM (g_pollable_output_stream_get_type ()) -#define G_POLLABLE_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM, GPollableOutputStream)) -#define G_IS_POLLABLE_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM)) -#define G_POLLABLE_OUTPUT_STREAM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM, GPollableOutputStreamInterface)) - -/** - * GPollableOutputStream: - * - * An interface for a #GOutputStream that can be polled for readability. - * - * Since: 2.28 - */ -typedef struct _GPollableOutputStreamInterface GPollableOutputStreamInterface; - -/** - * GPollableOutputStreamInterface: - * @g_iface: The parent interface. - * @can_poll: Checks if the #GPollableOutputStream instance is actually pollable - * @is_writable: Checks if the stream is writable - * @create_source: Creates a #GSource to poll the stream - * @write_nonblocking: Does a non-blocking write or returns - * %G_IO_ERROR_WOULD_BLOCK - * - * The interface for pollable output streams. - * - * The default implementation of @can_poll always returns %TRUE. - * - * The default implementation of @write_nonblocking calls - * g_pollable_output_stream_is_writable(), and then calls - * g_output_stream_write() if it returns %TRUE. This means you only - * need to override it if it is possible that your @is_writable - * implementation may return %TRUE when the stream is not actually - * writable. - * - * Since: 2.28 - */ -struct _GPollableOutputStreamInterface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - gboolean (*can_poll) (GPollableOutputStream *stream); - - gboolean (*is_writable) (GPollableOutputStream *stream); - GSource * (*create_source) (GPollableOutputStream *stream, - GCancellable *cancellable); - gssize (*write_nonblocking) (GPollableOutputStream *stream, - const void *buffer, - gsize count, - GError **error); -}; - -GType g_pollable_output_stream_get_type (void) G_GNUC_CONST; - -gboolean g_pollable_output_stream_can_poll (GPollableOutputStream *stream); - -gboolean g_pollable_output_stream_is_writable (GPollableOutputStream *stream); -GSource *g_pollable_output_stream_create_source (GPollableOutputStream *stream, - GCancellable *cancellable); - -gssize g_pollable_output_stream_write_nonblocking (GPollableOutputStream *stream, - const void *buffer, - gsize count, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_POLLABLE_OUTPUT_STREAM_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gpollableutils.h b/GstreamerHelper/x86/include/glib-2.0/gio/gpollableutils.h deleted file mode 100644 index 782f3ca4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gpollableutils.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2012 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLLABLE_UTILS_H__ -#define __G_POLLABLE_UTILS_H__ - -#include - -G_BEGIN_DECLS - -GSource *g_pollable_source_new (GObject *pollable_stream); - -GLIB_AVAILABLE_IN_2_34 -GSource *g_pollable_source_new_full (gpointer pollable_stream, - GSource *child_source, - GCancellable *cancellable); - -GLIB_AVAILABLE_IN_2_34 -gssize g_pollable_stream_read (GInputStream *stream, - void *buffer, - gsize count, - gboolean blocking, - GCancellable *cancellable, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -gssize g_pollable_stream_write (GOutputStream *stream, - const void *buffer, - gsize count, - gboolean blocking, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -gboolean g_pollable_stream_write_all (GOutputStream *stream, - const void *buffer, - gsize count, - gboolean blocking, - gsize *bytes_written, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* _G_POLLABLE_UTILS_H_ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gproxy.h b/GstreamerHelper/x86/include/glib-2.0/gio/gproxy.h deleted file mode 100644 index d7d11a7f..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gproxy.h +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_H__ -#define __G_PROXY_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY (g_proxy_get_type ()) -#define G_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY, GProxy)) -#define G_IS_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY)) -#define G_PROXY_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_PROXY, GProxyInterface)) - -/** - * G_PROXY_EXTENSION_POINT_NAME: - * - * Extension point for proxy functionality. - * See Extending GIO. - * - * Since: 2.26 - */ -#define G_PROXY_EXTENSION_POINT_NAME "gio-proxy" - -/** - * GProxy: - * - * Interface that handles proxy connection and payload. - * - * Since: 2.26 - */ -typedef struct _GProxyInterface GProxyInterface; - -/** - * GProxyInterface: - * @g_iface: The parent interface. - * @connect: Connect to proxy server and wrap (if required) the #connection - * to handle payload. - * @connect_async: Same as connect() but asynchronous. - * @connect_finish: Returns the result of connect_async() - * @supports_hostname: Returns whether the proxy supports hostname lookups. - * - * Provides an interface for handling proxy connection and payload. - * - * Since: 2.26 - */ -struct _GProxyInterface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GIOStream * (* connect) (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GError **error); - - void (* connect_async) (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GIOStream * (* connect_finish) (GProxy *proxy, - GAsyncResult *result, - GError **error); - - gboolean (* supports_hostname) (GProxy *proxy); -}; - -GType g_proxy_get_type (void) G_GNUC_CONST; - -GProxy *g_proxy_get_default_for_protocol (const gchar *protocol); - -GIOStream *g_proxy_connect (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GError **error); - -void g_proxy_connect_async (GProxy *proxy, - GIOStream *connection, - GProxyAddress *proxy_address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GIOStream *g_proxy_connect_finish (GProxy *proxy, - GAsyncResult *result, - GError **error); - -gboolean g_proxy_supports_hostname (GProxy *proxy); - -G_END_DECLS - -#endif /* __G_PROXY_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddress.h b/GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddress.h deleted file mode 100644 index 8d51f11d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddress.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_ADDRESS_H__ -#define __G_PROXY_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY_ADDRESS (g_proxy_address_get_type ()) -#define G_PROXY_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_ADDRESS, GProxyAddress)) -#define G_PROXY_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_ADDRESS, GProxyAddressClass)) -#define G_IS_PROXY_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_ADDRESS)) -#define G_IS_PROXY_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_ADDRESS)) -#define G_PROXY_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_PROXY_ADDRESS, GProxyAddressClass)) - -typedef struct _GProxyAddressClass GProxyAddressClass; -typedef struct _GProxyAddressPrivate GProxyAddressPrivate; - -struct _GProxyAddress -{ - GInetSocketAddress parent_instance; - - /*< private >*/ - GProxyAddressPrivate *priv; -}; - -struct _GProxyAddressClass -{ - GInetSocketAddressClass parent_class; -}; - - -GType g_proxy_address_get_type (void) G_GNUC_CONST; - -GSocketAddress *g_proxy_address_new (GInetAddress *inetaddr, - guint16 port, - const gchar *protocol, - const gchar *dest_hostname, - guint16 dest_port, - const gchar *username, - const gchar *password); - -const gchar *g_proxy_address_get_protocol (GProxyAddress *proxy); -GLIB_AVAILABLE_IN_2_34 -const gchar *g_proxy_address_get_destination_protocol (GProxyAddress *proxy); -const gchar *g_proxy_address_get_destination_hostname (GProxyAddress *proxy); -guint16 g_proxy_address_get_destination_port (GProxyAddress *proxy); -const gchar *g_proxy_address_get_username (GProxyAddress *proxy); -const gchar *g_proxy_address_get_password (GProxyAddress *proxy); - -GLIB_AVAILABLE_IN_2_34 -const gchar *g_proxy_address_get_uri (GProxyAddress *proxy); - -G_END_DECLS - -#endif /* __G_PROXY_ADDRESS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddressenumerator.h b/GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddressenumerator.h deleted file mode 100644 index b38045f6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gproxyaddressenumerator.h +++ /dev/null @@ -1,75 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_ADDRESS_ENUMERATOR_H__ -#define __G_PROXY_ADDRESS_ENUMERATOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY_ADDRESS_ENUMERATOR (g_proxy_address_enumerator_get_type ()) -#define G_PROXY_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_ADDRESS_ENUMERATOR, GProxyAddressEnumerator)) -#define G_PROXY_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_PROXY_ADDRESS_ENUMERATOR, GProxyAddressEnumeratorClass)) -#define G_IS_PROXY_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_ADDRESS_ENUMERATOR)) -#define G_IS_PROXY_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_PROXY_ADDRESS_ENUMERATOR)) -#define G_PROXY_ADDRESS_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_PROXY_ADDRESS_ENUMERATOR, GProxyAddressEnumeratorClass)) - -/** - * GProxyAddressEnumerator: - * - * A subclass of #GSocketAddressEnumerator that takes another address - * enumerator and wraps its results in #GProxyAddresses as - * directed by the default #GProxyResolver. - */ - -typedef struct _GProxyAddressEnumeratorClass GProxyAddressEnumeratorClass; -typedef struct _GProxyAddressEnumeratorPrivate GProxyAddressEnumeratorPrivate; - -struct _GProxyAddressEnumerator -{ - GSocketAddressEnumerator parent_instance; - GProxyAddressEnumeratorPrivate *priv; -}; - -struct _GProxyAddressEnumeratorClass -{ - GSocketAddressEnumeratorClass parent_class; - - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); -}; - -GType g_proxy_address_enumerator_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_PROXY_ADDRESS_ENUMERATOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gproxyresolver.h b/GstreamerHelper/x86/include/glib-2.0/gio/gproxyresolver.h deleted file mode 100644 index 7d8d27de..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gproxyresolver.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Nicolas Dufresne - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PROXY_RESOLVER_H__ -#define __G_PROXY_RESOLVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_PROXY_RESOLVER (g_proxy_resolver_get_type ()) -#define G_PROXY_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PROXY_RESOLVER, GProxyResolver)) -#define G_IS_PROXY_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_PROXY_RESOLVER)) -#define G_PROXY_RESOLVER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), G_TYPE_PROXY_RESOLVER, GProxyResolverInterface)) - -/** - * G_PROXY_RESOLVER_EXTENSION_POINT_NAME: - * - * Extension point for proxy resolving functionality. - * See Extending GIO. - */ -#define G_PROXY_RESOLVER_EXTENSION_POINT_NAME "gio-proxy-resolver" - -typedef struct _GProxyResolverInterface GProxyResolverInterface; - -struct _GProxyResolverInterface { - GTypeInterface g_iface; - - /* Virtual Table */ - gboolean (* is_supported) (GProxyResolver *resolver); - - gchar ** (* lookup) (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GError **error); - - void (* lookup_async) (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - gchar ** (* lookup_finish) (GProxyResolver *resolver, - GAsyncResult *result, - GError **error); -}; - -GType g_proxy_resolver_get_type (void) G_GNUC_CONST; -GProxyResolver *g_proxy_resolver_get_default (void); - -gboolean g_proxy_resolver_is_supported (GProxyResolver *resolver); -gchar **g_proxy_resolver_lookup (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GError **error); -void g_proxy_resolver_lookup_async (GProxyResolver *resolver, - const gchar *uri, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gchar **g_proxy_resolver_lookup_finish (GProxyResolver *resolver, - GAsyncResult *result, - GError **error); - - -G_END_DECLS - -#endif /* __G_PROXY_RESOLVER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gremoteactiongroup.h b/GstreamerHelper/x86/include/glib-2.0/gio/gremoteactiongroup.h deleted file mode 100644 index d2849e63..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gremoteactiongroup.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2011 Canonical Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_REMOTE_ACTION_GROUP_H__ -#define __G_REMOTE_ACTION_GROUP_H__ - -#include - -G_BEGIN_DECLS - - -#define G_TYPE_REMOTE_ACTION_GROUP (g_remote_action_group_get_type ()) -#define G_REMOTE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_REMOTE_ACTION_GROUP, GRemoteActionGroup)) -#define G_IS_REMOTE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_REMOTE_ACTION_GROUP)) -#define G_REMOTE_ACTION_GROUP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), \ - G_TYPE_REMOTE_ACTION_GROUP, \ - GRemoteActionGroupInterface)) - -typedef struct _GRemoteActionGroupInterface GRemoteActionGroupInterface; - -struct _GRemoteActionGroupInterface -{ - GTypeInterface g_iface; - - void (* activate_action_full) (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *parameter, - GVariant *platform_data); - - void (* change_action_state_full) (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *value, - GVariant *platform_data); -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_remote_action_group_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -void g_remote_action_group_activate_action_full (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *parameter, - GVariant *platform_data); - -GLIB_AVAILABLE_IN_2_32 -void g_remote_action_group_change_action_state_full (GRemoteActionGroup *remote, - const gchar *action_name, - GVariant *value, - GVariant *platform_data); - -G_END_DECLS - -#endif /* __G_REMOTE_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gresolver.h b/GstreamerHelper/x86/include/glib-2.0/gio/gresolver.h deleted file mode 100644 index ecd8e51d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gresolver.h +++ /dev/null @@ -1,199 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_RESOLVER_H__ -#define __G_RESOLVER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_RESOLVER (g_resolver_get_type ()) -#define G_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_RESOLVER, GResolver)) -#define G_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_RESOLVER, GResolverClass)) -#define G_IS_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_RESOLVER)) -#define G_IS_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_RESOLVER)) -#define G_RESOLVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_RESOLVER, GResolverClass)) - -typedef struct _GResolverPrivate GResolverPrivate; -typedef struct _GResolverClass GResolverClass; - -struct _GResolver { - GObject parent_instance; - - GResolverPrivate *priv; -}; - -struct _GResolverClass { - GObjectClass parent_class; - - /* Signals */ - void ( *reload) (GResolver *resolver); - - /* Virtual methods */ - GList * ( *lookup_by_name) (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GError **error); - void ( *lookup_by_name_async) (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GList * ( *lookup_by_name_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - gchar * ( *lookup_by_address) (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GError **error); - void ( *lookup_by_address_async) (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gchar * ( *lookup_by_address_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - GList * ( *lookup_service) (GResolver *resolver, - const gchar *rrname, - GCancellable *cancellable, - GError **error); - void ( *lookup_service_async) (GResolver *resolver, - const gchar *rrname, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GList * ( *lookup_service_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - GList * ( *lookup_records) (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GError **error); - - void ( *lookup_records_async) (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GList * ( *lookup_records_finish) (GResolver *resolver, - GAsyncResult *result, - GError **error); - - /* Padding for future expansion */ - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - -}; - -GType g_resolver_get_type (void) G_GNUC_CONST; -GResolver *g_resolver_get_default (void); -void g_resolver_set_default (GResolver *resolver); - -GList *g_resolver_lookup_by_name (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GError **error); -void g_resolver_lookup_by_name_async (GResolver *resolver, - const gchar *hostname, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList *g_resolver_lookup_by_name_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -void g_resolver_free_addresses (GList *addresses); - -gchar *g_resolver_lookup_by_address (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GError **error); -void g_resolver_lookup_by_address_async (GResolver *resolver, - GInetAddress *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gchar *g_resolver_lookup_by_address_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -GList *g_resolver_lookup_service (GResolver *resolver, - const gchar *service, - const gchar *protocol, - const gchar *domain, - GCancellable *cancellable, - GError **error); -void g_resolver_lookup_service_async (GResolver *resolver, - const gchar *service, - const gchar *protocol, - const gchar *domain, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GList *g_resolver_lookup_service_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -GList *g_resolver_lookup_records (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_34 -void g_resolver_lookup_records_async (GResolver *resolver, - const gchar *rrname, - GResolverRecordType record_type, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -GList *g_resolver_lookup_records_finish (GResolver *resolver, - GAsyncResult *result, - GError **error); - -void g_resolver_free_targets (GList *targets); - -/** - * G_RESOLVER_ERROR: - * - * Error domain for #GResolver. Errors in this domain will be from the - * #GResolverError enumeration. See #GError for more information on - * error domains. - */ -#define G_RESOLVER_ERROR (g_resolver_error_quark ()) -GQuark g_resolver_error_quark (void); - -G_END_DECLS - -#endif /* __G_RESOLVER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gresource.h b/GstreamerHelper/x86/include/glib-2.0/gio/gresource.h deleted file mode 100644 index 15bfc8a4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gresource.h +++ /dev/null @@ -1,129 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_RESOURCE_H__ -#define __G_RESOURCE_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TYPE_RESOURCE: - * - * The #GType for #GResource. - */ -#define G_TYPE_RESOURCE (g_resource_get_type ()) - - -/** - * G_RESOURCE_ERROR: - * - * Error domain for #GResource. Errors in this domain will be from the - * #GResourceError enumeration. See #GError for more information on - * error domains. - */ -#define G_RESOURCE_ERROR (g_resource_error_quark ()) -GQuark g_resource_error_quark (void); - -typedef struct _GStaticResource GStaticResource; - -struct _GStaticResource { - const guint8 *data; - gsize data_len; - GResource *resource; - GStaticResource *next; - gpointer padding; -}; - -GLIB_AVAILABLE_IN_2_32 -GType g_resource_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_32 -GResource * g_resource_new_from_data (GBytes *data, - GError **error); -GResource * g_resource_ref (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -void g_resource_unref (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -GResource * g_resource_load (const gchar *filename, - GError **error); -GLIB_AVAILABLE_IN_2_32 -GInputStream *g_resource_open_stream (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -GBytes * g_resource_lookup_data (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -char ** g_resource_enumerate_children (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_resource_get_info (GResource *resource, - const char *path, - GResourceLookupFlags lookup_flags, - gsize *size, - guint32 *flags, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -void g_resources_register (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -void g_resources_unregister (GResource *resource); -GLIB_AVAILABLE_IN_2_32 -GInputStream *g_resources_open_stream (const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -GBytes * g_resources_lookup_data (const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -char ** g_resources_enumerate_children (const char *path, - GResourceLookupFlags lookup_flags, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_resources_get_info (const char *path, - GResourceLookupFlags lookup_flags, - gsize *size, - guint32 *flags, - GError **error); - - -GLIB_AVAILABLE_IN_2_32 -void g_static_resource_init (GStaticResource *static_resource); -GLIB_AVAILABLE_IN_2_32 -void g_static_resource_fini (GStaticResource *static_resource); -GLIB_AVAILABLE_IN_2_32 -GResource *g_static_resource_get_resource (GStaticResource *static_resource); - -G_END_DECLS - -#endif /* __G_RESOURCE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gseekable.h b/GstreamerHelper/x86/include/glib-2.0/gio/gseekable.h deleted file mode 100644 index ba51eea5..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gseekable.h +++ /dev/null @@ -1,99 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SEEKABLE_H__ -#define __G_SEEKABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SEEKABLE (g_seekable_get_type ()) -#define G_SEEKABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_SEEKABLE, GSeekable)) -#define G_IS_SEEKABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_SEEKABLE)) -#define G_SEEKABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_SEEKABLE, GSeekableIface)) - -/** - * GSeekable: - * - * Seek object for streaming operations. - **/ -typedef struct _GSeekableIface GSeekableIface; - -/** - * GSeekableIface: - * @g_iface: The parent interface. - * @tell: Tells the current location within a stream. - * @can_seek: Checks if seeking is supported by the stream. - * @seek: Seeks to a location within a stream. - * @can_truncate: Checks if truncation is supported by the stream. - * @truncate_fn: Truncates a stream. - * - * Provides an interface for implementing seekable functionality on I/O Streams. - **/ -struct _GSeekableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - goffset (* tell) (GSeekable *seekable); - - gboolean (* can_seek) (GSeekable *seekable); - gboolean (* seek) (GSeekable *seekable, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); - - gboolean (* can_truncate) (GSeekable *seekable); - gboolean (* truncate_fn) (GSeekable *seekable, - goffset offset, - GCancellable *cancellable, - GError **error); - - /* TODO: Async seek/truncate */ -}; - -GType g_seekable_get_type (void) G_GNUC_CONST; - -goffset g_seekable_tell (GSeekable *seekable); -gboolean g_seekable_can_seek (GSeekable *seekable); -gboolean g_seekable_seek (GSeekable *seekable, - goffset offset, - GSeekType type, - GCancellable *cancellable, - GError **error); -gboolean g_seekable_can_truncate (GSeekable *seekable); -gboolean g_seekable_truncate (GSeekable *seekable, - goffset offset, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - - -#endif /* __G_SEEKABLE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsettings.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsettings.h deleted file mode 100644 index 01f3e9e1..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsettings.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright © 2009, 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SETTINGS_H__ -#define __G_SETTINGS_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_SETTINGS (g_settings_get_type ()) -#define G_SETTINGS(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SETTINGS, GSettings)) -#define G_SETTINGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SETTINGS, GSettingsClass)) -#define G_IS_SETTINGS(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_SETTINGS)) -#define G_IS_SETTINGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_SETTINGS)) -#define G_SETTINGS_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SETTINGS, GSettingsClass)) - -typedef struct _GSettingsPrivate GSettingsPrivate; -typedef struct _GSettingsClass GSettingsClass; - -struct _GSettingsClass -{ - GObjectClass parent_class; - - /* Signals */ - void (*writable_changed) (GSettings *settings, - const gchar *key); - void (*changed) (GSettings *settings, - const gchar *key); - gboolean (*writable_change_event) (GSettings *settings, - GQuark key); - gboolean (*change_event) (GSettings *settings, - const GQuark *keys, - gint n_keys); - - gpointer padding[20]; -}; - -struct _GSettings -{ - GObject parent_instance; - GSettingsPrivate *priv; -}; - - -GType g_settings_get_type (void); - -const gchar * const * g_settings_list_schemas (void); -const gchar * const * g_settings_list_relocatable_schemas (void); -GSettings * g_settings_new (const gchar *schema_id); -GSettings * g_settings_new_with_path (const gchar *schema_id, - const gchar *path); -GSettings * g_settings_new_with_backend (const gchar *schema_id, - GSettingsBackend *backend); -GSettings * g_settings_new_with_backend_and_path (const gchar *schema_id, - GSettingsBackend *backend, - const gchar *path); -GLIB_AVAILABLE_IN_2_32 -GSettings * g_settings_new_full (GSettingsSchema *schema, - GSettingsBackend *backend, - const gchar *path); -gchar ** g_settings_list_children (GSettings *settings); -gchar ** g_settings_list_keys (GSettings *settings); -GVariant * g_settings_get_range (GSettings *settings, - const gchar *key); -gboolean g_settings_range_check (GSettings *settings, - const gchar *key, - GVariant *value); - -gboolean g_settings_set_value (GSettings *settings, - const gchar *key, - GVariant *value); -GVariant * g_settings_get_value (GSettings *settings, - const gchar *key); - -gboolean g_settings_set (GSettings *settings, - const gchar *key, - const gchar *format, - ...); -void g_settings_get (GSettings *settings, - const gchar *key, - const gchar *format, - ...); -void g_settings_reset (GSettings *settings, - const gchar *key); - -gint g_settings_get_int (GSettings *settings, - const gchar *key); -gboolean g_settings_set_int (GSettings *settings, - const gchar *key, - gint value); -guint g_settings_get_uint (GSettings *settings, - const gchar *key); -gboolean g_settings_set_uint (GSettings *settings, - const gchar *key, - guint value); -gchar * g_settings_get_string (GSettings *settings, - const gchar *key); -gboolean g_settings_set_string (GSettings *settings, - const gchar *key, - const gchar *value); -gboolean g_settings_get_boolean (GSettings *settings, - const gchar *key); -gboolean g_settings_set_boolean (GSettings *settings, - const gchar *key, - gboolean value); -gdouble g_settings_get_double (GSettings *settings, - const gchar *key); -gboolean g_settings_set_double (GSettings *settings, - const gchar *key, - gdouble value); -gchar ** g_settings_get_strv (GSettings *settings, - const gchar *key); -gboolean g_settings_set_strv (GSettings *settings, - const gchar *key, - const gchar *const *value); -gint g_settings_get_enum (GSettings *settings, - const gchar *key); -gboolean g_settings_set_enum (GSettings *settings, - const gchar *key, - gint value); -guint g_settings_get_flags (GSettings *settings, - const gchar *key); -gboolean g_settings_set_flags (GSettings *settings, - const gchar *key, - guint value); -GSettings * g_settings_get_child (GSettings *settings, - const gchar *name); - -gboolean g_settings_is_writable (GSettings *settings, - const gchar *name); - -void g_settings_delay (GSettings *settings); -void g_settings_apply (GSettings *settings); -void g_settings_revert (GSettings *settings); -gboolean g_settings_get_has_unapplied (GSettings *settings); -void g_settings_sync (void); - -/** - * GSettingsBindSetMapping: - * @value: a #GValue containing the property value to map - * @expected_type: the #GVariantType to create - * @user_data: user data that was specified when the binding was created - * - * The type for the function that is used to convert an object property - * value to a #GVariant for storing it in #GSettings. - * - * Returns: a new #GVariant holding the data from @value, - * or %NULL in case of an error - */ -typedef GVariant * (*GSettingsBindSetMapping) (const GValue *value, - const GVariantType *expected_type, - gpointer user_data); - -/** - * GSettingsBindGetMapping: - * @value: return location for the property value - * @variant: the #GVariant - * @user_data: user data that was specified when the binding was created - * - * The type for the function that is used to convert from #GSettings to - * an object property. The @value is already initialized to hold values - * of the appropriate type. - * - * Returns: %TRUE if the conversion succeeded, %FALSE in case of an error - */ -typedef gboolean (*GSettingsBindGetMapping) (GValue *value, - GVariant *variant, - gpointer user_data); - -/** - * GSettingsGetMapping: - * @value: the #GVariant to map, or %NULL - * @result: (out): the result of the mapping - * @user_data: (closure): the user data that was passed to - * g_settings_get_mapped() - * - * The type of the function that is used to convert from a value stored - * in a #GSettings to a value that is useful to the application. - * - * If the value is successfully mapped, the result should be stored at - * @result and %TRUE returned. If mapping fails (for example, if @value - * is not in the right format) then %FALSE should be returned. - * - * If @value is %NULL then it means that the mapping function is being - * given a "last chance" to successfully return a valid value. %TRUE - * must be returned in this case. - * - * Returns: %TRUE if the conversion succeeded, %FALSE in case of an error - **/ -typedef gboolean (*GSettingsGetMapping) (GVariant *value, - gpointer *result, - gpointer user_data); - -/** - * GSettingsBindFlags: - * @G_SETTINGS_BIND_DEFAULT: Equivalent to G_SETTINGS_BIND_GET|G_SETTINGS_BIND_SET - * @G_SETTINGS_BIND_GET: Update the #GObject property when the setting changes. - * It is an error to use this flag if the property is not writable. - * @G_SETTINGS_BIND_SET: Update the setting when the #GObject property changes. - * It is an error to use this flag if the property is not readable. - * @G_SETTINGS_BIND_NO_SENSITIVITY: Do not try to bind a "sensitivity" property to the writability of the setting - * @G_SETTINGS_BIND_GET_NO_CHANGES: When set in addition to #G_SETTINGS_BIND_GET, set the #GObject property - * value initially from the setting, but do not listen for changes of the setting - * @G_SETTINGS_BIND_INVERT_BOOLEAN: When passed to g_settings_bind(), uses a pair of mapping functions that invert - * the boolean value when mapping between the setting and the property. The setting and property must both - * be booleans. You cannot pass this flag to g_settings_bind_with_mapping(). - * - * Flags used when creating a binding. These flags determine in which - * direction the binding works. The default is to synchronize in both - * directions. - */ -typedef enum -{ - G_SETTINGS_BIND_DEFAULT, - G_SETTINGS_BIND_GET = (1<<0), - G_SETTINGS_BIND_SET = (1<<1), - G_SETTINGS_BIND_NO_SENSITIVITY = (1<<2), - G_SETTINGS_BIND_GET_NO_CHANGES = (1<<3), - G_SETTINGS_BIND_INVERT_BOOLEAN = (1<<4) -} GSettingsBindFlags; - -void g_settings_bind (GSettings *settings, - const gchar *key, - gpointer object, - const gchar *property, - GSettingsBindFlags flags); -void g_settings_bind_with_mapping (GSettings *settings, - const gchar *key, - gpointer object, - const gchar *property, - GSettingsBindFlags flags, - GSettingsBindGetMapping get_mapping, - GSettingsBindSetMapping set_mapping, - gpointer user_data, - GDestroyNotify destroy); -void g_settings_bind_writable (GSettings *settings, - const gchar *key, - gpointer object, - const gchar *property, - gboolean inverted); -void g_settings_unbind (gpointer object, - const gchar *property); - -GLIB_AVAILABLE_IN_2_32 -GAction * g_settings_create_action (GSettings *settings, - const gchar *key); - -gpointer g_settings_get_mapped (GSettings *settings, - const gchar *key, - GSettingsGetMapping mapping, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_SETTINGS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsettingsbackend.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsettingsbackend.h deleted file mode 100644 index e6741873..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsettingsbackend.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright © 2009, 2010 Codethink Limited - * Copyright © 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Matthias Clasen - */ - -#ifndef __G_SETTINGS_BACKEND_H__ -#define __G_SETTINGS_BACKEND_H__ - -#if !defined (G_SETTINGS_ENABLE_BACKEND) && !defined (GIO_COMPILATION) -#error "You must define G_SETTINGS_ENABLE_BACKEND before including ." -#endif - -#define __GIO_GIO_H_INSIDE__ -#include -#undef __GIO_GIO_H_INSIDE__ - -G_BEGIN_DECLS - -#define G_TYPE_SETTINGS_BACKEND (g_settings_backend_get_type ()) -#define G_SETTINGS_BACKEND(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SETTINGS_BACKEND, GSettingsBackend)) -#define G_SETTINGS_BACKEND_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SETTINGS_BACKEND, GSettingsBackendClass)) -#define G_IS_SETTINGS_BACKEND(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SETTINGS_BACKEND)) -#define G_IS_SETTINGS_BACKEND_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SETTINGS_BACKEND)) -#define G_SETTINGS_BACKEND_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SETTINGS_BACKEND, GSettingsBackendClass)) - -/** - * G_SETTINGS_BACKEND_EXTENSION_POINT_NAME: - * - * Extension point for #GSettingsBackend functionality. - **/ -#define G_SETTINGS_BACKEND_EXTENSION_POINT_NAME "gsettings-backend" - -/** - * GSettingsBackend: - * - * An implementation of a settings storage repository. - **/ -typedef struct _GSettingsBackendPrivate GSettingsBackendPrivate; -typedef struct _GSettingsBackendClass GSettingsBackendClass; - -struct _GSettingsBackendClass -{ - GObjectClass parent_class; - - GVariant * (*read) (GSettingsBackend *backend, - const gchar *key, - const GVariantType *expected_type, - gboolean default_value); - - gboolean (*get_writable) (GSettingsBackend *backend, - const gchar *key); - - gboolean (*write) (GSettingsBackend *backend, - const gchar *key, - GVariant *value, - gpointer origin_tag); - gboolean (*write_tree) (GSettingsBackend *backend, - GTree *tree, - gpointer origin_tag); - void (*reset) (GSettingsBackend *backend, - const gchar *key, - gpointer origin_tag); - - void (*subscribe) (GSettingsBackend *backend, - const gchar *name); - void (*unsubscribe) (GSettingsBackend *backend, - const gchar *name); - void (*sync) (GSettingsBackend *backend); - - GPermission * (*get_permission) (GSettingsBackend *backend, - const gchar *path); - - gpointer padding[24]; -}; - -struct _GSettingsBackend -{ - GObject parent_instance; - - /*< private >*/ - GSettingsBackendPrivate *priv; -}; - -GType g_settings_backend_get_type (void); - -void g_settings_backend_changed (GSettingsBackend *backend, - const gchar *key, - gpointer origin_tag); -void g_settings_backend_path_changed (GSettingsBackend *backend, - const gchar *path, - gpointer origin_tag); -void g_settings_backend_flatten_tree (GTree *tree, - gchar **path, - const gchar ***keys, - GVariant ***values); -void g_settings_backend_keys_changed (GSettingsBackend *backend, - const gchar *path, - gchar const * const *items, - gpointer origin_tag); - -void g_settings_backend_path_writable_changed (GSettingsBackend *backend, - const gchar *path); -void g_settings_backend_writable_changed (GSettingsBackend *backend, - const gchar *key); -void g_settings_backend_changed_tree (GSettingsBackend *backend, - GTree *tree, - gpointer origin_tag); - -GSettingsBackend * g_settings_backend_get_default (void); - -GSettingsBackend * g_keyfile_settings_backend_new (const gchar *filename, - const gchar *root_path, - const gchar *root_group); - -GSettingsBackend * g_null_settings_backend_new (void); - -GSettingsBackend * g_memory_settings_backend_new (void); - -G_END_DECLS - -#endif /* __G_SETTINGS_BACKEND_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsettingsschema.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsettingsschema.h deleted file mode 100644 index 277907da..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsettingsschema.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * Copyright © 2011 Canonical Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_SETTINGS_SCHEMA_H__ -#define __G_SETTINGS_SCHEMA_H__ - -#include - -typedef struct _GSettingsSchemaSource GSettingsSchemaSource; -typedef struct _GSettingsSchema GSettingsSchema; - -#define G_TYPE_SETTINGS_SCHEMA_SOURCE (g_settings_schema_source_get_type ()) -GLIB_AVAILABLE_IN_2_32 -GType g_settings_schema_source_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GSettingsSchemaSource * g_settings_schema_source_get_default (void); -GLIB_AVAILABLE_IN_2_32 -GSettingsSchemaSource * g_settings_schema_source_ref (GSettingsSchemaSource *source); -GLIB_AVAILABLE_IN_2_32 -void g_settings_schema_source_unref (GSettingsSchemaSource *source); - -GSettingsSchemaSource * g_settings_schema_source_new_from_directory (const gchar *directory, - GSettingsSchemaSource *parent, - gboolean trusted, - GError **error); - -GSettingsSchema * g_settings_schema_source_lookup (GSettingsSchemaSource *source, - const gchar *schema_id, - gboolean recursive); - -#define G_TYPE_SETTINGS_SCHEMA (g_settings_schema_get_type ()) -GLIB_AVAILABLE_IN_2_32 -GType g_settings_schema_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -GSettingsSchema * g_settings_schema_ref (GSettingsSchema *schema); -GLIB_AVAILABLE_IN_2_32 -void g_settings_schema_unref (GSettingsSchema *schema); - -const gchar * g_settings_schema_get_id (GSettingsSchema *schema); -const gchar * g_settings_schema_get_path (GSettingsSchema *schema); - -#endif /* __G_SETTINGS_SCHEMA_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleaction.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleaction.h deleted file mode 100644 index 7570fb4e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleaction.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_ACTION_H__ -#define __G_SIMPLE_ACTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_ACTION (g_simple_action_get_type ()) -#define G_SIMPLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SIMPLE_ACTION, GSimpleAction)) -#define G_IS_SIMPLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SIMPLE_ACTION)) - -GType g_simple_action_get_type (void) G_GNUC_CONST; - -GSimpleAction * g_simple_action_new (const gchar *name, - const GVariantType *parameter_type); - -GSimpleAction * g_simple_action_new_stateful (const gchar *name, - const GVariantType *parameter_type, - GVariant *state); - -void g_simple_action_set_enabled (GSimpleAction *simple, - gboolean enabled); - -void g_simple_action_set_state (GSimpleAction *simple, - GVariant *value); - -G_END_DECLS - -#endif /* __G_SIMPLE_ACTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleactiongroup.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleactiongroup.h deleted file mode 100644 index 7de37bc0..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleactiongroup.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_ACTION_GROUP_H__ -#define __G_SIMPLE_ACTION_GROUP_H__ - -#include "gactiongroup.h" -#include "gactionmap.h" - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_ACTION_GROUP (g_simple_action_group_get_type ()) -#define G_SIMPLE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SIMPLE_ACTION_GROUP, GSimpleActionGroup)) -#define G_SIMPLE_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SIMPLE_ACTION_GROUP, GSimpleActionGroupClass)) -#define G_IS_SIMPLE_ACTION_GROUP(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SIMPLE_ACTION_GROUP)) -#define G_IS_SIMPLE_ACTION_GROUP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SIMPLE_ACTION_GROUP)) -#define G_SIMPLE_ACTION_GROUP_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SIMPLE_ACTION_GROUP, GSimpleActionGroupClass)) - -typedef struct _GSimpleActionGroupPrivate GSimpleActionGroupPrivate; -typedef struct _GSimpleActionGroupClass GSimpleActionGroupClass; - -/** - * GSimpleActionGroup: - * - * The #GSimpleActionGroup structure contains private data and should only be accessed using the provided API. - * - * Since: 2.28 - */ -struct _GSimpleActionGroup -{ - /*< private >*/ - GObject parent_instance; - - GSimpleActionGroupPrivate *priv; -}; - -struct _GSimpleActionGroupClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< private >*/ - gpointer padding[12]; -}; - -GType g_simple_action_group_get_type (void) G_GNUC_CONST; - -GSimpleActionGroup * g_simple_action_group_new (void); - -GAction * g_simple_action_group_lookup (GSimpleActionGroup *simple, - const gchar *action_name); - -void g_simple_action_group_insert (GSimpleActionGroup *simple, - GAction *action); - -void g_simple_action_group_remove (GSimpleActionGroup *simple, - const gchar *action_name); - -void g_simple_action_group_add_entries (GSimpleActionGroup *simple, - const GActionEntry *entries, - gint n_entries, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_SIMPLE_ACTION_GROUP_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleasyncresult.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleasyncresult.h deleted file mode 100644 index 74976301..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsimpleasyncresult.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_ASYNC_RESULT_H__ -#define __G_SIMPLE_ASYNC_RESULT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_ASYNC_RESULT (g_simple_async_result_get_type ()) -#define G_SIMPLE_ASYNC_RESULT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResult)) -#define G_SIMPLE_ASYNC_RESULT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResultClass)) -#define G_IS_SIMPLE_ASYNC_RESULT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SIMPLE_ASYNC_RESULT)) -#define G_IS_SIMPLE_ASYNC_RESULT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SIMPLE_ASYNC_RESULT)) -#define G_SIMPLE_ASYNC_RESULT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResultClass)) - -/** - * GSimpleAsyncResult: - * - * A simple implementation of #GAsyncResult. - **/ -typedef struct _GSimpleAsyncResultClass GSimpleAsyncResultClass; - - -GType g_simple_async_result_get_type (void) G_GNUC_CONST; - -GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - gpointer source_tag); -GSimpleAsyncResult *g_simple_async_result_new_error (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - GQuark domain, - gint code, - const char *format, - ...) G_GNUC_PRINTF (6, 7); -GSimpleAsyncResult *g_simple_async_result_new_from_error (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - const GError *error); -GSimpleAsyncResult *g_simple_async_result_new_take_error (GObject *source_object, - GAsyncReadyCallback callback, - gpointer user_data, - GError *error); - -void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, - gpointer op_res, - GDestroyNotify destroy_op_res); -gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); - -void g_simple_async_result_set_op_res_gssize (GSimpleAsyncResult *simple, - gssize op_res); -gssize g_simple_async_result_get_op_res_gssize (GSimpleAsyncResult *simple); - -void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, - gboolean op_res); -gboolean g_simple_async_result_get_op_res_gboolean (GSimpleAsyncResult *simple); - - - -GLIB_AVAILABLE_IN_2_32 -void g_simple_async_result_set_check_cancellable (GSimpleAsyncResult *simple, - GCancellable *check_cancellable); -gpointer g_simple_async_result_get_source_tag (GSimpleAsyncResult *simple); -void g_simple_async_result_set_handle_cancellation (GSimpleAsyncResult *simple, - gboolean handle_cancellation); -void g_simple_async_result_complete (GSimpleAsyncResult *simple); -void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); -void g_simple_async_result_run_in_thread (GSimpleAsyncResult *simple, - GSimpleAsyncThreadFunc func, - int io_priority, - GCancellable *cancellable); -void g_simple_async_result_set_from_error (GSimpleAsyncResult *simple, - const GError *error); -void g_simple_async_result_take_error (GSimpleAsyncResult *simple, - GError *error); -gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, - GError **dest); -void g_simple_async_result_set_error (GSimpleAsyncResult *simple, - GQuark domain, - gint code, - const char *format, - ...) G_GNUC_PRINTF (4, 5); -void g_simple_async_result_set_error_va (GSimpleAsyncResult *simple, - GQuark domain, - gint code, - const char *format, - va_list args); -gboolean g_simple_async_result_is_valid (GAsyncResult *result, - GObject *source, - gpointer source_tag); - -void g_simple_async_report_error_in_idle (GObject *object, - GAsyncReadyCallback callback, - gpointer user_data, - GQuark domain, - gint code, - const char *format, - ...); -void g_simple_async_report_gerror_in_idle (GObject *object, - GAsyncReadyCallback callback, - gpointer user_data, - const GError *error); -void g_simple_async_report_take_gerror_in_idle (GObject *object, - GAsyncReadyCallback callback, - gpointer user_data, - GError *error); - -G_END_DECLS - - - -#endif /* __G_SIMPLE_ASYNC_RESULT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsimplepermission.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsimplepermission.h deleted file mode 100644 index 367fe895..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsimplepermission.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIMPLE_PERMISSION_H__ -#define __G_SIMPLE_PERMISSION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SIMPLE_PERMISSION (g_simple_permission_get_type ()) -#define G_SIMPLE_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SIMPLE_PERMISSION, \ - GSimplePermission)) -#define G_IS_SIMPLE_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SIMPLE_PERMISSION)) - -GType g_simple_permission_get_type (void); -GPermission * g_simple_permission_new (gboolean allowed); - -G_END_DECLS - -#endif /* __G_SIMPLE_PERMISSION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocket.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocket.h deleted file mode 100644 index 29ba44f3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocket.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima - * Copyright © 2009 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - * Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_H__ -#define __G_SOCKET_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET (g_socket_get_type ()) -#define G_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET, GSocket)) -#define G_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET, GSocketClass)) -#define G_IS_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET)) -#define G_IS_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET)) -#define G_SOCKET_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET, GSocketClass)) - -typedef struct _GSocketPrivate GSocketPrivate; -typedef struct _GSocketClass GSocketClass; - -struct _GSocketClass -{ - GObjectClass parent_class; - - /*< private >*/ - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); - void (*_g_reserved8) (void); - void (*_g_reserved9) (void); - void (*_g_reserved10) (void); -}; - -struct _GSocket -{ - GObject parent_instance; - GSocketPrivate *priv; -}; - -GType g_socket_get_type (void) G_GNUC_CONST; -GSocket * g_socket_new (GSocketFamily family, - GSocketType type, - GSocketProtocol protocol, - GError **error); -GSocket * g_socket_new_from_fd (gint fd, - GError **error); -int g_socket_get_fd (GSocket *socket); -GSocketFamily g_socket_get_family (GSocket *socket); -GSocketType g_socket_get_socket_type (GSocket *socket); -GSocketProtocol g_socket_get_protocol (GSocket *socket); -GSocketAddress * g_socket_get_local_address (GSocket *socket, - GError **error); -GSocketAddress * g_socket_get_remote_address (GSocket *socket, - GError **error); -void g_socket_set_blocking (GSocket *socket, - gboolean blocking); -gboolean g_socket_get_blocking (GSocket *socket); -void g_socket_set_keepalive (GSocket *socket, - gboolean keepalive); -gboolean g_socket_get_keepalive (GSocket *socket); -gint g_socket_get_listen_backlog (GSocket *socket); -void g_socket_set_listen_backlog (GSocket *socket, - gint backlog); -guint g_socket_get_timeout (GSocket *socket); -void g_socket_set_timeout (GSocket *socket, - guint timeout); - -GLIB_AVAILABLE_IN_2_32 -guint g_socket_get_ttl (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_ttl (GSocket *socket, - guint ttl); - -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_get_broadcast (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_broadcast (GSocket *socket, - gboolean broadcast); - -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_get_multicast_loopback (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_multicast_loopback (GSocket *socket, - gboolean loopback); -GLIB_AVAILABLE_IN_2_32 -guint g_socket_get_multicast_ttl (GSocket *socket); -GLIB_AVAILABLE_IN_2_32 -void g_socket_set_multicast_ttl (GSocket *socket, - guint ttl); -gboolean g_socket_is_connected (GSocket *socket); -gboolean g_socket_bind (GSocket *socket, - GSocketAddress *address, - gboolean allow_reuse, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_join_multicast_group (GSocket *socket, - GInetAddress *group, - gboolean source_specific, - const gchar *iface, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_leave_multicast_group (GSocket *socket, - GInetAddress *group, - gboolean source_specific, - const gchar *iface, - GError **error); -gboolean g_socket_connect (GSocket *socket, - GSocketAddress *address, - GCancellable *cancellable, - GError **error); -gboolean g_socket_check_connect_result (GSocket *socket, - GError **error); - -gssize g_socket_get_available_bytes (GSocket *socket); - -GIOCondition g_socket_condition_check (GSocket *socket, - GIOCondition condition); -gboolean g_socket_condition_wait (GSocket *socket, - GIOCondition condition, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_condition_timed_wait (GSocket *socket, - GIOCondition condition, - gint64 timeout, - GCancellable *cancellable, - GError **error); -GSocket * g_socket_accept (GSocket *socket, - GCancellable *cancellable, - GError **error); -gboolean g_socket_listen (GSocket *socket, - GError **error); -gssize g_socket_receive (GSocket *socket, - gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_receive_from (GSocket *socket, - GSocketAddress **address, - gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_send (GSocket *socket, - const gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_send_to (GSocket *socket, - GSocketAddress *address, - const gchar *buffer, - gsize size, - GCancellable *cancellable, - GError **error); -gssize g_socket_receive_message (GSocket *socket, - GSocketAddress **address, - GInputVector *vectors, - gint num_vectors, - GSocketControlMessage ***messages, - gint *num_messages, - gint *flags, - GCancellable *cancellable, - GError **error); -gssize g_socket_send_message (GSocket *socket, - GSocketAddress *address, - GOutputVector *vectors, - gint num_vectors, - GSocketControlMessage **messages, - gint num_messages, - gint flags, - GCancellable *cancellable, - GError **error); -gboolean g_socket_close (GSocket *socket, - GError **error); -gboolean g_socket_shutdown (GSocket *socket, - gboolean shutdown_read, - gboolean shutdown_write, - GError **error); -gboolean g_socket_is_closed (GSocket *socket); -GSource * g_socket_create_source (GSocket *socket, - GIOCondition condition, - GCancellable *cancellable); -gboolean g_socket_speaks_ipv4 (GSocket *socket); -GCredentials *g_socket_get_credentials (GSocket *socket, - GError **error); - -gssize g_socket_receive_with_blocking (GSocket *socket, - gchar *buffer, - gsize size, - gboolean blocking, - GCancellable *cancellable, - GError **error); -gssize g_socket_send_with_blocking (GSocket *socket, - const gchar *buffer, - gsize size, - gboolean blocking, - GCancellable *cancellable, - GError **error); - -G_END_DECLS - -#endif /* __G_SOCKET_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddress.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddress.h deleted file mode 100644 index 356e2b05..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddress.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Christian Kellner, Samuel Cormier-Iijima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_ADDRESS_H__ -#define __G_SOCKET_ADDRESS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_ADDRESS (g_socket_address_get_type ()) -#define G_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SOCKET_ADDRESS, GSocketAddress)) -#define G_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SOCKET_ADDRESS, GSocketAddressClass)) -#define G_IS_SOCKET_ADDRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SOCKET_ADDRESS)) -#define G_IS_SOCKET_ADDRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SOCKET_ADDRESS)) -#define G_SOCKET_ADDRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SOCKET_ADDRESS, GSocketAddressClass)) - -typedef struct _GSocketAddressClass GSocketAddressClass; - -struct _GSocketAddress -{ - GObject parent_instance; -}; - -struct _GSocketAddressClass -{ - GObjectClass parent_class; - - GSocketFamily (*get_family) (GSocketAddress *address); - - gssize (*get_native_size) (GSocketAddress *address); - - gboolean (*to_native) (GSocketAddress *address, - gpointer dest, - gsize destlen, - GError **error); -}; - -GType g_socket_address_get_type (void) G_GNUC_CONST; - -GSocketFamily g_socket_address_get_family (GSocketAddress *address); - -GSocketAddress * g_socket_address_new_from_native (gpointer native, - gsize len); - -gboolean g_socket_address_to_native (GSocketAddress *address, - gpointer dest, - gsize destlen, - GError **error); - -gssize g_socket_address_get_native_size (GSocketAddress *address); - -G_END_DECLS - -#endif /* __G_SOCKET_ADDRESS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddressenumerator.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddressenumerator.h deleted file mode 100644 index c69be2f3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketaddressenumerator.h +++ /dev/null @@ -1,89 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_ADDRESS_ENUMERATOR_H__ -#define __G_SOCKET_ADDRESS_ENUMERATOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_ADDRESS_ENUMERATOR (g_socket_address_enumerator_get_type ()) -#define G_SOCKET_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SOCKET_ADDRESS_ENUMERATOR, GSocketAddressEnumerator)) -#define G_SOCKET_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SOCKET_ADDRESS_ENUMERATOR, GSocketAddressEnumeratorClass)) -#define G_IS_SOCKET_ADDRESS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SOCKET_ADDRESS_ENUMERATOR)) -#define G_IS_SOCKET_ADDRESS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SOCKET_ADDRESS_ENUMERATOR)) -#define G_SOCKET_ADDRESS_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SOCKET_ADDRESS_ENUMERATOR, GSocketAddressEnumeratorClass)) - -/** - * GSocketAddressEnumerator: - * - * Enumerator type for objects that contain or generate - * #GSocketAddresses. - */ -typedef struct _GSocketAddressEnumeratorClass GSocketAddressEnumeratorClass; - -struct _GSocketAddressEnumerator -{ - GObject parent_instance; - -}; - -struct _GSocketAddressEnumeratorClass -{ - GObjectClass parent_class; - - /* Virtual Table */ - - GSocketAddress * (* next) (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - - void (* next_async) (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - GSocketAddress * (* next_finish) (GSocketAddressEnumerator *enumerator, - GAsyncResult *result, - GError **error); -}; - -GType g_socket_address_enumerator_get_type (void) G_GNUC_CONST; - -GSocketAddress *g_socket_address_enumerator_next (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GError **error); - -void g_socket_address_enumerator_next_async (GSocketAddressEnumerator *enumerator, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketAddress *g_socket_address_enumerator_next_finish (GSocketAddressEnumerator *enumerator, - GAsyncResult *result, - GError **error); - -G_END_DECLS - - -#endif /* __G_SOCKET_ADDRESS_ENUMERATOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketclient.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketclient.h deleted file mode 100644 index 216310b4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketclient.h +++ /dev/null @@ -1,163 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008, 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CLIENT_H__ -#define __G_SOCKET_CLIENT_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CLIENT (g_socket_client_get_type ()) -#define G_SOCKET_CLIENT(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_CLIENT, GSocketClient)) -#define G_SOCKET_CLIENT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_CLIENT, GSocketClientClass)) -#define G_IS_SOCKET_CLIENT(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_CLIENT)) -#define G_IS_SOCKET_CLIENT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_CLIENT)) -#define G_SOCKET_CLIENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_CLIENT, GSocketClientClass)) - -typedef struct _GSocketClientPrivate GSocketClientPrivate; -typedef struct _GSocketClientClass GSocketClientClass; - -struct _GSocketClientClass -{ - GObjectClass parent_class; - - void (* event) (GSocketClient *client, - GSocketClientEvent event, - GSocketConnectable *connectable, - GIOStream *connection); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); -}; - -struct _GSocketClient -{ - GObject parent_instance; - GSocketClientPrivate *priv; -}; - -GType g_socket_client_get_type (void) G_GNUC_CONST; - -GSocketClient *g_socket_client_new (void); - -GSocketFamily g_socket_client_get_family (GSocketClient *client); -void g_socket_client_set_family (GSocketClient *client, - GSocketFamily family); -GSocketType g_socket_client_get_socket_type (GSocketClient *client); -void g_socket_client_set_socket_type (GSocketClient *client, - GSocketType type); -GSocketProtocol g_socket_client_get_protocol (GSocketClient *client); -void g_socket_client_set_protocol (GSocketClient *client, - GSocketProtocol protocol); -GSocketAddress *g_socket_client_get_local_address (GSocketClient *client); -void g_socket_client_set_local_address (GSocketClient *client, - GSocketAddress *address); -guint g_socket_client_get_timeout (GSocketClient *client); -void g_socket_client_set_timeout (GSocketClient *client, - guint timeout); -gboolean g_socket_client_get_enable_proxy (GSocketClient *client); -void g_socket_client_set_enable_proxy (GSocketClient *client, - gboolean enable); - -gboolean g_socket_client_get_tls (GSocketClient *client); -void g_socket_client_set_tls (GSocketClient *client, - gboolean tls); -GTlsCertificateFlags g_socket_client_get_tls_validation_flags (GSocketClient *client); -void g_socket_client_set_tls_validation_flags (GSocketClient *client, - GTlsCertificateFlags flags); - -GSocketConnection * g_socket_client_connect (GSocketClient *client, - GSocketConnectable *connectable, - GCancellable *cancellable, - GError **error); -GSocketConnection * g_socket_client_connect_to_host (GSocketClient *client, - const gchar *host_and_port, - guint16 default_port, - GCancellable *cancellable, - GError **error); -GSocketConnection * g_socket_client_connect_to_service (GSocketClient *client, - const gchar *domain, - const gchar *service, - GCancellable *cancellable, - GError **error); -GSocketConnection * g_socket_client_connect_to_uri (GSocketClient *client, - const gchar *uri, - guint16 default_port, - GCancellable *cancellable, - GError **error); -void g_socket_client_connect_async (GSocketClient *client, - GSocketConnectable *connectable, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); -void g_socket_client_connect_to_host_async (GSocketClient *client, - const gchar *host_and_port, - guint16 default_port, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_to_host_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); - -void g_socket_client_connect_to_service_async (GSocketClient *client, - const gchar *domain, - const gchar *service, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_to_service_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); -void g_socket_client_connect_to_uri_async (GSocketClient *client, - const gchar *uri, - guint16 default_port, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocketConnection * g_socket_client_connect_to_uri_finish (GSocketClient *client, - GAsyncResult *result, - GError **error); -void g_socket_client_add_application_proxy (GSocketClient *client, - const gchar *protocol); - -G_END_DECLS - -#endif /* __G_SOCKET_CLIENT_H___ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnectable.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnectable.h deleted file mode 100644 index 0f84a4ae..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnectable.h +++ /dev/null @@ -1,74 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CONNECTABLE_H__ -#define __G_SOCKET_CONNECTABLE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CONNECTABLE (g_socket_connectable_get_type ()) -#define G_SOCKET_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_SOCKET_CONNECTABLE, GSocketConnectable)) -#define G_IS_SOCKET_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_SOCKET_CONNECTABLE)) -#define G_SOCKET_CONNECTABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_SOCKET_CONNECTABLE, GSocketConnectableIface)) - -/** - * GSocketConnectable: - * - * Interface for objects that contain or generate #GSocketAddresses. - */ -typedef struct _GSocketConnectableIface GSocketConnectableIface; - -/** - * GSocketConnectableIface: - * @g_iface: The parent interface. - * @enumerate: Creates a #GSocketAddressEnumerator - * @proxy_enumerate: Creates a #GProxyAddressEnumerator - * - * Provides an interface for returning a #GSocketAddressEnumerator - * and #GProxyAddressEnumerator - */ -struct _GSocketConnectableIface -{ - GTypeInterface g_iface; - - /* Virtual Table */ - - GSocketAddressEnumerator * (* enumerate) (GSocketConnectable *connectable); - - GSocketAddressEnumerator * (* proxy_enumerate) (GSocketConnectable *connectable); - -}; - -GType g_socket_connectable_get_type (void) G_GNUC_CONST; - -GSocketAddressEnumerator *g_socket_connectable_enumerate (GSocketConnectable *connectable); - -GSocketAddressEnumerator *g_socket_connectable_proxy_enumerate (GSocketConnectable *connectable); - -G_END_DECLS - - -#endif /* __G_SOCKET_CONNECTABLE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnection.h deleted file mode 100644 index 0daa5f35..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketconnection.h +++ /dev/null @@ -1,110 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima - * Copyright © 2009 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - * Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CONNECTION_H__ -#define __G_SOCKET_CONNECTION_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CONNECTION (g_socket_connection_get_type ()) -#define G_SOCKET_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_CONNECTION, GSocketConnection)) -#define G_SOCKET_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_CONNECTION, GSocketConnectionClass)) -#define G_IS_SOCKET_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_CONNECTION)) -#define G_IS_SOCKET_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_CONNECTION)) -#define G_SOCKET_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_CONNECTION, GSocketConnectionClass)) - -typedef struct _GSocketConnectionPrivate GSocketConnectionPrivate; -typedef struct _GSocketConnectionClass GSocketConnectionClass; - -struct _GSocketConnectionClass -{ - GIOStreamClass parent_class; - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -struct _GSocketConnection -{ - GIOStream parent_instance; - GSocketConnectionPrivate *priv; -}; - -GType g_socket_connection_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_connection_is_connected (GSocketConnection *connection); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_connection_connect (GSocketConnection *connection, - GSocketAddress *address, - GCancellable *cancellable, - GError **error); -GLIB_AVAILABLE_IN_2_32 -void g_socket_connection_connect_async (GSocketConnection *connection, - GSocketAddress *address, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GLIB_AVAILABLE_IN_2_32 -gboolean g_socket_connection_connect_finish (GSocketConnection *connection, - GAsyncResult *result, - GError **error); - -GSocket *g_socket_connection_get_socket (GSocketConnection *connection); -GSocketAddress *g_socket_connection_get_local_address (GSocketConnection *connection, - GError **error); -GSocketAddress *g_socket_connection_get_remote_address (GSocketConnection *connection, - GError **error); - -void g_socket_connection_factory_register_type (GType g_type, - GSocketFamily family, - GSocketType type, - gint protocol); -GType g_socket_connection_factory_lookup_type (GSocketFamily family, - GSocketType type, - gint protocol_id); -GSocketConnection *g_socket_connection_factory_create_connection (GSocket *socket); - -G_END_DECLS - -#endif /* __G_SOCKET_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketcontrolmessage.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketcontrolmessage.h deleted file mode 100644 index 6af300c1..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketcontrolmessage.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2009 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_CONTROL_MESSAGE_H__ -#define __G_SOCKET_CONTROL_MESSAGE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_CONTROL_MESSAGE (g_socket_control_message_get_type ()) -#define G_SOCKET_CONTROL_MESSAGE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_CONTROL_MESSAGE, \ - GSocketControlMessage)) -#define G_SOCKET_CONTROL_MESSAGE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_CONTROL_MESSAGE, \ - GSocketControlMessageClass)) -#define G_IS_SOCKET_CONTROL_MESSAGE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_CONTROL_MESSAGE)) -#define G_IS_SOCKET_CONTROL_MESSAGE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_CONTROL_MESSAGE)) -#define G_SOCKET_CONTROL_MESSAGE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_CONTROL_MESSAGE, \ - GSocketControlMessageClass)) - -typedef struct _GSocketControlMessagePrivate GSocketControlMessagePrivate; -typedef struct _GSocketControlMessageClass GSocketControlMessageClass; - -/** - * GSocketControlMessageClass: - * @get_size: gets the size of the message. - * @get_level: gets the protocol of the message. - * @get_type: gets the protocol specific type of the message. - * @serialize: Writes out the message data. - * @deserialize: Tries to deserialize a message. - **/ - -struct _GSocketControlMessageClass -{ - GObjectClass parent_class; - - gsize (* get_size) (GSocketControlMessage *message); - int (* get_level) (GSocketControlMessage *message); - int (* get_type) (GSocketControlMessage *message); - void (* serialize) (GSocketControlMessage *message, - gpointer data); - GSocketControlMessage *(* deserialize) (int level, - int type, - gsize size, - gpointer data); - - /*< private >*/ - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -struct _GSocketControlMessage -{ - GObject parent_instance; - GSocketControlMessagePrivate *priv; -}; - -GType g_socket_control_message_get_type (void) G_GNUC_CONST; -gsize g_socket_control_message_get_size (GSocketControlMessage *message); -int g_socket_control_message_get_level (GSocketControlMessage *message); -int g_socket_control_message_get_msg_type (GSocketControlMessage *message); -void g_socket_control_message_serialize (GSocketControlMessage *message, - gpointer data); -GSocketControlMessage *g_socket_control_message_deserialize (int level, - int type, - gsize size, - gpointer data); - - -G_END_DECLS - -#endif /* __G_SOCKET_CONTROL_MESSAGE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketlistener.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketlistener.h deleted file mode 100644 index da09a784..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketlistener.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima - * Copyright © 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Christian Kellner - * Samuel Cormier-Iijima - * Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_LISTENER_H__ -#define __G_SOCKET_LISTENER_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_LISTENER (g_socket_listener_get_type ()) -#define G_SOCKET_LISTENER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_LISTENER, GSocketListener)) -#define G_SOCKET_LISTENER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_LISTENER, GSocketListenerClass)) -#define G_IS_SOCKET_LISTENER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_LISTENER)) -#define G_IS_SOCKET_LISTENER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_LISTENER)) -#define G_SOCKET_LISTENER_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_LISTENER, GSocketListenerClass)) - -typedef struct _GSocketListenerPrivate GSocketListenerPrivate; -typedef struct _GSocketListenerClass GSocketListenerClass; - -/** - * GSocketListenerClass: - * @changed: virtual method called when the set of socket listened to changes - **/ -struct _GSocketListenerClass -{ - GObjectClass parent_class; - - void (* changed) (GSocketListener *listener); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -struct _GSocketListener -{ - GObject parent_instance; - GSocketListenerPrivate *priv; -}; - -GType g_socket_listener_get_type (void) G_GNUC_CONST; - -GSocketListener * g_socket_listener_new (void); - -void g_socket_listener_set_backlog (GSocketListener *listener, - int listen_backlog); - -gboolean g_socket_listener_add_socket (GSocketListener *listener, - GSocket *socket, - GObject *source_object, - GError **error); -gboolean g_socket_listener_add_address (GSocketListener *listener, - GSocketAddress *address, - GSocketType type, - GSocketProtocol protocol, - GObject *source_object, - GSocketAddress **effective_address, - GError **error); -gboolean g_socket_listener_add_inet_port (GSocketListener *listener, - guint16 port, - GObject *source_object, - GError **error); -guint16 g_socket_listener_add_any_inet_port (GSocketListener *listener, - GObject *source_object, - GError **error); - -GSocket * g_socket_listener_accept_socket (GSocketListener *listener, - GObject **source_object, - GCancellable *cancellable, - GError **error); -void g_socket_listener_accept_socket_async (GSocketListener *listener, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GSocket * g_socket_listener_accept_socket_finish (GSocketListener *listener, - GAsyncResult *result, - GObject **source_object, - GError **error); - - -GSocketConnection * g_socket_listener_accept (GSocketListener *listener, - GObject **source_object, - GCancellable *cancellable, - GError **error); - -void g_socket_listener_accept_async (GSocketListener *listener, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GSocketConnection * g_socket_listener_accept_finish (GSocketListener *listener, - GAsyncResult *result, - GObject **source_object, - GError **error); - -void g_socket_listener_close (GSocketListener *listener); - -G_END_DECLS - -#endif /* __G_SOCKET_LISTENER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketservice.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsocketservice.h deleted file mode 100644 index 27cc0a26..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsocketservice.h +++ /dev/null @@ -1,88 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOCKET_SERVICE_H__ -#define __G_SOCKET_SERVICE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_SOCKET_SERVICE (g_socket_service_get_type ()) -#define G_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_SOCKET_SERVICE, GSocketService)) -#define G_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_SOCKET_SERVICE, GSocketServiceClass)) -#define G_IS_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_SOCKET_SERVICE)) -#define G_IS_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_SOCKET_SERVICE)) -#define G_SOCKET_SERVICE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_SOCKET_SERVICE, GSocketServiceClass)) - -typedef struct _GSocketServicePrivate GSocketServicePrivate; -typedef struct _GSocketServiceClass GSocketServiceClass; - -/** - * GSocketServiceClass: - * @incomming: signal emitted when new connections are accepted - */ -struct _GSocketServiceClass -{ - GSocketListenerClass parent_class; - - gboolean (* incoming) (GSocketService *service, - GSocketConnection *connection, - GObject *source_object); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -struct _GSocketService -{ - GSocketListener parent_instance; - GSocketServicePrivate *priv; -}; - -GType g_socket_service_get_type (void); - -GSocketService *g_socket_service_new (void); -void g_socket_service_start (GSocketService *service); -void g_socket_service_stop (GSocketService *service); -gboolean g_socket_service_is_active (GSocketService *service); - - -G_END_DECLS - -#endif /* __G_SOCKET_SERVICE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gsrvtarget.h b/GstreamerHelper/x86/include/glib-2.0/gio/gsrvtarget.h deleted file mode 100644 index 67ce2a9e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gsrvtarget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SRV_TARGET_H__ -#define __G_SRV_TARGET_H__ - -#include - -G_BEGIN_DECLS - -GType g_srv_target_get_type (void) G_GNUC_CONST; -#define G_TYPE_SRV_TARGET (g_srv_target_get_type ()) - -GSrvTarget *g_srv_target_new (const gchar *hostname, - guint16 port, - guint16 priority, - guint16 weight); -GSrvTarget *g_srv_target_copy (GSrvTarget *target); -void g_srv_target_free (GSrvTarget *target); - -const gchar *g_srv_target_get_hostname (GSrvTarget *target); -guint16 g_srv_target_get_port (GSrvTarget *target); -guint16 g_srv_target_get_priority (GSrvTarget *target); -guint16 g_srv_target_get_weight (GSrvTarget *target); - -GList *g_srv_target_list_sort (GList *targets); - -G_END_DECLS - -#endif /* __G_SRV_TARGET_H__ */ - diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtcpconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtcpconnection.h deleted file mode 100644 index 3928825a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtcpconnection.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2008, 2009 Codethink Limited - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TCP_CONNECTION_H__ -#define __G_TCP_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TCP_CONNECTION (g_tcp_connection_get_type ()) -#define G_TCP_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_TCP_CONNECTION, GTcpConnection)) -#define G_TCP_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_TCP_CONNECTION, GTcpConnectionClass)) -#define G_IS_TCP_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_TCP_CONNECTION)) -#define G_IS_TCP_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_TCP_CONNECTION)) -#define G_TCP_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_TCP_CONNECTION, GTcpConnectionClass)) - -typedef struct _GTcpConnectionPrivate GTcpConnectionPrivate; -typedef struct _GTcpConnectionClass GTcpConnectionClass; - -struct _GTcpConnectionClass -{ - GSocketConnectionClass parent_class; -}; - -struct _GTcpConnection -{ - GSocketConnection parent_instance; - GTcpConnectionPrivate *priv; -}; - -GType g_tcp_connection_get_type (void) G_GNUC_CONST; - -void g_tcp_connection_set_graceful_disconnect (GTcpConnection *connection, - gboolean graceful_disconnect); -gboolean g_tcp_connection_get_graceful_disconnect (GTcpConnection *connection); - -G_END_DECLS - -#endif /* __G_TCP_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtcpwrapperconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtcpwrapperconnection.h deleted file mode 100644 index 01d3a03a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtcpwrapperconnection.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * Copyright © 2010 Collabora Ltd. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Nicolas Dufresne - * - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TCP_WRAPPER_CONNECTION_H__ -#define __G_TCP_WRAPPER_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TCP_WRAPPER_CONNECTION (g_tcp_wrapper_connection_get_type ()) -#define G_TCP_WRAPPER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_TCP_WRAPPER_CONNECTION, GTcpWrapperConnection)) -#define G_TCP_WRAPPER_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_TCP_WRAPPER_CONNECTION, GTcpWrapperConnectionClass)) -#define G_IS_TCP_WRAPPER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_TCP_WRAPPER_CONNECTION)) -#define G_IS_TCP_WRAPPER_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_TCP_WRAPPER_CONNECTION)) -#define G_TCP_WRAPPER_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_TCP_WRAPPER_CONNECTION, GTcpWrapperConnectionClass)) - -typedef struct _GTcpWrapperConnectionPrivate GTcpWrapperConnectionPrivate; -typedef struct _GTcpWrapperConnectionClass GTcpWrapperConnectionClass; - -struct _GTcpWrapperConnectionClass -{ - GTcpConnectionClass parent_class; -}; - -struct _GTcpWrapperConnection -{ - GTcpConnection parent_instance; - GTcpWrapperConnectionPrivate *priv; -}; - -GType g_tcp_wrapper_connection_get_type (void) G_GNUC_CONST; - -GSocketConnection *g_tcp_wrapper_connection_new (GIOStream *base_io_stream, - GSocket *socket); -GIOStream *g_tcp_wrapper_connection_get_base_io_stream (GTcpWrapperConnection *conn); - -G_END_DECLS - -#endif /* __G_TCP_WRAPPER_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtestdbus.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtestdbus.h deleted file mode 100644 index 0fd281b4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtestdbus.h +++ /dev/null @@ -1,74 +0,0 @@ -/* GIO testing utilities - * - * Copyright (C) 2008-2010 Red Hat, Inc. - * Copyright (C) 2012 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: David Zeuthen - * Xavier Claessens - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TEST_DBUS_H__ -#define __G_TEST_DBUS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TEST_DBUS \ - (g_test_dbus_get_type ()) -#define G_TEST_DBUS(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_TEST_DBUS, \ - GTestDBus)) -#define G_IS_TEST_DBUS(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_TEST_DBUS)) - -GLIB_AVAILABLE_IN_2_34 -GType g_test_dbus_get_type (void) G_GNUC_CONST; - -GLIB_AVAILABLE_IN_2_34 -GTestDBus * g_test_dbus_new (GTestDBusFlags flags); - -GLIB_AVAILABLE_IN_2_34 -GTestDBusFlags g_test_dbus_get_flags (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -const gchar * g_test_dbus_get_bus_address (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_add_service_dir (GTestDBus *self, - const gchar *path); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_up (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_stop (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_down (GTestDBus *self); - -GLIB_AVAILABLE_IN_2_34 -void g_test_dbus_unset (void); - -G_END_DECLS - -#endif /* __G_TEST_DBUS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gthemedicon.h b/GstreamerHelper/x86/include/glib-2.0/gio/gthemedicon.h deleted file mode 100644 index b0085e68..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gthemedicon.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THEMED_ICON_H__ -#define __G_THEMED_ICON_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_THEMED_ICON (g_themed_icon_get_type ()) -#define G_THEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_THEMED_ICON, GThemedIcon)) -#define G_THEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_THEMED_ICON, GThemedIconClass)) -#define G_IS_THEMED_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_THEMED_ICON)) -#define G_IS_THEMED_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_THEMED_ICON)) -#define G_THEMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_THEMED_ICON, GThemedIconClass)) - -/** - * GThemedIcon: - * - * An implementation of #GIcon for themed icons. - **/ -typedef struct _GThemedIconClass GThemedIconClass; - -GType g_themed_icon_get_type (void) G_GNUC_CONST; - -GIcon *g_themed_icon_new (const char *iconname); -GIcon *g_themed_icon_new_with_default_fallbacks (const char *iconname); -GIcon *g_themed_icon_new_from_names (char **iconnames, - int len); -void g_themed_icon_prepend_name (GThemedIcon *icon, - const char *iconname); -void g_themed_icon_append_name (GThemedIcon *icon, - const char *iconname); - -const gchar* const * g_themed_icon_get_names (GThemedIcon *icon); - -G_END_DECLS - -#endif /* __G_THEMED_ICON_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gthreadedsocketservice.h b/GstreamerHelper/x86/include/glib-2.0/gio/gthreadedsocketservice.h deleted file mode 100644 index f9470907..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gthreadedsocketservice.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2009 Codethink Limited - * Copyright © 2009 Red Hat, Inc - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: Ryan Lortie - * Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THREADED_SOCKET_SERVICE_H__ -#define __G_THREADED_SOCKET_SERVICE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_THREADED_SOCKET_SERVICE (g_threaded_socket_service_get_type ()) -#define G_THREADED_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ - G_TYPE_THREADED_SOCKET_SERVICE, \ - GThreadedSocketService)) -#define G_THREADED_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ - G_TYPE_THREADED_SOCKET_SERVICE, \ - GThreadedSocketServiceClass)) -#define G_IS_THREADED_SOCKET_SERVICE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ - G_TYPE_THREADED_SOCKET_SERVICE)) -#define G_IS_THREADED_SOCKET_SERVICE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ - G_TYPE_THREADED_SOCKET_SERVICE)) -#define G_THREADED_SOCKET_SERVICE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - G_TYPE_THREADED_SOCKET_SERVICE, \ - GThreadedSocketServiceClass)) - -typedef struct _GThreadedSocketServicePrivate GThreadedSocketServicePrivate; -typedef struct _GThreadedSocketServiceClass GThreadedSocketServiceClass; - -struct _GThreadedSocketServiceClass -{ - GSocketServiceClass parent_class; - - gboolean (* run) (GThreadedSocketService *service, - GSocketConnection *connection, - GObject *source_object); - - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -struct _GThreadedSocketService -{ - GSocketService parent_instance; - GThreadedSocketServicePrivate *priv; -}; - -GType g_threaded_socket_service_get_type (void); -GSocketService * g_threaded_socket_service_new (int max_threads); - -G_END_DECLS - -#endif /* __G_THREADED_SOCKET_SERVICE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsbackend.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsbackend.h deleted file mode 100644 index 389b5d77..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsbackend.h +++ /dev/null @@ -1,90 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_BACKEND_H__ -#define __G_TLS_BACKEND_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TLS_BACKEND_EXTENSION_POINT_NAME: - * - * Extension point for TLS functionality via #GTlsBackend. - * See Extending GIO. - */ -#define G_TLS_BACKEND_EXTENSION_POINT_NAME "gio-tls-backend" - -#define G_TYPE_TLS_BACKEND (g_tls_backend_get_type ()) -#define G_TLS_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_TLS_BACKEND, GTlsBackend)) -#define G_IS_TLS_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_TLS_BACKEND)) -#define G_TLS_BACKEND_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_TLS_BACKEND, GTlsBackendInterface)) - -typedef struct _GTlsBackend GTlsBackend; -typedef struct _GTlsBackendInterface GTlsBackendInterface; - -/** - * GTlsBackendInterface: - * @g_iface: The parent interface. - * @supports_tls: returns whether the backend supports TLS. - * @get_default_database: returns a default #GTlsDatabase instance. - * @get_certificate_type: returns the #GTlsCertificate implementation type - * @get_client_connection_type: returns the #GTlsClientConnection implementation type - * @get_server_connection_type: returns the #GTlsServerConnection implementation type - * @get_file_database_type: returns the #GTlsFileDatabase implementation type. - * - * Provides an interface for describing TLS-related types. - * - * Since: 2.28 - */ -struct _GTlsBackendInterface -{ - GTypeInterface g_iface; - - /* methods */ - gboolean ( *supports_tls) (GTlsBackend *backend); - GType ( *get_certificate_type) (void); - GType ( *get_client_connection_type) (void); - GType ( *get_server_connection_type) (void); - GType ( *get_file_database_type) (void); - GTlsDatabase * ( *get_default_database) (GTlsBackend *backend); -}; - -GType g_tls_backend_get_type (void) G_GNUC_CONST; - -GTlsBackend * g_tls_backend_get_default (void); - -GTlsDatabase * g_tls_backend_get_default_database (GTlsBackend *backend); - -gboolean g_tls_backend_supports_tls (GTlsBackend *backend); - -GType g_tls_backend_get_certificate_type (GTlsBackend *backend); -GType g_tls_backend_get_client_connection_type (GTlsBackend *backend); -GType g_tls_backend_get_server_connection_type (GTlsBackend *backend); -GType g_tls_backend_get_file_database_type (GTlsBackend *backend); - -G_END_DECLS - -#endif /* __G_TLS_BACKEND_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlscertificate.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlscertificate.h deleted file mode 100644 index 991eb1d4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlscertificate.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_CERTIFICATE_H__ -#define __G_TLS_CERTIFICATE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_CERTIFICATE (g_tls_certificate_get_type ()) -#define G_TLS_CERTIFICATE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CERTIFICATE, GTlsCertificate)) -#define G_TLS_CERTIFICATE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_CERTIFICATE, GTlsCertificateClass)) -#define G_IS_TLS_CERTIFICATE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CERTIFICATE)) -#define G_IS_TLS_CERTIFICATE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_CERTIFICATE)) -#define G_TLS_CERTIFICATE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_CERTIFICATE, GTlsCertificateClass)) - -typedef struct _GTlsCertificateClass GTlsCertificateClass; -typedef struct _GTlsCertificatePrivate GTlsCertificatePrivate; - -struct _GTlsCertificate { - GObject parent_instance; - - GTlsCertificatePrivate *priv; -}; - -struct _GTlsCertificateClass -{ - GObjectClass parent_class; - - GTlsCertificateFlags (* verify) (GTlsCertificate *cert, - GSocketConnectable *identity, - GTlsCertificate *trusted_ca); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[8]; -}; - -GType g_tls_certificate_get_type (void) G_GNUC_CONST; - -GTlsCertificate *g_tls_certificate_new_from_pem (const gchar *data, - gssize length, - GError **error); - -GTlsCertificate *g_tls_certificate_new_from_file (const gchar *file, - GError **error); -GTlsCertificate *g_tls_certificate_new_from_files (const gchar *cert_file, - const gchar *key_file, - GError **error); -GList *g_tls_certificate_list_new_from_file (const gchar *file, - GError **error); - -GTlsCertificate *g_tls_certificate_get_issuer (GTlsCertificate *cert); - -GTlsCertificateFlags g_tls_certificate_verify (GTlsCertificate *cert, - GSocketConnectable *identity, - GTlsCertificate *trusted_ca); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_tls_certificate_is_same (GTlsCertificate *cert_one, - GTlsCertificate *cert_two); - -G_END_DECLS - -#endif /* __G_TLS_CERTIFICATE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsclientconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsclientconnection.h deleted file mode 100644 index eaf62f0b..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsclientconnection.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_CLIENT_CONNECTION_H__ -#define __G_TLS_CLIENT_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_CLIENT_CONNECTION (g_tls_client_connection_get_type ()) -#define G_TLS_CLIENT_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CLIENT_CONNECTION, GTlsClientConnection)) -#define G_IS_TLS_CLIENT_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CLIENT_CONNECTION)) -#define G_TLS_CLIENT_CONNECTION_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TLS_CLIENT_CONNECTION, GTlsClientConnectionInterface)) - -typedef struct _GTlsClientConnectionInterface GTlsClientConnectionInterface; - -struct _GTlsClientConnectionInterface -{ - GTypeInterface g_iface; - -}; - -GType g_tls_client_connection_get_type (void) G_GNUC_CONST; - -GIOStream * g_tls_client_connection_new (GIOStream *base_io_stream, - GSocketConnectable *server_identity, - GError **error); - -GTlsCertificateFlags g_tls_client_connection_get_validation_flags (GTlsClientConnection *conn); -void g_tls_client_connection_set_validation_flags (GTlsClientConnection *conn, - GTlsCertificateFlags flags); -GSocketConnectable *g_tls_client_connection_get_server_identity (GTlsClientConnection *conn); -void g_tls_client_connection_set_server_identity (GTlsClientConnection *conn, - GSocketConnectable *identity); -gboolean g_tls_client_connection_get_use_ssl3 (GTlsClientConnection *conn); -void g_tls_client_connection_set_use_ssl3 (GTlsClientConnection *conn, - gboolean use_ssl3); -GList * g_tls_client_connection_get_accepted_cas (GTlsClientConnection *conn); - -G_END_DECLS - -#endif /* __G_TLS_CLIENT_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsconnection.h deleted file mode 100644 index 37132cc8..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsconnection.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_CONNECTION_H__ -#define __G_TLS_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_CONNECTION (g_tls_connection_get_type ()) -#define G_TLS_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CONNECTION, GTlsConnection)) -#define G_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_CONNECTION, GTlsConnectionClass)) -#define G_IS_TLS_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CONNECTION)) -#define G_IS_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_CONNECTION)) -#define G_TLS_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_CONNECTION, GTlsConnectionClass)) - -typedef struct _GTlsConnectionClass GTlsConnectionClass; -typedef struct _GTlsConnectionPrivate GTlsConnectionPrivate; - -struct _GTlsConnection { - GIOStream parent_instance; - - GTlsConnectionPrivate *priv; -}; - -struct _GTlsConnectionClass -{ - GIOStreamClass parent_class; - - /* signals */ - gboolean ( *accept_certificate) (GTlsConnection *connection, - GTlsCertificate *peer_cert, - GTlsCertificateFlags errors); - - /* methods */ - gboolean ( *handshake ) (GTlsConnection *conn, - GCancellable *cancellable, - GError **error); - - void ( *handshake_async ) (GTlsConnection *conn, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean ( *handshake_finish ) (GTlsConnection *conn, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[8]; -}; - -GType g_tls_connection_get_type (void) G_GNUC_CONST; - -GLIB_DEPRECATED -void g_tls_connection_set_use_system_certdb (GTlsConnection *conn, - gboolean use_system_certdb); -GLIB_DEPRECATED -gboolean g_tls_connection_get_use_system_certdb (GTlsConnection *conn); - -void g_tls_connection_set_database (GTlsConnection *conn, - GTlsDatabase *database); -GTlsDatabase * g_tls_connection_get_database (GTlsConnection *conn); - -void g_tls_connection_set_certificate (GTlsConnection *conn, - GTlsCertificate *certificate); -GTlsCertificate *g_tls_connection_get_certificate (GTlsConnection *conn); - -void g_tls_connection_set_interaction (GTlsConnection *conn, - GTlsInteraction *interaction); -GTlsInteraction * g_tls_connection_get_interaction (GTlsConnection *conn); - -GTlsCertificate *g_tls_connection_get_peer_certificate (GTlsConnection *conn); -GTlsCertificateFlags g_tls_connection_get_peer_certificate_errors (GTlsConnection *conn); - -void g_tls_connection_set_require_close_notify (GTlsConnection *conn, - gboolean require_close_notify); -gboolean g_tls_connection_get_require_close_notify (GTlsConnection *conn); - -void g_tls_connection_set_rehandshake_mode (GTlsConnection *conn, - GTlsRehandshakeMode mode); -GTlsRehandshakeMode g_tls_connection_get_rehandshake_mode (GTlsConnection *conn); - -gboolean g_tls_connection_handshake (GTlsConnection *conn, - GCancellable *cancellable, - GError **error); - -void g_tls_connection_handshake_async (GTlsConnection *conn, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_tls_connection_handshake_finish (GTlsConnection *conn, - GAsyncResult *result, - GError **error); - -/** - * G_TLS_ERROR: - * - * Error domain for TLS. Errors in this domain will be from the - * #GTlsError enumeration. See #GError for more information on error - * domains. - */ -#define G_TLS_ERROR (g_tls_error_quark ()) -GQuark g_tls_error_quark (void); - - -/*< protected >*/ -gboolean g_tls_connection_emit_accept_certificate (GTlsConnection *conn, - GTlsCertificate *peer_cert, - GTlsCertificateFlags errors); - -G_END_DECLS - -#endif /* __G_TLS_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsdatabase.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsdatabase.h deleted file mode 100644 index 9f93cc91..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsdatabase.h +++ /dev/null @@ -1,235 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_DATABASE_H__ -#define __G_TLS_DATABASE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER "1.3.6.1.5.5.7.3.1" -#define G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT "1.3.6.1.5.5.7.3.2" - -#define G_TYPE_TLS_DATABASE (g_tls_database_get_type ()) -#define G_TLS_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_DATABASE, GTlsDatabase)) -#define G_TLS_DATABASE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_DATABASE, GTlsDatabaseClass)) -#define G_IS_TLS_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_DATABASE)) -#define G_IS_TLS_DATABASE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_DATABASE)) -#define G_TLS_DATABASE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_DATABASE, GTlsDatabaseClass)) - -typedef struct _GTlsDatabaseClass GTlsDatabaseClass; -typedef struct _GTlsDatabasePrivate GTlsDatabasePrivate; - -struct _GTlsDatabase -{ - GObject parent_instance; - - GTlsDatabasePrivate *priv; -}; - -struct _GTlsDatabaseClass -{ - GObjectClass parent_class; - - /* virtual methods */ - - GTlsCertificateFlags (*verify_chain) (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GError **error); - - void (*verify_chain_async) (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsCertificateFlags (*verify_chain_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - gchar* (*create_certificate_handle) (GTlsDatabase *self, - GTlsCertificate *certificate); - - GTlsCertificate* (*lookup_certificate_for_handle) (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - - void (*lookup_certificate_for_handle_async) (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsCertificate* (*lookup_certificate_for_handle_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - GTlsCertificate* (*lookup_certificate_issuer) (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - - void (*lookup_certificate_issuer_async) (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsCertificate* (*lookup_certificate_issuer_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - GList* (*lookup_certificates_issued_by) (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - - void (*lookup_certificates_issued_by_async) (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GList* (*lookup_certificates_issued_by_finish) (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[16]; -}; - -GType g_tls_database_get_type (void) G_GNUC_CONST; - -GTlsCertificateFlags g_tls_database_verify_chain (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_verify_chain_async (GTlsDatabase *self, - GTlsCertificate *chain, - const gchar *purpose, - GSocketConnectable *identity, - GTlsInteraction *interaction, - GTlsDatabaseVerifyFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsCertificateFlags g_tls_database_verify_chain_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -gchar* g_tls_database_create_certificate_handle (GTlsDatabase *self, - GTlsCertificate *certificate); - -GTlsCertificate* g_tls_database_lookup_certificate_for_handle (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_lookup_certificate_for_handle_async (GTlsDatabase *self, - const gchar *handle, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsCertificate* g_tls_database_lookup_certificate_for_handle_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -GTlsCertificate* g_tls_database_lookup_certificate_issuer (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_lookup_certificate_issuer_async (GTlsDatabase *self, - GTlsCertificate *certificate, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsCertificate* g_tls_database_lookup_certificate_issuer_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -GList* g_tls_database_lookup_certificates_issued_by (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GError **error); - -void g_tls_database_lookup_certificates_issued_by_async (GTlsDatabase *self, - GByteArray *issuer_raw_dn, - GTlsInteraction *interaction, - GTlsDatabaseLookupFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GList* g_tls_database_lookup_certificates_issued_by_finish (GTlsDatabase *self, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_DATABASE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsfiledatabase.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsfiledatabase.h deleted file mode 100644 index bc6a17ff..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsfiledatabase.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright © 2010 Collabora, Ltd. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2 of the licence or (at - * your option) any later version. - * - * See the included COPYING file for more information. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_FILE_DATABASE_H__ -#define __G_TLS_FILE_DATABASE_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_FILE_DATABASE (g_tls_file_database_get_type ()) -#define G_TLS_FILE_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_FILE_DATABASE, GTlsFileDatabase)) -#define G_IS_TLS_FILE_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_FILE_DATABASE)) -#define G_TLS_FILE_DATABASE_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TLS_FILE_DATABASE, GTlsFileDatabaseInterface)) - -typedef struct _GTlsFileDatabaseInterface GTlsFileDatabaseInterface; - -/** - * GTlsFileDatabaseInterface: - * @g_iface: The parent interface. - * - * Provides an interface for #GTlsFileDatabase implementations. - * - */ -struct _GTlsFileDatabaseInterface -{ - GTypeInterface g_iface; - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[8]; -}; - -GType g_tls_file_database_get_type (void) G_GNUC_CONST; - -GTlsDatabase* g_tls_file_database_new (const gchar *anchors, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_FILE_DATABASE_H___ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsinteraction.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsinteraction.h deleted file mode 100644 index fc76fe2d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsinteraction.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2011 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_INTERACTION_H__ -#define __G_TLS_INTERACTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_INTERACTION (g_tls_interaction_get_type ()) -#define G_TLS_INTERACTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_TLS_INTERACTION, GTlsInteraction)) -#define G_TLS_INTERACTION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_TLS_INTERACTION, GTlsInteractionClass)) -#define G_IS_TLS_INTERACTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_TLS_INTERACTION)) -#define G_IS_TLS_INTERACTION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_TLS_INTERACTION)) -#define G_TLS_INTERACTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_TLS_INTERACTION, GTlsInteractionClass)) - -typedef struct _GTlsInteractionClass GTlsInteractionClass; -typedef struct _GTlsInteractionPrivate GTlsInteractionPrivate; - -struct _GTlsInteraction -{ - /*< private >*/ - GObject parent_instance; - GTlsInteractionPrivate *priv; -}; - -struct _GTlsInteractionClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - GTlsInteractionResult (* ask_password) (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GError **error); - - void (* ask_password_async) (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - - GTlsInteractionResult (* ask_password_finish) (GTlsInteraction *interaction, - GAsyncResult *result, - GError **error); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[24]; -}; - -GType g_tls_interaction_get_type (void) G_GNUC_CONST; - -GTlsInteractionResult g_tls_interaction_invoke_ask_password (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GError **error); - - -GTlsInteractionResult g_tls_interaction_ask_password (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GError **error); - -void g_tls_interaction_ask_password_async (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GTlsInteractionResult g_tls_interaction_ask_password_finish (GTlsInteraction *interaction, - GAsyncResult *result, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_INTERACTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlspassword.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlspassword.h deleted file mode 100644 index ef581b61..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlspassword.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2011 Collabora, Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Stef Walter - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_PASSWORD_H__ -#define __G_TLS_PASSWORD_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_PASSWORD (g_tls_password_get_type ()) -#define G_TLS_PASSWORD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_TLS_PASSWORD, GTlsPassword)) -#define G_TLS_PASSWORD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_TLS_PASSWORD, GTlsPasswordClass)) -#define G_IS_TLS_PASSWORD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_TLS_PASSWORD)) -#define G_IS_TLS_PASSWORD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_TLS_PASSWORD)) -#define G_TLS_PASSWORD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_TLS_PASSWORD, GTlsPasswordClass)) - -typedef struct _GTlsPasswordClass GTlsPasswordClass; -typedef struct _GTlsPasswordPrivate GTlsPasswordPrivate; - -struct _GTlsPassword -{ - GObject parent_instance; - - GTlsPasswordPrivate *priv; -}; - -struct _GTlsPasswordClass -{ - GObjectClass parent_class; - - /* methods */ - - const guchar * ( *get_value) (GTlsPassword *password, - gsize *length); - - void ( *set_value) (GTlsPassword *password, - guchar *value, - gssize length, - GDestroyNotify destroy); - - const gchar* ( *get_default_warning) (GTlsPassword *password); - - /*< private >*/ - /* Padding for future expansion */ - gpointer padding[4]; -}; - -GType g_tls_password_get_type (void) G_GNUC_CONST; - -GTlsPassword * g_tls_password_new (GTlsPasswordFlags flags, - const gchar *description); - -const guchar * g_tls_password_get_value (GTlsPassword *password, - gsize *length); -void g_tls_password_set_value (GTlsPassword *password, - const guchar *value, - gssize length); -void g_tls_password_set_value_full (GTlsPassword *password, - guchar *value, - gssize length, - GDestroyNotify destroy); - -GTlsPasswordFlags g_tls_password_get_flags (GTlsPassword *password); -void g_tls_password_set_flags (GTlsPassword *password, - GTlsPasswordFlags flags); - -const gchar* g_tls_password_get_description (GTlsPassword *password); -void g_tls_password_set_description (GTlsPassword *password, - const gchar *description); - -const gchar * g_tls_password_get_warning (GTlsPassword *password); -void g_tls_password_set_warning (GTlsPassword *password, - const gchar *warning); - -G_END_DECLS - -#endif /* __G_TLS_PASSWORD_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsserverconnection.h b/GstreamerHelper/x86/include/glib-2.0/gio/gtlsserverconnection.h deleted file mode 100644 index c909d550..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gtlsserverconnection.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2010 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TLS_SERVER_CONNECTION_H__ -#define __G_TLS_SERVER_CONNECTION_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_TLS_SERVER_CONNECTION (g_tls_server_connection_get_type ()) -#define G_TLS_SERVER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_SERVER_CONNECTION, GTlsServerConnection)) -#define G_IS_TLS_SERVER_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_SERVER_CONNECTION)) -#define G_TLS_SERVER_CONNECTION_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TLS_SERVER_CONNECTION, GTlsServerConnectionInterface)) - -/** - * GTlsServerConnection: - * - * TLS server-side connection. This is the server-side implementation - * of a #GTlsConnection. - * - * Since: 2.28 - */ -typedef struct _GTlsServerConnectionInterface GTlsServerConnectionInterface; - -struct _GTlsServerConnectionInterface -{ - GTypeInterface g_iface; - -}; - -GType g_tls_server_connection_get_type (void) G_GNUC_CONST; - -GIOStream * g_tls_server_connection_new (GIOStream *base_io_stream, - GTlsCertificate *certificate, - GError **error); - -G_END_DECLS - -#endif /* __G_TLS_SERVER_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gvfs.h b/GstreamerHelper/x86/include/glib-2.0/gio/gvfs.h deleted file mode 100644 index bacbe8b6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gvfs.h +++ /dev/null @@ -1,125 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VFS_H__ -#define __G_VFS_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_VFS (g_vfs_get_type ()) -#define G_VFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS, GVfs)) -#define G_VFS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS, GVfsClass)) -#define G_VFS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS, GVfsClass)) -#define G_IS_VFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS)) -#define G_IS_VFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS)) - -/** - * G_VFS_EXTENSION_POINT_NAME: - * - * Extension point for #GVfs functionality. - * See Extending GIO. - */ -#define G_VFS_EXTENSION_POINT_NAME "gio-vfs" - -/** - * GVfs: - * - * Virtual File System object. - **/ -typedef struct _GVfsClass GVfsClass; - -struct _GVfs -{ - GObject parent_instance; -}; - -struct _GVfsClass -{ - GObjectClass parent_class; - - /* Virtual Table */ - - gboolean (* is_active) (GVfs *vfs); - GFile * (* get_file_for_path) (GVfs *vfs, - const char *path); - GFile * (* get_file_for_uri) (GVfs *vfs, - const char *uri); - const gchar * const * (* get_supported_uri_schemes) (GVfs *vfs); - GFile * (* parse_name) (GVfs *vfs, - const char *parse_name); - - /*< private >*/ - void (* local_file_add_info) (GVfs *vfs, - const char *filename, - guint64 device, - GFileAttributeMatcher *attribute_matcher, - GFileInfo *info, - GCancellable *cancellable, - gpointer *extra_data, - GDestroyNotify *free_extra_data); - void (* add_writable_namespaces) (GVfs *vfs, - GFileAttributeInfoList *list); - gboolean (* local_file_set_attributes) (GVfs *vfs, - const char *filename, - GFileInfo *info, - GFileQueryInfoFlags flags, - GCancellable *cancellable, - GError **error); - void (* local_file_removed) (GVfs *vfs, - const char *filename); - void (* local_file_moved) (GVfs *vfs, - const char *source, - const char *dest); - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); - void (*_g_reserved7) (void); -}; - -GType g_vfs_get_type (void) G_GNUC_CONST; - -gboolean g_vfs_is_active (GVfs *vfs); -GFile * g_vfs_get_file_for_path (GVfs *vfs, - const char *path); -GFile * g_vfs_get_file_for_uri (GVfs *vfs, - const char *uri); -const gchar* const * g_vfs_get_supported_uri_schemes (GVfs *vfs); - -GFile * g_vfs_parse_name (GVfs *vfs, - const char *parse_name); - -GVfs * g_vfs_get_default (void); -GVfs * g_vfs_get_local (void); - -G_END_DECLS - -#endif /* __G_VFS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gvolume.h b/GstreamerHelper/x86/include/glib-2.0/gio/gvolume.h deleted file mode 100644 index b0d862e7..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gvolume.h +++ /dev/null @@ -1,239 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VOLUME_H__ -#define __G_VOLUME_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_VOLUME_IDENTIFIER_KIND_HAL_UDI: - * - * The string used to obtain a Hal UDI with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_HAL_UDI "hal-udi" - -/** - * G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE: - * - * The string used to obtain a Unix device path with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE "unix-device" - -/** - * G_VOLUME_IDENTIFIER_KIND_LABEL: - * - * The string used to obtain a filesystem label with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_LABEL "label" - -/** - * G_VOLUME_IDENTIFIER_KIND_UUID: - * - * The string used to obtain a UUID with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_UUID "uuid" - -/** - * G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT: - * - * The string used to obtain a NFS mount with g_volume_get_identifier(). - */ -#define G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT "nfs-mount" - -/** - * G_VOLUME_IDENTIFIER_KIND_CLASS: - * - * The string used to obtain the volume class - * with g_volume_get_identifier(). - * - * Known volume classes include device and - * network. Other classes may be added in the - * future. - * - * This is intended to be used by applications to classify #GVolume - * instances into different sections - for example a file manager or - * file chooser can use this information to show - * network volumes under a "Network" heading and - * device volumes under a "Devices" heading. - */ -#define G_VOLUME_IDENTIFIER_KIND_CLASS "class" - - -#define G_TYPE_VOLUME (g_volume_get_type ()) -#define G_VOLUME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_VOLUME, GVolume)) -#define G_IS_VOLUME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_VOLUME)) -#define G_VOLUME_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_VOLUME, GVolumeIface)) - -/** - * GVolumeIface: - * @g_iface: The parent interface. - * @changed: Changed signal that is emitted when the volume's state has changed. - * @removed: The removed signal that is emitted when the #GVolume have been removed. If the recipient is holding references to the object they should release them so the object can be finalized. - * @get_name: Gets a string containing the name of the #GVolume. - * @get_icon: Gets a #GIcon for the #GVolume. - * @get_uuid: Gets the UUID for the #GVolume. The reference is typically based on the file system UUID for the mount in question and should be considered an opaque string. Returns %NULL if there is no UUID available. - * @get_drive: Gets a #GDrive the volume is located on. Returns %NULL if the #GVolume is not associated with a #GDrive. - * @get_mount: Gets a #GMount representing the mounted volume. Returns %NULL if the #GVolume is not mounted. - * @can_mount: Returns %TRUE if the #GVolume can be mounted. - * @can_eject: Checks if a #GVolume can be ejected. - * @mount_fn: Mounts a given #GVolume. - * #GVolume implementations must emit the #GMountOperation::aborted - * signal before completing a mount operation that is aborted while - * awaiting input from the user through a #GMountOperation instance. - * @mount_finish: Finishes a mount operation. - * @eject: Ejects a given #GVolume. - * @eject_finish: Finishes an eject operation. - * @get_identifier: Returns the identifier of the given kind, or %NULL if - * the #GVolume doesn't have one. - * @enumerate_identifiers: Returns an array strings listing the kinds - * of identifiers which the #GVolume has. - * @should_automount: Returns %TRUE if the #GVolume should be automatically mounted. - * @get_activation_root: Returns the activation root for the #GVolume if it is known in advance or %NULL if - * it is not known. - * @eject_with_operation: Starts ejecting a #GVolume using a #GMountOperation. Since 2.22. - * @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22. - * @get_sort_key: Gets a key used for sorting #GVolume instance or %NULL if no such key exists. Since 2.32. - * @get_symbolic_icon: Gets a symbolic #GIcon for the #GVolume. Since 2.34. - * - * Interface for implementing operations for mountable volumes. - **/ -typedef struct _GVolumeIface GVolumeIface; - -struct _GVolumeIface -{ - GTypeInterface g_iface; - - /* signals */ - - void (* changed) (GVolume *volume); - void (* removed) (GVolume *volume); - - /* Virtual Table */ - - char * (* get_name) (GVolume *volume); - GIcon * (* get_icon) (GVolume *volume); - char * (* get_uuid) (GVolume *volume); - GDrive * (* get_drive) (GVolume *volume); - GMount * (* get_mount) (GVolume *volume); - gboolean (* can_mount) (GVolume *volume); - gboolean (* can_eject) (GVolume *volume); - void (* mount_fn) (GVolume *volume, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* mount_finish) (GVolume *volume, - GAsyncResult *result, - GError **error); - void (* eject) (GVolume *volume, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_finish) (GVolume *volume, - GAsyncResult *result, - GError **error); - - char * (* get_identifier) (GVolume *volume, - const char *kind); - char ** (* enumerate_identifiers) (GVolume *volume); - - gboolean (* should_automount) (GVolume *volume); - - GFile * (* get_activation_root) (GVolume *volume); - - void (* eject_with_operation) (GVolume *volume, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - gboolean (* eject_with_operation_finish) (GVolume *volume, - GAsyncResult *result, - GError **error); - - const gchar * (* get_sort_key) (GVolume *volume); - GIcon * (* get_symbolic_icon) (GVolume *volume); -}; - -GType g_volume_get_type (void) G_GNUC_CONST; - -char * g_volume_get_name (GVolume *volume); -GIcon * g_volume_get_icon (GVolume *volume); -GIcon * g_volume_get_symbolic_icon (GVolume *volume); -char * g_volume_get_uuid (GVolume *volume); -GDrive * g_volume_get_drive (GVolume *volume); -GMount * g_volume_get_mount (GVolume *volume); -gboolean g_volume_can_mount (GVolume *volume); -gboolean g_volume_can_eject (GVolume *volume); -gboolean g_volume_should_automount (GVolume *volume); -void g_volume_mount (GVolume *volume, - GMountMountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_volume_mount_finish (GVolume *volume, - GAsyncResult *result, - GError **error); -GLIB_DEPRECATED_FOR(g_volume_eject_with_operation) -void g_volume_eject (GVolume *volume, - GMountUnmountFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_volume_eject_with_operation_finish) -gboolean g_volume_eject_finish (GVolume *volume, - GAsyncResult *result, - GError **error); -char * g_volume_get_identifier (GVolume *volume, - const char *kind); -char ** g_volume_enumerate_identifiers (GVolume *volume); - -GFile * g_volume_get_activation_root (GVolume *volume); - -void g_volume_eject_with_operation (GVolume *volume, - GMountUnmountFlags flags, - GMountOperation *mount_operation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean g_volume_eject_with_operation_finish (GVolume *volume, - GAsyncResult *result, - GError **error); - -GLIB_AVAILABLE_IN_2_32 -const gchar *g_volume_get_sort_key (GVolume *volume); - -G_END_DECLS - -#endif /* __G_VOLUME_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gvolumemonitor.h b/GstreamerHelper/x86/include/glib-2.0/gio/gvolumemonitor.h deleted file mode 100644 index 2bff07ed..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gvolumemonitor.h +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - * David Zeuthen - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VOLUME_MONITOR_H__ -#define __G_VOLUME_MONITOR_H__ - -#include - -G_BEGIN_DECLS - -#define G_TYPE_VOLUME_MONITOR (g_volume_monitor_get_type ()) -#define G_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VOLUME_MONITOR, GVolumeMonitor)) -#define G_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VOLUME_MONITOR, GVolumeMonitorClass)) -#define G_VOLUME_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VOLUME_MONITOR, GVolumeMonitorClass)) -#define G_IS_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VOLUME_MONITOR)) -#define G_IS_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VOLUME_MONITOR)) - -/** - * G_VOLUME_MONITOR_EXTENSION_POINT_NAME: - * - * Extension point for volume monitor functionality. - * See Extending GIO. - */ -#define G_VOLUME_MONITOR_EXTENSION_POINT_NAME "gio-volume-monitor" - -/** - * GVolumeMonitor: - * - * A Volume Monitor that watches for volume events. - **/ -typedef struct _GVolumeMonitorClass GVolumeMonitorClass; - -struct _GVolumeMonitor -{ - GObject parent_instance; - - /*< private >*/ - gpointer priv; -}; - -struct _GVolumeMonitorClass -{ - GObjectClass parent_class; - - /*< public >*/ - /* signals */ - void (* volume_added) (GVolumeMonitor *volume_monitor, - GVolume *volume); - void (* volume_removed) (GVolumeMonitor *volume_monitor, - GVolume *volume); - void (* volume_changed) (GVolumeMonitor *volume_monitor, - GVolume *volume); - - void (* mount_added) (GVolumeMonitor *volume_monitor, - GMount *mount); - void (* mount_removed) (GVolumeMonitor *volume_monitor, - GMount *mount); - void (* mount_pre_unmount) (GVolumeMonitor *volume_monitor, - GMount *mount); - void (* mount_changed) (GVolumeMonitor *volume_monitor, - GMount *mount); - - void (* drive_connected) (GVolumeMonitor *volume_monitor, - GDrive *drive); - void (* drive_disconnected) (GVolumeMonitor *volume_monitor, - GDrive *drive); - void (* drive_changed) (GVolumeMonitor *volume_monitor, - GDrive *drive); - - /* Vtable */ - - gboolean (* is_supported) (void); - - GList * (* get_connected_drives) (GVolumeMonitor *volume_monitor); - GList * (* get_volumes) (GVolumeMonitor *volume_monitor); - GList * (* get_mounts) (GVolumeMonitor *volume_monitor); - - GVolume * (* get_volume_for_uuid) (GVolumeMonitor *volume_monitor, - const char *uuid); - - GMount * (* get_mount_for_uuid) (GVolumeMonitor *volume_monitor, - const char *uuid); - - - /* These arguments are unfortunately backwards by mistake (bug #520169). Deprecated in 2.20. */ - GVolume * (* adopt_orphan_mount) (GMount *mount, - GVolumeMonitor *volume_monitor); - - /* signal added in 2.17 */ - void (* drive_eject_button) (GVolumeMonitor *volume_monitor, - GDrive *drive); - - /* signal added in 2.21 */ - void (* drive_stop_button) (GVolumeMonitor *volume_monitor, - GDrive *drive); - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); - void (*_g_reserved6) (void); -}; - -GType g_volume_monitor_get_type (void) G_GNUC_CONST; - -GVolumeMonitor *g_volume_monitor_get (void); -GList * g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor); -GList * g_volume_monitor_get_volumes (GVolumeMonitor *volume_monitor); -GList * g_volume_monitor_get_mounts (GVolumeMonitor *volume_monitor); -GVolume * g_volume_monitor_get_volume_for_uuid (GVolumeMonitor *volume_monitor, - const char *uuid); -GMount * g_volume_monitor_get_mount_for_uuid (GVolumeMonitor *volume_monitor, - const char *uuid); - -GLIB_DEPRECATED -GVolume * g_volume_monitor_adopt_orphan_mount (GMount *mount); - -G_END_DECLS - -#endif /* __G_VOLUME_MONITOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gzlibcompressor.h b/GstreamerHelper/x86/include/glib-2.0/gio/gzlibcompressor.h deleted file mode 100644 index 58247815..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gzlibcompressor.h +++ /dev/null @@ -1,60 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ZLIB_COMPRESSOR_H__ -#define __G_ZLIB_COMPRESSOR_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_ZLIB_COMPRESSOR (g_zlib_compressor_get_type ()) -#define G_ZLIB_COMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_ZLIB_COMPRESSOR, GZlibCompressor)) -#define G_ZLIB_COMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_ZLIB_COMPRESSOR, GZlibCompressorClass)) -#define G_IS_ZLIB_COMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_ZLIB_COMPRESSOR)) -#define G_IS_ZLIB_COMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_ZLIB_COMPRESSOR)) -#define G_ZLIB_COMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_ZLIB_COMPRESSOR, GZlibCompressorClass)) - -typedef struct _GZlibCompressorClass GZlibCompressorClass; - -struct _GZlibCompressorClass -{ - GObjectClass parent_class; -}; - -GType g_zlib_compressor_get_type (void) G_GNUC_CONST; - -GZlibCompressor *g_zlib_compressor_new (GZlibCompressorFormat format, - int level); - -GFileInfo *g_zlib_compressor_get_file_info (GZlibCompressor *compressor); -void g_zlib_compressor_set_file_info (GZlibCompressor *compressor, - GFileInfo *file_info); - -G_END_DECLS - -#endif /* __G_ZLIB_COMPRESSOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gio/gzlibdecompressor.h b/GstreamerHelper/x86/include/glib-2.0/gio/gzlibdecompressor.h deleted file mode 100644 index f7bb57dd..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gio/gzlibdecompressor.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2009 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ZLIB_DECOMPRESSOR_H__ -#define __G_ZLIB_DECOMPRESSOR_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_ZLIB_DECOMPRESSOR (g_zlib_decompressor_get_type ()) -#define G_ZLIB_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_ZLIB_DECOMPRESSOR, GZlibDecompressor)) -#define G_ZLIB_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_ZLIB_DECOMPRESSOR, GZlibDecompressorClass)) -#define G_IS_ZLIB_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_ZLIB_DECOMPRESSOR)) -#define G_IS_ZLIB_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_ZLIB_DECOMPRESSOR)) -#define G_ZLIB_DECOMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_ZLIB_DECOMPRESSOR, GZlibDecompressorClass)) - -typedef struct _GZlibDecompressorClass GZlibDecompressorClass; - -struct _GZlibDecompressorClass -{ - GObjectClass parent_class; -}; - -GType g_zlib_decompressor_get_type (void) G_GNUC_CONST; - -GZlibDecompressor *g_zlib_decompressor_new (GZlibCompressorFormat format); - -GFileInfo *g_zlib_decompressor_get_file_info (GZlibDecompressor *decompressor); - -G_END_DECLS - -#endif /* __G_ZLIB_DECOMPRESSOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib-object.h b/GstreamerHelper/x86/include/glib-2.0/glib-object.h deleted file mode 100644 index 336ba931..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib-object.h +++ /dev/null @@ -1,42 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998, 1999, 2000 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __GLIB_GOBJECT_H__ -#define __GLIB_GOBJECT_H__ - -#define __GLIB_GOBJECT_H_INSIDE__ - -/* topmost include file for GObject header files */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef __GLIB_GOBJECT_H_INSIDE__ - -#endif /* __GLIB_GOBJECT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib-unix.h b/GstreamerHelper/x86/include/glib-2.0/glib-unix.h deleted file mode 100644 index c04f66f3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib-unix.h +++ /dev/null @@ -1,90 +0,0 @@ -/* glib-unix.h - Unix specific integration - * Copyright (C) 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_UNIX_H__ -#define __G_UNIX_H__ - -/* We need to include the UNIX headers needed to use the APIs below, - * but we also take this opportunity to include a wide selection of - * other UNIX headers. If one of the headers below is broken on some - * system, work around it here (or better, fix the system or tell - * people to use a better one). - */ -#include -#include -#include -#include -#include - -#include - -#ifndef G_OS_UNIX -#error "This header may only be used on UNIX" -#endif - -G_BEGIN_DECLS - -/** - * G_UNIX_ERROR: - * - * Error domain for API in the "g_unix_" namespace. Note that there is - * no exported enumeration mapping %errno. Instead, all functions - * ensure that %errno is relevant. The code for all #G_UNIX_ERROR is - * always 0, and the error message is always - * generated via g_strerror(). - * - * It is expected that most code will not look at %errno from these - * APIs. Important cases where one would want to differentiate between - * errors are already covered by existing cross-platform GLib API, - * such as e.g. #GFile wrapping ENOENT. However, it is - * provided for completeness, at least. - */ -#define G_UNIX_ERROR (g_unix_error_quark()) - -GLIB_AVAILABLE_IN_2_30 -GQuark g_unix_error_quark (void); - -GLIB_AVAILABLE_IN_2_30 -gboolean g_unix_open_pipe (gint *fds, - gint flags, - GError **error); - -GLIB_AVAILABLE_IN_2_30 -gboolean g_unix_set_fd_nonblocking (gint fd, - gboolean nonblock, - GError **error); - -GLIB_AVAILABLE_IN_2_30 -GSource *g_unix_signal_source_new (gint signum); - -GLIB_AVAILABLE_IN_2_30 -guint g_unix_signal_add_full (gint priority, - gint signum, - GSourceFunc handler, - gpointer user_data, - GDestroyNotify notify); - -GLIB_AVAILABLE_IN_2_30 -guint g_unix_signal_add (gint signum, - GSourceFunc handler, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_UNIX_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib.h b/GstreamerHelper/x86/include/glib-2.0/glib.h deleted file mode 100644 index 77abf232..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __G_LIB_H__ -#define __G_LIB_H__ - -#define __GLIB_H_INSIDE__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef G_PLATFORM_WIN32 -#include -#endif - -#include -#include -#include -#include -#include -#include - -#undef __GLIB_H_INSIDE__ - -#endif /* __G_LIB_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gallocator.h b/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gallocator.h deleted file mode 100644 index e4990e90..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gallocator.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ALLOCATOR_H__ -#define __G_ALLOCATOR_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GAllocator GAllocator; -typedef struct _GMemChunk GMemChunk; - -#define G_ALLOC_ONLY 1 -#define G_ALLOC_AND_FREE 2 -#define G_ALLOCATOR_LIST 1 -#define G_ALLOCATOR_SLIST 2 -#define G_ALLOCATOR_NODE 3 - -#define g_chunk_new(type, chunk) ((type *) g_mem_chunk_alloc (chunk)) -#define g_chunk_new0(type, chunk) ((type *) g_mem_chunk_alloc0 (chunk)) -#define g_chunk_free(mem, mem_chunk) (g_mem_chunk_free (mem_chunk, mem)) -#define g_mem_chunk_create(type, x, y) (g_mem_chunk_new (NULL, sizeof (type), 0, 0)) - - -GLIB_DEPRECATED -GMemChunk * g_mem_chunk_new (const gchar *name, - gint atom_size, - gsize area_size, - gint type); -GLIB_DEPRECATED -void g_mem_chunk_destroy (GMemChunk *mem_chunk); -GLIB_DEPRECATED -gpointer g_mem_chunk_alloc (GMemChunk *mem_chunk); -GLIB_DEPRECATED -gpointer g_mem_chunk_alloc0 (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_free (GMemChunk *mem_chunk, - gpointer mem); -GLIB_DEPRECATED -void g_mem_chunk_clean (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_reset (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_print (GMemChunk *mem_chunk); -GLIB_DEPRECATED -void g_mem_chunk_info (void); -GLIB_DEPRECATED -void g_blow_chunks (void); - - -GLIB_DEPRECATED -GAllocator * g_allocator_new (const gchar *name, - guint n_preallocs); -GLIB_DEPRECATED -void g_allocator_free (GAllocator *allocator); -GLIB_DEPRECATED -void g_list_push_allocator (GAllocator *allocator); -GLIB_DEPRECATED -void g_list_pop_allocator (void); -GLIB_DEPRECATED -void g_slist_push_allocator (GAllocator *allocator); -GLIB_DEPRECATED -void g_slist_pop_allocator (void); -GLIB_DEPRECATED -void g_node_push_allocator (GAllocator *allocator); -GLIB_DEPRECATED -void g_node_pop_allocator (void); - -G_END_DECLS - -#endif /* __G_ALLOCATOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcache.h b/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcache.h deleted file mode 100644 index 2e5119b2..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcache.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CACHE_H__ -#define __G_CACHE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GCache GCache; - -typedef gpointer (*GCacheNewFunc) (gpointer key); -typedef gpointer (*GCacheDupFunc) (gpointer value); -typedef void (*GCacheDestroyFunc) (gpointer value); - -/* Caches - */ -GLIB_DEPRECATED -GCache* g_cache_new (GCacheNewFunc value_new_func, - GCacheDestroyFunc value_destroy_func, - GCacheDupFunc key_dup_func, - GCacheDestroyFunc key_destroy_func, - GHashFunc hash_key_func, - GHashFunc hash_value_func, - GEqualFunc key_equal_func); -GLIB_DEPRECATED -void g_cache_destroy (GCache *cache); -GLIB_DEPRECATED -gpointer g_cache_insert (GCache *cache, - gpointer key); -GLIB_DEPRECATED -void g_cache_remove (GCache *cache, - gconstpointer value); -GLIB_DEPRECATED -void g_cache_key_foreach (GCache *cache, - GHFunc func, - gpointer user_data); -GLIB_DEPRECATED -void g_cache_value_foreach (GCache *cache, - GHFunc func, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_CACHE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcompletion.h b/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcompletion.h deleted file mode 100644 index 88a0479d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gcompletion.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_COMPLETION_H__ -#define __G_COMPLETION_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GCompletion GCompletion; - -typedef gchar* (*GCompletionFunc) (gpointer); - -/* GCompletion - */ - -typedef gint (*GCompletionStrncmpFunc) (const gchar *s1, - const gchar *s2, - gsize n); - -struct _GCompletion -{ - GList* items; - GCompletionFunc func; - - gchar* prefix; - GList* cache; - GCompletionStrncmpFunc strncmp_func; -}; - -GLIB_DEPRECATED_IN_2_26 -GCompletion* g_completion_new (GCompletionFunc func); -GLIB_DEPRECATED_IN_2_26 -void g_completion_add_items (GCompletion* cmp, - GList* items); -GLIB_DEPRECATED_IN_2_26 -void g_completion_remove_items (GCompletion* cmp, - GList* items); -GLIB_DEPRECATED_IN_2_26 -void g_completion_clear_items (GCompletion* cmp); -GLIB_DEPRECATED_IN_2_26 -GList* g_completion_complete (GCompletion* cmp, - const gchar* prefix, - gchar** new_prefix); -GLIB_DEPRECATED_IN_2_26 -GList* g_completion_complete_utf8 (GCompletion *cmp, - const gchar* prefix, - gchar** new_prefix); -GLIB_DEPRECATED_IN_2_26 -void g_completion_set_compare (GCompletion *cmp, - GCompletionStrncmpFunc strncmp_func); -GLIB_DEPRECATED_IN_2_26 -void g_completion_free (GCompletion* cmp); - -G_END_DECLS - -#endif /* __G_COMPLETION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gmain.h b/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gmain.h deleted file mode 100644 index d1ddf197..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gmain.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DEPRECATED_MAIN_H__ -#define __G_DEPRECATED_MAIN_H__ - -#include - -G_BEGIN_DECLS - -/* ============== Compat main loop stuff ================== */ - -/** - * g_main_new: - * @is_running: set to %TRUE to indicate that the loop is running. This - * is not very important since calling g_main_run() will set this - * to %TRUE anyway. - * - * Creates a new #GMainLoop for th default main context. - * - * Returns: a new #GMainLoop - * - * Deprecated: 2.2: Use g_main_loop_new() instead - */ -#define g_main_new(is_running) g_main_loop_new (NULL, is_running) - -/** - * g_main_run: - * @loop: a #GMainLoop - * - * Runs a main loop until it stops running. - * - * Deprecated: 2.2: Use g_main_loop_run() instead - */ -#define g_main_run(loop) g_main_loop_run(loop) - -/** - * g_main_quit: - * @loop: a #GMainLoop - * - * Stops the #GMainLoop. - * If g_main_run() was called to run the #GMainLoop, it will now return. - * - * Deprecated: 2.2: Use g_main_loop_quit() instead - */ -#define g_main_quit(loop) g_main_loop_quit(loop) - -/** - * g_main_destroy: - * @loop: a #GMainLoop - * - * Frees the memory allocated for the #GMainLoop. - * - * Deprecated: 2.2: Use g_main_loop_unref() instead - */ -#define g_main_destroy(loop) g_main_loop_unref(loop) - -/** - * g_main_is_running: - * @loop: a #GMainLoop - * - * Checks if the main loop is running. - * - * Returns: %TRUE if the main loop is running - * - * Deprecated: 2.2: Use g_main_loop_is_running() instead - */ -#define g_main_is_running(loop) g_main_loop_is_running(loop) - -/** - * g_main_iteration: - * @may_block: set to %TRUE if it should block (i.e. wait) until an event - * source becomes ready. It will return after an event source has been - * processed. If set to %FALSE it will return immediately if no event - * source is ready to be processed. - * - * Runs a single iteration for the default #GMainContext. - * - * Returns: %TRUE if more events are pending. - * - * Deprecated: 2.2: Use g_main_context_iteration() instead. - */ -#define g_main_iteration(may_block) g_main_context_iteration (NULL, may_block) - -/** - * g_main_pending: - * - * Checks if any events are pending for the default #GMainContext - * (i.e. ready to be processed). - * - * Returns: %TRUE if any events are pending. - * - * Deprected: 2.2: Use g_main_context_pending() instead. - */ -#define g_main_pending() g_main_context_pending (NULL) - -/** - * g_main_set_poll_func: - * @func: the function to call to poll all file descriptors - * - * Sets the function to use for the handle polling of file descriptors - * for the default main context. - * - * Deprecated: 2.2: Use g_main_context_set_poll_func() again - */ -#define g_main_set_poll_func(func) g_main_context_set_poll_func (NULL, func) - - -G_END_DECLS - -#endif /* __G_DEPRECATED_MAIN_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/grel.h b/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/grel.h deleted file mode 100644 index c9e09962..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/grel.h +++ /dev/null @@ -1,107 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_REL_H__ -#define __G_REL_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GRelation GRelation; -typedef struct _GTuples GTuples; - -struct _GTuples -{ - guint len; -}; - -/* GRelation - * - * Indexed Relations. Imagine a really simple table in a - * database. Relations are not ordered. This data type is meant for - * maintaining a N-way mapping. - * - * g_relation_new() creates a relation with FIELDS fields - * - * g_relation_destroy() frees all resources - * g_tuples_destroy() frees the result of g_relation_select() - * - * g_relation_index() indexes relation FIELD with the provided - * equality and hash functions. this must be done before any - * calls to insert are made. - * - * g_relation_insert() inserts a new tuple. you are expected to - * provide the right number of fields. - * - * g_relation_delete() deletes all relations with KEY in FIELD - * g_relation_select() returns ... - * g_relation_count() counts ... - */ - -GLIB_DEPRECATED_IN_2_26 -GRelation* g_relation_new (gint fields); -GLIB_DEPRECATED_IN_2_26 -void g_relation_destroy (GRelation *relation); -GLIB_DEPRECATED_IN_2_26 -void g_relation_index (GRelation *relation, - gint field, - GHashFunc hash_func, - GEqualFunc key_equal_func); -GLIB_DEPRECATED_IN_2_26 -void g_relation_insert (GRelation *relation, - ...); -GLIB_DEPRECATED_IN_2_26 -gint g_relation_delete (GRelation *relation, - gconstpointer key, - gint field); -GLIB_DEPRECATED_IN_2_26 -GTuples* g_relation_select (GRelation *relation, - gconstpointer key, - gint field); -GLIB_DEPRECATED_IN_2_26 -gint g_relation_count (GRelation *relation, - gconstpointer key, - gint field); -GLIB_DEPRECATED_IN_2_26 -gboolean g_relation_exists (GRelation *relation, - ...); -GLIB_DEPRECATED_IN_2_26 -void g_relation_print (GRelation *relation); -GLIB_DEPRECATED_IN_2_26 -void g_tuples_destroy (GTuples *tuples); -GLIB_DEPRECATED_IN_2_26 -gpointer g_tuples_index (GTuples *tuples, - gint index_, - gint field); - -G_END_DECLS - -#endif /* __G_REL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gthread.h b/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gthread.h deleted file mode 100644 index 1866540e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/deprecated/gthread.h +++ /dev/null @@ -1,285 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DEPRECATED_THREAD_H__ -#define __G_DEPRECATED_THREAD_H__ - -#include - -G_BEGIN_DECLS - -typedef enum -{ - G_THREAD_PRIORITY_LOW, - G_THREAD_PRIORITY_NORMAL, - G_THREAD_PRIORITY_HIGH, - G_THREAD_PRIORITY_URGENT -} GThreadPriority; - -struct _GThread -{ - /*< private >*/ - GThreadFunc func; - gpointer data; - gboolean joinable; - GThreadPriority priority; -}; - -typedef struct _GThreadFunctions GThreadFunctions; -struct _GThreadFunctions -{ - GMutex* (*mutex_new) (void); - void (*mutex_lock) (GMutex *mutex); - gboolean (*mutex_trylock) (GMutex *mutex); - void (*mutex_unlock) (GMutex *mutex); - void (*mutex_free) (GMutex *mutex); - GCond* (*cond_new) (void); - void (*cond_signal) (GCond *cond); - void (*cond_broadcast) (GCond *cond); - void (*cond_wait) (GCond *cond, - GMutex *mutex); - gboolean (*cond_timed_wait) (GCond *cond, - GMutex *mutex, - GTimeVal *end_time); - void (*cond_free) (GCond *cond); - GPrivate* (*private_new) (GDestroyNotify destructor); - gpointer (*private_get) (GPrivate *private_key); - void (*private_set) (GPrivate *private_key, - gpointer data); - void (*thread_create) (GThreadFunc func, - gpointer data, - gulong stack_size, - gboolean joinable, - gboolean bound, - GThreadPriority priority, - gpointer thread, - GError **error); - void (*thread_yield) (void); - void (*thread_join) (gpointer thread); - void (*thread_exit) (void); - void (*thread_set_priority)(gpointer thread, - GThreadPriority priority); - void (*thread_self) (gpointer thread); - gboolean (*thread_equal) (gpointer thread1, - gpointer thread2); -}; - -GLIB_VAR GThreadFunctions g_thread_functions_for_glib_use; -GLIB_VAR gboolean g_thread_use_default_impl; - -GLIB_VAR guint64 (*g_thread_gettime) (void); - -GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new) -GThread *g_thread_create (GThreadFunc func, - gpointer data, - gboolean joinable, - GError **error); - -GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new) -GThread *g_thread_create_full (GThreadFunc func, - gpointer data, - gulong stack_size, - gboolean joinable, - gboolean bound, - GThreadPriority priority, - GError **error); - -GLIB_DEPRECATED_IN_2_32 -void g_thread_set_priority (GThread *thread, - GThreadPriority priority); - -GLIB_DEPRECATED_IN_2_32 -void g_thread_foreach (GFunc thread_func, - gpointer user_data); - -#ifndef G_OS_WIN32 -#include -#endif - -#define g_static_mutex_get_mutex g_static_mutex_get_mutex_impl -#define G_STATIC_MUTEX_INIT { NULL } -typedef struct -{ - GMutex *mutex; -#ifndef G_OS_WIN32 - /* only for ABI compatibility reasons */ - pthread_mutex_t unused; -#endif -} GStaticMutex; - -#define g_static_mutex_lock(mutex) \ - g_mutex_lock (g_static_mutex_get_mutex (mutex)) -#define g_static_mutex_trylock(mutex) \ - g_mutex_trylock (g_static_mutex_get_mutex (mutex)) -#define g_static_mutex_unlock(mutex) \ - g_mutex_unlock (g_static_mutex_get_mutex (mutex)) - -GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_init) -void g_static_mutex_init (GStaticMutex *mutex); -GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_free) -void g_static_mutex_free (GStaticMutex *mutex); -GMutex *g_static_mutex_get_mutex_impl (GStaticMutex *mutex); - -typedef struct _GStaticRecMutex GStaticRecMutex; -struct _GStaticRecMutex -{ - /*< private >*/ - GStaticMutex mutex; - guint depth; - - /* ABI compat only */ - union { -#ifdef G_OS_WIN32 - void *owner; -#else - pthread_t owner; -#endif - gdouble dummy; - } unused; -}; - -#define G_STATIC_REC_MUTEX_INIT { G_STATIC_MUTEX_INIT } -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_init) -void g_static_rec_mutex_init (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_lock) -void g_static_rec_mutex_lock (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_try_lock) -gboolean g_static_rec_mutex_trylock (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_unlock) -void g_static_rec_mutex_unlock (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32 -void g_static_rec_mutex_lock_full (GStaticRecMutex *mutex, - guint depth); - -GLIB_DEPRECATED_IN_2_32 -guint g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_free) -void g_static_rec_mutex_free (GStaticRecMutex *mutex); - -typedef struct _GStaticRWLock GStaticRWLock; -struct _GStaticRWLock -{ - /*< private >*/ - GStaticMutex mutex; - GCond *read_cond; - GCond *write_cond; - guint read_counter; - gboolean have_writer; - guint want_to_read; - guint want_to_write; -}; - -#define G_STATIC_RW_LOCK_INIT { G_STATIC_MUTEX_INIT, NULL, NULL, 0, FALSE, 0, 0 } - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_init) -void g_static_rw_lock_init (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_lock) -void g_static_rw_lock_reader_lock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_trylock) -gboolean g_static_rw_lock_reader_trylock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_unlock) -void g_static_rw_lock_reader_unlock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_lock) -void g_static_rw_lock_writer_lock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_trylock) -gboolean g_static_rw_lock_writer_trylock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_unlock) -void g_static_rw_lock_writer_unlock (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_free) -void g_static_rw_lock_free (GStaticRWLock *lock); - -GLIB_DEPRECATED_IN_2_32 -GPrivate * g_private_new (GDestroyNotify notify); - -typedef struct _GStaticPrivate GStaticPrivate; -struct _GStaticPrivate -{ - /*< private >*/ - guint index; -}; - -#define G_STATIC_PRIVATE_INIT { 0 } -GLIB_DEPRECATED_IN_2_32 -void g_static_private_init (GStaticPrivate *private_key); - -GLIB_DEPRECATED_IN_2_32_FOR(g_private_get) -gpointer g_static_private_get (GStaticPrivate *private_key); - -GLIB_DEPRECATED_IN_2_32_FOR(g_private_set) -void g_static_private_set (GStaticPrivate *private_key, - gpointer data, - GDestroyNotify notify); - -GLIB_DEPRECATED_IN_2_32 -void g_static_private_free (GStaticPrivate *private_key); - -GLIB_DEPRECATED_IN_2_32 -gboolean g_once_init_enter_impl (volatile gsize *location); - -GLIB_DEPRECATED_IN_2_32 -void g_thread_init (gpointer vtable); -GLIB_DEPRECATED_IN_2_32 -void g_thread_init_with_errorcheck_mutexes (gpointer vtable); - -GLIB_DEPRECATED_IN_2_32 -gboolean g_thread_get_initialized (void); - -GLIB_VAR gboolean g_threads_got_initialized; - -#define g_thread_supported() (1) - -GLIB_DEPRECATED_IN_2_32 -GMutex * g_mutex_new (void); -GLIB_DEPRECATED_IN_2_32 -void g_mutex_free (GMutex *mutex); -GLIB_DEPRECATED_IN_2_32 -GCond * g_cond_new (void); -GLIB_DEPRECATED_IN_2_32 -void g_cond_free (GCond *cond); -GLIB_DEPRECATED_IN_2_32 -gboolean g_cond_timed_wait (GCond *cond, - GMutex *mutex, - GTimeVal *timeval); - -G_END_DECLS - -#endif /* __G_DEPRECATED_THREAD_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/galloca.h b/GstreamerHelper/x86/include/glib-2.0/glib/galloca.h deleted file mode 100644 index a18a75cd..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/galloca.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ALLOCA_H__ -#define __G_ALLOCA_H__ - -#include - -#if defined(__BIONIC__) && defined (GLIB_HAVE_ALLOCA_H) -# include -#elif defined(__GNUC__) -/* GCC does the right thing */ -# undef alloca -# define alloca(size) __builtin_alloca (size) -#elif defined (GLIB_HAVE_ALLOCA_H) -/* a native and working alloca.h is there */ -# include -#else /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */ -# if defined(_MSC_VER) || defined(__DMC__) -# include -# define alloca _alloca -# else /* !_MSC_VER && !__DMC__ */ -# ifdef _AIX -# pragma alloca -# else /* !_AIX */ -# ifndef alloca /* predefined by HP cc +Olibcalls */ -G_BEGIN_DECLS -char *alloca (); -G_END_DECLS -# endif /* !alloca */ -# endif /* !_AIX */ -# endif /* !_MSC_VER && !__DMC__ */ -#endif /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */ - -/** - * g_alloca: - * @size: number of bytes to allocate. - * - * Allocates @size bytes on the stack; these bytes will be freed when the current - * stack frame is cleaned up. This macro essentially just wraps the alloca() - * function present on most UNIX variants. - * Thus it provides the same advantages and pitfalls as alloca(): - * - * - * + alloca() is very fast, as on most systems it's implemented by just adjusting - * the stack pointer register. - * - * - * + It doesn't cause any memory fragmentation, within its scope, separate alloca() - * blocks just build up and are released together at function end. - * - * - * - Allocation sizes have to fit into the current stack frame. For instance in a - * threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes, - * so be sparse with alloca() uses. - * - * - * - Allocation failure due to insufficient stack space is not indicated with a %NULL - * return like e.g. with malloc(). Instead, most systems probably handle it the same - * way as out of stack space situations from infinite function recursion, i.e. - * with a segmentation fault. - * - * - * - Special care has to be taken when mixing alloca() with GNU C variable sized arrays. - * Stack space allocated with alloca() in the same scope as a variable sized array - * will be freed together with the variable sized array upon exit of that scope, and - * not upon exit of the enclosing function scope. - * - * - * - * Returns: space for @size bytes, allocated on the stack - */ -#define g_alloca(size) alloca (size) -/** - * g_newa: - * @struct_type: Type of memory chunks to be allocated - * @n_structs: Number of chunks to be allocated - * - * Wraps g_alloca() in a more typesafe manner. - * - * Returns: Pointer to stack space for @n_structs chunks of type @struct_type - */ -#define g_newa(struct_type, n_structs) ((struct_type*) g_alloca (sizeof (struct_type) * (gsize) (n_structs))) - -#endif /* __G_ALLOCA_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/garray.h b/GstreamerHelper/x86/include/glib-2.0/glib/garray.h deleted file mode 100644 index eb37b92e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/garray.h +++ /dev/null @@ -1,187 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ARRAY_H__ -#define __G_ARRAY_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GBytes GBytes; -typedef struct _GArray GArray; -typedef struct _GByteArray GByteArray; -typedef struct _GPtrArray GPtrArray; - -struct _GArray -{ - gchar *data; - guint len; -}; - -struct _GByteArray -{ - guint8 *data; - guint len; -}; - -struct _GPtrArray -{ - gpointer *pdata; - guint len; -}; - -/* Resizable arrays. remove fills any cleared spot and shortens the - * array, while preserving the order. remove_fast will distort the - * order by moving the last element to the position of the removed. - */ - -#define g_array_append_val(a,v) g_array_append_vals (a, &(v), 1) -#define g_array_prepend_val(a,v) g_array_prepend_vals (a, &(v), 1) -#define g_array_insert_val(a,i,v) g_array_insert_vals (a, i, &(v), 1) -#define g_array_index(a,t,i) (((t*) (void *) (a)->data) [(i)]) - -GArray* g_array_new (gboolean zero_terminated, - gboolean clear_, - guint element_size); -GArray* g_array_sized_new (gboolean zero_terminated, - gboolean clear_, - guint element_size, - guint reserved_size); -gchar* g_array_free (GArray *array, - gboolean free_segment); -GArray *g_array_ref (GArray *array); -void g_array_unref (GArray *array); -guint g_array_get_element_size (GArray *array); -GArray* g_array_append_vals (GArray *array, - gconstpointer data, - guint len); -GArray* g_array_prepend_vals (GArray *array, - gconstpointer data, - guint len); -GArray* g_array_insert_vals (GArray *array, - guint index_, - gconstpointer data, - guint len); -GArray* g_array_set_size (GArray *array, - guint length); -GArray* g_array_remove_index (GArray *array, - guint index_); -GArray* g_array_remove_index_fast (GArray *array, - guint index_); -GArray* g_array_remove_range (GArray *array, - guint index_, - guint length); -void g_array_sort (GArray *array, - GCompareFunc compare_func); -void g_array_sort_with_data (GArray *array, - GCompareDataFunc compare_func, - gpointer user_data); -void g_array_set_clear_func (GArray *array, - GDestroyNotify clear_func); - -/* Resizable pointer array. This interface is much less complicated - * than the above. Add appends a pointer. Remove fills any cleared - * spot and shortens the array. remove_fast will again distort order. - */ -#define g_ptr_array_index(array,index_) ((array)->pdata)[index_] -GPtrArray* g_ptr_array_new (void); -GPtrArray* g_ptr_array_new_with_free_func (GDestroyNotify element_free_func); -GPtrArray* g_ptr_array_sized_new (guint reserved_size); -GPtrArray* g_ptr_array_new_full (guint reserved_size, - GDestroyNotify element_free_func); -gpointer* g_ptr_array_free (GPtrArray *array, - gboolean free_seg); -GPtrArray* g_ptr_array_ref (GPtrArray *array); -void g_ptr_array_unref (GPtrArray *array); -void g_ptr_array_set_free_func (GPtrArray *array, - GDestroyNotify element_free_func); -void g_ptr_array_set_size (GPtrArray *array, - gint length); -gpointer g_ptr_array_remove_index (GPtrArray *array, - guint index_); -gpointer g_ptr_array_remove_index_fast (GPtrArray *array, - guint index_); -gboolean g_ptr_array_remove (GPtrArray *array, - gpointer data); -gboolean g_ptr_array_remove_fast (GPtrArray *array, - gpointer data); -void g_ptr_array_remove_range (GPtrArray *array, - guint index_, - guint length); -void g_ptr_array_add (GPtrArray *array, - gpointer data); -void g_ptr_array_sort (GPtrArray *array, - GCompareFunc compare_func); -void g_ptr_array_sort_with_data (GPtrArray *array, - GCompareDataFunc compare_func, - gpointer user_data); -void g_ptr_array_foreach (GPtrArray *array, - GFunc func, - gpointer user_data); - - -/* Byte arrays, an array of guint8. Implemented as a GArray, - * but type-safe. - */ - -GByteArray* g_byte_array_new (void); -GByteArray* g_byte_array_new_take (guint8 *data, - gsize len); -GByteArray* g_byte_array_sized_new (guint reserved_size); -guint8* g_byte_array_free (GByteArray *array, - gboolean free_segment); -GBytes* g_byte_array_free_to_bytes (GByteArray *array); -GByteArray *g_byte_array_ref (GByteArray *array); -void g_byte_array_unref (GByteArray *array); -GByteArray* g_byte_array_append (GByteArray *array, - const guint8 *data, - guint len); -GByteArray* g_byte_array_prepend (GByteArray *array, - const guint8 *data, - guint len); -GByteArray* g_byte_array_set_size (GByteArray *array, - guint length); -GByteArray* g_byte_array_remove_index (GByteArray *array, - guint index_); -GByteArray* g_byte_array_remove_index_fast (GByteArray *array, - guint index_); -GByteArray* g_byte_array_remove_range (GByteArray *array, - guint index_, - guint length); -void g_byte_array_sort (GByteArray *array, - GCompareFunc compare_func); -void g_byte_array_sort_with_data (GByteArray *array, - GCompareDataFunc compare_func, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_ARRAY_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gasyncqueue.h b/GstreamerHelper/x86/include/glib-2.0/glib/gasyncqueue.h deleted file mode 100644 index f0d6d959..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gasyncqueue.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ASYNCQUEUE_H__ -#define __G_ASYNCQUEUE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GAsyncQueue GAsyncQueue; - -GAsyncQueue *g_async_queue_new (void); -GAsyncQueue *g_async_queue_new_full (GDestroyNotify item_free_func); -void g_async_queue_lock (GAsyncQueue *queue); -void g_async_queue_unlock (GAsyncQueue *queue); -GAsyncQueue *g_async_queue_ref (GAsyncQueue *queue); -void g_async_queue_unref (GAsyncQueue *queue); - -GLIB_DEPRECATED_FOR(g_async_queue_ref) -void g_async_queue_ref_unlocked (GAsyncQueue *queue); - -GLIB_DEPRECATED_FOR(g_async_queue_unref) -void g_async_queue_unref_and_unlock (GAsyncQueue *queue); - -void g_async_queue_push (GAsyncQueue *queue, - gpointer data); -void g_async_queue_push_unlocked (GAsyncQueue *queue, - gpointer data); -void g_async_queue_push_sorted (GAsyncQueue *queue, - gpointer data, - GCompareDataFunc func, - gpointer user_data); -void g_async_queue_push_sorted_unlocked (GAsyncQueue *queue, - gpointer data, - GCompareDataFunc func, - gpointer user_data); -gpointer g_async_queue_pop (GAsyncQueue *queue); -gpointer g_async_queue_pop_unlocked (GAsyncQueue *queue); -gpointer g_async_queue_try_pop (GAsyncQueue *queue); -gpointer g_async_queue_try_pop_unlocked (GAsyncQueue *queue); -gpointer g_async_queue_timeout_pop (GAsyncQueue *queue, - guint64 timeout); -gpointer g_async_queue_timeout_pop_unlocked (GAsyncQueue *queue, - guint64 timeout); -gint g_async_queue_length (GAsyncQueue *queue); -gint g_async_queue_length_unlocked (GAsyncQueue *queue); -void g_async_queue_sort (GAsyncQueue *queue, - GCompareDataFunc func, - gpointer user_data); -void g_async_queue_sort_unlocked (GAsyncQueue *queue, - GCompareDataFunc func, - gpointer user_data); - -GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop) -gpointer g_async_queue_timed_pop (GAsyncQueue *queue, - GTimeVal *end_time); -GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop_unlocked) -gpointer g_async_queue_timed_pop_unlocked (GAsyncQueue *queue, - GTimeVal *end_time); - -G_END_DECLS - -#endif /* __G_ASYNCQUEUE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gatomic.h b/GstreamerHelper/x86/include/glib-2.0/glib/gatomic.h deleted file mode 100644 index 8b52e0b3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gatomic.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright © 2011 Ryan Lortie - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ATOMIC_H__ -#define __G_ATOMIC_H__ - -#include - -G_BEGIN_DECLS - -gint g_atomic_int_get (volatile gint *atomic); -void g_atomic_int_set (volatile gint *atomic, - gint newval); -void g_atomic_int_inc (volatile gint *atomic); -gboolean g_atomic_int_dec_and_test (volatile gint *atomic); -gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic, - gint oldval, - gint newval); -gint g_atomic_int_add (volatile gint *atomic, - gint val); -GLIB_AVAILABLE_IN_2_30 -guint g_atomic_int_and (volatile guint *atomic, - guint val); -GLIB_AVAILABLE_IN_2_30 -guint g_atomic_int_or (volatile guint *atomic, - guint val); -guint g_atomic_int_xor (volatile guint *atomic, - guint val); - -gpointer g_atomic_pointer_get (volatile void *atomic); -void g_atomic_pointer_set (volatile void *atomic, - gpointer newval); -gboolean g_atomic_pointer_compare_and_exchange (volatile void *atomic, - gpointer oldval, - gpointer newval); -gssize g_atomic_pointer_add (volatile void *atomic, - gssize val); -GLIB_AVAILABLE_IN_2_30 -gsize g_atomic_pointer_and (volatile void *atomic, - gsize val); -GLIB_AVAILABLE_IN_2_30 -gsize g_atomic_pointer_or (volatile void *atomic, - gsize val); -gsize g_atomic_pointer_xor (volatile void *atomic, - gsize val); - -GLIB_DEPRECATED_IN_2_30_FOR(g_atomic_add) -gint g_atomic_int_exchange_and_add (volatile gint *atomic, - gint val); - -G_END_DECLS - -#if defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - -#define g_atomic_int_get(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ *(atomic) : 0); \ - __sync_synchronize (); \ - (gint) *(atomic); \ - })) -#define g_atomic_int_set(atomic, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (newval) : 0); \ - *(atomic) = (newval); \ - __sync_synchronize (); \ - })) -#define g_atomic_int_inc(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ *(atomic) : 0); \ - (void) __sync_fetch_and_add ((atomic), 1); \ - })) -#define g_atomic_int_dec_and_test(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ *(atomic) : 0); \ - __sync_fetch_and_sub ((atomic), 1) == 1; \ - })) -#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 0); \ - (gboolean) __sync_bool_compare_and_swap ((atomic), (oldval), (newval)); \ - })) -#define g_atomic_int_add(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (gint) __sync_fetch_and_add ((atomic), (val)); \ - })) -#define g_atomic_int_and(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (guint) __sync_fetch_and_and ((atomic), (val)); \ - })) -#define g_atomic_int_or(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (guint) __sync_fetch_and_or ((atomic), (val)); \ - })) -#define g_atomic_int_xor(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint)); \ - (void) (0 ? *(atomic) ^ (val) : 0); \ - (guint) __sync_fetch_and_xor ((atomic), (val)); \ - })) - -#define g_atomic_pointer_get(atomic) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - __sync_synchronize (); \ - (gpointer) *(atomic); \ - })) -#define g_atomic_pointer_set(atomic, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - *(atomic) = (__typeof__ (*(atomic))) (gsize) (newval); \ - __sync_synchronize (); \ - })) -#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (gboolean) __sync_bool_compare_and_swap ((atomic), (oldval), (newval)); \ - })) -#define g_atomic_pointer_add(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gssize) __sync_fetch_and_add ((atomic), (val)); \ - })) -#define g_atomic_pointer_and(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gsize) __sync_fetch_and_and ((atomic), (val)); \ - })) -#define g_atomic_pointer_or(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gsize) __sync_fetch_and_or ((atomic), (val)); \ - })) -#define g_atomic_pointer_xor(atomic, val) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : 0); \ - (void) (0 ? (val) ^ (val) : 0); \ - (gsize) __sync_fetch_and_xor ((atomic), (val)); \ - })) - -#else /* defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) */ - -#define g_atomic_int_get(atomic) \ - (g_atomic_int_get ((gint *) (atomic))) -#define g_atomic_int_set(atomic, newval) \ - (g_atomic_int_set ((gint *) (atomic), (gint) (newval))) -#define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \ - (g_atomic_int_compare_and_exchange ((gint *) (atomic), (oldval), (newval))) -#define g_atomic_int_add(atomic, val) \ - (g_atomic_int_add ((gint *) (atomic), (val))) -#define g_atomic_int_and(atomic, val) \ - (g_atomic_int_and ((guint *) (atomic), (val))) -#define g_atomic_int_or(atomic, val) \ - (g_atomic_int_or ((guint *) (atomic), (val))) -#define g_atomic_int_xor(atomic, val) \ - (g_atomic_int_xor ((guint *) (atomic), (val))) -#define g_atomic_int_inc(atomic) \ - (g_atomic_int_inc ((gint *) (atomic))) -#define g_atomic_int_dec_and_test(atomic) \ - (g_atomic_int_dec_and_test ((gint *) (atomic))) - -#define g_atomic_pointer_get(atomic) \ - (g_atomic_pointer_get (atomic)) -#define g_atomic_pointer_set(atomic, newval) \ - (g_atomic_pointer_set ((atomic), (gpointer) (newval))) -#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \ - (g_atomic_pointer_compare_and_exchange ((atomic), (gpointer) (oldval), (gpointer) (newval))) -#define g_atomic_pointer_add(atomic, val) \ - (g_atomic_pointer_add ((atomic), (gssize) (val))) -#define g_atomic_pointer_and(atomic, val) \ - (g_atomic_pointer_and ((atomic), (gsize) (val))) -#define g_atomic_pointer_or(atomic, val) \ - (g_atomic_pointer_or ((atomic), (gsize) (val))) -#define g_atomic_pointer_xor(atomic, val) \ - (g_atomic_pointer_xor ((atomic), (gsize) (val))) - -#endif /* defined(__GNUC__) && defined(G_ATOMIC_OP_USE_GCC_BUILTINS) */ - -#endif /* __G_ATOMIC_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gbacktrace.h b/GstreamerHelper/x86/include/glib-2.0/glib/gbacktrace.h deleted file mode 100644 index f0a6eab9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gbacktrace.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BACKTRACE_H__ -#define __G_BACKTRACE_H__ - -#include -#include - -G_BEGIN_DECLS - -void g_on_error_query (const gchar *prg_name); -void g_on_error_stack_trace (const gchar *prg_name); - -/** - * G_BREAKPOINT: - * - * Inserts a breakpoint instruction into the code. - * - * On x86 and alpha systems this is implemented as a soft interrupt - * and on other architectures it raises a SIGTRAP signal. - */ -#if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__) && __GNUC__ >= 2 -# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END -#elif (defined (_MSC_VER) || defined (__DMC__)) && defined (_M_IX86) -# define G_BREAKPOINT() G_STMT_START{ __asm int 3h }G_STMT_END -#elif defined (_MSC_VER) -# define G_BREAKPOINT() G_STMT_START{ __debugbreak(); }G_STMT_END -#elif defined (__alpha__) && !defined(__osf__) && defined (__GNUC__) && __GNUC__ >= 2 -# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END -#else /* !__i386__ && !__alpha__ */ -# define G_BREAKPOINT() G_STMT_START{ raise (SIGTRAP); }G_STMT_END -#endif /* __i386__ */ - -G_END_DECLS - -#endif /* __G_BACKTRACE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gbase64.h b/GstreamerHelper/x86/include/glib-2.0/glib/gbase64.h deleted file mode 100644 index 88ce6d8a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gbase64.h +++ /dev/null @@ -1,57 +0,0 @@ -/* gbase64.h - Base64 coding functions - * - * Copyright (C) 2005 Alexander Larsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BASE64_H__ -#define __G_BASE64_H__ - -#include - -G_BEGIN_DECLS - -gsize g_base64_encode_step (const guchar *in, - gsize len, - gboolean break_lines, - gchar *out, - gint *state, - gint *save); -gsize g_base64_encode_close (gboolean break_lines, - gchar *out, - gint *state, - gint *save); -gchar* g_base64_encode (const guchar *data, - gsize len) G_GNUC_MALLOC; -gsize g_base64_decode_step (const gchar *in, - gsize len, - guchar *out, - gint *state, - guint *save); -guchar *g_base64_decode (const gchar *text, - gsize *out_len) G_GNUC_MALLOC; -guchar *g_base64_decode_inplace (gchar *text, - gsize *out_len); - - -G_END_DECLS - -#endif /* __G_BASE64_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gbitlock.h b/GstreamerHelper/x86/include/glib-2.0/glib/gbitlock.h deleted file mode 100644 index 641ee696..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gbitlock.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2008 Ryan Lortie - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#ifndef __G_BITLOCK_H__ -#define __G_BITLOCK_H__ - -#include - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -G_BEGIN_DECLS - -void g_bit_lock (volatile gint *address, - gint lock_bit); -gboolean g_bit_trylock (volatile gint *address, - gint lock_bit); -void g_bit_unlock (volatile gint *address, - gint lock_bit); - -void g_pointer_bit_lock (volatile void *address, - gint lock_bit); -gboolean g_pointer_bit_trylock (volatile void *address, - gint lock_bit); -void g_pointer_bit_unlock (volatile void *address, - gint lock_bit); - -#ifdef __GNUC__ - -#define g_pointer_bit_lock(address, lock_bit) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \ - g_pointer_bit_lock ((address), (lock_bit)); \ - })) - -#define g_pointer_bit_trylock(address, lock_bit) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \ - g_pointer_bit_trylock ((address), (lock_bit)); \ - })) - -#define g_pointer_bit_unlock(address, lock_bit) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer)); \ - g_pointer_bit_unlock ((address), (lock_bit)); \ - })) - -#endif - -G_END_DECLS - -#endif /* __G_BITLOCK_H_ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gbookmarkfile.h b/GstreamerHelper/x86/include/glib-2.0/glib/gbookmarkfile.h deleted file mode 100644 index 6b2ee6f4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gbookmarkfile.h +++ /dev/null @@ -1,215 +0,0 @@ -/* gbookmarkfile.h: parsing and building desktop bookmarks - * - * Copyright (C) 2005-2006 Emmanuele Bassi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BOOKMARK_FILE_H__ -#define __G_BOOKMARK_FILE_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * G_BOOKMARK_FILE_ERROR: - * - * Error domain for bookmark file parsing. - * Errors in this domain will be from the #GBookmarkFileError - * enumeration. See #GError for information on error domains. - */ -#define G_BOOKMARK_FILE_ERROR (g_bookmark_file_error_quark ()) - - -/** - * GBookmarkFileError: - * @G_BOOKMARK_FILE_ERROR_INVALID_URI: URI was ill-formed - * @G_BOOKMARK_FILE_ERROR_INVALID_VALUE: a requested field was not found - * @G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: a requested application did - * not register a bookmark - * @G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: a requested URI was not found - * @G_BOOKMARK_FILE_ERROR_READ: document was ill formed - * @G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: the text being parsed was - * in an unknown encoding - * @G_BOOKMARK_FILE_ERROR_WRITE: an error occurred while writing - * @G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: requested file was not found - * - * Error codes returned by bookmark file parsing. - */ -typedef enum -{ - G_BOOKMARK_FILE_ERROR_INVALID_URI, - G_BOOKMARK_FILE_ERROR_INVALID_VALUE, - G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED, - G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND, - G_BOOKMARK_FILE_ERROR_READ, - G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING, - G_BOOKMARK_FILE_ERROR_WRITE, - G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND -} GBookmarkFileError; - -GQuark g_bookmark_file_error_quark (void); - -/** - * GBookmarkFile: - * - * The GBookmarkFile struct contains only - * private data and should not be directly accessed. - */ -typedef struct _GBookmarkFile GBookmarkFile; - -GBookmarkFile *g_bookmark_file_new (void); -void g_bookmark_file_free (GBookmarkFile *bookmark); - -gboolean g_bookmark_file_load_from_file (GBookmarkFile *bookmark, - const gchar *filename, - GError **error); -gboolean g_bookmark_file_load_from_data (GBookmarkFile *bookmark, - const gchar *data, - gsize length, - GError **error); -gboolean g_bookmark_file_load_from_data_dirs (GBookmarkFile *bookmark, - const gchar *file, - gchar **full_path, - GError **error); -gchar * g_bookmark_file_to_data (GBookmarkFile *bookmark, - gsize *length, - GError **error) G_GNUC_MALLOC; -gboolean g_bookmark_file_to_file (GBookmarkFile *bookmark, - const gchar *filename, - GError **error); - -void g_bookmark_file_set_title (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *title); -gchar * g_bookmark_file_get_title (GBookmarkFile *bookmark, - const gchar *uri, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_set_description (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *description); -gchar * g_bookmark_file_get_description (GBookmarkFile *bookmark, - const gchar *uri, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_set_mime_type (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *mime_type); -gchar * g_bookmark_file_get_mime_type (GBookmarkFile *bookmark, - const gchar *uri, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_set_groups (GBookmarkFile *bookmark, - const gchar *uri, - const gchar **groups, - gsize length); -void g_bookmark_file_add_group (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *group); -gboolean g_bookmark_file_has_group (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *group, - GError **error); -gchar ** g_bookmark_file_get_groups (GBookmarkFile *bookmark, - const gchar *uri, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_bookmark_file_add_application (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - const gchar *exec); -gboolean g_bookmark_file_has_application (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - GError **error); -gchar ** g_bookmark_file_get_applications (GBookmarkFile *bookmark, - const gchar *uri, - gsize *length, - GError **error) G_GNUC_MALLOC; -gboolean g_bookmark_file_set_app_info (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - const gchar *exec, - gint count, - time_t stamp, - GError **error); -gboolean g_bookmark_file_get_app_info (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - gchar **exec, - guint *count, - time_t *stamp, - GError **error); -void g_bookmark_file_set_is_private (GBookmarkFile *bookmark, - const gchar *uri, - gboolean is_private); -gboolean g_bookmark_file_get_is_private (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -void g_bookmark_file_set_icon (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *href, - const gchar *mime_type); -gboolean g_bookmark_file_get_icon (GBookmarkFile *bookmark, - const gchar *uri, - gchar **href, - gchar **mime_type, - GError **error); -void g_bookmark_file_set_added (GBookmarkFile *bookmark, - const gchar *uri, - time_t added); -time_t g_bookmark_file_get_added (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -void g_bookmark_file_set_modified (GBookmarkFile *bookmark, - const gchar *uri, - time_t modified); -time_t g_bookmark_file_get_modified (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -void g_bookmark_file_set_visited (GBookmarkFile *bookmark, - const gchar *uri, - time_t visited); -time_t g_bookmark_file_get_visited (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -gboolean g_bookmark_file_has_item (GBookmarkFile *bookmark, - const gchar *uri); -gint g_bookmark_file_get_size (GBookmarkFile *bookmark); -gchar ** g_bookmark_file_get_uris (GBookmarkFile *bookmark, - gsize *length) G_GNUC_MALLOC; -gboolean g_bookmark_file_remove_group (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *group, - GError **error); -gboolean g_bookmark_file_remove_application (GBookmarkFile *bookmark, - const gchar *uri, - const gchar *name, - GError **error); -gboolean g_bookmark_file_remove_item (GBookmarkFile *bookmark, - const gchar *uri, - GError **error); -gboolean g_bookmark_file_move_item (GBookmarkFile *bookmark, - const gchar *old_uri, - const gchar *new_uri, - GError **error); - -G_END_DECLS - -#endif /* __G_BOOKMARK_FILE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gbytes.h b/GstreamerHelper/x86/include/glib-2.0/glib/gbytes.h deleted file mode 100644 index de3c8f80..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gbytes.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2009, 2010 Codethink Limited - * Copyright © 2011 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - * Stef Walter - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BYTES_H__ -#define __G_BYTES_H__ - -#include -#include - -G_BEGIN_DECLS - -GBytes * g_bytes_new (gconstpointer data, - gsize size); - -GBytes * g_bytes_new_take (gpointer data, - gsize size); - -GBytes * g_bytes_new_static (gconstpointer data, - gsize size); - -GBytes * g_bytes_new_with_free_func (gconstpointer data, - gsize size, - GDestroyNotify free_func, - gpointer user_data); - -GBytes * g_bytes_new_from_bytes (GBytes *bytes, - gsize offset, - gsize length); - -gconstpointer g_bytes_get_data (GBytes *bytes, - gsize *size); - -gsize g_bytes_get_size (GBytes *bytes); - -GBytes * g_bytes_ref (GBytes *bytes); - -void g_bytes_unref (GBytes *bytes); - -gpointer g_bytes_unref_to_data (GBytes *bytes, - gsize *size); - -GByteArray * g_bytes_unref_to_array (GBytes *bytes); - -guint g_bytes_hash (gconstpointer bytes); - -gboolean g_bytes_equal (gconstpointer bytes1, - gconstpointer bytes2); - -gint g_bytes_compare (gconstpointer bytes1, - gconstpointer bytes2); - -G_END_DECLS - -#endif /* __G_BYTES_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gcharset.h b/GstreamerHelper/x86/include/glib-2.0/glib/gcharset.h deleted file mode 100644 index 9b56524c..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gcharset.h +++ /dev/null @@ -1,40 +0,0 @@ -/* gcharset.h - Charset functions - * - * Copyright (C) 2011 Red Hat, Inc. - * - * The GLib Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The GLib Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CHARSET_H__ -#define __G_CHARSET_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_get_charset (const char **charset); -gchar * g_get_codeset (void); - -const gchar * const * g_get_language_names (void); -gchar ** g_get_locale_variants (const gchar *locale); - -G_END_DECLS - -#endif /* __G_CHARSET_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gchecksum.h b/GstreamerHelper/x86/include/glib-2.0/glib/gchecksum.h deleted file mode 100644 index b0621f24..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gchecksum.h +++ /dev/null @@ -1,91 +0,0 @@ -/* gchecksum.h - data hashing functions - * - * Copyright (C) 2007 Emmanuele Bassi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CHECKSUM_H__ -#define __G_CHECKSUM_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GChecksumType: - * @G_CHECKSUM_MD5: Use the MD5 hashing algorithm - * @G_CHECKSUM_SHA1: Use the SHA-1 hashing algorithm - * @G_CHECKSUM_SHA256: Use the SHA-256 hashing algorithm - * - * The hashing algorithm to be used by #GChecksum when performing the - * digest of some data. - * - * Note that the #GChecksumType enumeration may be extended at a later - * date to include new hashing algorithm types. - * - * Since: 2.16 - */ -typedef enum { - G_CHECKSUM_MD5, - G_CHECKSUM_SHA1, - G_CHECKSUM_SHA256 -} GChecksumType; - -/** - * GChecksum: - * - * An opaque structure representing a checksumming operation. - * To create a new GChecksum, use g_checksum_new(). To free - * a GChecksum, use g_checksum_free(). - * - * Since: 2.16 - */ -typedef struct _GChecksum GChecksum; - -gssize g_checksum_type_get_length (GChecksumType checksum_type); - -GChecksum * g_checksum_new (GChecksumType checksum_type); -void g_checksum_reset (GChecksum *checksum); -GChecksum * g_checksum_copy (const GChecksum *checksum); -void g_checksum_free (GChecksum *checksum); -void g_checksum_update (GChecksum *checksum, - const guchar *data, - gssize length); -const gchar * g_checksum_get_string (GChecksum *checksum); -void g_checksum_get_digest (GChecksum *checksum, - guint8 *buffer, - gsize *digest_len); - -gchar *g_compute_checksum_for_data (GChecksumType checksum_type, - const guchar *data, - gsize length); -gchar *g_compute_checksum_for_string (GChecksumType checksum_type, - const gchar *str, - gssize length); - -GLIB_AVAILABLE_IN_2_34 -gchar *g_compute_checksum_for_bytes (GChecksumType checksum_type, - GBytes *data); - -G_END_DECLS - -#endif /* __G_CHECKSUM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gconvert.h b/GstreamerHelper/x86/include/glib-2.0/glib/gconvert.h deleted file mode 100644 index 7fd16c84..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gconvert.h +++ /dev/null @@ -1,164 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CONVERT_H__ -#define __G_CONVERT_H__ - -#include - -G_BEGIN_DECLS - -/** - * GConvertError: - * @G_CONVERT_ERROR_NO_CONVERSION: Conversion between the requested character - * sets is not supported. - * @G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input. - * @G_CONVERT_ERROR_FAILED: Conversion failed for some reason. - * @G_CONVERT_ERROR_PARTIAL_INPUT: Partial character sequence at end of input. - * @G_CONVERT_ERROR_BAD_URI: URI is invalid. - * @G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: Pathname is not an absolute path. - * - * Error codes returned by character set conversion routines. - */ -typedef enum -{ - G_CONVERT_ERROR_NO_CONVERSION, - G_CONVERT_ERROR_ILLEGAL_SEQUENCE, - G_CONVERT_ERROR_FAILED, - G_CONVERT_ERROR_PARTIAL_INPUT, - G_CONVERT_ERROR_BAD_URI, - G_CONVERT_ERROR_NOT_ABSOLUTE_PATH -} GConvertError; - -/** - * G_CONVERT_ERROR: - * - * Error domain for character set conversions. Errors in this domain will - * be from the #GConvertError enumeration. See #GError for information on - * error domains. - */ -#define G_CONVERT_ERROR g_convert_error_quark() -GQuark g_convert_error_quark (void); - -/** - * GIconv: - * - * The GIConv struct wraps an - * iconv() conversion descriptor. It contains private data - * and should only be accessed using the following functions. - */ -typedef struct _GIConv *GIConv; - -GIConv g_iconv_open (const gchar *to_codeset, - const gchar *from_codeset); -gsize g_iconv (GIConv converter, - gchar **inbuf, - gsize *inbytes_left, - gchar **outbuf, - gsize *outbytes_left); -gint g_iconv_close (GIConv converter); - - -gchar* g_convert (const gchar *str, - gssize len, - const gchar *to_codeset, - const gchar *from_codeset, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_convert_with_iconv (const gchar *str, - gssize len, - GIConv converter, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_convert_with_fallback (const gchar *str, - gssize len, - const gchar *to_codeset, - const gchar *from_codeset, - const gchar *fallback, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; - - -/* Convert between libc's idea of strings and UTF-8. - */ -gchar* g_locale_to_utf8 (const gchar *opsysstring, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_locale_from_utf8 (const gchar *utf8string, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; - -/* Convert between the operating system (or C runtime) - * representation of file names and UTF-8. - */ -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_filename_to_utf8 g_filename_to_utf8_utf8 -#define g_filename_from_utf8 g_filename_from_utf8_utf8 -#define g_filename_from_uri g_filename_from_uri_utf8 -#define g_filename_to_uri g_filename_to_uri_utf8 -#endif -#endif - -gchar* g_filename_to_utf8 (const gchar *opsysstring, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; -gchar* g_filename_from_utf8 (const gchar *utf8string, - gssize len, - gsize *bytes_read, - gsize *bytes_written, - GError **error) G_GNUC_MALLOC; - -gchar *g_filename_from_uri (const gchar *uri, - gchar **hostname, - GError **error) G_GNUC_MALLOC; - -gchar *g_filename_to_uri (const gchar *filename, - const gchar *hostname, - GError **error) G_GNUC_MALLOC; -gchar *g_filename_display_name (const gchar *filename) G_GNUC_MALLOC; -gboolean g_get_filename_charsets (const gchar ***charsets); - -gchar *g_filename_display_basename (const gchar *filename) G_GNUC_MALLOC; - -gchar **g_uri_list_extract_uris (const gchar *uri_list) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_CONVERT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gdataset.h b/GstreamerHelper/x86/include/glib-2.0/glib/gdataset.h deleted file mode 100644 index a93f6ae9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gdataset.h +++ /dev/null @@ -1,137 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATASET_H__ -#define __G_DATASET_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GData GData; - -typedef void (*GDataForeachFunc) (GQuark key_id, - gpointer data, - gpointer user_data); - -/* Keyed Data List - */ -void g_datalist_init (GData **datalist); -void g_datalist_clear (GData **datalist); -gpointer g_datalist_id_get_data (GData **datalist, - GQuark key_id); -void g_datalist_id_set_data_full (GData **datalist, - GQuark key_id, - gpointer data, - GDestroyNotify destroy_func); - -typedef gpointer (*GDuplicateFunc) (gpointer data, gpointer user_data); - -GLIB_AVAILABLE_IN_2_34 -gpointer g_datalist_id_dup_data (GData **datalist, - GQuark key_id, - GDuplicateFunc dup_func, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gboolean g_datalist_id_replace_data (GData **datalist, - GQuark key_id, - gpointer oldval, - gpointer newval, - GDestroyNotify destroy, - GDestroyNotify *old_destroy); - -gpointer g_datalist_id_remove_no_notify (GData **datalist, - GQuark key_id); -void g_datalist_foreach (GData **datalist, - GDataForeachFunc func, - gpointer user_data); - -/** - * G_DATALIST_FLAGS_MASK: - * - * A bitmask that restricts the possible flags passed to - * g_datalist_set_flags(). Passing a flags value where - * flags & ~G_DATALIST_FLAGS_MASK != 0 is an error. - */ -#define G_DATALIST_FLAGS_MASK 0x3 - -void g_datalist_set_flags (GData **datalist, - guint flags); -void g_datalist_unset_flags (GData **datalist, - guint flags); -guint g_datalist_get_flags (GData **datalist); - -#define g_datalist_id_set_data(dl, q, d) \ - g_datalist_id_set_data_full ((dl), (q), (d), NULL) -#define g_datalist_id_remove_data(dl, q) \ - g_datalist_id_set_data ((dl), (q), NULL) -#define g_datalist_set_data_full(dl, k, d, f) \ - g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f)) -#define g_datalist_remove_no_notify(dl, k) \ - g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k)) -#define g_datalist_set_data(dl, k, d) \ - g_datalist_set_data_full ((dl), (k), (d), NULL) -#define g_datalist_remove_data(dl, k) \ - g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL) - -/* Location Associated Keyed Data - */ -void g_dataset_destroy (gconstpointer dataset_location); -gpointer g_dataset_id_get_data (gconstpointer dataset_location, - GQuark key_id); -gpointer g_datalist_get_data (GData **datalist, - const gchar *key); -void g_dataset_id_set_data_full (gconstpointer dataset_location, - GQuark key_id, - gpointer data, - GDestroyNotify destroy_func); -gpointer g_dataset_id_remove_no_notify (gconstpointer dataset_location, - GQuark key_id); -void g_dataset_foreach (gconstpointer dataset_location, - GDataForeachFunc func, - gpointer user_data); -#define g_dataset_id_set_data(l, k, d) \ - g_dataset_id_set_data_full ((l), (k), (d), NULL) -#define g_dataset_id_remove_data(l, k) \ - g_dataset_id_set_data ((l), (k), NULL) -#define g_dataset_get_data(l, k) \ - (g_dataset_id_get_data ((l), g_quark_try_string (k))) -#define g_dataset_set_data_full(l, k, d, f) \ - g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f)) -#define g_dataset_remove_no_notify(l, k) \ - g_dataset_id_remove_no_notify ((l), g_quark_try_string (k)) -#define g_dataset_set_data(l, k, d) \ - g_dataset_set_data_full ((l), (k), (d), NULL) -#define g_dataset_remove_data(l, k) \ - g_dataset_id_set_data ((l), g_quark_try_string (k), NULL) - -G_END_DECLS - -#endif /* __G_DATASET_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gdate.h b/GstreamerHelper/x86/include/glib-2.0/glib/gdate.h deleted file mode 100644 index 5ef1850b..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gdate.h +++ /dev/null @@ -1,264 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATE_H__ -#define __G_DATE_H__ - -#include - -#include -#include - -G_BEGIN_DECLS - -/* GDate - * - * Date calculations (not time for now, to be resolved). These are a - * mutant combination of Steffen Beyer's DateCalc routines - * (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's - * date routines (written for in-house software). Written by Havoc - * Pennington - */ - -typedef gint32 GTime; -typedef guint16 GDateYear; -typedef guint8 GDateDay; /* day of the month */ -typedef struct _GDate GDate; - -/* enum used to specify order of appearance in parsed date strings */ -typedef enum -{ - G_DATE_DAY = 0, - G_DATE_MONTH = 1, - G_DATE_YEAR = 2 -} GDateDMY; - -/* actual week and month values */ -typedef enum -{ - G_DATE_BAD_WEEKDAY = 0, - G_DATE_MONDAY = 1, - G_DATE_TUESDAY = 2, - G_DATE_WEDNESDAY = 3, - G_DATE_THURSDAY = 4, - G_DATE_FRIDAY = 5, - G_DATE_SATURDAY = 6, - G_DATE_SUNDAY = 7 -} GDateWeekday; -typedef enum -{ - G_DATE_BAD_MONTH = 0, - G_DATE_JANUARY = 1, - G_DATE_FEBRUARY = 2, - G_DATE_MARCH = 3, - G_DATE_APRIL = 4, - G_DATE_MAY = 5, - G_DATE_JUNE = 6, - G_DATE_JULY = 7, - G_DATE_AUGUST = 8, - G_DATE_SEPTEMBER = 9, - G_DATE_OCTOBER = 10, - G_DATE_NOVEMBER = 11, - G_DATE_DECEMBER = 12 -} GDateMonth; - -#define G_DATE_BAD_JULIAN 0U -#define G_DATE_BAD_DAY 0U -#define G_DATE_BAD_YEAR 0U - -/* Note: directly manipulating structs is generally a bad idea, but - * in this case it's an *incredibly* bad idea, because all or part - * of this struct can be invalid at any given time. Use the functions, - * or you will get hosed, I promise. - */ -struct _GDate -{ - guint julian_days : 32; /* julian days representation - we use a - * bitfield hoping that 64 bit platforms - * will pack this whole struct in one big - * int - */ - - guint julian : 1; /* julian is valid */ - guint dmy : 1; /* dmy is valid */ - - /* DMY representation */ - guint day : 6; - guint month : 4; - guint year : 16; -}; - -/* g_date_new() returns an invalid date, you then have to _set() stuff - * to get a usable object. You can also allocate a GDate statically, - * then call g_date_clear() to initialize. - */ -GDate* g_date_new (void); -GDate* g_date_new_dmy (GDateDay day, - GDateMonth month, - GDateYear year); -GDate* g_date_new_julian (guint32 julian_day); -void g_date_free (GDate *date); - -/* check g_date_valid() after doing an operation that might fail, like - * _parse. Almost all g_date operations are undefined on invalid - * dates (the exceptions are the mutators, since you need those to - * return to validity). - */ -gboolean g_date_valid (const GDate *date); -gboolean g_date_valid_day (GDateDay day) G_GNUC_CONST; -gboolean g_date_valid_month (GDateMonth month) G_GNUC_CONST; -gboolean g_date_valid_year (GDateYear year) G_GNUC_CONST; -gboolean g_date_valid_weekday (GDateWeekday weekday) G_GNUC_CONST; -gboolean g_date_valid_julian (guint32 julian_date) G_GNUC_CONST; -gboolean g_date_valid_dmy (GDateDay day, - GDateMonth month, - GDateYear year) G_GNUC_CONST; - -GDateWeekday g_date_get_weekday (const GDate *date); -GDateMonth g_date_get_month (const GDate *date); -GDateYear g_date_get_year (const GDate *date); -GDateDay g_date_get_day (const GDate *date); -guint32 g_date_get_julian (const GDate *date); -guint g_date_get_day_of_year (const GDate *date); -/* First monday/sunday is the start of week 1; if we haven't reached - * that day, return 0. These are not ISO weeks of the year; that - * routine needs to be added. - * these functions return the number of weeks, starting on the - * corrsponding day - */ -guint g_date_get_monday_week_of_year (const GDate *date); -guint g_date_get_sunday_week_of_year (const GDate *date); -guint g_date_get_iso8601_week_of_year (const GDate *date); - -/* If you create a static date struct you need to clear it to get it - * in a sane state before use. You can clear a whole array at - * once with the ndates argument. - */ -void g_date_clear (GDate *date, - guint n_dates); - -/* The parse routine is meant for dates typed in by a user, so it - * permits many formats but tries to catch common typos. If your data - * needs to be strictly validated, it is not an appropriate function. - */ -void g_date_set_parse (GDate *date, - const gchar *str); -void g_date_set_time_t (GDate *date, - time_t timet); -void g_date_set_time_val (GDate *date, - GTimeVal *timeval); -#ifndef G_DISABLE_DEPRECATED -GLIB_DEPRECATED_FOR(g_date_set_time_t) -void g_date_set_time (GDate *date, - GTime time_); -#endif -void g_date_set_month (GDate *date, - GDateMonth month); -void g_date_set_day (GDate *date, - GDateDay day); -void g_date_set_year (GDate *date, - GDateYear year); -void g_date_set_dmy (GDate *date, - GDateDay day, - GDateMonth month, - GDateYear y); -void g_date_set_julian (GDate *date, - guint32 julian_date); -gboolean g_date_is_first_of_month (const GDate *date); -gboolean g_date_is_last_of_month (const GDate *date); - -/* To go forward by some number of weeks just go forward weeks*7 days */ -void g_date_add_days (GDate *date, - guint n_days); -void g_date_subtract_days (GDate *date, - guint n_days); - -/* If you add/sub months while day > 28, the day might change */ -void g_date_add_months (GDate *date, - guint n_months); -void g_date_subtract_months (GDate *date, - guint n_months); - -/* If it's feb 29, changing years can move you to the 28th */ -void g_date_add_years (GDate *date, - guint n_years); -void g_date_subtract_years (GDate *date, - guint n_years); -gboolean g_date_is_leap_year (GDateYear year) G_GNUC_CONST; -guint8 g_date_get_days_in_month (GDateMonth month, - GDateYear year) G_GNUC_CONST; -guint8 g_date_get_monday_weeks_in_year (GDateYear year) G_GNUC_CONST; -guint8 g_date_get_sunday_weeks_in_year (GDateYear year) G_GNUC_CONST; - -/* Returns the number of days between the two dates. If date2 comes - before date1, a negative value is return. */ -gint g_date_days_between (const GDate *date1, - const GDate *date2); - -/* qsort-friendly (with a cast...) */ -gint g_date_compare (const GDate *lhs, - const GDate *rhs); -void g_date_to_struct_tm (const GDate *date, - struct tm *tm); - -void g_date_clamp (GDate *date, - const GDate *min_date, - const GDate *max_date); - -/* Swap date1 and date2's values if date1 > date2. */ -void g_date_order (GDate *date1, GDate *date2); - -/* Just like strftime() except you can only use date-related formats. - * Using a time format is undefined. - */ -gsize g_date_strftime (gchar *s, - gsize slen, - const gchar *format, - const GDate *date); - -#ifndef G_DISABLE_DEPRECATED - -#define g_date_weekday g_date_get_weekday -#define g_date_month g_date_get_month -#define g_date_year g_date_get_year -#define g_date_day g_date_get_day -#define g_date_julian g_date_get_julian -#define g_date_day_of_year g_date_get_day_of_year -#define g_date_monday_week_of_year g_date_get_monday_week_of_year -#define g_date_sunday_week_of_year g_date_get_sunday_week_of_year -#define g_date_days_in_month g_date_get_days_in_month -#define g_date_monday_weeks_in_year g_date_get_monday_weeks_in_year -#define g_date_sunday_weeks_in_year g_date_get_sunday_weeks_in_year - -#endif /* G_DISABLE_DEPRECATED */ - -G_END_DECLS - -#endif /* __G_DATE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gdatetime.h b/GstreamerHelper/x86/include/glib-2.0/glib/gdatetime.h deleted file mode 100644 index 6643e3ff..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gdatetime.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (C) 2009-2010 Christian Hergert - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * licence, or (at your option) any later version. - * - * This is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 - * USA. - * - * Authors: Christian Hergert - * Thiago Santos - * Emmanuele Bassi - * Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DATE_TIME_H__ -#define __G_DATE_TIME_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TIME_SPAN_DAY: - * - * Evaluates to a time span of one day. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_DAY (G_GINT64_CONSTANT (86400000000)) - -/** - * G_TIME_SPAN_HOUR: - * - * Evaluates to a time span of one hour. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_HOUR (G_GINT64_CONSTANT (3600000000)) - -/** - * G_TIME_SPAN_MINUTE: - * - * Evaluates to a time span of one minute. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_MINUTE (G_GINT64_CONSTANT (60000000)) - -/** - * G_TIME_SPAN_SECOND: - * - * Evaluates to a time span of one second. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_SECOND (G_GINT64_CONSTANT (1000000)) - -/** - * G_TIME_SPAN_MILLISECOND: - * - * Evaluates to a time span of one millisecond. - * - * Since: 2.26 - */ -#define G_TIME_SPAN_MILLISECOND (G_GINT64_CONSTANT (1000)) - -/** - * GTimeSpan: - * - * A value representing an interval of time, in microseconds. - * - * Since: 2.26 - */ -typedef gint64 GTimeSpan; - -/** - * GDateTime: - * - * GDateTime is an opaque structure whose members - * cannot be accessed directly. - * - * Since: 2.26 - */ -typedef struct _GDateTime GDateTime; - -void g_date_time_unref (GDateTime *datetime); -GDateTime * g_date_time_ref (GDateTime *datetime); - -GDateTime * g_date_time_new_now (GTimeZone *tz); -GDateTime * g_date_time_new_now_local (void); -GDateTime * g_date_time_new_now_utc (void); - -GDateTime * g_date_time_new_from_unix_local (gint64 t); -GDateTime * g_date_time_new_from_unix_utc (gint64 t); - -GDateTime * g_date_time_new_from_timeval_local (const GTimeVal *tv); -GDateTime * g_date_time_new_from_timeval_utc (const GTimeVal *tv); - -GDateTime * g_date_time_new (GTimeZone *tz, - gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds); -GDateTime * g_date_time_new_local (gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds); -GDateTime * g_date_time_new_utc (gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add (GDateTime *datetime, - GTimeSpan timespan); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_years (GDateTime *datetime, - gint years); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_months (GDateTime *datetime, - gint months); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_weeks (GDateTime *datetime, - gint weeks); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_days (GDateTime *datetime, - gint days); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_hours (GDateTime *datetime, - gint hours); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_minutes (GDateTime *datetime, - gint minutes); -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_seconds (GDateTime *datetime, - gdouble seconds); - -G_GNUC_WARN_UNUSED_RESULT -GDateTime * g_date_time_add_full (GDateTime *datetime, - gint years, - gint months, - gint days, - gint hours, - gint minutes, - gdouble seconds); - -gint g_date_time_compare (gconstpointer dt1, - gconstpointer dt2); -GTimeSpan g_date_time_difference (GDateTime *end, - GDateTime *begin); -guint g_date_time_hash (gconstpointer datetime); -gboolean g_date_time_equal (gconstpointer dt1, - gconstpointer dt2); - -void g_date_time_get_ymd (GDateTime *datetime, - gint *year, - gint *month, - gint *day); - -gint g_date_time_get_year (GDateTime *datetime); -gint g_date_time_get_month (GDateTime *datetime); -gint g_date_time_get_day_of_month (GDateTime *datetime); - -gint g_date_time_get_week_numbering_year (GDateTime *datetime); -gint g_date_time_get_week_of_year (GDateTime *datetime); -gint g_date_time_get_day_of_week (GDateTime *datetime); - -gint g_date_time_get_day_of_year (GDateTime *datetime); - -gint g_date_time_get_hour (GDateTime *datetime); -gint g_date_time_get_minute (GDateTime *datetime); -gint g_date_time_get_second (GDateTime *datetime); -gint g_date_time_get_microsecond (GDateTime *datetime); -gdouble g_date_time_get_seconds (GDateTime *datetime); - -gint64 g_date_time_to_unix (GDateTime *datetime); -gboolean g_date_time_to_timeval (GDateTime *datetime, - GTimeVal *tv); - -GTimeSpan g_date_time_get_utc_offset (GDateTime *datetime); -const gchar * g_date_time_get_timezone_abbreviation (GDateTime *datetime); -gboolean g_date_time_is_daylight_savings (GDateTime *datetime); - -GDateTime * g_date_time_to_timezone (GDateTime *datetime, - GTimeZone *tz); -GDateTime * g_date_time_to_local (GDateTime *datetime); -GDateTime * g_date_time_to_utc (GDateTime *datetime); - -gchar * g_date_time_format (GDateTime *datetime, - const gchar *format) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_DATE_TIME_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gdir.h b/GstreamerHelper/x86/include/glib-2.0/glib/gdir.h deleted file mode 100644 index 79b3038d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gdir.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * gdir.c: Simplified wrapper around the DIRENT functions. - * - * Copyright 2001 Hans Breuer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_DIR_H__ -#define __G_DIR_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GDir GDir; - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -/* For DLL ABI stability, keep old names for old (non-UTF-8) functionality. */ -#define g_dir_open g_dir_open_utf8 -#define g_dir_read_name g_dir_read_name_utf8 -#endif -#endif - -GDir * g_dir_open (const gchar *path, - guint flags, - GError **error); -const gchar * g_dir_read_name (GDir *dir); -void g_dir_rewind (GDir *dir); -void g_dir_close (GDir *dir); - -G_END_DECLS - -#endif /* __G_DIR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/genviron.h b/GstreamerHelper/x86/include/glib-2.0/glib/genviron.h deleted file mode 100644 index c75c5482..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/genviron.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ENVIRON_H__ -#define __G_ENVIRON_H__ - -#include - -G_BEGIN_DECLS - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_getenv g_getenv_utf8 -#define g_setenv g_setenv_utf8 -#define g_unsetenv g_unsetenv_utf8 -#endif -#endif - -const gchar * g_getenv (const gchar *variable); -gboolean g_setenv (const gchar *variable, - const gchar *value, - gboolean overwrite); -void g_unsetenv (const gchar *variable); -gchar ** g_listenv (void); - -gchar ** g_get_environ (void); -const gchar * g_environ_getenv (gchar **envp, - const gchar *variable); -gchar ** g_environ_setenv (gchar **envp, - const gchar *variable, - const gchar *value, - gboolean overwrite) G_GNUC_WARN_UNUSED_RESULT; -gchar ** g_environ_unsetenv (gchar **envp, - const gchar *variable) G_GNUC_WARN_UNUSED_RESULT; - -G_END_DECLS - -#endif /* __G_ENVIRON_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gerror.h b/GstreamerHelper/x86/include/glib-2.0/glib/gerror.h deleted file mode 100644 index 6eb65fee..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gerror.h +++ /dev/null @@ -1,107 +0,0 @@ -/* gerror.h - Error reporting system - * - * Copyright 2000 Red Hat, Inc. - * - * The Gnome Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The Gnome Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ERROR_H__ -#define __G_ERROR_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GError: - * @domain: error domain, e.g. #G_FILE_ERROR - * @code: error code, e.g. %G_FILE_ERROR_NOENT - * @message: human-readable informative error message - * - * The GError structure contains - * information about an error that has occurred. - */ -typedef struct _GError GError; - -struct _GError -{ - GQuark domain; - gint code; - gchar *message; -}; - -GError* g_error_new (GQuark domain, - gint code, - const gchar *format, - ...) G_GNUC_PRINTF (3, 4); - -GError* g_error_new_literal (GQuark domain, - gint code, - const gchar *message); -GError* g_error_new_valist (GQuark domain, - gint code, - const gchar *format, - va_list args); - -void g_error_free (GError *error); -GError* g_error_copy (const GError *error); - -gboolean g_error_matches (const GError *error, - GQuark domain, - gint code); - -/* if (err) *err = g_error_new(domain, code, format, ...), also has - * some sanity checks. - */ -void g_set_error (GError **err, - GQuark domain, - gint code, - const gchar *format, - ...) G_GNUC_PRINTF (4, 5); - -void g_set_error_literal (GError **err, - GQuark domain, - gint code, - const gchar *message); - -/* if (dest) *dest = src; also has some sanity checks. - */ -void g_propagate_error (GError **dest, - GError *src); - -/* if (err && *err) { g_error_free(*err); *err = NULL; } */ -void g_clear_error (GError **err); - -/* if (err) prefix the formatted string to the ->message */ -void g_prefix_error (GError **err, - const gchar *format, - ...) G_GNUC_PRINTF (2, 3); - -/* g_propagate_error then g_error_prefix on dest */ -void g_propagate_prefixed_error (GError **dest, - GError *src, - const gchar *format, - ...) G_GNUC_PRINTF (3, 4); - -G_END_DECLS - -#endif /* __G_ERROR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gfileutils.h b/GstreamerHelper/x86/include/glib-2.0/glib/gfileutils.h deleted file mode 100644 index 7c2eb1dd..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gfileutils.h +++ /dev/null @@ -1,179 +0,0 @@ -/* gfileutils.h - File utility functions - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_FILEUTILS_H__ -#define __G_FILEUTILS_H__ - -#include - -G_BEGIN_DECLS - -#define G_FILE_ERROR g_file_error_quark () - -typedef enum -{ - G_FILE_ERROR_EXIST, - G_FILE_ERROR_ISDIR, - G_FILE_ERROR_ACCES, - G_FILE_ERROR_NAMETOOLONG, - G_FILE_ERROR_NOENT, - G_FILE_ERROR_NOTDIR, - G_FILE_ERROR_NXIO, - G_FILE_ERROR_NODEV, - G_FILE_ERROR_ROFS, - G_FILE_ERROR_TXTBSY, - G_FILE_ERROR_FAULT, - G_FILE_ERROR_LOOP, - G_FILE_ERROR_NOSPC, - G_FILE_ERROR_NOMEM, - G_FILE_ERROR_MFILE, - G_FILE_ERROR_NFILE, - G_FILE_ERROR_BADF, - G_FILE_ERROR_INVAL, - G_FILE_ERROR_PIPE, - G_FILE_ERROR_AGAIN, - G_FILE_ERROR_INTR, - G_FILE_ERROR_IO, - G_FILE_ERROR_PERM, - G_FILE_ERROR_NOSYS, - G_FILE_ERROR_FAILED -} GFileError; - -/* For backward-compat reasons, these are synced to an old - * anonymous enum in libgnome. But don't use that enum - * in new code. - */ -typedef enum -{ - G_FILE_TEST_IS_REGULAR = 1 << 0, - G_FILE_TEST_IS_SYMLINK = 1 << 1, - G_FILE_TEST_IS_DIR = 1 << 2, - G_FILE_TEST_IS_EXECUTABLE = 1 << 3, - G_FILE_TEST_EXISTS = 1 << 4 -} GFileTest; - -GQuark g_file_error_quark (void); -/* So other code can generate a GFileError */ -GFileError g_file_error_from_errno (gint err_no); - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_file_test g_file_test_utf8 -#define g_file_get_contents g_file_get_contents_utf8 -#define g_mkstemp g_mkstemp_utf8 -#define g_file_open_tmp g_file_open_tmp_utf8 -#endif -#endif - -gboolean g_file_test (const gchar *filename, - GFileTest test); -gboolean g_file_get_contents (const gchar *filename, - gchar **contents, - gsize *length, - GError **error); -gboolean g_file_set_contents (const gchar *filename, - const gchar *contents, - gssize length, - GError **error); -gchar *g_file_read_link (const gchar *filename, - GError **error); - -/* Wrapper / workalike for mkdtemp() */ -GLIB_AVAILABLE_IN_2_30 -gchar *g_mkdtemp (gchar *tmpl); -GLIB_AVAILABLE_IN_2_30 -gchar *g_mkdtemp_full (gchar *tmpl, - gint mode); - -/* Wrapper / workalike for mkstemp() */ -gint g_mkstemp (gchar *tmpl); -gint g_mkstemp_full (gchar *tmpl, - gint flags, - gint mode); - -/* Wrappers for g_mkstemp and g_mkdtemp() */ -gint g_file_open_tmp (const gchar *tmpl, - gchar **name_used, - GError **error); -GLIB_AVAILABLE_IN_2_30 -gchar *g_dir_make_tmp (const gchar *tmpl, - GError **error); - -gchar *g_build_path (const gchar *separator, - const gchar *first_element, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; -gchar *g_build_pathv (const gchar *separator, - gchar **args) G_GNUC_MALLOC; - -gchar *g_build_filename (const gchar *first_element, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; -gchar *g_build_filenamev (gchar **args) G_GNUC_MALLOC; - -gint g_mkdir_with_parents (const gchar *pathname, - gint mode); - -#ifdef G_OS_WIN32 - -/* On Win32, the canonical directory separator is the backslash, and - * the search path separator is the semicolon. Note that also the - * (forward) slash works as directory separator. - */ -#define G_DIR_SEPARATOR '\\' -#define G_DIR_SEPARATOR_S "\\" -#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/') -#define G_SEARCHPATH_SEPARATOR ';' -#define G_SEARCHPATH_SEPARATOR_S ";" - -#else /* !G_OS_WIN32 */ - -#define G_DIR_SEPARATOR '/' -#define G_DIR_SEPARATOR_S "/" -#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR) -#define G_SEARCHPATH_SEPARATOR ':' -#define G_SEARCHPATH_SEPARATOR_S ":" - -#endif /* !G_OS_WIN32 */ - -gboolean g_path_is_absolute (const gchar *file_name); -const gchar *g_path_skip_root (const gchar *file_name); - -GLIB_DEPRECATED_FOR(g_path_get_basename) -const gchar *g_basename (const gchar *file_name); -#ifndef G_DISABLE_DEPRECATED -#define g_dirname g_path_get_dirname -#endif - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_get_current_dir g_get_current_dir_utf8 -#endif -#endif - -gchar *g_get_current_dir (void); -gchar *g_path_get_basename (const gchar *file_name) G_GNUC_MALLOC; -gchar *g_path_get_dirname (const gchar *file_name) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_FILEUTILS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/ggettext.h b/GstreamerHelper/x86/include/glib-2.0/glib/ggettext.h deleted file mode 100644 index 54bbaa8e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/ggettext.h +++ /dev/null @@ -1,59 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_GETTEXT_H__ -#define __G_GETTEXT_H__ - -#include - -G_BEGIN_DECLS - -const gchar *g_strip_context (const gchar *msgid, - const gchar *msgval) G_GNUC_FORMAT(1); - -const gchar *g_dgettext (const gchar *domain, - const gchar *msgid) G_GNUC_FORMAT(2); -const gchar *g_dcgettext (const gchar *domain, - const gchar *msgid, - gint category) G_GNUC_FORMAT(2); -const gchar *g_dngettext (const gchar *domain, - const gchar *msgid, - const gchar *msgid_plural, - gulong n) G_GNUC_FORMAT(3); -const gchar *g_dpgettext (const gchar *domain, - const gchar *msgctxtid, - gsize msgidoffset) G_GNUC_FORMAT(2); -const gchar *g_dpgettext2 (const gchar *domain, - const gchar *context, - const gchar *msgid) G_GNUC_FORMAT(3); - -G_END_DECLS - -#endif /* __G_GETTEXT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/ghash.h b/GstreamerHelper/x86/include/glib-2.0/glib/ghash.h deleted file mode 100644 index 3eb89127..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/ghash.h +++ /dev/null @@ -1,147 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HASH_H__ -#define __G_HASH_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GHashTable GHashTable; - -typedef gboolean (*GHRFunc) (gpointer key, - gpointer value, - gpointer user_data); - -typedef struct _GHashTableIter GHashTableIter; - -struct _GHashTableIter -{ - /*< private >*/ - gpointer dummy1; - gpointer dummy2; - gpointer dummy3; - int dummy4; - gboolean dummy5; - gpointer dummy6; -}; - -GHashTable* g_hash_table_new (GHashFunc hash_func, - GEqualFunc key_equal_func); -GHashTable* g_hash_table_new_full (GHashFunc hash_func, - GEqualFunc key_equal_func, - GDestroyNotify key_destroy_func, - GDestroyNotify value_destroy_func); -void g_hash_table_destroy (GHashTable *hash_table); -void g_hash_table_insert (GHashTable *hash_table, - gpointer key, - gpointer value); -void g_hash_table_replace (GHashTable *hash_table, - gpointer key, - gpointer value); -void g_hash_table_add (GHashTable *hash_table, - gpointer key); -gboolean g_hash_table_remove (GHashTable *hash_table, - gconstpointer key); -void g_hash_table_remove_all (GHashTable *hash_table); -gboolean g_hash_table_steal (GHashTable *hash_table, - gconstpointer key); -void g_hash_table_steal_all (GHashTable *hash_table); -gpointer g_hash_table_lookup (GHashTable *hash_table, - gconstpointer key); -gboolean g_hash_table_contains (GHashTable *hash_table, - gconstpointer key); -gboolean g_hash_table_lookup_extended (GHashTable *hash_table, - gconstpointer lookup_key, - gpointer *orig_key, - gpointer *value); -void g_hash_table_foreach (GHashTable *hash_table, - GHFunc func, - gpointer user_data); -gpointer g_hash_table_find (GHashTable *hash_table, - GHRFunc predicate, - gpointer user_data); -guint g_hash_table_foreach_remove (GHashTable *hash_table, - GHRFunc func, - gpointer user_data); -guint g_hash_table_foreach_steal (GHashTable *hash_table, - GHRFunc func, - gpointer user_data); -guint g_hash_table_size (GHashTable *hash_table); -GList * g_hash_table_get_keys (GHashTable *hash_table); -GList * g_hash_table_get_values (GHashTable *hash_table); - -void g_hash_table_iter_init (GHashTableIter *iter, - GHashTable *hash_table); -gboolean g_hash_table_iter_next (GHashTableIter *iter, - gpointer *key, - gpointer *value); -GHashTable* g_hash_table_iter_get_hash_table (GHashTableIter *iter); -void g_hash_table_iter_remove (GHashTableIter *iter); -GLIB_AVAILABLE_IN_2_30 -void g_hash_table_iter_replace (GHashTableIter *iter, - gpointer value); -void g_hash_table_iter_steal (GHashTableIter *iter); - -GHashTable* g_hash_table_ref (GHashTable *hash_table); -void g_hash_table_unref (GHashTable *hash_table); - -#ifndef G_DISABLE_DEPRECATED -#define g_hash_table_freeze(hash_table) ((void)0) -#define g_hash_table_thaw(hash_table) ((void)0) -#endif - -/* Hash Functions - */ -gboolean g_str_equal (gconstpointer v1, - gconstpointer v2); -guint g_str_hash (gconstpointer v); - -gboolean g_int_equal (gconstpointer v1, - gconstpointer v2); -guint g_int_hash (gconstpointer v); - -gboolean g_int64_equal (gconstpointer v1, - gconstpointer v2); -guint g_int64_hash (gconstpointer v); - -gboolean g_double_equal (gconstpointer v1, - gconstpointer v2); -guint g_double_hash (gconstpointer v); - -guint g_direct_hash (gconstpointer v) G_GNUC_CONST; -gboolean g_direct_equal (gconstpointer v1, - gconstpointer v2) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_HASH_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/ghmac.h b/GstreamerHelper/x86/include/glib-2.0/glib/ghmac.h deleted file mode 100644 index d03d71f3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/ghmac.h +++ /dev/null @@ -1,80 +0,0 @@ -/* ghmac.h - secure data hashing - * - * Copyright (C) 2011 Stef Walter - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HMAC_H__ -#define __G_HMAC_H__ - -#include -#include "gchecksum.h" - -G_BEGIN_DECLS - -/** - * GHmac: - * - * An opaque structure representing a HMAC operation. - * To create a new GHmac, use g_hmac_new(). To free - * a GHmac, use g_hmac_unref(). - * - * Since: 2.30 - */ -typedef struct _GHmac GHmac; - -GLIB_AVAILABLE_IN_2_30 -GHmac * g_hmac_new (GChecksumType digest_type, - const guchar *key, - gsize key_len); -GLIB_AVAILABLE_IN_2_30 -GHmac * g_hmac_copy (const GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -GHmac * g_hmac_ref (GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -void g_hmac_unref (GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -void g_hmac_update (GHmac *hmac, - const guchar *data, - gssize length); -GLIB_AVAILABLE_IN_2_30 -const gchar * g_hmac_get_string (GHmac *hmac); -GLIB_AVAILABLE_IN_2_30 -void g_hmac_get_digest (GHmac *hmac, - guint8 *buffer, - gsize *digest_len); - -GLIB_AVAILABLE_IN_2_30 -gchar *g_compute_hmac_for_data (GChecksumType digest_type, - const guchar *key, - gsize key_len, - const guchar *data, - gsize length); -GLIB_AVAILABLE_IN_2_30 -gchar *g_compute_hmac_for_string (GChecksumType digest_type, - const guchar *key, - gsize key_len, - const gchar *str, - gssize length); - -G_END_DECLS - -#endif /* __G_CHECKSUM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/ghook.h b/GstreamerHelper/x86/include/glib-2.0/glib/ghook.h deleted file mode 100644 index e7292ead..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/ghook.h +++ /dev/null @@ -1,181 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HOOK_H__ -#define __G_HOOK_H__ - -#include - -G_BEGIN_DECLS - - -/* --- typedefs --- */ -typedef struct _GHook GHook; -typedef struct _GHookList GHookList; - -typedef gint (*GHookCompareFunc) (GHook *new_hook, - GHook *sibling); -typedef gboolean (*GHookFindFunc) (GHook *hook, - gpointer data); -typedef void (*GHookMarshaller) (GHook *hook, - gpointer marshal_data); -typedef gboolean (*GHookCheckMarshaller) (GHook *hook, - gpointer marshal_data); -typedef void (*GHookFunc) (gpointer data); -typedef gboolean (*GHookCheckFunc) (gpointer data); -typedef void (*GHookFinalizeFunc) (GHookList *hook_list, - GHook *hook); -typedef enum -{ - G_HOOK_FLAG_ACTIVE = 1 << 0, - G_HOOK_FLAG_IN_CALL = 1 << 1, - G_HOOK_FLAG_MASK = 0x0f -} GHookFlagMask; -#define G_HOOK_FLAG_USER_SHIFT (4) - - -/* --- structures --- */ -struct _GHookList -{ - gulong seq_id; - guint hook_size : 16; - guint is_setup : 1; - GHook *hooks; - gpointer dummy3; - GHookFinalizeFunc finalize_hook; - gpointer dummy[2]; -}; -struct _GHook -{ - gpointer data; - GHook *next; - GHook *prev; - guint ref_count; - gulong hook_id; - guint flags; - gpointer func; - GDestroyNotify destroy; -}; - - -/* --- macros --- */ -#define G_HOOK(hook) ((GHook*) (hook)) -#define G_HOOK_FLAGS(hook) (G_HOOK (hook)->flags) -#define G_HOOK_ACTIVE(hook) ((G_HOOK_FLAGS (hook) & \ - G_HOOK_FLAG_ACTIVE) != 0) -#define G_HOOK_IN_CALL(hook) ((G_HOOK_FLAGS (hook) & \ - G_HOOK_FLAG_IN_CALL) != 0) -#define G_HOOK_IS_VALID(hook) (G_HOOK (hook)->hook_id != 0 && \ - (G_HOOK_FLAGS (hook) & \ - G_HOOK_FLAG_ACTIVE)) -#define G_HOOK_IS_UNLINKED(hook) (G_HOOK (hook)->next == NULL && \ - G_HOOK (hook)->prev == NULL && \ - G_HOOK (hook)->hook_id == 0 && \ - G_HOOK (hook)->ref_count == 0) - - -/* --- prototypes --- */ -/* callback maintenance functions */ -void g_hook_list_init (GHookList *hook_list, - guint hook_size); -void g_hook_list_clear (GHookList *hook_list); -GHook* g_hook_alloc (GHookList *hook_list); -void g_hook_free (GHookList *hook_list, - GHook *hook); -GHook * g_hook_ref (GHookList *hook_list, - GHook *hook); -void g_hook_unref (GHookList *hook_list, - GHook *hook); -gboolean g_hook_destroy (GHookList *hook_list, - gulong hook_id); -void g_hook_destroy_link (GHookList *hook_list, - GHook *hook); -void g_hook_prepend (GHookList *hook_list, - GHook *hook); -void g_hook_insert_before (GHookList *hook_list, - GHook *sibling, - GHook *hook); -void g_hook_insert_sorted (GHookList *hook_list, - GHook *hook, - GHookCompareFunc func); -GHook* g_hook_get (GHookList *hook_list, - gulong hook_id); -GHook* g_hook_find (GHookList *hook_list, - gboolean need_valids, - GHookFindFunc func, - gpointer data); -GHook* g_hook_find_data (GHookList *hook_list, - gboolean need_valids, - gpointer data); -GHook* g_hook_find_func (GHookList *hook_list, - gboolean need_valids, - gpointer func); -GHook* g_hook_find_func_data (GHookList *hook_list, - gboolean need_valids, - gpointer func, - gpointer data); -/* return the first valid hook, and increment its reference count */ -GHook* g_hook_first_valid (GHookList *hook_list, - gboolean may_be_in_call); -/* return the next valid hook with incremented reference count, and - * decrement the reference count of the original hook - */ -GHook* g_hook_next_valid (GHookList *hook_list, - GHook *hook, - gboolean may_be_in_call); -/* GHookCompareFunc implementation to insert hooks sorted by their id */ -gint g_hook_compare_ids (GHook *new_hook, - GHook *sibling); -/* convenience macros */ -#define g_hook_append( hook_list, hook ) \ - g_hook_insert_before ((hook_list), NULL, (hook)) -/* invoke all valid hooks with the (*GHookFunc) signature. - */ -void g_hook_list_invoke (GHookList *hook_list, - gboolean may_recurse); -/* invoke all valid hooks with the (*GHookCheckFunc) signature, - * and destroy the hook if FALSE is returned. - */ -void g_hook_list_invoke_check (GHookList *hook_list, - gboolean may_recurse); -/* invoke a marshaller on all valid hooks. - */ -void g_hook_list_marshal (GHookList *hook_list, - gboolean may_recurse, - GHookMarshaller marshaller, - gpointer marshal_data); -void g_hook_list_marshal_check (GHookList *hook_list, - gboolean may_recurse, - GHookCheckMarshaller marshaller, - gpointer marshal_data); - -G_END_DECLS - -#endif /* __G_HOOK_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/ghostutils.h b/GstreamerHelper/x86/include/glib-2.0/glib/ghostutils.h deleted file mode 100644 index 0349da36..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/ghostutils.h +++ /dev/null @@ -1,40 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_HOST_UTILS_H__ -#define __G_HOST_UTILS_H__ - -#include - -G_BEGIN_DECLS - -gboolean g_hostname_is_non_ascii (const gchar *hostname); -gboolean g_hostname_is_ascii_encoded (const gchar *hostname); -gboolean g_hostname_is_ip_address (const gchar *hostname); - -gchar *g_hostname_to_ascii (const gchar *hostname); -gchar *g_hostname_to_unicode (const gchar *hostname); - -G_END_DECLS - -#endif /* __G_HOST_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gi18n-lib.h b/GstreamerHelper/x86/include/glib-2.0/glib/gi18n-lib.h deleted file mode 100644 index ca002a72..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gi18n-lib.h +++ /dev/null @@ -1,38 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_I18N_LIB_H__ -#define __G_I18N_LIB_H__ - -#include - -#include -#include - -#ifndef GETTEXT_PACKAGE -#error You must define GETTEXT_PACKAGE before including gi18n-lib.h. Did you forget to include config.h? -#endif - -#define _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String)) -#define Q_(String) g_dpgettext (GETTEXT_PACKAGE, String, 0) -#define N_(String) (String) -#define C_(Context,String) g_dpgettext (GETTEXT_PACKAGE, Context "\004" String, strlen (Context) + 1) -#define NC_(Context, String) (String) - -#endif /* __G_I18N_LIB_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gi18n.h b/GstreamerHelper/x86/include/glib-2.0/glib/gi18n.h deleted file mode 100644 index c710046e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gi18n.h +++ /dev/null @@ -1,34 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_I18N_H__ -#define __G_I18N_H__ - -#include - -#include -#include - -#define _(String) gettext (String) -#define Q_(String) g_dpgettext (NULL, String, 0) -#define N_(String) (String) -#define C_(Context,String) g_dpgettext (NULL, Context "\004" String, strlen (Context) + 1) -#define NC_(Context, String) (String) - -#endif /* __G_I18N_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/giochannel.h b/GstreamerHelper/x86/include/glib-2.0/glib/giochannel.h deleted file mode 100644 index 8d3f2d7e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/giochannel.h +++ /dev/null @@ -1,374 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_IOCHANNEL_H__ -#define __G_IOCHANNEL_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/* GIOChannel - */ - -typedef struct _GIOChannel GIOChannel; -typedef struct _GIOFuncs GIOFuncs; - -typedef enum -{ - G_IO_ERROR_NONE, - G_IO_ERROR_AGAIN, - G_IO_ERROR_INVAL, - G_IO_ERROR_UNKNOWN -} GIOError; - -#define G_IO_CHANNEL_ERROR g_io_channel_error_quark() - -typedef enum -{ - /* Derived from errno */ - G_IO_CHANNEL_ERROR_FBIG, - G_IO_CHANNEL_ERROR_INVAL, - G_IO_CHANNEL_ERROR_IO, - G_IO_CHANNEL_ERROR_ISDIR, - G_IO_CHANNEL_ERROR_NOSPC, - G_IO_CHANNEL_ERROR_NXIO, - G_IO_CHANNEL_ERROR_OVERFLOW, - G_IO_CHANNEL_ERROR_PIPE, - /* Other */ - G_IO_CHANNEL_ERROR_FAILED -} GIOChannelError; - -typedef enum -{ - G_IO_STATUS_ERROR, - G_IO_STATUS_NORMAL, - G_IO_STATUS_EOF, - G_IO_STATUS_AGAIN -} GIOStatus; - -typedef enum -{ - G_SEEK_CUR, - G_SEEK_SET, - G_SEEK_END -} GSeekType; - -typedef enum /*< flags >*/ -{ - G_IO_IN GLIB_SYSDEF_POLLIN, - G_IO_OUT GLIB_SYSDEF_POLLOUT, - G_IO_PRI GLIB_SYSDEF_POLLPRI, - G_IO_ERR GLIB_SYSDEF_POLLERR, - G_IO_HUP GLIB_SYSDEF_POLLHUP, - G_IO_NVAL GLIB_SYSDEF_POLLNVAL -} GIOCondition; - -typedef enum -{ - G_IO_FLAG_APPEND = 1 << 0, - G_IO_FLAG_NONBLOCK = 1 << 1, - G_IO_FLAG_IS_READABLE = 1 << 2, /* Read only flag */ - G_IO_FLAG_IS_WRITABLE = 1 << 3, /* Read only flag */ - G_IO_FLAG_IS_SEEKABLE = 1 << 4, /* Read only flag */ - G_IO_FLAG_MASK = (1 << 5) - 1, - G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK, - G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK -} GIOFlags; - -/* Misspelling in enum in 2.29.10 and earlier */ -#define G_IO_FLAG_IS_WRITEABLE (G_IO_FLAG_IS_WRITABLE) - -struct _GIOChannel -{ - /*< private >*/ - gint ref_count; - GIOFuncs *funcs; - - gchar *encoding; - GIConv read_cd; - GIConv write_cd; - gchar *line_term; /* String which indicates the end of a line of text */ - guint line_term_len; /* So we can have null in the line term */ - - gsize buf_size; - GString *read_buf; /* Raw data from the channel */ - GString *encoded_read_buf; /* Channel data converted to UTF-8 */ - GString *write_buf; /* Data ready to be written to the file */ - gchar partial_write_buf[6]; /* UTF-8 partial characters, null terminated */ - - /* Group the flags together, immediately after partial_write_buf, to save memory */ - - guint use_buffer : 1; /* The encoding uses the buffers */ - guint do_encode : 1; /* The encoding uses the GIConv coverters */ - guint close_on_unref : 1; /* Close the channel on final unref */ - guint is_readable : 1; /* Cached GIOFlag */ - guint is_writeable : 1; /* ditto */ - guint is_seekable : 1; /* ditto */ - - gpointer reserved1; - gpointer reserved2; -}; - -typedef gboolean (*GIOFunc) (GIOChannel *source, - GIOCondition condition, - gpointer data); -struct _GIOFuncs -{ - GIOStatus (*io_read) (GIOChannel *channel, - gchar *buf, - gsize count, - gsize *bytes_read, - GError **err); - GIOStatus (*io_write) (GIOChannel *channel, - const gchar *buf, - gsize count, - gsize *bytes_written, - GError **err); - GIOStatus (*io_seek) (GIOChannel *channel, - gint64 offset, - GSeekType type, - GError **err); - GIOStatus (*io_close) (GIOChannel *channel, - GError **err); - GSource* (*io_create_watch) (GIOChannel *channel, - GIOCondition condition); - void (*io_free) (GIOChannel *channel); - GIOStatus (*io_set_flags) (GIOChannel *channel, - GIOFlags flags, - GError **err); - GIOFlags (*io_get_flags) (GIOChannel *channel); -}; - -void g_io_channel_init (GIOChannel *channel); -GIOChannel *g_io_channel_ref (GIOChannel *channel); -void g_io_channel_unref (GIOChannel *channel); - -GLIB_DEPRECATED_FOR(g_io_channel_read_for) -GIOError g_io_channel_read (GIOChannel *channel, - gchar *buf, - gsize count, - gsize *bytes_read); - -GLIB_DEPRECATED_FOR(g_io_channel_write_chars) -GIOError g_io_channel_write (GIOChannel *channel, - const gchar *buf, - gsize count, - gsize *bytes_written); - -GLIB_DEPRECATED_FOR(g_io_channel_seek_position) -GIOError g_io_channel_seek (GIOChannel *channel, - gint64 offset, - GSeekType type); - -GLIB_DEPRECATED_FOR(g_io_channel_shutdown) -void g_io_channel_close (GIOChannel *channel); - -GIOStatus g_io_channel_shutdown (GIOChannel *channel, - gboolean flush, - GError **err); -guint g_io_add_watch_full (GIOChannel *channel, - gint priority, - GIOCondition condition, - GIOFunc func, - gpointer user_data, - GDestroyNotify notify); -GSource * g_io_create_watch (GIOChannel *channel, - GIOCondition condition); -guint g_io_add_watch (GIOChannel *channel, - GIOCondition condition, - GIOFunc func, - gpointer user_data); - -/* character encoding conversion involved functions. - */ - -void g_io_channel_set_buffer_size (GIOChannel *channel, - gsize size); -gsize g_io_channel_get_buffer_size (GIOChannel *channel); -GIOCondition g_io_channel_get_buffer_condition (GIOChannel *channel); -GIOStatus g_io_channel_set_flags (GIOChannel *channel, - GIOFlags flags, - GError **error); -GIOFlags g_io_channel_get_flags (GIOChannel *channel); -void g_io_channel_set_line_term (GIOChannel *channel, - const gchar *line_term, - gint length); -const gchar * g_io_channel_get_line_term (GIOChannel *channel, - gint *length); -void g_io_channel_set_buffered (GIOChannel *channel, - gboolean buffered); -gboolean g_io_channel_get_buffered (GIOChannel *channel); -GIOStatus g_io_channel_set_encoding (GIOChannel *channel, - const gchar *encoding, - GError **error); -const gchar * g_io_channel_get_encoding (GIOChannel *channel); -void g_io_channel_set_close_on_unref (GIOChannel *channel, - gboolean do_close); -gboolean g_io_channel_get_close_on_unref (GIOChannel *channel); - - -GIOStatus g_io_channel_flush (GIOChannel *channel, - GError **error); -GIOStatus g_io_channel_read_line (GIOChannel *channel, - gchar **str_return, - gsize *length, - gsize *terminator_pos, - GError **error); -GIOStatus g_io_channel_read_line_string (GIOChannel *channel, - GString *buffer, - gsize *terminator_pos, - GError **error); -GIOStatus g_io_channel_read_to_end (GIOChannel *channel, - gchar **str_return, - gsize *length, - GError **error); -GIOStatus g_io_channel_read_chars (GIOChannel *channel, - gchar *buf, - gsize count, - gsize *bytes_read, - GError **error); -GIOStatus g_io_channel_read_unichar (GIOChannel *channel, - gunichar *thechar, - GError **error); -GIOStatus g_io_channel_write_chars (GIOChannel *channel, - const gchar *buf, - gssize count, - gsize *bytes_written, - GError **error); -GIOStatus g_io_channel_write_unichar (GIOChannel *channel, - gunichar thechar, - GError **error); -GIOStatus g_io_channel_seek_position (GIOChannel *channel, - gint64 offset, - GSeekType type, - GError **error); -#ifdef G_OS_WIN32 -#define g_io_channel_new_file g_io_channel_new_file_utf8 -#endif - -GIOChannel* g_io_channel_new_file (const gchar *filename, - const gchar *mode, - GError **error); - -/* Error handling */ - -GQuark g_io_channel_error_quark (void); -GIOChannelError g_io_channel_error_from_errno (gint en); - -/* On Unix, IO channels created with this function for any file - * descriptor or socket. - * - * On Win32, this can be used either for files opened with the MSVCRT - * (the Microsoft run-time C library) _open() or _pipe, including file - * descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr), - * or for Winsock SOCKETs. If the parameter is a legal file - * descriptor, it is assumed to be such, otherwise it should be a - * SOCKET. This relies on SOCKETs and file descriptors not - * overlapping. If you want to be certain, call either - * g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket() - * instead as appropriate. - * - * The term file descriptor as used in the context of Win32 refers to - * the emulated Unix-like file descriptors MSVCRT provides. The native - * corresponding concept is file HANDLE. There isn't as of yet a way to - * get GIOChannels for Win32 file HANDLEs. - */ -GIOChannel* g_io_channel_unix_new (int fd); -gint g_io_channel_unix_get_fd (GIOChannel *channel); - - -/* Hook for GClosure / GSource integration. Don't touch */ -GLIB_VAR GSourceFuncs g_io_watch_funcs; - -#ifdef G_OS_WIN32 - -/* You can use this "pseudo file descriptor" in a GPollFD to add - * polling for Windows messages. GTK applications should not do that. - */ - -#define G_WIN32_MSG_HANDLE 19981206 - -/* Use this to get a GPollFD from a GIOChannel, so that you can call - * g_io_channel_win32_poll(). After calling this you should only use - * g_io_channel_read() to read from the GIOChannel, i.e. never read() - * from the underlying file descriptor. For SOCKETs, it is possible to call - * recv(). - */ -void g_io_channel_win32_make_pollfd (GIOChannel *channel, - GIOCondition condition, - GPollFD *fd); - -/* This can be used to wait a until at least one of the channels is readable. - * On Unix you would do a select() on the file descriptors of the channels. - */ -gint g_io_channel_win32_poll (GPollFD *fds, - gint n_fds, - gint timeout_); - -/* Create an IO channel for Windows messages for window handle hwnd. */ -#if GLIB_SIZEOF_VOID_P == 8 -/* We use gsize here so that it is still an integer type and not a - * pointer, like the guint in the traditional prototype. We can't use - * intptr_t as that is not portable enough. - */ -GIOChannel *g_io_channel_win32_new_messages (gsize hwnd); -#else -GIOChannel *g_io_channel_win32_new_messages (guint hwnd); -#endif - -/* Create an IO channel for C runtime (emulated Unix-like) file - * descriptors. After calling g_io_add_watch() on a IO channel - * returned by this function, you shouldn't call read() on the file - * descriptor. This is because adding polling for a file descriptor is - * implemented on Win32 by starting a thread that sits blocked in a - * read() from the file descriptor most of the time. All reads from - * the file descriptor should be done by this internal GLib - * thread. Your code should call only g_io_channel_read_chars(). - */ -GIOChannel* g_io_channel_win32_new_fd (gint fd); - -/* Get the C runtime file descriptor of a channel. */ -gint g_io_channel_win32_get_fd (GIOChannel *channel); - -/* Create an IO channel for a winsock socket. The parameter should be - * a SOCKET. Contrary to IO channels for file descriptors (on *Win32), - * you can use normal recv() or recvfrom() on sockets even if GLib - * is polling them. - */ -GIOChannel *g_io_channel_win32_new_socket (gint socket); - -#endif - -G_END_DECLS - -#endif /* __G_IOCHANNEL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gkeyfile.h b/GstreamerHelper/x86/include/glib-2.0/glib/gkeyfile.h deleted file mode 100644 index 998bb7a7..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gkeyfile.h +++ /dev/null @@ -1,268 +0,0 @@ -/* gkeyfile.h - desktop entry file parser - * - * Copyright 2004 Red Hat, Inc. - * - * Ray Strode - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_KEY_FILE_H__ -#define __G_KEY_FILE_H__ - -#include - -G_BEGIN_DECLS - -typedef enum -{ - G_KEY_FILE_ERROR_UNKNOWN_ENCODING, - G_KEY_FILE_ERROR_PARSE, - G_KEY_FILE_ERROR_NOT_FOUND, - G_KEY_FILE_ERROR_KEY_NOT_FOUND, - G_KEY_FILE_ERROR_GROUP_NOT_FOUND, - G_KEY_FILE_ERROR_INVALID_VALUE -} GKeyFileError; - -#define G_KEY_FILE_ERROR g_key_file_error_quark() - -GQuark g_key_file_error_quark (void); - -typedef struct _GKeyFile GKeyFile; - -typedef enum -{ - G_KEY_FILE_NONE = 0, - G_KEY_FILE_KEEP_COMMENTS = 1 << 0, - G_KEY_FILE_KEEP_TRANSLATIONS = 1 << 1 -} GKeyFileFlags; - -GKeyFile *g_key_file_new (void); -GKeyFile *g_key_file_ref (GKeyFile *key_file); -void g_key_file_unref (GKeyFile *key_file); -void g_key_file_free (GKeyFile *key_file); -void g_key_file_set_list_separator (GKeyFile *key_file, - gchar separator); -gboolean g_key_file_load_from_file (GKeyFile *key_file, - const gchar *file, - GKeyFileFlags flags, - GError **error); -gboolean g_key_file_load_from_data (GKeyFile *key_file, - const gchar *data, - gsize length, - GKeyFileFlags flags, - GError **error); -gboolean g_key_file_load_from_dirs (GKeyFile *key_file, - const gchar *file, - const gchar **search_dirs, - gchar **full_path, - GKeyFileFlags flags, - GError **error); -gboolean g_key_file_load_from_data_dirs (GKeyFile *key_file, - const gchar *file, - gchar **full_path, - GKeyFileFlags flags, - GError **error); -gchar *g_key_file_to_data (GKeyFile *key_file, - gsize *length, - GError **error) G_GNUC_MALLOC; -gchar *g_key_file_get_start_group (GKeyFile *key_file) G_GNUC_MALLOC; -gchar **g_key_file_get_groups (GKeyFile *key_file, - gsize *length) G_GNUC_MALLOC; -gchar **g_key_file_get_keys (GKeyFile *key_file, - const gchar *group_name, - gsize *length, - GError **error) G_GNUC_MALLOC; -gboolean g_key_file_has_group (GKeyFile *key_file, - const gchar *group_name); -gboolean g_key_file_has_key (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -gchar *g_key_file_get_value (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_value (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *value); -gchar *g_key_file_get_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *string); -gchar *g_key_file_get_locale_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_locale_string (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - const gchar *string); -gboolean g_key_file_get_boolean (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_boolean (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gboolean value); -gint g_key_file_get_integer (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_integer (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gint value); -gint64 g_key_file_get_int64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_int64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gint64 value); -guint64 g_key_file_get_uint64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_uint64 (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - guint64 value); -gdouble g_key_file_get_double (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -void g_key_file_set_double (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gdouble value); -gchar **g_key_file_get_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar * const list[], - gsize length); -gchar **g_key_file_get_locale_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_locale_string_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *locale, - const gchar * const list[], - gsize length); -gboolean *g_key_file_get_boolean_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_boolean_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gboolean list[], - gsize length); -gint *g_key_file_get_integer_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_double_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gdouble list[], - gsize length); -gdouble *g_key_file_get_double_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gsize *length, - GError **error) G_GNUC_MALLOC; -void g_key_file_set_integer_list (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - gint list[], - gsize length); -gboolean g_key_file_set_comment (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - const gchar *comment, - GError **error); -gchar *g_key_file_get_comment (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error) G_GNUC_MALLOC; - -gboolean g_key_file_remove_comment (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -gboolean g_key_file_remove_key (GKeyFile *key_file, - const gchar *group_name, - const gchar *key, - GError **error); -gboolean g_key_file_remove_group (GKeyFile *key_file, - const gchar *group_name, - GError **error); - -/* Defines for handling freedesktop.org Desktop files */ -#define G_KEY_FILE_DESKTOP_GROUP "Desktop Entry" - -#define G_KEY_FILE_DESKTOP_KEY_TYPE "Type" -#define G_KEY_FILE_DESKTOP_KEY_VERSION "Version" -#define G_KEY_FILE_DESKTOP_KEY_NAME "Name" -#define G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME "GenericName" -#define G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY "NoDisplay" -#define G_KEY_FILE_DESKTOP_KEY_COMMENT "Comment" -#define G_KEY_FILE_DESKTOP_KEY_ICON "Icon" -#define G_KEY_FILE_DESKTOP_KEY_HIDDEN "Hidden" -#define G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN "OnlyShowIn" -#define G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN "NotShowIn" -#define G_KEY_FILE_DESKTOP_KEY_TRY_EXEC "TryExec" -#define G_KEY_FILE_DESKTOP_KEY_EXEC "Exec" -#define G_KEY_FILE_DESKTOP_KEY_PATH "Path" -#define G_KEY_FILE_DESKTOP_KEY_TERMINAL "Terminal" -#define G_KEY_FILE_DESKTOP_KEY_MIME_TYPE "MimeType" -#define G_KEY_FILE_DESKTOP_KEY_CATEGORIES "Categories" -#define G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY "StartupNotify" -#define G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS "StartupWMClass" -#define G_KEY_FILE_DESKTOP_KEY_URL "URL" - -#define G_KEY_FILE_DESKTOP_TYPE_APPLICATION "Application" -#define G_KEY_FILE_DESKTOP_TYPE_LINK "Link" -#define G_KEY_FILE_DESKTOP_TYPE_DIRECTORY "Directory" - -G_END_DECLS - -#endif /* __G_KEY_FILE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/glist.h b/GstreamerHelper/x86/include/glib-2.0/glib/glist.h deleted file mode 100644 index 44cfcc01..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/glist.h +++ /dev/null @@ -1,124 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_LIST_H__ -#define __G_LIST_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GList GList; - -struct _GList -{ - gpointer data; - GList *next; - GList *prev; -}; - -/* Doubly linked lists - */ -GList* g_list_alloc (void) G_GNUC_WARN_UNUSED_RESULT; -void g_list_free (GList *list); -void g_list_free_1 (GList *list); -#define g_list_free1 g_list_free_1 -void g_list_free_full (GList *list, - GDestroyNotify free_func); -GList* g_list_append (GList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_prepend (GList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert (GList *list, - gpointer data, - gint position) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert_sorted (GList *list, - gpointer data, - GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert_sorted_with_data (GList *list, - gpointer data, - GCompareDataFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_insert_before (GList *list, - GList *sibling, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_concat (GList *list1, - GList *list2) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_remove (GList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_remove_all (GList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_remove_link (GList *list, - GList *llink) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_delete_link (GList *list, - GList *link_) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_reverse (GList *list) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_copy (GList *list) G_GNUC_WARN_UNUSED_RESULT; - -GLIB_AVAILABLE_IN_2_34 -GList* g_list_copy_deep (GList *list, - GCopyFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; - -GList* g_list_nth (GList *list, - guint n); -GList* g_list_nth_prev (GList *list, - guint n); -GList* g_list_find (GList *list, - gconstpointer data); -GList* g_list_find_custom (GList *list, - gconstpointer data, - GCompareFunc func); -gint g_list_position (GList *list, - GList *llink); -gint g_list_index (GList *list, - gconstpointer data); -GList* g_list_last (GList *list); -GList* g_list_first (GList *list); -guint g_list_length (GList *list); -void g_list_foreach (GList *list, - GFunc func, - gpointer user_data); -GList* g_list_sort (GList *list, - GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT; -GList* g_list_sort_with_data (GList *list, - GCompareDataFunc compare_func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_list_nth_data (GList *list, - guint n); - - -#define g_list_previous(list) ((list) ? (((GList *)(list))->prev) : NULL) -#define g_list_next(list) ((list) ? (((GList *)(list))->next) : NULL) - -G_END_DECLS - -#endif /* __G_LIST_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gmacros.h b/GstreamerHelper/x86/include/glib-2.0/glib/gmacros.h deleted file mode 100644 index 4ad57da3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gmacros.h +++ /dev/null @@ -1,343 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -/* This file must not include any other glib header file and must thus - * not refer to variables from glibconfig.h - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MACROS_H__ -#define __G_MACROS_H__ - -/* We include stddef.h to get the system's definition of NULL - */ -#include - -/* Here we provide G_GNUC_EXTENSION as an alias for __extension__, - * where this is valid. This allows for warningless compilation of - * "long long" types even in the presence of '-ansi -pedantic'. - */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) -# define G_GNUC_EXTENSION __extension__ -#else -# define G_GNUC_EXTENSION -#endif - -/* Provide macros to feature the GCC function attribute. - */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -#define G_GNUC_PURE \ - __attribute__((__pure__)) -#define G_GNUC_MALLOC \ - __attribute__((__malloc__)) -#else -#define G_GNUC_PURE -#define G_GNUC_MALLOC -#endif - -#if __GNUC__ >= 4 -#define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) -#else -#define G_GNUC_NULL_TERMINATED -#endif - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) -#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) -#define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y))) -#else -#define G_GNUC_ALLOC_SIZE(x) -#define G_GNUC_ALLOC_SIZE2(x,y) -#endif - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -#define G_GNUC_PRINTF( format_idx, arg_idx ) \ - __attribute__((__format__ (__printf__, format_idx, arg_idx))) -#define G_GNUC_SCANF( format_idx, arg_idx ) \ - __attribute__((__format__ (__scanf__, format_idx, arg_idx))) -#define G_GNUC_FORMAT( arg_idx ) \ - __attribute__((__format_arg__ (arg_idx))) -#define G_GNUC_NORETURN \ - __attribute__((__noreturn__)) -#define G_GNUC_CONST \ - __attribute__((__const__)) -#define G_GNUC_UNUSED \ - __attribute__((__unused__)) -#define G_GNUC_NO_INSTRUMENT \ - __attribute__((__no_instrument_function__)) -#else /* !__GNUC__ */ -#define G_GNUC_PRINTF( format_idx, arg_idx ) -#define G_GNUC_SCANF( format_idx, arg_idx ) -#define G_GNUC_FORMAT( arg_idx ) -#define G_GNUC_NORETURN -#define G_GNUC_CONST -#define G_GNUC_UNUSED -#define G_GNUC_NO_INSTRUMENT -#endif /* !__GNUC__ */ - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define G_GNUC_DEPRECATED \ - __attribute__((__deprecated__)) -#else -#define G_GNUC_DEPRECATED -#endif /* __GNUC__ */ - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define G_GNUC_DEPRECATED_FOR(f) \ - __attribute__((deprecated("Use " #f " instead"))) -#else -#define G_GNUC_DEPRECATED_FOR(f) G_GNUC_DEPRECATED -#endif /* __GNUC__ */ - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) -#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#define G_GNUC_END_IGNORE_DEPRECATIONS \ - _Pragma ("GCC diagnostic pop") -#else -#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS -#define G_GNUC_END_IGNORE_DEPRECATIONS -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) -# define G_GNUC_MAY_ALIAS __attribute__((may_alias)) -#else -# define G_GNUC_MAY_ALIAS -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -#define G_GNUC_WARN_UNUSED_RESULT \ - __attribute__((warn_unused_result)) -#else -#define G_GNUC_WARN_UNUSED_RESULT -#endif /* __GNUC__ */ - -#ifndef G_DISABLE_DEPRECATED -/* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with - * macros, so we can refer to them as strings unconditionally. - * usage not-recommended since gcc-3.0 - */ -#if defined (__GNUC__) && (__GNUC__ < 3) -#define G_GNUC_FUNCTION __FUNCTION__ -#define G_GNUC_PRETTY_FUNCTION __PRETTY_FUNCTION__ -#else /* !__GNUC__ */ -#define G_GNUC_FUNCTION "" -#define G_GNUC_PRETTY_FUNCTION "" -#endif /* !__GNUC__ */ -#endif /* !G_DISABLE_DEPRECATED */ - -#define G_STRINGIFY(macro_or_string) G_STRINGIFY_ARG (macro_or_string) -#define G_STRINGIFY_ARG(contents) #contents - -#ifndef __GI_SCANNER__ /* The static assert macro really confuses the introspection parser */ -#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2 -#define G_PASTE(identifier1,identifier2) G_PASTE_ARGS (identifier1, identifier2) -#ifdef __COUNTER__ -#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] -#else -#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __LINE__)[(expr) ? 1 : -1] -#endif -#define G_STATIC_ASSERT_EXPR(expr) ((void) sizeof (char[(expr) ? 1 : -1])) -#endif - -/* Provide a string identifying the current code position */ -#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(__cplusplus) -# define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__) ":" __PRETTY_FUNCTION__ "()" -#else -# define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__) -#endif - -/* Provide a string identifying the current function, non-concatenatable */ -#if defined (__GNUC__) -# define G_STRFUNC ((const char*) (__PRETTY_FUNCTION__)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 19901L -# define G_STRFUNC ((const char*) (__func__)) -#elif defined(_MSC_VER) && (_MSC_VER > 1300) -# define G_STRFUNC ((const char*) (__FUNCTION__)) -#else -# define G_STRFUNC ((const char*) ("???")) -#endif - -/* Guard C code in headers, while including them from C++ */ -#ifdef __cplusplus -# define G_BEGIN_DECLS extern "C" { -# define G_END_DECLS } -#else -# define G_BEGIN_DECLS -# define G_END_DECLS -#endif - -/* Provide definitions for some commonly used macros. - * Some of them are only provided if they haven't already - * been defined. It is assumed that if they are already - * defined then the current definition is correct. - */ -#ifndef NULL -# ifdef __cplusplus -# define NULL (0L) -# else /* !__cplusplus */ -# define NULL ((void*) 0) -# endif /* !__cplusplus */ -#endif - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#undef MAX -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - -#undef MIN -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) - -#undef ABS -#define ABS(a) (((a) < 0) ? -(a) : (a)) - -#undef CLAMP -#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) - -/* Count the number of elements in an array. The array must be defined - * as such; using this with a dynamically allocated array will give - * incorrect results. - */ -#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) - -/* Macros by analogy to GINT_TO_POINTER, GPOINTER_TO_INT - */ -#define GPOINTER_TO_SIZE(p) ((gsize) (p)) -#define GSIZE_TO_POINTER(s) ((gpointer) (gsize) (s)) - -/* Provide convenience macros for handling structure - * fields through their offsets. - */ - -#if defined(__GNUC__) && __GNUC__ >= 4 -# define G_STRUCT_OFFSET(struct_type, member) \ - ((glong) offsetof (struct_type, member)) -#else -# define G_STRUCT_OFFSET(struct_type, member) \ - ((glong) ((guint8*) &((struct_type*) 0)->member)) -#endif - -#define G_STRUCT_MEMBER_P(struct_p, struct_offset) \ - ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset))) -#define G_STRUCT_MEMBER(member_type, struct_p, struct_offset) \ - (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset))) - -/* Provide simple macro statement wrappers: - * G_STMT_START { statements; } G_STMT_END; - * This can be used as a single statement, like: - * if (x) G_STMT_START { ... } G_STMT_END; else ... - * This intentionally does not use compiler extensions like GCC's '({...})' to - * avoid portability issue or side effects when compiled with different compilers. - */ -#if !(defined (G_STMT_START) && defined (G_STMT_END)) -# define G_STMT_START do -# define G_STMT_END while (0) -#endif - -/* Deprecated -- do not use. */ -#ifndef G_DISABLE_DEPRECATED -#ifdef G_DISABLE_CONST_RETURNS -#define G_CONST_RETURN -#else -#define G_CONST_RETURN const -#endif -#endif - -/* - * The G_LIKELY and G_UNLIKELY macros let the programmer give hints to - * the compiler about the expected result of an expression. Some compilers - * can use this information for optimizations. - * - * The _G_BOOLEAN_EXPR macro is intended to trigger a gcc warning when - * putting assignments in g_return_if_fail (). - */ -#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) -#define _G_BOOLEAN_EXPR(expr) \ - G_GNUC_EXTENSION ({ \ - int _g_boolean_var_; \ - if (expr) \ - _g_boolean_var_ = 1; \ - else \ - _g_boolean_var_ = 0; \ - _g_boolean_var_; \ -}) -#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1)) -#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0)) -#else -#define G_LIKELY(expr) (expr) -#define G_UNLIKELY(expr) (expr) -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define G_DEPRECATED __attribute__((__deprecated__)) -#elif defined(_MSC_VER) && (_MSC_VER >= 1300) -#define G_DEPRECATED __declspec(deprecated) -#else -#define G_DEPRECATED -#endif - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define G_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead"))) -#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320) -#define G_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead")) -#else -#define G_DEPRECATED_FOR(f) G_DEPRECATED -#endif - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define G_UNAVAILABLE(maj,min) __attribute__((deprecated("Not available before " #maj "." #min))) -#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320) -#define G_UNAVAILABLE(maj,min) __declspec(deprecated("is not available before " #maj "." #min)) -#else -#define G_UNAVAILABLE(maj,min) -#endif - -/* These macros are used to mark deprecated functions in GLib headers, - * and thus have to be exposed in installed headers. But please - * do *not* use them in other projects. Instead, use G_DEPRECATED - * or define your own wrappers around it. - */ - -#ifdef GLIB_DISABLE_DEPRECATION_WARNINGS -#define GLIB_DEPRECATED -#define GLIB_DEPRECATED_FOR(f) -#define GLIB_UNAVAILABLE(maj,min) -#else -#define GLIB_DEPRECATED G_DEPRECATED -#define GLIB_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) -#define GLIB_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) -#endif - -#endif /* __G_MACROS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gmain.h b/GstreamerHelper/x86/include/glib-2.0/glib/gmain.h deleted file mode 100644 index 4d4d5043..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gmain.h +++ /dev/null @@ -1,493 +0,0 @@ -/* gmain.h - the GLib Main loop - * Copyright (C) 1998-2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MAIN_H__ -#define __G_MAIN_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GMainContext: - * - * The GMainContext struct is an opaque data - * type representing a set of sources to be handled in a main loop. - */ -typedef struct _GMainContext GMainContext; - -/** - * GMainLoop: - * - * The GMainLoop struct is an opaque data type - * representing the main event loop of a GLib or GTK+ application. - */ -typedef struct _GMainLoop GMainLoop; - -/** - * GSource: - * - * The GSource struct is an opaque data type - * representing an event source. - */ -typedef struct _GSource GSource; -typedef struct _GSourcePrivate GSourcePrivate; - -/** - * GSourceCallbackFuncs: - * @ref: Called when a reference is added to the callback object - * @unref: Called when a reference to the callback object is dropped - * @get: Called to extract the callback function and data from the - * callback object. - - * The GSourceCallbackFuncs struct contains - * functions for managing callback objects. - */ -typedef struct _GSourceCallbackFuncs GSourceCallbackFuncs; - -/** - * GSourceFuncs: - * @prepare: Called before all the file descriptors are polled. If the - * source can determine that it is ready here (without waiting for the - * results of the poll() call) it should return %TRUE. It can also return - * a @timeout_ value which should be the maximum timeout (in milliseconds) - * which should be passed to the poll() call. The actual timeout used will - * be -1 if all sources returned -1, or it will be the minimum of all the - * @timeout_ values returned which were >= 0. - * @check: Called after all the file descriptors are polled. The source - * should return %TRUE if it is ready to be dispatched. Note that some - * time may have passed since the previous prepare function was called, - * so the source should be checked again here. - * @dispatch: Called to dispatch the event source, after it has returned - * %TRUE in either its @prepare or its @check function. The @dispatch - * function is passed in a callback function and data. The callback - * function may be %NULL if the source was never connected to a callback - * using g_source_set_callback(). The @dispatch function should call the - * callback function with @user_data and whatever additional parameters - * are needed for this type of event source. - * @finalize: Called when the source is finalized. - * - * The GSourceFuncs struct contains a table of - * functions used to handle event sources in a generic manner. - * - * For idle sources, the prepare and check functions always return %TRUE - * to indicate that the source is always ready to be processed. The prepare - * function also returns a timeout value of 0 to ensure that the poll() call - * doesn't block (since that would be time wasted which could have been spent - * running the idle function). - * - * For timeout sources, the prepare and check functions both return %TRUE - * if the timeout interval has expired. The prepare function also returns - * a timeout value to ensure that the poll() call doesn't block too long - * and miss the next timeout. - * - * For file descriptor sources, the prepare function typically returns %FALSE, - * since it must wait until poll() has been called before it knows whether - * any events need to be processed. It sets the returned timeout to -1 to - * indicate that it doesn't mind how long the poll() call blocks. In the - * check function, it tests the results of the poll() call to see if the - * required condition has been met, and returns %TRUE if so. - */ -typedef struct _GSourceFuncs GSourceFuncs; - -/** - * GPid: - * - * A type which is used to hold a process identification. - * - * On UNIX, processes are identified by a process id (an integer), - * while Windows uses process handles (which are pointers). - * - * GPid is used in GLib only for descendant processes spawned with - * the g_spawn functions. - */ - -/** - * GSourceFunc: - * @user_data: data passed to the function, set when the source was - * created with one of the above functions - * - * Specifies the type of function passed to g_timeout_add(), - * g_timeout_add_full(), g_idle_add(), and g_idle_add_full(). - * - * Returns: %FALSE if the source should be removed - */ -typedef gboolean (*GSourceFunc) (gpointer user_data); - -/** - * GChildWatchFunc: - * @pid: the process id of the child process - * @status: Status information about the child process, encoded - * in a platform-specific manner - * @user_data: user data passed to g_child_watch_add() - * - * Prototype of a #GChildWatchSource callback, called when a child - * process has exited. To interpret @status, see the documentation - * for g_spawn_check_exit_status(). - */ -typedef void (*GChildWatchFunc) (GPid pid, - gint status, - gpointer user_data); -struct _GSource -{ - /*< private >*/ - gpointer callback_data; - GSourceCallbackFuncs *callback_funcs; - - GSourceFuncs *source_funcs; - guint ref_count; - - GMainContext *context; - - gint priority; - guint flags; - guint source_id; - - GSList *poll_fds; - - GSource *prev; - GSource *next; - - char *name; - - GSourcePrivate *priv; -}; - -struct _GSourceCallbackFuncs -{ - void (*ref) (gpointer cb_data); - void (*unref) (gpointer cb_data); - void (*get) (gpointer cb_data, - GSource *source, - GSourceFunc *func, - gpointer *data); -}; - -/** - * GSourceDummyMarshal: - * - * This is just a placeholder for #GClosureMarshal, - * which cannot be used here for dependency reasons. - */ -typedef void (*GSourceDummyMarshal) (void); - -struct _GSourceFuncs -{ - gboolean (*prepare) (GSource *source, - gint *timeout_); - gboolean (*check) (GSource *source); - gboolean (*dispatch) (GSource *source, - GSourceFunc callback, - gpointer user_data); - void (*finalize) (GSource *source); /* Can be NULL */ - - /*< private >*/ - /* For use by g_source_set_closure */ - GSourceFunc closure_callback; - GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */ -}; - -/* Standard priorities */ - -/** - * G_PRIORITY_HIGH: - * - * Use this for high priority event sources. - * - * It is not used within GLib or GTK+. - */ -#define G_PRIORITY_HIGH -100 - -/** - * G_PRIORITY_DEFAULT: - * - * Use this for default priority event sources. - * - * In GLib this priority is used when adding timeout functions - * with g_timeout_add(). In GDK this priority is used for events - * from the X server. - */ -#define G_PRIORITY_DEFAULT 0 - -/** - * G_PRIORITY_HIGH_IDLE: - * - * Use this for high priority idle functions. - * - * GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, - * and #G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is - * done to ensure that any pending resizes are processed before any - * pending redraws, so that widgets are not redrawn twice unnecessarily.) - */ -#define G_PRIORITY_HIGH_IDLE 100 - -/** - * G_PRIORITY_DEFAULT_IDLE: - * - * Use this for default priority idle functions. - * - * In GLib this priority is used when adding idle functions with - * g_idle_add(). - */ -#define G_PRIORITY_DEFAULT_IDLE 200 - -/** - * G_PRIORITY_LOW: - * - * Use this for very low priority background tasks. - * - * It is not used within GLib or GTK+. - */ -#define G_PRIORITY_LOW 300 - -/** - * G_SOURCE_REMOVE: - * - * Use this macro as the return value of a #GSourceFunc to remove - * the #GSource from the main loop. - * - * Since: 2.32 - */ -#define G_SOURCE_REMOVE FALSE - -/** - * G_SOURCE_CONTINUE: - * - * Use this macro as the return value of a #GSourceFunc to leave - * the #GSource in the main loop. - * - * Since: 2.32 - */ -#define G_SOURCE_CONTINUE TRUE - -/* GMainContext: */ - -GMainContext *g_main_context_new (void); -GMainContext *g_main_context_ref (GMainContext *context); -void g_main_context_unref (GMainContext *context); -GMainContext *g_main_context_default (void); - -gboolean g_main_context_iteration (GMainContext *context, - gboolean may_block); -gboolean g_main_context_pending (GMainContext *context); - -/* For implementation of legacy interfaces - */ -GSource *g_main_context_find_source_by_id (GMainContext *context, - guint source_id); -GSource *g_main_context_find_source_by_user_data (GMainContext *context, - gpointer user_data); -GSource *g_main_context_find_source_by_funcs_user_data (GMainContext *context, - GSourceFuncs *funcs, - gpointer user_data); - -/* Low level functions for implementing custom main loops. - */ -void g_main_context_wakeup (GMainContext *context); -gboolean g_main_context_acquire (GMainContext *context); -void g_main_context_release (GMainContext *context); -gboolean g_main_context_is_owner (GMainContext *context); -gboolean g_main_context_wait (GMainContext *context, - GCond *cond, - GMutex *mutex); - -gboolean g_main_context_prepare (GMainContext *context, - gint *priority); -gint g_main_context_query (GMainContext *context, - gint max_priority, - gint *timeout_, - GPollFD *fds, - gint n_fds); -gint g_main_context_check (GMainContext *context, - gint max_priority, - GPollFD *fds, - gint n_fds); -void g_main_context_dispatch (GMainContext *context); - -void g_main_context_set_poll_func (GMainContext *context, - GPollFunc func); -GPollFunc g_main_context_get_poll_func (GMainContext *context); - -/* Low level functions for use by source implementations - */ -void g_main_context_add_poll (GMainContext *context, - GPollFD *fd, - gint priority); -void g_main_context_remove_poll (GMainContext *context, - GPollFD *fd); - -gint g_main_depth (void); -GSource *g_main_current_source (void); - -/* GMainContexts for other threads - */ -void g_main_context_push_thread_default (GMainContext *context); -void g_main_context_pop_thread_default (GMainContext *context); -GMainContext *g_main_context_get_thread_default (void); -GMainContext *g_main_context_ref_thread_default (void); - -/* GMainLoop: */ - -GMainLoop *g_main_loop_new (GMainContext *context, - gboolean is_running); -void g_main_loop_run (GMainLoop *loop); -void g_main_loop_quit (GMainLoop *loop); -GMainLoop *g_main_loop_ref (GMainLoop *loop); -void g_main_loop_unref (GMainLoop *loop); -gboolean g_main_loop_is_running (GMainLoop *loop); -GMainContext *g_main_loop_get_context (GMainLoop *loop); - -/* GSource: */ - -GSource *g_source_new (GSourceFuncs *source_funcs, - guint struct_size); -GSource *g_source_ref (GSource *source); -void g_source_unref (GSource *source); - -guint g_source_attach (GSource *source, - GMainContext *context); -void g_source_destroy (GSource *source); - -void g_source_set_priority (GSource *source, - gint priority); -gint g_source_get_priority (GSource *source); -void g_source_set_can_recurse (GSource *source, - gboolean can_recurse); -gboolean g_source_get_can_recurse (GSource *source); -guint g_source_get_id (GSource *source); - -GMainContext *g_source_get_context (GSource *source); - -void g_source_set_callback (GSource *source, - GSourceFunc func, - gpointer data, - GDestroyNotify notify); - -void g_source_set_funcs (GSource *source, - GSourceFuncs *funcs); -gboolean g_source_is_destroyed (GSource *source); - -void g_source_set_name (GSource *source, - const char *name); -const char * g_source_get_name (GSource *source); -void g_source_set_name_by_id (guint tag, - const char *name); - - -/* Used to implement g_source_connect_closure and internally*/ -void g_source_set_callback_indirect (GSource *source, - gpointer callback_data, - GSourceCallbackFuncs *callback_funcs); - -void g_source_add_poll (GSource *source, - GPollFD *fd); -void g_source_remove_poll (GSource *source, - GPollFD *fd); - -void g_source_add_child_source (GSource *source, - GSource *child_source); -void g_source_remove_child_source (GSource *source, - GSource *child_source); - -GLIB_DEPRECATED_IN_2_28_FOR(g_source_get_time) -void g_source_get_current_time (GSource *source, - GTimeVal *timeval); - -gint64 g_source_get_time (GSource *source); - - /* void g_source_connect_closure (GSource *source, - GClosure *closure); - */ - -/* Specific source types - */ -GSource *g_idle_source_new (void); -GSource *g_child_watch_source_new (GPid pid); -GSource *g_timeout_source_new (guint interval); -GSource *g_timeout_source_new_seconds (guint interval); - -/* Miscellaneous functions - */ -void g_get_current_time (GTimeVal *result); -gint64 g_get_monotonic_time (void); -gint64 g_get_real_time (void); - - -/* Source manipulation by ID */ -gboolean g_source_remove (guint tag); -gboolean g_source_remove_by_user_data (gpointer user_data); -gboolean g_source_remove_by_funcs_user_data (GSourceFuncs *funcs, - gpointer user_data); - -/* Idles, child watchers and timeouts */ -guint g_timeout_add_full (gint priority, - guint interval, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -guint g_timeout_add (guint interval, - GSourceFunc function, - gpointer data); -guint g_timeout_add_seconds_full (gint priority, - guint interval, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -guint g_timeout_add_seconds (guint interval, - GSourceFunc function, - gpointer data); -guint g_child_watch_add_full (gint priority, - GPid pid, - GChildWatchFunc function, - gpointer data, - GDestroyNotify notify); -guint g_child_watch_add (GPid pid, - GChildWatchFunc function, - gpointer data); -guint g_idle_add (GSourceFunc function, - gpointer data); -guint g_idle_add_full (gint priority, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -gboolean g_idle_remove_by_data (gpointer data); - -void g_main_context_invoke_full (GMainContext *context, - gint priority, - GSourceFunc function, - gpointer data, - GDestroyNotify notify); -void g_main_context_invoke (GMainContext *context, - GSourceFunc function, - gpointer data); - -/* Hook for GClosure / GSource integration. Don't touch */ -GLIB_VAR GSourceFuncs g_timeout_funcs; -GLIB_VAR GSourceFuncs g_child_watch_funcs; -GLIB_VAR GSourceFuncs g_idle_funcs; - -G_END_DECLS - -#endif /* __G_MAIN_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gmappedfile.h b/GstreamerHelper/x86/include/glib-2.0/glib/gmappedfile.h deleted file mode 100644 index cf122e41..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gmappedfile.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * gmappedfile.h: Simplified wrapper around the mmap function - * - * Copyright 2005 Matthias Clasen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MAPPED_FILE_H__ -#define __G_MAPPED_FILE_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GMappedFile GMappedFile; - -GMappedFile *g_mapped_file_new (const gchar *filename, - gboolean writable, - GError **error) G_GNUC_MALLOC; -GMappedFile *g_mapped_file_new_from_fd (gint fd, - gboolean writable, - GError **error) G_GNUC_MALLOC; -gsize g_mapped_file_get_length (GMappedFile *file); -gchar *g_mapped_file_get_contents (GMappedFile *file); -GLIB_AVAILABLE_IN_2_34 -GBytes * g_mapped_file_get_bytes (GMappedFile *file); -GMappedFile *g_mapped_file_ref (GMappedFile *file); -void g_mapped_file_unref (GMappedFile *file); - -GLIB_DEPRECATED_FOR(g_mapped_file_unref) -void g_mapped_file_free (GMappedFile *file); - -G_END_DECLS - -#endif /* __G_MAPPED_FILE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gmarkup.h b/GstreamerHelper/x86/include/glib-2.0/glib/gmarkup.h deleted file mode 100644 index a8865da9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gmarkup.h +++ /dev/null @@ -1,238 +0,0 @@ -/* gmarkup.h - Simple XML-like string parser/writer - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MARKUP_H__ -#define __G_MARKUP_H__ - -#include - -#include -#include - -G_BEGIN_DECLS - -/** - * GMarkupError: - * @G_MARKUP_ERROR_BAD_UTF8: text being parsed was not valid UTF-8 - * @G_MARKUP_ERROR_EMPTY: document contained nothing, or only whitespace - * @G_MARKUP_ERROR_PARSE: document was ill-formed - * @G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser - * functions; element wasn't known - * @G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser - * functions; attribute wasn't known - * @G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser - * functions; content was invalid - * @G_MARKUP_ERROR_MISSING_ATTRIBUTE: error should be set by #GMarkupParser - * functions; a required attribute was missing - * - * Error codes returned by markup parsing. - */ -typedef enum -{ - G_MARKUP_ERROR_BAD_UTF8, - G_MARKUP_ERROR_EMPTY, - G_MARKUP_ERROR_PARSE, - /* The following are primarily intended for specific GMarkupParser - * implementations to set. - */ - G_MARKUP_ERROR_UNKNOWN_ELEMENT, - G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, - G_MARKUP_ERROR_INVALID_CONTENT, - G_MARKUP_ERROR_MISSING_ATTRIBUTE -} GMarkupError; - -/** - * G_MARKUP_ERROR: - * - * Error domain for markup parsing. - * Errors in this domain will be from the #GMarkupError enumeration. - * See #GError for information on error domains. - */ -#define G_MARKUP_ERROR g_markup_error_quark () - -GQuark g_markup_error_quark (void); - -/** - * GMarkupParseFlags: - * @G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use - * @G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked - * sections are not passed literally to the @passthrough function of - * the parser. Instead, the content of the section (without the - * <![CDATA[ and ]]>) is - * passed to the @text function. This flag was added in GLib 2.12 - * @G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup - * itself have line/column information prefixed to them to let the - * caller know the location of the error. When this flag is set the - * location information is also prefixed to errors generated by the - * #GMarkupParser implementation functions - * - * Flags that affect the behaviour of the parser. - */ -typedef enum -{ - G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0, - G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1, - G_MARKUP_PREFIX_ERROR_POSITION = 1 << 2 -} GMarkupParseFlags; - -/** - * GMarkupParseContext: - * - * A parse context is used to parse a stream of bytes that - * you expect to contain marked-up text. - * - * See g_markup_parse_context_new(), #GMarkupParser, and so - * on for more details. - */ -typedef struct _GMarkupParseContext GMarkupParseContext; -typedef struct _GMarkupParser GMarkupParser; - -/** - * GMarkupParser: - * @start_element: Callback to invoke when the opening tag of an element - * is seen. - * @end_element: Callback to invoke when the closing tag of an element - * is seen. Note that this is also called for empty tags like - * <empty/>. - * @text: Callback to invoke when some text is seen (text is always - * inside an element). Note that the text of an element may be spread - * over multiple calls of this function. If the - * %G_MARKUP_TREAT_CDATA_AS_TEXT flag is set, this function is also - * called for the content of CDATA marked sections. - * @passthrough: Callback to invoke for comments, processing instructions - * and doctype declarations; if you're re-writing the parsed document, - * write the passthrough text back out in the same position. If the - * %G_MARKUP_TREAT_CDATA_AS_TEXT flag is not set, this function is also - * called for CDATA marked sections. - * @error: Callback to invoke when an error occurs. - * - * Any of the fields in #GMarkupParser can be %NULL, in which case they - * will be ignored. Except for the @error function, any of these callbacks - * can set an error; in particular the %G_MARKUP_ERROR_UNKNOWN_ELEMENT, - * %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, and %G_MARKUP_ERROR_INVALID_CONTENT - * errors are intended to be set from these callbacks. If you set an error - * from a callback, g_markup_parse_context_parse() will report that error - * back to its caller. - */ -struct _GMarkupParser -{ - /* Called for open tags */ - void (*start_element) (GMarkupParseContext *context, - const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - gpointer user_data, - GError **error); - - /* Called for close tags */ - void (*end_element) (GMarkupParseContext *context, - const gchar *element_name, - gpointer user_data, - GError **error); - - /* Called for character data */ - /* text is not nul-terminated */ - void (*text) (GMarkupParseContext *context, - const gchar *text, - gsize text_len, - gpointer user_data, - GError **error); - - /* Called for strings that should be re-saved verbatim in this same - * position, but are not otherwise interpretable. At the moment - * this includes comments and processing instructions. - */ - /* text is not nul-terminated. */ - void (*passthrough) (GMarkupParseContext *context, - const gchar *passthrough_text, - gsize text_len, - gpointer user_data, - GError **error); - - /* Called on error, including one set by other - * methods in the vtable. The GError should not be freed. - */ - void (*error) (GMarkupParseContext *context, - GError *error, - gpointer user_data); -}; - -GMarkupParseContext *g_markup_parse_context_new (const GMarkupParser *parser, - GMarkupParseFlags flags, - gpointer user_data, - GDestroyNotify user_data_dnotify); -void g_markup_parse_context_free (GMarkupParseContext *context); -gboolean g_markup_parse_context_parse (GMarkupParseContext *context, - const gchar *text, - gssize text_len, - GError **error); -void g_markup_parse_context_push (GMarkupParseContext *context, - const GMarkupParser *parser, - gpointer user_data); -gpointer g_markup_parse_context_pop (GMarkupParseContext *context); - -gboolean g_markup_parse_context_end_parse (GMarkupParseContext *context, - GError **error); -const gchar * g_markup_parse_context_get_element (GMarkupParseContext *context); -const GSList * g_markup_parse_context_get_element_stack (GMarkupParseContext *context); - -/* For user-constructed error messages, has no precise semantics */ -void g_markup_parse_context_get_position (GMarkupParseContext *context, - gint *line_number, - gint *char_number); -gpointer g_markup_parse_context_get_user_data (GMarkupParseContext *context); - -/* useful when saving */ -gchar* g_markup_escape_text (const gchar *text, - gssize length); - -gchar *g_markup_printf_escaped (const char *format, - ...) G_GNUC_PRINTF (1, 2); -gchar *g_markup_vprintf_escaped (const char *format, - va_list args); - -typedef enum -{ - G_MARKUP_COLLECT_INVALID, - G_MARKUP_COLLECT_STRING, - G_MARKUP_COLLECT_STRDUP, - G_MARKUP_COLLECT_BOOLEAN, - G_MARKUP_COLLECT_TRISTATE, - - G_MARKUP_COLLECT_OPTIONAL = (1 << 16) -} GMarkupCollectType; - - -/* useful from start_element */ -gboolean g_markup_collect_attributes (const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - GError **error, - GMarkupCollectType first_type, - const gchar *first_attr, - ...); - -G_END_DECLS - -#endif /* __G_MARKUP_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gmem.h b/GstreamerHelper/x86/include/glib-2.0/glib/gmem.h deleted file mode 100644 index c50f46e7..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gmem.h +++ /dev/null @@ -1,285 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MEM_H__ -#define __G_MEM_H__ - -#include - -G_BEGIN_DECLS - -/** - * GMemVTable: - * @malloc: function to use for allocating memory. - * @realloc: function to use for reallocating memory. - * @free: function to use to free memory. - * @calloc: function to use for allocating zero-filled memory. - * @try_malloc: function to use for allocating memory without a default error handler. - * @try_realloc: function to use for reallocating memory without a default error handler. - * - * A set of functions used to perform memory allocation. The same #GMemVTable must - * be used for all allocations in the same program; a call to g_mem_set_vtable(), - * if it exists, should be prior to any use of GLib. - */ -typedef struct _GMemVTable GMemVTable; - - -#if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG -/** - * G_MEM_ALIGN: - * - * Indicates the number of bytes to which memory will be aligned on the - * current platform. - */ -# define G_MEM_ALIGN GLIB_SIZEOF_VOID_P -#else /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ -# define G_MEM_ALIGN GLIB_SIZEOF_LONG -#endif /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ - - -/* Memory allocation functions - */ - -void g_free (gpointer mem); - -GLIB_AVAILABLE_IN_2_34 -void g_clear_pointer (gpointer *pp, - GDestroyNotify destroy); - -gpointer g_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_realloc (gpointer mem, - gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_try_malloc (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_try_malloc0 (gsize n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_try_realloc (gpointer mem, - gsize n_bytes) G_GNUC_WARN_UNUSED_RESULT; - -gpointer g_malloc_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_malloc0_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_realloc_n (gpointer mem, - gsize n_blocks, - gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_try_malloc_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_try_malloc0_n (gsize n_blocks, - gsize n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2); -gpointer g_try_realloc_n (gpointer mem, - gsize n_blocks, - gsize n_block_bytes) G_GNUC_WARN_UNUSED_RESULT; - -#define g_clear_pointer(pp, destroy) \ - G_STMT_START { \ - G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \ - /* Only one access, please */ \ - gpointer *_pp = (gpointer *) (pp); \ - gpointer _p; \ - /* This assignment is needed to avoid a gcc warning */ \ - GDestroyNotify _destroy = (GDestroyNotify) (destroy); \ - \ - (void) (0 ? (gpointer) *(pp) : 0); \ - do \ - _p = g_atomic_pointer_get (_pp); \ - while G_UNLIKELY (!g_atomic_pointer_compare_and_exchange (_pp, _p, NULL)); \ - \ - if (_p) \ - _destroy (_p); \ - } G_STMT_END - -/* Optimise: avoid the call to the (slower) _n function if we can - * determine at compile-time that no overflow happens. - */ -#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) -# define _G_NEW(struct_type, n_structs, func) \ - (struct_type *) (G_GNUC_EXTENSION ({ \ - gsize __n = (gsize) (n_structs); \ - gsize __s = sizeof (struct_type); \ - gpointer __p; \ - if (__s == 1) \ - __p = g_##func (__n); \ - else if (__builtin_constant_p (__n) && \ - (__s == 0 || __n <= G_MAXSIZE / __s)) \ - __p = g_##func (__n * __s); \ - else \ - __p = g_##func##_n (__n, __s); \ - __p; \ - })) -# define _G_RENEW(struct_type, mem, n_structs, func) \ - (struct_type *) (G_GNUC_EXTENSION ({ \ - gsize __n = (gsize) (n_structs); \ - gsize __s = sizeof (struct_type); \ - gpointer __p = (gpointer) (mem); \ - if (__s == 1) \ - __p = g_##func (__p, __n); \ - else if (__builtin_constant_p (__n) && \ - (__s == 0 || __n <= G_MAXSIZE / __s)) \ - __p = g_##func (__p, __n * __s); \ - else \ - __p = g_##func##_n (__p, __n, __s); \ - __p; \ - })) - -#else - -/* Unoptimised version: always call the _n() function. */ - -#define _G_NEW(struct_type, n_structs, func) \ - ((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type))) -#define _G_RENEW(struct_type, mem, n_structs, func) \ - ((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_type))) - -#endif - -/** - * g_new: - * @struct_type: the type of the elements to allocate - * @n_structs: the number of elements to allocate - * - * Allocates @n_structs elements of type @struct_type. - * The returned pointer is cast to a pointer to the given type. - * If @n_structs is 0 it returns %NULL. - * Care is taken to avoid overflow when calculating the size of the allocated block. - * - * Since the returned pointer is already casted to the right type, - * it is normally unnecessary to cast it explicitly, and doing - * so might hide memory allocation errors. - * - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type - */ -#define g_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc) -/** - * g_new0: - * @struct_type: the type of the elements to allocate. - * @n_structs: the number of elements to allocate. - * - * Allocates @n_structs elements of type @struct_type, initialized to 0's. - * The returned pointer is cast to a pointer to the given type. - * If @n_structs is 0 it returns %NULL. - * Care is taken to avoid overflow when calculating the size of the allocated block. - * - * Since the returned pointer is already casted to the right type, - * it is normally unnecessary to cast it explicitly, and doing - * so might hide memory allocation errors. - * - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type. - */ -#define g_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, malloc0) -/** - * g_renew: - * @struct_type: the type of the elements to allocate - * @mem: the currently allocated memory - * @n_structs: the number of elements to allocate - * - * Reallocates the memory pointed to by @mem, so that it now has space for - * @n_structs elements of type @struct_type. It returns the new address of - * the memory, which may have been moved. - * Care is taken to avoid overflow when calculating the size of the allocated block. - * - * Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type - */ -#define g_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, realloc) -/** - * g_try_new: - * @struct_type: the type of the elements to allocate - * @n_structs: the number of elements to allocate - * - * Attempts to allocate @n_structs elements of type @struct_type, and returns - * %NULL on failure. Contrast with g_new(), which aborts the program on failure. - * The returned pointer is cast to a pointer to the given type. - * The function returns %NULL when @n_structs is 0 of if an overflow occurs. - * - * Since: 2.8 - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type - */ -#define g_try_new(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc) -/** - * g_try_new0: - * @struct_type: the type of the elements to allocate - * @n_structs: the number of elements to allocate - * - * Attempts to allocate @n_structs elements of type @struct_type, initialized - * to 0's, and returns %NULL on failure. Contrast with g_new0(), which aborts - * the program on failure. - * The returned pointer is cast to a pointer to the given type. - * The function returns %NULL when @n_structs is 0 of if an overflow occurs. - * - * Since: 2.8 - * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type - */ -#define g_try_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc0) -/** - * g_try_renew: - * @struct_type: the type of the elements to allocate - * @mem: the currently allocated memory - * @n_structs: the number of elements to allocate - * - * Attempts to reallocate the memory pointed to by @mem, so that it now has - * space for @n_structs elements of type @struct_type, and returns %NULL on - * failure. Contrast with g_renew(), which aborts the program on failure. - * It returns the new address of the memory, which may have been moved. - * The function returns %NULL if an overflow occurs. - * - * Since: 2.8 - * Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type - */ -#define g_try_renew(struct_type, mem, n_structs) _G_RENEW (struct_type, mem, n_structs, try_realloc) - - -/* Memory allocation virtualization for debugging purposes - * g_mem_set_vtable() has to be the very first GLib function called - * if being used - */ -struct _GMemVTable { - gpointer (*malloc) (gsize n_bytes); - gpointer (*realloc) (gpointer mem, - gsize n_bytes); - void (*free) (gpointer mem); - /* optional; set to NULL if not used ! */ - gpointer (*calloc) (gsize n_blocks, - gsize n_block_bytes); - gpointer (*try_malloc) (gsize n_bytes); - gpointer (*try_realloc) (gpointer mem, - gsize n_bytes); -}; -void g_mem_set_vtable (GMemVTable *vtable); -gboolean g_mem_is_system_malloc (void); - -GLIB_VAR gboolean g_mem_gc_friendly; - -/* Memory profiler and checker, has to be enabled via g_mem_set_vtable() - */ -GLIB_VAR GMemVTable *glib_mem_profiler_table; -void g_mem_profile (void); - -G_END_DECLS - -#endif /* __G_MEM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gmessages.h b/GstreamerHelper/x86/include/glib-2.0/glib/gmessages.h deleted file mode 100644 index 9cbcc838..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gmessages.h +++ /dev/null @@ -1,404 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_MESSAGES_H__ -#define __G_MESSAGES_H__ - -#include -#include -#include - -/* Suppress warnings when GCC is in -pedantic mode and not -std=c99 - */ -#if (__GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) -#pragma GCC system_header -#endif - -G_BEGIN_DECLS - -/* calculate a string size, guaranteed to fit format + args. - */ -gsize g_printf_string_upper_bound (const gchar* format, - va_list args); - -/* Log level shift offset for user defined - * log levels (0-7 are used by GLib). - */ -#define G_LOG_LEVEL_USER_SHIFT (8) - -/* Glib log levels and flags. - */ -typedef enum -{ - /* log flags */ - G_LOG_FLAG_RECURSION = 1 << 0, - G_LOG_FLAG_FATAL = 1 << 1, - - /* GLib log levels */ - G_LOG_LEVEL_ERROR = 1 << 2, /* always fatal */ - G_LOG_LEVEL_CRITICAL = 1 << 3, - G_LOG_LEVEL_WARNING = 1 << 4, - G_LOG_LEVEL_MESSAGE = 1 << 5, - G_LOG_LEVEL_INFO = 1 << 6, - G_LOG_LEVEL_DEBUG = 1 << 7, - - G_LOG_LEVEL_MASK = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL) -} GLogLevelFlags; - -/* GLib log levels that are considered fatal by default */ -#define G_LOG_FATAL_MASK (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR) - -typedef void (*GLogFunc) (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data); - -/* Logging mechanism - */ -guint g_log_set_handler (const gchar *log_domain, - GLogLevelFlags log_levels, - GLogFunc log_func, - gpointer user_data); -void g_log_remove_handler (const gchar *log_domain, - guint handler_id); -void g_log_default_handler (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer unused_data); -GLogFunc g_log_set_default_handler (GLogFunc log_func, - gpointer user_data); -void g_log (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *format, - ...) G_GNUC_PRINTF (3, 4); -void g_logv (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *format, - va_list args); -GLogLevelFlags g_log_set_fatal_mask (const gchar *log_domain, - GLogLevelFlags fatal_mask); -GLogLevelFlags g_log_set_always_fatal (GLogLevelFlags fatal_mask); - -/* internal */ -G_GNUC_INTERNAL void _g_log_fallback_handler (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer unused_data); - -/* Internal functions, used to implement the following macros */ -void g_return_if_fail_warning (const char *log_domain, - const char *pretty_function, - const char *expression); -void g_warn_message (const char *domain, - const char *file, - int line, - const char *func, - const char *warnexpr); -GLIB_DEPRECATED -void g_assert_warning (const char *log_domain, - const char *file, - const int line, - const char *pretty_function, - const char *expression) G_GNUC_NORETURN; - - -#ifndef G_LOG_DOMAIN -#define G_LOG_DOMAIN ((gchar*) 0) -#endif /* G_LOG_DOMAIN */ -#ifdef G_HAVE_ISO_VARARGS -/* for(;;) ; so that GCC knows that control doesn't go past g_error(). - * Put space before ending semicolon to avoid C++ build warnings. - */ -#define g_error(...) G_STMT_START { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_ERROR, \ - __VA_ARGS__); \ - for (;;) ; \ - } G_STMT_END - -#define g_message(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_MESSAGE, \ - __VA_ARGS__) -#define g_critical(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - __VA_ARGS__) -#define g_warning(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_WARNING, \ - __VA_ARGS__) -#define g_debug(...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - __VA_ARGS__) -#elif defined(G_HAVE_GNUC_VARARGS) -#define g_error(format...) G_STMT_START { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_ERROR, \ - format); \ - for (;;) ; \ - } G_STMT_END - -#define g_message(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_MESSAGE, \ - format) -#define g_critical(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - format) -#define g_warning(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_WARNING, \ - format) -#define g_debug(format...) g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - format) -#else /* no varargs macros */ -static void -g_error (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args); - va_end (args); - - for(;;) ; -} -static void -g_message (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args); - va_end (args); -} -static void -g_critical (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, args); - va_end (args); -} -static void -g_warning (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args); - va_end (args); -} -static void -g_debug (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args); - va_end (args); -} -#endif /* !__GNUC__ */ - -/** - * GPrintFunc: - * @string: the message to output - * - * Specifies the type of the print handler functions. - * These are called with the complete formatted string to output. - */ -typedef void (*GPrintFunc) (const gchar *string); -void g_print (const gchar *format, - ...) G_GNUC_PRINTF (1, 2); -GPrintFunc g_set_print_handler (GPrintFunc func); -void g_printerr (const gchar *format, - ...) G_GNUC_PRINTF (1, 2); -GPrintFunc g_set_printerr_handler (GPrintFunc func); - -/** - * g_warn_if_reached: - * - * Logs a critical warning. - * - * Since: 2.16 - */ -#define g_warn_if_reached() \ - do { \ - g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); \ - } while (0) - -/** - * g_warn_if_fail: - * @expr: the expression to check - * - * Logs a warning if the expression is not true. - * - * Since: 2.16 - */ -#define g_warn_if_fail(expr) \ - do { \ - if G_LIKELY (expr) ; \ - else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); \ - } while (0) - -#ifdef G_DISABLE_CHECKS - -/** - * g_return_if_fail: - * @expr: the expression to check - * - * Verifies that the expression evaluates to %TRUE. If the expression - * evaluates to %FALSE, a critical message is logged and the current - * function returns. This can only be used in functions which do not - * return a value. - * - * If G_DISABLE_CHECKS is defined then the check is not performed. You - * should therefore not depend on any side effects of @expr. - */ -#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END - -/** - * g_return_val_if_fail: - * @expr: the expression to check - * @val: the value to return from the current function - * if the expression is not true - * - * Verifies that the expression evaluates to %TRUE. If the expression - * evaluates to %FALSE, a critical message is logged and @val is - * returned from the current function. - * - * If G_DISABLE_CHECKS is defined then the check is not performed. You - * should therefore not depend on any side effects of @expr. - */ -#define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END - -/** - * g_return_if_reached: - * - * Logs a critical message and returns from the current function. - * This can only be used in functions which do not return a value. - */ -#define g_return_if_reached() G_STMT_START{ return; }G_STMT_END - -/** - * g_return_val_if_reached: - * @val: the value to return from the current function - * - * Logs a critical message and returns @val. - */ -#define g_return_val_if_reached(val) G_STMT_START{ return (val); }G_STMT_END - -#else /* !G_DISABLE_CHECKS */ - -#ifdef __GNUC__ - -#define g_return_if_fail(expr) G_STMT_START{ \ - if G_LIKELY(expr) { } else \ - { \ - g_return_if_fail_warning (G_LOG_DOMAIN, \ - __PRETTY_FUNCTION__, \ - #expr); \ - return; \ - }; }G_STMT_END - -#define g_return_val_if_fail(expr,val) G_STMT_START{ \ - if G_LIKELY(expr) { } else \ - { \ - g_return_if_fail_warning (G_LOG_DOMAIN, \ - __PRETTY_FUNCTION__, \ - #expr); \ - return (val); \ - }; }G_STMT_END - -#define g_return_if_reached() G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d (%s): should not be reached", \ - __FILE__, \ - __LINE__, \ - __PRETTY_FUNCTION__); \ - return; }G_STMT_END - -#define g_return_val_if_reached(val) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d (%s): should not be reached", \ - __FILE__, \ - __LINE__, \ - __PRETTY_FUNCTION__); \ - return (val); }G_STMT_END - -#else /* !__GNUC__ */ - -#define g_return_if_fail(expr) G_STMT_START{ \ - if (expr) { } else \ - { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: assertion `%s' failed", \ - __FILE__, \ - __LINE__, \ - #expr); \ - return; \ - }; }G_STMT_END - -#define g_return_val_if_fail(expr, val) G_STMT_START{ \ - if (expr) { } else \ - { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: assertion `%s' failed", \ - __FILE__, \ - __LINE__, \ - #expr); \ - return (val); \ - }; }G_STMT_END - -#define g_return_if_reached() G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: should not be reached", \ - __FILE__, \ - __LINE__); \ - return; }G_STMT_END - -#define g_return_val_if_reached(val) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_CRITICAL, \ - "file %s: line %d: should not be reached", \ - __FILE__, \ - __LINE__); \ - return (val); }G_STMT_END - -#endif /* !__GNUC__ */ - -#endif /* !G_DISABLE_CHECKS */ - -G_END_DECLS - -#endif /* __G_MESSAGES_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gnode.h b/GstreamerHelper/x86/include/glib-2.0/glib/gnode.h deleted file mode 100644 index 7ffdcbfc..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gnode.h +++ /dev/null @@ -1,298 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_NODE_H__ -#define __G_NODE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GNode GNode; - -/* Tree traverse flags */ -typedef enum -{ - G_TRAVERSE_LEAVES = 1 << 0, - G_TRAVERSE_NON_LEAVES = 1 << 1, - G_TRAVERSE_ALL = G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES, - G_TRAVERSE_MASK = 0x03, - G_TRAVERSE_LEAFS = G_TRAVERSE_LEAVES, - G_TRAVERSE_NON_LEAFS = G_TRAVERSE_NON_LEAVES -} GTraverseFlags; - -/* Tree traverse orders */ -typedef enum -{ - G_IN_ORDER, - G_PRE_ORDER, - G_POST_ORDER, - G_LEVEL_ORDER -} GTraverseType; - -typedef gboolean (*GNodeTraverseFunc) (GNode *node, - gpointer data); -typedef void (*GNodeForeachFunc) (GNode *node, - gpointer data); - -/** - * GCopyFunc: - * @src: A pointer to the data which should be copied - * @data: Additional data - * - * A function of this signature is used to copy the node data - * when doing a deep-copy of a tree. - * - * Returns: A pointer to the copy - * - * Since: 2.4 - */ -typedef gpointer (*GCopyFunc) (gconstpointer src, - gpointer data); - -/* N-way tree implementation - */ -struct _GNode -{ - gpointer data; - GNode *next; - GNode *prev; - GNode *parent; - GNode *children; -}; - -/** - * G_NODE_IS_ROOT: - * @node: a #GNode - * - * Returns %TRUE if a #GNode is the root of a tree. - * - * Returns: %TRUE if the #GNode is the root of a tree - * (i.e. it has no parent or siblings) - */ -#define G_NODE_IS_ROOT(node) (((GNode*) (node))->parent == NULL && \ - ((GNode*) (node))->prev == NULL && \ - ((GNode*) (node))->next == NULL) - -/** - * G_NODE_IS_LEAF: - * @node: a #GNode - * - * Returns %TRUE if a #GNode is a leaf node. - * - * Returns: %TRUE if the #GNode is a leaf node - * (i.e. it has no children) - */ -#define G_NODE_IS_LEAF(node) (((GNode*) (node))->children == NULL) - -GNode* g_node_new (gpointer data); -void g_node_destroy (GNode *root); -void g_node_unlink (GNode *node); -GNode* g_node_copy_deep (GNode *node, - GCopyFunc copy_func, - gpointer data); -GNode* g_node_copy (GNode *node); -GNode* g_node_insert (GNode *parent, - gint position, - GNode *node); -GNode* g_node_insert_before (GNode *parent, - GNode *sibling, - GNode *node); -GNode* g_node_insert_after (GNode *parent, - GNode *sibling, - GNode *node); -GNode* g_node_prepend (GNode *parent, - GNode *node); -guint g_node_n_nodes (GNode *root, - GTraverseFlags flags); -GNode* g_node_get_root (GNode *node); -gboolean g_node_is_ancestor (GNode *node, - GNode *descendant); -guint g_node_depth (GNode *node); -GNode* g_node_find (GNode *root, - GTraverseType order, - GTraverseFlags flags, - gpointer data); - -/* convenience macros */ -/** - * g_node_append: - * @parent: the #GNode to place the new #GNode under - * @node: the #GNode to insert - * - * Inserts a #GNode as the last child of the given parent. - * - * Returns: the inserted #GNode - */ -#define g_node_append(parent, node) \ - g_node_insert_before ((parent), NULL, (node)) - -/** - * g_node_insert_data: - * @parent: the #GNode to place the new #GNode under - * @position: the position to place the new #GNode at. If position is -1, - * the new #GNode is inserted as the last child of @parent - * @data: the data for the new #GNode - * - * Inserts a new #GNode at the given position. - * - * Returns: the new #GNode - */ -#define g_node_insert_data(parent, position, data) \ - g_node_insert ((parent), (position), g_node_new (data)) - -/** - * g_node_insert_data_after: - * @parent: the #GNode to place the new #GNode under - * @sibling: the sibling #GNode to place the new #GNode after - * @data: the data for the new #GNode - * - * Inserts a new #GNode after the given sibling. - * - * Returns: the new #GNode - */ - -#define g_node_insert_data_after(parent, sibling, data) \ - g_node_insert_after ((parent), (sibling), g_node_new (data)) -/** - * g_node_insert_data_before: - * @parent: the #GNode to place the new #GNode under - * @sibling: the sibling #GNode to place the new #GNode before - * @data: the data for the new #GNode - * - * Inserts a new #GNode before the given sibling. - * - * Returns: the new #GNode - */ -#define g_node_insert_data_before(parent, sibling, data) \ - g_node_insert_before ((parent), (sibling), g_node_new (data)) - -/** - * g_node_prepend_data: - * @parent: the #GNode to place the new #GNode under - * @data: the data for the new #GNode - * - * Inserts a new #GNode as the first child of the given parent. - * - * Returns: the new #GNode - */ -#define g_node_prepend_data(parent, data) \ - g_node_prepend ((parent), g_node_new (data)) - -/** - * g_node_append_data: - * @parent: the #GNode to place the new #GNode under - * @data: the data for the new #GNode - * - * Inserts a new #GNode as the last child of the given parent. - * - * Returns: the new #GNode - */ -#define g_node_append_data(parent, data) \ - g_node_insert_before ((parent), NULL, g_node_new (data)) - -/* traversal function, assumes that `node' is root - * (only traverses `node' and its subtree). - * this function is just a high level interface to - * low level traversal functions, optimized for speed. - */ -void g_node_traverse (GNode *root, - GTraverseType order, - GTraverseFlags flags, - gint max_depth, - GNodeTraverseFunc func, - gpointer data); - -/* return the maximum tree height starting with `node', this is an expensive - * operation, since we need to visit all nodes. this could be shortened by - * adding `guint height' to struct _GNode, but then again, this is not very - * often needed, and would make g_node_insert() more time consuming. - */ -guint g_node_max_height (GNode *root); - -void g_node_children_foreach (GNode *node, - GTraverseFlags flags, - GNodeForeachFunc func, - gpointer data); -void g_node_reverse_children (GNode *node); -guint g_node_n_children (GNode *node); -GNode* g_node_nth_child (GNode *node, - guint n); -GNode* g_node_last_child (GNode *node); -GNode* g_node_find_child (GNode *node, - GTraverseFlags flags, - gpointer data); -gint g_node_child_position (GNode *node, - GNode *child); -gint g_node_child_index (GNode *node, - gpointer data); - -GNode* g_node_first_sibling (GNode *node); -GNode* g_node_last_sibling (GNode *node); - -/** - * g_node_prev_sibling: - * @node: a #GNode - * - * Gets the previous sibling of a #GNode. - * - * Returns: the previous sibling of @node, or %NULL if @node is the first - * node or %NULL - */ -#define g_node_prev_sibling(node) ((node) ? \ - ((GNode*) (node))->prev : NULL) - -/** - * g_node_next_sibling: - * @node: a #GNode - * - * Gets the next sibling of a #GNode. - * - * Returns: the next sibling of @node, or %NULL if @node is the last node - * or %NULL - */ -#define g_node_next_sibling(node) ((node) ? \ - ((GNode*) (node))->next : NULL) - -/** - * g_node_first_child: - * @node: a #GNode - * - * Gets the first child of a #GNode. - * - * Returns: the first child of @node, or %NULL if @node is %NULL - * or has no children - */ -#define g_node_first_child(node) ((node) ? \ - ((GNode*) (node))->children : NULL) - -G_END_DECLS - -#endif /* __G_NODE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/goption.h b/GstreamerHelper/x86/include/glib-2.0/glib/goption.h deleted file mode 100644 index 7d1f2a1d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/goption.h +++ /dev/null @@ -1,370 +0,0 @@ -/* goption.h - Option parser - * - * Copyright (C) 2004 Anders Carlsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_OPTION_H__ -#define __G_OPTION_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GOptionContext: - * - * A GOptionContext struct defines which options - * are accepted by the commandline option parser. The struct has only private - * fields and should not be directly accessed. - */ -typedef struct _GOptionContext GOptionContext; - -/** - * GOptionGroup: - * - * A GOptionGroup struct defines the options in a single - * group. The struct has only private fields and should not be directly accessed. - * - * All options in a group share the same translation function. Libraries which - * need to parse commandline options are expected to provide a function for - * getting a GOptionGroup holding their options, which - * the application can then add to its #GOptionContext. - */ -typedef struct _GOptionGroup GOptionGroup; -typedef struct _GOptionEntry GOptionEntry; - -/** - * GOptionFlags: - * @G_OPTION_FLAG_HIDDEN: The option doesn't appear in - * output. - * @G_OPTION_FLAG_IN_MAIN: The option appears in the main section of the - * output, even if it is defined in a group. - * @G_OPTION_FLAG_REVERSE: For options of the %G_OPTION_ARG_NONE kind, this flag - * indicates that the sense of the option is reversed. - * @G_OPTION_FLAG_NO_ARG: For options of the %G_OPTION_ARG_CALLBACK kind, - * this flag indicates that the callback does not take any argument - * (like a %G_OPTION_ARG_NONE option). Since 2.8 - * @G_OPTION_FLAG_FILENAME: For options of the %G_OPTION_ARG_CALLBACK - * kind, this flag indicates that the argument should be passed to the - * callback in the GLib filename encoding rather than UTF-8. Since 2.8 - * @G_OPTION_FLAG_OPTIONAL_ARG: For options of the %G_OPTION_ARG_CALLBACK - * kind, this flag indicates that the argument supply is optional. If no argument - * is given then data of %GOptionParseFunc will be set to NULL. Since 2.8 - * @G_OPTION_FLAG_NOALIAS: This flag turns off the automatic conflict resolution - * which prefixes long option names with groupname- if - * there is a conflict. This option should only be used in situations where - * aliasing is necessary to model some legacy commandline interface. It is - * not safe to use this option, unless all option groups are under your - * direct control. Since 2.8. - * - * Flags which modify individual options. - */ -typedef enum -{ - G_OPTION_FLAG_HIDDEN = 1 << 0, - G_OPTION_FLAG_IN_MAIN = 1 << 1, - G_OPTION_FLAG_REVERSE = 1 << 2, - G_OPTION_FLAG_NO_ARG = 1 << 3, - G_OPTION_FLAG_FILENAME = 1 << 4, - G_OPTION_FLAG_OPTIONAL_ARG = 1 << 5, - G_OPTION_FLAG_NOALIAS = 1 << 6 -} GOptionFlags; - -/** - * GOptionArg: - * @G_OPTION_ARG_NONE: No extra argument. This is useful for simple flags. - * @G_OPTION_ARG_STRING: The option takes a string argument. - * @G_OPTION_ARG_INT: The option takes an integer argument. - * @G_OPTION_ARG_CALLBACK: The option provides a callback to parse the - * extra argument. - * @G_OPTION_ARG_FILENAME: The option takes a filename as argument. - * @G_OPTION_ARG_STRING_ARRAY: The option takes a string argument, multiple - * uses of the option are collected into an array of strings. - * @G_OPTION_ARG_FILENAME_ARRAY: The option takes a filename as argument, - * multiple uses of the option are collected into an array of strings. - * @G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument - * can be formatted either for the user's locale or for the "C" locale. Since 2.12 - * @G_OPTION_ARG_INT64: The option takes a 64-bit integer. Like %G_OPTION_ARG_INT - * but for larger numbers. The number can be in decimal base, or in hexadecimal - * (when prefixed with 0x, for example, 0xffffffff). - * Since 2.12 - * - * The #GOptionArg enum values determine which type of extra argument the - * options expect to find. If an option expects an extra argument, it - * can be specified in several ways; with a short option: - * , with a long option: - * or combined in a single argument: . - */ -typedef enum -{ - G_OPTION_ARG_NONE, - G_OPTION_ARG_STRING, - G_OPTION_ARG_INT, - G_OPTION_ARG_CALLBACK, - G_OPTION_ARG_FILENAME, - G_OPTION_ARG_STRING_ARRAY, - G_OPTION_ARG_FILENAME_ARRAY, - G_OPTION_ARG_DOUBLE, - G_OPTION_ARG_INT64 -} GOptionArg; - -/** - * GOptionArgFunc: - * @option_name: The name of the option being parsed. This will be either a - * single dash followed by a single letter (for a short name) or two dashes - * followed by a long option name. - * @value: The value to be parsed. - * @data: User data added to the #GOptionGroup containing the option when it - * was created with g_option_group_new() - * @error: A return location for errors. The error code %G_OPTION_ERROR_FAILED - * is intended to be used for errors in #GOptionArgFunc callbacks. - * - * The type of function to be passed as callback for %G_OPTION_ARG_CALLBACK - * options. - * - * Returns: %TRUE if the option was successfully parsed, %FALSE if an error - * occurred, in which case @error should be set with g_set_error() - */ -typedef gboolean (*GOptionArgFunc) (const gchar *option_name, - const gchar *value, - gpointer data, - GError **error); - -/** - * GOptionParseFunc: - * @context: The active #GOptionContext - * @group: The group to which the function belongs - * @data: User data added to the #GOptionGroup containing the option when it - * was created with g_option_group_new() - * @error: A return location for error details - * - * The type of function that can be called before and after parsing. - * - * Returns: %TRUE if the function completed successfully, %FALSE if an error - * occurred, in which case @error should be set with g_set_error() - */ -typedef gboolean (*GOptionParseFunc) (GOptionContext *context, - GOptionGroup *group, - gpointer data, - GError **error); - -/** - * GOptionErrorFunc: - * @context: The active #GOptionContext - * @group: The group to which the function belongs - * @data: User data added to the #GOptionGroup containing the option when it - * was created with g_option_group_new() - * @error: The #GError containing details about the parse error - * - * The type of function to be used as callback when a parse error occurs. - */ -typedef void (*GOptionErrorFunc) (GOptionContext *context, - GOptionGroup *group, - gpointer data, - GError **error); - -/** - * G_OPTION_ERROR: - * - * Error domain for option parsing. Errors in this domain will - * be from the #GOptionError enumeration. See #GError for information on - * error domains. - */ -#define G_OPTION_ERROR (g_option_error_quark ()) - -/** - * GOptionError: - * @G_OPTION_ERROR_UNKNOWN_OPTION: An option was not known to the parser. - * This error will only be reported, if the parser hasn't been instructed - * to ignore unknown options, see g_option_context_set_ignore_unknown_options(). - * @G_OPTION_ERROR_BAD_VALUE: A value couldn't be parsed. - * @G_OPTION_ERROR_FAILED: A #GOptionArgFunc callback failed. - * - * Error codes returned by option parsing. - */ -typedef enum -{ - G_OPTION_ERROR_UNKNOWN_OPTION, - G_OPTION_ERROR_BAD_VALUE, - G_OPTION_ERROR_FAILED -} GOptionError; - -GQuark g_option_error_quark (void); - -/** - * GOptionEntry: - * @long_name: The long name of an option can be used to specify it - * in a commandline as --long_name. Every - * option must have a long name. To resolve conflicts if multiple - * option groups contain the same long name, it is also possible to - * specify the option as - * --groupname-long_name. - * @short_name: If an option has a short name, it can be specified - * -short_name in a commandline. @short_name must be - * a printable ASCII character different from '-', or zero if the option has no - * short name. - * @flags: Flags from #GOptionFlags. - * @arg: The type of the option, as a #GOptionArg. - * @arg_data: If the @arg type is %G_OPTION_ARG_CALLBACK, then @arg_data must - * point to a #GOptionArgFunc callback function, which will be called to handle - * the extra argument. Otherwise, @arg_data is a pointer to a location to store - * the value, the required type of the location depends on the @arg type: - * - * - * %G_OPTION_ARG_NONE - * %gboolean - * - * - * %G_OPTION_ARG_STRING - * %gchar* - * - * - * %G_OPTION_ARG_INT - * %gint - * - * - * %G_OPTION_ARG_FILENAME - * %gchar* - * - * - * %G_OPTION_ARG_STRING_ARRAY - * %gchar** - * - * - * %G_OPTION_ARG_FILENAME_ARRAY - * %gchar** - * - * - * %G_OPTION_ARG_DOUBLE - * %gdouble - * - * - * If @arg type is %G_OPTION_ARG_STRING or %G_OPTION_ARG_FILENAME the location - * will contain a newly allocated string if the option was given. That string - * needs to be freed by the callee using g_free(). Likewise if @arg type is - * %G_OPTION_ARG_STRING_ARRAY or %G_OPTION_ARG_FILENAME_ARRAY, the data should - * be freed using g_strfreev(). - * @description: the description for the option in - * output. The @description is translated using the @translate_func of the - * group, see g_option_group_set_translation_domain(). - * @arg_description: The placeholder to use for the extra argument parsed - * by the option in - * output. The @arg_description is translated using the @translate_func of the - * group, see g_option_group_set_translation_domain(). - * - * A GOptionEntry defines a single option. - * To have an effect, they must be added to a #GOptionGroup with - * g_option_context_add_main_entries() or g_option_group_add_entries(). - */ -struct _GOptionEntry -{ - const gchar *long_name; - gchar short_name; - gint flags; - - GOptionArg arg; - gpointer arg_data; - - const gchar *description; - const gchar *arg_description; -}; - -/** - * G_OPTION_REMAINING: - * - * If a long option in the main group has this name, it is not treated as a - * regular option. Instead it collects all non-option arguments which would - * otherwise be left in argv. The option must be of type - * %G_OPTION_ARG_CALLBACK, %G_OPTION_ARG_STRING_ARRAY - * or %G_OPTION_ARG_FILENAME_ARRAY. - * - * - * Using #G_OPTION_REMAINING instead of simply scanning argv - * for leftover arguments has the advantage that GOption takes care of - * necessary encoding conversions for strings or filenames. - * - * Since: 2.6 - */ -#define G_OPTION_REMAINING "" - -GOptionContext *g_option_context_new (const gchar *parameter_string); -void g_option_context_set_summary (GOptionContext *context, - const gchar *summary); -const gchar * g_option_context_get_summary (GOptionContext *context); -void g_option_context_set_description (GOptionContext *context, - const gchar *description); -const gchar * g_option_context_get_description (GOptionContext *context); -void g_option_context_free (GOptionContext *context); -void g_option_context_set_help_enabled (GOptionContext *context, - gboolean help_enabled); -gboolean g_option_context_get_help_enabled (GOptionContext *context); -void g_option_context_set_ignore_unknown_options (GOptionContext *context, - gboolean ignore_unknown); -gboolean g_option_context_get_ignore_unknown_options (GOptionContext *context); - -void g_option_context_add_main_entries (GOptionContext *context, - const GOptionEntry *entries, - const gchar *translation_domain); -gboolean g_option_context_parse (GOptionContext *context, - gint *argc, - gchar ***argv, - GError **error); -void g_option_context_set_translate_func (GOptionContext *context, - GTranslateFunc func, - gpointer data, - GDestroyNotify destroy_notify); -void g_option_context_set_translation_domain (GOptionContext *context, - const gchar *domain); - -void g_option_context_add_group (GOptionContext *context, - GOptionGroup *group); -void g_option_context_set_main_group (GOptionContext *context, - GOptionGroup *group); -GOptionGroup *g_option_context_get_main_group (GOptionContext *context); -gchar *g_option_context_get_help (GOptionContext *context, - gboolean main_help, - GOptionGroup *group); - -GOptionGroup *g_option_group_new (const gchar *name, - const gchar *description, - const gchar *help_description, - gpointer user_data, - GDestroyNotify destroy); -void g_option_group_set_parse_hooks (GOptionGroup *group, - GOptionParseFunc pre_parse_func, - GOptionParseFunc post_parse_func); -void g_option_group_set_error_hook (GOptionGroup *group, - GOptionErrorFunc error_func); -void g_option_group_free (GOptionGroup *group); -void g_option_group_add_entries (GOptionGroup *group, - const GOptionEntry *entries); -void g_option_group_set_translate_func (GOptionGroup *group, - GTranslateFunc func, - gpointer data, - GDestroyNotify destroy_notify); -void g_option_group_set_translation_domain (GOptionGroup *group, - const gchar *domain); - -G_END_DECLS - -#endif /* __G_OPTION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gpattern.h b/GstreamerHelper/x86/include/glib-2.0/glib/gpattern.h deleted file mode 100644 index e692d902..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gpattern.h +++ /dev/null @@ -1,49 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 1999 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PATTERN_H__ -#define __G_PATTERN_H__ - -#include - -G_BEGIN_DECLS - - -typedef struct _GPatternSpec GPatternSpec; - -GPatternSpec* g_pattern_spec_new (const gchar *pattern); -void g_pattern_spec_free (GPatternSpec *pspec); -gboolean g_pattern_spec_equal (GPatternSpec *pspec1, - GPatternSpec *pspec2); -gboolean g_pattern_match (GPatternSpec *pspec, - guint string_length, - const gchar *string, - const gchar *string_reversed); -gboolean g_pattern_match_string (GPatternSpec *pspec, - const gchar *string); -gboolean g_pattern_match_simple (const gchar *pattern, - const gchar *string); - -G_END_DECLS - -#endif /* __G_PATTERN_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gpoll.h b/GstreamerHelper/x86/include/glib-2.0/glib/gpoll.h deleted file mode 100644 index f28b758e..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gpoll.h +++ /dev/null @@ -1,120 +0,0 @@ -/* gpoll.h - poll(2) support - * Copyright (C) 2008 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (__G_MAIN_H__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_POLL_H__ -#define __G_POLL_H__ - -#include - -G_BEGIN_DECLS - -/* Any definitions using GPollFD or GPollFunc are primarily - * for Unix and not guaranteed to be the compatible on all - * operating systems on which GLib runs. Right now, the - * GLib does use these functions on Win32 as well, but interprets - * them in a fairly different way than on Unix. If you use - * these definitions, you are should be prepared to recode - * for different operating systems. - * - * Note that on systems with a working poll(2), that function is used - * in place of g_poll(). Thus g_poll() must have the same signature as - * poll(), meaning GPollFD must have the same layout as struct pollfd. - * - * - * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file - * descriptor as provided by the C runtime) that can be used by - * MsgWaitForMultipleObjects. This does *not* include file handles - * from CreateFile, SOCKETs, nor pipe handles. (But you can use - * WSAEventSelect to signal events when a SOCKET is readable). - * - * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to - * indicate polling for messages. - * - * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK - * (GTK) programs, as GDK itself wants to read messages and convert them - * to GDK events. - * - * So, unless you really know what you are doing, it's best not to try - * to use the main loop polling stuff for your own needs on - * Windows. - */ -typedef struct _GPollFD GPollFD; - -/** - * GPollFunc: - * @ufds: an array of #GPollFD elements - * @nfsd: the number of elements in @ufds - * @timeout_: the maximum time to wait for an event of the file descriptors. - * A negative value indicates an infinite timeout. - * - * Specifies the type of function passed to g_main_context_set_poll_func(). - * The semantics of the function should match those of the poll() system call. - * - * Returns: the number of #GPollFD elements which have events or errors - * reported, or -1 if an error occurred. - */ -typedef gint (*GPollFunc) (GPollFD *ufds, - guint nfsd, - gint timeout_); - -/** - * GPollFD: - * @fd: the file descriptor to poll (or a HANDLE on Win32) - * @events: a bitwise combination from #GIOCondition, specifying which - * events should be polled for. Typically for reading from a file - * descriptor you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and - * for writing you would use %G_IO_OUT | %G_IO_ERR. - * @revents: a bitwise combination of flags from #GIOCondition, returned - * from the poll() function to indicate which events occurred. - * - * Represents a file descriptor, which events to poll for, and which events - * occurred. - */ -struct _GPollFD -{ -#if defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8 - gint64 fd; -#else - gint fd; -#endif - gushort events; - gushort revents; -}; - -#ifdef G_OS_WIN32 -#if GLIB_SIZEOF_VOID_P == 8 -#define G_POLLFD_FORMAT "%#I64x" -#else -#define G_POLLFD_FORMAT "%#x" -#endif -#else -#define G_POLLFD_FORMAT "%d" -#endif - -gint g_poll (GPollFD *fds, - guint nfds, - gint timeout); - -G_END_DECLS - -#endif /* __G_POLL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gprimes.h b/GstreamerHelper/x86/include/glib-2.0/glib/gprimes.h deleted file mode 100644 index 19f57021..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gprimes.h +++ /dev/null @@ -1,51 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PRIMES_H__ -#define __G_PRIMES_H__ - -#include - -G_BEGIN_DECLS - -/* Prime numbers. - */ - -/* This function returns prime numbers spaced by approximately 1.5-2.0 - * and is for use in resizing data structures which prefer - * prime-valued sizes. The closest spaced prime function returns the - * next largest prime, or the highest it knows about which is about - * MAXINT/4. - */ -guint g_spaced_primes_closest (guint num) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_PRIMES_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gprintf.h b/GstreamerHelper/x86/include/glib-2.0/glib/gprintf.h deleted file mode 100644 index d96870fb..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gprintf.h +++ /dev/null @@ -1,52 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997, 2002 Peter Mattis, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_PRINTF_H__ -#define __G_PRINTF_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -gint g_printf (gchar const *format, - ...) G_GNUC_PRINTF (1, 2); -gint g_fprintf (FILE *file, - gchar const *format, - ...) G_GNUC_PRINTF (2, 3); -gint g_sprintf (gchar *string, - gchar const *format, - ...) G_GNUC_PRINTF (2, 3); - -gint g_vprintf (gchar const *format, - va_list args); -gint g_vfprintf (FILE *file, - gchar const *format, - va_list args); -gint g_vsprintf (gchar *string, - gchar const *format, - va_list args); -gint g_vasprintf (gchar **string, - gchar const *format, - va_list args); - -G_END_DECLS - -#endif /* __G_PRINTF_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gqsort.h b/GstreamerHelper/x86/include/glib-2.0/glib/gqsort.h deleted file mode 100644 index 05b4b66f..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gqsort.h +++ /dev/null @@ -1,46 +0,0 @@ - /* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_QSORT_H__ -#define __G_QSORT_H__ - -#include - -G_BEGIN_DECLS - -void g_qsort_with_data (gconstpointer pbase, - gint total_elems, - gsize size, - GCompareDataFunc compare_func, - gpointer user_data); - -G_END_DECLS - -#endif /* __G_QSORT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gquark.h b/GstreamerHelper/x86/include/glib-2.0/glib/gquark.h deleted file mode 100644 index 39d22ab1..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gquark.h +++ /dev/null @@ -1,64 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_QUARK_H__ -#define __G_QUARK_H__ - -#include - -G_BEGIN_DECLS - -typedef guint32 GQuark; - -/* Quarks (string<->id association) - */ -GQuark g_quark_try_string (const gchar *string); -GQuark g_quark_from_static_string (const gchar *string); -GQuark g_quark_from_string (const gchar *string); -const gchar * g_quark_to_string (GQuark quark) G_GNUC_CONST; - -#define G_DEFINE_QUARK(QN, q_n) \ -GQuark \ -q_n##_quark (void) \ -{ \ - static GQuark q; \ - \ - if G_UNLIKELY (q == 0) \ - q = g_quark_from_static_string (#QN); \ - \ - return q; \ -} - -const gchar * g_intern_string (const gchar *string); -const gchar * g_intern_static_string (const gchar *string); - -G_END_DECLS - -#endif /* __G_QUARK_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gqueue.h b/GstreamerHelper/x86/include/glib-2.0/glib/gqueue.h deleted file mode 100644 index 1d13eef8..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gqueue.h +++ /dev/null @@ -1,152 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_QUEUE_H__ -#define __G_QUEUE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GQueue GQueue; - -/** - * GQueue: - * @head: a pointer to the first element of the queue - * @tail: a pointer to the last element of the queue - * @length: the number of elements in the queue - * - * Contains the public fields of a - * Queue. - */ -struct _GQueue -{ - GList *head; - GList *tail; - guint length; -}; - -/** - * G_QUEUE_INIT: - * - * A statically-allocated #GQueue must be initialized with this - * macro before it can be used. This macro can be used to initialize - * a variable, but it cannot be assigned to a variable. In that case - * you have to use g_queue_init(). - * - * |[ - * GQueue my_queue = G_QUEUE_INIT; - * ]| - * - * Since: 2.14 - */ -#define G_QUEUE_INIT { NULL, NULL, 0 } - -/* Queues - */ -GQueue* g_queue_new (void); -void g_queue_free (GQueue *queue); -void g_queue_free_full (GQueue *queue, - GDestroyNotify free_func); -void g_queue_init (GQueue *queue); -void g_queue_clear (GQueue *queue); -gboolean g_queue_is_empty (GQueue *queue); -guint g_queue_get_length (GQueue *queue); -void g_queue_reverse (GQueue *queue); -GQueue * g_queue_copy (GQueue *queue); -void g_queue_foreach (GQueue *queue, - GFunc func, - gpointer user_data); -GList * g_queue_find (GQueue *queue, - gconstpointer data); -GList * g_queue_find_custom (GQueue *queue, - gconstpointer data, - GCompareFunc func); -void g_queue_sort (GQueue *queue, - GCompareDataFunc compare_func, - gpointer user_data); - -void g_queue_push_head (GQueue *queue, - gpointer data); -void g_queue_push_tail (GQueue *queue, - gpointer data); -void g_queue_push_nth (GQueue *queue, - gpointer data, - gint n); -gpointer g_queue_pop_head (GQueue *queue); -gpointer g_queue_pop_tail (GQueue *queue); -gpointer g_queue_pop_nth (GQueue *queue, - guint n); -gpointer g_queue_peek_head (GQueue *queue); -gpointer g_queue_peek_tail (GQueue *queue); -gpointer g_queue_peek_nth (GQueue *queue, - guint n); -gint g_queue_index (GQueue *queue, - gconstpointer data); -gboolean g_queue_remove (GQueue *queue, - gconstpointer data); -guint g_queue_remove_all (GQueue *queue, - gconstpointer data); -void g_queue_insert_before (GQueue *queue, - GList *sibling, - gpointer data); -void g_queue_insert_after (GQueue *queue, - GList *sibling, - gpointer data); -void g_queue_insert_sorted (GQueue *queue, - gpointer data, - GCompareDataFunc func, - gpointer user_data); - -void g_queue_push_head_link (GQueue *queue, - GList *link_); -void g_queue_push_tail_link (GQueue *queue, - GList *link_); -void g_queue_push_nth_link (GQueue *queue, - gint n, - GList *link_); -GList* g_queue_pop_head_link (GQueue *queue); -GList* g_queue_pop_tail_link (GQueue *queue); -GList* g_queue_pop_nth_link (GQueue *queue, - guint n); -GList* g_queue_peek_head_link (GQueue *queue); -GList* g_queue_peek_tail_link (GQueue *queue); -GList* g_queue_peek_nth_link (GQueue *queue, - guint n); -gint g_queue_link_index (GQueue *queue, - GList *link_); -void g_queue_unlink (GQueue *queue, - GList *link_); -void g_queue_delete_link (GQueue *queue, - GList *link_); - -G_END_DECLS - -#endif /* __G_QUEUE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/grand.h b/GstreamerHelper/x86/include/glib-2.0/glib/grand.h deleted file mode 100644 index 182616b3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/grand.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_RAND_H__ -#define __G_RAND_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GRand GRand; - -/* GRand - a good and fast random number generator: Mersenne Twister - * see http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html for more info. - * The range functions return a value in the intervall [begin, end). - * int -> [0..2^32-1] - * int_range -> [begin..end-1] - * double -> [0..1) - * double_range -> [begin..end) - */ - -GRand* g_rand_new_with_seed (guint32 seed); -GRand* g_rand_new_with_seed_array (const guint32 *seed, - guint seed_length); -GRand* g_rand_new (void); -void g_rand_free (GRand *rand_); -GRand* g_rand_copy (GRand *rand_); -void g_rand_set_seed (GRand *rand_, - guint32 seed); -void g_rand_set_seed_array (GRand *rand_, - const guint32 *seed, - guint seed_length); - -#define g_rand_boolean(rand_) ((g_rand_int (rand_) & (1 << 15)) != 0) - -guint32 g_rand_int (GRand *rand_); -gint32 g_rand_int_range (GRand *rand_, - gint32 begin, - gint32 end); -gdouble g_rand_double (GRand *rand_); -gdouble g_rand_double_range (GRand *rand_, - gdouble begin, - gdouble end); -void g_random_set_seed (guint32 seed); - -#define g_random_boolean() ((g_random_int () & (1 << 15)) != 0) - -guint32 g_random_int (void); -gint32 g_random_int_range (gint32 begin, - gint32 end); -gdouble g_random_double (void); -gdouble g_random_double_range (gdouble begin, - gdouble end); - - -G_END_DECLS - -#endif /* __G_RAND_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gregex.h b/GstreamerHelper/x86/include/glib-2.0/glib/gregex.h deleted file mode 100644 index 53a2aeef..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gregex.h +++ /dev/null @@ -1,561 +0,0 @@ -/* GRegex -- regular expression API wrapper around PCRE. - * - * Copyright (C) 1999, 2000 Scott Wimer - * Copyright (C) 2004, Matthias Clasen - * Copyright (C) 2005 - 2007, Marco Barisione - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_REGEX_H__ -#define __G_REGEX_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GRegexError: - * @G_REGEX_ERROR_COMPILE: Compilation of the regular expression failed. - * @G_REGEX_ERROR_OPTIMIZE: Optimization of the regular expression failed. - * @G_REGEX_ERROR_REPLACE: Replacement failed due to an ill-formed replacement - * string. - * @G_REGEX_ERROR_MATCH: The match process failed. - * @G_REGEX_ERROR_INTERNAL: Internal error of the regular expression engine. - * Since 2.16 - * @G_REGEX_ERROR_STRAY_BACKSLASH: "\\" at end of pattern. Since 2.16 - * @G_REGEX_ERROR_MISSING_CONTROL_CHAR: "\\c" at end of pattern. Since 2.16 - * @G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: Unrecognized character follows "\\". - * Since 2.16 - * @G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: Numbers out of order in "{}" - * quantifier. Since 2.16 - * @G_REGEX_ERROR_QUANTIFIER_TOO_BIG: Number too big in "{}" quantifier. - * Since 2.16 - * @G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: Missing terminating "]" for - * character class. Since 2.16 - * @G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: Invalid escape sequence - * in character class. Since 2.16 - * @G_REGEX_ERROR_RANGE_OUT_OF_ORDER: Range out of order in character class. - * Since 2.16 - * @G_REGEX_ERROR_NOTHING_TO_REPEAT: Nothing to repeat. Since 2.16 - * @G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: Unrecognized character after "(?", - * "(?<" or "(?P". Since 2.16 - * @G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: POSIX named classes are - * supported only within a class. Since 2.16 - * @G_REGEX_ERROR_UNMATCHED_PARENTHESIS: Missing terminating ")" or ")" - * without opening "(". Since 2.16 - * @G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: Reference to non-existent - * subpattern. Since 2.16 - * @G_REGEX_ERROR_UNTERMINATED_COMMENT: Missing terminating ")" after comment. - * Since 2.16 - * @G_REGEX_ERROR_EXPRESSION_TOO_LARGE: Regular expression too large. - * Since 2.16 - * @G_REGEX_ERROR_MEMORY_ERROR: Failed to get memory. Since 2.16 - * @G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: Lookbehind assertion is not - * fixed length. Since 2.16 - * @G_REGEX_ERROR_MALFORMED_CONDITION: Malformed number or name after "(?(". - * Since 2.16 - * @G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: Conditional group contains - * more than two branches. Since 2.16 - * @G_REGEX_ERROR_ASSERTION_EXPECTED: Assertion expected after "(?(". - * Since 2.16 - * @G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: Unknown POSIX class name. - * Since 2.16 - * @G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: POSIX collating - * elements are not supported. Since 2.16 - * @G_REGEX_ERROR_HEX_CODE_TOO_LARGE: Character value in "\\x{...}" sequence - * is too large. Since 2.16 - * @G_REGEX_ERROR_INVALID_CONDITION: Invalid condition "(?(0)". Since 2.16 - * @G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: \\C not allowed in - * lookbehind assertion. Since 2.16 - * @G_REGEX_ERROR_INFINITE_LOOP: Recursive call could loop indefinitely. - * Since 2.16 - * @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: Missing terminator - * in subpattern name. Since 2.16 - * @G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: Two named subpatterns have - * the same name. Since 2.16 - * @G_REGEX_ERROR_MALFORMED_PROPERTY: Malformed "\\P" or "\\p" sequence. - * Since 2.16 - * @G_REGEX_ERROR_UNKNOWN_PROPERTY: Unknown property name after "\\P" or - * "\\p". Since 2.16 - * @G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: Subpattern name is too long - * (maximum 32 characters). Since 2.16 - * @G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: Too many named subpatterns (maximum - * 10,000). Since 2.16 - * @G_REGEX_ERROR_INVALID_OCTAL_VALUE: Octal value is greater than "\\377". - * Since 2.16 - * @G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: "DEFINE" group contains more - * than one branch. Since 2.16 - * @G_REGEX_ERROR_DEFINE_REPETION: Repeating a "DEFINE" group is not allowed. - * This error is never raised. Since: 2.16 Deprecated: 2.34 - * @G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: Inconsistent newline options. - * Since 2.16 - * @G_REGEX_ERROR_MISSING_BACK_REFERENCE: "\\g" is not followed by a braced, - * angle-bracketed, or quoted name or number, or by a plain number. Since: 2.16 - * @G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE: relative reference must not be zero. Since: 2.34 - * @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: the backtracing - * control verb used does not allow an argument. Since: 2.34 - * @G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB: unknown backtracing - * control verb. Since: 2.34 - * @G_REGEX_ERROR_NUMBER_TOO_BIG: number is too big in escape sequence. Since: 2.34 - * @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME: Missing subpattern name. Since: 2.34 - * @G_REGEX_ERROR_MISSING_DIGIT: Missing digit. Since 2.34 - * @G_REGEX_ERROR_INVALID_DATA_CHARACTER: In JavaScript compatibility mode, - * "[" is an invalid data character. Since: 2.34 - * @G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME: different names for subpatterns of the - * same number are not allowed. Since: 2.34 - * @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: the backtracing control - * verb requires an argument. Since: 2.34 - * @G_REGEX_ERROR_INVALID_CONTROL_CHAR: "\\c" must be followed by an ASCII - * character. Since: 2.34 - * @G_REGEX_ERROR_MISSING_NAME: "\\k" is not followed by a braced, angle-bracketed, or - * quoted name. Since: 2.34 - * @G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS: "\\N" is not supported in a class. Since: 2.34 - * @G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES: too many forward references. Since: 2.34 - * @G_REGEX_ERROR_NAME_TOO_LONG: the name is too long in "(*MARK)", "(*PRUNE)", - * "(*SKIP)", or "(*THEN)". Since: 2.34 - * @G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE: the character value in the \\u sequence is - * too large. Since: 2.34 - * - * Error codes returned by regular expressions functions. - * - * Since: 2.14 - */ -typedef enum -{ - G_REGEX_ERROR_COMPILE, - G_REGEX_ERROR_OPTIMIZE, - G_REGEX_ERROR_REPLACE, - G_REGEX_ERROR_MATCH, - G_REGEX_ERROR_INTERNAL, - - /* These are the error codes from PCRE + 100 */ - G_REGEX_ERROR_STRAY_BACKSLASH = 101, - G_REGEX_ERROR_MISSING_CONTROL_CHAR = 102, - G_REGEX_ERROR_UNRECOGNIZED_ESCAPE = 103, - G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER = 104, - G_REGEX_ERROR_QUANTIFIER_TOO_BIG = 105, - G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS = 106, - G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS = 107, - G_REGEX_ERROR_RANGE_OUT_OF_ORDER = 108, - G_REGEX_ERROR_NOTHING_TO_REPEAT = 109, - G_REGEX_ERROR_UNRECOGNIZED_CHARACTER = 112, - G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS = 113, - G_REGEX_ERROR_UNMATCHED_PARENTHESIS = 114, - G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE = 115, - G_REGEX_ERROR_UNTERMINATED_COMMENT = 118, - G_REGEX_ERROR_EXPRESSION_TOO_LARGE = 120, - G_REGEX_ERROR_MEMORY_ERROR = 121, - G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND = 125, - G_REGEX_ERROR_MALFORMED_CONDITION = 126, - G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES = 127, - G_REGEX_ERROR_ASSERTION_EXPECTED = 128, - G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME = 130, - G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED = 131, - G_REGEX_ERROR_HEX_CODE_TOO_LARGE = 134, - G_REGEX_ERROR_INVALID_CONDITION = 135, - G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND = 136, - G_REGEX_ERROR_INFINITE_LOOP = 140, - G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR = 142, - G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME = 143, - G_REGEX_ERROR_MALFORMED_PROPERTY = 146, - G_REGEX_ERROR_UNKNOWN_PROPERTY = 147, - G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG = 148, - G_REGEX_ERROR_TOO_MANY_SUBPATTERNS = 149, - G_REGEX_ERROR_INVALID_OCTAL_VALUE = 151, - G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE = 154, - G_REGEX_ERROR_DEFINE_REPETION = 155, - G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS = 156, - G_REGEX_ERROR_MISSING_BACK_REFERENCE = 157, - G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE = 158, - G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN = 159, - G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB = 160, - G_REGEX_ERROR_NUMBER_TOO_BIG = 161, - G_REGEX_ERROR_MISSING_SUBPATTERN_NAME = 162, - G_REGEX_ERROR_MISSING_DIGIT = 163, - G_REGEX_ERROR_INVALID_DATA_CHARACTER = 164, - G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME = 165, - G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED = 166, - G_REGEX_ERROR_INVALID_CONTROL_CHAR = 168, - G_REGEX_ERROR_MISSING_NAME = 169, - G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS = 171, - G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES = 172, - G_REGEX_ERROR_NAME_TOO_LONG = 175, - G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE = 176 -} GRegexError; - -/** - * G_REGEX_ERROR: - * - * Error domain for regular expressions. Errors in this domain will be - * from the #GRegexError enumeration. See #GError for information on - * error domains. - * - * Since: 2.14 - */ -#define G_REGEX_ERROR g_regex_error_quark () - -GQuark g_regex_error_quark (void); - -/** - * GRegexCompileFlags: - * @G_REGEX_CASELESS: Letters in the pattern match both upper- and - * lowercase letters. This option can be changed within a pattern - * by a "(?i)" option setting. - * @G_REGEX_MULTILINE: By default, GRegex treats the strings as consisting - * of a single line of characters (even if it actually contains - * newlines). The "start of line" metacharacter ("^") matches only - * at the start of the string, while the "end of line" metacharacter - * ("$") matches only at the end of the string, or before a terminating - * newline (unless #G_REGEX_DOLLAR_ENDONLY is set). When - * #G_REGEX_MULTILINE is set, the "start of line" and "end of line" - * constructs match immediately following or immediately before any - * newline in the string, respectively, as well as at the very start - * and end. This can be changed within a pattern by a "(?m)" option - * setting. - * @G_REGEX_DOTALL: A dot metacharater (".") in the pattern matches all - * characters, including newlines. Without it, newlines are excluded. - * This option can be changed within a pattern by a ("?s") option setting. - * @G_REGEX_EXTENDED: Whitespace data characters in the pattern are - * totally ignored except when escaped or inside a character class. - * Whitespace does not include the VT character (code 11). In addition, - * characters between an unescaped "#" outside a character class and - * the next newline character, inclusive, are also ignored. This can - * be changed within a pattern by a "(?x)" option setting. - * @G_REGEX_ANCHORED: The pattern is forced to be "anchored", that is, - * it is constrained to match only at the first matching point in the - * string that is being searched. This effect can also be achieved by - * appropriate constructs in the pattern itself such as the "^" - * metacharater. - * @G_REGEX_DOLLAR_ENDONLY: A dollar metacharacter ("$") in the pattern - * matches only at the end of the string. Without this option, a - * dollar also matches immediately before the final character if - * it is a newline (but not before any other newlines). This option - * is ignored if #G_REGEX_MULTILINE is set. - * @G_REGEX_UNGREEDY: Inverts the "greediness" of the quantifiers so that - * they are not greedy by default, but become greedy if followed by "?". - * It can also be set by a "(?U)" option setting within the pattern. - * @G_REGEX_RAW: Usually strings must be valid UTF-8 strings, using this - * flag they are considered as a raw sequence of bytes. - * @G_REGEX_NO_AUTO_CAPTURE: Disables the use of numbered capturing - * parentheses in the pattern. Any opening parenthesis that is not - * followed by "?" behaves as if it were followed by "?:" but named - * parentheses can still be used for capturing (and they acquire numbers - * in the usual way). - * @G_REGEX_OPTIMIZE: Optimize the regular expression. If the pattern will - * be used many times, then it may be worth the effort to optimize it - * to improve the speed of matches. - * @G_REGEX_FIRSTLINE: Limits an unanchored pattern to match before (or at) the - * first newline. Since: 2.34 - * @G_REGEX_DUPNAMES: Names used to identify capturing subpatterns need not - * be unique. This can be helpful for certain types of pattern when it - * is known that only one instance of the named subpattern can ever be - * matched. - * @G_REGEX_NEWLINE_CR: Usually any newline character or character sequence is - * recognized. If this option is set, the only recognized newline character - * is '\r'. - * @G_REGEX_NEWLINE_LF: Usually any newline character or character sequence is - * recognized. If this option is set, the only recognized newline character - * is '\n'. - * @G_REGEX_NEWLINE_CRLF: Usually any newline character or character sequence is - * recognized. If this option is set, the only recognized newline character - * sequence is '\r\n'. - * @G_REGEX_NEWLINE_ANYCRLF: Usually any newline character or character sequence - * is recognized. If this option is set, the only recognized newline character - * sequences are '\r', '\n', and '\r\n'. Since: 2.34 - * @G_REGEX_BSR_ANYCRLF: Usually any newline character or character sequence - * is recognised. If this option is set, then "\R" only recognizes the newline - * characters '\r', '\n' and '\r\n'. Since: 2.34 - * @G_REGEX_JAVASCRIPT_COMPAT: Changes behaviour so that it is compatible with - * JavaScript rather than PCRE. Since: 2.34 - * - * Flags specifying compile-time options. - * - * Since: 2.14 - */ -/* Remember to update G_REGEX_COMPILE_MASK in gregex.c after - * adding a new flag. */ -typedef enum -{ - G_REGEX_CASELESS = 1 << 0, - G_REGEX_MULTILINE = 1 << 1, - G_REGEX_DOTALL = 1 << 2, - G_REGEX_EXTENDED = 1 << 3, - G_REGEX_ANCHORED = 1 << 4, - G_REGEX_DOLLAR_ENDONLY = 1 << 5, - G_REGEX_UNGREEDY = 1 << 9, - G_REGEX_RAW = 1 << 11, - G_REGEX_NO_AUTO_CAPTURE = 1 << 12, - G_REGEX_OPTIMIZE = 1 << 13, - G_REGEX_FIRSTLINE = 1 << 18, - G_REGEX_DUPNAMES = 1 << 19, - G_REGEX_NEWLINE_CR = 1 << 20, - G_REGEX_NEWLINE_LF = 1 << 21, - G_REGEX_NEWLINE_CRLF = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF, - G_REGEX_NEWLINE_ANYCRLF = G_REGEX_NEWLINE_CR | 1 << 22, - G_REGEX_BSR_ANYCRLF = 1 << 23, - G_REGEX_JAVASCRIPT_COMPAT = 1 << 25 -} GRegexCompileFlags; - -/** - * GRegexMatchFlags: - * @G_REGEX_MATCH_ANCHORED: The pattern is forced to be "anchored", that is, - * it is constrained to match only at the first matching point in the - * string that is being searched. This effect can also be achieved by - * appropriate constructs in the pattern itself such as the "^" - * metacharater. - * @G_REGEX_MATCH_NOTBOL: Specifies that first character of the string is - * not the beginning of a line, so the circumflex metacharacter should - * not match before it. Setting this without #G_REGEX_MULTILINE (at - * compile time) causes circumflex never to match. This option affects - * only the behaviour of the circumflex metacharacter, it does not - * affect "\A". - * @G_REGEX_MATCH_NOTEOL: Specifies that the end of the subject string is - * not the end of a line, so the dollar metacharacter should not match - * it nor (except in multiline mode) a newline immediately before it. - * Setting this without #G_REGEX_MULTILINE (at compile time) causes - * dollar never to match. This option affects only the behaviour of - * the dollar metacharacter, it does not affect "\Z" or "\z". - * @G_REGEX_MATCH_NOTEMPTY: An empty string is not considered to be a valid - * match if this option is set. If there are alternatives in the pattern, - * they are tried. If all the alternatives match the empty string, the - * entire match fails. For example, if the pattern "a?b?" is applied to - * a string not beginning with "a" or "b", it matches the empty string - * at the start of the string. With this flag set, this match is not - * valid, so GRegex searches further into the string for occurrences - * of "a" or "b". - * @G_REGEX_MATCH_PARTIAL: Turns on the partial matching feature, for more - * documentation on partial matching see g_match_info_is_partial_match(). - * @G_REGEX_MATCH_NEWLINE_CR: Overrides the newline definition set when - * creating a new #GRegex, setting the '\r' character as line terminator. - * @G_REGEX_MATCH_NEWLINE_LF: Overrides the newline definition set when - * creating a new #GRegex, setting the '\n' character as line terminator. - * @G_REGEX_MATCH_NEWLINE_CRLF: Overrides the newline definition set when - * creating a new #GRegex, setting the '\r\n' characters sequence as line terminator. - * @G_REGEX_MATCH_NEWLINE_ANY: Overrides the newline definition set when - * creating a new #GRegex, any Unicode newline sequence - * is recognised as a newline. These are '\r', '\n' and '\rn', and the - * single characters U+000B LINE TABULATION, U+000C FORM FEED (FF), - * U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and - * U+2029 PARAGRAPH SEPARATOR. - * @G_REGEX_MATCH_NEWLINE_ANYCRLF: Overrides the newline definition set when - * creating a new #GRegex; any '\r', '\n', or '\r\n' character sequence - * is recognized as a newline. Since: 2.34 - * @G_REGEX_MATCH_BSR_ANYCRLF: Overrides the newline definition for "\R" set when - * creating a new #GRegex; only '\r', '\n', or '\r\n' character sequences - * are recognized as a newline by "\R". Since: 2.34 - * @G_REGEX_MATCH_BSR_ANY: Overrides the newline definition for "\R" set when - * creating a new #GRegex; any Unicode newline character or character sequence - * are recognized as a newline by "\R". These are '\r', '\n' and '\rn', and the - * single characters U+000B LINE TABULATION, U+000C FORM FEED (FF), - * U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and - * U+2029 PARAGRAPH SEPARATOR. Since: 2.34 - * @G_REGEX_MATCH_PARTIAL_SOFT: An alias for #G_REGEX_MATCH_PARTIAL. Since: 2.34 - * @G_REGEX_MATCH_PARTIAL_HARD: Turns on the partial matching feature. In contrast to - * to #G_REGEX_MATCH_PARTIAL_SOFT, this stops matching as soon as a partial match - * is found, without continuing to search for a possible complete match. See - * see g_match_info_is_partial_match() for more information. Since: 2.34 - * @G_REGEX_MATCH_NOTEMPTY_ATSTART: Like #G_REGEX_MATCH_NOTEMPTY, but only applied to - * the start of the matched string. For anchored - * patterns this can only happen for pattern containing "\K". Since: 2.34 - * - * Flags specifying match-time options. - * - * Since: 2.14 - */ -/* Remember to update G_REGEX_MATCH_MASK in gregex.c after - * adding a new flag. */ -typedef enum -{ - G_REGEX_MATCH_ANCHORED = 1 << 4, - G_REGEX_MATCH_NOTBOL = 1 << 7, - G_REGEX_MATCH_NOTEOL = 1 << 8, - G_REGEX_MATCH_NOTEMPTY = 1 << 10, - G_REGEX_MATCH_PARTIAL = 1 << 15, - G_REGEX_MATCH_NEWLINE_CR = 1 << 20, - G_REGEX_MATCH_NEWLINE_LF = 1 << 21, - G_REGEX_MATCH_NEWLINE_CRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF, - G_REGEX_MATCH_NEWLINE_ANY = 1 << 22, - G_REGEX_MATCH_NEWLINE_ANYCRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_ANY, - G_REGEX_MATCH_BSR_ANYCRLF = 1 << 23, - G_REGEX_MATCH_BSR_ANY = 1 << 24, - G_REGEX_MATCH_PARTIAL_SOFT = G_REGEX_MATCH_PARTIAL, - G_REGEX_MATCH_PARTIAL_HARD = 1 << 27, - G_REGEX_MATCH_NOTEMPTY_ATSTART = 1 << 28 -} GRegexMatchFlags; - -/** - * GRegex: - * - * A GRegex is the "compiled" form of a regular expression pattern. This - * structure is opaque and its fields cannot be accessed directly. - * - * Since: 2.14 - */ -typedef struct _GRegex GRegex; - - -typedef struct _GMatchInfo GMatchInfo; - -/** - * GRegexEvalCallback: - * @match_info: the #GMatchInfo generated by the match. - * Use g_match_info_get_regex() and g_match_info_get_string() if you - * need the #GRegex or the matched string. - * @result: a #GString containing the new string - * @user_data: user data passed to g_regex_replace_eval() - * - * Specifies the type of the function passed to g_regex_replace_eval(). - * It is called for each occurrence of the pattern in the string passed - * to g_regex_replace_eval(), and it should append the replacement to - * @result. - * - * Returns: %FALSE to continue the replacement process, %TRUE to stop it - * - * Since: 2.14 - */ -typedef gboolean (*GRegexEvalCallback) (const GMatchInfo *match_info, - GString *result, - gpointer user_data); - - -GRegex *g_regex_new (const gchar *pattern, - GRegexCompileFlags compile_options, - GRegexMatchFlags match_options, - GError **error); -GRegex *g_regex_ref (GRegex *regex); -void g_regex_unref (GRegex *regex); -const gchar *g_regex_get_pattern (const GRegex *regex); -gint g_regex_get_max_backref (const GRegex *regex); -gint g_regex_get_capture_count (const GRegex *regex); -gboolean g_regex_get_has_cr_or_lf (const GRegex *regex); -gint g_regex_get_string_number (const GRegex *regex, - const gchar *name); -gchar *g_regex_escape_string (const gchar *string, - gint length); -gchar *g_regex_escape_nul (const gchar *string, - gint length); - -GRegexCompileFlags g_regex_get_compile_flags (const GRegex *regex); -GRegexMatchFlags g_regex_get_match_flags (const GRegex *regex); - -/* Matching. */ -gboolean g_regex_match_simple (const gchar *pattern, - const gchar *string, - GRegexCompileFlags compile_options, - GRegexMatchFlags match_options); -gboolean g_regex_match (const GRegex *regex, - const gchar *string, - GRegexMatchFlags match_options, - GMatchInfo **match_info); -gboolean g_regex_match_full (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - GMatchInfo **match_info, - GError **error); -gboolean g_regex_match_all (const GRegex *regex, - const gchar *string, - GRegexMatchFlags match_options, - GMatchInfo **match_info); -gboolean g_regex_match_all_full (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - GMatchInfo **match_info, - GError **error); - -/* String splitting. */ -gchar **g_regex_split_simple (const gchar *pattern, - const gchar *string, - GRegexCompileFlags compile_options, - GRegexMatchFlags match_options); -gchar **g_regex_split (const GRegex *regex, - const gchar *string, - GRegexMatchFlags match_options); -gchar **g_regex_split_full (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - gint max_tokens, - GError **error); - -/* String replacement. */ -gchar *g_regex_replace (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - const gchar *replacement, - GRegexMatchFlags match_options, - GError **error); -gchar *g_regex_replace_literal (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - const gchar *replacement, - GRegexMatchFlags match_options, - GError **error); -gchar *g_regex_replace_eval (const GRegex *regex, - const gchar *string, - gssize string_len, - gint start_position, - GRegexMatchFlags match_options, - GRegexEvalCallback eval, - gpointer user_data, - GError **error); -gboolean g_regex_check_replacement (const gchar *replacement, - gboolean *has_references, - GError **error); - -/* Match info */ -GRegex *g_match_info_get_regex (const GMatchInfo *match_info); -const gchar *g_match_info_get_string (const GMatchInfo *match_info); - -GMatchInfo *g_match_info_ref (GMatchInfo *match_info); -void g_match_info_unref (GMatchInfo *match_info); -void g_match_info_free (GMatchInfo *match_info); -gboolean g_match_info_next (GMatchInfo *match_info, - GError **error); -gboolean g_match_info_matches (const GMatchInfo *match_info); -gint g_match_info_get_match_count (const GMatchInfo *match_info); -gboolean g_match_info_is_partial_match (const GMatchInfo *match_info); -gchar *g_match_info_expand_references(const GMatchInfo *match_info, - const gchar *string_to_expand, - GError **error); -gchar *g_match_info_fetch (const GMatchInfo *match_info, - gint match_num); -gboolean g_match_info_fetch_pos (const GMatchInfo *match_info, - gint match_num, - gint *start_pos, - gint *end_pos); -gchar *g_match_info_fetch_named (const GMatchInfo *match_info, - const gchar *name); -gboolean g_match_info_fetch_named_pos (const GMatchInfo *match_info, - const gchar *name, - gint *start_pos, - gint *end_pos); -gchar **g_match_info_fetch_all (const GMatchInfo *match_info); - -G_END_DECLS - -#endif /* __G_REGEX_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gscanner.h b/GstreamerHelper/x86/include/glib-2.0/glib/gscanner.h deleted file mode 100644 index dd932f42..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gscanner.h +++ /dev/null @@ -1,284 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SCANNER_H__ -#define __G_SCANNER_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GScanner GScanner; -typedef struct _GScannerConfig GScannerConfig; -typedef union _GTokenValue GTokenValue; - -typedef void (*GScannerMsgFunc) (GScanner *scanner, - gchar *message, - gboolean error); - -/* GScanner: Flexible lexical scanner for general purpose. - */ - -/* Character sets */ -#define G_CSET_A_2_Z "ABCDEFGHIJKLMNOPQRSTUVWXYZ" -#define G_CSET_a_2_z "abcdefghijklmnopqrstuvwxyz" -#define G_CSET_DIGITS "0123456789" -#define G_CSET_LATINC "\300\301\302\303\304\305\306"\ - "\307\310\311\312\313\314\315\316\317\320"\ - "\321\322\323\324\325\326"\ - "\330\331\332\333\334\335\336" -#define G_CSET_LATINS "\337\340\341\342\343\344\345\346"\ - "\347\350\351\352\353\354\355\356\357\360"\ - "\361\362\363\364\365\366"\ - "\370\371\372\373\374\375\376\377" - -/* Error types */ -typedef enum -{ - G_ERR_UNKNOWN, - G_ERR_UNEXP_EOF, - G_ERR_UNEXP_EOF_IN_STRING, - G_ERR_UNEXP_EOF_IN_COMMENT, - G_ERR_NON_DIGIT_IN_CONST, - G_ERR_DIGIT_RADIX, - G_ERR_FLOAT_RADIX, - G_ERR_FLOAT_MALFORMED -} GErrorType; - -/* Token types */ -typedef enum -{ - G_TOKEN_EOF = 0, - - G_TOKEN_LEFT_PAREN = '(', - G_TOKEN_RIGHT_PAREN = ')', - G_TOKEN_LEFT_CURLY = '{', - G_TOKEN_RIGHT_CURLY = '}', - G_TOKEN_LEFT_BRACE = '[', - G_TOKEN_RIGHT_BRACE = ']', - G_TOKEN_EQUAL_SIGN = '=', - G_TOKEN_COMMA = ',', - - G_TOKEN_NONE = 256, - - G_TOKEN_ERROR, - - G_TOKEN_CHAR, - G_TOKEN_BINARY, - G_TOKEN_OCTAL, - G_TOKEN_INT, - G_TOKEN_HEX, - G_TOKEN_FLOAT, - G_TOKEN_STRING, - - G_TOKEN_SYMBOL, - G_TOKEN_IDENTIFIER, - G_TOKEN_IDENTIFIER_NULL, - - G_TOKEN_COMMENT_SINGLE, - G_TOKEN_COMMENT_MULTI, - - /*< private >*/ - G_TOKEN_LAST -} GTokenType; - -union _GTokenValue -{ - gpointer v_symbol; - gchar *v_identifier; - gulong v_binary; - gulong v_octal; - gulong v_int; - guint64 v_int64; - gdouble v_float; - gulong v_hex; - gchar *v_string; - gchar *v_comment; - guchar v_char; - guint v_error; -}; - -struct _GScannerConfig -{ - /* Character sets - */ - gchar *cset_skip_characters; /* default: " \t\n" */ - gchar *cset_identifier_first; - gchar *cset_identifier_nth; - gchar *cpair_comment_single; /* default: "#\n" */ - - /* Should symbol lookup work case sensitive? - */ - guint case_sensitive : 1; - - /* Boolean values to be adjusted "on the fly" - * to configure scanning behaviour. - */ - guint skip_comment_multi : 1; /* C like comment */ - guint skip_comment_single : 1; /* single line comment */ - guint scan_comment_multi : 1; /* scan multi line comments? */ - guint scan_identifier : 1; - guint scan_identifier_1char : 1; - guint scan_identifier_NULL : 1; - guint scan_symbols : 1; - guint scan_binary : 1; - guint scan_octal : 1; - guint scan_float : 1; - guint scan_hex : 1; /* `0x0ff0' */ - guint scan_hex_dollar : 1; /* `$0ff0' */ - guint scan_string_sq : 1; /* string: 'anything' */ - guint scan_string_dq : 1; /* string: "\\-escapes!\n" */ - guint numbers_2_int : 1; /* bin, octal, hex => int */ - guint int_2_float : 1; /* int => G_TOKEN_FLOAT? */ - guint identifier_2_string : 1; - guint char_2_token : 1; /* return G_TOKEN_CHAR? */ - guint symbol_2_token : 1; - guint scope_0_fallback : 1; /* try scope 0 on lookups? */ - guint store_int64 : 1; /* use value.v_int64 rather than v_int */ - - /*< private >*/ - guint padding_dummy; -}; - -struct _GScanner -{ - /* unused fields */ - gpointer user_data; - guint max_parse_errors; - - /* g_scanner_error() increments this field */ - guint parse_errors; - - /* name of input stream, featured by the default message handler */ - const gchar *input_name; - - /* quarked data */ - GData *qdata; - - /* link into the scanner configuration */ - GScannerConfig *config; - - /* fields filled in after g_scanner_get_next_token() */ - GTokenType token; - GTokenValue value; - guint line; - guint position; - - /* fields filled in after g_scanner_peek_next_token() */ - GTokenType next_token; - GTokenValue next_value; - guint next_line; - guint next_position; - - /*< private >*/ - /* to be considered private */ - GHashTable *symbol_table; - gint input_fd; - const gchar *text; - const gchar *text_end; - gchar *buffer; - guint scope_id; - - /*< public >*/ - /* handler function for _warn and _error */ - GScannerMsgFunc msg_handler; -}; - -GScanner* g_scanner_new (const GScannerConfig *config_templ); -void g_scanner_destroy (GScanner *scanner); -void g_scanner_input_file (GScanner *scanner, - gint input_fd); -void g_scanner_sync_file_offset (GScanner *scanner); -void g_scanner_input_text (GScanner *scanner, - const gchar *text, - guint text_len); -GTokenType g_scanner_get_next_token (GScanner *scanner); -GTokenType g_scanner_peek_next_token (GScanner *scanner); -GTokenType g_scanner_cur_token (GScanner *scanner); -GTokenValue g_scanner_cur_value (GScanner *scanner); -guint g_scanner_cur_line (GScanner *scanner); -guint g_scanner_cur_position (GScanner *scanner); -gboolean g_scanner_eof (GScanner *scanner); -guint g_scanner_set_scope (GScanner *scanner, - guint scope_id); -void g_scanner_scope_add_symbol (GScanner *scanner, - guint scope_id, - const gchar *symbol, - gpointer value); -void g_scanner_scope_remove_symbol (GScanner *scanner, - guint scope_id, - const gchar *symbol); -gpointer g_scanner_scope_lookup_symbol (GScanner *scanner, - guint scope_id, - const gchar *symbol); -void g_scanner_scope_foreach_symbol (GScanner *scanner, - guint scope_id, - GHFunc func, - gpointer user_data); -gpointer g_scanner_lookup_symbol (GScanner *scanner, - const gchar *symbol); -void g_scanner_unexp_token (GScanner *scanner, - GTokenType expected_token, - const gchar *identifier_spec, - const gchar *symbol_spec, - const gchar *symbol_name, - const gchar *message, - gint is_error); -void g_scanner_error (GScanner *scanner, - const gchar *format, - ...) G_GNUC_PRINTF (2,3); -void g_scanner_warn (GScanner *scanner, - const gchar *format, - ...) G_GNUC_PRINTF (2,3); - -#ifndef G_DISABLE_DEPRECATED - -/* keep downward source compatibility */ -#define g_scanner_add_symbol( scanner, symbol, value ) G_STMT_START { \ - g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \ -} G_STMT_END -#define g_scanner_remove_symbol( scanner, symbol ) G_STMT_START { \ - g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \ -} G_STMT_END -#define g_scanner_foreach_symbol( scanner, func, data ) G_STMT_START { \ - g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \ -} G_STMT_END - -/* The following two functions are deprecated and will be removed in - * the next major release. They do no good. */ -#define g_scanner_freeze_symbol_table(scanner) ((void)0) -#define g_scanner_thaw_symbol_table(scanner) ((void)0) - -#endif /* G_DISABLE_DEPRECATED */ - -G_END_DECLS - -#endif /* __G_SCANNER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gsequence.h b/GstreamerHelper/x86/include/glib-2.0/glib/gsequence.h deleted file mode 100644 index 3e5a03de..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gsequence.h +++ /dev/null @@ -1,136 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 - * Soeren Sandmann (sandmann@daimi.au.dk) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SEQUENCE_H__ -#define __G_SEQUENCE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GSequence GSequence; -typedef struct _GSequenceNode GSequenceIter; - -typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a, - GSequenceIter *b, - gpointer data); - - -/* GSequence */ -GSequence * g_sequence_new (GDestroyNotify data_destroy); -void g_sequence_free (GSequence *seq); -gint g_sequence_get_length (GSequence *seq); -void g_sequence_foreach (GSequence *seq, - GFunc func, - gpointer user_data); -void g_sequence_foreach_range (GSequenceIter *begin, - GSequenceIter *end, - GFunc func, - gpointer user_data); -void g_sequence_sort (GSequence *seq, - GCompareDataFunc cmp_func, - gpointer cmp_data); -void g_sequence_sort_iter (GSequence *seq, - GSequenceIterCompareFunc cmp_func, - gpointer cmp_data); - - -/* Getting iters */ -GSequenceIter *g_sequence_get_begin_iter (GSequence *seq); -GSequenceIter *g_sequence_get_end_iter (GSequence *seq); -GSequenceIter *g_sequence_get_iter_at_pos (GSequence *seq, - gint pos); -GSequenceIter *g_sequence_append (GSequence *seq, - gpointer data); -GSequenceIter *g_sequence_prepend (GSequence *seq, - gpointer data); -GSequenceIter *g_sequence_insert_before (GSequenceIter *iter, - gpointer data); -void g_sequence_move (GSequenceIter *src, - GSequenceIter *dest); -void g_sequence_swap (GSequenceIter *a, - GSequenceIter *b); -GSequenceIter *g_sequence_insert_sorted (GSequence *seq, - gpointer data, - GCompareDataFunc cmp_func, - gpointer cmp_data); -GSequenceIter *g_sequence_insert_sorted_iter (GSequence *seq, - gpointer data, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); -void g_sequence_sort_changed (GSequenceIter *iter, - GCompareDataFunc cmp_func, - gpointer cmp_data); -void g_sequence_sort_changed_iter (GSequenceIter *iter, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); -void g_sequence_remove (GSequenceIter *iter); -void g_sequence_remove_range (GSequenceIter *begin, - GSequenceIter *end); -void g_sequence_move_range (GSequenceIter *dest, - GSequenceIter *begin, - GSequenceIter *end); -GSequenceIter *g_sequence_search (GSequence *seq, - gpointer data, - GCompareDataFunc cmp_func, - gpointer cmp_data); -GSequenceIter *g_sequence_search_iter (GSequence *seq, - gpointer data, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); -GSequenceIter *g_sequence_lookup (GSequence *seq, - gpointer data, - GCompareDataFunc cmp_func, - gpointer cmp_data); -GSequenceIter *g_sequence_lookup_iter (GSequence *seq, - gpointer data, - GSequenceIterCompareFunc iter_cmp, - gpointer cmp_data); - - -/* Dereferencing */ -gpointer g_sequence_get (GSequenceIter *iter); -void g_sequence_set (GSequenceIter *iter, - gpointer data); - -/* Operations on GSequenceIter * */ -gboolean g_sequence_iter_is_begin (GSequenceIter *iter); -gboolean g_sequence_iter_is_end (GSequenceIter *iter); -GSequenceIter *g_sequence_iter_next (GSequenceIter *iter); -GSequenceIter *g_sequence_iter_prev (GSequenceIter *iter); -gint g_sequence_iter_get_position (GSequenceIter *iter); -GSequenceIter *g_sequence_iter_move (GSequenceIter *iter, - gint delta); -GSequence * g_sequence_iter_get_sequence (GSequenceIter *iter); - - -/* Search */ -gint g_sequence_iter_compare (GSequenceIter *a, - GSequenceIter *b); -GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter *begin, - GSequenceIter *end); - -G_END_DECLS - -#endif /* __G_SEQUENCE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gshell.h b/GstreamerHelper/x86/include/glib-2.0/glib/gshell.h deleted file mode 100644 index ddb4ec56..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gshell.h +++ /dev/null @@ -1,55 +0,0 @@ -/* gshell.h - Shell-related utilities - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, write - * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SHELL_H__ -#define __G_SHELL_H__ - -#include - -G_BEGIN_DECLS - -#define G_SHELL_ERROR g_shell_error_quark () - -typedef enum -{ - /* mismatched or otherwise mangled quoting */ - G_SHELL_ERROR_BAD_QUOTING, - /* string to be parsed was empty */ - G_SHELL_ERROR_EMPTY_STRING, - G_SHELL_ERROR_FAILED -} GShellError; - -GQuark g_shell_error_quark (void); - -gchar* g_shell_quote (const gchar *unquoted_string); -gchar* g_shell_unquote (const gchar *quoted_string, - GError **error); -gboolean g_shell_parse_argv (const gchar *command_line, - gint *argcp, - gchar ***argvp, - GError **error); - -G_END_DECLS - -#endif /* __G_SHELL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gslice.h b/GstreamerHelper/x86/include/glib-2.0/glib/gslice.h deleted file mode 100644 index 3efd645d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gslice.h +++ /dev/null @@ -1,90 +0,0 @@ -/* GLIB sliced memory - fast threaded memory chunk allocator - * Copyright (C) 2005 Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SLICE_H__ -#define __G_SLICE_H__ - -#include - -G_BEGIN_DECLS - -/* slices - fast allocation/release of small memory blocks - */ -gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -gpointer g_slice_copy (gsize block_size, - gconstpointer mem_block) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); -void g_slice_free1 (gsize block_size, - gpointer mem_block); -void g_slice_free_chain_with_offset (gsize block_size, - gpointer mem_chain, - gsize next_offset); -#define g_slice_new(type) ((type*) g_slice_alloc (sizeof (type))) -#define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type))) -/* MemoryBlockType * - * g_slice_dup (MemoryBlockType, - * MemoryBlockType *mem_block); - * g_slice_free (MemoryBlockType, - * MemoryBlockType *mem_block); - * g_slice_free_chain (MemoryBlockType, - * MemoryBlockType *first_chain_block, - * memory_block_next_field); - * pseudo prototypes for the macro - * definitions following below. - */ - -/* we go through extra hoops to ensure type safety */ -#define g_slice_dup(type, mem) \ - (1 ? (type*) g_slice_copy (sizeof (type), (mem)) \ - : ((void) ((type*) 0 == (mem)), (type*) 0)) -#define g_slice_free(type, mem) do { \ - if (1) g_slice_free1 (sizeof (type), (mem)); \ - else (void) ((type*) 0 == (mem)); \ -} while (0) -#define g_slice_free_chain(type, mem_chain, next) do { \ - if (1) g_slice_free_chain_with_offset (sizeof (type), \ - (mem_chain), G_STRUCT_OFFSET (type, next)); \ - else (void) ((type*) 0 == (mem_chain)); \ -} while (0) - - -/* --- internal debugging API --- */ -typedef enum { - G_SLICE_CONFIG_ALWAYS_MALLOC = 1, - G_SLICE_CONFIG_BYPASS_MAGAZINES, - G_SLICE_CONFIG_WORKING_SET_MSECS, - G_SLICE_CONFIG_COLOR_INCREMENT, - G_SLICE_CONFIG_CHUNK_SIZES, - G_SLICE_CONFIG_CONTENTION_COUNTER -} GSliceConfig; - -GLIB_DEPRECATED_IN_2_34 -void g_slice_set_config (GSliceConfig ckey, gint64 value); -GLIB_DEPRECATED_IN_2_34 -gint64 g_slice_get_config (GSliceConfig ckey); -GLIB_DEPRECATED_IN_2_34 -gint64* g_slice_get_config_state (GSliceConfig ckey, gint64 address, guint *n_values); - -G_END_DECLS - -#endif /* __G_SLICE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gslist.h b/GstreamerHelper/x86/include/glib-2.0/glib/gslist.h deleted file mode 100644 index c61fd2ff..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gslist.h +++ /dev/null @@ -1,117 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SLIST_H__ -#define __G_SLIST_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GSList GSList; - -struct _GSList -{ - gpointer data; - GSList *next; -}; - -/* Singly linked lists - */ -GSList* g_slist_alloc (void) G_GNUC_WARN_UNUSED_RESULT; -void g_slist_free (GSList *list); -void g_slist_free_1 (GSList *list); -#define g_slist_free1 g_slist_free_1 -void g_slist_free_full (GSList *list, - GDestroyNotify free_func); -GSList* g_slist_append (GSList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_prepend (GSList *list, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert (GSList *list, - gpointer data, - gint position) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert_sorted (GSList *list, - gpointer data, - GCompareFunc func) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert_sorted_with_data (GSList *list, - gpointer data, - GCompareDataFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_insert_before (GSList *slist, - GSList *sibling, - gpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_concat (GSList *list1, - GSList *list2) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_remove (GSList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_remove_all (GSList *list, - gconstpointer data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_remove_link (GSList *list, - GSList *link_) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_delete_link (GSList *list, - GSList *link_) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_reverse (GSList *list) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_copy (GSList *list) G_GNUC_WARN_UNUSED_RESULT; - -GLIB_AVAILABLE_IN_2_34 -GSList* g_slist_copy_deep (GSList *list, - GCopyFunc func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_nth (GSList *list, - guint n); -GSList* g_slist_find (GSList *list, - gconstpointer data); -GSList* g_slist_find_custom (GSList *list, - gconstpointer data, - GCompareFunc func); -gint g_slist_position (GSList *list, - GSList *llink); -gint g_slist_index (GSList *list, - gconstpointer data); -GSList* g_slist_last (GSList *list); -guint g_slist_length (GSList *list); -void g_slist_foreach (GSList *list, - GFunc func, - gpointer user_data); -GSList* g_slist_sort (GSList *list, - GCompareFunc compare_func) G_GNUC_WARN_UNUSED_RESULT; -GSList* g_slist_sort_with_data (GSList *list, - GCompareDataFunc compare_func, - gpointer user_data) G_GNUC_WARN_UNUSED_RESULT; -gpointer g_slist_nth_data (GSList *list, - guint n); - -#define g_slist_next(slist) ((slist) ? (((GSList *)(slist))->next) : NULL) - -G_END_DECLS - -#endif /* __G_SLIST_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gspawn.h b/GstreamerHelper/x86/include/glib-2.0/glib/gspawn.h deleted file mode 100644 index 1120d81d..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gspawn.h +++ /dev/null @@ -1,256 +0,0 @@ -/* gspawn.h - Process launching - * - * Copyright 2000 Red Hat, Inc. - * - * GLib is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, write - * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SPAWN_H__ -#define __G_SPAWN_H__ - -#include - -G_BEGIN_DECLS - - -/* I'm not sure I remember our proposed naming convention here. */ -/** - * G_SPAWN_ERROR: - * - * Error domain for spawning processes. Errors in this domain will - * be from the #GSpawnError enumeration. See #GError for information on - * error domains. - */ -#define G_SPAWN_ERROR g_spawn_error_quark () - -/** - * GSpawnError: - * @G_SPAWN_ERROR_FORK: Fork failed due to lack of memory. - * @G_SPAWN_ERROR_READ: Read or select on pipes failed. - * @G_SPAWN_ERROR_CHDIR: Changing to working directory failed. - * @G_SPAWN_ERROR_ACCES: execv() returned EACCES - * @G_SPAWN_ERROR_PERM: execv() returned EPERM - * @G_SPAWN_ERROR_TOO_BIG: execv() returned E2BIG - * @G_SPAWN_ERROR_2BIG: deprecated alias for %G_SPAWN_ERROR_TOO_BIG - * @G_SPAWN_ERROR_NOEXEC: execv() returned ENOEXEC - * @G_SPAWN_ERROR_NAMETOOLONG: execv() returned ENAMETOOLONG - * @G_SPAWN_ERROR_NOENT: execv() returned ENOENT - * @G_SPAWN_ERROR_NOMEM: execv() returned ENOMEM - * @G_SPAWN_ERROR_NOTDIR: execv() returned ENOTDIR - * @G_SPAWN_ERROR_LOOP: execv() returned ELOOP - * @G_SPAWN_ERROR_TXTBUSY: execv() returned ETXTBUSY - * @G_SPAWN_ERROR_IO: execv() returned EIO - * @G_SPAWN_ERROR_NFILE: execv() returned ENFILE - * @G_SPAWN_ERROR_MFILE: execv() returned EMFILE - * @G_SPAWN_ERROR_INVAL: execv() returned EINVAL - * @G_SPAWN_ERROR_ISDIR: execv() returned EISDIR - * @G_SPAWN_ERROR_LIBBAD: execv() returned ELIBBAD - * @G_SPAWN_ERROR_FAILED: Some other fatal failure, - * error->message should explain. - * - * Error codes returned by spawning processes. - */ -typedef enum -{ - G_SPAWN_ERROR_FORK, /* fork failed due to lack of memory */ - G_SPAWN_ERROR_READ, /* read or select on pipes failed */ - G_SPAWN_ERROR_CHDIR, /* changing to working dir failed */ - G_SPAWN_ERROR_ACCES, /* execv() returned EACCES */ - G_SPAWN_ERROR_PERM, /* execv() returned EPERM */ - G_SPAWN_ERROR_TOO_BIG,/* execv() returned E2BIG */ -#ifndef G_DISABLE_DEPRECATED - G_SPAWN_ERROR_2BIG = G_SPAWN_ERROR_TOO_BIG, -#endif - G_SPAWN_ERROR_NOEXEC, /* execv() returned ENOEXEC */ - G_SPAWN_ERROR_NAMETOOLONG, /* "" "" ENAMETOOLONG */ - G_SPAWN_ERROR_NOENT, /* "" "" ENOENT */ - G_SPAWN_ERROR_NOMEM, /* "" "" ENOMEM */ - G_SPAWN_ERROR_NOTDIR, /* "" "" ENOTDIR */ - G_SPAWN_ERROR_LOOP, /* "" "" ELOOP */ - G_SPAWN_ERROR_TXTBUSY, /* "" "" ETXTBUSY */ - G_SPAWN_ERROR_IO, /* "" "" EIO */ - G_SPAWN_ERROR_NFILE, /* "" "" ENFILE */ - G_SPAWN_ERROR_MFILE, /* "" "" EMFLE */ - G_SPAWN_ERROR_INVAL, /* "" "" EINVAL */ - G_SPAWN_ERROR_ISDIR, /* "" "" EISDIR */ - G_SPAWN_ERROR_LIBBAD, /* "" "" ELIBBAD */ - G_SPAWN_ERROR_FAILED /* other fatal failure, error->message - * should explain - */ -} GSpawnError; - -/** - * G_SPAWN_EXIT_ERROR: - * - * Error domain used by g_spawn_check_exit_status(). The code - * will be the program exit code. - */ -#define G_SPAWN_EXIT_ERROR g_spawn_exit_error_quark () - -/** - * GSpawnChildSetupFunc: - * @user_data: user data to pass to the function. - * - * Specifies the type of the setup function passed to g_spawn_async(), - * g_spawn_sync() and g_spawn_async_with_pipes(), which can, in very - * limited ways, be used to affect the child's execution. - * - * On POSIX platforms, the function is called in the child after GLib - * has performed all the setup it plans to perform, but before calling - * exec(). Actions taken in this function will only affect the child, - * not the parent. - * - * On Windows, the function is called in the parent. Its usefulness on - * Windows is thus questionable. In many cases executing the child setup - * function in the parent can have ill effects, and you should be very - * careful when porting software to Windows that uses child setup - * functions. - * - * However, even on POSIX, you are extremely limited in what you can - * safely do from a #GSpawnChildSetupFunc, because any mutexes that - * were held by other threads in the parent process at the time of the - * fork() will still be locked in the child process, and they will - * never be unlocked (since the threads that held them don't exist in - * the child). POSIX allows only async-signal-safe functions (see - * signal7) - * to be called in the child between fork() and exec(), which - * drastically limits the usefulness of child setup functions. - * - * In particular, it is not safe to call any function which may - * call malloc(), which includes POSIX functions such as setenv(). - * If you need to set up the child environment differently from - * the parent, you should use g_get_environ(), g_environ_setenv(), - * and g_environ_unsetenv(), and then pass the complete environment - * list to the g_spawn... function. - */ -typedef void (* GSpawnChildSetupFunc) (gpointer user_data); - -/** - * GSpawnFlags: - * @G_SPAWN_LEAVE_DESCRIPTORS_OPEN: the parent's open file descriptors will be - * inherited by the child; otherwise all descriptors except stdin/stdout/stderr - * will be closed before calling exec() in the child. - * @G_SPAWN_DO_NOT_REAP_CHILD: the child will not be automatically reaped; you - * must use g_child_watch_add() yourself (or call waitpid() - * or handle SIGCHLD yourself), or the child will become a zombie. - * @G_SPAWN_SEARCH_PATH: argv[0] need not be an absolute path, - * it will be looked for in the user's PATH. - * @G_SPAWN_STDOUT_TO_DEV_NULL: the child's standard output will be discarded, - * instead of going to the same location as the parent's standard output. - * @G_SPAWN_STDERR_TO_DEV_NULL: the child's standard error will be discarded. - * @G_SPAWN_CHILD_INHERITS_STDIN: the child will inherit the parent's standard - * input (by default, the child's standard input is attached to - * /dev/null). - * @G_SPAWN_FILE_AND_ARGV_ZERO: the first element of argv is - * the file to execute, while the remaining elements are the actual argument - * vector to pass to the file. Normally g_spawn_async_with_pipes() uses - * argv[0] as the file to execute, and passes all of - * argv to the child. - * @G_SPAWN_SEARCH_PATH_FROM_ENVP: if argv[0] is not an abolute path, - * it will be looked for in the PATH from the passed child - * environment. Since: 2.34 - * - * Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes(). - */ -typedef enum -{ - G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0, - G_SPAWN_DO_NOT_REAP_CHILD = 1 << 1, - /* look for argv[0] in the path i.e. use execvp() */ - G_SPAWN_SEARCH_PATH = 1 << 2, - /* Dump output to /dev/null */ - G_SPAWN_STDOUT_TO_DEV_NULL = 1 << 3, - G_SPAWN_STDERR_TO_DEV_NULL = 1 << 4, - G_SPAWN_CHILD_INHERITS_STDIN = 1 << 5, - G_SPAWN_FILE_AND_ARGV_ZERO = 1 << 6, - G_SPAWN_SEARCH_PATH_FROM_ENVP = 1 << 7 -} GSpawnFlags; - -GQuark g_spawn_error_quark (void); -GQuark g_spawn_exit_error_quark (void); - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_spawn_async g_spawn_async_utf8 -#define g_spawn_async_with_pipes g_spawn_async_with_pipes_utf8 -#define g_spawn_sync g_spawn_sync_utf8 -#define g_spawn_command_line_sync g_spawn_command_line_sync_utf8 -#define g_spawn_command_line_async g_spawn_command_line_async_utf8 -#endif -#endif - -gboolean g_spawn_async (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - GError **error); - - -/* Opens pipes for non-NULL standard_output, standard_input, standard_error, - * and returns the parent's end of the pipes. - */ -gboolean g_spawn_async_with_pipes (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint *standard_input, - gint *standard_output, - gint *standard_error, - GError **error); - - -/* If standard_output or standard_error are non-NULL, the full - * standard output or error of the command will be placed there. - */ - -gboolean g_spawn_sync (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - gchar **standard_output, - gchar **standard_error, - gint *exit_status, - GError **error); - -gboolean g_spawn_command_line_sync (const gchar *command_line, - gchar **standard_output, - gchar **standard_error, - gint *exit_status, - GError **error); -gboolean g_spawn_command_line_async (const gchar *command_line, - GError **error); - -GLIB_AVAILABLE_IN_2_34 -gboolean g_spawn_check_exit_status (gint exit_status, - GError **error); - -void g_spawn_close_pid (GPid pid); - -G_END_DECLS - -#endif /* __G_SPAWN_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gstdio.h b/GstreamerHelper/x86/include/glib-2.0/glib/gstdio.h deleted file mode 100644 index 08aea7d3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gstdio.h +++ /dev/null @@ -1,149 +0,0 @@ -/* gstdio.h - GFilename wrappers for C library functions - * - * Copyright 2004 Tor Lillqvist - * - * GLib is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * GLib is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __G_STDIO_H__ -#define __G_STDIO_H__ - -#include - -#include - -G_BEGIN_DECLS - -#if defined (_MSC_VER) && !defined(_WIN64) - -/* Make it clear that we mean the struct with 32-bit st_size and - * 32-bit st_*time fields as that is how the 32-bit GLib DLL normally - * has been compiled. If you get a compiler warning when calling - * g_stat(), do take it seriously and make sure that the type of - * struct stat the code in GLib fills in matches the struct the type - * of struct stat you pass to g_stat(). To avoid hassle, to get file - * attributes just use the GIO API instead which doesn't use struct - * stat. - * - * Sure, it would be nicer to use a struct with 64-bit st_size and - * 64-bit st_*time fields, but changing that now would break ABI. And - * in MinGW, a plain "struct stat" is the one with 32-bit st_size and - * st_*time fields. - */ - -typedef struct _stat32 GStatBuf; - -#else - -typedef struct stat GStatBuf; - -#endif - -#if defined(G_OS_UNIX) && !defined(G_STDIO_NO_WRAP_ON_UNIX) - -/* Just pass on to the system functions, so there's no potential for data - * format mismatches, especially with large file interfaces. - * A few functions can't be handled in this way, since they are not defined - * in a portable system header that we could include here. - */ - -#ifndef __GTK_DOC_IGNORE__ -#define g_chmod chmod -#define g_open open -#define g_creat creat -#define g_rename rename -#define g_mkdir mkdir -#define g_stat stat -#define g_lstat lstat -#define g_remove remove -#define g_fopen fopen -#define g_freopen freopen -#define g_utime utime -#endif - -int g_access (const gchar *filename, - int mode); - -int g_chdir (const gchar *path); - -int g_unlink (const gchar *filename); - -int g_rmdir (const gchar *filename); - -#else /* ! G_OS_UNIX */ - -/* Wrappers for C library functions that take pathname arguments. On - * Unix, the pathname is a file name as it literally is in the file - * system. On well-maintained systems with consistent users who know - * what they are doing and no exchange of files with others this would - * be a well-defined encoding, preferably UTF-8. On Windows, the - * pathname is always in UTF-8, even if that is not the on-disk - * encoding, and not the encoding accepted by the C library or Win32 - * API. - */ - -int g_access (const gchar *filename, - int mode); - -int g_chmod (const gchar *filename, - int mode); - -int g_open (const gchar *filename, - int flags, - int mode); - -int g_creat (const gchar *filename, - int mode); - -int g_rename (const gchar *oldfilename, - const gchar *newfilename); - -int g_mkdir (const gchar *filename, - int mode); - -int g_chdir (const gchar *path); - -int g_stat (const gchar *filename, - GStatBuf *buf); - -int g_lstat (const gchar *filename, - GStatBuf *buf); - -int g_unlink (const gchar *filename); - -int g_remove (const gchar *filename); - -int g_rmdir (const gchar *filename); - -FILE *g_fopen (const gchar *filename, - const gchar *mode); - -FILE *g_freopen (const gchar *filename, - const gchar *mode, - FILE *stream); - -struct utimbuf; /* Don't need the real definition of struct utimbuf when just - * including this header. - */ - -int g_utime (const gchar *filename, - struct utimbuf *utb); - -#endif /* G_OS_UNIX */ - -G_END_DECLS - -#endif /* __G_STDIO_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gstrfuncs.h b/GstreamerHelper/x86/include/glib-2.0/glib/gstrfuncs.h deleted file mode 100644 index 68c89fdb..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gstrfuncs.h +++ /dev/null @@ -1,247 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_STRFUNCS_H__ -#define __G_STRFUNCS_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/* Functions like the ones in that are not affected by locale. */ -typedef enum { - G_ASCII_ALNUM = 1 << 0, - G_ASCII_ALPHA = 1 << 1, - G_ASCII_CNTRL = 1 << 2, - G_ASCII_DIGIT = 1 << 3, - G_ASCII_GRAPH = 1 << 4, - G_ASCII_LOWER = 1 << 5, - G_ASCII_PRINT = 1 << 6, - G_ASCII_PUNCT = 1 << 7, - G_ASCII_SPACE = 1 << 8, - G_ASCII_UPPER = 1 << 9, - G_ASCII_XDIGIT = 1 << 10 -} GAsciiType; - -GLIB_VAR const guint16 * const g_ascii_table; - -#define g_ascii_isalnum(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0) - -#define g_ascii_isalpha(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0) - -#define g_ascii_iscntrl(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_CNTRL) != 0) - -#define g_ascii_isdigit(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0) - -#define g_ascii_isgraph(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_GRAPH) != 0) - -#define g_ascii_islower(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0) - -#define g_ascii_isprint(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0) - -#define g_ascii_ispunct(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_PUNCT) != 0) - -#define g_ascii_isspace(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0) - -#define g_ascii_isupper(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0) - -#define g_ascii_isxdigit(c) \ - ((g_ascii_table[(guchar) (c)] & G_ASCII_XDIGIT) != 0) - -gchar g_ascii_tolower (gchar c) G_GNUC_CONST; -gchar g_ascii_toupper (gchar c) G_GNUC_CONST; - -gint g_ascii_digit_value (gchar c) G_GNUC_CONST; -gint g_ascii_xdigit_value (gchar c) G_GNUC_CONST; - -/* String utility functions that modify a string argument or - * return a constant string that must not be freed. - */ -#define G_STR_DELIMITERS "_-|> <." -gchar* g_strdelimit (gchar *string, - const gchar *delimiters, - gchar new_delimiter); -gchar* g_strcanon (gchar *string, - const gchar *valid_chars, - gchar substitutor); -const gchar * g_strerror (gint errnum) G_GNUC_CONST; -const gchar * g_strsignal (gint signum) G_GNUC_CONST; -gchar * g_strreverse (gchar *string); -gsize g_strlcpy (gchar *dest, - const gchar *src, - gsize dest_size); -gsize g_strlcat (gchar *dest, - const gchar *src, - gsize dest_size); -gchar * g_strstr_len (const gchar *haystack, - gssize haystack_len, - const gchar *needle); -gchar * g_strrstr (const gchar *haystack, - const gchar *needle); -gchar * g_strrstr_len (const gchar *haystack, - gssize haystack_len, - const gchar *needle); - -gboolean g_str_has_suffix (const gchar *str, - const gchar *suffix); -gboolean g_str_has_prefix (const gchar *str, - const gchar *prefix); - -/* String to/from double conversion functions */ - -gdouble g_strtod (const gchar *nptr, - gchar **endptr); -gdouble g_ascii_strtod (const gchar *nptr, - gchar **endptr); -guint64 g_ascii_strtoull (const gchar *nptr, - gchar **endptr, - guint base); -gint64 g_ascii_strtoll (const gchar *nptr, - gchar **endptr, - guint base); -/* 29 bytes should enough for all possible values that - * g_ascii_dtostr can produce. - * Then add 10 for good measure */ -#define G_ASCII_DTOSTR_BUF_SIZE (29 + 10) -gchar * g_ascii_dtostr (gchar *buffer, - gint buf_len, - gdouble d); -gchar * g_ascii_formatd (gchar *buffer, - gint buf_len, - const gchar *format, - gdouble d); - -/* removes leading spaces */ -gchar* g_strchug (gchar *string); -/* removes trailing spaces */ -gchar* g_strchomp (gchar *string); -/* removes leading & trailing spaces */ -#define g_strstrip( string ) g_strchomp (g_strchug (string)) - -gint g_ascii_strcasecmp (const gchar *s1, - const gchar *s2); -gint g_ascii_strncasecmp (const gchar *s1, - const gchar *s2, - gsize n); -gchar* g_ascii_strdown (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar* g_ascii_strup (const gchar *str, - gssize len) G_GNUC_MALLOC; - - -GLIB_DEPRECATED -gint g_strcasecmp (const gchar *s1, - const gchar *s2); -GLIB_DEPRECATED -gint g_strncasecmp (const gchar *s1, - const gchar *s2, - guint n); -GLIB_DEPRECATED -gchar* g_strdown (gchar *string); -GLIB_DEPRECATED -gchar* g_strup (gchar *string); - - -/* String utility functions that return a newly allocated string which - * ought to be freed with g_free from the caller at some point. - */ -gchar* g_strdup (const gchar *str) G_GNUC_MALLOC; -gchar* g_strdup_printf (const gchar *format, - ...) G_GNUC_PRINTF (1, 2) G_GNUC_MALLOC; -gchar* g_strdup_vprintf (const gchar *format, - va_list args) G_GNUC_MALLOC; -gchar* g_strndup (const gchar *str, - gsize n) G_GNUC_MALLOC; -gchar* g_strnfill (gsize length, - gchar fill_char) G_GNUC_MALLOC; -gchar* g_strconcat (const gchar *string1, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; -gchar* g_strjoin (const gchar *separator, - ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; - -/* Make a copy of a string interpreting C string -style escape - * sequences. Inverse of g_strescape. The recognized sequences are \b - * \f \n \r \t \\ \" and the octal format. - */ -gchar* g_strcompress (const gchar *source) G_GNUC_MALLOC; - -/* Copy a string escaping nonprintable characters like in C strings. - * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points - * to a string containing characters that are not to be escaped. - * - * Deprecated API: gchar* g_strescape (const gchar *source); - * Luckily this function wasn't used much, using NULL as second parameter - * provides mostly identical semantics. - */ -gchar* g_strescape (const gchar *source, - const gchar *exceptions) G_GNUC_MALLOC; - -gpointer g_memdup (gconstpointer mem, - guint byte_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(2); - -/* NULL terminated string arrays. - * g_strsplit(), g_strsplit_set() split up string into max_tokens tokens - * at delim and return a newly allocated string array. - * g_strjoinv() concatenates all of str_array's strings, sliding in an - * optional separator, the returned string is newly allocated. - * g_strfreev() frees the array itself and all of its strings. - * g_strdupv() copies a NULL-terminated array of strings - * g_strv_length() returns the length of a NULL-terminated array of strings - */ -gchar** g_strsplit (const gchar *string, - const gchar *delimiter, - gint max_tokens) G_GNUC_MALLOC; -gchar ** g_strsplit_set (const gchar *string, - const gchar *delimiters, - gint max_tokens) G_GNUC_MALLOC; -gchar* g_strjoinv (const gchar *separator, - gchar **str_array) G_GNUC_MALLOC; -void g_strfreev (gchar **str_array); -gchar** g_strdupv (gchar **str_array) G_GNUC_MALLOC; -guint g_strv_length (gchar **str_array); - -gchar* g_stpcpy (gchar *dest, - const char *src); - -G_END_DECLS - -#endif /* __G_STRFUNCS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gstring.h b/GstreamerHelper/x86/include/glib-2.0/glib/gstring.h deleted file mode 100644 index 75434908..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gstring.h +++ /dev/null @@ -1,158 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_STRING_H__ -#define __G_STRING_H__ - -#include -#include -#include -#include /* for G_CAN_INLINE */ - -G_BEGIN_DECLS - -typedef struct _GString GString; - -struct _GString -{ - gchar *str; - gsize len; - gsize allocated_len; -}; - -GString* g_string_new (const gchar *init); -GString* g_string_new_len (const gchar *init, - gssize len); -GString* g_string_sized_new (gsize dfl_size); -gchar* g_string_free (GString *string, - gboolean free_segment); -GLIB_AVAILABLE_IN_2_34 -GBytes* g_string_free_to_bytes (GString *string); -gboolean g_string_equal (const GString *v, - const GString *v2); -guint g_string_hash (const GString *str); -GString* g_string_assign (GString *string, - const gchar *rval); -GString* g_string_truncate (GString *string, - gsize len); -GString* g_string_set_size (GString *string, - gsize len); -GString* g_string_insert_len (GString *string, - gssize pos, - const gchar *val, - gssize len); -GString* g_string_append (GString *string, - const gchar *val); -GString* g_string_append_len (GString *string, - const gchar *val, - gssize len); -GString* g_string_append_c (GString *string, - gchar c); -GString* g_string_append_unichar (GString *string, - gunichar wc); -GString* g_string_prepend (GString *string, - const gchar *val); -GString* g_string_prepend_c (GString *string, - gchar c); -GString* g_string_prepend_unichar (GString *string, - gunichar wc); -GString* g_string_prepend_len (GString *string, - const gchar *val, - gssize len); -GString* g_string_insert (GString *string, - gssize pos, - const gchar *val); -GString* g_string_insert_c (GString *string, - gssize pos, - gchar c); -GString* g_string_insert_unichar (GString *string, - gssize pos, - gunichar wc); -GString* g_string_overwrite (GString *string, - gsize pos, - const gchar *val); -GString* g_string_overwrite_len (GString *string, - gsize pos, - const gchar *val, - gssize len); -GString* g_string_erase (GString *string, - gssize pos, - gssize len); -GString* g_string_ascii_down (GString *string); -GString* g_string_ascii_up (GString *string); -void g_string_vprintf (GString *string, - const gchar *format, - va_list args); -void g_string_printf (GString *string, - const gchar *format, - ...) G_GNUC_PRINTF (2, 3); -void g_string_append_vprintf (GString *string, - const gchar *format, - va_list args); -void g_string_append_printf (GString *string, - const gchar *format, - ...) G_GNUC_PRINTF (2, 3); -GString* g_string_append_uri_escaped (GString *string, - const gchar *unescaped, - const gchar *reserved_chars_allowed, - gboolean allow_utf8); - -/* -- optimize g_strig_append_c --- */ -#ifdef G_CAN_INLINE -static inline GString* -g_string_append_c_inline (GString *gstring, - gchar c) -{ - if (gstring->len + 1 < gstring->allocated_len) - { - gstring->str[gstring->len++] = c; - gstring->str[gstring->len] = 0; - } - else - g_string_insert_c (gstring, -1, c); - return gstring; -} -#define g_string_append_c(gstr,c) g_string_append_c_inline (gstr, c) -#endif /* G_CAN_INLINE */ - - -GLIB_DEPRECATED -GString *g_string_down (GString *string); -GLIB_DEPRECATED -GString *g_string_up (GString *string); - -#ifndef G_DISABLE_DEPRECATED -#define g_string_sprintf g_string_printf -#define g_string_sprintfa g_string_append_printf -#endif - -G_END_DECLS - -#endif /* __G_STRING_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gstringchunk.h b/GstreamerHelper/x86/include/glib-2.0/glib/gstringchunk.h deleted file mode 100644 index 5ab2e8ad..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gstringchunk.h +++ /dev/null @@ -1,53 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_STRINGCHUNK_H__ -#define __G_STRINGCHUNK_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GStringChunk GStringChunk; - -GStringChunk* g_string_chunk_new (gsize size); -void g_string_chunk_free (GStringChunk *chunk); -void g_string_chunk_clear (GStringChunk *chunk); -gchar* g_string_chunk_insert (GStringChunk *chunk, - const gchar *string); -gchar* g_string_chunk_insert_len (GStringChunk *chunk, - const gchar *string, - gssize len); -gchar* g_string_chunk_insert_const (GStringChunk *chunk, - const gchar *string); - -G_END_DECLS - -#endif /* __G_STRING_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gtestutils.h b/GstreamerHelper/x86/include/glib-2.0/glib/gtestutils.h deleted file mode 100644 index 967fa63b..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gtestutils.h +++ /dev/null @@ -1,318 +0,0 @@ -/* GLib testing utilities - * Copyright (C) 2007 Imendio AB - * Authors: Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TEST_UTILS_H__ -#define __G_TEST_UTILS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct GTestCase GTestCase; -typedef struct GTestSuite GTestSuite; -typedef void (*GTestFunc) (void); -typedef void (*GTestDataFunc) (gconstpointer user_data); -typedef void (*GTestFixtureFunc) (gpointer fixture, - gconstpointer user_data); - -/* assertion API */ -#define g_assert_cmpstr(s1, cmp, s2) do { const char *__s1 = (s1), *__s2 = (s2); \ - if (g_strcmp0 (__s1, __s2) cmp 0) ; else \ - g_assertion_message_cmpstr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #s1 " " #cmp " " #s2, __s1, #cmp, __s2); } while (0) -#define g_assert_cmpint(n1, cmp, n2) do { gint64 __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); } while (0) -#define g_assert_cmpuint(n1, cmp, n2) do { guint64 __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); } while (0) -#define g_assert_cmphex(n1, cmp, n2) do { guint64 __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'x'); } while (0) -#define g_assert_cmpfloat(n1,cmp,n2) do { long double __n1 = (n1), __n2 = (n2); \ - if (__n1 cmp __n2) ; else \ - g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'f'); } while (0) -#define g_assert_no_error(err) do { if (err) \ - g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #err, err, 0, 0); } while (0) -#define g_assert_error(err, dom, c) do { if (!err || (err)->domain != dom || (err)->code != c) \ - g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #err, err, dom, c); } while (0) -#ifdef G_DISABLE_ASSERT -#define g_assert_not_reached() do { (void) 0; } while (0) -#define g_assert(expr) do { (void) 0; } while (0) -#else /* !G_DISABLE_ASSERT */ -#define g_assert_not_reached() do { g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } while (0) -#define g_assert(expr) do { if G_LIKELY (expr) ; else \ - g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #expr); } while (0) -#endif /* !G_DISABLE_ASSERT */ - -int g_strcmp0 (const char *str1, - const char *str2); - -/* report performance results */ -void g_test_minimized_result (double minimized_quantity, - const char *format, - ...) G_GNUC_PRINTF (2, 3); -void g_test_maximized_result (double maximized_quantity, - const char *format, - ...) G_GNUC_PRINTF (2, 3); - -/* initialize testing framework */ -void g_test_init (int *argc, - char ***argv, - ...); -/* query testing framework config */ -#define g_test_quick() (g_test_config_vars->test_quick) -#define g_test_slow() (!g_test_config_vars->test_quick) -#define g_test_thorough() (!g_test_config_vars->test_quick) -#define g_test_perf() (g_test_config_vars->test_perf) -#define g_test_verbose() (g_test_config_vars->test_verbose) -#define g_test_quiet() (g_test_config_vars->test_quiet) -#define g_test_undefined() (g_test_config_vars->test_undefined) -/* run all tests under toplevel suite (path: /) */ -int g_test_run (void); -/* hook up a test functions under test path */ -void g_test_add_func (const char *testpath, - GTestFunc test_func); - -void g_test_add_data_func (const char *testpath, - gconstpointer test_data, - GTestDataFunc test_func); - -GLIB_AVAILABLE_IN_2_34 -void g_test_add_data_func_full (const char *testpath, - gpointer test_data, - GTestDataFunc test_func, - GDestroyNotify data_free_func); - -/* tell about failure */ -void g_test_fail (void); - -/* hook up a test with fixture under test path */ -#define g_test_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \ - G_STMT_START { \ - void (*add_vtable) (const char*, \ - gsize, \ - gconstpointer, \ - void (*) (Fixture*, gconstpointer), \ - void (*) (Fixture*, gconstpointer), \ - void (*) (Fixture*, gconstpointer)) = (void (*) (const gchar *, gsize, gconstpointer, void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer))) g_test_add_vtable; \ - add_vtable \ - (testpath, sizeof (Fixture), tdata, fsetup, ftest, fteardown); \ - } G_STMT_END - -/* add test messages to the test report */ -void g_test_message (const char *format, - ...) G_GNUC_PRINTF (1, 2); -void g_test_bug_base (const char *uri_pattern); -void g_test_bug (const char *bug_uri_snippet); -/* measure test timings */ -void g_test_timer_start (void); -double g_test_timer_elapsed (void); /* elapsed seconds */ -double g_test_timer_last (void); /* repeat last elapsed() result */ - -/* automatically g_free or g_object_unref upon teardown */ -void g_test_queue_free (gpointer gfree_pointer); -void g_test_queue_destroy (GDestroyNotify destroy_func, - gpointer destroy_data); -#define g_test_queue_unref(gobject) g_test_queue_destroy (g_object_unref, gobject) - -/* test traps are guards used around forked tests */ -typedef enum { - G_TEST_TRAP_SILENCE_STDOUT = 1 << 7, - G_TEST_TRAP_SILENCE_STDERR = 1 << 8, - G_TEST_TRAP_INHERIT_STDIN = 1 << 9 -} GTestTrapFlags; -gboolean g_test_trap_fork (guint64 usec_timeout, - GTestTrapFlags test_trap_flags); -gboolean g_test_trap_has_passed (void); -gboolean g_test_trap_reached_timeout (void); -#define g_test_trap_assert_passed() g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 0, 0) -#define g_test_trap_assert_failed() g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 1, 0) -#define g_test_trap_assert_stdout(soutpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 2, soutpattern) -#define g_test_trap_assert_stdout_unmatched(soutpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 3, soutpattern) -#define g_test_trap_assert_stderr(serrpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 4, serrpattern) -#define g_test_trap_assert_stderr_unmatched(serrpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 5, serrpattern) - -/* provide seed-able random numbers for tests */ -#define g_test_rand_bit() (0 != (g_test_rand_int() & (1 << 15))) -gint32 g_test_rand_int (void); -gint32 g_test_rand_int_range (gint32 begin, - gint32 end); -double g_test_rand_double (void); -double g_test_rand_double_range (double range_start, - double range_end); - -/* semi-internal API */ -GTestCase* g_test_create_case (const char *test_name, - gsize data_size, - gconstpointer test_data, - GTestFixtureFunc data_setup, - GTestFixtureFunc data_test, - GTestFixtureFunc data_teardown); -GTestSuite* g_test_create_suite (const char *suite_name); -GTestSuite* g_test_get_root (void); -void g_test_suite_add (GTestSuite *suite, - GTestCase *test_case); -void g_test_suite_add_suite (GTestSuite *suite, - GTestSuite *nestedsuite); -int g_test_run_suite (GTestSuite *suite); - -/* internal ABI */ -void g_test_trap_assertions (const char *domain, - const char *file, - int line, - const char *func, - guint64 assertion_flags, /* 0-pass, 1-fail, 2-outpattern, 4-errpattern */ - const char *pattern); -void g_assertion_message (const char *domain, - const char *file, - int line, - const char *func, - const char *message) G_GNUC_NORETURN; -void g_assertion_message_expr (const char *domain, - const char *file, - int line, - const char *func, - const char *expr) G_GNUC_NORETURN; -void g_assertion_message_cmpstr (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - const char *arg1, - const char *cmp, - const char *arg2) G_GNUC_NORETURN; -void g_assertion_message_cmpnum (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - long double arg1, - const char *cmp, - long double arg2, - char numtype) G_GNUC_NORETURN; -void g_assertion_message_error (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - const GError *error, - GQuark error_domain, - int error_code) G_GNUC_NORETURN; -void g_test_add_vtable (const char *testpath, - gsize data_size, - gconstpointer test_data, - GTestFixtureFunc data_setup, - GTestFixtureFunc data_test, - GTestFixtureFunc data_teardown); -typedef struct { - gboolean test_initialized; - gboolean test_quick; /* disable thorough tests */ - gboolean test_perf; /* run performance tests */ - gboolean test_verbose; /* extra info */ - gboolean test_quiet; /* reduce output */ - gboolean test_undefined; /* run tests that are meant to assert */ -} GTestConfig; -GLIB_VAR const GTestConfig * const g_test_config_vars; - -/* internal logging API */ -typedef enum { - G_TEST_LOG_NONE, - G_TEST_LOG_ERROR, /* s:msg */ - G_TEST_LOG_START_BINARY, /* s:binaryname s:seed */ - G_TEST_LOG_LIST_CASE, /* s:testpath */ - G_TEST_LOG_SKIP_CASE, /* s:testpath */ - G_TEST_LOG_START_CASE, /* s:testpath */ - G_TEST_LOG_STOP_CASE, /* d:status d:nforks d:elapsed */ - G_TEST_LOG_MIN_RESULT, /* s:blurb d:result */ - G_TEST_LOG_MAX_RESULT, /* s:blurb d:result */ - G_TEST_LOG_MESSAGE /* s:blurb */ -} GTestLogType; - -typedef struct { - GTestLogType log_type; - guint n_strings; - gchar **strings; /* NULL terminated */ - guint n_nums; - long double *nums; -} GTestLogMsg; -typedef struct { - /*< private >*/ - GString *data; - GSList *msgs; -} GTestLogBuffer; - -const char* g_test_log_type_name (GTestLogType log_type); -GTestLogBuffer* g_test_log_buffer_new (void); -void g_test_log_buffer_free (GTestLogBuffer *tbuffer); -void g_test_log_buffer_push (GTestLogBuffer *tbuffer, - guint n_bytes, - const guint8 *bytes); -GTestLogMsg* g_test_log_buffer_pop (GTestLogBuffer *tbuffer); -void g_test_log_msg_free (GTestLogMsg *tmsg); - -/** - * GTestLogFatalFunc: - * @log_domain: the log domain of the message - * @log_level: the log level of the message (including the fatal and recursion flags) - * @message: the message to process - * @user_data: user data, set in g_test_log_set_fatal_handler() - * - * Specifies the prototype of fatal log handler functions. - * - * Return value: %TRUE if the program should abort, %FALSE otherwise - * - * Since: 2.22 - */ -typedef gboolean (*GTestLogFatalFunc) (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data); -void -g_test_log_set_fatal_handler (GTestLogFatalFunc log_func, - gpointer user_data); - -void g_test_expect_message (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *pattern); -void g_test_assert_expected_messages_internal (const char *domain, - const char *file, - int line, - const char *func); - -#define g_test_assert_expected_messages() g_test_assert_expected_messages_internal (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC) - -G_END_DECLS - -#endif /* __G_TEST_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gthread.h b/GstreamerHelper/x86/include/glib-2.0/glib/gthread.h deleted file mode 100644 index fc927da6..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gthread.h +++ /dev/null @@ -1,231 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THREAD_H__ -#define __G_THREAD_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_THREAD_ERROR g_thread_error_quark () -GQuark g_thread_error_quark (void); - -typedef enum -{ - G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */ -} GThreadError; - -typedef gpointer (*GThreadFunc) (gpointer data); - -typedef struct _GThread GThread; - -typedef union _GMutex GMutex; -typedef struct _GRecMutex GRecMutex; -typedef struct _GRWLock GRWLock; -typedef struct _GCond GCond; -typedef struct _GPrivate GPrivate; -typedef struct _GOnce GOnce; - -union _GMutex -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -struct _GRWLock -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -struct _GCond -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -struct _GRecMutex -{ - /*< private >*/ - gpointer p; - guint i[2]; -}; - -#define G_PRIVATE_INIT(notify) { NULL, (notify), { NULL, NULL } } -struct _GPrivate -{ - /*< private >*/ - gpointer p; - GDestroyNotify notify; - gpointer future[2]; -}; - -typedef enum -{ - G_ONCE_STATUS_NOTCALLED, - G_ONCE_STATUS_PROGRESS, - G_ONCE_STATUS_READY -} GOnceStatus; - -#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL } -struct _GOnce -{ - volatile GOnceStatus status; - volatile gpointer retval; -}; - -#define G_LOCK_NAME(name) g__ ## name ## _lock -#define G_LOCK_DEFINE_STATIC(name) static G_LOCK_DEFINE (name) -#define G_LOCK_DEFINE(name) GMutex G_LOCK_NAME (name) -#define G_LOCK_EXTERN(name) extern GMutex G_LOCK_NAME (name) - -#ifdef G_DEBUG_LOCKS -# define G_LOCK(name) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ - "file %s: line %d (%s): locking: %s ", \ - __FILE__, __LINE__, G_STRFUNC, \ - #name); \ - g_mutex_lock (&G_LOCK_NAME (name)); \ - }G_STMT_END -# define G_UNLOCK(name) G_STMT_START{ \ - g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ - "file %s: line %d (%s): unlocking: %s ", \ - __FILE__, __LINE__, G_STRFUNC, \ - #name); \ - g_mutex_unlock (&G_LOCK_NAME (name)); \ - }G_STMT_END -# define G_TRYLOCK(name) \ - (g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \ - "file %s: line %d (%s): try locking: %s ", \ - __FILE__, __LINE__, G_STRFUNC, \ - #name), g_mutex_trylock (&G_LOCK_NAME (name))) -#else /* !G_DEBUG_LOCKS */ -# define G_LOCK(name) g_mutex_lock (&G_LOCK_NAME (name)) -# define G_UNLOCK(name) g_mutex_unlock (&G_LOCK_NAME (name)) -# define G_TRYLOCK(name) g_mutex_trylock (&G_LOCK_NAME (name)) -#endif /* !G_DEBUG_LOCKS */ - -GThread * g_thread_ref (GThread *thread); -void g_thread_unref (GThread *thread); -GThread * g_thread_new (const gchar *name, - GThreadFunc func, - gpointer data); -GThread * g_thread_try_new (const gchar *name, - GThreadFunc func, - gpointer data, - GError **error); -GThread * g_thread_self (void); -void g_thread_exit (gpointer retval); -gpointer g_thread_join (GThread *thread); -void g_thread_yield (void); - - -void g_mutex_init (GMutex *mutex); -void g_mutex_clear (GMutex *mutex); -void g_mutex_lock (GMutex *mutex); -gboolean g_mutex_trylock (GMutex *mutex); -void g_mutex_unlock (GMutex *mutex); - -void g_rw_lock_init (GRWLock *rw_lock); -void g_rw_lock_clear (GRWLock *rw_lock); -void g_rw_lock_writer_lock (GRWLock *rw_lock); -gboolean g_rw_lock_writer_trylock (GRWLock *rw_lock); -void g_rw_lock_writer_unlock (GRWLock *rw_lock); -void g_rw_lock_reader_lock (GRWLock *rw_lock); -gboolean g_rw_lock_reader_trylock (GRWLock *rw_lock); -void g_rw_lock_reader_unlock (GRWLock *rw_lock); - -void g_rec_mutex_init (GRecMutex *rec_mutex); -void g_rec_mutex_clear (GRecMutex *rec_mutex); -void g_rec_mutex_lock (GRecMutex *rec_mutex); -gboolean g_rec_mutex_trylock (GRecMutex *rec_mutex); -void g_rec_mutex_unlock (GRecMutex *rec_mutex); - -void g_cond_init (GCond *cond); -void g_cond_clear (GCond *cond); -void g_cond_wait (GCond *cond, - GMutex *mutex); -void g_cond_signal (GCond *cond); -void g_cond_broadcast (GCond *cond); -gboolean g_cond_wait_until (GCond *cond, - GMutex *mutex, - gint64 end_time); - -gpointer g_private_get (GPrivate *key); -void g_private_set (GPrivate *key, - gpointer value); -void g_private_replace (GPrivate *key, - gpointer value); - -gpointer g_once_impl (GOnce *once, - GThreadFunc func, - gpointer arg); -gboolean g_once_init_enter (volatile void *location); -void g_once_init_leave (volatile void *location, - gsize result); - -#ifdef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED -# define g_once(once, func, arg) g_once_impl ((once), (func), (arg)) -#else /* !G_ATOMIC_OP_MEMORY_BARRIER_NEEDED*/ -# define g_once(once, func, arg) \ - (((once)->status == G_ONCE_STATUS_READY) ? \ - (once)->retval : \ - g_once_impl ((once), (func), (arg))) -#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */ - -#ifdef __GNUC__ -# define g_once_init_enter(location) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(location) : 0); \ - (!g_atomic_pointer_get (location) && \ - g_once_init_enter (location)); \ - })) -# define g_once_init_leave(location, result) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer)); \ - (void) (0 ? *(location) = (result) : 0); \ - g_once_init_leave ((location), (gsize) (result)); \ - })) -#else -# define g_once_init_enter(location) \ - (g_once_init_enter((location))) -# define g_once_init_leave(location, result) \ - (g_once_init_leave((location), (gsize) (result))) -#endif - -G_END_DECLS - -#endif /* __G_THREAD_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gthreadpool.h b/GstreamerHelper/x86/include/glib-2.0/glib/gthreadpool.h deleted file mode 100644 index 3a1f2980..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gthreadpool.h +++ /dev/null @@ -1,80 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_THREADPOOL_H__ -#define __G_THREADPOOL_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GThreadPool GThreadPool; - -/* Thread Pools - */ - -struct _GThreadPool -{ - GFunc func; - gpointer user_data; - gboolean exclusive; -}; - -GThreadPool * g_thread_pool_new (GFunc func, - gpointer user_data, - gint max_threads, - gboolean exclusive, - GError **error); -void g_thread_pool_free (GThreadPool *pool, - gboolean immediate, - gboolean wait_); -gboolean g_thread_pool_push (GThreadPool *pool, - gpointer data, - GError **error); -guint g_thread_pool_unprocessed (GThreadPool *pool); -void g_thread_pool_set_sort_function (GThreadPool *pool, - GCompareDataFunc func, - gpointer user_data); -gboolean g_thread_pool_set_max_threads (GThreadPool *pool, - gint max_threads, - GError **error); -gint g_thread_pool_get_max_threads (GThreadPool *pool); -guint g_thread_pool_get_num_threads (GThreadPool *pool); - -void g_thread_pool_set_max_unused_threads (gint max_threads); -gint g_thread_pool_get_max_unused_threads (void); -guint g_thread_pool_get_num_unused_threads (void); -void g_thread_pool_stop_unused_threads (void); -void g_thread_pool_set_max_idle_time (guint interval); -guint g_thread_pool_get_max_idle_time (void); - -G_END_DECLS - -#endif /* __G_THREADPOOL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gtimer.h b/GstreamerHelper/x86/include/glib-2.0/glib/gtimer.h deleted file mode 100644 index b927fc37..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gtimer.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TIMER_H__ -#define __G_TIMER_H__ - -#include - -G_BEGIN_DECLS - -/* Timer - */ - -/* microseconds per second */ -typedef struct _GTimer GTimer; - -#define G_USEC_PER_SEC 1000000 - -GTimer* g_timer_new (void); -void g_timer_destroy (GTimer *timer); -void g_timer_start (GTimer *timer); -void g_timer_stop (GTimer *timer); -void g_timer_reset (GTimer *timer); -void g_timer_continue (GTimer *timer); -gdouble g_timer_elapsed (GTimer *timer, - gulong *microseconds); - -void g_usleep (gulong microseconds); - -void g_time_val_add (GTimeVal *time_, - glong microseconds); -gboolean g_time_val_from_iso8601 (const gchar *iso_date, - GTimeVal *time_); -gchar* g_time_val_to_iso8601 (GTimeVal *time_) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __G_TIMER_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gtimezone.h b/GstreamerHelper/x86/include/glib-2.0/glib/gtimezone.h deleted file mode 100644 index c877e8f4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gtimezone.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright © 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TIME_ZONE_H__ -#define __G_TIME_ZONE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GTimeZone GTimeZone; - -/** - * GTimeType: - * @G_TIME_TYPE_STANDARD: the time is in local standard time - * @G_TIME_TYPE_DAYLIGHT: the time is in local daylight time - * @G_TIME_TYPE_UNIVERSAL: the time is in UTC - * - * Disambiguates a given time in two ways. - * - * First, specifies if the given time is in universal or local time. - * - * Second, if the time is in local time, specifies if it is local - * standard time or local daylight time. This is important for the case - * where the same local time occurs twice (during daylight savings time - * transitions, for example). - */ -typedef enum -{ - G_TIME_TYPE_STANDARD, - G_TIME_TYPE_DAYLIGHT, - G_TIME_TYPE_UNIVERSAL -} GTimeType; - -GTimeZone * g_time_zone_new (const gchar *identifier); -GTimeZone * g_time_zone_new_utc (void); -GTimeZone * g_time_zone_new_local (void); - -GTimeZone * g_time_zone_ref (GTimeZone *tz); -void g_time_zone_unref (GTimeZone *tz); - -gint g_time_zone_find_interval (GTimeZone *tz, - GTimeType type, - gint64 time_); - -gint g_time_zone_adjust_time (GTimeZone *tz, - GTimeType type, - gint64 *time_); - -const gchar * g_time_zone_get_abbreviation (GTimeZone *tz, - gint interval); -gint32 g_time_zone_get_offset (GTimeZone *tz, - gint interval); -gboolean g_time_zone_is_dst (GTimeZone *tz, - gint interval); - -G_END_DECLS - -#endif /* __G_TIME_ZONE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gtrashstack.h b/GstreamerHelper/x86/include/glib-2.0/glib/gtrashstack.h deleted file mode 100644 index 3f226fe4..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gtrashstack.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TRASH_STACK_H__ -#define __G_TRASH_STACK_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GTrashStack GTrashStack; -struct _GTrashStack -{ - GTrashStack *next; -}; - -G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p, - gpointer data_p); -G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p); -G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p); -G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p); - -#if defined (G_CAN_INLINE) || defined (__G_TRASH_STACK_C__) - -G_INLINE_FUNC void -g_trash_stack_push (GTrashStack **stack_p, - gpointer data_p) -{ - GTrashStack *data = (GTrashStack *) data_p; - - data->next = *stack_p; - *stack_p = data; -} -G_INLINE_FUNC gpointer -g_trash_stack_pop (GTrashStack **stack_p) -{ - GTrashStack *data; - - data = *stack_p; - if (data) - { - *stack_p = data->next; - /* NULLify private pointer here, most platforms store NULL as - * subsequent 0 bytes - */ - data->next = NULL; - } - - return data; -} -G_INLINE_FUNC gpointer -g_trash_stack_peek (GTrashStack **stack_p) -{ - GTrashStack *data; - - data = *stack_p; - - return data; -} -G_INLINE_FUNC guint -g_trash_stack_height (GTrashStack **stack_p) -{ - GTrashStack *data; - guint i = 0; - - for (data = *stack_p; data; data = data->next) - i++; - - return i; -} - -#endif /* G_CAN_INLINE || __G_TRASH_STACK_C__ */ - -G_END_DECLS - -#endif /* __G_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gtree.h b/GstreamerHelper/x86/include/glib-2.0/glib/gtree.h deleted file mode 100644 index e17a5182..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gtree.h +++ /dev/null @@ -1,90 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TREE_H__ -#define __G_TREE_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GTree GTree; - -typedef gboolean (*GTraverseFunc) (gpointer key, - gpointer value, - gpointer data); - -/* Balanced binary trees - */ -GTree* g_tree_new (GCompareFunc key_compare_func); -GTree* g_tree_new_with_data (GCompareDataFunc key_compare_func, - gpointer key_compare_data); -GTree* g_tree_new_full (GCompareDataFunc key_compare_func, - gpointer key_compare_data, - GDestroyNotify key_destroy_func, - GDestroyNotify value_destroy_func); -GTree* g_tree_ref (GTree *tree); -void g_tree_unref (GTree *tree); -void g_tree_destroy (GTree *tree); -void g_tree_insert (GTree *tree, - gpointer key, - gpointer value); -void g_tree_replace (GTree *tree, - gpointer key, - gpointer value); -gboolean g_tree_remove (GTree *tree, - gconstpointer key); -gboolean g_tree_steal (GTree *tree, - gconstpointer key); -gpointer g_tree_lookup (GTree *tree, - gconstpointer key); -gboolean g_tree_lookup_extended (GTree *tree, - gconstpointer lookup_key, - gpointer *orig_key, - gpointer *value); -void g_tree_foreach (GTree *tree, - GTraverseFunc func, - gpointer user_data); - -GLIB_DEPRECATED -void g_tree_traverse (GTree *tree, - GTraverseFunc traverse_func, - GTraverseType traverse_type, - gpointer user_data); - -gpointer g_tree_search (GTree *tree, - GCompareFunc search_func, - gconstpointer user_data); -gint g_tree_height (GTree *tree); -gint g_tree_nnodes (GTree *tree); - -G_END_DECLS - -#endif /* __G_TREE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gtypes.h b/GstreamerHelper/x86/include/glib-2.0/glib/gtypes.h deleted file mode 100644 index 7e4c8eab..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gtypes.h +++ /dev/null @@ -1,484 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPES_H__ -#define __G_TYPES_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* Provide type definitions for commonly used types. - * These are useful because a "gint8" can be adjusted - * to be 1 byte (8 bits) on all platforms. Similarly and - * more importantly, "gint32" can be adjusted to be - * 4 bytes (32 bits) on all platforms. - */ - -typedef char gchar; -typedef short gshort; -typedef long glong; -typedef int gint; -typedef gint gboolean; - -typedef unsigned char guchar; -typedef unsigned short gushort; -typedef unsigned long gulong; -typedef unsigned int guint; - -typedef float gfloat; -typedef double gdouble; - -/* Define min and max constants for the fixed size numerical types */ -#define G_MININT8 ((gint8) 0x80) -#define G_MAXINT8 ((gint8) 0x7f) -#define G_MAXUINT8 ((guint8) 0xff) - -#define G_MININT16 ((gint16) 0x8000) -#define G_MAXINT16 ((gint16) 0x7fff) -#define G_MAXUINT16 ((guint16) 0xffff) - -#define G_MININT32 ((gint32) 0x80000000) -#define G_MAXINT32 ((gint32) 0x7fffffff) -#define G_MAXUINT32 ((guint32) 0xffffffff) - -#define G_MININT64 ((gint64) G_GINT64_CONSTANT(0x8000000000000000)) -#define G_MAXINT64 G_GINT64_CONSTANT(0x7fffffffffffffff) -#define G_MAXUINT64 G_GINT64_CONSTANT(0xffffffffffffffffU) - -typedef void* gpointer; -typedef const void *gconstpointer; - -typedef gint (*GCompareFunc) (gconstpointer a, - gconstpointer b); -typedef gint (*GCompareDataFunc) (gconstpointer a, - gconstpointer b, - gpointer user_data); -typedef gboolean (*GEqualFunc) (gconstpointer a, - gconstpointer b); -typedef void (*GDestroyNotify) (gpointer data); -typedef void (*GFunc) (gpointer data, - gpointer user_data); -typedef guint (*GHashFunc) (gconstpointer key); -typedef void (*GHFunc) (gpointer key, - gpointer value, - gpointer user_data); - -/** - * GFreeFunc: - * @data: a data pointer - * - * Declares a type of function which takes an arbitrary - * data pointer argument and has no return value. It is - * not currently used in GLib or GTK+. - */ -typedef void (*GFreeFunc) (gpointer data); - -/** - * GTranslateFunc: - * @str: the untranslated string - * @data: user data specified when installing the function, e.g. - * in g_option_group_set_translate_func() - * - * The type of functions which are used to translate user-visible - * strings, for output. - * - * Returns: a translation of the string for the current locale. - * The returned string is owned by GLib and must not be freed. - */ -typedef const gchar * (*GTranslateFunc) (const gchar *str, - gpointer data); - - -/* Define some mathematical constants that aren't available - * symbolically in some strict ISO C implementations. - * - * Note that the large number of digits used in these definitions - * doesn't imply that GLib or current computers in general would be - * able to handle floating point numbers with an accuracy like this. - * It's mostly an exercise in futility and future proofing. For - * extended precision floating point support, look somewhere else - * than GLib. - */ -#define G_E 2.7182818284590452353602874713526624977572470937000 -#define G_LN2 0.69314718055994530941723212145817656807550013436026 -#define G_LN10 2.3025850929940456840179914546843642076011014886288 -#define G_PI 3.1415926535897932384626433832795028841971693993751 -#define G_PI_2 1.5707963267948966192313216916397514420985846996876 -#define G_PI_4 0.78539816339744830961566084581987572104929234984378 -#define G_SQRT2 1.4142135623730950488016887242096980785696718753769 - -/* Portable endian checks and conversions - * - * glibconfig.h defines G_BYTE_ORDER which expands to one of - * the below macros. - */ -#define G_LITTLE_ENDIAN 1234 -#define G_BIG_ENDIAN 4321 -#define G_PDP_ENDIAN 3412 /* unused, need specific PDP check */ - - -/* Basic bit swapping functions - */ -#define GUINT16_SWAP_LE_BE_CONSTANT(val) ((guint16) ( \ - (guint16) ((guint16) (val) >> 8) | \ - (guint16) ((guint16) (val) << 8))) - -#define GUINT32_SWAP_LE_BE_CONSTANT(val) ((guint32) ( \ - (((guint32) (val) & (guint32) 0x000000ffU) << 24) | \ - (((guint32) (val) & (guint32) 0x0000ff00U) << 8) | \ - (((guint32) (val) & (guint32) 0x00ff0000U) >> 8) | \ - (((guint32) (val) & (guint32) 0xff000000U) >> 24))) - -#define GUINT64_SWAP_LE_BE_CONSTANT(val) ((guint64) ( \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x00000000000000ffU)) << 56) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x000000000000ff00U)) << 40) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x0000000000ff0000U)) << 24) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x00000000ff000000U)) << 8) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x000000ff00000000U)) >> 8) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x0000ff0000000000U)) >> 24) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0x00ff000000000000U)) >> 40) | \ - (((guint64) (val) & \ - (guint64) G_GINT64_CONSTANT (0xff00000000000000U)) >> 56))) - -/* Arch specific stuff for speed - */ -#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) - -# if __GNUC__ >= 4 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 3 -# define GUINT32_SWAP_LE_BE(val) ((guint32) __builtin_bswap32 ((gint32) val)) -# define GUINT64_SWAP_LE_BE(val) ((guint64) __builtin_bswap64 ((gint64) val)) -# endif - -# if defined (__i386__) -# define GUINT16_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ register guint16 __v, __x = ((guint16) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# if !defined (__i486__) && !defined (__i586__) \ - && !defined (__pentium__) && !defined (__i686__) \ - && !defined (__pentiumpro__) && !defined (__pentium4__) -# define GUINT32_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("rorw $8, %w0\n\t" \ - "rorl $16, %0\n\t" \ - "rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# else /* 486 and higher has bswap */ -# define GUINT32_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("bswap %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) -# endif /* processor specific 32-bit stuff */ -# define GUINT64_SWAP_LE_BE_IA32(val) \ - (G_GNUC_EXTENSION \ - ({ union { guint64 __ll; \ - guint32 __l[2]; } __w, __r; \ - __w.__ll = ((guint64) (val)); \ - if (__builtin_constant_p (__w.__ll)) \ - __r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (__w.__ll); \ - else \ - { \ - __r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]); \ - __r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]); \ - } \ - __r.__ll; })) - /* Possibly just use the constant version and let gcc figure it out? */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA32 (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA32 (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA32 (val)) -# endif -# elif defined (__ia64__) -# define GUINT16_SWAP_LE_BE_IA64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint16 __v, __x = ((guint16) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define GUINT32_SWAP_LE_BE_IA64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define GUINT64_SWAP_LE_BE_IA64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint64 __v, __x = ((guint64) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \ - : "=r" (__v) \ - : "r" (__x)); \ - __v; })) -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA64 (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA64 (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA64 (val)) -# endif -# elif defined (__x86_64__) -# define GUINT32_SWAP_LE_BE_X86_64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint32 __v, __x = ((guint32) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("bswapl %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) -# define GUINT64_SWAP_LE_BE_X86_64(val) \ - (G_GNUC_EXTENSION \ - ({ register guint64 __v, __x = ((guint64) (val)); \ - if (__builtin_constant_p (__x)) \ - __v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \ - else \ - __asm__ ("bswapq %0" \ - : "=r" (__v) \ - : "0" (__x)); \ - __v; })) - /* gcc seems to figure out optimal code for this on its own */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86_64 (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86_64 (val)) -# endif -# else /* generic gcc */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val)) -# ifndef GUINT32_SWAP_LE_BE -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val)) -# endif -# ifndef GUINT64_SWAP_LE_BE -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val)) -# endif -# endif -#else /* generic */ -# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val)) -# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val)) -# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val)) -#endif /* generic */ - -#define GUINT16_SWAP_LE_PDP(val) ((guint16) (val)) -#define GUINT16_SWAP_BE_PDP(val) (GUINT16_SWAP_LE_BE (val)) -#define GUINT32_SWAP_LE_PDP(val) ((guint32) ( \ - (((guint32) (val) & (guint32) 0x0000ffffU) << 16) | \ - (((guint32) (val) & (guint32) 0xffff0000U) >> 16))) -#define GUINT32_SWAP_BE_PDP(val) ((guint32) ( \ - (((guint32) (val) & (guint32) 0x00ff00ffU) << 8) | \ - (((guint32) (val) & (guint32) 0xff00ff00U) >> 8))) - -/* The G*_TO_?E() macros are defined in glibconfig.h. - * The transformation is symmetric, so the FROM just maps to the TO. - */ -#define GINT16_FROM_LE(val) (GINT16_TO_LE (val)) -#define GUINT16_FROM_LE(val) (GUINT16_TO_LE (val)) -#define GINT16_FROM_BE(val) (GINT16_TO_BE (val)) -#define GUINT16_FROM_BE(val) (GUINT16_TO_BE (val)) -#define GINT32_FROM_LE(val) (GINT32_TO_LE (val)) -#define GUINT32_FROM_LE(val) (GUINT32_TO_LE (val)) -#define GINT32_FROM_BE(val) (GINT32_TO_BE (val)) -#define GUINT32_FROM_BE(val) (GUINT32_TO_BE (val)) - -#define GINT64_FROM_LE(val) (GINT64_TO_LE (val)) -#define GUINT64_FROM_LE(val) (GUINT64_TO_LE (val)) -#define GINT64_FROM_BE(val) (GINT64_TO_BE (val)) -#define GUINT64_FROM_BE(val) (GUINT64_TO_BE (val)) - -#define GLONG_FROM_LE(val) (GLONG_TO_LE (val)) -#define GULONG_FROM_LE(val) (GULONG_TO_LE (val)) -#define GLONG_FROM_BE(val) (GLONG_TO_BE (val)) -#define GULONG_FROM_BE(val) (GULONG_TO_BE (val)) - -#define GINT_FROM_LE(val) (GINT_TO_LE (val)) -#define GUINT_FROM_LE(val) (GUINT_TO_LE (val)) -#define GINT_FROM_BE(val) (GINT_TO_BE (val)) -#define GUINT_FROM_BE(val) (GUINT_TO_BE (val)) - -#define GSIZE_FROM_LE(val) (GSIZE_TO_LE (val)) -#define GSSIZE_FROM_LE(val) (GSSIZE_TO_LE (val)) -#define GSIZE_FROM_BE(val) (GSIZE_TO_BE (val)) -#define GSSIZE_FROM_BE(val) (GSSIZE_TO_BE (val)) - - -/* Portable versions of host-network order stuff - */ -#define g_ntohl(val) (GUINT32_FROM_BE (val)) -#define g_ntohs(val) (GUINT16_FROM_BE (val)) -#define g_htonl(val) (GUINT32_TO_BE (val)) -#define g_htons(val) (GUINT16_TO_BE (val)) - -/* IEEE Standard 754 Single Precision Storage Format (gfloat): - * - * 31 30 23 22 0 - * +--------+---------------+---------------+ - * | s 1bit | e[30:23] 8bit | f[22:0] 23bit | - * +--------+---------------+---------------+ - * B0------------------->B1------->B2-->B3--> - * - * IEEE Standard 754 Double Precision Storage Format (gdouble): - * - * 63 62 52 51 32 31 0 - * +--------+----------------+----------------+ +---------------+ - * | s 1bit | e[62:52] 11bit | f[51:32] 20bit | | f[31:0] 32bit | - * +--------+----------------+----------------+ +---------------+ - * B0--------------->B1---------->B2--->B3----> B4->B5->B6->B7-> - */ -/* subtract from biased_exponent to form base2 exponent (normal numbers) */ -typedef union _GDoubleIEEE754 GDoubleIEEE754; -typedef union _GFloatIEEE754 GFloatIEEE754; -#define G_IEEE754_FLOAT_BIAS (127) -#define G_IEEE754_DOUBLE_BIAS (1023) -/* multiply with base2 exponent to get base10 exponent (normal numbers) */ -#define G_LOG_2_BASE_10 (0.30102999566398119521) -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -union _GFloatIEEE754 -{ - gfloat v_float; - struct { - guint mantissa : 23; - guint biased_exponent : 8; - guint sign : 1; - } mpn; -}; -union _GDoubleIEEE754 -{ - gdouble v_double; - struct { - guint mantissa_low : 32; - guint mantissa_high : 20; - guint biased_exponent : 11; - guint sign : 1; - } mpn; -}; -#elif G_BYTE_ORDER == G_BIG_ENDIAN -union _GFloatIEEE754 -{ - gfloat v_float; - struct { - guint sign : 1; - guint biased_exponent : 8; - guint mantissa : 23; - } mpn; -}; -union _GDoubleIEEE754 -{ - gdouble v_double; - struct { - guint sign : 1; - guint biased_exponent : 11; - guint mantissa_high : 20; - guint mantissa_low : 32; - } mpn; -}; -#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ -#error unknown ENDIAN type -#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ - -typedef struct _GTimeVal GTimeVal; - -struct _GTimeVal -{ - glong tv_sec; - glong tv_usec; -}; - -G_END_DECLS - -/* We prefix variable declarations so they can - * properly get exported in Windows DLLs. - */ -#ifndef GLIB_VAR -# ifdef G_PLATFORM_WIN32 -# ifdef GLIB_STATIC_COMPILATION -# define GLIB_VAR extern -# else /* !GLIB_STATIC_COMPILATION */ -# ifdef GLIB_COMPILATION -# ifdef DLL_EXPORT -# define GLIB_VAR __declspec(dllexport) -# else /* !DLL_EXPORT */ -# define GLIB_VAR extern -# endif /* !DLL_EXPORT */ -# else /* !GLIB_COMPILATION */ -# define GLIB_VAR extern __declspec(dllimport) -# endif /* !GLIB_COMPILATION */ -# endif /* !GLIB_STATIC_COMPILATION */ -# else /* !G_PLATFORM_WIN32 */ -# define GLIB_VAR extern -# endif /* !G_PLATFORM_WIN32 */ -#endif /* GLIB_VAR */ - -#endif /* __G_TYPES_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gunicode.h b/GstreamerHelper/x86/include/glib-2.0/glib/gunicode.h deleted file mode 100644 index f9c2fd56..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gunicode.h +++ /dev/null @@ -1,752 +0,0 @@ -/* gunicode.h - Unicode manipulation functions - * - * Copyright (C) 1999, 2000 Tom Tromey - * Copyright 2000, 2005 Red Hat, Inc. - * - * The Gnome Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The Gnome Library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_UNICODE_H__ -#define __G_UNICODE_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * gunichar: - * - * A type which can hold any UTF-32 or UCS-4 character code, - * also known as a Unicode code point. - * - * If you want to produce the UTF-8 representation of a #gunichar, - * use g_ucs4_to_utf8(). See also g_utf8_to_ucs4() for the reverse - * process. - * - * To print/scan values of this type as integer, use - * %G_GINT32_MODIFIER and/or %G_GUINT32_FORMAT. - * - * The notation to express a Unicode code point in running text is - * as a hexadecimal number with four to six digits and uppercase - * letters, prefixed by the string "U+". Leading zeros are omitted, - * unless the code point would have fewer than four hexadecimal digits. - * For example, "U+0041 LATIN CAPITAL LETTER A". To print a code point - * in the U+-notation, use the format string "U+\%04"G_GINT32_FORMAT"X". - * To scan, use the format string "U+\%06"G_GINT32_FORMAT"X". - * - * |[ - * gunichar c; - * sscanf ("U+0041", "U+%06"G_GINT32_FORMAT"X", &c) - * g_print ("Read U+%04"G_GINT32_FORMAT"X", c); - * ]| - */ -typedef guint32 gunichar; - -/** - * gunichar2: - * - * A type which can hold any UTF-16 code - * pointUTF-16 also has so called - * surrogate pairs to encode characters beyond - * the BMP as pairs of 16bit numbers. Surrogate pairs cannot be stored - * in a single gunichar2 field, but all GLib functions accepting gunichar2 - * arrays will correctly interpret surrogate pairs.. - * - * To print/scan values of this type to/from text you need to convert - * to/from UTF-8, using g_utf16_to_utf8()/g_utf8_to_utf16(). - * - * To print/scan values of this type as integer, use - * %G_GINT16_MODIFIER and/or %G_GUINT16_FORMAT. - */ -typedef guint16 gunichar2; - -/** - * GUnicodeType: - * @G_UNICODE_CONTROL: General category "Other, Control" (Cc) - * @G_UNICODE_FORMAT: General category "Other, Format" (Cf) - * @G_UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn) - * @G_UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co) - * @G_UNICODE_SURROGATE: General category "Other, Surrogate" (Cs) - * @G_UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll) - * @G_UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm) - * @G_UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo) - * @G_UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt) - * @G_UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu) - * @G_UNICODE_SPACING_MARK: General category "Mark, Spacing" (Mc) - * @G_UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me) - * @G_UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn) - * @G_UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd) - * @G_UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl) - * @G_UNICODE_OTHER_NUMBER: General category "Number, Other" (No) - * @G_UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc) - * @G_UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd) - * @G_UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe) - * @G_UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf) - * @G_UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi) - * @G_UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po) - * @G_UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps) - * @G_UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc) - * @G_UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk) - * @G_UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm) - * @G_UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So) - * @G_UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl) - * @G_UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp) - * @G_UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs) - * - * These are the possible character classifications from the - * Unicode specification. - * See http://www.unicode.org/Public/UNIDATA/UnicodeData.html. - */ -typedef enum -{ - G_UNICODE_CONTROL, - G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, - G_UNICODE_PRIVATE_USE, - G_UNICODE_SURROGATE, - G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, - G_UNICODE_TITLECASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_SPACING_MARK, - G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, - G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_LETTER_NUMBER, - G_UNICODE_OTHER_NUMBER, - G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, - G_UNICODE_LINE_SEPARATOR, - G_UNICODE_PARAGRAPH_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR -} GUnicodeType; - -/** - * G_UNICODE_COMBINING_MARK: - * - * Older name for %G_UNICODE_SPACING_MARK. - * - * Deprecated: 2.30: Use %G_UNICODE_SPACING_MARK. - */ -#ifndef G_DISABLE_DEPRECATED -#define G_UNICODE_COMBINING_MARK G_UNICODE_SPACING_MARK -#endif - -/** - * GUnicodeBreakType: - * @G_UNICODE_BREAK_MANDATORY: Mandatory Break (BK) - * @G_UNICODE_BREAK_CARRIAGE_RETURN: Carriage Return (CR) - * @G_UNICODE_BREAK_LINE_FEED: Line Feed (LF) - * @G_UNICODE_BREAK_COMBINING_MARK: Attached Characters and Combining Marks (CM) - * @G_UNICODE_BREAK_SURROGATE: Surrogates (SG) - * @G_UNICODE_BREAK_ZERO_WIDTH_SPACE: Zero Width Space (ZW) - * @G_UNICODE_BREAK_INSEPARABLE: Inseparable (IN) - * @G_UNICODE_BREAK_NON_BREAKING_GLUE: Non-breaking ("Glue") (GL) - * @G_UNICODE_BREAK_CONTINGENT: Contingent Break Opportunity (CB) - * @G_UNICODE_BREAK_SPACE: Space (SP) - * @G_UNICODE_BREAK_AFTER: Break Opportunity After (BA) - * @G_UNICODE_BREAK_BEFORE: Break Opportunity Before (BB) - * @G_UNICODE_BREAK_BEFORE_AND_AFTER: Break Opportunity Before and After (B2) - * @G_UNICODE_BREAK_HYPHEN: Hyphen (HY) - * @G_UNICODE_BREAK_NON_STARTER: Nonstarter (NS) - * @G_UNICODE_BREAK_OPEN_PUNCTUATION: Opening Punctuation (OP) - * @G_UNICODE_BREAK_CLOSE_PUNCTUATION: Closing Punctuation (CL) - * @G_UNICODE_BREAK_QUOTATION: Ambiguous Quotation (QU) - * @G_UNICODE_BREAK_EXCLAMATION: Exclamation/Interrogation (EX) - * @G_UNICODE_BREAK_IDEOGRAPHIC: Ideographic (ID) - * @G_UNICODE_BREAK_NUMERIC: Numeric (NU) - * @G_UNICODE_BREAK_INFIX_SEPARATOR: Infix Separator (Numeric) (IS) - * @G_UNICODE_BREAK_SYMBOL: Symbols Allowing Break After (SY) - * @G_UNICODE_BREAK_ALPHABETIC: Ordinary Alphabetic and Symbol Characters (AL) - * @G_UNICODE_BREAK_PREFIX: Prefix (Numeric) (PR) - * @G_UNICODE_BREAK_POSTFIX: Postfix (Numeric) (PO) - * @G_UNICODE_BREAK_COMPLEX_CONTEXT: Complex Content Dependent (South East Asian) (SA) - * @G_UNICODE_BREAK_AMBIGUOUS: Ambiguous (Alphabetic or Ideographic) (AI) - * @G_UNICODE_BREAK_UNKNOWN: Unknown (XX) - * @G_UNICODE_BREAK_NEXT_LINE: Next Line (NL) - * @G_UNICODE_BREAK_WORD_JOINER: Word Joiner (WJ) - * @G_UNICODE_BREAK_HANGUL_L_JAMO: Hangul L Jamo (JL) - * @G_UNICODE_BREAK_HANGUL_V_JAMO: Hangul V Jamo (JV) - * @G_UNICODE_BREAK_HANGUL_T_JAMO: Hangul T Jamo (JT) - * @G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: Hangul LV Syllable (H2) - * @G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: Hangul LVT Syllable (H3) - * @G_UNICODE_BREAK_CLOSE_PARANTHESIS: Closing Parenthesis (CP). Since 2.28 - * @G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER: Conditional Japanese Starter (CJ). Since: 2.32 - * @G_UNICODE_BREAK_HEBREW_LETTER: Hebrew Letter (HL). Since: 2.32 - * - * These are the possible line break classifications. - * - * The five Hangul types were added in Unicode 4.1, so, has been - * introduced in GLib 2.10. Note that new types may be added in the future. - * Applications should be ready to handle unknown values. - * They may be regarded as %G_UNICODE_BREAK_UNKNOWN. - * - * See http://www.unicode.org/unicode/reports/tr14/. - */ -typedef enum -{ - G_UNICODE_BREAK_MANDATORY, - G_UNICODE_BREAK_CARRIAGE_RETURN, - G_UNICODE_BREAK_LINE_FEED, - G_UNICODE_BREAK_COMBINING_MARK, - G_UNICODE_BREAK_SURROGATE, - G_UNICODE_BREAK_ZERO_WIDTH_SPACE, - G_UNICODE_BREAK_INSEPARABLE, - G_UNICODE_BREAK_NON_BREAKING_GLUE, - G_UNICODE_BREAK_CONTINGENT, - G_UNICODE_BREAK_SPACE, - G_UNICODE_BREAK_AFTER, - G_UNICODE_BREAK_BEFORE, - G_UNICODE_BREAK_BEFORE_AND_AFTER, - G_UNICODE_BREAK_HYPHEN, - G_UNICODE_BREAK_NON_STARTER, - G_UNICODE_BREAK_OPEN_PUNCTUATION, - G_UNICODE_BREAK_CLOSE_PUNCTUATION, - G_UNICODE_BREAK_QUOTATION, - G_UNICODE_BREAK_EXCLAMATION, - G_UNICODE_BREAK_IDEOGRAPHIC, - G_UNICODE_BREAK_NUMERIC, - G_UNICODE_BREAK_INFIX_SEPARATOR, - G_UNICODE_BREAK_SYMBOL, - G_UNICODE_BREAK_ALPHABETIC, - G_UNICODE_BREAK_PREFIX, - G_UNICODE_BREAK_POSTFIX, - G_UNICODE_BREAK_COMPLEX_CONTEXT, - G_UNICODE_BREAK_AMBIGUOUS, - G_UNICODE_BREAK_UNKNOWN, - G_UNICODE_BREAK_NEXT_LINE, - G_UNICODE_BREAK_WORD_JOINER, - G_UNICODE_BREAK_HANGUL_L_JAMO, - G_UNICODE_BREAK_HANGUL_V_JAMO, - G_UNICODE_BREAK_HANGUL_T_JAMO, - G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, - G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, - G_UNICODE_BREAK_CLOSE_PARANTHESIS, - G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER, - G_UNICODE_BREAK_HEBREW_LETTER -} GUnicodeBreakType; - -/** - * GUnicodeScript: - * @G_UNICODE_SCRIPT_INVALID_CODE: - * a value never returned from g_unichar_get_script() - * @G_UNICODE_SCRIPT_COMMON: a character used by multiple different scripts - * @G_UNICODE_SCRIPT_INHERITED: a mark glyph that takes its script from the - * i base glyph to which it is attached - * @G_UNICODE_SCRIPT_ARABIC: Arabic - * @G_UNICODE_SCRIPT_ARMENIAN: Armenian - * @G_UNICODE_SCRIPT_BENGALI: Bengali - * @G_UNICODE_SCRIPT_BOPOMOFO: Bopomofo - * @G_UNICODE_SCRIPT_CHEROKEE: Cherokee - * @G_UNICODE_SCRIPT_COPTIC: Coptic - * @G_UNICODE_SCRIPT_CYRILLIC: Cyrillic - * @G_UNICODE_SCRIPT_DESERET: Deseret - * @G_UNICODE_SCRIPT_DEVANAGARI: Devanagari - * @G_UNICODE_SCRIPT_ETHIOPIC: Ethiopic - * @G_UNICODE_SCRIPT_GEORGIAN: Georgian - * @G_UNICODE_SCRIPT_GOTHIC: Gothic - * @G_UNICODE_SCRIPT_GREEK: Greek - * @G_UNICODE_SCRIPT_GUJARATI: Gujarati - * @G_UNICODE_SCRIPT_GURMUKHI: Gurmukhi - * @G_UNICODE_SCRIPT_HAN: Han - * @G_UNICODE_SCRIPT_HANGUL: Hangul - * @G_UNICODE_SCRIPT_HEBREW: Hebrew - * @G_UNICODE_SCRIPT_HIRAGANA: Hiragana - * @G_UNICODE_SCRIPT_KANNADA: Kannada - * @G_UNICODE_SCRIPT_KATAKANA: Katakana - * @G_UNICODE_SCRIPT_KHMER: Khmer - * @G_UNICODE_SCRIPT_LAO: Lao - * @G_UNICODE_SCRIPT_LATIN: Latin - * @G_UNICODE_SCRIPT_MALAYALAM: Malayalam - * @G_UNICODE_SCRIPT_MONGOLIAN: Mongolian - * @G_UNICODE_SCRIPT_MYANMAR: Myanmar - * @G_UNICODE_SCRIPT_OGHAM: Ogham - * @G_UNICODE_SCRIPT_OLD_ITALIC: Old Italic - * @G_UNICODE_SCRIPT_ORIYA: Oriya - * @G_UNICODE_SCRIPT_RUNIC: Runic - * @G_UNICODE_SCRIPT_SINHALA: Sinhala - * @G_UNICODE_SCRIPT_SYRIAC: Syriac - * @G_UNICODE_SCRIPT_TAMIL: Tamil - * @G_UNICODE_SCRIPT_TELUGU: Telugu - * @G_UNICODE_SCRIPT_THAANA: Thaana - * @G_UNICODE_SCRIPT_THAI: Thai - * @G_UNICODE_SCRIPT_TIBETAN: Tibetan - * @G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL: - * Canadian Aboriginal - * @G_UNICODE_SCRIPT_YI: Yi - * @G_UNICODE_SCRIPT_TAGALOG: Tagalog - * @G_UNICODE_SCRIPT_HANUNOO: Hanunoo - * @G_UNICODE_SCRIPT_BUHID: Buhid - * @G_UNICODE_SCRIPT_TAGBANWA: Tagbanwa - * @G_UNICODE_SCRIPT_BRAILLE: Braille - * @G_UNICODE_SCRIPT_CYPRIOT: Cypriot - * @G_UNICODE_SCRIPT_LIMBU: Limbu - * @G_UNICODE_SCRIPT_OSMANYA: Osmanya - * @G_UNICODE_SCRIPT_SHAVIAN: Shavian - * @G_UNICODE_SCRIPT_LINEAR_B: Linear B - * @G_UNICODE_SCRIPT_TAI_LE: Tai Le - * @G_UNICODE_SCRIPT_UGARITIC: Ugaritic - * @G_UNICODE_SCRIPT_NEW_TAI_LUE: - * New Tai Lue - * @G_UNICODE_SCRIPT_BUGINESE: Buginese - * @G_UNICODE_SCRIPT_GLAGOLITIC: Glagolitic - * @G_UNICODE_SCRIPT_TIFINAGH: Tifinagh - * @G_UNICODE_SCRIPT_SYLOTI_NAGRI: - * Syloti Nagri - * @G_UNICODE_SCRIPT_OLD_PERSIAN: - * Old Persian - * @G_UNICODE_SCRIPT_KHAROSHTHI: Kharoshthi - * @G_UNICODE_SCRIPT_UNKNOWN: an unassigned code point - * @G_UNICODE_SCRIPT_BALINESE: Balinese - * @G_UNICODE_SCRIPT_CUNEIFORM: Cuneiform - * @G_UNICODE_SCRIPT_PHOENICIAN: Phoenician - * @G_UNICODE_SCRIPT_PHAGS_PA: Phags-pa - * @G_UNICODE_SCRIPT_NKO: N'Ko - * @G_UNICODE_SCRIPT_KAYAH_LI: Kayah Li. Since 2.16.3 - * @G_UNICODE_SCRIPT_LEPCHA: Lepcha. Since 2.16.3 - * @G_UNICODE_SCRIPT_REJANG: Rejang. Since 2.16.3 - * @G_UNICODE_SCRIPT_SUNDANESE: Sundanese. Since 2.16.3 - * @G_UNICODE_SCRIPT_SAURASHTRA: Saurashtra. Since 2.16.3 - * @G_UNICODE_SCRIPT_CHAM: Cham. Since 2.16.3 - * @G_UNICODE_SCRIPT_OL_CHIKI: Ol Chiki. Since 2.16.3 - * @G_UNICODE_SCRIPT_VAI: Vai. Since 2.16.3 - * @G_UNICODE_SCRIPT_CARIAN: Carian. Since 2.16.3 - * @G_UNICODE_SCRIPT_LYCIAN: Lycian. Since 2.16.3 - * @G_UNICODE_SCRIPT_LYDIAN: Lydian. Since 2.16.3 - * @G_UNICODE_SCRIPT_AVESTAN: Avestan. Since 2.26 - * @G_UNICODE_SCRIPT_BAMUM: Bamum. Since 2.26 - * @G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS: - * Egyptian Hieroglpyhs. Since 2.26 - * @G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC: - * Imperial Aramaic. Since 2.26 - * @G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI: - * Inscriptional Pahlavi. Since 2.26 - * @G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN: - * Inscriptional Parthian. Since 2.26 - * @G_UNICODE_SCRIPT_JAVANESE: Javanese. Since 2.26 - * @G_UNICODE_SCRIPT_KAITHI: Kaithi. Since 2.26 - * @G_UNICODE_SCRIPT_LISU: Lisu. Since 2.26 - * @G_UNICODE_SCRIPT_MEETEI_MAYEK: - * Meetei Mayek. Since 2.26 - * @G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN: - * Old South Arabian. Since 2.26 - * @G_UNICODE_SCRIPT_OLD_TURKIC: Old Turkic. Since 2.28 - * @G_UNICODE_SCRIPT_SAMARITAN: Samaritan. Since 2.26 - * @G_UNICODE_SCRIPT_TAI_THAM: Tai Tham. Since 2.26 - * @G_UNICODE_SCRIPT_TAI_VIET: Tai Viet. Since 2.26 - * @G_UNICODE_SCRIPT_BATAK: Batak. Since 2.28 - * @G_UNICODE_SCRIPT_BRAHMI: Brahmi. Since 2.28 - * @G_UNICODE_SCRIPT_MANDAIC: Mandaic. Since 2.28 - * @G_UNICODE_SCRIPT_CHAKMA: Chakma. Since: 2.32 - * @G_UNICODE_SCRIPT_MEROITIC_CURSIVE: Meroitic Cursive. Since: 2.32 - * @G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS: Meroitic Hieroglyphs. Since: 2.32 - * @G_UNICODE_SCRIPT_MIAO: Miao. Since: 2.32 - * @G_UNICODE_SCRIPT_SHARADA: Sharada. Since: 2.32 - * @G_UNICODE_SCRIPT_SORA_SOMPENG: Sora Sompeng. Since: 2.32 - * @G_UNICODE_SCRIPT_TAKRI: Takri. Since: 2.32 - * - * The #GUnicodeScript enumeration identifies different writing - * systems. The values correspond to the names as defined in the - * Unicode standard. The enumeration has been added in GLib 2.14, - * and is interchangeable with #PangoScript. - * - * Note that new types may be added in the future. Applications - * should be ready to handle unknown values. - * See Unicode Standard Annex - * #24: Script names. - */ -typedef enum -{ /* ISO 15924 code */ - G_UNICODE_SCRIPT_INVALID_CODE = -1, - G_UNICODE_SCRIPT_COMMON = 0, /* Zyyy */ - G_UNICODE_SCRIPT_INHERITED, /* Zinh (Qaai) */ - G_UNICODE_SCRIPT_ARABIC, /* Arab */ - G_UNICODE_SCRIPT_ARMENIAN, /* Armn */ - G_UNICODE_SCRIPT_BENGALI, /* Beng */ - G_UNICODE_SCRIPT_BOPOMOFO, /* Bopo */ - G_UNICODE_SCRIPT_CHEROKEE, /* Cher */ - G_UNICODE_SCRIPT_COPTIC, /* Copt (Qaac) */ - G_UNICODE_SCRIPT_CYRILLIC, /* Cyrl (Cyrs) */ - G_UNICODE_SCRIPT_DESERET, /* Dsrt */ - G_UNICODE_SCRIPT_DEVANAGARI, /* Deva */ - G_UNICODE_SCRIPT_ETHIOPIC, /* Ethi */ - G_UNICODE_SCRIPT_GEORGIAN, /* Geor (Geon, Geoa) */ - G_UNICODE_SCRIPT_GOTHIC, /* Goth */ - G_UNICODE_SCRIPT_GREEK, /* Grek */ - G_UNICODE_SCRIPT_GUJARATI, /* Gujr */ - G_UNICODE_SCRIPT_GURMUKHI, /* Guru */ - G_UNICODE_SCRIPT_HAN, /* Hani */ - G_UNICODE_SCRIPT_HANGUL, /* Hang */ - G_UNICODE_SCRIPT_HEBREW, /* Hebr */ - G_UNICODE_SCRIPT_HIRAGANA, /* Hira */ - G_UNICODE_SCRIPT_KANNADA, /* Knda */ - G_UNICODE_SCRIPT_KATAKANA, /* Kana */ - G_UNICODE_SCRIPT_KHMER, /* Khmr */ - G_UNICODE_SCRIPT_LAO, /* Laoo */ - G_UNICODE_SCRIPT_LATIN, /* Latn (Latf, Latg) */ - G_UNICODE_SCRIPT_MALAYALAM, /* Mlym */ - G_UNICODE_SCRIPT_MONGOLIAN, /* Mong */ - G_UNICODE_SCRIPT_MYANMAR, /* Mymr */ - G_UNICODE_SCRIPT_OGHAM, /* Ogam */ - G_UNICODE_SCRIPT_OLD_ITALIC, /* Ital */ - G_UNICODE_SCRIPT_ORIYA, /* Orya */ - G_UNICODE_SCRIPT_RUNIC, /* Runr */ - G_UNICODE_SCRIPT_SINHALA, /* Sinh */ - G_UNICODE_SCRIPT_SYRIAC, /* Syrc (Syrj, Syrn, Syre) */ - G_UNICODE_SCRIPT_TAMIL, /* Taml */ - G_UNICODE_SCRIPT_TELUGU, /* Telu */ - G_UNICODE_SCRIPT_THAANA, /* Thaa */ - G_UNICODE_SCRIPT_THAI, /* Thai */ - G_UNICODE_SCRIPT_TIBETAN, /* Tibt */ - G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */ - G_UNICODE_SCRIPT_YI, /* Yiii */ - G_UNICODE_SCRIPT_TAGALOG, /* Tglg */ - G_UNICODE_SCRIPT_HANUNOO, /* Hano */ - G_UNICODE_SCRIPT_BUHID, /* Buhd */ - G_UNICODE_SCRIPT_TAGBANWA, /* Tagb */ - - /* Unicode-4.0 additions */ - G_UNICODE_SCRIPT_BRAILLE, /* Brai */ - G_UNICODE_SCRIPT_CYPRIOT, /* Cprt */ - G_UNICODE_SCRIPT_LIMBU, /* Limb */ - G_UNICODE_SCRIPT_OSMANYA, /* Osma */ - G_UNICODE_SCRIPT_SHAVIAN, /* Shaw */ - G_UNICODE_SCRIPT_LINEAR_B, /* Linb */ - G_UNICODE_SCRIPT_TAI_LE, /* Tale */ - G_UNICODE_SCRIPT_UGARITIC, /* Ugar */ - - /* Unicode-4.1 additions */ - G_UNICODE_SCRIPT_NEW_TAI_LUE, /* Talu */ - G_UNICODE_SCRIPT_BUGINESE, /* Bugi */ - G_UNICODE_SCRIPT_GLAGOLITIC, /* Glag */ - G_UNICODE_SCRIPT_TIFINAGH, /* Tfng */ - G_UNICODE_SCRIPT_SYLOTI_NAGRI, /* Sylo */ - G_UNICODE_SCRIPT_OLD_PERSIAN, /* Xpeo */ - G_UNICODE_SCRIPT_KHAROSHTHI, /* Khar */ - - /* Unicode-5.0 additions */ - G_UNICODE_SCRIPT_UNKNOWN, /* Zzzz */ - G_UNICODE_SCRIPT_BALINESE, /* Bali */ - G_UNICODE_SCRIPT_CUNEIFORM, /* Xsux */ - G_UNICODE_SCRIPT_PHOENICIAN, /* Phnx */ - G_UNICODE_SCRIPT_PHAGS_PA, /* Phag */ - G_UNICODE_SCRIPT_NKO, /* Nkoo */ - - /* Unicode-5.1 additions */ - G_UNICODE_SCRIPT_KAYAH_LI, /* Kali */ - G_UNICODE_SCRIPT_LEPCHA, /* Lepc */ - G_UNICODE_SCRIPT_REJANG, /* Rjng */ - G_UNICODE_SCRIPT_SUNDANESE, /* Sund */ - G_UNICODE_SCRIPT_SAURASHTRA, /* Saur */ - G_UNICODE_SCRIPT_CHAM, /* Cham */ - G_UNICODE_SCRIPT_OL_CHIKI, /* Olck */ - G_UNICODE_SCRIPT_VAI, /* Vaii */ - G_UNICODE_SCRIPT_CARIAN, /* Cari */ - G_UNICODE_SCRIPT_LYCIAN, /* Lyci */ - G_UNICODE_SCRIPT_LYDIAN, /* Lydi */ - - /* Unicode-5.2 additions */ - G_UNICODE_SCRIPT_AVESTAN, /* Avst */ - G_UNICODE_SCRIPT_BAMUM, /* Bamu */ - G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS, /* Egyp */ - G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC, /* Armi */ - G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI, /* Phli */ - G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */ - G_UNICODE_SCRIPT_JAVANESE, /* Java */ - G_UNICODE_SCRIPT_KAITHI, /* Kthi */ - G_UNICODE_SCRIPT_LISU, /* Lisu */ - G_UNICODE_SCRIPT_MEETEI_MAYEK, /* Mtei */ - G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN, /* Sarb */ - G_UNICODE_SCRIPT_OLD_TURKIC, /* Orkh */ - G_UNICODE_SCRIPT_SAMARITAN, /* Samr */ - G_UNICODE_SCRIPT_TAI_THAM, /* Lana */ - G_UNICODE_SCRIPT_TAI_VIET, /* Tavt */ - - /* Unicode-6.0 additions */ - G_UNICODE_SCRIPT_BATAK, /* Batk */ - G_UNICODE_SCRIPT_BRAHMI, /* Brah */ - G_UNICODE_SCRIPT_MANDAIC, /* Mand */ - - /* Unicode-6.1 additions */ - G_UNICODE_SCRIPT_CHAKMA, /* Cakm */ - G_UNICODE_SCRIPT_MEROITIC_CURSIVE, /* Merc */ - G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS, /* Mero */ - G_UNICODE_SCRIPT_MIAO, /* Plrd */ - G_UNICODE_SCRIPT_SHARADA, /* Shrd */ - G_UNICODE_SCRIPT_SORA_SOMPENG, /* Sora */ - G_UNICODE_SCRIPT_TAKRI /* Takr */ -} GUnicodeScript; - -guint32 g_unicode_script_to_iso15924 (GUnicodeScript script); -GUnicodeScript g_unicode_script_from_iso15924 (guint32 iso15924); - -/* These are all analogs of the functions. - */ -gboolean g_unichar_isalnum (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isalpha (gunichar c) G_GNUC_CONST; -gboolean g_unichar_iscntrl (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isdigit (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isgraph (gunichar c) G_GNUC_CONST; -gboolean g_unichar_islower (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isprint (gunichar c) G_GNUC_CONST; -gboolean g_unichar_ispunct (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isspace (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isupper (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isxdigit (gunichar c) G_GNUC_CONST; -gboolean g_unichar_istitle (gunichar c) G_GNUC_CONST; -gboolean g_unichar_isdefined (gunichar c) G_GNUC_CONST; -gboolean g_unichar_iswide (gunichar c) G_GNUC_CONST; -gboolean g_unichar_iswide_cjk(gunichar c) G_GNUC_CONST; -gboolean g_unichar_iszerowidth(gunichar c) G_GNUC_CONST; -gboolean g_unichar_ismark (gunichar c) G_GNUC_CONST; - -/* More functions. These convert between the three cases. - * See the Unicode book to understand title case. */ -gunichar g_unichar_toupper (gunichar c) G_GNUC_CONST; -gunichar g_unichar_tolower (gunichar c) G_GNUC_CONST; -gunichar g_unichar_totitle (gunichar c) G_GNUC_CONST; - -/* If C is a digit (according to `g_unichar_isdigit'), then return its - numeric value. Otherwise return -1. */ -gint g_unichar_digit_value (gunichar c) G_GNUC_CONST; - -gint g_unichar_xdigit_value (gunichar c) G_GNUC_CONST; - -/* Return the Unicode character type of a given character. */ -GUnicodeType g_unichar_type (gunichar c) G_GNUC_CONST; - -/* Return the line break property for a given character */ -GUnicodeBreakType g_unichar_break_type (gunichar c) G_GNUC_CONST; - -/* Returns the combining class for a given character */ -gint g_unichar_combining_class (gunichar uc) G_GNUC_CONST; - -gboolean g_unichar_get_mirror_char (gunichar ch, - gunichar *mirrored_ch); - -GUnicodeScript g_unichar_get_script (gunichar ch) G_GNUC_CONST; - -/* Validate a Unicode character */ -gboolean g_unichar_validate (gunichar ch) G_GNUC_CONST; - -/* Pairwise canonical compose/decompose */ -gboolean g_unichar_compose (gunichar a, - gunichar b, - gunichar *ch); -gboolean g_unichar_decompose (gunichar ch, - gunichar *a, - gunichar *b); - -gsize g_unichar_fully_decompose (gunichar ch, - gboolean compat, - gunichar *result, - gsize result_len); - -/** - * G_UNICHAR_MAX_DECOMPOSITION_LENGTH: - * - * The maximum length (in codepoints) of a compatibility or canonical - * decomposition of a single Unicode character. - * - * This is as defined by Unicode 6.1. - * - * Since: 2.32 - */ -#define G_UNICHAR_MAX_DECOMPOSITION_LENGTH 18 /* codepoints */ - -/* Compute canonical ordering of a string in-place. This rearranges - decomposed characters in the string according to their combining - classes. See the Unicode manual for more information. */ -void g_unicode_canonical_ordering (gunichar *string, - gsize len); - - -GLIB_DEPRECATED_IN_2_30 -gunichar *g_unicode_canonical_decomposition (gunichar ch, - gsize *result_len) G_GNUC_MALLOC; - -/* Array of skip-bytes-per-initial character. - */ -GLIB_VAR const gchar * const g_utf8_skip; - -/** - * g_utf8_next_char: - * @p: Pointer to the start of a valid UTF-8 character - * - * Skips to the next character in a UTF-8 string. The string must be - * valid; this macro is as fast as possible, and has no error-checking. - * You would use this macro to iterate over a string character by - * character. The macro returns the start of the next UTF-8 character. - * Before using this macro, use g_utf8_validate() to validate strings - * that may contain invalid UTF-8. - */ -#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)]) - -gunichar g_utf8_get_char (const gchar *p) G_GNUC_PURE; -gunichar g_utf8_get_char_validated (const gchar *p, - gssize max_len) G_GNUC_PURE; - -gchar* g_utf8_offset_to_pointer (const gchar *str, - glong offset) G_GNUC_PURE; -glong g_utf8_pointer_to_offset (const gchar *str, - const gchar *pos) G_GNUC_PURE; -gchar* g_utf8_prev_char (const gchar *p) G_GNUC_PURE; -gchar* g_utf8_find_next_char (const gchar *p, - const gchar *end) G_GNUC_PURE; -gchar* g_utf8_find_prev_char (const gchar *str, - const gchar *p) G_GNUC_PURE; - -glong g_utf8_strlen (const gchar *p, - gssize max) G_GNUC_PURE; - -GLIB_AVAILABLE_IN_2_30 -gchar *g_utf8_substring (const gchar *str, - glong start_pos, - glong end_pos) G_GNUC_MALLOC; - -gchar *g_utf8_strncpy (gchar *dest, - const gchar *src, - gsize n); - -/* Find the UTF-8 character corresponding to ch, in string p. These - functions are equivalants to strchr and strrchr */ -gchar* g_utf8_strchr (const gchar *p, - gssize len, - gunichar c); -gchar* g_utf8_strrchr (const gchar *p, - gssize len, - gunichar c); -gchar* g_utf8_strreverse (const gchar *str, - gssize len); - -gunichar2 *g_utf8_to_utf16 (const gchar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gunichar * g_utf8_to_ucs4 (const gchar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gunichar * g_utf8_to_ucs4_fast (const gchar *str, - glong len, - glong *items_written) G_GNUC_MALLOC; -gunichar * g_utf16_to_ucs4 (const gunichar2 *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gchar* g_utf16_to_utf8 (const gunichar2 *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gunichar2 *g_ucs4_to_utf16 (const gunichar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; -gchar* g_ucs4_to_utf8 (const gunichar *str, - glong len, - glong *items_read, - glong *items_written, - GError **error) G_GNUC_MALLOC; - -gint g_unichar_to_utf8 (gunichar c, - gchar *outbuf); - -gboolean g_utf8_validate (const gchar *str, - gssize max_len, - const gchar **end); - -gchar *g_utf8_strup (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar *g_utf8_strdown (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar *g_utf8_casefold (const gchar *str, - gssize len) G_GNUC_MALLOC; - -/** - * GNormalizeMode: - * @G_NORMALIZE_DEFAULT: standardize differences that do not affect the - * text content, such as the above-mentioned accent representation - * @G_NORMALIZE_NFD: another name for %G_NORMALIZE_DEFAULT - * @G_NORMALIZE_DEFAULT_COMPOSE: like %G_NORMALIZE_DEFAULT, but with - * composed forms rather than a maximally decomposed form - * @G_NORMALIZE_NFC: another name for %G_NORMALIZE_DEFAULT_COMPOSE - * @G_NORMALIZE_ALL: beyond %G_NORMALIZE_DEFAULT also standardize the - * "compatibility" characters in Unicode, such as SUPERSCRIPT THREE - * to the standard forms (in this case DIGIT THREE). Formatting - * information may be lost but for most text operations such - * characters should be considered the same - * @G_NORMALIZE_NFKD: another name for %G_NORMALIZE_ALL - * @G_NORMALIZE_ALL_COMPOSE: like %G_NORMALIZE_ALL, but with composed - * forms rather than a maximally decomposed form - * @G_NORMALIZE_NFKC: another name for %G_NORMALIZE_ALL_COMPOSE - * - * Defines how a Unicode string is transformed in a canonical - * form, standardizing such issues as whether a character with - * an accent is represented as a base character and combining - * accent or as a single precomposed character. Unicode strings - * should generally be normalized before comparing them. - */ -typedef enum { - G_NORMALIZE_DEFAULT, - G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT, - G_NORMALIZE_DEFAULT_COMPOSE, - G_NORMALIZE_NFC = G_NORMALIZE_DEFAULT_COMPOSE, - G_NORMALIZE_ALL, - G_NORMALIZE_NFKD = G_NORMALIZE_ALL, - G_NORMALIZE_ALL_COMPOSE, - G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE -} GNormalizeMode; - -gchar *g_utf8_normalize (const gchar *str, - gssize len, - GNormalizeMode mode) G_GNUC_MALLOC; - -gint g_utf8_collate (const gchar *str1, - const gchar *str2) G_GNUC_PURE; -gchar *g_utf8_collate_key (const gchar *str, - gssize len) G_GNUC_MALLOC; -gchar *g_utf8_collate_key_for_filename (const gchar *str, - gssize len) G_GNUC_MALLOC; - - -/* private */ - -gchar *_g_utf8_make_valid (const gchar *name); - -G_END_DECLS - -#endif /* __G_UNICODE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gurifuncs.h b/GstreamerHelper/x86/include/glib-2.0/glib/gurifuncs.h deleted file mode 100644 index 6e6b7391..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gurifuncs.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GIO - GLib Input, Output and Streaming Library - * - * Copyright (C) 2006-2007 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Alexander Larsson - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_URI_FUNCS_H__ -#define __G_URI_FUNCS_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_URI_RESERVED_CHARS_GENERIC_DELIMITERS: - * - * Generic delimiters characters as defined in RFC 3986. Includes ":/?#[]@". - **/ -#define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@" - -/** - * G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS: - * - * Subcomponent delimiter characters as defined in RFC 3986. Includes "!$&'()*+,;=". - **/ -#define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;=" - -/** - * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT: - * - * Allowed characters in path elements. Includes "!$&'()*+,;=:@". - **/ -#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@" - -/** - * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH: - * - * Allowed characters in a path. Includes "!$&'()*+,;=:@/". - **/ -#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/" - -/** - * G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO: - * - * Allowed characters in userinfo as defined in RFC 3986. Includes "!$&'()*+,;=:". - **/ -#define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":" - -char * g_uri_unescape_string (const char *escaped_string, - const char *illegal_characters); -char * g_uri_unescape_segment (const char *escaped_string, - const char *escaped_string_end, - const char *illegal_characters); -char * g_uri_parse_scheme (const char *uri); -char * g_uri_escape_string (const char *unescaped, - const char *reserved_chars_allowed, - gboolean allow_utf8); - -G_END_DECLS - -#endif /* __G_URI_FUNCS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gutils.h b/GstreamerHelper/x86/include/glib-2.0/glib/gutils.h deleted file mode 100644 index 213a39fb..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gutils.h +++ /dev/null @@ -1,375 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_UTILS_H__ -#define __G_UTILS_H__ - -#include -#include - -G_BEGIN_DECLS - -/* Define G_VA_COPY() to do the right thing for copying va_list variables. - * glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy. - */ -#if !defined (G_VA_COPY) -# if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32)) -# define G_VA_COPY(ap1, ap2) (*(ap1) = *(ap2)) -# elif defined (G_VA_COPY_AS_ARRAY) -# define G_VA_COPY(ap1, ap2) g_memmove ((ap1), (ap2), sizeof (va_list)) -# else /* va_list is a pointer */ -# define G_VA_COPY(ap1, ap2) ((ap1) = (ap2)) -# endif /* va_list is a pointer */ -#endif /* !G_VA_COPY */ - -/* inlining hassle. for compilers that don't allow the `inline' keyword, - * mostly because of strict ANSI C compliance or dumbness, we try to fall - * back to either `__inline__' or `__inline'. - * G_CAN_INLINE is defined in glibconfig.h if the compiler seems to be - * actually *capable* to do function inlining, in which case inline - * function bodies do make sense. we also define G_INLINE_FUNC to properly - * export the function prototypes if no inlining can be performed. - * inline function bodies have to be special cased with G_CAN_INLINE and a - * .c file specific macro to allow one compiled instance with extern linkage - * of the functions by defining G_IMPLEMENT_INLINES and the .c file macro. - */ -#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__) -# undef inline -# define inline __inline__ -#elif !defined (G_HAVE_INLINE) -# undef inline -# if defined (G_HAVE___INLINE__) -# define inline __inline__ -# elif defined (G_HAVE___INLINE) -# define inline __inline -# else /* !inline && !__inline__ && !__inline */ -# define inline /* don't inline, then */ -# endif -#endif -#ifdef G_IMPLEMENT_INLINES -# define G_INLINE_FUNC -# undef G_CAN_INLINE -#elif defined (__GNUC__) -# define G_INLINE_FUNC static __inline __attribute__ ((unused)) -#elif defined (G_CAN_INLINE) -# define G_INLINE_FUNC static inline -#else /* can't inline */ -# define G_INLINE_FUNC -#endif /* !G_INLINE_FUNC */ - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_get_user_name g_get_user_name_utf8 -#define g_get_real_name g_get_real_name_utf8 -#define g_get_home_dir g_get_home_dir_utf8 -#define g_get_tmp_dir g_get_tmp_dir_utf8 -#endif -#endif - -const gchar * g_get_user_name (void); -const gchar * g_get_real_name (void); -const gchar * g_get_home_dir (void); -const gchar * g_get_tmp_dir (void); -const gchar * g_get_host_name (void); -gchar * g_get_prgname (void); -void g_set_prgname (const gchar *prgname); -const gchar * g_get_application_name (void); -void g_set_application_name (const gchar *application_name); - -void g_reload_user_special_dirs_cache (void); -const gchar * g_get_user_data_dir (void); -const gchar * g_get_user_config_dir (void); -const gchar * g_get_user_cache_dir (void); -const gchar * const * g_get_system_data_dirs (void); - -#ifdef G_OS_WIN32 -/* This functions is not part of the public GLib API */ -const gchar * const * g_win32_get_system_data_dirs_for_module (void (*address_of_function)(void)); -#endif - -#if defined (G_OS_WIN32) && defined (G_CAN_INLINE) && !defined (__cplusplus) -/* This function is not part of the public GLib API either. Just call - * g_get_system_data_dirs() in your code, never mind that that is - * actually a macro and you will in fact call this inline function. - */ -static inline const gchar * const * -_g_win32_get_system_data_dirs (void) -{ - return g_win32_get_system_data_dirs_for_module ((void (*)(void)) &_g_win32_get_system_data_dirs); -} -#define g_get_system_data_dirs _g_win32_get_system_data_dirs -#endif - -const gchar * const * g_get_system_config_dirs (void); - -const gchar * g_get_user_runtime_dir (void); - -/** - * GUserDirectory: - * @G_USER_DIRECTORY_DESKTOP: the user's Desktop directory - * @G_USER_DIRECTORY_DOCUMENTS: the user's Documents directory - * @G_USER_DIRECTORY_DOWNLOAD: the user's Downloads directory - * @G_USER_DIRECTORY_MUSIC: the user's Music directory - * @G_USER_DIRECTORY_PICTURES: the user's Pictures directory - * @G_USER_DIRECTORY_PUBLIC_SHARE: the user's shared directory - * @G_USER_DIRECTORY_TEMPLATES: the user's Templates directory - * @G_USER_DIRECTORY_VIDEOS: the user's Movies directory - * @G_USER_N_DIRECTORIES: the number of enum values - * - * These are logical ids for special directories which are defined - * depending on the platform used. You should use g_get_user_special_dir() - * to retrieve the full path associated to the logical id. - * - * The #GUserDirectory enumeration can be extended at later date. Not - * every platform has a directory for every logical id in this - * enumeration. - * - * Since: 2.14 - */ -typedef enum { - G_USER_DIRECTORY_DESKTOP, - G_USER_DIRECTORY_DOCUMENTS, - G_USER_DIRECTORY_DOWNLOAD, - G_USER_DIRECTORY_MUSIC, - G_USER_DIRECTORY_PICTURES, - G_USER_DIRECTORY_PUBLIC_SHARE, - G_USER_DIRECTORY_TEMPLATES, - G_USER_DIRECTORY_VIDEOS, - - G_USER_N_DIRECTORIES -} GUserDirectory; - -const gchar * g_get_user_special_dir (GUserDirectory directory); - -/** - * GDebugKey: - * @key: the string - * @value: the flag - * - * Associates a string with a bit flag. - * Used in g_parse_debug_string(). - */ -typedef struct _GDebugKey GDebugKey; -struct _GDebugKey -{ - const gchar *key; - guint value; -}; - -/* Miscellaneous utility functions - */ -guint g_parse_debug_string (const gchar *string, - const GDebugKey *keys, - guint nkeys); - -gint g_snprintf (gchar *string, - gulong n, - gchar const *format, - ...) G_GNUC_PRINTF (3, 4); -gint g_vsnprintf (gchar *string, - gulong n, - gchar const *format, - va_list args); - -void g_nullify_pointer (gpointer *nullify_location); - -typedef enum -{ - G_FORMAT_SIZE_DEFAULT = 0, - G_FORMAT_SIZE_LONG_FORMAT = 1 << 0, - G_FORMAT_SIZE_IEC_UNITS = 1 << 1 -} GFormatSizeFlags; - -GLIB_AVAILABLE_IN_2_30 -gchar *g_format_size_full (guint64 size, - GFormatSizeFlags flags); -GLIB_AVAILABLE_IN_2_30 -gchar *g_format_size (guint64 size); - -GLIB_DEPRECATED_FOR(g_format_size) -gchar *g_format_size_for_display (goffset size); - -#ifndef G_DISABLE_DEPRECATED -/** - * GVoidFunc: - * - * Declares a type of function which takes no arguments - * and has no return value. It is used to specify the type - * function passed to g_atexit(). - */ -typedef void (*GVoidFunc) (void); -#ifndef ATEXIT -# define ATEXIT(proc) g_ATEXIT(proc) -#else -# define G_NATIVE_ATEXIT -#endif /* ATEXIT */ -/* we use a GLib function as a replacement for ATEXIT, so - * the programmer is not required to check the return value - * (if there is any in the implementation) and doesn't encounter - * missing include files. - */ -GLIB_DEPRECATED -void g_atexit (GVoidFunc func); - -#ifdef G_OS_WIN32 -/* It's a bad idea to wrap atexit() on Windows. If the GLib DLL calls - * atexit(), the function will be called when the GLib DLL is detached - * from the program, which is not what the caller wants. The caller - * wants the function to be called when it *itself* exits (or is - * detached, in case the caller, too, is a DLL). - */ -#if (defined(__MINGW_H) && !defined(_STDLIB_H_)) || (defined(_MSC_VER) && !defined(_INC_STDLIB)) -int atexit (void (*)(void)); -#endif -#define g_atexit(func) atexit(func) -#endif - -#endif /* G_DISABLE_DEPRECATED */ - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_find_program_in_path g_find_program_in_path_utf8 -#endif -#endif - -/* Look for an executable in PATH, following execvp() rules */ -gchar* g_find_program_in_path (const gchar *program); - -/* Bit tests - */ -G_INLINE_FUNC gint g_bit_nth_lsf (gulong mask, - gint nth_bit) G_GNUC_CONST; -G_INLINE_FUNC gint g_bit_nth_msf (gulong mask, - gint nth_bit) G_GNUC_CONST; -G_INLINE_FUNC guint g_bit_storage (gulong number) G_GNUC_CONST; - -/* inline function implementations - */ -#if defined (G_CAN_INLINE) || defined (__G_UTILS_C__) -G_INLINE_FUNC gint -g_bit_nth_lsf (gulong mask, - gint nth_bit) -{ - if (G_UNLIKELY (nth_bit < -1)) - nth_bit = -1; - while (nth_bit < ((GLIB_SIZEOF_LONG * 8) - 1)) - { - nth_bit++; - if (mask & (1UL << nth_bit)) - return nth_bit; - } - return -1; -} -G_INLINE_FUNC gint -g_bit_nth_msf (gulong mask, - gint nth_bit) -{ - if (nth_bit < 0 || G_UNLIKELY (nth_bit > GLIB_SIZEOF_LONG * 8)) - nth_bit = GLIB_SIZEOF_LONG * 8; - while (nth_bit > 0) - { - nth_bit--; - if (mask & (1UL << nth_bit)) - return nth_bit; - } - return -1; -} -G_INLINE_FUNC guint -g_bit_storage (gulong number) -{ -#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__) - return G_LIKELY (number) ? - ((GLIB_SIZEOF_LONG * 8U - 1) ^ (guint) __builtin_clzl(number)) + 1 : 1; -#else - register guint n_bits = 0; - - do - { - n_bits++; - number >>= 1; - } - while (number); - return n_bits; -#endif -} -#endif /* G_CAN_INLINE || __G_UTILS_C__ */ - -G_END_DECLS - -#ifndef G_DISABLE_DEPRECATED - -/* - * This macro is deprecated. This DllMain() is too complex. It is - * recommended to write an explicit minimal DLlMain() that just saves - * the handle to the DLL and then use that handle instead, for - * instance passing it to - * g_win32_get_package_installation_directory_of_module(). - * - * On Windows, this macro defines a DllMain function that stores the - * actual DLL name that the code being compiled will be included in. - * STATIC should be empty or 'static'. DLL_NAME is the name of the - * (pointer to the) char array where the DLL name will be stored. If - * this is used, you must also include . If you need a more complex - * DLL entry point function, you cannot use this. - * - * On non-Windows platforms, expands to nothing. - */ - -#ifndef G_PLATFORM_WIN32 -# define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name) -#else -# define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name) \ -static char *dll_name; \ - \ -BOOL WINAPI \ -DllMain (HINSTANCE hinstDLL, \ - DWORD fdwReason, \ - LPVOID lpvReserved) \ -{ \ - wchar_t wcbfr[1000]; \ - char *tem; \ - switch (fdwReason) \ - { \ - case DLL_PROCESS_ATTACH: \ - GetModuleFileNameW ((HMODULE) hinstDLL, wcbfr, G_N_ELEMENTS (wcbfr)); \ - tem = g_utf16_to_utf8 (wcbfr, -1, NULL, NULL, NULL); \ - dll_name = g_path_get_basename (tem); \ - g_free (tem); \ - break; \ - } \ - \ - return TRUE; \ -} - -#endif /* !G_DISABLE_DEPRECATED */ - -#endif /* G_PLATFORM_WIN32 */ - -#endif /* __G_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gvariant.h b/GstreamerHelper/x86/include/glib-2.0/glib/gvariant.h deleted file mode 100644 index 3c92d21a..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gvariant.h +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright © 2007, 2008 Ryan Lortie - * Copyright © 2009, 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VARIANT_H__ -#define __G_VARIANT_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GVariant GVariant; - -typedef enum -{ - G_VARIANT_CLASS_BOOLEAN = 'b', - G_VARIANT_CLASS_BYTE = 'y', - G_VARIANT_CLASS_INT16 = 'n', - G_VARIANT_CLASS_UINT16 = 'q', - G_VARIANT_CLASS_INT32 = 'i', - G_VARIANT_CLASS_UINT32 = 'u', - G_VARIANT_CLASS_INT64 = 'x', - G_VARIANT_CLASS_UINT64 = 't', - G_VARIANT_CLASS_HANDLE = 'h', - G_VARIANT_CLASS_DOUBLE = 'd', - G_VARIANT_CLASS_STRING = 's', - G_VARIANT_CLASS_OBJECT_PATH = 'o', - G_VARIANT_CLASS_SIGNATURE = 'g', - G_VARIANT_CLASS_VARIANT = 'v', - G_VARIANT_CLASS_MAYBE = 'm', - G_VARIANT_CLASS_ARRAY = 'a', - G_VARIANT_CLASS_TUPLE = '(', - G_VARIANT_CLASS_DICT_ENTRY = '{' -} GVariantClass; - -void g_variant_unref (GVariant *value); -GVariant * g_variant_ref (GVariant *value); -GVariant * g_variant_ref_sink (GVariant *value); -gboolean g_variant_is_floating (GVariant *value); -GVariant * g_variant_take_ref (GVariant *value); - -const GVariantType * g_variant_get_type (GVariant *value); -const gchar * g_variant_get_type_string (GVariant *value); -gboolean g_variant_is_of_type (GVariant *value, - const GVariantType *type); -gboolean g_variant_is_container (GVariant *value); -GVariantClass g_variant_classify (GVariant *value); -GVariant * g_variant_new_boolean (gboolean value); -GVariant * g_variant_new_byte (guchar value); -GVariant * g_variant_new_int16 (gint16 value); -GVariant * g_variant_new_uint16 (guint16 value); -GVariant * g_variant_new_int32 (gint32 value); -GVariant * g_variant_new_uint32 (guint32 value); -GVariant * g_variant_new_int64 (gint64 value); -GVariant * g_variant_new_uint64 (guint64 value); -GVariant * g_variant_new_handle (gint32 value); -GVariant * g_variant_new_double (gdouble value); -GVariant * g_variant_new_string (const gchar *string); -GVariant * g_variant_new_object_path (const gchar *object_path); -gboolean g_variant_is_object_path (const gchar *string); -GVariant * g_variant_new_signature (const gchar *signature); -gboolean g_variant_is_signature (const gchar *string); -GVariant * g_variant_new_variant (GVariant *value); -GVariant * g_variant_new_strv (const gchar * const *strv, - gssize length); -GLIB_AVAILABLE_IN_2_30 -GVariant * g_variant_new_objv (const gchar * const *strv, - gssize length); -GVariant * g_variant_new_bytestring (const gchar *string); -GVariant * g_variant_new_bytestring_array (const gchar * const *strv, - gssize length); -GVariant * g_variant_new_fixed_array (const GVariantType *element_type, - gconstpointer elements, - gsize n_elements, - gsize element_size); -gboolean g_variant_get_boolean (GVariant *value); -guchar g_variant_get_byte (GVariant *value); -gint16 g_variant_get_int16 (GVariant *value); -guint16 g_variant_get_uint16 (GVariant *value); -gint32 g_variant_get_int32 (GVariant *value); -guint32 g_variant_get_uint32 (GVariant *value); -gint64 g_variant_get_int64 (GVariant *value); -guint64 g_variant_get_uint64 (GVariant *value); -gint32 g_variant_get_handle (GVariant *value); -gdouble g_variant_get_double (GVariant *value); -GVariant * g_variant_get_variant (GVariant *value); -const gchar * g_variant_get_string (GVariant *value, - gsize *length); -gchar * g_variant_dup_string (GVariant *value, - gsize *length); -const gchar ** g_variant_get_strv (GVariant *value, - gsize *length); -gchar ** g_variant_dup_strv (GVariant *value, - gsize *length); -GLIB_AVAILABLE_IN_2_30 -const gchar ** g_variant_get_objv (GVariant *value, - gsize *length); -gchar ** g_variant_dup_objv (GVariant *value, - gsize *length); -const gchar * g_variant_get_bytestring (GVariant *value); -gchar * g_variant_dup_bytestring (GVariant *value, - gsize *length); -const gchar ** g_variant_get_bytestring_array (GVariant *value, - gsize *length); -gchar ** g_variant_dup_bytestring_array (GVariant *value, - gsize *length); - -GVariant * g_variant_new_maybe (const GVariantType *child_type, - GVariant *child); -GVariant * g_variant_new_array (const GVariantType *child_type, - GVariant * const *children, - gsize n_children); -GVariant * g_variant_new_tuple (GVariant * const *children, - gsize n_children); -GVariant * g_variant_new_dict_entry (GVariant *key, - GVariant *value); - -GVariant * g_variant_get_maybe (GVariant *value); -gsize g_variant_n_children (GVariant *value); -void g_variant_get_child (GVariant *value, - gsize index_, - const gchar *format_string, - ...); -GVariant * g_variant_get_child_value (GVariant *value, - gsize index_); -gboolean g_variant_lookup (GVariant *dictionary, - const gchar *key, - const gchar *format_string, - ...); -GVariant * g_variant_lookup_value (GVariant *dictionary, - const gchar *key, - const GVariantType *expected_type); -gconstpointer g_variant_get_fixed_array (GVariant *value, - gsize *n_elements, - gsize element_size); - -gsize g_variant_get_size (GVariant *value); -gconstpointer g_variant_get_data (GVariant *value); -void g_variant_store (GVariant *value, - gpointer data); - -gchar * g_variant_print (GVariant *value, - gboolean type_annotate); -GString * g_variant_print_string (GVariant *value, - GString *string, - gboolean type_annotate); - -guint g_variant_hash (gconstpointer value); -gboolean g_variant_equal (gconstpointer one, - gconstpointer two); - -GVariant * g_variant_get_normal_form (GVariant *value); -gboolean g_variant_is_normal_form (GVariant *value); -GVariant * g_variant_byteswap (GVariant *value); -GVariant * g_variant_new_from_data (const GVariantType *type, - gconstpointer data, - gsize size, - gboolean trusted, - GDestroyNotify notify, - gpointer user_data); - -typedef struct _GVariantIter GVariantIter; -struct _GVariantIter { - /*< private >*/ - gsize x[16]; -}; - -GVariantIter * g_variant_iter_new (GVariant *value); -gsize g_variant_iter_init (GVariantIter *iter, - GVariant *value); -GVariantIter * g_variant_iter_copy (GVariantIter *iter); -gsize g_variant_iter_n_children (GVariantIter *iter); -void g_variant_iter_free (GVariantIter *iter); -GVariant * g_variant_iter_next_value (GVariantIter *iter); -gboolean g_variant_iter_next (GVariantIter *iter, - const gchar *format_string, - ...); -gboolean g_variant_iter_loop (GVariantIter *iter, - const gchar *format_string, - ...); - - -typedef struct _GVariantBuilder GVariantBuilder; -struct _GVariantBuilder { - /*< private >*/ - gsize x[16]; -}; - -typedef enum -{ - G_VARIANT_PARSE_ERROR_FAILED, - G_VARIANT_PARSE_ERROR_BASIC_TYPE_EXPECTED, - G_VARIANT_PARSE_ERROR_CANNOT_INFER_TYPE, - G_VARIANT_PARSE_ERROR_DEFINITE_TYPE_EXPECTED, - G_VARIANT_PARSE_ERROR_INPUT_NOT_AT_END, - G_VARIANT_PARSE_ERROR_INVALID_CHARACTER, - G_VARIANT_PARSE_ERROR_INVALID_FORMAT_STRING, - G_VARIANT_PARSE_ERROR_INVALID_OBJECT_PATH, - G_VARIANT_PARSE_ERROR_INVALID_SIGNATURE, - G_VARIANT_PARSE_ERROR_INVALID_TYPE_STRING, - G_VARIANT_PARSE_ERROR_NO_COMMON_TYPE, - G_VARIANT_PARSE_ERROR_NUMBER_OUT_OF_RANGE, - G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG, - G_VARIANT_PARSE_ERROR_TYPE_ERROR, - G_VARIANT_PARSE_ERROR_UNEXPECTED_TOKEN, - G_VARIANT_PARSE_ERROR_UNKNOWN_KEYWORD, - G_VARIANT_PARSE_ERROR_UNTERMINATED_STRING_CONSTANT, - G_VARIANT_PARSE_ERROR_VALUE_EXPECTED -} GVariantParseError; -#define G_VARIANT_PARSE_ERROR (g_variant_parser_get_error_quark ()) - -GQuark g_variant_parser_get_error_quark (void); - -GVariantBuilder * g_variant_builder_new (const GVariantType *type); -void g_variant_builder_unref (GVariantBuilder *builder); -GVariantBuilder * g_variant_builder_ref (GVariantBuilder *builder); -void g_variant_builder_init (GVariantBuilder *builder, - const GVariantType *type); -GVariant * g_variant_builder_end (GVariantBuilder *builder); -void g_variant_builder_clear (GVariantBuilder *builder); -void g_variant_builder_open (GVariantBuilder *builder, - const GVariantType *type); -void g_variant_builder_close (GVariantBuilder *builder); -void g_variant_builder_add_value (GVariantBuilder *builder, - GVariant *value); -void g_variant_builder_add (GVariantBuilder *builder, - const gchar *format_string, - ...); -void g_variant_builder_add_parsed (GVariantBuilder *builder, - const gchar *format, - ...); - -GVariant * g_variant_new (const gchar *format_string, - ...); -void g_variant_get (GVariant *value, - const gchar *format_string, - ...); -GVariant * g_variant_new_va (const gchar *format_string, - const gchar **endptr, - va_list *app); -void g_variant_get_va (GVariant *value, - const gchar *format_string, - const gchar **endptr, - va_list *app); -gboolean g_variant_check_format_string (GVariant *value, - const gchar *format_string, - gboolean copy_only); - -GVariant * g_variant_parse (const GVariantType *type, - const gchar *text, - const gchar *limit, - const gchar **endptr, - GError **error); -GVariant * g_variant_new_parsed (const gchar *format, - ...); -GVariant * g_variant_new_parsed_va (const gchar *format, - va_list *app); - -gint g_variant_compare (gconstpointer one, - gconstpointer two); -G_END_DECLS - -#endif /* __G_VARIANT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gvarianttype.h b/GstreamerHelper/x86/include/glib-2.0/glib/gvarianttype.h deleted file mode 100644 index fe1ba844..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gvarianttype.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright © 2007, 2008 Ryan Lortie - * Copyright © 2009, 2010 Codethink Limited - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the licence, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ryan Lortie - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VARIANT_TYPE_H__ -#define __G_VARIANT_TYPE_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GVariantType: - * - * A type in the GVariant type system. - * - * Two types may not be compared by value; use g_variant_type_equal() or - * g_variant_type_is_subtype_of(). May be copied using - * g_variant_type_copy() and freed using g_variant_type_free(). - **/ -typedef struct _GVariantType GVariantType; - -/** - * G_VARIANT_TYPE_BOOLEAN: - * - * The type of a value that can be either %TRUE or %FALSE. - **/ -#define G_VARIANT_TYPE_BOOLEAN ((const GVariantType *) "b") - -/** - * G_VARIANT_TYPE_BYTE: - * - * The type of an integer value that can range from 0 to 255. - **/ -#define G_VARIANT_TYPE_BYTE ((const GVariantType *) "y") - -/** - * G_VARIANT_TYPE_INT16: - * - * The type of an integer value that can range from -32768 to 32767. - **/ -#define G_VARIANT_TYPE_INT16 ((const GVariantType *) "n") - -/** - * G_VARIANT_TYPE_UINT16: - * - * The type of an integer value that can range from 0 to 65535. - * There were about this many people living in Toronto in the 1870s. - **/ -#define G_VARIANT_TYPE_UINT16 ((const GVariantType *) "q") - -/** - * G_VARIANT_TYPE_INT32: - * - * The type of an integer value that can range from -2147483648 to - * 2147483647. - **/ -#define G_VARIANT_TYPE_INT32 ((const GVariantType *) "i") - -/** - * G_VARIANT_TYPE_UINT32: - * - * The type of an integer value that can range from 0 to 4294967295. - * That's one number for everyone who was around in the late 1970s. - **/ -#define G_VARIANT_TYPE_UINT32 ((const GVariantType *) "u") - -/** - * G_VARIANT_TYPE_INT64: - * - * The type of an integer value that can range from - * -9223372036854775808 to 9223372036854775807. - **/ -#define G_VARIANT_TYPE_INT64 ((const GVariantType *) "x") - -/** - * G_VARIANT_TYPE_UINT64: - * - * The type of an integer value that can range from 0 to - * 18446744073709551616. That's a really big number, but a Rubik's - * cube can have a bit more than twice as many possible positions. - **/ -#define G_VARIANT_TYPE_UINT64 ((const GVariantType *) "t") - -/** - * G_VARIANT_TYPE_DOUBLE: - * - * The type of a double precision IEEE754 floating point number. - * These guys go up to about 1.80e308 (plus and minus) but miss out on - * some numbers in between. In any case, that's far greater than the - * estimated number of fundamental particles in the observable - * universe. - **/ -#define G_VARIANT_TYPE_DOUBLE ((const GVariantType *) "d") - -/** - * G_VARIANT_TYPE_STRING: - * - * The type of a string. "" is a string. %NULL is not a string. - **/ -#define G_VARIANT_TYPE_STRING ((const GVariantType *) "s") - -/** - * G_VARIANT_TYPE_OBJECT_PATH: - * - * The type of a D-Bus object reference. These are strings of a - * specific format used to identify objects at a given destination on - * the bus. - * - * If you are not interacting with D-Bus, then there is no reason to make - * use of this type. If you are, then the D-Bus specification contains a - * precise description of valid object paths. - **/ -#define G_VARIANT_TYPE_OBJECT_PATH ((const GVariantType *) "o") - -/** - * G_VARIANT_TYPE_SIGNATURE: - * - * The type of a D-Bus type signature. These are strings of a specific - * format used as type signatures for D-Bus methods and messages. - * - * If you are not interacting with D-Bus, then there is no reason to make - * use of this type. If you are, then the D-Bus specification contains a - * precise description of valid signature strings. - **/ -#define G_VARIANT_TYPE_SIGNATURE ((const GVariantType *) "g") - -/** - * G_VARIANT_TYPE_VARIANT: - * - * The type of a box that contains any other value (including another - * variant). - **/ -#define G_VARIANT_TYPE_VARIANT ((const GVariantType *) "v") - -/** - * G_VARIANT_TYPE_HANDLE: - * - * The type of a 32bit signed integer value, that by convention, is used - * as an index into an array of file descriptors that are sent alongside - * a D-Bus message. - * - * If you are not interacting with D-Bus, then there is no reason to make - * use of this type. - **/ -#define G_VARIANT_TYPE_HANDLE ((const GVariantType *) "h") - -/** - * G_VARIANT_TYPE_UNIT: - * - * The empty tuple type. Has only one instance. Known also as "triv" - * or "void". - **/ -#define G_VARIANT_TYPE_UNIT ((const GVariantType *) "()") - -/** - * G_VARIANT_TYPE_ANY: - * - * An indefinite type that is a supertype of every type (including - * itself). - **/ -#define G_VARIANT_TYPE_ANY ((const GVariantType *) "*") - -/** - * G_VARIANT_TYPE_BASIC: - * - * An indefinite type that is a supertype of every basic (ie: - * non-container) type. - **/ -#define G_VARIANT_TYPE_BASIC ((const GVariantType *) "?") - -/** - * G_VARIANT_TYPE_MAYBE: - * - * An indefinite type that is a supertype of every maybe type. - **/ -#define G_VARIANT_TYPE_MAYBE ((const GVariantType *) "m*") - -/** - * G_VARIANT_TYPE_ARRAY: - * - * An indefinite type that is a supertype of every array type. - **/ -#define G_VARIANT_TYPE_ARRAY ((const GVariantType *) "a*") - -/** - * G_VARIANT_TYPE_TUPLE: - * - * An indefinite type that is a supertype of every tuple type, - * regardless of the number of items in the tuple. - **/ -#define G_VARIANT_TYPE_TUPLE ((const GVariantType *) "r") - -/** - * G_VARIANT_TYPE_DICT_ENTRY: - * - * An indefinite type that is a supertype of every dictionary entry - * type. - **/ -#define G_VARIANT_TYPE_DICT_ENTRY ((const GVariantType *) "{?*}") - -/** - * G_VARIANT_TYPE_DICTIONARY: - * - * An indefinite type that is a supertype of every dictionary type -- - * that is, any array type that has an element type equal to any - * dictionary entry type. - **/ -#define G_VARIANT_TYPE_DICTIONARY ((const GVariantType *) "a{?*}") - -/** - * G_VARIANT_TYPE_STRING_ARRAY: - * - * The type of an array of strings. - **/ -#define G_VARIANT_TYPE_STRING_ARRAY ((const GVariantType *) "as") - -/** - * G_VARIANT_TYPE_OBJECT_PATH_ARRAY: - * - * The type of an array of object paths. - **/ -#define G_VARIANT_TYPE_OBJECT_PATH_ARRAY ((const GVariantType *) "ao") - -/** - * G_VARIANT_TYPE_BYTESTRING: - * - * The type of an array of bytes. This type is commonly used to pass - * around strings that may not be valid utf8. In that case, the - * convention is that the nul terminator character should be included as - * the last character in the array. - **/ -#define G_VARIANT_TYPE_BYTESTRING ((const GVariantType *) "ay") - -/** - * G_VARIANT_TYPE_BYTESTRING_ARRAY: - * - * The type of an array of byte strings (an array of arrays of bytes). - **/ -#define G_VARIANT_TYPE_BYTESTRING_ARRAY ((const GVariantType *) "aay") - -/** - * G_VARIANT_TYPE_VARDICT: - * - * The type of a dictionary mapping strings to variants (the ubiquitous - * "a{sv}" type). - * - * Since: 2.30 - **/ -#define G_VARIANT_TYPE_VARDICT ((const GVariantType *) "a{sv}") - - -/** - * G_VARIANT_TYPE: - * @type_string: a well-formed #GVariantType type string - * - * Converts a string to a const #GVariantType. Depending on the - * current debugging level, this function may perform a runtime check - * to ensure that @string is a valid GVariant type string. - * - * It is always a programmer error to use this macro with an invalid - * type string. If in doubt, use g_variant_type_string_is_valid() to - * check if the string is valid. - * - * Since 2.24 - **/ -#ifndef G_DISABLE_CHECKS -# define G_VARIANT_TYPE(type_string) (g_variant_type_checked_ ((type_string))) -#else -# define G_VARIANT_TYPE(type_string) ((const GVariantType *) (type_string)) -#endif - -/* type string checking */ -gboolean g_variant_type_string_is_valid (const gchar *type_string); -gboolean g_variant_type_string_scan (const gchar *string, - const gchar *limit, - const gchar **endptr); - -/* create/destroy */ -void g_variant_type_free (GVariantType *type); -GVariantType * g_variant_type_copy (const GVariantType *type); -GVariantType * g_variant_type_new (const gchar *type_string); - -/* getters */ -gsize g_variant_type_get_string_length (const GVariantType *type); -const gchar * g_variant_type_peek_string (const GVariantType *type); -gchar * g_variant_type_dup_string (const GVariantType *type); - -/* classification */ -gboolean g_variant_type_is_definite (const GVariantType *type); -gboolean g_variant_type_is_container (const GVariantType *type); -gboolean g_variant_type_is_basic (const GVariantType *type); -gboolean g_variant_type_is_maybe (const GVariantType *type); -gboolean g_variant_type_is_array (const GVariantType *type); -gboolean g_variant_type_is_tuple (const GVariantType *type); -gboolean g_variant_type_is_dict_entry (const GVariantType *type); -gboolean g_variant_type_is_variant (const GVariantType *type); - -/* for hash tables */ -guint g_variant_type_hash (gconstpointer type); -gboolean g_variant_type_equal (gconstpointer type1, - gconstpointer type2); - -/* subtypes */ -gboolean g_variant_type_is_subtype_of (const GVariantType *type, - const GVariantType *supertype); - -/* type iterator interface */ -const GVariantType * g_variant_type_element (const GVariantType *type); -const GVariantType * g_variant_type_first (const GVariantType *type); -const GVariantType * g_variant_type_next (const GVariantType *type); -gsize g_variant_type_n_items (const GVariantType *type); -const GVariantType * g_variant_type_key (const GVariantType *type); -const GVariantType * g_variant_type_value (const GVariantType *type); - -/* constructors */ -GVariantType * g_variant_type_new_array (const GVariantType *element); -GVariantType * g_variant_type_new_maybe (const GVariantType *element); -GVariantType * g_variant_type_new_tuple (const GVariantType * const *items, - gint length); -GVariantType * g_variant_type_new_dict_entry (const GVariantType *key, - const GVariantType *value); - -/*< private >*/ -const GVariantType * g_variant_type_checked_ (const gchar *); - -G_END_DECLS - -#endif /* __G_VARIANT_TYPE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gversion.h b/GstreamerHelper/x86/include/glib-2.0/glib/gversion.h deleted file mode 100644 index d0581c24..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gversion.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VERSION_H__ -#define __G_VERSION_H__ - -#include - -G_BEGIN_DECLS - -GLIB_VAR const guint glib_major_version; -GLIB_VAR const guint glib_minor_version; -GLIB_VAR const guint glib_micro_version; -GLIB_VAR const guint glib_interface_age; -GLIB_VAR const guint glib_binary_age; - -const gchar * glib_check_version (guint required_major, - guint required_minor, - guint required_micro); - -#define GLIB_CHECK_VERSION(major,minor,micro) \ - (GLIB_MAJOR_VERSION > (major) || \ - (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION > (minor)) || \ - (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION == (minor) && \ - GLIB_MICRO_VERSION >= (micro))) - -G_END_DECLS - -#endif /* __G_VERSION_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gversionmacros.h b/GstreamerHelper/x86/include/glib-2.0/glib/gversionmacros.h deleted file mode 100644 index ed8a5ce9..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gversionmacros.h +++ /dev/null @@ -1,250 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VERSION_MACROS_H__ -#define __G_VERSION_MACROS_H__ - -/* Version boundaries checks */ - -#define G_ENCODE_VERSION(major,minor) ((major) << 16 | (minor) << 8) - -/* XXX: Every new stable minor release bump should add a macro here */ - -/** - * GLIB_VERSION_2_26: - * - * A macro that evaluates to the 2.26 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_26 (G_ENCODE_VERSION (2, 26)) - -/** - * GLIB_VERSION_2_28: - * - * A macro that evaluates to the 2.28 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_28 (G_ENCODE_VERSION (2, 28)) - -/** - * GLIB_VERSION_2_30: - * - * A macro that evaluates to the 2.30 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_30 (G_ENCODE_VERSION (2, 30)) - -/** - * GLIB_VERSION_2_32: - * - * A macro that evaluates to the 2.32 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.32 - */ -#define GLIB_VERSION_2_32 (G_ENCODE_VERSION (2, 32)) - -/** - * GLIB_VERSION_2_34: - * - * A macro that evaluates to the 2.34 version of GLib, in a format - * that can be used by the C pre-processor. - * - * Since: 2.34 - */ -#define GLIB_VERSION_2_34 (G_ENCODE_VERSION (2, 34)) - -/* evaluates to the current stable version; for development cycles, - * this means the next stable target - */ -#if (GLIB_MINOR_VERSION % 2) -#define GLIB_VERSION_CUR_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION + 1)) -#else -#define GLIB_VERSION_CUR_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION)) -#endif - -/* evaluates to the previous stable version */ -#if (GLIB_MINOR_VERSION % 2) -#define GLIB_VERSION_PREV_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 1)) -#else -#define GLIB_VERSION_PREV_STABLE (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 2)) -#endif - -/** - * GLIB_VERSION_MIN_REQUIRED: - * - * A macro that should be defined by the user prior to including - * the glib.h header. - * The definition should be one of the predefined GLib version - * macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,... - * - * This macro defines the earliest version of GLib that the package is - * required to be able to compile against. - * - * If the compiler is configured to warn about the use of deprecated - * functions, then using functions that were deprecated in version - * %GLIB_VERSION_MIN_REQUIRED or earlier will cause warnings (but - * using functions deprecated in later releases will not). - * - * Since: 2.32 - */ -/* If the package sets GLIB_VERSION_MIN_REQUIRED to some future - * GLIB_VERSION_X_Y value that we don't know about, it will compare as - * 0 in preprocessor tests. - */ -#ifndef GLIB_VERSION_MIN_REQUIRED -# define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_CUR_STABLE) -#elif GLIB_VERSION_MIN_REQUIRED == 0 -# undef GLIB_VERSION_MIN_REQUIRED -# define GLIB_VERSION_MIN_REQUIRED (GLIB_VERSION_CUR_STABLE + 2) -#endif - -/** - * GLIB_VERSION_MAX_ALLOWED: - * - * A macro that should be defined by the user prior to including - * the glib.h header. - * The definition should be one of the predefined GLib version - * macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,... - * - * This macro defines the latest version of the GLib API that the - * package is allowed to make use of. - * - * If the compiler is configured to warn about the use of deprecated - * functions, then using functions added after version - * %GLIB_VERSION_MAX_ALLOWED will cause warnings. - * - * Unless you are using GLIB_CHECK_VERSION() or the like to compile - * different code depending on the GLib version, then this should be - * set to the same value as %GLIB_VERSION_MIN_REQUIRED. - * - * Since: 2.32 - */ -#if !defined (GLIB_VERSION_MAX_ALLOWED) || (GLIB_VERSION_MAX_ALLOWED == 0) -# undef GLIB_VERSION_MAX_ALLOWED -# define GLIB_VERSION_MAX_ALLOWED (GLIB_VERSION_CUR_STABLE) -#endif - -/* sanity checks */ -#if GLIB_VERSION_MIN_REQUIRED > GLIB_VERSION_CUR_STABLE -#error "GLIB_VERSION_MIN_REQUIRED must be <= GLIB_VERSION_CUR_STABLE" -#endif -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_MIN_REQUIRED -#error "GLIB_VERSION_MAX_ALLOWED must be >= GLIB_VERSION_MIN_REQUIRED" -#endif -#if GLIB_VERSION_MIN_REQUIRED < GLIB_VERSION_2_26 -#error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION_2_26" -#endif - -/* These macros are used to mark deprecated functions in GLib headers, - * and thus have to be exposed in installed headers. But please - * do *not* use them in other projects. Instead, use G_DEPRECATED - * or define your own wrappers around it. - */ - -/* XXX: Every new stable minor release should add a set of macros here */ - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_26 -# define GLIB_DEPRECATED_IN_2_26 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_26_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_26 -# define GLIB_DEPRECATED_IN_2_26_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_26 -# define GLIB_AVAILABLE_IN_2_26 GLIB_UNAVAILABLE(2, 26) -#else -# define GLIB_AVAILABLE_IN_2_26 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_28 -# define GLIB_DEPRECATED_IN_2_28 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_28_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_28 -# define GLIB_DEPRECATED_IN_2_28_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_28 -# define GLIB_AVAILABLE_IN_2_28 GLIB_UNAVAILABLE(2, 28) -#else -# define GLIB_AVAILABLE_IN_2_28 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_30 -# define GLIB_DEPRECATED_IN_2_30 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_30_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_30 -# define GLIB_DEPRECATED_IN_2_30_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_30 -# define GLIB_AVAILABLE_IN_2_30 GLIB_UNAVAILABLE(2, 30) -#else -# define GLIB_AVAILABLE_IN_2_30 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_32 -# define GLIB_DEPRECATED_IN_2_32 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_32_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_32 -# define GLIB_DEPRECATED_IN_2_32_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_32 -# define GLIB_AVAILABLE_IN_2_32 GLIB_UNAVAILABLE(2, 32) -#else -# define GLIB_AVAILABLE_IN_2_32 -#endif - -#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_34 -# define GLIB_DEPRECATED_IN_2_34 GLIB_DEPRECATED -# define GLIB_DEPRECATED_IN_2_34_FOR(f) GLIB_DEPRECATED_FOR(f) -#else -# define GLIB_DEPRECATED_IN_2_34 -# define GLIB_DEPRECATED_IN_2_34_FOR(f) -#endif - -#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_34 -# define GLIB_AVAILABLE_IN_2_34 GLIB_UNAVAILABLE(2, 34) -#else -# define GLIB_AVAILABLE_IN_2_34 -#endif - -#endif /* __G_VERSION_MACROS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/glib/gwin32.h b/GstreamerHelper/x86/include/glib-2.0/glib/gwin32.h deleted file mode 100644 index b0fb7c04..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/glib/gwin32.h +++ /dev/null @@ -1,118 +0,0 @@ -/* GLIB - Library of useful routines for C programming - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_WIN32_H__ -#define __G_WIN32_H__ - -#include - -#ifdef G_PLATFORM_WIN32 - -G_BEGIN_DECLS - -#ifndef MAXPATHLEN -#define MAXPATHLEN 1024 -#endif - -#ifdef G_OS_WIN32 - -/* - * To get prototypes for the following POSIXish functions, you have to - * include the indicated non-POSIX headers. The functions are defined - * in OLDNAMES.LIB (MSVC) or -lmoldname-msvc (mingw32). But note that - * for POSIX functions that take or return file names in the system - * codepage, in many cases you would want to use the GLib wrappers in - * gstdio.h and UTF-8 instead. - * - * getcwd: (MSVC), (mingw32) - * getpid: - * access: - * unlink: or - * open, read, write, lseek, close: - * rmdir: - * pipe: (actually, _pipe()) - */ - -/* For some POSIX functions that are not provided by the MS runtime, - * we provide emulation functions in glib, which are prefixed with - * g_win32_. Or that was the idea at some time, but there is just one - * of those: - */ -gint g_win32_ftruncate (gint f, - guint size); -#endif /* G_OS_WIN32 */ - -/* The MS setlocale uses locale names of the form "English_United - * States.1252" etc. We want the Unixish standard form "en", "zh_TW" - * etc. This function gets the current thread locale from Windows and - * returns it as a string of the above form for use in forming file - * names etc. The returned string should be deallocated with g_free(). - */ -gchar* g_win32_getlocale (void); - -/* Translate a Win32 error code (as returned by GetLastError()) into - * the corresponding message. The returned string should be deallocated - * with g_free(). - */ -gchar* g_win32_error_message (gint error); - -#ifndef G_DISABLE_DEPRECATED - -#ifndef __GTK_DOC_IGNORE__ -#ifdef _WIN64 -#define g_win32_get_package_installation_directory g_win32_get_package_installation_directory_utf8 -#define g_win32_get_package_installation_subdirectory g_win32_get_package_installation_subdirectory_utf8 -#endif -#endif - -gchar* g_win32_get_package_installation_directory (const gchar *package, - const gchar *dll_name); - -gchar* g_win32_get_package_installation_subdirectory (const gchar *package, - const gchar *dll_name, - const gchar *subdir); - -#endif - -gchar* g_win32_get_package_installation_directory_of_module (gpointer hmodule); - -guint g_win32_get_windows_version (void); - -gchar* g_win32_locale_filename_from_utf8 (const gchar *utf8filename); - -/* As of GLib 2.14 we only support NT-based Windows */ -#define G_WIN32_IS_NT_BASED() TRUE -#define G_WIN32_HAVE_WIDECHAR_API() TRUE - -G_END_DECLS - -#endif /* G_PLATFORM_WIN32 */ - -#endif /* __G_WIN32_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gmodule.h b/GstreamerHelper/x86/include/glib-2.0/gmodule.h deleted file mode 100644 index 837e5359..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gmodule.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GMODULE - GLIB wrapper code for dynamic module loading - * Copyright (C) 1998 Tim Janik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GLib Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GLib at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GMODULE_H__ -#define __GMODULE_H__ - -#include - -G_BEGIN_DECLS - -/* exporting and importing functions, this is special cased - * to feature Windows dll stubs. - */ -#define G_MODULE_IMPORT extern -#ifdef G_PLATFORM_WIN32 -# define G_MODULE_EXPORT __declspec(dllexport) -#else /* !G_PLATFORM_WIN32 */ -# define G_MODULE_EXPORT -#endif /* !G_PLATFORM_WIN32 */ - -typedef enum -{ - G_MODULE_BIND_LAZY = 1 << 0, - G_MODULE_BIND_LOCAL = 1 << 1, - G_MODULE_BIND_MASK = 0x03 -} GModuleFlags; - -typedef struct _GModule GModule; -typedef const gchar* (*GModuleCheckInit) (GModule *module); -typedef void (*GModuleUnload) (GModule *module); - -#ifndef __GTK_DOC_IGNORE__ -#ifdef G_OS_WIN32 -#define g_module_open g_module_open_utf8 -#define g_module_name g_module_name_utf8 -#endif -#endif - -/* return TRUE if dynamic module loading is supported */ -gboolean g_module_supported (void) G_GNUC_CONST; - -/* open a module `file_name' and return handle, which is NULL on error */ -GModule* g_module_open (const gchar *file_name, - GModuleFlags flags); - -/* close a previously opened module, returns TRUE on success */ -gboolean g_module_close (GModule *module); - -/* make a module resident so g_module_close on it will be ignored */ -void g_module_make_resident (GModule *module); - -/* query the last module error as a string */ -const gchar * g_module_error (void); - -/* retrieve a symbol pointer from `module', returns TRUE on success */ -gboolean g_module_symbol (GModule *module, - const gchar *symbol_name, - gpointer *symbol); - -/* retrieve the file name from an existing module */ -const gchar * g_module_name (GModule *module); - -/* Build the actual file name containing a module. `directory' is the - * directory where the module file is supposed to be, or NULL or empty - * in which case it should either be in the current directory or, on - * some operating systems, in some standard place, for instance on the - * PATH. Hence, to be absoultely sure to get the correct module, - * always pass in a directory. The file name consists of the directory, - * if supplied, and `module_name' suitably decorated according to - * the operating system's conventions (for instance lib*.so or *.dll). - * - * No checks are made that the file exists, or is of correct type. - */ -gchar* g_module_build_path (const gchar *directory, - const gchar *module_name); - - -G_END_DECLS - -#endif /* __GMODULE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gbinding.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gbinding.h deleted file mode 100644 index 1b715402..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gbinding.h +++ /dev/null @@ -1,136 +0,0 @@ -/* gbinding.h: Binding for object properties - * - * Copyright (C) 2010 Intel Corp. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Emmanuele Bassi - */ - -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BINDING_H__ -#define __G_BINDING_H__ - -#include -#include - -G_BEGIN_DECLS - -#define G_TYPE_BINDING_FLAGS (g_binding_flags_get_type ()) - -#define G_TYPE_BINDING (g_binding_get_type ()) -#define G_BINDING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_BINDING, GBinding)) -#define G_IS_BINDING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_BINDING)) - -/** - * GBinding: - * - * GBinding is an opaque structure whose members - * cannot be accessed directly. - * - * Since: 2.26 - */ -typedef struct _GBinding GBinding; - -/** - * GBindingTransformFunc: - * @binding: a #GBinding - * @source_value: the value of the source property - * @target_value: the value of the target property - * @user_data: data passed to the transform function - * - * A function to be called to transform the source property of @source - * from @source_value into the target property of @target - * using @target_value. - * - * Return value: %TRUE if the transformation was successful, and %FALSE - * otherwise - * - * Since: 2.26 - */ -typedef gboolean (* GBindingTransformFunc) (GBinding *binding, - const GValue *source_value, - GValue *target_value, - gpointer user_data); - -/** - * GBindingFlags: - * @G_BINDING_DEFAULT: The default binding; if the source property - * changes, the target property is updated with its value. - * @G_BINDING_BIDIRECTIONAL: Bidirectional binding; if either the - * property of the source or the property of the target changes, - * the other is updated. - * @G_BINDING_SYNC_CREATE: Synchronize the values of the source and - * target properties when creating the binding; the direction of - * the synchronization is always from the source to the target. - * @G_BINDING_INVERT_BOOLEAN: If the two properties being bound are - * booleans, setting one to %TRUE will result in the other being - * set to %FALSE and vice versa. This flag will only work for - * boolean properties, and cannot be used when passing custom - * transformation functions to g_object_bind_property_full(). - * - * Flags to be passed to g_object_bind_property() or - * g_object_bind_property_full(). - * - * This enumeration can be extended at later date. - * - * Since: 2.26 - */ -typedef enum { /*< prefix=G_BINDING >*/ - G_BINDING_DEFAULT = 0, - - G_BINDING_BIDIRECTIONAL = 1 << 0, - G_BINDING_SYNC_CREATE = 1 << 1, - G_BINDING_INVERT_BOOLEAN = 1 << 2 -} GBindingFlags; - -GType g_binding_flags_get_type (void) G_GNUC_CONST; -GType g_binding_get_type (void) G_GNUC_CONST; - -GBindingFlags g_binding_get_flags (GBinding *binding); -GObject * g_binding_get_source (GBinding *binding); -GObject * g_binding_get_target (GBinding *binding); -const gchar * g_binding_get_source_property (GBinding *binding); -const gchar * g_binding_get_target_property (GBinding *binding); - -GBinding *g_object_bind_property (gpointer source, - const gchar *source_property, - gpointer target, - const gchar *target_property, - GBindingFlags flags); -GBinding *g_object_bind_property_full (gpointer source, - const gchar *source_property, - gpointer target, - const gchar *target_property, - GBindingFlags flags, - GBindingTransformFunc transform_to, - GBindingTransformFunc transform_from, - gpointer user_data, - GDestroyNotify notify); -GBinding *g_object_bind_property_with_closures (gpointer source, - const gchar *source_property, - gpointer target, - const gchar *target_property, - GBindingFlags flags, - GClosure *transform_to, - GClosure *transform_from); - -G_END_DECLS - -#endif /* __G_BINDING_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gboxed.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gboxed.h deleted file mode 100644 index 2b840878..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gboxed.h +++ /dev/null @@ -1,114 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_BOXED_H__ -#define __G_BOXED_H__ - -#include - -#ifndef __GI_SCANNER__ -#include -#endif - -G_BEGIN_DECLS - -/* --- type macros --- */ -#define G_TYPE_IS_BOXED(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_BOXED) -/** - * G_VALUE_HOLDS_BOXED: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived - * from type %G_TYPE_BOXED. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_BOXED(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOXED)) - - -/* --- typedefs --- */ -/** - * GBoxedCopyFunc: - * @boxed: The boxed structure to be copied. - * - * This function is provided by the user and should produce a copy - * of the passed in boxed structure. - * - * Returns: The newly created copy of the boxed structure. - */ -typedef gpointer (*GBoxedCopyFunc) (gpointer boxed); - -/** - * GBoxedFreeFunc: - * @boxed: The boxed structure to be freed. - * - * This function is provided by the user and should free the boxed - * structure passed. - */ -typedef void (*GBoxedFreeFunc) (gpointer boxed); - - -/* --- prototypes --- */ -gpointer g_boxed_copy (GType boxed_type, - gconstpointer src_boxed); -void g_boxed_free (GType boxed_type, - gpointer boxed); -void g_value_set_boxed (GValue *value, - gconstpointer v_boxed); -void g_value_set_static_boxed (GValue *value, - gconstpointer v_boxed); -void g_value_take_boxed (GValue *value, - gconstpointer v_boxed); -GLIB_DEPRECATED_FOR(g_value_take_boxed) -void g_value_set_boxed_take_ownership (GValue *value, - gconstpointer v_boxed); -gpointer g_value_get_boxed (const GValue *value); -gpointer g_value_dup_boxed (const GValue *value); - - -/* --- convenience --- */ -GType g_boxed_type_register_static (const gchar *name, - GBoxedCopyFunc boxed_copy, - GBoxedFreeFunc boxed_free); - -/* --- GObject boxed types --- */ -/** - * G_TYPE_CLOSURE: - * - * The #GType for #GClosure. - */ -#define G_TYPE_CLOSURE (g_closure_get_type ()) - -/** - * G_TYPE_VALUE: - * - * The type ID of the "GValue" type which is a boxed type, - * used to pass around pointers to GValues. - */ -#define G_TYPE_VALUE (g_value_get_type ()) - -GType g_closure_get_type (void) G_GNUC_CONST; -GType g_value_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __G_BOXED_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gclosure.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gclosure.h deleted file mode 100644 index fffac582..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gclosure.h +++ /dev/null @@ -1,281 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * Copyright (C) 2005 Imendio AB - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_CLOSURE_H__ -#define __G_CLOSURE_H__ - -#include - -G_BEGIN_DECLS - -/* --- defines --- */ -/** - * G_CLOSURE_NEEDS_MARSHAL: - * @closure: a #GClosure - * - * Check if the closure still needs a marshaller. See g_closure_set_marshal(). - * - * Returns: %TRUE if a #GClosureMarshal marshaller has not yet been set on - * @closure. - */ -#define G_CLOSURE_NEEDS_MARSHAL(closure) (((GClosure*) (closure))->marshal == NULL) -/** - * G_CLOSURE_N_NOTIFIERS: - * @cl: a #GClosure - * - * Get the total number of notifiers connected with the closure @cl. - * The count includes the meta marshaller, the finalize and invalidate notifiers - * and the marshal guards. Note that each guard counts as two notifiers. - * See g_closure_set_meta_marshal(), g_closure_add_finalize_notifier(), - * g_closure_add_invalidate_notifier() and g_closure_add_marshal_guards(). - * - * Returns: number of notifiers - */ -#define G_CLOSURE_N_NOTIFIERS(cl) (((cl)->n_guards << 1L) + \ - (cl)->n_fnotifiers + (cl)->n_inotifiers) -/** - * G_CCLOSURE_SWAP_DATA: - * @cclosure: a #GCClosure - * - * Checks whether the user data of the #GCClosure should be passed as the - * first parameter to the callback. See g_cclosure_new_swap(). - * - * Returns: %TRUE if data has to be swapped. - */ -#define G_CCLOSURE_SWAP_DATA(cclosure) (((GClosure*) (cclosure))->derivative_flag) -/** - * G_CALLBACK: - * @f: a function pointer. - * - * Cast a function pointer to a #GCallback. - */ -#define G_CALLBACK(f) ((GCallback) (f)) - - -/* -- typedefs --- */ -typedef struct _GClosure GClosure; -typedef struct _GClosureNotifyData GClosureNotifyData; - -/** - * GCallback: - * - * The type used for callback functions in structure definitions and function - * signatures. This doesn't mean that all callback functions must take no - * parameters and return void. The required signature of a callback function - * is determined by the context in which is used (e.g. the signal to which it - * is connected). Use G_CALLBACK() to cast the callback function to a #GCallback. - */ -typedef void (*GCallback) (void); -/** - * GClosureNotify: - * @data: data specified when registering the notification callback - * @closure: the #GClosure on which the notification is emitted - * - * The type used for the various notification callbacks which can be registered - * on closures. - */ -typedef void (*GClosureNotify) (gpointer data, - GClosure *closure); -/** - * GClosureMarshal: - * @closure: the #GClosure to which the marshaller belongs - * @return_value: (allow-none): a #GValue to store the return - * value. May be %NULL if the callback of @closure doesn't return a - * value. - * @n_param_values: the length of the @param_values array - * @param_values: (array length=n_param_values): an array of - * #GValues holding the arguments on which to invoke the - * callback of @closure - * @invocation_hint: (allow-none): the invocation hint given as the - * last argument to g_closure_invoke() - * @marshal_data: (allow-none): additional data specified when - * registering the marshaller, see g_closure_set_marshal() and - * g_closure_set_meta_marshal() - * - * The type used for marshaller functions. - */ -typedef void (*GClosureMarshal) (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -typedef void (* GVaClosureMarshal) (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/** - * GCClosure: - * @closure: the #GClosure - * @callback: the callback function - * - * A #GCClosure is a specialization of #GClosure for C function callbacks. - */ -typedef struct _GCClosure GCClosure; - - -/* --- structures --- */ -struct _GClosureNotifyData -{ - gpointer data; - GClosureNotify notify; -}; -/** - * GClosure: - * @in_marshal: Indicates whether the closure is currently being invoked with - * g_closure_invoke() - * @is_invalid: Indicates whether the closure has been invalidated by - * g_closure_invalidate() - * - * A #GClosure represents a callback supplied by the programmer. - */ -struct _GClosure -{ - /*< private >*/ - volatile guint ref_count : 15; - /* meta_marshal is not used anymore but must be zero for historical reasons - as it was exposed in the G_CLOSURE_N_NOTIFIERS macro */ - volatile guint meta_marshal_nouse : 1; - volatile guint n_guards : 1; - volatile guint n_fnotifiers : 2; /* finalization notifiers */ - volatile guint n_inotifiers : 8; /* invalidation notifiers */ - volatile guint in_inotify : 1; - volatile guint floating : 1; - /*< protected >*/ - volatile guint derivative_flag : 1; - /*< public >*/ - volatile guint in_marshal : 1; - volatile guint is_invalid : 1; - - /*< private >*/ void (*marshal) (GClosure *closure, - GValue /*out*/ *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - /*< protected >*/ gpointer data; - - /*< private >*/ GClosureNotifyData *notifiers; - - /* invariants/constrains: - * - ->marshal and ->data are _invalid_ as soon as ->is_invalid==TRUE - * - invocation of all inotifiers occours prior to fnotifiers - * - order of inotifiers is random - * inotifiers may _not_ free/invalidate parameter values (e.g. ->data) - * - order of fnotifiers is random - * - each notifier may only be removed before or during its invocation - * - reference counting may only happen prior to fnotify invocation - * (in that sense, fnotifiers are really finalization handlers) - */ -}; -/* closure for C function calls, callback() is the user function - */ -struct _GCClosure -{ - GClosure closure; - gpointer callback; -}; - - -/* --- prototypes --- */ -GClosure* g_cclosure_new (GCallback callback_func, - gpointer user_data, - GClosureNotify destroy_data); -GClosure* g_cclosure_new_swap (GCallback callback_func, - gpointer user_data, - GClosureNotify destroy_data); -GClosure* g_signal_type_cclosure_new (GType itype, - guint struct_offset); - - -/* --- prototypes --- */ -GClosure* g_closure_ref (GClosure *closure); -void g_closure_sink (GClosure *closure); -void g_closure_unref (GClosure *closure); -/* intimidating */ -GClosure* g_closure_new_simple (guint sizeof_closure, - gpointer data); -void g_closure_add_finalize_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_remove_finalize_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_add_invalidate_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_remove_invalidate_notifier (GClosure *closure, - gpointer notify_data, - GClosureNotify notify_func); -void g_closure_add_marshal_guards (GClosure *closure, - gpointer pre_marshal_data, - GClosureNotify pre_marshal_notify, - gpointer post_marshal_data, - GClosureNotify post_marshal_notify); -void g_closure_set_marshal (GClosure *closure, - GClosureMarshal marshal); -void g_closure_set_meta_marshal (GClosure *closure, - gpointer marshal_data, - GClosureMarshal meta_marshal); -void g_closure_invalidate (GClosure *closure); -void g_closure_invoke (GClosure *closure, - GValue /*out*/ *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint); - -/* FIXME: - OK: data_object::destroy -> closure_invalidate(); - MIS: closure_invalidate() -> disconnect(closure); - MIS: disconnect(closure) -> (unlink) closure_unref(); - OK: closure_finalize() -> g_free (data_string); - - random remarks: - - need marshaller repo with decent aliasing to base types - - provide marshaller collection, virtually covering anything out there -*/ - -void g_cclosure_marshal_generic (GClosure *closure, - GValue *return_gvalue, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -void g_cclosure_marshal_generic_va (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args_list, - gpointer marshal_data, - int n_params, - GType *param_types); - - -G_END_DECLS - -#endif /* __G_CLOSURE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/genums.h b/GstreamerHelper/x86/include/glib-2.0/gobject/genums.h deleted file mode 100644 index bf8a4191..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/genums.h +++ /dev/null @@ -1,261 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_ENUMS_H__ -#define __G_ENUMS_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_IS_ENUM: - * @type: a #GType ID. - * - * Checks whether @type "is a" %G_TYPE_ENUM. - * - * Returns: %TRUE if @type "is a" %G_TYPE_ENUM. - */ -#define G_TYPE_IS_ENUM(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_ENUM) -/** - * G_ENUM_CLASS: - * @class: a valid #GEnumClass - * - * Casts a derived #GEnumClass structure into a #GEnumClass structure. - */ -#define G_ENUM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_ENUM, GEnumClass)) -/** - * G_IS_ENUM_CLASS: - * @class: a #GEnumClass - * - * Checks whether @class "is a" valid #GEnumClass structure of type %G_TYPE_ENUM - * or derived. - */ -#define G_IS_ENUM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_ENUM)) -/** - * G_ENUM_CLASS_TYPE: - * @class: a #GEnumClass - * - * Get the type identifier from a given #GEnumClass structure. - * - * Returns: the #GType - */ -#define G_ENUM_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) -/** - * G_ENUM_CLASS_TYPE_NAME: - * @class: a #GEnumClass - * - * Get the static type name from a given #GEnumClass structure. - * - * Returns: the type name. - */ -#define G_ENUM_CLASS_TYPE_NAME(class) (g_type_name (G_ENUM_CLASS_TYPE (class))) - - -/** - * G_TYPE_IS_FLAGS: - * @type: a #GType ID. - * - * Checks whether @type "is a" %G_TYPE_FLAGS. - * - * Returns: %TRUE if @type "is a" %G_TYPE_FLAGS. - */ -#define G_TYPE_IS_FLAGS(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_FLAGS) -/** - * G_FLAGS_CLASS: - * @class: a valid #GFlagsClass - * - * Casts a derived #GFlagsClass structure into a #GFlagsClass structure. - */ -#define G_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_FLAGS, GFlagsClass)) -/** - * G_IS_FLAGS_CLASS: - * @class: a #GFlagsClass - * - * Checks whether @class "is a" valid #GFlagsClass structure of type %G_TYPE_FLAGS - * or derived. - */ -#define G_IS_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_FLAGS)) -/** - * G_FLAGS_CLASS_TYPE: - * @class: a #GFlagsClass - * - * Get the type identifier from a given #GFlagsClass structure. - * - * Returns: the #GType - */ -#define G_FLAGS_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) -/** - * G_FLAGS_CLASS_TYPE_NAME: - * @class: a #GFlagsClass - * - * Get the static type name from a given #GFlagsClass structure. - * - * Returns: the type name. - */ -#define G_FLAGS_CLASS_TYPE_NAME(class) (g_type_name (G_FLAGS_CLASS_TYPE (class))) - - -/** - * G_VALUE_HOLDS_ENUM: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_ENUM. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_ENUM(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ENUM)) -/** - * G_VALUE_HOLDS_FLAGS: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_FLAGS. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_FLAGS(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLAGS)) - - -/* --- enum/flag values & classes --- */ -typedef struct _GEnumClass GEnumClass; -typedef struct _GFlagsClass GFlagsClass; -typedef struct _GEnumValue GEnumValue; -typedef struct _GFlagsValue GFlagsValue; - -/** - * GEnumClass: - * @g_type_class: the parent class - * @minimum: the smallest possible value. - * @maximum: the largest possible value. - * @n_values: the number of possible values. - * @values: an array of #GEnumValue structs describing the - * individual values. - * - * The class of an enumeration type holds information about its - * possible values. - */ -struct _GEnumClass -{ - GTypeClass g_type_class; - - /*< public >*/ - gint minimum; - gint maximum; - guint n_values; - GEnumValue *values; -}; -/** - * GFlagsClass: - * @g_type_class: the parent class - * @mask: a mask covering all possible values. - * @n_values: the number of possible values. - * @values: an array of #GFlagsValue structs describing the - * individual values. - * - * The class of a flags type holds information about its - * possible values. - */ -struct _GFlagsClass -{ - GTypeClass g_type_class; - - /*< public >*/ - guint mask; - guint n_values; - GFlagsValue *values; -}; -/** - * GEnumValue: - * @value: the enum value - * @value_name: the name of the value - * @value_nick: the nickname of the value - * - * A structure which contains a single enum value, its name, and its - * nickname. - */ -struct _GEnumValue -{ - gint value; - const gchar *value_name; - const gchar *value_nick; -}; -/** - * GFlagsValue: - * @value: the flags value - * @value_name: the name of the value - * @value_nick: the nickname of the value - * - * A structure which contains a single flags value, its name, and its - * nickname. - */ -struct _GFlagsValue -{ - guint value; - const gchar *value_name; - const gchar *value_nick; -}; - - -/* --- prototypes --- */ -GEnumValue* g_enum_get_value (GEnumClass *enum_class, - gint value); -GEnumValue* g_enum_get_value_by_name (GEnumClass *enum_class, - const gchar *name); -GEnumValue* g_enum_get_value_by_nick (GEnumClass *enum_class, - const gchar *nick); -GFlagsValue* g_flags_get_first_value (GFlagsClass *flags_class, - guint value); -GFlagsValue* g_flags_get_value_by_name (GFlagsClass *flags_class, - const gchar *name); -GFlagsValue* g_flags_get_value_by_nick (GFlagsClass *flags_class, - const gchar *nick); -void g_value_set_enum (GValue *value, - gint v_enum); -gint g_value_get_enum (const GValue *value); -void g_value_set_flags (GValue *value, - guint v_flags); -guint g_value_get_flags (const GValue *value); - - - -/* --- registration functions --- */ -/* const_static_values is a NULL terminated array of enum/flags - * values that is taken over! - */ -GType g_enum_register_static (const gchar *name, - const GEnumValue *const_static_values); -GType g_flags_register_static (const gchar *name, - const GFlagsValue *const_static_values); -/* functions to complete the type information - * for enums/flags implemented by plugins - */ -void g_enum_complete_type_info (GType g_enum_type, - GTypeInfo *info, - const GEnumValue *const_values); -void g_flags_complete_type_info (GType g_flags_type, - GTypeInfo *info, - const GFlagsValue *const_values); - -G_END_DECLS - -#endif /* __G_ENUMS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/glib-types.h b/GstreamerHelper/x86/include/glib-2.0/gobject/glib-types.h deleted file mode 100644 index 50bc0339..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/glib-types.h +++ /dev/null @@ -1,277 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) && !defined(GLIB_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GLIB_TYPES_H__ -#define __GLIB_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* A hack necesssary to preprocess this file with g-ir-scanner */ -#ifdef __GI_SCANNER__ -typedef gsize GType; -#endif - -/* --- GLib boxed types --- */ -/** - * G_TYPE_DATE: - * - * The #GType for #GDate. - */ -#define G_TYPE_DATE (g_date_get_type ()) - -/** - * G_TYPE_STRV: - * - * The #GType for a boxed type holding a %NULL-terminated array of strings. - * - * The code fragments in the following example show the use of a property of - * type #G_TYPE_STRV with g_object_class_install_property(), g_object_set() - * and g_object_get(). - * - * |[ - * g_object_class_install_property (object_class, - * PROP_AUTHORS, - * g_param_spec_boxed ("authors", - * _("Authors"), - * _("List of authors"), - * G_TYPE_STRV, - * G_PARAM_READWRITE)); - * - * gchar *authors[] = { "Owen", "Tim", NULL }; - * g_object_set (obj, "authors", authors, NULL); - * - * gchar *writers[]; - * g_object_get (obj, "authors", &writers, NULL); - * /* do something with writers */ - * g_strfreev (writers); - * ]| - * - * Since: 2.4 - */ -#define G_TYPE_STRV (g_strv_get_type ()) - -/** - * G_TYPE_GSTRING: - * - * The #GType for #GString. - */ -#define G_TYPE_GSTRING (g_gstring_get_type ()) - -/** - * G_TYPE_HASH_TABLE: - * - * The #GType for a boxed type holding a #GHashTable reference. - * - * Since: 2.10 - */ -#define G_TYPE_HASH_TABLE (g_hash_table_get_type ()) - -/** - * G_TYPE_REGEX: - * - * The #GType for a boxed type holding a #GRegex reference. - * - * Since: 2.14 - */ -#define G_TYPE_REGEX (g_regex_get_type ()) - -/** - * G_TYPE_MATCH_INFO: - * - * The #GType for a boxed type holding a #GMatchInfo reference. - * - * Since: 2.30 - */ -#define G_TYPE_MATCH_INFO (g_match_info_get_type ()) - -/** - * G_TYPE_ARRAY: - * - * The #GType for a boxed type holding a #GArray reference. - * - * Since: 2.22 - */ -#define G_TYPE_ARRAY (g_array_get_type ()) - -/** - * G_TYPE_BYTE_ARRAY: - * - * The #GType for a boxed type holding a #GByteArray reference. - * - * Since: 2.22 - */ -#define G_TYPE_BYTE_ARRAY (g_byte_array_get_type ()) - -/** - * G_TYPE_PTR_ARRAY: - * - * The #GType for a boxed type holding a #GPtrArray reference. - * - * Since: 2.22 - */ -#define G_TYPE_PTR_ARRAY (g_ptr_array_get_type ()) - -/** - * G_TYPE_BYTES: - * - * The #GType for #GBytes. - * - * Since: 2.32 - */ -#define G_TYPE_BYTES (g_bytes_get_type ()) - -/** - * G_TYPE_VARIANT_TYPE: - * - * The #GType for a boxed type holding a #GVariantType. - * - * Since: 2.24 - */ -#define G_TYPE_VARIANT_TYPE (g_variant_type_get_gtype ()) - -/** - * G_TYPE_ERROR: - * - * The #GType for a boxed type holding a #GError. - * - * Since: 2.26 - */ -#define G_TYPE_ERROR (g_error_get_type ()) - -/** - * G_TYPE_DATE_TIME: - * - * The #GType for a boxed type holding a #GDateTime. - * - * Since: 2.26 - */ -#define G_TYPE_DATE_TIME (g_date_time_get_type ()) - -/** - * G_TYPE_TIME_ZONE: - * - * The #GType for a boxed type holding a #GTimeZone. - * - * Since: 2.34 - */ -#define G_TYPE_TIME_ZONE (g_time_zone_get_type ()) - -/** - * G_TYPE_IO_CHANNEL: - * - * The #GType for #GIOChannel. - */ -#define G_TYPE_IO_CHANNEL (g_io_channel_get_type ()) - -/** - * G_TYPE_IO_CONDITION: - * - * The #GType for #GIOCondition. - */ -#define G_TYPE_IO_CONDITION (g_io_condition_get_type ()) - -/** - * G_TYPE_VARIANT_BUILDER: - * - * The #GType for a boxed type holding a #GVariantBuilder. - * - * Since: 2.30 - */ -#define G_TYPE_VARIANT_BUILDER (g_variant_builder_get_type ()) - -/** - * G_TYPE_MAIN_LOOP: - * - * The #GType for a boxed type holding a #GMainLoop. - * - * Since: 2.30 - */ -#define G_TYPE_MAIN_LOOP (g_main_loop_get_type ()) - -/** - * G_TYPE_MAIN_CONTEXT: - * - * The #GType for a boxed type holding a #GMainContext. - * - * Since: 2.30 - */ -#define G_TYPE_MAIN_CONTEXT (g_main_context_get_type ()) - -/** - * G_TYPE_SOURCE: - * - * The #GType for a boxed type holding a #GSource. - * - * Since: 2.30 - */ -#define G_TYPE_SOURCE (g_source_get_type ()) - -/** - * G_TYPE_KEY_FILE: - * - * The #GType for a boxed type holding a #GKeyFile. - * - * Since: 2.32 - */ -#define G_TYPE_KEY_FILE (g_key_file_get_type ()) - -GType g_date_get_type (void) G_GNUC_CONST; -GType g_strv_get_type (void) G_GNUC_CONST; -GType g_gstring_get_type (void) G_GNUC_CONST; -GType g_hash_table_get_type (void) G_GNUC_CONST; -GType g_array_get_type (void) G_GNUC_CONST; -GType g_byte_array_get_type (void) G_GNUC_CONST; -GType g_ptr_array_get_type (void) G_GNUC_CONST; -GType g_bytes_get_type (void) G_GNUC_CONST; -GType g_variant_type_get_gtype (void) G_GNUC_CONST; -GType g_regex_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_match_info_get_type (void) G_GNUC_CONST; -GType g_error_get_type (void) G_GNUC_CONST; -GType g_date_time_get_type (void) G_GNUC_CONST; -GType g_time_zone_get_type (void) G_GNUC_CONST; -GType g_io_channel_get_type (void) G_GNUC_CONST; -GType g_io_condition_get_type (void) G_GNUC_CONST; -GType g_variant_builder_get_type (void) G_GNUC_CONST; -GType g_key_file_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_main_loop_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_main_context_get_type (void) G_GNUC_CONST; -GLIB_AVAILABLE_IN_2_30 -GType g_source_get_type (void) G_GNUC_CONST; - -GLIB_DEPRECATED_FOR('G_TYPE_VARIANT') -GType g_variant_get_gtype (void) G_GNUC_CONST; - -/** - * GStrv: - * - * A C representable type name for #G_TYPE_STRV. - */ -typedef gchar** GStrv; - -G_END_DECLS - -#endif /* __GLIB_TYPES_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gmarshal.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gmarshal.h deleted file mode 100644 index 0c21be68..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gmarshal.h +++ /dev/null @@ -1,341 +0,0 @@ -/* Note: This file is no longer generated. See the comment in gmarshal.list */ -#ifndef __G_MARSHAL_H__ -#define __G_MARSHAL_H__ - -G_BEGIN_DECLS - -/* VOID:VOID (./gmarshal.list:6) */ -extern void g_cclosure_marshal_VOID__VOID (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__VOIDv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:BOOLEAN (./gmarshal.list:7) */ -extern void g_cclosure_marshal_VOID__BOOLEAN (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__BOOLEANv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:CHAR (./gmarshal.list:8) */ -extern void g_cclosure_marshal_VOID__CHAR (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__CHARv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:UCHAR (./gmarshal.list:9) */ -extern void g_cclosure_marshal_VOID__UCHAR (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__UCHARv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:INT (./gmarshal.list:10) */ -extern void g_cclosure_marshal_VOID__INT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__INTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:UINT (./gmarshal.list:11) */ -extern void g_cclosure_marshal_VOID__UINT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__UINTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:LONG (./gmarshal.list:12) */ -extern void g_cclosure_marshal_VOID__LONG (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__LONGv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:ULONG (./gmarshal.list:13) */ -extern void g_cclosure_marshal_VOID__ULONG (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__ULONGv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:ENUM (./gmarshal.list:14) */ -extern void g_cclosure_marshal_VOID__ENUM (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__ENUMv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:FLAGS (./gmarshal.list:15) */ -extern void g_cclosure_marshal_VOID__FLAGS (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__FLAGSv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:FLOAT (./gmarshal.list:16) */ -extern void g_cclosure_marshal_VOID__FLOAT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__FLOATv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:DOUBLE (./gmarshal.list:17) */ -extern void g_cclosure_marshal_VOID__DOUBLE (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__DOUBLEv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:STRING (./gmarshal.list:18) */ -extern void g_cclosure_marshal_VOID__STRING (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__STRINGv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:PARAM (./gmarshal.list:19) */ -extern void g_cclosure_marshal_VOID__PARAM (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__PARAMv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:BOXED (./gmarshal.list:20) */ -extern void g_cclosure_marshal_VOID__BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__BOXEDv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:POINTER (./gmarshal.list:21) */ -extern void g_cclosure_marshal_VOID__POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__POINTERv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:OBJECT (./gmarshal.list:22) */ -extern void g_cclosure_marshal_VOID__OBJECT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__OBJECTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:VARIANT (./gmarshal.list:23) */ -extern void g_cclosure_marshal_VOID__VARIANT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__VARIANTv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* VOID:UINT,POINTER (./gmarshal.list:26) */ -extern void g_cclosure_marshal_VOID__UINT_POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_VOID__UINT_POINTERv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* BOOL:FLAGS (./gmarshal.list:27) */ -extern void g_cclosure_marshal_BOOLEAN__FLAGS (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_BOOLEAN__FLAGSv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); -#define g_cclosure_marshal_BOOL__FLAGS g_cclosure_marshal_BOOLEAN__FLAGS - -/* STRING:OBJECT,POINTER (./gmarshal.list:28) */ -extern void g_cclosure_marshal_STRING__OBJECT_POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_STRING__OBJECT_POINTERv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); - -/* BOOL:BOXED,BOXED (./gmarshal.list:29) */ -extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv (GClosure *closure, - GValue *return_value, - gpointer instance, - va_list args, - gpointer marshal_data, - int n_params, - GType *param_types); -#define g_cclosure_marshal_BOOL__BOXED_BOXED g_cclosure_marshal_BOOLEAN__BOXED_BOXED - -G_END_DECLS - -#endif /* __G_MARSHAL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gobject.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gobject.h deleted file mode 100644 index f63e4d16..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gobject.h +++ /dev/null @@ -1,610 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_OBJECT_H__ -#define __G_OBJECT_H__ - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_IS_OBJECT: - * @type: Type id to check - * - * Check if the passed in type id is a %G_TYPE_OBJECT or derived from it. - * - * Returns: %FALSE or %TRUE, indicating whether @type is a %G_TYPE_OBJECT. - */ -#define G_TYPE_IS_OBJECT(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_OBJECT) -/** - * G_OBJECT: - * @object: Object which is subject to casting. - * - * Casts a #GObject or derived pointer into a (GObject*) pointer. - * Depending on the current debugging level, this function may invoke - * certain runtime checks to identify invalid casts. - */ -#define G_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject)) -/** - * G_OBJECT_CLASS: - * @class: a valid #GObjectClass - * - * Casts a derived #GObjectClass structure into a #GObjectClass structure. - */ -#define G_OBJECT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass)) -/** - * G_IS_OBJECT: - * @object: Instance to check for being a %G_TYPE_OBJECT. - * - * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT. - */ -#define G_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT)) -/** - * G_IS_OBJECT_CLASS: - * @class: a #GObjectClass - * - * Checks whether @class "is a" valid #GObjectClass structure of type - * %G_TYPE_OBJECT or derived. - */ -#define G_IS_OBJECT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_OBJECT)) -/** - * G_OBJECT_GET_CLASS: - * @object: a #GObject instance. - * - * Get the class structure associated to a #GObject instance. - * - * Returns: pointer to object class structure. - */ -#define G_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass)) -/** - * G_OBJECT_TYPE: - * @object: Object to return the type id for. - * - * Get the type id of an object. - * - * Returns: Type id of @object. - */ -#define G_OBJECT_TYPE(object) (G_TYPE_FROM_INSTANCE (object)) -/** - * G_OBJECT_TYPE_NAME: - * @object: Object to return the type name for. - * - * Get the name of an object's type. - * - * Returns: Type name of @object. The string is owned by the type system and - * should not be freed. - */ -#define G_OBJECT_TYPE_NAME(object) (g_type_name (G_OBJECT_TYPE (object))) -/** - * G_OBJECT_CLASS_TYPE: - * @class: a valid #GObjectClass - * - * Get the type id of a class structure. - * - * Returns: Type id of @class. - */ -#define G_OBJECT_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) -/** - * G_OBJECT_CLASS_NAME: - * @class: a valid #GObjectClass - * - * Return the name of a class structure's type. - * - * Returns: Type name of @class. The string is owned by the type system and - * should not be freed. - */ -#define G_OBJECT_CLASS_NAME(class) (g_type_name (G_OBJECT_CLASS_TYPE (class))) -/** - * G_VALUE_HOLDS_OBJECT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_OBJECT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_OBJECT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_OBJECT)) - -/* --- type macros --- */ -/** - * G_TYPE_INITIALLY_UNOWNED: - * - * The type for #GInitiallyUnowned. - */ -#define G_TYPE_INITIALLY_UNOWNED (g_initially_unowned_get_type()) -/** - * G_INITIALLY_UNOWNED: - * @object: Object which is subject to casting. - * - * Casts a #GInitiallyUnowned or derived pointer into a (GInitiallyUnowned*) - * pointer. Depending on the current debugging level, this function may invoke - * certain runtime checks to identify invalid casts. - */ -#define G_INITIALLY_UNOWNED(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnowned)) -/** - * G_INITIALLY_UNOWNED_CLASS: - * @class: a valid #GInitiallyUnownedClass - * - * Casts a derived #GInitiallyUnownedClass structure into a - * #GInitiallyUnownedClass structure. - */ -#define G_INITIALLY_UNOWNED_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass)) -/** - * G_IS_INITIALLY_UNOWNED: - * @object: Instance to check for being a %G_TYPE_INITIALLY_UNOWNED. - * - * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_INITIALLY_UNOWNED. - */ -#define G_IS_INITIALLY_UNOWNED(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_INITIALLY_UNOWNED)) -/** - * G_IS_INITIALLY_UNOWNED_CLASS: - * @class: a #GInitiallyUnownedClass - * - * Checks whether @class "is a" valid #GInitiallyUnownedClass structure of type - * %G_TYPE_INITIALLY_UNOWNED or derived. - */ -#define G_IS_INITIALLY_UNOWNED_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_INITIALLY_UNOWNED)) -/** - * G_INITIALLY_UNOWNED_GET_CLASS: - * @object: a #GInitiallyUnowned instance. - * - * Get the class structure associated to a #GInitiallyUnowned instance. - * - * Returns: pointer to object class structure. - */ -#define G_INITIALLY_UNOWNED_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass)) -/* GInitiallyUnowned ia a GObject with initially floating reference count */ - - -/* --- typedefs & structures --- */ -typedef struct _GObject GObject; -typedef struct _GObjectClass GObjectClass; -typedef struct _GObject GInitiallyUnowned; -typedef struct _GObjectClass GInitiallyUnownedClass; -typedef struct _GObjectConstructParam GObjectConstructParam; -/** - * GObjectGetPropertyFunc: - * @object: a #GObject - * @property_id: the numeric id under which the property was registered with - * g_object_class_install_property(). - * @value: a #GValue to return the property value in - * @pspec: the #GParamSpec describing the property - * - * The type of the @get_property function of #GObjectClass. - */ -typedef void (*GObjectGetPropertyFunc) (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); -/** - * GObjectSetPropertyFunc: - * @object: a #GObject - * @property_id: the numeric id under which the property was registered with - * g_object_class_install_property(). - * @value: the new value for the property - * @pspec: the #GParamSpec describing the property - * - * The type of the @set_property function of #GObjectClass. - */ -typedef void (*GObjectSetPropertyFunc) (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -/** - * GObjectFinalizeFunc: - * @object: the #GObject being finalized - * - * The type of the @finalize function of #GObjectClass. - */ -typedef void (*GObjectFinalizeFunc) (GObject *object); -/** - * GWeakNotify: - * @data: data that was provided when the weak reference was established - * @where_the_object_was: the object being finalized - * - * A #GWeakNotify function can be added to an object as a callback that gets - * triggered when the object is finalized. Since the object is already being - * finalized when the #GWeakNotify is called, there's not much you could do - * with the object, apart from e.g. using its address as hash-index or the like. - */ -typedef void (*GWeakNotify) (gpointer data, - GObject *where_the_object_was); -/** - * GObject: - * - * All the fields in the GObject structure are private - * to the #GObject implementation and should never be accessed directly. - */ -struct _GObject -{ - GTypeInstance g_type_instance; - - /*< private >*/ - volatile guint ref_count; - GData *qdata; -}; -/** - * GObjectClass: - * @g_type_class: the parent class - * @constructor: the @constructor function is called by g_object_new () to - * complete the object initialization after all the construction properties are - * set. The first thing a @constructor implementation must do is chain up to the - * @constructor of the parent class. Overriding @constructor should be rarely - * needed, e.g. to handle construct properties, or to implement singletons. - * @set_property: the generic setter for all properties of this type. Should be - * overridden for every type with properties. Implementations of @set_property - * don't need to emit property change notification explicitly, this is handled - * by the type system. - * @get_property: the generic getter for all properties of this type. Should be - * overridden for every type with properties. - * @dispose: the @dispose function is supposed to drop all references to other - * objects, but keep the instance otherwise intact, so that client method - * invocations still work. It may be run multiple times (due to reference - * loops). Before returning, @dispose should chain up to the @dispose method - * of the parent class. - * @finalize: instance finalization function, should finish the finalization of - * the instance begun in @dispose and chain up to the @finalize method of the - * parent class. - * @dispatch_properties_changed: emits property change notification for a bunch - * of properties. Overriding @dispatch_properties_changed should be rarely - * needed. - * @notify: the class closure for the notify signal - * @constructed: the @constructed function is called by g_object_new() as the - * final step of the object creation process. At the point of the call, all - * construction properties have been set on the object. The purpose of this - * call is to allow for object initialisation steps that can only be performed - * after construction properties have been set. @constructed implementors - * should chain up to the @constructed call of their parent class to allow it - * to complete its initialisation. - * - * The class structure for the GObject type. - * - * - * Implementing singletons using a constructor - * - * static MySingleton *the_singleton = NULL; - * - * static GObject* - * my_singleton_constructor (GType type, - * guint n_construct_params, - * GObjectConstructParam *construct_params) - * { - * GObject *object; - * - * if (!the_singleton) - * { - * object = G_OBJECT_CLASS (parent_class)->constructor (type, - * n_construct_params, - * construct_params); - * the_singleton = MY_SINGLETON (object); - * } - * else - * object = g_object_ref (G_OBJECT (the_singleton)); - * - * return object; - * } - * - */ -struct _GObjectClass -{ - GTypeClass g_type_class; - - /*< private >*/ - GSList *construct_properties; - - /*< public >*/ - /* seldom overidden */ - GObject* (*constructor) (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties); - /* overridable methods */ - void (*set_property) (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); - void (*get_property) (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); - void (*dispose) (GObject *object); - void (*finalize) (GObject *object); - /* seldom overidden */ - void (*dispatch_properties_changed) (GObject *object, - guint n_pspecs, - GParamSpec **pspecs); - /* signals */ - void (*notify) (GObject *object, - GParamSpec *pspec); - - /* called when done constructing */ - void (*constructed) (GObject *object); - - /*< private >*/ - gsize flags; - - /* padding */ - gpointer pdummy[6]; -}; -/** - * GObjectConstructParam: - * @pspec: the #GParamSpec of the construct parameter - * @value: the value to set the parameter to - * - * The GObjectConstructParam struct is an auxiliary - * structure used to hand #GParamSpec/#GValue pairs to the @constructor of - * a #GObjectClass. - */ -struct _GObjectConstructParam -{ - GParamSpec *pspec; - GValue *value; -}; - -/** - * GInitiallyUnowned: - * - * All the fields in the GInitiallyUnowned structure - * are private to the #GInitiallyUnowned implementation and should never be - * accessed directly. - */ -/** - * GInitiallyUnownedClass: - * - * The class structure for the GInitiallyUnowned type. - */ - - -/* --- prototypes --- */ -GType g_initially_unowned_get_type (void); -void g_object_class_install_property (GObjectClass *oclass, - guint property_id, - GParamSpec *pspec); -GParamSpec* g_object_class_find_property (GObjectClass *oclass, - const gchar *property_name); -GParamSpec**g_object_class_list_properties (GObjectClass *oclass, - guint *n_properties); -void g_object_class_override_property (GObjectClass *oclass, - guint property_id, - const gchar *name); -void g_object_class_install_properties (GObjectClass *oclass, - guint n_pspecs, - GParamSpec **pspecs); - -void g_object_interface_install_property (gpointer g_iface, - GParamSpec *pspec); -GParamSpec* g_object_interface_find_property (gpointer g_iface, - const gchar *property_name); -GParamSpec**g_object_interface_list_properties (gpointer g_iface, - guint *n_properties_p); - -GType g_object_get_type (void) G_GNUC_CONST; -gpointer g_object_new (GType object_type, - const gchar *first_property_name, - ...); -gpointer g_object_newv (GType object_type, - guint n_parameters, - GParameter *parameters); -GObject* g_object_new_valist (GType object_type, - const gchar *first_property_name, - va_list var_args); -void g_object_set (gpointer object, - const gchar *first_property_name, - ...) G_GNUC_NULL_TERMINATED; -void g_object_get (gpointer object, - const gchar *first_property_name, - ...) G_GNUC_NULL_TERMINATED; -gpointer g_object_connect (gpointer object, - const gchar *signal_spec, - ...) G_GNUC_NULL_TERMINATED; -void g_object_disconnect (gpointer object, - const gchar *signal_spec, - ...) G_GNUC_NULL_TERMINATED; -void g_object_set_valist (GObject *object, - const gchar *first_property_name, - va_list var_args); -void g_object_get_valist (GObject *object, - const gchar *first_property_name, - va_list var_args); -void g_object_set_property (GObject *object, - const gchar *property_name, - const GValue *value); -void g_object_get_property (GObject *object, - const gchar *property_name, - GValue *value); -void g_object_freeze_notify (GObject *object); -void g_object_notify (GObject *object, - const gchar *property_name); -void g_object_notify_by_pspec (GObject *object, - GParamSpec *pspec); -void g_object_thaw_notify (GObject *object); -gboolean g_object_is_floating (gpointer object); -gpointer g_object_ref_sink (gpointer object); -gpointer g_object_ref (gpointer object); -void g_object_unref (gpointer object); -void g_object_weak_ref (GObject *object, - GWeakNotify notify, - gpointer data); -void g_object_weak_unref (GObject *object, - GWeakNotify notify, - gpointer data); -void g_object_add_weak_pointer (GObject *object, - gpointer *weak_pointer_location); -void g_object_remove_weak_pointer (GObject *object, - gpointer *weak_pointer_location); - -/** - * GToggleNotify: - * @data: Callback data passed to g_object_add_toggle_ref() - * @object: The object on which g_object_add_toggle_ref() was called. - * @is_last_ref: %TRUE if the toggle reference is now the - * last reference to the object. %FALSE if the toggle - * reference was the last reference and there are now other - * references. - * - * A callback function used for notification when the state - * of a toggle reference changes. See g_object_add_toggle_ref(). - */ -typedef void (*GToggleNotify) (gpointer data, - GObject *object, - gboolean is_last_ref); - -void g_object_add_toggle_ref (GObject *object, - GToggleNotify notify, - gpointer data); -void g_object_remove_toggle_ref (GObject *object, - GToggleNotify notify, - gpointer data); - -gpointer g_object_get_qdata (GObject *object, - GQuark quark); -void g_object_set_qdata (GObject *object, - GQuark quark, - gpointer data); -void g_object_set_qdata_full (GObject *object, - GQuark quark, - gpointer data, - GDestroyNotify destroy); -gpointer g_object_steal_qdata (GObject *object, - GQuark quark); - -GLIB_AVAILABLE_IN_2_34 -gpointer g_object_dup_qdata (GObject *object, - GQuark quark, - GDuplicateFunc dup_func, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gboolean g_object_replace_qdata (GObject *object, - GQuark quark, - gpointer oldval, - gpointer newval, - GDestroyNotify destroy, - GDestroyNotify *old_destroy); - -gpointer g_object_get_data (GObject *object, - const gchar *key); -void g_object_set_data (GObject *object, - const gchar *key, - gpointer data); -void g_object_set_data_full (GObject *object, - const gchar *key, - gpointer data, - GDestroyNotify destroy); -gpointer g_object_steal_data (GObject *object, - const gchar *key); - -GLIB_AVAILABLE_IN_2_34 -gpointer g_object_dup_data (GObject *object, - const gchar *key, - GDuplicateFunc dup_func, - gpointer user_data); -GLIB_AVAILABLE_IN_2_34 -gboolean g_object_replace_data (GObject *object, - const gchar *key, - gpointer oldval, - gpointer newval, - GDestroyNotify destroy, - GDestroyNotify *old_destroy); - - -void g_object_watch_closure (GObject *object, - GClosure *closure); -GClosure* g_cclosure_new_object (GCallback callback_func, - GObject *object); -GClosure* g_cclosure_new_object_swap (GCallback callback_func, - GObject *object); -GClosure* g_closure_new_object (guint sizeof_closure, - GObject *object); -void g_value_set_object (GValue *value, - gpointer v_object); -gpointer g_value_get_object (const GValue *value); -gpointer g_value_dup_object (const GValue *value); -gulong g_signal_connect_object (gpointer instance, - const gchar *detailed_signal, - GCallback c_handler, - gpointer gobject, - GConnectFlags connect_flags); - -/*< protected >*/ -void g_object_force_floating (GObject *object); -void g_object_run_dispose (GObject *object); - - -void g_value_take_object (GValue *value, - gpointer v_object); -GLIB_DEPRECATED_FOR(g_value_take_object) -void g_value_set_object_take_ownership (GValue *value, - gpointer v_object); - -GLIB_DEPRECATED -gsize g_object_compat_control (gsize what, - gpointer data); - -/* --- implementation macros --- */ -#define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \ -G_STMT_START { \ - GObject *_object = (GObject*) (object); \ - GParamSpec *_pspec = (GParamSpec*) (pspec); \ - guint _property_id = (property_id); \ - g_warning ("%s: invalid %s id %u for \"%s\" of type `%s' in `%s'", \ - G_STRLOC, \ - (pname), \ - _property_id, \ - _pspec->name, \ - g_type_name (G_PARAM_SPEC_TYPE (_pspec)), \ - G_OBJECT_TYPE_NAME (_object)); \ -} G_STMT_END -/** - * G_OBJECT_WARN_INVALID_PROPERTY_ID: - * @object: the #GObject on which set_property() or get_property() was called - * @property_id: the numeric id of the property - * @pspec: the #GParamSpec of the property - * - * This macro should be used to emit a standard warning about unexpected - * properties in set_property() and get_property() implementations. - */ -#define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \ - G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec)) - -void g_clear_object (volatile GObject **object_ptr); -#define g_clear_object(object_ptr) g_clear_pointer ((object_ptr), g_object_unref) - -typedef struct { - /**/ - union { gpointer p; } priv; -} GWeakRef; - -void g_weak_ref_init (GWeakRef *weak_ref, - gpointer object); -void g_weak_ref_clear (GWeakRef *weak_ref); -gpointer g_weak_ref_get (GWeakRef *weak_ref); -void g_weak_ref_set (GWeakRef *weak_ref, - gpointer object); - -G_END_DECLS - -#endif /* __G_OBJECT_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gobjectnotifyqueue.c b/GstreamerHelper/x86/include/glib-2.0/gobject/gobjectnotifyqueue.c deleted file mode 100644 index cfe01ba0..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gobjectnotifyqueue.c +++ /dev/null @@ -1,199 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* WARNING: - * - * This file is INSTALLED and other projects (outside of glib) - * #include its contents. - */ - -#ifndef __G_OBJECT_NOTIFY_QUEUE_H__ -#define __G_OBJECT_NOTIFY_QUEUE_H__ - -#include /* memset */ - -#include - -G_BEGIN_DECLS - - -/* --- typedefs --- */ -typedef struct _GObjectNotifyContext GObjectNotifyContext; -typedef struct _GObjectNotifyQueue GObjectNotifyQueue; -typedef void (*GObjectNotifyQueueDispatcher) (GObject *object, - guint n_pspecs, - GParamSpec **pspecs); - - -/* --- structures --- */ -struct _GObjectNotifyContext -{ - GQuark quark_notify_queue; - GObjectNotifyQueueDispatcher dispatcher; - GTrashStack *_nqueue_trash; /* unused */ -}; -struct _GObjectNotifyQueue -{ - GObjectNotifyContext *context; - GSList *pspecs; - guint16 n_pspecs; - guint16 freeze_count; -}; - -G_LOCK_DEFINE_STATIC(notify_lock); - -/* --- functions --- */ -static void -g_object_notify_queue_free (gpointer data) -{ - GObjectNotifyQueue *nqueue = data; - - g_slist_free (nqueue->pspecs); - g_slice_free (GObjectNotifyQueue, nqueue); -} - -static inline GObjectNotifyQueue* -g_object_notify_queue_freeze (GObject *object, - GObjectNotifyContext *context) -{ - GObjectNotifyQueue *nqueue; - - G_LOCK(notify_lock); - nqueue = g_datalist_id_get_data (&object->qdata, context->quark_notify_queue); - if (!nqueue) - { - nqueue = g_slice_new0 (GObjectNotifyQueue); - nqueue->context = context; - g_datalist_id_set_data_full (&object->qdata, context->quark_notify_queue, - nqueue, g_object_notify_queue_free); - } - - if (nqueue->freeze_count >= 65535) - g_critical("Free queue for %s (%p) is larger than 65535," - " called g_object_freeze_notify() too often." - " Forgot to call g_object_thaw_notify() or infinite loop", - G_OBJECT_TYPE_NAME (object), object); - else - nqueue->freeze_count++; - G_UNLOCK(notify_lock); - - return nqueue; -} - -static inline void -g_object_notify_queue_thaw (GObject *object, - GObjectNotifyQueue *nqueue) -{ - GObjectNotifyContext *context = nqueue->context; - GParamSpec *pspecs_mem[16], **pspecs, **free_me = NULL; - GSList *slist; - guint n_pspecs = 0; - - g_return_if_fail (nqueue->freeze_count > 0); - g_return_if_fail (g_atomic_int_get(&object->ref_count) > 0); - - G_LOCK(notify_lock); - - /* Just make sure we never get into some nasty race condition */ - if (G_UNLIKELY(nqueue->freeze_count == 0)) { - G_UNLOCK(notify_lock); - g_warning ("%s: property-changed notification for %s(%p) is not frozen", - G_STRFUNC, G_OBJECT_TYPE_NAME (object), object); - return; - } - - nqueue->freeze_count--; - if (nqueue->freeze_count) { - G_UNLOCK(notify_lock); - return; - } - - pspecs = nqueue->n_pspecs > 16 ? free_me = g_new (GParamSpec*, nqueue->n_pspecs) : pspecs_mem; - - for (slist = nqueue->pspecs; slist; slist = slist->next) - { - pspecs[n_pspecs++] = slist->data; - } - g_datalist_id_set_data (&object->qdata, context->quark_notify_queue, NULL); - - G_UNLOCK(notify_lock); - - if (n_pspecs) - context->dispatcher (object, n_pspecs, pspecs); - g_free (free_me); -} - -static inline void -g_object_notify_queue_clear (GObject *object, - GObjectNotifyQueue *nqueue) -{ - g_return_if_fail (nqueue->freeze_count > 0); - - G_LOCK(notify_lock); - - g_slist_free (nqueue->pspecs); - nqueue->pspecs = NULL; - nqueue->n_pspecs = 0; - - G_UNLOCK(notify_lock); -} - -static inline void -g_object_notify_queue_add (GObject *object, - GObjectNotifyQueue *nqueue, - GParamSpec *pspec) -{ - if (pspec->flags & G_PARAM_READABLE) - { - GParamSpec *redirect; - - G_LOCK(notify_lock); - - g_return_if_fail (nqueue->n_pspecs < 65535); - - redirect = g_param_spec_get_redirect_target (pspec); - if (redirect) - pspec = redirect; - - /* we do the deduping in _thaw */ - if (g_slist_find (nqueue->pspecs, pspec) == NULL) - { - nqueue->pspecs = g_slist_prepend (nqueue->pspecs, pspec); - nqueue->n_pspecs++; - } - - G_UNLOCK(notify_lock); - } -} - -/* NB: This function is not threadsafe, do not ever use it if - * you need a threadsafe notify queue. - * Use g_object_notify_queue_freeze() to acquire the queue and - * g_object_notify_queue_thaw() after you are done instead. - */ -static inline GObjectNotifyQueue* -g_object_notify_queue_from_object (GObject *object, - GObjectNotifyContext *context) -{ - return g_datalist_id_get_data (&object->qdata, context->quark_notify_queue); -} - -G_END_DECLS - -#endif /* __G_OBJECT_NOTIFY_QUEUE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gparam.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gparam.h deleted file mode 100644 index 84b3c445..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gparam.h +++ /dev/null @@ -1,414 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gparam.h: GParamSpec base class implementation - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PARAM_H__ -#define __G_PARAM_H__ - -#include - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -/** - * G_TYPE_IS_PARAM: - * @type: a #GType ID - * - * Checks whether @type "is a" %G_TYPE_PARAM. - */ -#define G_TYPE_IS_PARAM(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_PARAM) -/** - * G_PARAM_SPEC: - * @pspec: a valid #GParamSpec - * - * Casts a derived #GParamSpec object (e.g. of type #GParamSpecInt) into - * a #GParamSpec object. - */ -#define G_PARAM_SPEC(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec)) -/** - * G_IS_PARAM_SPEC: - * @pspec: a #GParamSpec - * - * Checks whether @pspec "is a" valid #GParamSpec structure of type %G_TYPE_PARAM - * or derived. - */ -#define G_IS_PARAM_SPEC(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM)) -/** - * G_PARAM_SPEC_CLASS: - * @pclass: a valid #GParamSpecClass - * - * Casts a derived #GParamSpecClass structure into a #GParamSpecClass structure. - */ -#define G_PARAM_SPEC_CLASS(pclass) (G_TYPE_CHECK_CLASS_CAST ((pclass), G_TYPE_PARAM, GParamSpecClass)) -/** - * G_IS_PARAM_SPEC_CLASS: - * @pclass: a #GParamSpecClass - * - * Checks whether @pclass "is a" valid #GParamSpecClass structure of type - * %G_TYPE_PARAM or derived. - */ -#define G_IS_PARAM_SPEC_CLASS(pclass) (G_TYPE_CHECK_CLASS_TYPE ((pclass), G_TYPE_PARAM)) -/** - * G_PARAM_SPEC_GET_CLASS: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GParamSpecClass of a #GParamSpec. - */ -#define G_PARAM_SPEC_GET_CLASS(pspec) (G_TYPE_INSTANCE_GET_CLASS ((pspec), G_TYPE_PARAM, GParamSpecClass)) - - -/* --- convenience macros --- */ -/** - * G_PARAM_SPEC_TYPE: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GType of this @pspec. - */ -#define G_PARAM_SPEC_TYPE(pspec) (G_TYPE_FROM_INSTANCE (pspec)) -/** - * G_PARAM_SPEC_TYPE_NAME: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GType name of this @pspec. - */ -#define G_PARAM_SPEC_TYPE_NAME(pspec) (g_type_name (G_PARAM_SPEC_TYPE (pspec))) -/** - * G_PARAM_SPEC_VALUE_TYPE: - * @pspec: a valid #GParamSpec - * - * Retrieves the #GType to initialize a #GValue for this parameter. - */ -#define G_PARAM_SPEC_VALUE_TYPE(pspec) (G_PARAM_SPEC (pspec)->value_type) -/** - * G_VALUE_HOLDS_PARAM: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values derived from type %G_TYPE_PARAM. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_PARAM(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_PARAM)) - - -/* --- flags --- */ -/** - * GParamFlags: - * @G_PARAM_READABLE: the parameter is readable - * @G_PARAM_WRITABLE: the parameter is writable - * @G_PARAM_CONSTRUCT: the parameter will be set upon object construction - * @G_PARAM_CONSTRUCT_ONLY: the parameter will only be set upon object construction - * @G_PARAM_LAX_VALIDATION: upon parameter conversion (see g_param_value_convert()) - * strict validation is not required - * @G_PARAM_STATIC_NAME: the string used as name when constructing the - * parameter is guaranteed to remain valid and - * unmodified for the lifetime of the parameter. - * Since 2.8 - * @G_PARAM_STATIC_NICK: the string used as nick when constructing the - * parameter is guaranteed to remain valid and - * unmmodified for the lifetime of the parameter. - * Since 2.8 - * @G_PARAM_STATIC_BLURB: the string used as blurb when constructing the - * parameter is guaranteed to remain valid and - * unmodified for the lifetime of the parameter. - * Since 2.8 - * @G_PARAM_PRIVATE: internal - * @G_PARAM_DEPRECATED: the parameter is deprecated and will be removed - * in a future version. A warning will be generated if it is used - * while running with G_ENABLE_DIAGNOSTIC=1. - * Since 2.26 - * - * Through the #GParamFlags flag values, certain aspects of parameters - * can be configured. - */ -typedef enum -{ - G_PARAM_READABLE = 1 << 0, - G_PARAM_WRITABLE = 1 << 1, - G_PARAM_CONSTRUCT = 1 << 2, - G_PARAM_CONSTRUCT_ONLY = 1 << 3, - G_PARAM_LAX_VALIDATION = 1 << 4, - G_PARAM_STATIC_NAME = 1 << 5, -#ifndef G_DISABLE_DEPRECATED - G_PARAM_PRIVATE = G_PARAM_STATIC_NAME, -#endif - G_PARAM_STATIC_NICK = 1 << 6, - G_PARAM_STATIC_BLURB = 1 << 7, - /* User defined flags go up to 30 */ - G_PARAM_DEPRECATED = 1 << 31 -} GParamFlags; -/** - * G_PARAM_READWRITE: - * - * #GParamFlags value alias for %G_PARAM_READABLE | %G_PARAM_WRITABLE. - */ -#define G_PARAM_READWRITE (G_PARAM_READABLE | G_PARAM_WRITABLE) -/** - * G_PARAM_STATIC_STRINGS: - * - * #GParamFlags value alias for %G_PARAM_STATIC_NAME | %G_PARAM_STATIC_NICK | %G_PARAM_STATIC_BLURB. - * - * Since 2.13.0 - */ -#define G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) -/* bits in the range 0xffffff00 are reserved for 3rd party usage */ -/** - * G_PARAM_MASK: - * - * Mask containing the bits of #GParamSpec.flags which are reserved for GLib. - */ -#define G_PARAM_MASK (0x000000ff) -/** - * G_PARAM_USER_SHIFT: - * - * Minimum shift count to be used for user defined flags, to be stored in - * #GParamSpec.flags. The maximum allowed is 30 + G_PARAM_USER_SHIFT. - */ -#define G_PARAM_USER_SHIFT (8) - -/* --- typedefs & structures --- */ -typedef struct _GParamSpec GParamSpec; -typedef struct _GParamSpecClass GParamSpecClass; -typedef struct _GParameter GParameter; -typedef struct _GParamSpecPool GParamSpecPool; -/** - * GParamSpec: - * @g_type_instance: private #GTypeInstance portion - * @name: name of this parameter: always an interned string - * @flags: #GParamFlags flags for this parameter - * @value_type: the #GValue type for this parameter - * @owner_type: #GType type that uses (introduces) this parameter - * - * All other fields of the GParamSpec struct are private and - * should not be used directly. - */ -struct _GParamSpec -{ - GTypeInstance g_type_instance; - - const gchar *name; /* interned string */ - GParamFlags flags; - GType value_type; - GType owner_type; /* class or interface using this property */ - - /*< private >*/ - gchar *_nick; - gchar *_blurb; - GData *qdata; - guint ref_count; - guint param_id; /* sort-criteria */ -}; -/** - * GParamSpecClass: - * @g_type_class: the parent class - * @value_type: the #GValue type for this parameter - * @finalize: The instance finalization function (optional), should chain - * up to the finalize method of the parent class. - * @value_set_default: Resets a @value to the default value for this type - * (recommended, the default is g_value_reset()), see - * g_param_value_set_default(). - * @value_validate: Ensures that the contents of @value comply with the - * specifications set out by this type (optional), see - * g_param_value_validate(). - * @values_cmp: Compares @value1 with @value2 according to this type - * (recommended, the default is memcmp()), see g_param_values_cmp(). - * - * The class structure for the GParamSpec type. - * Normally, GParamSpec classes are filled by - * g_param_type_register_static(). - */ -struct _GParamSpecClass -{ - GTypeClass g_type_class; - - GType value_type; - - void (*finalize) (GParamSpec *pspec); - - /* GParam methods */ - void (*value_set_default) (GParamSpec *pspec, - GValue *value); - gboolean (*value_validate) (GParamSpec *pspec, - GValue *value); - gint (*values_cmp) (GParamSpec *pspec, - const GValue *value1, - const GValue *value2); - /*< private >*/ - gpointer dummy[4]; -}; -/** - * GParameter: - * @name: the parameter name - * @value: the parameter value - * - * The GParameter struct is an auxiliary structure used - * to hand parameter name/value pairs to g_object_newv(). - */ -struct _GParameter /* auxiliary structure for _setv() variants */ -{ - const gchar *name; - GValue value; -}; - - -/* --- prototypes --- */ -GParamSpec* g_param_spec_ref (GParamSpec *pspec); -void g_param_spec_unref (GParamSpec *pspec); -void g_param_spec_sink (GParamSpec *pspec); -GParamSpec* g_param_spec_ref_sink (GParamSpec *pspec); -gpointer g_param_spec_get_qdata (GParamSpec *pspec, - GQuark quark); -void g_param_spec_set_qdata (GParamSpec *pspec, - GQuark quark, - gpointer data); -void g_param_spec_set_qdata_full (GParamSpec *pspec, - GQuark quark, - gpointer data, - GDestroyNotify destroy); -gpointer g_param_spec_steal_qdata (GParamSpec *pspec, - GQuark quark); -GParamSpec* g_param_spec_get_redirect_target (GParamSpec *pspec); - -void g_param_value_set_default (GParamSpec *pspec, - GValue *value); -gboolean g_param_value_defaults (GParamSpec *pspec, - GValue *value); -gboolean g_param_value_validate (GParamSpec *pspec, - GValue *value); -gboolean g_param_value_convert (GParamSpec *pspec, - const GValue *src_value, - GValue *dest_value, - gboolean strict_validation); -gint g_param_values_cmp (GParamSpec *pspec, - const GValue *value1, - const GValue *value2); -const gchar * g_param_spec_get_name (GParamSpec *pspec); -const gchar * g_param_spec_get_nick (GParamSpec *pspec); -const gchar * g_param_spec_get_blurb (GParamSpec *pspec); -void g_value_set_param (GValue *value, - GParamSpec *param); -GParamSpec* g_value_get_param (const GValue *value); -GParamSpec* g_value_dup_param (const GValue *value); - - -void g_value_take_param (GValue *value, - GParamSpec *param); -GLIB_DEPRECATED_FOR(g_value_take_param) -void g_value_set_param_take_ownership (GValue *value, - GParamSpec *param); - -/* --- convenience functions --- */ -typedef struct _GParamSpecTypeInfo GParamSpecTypeInfo; -/** - * GParamSpecTypeInfo: - * @instance_size: Size of the instance (object) structure. - * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the slice allocator now. - * @instance_init: Location of the instance initialization function (optional). - * @value_type: The #GType of values conforming to this #GParamSpec - * @finalize: The instance finalization function (optional). - * @value_set_default: Resets a @value to the default value for @pspec - * (recommended, the default is g_value_reset()), see - * g_param_value_set_default(). - * @value_validate: Ensures that the contents of @value comply with the - * specifications set out by @pspec (optional), see - * g_param_value_validate(). - * @values_cmp: Compares @value1 with @value2 according to @pspec - * (recommended, the default is memcmp()), see g_param_values_cmp(). - * - * This structure is used to provide the type system with the information - * required to initialize and destruct (finalize) a parameter's class and - * instances thereof. - * The initialized structure is passed to the g_param_type_register_static() - * The type system will perform a deep copy of this structure, so its memory - * does not need to be persistent across invocation of - * g_param_type_register_static(). - */ -struct _GParamSpecTypeInfo -{ - /* type system portion */ - guint16 instance_size; /* obligatory */ - guint16 n_preallocs; /* optional */ - void (*instance_init) (GParamSpec *pspec); /* optional */ - - /* class portion */ - GType value_type; /* obligatory */ - void (*finalize) (GParamSpec *pspec); /* optional */ - void (*value_set_default) (GParamSpec *pspec, /* recommended */ - GValue *value); - gboolean (*value_validate) (GParamSpec *pspec, /* optional */ - GValue *value); - gint (*values_cmp) (GParamSpec *pspec, /* recommended */ - const GValue *value1, - const GValue *value2); -}; -GType g_param_type_register_static (const gchar *name, - const GParamSpecTypeInfo *pspec_info); - -/* For registering builting types */ -GType _g_param_type_register_static_constant (const gchar *name, - const GParamSpecTypeInfo *pspec_info, - GType opt_type); - - -/* --- protected --- */ -gpointer g_param_spec_internal (GType param_type, - const gchar *name, - const gchar *nick, - const gchar *blurb, - GParamFlags flags); -GParamSpecPool* g_param_spec_pool_new (gboolean type_prefixing); -void g_param_spec_pool_insert (GParamSpecPool *pool, - GParamSpec *pspec, - GType owner_type); -void g_param_spec_pool_remove (GParamSpecPool *pool, - GParamSpec *pspec); -GParamSpec* g_param_spec_pool_lookup (GParamSpecPool *pool, - const gchar *param_name, - GType owner_type, - gboolean walk_ancestors); -GList* g_param_spec_pool_list_owned (GParamSpecPool *pool, - GType owner_type); -GParamSpec** g_param_spec_pool_list (GParamSpecPool *pool, - GType owner_type, - guint *n_pspecs_p); - - - -/* contracts: - * - * gboolean value_validate (GParamSpec *pspec, - * GValue *value): - * modify value contents in the least destructive way, so - * that it complies with pspec's requirements (i.e. - * according to minimum/maximum ranges etc...). return - * whether modification was necessary. - * - * gint values_cmp (GParamSpec *pspec, - * const GValue *value1, - * const GValue *value2): - * return value1 - value2, i.e. (-1) if value1 < value2, - * (+1) if value1 > value2, and (0) otherwise (equality) - */ - -G_END_DECLS - -#endif /* __G_PARAM_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gparamspecs.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gparamspecs.h deleted file mode 100644 index 3e0ff6e3..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gparamspecs.h +++ /dev/null @@ -1,1143 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gparamspecs.h: GLib default param specs - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_PARAMSPECS_H__ -#define __G_PARAMSPECS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_PARAM_CHAR: - * - * The #GType of #GParamSpecChar. - */ -#define G_TYPE_PARAM_CHAR (g_param_spec_types[0]) -/** - * G_IS_PARAM_SPEC_CHAR: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_CHAR. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_CHAR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_CHAR)) -/** - * G_PARAM_SPEC_CHAR: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecChar. - */ -#define G_PARAM_SPEC_CHAR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_CHAR, GParamSpecChar)) - -/** - * G_TYPE_PARAM_UCHAR: - * - * The #GType of #GParamSpecUChar. - */ -#define G_TYPE_PARAM_UCHAR (g_param_spec_types[1]) -/** - * G_IS_PARAM_SPEC_UCHAR: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UCHAR. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UCHAR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UCHAR)) -/** - * G_PARAM_SPEC_UCHAR: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUChar. - */ -#define G_PARAM_SPEC_UCHAR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UCHAR, GParamSpecUChar)) - -/** - * G_TYPE_PARAM_BOOLEAN: - * - * The #GType of #GParamSpecBoolean. - */ -#define G_TYPE_PARAM_BOOLEAN (g_param_spec_types[2]) -/** - * G_IS_PARAM_SPEC_BOOLEAN: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOOLEAN. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_BOOLEAN(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN)) -/** - * G_PARAM_SPEC_BOOLEAN: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecBoolean. - */ -#define G_PARAM_SPEC_BOOLEAN(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOOLEAN, GParamSpecBoolean)) - -/** - * G_TYPE_PARAM_INT: - * - * The #GType of #GParamSpecInt. - */ -#define G_TYPE_PARAM_INT (g_param_spec_types[3]) -/** - * G_IS_PARAM_SPEC_INT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_INT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT)) -/** - * G_PARAM_SPEC_INT: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecInt. - */ -#define G_PARAM_SPEC_INT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT, GParamSpecInt)) - -/** - * G_TYPE_PARAM_UINT: - * - * The #GType of #GParamSpecUInt. - */ -#define G_TYPE_PARAM_UINT (g_param_spec_types[4]) -/** - * G_IS_PARAM_SPEC_UINT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UINT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT)) -/** - * G_PARAM_SPEC_UINT: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUInt. - */ -#define G_PARAM_SPEC_UINT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT, GParamSpecUInt)) - -/** - * G_TYPE_PARAM_LONG: - * - * The #GType of #GParamSpecLong. - */ -#define G_TYPE_PARAM_LONG (g_param_spec_types[5]) -/** - * G_IS_PARAM_SPEC_LONG: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_LONG. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_LONG(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_LONG)) -/** - * G_PARAM_SPEC_LONG: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecLong. - */ -#define G_PARAM_SPEC_LONG(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_LONG, GParamSpecLong)) - -/** - * G_TYPE_PARAM_ULONG: - * - * The #GType of #GParamSpecULong. - */ -#define G_TYPE_PARAM_ULONG (g_param_spec_types[6]) -/** - * G_IS_PARAM_SPEC_ULONG: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ULONG. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_ULONG(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ULONG)) -/** - * G_PARAM_SPEC_ULONG: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecULong. - */ -#define G_PARAM_SPEC_ULONG(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ULONG, GParamSpecULong)) - -/** - * G_TYPE_PARAM_INT64: - * - * The #GType of #GParamSpecInt64. - */ -#define G_TYPE_PARAM_INT64 (g_param_spec_types[7]) -/** - * G_IS_PARAM_SPEC_INT64: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT64. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_INT64(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT64)) -/** - * G_PARAM_SPEC_INT64: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecInt64. - */ -#define G_PARAM_SPEC_INT64(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT64, GParamSpecInt64)) - -/** - * G_TYPE_PARAM_UINT64: - * - * The #GType of #GParamSpecUInt64. - */ -#define G_TYPE_PARAM_UINT64 (g_param_spec_types[8]) -/** - * G_IS_PARAM_SPEC_UINT64: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT64. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UINT64(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64)) -/** - * G_PARAM_SPEC_UINT64: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUInt64. - */ -#define G_PARAM_SPEC_UINT64(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT64, GParamSpecUInt64)) - -/** - * G_TYPE_PARAM_UNICHAR: - * - * The #GType of #GParamSpecUnichar. - */ -#define G_TYPE_PARAM_UNICHAR (g_param_spec_types[9]) -/** - * G_PARAM_SPEC_UNICHAR: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecUnichar. - */ -#define G_PARAM_SPEC_UNICHAR(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UNICHAR, GParamSpecUnichar)) -/** - * G_IS_PARAM_SPEC_UNICHAR: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UNICHAR. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_UNICHAR(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UNICHAR)) - -/** - * G_TYPE_PARAM_ENUM: - * - * The #GType of #GParamSpecEnum. - */ -#define G_TYPE_PARAM_ENUM (g_param_spec_types[10]) -/** - * G_IS_PARAM_SPEC_ENUM: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ENUM. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_ENUM(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM)) -/** - * G_PARAM_SPEC_ENUM: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecEnum. - */ -#define G_PARAM_SPEC_ENUM(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ENUM, GParamSpecEnum)) - -/** - * G_TYPE_PARAM_FLAGS: - * - * The #GType of #GParamSpecFlags. - */ -#define G_TYPE_PARAM_FLAGS (g_param_spec_types[11]) -/** - * G_IS_PARAM_SPEC_FLAGS: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLAGS. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_FLAGS(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS)) -/** - * G_PARAM_SPEC_FLAGS: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecFlags. - */ -#define G_PARAM_SPEC_FLAGS(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLAGS, GParamSpecFlags)) - -/** - * G_TYPE_PARAM_FLOAT: - * - * The #GType of #GParamSpecFloat. - */ -#define G_TYPE_PARAM_FLOAT (g_param_spec_types[12]) -/** - * G_IS_PARAM_SPEC_FLOAT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLOAT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_FLOAT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLOAT)) -/** - * G_PARAM_SPEC_FLOAT: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecFloat. - */ -#define G_PARAM_SPEC_FLOAT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLOAT, GParamSpecFloat)) - -/** - * G_TYPE_PARAM_DOUBLE: - * - * The #GType of #GParamSpecDouble. - */ -#define G_TYPE_PARAM_DOUBLE (g_param_spec_types[13]) -/** - * G_IS_PARAM_SPEC_DOUBLE: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_DOUBLE. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_DOUBLE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE)) -/** - * G_PARAM_SPEC_DOUBLE: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecDouble. - */ -#define G_PARAM_SPEC_DOUBLE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_DOUBLE, GParamSpecDouble)) - -/** - * G_TYPE_PARAM_STRING: - * - * The #GType of #GParamSpecString. - */ -#define G_TYPE_PARAM_STRING (g_param_spec_types[14]) -/** - * G_IS_PARAM_SPEC_STRING: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_STRING. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_STRING(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING)) -/** - * G_PARAM_SPEC_STRING: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecString. - */ -#define G_PARAM_SPEC_STRING(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_STRING, GParamSpecString)) - -/** - * G_TYPE_PARAM_PARAM: - * - * The #GType of #GParamSpecParam. - */ -#define G_TYPE_PARAM_PARAM (g_param_spec_types[15]) -/** - * G_IS_PARAM_SPEC_PARAM: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_PARAM. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_PARAM(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_PARAM)) -/** - * G_PARAM_SPEC_PARAM: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecParam. - */ -#define G_PARAM_SPEC_PARAM(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_PARAM, GParamSpecParam)) - -/** - * G_TYPE_PARAM_BOXED: - * - * The #GType of #GParamSpecBoxed. - */ -#define G_TYPE_PARAM_BOXED (g_param_spec_types[16]) -/** - * G_IS_PARAM_SPEC_BOXED: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOXED. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_BOXED(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED)) -/** - * G_PARAM_SPEC_BOXED: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecBoxed. - */ -#define G_PARAM_SPEC_BOXED(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOXED, GParamSpecBoxed)) - -/** - * G_TYPE_PARAM_POINTER: - * - * The #GType of #GParamSpecPointer. - */ -#define G_TYPE_PARAM_POINTER (g_param_spec_types[17]) -/** - * G_IS_PARAM_SPEC_POINTER: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_POINTER. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_POINTER(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER)) -/** - * G_PARAM_SPEC_POINTER: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecPointer. - */ -#define G_PARAM_SPEC_POINTER(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_POINTER, GParamSpecPointer)) - -/** - * G_TYPE_PARAM_VALUE_ARRAY: - * - * The #GType of #GParamSpecValueArray. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_TYPE_PARAM_VALUE_ARRAY (g_param_spec_types[18]) -/** - * G_IS_PARAM_SPEC_VALUE_ARRAY: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VALUE_ARRAY. - * - * Returns: %TRUE on success. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_IS_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VALUE_ARRAY)) -/** - * G_PARAM_SPEC_VALUE_ARRAY: - * @pspec: a valid #GParamSpec instance - * - * Cast a #GParamSpec instance into a #GParamSpecValueArray. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VALUE_ARRAY, GParamSpecValueArray)) - -/** - * G_TYPE_PARAM_OBJECT: - * - * The #GType of #GParamSpecObject. - */ -#define G_TYPE_PARAM_OBJECT (g_param_spec_types[19]) -/** - * G_IS_PARAM_SPEC_OBJECT: - * @pspec: a valid #GParamSpec instance - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OBJECT. - * - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_OBJECT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT)) -/** - * G_PARAM_SPEC_OBJECT: - * @pspec: a valid #GParamSpec instance - * - * Casts a #GParamSpec instance into a #GParamSpecObject. - */ -#define G_PARAM_SPEC_OBJECT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OBJECT, GParamSpecObject)) - -/** - * G_TYPE_PARAM_OVERRIDE: - * - * The #GType of #GParamSpecOverride. - * - * Since: 2.4 - */ -#define G_TYPE_PARAM_OVERRIDE (g_param_spec_types[20]) -/** - * G_IS_PARAM_SPEC_OVERRIDE: - * @pspec: a #GParamSpec - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OVERRIDE. - * - * Since: 2.4 - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_OVERRIDE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OVERRIDE)) -/** - * G_PARAM_SPEC_OVERRIDE: - * @pspec: a #GParamSpec - * - * Casts a #GParamSpec into a #GParamSpecOverride. - * - * Since: 2.4 - */ -#define G_PARAM_SPEC_OVERRIDE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OVERRIDE, GParamSpecOverride)) - -/** - * G_TYPE_PARAM_GTYPE: - * - * The #GType of #GParamSpecGType. - * - * Since: 2.10 - */ -#define G_TYPE_PARAM_GTYPE (g_param_spec_types[21]) -/** - * G_IS_PARAM_SPEC_GTYPE: - * @pspec: a #GParamSpec - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_GTYPE. - * - * Since: 2.10 - * Returns: %TRUE on success. - */ -#define G_IS_PARAM_SPEC_GTYPE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_GTYPE)) -/** - * G_PARAM_SPEC_GTYPE: - * @pspec: a #GParamSpec - * - * Casts a #GParamSpec into a #GParamSpecGType. - * - * Since: 2.10 - */ -#define G_PARAM_SPEC_GTYPE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_GTYPE, GParamSpecGType)) - -/** - * G_TYPE_PARAM_VARIANT: - * - * The #GType of #GParamSpecVariant. - * - * Since: 2.26 - */ -#define G_TYPE_PARAM_VARIANT (g_param_spec_types[22]) -/** - * G_IS_PARAM_SPEC_VARIANT: - * @pspec: a #GParamSpec - * - * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VARIANT. - * - * Returns: %TRUE on success - * - * Since: 2.26 - */ -#define G_IS_PARAM_SPEC_VARIANT(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VARIANT)) -/** - * G_PARAM_SPEC_VARIANT: - * @pspec: a #GParamSpec - * - * Casts a #GParamSpec into a #GParamSpecVariant. - * - * Since: 2.26 - */ -#define G_PARAM_SPEC_VARIANT(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VARIANT, GParamSpecVariant)) - -/* --- typedefs & structures --- */ -typedef struct _GParamSpecChar GParamSpecChar; -typedef struct _GParamSpecUChar GParamSpecUChar; -typedef struct _GParamSpecBoolean GParamSpecBoolean; -typedef struct _GParamSpecInt GParamSpecInt; -typedef struct _GParamSpecUInt GParamSpecUInt; -typedef struct _GParamSpecLong GParamSpecLong; -typedef struct _GParamSpecULong GParamSpecULong; -typedef struct _GParamSpecInt64 GParamSpecInt64; -typedef struct _GParamSpecUInt64 GParamSpecUInt64; -typedef struct _GParamSpecUnichar GParamSpecUnichar; -typedef struct _GParamSpecEnum GParamSpecEnum; -typedef struct _GParamSpecFlags GParamSpecFlags; -typedef struct _GParamSpecFloat GParamSpecFloat; -typedef struct _GParamSpecDouble GParamSpecDouble; -typedef struct _GParamSpecString GParamSpecString; -typedef struct _GParamSpecParam GParamSpecParam; -typedef struct _GParamSpecBoxed GParamSpecBoxed; -typedef struct _GParamSpecPointer GParamSpecPointer; -typedef struct _GParamSpecValueArray GParamSpecValueArray; -typedef struct _GParamSpecObject GParamSpecObject; -typedef struct _GParamSpecOverride GParamSpecOverride; -typedef struct _GParamSpecGType GParamSpecGType; -typedef struct _GParamSpecVariant GParamSpecVariant; - -/** - * GParamSpecChar: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for character properties. - */ -struct _GParamSpecChar -{ - GParamSpec parent_instance; - - gint8 minimum; - gint8 maximum; - gint8 default_value; -}; -/** - * GParamSpecUChar: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned character properties. - */ -struct _GParamSpecUChar -{ - GParamSpec parent_instance; - - guint8 minimum; - guint8 maximum; - guint8 default_value; -}; -/** - * GParamSpecBoolean: - * @parent_instance: private #GParamSpec portion - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for boolean properties. - */ -struct _GParamSpecBoolean -{ - GParamSpec parent_instance; - - gboolean default_value; -}; -/** - * GParamSpecInt: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for integer properties. - */ -struct _GParamSpecInt -{ - GParamSpec parent_instance; - - gint minimum; - gint maximum; - gint default_value; -}; -/** - * GParamSpecUInt: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned integer properties. - */ -struct _GParamSpecUInt -{ - GParamSpec parent_instance; - - guint minimum; - guint maximum; - guint default_value; -}; -/** - * GParamSpecLong: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for long integer properties. - */ -struct _GParamSpecLong -{ - GParamSpec parent_instance; - - glong minimum; - glong maximum; - glong default_value; -}; -/** - * GParamSpecULong: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned long integer properties. - */ -struct _GParamSpecULong -{ - GParamSpec parent_instance; - - gulong minimum; - gulong maximum; - gulong default_value; -}; -/** - * GParamSpecInt64: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for 64bit integer properties. - */ -struct _GParamSpecInt64 -{ - GParamSpec parent_instance; - - gint64 minimum; - gint64 maximum; - gint64 default_value; -}; -/** - * GParamSpecUInt64: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unsigned 64bit integer properties. - */ -struct _GParamSpecUInt64 -{ - GParamSpec parent_instance; - - guint64 minimum; - guint64 maximum; - guint64 default_value; -}; -/** - * GParamSpecUnichar: - * @parent_instance: private #GParamSpec portion - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for unichar (unsigned integer) properties. - */ -struct _GParamSpecUnichar -{ - GParamSpec parent_instance; - - gunichar default_value; -}; -/** - * GParamSpecEnum: - * @parent_instance: private #GParamSpec portion - * @enum_class: the #GEnumClass for the enum - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for enum - * properties. - */ -struct _GParamSpecEnum -{ - GParamSpec parent_instance; - - GEnumClass *enum_class; - gint default_value; -}; -/** - * GParamSpecFlags: - * @parent_instance: private #GParamSpec portion - * @flags_class: the #GFlagsClass for the flags - * @default_value: default value for the property specified - * - * A #GParamSpec derived structure that contains the meta data for flags - * properties. - */ -struct _GParamSpecFlags -{ - GParamSpec parent_instance; - - GFlagsClass *flags_class; - guint default_value; -}; -/** - * GParamSpecFloat: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * @epsilon: values closer than @epsilon will be considered identical - * by g_param_values_cmp(); the default value is 1e-30. - * - * A #GParamSpec derived structure that contains the meta data for float properties. - */ -struct _GParamSpecFloat -{ - GParamSpec parent_instance; - - gfloat minimum; - gfloat maximum; - gfloat default_value; - gfloat epsilon; -}; -/** - * GParamSpecDouble: - * @parent_instance: private #GParamSpec portion - * @minimum: minimum value for the property specified - * @maximum: maximum value for the property specified - * @default_value: default value for the property specified - * @epsilon: values closer than @epsilon will be considered identical - * by g_param_values_cmp(); the default value is 1e-90. - * - * A #GParamSpec derived structure that contains the meta data for double properties. - */ -struct _GParamSpecDouble -{ - GParamSpec parent_instance; - - gdouble minimum; - gdouble maximum; - gdouble default_value; - gdouble epsilon; -}; -/** - * GParamSpecString: - * @parent_instance: private #GParamSpec portion - * @default_value: default value for the property specified - * @cset_first: a string containing the allowed values for the first byte - * @cset_nth: a string containing the allowed values for the subsequent bytes - * @substitutor: the replacement byte for bytes which don't match @cset_first or @cset_nth. - * @null_fold_if_empty: replace empty string by %NULL - * @ensure_non_null: replace %NULL strings by an empty string - * - * A #GParamSpec derived structure that contains the meta data for string - * properties. - */ -struct _GParamSpecString -{ - GParamSpec parent_instance; - - gchar *default_value; - gchar *cset_first; - gchar *cset_nth; - gchar substitutor; - guint null_fold_if_empty : 1; - guint ensure_non_null : 1; -}; -/** - * GParamSpecParam: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for %G_TYPE_PARAM - * properties. - */ -struct _GParamSpecParam -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecBoxed: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for boxed properties. - */ -struct _GParamSpecBoxed -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecPointer: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for pointer properties. - */ -struct _GParamSpecPointer -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecValueArray: - * @parent_instance: private #GParamSpec portion - * @element_spec: a #GParamSpec describing the elements contained in arrays of this property, may be %NULL - * @fixed_n_elements: if greater than 0, arrays of this property will always have this many elements - * - * A #GParamSpec derived structure that contains the meta data for #GValueArray properties. - */ -struct _GParamSpecValueArray -{ - GParamSpec parent_instance; - GParamSpec *element_spec; - guint fixed_n_elements; -}; -/** - * GParamSpecObject: - * @parent_instance: private #GParamSpec portion - * - * A #GParamSpec derived structure that contains the meta data for object properties. - */ -struct _GParamSpecObject -{ - GParamSpec parent_instance; -}; -/** - * GParamSpecOverride: - * - * This is a type of #GParamSpec type that simply redirects operations to - * another paramspec. All operations other than getting or - * setting the value are redirected, including accessing the nick and - * blurb, validating a value, and so forth. See - * g_param_spec_get_redirect_target() for retrieving the overidden - * property. #GParamSpecOverride is used in implementing - * g_object_class_override_property(), and will not be directly useful - * unless you are implementing a new base type similar to GObject. - * - * Since: 2.4 - */ -struct _GParamSpecOverride -{ - /*< private >*/ - GParamSpec parent_instance; - GParamSpec *overridden; -}; -/** - * GParamSpecGType: - * @parent_instance: private #GParamSpec portion - * @is_a_type: a #GType whose subtypes can occur as values - * - * A #GParamSpec derived structure that contains the meta data for #GType properties. - * - * Since: 2.10 - */ -struct _GParamSpecGType -{ - GParamSpec parent_instance; - GType is_a_type; -}; -/** - * GParamSpecVariant: - * @parent_instance: private #GParamSpec portion - * @type: a #GVariantType, or %NULL - * @default_value: a #GVariant, or %NULL - * - * A #GParamSpec derived structure that contains the meta data for #GVariant properties. - * - * Since: 2.26 - */ -struct _GParamSpecVariant -{ - GParamSpec parent_instance; - GVariantType *type; - GVariant *default_value; - - /*< private >*/ - gpointer padding[4]; -}; - -/* --- GParamSpec prototypes --- */ -GParamSpec* g_param_spec_char (const gchar *name, - const gchar *nick, - const gchar *blurb, - gint8 minimum, - gint8 maximum, - gint8 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_uchar (const gchar *name, - const gchar *nick, - const gchar *blurb, - guint8 minimum, - guint8 maximum, - guint8 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_boolean (const gchar *name, - const gchar *nick, - const gchar *blurb, - gboolean default_value, - GParamFlags flags); -GParamSpec* g_param_spec_int (const gchar *name, - const gchar *nick, - const gchar *blurb, - gint minimum, - gint maximum, - gint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_uint (const gchar *name, - const gchar *nick, - const gchar *blurb, - guint minimum, - guint maximum, - guint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_long (const gchar *name, - const gchar *nick, - const gchar *blurb, - glong minimum, - glong maximum, - glong default_value, - GParamFlags flags); -GParamSpec* g_param_spec_ulong (const gchar *name, - const gchar *nick, - const gchar *blurb, - gulong minimum, - gulong maximum, - gulong default_value, - GParamFlags flags); -GParamSpec* g_param_spec_int64 (const gchar *name, - const gchar *nick, - const gchar *blurb, - gint64 minimum, - gint64 maximum, - gint64 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_uint64 (const gchar *name, - const gchar *nick, - const gchar *blurb, - guint64 minimum, - guint64 maximum, - guint64 default_value, - GParamFlags flags); -GParamSpec* g_param_spec_unichar (const gchar *name, - const gchar *nick, - const gchar *blurb, - gunichar default_value, - GParamFlags flags); -GParamSpec* g_param_spec_enum (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType enum_type, - gint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_flags (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType flags_type, - guint default_value, - GParamFlags flags); -GParamSpec* g_param_spec_float (const gchar *name, - const gchar *nick, - const gchar *blurb, - gfloat minimum, - gfloat maximum, - gfloat default_value, - GParamFlags flags); -GParamSpec* g_param_spec_double (const gchar *name, - const gchar *nick, - const gchar *blurb, - gdouble minimum, - gdouble maximum, - gdouble default_value, - GParamFlags flags); -GParamSpec* g_param_spec_string (const gchar *name, - const gchar *nick, - const gchar *blurb, - const gchar *default_value, - GParamFlags flags); -GParamSpec* g_param_spec_param (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType param_type, - GParamFlags flags); -GParamSpec* g_param_spec_boxed (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType boxed_type, - GParamFlags flags); -GParamSpec* g_param_spec_pointer (const gchar *name, - const gchar *nick, - const gchar *blurb, - GParamFlags flags); -GParamSpec* g_param_spec_value_array (const gchar *name, - const gchar *nick, - const gchar *blurb, - GParamSpec *element_spec, - GParamFlags flags); -GParamSpec* g_param_spec_object (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType object_type, - GParamFlags flags); -GParamSpec* g_param_spec_override (const gchar *name, - GParamSpec *overridden); -GParamSpec* g_param_spec_gtype (const gchar *name, - const gchar *nick, - const gchar *blurb, - GType is_a_type, - GParamFlags flags); -GParamSpec* g_param_spec_variant (const gchar *name, - const gchar *nick, - const gchar *blurb, - const GVariantType *type, - GVariant *default_value, - GParamFlags flags); - -/* --- internal --- */ -/* We prefix variable declarations so they can - * properly get exported in windows dlls. - */ -#ifndef GOBJECT_VAR -# ifdef G_PLATFORM_WIN32 -# ifdef GOBJECT_STATIC_COMPILATION -# define GOBJECT_VAR extern -# else /* !GOBJECT_STATIC_COMPILATION */ -# ifdef GOBJECT_COMPILATION -# ifdef DLL_EXPORT -# define GOBJECT_VAR __declspec(dllexport) -# else /* !DLL_EXPORT */ -# define GOBJECT_VAR extern -# endif /* !DLL_EXPORT */ -# else /* !GOBJECT_COMPILATION */ -# define GOBJECT_VAR extern __declspec(dllimport) -# endif /* !GOBJECT_COMPILATION */ -# endif /* !GOBJECT_STATIC_COMPILATION */ -# else /* !G_PLATFORM_WIN32 */ -# define GOBJECT_VAR extern -# endif /* !G_PLATFORM_WIN32 */ -#endif /* GOBJECT_VAR */ - -GOBJECT_VAR GType *g_param_spec_types; - -G_END_DECLS - -#endif /* __G_PARAMSPECS_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gsignal.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gsignal.h deleted file mode 100644 index fbf1c19f..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gsignal.h +++ /dev/null @@ -1,547 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000-2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SIGNAL_H__ -#define __G_SIGNAL_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* --- typedefs --- */ -typedef struct _GSignalQuery GSignalQuery; -typedef struct _GSignalInvocationHint GSignalInvocationHint; -/** - * GSignalCMarshaller: - * - * This is the signature of marshaller functions, required to marshall - * arrays of parameter values to signal emissions into C language callback - * invocations. It is merely an alias to #GClosureMarshal since the #GClosure - * mechanism takes over responsibility of actual function invocation for the - * signal system. - */ -typedef GClosureMarshal GSignalCMarshaller; -/** - * GSignalCVaMarshaller: - * - * This is the signature of va_list marshaller functions, an optional - * marshaller that can be used in some situations to avoid - * marshalling the signal argument into GValues. - */ -typedef GVaClosureMarshal GSignalCVaMarshaller; -/** - * GSignalEmissionHook: - * @ihint: Signal invocation hint, see #GSignalInvocationHint. - * @n_param_values: the number of parameters to the function, including - * the instance on which the signal was emitted. - * @param_values: (array length=n_param_values): the instance on which - * the signal was emitted, followed by the parameters of the emission. - * @data: user data associated with the hook. - * - * A simple function pointer to get invoked when the signal is emitted. This - * allows you to tie a hook to the signal type, so that it will trap all - * emissions of that signal, from any object. - * - * You may not attach these to signals created with the #G_SIGNAL_NO_HOOKS flag. - * - * Returns: whether it wants to stay connected. If it returns %FALSE, the signal - * hook is disconnected (and destroyed). - */ -typedef gboolean (*GSignalEmissionHook) (GSignalInvocationHint *ihint, - guint n_param_values, - const GValue *param_values, - gpointer data); -/** - * GSignalAccumulator: - * @ihint: Signal invocation hint, see #GSignalInvocationHint. - * @return_accu: Accumulator to collect callback return values in, this - * is the return value of the current signal emission. - * @handler_return: A #GValue holding the return value of the signal handler. - * @data: Callback data that was specified when creating the signal. - * - * The signal accumulator is a special callback function that can be used - * to collect return values of the various callbacks that are called - * during a signal emission. The signal accumulator is specified at signal - * creation time, if it is left %NULL, no accumulation of callback return - * values is performed. The return value of signal emissions is then the - * value returned by the last callback. - * - * Returns: The accumulator function returns whether the signal emission - * should be aborted. Returning %FALSE means to abort the - * current emission and %TRUE is returned for continuation. - */ -typedef gboolean (*GSignalAccumulator) (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer data); - - -/* --- run, match and connect types --- */ -/** - * GSignalFlags: - * @G_SIGNAL_RUN_FIRST: Invoke the object method handler in the first emission stage. - * @G_SIGNAL_RUN_LAST: Invoke the object method handler in the third emission stage. - * @G_SIGNAL_RUN_CLEANUP: Invoke the object method handler in the last emission stage. - * @G_SIGNAL_NO_RECURSE: Signals being emitted for an object while currently being in - * emission for this very object will not be emitted recursively, - * but instead cause the first emission to be restarted. - * @G_SIGNAL_DETAILED: This signal supports "::detail" appendices to the signal name - * upon handler connections and emissions. - * @G_SIGNAL_ACTION: Action signals are signals that may freely be emitted on alive - * objects from user code via g_signal_emit() and friends, without - * the need of being embedded into extra code that performs pre or - * post emission adjustments on the object. They can also be thought - * of as object methods which can be called generically by - * third-party code. - * @G_SIGNAL_NO_HOOKS: No emissions hooks are supported for this signal. - * @G_SIGNAL_MUST_COLLECT: Varargs signal emission will always collect the - * arguments, even if there are no signal handlers connected. Since 2.30. - * @G_SIGNAL_DEPRECATED: The signal is deprecated and will be removed - * in a future version. A warning will be generated if it is connected while - * running with G_ENABLE_DIAGNOSTIC=1. Since 2.32. - * - * The signal flags are used to specify a signal's behaviour, the overall - * signal description outlines how especially the RUN flags control the - * stages of a signal emission. - */ -typedef enum -{ - G_SIGNAL_RUN_FIRST = 1 << 0, - G_SIGNAL_RUN_LAST = 1 << 1, - G_SIGNAL_RUN_CLEANUP = 1 << 2, - G_SIGNAL_NO_RECURSE = 1 << 3, - G_SIGNAL_DETAILED = 1 << 4, - G_SIGNAL_ACTION = 1 << 5, - G_SIGNAL_NO_HOOKS = 1 << 6, - G_SIGNAL_MUST_COLLECT = 1 << 7, - G_SIGNAL_DEPRECATED = 1 << 8 -} GSignalFlags; -/** - * G_SIGNAL_FLAGS_MASK: - * - * A mask for all #GSignalFlags bits. - */ -#define G_SIGNAL_FLAGS_MASK 0x1ff -/** - * GConnectFlags: - * @G_CONNECT_AFTER: whether the handler should be called before or after the - * default handler of the signal. - * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when - * calling the handler. - * - * The connection flags are used to specify the behaviour of a signal's - * connection. - */ -typedef enum -{ - G_CONNECT_AFTER = 1 << 0, - G_CONNECT_SWAPPED = 1 << 1 -} GConnectFlags; -/** - * GSignalMatchType: - * @G_SIGNAL_MATCH_ID: The signal id must be equal. - * @G_SIGNAL_MATCH_DETAIL: The signal detail be equal. - * @G_SIGNAL_MATCH_CLOSURE: The closure must be the same. - * @G_SIGNAL_MATCH_FUNC: The C closure callback must be the same. - * @G_SIGNAL_MATCH_DATA: The closure data must be the same. - * @G_SIGNAL_MATCH_UNBLOCKED: Only unblocked signals may matched. - * - * The match types specify what g_signal_handlers_block_matched(), - * g_signal_handlers_unblock_matched() and g_signal_handlers_disconnect_matched() - * match signals by. - */ -typedef enum -{ - G_SIGNAL_MATCH_ID = 1 << 0, - G_SIGNAL_MATCH_DETAIL = 1 << 1, - G_SIGNAL_MATCH_CLOSURE = 1 << 2, - G_SIGNAL_MATCH_FUNC = 1 << 3, - G_SIGNAL_MATCH_DATA = 1 << 4, - G_SIGNAL_MATCH_UNBLOCKED = 1 << 5 -} GSignalMatchType; -/** - * G_SIGNAL_MATCH_MASK: - * - * A mask for all #GSignalMatchType bits. - */ -#define G_SIGNAL_MATCH_MASK 0x3f -/** - * G_SIGNAL_TYPE_STATIC_SCOPE: - * - * This macro flags signal argument types for which the signal system may - * assume that instances thereof remain persistent across all signal emissions - * they are used in. This is only useful for non ref-counted, value-copy types. - * - * To flag a signal argument in this way, add - * | G_SIGNAL_TYPE_STATIC_SCOPE to the corresponding argument - * of g_signal_new(). - * |[ - * g_signal_new ("size_request", - * G_TYPE_FROM_CLASS (gobject_class), - * G_SIGNAL_RUN_FIRST, - * G_STRUCT_OFFSET (GtkWidgetClass, size_request), - * NULL, NULL, - * _gtk_marshal_VOID__BOXED, - * G_TYPE_NONE, 1, - * GTK_TYPE_REQUISITION | G_SIGNAL_TYPE_STATIC_SCOPE); - * ]| - */ -#define G_SIGNAL_TYPE_STATIC_SCOPE (G_TYPE_FLAG_RESERVED_ID_BIT) - - -/* --- signal information --- */ -/** - * GSignalInvocationHint: - * @signal_id: The signal id of the signal invoking the callback - * @detail: The detail passed on for this emission - * @run_type: The stage the signal emission is currently in, this - * field will contain one of %G_SIGNAL_RUN_FIRST, - * %G_SIGNAL_RUN_LAST or %G_SIGNAL_RUN_CLEANUP. - * - * The #GSignalInvocationHint structure is used to pass on additional information - * to callbacks during a signal emission. - */ -struct _GSignalInvocationHint -{ - guint signal_id; - GQuark detail; - GSignalFlags run_type; -}; -/** - * GSignalQuery: - * @signal_id: The signal id of the signal being queried, or 0 if the - * signal to be queried was unknown. - * @signal_name: The signal name. - * @itype: The interface/instance type that this signal can be emitted for. - * @signal_flags: The signal flags as passed in to g_signal_new(). - * @return_type: The return type for user callbacks. - * @n_params: The number of parameters that user callbacks take. - * @param_types: (array length=n_params): The individual parameter types for - * user callbacks, note that the effective callback signature is: - * - * @return_type callback (#gpointer data1, - * [param_types param_names,] - * gpointer data2); - * - * - * A structure holding in-depth information for a specific signal. It is - * filled in by the g_signal_query() function. - */ -struct _GSignalQuery -{ - guint signal_id; - const gchar *signal_name; - GType itype; - GSignalFlags signal_flags; - GType return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ - guint n_params; - const GType *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ -}; - - -/* --- signals --- */ -guint g_signal_newv (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - GClosure *class_closure, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - GType *param_types); -guint g_signal_new_valist (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - GClosure *class_closure, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - va_list args); -guint g_signal_new (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - guint class_offset, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - ...); -guint g_signal_new_class_handler (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - GCallback class_handler, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - ...); -void g_signal_set_va_marshaller (guint signal_id, - GType instance_type, - GSignalCVaMarshaller va_marshaller); - -void g_signal_emitv (const GValue *instance_and_params, - guint signal_id, - GQuark detail, - GValue *return_value); -void g_signal_emit_valist (gpointer instance, - guint signal_id, - GQuark detail, - va_list var_args); -void g_signal_emit (gpointer instance, - guint signal_id, - GQuark detail, - ...); -void g_signal_emit_by_name (gpointer instance, - const gchar *detailed_signal, - ...); -guint g_signal_lookup (const gchar *name, - GType itype); -const gchar * g_signal_name (guint signal_id); -void g_signal_query (guint signal_id, - GSignalQuery *query); -guint* g_signal_list_ids (GType itype, - guint *n_ids); -gboolean g_signal_parse_name (const gchar *detailed_signal, - GType itype, - guint *signal_id_p, - GQuark *detail_p, - gboolean force_detail_quark); -GSignalInvocationHint* g_signal_get_invocation_hint (gpointer instance); - - -/* --- signal emissions --- */ -void g_signal_stop_emission (gpointer instance, - guint signal_id, - GQuark detail); -void g_signal_stop_emission_by_name (gpointer instance, - const gchar *detailed_signal); -gulong g_signal_add_emission_hook (guint signal_id, - GQuark detail, - GSignalEmissionHook hook_func, - gpointer hook_data, - GDestroyNotify data_destroy); -void g_signal_remove_emission_hook (guint signal_id, - gulong hook_id); - - -/* --- signal handlers --- */ -gboolean g_signal_has_handler_pending (gpointer instance, - guint signal_id, - GQuark detail, - gboolean may_be_blocked); -gulong g_signal_connect_closure_by_id (gpointer instance, - guint signal_id, - GQuark detail, - GClosure *closure, - gboolean after); -gulong g_signal_connect_closure (gpointer instance, - const gchar *detailed_signal, - GClosure *closure, - gboolean after); -gulong g_signal_connect_data (gpointer instance, - const gchar *detailed_signal, - GCallback c_handler, - gpointer data, - GClosureNotify destroy_data, - GConnectFlags connect_flags); -void g_signal_handler_block (gpointer instance, - gulong handler_id); -void g_signal_handler_unblock (gpointer instance, - gulong handler_id); -void g_signal_handler_disconnect (gpointer instance, - gulong handler_id); -gboolean g_signal_handler_is_connected (gpointer instance, - gulong handler_id); -gulong g_signal_handler_find (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint g_signal_handlers_block_matched (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint g_signal_handlers_unblock_matched (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint g_signal_handlers_disconnect_matched (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); - - -/* --- overriding and chaining --- */ -void g_signal_override_class_closure (guint signal_id, - GType instance_type, - GClosure *class_closure); -void g_signal_override_class_handler (const gchar *signal_name, - GType instance_type, - GCallback class_handler); -void g_signal_chain_from_overridden (const GValue *instance_and_params, - GValue *return_value); -void g_signal_chain_from_overridden_handler (gpointer instance, - ...); - - -/* --- convenience --- */ -/** - * g_signal_connect: - * @instance: the instance to connect to. - * @detailed_signal: a string of the form "signal-name::detail". - * @c_handler: the #GCallback to connect. - * @data: data to pass to @c_handler calls. - * - * Connects a #GCallback function to a signal for a particular object. - * - * The handler will be called before the default handler of the signal. - * - * Returns: the handler id - */ -#define g_signal_connect(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0) -/** - * g_signal_connect_after: - * @instance: the instance to connect to. - * @detailed_signal: a string of the form "signal-name::detail". - * @c_handler: the #GCallback to connect. - * @data: data to pass to @c_handler calls. - * - * Connects a #GCallback function to a signal for a particular object. - * - * The handler will be called after the default handler of the signal. - * - * Returns: the handler id - */ -#define g_signal_connect_after(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_AFTER) -/** - * g_signal_connect_swapped: - * @instance: the instance to connect to. - * @detailed_signal: a string of the form "signal-name::detail". - * @c_handler: the #GCallback to connect. - * @data: data to pass to @c_handler calls. - * - * Connects a #GCallback function to a signal for a particular object. - * - * The instance on which the signal is emitted and @data will be swapped when - * calling the handler. - * - * Returns: the handler id - */ -#define g_signal_connect_swapped(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_SWAPPED) -/** - * g_signal_handlers_disconnect_by_func: - * @instance: The instance to remove handlers from. - * @func: The C closure callback of the handlers (useless for non-C closures). - * @data: The closure data of the handlers' closures. - * - * Disconnects all handlers on an instance that match @func and @data. - * - * Returns: The number of handlers that matched. - */ -#define g_signal_handlers_disconnect_by_func(instance, func, data) \ - g_signal_handlers_disconnect_matched ((instance), \ - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), \ - 0, 0, NULL, (func), (data)) - -/** - * g_signal_handlers_disconnect_by_data: - * @instance: The instance to remove handlers from - * @data: the closure data of the handlers' closures - * - * Disconnects all handlers on an instance that match @data. - * - * Returns: The number of handlers that matched. - * - * Since: 2.32 - */ -#define g_signal_handlers_disconnect_by_data(instance, data) \ - g_signal_handlers_disconnect_matched ((instance), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, (data)) - -/** - * g_signal_handlers_block_by_func: - * @instance: The instance to block handlers from. - * @func: The C closure callback of the handlers (useless for non-C closures). - * @data: The closure data of the handlers' closures. - * - * Blocks all handlers on an instance that match @func and @data. - * - * Returns: The number of handlers that matched. - */ -#define g_signal_handlers_block_by_func(instance, func, data) \ - g_signal_handlers_block_matched ((instance), \ - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), \ - 0, 0, NULL, (func), (data)) -/** - * g_signal_handlers_unblock_by_func: - * @instance: The instance to unblock handlers from. - * @func: The C closure callback of the handlers (useless for non-C closures). - * @data: The closure data of the handlers' closures. - * - * Unblocks all handlers on an instance that match @func and @data. - * - * Returns: The number of handlers that matched. - */ -#define g_signal_handlers_unblock_by_func(instance, func, data) \ - g_signal_handlers_unblock_matched ((instance), \ - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), \ - 0, 0, NULL, (func), (data)) - - -gboolean g_signal_accumulator_true_handled (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer dummy); - -gboolean g_signal_accumulator_first_wins (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer dummy); - -/*< private >*/ -void g_signal_handlers_destroy (gpointer instance); -void _g_signals_destroy (GType itype); - -G_END_DECLS - -#endif /* __G_SIGNAL_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gsourceclosure.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gsourceclosure.h deleted file mode 100644 index 3cfdacd5..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gsourceclosure.h +++ /dev/null @@ -1,38 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_SOURCECLOSURE_H__ -#define __G_SOURCECLOSURE_H__ - -#include -#include - -G_BEGIN_DECLS - -void g_source_set_closure (GSource *source, - GClosure *closure); - -void g_source_set_dummy_callback (GSource *source); - -G_END_DECLS - -#endif /* __G_SOURCECLOSURE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gtype.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gtype.h deleted file mode 100644 index 14206edf..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gtype.h +++ /dev/null @@ -1,1727 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPE_H__ -#define __G_TYPE_H__ - -#include - -G_BEGIN_DECLS - -/* Basic Type Macros - */ -/** - * G_TYPE_FUNDAMENTAL: - * @type: A #GType value. - * - * The fundamental type which is the ancestor of @type. - * Fundamental types are types that serve as ultimate bases for the derived types, - * thus they are the roots of distinct inheritance hierarchies. - */ -#define G_TYPE_FUNDAMENTAL(type) (g_type_fundamental (type)) -/** - * G_TYPE_FUNDAMENTAL_MAX: - * - * An integer constant that represents the number of identifiers reserved - * for types that are assigned at compile-time. - */ -#define G_TYPE_FUNDAMENTAL_MAX (255 << G_TYPE_FUNDAMENTAL_SHIFT) - -/* Constant fundamental types, - * introduced by g_type_init(). - */ -/** - * G_TYPE_INVALID: - * - * An invalid #GType used as error return value in some functions which return - * a #GType. - */ -#define G_TYPE_INVALID G_TYPE_MAKE_FUNDAMENTAL (0) -/** - * G_TYPE_NONE: - * - * A fundamental type which is used as a replacement for the C - * void return type. - */ -#define G_TYPE_NONE G_TYPE_MAKE_FUNDAMENTAL (1) -/** - * G_TYPE_INTERFACE: - * - * The fundamental type from which all interfaces are derived. - */ -#define G_TYPE_INTERFACE G_TYPE_MAKE_FUNDAMENTAL (2) -/** - * G_TYPE_CHAR: - * - * The fundamental type corresponding to #gchar. - * The type designated by G_TYPE_CHAR is unconditionally an 8-bit signed integer. - * This may or may not be the same type a the C type "gchar". - */ -#define G_TYPE_CHAR G_TYPE_MAKE_FUNDAMENTAL (3) -/** - * G_TYPE_UCHAR: - * - * The fundamental type corresponding to #guchar. - */ -#define G_TYPE_UCHAR G_TYPE_MAKE_FUNDAMENTAL (4) -/** - * G_TYPE_BOOLEAN: - * - * The fundamental type corresponding to #gboolean. - */ -#define G_TYPE_BOOLEAN G_TYPE_MAKE_FUNDAMENTAL (5) -/** - * G_TYPE_INT: - * - * The fundamental type corresponding to #gint. - */ -#define G_TYPE_INT G_TYPE_MAKE_FUNDAMENTAL (6) -/** - * G_TYPE_UINT: - * - * The fundamental type corresponding to #guint. - */ -#define G_TYPE_UINT G_TYPE_MAKE_FUNDAMENTAL (7) -/** - * G_TYPE_LONG: - * - * The fundamental type corresponding to #glong. - */ -#define G_TYPE_LONG G_TYPE_MAKE_FUNDAMENTAL (8) -/** - * G_TYPE_ULONG: - * - * The fundamental type corresponding to #gulong. - */ -#define G_TYPE_ULONG G_TYPE_MAKE_FUNDAMENTAL (9) -/** - * G_TYPE_INT64: - * - * The fundamental type corresponding to #gint64. - */ -#define G_TYPE_INT64 G_TYPE_MAKE_FUNDAMENTAL (10) -/** - * G_TYPE_UINT64: - * - * The fundamental type corresponding to #guint64. - */ -#define G_TYPE_UINT64 G_TYPE_MAKE_FUNDAMENTAL (11) -/** - * G_TYPE_ENUM: - * - * The fundamental type from which all enumeration types are derived. - */ -#define G_TYPE_ENUM G_TYPE_MAKE_FUNDAMENTAL (12) -/** - * G_TYPE_FLAGS: - * - * The fundamental type from which all flags types are derived. - */ -#define G_TYPE_FLAGS G_TYPE_MAKE_FUNDAMENTAL (13) -/** - * G_TYPE_FLOAT: - * - * The fundamental type corresponding to #gfloat. - */ -#define G_TYPE_FLOAT G_TYPE_MAKE_FUNDAMENTAL (14) -/** - * G_TYPE_DOUBLE: - * - * The fundamental type corresponding to #gdouble. - */ -#define G_TYPE_DOUBLE G_TYPE_MAKE_FUNDAMENTAL (15) -/** - * G_TYPE_STRING: - * - * The fundamental type corresponding to nul-terminated C strings. - */ -#define G_TYPE_STRING G_TYPE_MAKE_FUNDAMENTAL (16) -/** - * G_TYPE_POINTER: - * - * The fundamental type corresponding to #gpointer. - */ -#define G_TYPE_POINTER G_TYPE_MAKE_FUNDAMENTAL (17) -/** - * G_TYPE_BOXED: - * - * The fundamental type from which all boxed types are derived. - */ -#define G_TYPE_BOXED G_TYPE_MAKE_FUNDAMENTAL (18) -/** - * G_TYPE_PARAM: - * - * The fundamental type from which all #GParamSpec types are derived. - */ -#define G_TYPE_PARAM G_TYPE_MAKE_FUNDAMENTAL (19) -/** - * G_TYPE_OBJECT: - * - * The fundamental type for #GObject. - */ -#define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL (20) -/** - * G_TYPE_VARIANT: - * - * The fundamental type corresponding to #GVariant. - * - * All floating #GVariant instances passed through the #GType system are - * consumed. - * - * Note that callbacks in closures, and signal handlers - * for signals of return type %G_TYPE_VARIANT, must never return floating - * variants. - * - * Note: GLib 2.24 did include a boxed type with this name. It was replaced - * with this fundamental type in 2.26. - * - * Since: 2.26 - */ -#define G_TYPE_VARIANT G_TYPE_MAKE_FUNDAMENTAL (21) - - -/* Reserved fundamental type numbers to create new fundamental - * type IDs with G_TYPE_MAKE_FUNDAMENTAL(). - * Send email to gtk-devel-list@gnome.org for reservations. - */ -/** - * G_TYPE_FUNDAMENTAL_SHIFT: - * - * Shift value used in converting numbers to type IDs. - */ -#define G_TYPE_FUNDAMENTAL_SHIFT (2) -/** - * G_TYPE_MAKE_FUNDAMENTAL: - * @x: the fundamental type number. - * - * Get the type ID for the fundamental type number @x. - * Use g_type_fundamental_next() instead of this macro to create new fundamental - * types. - * - * Returns: the GType - */ -#define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT)) -/** - * G_TYPE_RESERVED_GLIB_FIRST: - * - * First fundamental type number to create a new fundamental type id with - * G_TYPE_MAKE_FUNDAMENTAL() reserved for GLib. - */ -#define G_TYPE_RESERVED_GLIB_FIRST (22) -/** - * G_TYPE_RESERVED_GLIB_LAST: - * - * Last fundamental type number reserved for GLib. - */ -#define G_TYPE_RESERVED_GLIB_LAST (31) -/** - * G_TYPE_RESERVED_BSE_FIRST: - * - * First fundamental type number to create a new fundamental type id with - * G_TYPE_MAKE_FUNDAMENTAL() reserved for BSE. - */ -#define G_TYPE_RESERVED_BSE_FIRST (32) -/** - * G_TYPE_RESERVED_BSE_LAST: - * - * Last fundamental type number reserved for BSE. - */ -#define G_TYPE_RESERVED_BSE_LAST (48) -/** - * G_TYPE_RESERVED_USER_FIRST: - * - * First available fundamental type number to create new fundamental - * type id with G_TYPE_MAKE_FUNDAMENTAL(). - */ -#define G_TYPE_RESERVED_USER_FIRST (49) - - -/* Type Checking Macros - */ -/** - * G_TYPE_IS_FUNDAMENTAL: - * @type: A #GType value. - * - * Checks if @type is a fundamental type. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_FUNDAMENTAL(type) ((type) <= G_TYPE_FUNDAMENTAL_MAX) -/** - * G_TYPE_IS_DERIVED: - * @type: A #GType value. - * - * Checks if @type is derived (or in object-oriented terminology: - * inherited) from another type (this holds true for all non-fundamental - * types). - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_DERIVED(type) ((type) > G_TYPE_FUNDAMENTAL_MAX) -/** - * G_TYPE_IS_INTERFACE: - * @type: A #GType value. - * - * Checks if @type is an interface type. - * An interface type provides a pure API, the implementation - * of which is provided by another type (which is then said to conform - * to the interface). GLib interfaces are somewhat analogous to Java - * interfaces and C++ classes containing only pure virtual functions, - * with the difference that GType interfaces are not derivable (but see - * g_type_interface_add_prerequisite() for an alternative). - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_INTERFACE(type) (G_TYPE_FUNDAMENTAL (type) == G_TYPE_INTERFACE) -/** - * G_TYPE_IS_CLASSED: - * @type: A #GType value. - * - * Checks if @type is a classed type. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_CLASSED(type) (g_type_test_flags ((type), G_TYPE_FLAG_CLASSED)) -/** - * G_TYPE_IS_INSTANTIATABLE: - * @type: A #GType value. - * - * Checks if @type can be instantiated. Instantiation is the - * process of creating an instance (object) of this type. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_INSTANTIATABLE(type) (g_type_test_flags ((type), G_TYPE_FLAG_INSTANTIATABLE)) -/** - * G_TYPE_IS_DERIVABLE: - * @type: A #GType value. - * - * Checks if @type is a derivable type. A derivable type can - * be used as the base class of a flat (single-level) class hierarchy. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_DERIVABLE(type) (g_type_test_flags ((type), G_TYPE_FLAG_DERIVABLE)) -/** - * G_TYPE_IS_DEEP_DERIVABLE: - * @type: A #GType value. - * - * Checks if @type is a deep derivable type. A deep derivable type - * can be used as the base class of a deep (multi-level) class hierarchy. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_DEEP_DERIVABLE(type) (g_type_test_flags ((type), G_TYPE_FLAG_DEEP_DERIVABLE)) -/** - * G_TYPE_IS_ABSTRACT: - * @type: A #GType value. - * - * Checks if @type is an abstract type. An abstract type cannot be - * instantiated and is normally used as an abstract base class for - * derived classes. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT)) -/** - * G_TYPE_IS_VALUE_ABSTRACT: - * @type: A #GType value. - * - * Checks if @type is an abstract value type. An abstract value type introduces - * a value table, but can't be used for g_value_init() and is normally used as - * an abstract base type for derived value types. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_VALUE_ABSTRACT(type) (g_type_test_flags ((type), G_TYPE_FLAG_VALUE_ABSTRACT)) -/** - * G_TYPE_IS_VALUE_TYPE: - * @type: A #GType value. - * - * Checks if @type is a value type and can be used with g_value_init(). - * - * Returns: %TRUE on success. - */ -#define G_TYPE_IS_VALUE_TYPE(type) (g_type_check_is_value_type (type)) -/** - * G_TYPE_HAS_VALUE_TABLE: - * @type: A #GType value. - * - * Checks if @type has a #GTypeValueTable. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_HAS_VALUE_TABLE(type) (g_type_value_table_peek (type) != NULL) - - -/* Typedefs - */ -/** - * GType: - * - * A numerical value which represents the unique identifier of a registered - * type. - */ -#if GLIB_SIZEOF_SIZE_T != GLIB_SIZEOF_LONG || !defined __cplusplus -typedef gsize GType; -#else /* for historic reasons, C++ links against gulong GTypes */ -typedef gulong GType; -#endif -typedef struct _GValue GValue; -typedef union _GTypeCValue GTypeCValue; -typedef struct _GTypePlugin GTypePlugin; -typedef struct _GTypeClass GTypeClass; -typedef struct _GTypeInterface GTypeInterface; -typedef struct _GTypeInstance GTypeInstance; -typedef struct _GTypeInfo GTypeInfo; -typedef struct _GTypeFundamentalInfo GTypeFundamentalInfo; -typedef struct _GInterfaceInfo GInterfaceInfo; -typedef struct _GTypeValueTable GTypeValueTable; -typedef struct _GTypeQuery GTypeQuery; - - -/* Basic Type Structures - */ -/** - * GTypeClass: - * - * An opaque structure used as the base of all classes. - */ -struct _GTypeClass -{ - /*< private >*/ - GType g_type; -}; -/** - * GTypeInstance: - * - * An opaque structure used as the base of all type instances. - */ -struct _GTypeInstance -{ - /*< private >*/ - GTypeClass *g_class; -}; -/** - * GTypeInterface: - * - * An opaque structure used as the base of all interface types. - */ -struct _GTypeInterface -{ - /*< private >*/ - GType g_type; /* iface type */ - GType g_instance_type; -}; -/** - * GTypeQuery: - * @type: the #GType value of the type. - * @type_name: the name of the type. - * @class_size: the size of the class structure. - * @instance_size: the size of the instance structure. - * - * A structure holding information for a specific type. It is - * filled in by the g_type_query() function. - */ -struct _GTypeQuery -{ - GType type; - const gchar *type_name; - guint class_size; - guint instance_size; -}; - - -/* Casts, checks and accessors for structured types - * usage of these macros is reserved to type implementations only - */ -/*< protected >*/ -/** - * G_TYPE_CHECK_INSTANCE: - * @instance: Location of a #GTypeInstance structure. - * - * Checks if @instance is a valid #GTypeInstance structure, - * otherwise issues a warning and returns %FALSE. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_INSTANCE(instance) (_G_TYPE_CHI ((GTypeInstance*) (instance))) -/** - * G_TYPE_CHECK_INSTANCE_CAST: - * @instance: Location of a #GTypeInstance structure. - * @g_type: The type to be returned. - * @c_type: The corresponding C type of @g_type. - * - * Checks that @instance is an instance of the type identified by @g_type - * and issues a warning if this is not the case. Returns @instance casted - * to a pointer to @c_type. - * - * This macro should only be used in type implementations. - */ -#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type) (_G_TYPE_CIC ((instance), (g_type), c_type)) -/** - * G_TYPE_CHECK_INSTANCE_TYPE: - * @instance: Location of a #GTypeInstance structure. - * @g_type: The type to be checked - * - * Checks if @instance is an instance of the type identified by @g_type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type) (_G_TYPE_CIT ((instance), (g_type))) -/** - * G_TYPE_INSTANCE_GET_CLASS: - * @instance: Location of the #GTypeInstance structure. - * @g_type: The #GType of the class to be returned. - * @c_type: The C type of the class structure. - * - * Get the class structure of a given @instance, casted - * to a specified ancestor type @g_type of the instance. - * - * Note that while calling a GInstanceInitFunc(), the class pointer gets - * modified, so it might not always return the expected pointer. - * - * This macro should only be used in type implementations. - * - * Returns: a pointer to the class structure - */ -#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type) (_G_TYPE_IGC ((instance), (g_type), c_type)) -/** - * G_TYPE_INSTANCE_GET_INTERFACE: - * @instance: Location of the #GTypeInstance structure. - * @g_type: The #GType of the interface to be returned. - * @c_type: The C type of the interface structure. - * - * Get the interface structure for interface @g_type of a given @instance. - * - * This macro should only be used in type implementations. - * - * Returns: a pointer to the interface structure - */ -#define G_TYPE_INSTANCE_GET_INTERFACE(instance, g_type, c_type) (_G_TYPE_IGI ((instance), (g_type), c_type)) -/** - * G_TYPE_CHECK_CLASS_CAST: - * @g_class: Location of a #GTypeClass structure. - * @g_type: The type to be returned. - * @c_type: The corresponding C type of class structure of @g_type. - * - * Checks that @g_class is a class structure of the type identified by @g_type - * and issues a warning if this is not the case. Returns @g_class casted - * to a pointer to @c_type. - * - * This macro should only be used in type implementations. - */ -#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type) (_G_TYPE_CCC ((g_class), (g_type), c_type)) -/** - * G_TYPE_CHECK_CLASS_TYPE: - * @g_class: Location of a #GTypeClass structure. - * @g_type: The type to be checked. - * - * Checks if @g_class is a class structure of the type identified by - * @g_type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_CLASS_TYPE(g_class, g_type) (_G_TYPE_CCT ((g_class), (g_type))) -/** - * G_TYPE_CHECK_VALUE: - * @value: a #GValue - * - * Checks if @value has been initialized to hold values - * of a value type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_VALUE(value) (_G_TYPE_CHV ((value))) -/** - * G_TYPE_CHECK_VALUE_TYPE: - * @value: a #GValue - * @g_type: The type to be checked. - * - * Checks if @value has been initialized to hold values - * of type @g_type. - * - * This macro should only be used in type implementations. - * - * Returns: %TRUE on success. - */ -#define G_TYPE_CHECK_VALUE_TYPE(value, g_type) (_G_TYPE_CVH ((value), (g_type))) -/** - * G_TYPE_FROM_INSTANCE: - * @instance: Location of a valid #GTypeInstance structure. - * - * Get the type identifier from a given @instance structure. - * - * This macro should only be used in type implementations. - * - * Returns: the #GType - */ -#define G_TYPE_FROM_INSTANCE(instance) (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class)) -/** - * G_TYPE_FROM_CLASS: - * @g_class: Location of a valid #GTypeClass structure. - * - * Get the type identifier from a given @class structure. - * - * This macro should only be used in type implementations. - * - * Returns: the #GType - */ -#define G_TYPE_FROM_CLASS(g_class) (((GTypeClass*) (g_class))->g_type) -/** - * G_TYPE_FROM_INTERFACE: - * @g_iface: Location of a valid #GTypeInterface structure. - * - * Get the type identifier from a given @interface structure. - * - * This macro should only be used in type implementations. - * - * Returns: the #GType - */ -#define G_TYPE_FROM_INTERFACE(g_iface) (((GTypeInterface*) (g_iface))->g_type) - -/** - * G_TYPE_INSTANCE_GET_PRIVATE: - * @instance: the instance of a type deriving from @private_type. - * @g_type: the type identifying which private data to retrieve. - * @c_type: The C type for the private structure. - * - * Gets the private structure for a particular type. - * The private structure must have been registered in the - * class_init function with g_type_class_add_private(). - * - * This macro should only be used in type implementations. - * - * Since: 2.4 - * Returns: a pointer to the private data structure. - */ -#define G_TYPE_INSTANCE_GET_PRIVATE(instance, g_type, c_type) ((c_type*) g_type_instance_get_private ((GTypeInstance*) (instance), (g_type))) - -/** - * G_TYPE_CLASS_GET_PRIVATE: - * @klass: the class of a type deriving from @private_type. - * @g_type: the type identifying which private data to retrieve. - * @c_type: The C type for the private structure. - * - * Gets the private class structure for a particular type. - * The private structure must have been registered in the - * get_type() function with g_type_add_class_private(). - * - * This macro should only be used in type implementations. - * - * Since: 2.24 - * Returns: a pointer to the private data structure. - */ -#define G_TYPE_CLASS_GET_PRIVATE(klass, g_type, c_type) ((c_type*) g_type_class_get_private ((GTypeClass*) (klass), (g_type))) - -/** - * GTypeDebugFlags: - * @G_TYPE_DEBUG_NONE: Print no messages. - * @G_TYPE_DEBUG_OBJECTS: Print messages about object bookkeeping. - * @G_TYPE_DEBUG_SIGNALS: Print messages about signal emissions. - * @G_TYPE_DEBUG_MASK: Mask covering all debug flags. - * - * The GTypeDebugFlags enumeration values can be passed to - * g_type_init_with_debug_flags() to trigger debugging messages during runtime. - * Note that the messages can also be triggered by setting the - * GOBJECT_DEBUG environment variable to a ':'-separated list of - * "objects" and "signals". - */ -typedef enum /*< skip >*/ -{ - G_TYPE_DEBUG_NONE = 0, - G_TYPE_DEBUG_OBJECTS = 1 << 0, - G_TYPE_DEBUG_SIGNALS = 1 << 1, - G_TYPE_DEBUG_MASK = 0x03 -} GTypeDebugFlags; - - -/* --- prototypes --- */ -void g_type_init (void); -void g_type_init_with_debug_flags (GTypeDebugFlags debug_flags); -const gchar * g_type_name (GType type); -GQuark g_type_qname (GType type); -GType g_type_from_name (const gchar *name); -GType g_type_parent (GType type); -guint g_type_depth (GType type); -GType g_type_next_base (GType leaf_type, - GType root_type); -gboolean g_type_is_a (GType type, - GType is_a_type); -gpointer g_type_class_ref (GType type); -gpointer g_type_class_peek (GType type); -gpointer g_type_class_peek_static (GType type); -void g_type_class_unref (gpointer g_class); -gpointer g_type_class_peek_parent (gpointer g_class); -gpointer g_type_interface_peek (gpointer instance_class, - GType iface_type); -gpointer g_type_interface_peek_parent (gpointer g_iface); - -gpointer g_type_default_interface_ref (GType g_type); -gpointer g_type_default_interface_peek (GType g_type); -void g_type_default_interface_unref (gpointer g_iface); - -/* g_free() the returned arrays */ -GType* g_type_children (GType type, - guint *n_children); -GType* g_type_interfaces (GType type, - guint *n_interfaces); - -/* per-type _static_ data */ -void g_type_set_qdata (GType type, - GQuark quark, - gpointer data); -gpointer g_type_get_qdata (GType type, - GQuark quark); -void g_type_query (GType type, - GTypeQuery *query); - - -/* --- type registration --- */ -/** - * GBaseInitFunc: - * @g_class: The #GTypeClass structure to initialize. - * - * A callback function used by the type system to do base initialization - * of the class structures of derived types. It is called as part of the - * initialization process of all derived classes and should reallocate - * or reset all dynamic class members copied over from the parent class. - * For example, class members (such as strings) that are not sufficiently - * handled by a plain memory copy of the parent class into the derived class - * have to be altered. See GClassInitFunc() for a discussion of the class - * intialization process. - */ -typedef void (*GBaseInitFunc) (gpointer g_class); -/** - * GBaseFinalizeFunc: - * @g_class: The #GTypeClass structure to finalize. - * - * A callback function used by the type system to finalize those portions - * of a derived types class structure that were setup from the corresponding - * GBaseInitFunc() function. Class finalization basically works the inverse - * way in which class intialization is performed. - * See GClassInitFunc() for a discussion of the class intialization process. - */ -typedef void (*GBaseFinalizeFunc) (gpointer g_class); -/** - * GClassInitFunc: - * @g_class: The #GTypeClass structure to initialize. - * @class_data: The @class_data member supplied via the #GTypeInfo structure. - * - * A callback function used by the type system to initialize the class - * of a specific type. This function should initialize all static class - * members. - * The initialization process of a class involves: - * - * - * 1 - Copying common members from the parent class over to the - * derived class structure. - * - * - * 2 - Zero initialization of the remaining members not copied - * over from the parent class. - * - * - * 3 - Invocation of the GBaseInitFunc() initializers of all parent - * types and the class' type. - * - * - * 4 - Invocation of the class' GClassInitFunc() initializer. - * - * - * Since derived classes are partially initialized through a memory copy - * of the parent class, the general rule is that GBaseInitFunc() and - * GBaseFinalizeFunc() should take care of necessary reinitialization - * and release of those class members that were introduced by the type - * that specified these GBaseInitFunc()/GBaseFinalizeFunc(). - * GClassInitFunc() should only care about initializing static - * class members, while dynamic class members (such as allocated strings - * or reference counted resources) are better handled by a GBaseInitFunc() - * for this type, so proper initialization of the dynamic class members - * is performed for class initialization of derived types as well. - * An example may help to correspond the intend of the different class - * initializers: - * - * |[ - * typedef struct { - * GObjectClass parent_class; - * gint static_integer; - * gchar *dynamic_string; - * } TypeAClass; - * static void - * type_a_base_class_init (TypeAClass *class) - * { - * class->dynamic_string = g_strdup ("some string"); - * } - * static void - * type_a_base_class_finalize (TypeAClass *class) - * { - * g_free (class->dynamic_string); - * } - * static void - * type_a_class_init (TypeAClass *class) - * { - * class->static_integer = 42; - * } - * - * typedef struct { - * TypeAClass parent_class; - * gfloat static_float; - * GString *dynamic_gstring; - * } TypeBClass; - * static void - * type_b_base_class_init (TypeBClass *class) - * { - * class->dynamic_gstring = g_string_new ("some other string"); - * } - * static void - * type_b_base_class_finalize (TypeBClass *class) - * { - * g_string_free (class->dynamic_gstring); - * } - * static void - * type_b_class_init (TypeBClass *class) - * { - * class->static_float = 3.14159265358979323846; - * } - * ]| - * Initialization of TypeBClass will first cause initialization of - * TypeAClass (derived classes reference their parent classes, see - * g_type_class_ref() on this). - * Initialization of TypeAClass roughly involves zero-initializing its fields, - * then calling its GBaseInitFunc() type_a_base_class_init() to allocate - * its dynamic members (dynamic_string), and finally calling its GClassInitFunc() - * type_a_class_init() to initialize its static members (static_integer). - * The first step in the initialization process of TypeBClass is then - * a plain memory copy of the contents of TypeAClass into TypeBClass and - * zero-initialization of the remaining fields in TypeBClass. - * The dynamic members of TypeAClass within TypeBClass now need - * reinitialization which is performed by calling type_a_base_class_init() - * with an argument of TypeBClass. - * After that, the GBaseInitFunc() of TypeBClass, type_b_base_class_init() - * is called to allocate the dynamic members of TypeBClass (dynamic_gstring), - * and finally the GClassInitFunc() of TypeBClass, type_b_class_init(), - * is called to complete the initialization process with the static members - * (static_float). - * Corresponding finalization counter parts to the GBaseInitFunc() functions - * have to be provided to release allocated resources at class finalization - * time. - */ -typedef void (*GClassInitFunc) (gpointer g_class, - gpointer class_data); -/** - * GClassFinalizeFunc: - * @g_class: The #GTypeClass structure to finalize. - * @class_data: The @class_data member supplied via the #GTypeInfo structure. - * - * A callback function used by the type system to finalize a class. - * This function is rarely needed, as dynamically allocated class resources - * should be handled by GBaseInitFunc() and GBaseFinalizeFunc(). - * Also, specification of a GClassFinalizeFunc() in the #GTypeInfo - * structure of a static type is invalid, because classes of static types - * will never be finalized (they are artificially kept alive when their - * reference count drops to zero). - */ -typedef void (*GClassFinalizeFunc) (gpointer g_class, - gpointer class_data); -/** - * GInstanceInitFunc: - * @instance: The instance to initialize. - * @g_class: The class of the type the instance is created for. - * - * A callback function used by the type system to initialize a new - * instance of a type. This function initializes all instance members and - * allocates any resources required by it. - * Initialization of a derived instance involves calling all its parent - * types instance initializers, so the class member of the instance - * is altered during its initialization to always point to the class that - * belongs to the type the current initializer was introduced for. - */ -typedef void (*GInstanceInitFunc) (GTypeInstance *instance, - gpointer g_class); -/** - * GInterfaceInitFunc: - * @g_iface: The interface structure to initialize. - * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure. - * - * A callback function used by the type system to initialize a new - * interface. This function should initialize all internal data and - * allocate any resources required by the interface. - */ -typedef void (*GInterfaceInitFunc) (gpointer g_iface, - gpointer iface_data); -/** - * GInterfaceFinalizeFunc: - * @g_iface: The interface structure to finalize. - * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure. - * - * A callback function used by the type system to finalize an interface. - * This function should destroy any internal data and release any resources - * allocated by the corresponding GInterfaceInitFunc() function. - */ -typedef void (*GInterfaceFinalizeFunc) (gpointer g_iface, - gpointer iface_data); -/** - * GTypeClassCacheFunc: - * @cache_data: data that was given to the g_type_add_class_cache_func() call - * @g_class: The #GTypeClass structure which is unreferenced - * - * A callback function which is called when the reference count of a class - * drops to zero. It may use g_type_class_ref() to prevent the class from - * being freed. You should not call g_type_class_unref() from a - * #GTypeClassCacheFunc function to prevent infinite recursion, use - * g_type_class_unref_uncached() instead. - * - * The functions have to check the class id passed in to figure - * whether they actually want to cache the class of this type, since all - * classes are routed through the same #GTypeClassCacheFunc chain. - * - * Returns: %TRUE to stop further #GTypeClassCacheFuncs from being - * called, %FALSE to continue. - */ -typedef gboolean (*GTypeClassCacheFunc) (gpointer cache_data, - GTypeClass *g_class); -/** - * GTypeInterfaceCheckFunc: - * @check_data: data passed to g_type_add_interface_check(). - * @g_iface: the interface that has been initialized - * - * A callback called after an interface vtable is initialized. - * See g_type_add_interface_check(). - * - * Since: 2.4 - */ -typedef void (*GTypeInterfaceCheckFunc) (gpointer check_data, - gpointer g_iface); -/** - * GTypeFundamentalFlags: - * @G_TYPE_FLAG_CLASSED: Indicates a classed type. - * @G_TYPE_FLAG_INSTANTIATABLE: Indicates an instantiable type (implies classed). - * @G_TYPE_FLAG_DERIVABLE: Indicates a flat derivable type. - * @G_TYPE_FLAG_DEEP_DERIVABLE: Indicates a deep derivable type (implies derivable). - * - * Bit masks used to check or determine specific characteristics of a - * fundamental type. - */ -typedef enum /*< skip >*/ -{ - G_TYPE_FLAG_CLASSED = (1 << 0), - G_TYPE_FLAG_INSTANTIATABLE = (1 << 1), - G_TYPE_FLAG_DERIVABLE = (1 << 2), - G_TYPE_FLAG_DEEP_DERIVABLE = (1 << 3) -} GTypeFundamentalFlags; -/** - * GTypeFlags: - * @G_TYPE_FLAG_ABSTRACT: Indicates an abstract type. No instances can be - * created for an abstract type. - * @G_TYPE_FLAG_VALUE_ABSTRACT: Indicates an abstract value type, i.e. a type - * that introduces a value table, but can't be used for - * g_value_init(). - * - * Bit masks used to check or determine characteristics of a type. - */ -typedef enum /*< skip >*/ -{ - G_TYPE_FLAG_ABSTRACT = (1 << 4), - G_TYPE_FLAG_VALUE_ABSTRACT = (1 << 5) -} GTypeFlags; -/** - * GTypeInfo: - * @class_size: Size of the class structure (required for interface, classed and instantiatable types). - * @base_init: Location of the base initialization function (optional). - * @base_finalize: Location of the base finalization function (optional). - * @class_init: Location of the class initialization function for - * classed and instantiatable types. Location of the default vtable - * inititalization function for interface types. (optional) This function - * is used both to fill in virtual functions in the class or default vtable, - * and to do type-specific setup such as registering signals and object - * properties. - * @class_finalize: Location of the class finalization function for - * classed and instantiatable types. Location fo the default vtable - * finalization function for interface types. (optional) - * @class_data: User-supplied data passed to the class init/finalize functions. - * @instance_size: Size of the instance (object) structure (required for instantiatable types only). - * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the slice allocator now. - * @instance_init: Location of the instance initialization function (optional, for instantiatable types only). - * @value_table: A #GTypeValueTable function table for generic handling of GValues of this type (usually only - * useful for fundamental types). - * - * This structure is used to provide the type system with the information - * required to initialize and destruct (finalize) a type's class and - * its instances. - * The initialized structure is passed to the g_type_register_static() function - * (or is copied into the provided #GTypeInfo structure in the - * g_type_plugin_complete_type_info()). The type system will perform a deep - * copy of this structure, so its memory does not need to be persistent - * across invocation of g_type_register_static(). - */ -struct _GTypeInfo -{ - /* interface types, classed types, instantiated types */ - guint16 class_size; - - GBaseInitFunc base_init; - GBaseFinalizeFunc base_finalize; - - /* interface types, classed types, instantiated types */ - GClassInitFunc class_init; - GClassFinalizeFunc class_finalize; - gconstpointer class_data; - - /* instantiated types */ - guint16 instance_size; - guint16 n_preallocs; - GInstanceInitFunc instance_init; - - /* value handling */ - const GTypeValueTable *value_table; -}; -/** - * GTypeFundamentalInfo: - * @type_flags: #GTypeFundamentalFlags describing the characteristics of the fundamental type - * - * A structure that provides information to the type system which is - * used specifically for managing fundamental types. - */ -struct _GTypeFundamentalInfo -{ - GTypeFundamentalFlags type_flags; -}; -/** - * GInterfaceInfo: - * @interface_init: location of the interface initialization function - * @interface_finalize: location of the interface finalization function - * @interface_data: user-supplied data passed to the interface init/finalize functions - * - * A structure that provides information to the type system which is - * used specifically for managing interface types. - */ -struct _GInterfaceInfo -{ - GInterfaceInitFunc interface_init; - GInterfaceFinalizeFunc interface_finalize; - gpointer interface_data; -}; -/** - * GTypeValueTable: - * @value_init: Default initialize @values contents by poking values - * directly into the value->data array. The data array of - * the #GValue passed into this function was zero-filled - * with memset(), so no care has to - * be taken to free any - * old contents. E.g. for the implementation of a string - * value that may never be %NULL, the implementation might - * look like: - * |[ - * value->data[0].v_pointer = g_strdup (""); - * ]| - * @value_free: Free any old contents that might be left in the - * data array of the passed in @value. No resources may - * remain allocated through the #GValue contents after - * this function returns. E.g. for our above string type: - * |[ - * // only free strings without a specific flag for static storage - * if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)) - * g_free (value->data[0].v_pointer); - * ]| - * @value_copy: @dest_value is a #GValue with zero-filled data section - * and @src_value is a properly setup #GValue of same or - * derived type. - * The purpose of this function is to copy the contents of - * @src_value into @dest_value in a way, that even after - * @src_value has been freed, the contents of @dest_value - * remain valid. String type example: - * |[ - * dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer); - * ]| - * @value_peek_pointer: If the value contents fit into a pointer, such as objects - * or strings, return this pointer, so the caller can peek at - * the current contents. To extend on our above string example: - * |[ - * return value->data[0].v_pointer; - * ]| - * @collect_format: A string format describing how to collect the contents of - * this value bit-by-bit. Each character in the format represents - * an argument to be collected, and the characters themselves indicate - * the type of the argument. Currently supported arguments are: - * - * - * 'i' - Integers. passed as collect_values[].v_int. - * - * - * 'l' - Longs. passed as collect_values[].v_long. - * - * - * 'd' - Doubles. passed as collect_values[].v_double. - * - * - * 'p' - Pointers. passed as collect_values[].v_pointer. - * - * - * It should be noted that for variable argument list construction, - * ANSI C promotes every type smaller than an integer to an int, and - * floats to doubles. So for collection of short int or char, 'i' - * needs to be used, and for collection of floats 'd'. - * @collect_value: The collect_value() function is responsible for converting the - * values collected from a variable argument list into contents - * suitable for storage in a GValue. This function should setup - * @value similar to value_init(); e.g. for a string value that - * does not allow %NULL pointers, it needs to either spew an error, - * or do an implicit conversion by storing an empty string. - * The @value passed in to this function has a zero-filled data - * array, so just like for value_init() it is guaranteed to not - * contain any old contents that might need freeing. - * @n_collect_values is exactly the string length of @collect_format, - * and @collect_values is an array of unions #GTypeCValue with - * length @n_collect_values, containing the collected values - * according to @collect_format. - * @collect_flags is an argument provided as a hint by the caller. - * It may contain the flag %G_VALUE_NOCOPY_CONTENTS indicating, - * that the collected value contents may be considered "static" - * for the duration of the @value lifetime. - * Thus an extra copy of the contents stored in @collect_values is - * not required for assignment to @value. - * For our above string example, we continue with: - * |[ - * if (!collect_values[0].v_pointer) - * value->data[0].v_pointer = g_strdup (""); - * else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) - * { - * value->data[0].v_pointer = collect_values[0].v_pointer; - * // keep a flag for the value_free() implementation to not free this string - * value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS; - * } - * else - * value->data[0].v_pointer = g_strdup (collect_values[0].v_pointer); - * return NULL; - * ]| - * It should be noted, that it is generally a bad idea to follow the - * #G_VALUE_NOCOPY_CONTENTS hint for reference counted types. Due to - * reentrancy requirements and reference count assertions performed - * by the signal emission code, reference counts should always be - * incremented for reference counted contents stored in the value->data - * array. To deviate from our string example for a moment, and taking - * a look at an exemplary implementation for collect_value() of - * #GObject: - * |[ - * if (collect_values[0].v_pointer) - * { - * GObject *object = G_OBJECT (collect_values[0].v_pointer); - * // never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types - * value->data[0].v_pointer = g_object_ref (object); - * return NULL; - * } - * else - * return g_strdup_printf ("Object passed as invalid NULL pointer"); - * } - * ]| - * The reference count for valid objects is always incremented, - * regardless of @collect_flags. For invalid objects, the example - * returns a newly allocated string without altering @value. - * Upon success, collect_value() needs to return %NULL. If, however, - * an error condition occurred, collect_value() may spew an - * error by returning a newly allocated non-%NULL string, giving - * a suitable description of the error condition. - * The calling code makes no assumptions about the @value - * contents being valid upon error returns, @value - * is simply thrown away without further freeing. As such, it is - * a good idea to not allocate #GValue contents, prior to returning - * an error, however, collect_values() is not obliged to return - * a correctly setup @value for error returns, simply because - * any non-%NULL return is considered a fatal condition so further - * program behaviour is undefined. - * @lcopy_format: Format description of the arguments to collect for @lcopy_value, - * analogous to @collect_format. Usually, @lcopy_format string consists - * only of 'p's to provide lcopy_value() with pointers to storage locations. - * @lcopy_value: This function is responsible for storing the @value contents into - * arguments passed through a variable argument list which got - * collected into @collect_values according to @lcopy_format. - * @n_collect_values equals the string length of @lcopy_format, - * and @collect_flags may contain %G_VALUE_NOCOPY_CONTENTS. - * In contrast to collect_value(), lcopy_value() is obliged to - * always properly support %G_VALUE_NOCOPY_CONTENTS. - * Similar to collect_value() the function may prematurely abort - * by returning a newly allocated string describing an error condition. - * To complete the string example: - * |[ - * gchar **string_p = collect_values[0].v_pointer; - * if (!string_p) - * return g_strdup_printf ("string location passed as NULL"); - * if (collect_flags & G_VALUE_NOCOPY_CONTENTS) - * *string_p = value->data[0].v_pointer; - * else - * *string_p = g_strdup (value->data[0].v_pointer); - * ]| - * And an illustrative version of lcopy_value() for - * reference-counted types: - * |[ - * GObject **object_p = collect_values[0].v_pointer; - * if (!object_p) - * return g_strdup_printf ("object location passed as NULL"); - * if (!value->data[0].v_pointer) - * *object_p = NULL; - * else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) /* always honour */ - * *object_p = value->data[0].v_pointer; - * else - * *object_p = g_object_ref (value->data[0].v_pointer); - * return NULL; - * ]| - * - * The #GTypeValueTable provides the functions required by the #GValue implementation, - * to serve as a container for values of a type. - */ - -struct _GTypeValueTable -{ - void (*value_init) (GValue *value); - void (*value_free) (GValue *value); - void (*value_copy) (const GValue *src_value, - GValue *dest_value); - /* varargs functionality (optional) */ - gpointer (*value_peek_pointer) (const GValue *value); - const gchar *collect_format; - gchar* (*collect_value) (GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags); - const gchar *lcopy_format; - gchar* (*lcopy_value) (const GValue *value, - guint n_collect_values, - GTypeCValue *collect_values, - guint collect_flags); -}; -GType g_type_register_static (GType parent_type, - const gchar *type_name, - const GTypeInfo *info, - GTypeFlags flags); -GType g_type_register_static_simple (GType parent_type, - const gchar *type_name, - guint class_size, - GClassInitFunc class_init, - guint instance_size, - GInstanceInitFunc instance_init, - GTypeFlags flags); - -GType g_type_register_dynamic (GType parent_type, - const gchar *type_name, - GTypePlugin *plugin, - GTypeFlags flags); -GType g_type_register_fundamental (GType type_id, - const gchar *type_name, - const GTypeInfo *info, - const GTypeFundamentalInfo *finfo, - GTypeFlags flags); -void g_type_add_interface_static (GType instance_type, - GType interface_type, - const GInterfaceInfo *info); -void g_type_add_interface_dynamic (GType instance_type, - GType interface_type, - GTypePlugin *plugin); -void g_type_interface_add_prerequisite (GType interface_type, - GType prerequisite_type); -GType*g_type_interface_prerequisites (GType interface_type, - guint *n_prerequisites); -void g_type_class_add_private (gpointer g_class, - gsize private_size); -gpointer g_type_instance_get_private (GTypeInstance *instance, - GType private_type); - -void g_type_add_class_private (GType class_type, - gsize private_size); -gpointer g_type_class_get_private (GTypeClass *klass, - GType private_type); - -GLIB_AVAILABLE_IN_2_34 -void g_type_ensure (GType type); - -/* --- GType boilerplate --- */ -/** - * G_DEFINE_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for type implementations, which declares a - * class initialization function, an instance initialization function (see #GTypeInfo for information about - * these) and a static variable named @t_n_parent_class pointing to the parent class. Furthermore, it defines - * a *_get_type() function. See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, {}) -/** - * G_DEFINE_TYPE_WITH_CODE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type in lowercase, with words separated by '_'. - * @T_P: The #GType of the parent type. - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for type implementations. - * Similar to G_DEFINE_TYPE(), but allows you to insert custom code into the - * *_get_type() function, e.g. interface implementations via G_IMPLEMENT_INTERFACE(). - * See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, 0) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() -/** - * G_DEFINE_ABSTRACT_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for type implementations. - * Similar to G_DEFINE_TYPE(), but defines an abstract type. - * See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_ABSTRACT_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {}) -/** - * G_DEFINE_ABSTRACT_TYPE_WITH_CODE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * @_C_: Custom code that gets inserted in the @type_name_get_type() function. - * - * A convenience macro for type implementations. - * Similar to G_DEFINE_TYPE_WITH_CODE(), but defines an abstract type and allows you to - * insert custom code into the *_get_type() function, e.g. interface implementations - * via G_IMPLEMENT_INTERFACE(). See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Since: 2.4 - */ -#define G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() -/** - * G_DEFINE_TYPE_EXTENDED: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * @_f_: #GTypeFlags to pass to g_type_register_static() - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * The most general convenience macro for type implementations, on which - * G_DEFINE_TYPE(), etc are based. - * - * |[ - * G_DEFINE_TYPE_EXTENDED (GtkGadget, - * gtk_gadget, - * GTK_TYPE_WIDGET, - * 0, - * G_IMPLEMENT_INTERFACE (TYPE_GIZMO, - * gtk_gadget_gizmo_init)); - * ]| - * expands to - * |[ - * static void gtk_gadget_init (GtkGadget *self); - * static void gtk_gadget_class_init (GtkGadgetClass *klass); - * static gpointer gtk_gadget_parent_class = NULL; - * static void gtk_gadget_class_intern_init (gpointer klass) - * { - * gtk_gadget_parent_class = g_type_class_peek_parent (klass); - * gtk_gadget_class_init ((GtkGadgetClass*) klass); - * } - * - * GType - * gtk_gadget_get_type (void) - * { - * static volatile gsize g_define_type_id__volatile = 0; - * if (g_once_init_enter (&g_define_type_id__volatile)) - * { - * GType g_define_type_id = - * g_type_register_static_simple (GTK_TYPE_WIDGET, - * g_intern_static_string ("GtkGadget"), - * sizeof (GtkGadgetClass), - * (GClassInitFunc) gtk_gadget_class_intern_init, - * sizeof (GtkGadget), - * (GInstanceInitFunc) gtk_gadget_init, - * (GTypeFlags) flags); - * { - * const GInterfaceInfo g_implement_interface_info = { - * (GInterfaceInitFunc) gtk_gadget_gizmo_init - * }; - * g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info); - * } - * g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); - * } - * return g_define_type_id__volatile; - * } - * ]| - * The only pieces which have to be manually provided are the definitions of - * the instance and class structure and the definitions of the instance and - * class init functions. - * - * Since: 2.4 - */ -#define G_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() - -/** - * G_DEFINE_INTERFACE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words separated by '_'. - * @T_P: The #GType of the prerequisite type for the interface, or 0 - * (%G_TYPE_INVALID) for no prerequisite type. - * - * A convenience macro for #GTypeInterface definitions, which declares - * a default vtable initialization function and defines a *_get_type() - * function. - * - * The macro expects the interface initialization function to have the - * name t_n ## _default_init, and the interface - * structure to have the name TN ## Interface. - * - * Since: 2.24 - */ -#define G_DEFINE_INTERFACE(TN, t_n, T_P) G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, ;) - -/** - * G_DEFINE_INTERFACE_WITH_CODE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words separated by '_'. - * @T_P: The #GType of the prerequisite type for the interface, or 0 - * (%G_TYPE_INVALID) for no prerequisite type. - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for #GTypeInterface definitions. Similar to - * G_DEFINE_INTERFACE(), but allows you to insert custom code into the - * *_get_type() function, e.g. additional interface implementations - * via G_IMPLEMENT_INTERFACE(), or additional prerequisite types. See - * G_DEFINE_TYPE_EXTENDED() for a similar example using - * G_DEFINE_TYPE_WITH_CODE(). - * - * Since: 2.24 - */ -#define G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TN, t_n, T_P) {_C_;} _G_DEFINE_INTERFACE_EXTENDED_END() - -/** - * G_IMPLEMENT_INTERFACE: - * @TYPE_IFACE: The #GType of the interface to add - * @iface_init: The interface init function - * - * A convenience macro to ease interface addition in the @_C_ section - * of G_DEFINE_TYPE_WITH_CODE() or G_DEFINE_ABSTRACT_TYPE_WITH_CODE(). - * See G_DEFINE_TYPE_EXTENDED() for an example. - * - * Note that this macro can only be used together with the G_DEFINE_TYPE_* - * macros, since it depends on variable names from those macros. - * - * Since: 2.4 - */ -#define G_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init) { \ - const GInterfaceInfo g_implement_interface_info = { \ - (GInterfaceInitFunc) iface_init, NULL, NULL \ - }; \ - g_type_add_interface_static (g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \ -} - -#define _G_DEFINE_TYPE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PARENT, flags) \ -\ -static void type_name##_init (TypeName *self); \ -static void type_name##_class_init (TypeName##Class *klass); \ -static gpointer type_name##_parent_class = NULL; \ -static void type_name##_class_intern_init (gpointer klass) \ -{ \ - type_name##_parent_class = g_type_class_peek_parent (klass); \ - type_name##_class_init ((TypeName##Class*) klass); \ -} \ -\ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_type_register_static_simple (TYPE_PARENT, \ - g_intern_static_string (#TypeName), \ - sizeof (TypeName##Class), \ - (GClassInitFunc) type_name##_class_intern_init, \ - sizeof (TypeName), \ - (GInstanceInitFunc) type_name##_init, \ - (GTypeFlags) flags); \ - { /* custom code follows */ -#define _G_DEFINE_TYPE_EXTENDED_END() \ - /* following custom code */ \ - } \ - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ - } \ - return g_define_type_id__volatile; \ -} /* closes type_name##_get_type() */ - -#define _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PREREQ) \ -\ -static void type_name##_default_init (TypeName##Interface *klass); \ -\ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_type_register_static_simple (G_TYPE_INTERFACE, \ - g_intern_static_string (#TypeName), \ - sizeof (TypeName##Interface), \ - (GClassInitFunc)type_name##_default_init, \ - 0, \ - (GInstanceInitFunc)NULL, \ - (GTypeFlags) 0); \ - if (TYPE_PREREQ) \ - g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \ - { /* custom code follows */ -#define _G_DEFINE_INTERFACE_EXTENDED_END() \ - /* following custom code */ \ - } \ - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ - } \ - return g_define_type_id__volatile; \ -} /* closes type_name##_get_type() */ - -/** - * G_DEFINE_BOXED_TYPE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @copy_func: the #GBoxedCopyFunc for the new type - * @free_func: the #GBoxedFreeFunc for the new type - * - * A convenience macro for boxed type implementations, which defines a - * type_name_get_type() function registering the boxed type. - * - * Since: 2.26 - */ -#define G_DEFINE_BOXED_TYPE(TypeName, type_name, copy_func, free_func) G_DEFINE_BOXED_TYPE_WITH_CODE (TypeName, type_name, copy_func, free_func, {}) -/** - * G_DEFINE_BOXED_TYPE_WITH_CODE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @copy_func: the #GBoxedCopyFunc for the new type - * @free_func: the #GBoxedFreeFunc for the new type - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for boxed type implementations. - * Similar to G_DEFINE_BOXED_TYPE(), but allows to insert custom code into the - * type_name_get_type() function, e.g. to register value transformations with - * g_value_register_transform_func(). - * - * Since: 2.26 - */ -#define G_DEFINE_BOXED_TYPE_WITH_CODE(TypeName, type_name, copy_func, free_func, _C_) _G_DEFINE_BOXED_TYPE_BEGIN (TypeName, type_name, copy_func, free_func) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() - -#if !defined (__cplusplus) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) -#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType (* _g_register_boxed) \ - (const gchar *, \ - union \ - { \ - TypeName * (*do_copy_type) (TypeName *); \ - TypeName * (*do_const_copy_type) (const TypeName *); \ - GBoxedCopyFunc do_copy_boxed; \ - } __attribute__((__transparent_union__)), \ - union \ - { \ - void (* do_free_type) (TypeName *); \ - GBoxedFreeFunc do_free_boxed; \ - } __attribute__((__transparent_union__)) \ - ) = g_boxed_type_register_static; \ - GType g_define_type_id = \ - _g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func); \ - { /* custom code follows */ -#else -#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_boxed_type_register_static (g_intern_static_string (#TypeName), \ - (GBoxedCopyFunc) copy_func, \ - (GBoxedFreeFunc) free_func); \ - { /* custom code follows */ -#endif /* __GNUC__ */ - -/** - * G_DEFINE_POINTER_TYPE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * - * A convenience macro for pointer type implementations, which defines a - * type_name_get_type() function registering the pointer type. - * - * Since: 2.26 - */ -#define G_DEFINE_POINTER_TYPE(TypeName, type_name) G_DEFINE_POINTER_TYPE_WITH_CODE (TypeName, type_name, {}) -/** - * G_DEFINE_POINTER_TYPE_WITH_CODE: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @_C_: Custom code that gets inserted in the *_get_type() function. - * - * A convenience macro for pointer type implementations. - * Similar to G_DEFINE_POINTER_TYPE(), but allows to insert custom code into the - * type_name_get_type() function. - * - * Since: 2.26 - */ -#define G_DEFINE_POINTER_TYPE_WITH_CODE(TypeName, type_name, _C_) _G_DEFINE_POINTER_TYPE_BEGIN (TypeName, type_name) {_C_;} _G_DEFINE_TYPE_EXTENDED_END() - -#define _G_DEFINE_POINTER_TYPE_BEGIN(TypeName, type_name) \ -GType \ -type_name##_get_type (void) \ -{ \ - static volatile gsize g_define_type_id__volatile = 0; \ - if (g_once_init_enter (&g_define_type_id__volatile)) \ - { \ - GType g_define_type_id = \ - g_pointer_type_register_static (g_intern_static_string (#TypeName)); \ - { /* custom code follows */ - -/* --- protected (for fundamental type implementations) --- */ -GTypePlugin* g_type_get_plugin (GType type); -GTypePlugin* g_type_interface_get_plugin (GType instance_type, - GType interface_type); -GType g_type_fundamental_next (void); -GType g_type_fundamental (GType type_id); -GTypeInstance* g_type_create_instance (GType type); -void g_type_free_instance (GTypeInstance *instance); - -void g_type_add_class_cache_func (gpointer cache_data, - GTypeClassCacheFunc cache_func); -void g_type_remove_class_cache_func (gpointer cache_data, - GTypeClassCacheFunc cache_func); -void g_type_class_unref_uncached (gpointer g_class); - -void g_type_add_interface_check (gpointer check_data, - GTypeInterfaceCheckFunc check_func); -void g_type_remove_interface_check (gpointer check_data, - GTypeInterfaceCheckFunc check_func); - -GTypeValueTable* g_type_value_table_peek (GType type); - - -/*< private >*/ -gboolean g_type_check_instance (GTypeInstance *instance) G_GNUC_PURE; -GTypeInstance* g_type_check_instance_cast (GTypeInstance *instance, - GType iface_type); -gboolean g_type_check_instance_is_a (GTypeInstance *instance, - GType iface_type) G_GNUC_PURE; -GTypeClass* g_type_check_class_cast (GTypeClass *g_class, - GType is_a_type); -gboolean g_type_check_class_is_a (GTypeClass *g_class, - GType is_a_type) G_GNUC_PURE; -gboolean g_type_check_is_value_type (GType type) G_GNUC_CONST; -gboolean g_type_check_value (GValue *value) G_GNUC_PURE; -gboolean g_type_check_value_holds (GValue *value, - GType type) G_GNUC_PURE; -gboolean g_type_test_flags (GType type, - guint flags) G_GNUC_CONST; - - -/* --- debugging functions --- */ -const gchar * g_type_name_from_instance (GTypeInstance *instance); -const gchar * g_type_name_from_class (GTypeClass *g_class); - - -/* --- implementation bits --- */ -#ifndef G_DISABLE_CAST_CHECKS -# define _G_TYPE_CIC(ip, gt, ct) \ - ((ct*) g_type_check_instance_cast ((GTypeInstance*) ip, gt)) -# define _G_TYPE_CCC(cp, gt, ct) \ - ((ct*) g_type_check_class_cast ((GTypeClass*) cp, gt)) -#else /* G_DISABLE_CAST_CHECKS */ -# define _G_TYPE_CIC(ip, gt, ct) ((ct*) ip) -# define _G_TYPE_CCC(cp, gt, ct) ((ct*) cp) -#endif /* G_DISABLE_CAST_CHECKS */ -#define _G_TYPE_CHI(ip) (g_type_check_instance ((GTypeInstance*) ip)) -#define _G_TYPE_CHV(vl) (g_type_check_value ((GValue*) vl)) -#define _G_TYPE_IGC(ip, gt, ct) ((ct*) (((GTypeInstance*) ip)->g_class)) -#define _G_TYPE_IGI(ip, gt, ct) ((ct*) g_type_interface_peek (((GTypeInstance*) ip)->g_class, gt)) -#ifdef __GNUC__ -# define _G_TYPE_CIT(ip, gt) (G_GNUC_EXTENSION ({ \ - GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \ - if (!__inst) \ - __r = FALSE; \ - else if (__inst->g_class && __inst->g_class->g_type == __t) \ - __r = TRUE; \ - else \ - __r = g_type_check_instance_is_a (__inst, __t); \ - __r; \ -})) -# define _G_TYPE_CCT(cp, gt) (G_GNUC_EXTENSION ({ \ - GTypeClass *__class = (GTypeClass*) cp; GType __t = gt; gboolean __r; \ - if (!__class) \ - __r = FALSE; \ - else if (__class->g_type == __t) \ - __r = TRUE; \ - else \ - __r = g_type_check_class_is_a (__class, __t); \ - __r; \ -})) -# define _G_TYPE_CVH(vl, gt) (G_GNUC_EXTENSION ({ \ - GValue *__val = (GValue*) vl; GType __t = gt; gboolean __r; \ - if (!__val) \ - __r = FALSE; \ - else if (__val->g_type == __t) \ - __r = TRUE; \ - else \ - __r = g_type_check_value_holds (__val, __t); \ - __r; \ -})) -#else /* !__GNUC__ */ -# define _G_TYPE_CIT(ip, gt) (g_type_check_instance_is_a ((GTypeInstance*) ip, gt)) -# define _G_TYPE_CCT(cp, gt) (g_type_check_class_is_a ((GTypeClass*) cp, gt)) -# define _G_TYPE_CVH(vl, gt) (g_type_check_value_holds ((GValue*) vl, gt)) -#endif /* !__GNUC__ */ -/** - * G_TYPE_FLAG_RESERVED_ID_BIT: - * - * A bit in the type number that's supposed to be left untouched. - */ -#define G_TYPE_FLAG_RESERVED_ID_BIT ((GType) (1 << 0)) -extern GTypeDebugFlags _g_type_debug_flags; - -G_END_DECLS - -#endif /* __G_TYPE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gtypemodule.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gtypemodule.h deleted file mode 100644 index f2d524bd..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gtypemodule.h +++ /dev/null @@ -1,263 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPE_MODULE_H__ -#define __G_TYPE_MODULE_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GTypeModule GTypeModule; -typedef struct _GTypeModuleClass GTypeModuleClass; - -#define G_TYPE_TYPE_MODULE (g_type_module_get_type ()) -#define G_TYPE_MODULE(module) (G_TYPE_CHECK_INSTANCE_CAST ((module), G_TYPE_TYPE_MODULE, GTypeModule)) -#define G_TYPE_MODULE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TYPE_MODULE, GTypeModuleClass)) -#define G_IS_TYPE_MODULE(module) (G_TYPE_CHECK_INSTANCE_TYPE ((module), G_TYPE_TYPE_MODULE)) -#define G_IS_TYPE_MODULE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TYPE_MODULE)) -#define G_TYPE_MODULE_GET_CLASS(module) (G_TYPE_INSTANCE_GET_CLASS ((module), G_TYPE_TYPE_MODULE, GTypeModuleClass)) - -/** - * GTypeModule: - * @name: the name of the module - * - * The members of the GTypeModule structure should not - * be accessed directly, except for the @name field. - */ -struct _GTypeModule -{ - GObject parent_instance; - - guint use_count; - GSList *type_infos; - GSList *interface_infos; - - /*< public >*/ - gchar *name; -}; - -/** - * GTypeModuleClass: - * @parent_class: the parent class - * @load: loads the module and registers one or more types using - * g_type_module_register_type(). - * @unload: unloads the module - * - * In order to implement dynamic loading of types based on #GTypeModule, - * the @load and @unload functions in #GTypeModuleClass must be implemented. - */ -struct _GTypeModuleClass -{ - GObjectClass parent_class; - - /*< public >*/ - gboolean (* load) (GTypeModule *module); - void (* unload) (GTypeModule *module); - - /*< private >*/ - /* Padding for future expansion */ - void (*reserved1) (void); - void (*reserved2) (void); - void (*reserved3) (void); - void (*reserved4) (void); -}; - -/** - * G_DEFINE_DYNAMIC_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, with words - * separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for dynamic type implementations, which declares a - * class initialization function, an instance initialization function (see - * #GTypeInfo for information about these) and a static variable named - * @t_n_parent_class pointing to the parent class. Furthermore, - * it defines a *_get_type() and a static - * *_register_type() function for use in your - * module_init(). - * See G_DEFINE_DYNAMIC_TYPE_EXTENDED() for an example. - * - * Since: 2.14 - */ -#define G_DEFINE_DYNAMIC_TYPE(TN, t_n, T_P) G_DEFINE_DYNAMIC_TYPE_EXTENDED (TN, t_n, T_P, 0, {}) -/** - * G_DEFINE_DYNAMIC_TYPE_EXTENDED: - * @TypeName: The name of the new type, in Camel case. - * @type_name: The name of the new type, in lowercase, with words - * separated by '_'. - * @TYPE_PARENT: The #GType of the parent type. - * @flags: #GTypeFlags to pass to g_type_module_register_type() - * @CODE: Custom code that gets inserted in the *_get_type() function. - * - * A more general version of G_DEFINE_DYNAMIC_TYPE() which - * allows to specify #GTypeFlags and custom code. - * - * |[ - * G_DEFINE_DYNAMIC_TYPE_EXTENDED (GtkGadget, - * gtk_gadget, - * GTK_TYPE_THING, - * 0, - * G_IMPLEMENT_INTERFACE_DYNAMIC (TYPE_GIZMO, - * gtk_gadget_gizmo_init)); - * ]| - * expands to - * |[ - * static void gtk_gadget_init (GtkGadget *self); - * static void gtk_gadget_class_init (GtkGadgetClass *klass); - * static void gtk_gadget_class_finalize (GtkGadgetClass *klass); - * - * static gpointer gtk_gadget_parent_class = NULL; - * static GType gtk_gadget_type_id = 0; - * - * static void gtk_gadget_class_intern_init (gpointer klass) - * { - * gtk_gadget_parent_class = g_type_class_peek_parent (klass); - * gtk_gadget_class_init ((GtkGadgetClass*) klass); - * } - * - * GType - * gtk_gadget_get_type (void) - * { - * return gtk_gadget_type_id; - * } - * - * static void - * gtk_gadget_register_type (GTypeModule *type_module) - * { - * const GTypeInfo g_define_type_info = { - * sizeof (GtkGadgetClass), - * (GBaseInitFunc) NULL, - * (GBaseFinalizeFunc) NULL, - * (GClassInitFunc) gtk_gadget_class_intern_init, - * (GClassFinalizeFunc) gtk_gadget_class_finalize, - * NULL, // class_data - * sizeof (GtkGadget), - * 0, // n_preallocs - * (GInstanceInitFunc) gtk_gadget_init, - * NULL // value_table - * }; - * gtk_gadget_type_id = g_type_module_register_type (type_module, - * GTK_TYPE_THING, - * "GtkGadget", - * &g_define_type_info, - * (GTypeFlags) flags); - * { - * const GInterfaceInfo g_implement_interface_info = { - * (GInterfaceInitFunc) gtk_gadget_gizmo_init - * }; - * g_type_module_add_interface (type_module, g_define_type_id, TYPE_GIZMO, &g_implement_interface_info); - * } - * } - * ]| - * - * Since: 2.14 - */ -#define G_DEFINE_DYNAMIC_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \ -static void type_name##_init (TypeName *self); \ -static void type_name##_class_init (TypeName##Class *klass); \ -static void type_name##_class_finalize (TypeName##Class *klass); \ -static gpointer type_name##_parent_class = NULL; \ -static GType type_name##_type_id = 0; \ -static void type_name##_class_intern_init (gpointer klass) \ -{ \ - type_name##_parent_class = g_type_class_peek_parent (klass); \ - type_name##_class_init ((TypeName##Class*) klass); \ -} \ -GType \ -type_name##_get_type (void) \ -{ \ - return type_name##_type_id; \ -} \ -static void \ -type_name##_register_type (GTypeModule *type_module) \ -{ \ - GType g_define_type_id G_GNUC_UNUSED; \ - const GTypeInfo g_define_type_info = { \ - sizeof (TypeName##Class), \ - (GBaseInitFunc) NULL, \ - (GBaseFinalizeFunc) NULL, \ - (GClassInitFunc) type_name##_class_intern_init, \ - (GClassFinalizeFunc) type_name##_class_finalize, \ - NULL, /* class_data */ \ - sizeof (TypeName), \ - 0, /* n_preallocs */ \ - (GInstanceInitFunc) type_name##_init, \ - NULL /* value_table */ \ - }; \ - type_name##_type_id = g_type_module_register_type (type_module, \ - TYPE_PARENT, \ - #TypeName, \ - &g_define_type_info, \ - (GTypeFlags) flags); \ - g_define_type_id = type_name##_type_id; \ - { CODE ; } \ -} - -/** - * G_IMPLEMENT_INTERFACE_DYNAMIC: - * @TYPE_IFACE: The #GType of the interface to add - * @iface_init: The interface init function - * - * A convenience macro to ease interface addition in the @_C_ section - * of G_DEFINE_DYNAMIC_TYPE_EXTENDED(). See G_DEFINE_DYNAMIC_TYPE_EXTENDED() - * for an example. - * - * Note that this macro can only be used together with the - * G_DEFINE_DYNAMIC_TYPE_EXTENDED macros, since it depends on variable - * names from that macro. - * - * Since: 2.24 - */ -#define G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \ - const GInterfaceInfo g_implement_interface_info = { \ - (GInterfaceInitFunc) iface_init, NULL, NULL \ - }; \ - g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \ -} - -GType g_type_module_get_type (void) G_GNUC_CONST; -gboolean g_type_module_use (GTypeModule *module); -void g_type_module_unuse (GTypeModule *module); -void g_type_module_set_name (GTypeModule *module, - const gchar *name); -GType g_type_module_register_type (GTypeModule *module, - GType parent_type, - const gchar *type_name, - const GTypeInfo *type_info, - GTypeFlags flags); -void g_type_module_add_interface (GTypeModule *module, - GType instance_type, - GType interface_type, - const GInterfaceInfo *interface_info); -GType g_type_module_register_enum (GTypeModule *module, - const gchar *name, - const GEnumValue *const_static_values); -GType g_type_module_register_flags (GTypeModule *module, - const gchar *name, - const GFlagsValue *const_static_values); - -G_END_DECLS - -#endif /* __G_TYPE_MODULE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gtypeplugin.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gtypeplugin.h deleted file mode 100644 index ff87a701..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gtypeplugin.h +++ /dev/null @@ -1,134 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_TYPE_PLUGIN_H__ -#define __G_TYPE_PLUGIN_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -#define G_TYPE_TYPE_PLUGIN (g_type_plugin_get_type ()) -#define G_TYPE_PLUGIN(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TYPE_PLUGIN, GTypePlugin)) -#define G_TYPE_PLUGIN_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), G_TYPE_TYPE_PLUGIN, GTypePluginClass)) -#define G_IS_TYPE_PLUGIN(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TYPE_PLUGIN)) -#define G_IS_TYPE_PLUGIN_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), G_TYPE_TYPE_PLUGIN)) -#define G_TYPE_PLUGIN_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TYPE_PLUGIN, GTypePluginClass)) - - -/* --- typedefs & structures --- */ -typedef struct _GTypePluginClass GTypePluginClass; -/** - * GTypePluginUse: - * @plugin: the #GTypePlugin whose use count should be increased - * - * The type of the @use_plugin function of #GTypePluginClass, which gets called - * to increase the use count of @plugin. - */ -typedef void (*GTypePluginUse) (GTypePlugin *plugin); -/** - * GTypePluginUnuse: - * @plugin: the #GTypePlugin whose use count should be decreased - * - * The type of the @unuse_plugin function of #GTypePluginClass. - */ -typedef void (*GTypePluginUnuse) (GTypePlugin *plugin); -/** - * GTypePluginCompleteTypeInfo: - * @plugin: the #GTypePlugin - * @g_type: the #GType whose info is completed - * @info: the #GTypeInfo struct to fill in - * @value_table: the #GTypeValueTable to fill in - * - * The type of the @complete_type_info function of #GTypePluginClass. - */ -typedef void (*GTypePluginCompleteTypeInfo) (GTypePlugin *plugin, - GType g_type, - GTypeInfo *info, - GTypeValueTable *value_table); -/** - * GTypePluginCompleteInterfaceInfo: - * @plugin: the #GTypePlugin - * @instance_type: the #GType of an instantiable type to which the interface - * is added - * @interface_type: the #GType of the interface whose info is completed - * @info: the #GInterfaceInfo to fill in - * - * The type of the @complete_interface_info function of #GTypePluginClass. - */ -typedef void (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin, - GType instance_type, - GType interface_type, - GInterfaceInfo *info); -/** - * GTypePlugin: - * - * The GTypePlugin typedef is used as a placeholder - * for objects that implement the GTypePlugin - * interface. - */ -/** - * GTypePluginClass: - * @use_plugin: Increases the use count of the plugin. - * @unuse_plugin: Decreases the use count of the plugin. - * @complete_type_info: Fills in the #GTypeInfo and - * #GTypeValueTable structs for the type. The structs are initialized - * with memset(s, 0, sizeof (s)) before calling - * this function. - * @complete_interface_info: Fills in missing parts of the #GInterfaceInfo - * for the interface. The structs is initialized with - * memset(s, 0, sizeof (s)) before calling - * this function. - * - * The #GTypePlugin interface is used by the type system in order to handle - * the lifecycle of dynamically loaded types. - */ -struct _GTypePluginClass -{ - /*< private >*/ - GTypeInterface base_iface; - - /*< public >*/ - GTypePluginUse use_plugin; - GTypePluginUnuse unuse_plugin; - GTypePluginCompleteTypeInfo complete_type_info; - GTypePluginCompleteInterfaceInfo complete_interface_info; -}; - - -/* --- prototypes --- */ -GType g_type_plugin_get_type (void) G_GNUC_CONST; -void g_type_plugin_use (GTypePlugin *plugin); -void g_type_plugin_unuse (GTypePlugin *plugin); -void g_type_plugin_complete_type_info (GTypePlugin *plugin, - GType g_type, - GTypeInfo *info, - GTypeValueTable *value_table); -void g_type_plugin_complete_interface_info (GTypePlugin *plugin, - GType instance_type, - GType interface_type, - GInterfaceInfo *info); - -G_END_DECLS - -#endif /* __G_TYPE_PLUGIN_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gvalue.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gvalue.h deleted file mode 100644 index 7bebfb14..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gvalue.h +++ /dev/null @@ -1,183 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvalue.h: generic GValue functions - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VALUE_H__ -#define __G_VALUE_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_TYPE_IS_VALUE: - * @type: A #GType value. - * - * Checks whether the passed in type ID can be used for g_value_init(). - * That is, this macro checks whether this type provides an implementation - * of the #GTypeValueTable functions required for a type to create a #GValue of. - * - * Returns: Whether @type is suitable as a #GValue type. - */ -#define G_TYPE_IS_VALUE(type) (g_type_check_is_value_type (type)) -/** - * G_IS_VALUE: - * @value: A #GValue structure. - * - * Checks if @value is a valid and initialized #GValue structure. - * - * Returns: %TRUE on success. - */ -#define G_IS_VALUE(value) (G_TYPE_CHECK_VALUE (value)) -/** - * G_VALUE_TYPE: - * @value: A #GValue structure. - * - * Get the type identifier of @value. - * - * Returns: the #GType. - */ -#define G_VALUE_TYPE(value) (((GValue*) (value))->g_type) -/** - * G_VALUE_TYPE_NAME: - * @value: A #GValue structure. - * - * Gets the type name of @value. - * - * Returns: the type name. - */ -#define G_VALUE_TYPE_NAME(value) (g_type_name (G_VALUE_TYPE (value))) -/** - * G_VALUE_HOLDS: - * @value: A #GValue structure. - * @type: A #GType value. - * - * Checks if @value holds (or contains) a value of @type. - * This macro will also check for @value != %NULL and issue a - * warning if the check fails. - * - * Returns: %TRUE if @value holds the @type. - */ -#define G_VALUE_HOLDS(value,type) (G_TYPE_CHECK_VALUE_TYPE ((value), (type))) - - -/* --- typedefs & structures --- */ -/** - * GValueTransform: - * @src_value: Source value. - * @dest_value: Target value. - * - * The type of value transformation functions which can be registered with - * g_value_register_transform_func(). - */ -typedef void (*GValueTransform) (const GValue *src_value, - GValue *dest_value); -/** - * GValue: - * - * An opaque structure used to hold different types of values. - * The data within the structure has protected scope: it is accessible only - * to functions within a #GTypeValueTable structure, or implementations of - * the g_value_*() API. That is, code portions which implement new fundamental - * types. - * #GValue users cannot make any assumptions about how data is stored - * within the 2 element @data union, and the @g_type member should - * only be accessed through the G_VALUE_TYPE() macro. - */ -struct _GValue -{ - /*< private >*/ - GType g_type; - - /* public for GTypeValueTable methods */ - union { - gint v_int; - guint v_uint; - glong v_long; - gulong v_ulong; - gint64 v_int64; - guint64 v_uint64; - gfloat v_float; - gdouble v_double; - gpointer v_pointer; - } data[2]; -}; - - -/* --- prototypes --- */ -GValue* g_value_init (GValue *value, - GType g_type); -void g_value_copy (const GValue *src_value, - GValue *dest_value); -GValue* g_value_reset (GValue *value); -void g_value_unset (GValue *value); -void g_value_set_instance (GValue *value, - gpointer instance); - - -/* --- private --- */ -gboolean g_value_fits_pointer (const GValue *value); -gpointer g_value_peek_pointer (const GValue *value); - - -/* --- implementation details --- */ -gboolean g_value_type_compatible (GType src_type, - GType dest_type); -gboolean g_value_type_transformable (GType src_type, - GType dest_type); -gboolean g_value_transform (const GValue *src_value, - GValue *dest_value); -void g_value_register_transform_func (GType src_type, - GType dest_type, - GValueTransform transform_func); - -/** - * G_VALUE_NOCOPY_CONTENTS: - * - * If passed to G_VALUE_COLLECT(), allocated data won't be copied - * but used verbatim. This does not affect ref-counted types like - * objects. - */ -#define G_VALUE_NOCOPY_CONTENTS (1 << 27) - -/** - * G_VALUE_INIT: - * - * A #GValue must be initialized before it can be used. - * This macro can be used as initializer instead of an explicit - * { 0 } when declaring a variable, - * but it cannot be assigned to a variable. - * - * |[ - * GValue value = G_VALUE_INIT; - * ]| - * - * Since: 2.30 - */ -#define G_VALUE_INIT { 0, { { 0 } } } - - -G_END_DECLS - -#endif /* __G_VALUE_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluearray.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluearray.h deleted file mode 100644 index de14934b..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluearray.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 2001 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvaluearray.h: GLib array type holding GValues - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VALUE_ARRAY_H__ -#define __G_VALUE_ARRAY_H__ - -#include - -G_BEGIN_DECLS - -/** - * G_TYPE_VALUE_ARRAY: - * - * The type ID of the "GValueArray" type which is a boxed type, - * used to pass around pointers to GValueArrays. - * - * Deprecated: 2.32: Use #GArray instead of #GValueArray - */ -#define G_TYPE_VALUE_ARRAY (g_value_array_get_type ()) - -/* --- typedefs & structs --- */ -typedef struct _GValueArray GValueArray; -/** - * GValueArray: - * @n_values: number of values contained in the array - * @values: array of values - * - * A #GValueArray contains an array of #GValue elements. - */ -struct _GValueArray -{ - guint n_values; - GValue *values; - - /*< private >*/ - guint n_prealloced; -}; - -/* --- prototypes --- */ -GLIB_DEPRECATED_IN_2_32_FOR(g_array_get_type) -GType g_value_array_get_type (void) G_GNUC_CONST; - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_index) -GValue* g_value_array_get_nth (GValueArray *value_array, - guint index_); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_new) -GValueArray* g_value_array_new (guint n_prealloced); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_unref) -void g_value_array_free (GValueArray *value_array); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_ref) -GValueArray* g_value_array_copy (const GValueArray *value_array); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_prepend_vals) -GValueArray* g_value_array_prepend (GValueArray *value_array, - const GValue *value); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_append_vals) -GValueArray* g_value_array_append (GValueArray *value_array, - const GValue *value); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_insert_vals) -GValueArray* g_value_array_insert (GValueArray *value_array, - guint index_, - const GValue *value); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_remove_index) -GValueArray* g_value_array_remove (GValueArray *value_array, - guint index_); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_sort) -GValueArray* g_value_array_sort (GValueArray *value_array, - GCompareFunc compare_func); - -GLIB_DEPRECATED_IN_2_32_FOR(g_array_sort_with_data) -GValueArray* g_value_array_sort_with_data (GValueArray *value_array, - GCompareDataFunc compare_func, - gpointer user_data); - - -G_END_DECLS - -#endif /* __G_VALUE_ARRAY_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluecollector.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluecollector.h deleted file mode 100644 index 05a436aa..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluecollector.h +++ /dev/null @@ -1,256 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvaluecollector.h: GValue varargs stubs - */ -/** - * SECTION:value_collection - * @Short_description: Converting varargs to generic values - * @Title: Varargs Value Collection - * - * The macros in this section provide the varargs parsing support needed - * in variadic GObject functions such as g_object_new() or g_object_set(). - * They currently support the collection of integral types, floating point - * types and pointers. - */ -#ifndef __G_VALUE_COLLECTOR_H__ -#define __G_VALUE_COLLECTOR_H__ - -#include - -G_BEGIN_DECLS - -/* we may want to add aggregate types here some day, if requested - * by users. the basic C types are covered already, everything - * smaller than an int is promoted to an integer and floats are - * always promoted to doubles for varargs call constructions. - */ -enum /*< skip >*/ -{ - G_VALUE_COLLECT_INT = 'i', - G_VALUE_COLLECT_LONG = 'l', - G_VALUE_COLLECT_INT64 = 'q', - G_VALUE_COLLECT_DOUBLE = 'd', - G_VALUE_COLLECT_POINTER = 'p' -}; - - -/* vararg union holding actual values collected - */ -/** - * GTypeCValue: - * @v_int: the field for holding integer values - * @v_long: the field for holding long integer values - * @v_int64: the field for holding 64 bit integer values - * @v_double: the field for holding floating point values - * @v_pointer: the field for holding pointers - * - * A union holding one collected value. - */ -union _GTypeCValue -{ - gint v_int; - glong v_long; - gint64 v_int64; - gdouble v_double; - gpointer v_pointer; -}; - -/** - * G_VALUE_COLLECT_INIT: - * @value: a #GValue return location. @value must contain only 0 bytes. - * @_value_type: the #GType to use for @value. - * @var_args: the va_list variable; it may be evaluated multiple times - * @flags: flags which are passed on to the collect_value() function of - * the #GTypeValueTable of @value. - * @__error: a #gchar** variable that will be modified to hold a g_new() - * allocated error messages if something fails - * - * Collects a variable argument value from a va_list. We have to - * implement the varargs collection as a macro, because on some systems - * va_list variables cannot be passed by reference. - * - * Since: 2.24 - */ -#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error) \ -G_STMT_START { \ - GValue *_val = (value); \ - guint _flags = (flags); \ - GTypeValueTable *_vtab = g_type_value_table_peek (_value_type); \ - const gchar *_collect_format = _vtab->collect_format; \ - GTypeCValue _cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, }; \ - guint _n_values = 0; \ - \ - _val->g_type = _value_type; /* value_meminit() from gvalue.c */ \ - while (*_collect_format) \ - { \ - GTypeCValue *_cvalue = _cvalues + _n_values++; \ - \ - switch (*_collect_format++) \ - { \ - case G_VALUE_COLLECT_INT: \ - _cvalue->v_int = va_arg ((var_args), gint); \ - break; \ - case G_VALUE_COLLECT_LONG: \ - _cvalue->v_long = va_arg ((var_args), glong); \ - break; \ - case G_VALUE_COLLECT_INT64: \ - _cvalue->v_int64 = va_arg ((var_args), gint64); \ - break; \ - case G_VALUE_COLLECT_DOUBLE: \ - _cvalue->v_double = va_arg ((var_args), gdouble); \ - break; \ - case G_VALUE_COLLECT_POINTER: \ - _cvalue->v_pointer = va_arg ((var_args), gpointer); \ - break; \ - default: \ - g_assert_not_reached (); \ - } \ - } \ - *(__error) = _vtab->collect_value (_val, \ - _n_values, \ - _cvalues, \ - _flags); \ -} G_STMT_END - -/** - * G_VALUE_COLLECT: - * @value: a #GValue return location. @value is supposed to be initialized - * according to the value type to be collected - * @var_args: the va_list variable; it may be evaluated multiple times - * @flags: flags which are passed on to the collect_value() function of - * the #GTypeValueTable of @value. - * @__error: a #gchar** variable that will be modified to hold a g_new() - * allocated error messages if something fails - * - * Collects a variable argument value from a va_list. We have to - * implement the varargs collection as a macro, because on some systems - * va_list variables cannot be passed by reference. - * - * Note: If you are creating the @value argument just before calling this macro, - * you should use the #G_VALUE_COLLECT_INIT variant and pass the unitialized - * #GValue. That variant is faster than #G_VALUE_COLLECT. - */ -#define G_VALUE_COLLECT(value, var_args, flags, __error) G_STMT_START { \ - GValue *_value = (value); \ - GType _value_type = G_VALUE_TYPE (_value); \ - GTypeValueTable *_vtable = g_type_value_table_peek (_value_type); \ - \ - if (_vtable->value_free) \ - _vtable->value_free (_value); \ - memset (_value->data, 0, sizeof (_value->data)); \ - \ - G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error); \ -} G_STMT_END - -#define G_VALUE_COLLECT_SKIP(_value_type, var_args) \ -G_STMT_START { \ - GTypeValueTable *_vtable = g_type_value_table_peek (_value_type); \ - const gchar *_collect_format = _vtable->collect_format; \ - \ - while (*_collect_format) \ - { \ - switch (*_collect_format++) \ - { \ - case G_VALUE_COLLECT_INT: \ - va_arg ((var_args), gint); \ - break; \ - case G_VALUE_COLLECT_LONG: \ - va_arg ((var_args), glong); \ - break; \ - case G_VALUE_COLLECT_INT64: \ - va_arg ((var_args), gint64); \ - break; \ - case G_VALUE_COLLECT_DOUBLE: \ - va_arg ((var_args), gdouble); \ - break; \ - case G_VALUE_COLLECT_POINTER: \ - va_arg ((var_args), gpointer); \ - break; \ - default: \ - g_assert_not_reached (); \ - } \ - } \ -} G_STMT_END - -/** - * G_VALUE_LCOPY: - * @value: a #GValue return location. @value is supposed to be initialized - * according to the value type to be collected - * @var_args: the va_list variable; it may be evaluated multiple times - * @flags: flags which are passed on to the lcopy_value() function of - * the #GTypeValueTable of @value. - * @__error: a #gchar** variable that will be modified to hold a g_new() - * allocated error messages if something fails - * - * Collects a value's variable argument locations from a va_list. Usage is - * analogous to G_VALUE_COLLECT(). - */ -#define G_VALUE_LCOPY(value, var_args, flags, __error) \ -G_STMT_START { \ - const GValue *_value = (value); \ - guint _flags = (flags); \ - GType _value_type = G_VALUE_TYPE (_value); \ - GTypeValueTable *_vtable = g_type_value_table_peek (_value_type); \ - const gchar *_lcopy_format = _vtable->lcopy_format; \ - GTypeCValue _cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, }; \ - guint _n_values = 0; \ - \ - while (*_lcopy_format) \ - { \ - GTypeCValue *_cvalue = _cvalues + _n_values++; \ - \ - switch (*_lcopy_format++) \ - { \ - case G_VALUE_COLLECT_INT: \ - _cvalue->v_int = va_arg ((var_args), gint); \ - break; \ - case G_VALUE_COLLECT_LONG: \ - _cvalue->v_long = va_arg ((var_args), glong); \ - break; \ - case G_VALUE_COLLECT_INT64: \ - _cvalue->v_int64 = va_arg ((var_args), gint64); \ - break; \ - case G_VALUE_COLLECT_DOUBLE: \ - _cvalue->v_double = va_arg ((var_args), gdouble); \ - break; \ - case G_VALUE_COLLECT_POINTER: \ - _cvalue->v_pointer = va_arg ((var_args), gpointer); \ - break; \ - default: \ - g_assert_not_reached (); \ - } \ - } \ - *(__error) = _vtable->lcopy_value (_value, \ - _n_values, \ - _cvalues, \ - _flags); \ -} G_STMT_END - - -/** - * G_VALUE_COLLECT_FORMAT_MAX_LENGTH: - * - * The maximal number of #GTypeCValues which can be collected for a - * single #GValue. - */ -#define G_VALUE_COLLECT_FORMAT_MAX_LENGTH (8) - -G_END_DECLS - -#endif /* __G_VALUE_COLLECTOR_H__ */ diff --git a/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluetypes.h b/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluetypes.h deleted file mode 100644 index 584162eb..00000000 --- a/GstreamerHelper/x86/include/glib-2.0/gobject/gvaluetypes.h +++ /dev/null @@ -1,264 +0,0 @@ -/* GObject - GLib Type, Object, Parameter and Signal Library - * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - * gvaluetypes.h: GLib default values - */ -#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __G_VALUETYPES_H__ -#define __G_VALUETYPES_H__ - -#include - -G_BEGIN_DECLS - -/* --- type macros --- */ -/** - * G_VALUE_HOLDS_CHAR: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_CHAR. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_CHAR(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_CHAR)) -/** - * G_VALUE_HOLDS_UCHAR: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_UCHAR. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_UCHAR(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UCHAR)) -/** - * G_VALUE_HOLDS_BOOLEAN: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_BOOLEAN. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_BOOLEAN(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOOLEAN)) -/** - * G_VALUE_HOLDS_INT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_INT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_INT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT)) -/** - * G_VALUE_HOLDS_UINT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_UINT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_UINT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT)) -/** - * G_VALUE_HOLDS_LONG: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_LONG. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_LONG(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_LONG)) -/** - * G_VALUE_HOLDS_ULONG: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_ULONG. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_ULONG(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ULONG)) -/** - * G_VALUE_HOLDS_INT64: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_INT64. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_INT64(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT64)) -/** - * G_VALUE_HOLDS_UINT64: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_UINT64. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_UINT64(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT64)) -/** - * G_VALUE_HOLDS_FLOAT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_FLOAT. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_FLOAT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLOAT)) -/** - * G_VALUE_HOLDS_DOUBLE: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_DOUBLE. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_DOUBLE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_DOUBLE)) -/** - * G_VALUE_HOLDS_STRING: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_STRING. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_STRING(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_STRING)) -/** - * G_VALUE_HOLDS_POINTER: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_POINTER. - * - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_POINTER(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_POINTER)) -/** - * G_TYPE_GTYPE: - * - * The type for #GType. - */ -#define G_TYPE_GTYPE (g_gtype_get_type()) -/** - * G_VALUE_HOLDS_GTYPE: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_GTYPE. - * - * Since: 2.12 - * Returns: %TRUE on success. - */ -#define G_VALUE_HOLDS_GTYPE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_GTYPE)) -/** - * G_VALUE_HOLDS_VARIANT: - * @value: a valid #GValue structure - * - * Checks whether the given #GValue can hold values of type %G_TYPE_VARIANT. - * - * Returns: %TRUE on success. - * - * Since: 2.26 - */ -#define G_VALUE_HOLDS_VARIANT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_VARIANT)) - - -/* --- prototypes --- */ -GLIB_DEPRECATED_IN_2_32_FOR(g_value_set_schar) -void g_value_set_char (GValue *value, - gchar v_char); -GLIB_DEPRECATED_IN_2_32_FOR(g_value_get_schar) -gchar g_value_get_char (const GValue *value); -void g_value_set_schar (GValue *value, - gint8 v_char); -gint8 g_value_get_schar (const GValue *value); -void g_value_set_uchar (GValue *value, - guchar v_uchar); -guchar g_value_get_uchar (const GValue *value); -void g_value_set_boolean (GValue *value, - gboolean v_boolean); -gboolean g_value_get_boolean (const GValue *value); -void g_value_set_int (GValue *value, - gint v_int); -gint g_value_get_int (const GValue *value); -void g_value_set_uint (GValue *value, - guint v_uint); -guint g_value_get_uint (const GValue *value); -void g_value_set_long (GValue *value, - glong v_long); -glong g_value_get_long (const GValue *value); -void g_value_set_ulong (GValue *value, - gulong v_ulong); -gulong g_value_get_ulong (const GValue *value); -void g_value_set_int64 (GValue *value, - gint64 v_int64); -gint64 g_value_get_int64 (const GValue *value); -void g_value_set_uint64 (GValue *value, - guint64 v_uint64); -guint64 g_value_get_uint64 (const GValue *value); -void g_value_set_float (GValue *value, - gfloat v_float); -gfloat g_value_get_float (const GValue *value); -void g_value_set_double (GValue *value, - gdouble v_double); -gdouble g_value_get_double (const GValue *value); -void g_value_set_string (GValue *value, - const gchar *v_string); -void g_value_set_static_string (GValue *value, - const gchar *v_string); -const gchar * g_value_get_string (const GValue *value); -gchar* g_value_dup_string (const GValue *value); -void g_value_set_pointer (GValue *value, - gpointer v_pointer); -gpointer g_value_get_pointer (const GValue *value); -GType g_gtype_get_type (void); -void g_value_set_gtype (GValue *value, - GType v_gtype); -GType g_value_get_gtype (const GValue *value); -void g_value_set_variant (GValue *value, - GVariant *variant); -void g_value_take_variant (GValue *value, - GVariant *variant); -GVariant* g_value_get_variant (const GValue *value); -GVariant* g_value_dup_variant (const GValue *value); - - -/* Convenience for registering new pointer types */ -GType g_pointer_type_register_static (const gchar *name); - -/* debugging aid, describe value contents as string */ -gchar* g_strdup_value_contents (const GValue *value); - - -void g_value_take_string (GValue *value, - gchar *v_string); -GLIB_DEPRECATED_FOR(g_value_take_string) -void g_value_set_string_take_ownership (GValue *value, - gchar *v_string); - - -/* humpf, need a C representable type name for G_TYPE_STRING */ -/** - * gchararray: - * - * A C representable type name for #G_TYPE_STRING. - */ -typedef gchar* gchararray; - - -G_END_DECLS - -#endif /* __G_VALUETYPES_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsink.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsink.h deleted file mode 100644 index c1161f01..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsink.h +++ /dev/null @@ -1,127 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_APP_SINK_H_ -#define _GST_APP_SINK_H_ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_APP_SINK \ - (gst_app_sink_get_type()) -#define GST_APP_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SINK,GstAppSink)) -#define GST_APP_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SINK,GstAppSinkClass)) -#define GST_IS_APP_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SINK)) -#define GST_IS_APP_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SINK)) -#define GST_APP_SINK_CAST(obj) \ - ((GstAppSink*)(obj)) - -typedef struct _GstAppSink GstAppSink; -typedef struct _GstAppSinkClass GstAppSinkClass; -typedef struct _GstAppSinkPrivate GstAppSinkPrivate; - -/** - * GstAppSinkCallbacks: (skip) - * @eos: Called when the end-of-stream has been reached. This callback - * is called from the steaming thread. - * @new_preroll: Called when a new preroll sample is available. - * This callback is called from the steaming thread. - * The new preroll sample can be retrieved with - * gst_app_sink_pull_preroll() either from this callback - * or from any other thread. - * @new_sample: Called when a new sample is available. - * This callback is called from the steaming thread. - * The new sample can be retrieved with - * gst_app_sink_pull_sample() either from this callback - * or from any other thread. - * - * A set of callbacks that can be installed on the appsink with - * gst_app_sink_set_callbacks(). - */ -typedef struct { - void (*eos) (GstAppSink *appsink, gpointer user_data); - GstFlowReturn (*new_preroll) (GstAppSink *appsink, gpointer user_data); - GstFlowReturn (*new_sample) (GstAppSink *appsink, gpointer user_data); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstAppSinkCallbacks; - -struct _GstAppSink -{ - GstBaseSink basesink; - - /*< private >*/ - GstAppSinkPrivate *priv; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstAppSinkClass -{ - GstBaseSinkClass basesink_class; - - /* signals */ - void (*eos) (GstAppSink *appsink); - GstFlowReturn (*new_preroll) (GstAppSink *appsink); - GstFlowReturn (*new_sample) (GstAppSink *appsink); - - /* actions */ - GstSample * (*pull_preroll) (GstAppSink *appsink); - GstSample * (*pull_sample) (GstAppSink *appsink); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_app_sink_get_type(void); - -void gst_app_sink_set_caps (GstAppSink *appsink, const GstCaps *caps); -GstCaps * gst_app_sink_get_caps (GstAppSink *appsink); - -gboolean gst_app_sink_is_eos (GstAppSink *appsink); - -void gst_app_sink_set_emit_signals (GstAppSink *appsink, gboolean emit); -gboolean gst_app_sink_get_emit_signals (GstAppSink *appsink); - -void gst_app_sink_set_max_buffers (GstAppSink *appsink, guint max); -guint gst_app_sink_get_max_buffers (GstAppSink *appsink); - -void gst_app_sink_set_drop (GstAppSink *appsink, gboolean drop); -gboolean gst_app_sink_get_drop (GstAppSink *appsink); - -GstSample * gst_app_sink_pull_preroll (GstAppSink *appsink); -GstSample * gst_app_sink_pull_sample (GstAppSink *appsink); - -void gst_app_sink_set_callbacks (GstAppSink * appsink, - GstAppSinkCallbacks *callbacks, - gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsrc.h deleted file mode 100644 index 417a56d9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/app/gstappsrc.h +++ /dev/null @@ -1,150 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_APP_SRC_H_ -#define _GST_APP_SRC_H_ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_APP_SRC \ - (gst_app_src_get_type()) -#define GST_APP_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SRC,GstAppSrc)) -#define GST_APP_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SRC,GstAppSrcClass)) -#define GST_IS_APP_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SRC)) -#define GST_IS_APP_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SRC)) -#define GST_APP_SRC_CAST(obj) \ - ((GstAppSrc*)(obj)) - -typedef struct _GstAppSrc GstAppSrc; -typedef struct _GstAppSrcClass GstAppSrcClass; -typedef struct _GstAppSrcPrivate GstAppSrcPrivate; - -/** - * GstAppSrcCallbacks: (skip) - * @need_data: Called when the appsrc needs more data. A buffer or EOS should be - * pushed to appsrc from this thread or another thread. @length is just a hint - * and when it is set to -1, any number of bytes can be pushed into @appsrc. - * @enough_data: Called when appsrc has enough data. It is recommended that the - * application stops calling push-buffer until the need_data callback is - * emitted again to avoid excessive buffer queueing. - * @seek_data: Called when a seek should be performed to the offset. - * The next push-buffer should produce buffers from the new @offset. - * This callback is only called for seekable stream types. - * - * A set of callbacks that can be installed on the appsrc with - * gst_app_src_set_callbacks(). - */ -typedef struct { - void (*need_data) (GstAppSrc *src, guint length, gpointer user_data); - void (*enough_data) (GstAppSrc *src, gpointer user_data); - gboolean (*seek_data) (GstAppSrc *src, guint64 offset, gpointer user_data); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstAppSrcCallbacks; - -/** - * GstAppStreamType: - * @GST_APP_STREAM_TYPE_STREAM: No seeking is supported in the stream, such as a - * live stream. - * @GST_APP_STREAM_TYPE_SEEKABLE: The stream is seekable but seeking might not - * be very fast, such as data from a webserver. - * @GST_APP_STREAM_TYPE_RANDOM_ACCESS: The stream is seekable and seeking is fast, - * such as in a local file. - * - * The stream type. - */ -typedef enum -{ - GST_APP_STREAM_TYPE_STREAM, - GST_APP_STREAM_TYPE_SEEKABLE, - GST_APP_STREAM_TYPE_RANDOM_ACCESS -} GstAppStreamType; - -struct _GstAppSrc -{ - GstBaseSrc basesrc; - - /*< private >*/ - GstAppSrcPrivate *priv; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstAppSrcClass -{ - GstBaseSrcClass basesrc_class; - - /* signals */ - void (*need_data) (GstAppSrc *appsrc, guint length); - void (*enough_data) (GstAppSrc *appsrc); - gboolean (*seek_data) (GstAppSrc *appsrc, guint64 offset); - - /* actions */ - GstFlowReturn (*push_buffer) (GstAppSrc *appsrc, GstBuffer *buffer); - GstFlowReturn (*end_of_stream) (GstAppSrc *appsrc); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_app_src_get_type(void); - -/* GType getter for GstAppStreamType */ -#define GST_TYPE_APP_STREAM_TYPE (gst_app_stream_type_get_type ()) -GType gst_app_stream_type_get_type (void); - -void gst_app_src_set_caps (GstAppSrc *appsrc, const GstCaps *caps); -GstCaps* gst_app_src_get_caps (GstAppSrc *appsrc); - -void gst_app_src_set_size (GstAppSrc *appsrc, gint64 size); -gint64 gst_app_src_get_size (GstAppSrc *appsrc); - -void gst_app_src_set_stream_type (GstAppSrc *appsrc, GstAppStreamType type); -GstAppStreamType gst_app_src_get_stream_type (GstAppSrc *appsrc); - -void gst_app_src_set_max_bytes (GstAppSrc *appsrc, guint64 max); -guint64 gst_app_src_get_max_bytes (GstAppSrc *appsrc); - -void gst_app_src_set_latency (GstAppSrc *appsrc, guint64 min, guint64 max); -void gst_app_src_get_latency (GstAppSrc *appsrc, guint64 *min, guint64 *max); - -void gst_app_src_set_emit_signals (GstAppSrc *appsrc, gboolean emit); -gboolean gst_app_src_get_emit_signals (GstAppSrc *appsrc); - -GstFlowReturn gst_app_src_push_buffer (GstAppSrc *appsrc, GstBuffer *buffer); -GstFlowReturn gst_app_src_end_of_stream (GstAppSrc *appsrc); - -void gst_app_src_set_callbacks (GstAppSrc * appsrc, - GstAppSrcCallbacks *callbacks, - gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-channels.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-channels.h deleted file mode 100644 index 7885140d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-channels.h +++ /dev/null @@ -1,166 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_CHANNELS_H__ -#define __GST_AUDIO_CHANNELS_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstAudioChannelPosition: - * @GST_AUDIO_CHANNEL_POSITION_MONO: Mono without direction; - * can only be used with 1 channel - * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT: Front left - * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT: Front right - * @GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER: Front center - * @GST_AUDIO_CHANNEL_POSITION_LFE1: Low-frequency effects 1 (subwoofer) - * @GST_AUDIO_CHANNEL_POSITION_REAR_LEFT: Rear left - * @GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT: Rear right - * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: Front left of center - * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: Front right of center - * @GST_AUDIO_CHANNEL_POSITION_REAR_CENTER: Rear center - * @GST_AUDIO_CHANNEL_POSITION_LFE2: Low-frequency effects 2 (subwoofer) - * @GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT: Side left - * @GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT: Side right - * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT: Top front left - * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT: Top front right - * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER: Top front center - * @GST_AUDIO_CHANNEL_POSITION_TOP_CENTER: Top center - * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT: Top rear left - * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT: Top rear right - * @GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT: Top side right - * @GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT: Top rear right - * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER: Top rear center - * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER: Bottom front center - * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT: Bottom front left - * @GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT: Bottom front right - * @GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT: Wide left (between front left and side left) - * @GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT: Wide right (between front right and side right) - * @GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT: Surround left (between rear left and side left) - * @GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT: Surround right (between rear right and side right) - * @GST_AUDIO_CHANNEL_POSITION_NONE: used for position-less channels, e.g. - * from a sound card that records 1024 channels; mutually exclusive with - * any other channel position - * @GST_AUDIO_CHANNEL_POSITION_INVALID: invalid position - * - * Audio channel positions. - * - * These are the channels defined in SMPTE 2036-2-2008 - * Table 1 for 22.2 audio systems with the Surround and Wide channels from - * DTS Coherent Acoustics (v.1.3.1) and 10.2 and 7.1 layouts. In the caps the - * actual channel layout is expressed with a channel count and a channel mask, - * which describes the existing channels. The positions in the bit mask correspond - * to the enum values. - * For negotiation it is allowed to have more bits set in the channel mask than - * the number of channels to specify the allowed channel positions but this is - * not allowed in negotiated caps. It is not allowed in any situation other - * than the one mentioned below to have less bits set in the channel mask than - * the number of channels. - * - * @GST_AUDIO_CHANNEL_POSITION_MONO can only be used with a single mono channel that - * has no direction information and would be mixed into all directional channels. - * This is expressed in caps by having a single channel and no channel mask. - * - * @GST_AUDIO_CHANNEL_POSITION_NONE can only be used if all channels have this position. - * This is expressed in caps by having a channel mask with no bits set. - * - * As another special case it is allowed to have two channels without a channel mask. - * This implicitely means that this is a stereo stream with a front left and front right - * channel. - */ -typedef enum { - /* These get negative indices to allow to use - * the enum values of the normal cases for the - * bit-mask position */ - GST_AUDIO_CHANNEL_POSITION_NONE = -3, - GST_AUDIO_CHANNEL_POSITION_MONO = -2, - GST_AUDIO_CHANNEL_POSITION_INVALID = -1, - - /* Normal cases */ - GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT = 0, - GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, - GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, - GST_AUDIO_CHANNEL_POSITION_LFE1, - GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, - GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, - GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, - GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, - GST_AUDIO_CHANNEL_POSITION_REAR_CENTER, - GST_AUDIO_CHANNEL_POSITION_LFE2, - GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT, - GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT, - GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER, - GST_AUDIO_CHANNEL_POSITION_TOP_CENTER, - GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT, - GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT, - GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT, - GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER, - GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER, - GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT, - GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT, - GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT, - GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT, - GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, - GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT -} GstAudioChannelPosition; - -#define GST_AUDIO_CHANNEL_POSITION_MASK(pos) (G_GUINT64_CONSTANT(1)<< GST_AUDIO_CHANNEL_POSITION_ ## pos) - -gboolean gst_audio_buffer_reorder_channels (GstBuffer * buffer, - GstAudioFormat format, - gint channels, - const GstAudioChannelPosition * from, - const GstAudioChannelPosition * to); - -gboolean gst_audio_reorder_channels (gpointer data, gsize size, - GstAudioFormat format, - gint channels, - const GstAudioChannelPosition * from, - const GstAudioChannelPosition * to); - -gboolean gst_audio_channel_positions_to_valid_order (GstAudioChannelPosition *position, - gint channels); - -gboolean gst_audio_check_valid_channel_positions (const GstAudioChannelPosition *position, - gint channels, gboolean force_order); - -gboolean gst_audio_channel_positions_to_mask (const GstAudioChannelPosition *position, - gint channels, gboolean force_order, - guint64 *channel_mask); - -gboolean gst_audio_channel_positions_from_mask (gint channels, guint64 channel_mask, - GstAudioChannelPosition * position); - -gboolean gst_audio_get_channel_reorder_map (gint channels, - const GstAudioChannelPosition * from, - const GstAudioChannelPosition * to, - gint *reorder_map); - -G_END_DECLS - -#endif /* __GST_AUDIO_CHANNELS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-enumtypes.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-enumtypes.h deleted file mode 100644 index a323a87d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-enumtypes.h +++ /dev/null @@ -1,39 +0,0 @@ - - - -#ifndef __GST_AUDIO_ENUM_TYPES_H__ -#define __GST_AUDIO_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "audio-format.h" */ -GType gst_audio_format_get_type (void); -#define GST_TYPE_AUDIO_FORMAT (gst_audio_format_get_type()) -GType gst_audio_format_flags_get_type (void); -#define GST_TYPE_AUDIO_FORMAT_FLAGS (gst_audio_format_flags_get_type()) -GType gst_audio_pack_flags_get_type (void); -#define GST_TYPE_AUDIO_PACK_FLAGS (gst_audio_pack_flags_get_type()) - -/* enumerations from "audio-channels.h" */ -GType gst_audio_channel_position_get_type (void); -#define GST_TYPE_AUDIO_CHANNEL_POSITION (gst_audio_channel_position_get_type()) - -/* enumerations from "audio-info.h" */ -GType gst_audio_flags_get_type (void); -#define GST_TYPE_AUDIO_FLAGS (gst_audio_flags_get_type()) -GType gst_audio_layout_get_type (void); -#define GST_TYPE_AUDIO_LAYOUT (gst_audio_layout_get_type()) - -/* enumerations from "gstaudioringbuffer.h" */ -GType gst_audio_ring_buffer_state_get_type (void); -#define GST_TYPE_AUDIO_RING_BUFFER_STATE (gst_audio_ring_buffer_state_get_type()) -GType gst_audio_ring_buffer_format_type_get_type (void); -#define GST_TYPE_AUDIO_RING_BUFFER_FORMAT_TYPE (gst_audio_ring_buffer_format_type_get_type()) -G_END_DECLS - -#endif /* __GST_AUDIO_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-format.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-format.h deleted file mode 100644 index e515d111..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-format.h +++ /dev/null @@ -1,330 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#ifndef __GST_AUDIO_FORMAT_H__ -#define __GST_AUDIO_FORMAT_H__ - -G_BEGIN_DECLS - -#include - -#if G_BYTE_ORDER == G_BIG_ENDIAN -#define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE -#define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE -#elif G_BYTE_ORDER == G_LITTLE_ENDIAN -#define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE -#define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE -#endif - -/** - * GstAudioFormat: - * @GST_AUDIO_FORMAT_UNKNOWN: unknown or unset audio format - * @GST_AUDIO_FORMAT_ENCODED: encoded audio format - * @GST_AUDIO_FORMAT_S8: 8 bits in 8 bits, signed - * @GST_AUDIO_FORMAT_U8: 8 bits in 8 bits, unsigned - * @GST_AUDIO_FORMAT_S16LE: 16 bits in 16 bits, signed, little endian - * @GST_AUDIO_FORMAT_S16BE: 16 bits in 16 bits, signed, big endian - * @GST_AUDIO_FORMAT_U16LE: 16 bits in 16 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U16BE: 16 bits in 16 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S24_32LE: 24 bits in 32 bits, signed, little endian - * @GST_AUDIO_FORMAT_S24_32BE: 24 bits in 32 bits, signed, big endian - * @GST_AUDIO_FORMAT_U24_32LE: 24 bits in 32 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U24_32BE: 24 bits in 32 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S32LE: 32 bits in 32 bits, signed, little endian - * @GST_AUDIO_FORMAT_S32BE: 32 bits in 32 bits, signed, big endian - * @GST_AUDIO_FORMAT_U32LE: 32 bits in 32 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U32BE: 32 bits in 32 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S24LE: 24 bits in 24 bits, signed, little endian - * @GST_AUDIO_FORMAT_S24BE: 24 bits in 24 bits, signed, big endian - * @GST_AUDIO_FORMAT_U24LE: 24 bits in 24 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U24BE: 24 bits in 24 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S20LE: 20 bits in 24 bits, signed, little endian - * @GST_AUDIO_FORMAT_S20BE: 20 bits in 24 bits, signed, big endian - * @GST_AUDIO_FORMAT_U20LE: 20 bits in 24 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U20BE: 20 bits in 24 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_S18LE: 18 bits in 24 bits, signed, little endian - * @GST_AUDIO_FORMAT_S18BE: 18 bits in 24 bits, signed, big endian - * @GST_AUDIO_FORMAT_U18LE: 18 bits in 24 bits, unsigned, little endian - * @GST_AUDIO_FORMAT_U18BE: 18 bits in 24 bits, unsigned, big endian - * @GST_AUDIO_FORMAT_F32LE: 32-bit floating point samples, little endian - * @GST_AUDIO_FORMAT_F32BE: 32-bit floating point samples, big endian - * @GST_AUDIO_FORMAT_F64LE: 64-bit floating point samples, little endian - * @GST_AUDIO_FORMAT_F64BE: 64-bit floating point samples, big endian - * @GST_AUDIO_FORMAT_S16: 16 bits in 16 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U16: 16 bits in 16 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S24_32: 24 bits in 32 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U24_32: 24 bits in 32 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S32: 32 bits in 32 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U32: 32 bits in 32 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S24: 24 bits in 24 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U24: 24 bits in 24 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S20: 20 bits in 24 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U20: 20 bits in 24 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_S18: 18 bits in 24 bits, signed, native endianness - * @GST_AUDIO_FORMAT_U18: 18 bits in 24 bits, unsigned, native endianness - * @GST_AUDIO_FORMAT_F32: 32-bit floating point samples, native endianness - * @GST_AUDIO_FORMAT_F64: 64-bit floating point samples, native endianness - * - * Enum value describing the most common audio formats. - */ -typedef enum { - GST_AUDIO_FORMAT_UNKNOWN, - GST_AUDIO_FORMAT_ENCODED, - /* 8 bit */ - GST_AUDIO_FORMAT_S8, - GST_AUDIO_FORMAT_U8, - /* 16 bit */ - GST_AUDIO_FORMAT_S16LE, - GST_AUDIO_FORMAT_S16BE, - GST_AUDIO_FORMAT_U16LE, - GST_AUDIO_FORMAT_U16BE, - /* 24 bit in low 3 bytes of 32 bits*/ - GST_AUDIO_FORMAT_S24_32LE, - GST_AUDIO_FORMAT_S24_32BE, - GST_AUDIO_FORMAT_U24_32LE, - GST_AUDIO_FORMAT_U24_32BE, - /* 32 bit */ - GST_AUDIO_FORMAT_S32LE, - GST_AUDIO_FORMAT_S32BE, - GST_AUDIO_FORMAT_U32LE, - GST_AUDIO_FORMAT_U32BE, - /* 24 bit in 3 bytes*/ - GST_AUDIO_FORMAT_S24LE, - GST_AUDIO_FORMAT_S24BE, - GST_AUDIO_FORMAT_U24LE, - GST_AUDIO_FORMAT_U24BE, - /* 20 bit in 3 bytes*/ - GST_AUDIO_FORMAT_S20LE, - GST_AUDIO_FORMAT_S20BE, - GST_AUDIO_FORMAT_U20LE, - GST_AUDIO_FORMAT_U20BE, - /* 18 bit in 3 bytes*/ - GST_AUDIO_FORMAT_S18LE, - GST_AUDIO_FORMAT_S18BE, - GST_AUDIO_FORMAT_U18LE, - GST_AUDIO_FORMAT_U18BE, - /* float */ - GST_AUDIO_FORMAT_F32LE, - GST_AUDIO_FORMAT_F32BE, - GST_AUDIO_FORMAT_F64LE, - GST_AUDIO_FORMAT_F64BE, - /* native endianness equivalents */ - GST_AUDIO_FORMAT_S16 = _GST_AUDIO_FORMAT_NE(S16), - GST_AUDIO_FORMAT_U16 = _GST_AUDIO_FORMAT_NE(U16), - GST_AUDIO_FORMAT_S24_32 = _GST_AUDIO_FORMAT_NE(S24_32), - GST_AUDIO_FORMAT_U24_32 = _GST_AUDIO_FORMAT_NE(U24_32), - GST_AUDIO_FORMAT_S32 = _GST_AUDIO_FORMAT_NE(S32), - GST_AUDIO_FORMAT_U32 = _GST_AUDIO_FORMAT_NE(U32), - GST_AUDIO_FORMAT_S24 = _GST_AUDIO_FORMAT_NE(S24), - GST_AUDIO_FORMAT_U24 = _GST_AUDIO_FORMAT_NE(U24), - GST_AUDIO_FORMAT_S20 = _GST_AUDIO_FORMAT_NE(S20), - GST_AUDIO_FORMAT_U20 = _GST_AUDIO_FORMAT_NE(U20), - GST_AUDIO_FORMAT_S18 = _GST_AUDIO_FORMAT_NE(S18), - GST_AUDIO_FORMAT_U18 = _GST_AUDIO_FORMAT_NE(U18), - GST_AUDIO_FORMAT_F32 = _GST_AUDIO_FORMAT_NE(F32), - GST_AUDIO_FORMAT_F64 = _GST_AUDIO_FORMAT_NE(F64) -} GstAudioFormat; - - -typedef struct _GstAudioFormatInfo GstAudioFormatInfo; - -/** - * GstAudioFormatFlags: - * @GST_AUDIO_FORMAT_FLAG_INTEGER: integer samples - * @GST_AUDIO_FORMAT_FLAG_FLOAT: float samples - * @GST_AUDIO_FORMAT_FLAG_SIGNED: signed samples - * @GST_AUDIO_FORMAT_FLAG_COMPLEX: complex layout - * @GST_AUDIO_FORMAT_FLAG_UNPACK: the format can be used in - * #GstAudioFormatUnpack and #GstAudioFormatPack functions - * - * The different audio flags that a format info can have. - */ -typedef enum -{ - GST_AUDIO_FORMAT_FLAG_INTEGER = (1 << 0), - GST_AUDIO_FORMAT_FLAG_FLOAT = (1 << 1), - GST_AUDIO_FORMAT_FLAG_SIGNED = (1 << 2), - GST_AUDIO_FORMAT_FLAG_COMPLEX = (1 << 4), - GST_AUDIO_FORMAT_FLAG_UNPACK = (1 << 5) -} GstAudioFormatFlags; - -/** - * GstAudioPackFlags: - * @GST_AUDIO_PACK_FLAG_NONE: No flag - * - * The different flags that can be used when packing and unpacking. - */ -typedef enum -{ - GST_AUDIO_PACK_FLAG_NONE = 0 -} GstAudioPackFlags; - -/** - * GstAudioFormatUnpack: - * @info: a #GstAudioFormatInfo - * @dest: (array) (element-type guint8): a destination array - * @data: (array) (element-type guint8): pointer to the audio data - * @length: the amount of samples to unpack. - * - * Unpacks @length samples from the given data of format @info. - * The samples will be unpacked into @dest which each channel - * interleaved. @dest should at least be big enough to hold @length * - * channels * size(unpack_format) bytes. - */ -typedef void (*GstAudioFormatUnpack) (const GstAudioFormatInfo *info, - GstAudioPackFlags flags, gpointer dest, - const gpointer data, gint length); -/** - * GstAudioFormatPack: - * @info: a #GstAudioFormatInfo - * @src: (array) (element-type guint8): a source array - * @data: (array) (element-type guint8): pointer to the destination - * data - * @length: the amount of samples to pack. - * - * Packs @length samples from @src to the data array in format @info. - * The samples from source have each channel interleaved - * and will be packed into @data. - */ -typedef void (*GstAudioFormatPack) (const GstAudioFormatInfo *info, - GstAudioPackFlags flags, const gpointer src, - gpointer data, gint length); - -/** - * GstAudioFormatInfo: - * @format: #GstAudioFormat - * @name: string representation of the format - * @description: user readable description of the format - * @flags: #GstAudioFormatFlags - * @endianness: the endianness - * @width: amount of bits used for one sample - * @depth: amount of valid bits in @width - * @silence: @width/8 bytes with 1 silent sample - * @unpack_format: the format of the unpacked samples - * @unpack_func: function to unpack samples - * @pack_func: function to pack samples - * - * Information for an audio format. - */ -struct _GstAudioFormatInfo { - GstAudioFormat format; - const gchar *name; - const gchar *description; - GstAudioFormatFlags flags; - gint endianness; - gint width; - gint depth; - guint8 silence[8]; - - GstAudioFormat unpack_format; - GstAudioFormatUnpack unpack_func; - GstAudioFormatPack pack_func; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_format_info_get_type (void); - -#define GST_AUDIO_FORMAT_INFO_FORMAT(info) ((info)->format) -#define GST_AUDIO_FORMAT_INFO_NAME(info) ((info)->name) -#define GST_AUDIO_FORMAT_INFO_FLAGS(info) ((info)->flags) - -#define GST_AUDIO_FORMAT_INFO_IS_INTEGER(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_INTEGER) -#define GST_AUDIO_FORMAT_INFO_IS_FLOAT(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_FLOAT) -#define GST_AUDIO_FORMAT_INFO_IS_SIGNED(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_SIGNED) - -#define GST_AUDIO_FORMAT_INFO_ENDIANNESS(info) ((info)->endianness) -#define GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN(info) ((info)->endianness == G_LITTLE_ENDIAN) -#define GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN(info) ((info)->endianness == G_BIG_ENDIAN) -#define GST_AUDIO_FORMAT_INFO_WIDTH(info) ((info)->width) -#define GST_AUDIO_FORMAT_INFO_DEPTH(info) ((info)->depth) - - -GstAudioFormat gst_audio_format_build_integer (gboolean sign, gint endianness, - gint width, gint depth) G_GNUC_CONST; - -GstAudioFormat gst_audio_format_from_string (const gchar *format) G_GNUC_CONST; -const gchar * gst_audio_format_to_string (GstAudioFormat format) G_GNUC_CONST; - -const GstAudioFormatInfo * - gst_audio_format_get_info (GstAudioFormat format) G_GNUC_CONST; - -void gst_audio_format_fill_silence (const GstAudioFormatInfo *info, - gpointer dest, gsize length); - -#define GST_AUDIO_RATE_RANGE "(int) [ 1, max ]" -#define GST_AUDIO_CHANNELS_RANGE "(int) [ 1, max ]" - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -# define GST_AUDIO_NE(s) G_STRINGIFY(s)"LE" -# define GST_AUDIO_OE(s) G_STRINGIFY(s)"BE" -#else -# define GST_AUDIO_NE(s) G_STRINGIFY(s)"BE" -# define GST_AUDIO_OE(s) G_STRINGIFY(s)"LE" -#endif - -#define GST_AUDIO_FORMATS_ALL " { S8, U8, " \ - "S16LE, S16BE, U16LE, U16BE, " \ - "S24_32LE, S24_32BE, U24_32LE, U24_32BE, " \ - "S32LE, S32BE, U32LE, U32BE, " \ - "S24LE, S24BE, U24LE, U24BE, " \ - "S20LE, S20BE, U20LE, U20BE, " \ - "S18LE, S18BE, U18LE, U18BE, " \ - "F32LE, F32BE, F64LE, F64BE }" - -/** - * GST_AUDIO_CAPS_MAKE: - * @format: string format that describes the sample layout, as string - * (e.g. "S16LE", "S8", etc.) - * - * Generic caps string for audio, for use in pad templates. - */ -#define GST_AUDIO_CAPS_MAKE(format) \ - "audio/x-raw, " \ - "format = (string) " format ", " \ - "rate = " GST_AUDIO_RATE_RANGE ", " \ - "channels = " GST_AUDIO_CHANNELS_RANGE - -/** - * GST_AUDIO_DEF_RATE: - * - * Standard sampling rate used in consumer audio. - */ -#define GST_AUDIO_DEF_RATE 44100 -/** - * GST_AUDIO_DEF_CHANNELS: - * - * Standard number of channels used in consumer audio. - */ -#define GST_AUDIO_DEF_CHANNELS 2 -/** - * GST_AUDIO_DEF_FORMAT: - * - * Standard format used in consumer audio. - */ -#define GST_AUDIO_DEF_FORMAT "S16LE" - -G_END_DECLS - -#endif /* __GST_AUDIO_FORMAT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-info.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-info.h deleted file mode 100644 index fb6ab260..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio-info.h +++ /dev/null @@ -1,133 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_INFO_H__ -#define __GST_AUDIO_INFO_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstAudioInfo GstAudioInfo; - -/** - * GstAudioFlags: - * @GST_AUDIO_FLAG_NONE: no valid flag - * @GST_AUDIO_FLAG_UNPOSITIONED: the position array explicitly - * contains unpositioned channels. - * - * Extra audio flags - */ -typedef enum { - GST_AUDIO_FLAG_NONE = 0, - GST_AUDIO_FLAG_UNPOSITIONED = (1 << 0) -} GstAudioFlags; - -/** - * GstAudioLayout: - * @GST_AUDIO_LAYOUT_INTERLEAVED: interleaved audio - * @GST_AUDIO_LAYOUT_NON_INTERLEAVED: non-interleaved audio - * - * Layout of the audio samples for the different channels. - */ -typedef enum { - GST_AUDIO_LAYOUT_INTERLEAVED = 0, - GST_AUDIO_LAYOUT_NON_INTERLEAVED -} GstAudioLayout; - -/** - * GstAudioInfo: - * @finfo: the format info of the audio - * @flags: additional audio flags - * @layout: audio layout - * @rate: the audio sample rate - * @channels: the number of channels - * @bpf: the number of bytes for one frame, this is the size of one - * sample * @channels - * @position: the positions for each channel - * - * Information describing audio properties. This information can be filled - * in from GstCaps with gst_audio_info_from_caps(). - * - * Use the provided macros to access the info in this structure. - */ -struct _GstAudioInfo { - const GstAudioFormatInfo *finfo; - GstAudioFlags flags; - GstAudioLayout layout; - gint rate; - gint channels; - gint bpf; - GstAudioChannelPosition position[64]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_info_get_type (void); - -#define GST_AUDIO_INFO_IS_VALID(i) ((i)->finfo != NULL && (i)->rate > 0 && (i)->channels > 0 && (i)->bpf > 0) - -#define GST_AUDIO_INFO_FORMAT(i) (GST_AUDIO_FORMAT_INFO_FORMAT((i)->finfo)) -#define GST_AUDIO_INFO_NAME(i) (GST_AUDIO_FORMAT_INFO_NAME((i)->finfo)) -#define GST_AUDIO_INFO_WIDTH(i) (GST_AUDIO_FORMAT_INFO_WIDTH((i)->finfo)) -#define GST_AUDIO_INFO_DEPTH(i) (GST_AUDIO_FORMAT_INFO_DEPTH((i)->finfo)) -#define GST_AUDIO_INFO_BPS(info) (GST_AUDIO_INFO_DEPTH(info) >> 3) - -#define GST_AUDIO_INFO_IS_INTEGER(i) (GST_AUDIO_FORMAT_INFO_IS_INTEGER((i)->finfo)) -#define GST_AUDIO_INFO_IS_FLOAT(i) (GST_AUDIO_FORMAT_INFO_IS_FLOAT((i)->finfo)) -#define GST_AUDIO_INFO_IS_SIGNED(i) (GST_AUDIO_FORMAT_INFO_IS_SIGNED((i)->finfo)) - -#define GST_AUDIO_INFO_ENDIANNESS(i) (GST_AUDIO_FORMAT_INFO_ENDIANNES((i)->finfo)) -#define GST_AUDIO_INFO_IS_LITTLE_ENDIAN(i) (GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN((i)->finfo)) -#define GST_AUDIO_INFO_IS_BIG_ENDIAN(i) (GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN((i)->finfo)) - -#define GST_AUDIO_INFO_FLAGS(info) ((info)->flags) -#define GST_AUDIO_INFO_IS_UNPOSITIONED(info) ((info)->flags & GST_AUDIO_FLAG_UNPOSITIONED) -#define GST_AUDIO_INFO_LAYOUT(info) ((info)->layout) - -#define GST_AUDIO_INFO_RATE(info) ((info)->rate) -#define GST_AUDIO_INFO_CHANNELS(info) ((info)->channels) -#define GST_AUDIO_INFO_BPF(info) ((info)->bpf) -#define GST_AUDIO_INFO_POSITION(info,c) ((info)->position[c]) - -GstAudioInfo * gst_audio_info_new (void); -void gst_audio_info_init (GstAudioInfo *info); -GstAudioInfo * gst_audio_info_copy (const GstAudioInfo *info); -void gst_audio_info_free (GstAudioInfo *info); - -void gst_audio_info_set_format (GstAudioInfo *info, GstAudioFormat format, - gint rate, gint channels, - const GstAudioChannelPosition *position); - -gboolean gst_audio_info_from_caps (GstAudioInfo *info, const GstCaps *caps); -GstCaps * gst_audio_info_to_caps (const GstAudioInfo *info); - -gboolean gst_audio_info_convert (const GstAudioInfo * info, - GstFormat src_fmt, gint64 src_val, - GstFormat dest_fmt, gint64 * dest_val); - -G_END_DECLS - -#endif /* __GST_AUDIO_INFO_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio.h deleted file mode 100644 index e97fc1ab..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/audio.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Library <2001> Thomas Vander Stichele - * <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_AUDIO_H__ -#define __GST_AUDIO_AUDIO_H__ - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* conversion macros */ -/** - * GST_FRAMES_TO_CLOCK_TIME: - * @frames: sample frames - * @rate: sampling rate - * - * Calculate clocktime from sample @frames and @rate. - */ -#define GST_FRAMES_TO_CLOCK_TIME(frames, rate) \ - ((GstClockTime) gst_util_uint64_scale_round (frames, GST_SECOND, rate)) - -/** - * GST_CLOCK_TIME_TO_FRAMES: - * @clocktime: clock time - * @rate: sampling rate - * - * Calculate frames from @clocktime and sample @rate. - */ -#define GST_CLOCK_TIME_TO_FRAMES(clocktime, rate) \ - gst_util_uint64_scale_round (clocktime, rate, GST_SECOND) - -/* - * this library defines and implements some helper functions for audio - * handling - */ - -GstBuffer * gst_audio_buffer_clip (GstBuffer *buffer, GstSegment *segment, - gint rate, gint bpf); - - -G_END_DECLS - -#endif /* __GST_AUDIO_AUDIO_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h deleted file mode 100644 index d3e65e37..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesink.h +++ /dev/null @@ -1,190 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiobasesink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* a base class for audio sinks. - * - * It uses a ringbuffer to schedule playback of samples. This makes - * it very easy to drop or insert samples to align incoming - * buffers to the exact playback timestamp. - * - * Subclasses must provide a ringbuffer pointing to either DMA - * memory or regular memory. A subclass should also call a callback - * function when it has played N segments in the buffer. The subclass - * is free to use a thread to signal this callback, use EIO or any - * other mechanism. - * - * The base class is able to operate in push or pull mode. The chain - * mode will queue the samples in the ringbuffer as much as possible. - * The available space is calculated in the callback function. - * - * The pull mode will pull_range() a new buffer of N samples with a - * configurable latency. This allows for high-end real time - * audio processing pipelines driven by the audiosink. The callback - * function will be used to perform a pull_range() on the sinkpad. - * The thread scheduling the callback can be a real-time thread. - * - * Subclasses must implement a GstAudioRingBuffer in addition to overriding - * the methods in GstBaseSink and this class. - */ - -#ifndef __GST_AUDIO_BASE_SINK_H__ -#define __GST_AUDIO_BASE_SINK_H__ - -#include -#include -#include "gstaudioringbuffer.h" -#include "gstaudioclock.h" - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_BASE_SINK (gst_audio_base_sink_get_type()) -#define GST_AUDIO_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSink)) -#define GST_AUDIO_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSinkClass)) -#define GST_AUDIO_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SINK, GstAudioBaseSinkClass)) -#define GST_IS_AUDIO_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SINK)) -#define GST_IS_AUDIO_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_BASE_SINK)) - -/** - * GST_AUDIO_BASE_SINK_CLOCK: - * @obj: a #GstAudioBaseSink - * - * Get the #GstClock of @obj. - */ -#define GST_AUDIO_BASE_SINK_CLOCK(obj) (GST_AUDIO_BASE_SINK (obj)->clock) -/** - * GST_AUDIO_BASE_SINK_PAD: - * @obj: a #GstAudioBaseSink - * - * Get the sink #GstPad of @obj. - */ -#define GST_AUDIO_BASE_SINK_PAD(obj) (GST_BASE_SINK (obj)->sinkpad) - -/** - * GstAudioBaseSinkSlaveMethod: - * @GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE: Resample to match the master clock - * @GST_AUDIO_BASE_SINK_SLAVE_SKEW: Adjust playout pointer when master clock - * drifts too much. - * @GST_AUDIO_BASE_SINK_SLAVE_NONE: No adjustment is done. - * - * Different possible clock slaving algorithms used when the internal audio - * clock is not selected as the pipeline master clock. - */ -typedef enum -{ - GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE, - GST_AUDIO_BASE_SINK_SLAVE_SKEW, - GST_AUDIO_BASE_SINK_SLAVE_NONE -} GstAudioBaseSinkSlaveMethod; - -#define GST_TYPE_AUDIO_BASE_SINK_SLAVE_METHOD (gst_audio_base_sink_slave_method_get_type ()) - -typedef struct _GstAudioBaseSink GstAudioBaseSink; -typedef struct _GstAudioBaseSinkClass GstAudioBaseSinkClass; -typedef struct _GstAudioBaseSinkPrivate GstAudioBaseSinkPrivate; - -/** - * GstAudioBaseSink: - * - * Opaque #GstAudioBaseSink. - */ -struct _GstAudioBaseSink { - GstBaseSink element; - - /*< protected >*/ /* with LOCK */ - /* our ringbuffer */ - GstAudioRingBuffer *ringbuffer; - - /* required buffer and latency in microseconds */ - guint64 buffer_time; - guint64 latency_time; - - /* the next sample to write */ - guint64 next_sample; - - /* clock */ - GstClock *provided_clock; - - /* with g_atomic_; currently rendering eos */ - gboolean eos_rendering; - - /*< private >*/ - GstAudioBaseSinkPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioBaseSinkClass: - * @parent_class: the parent class. - * @create_ringbuffer: create and return a #GstAudioRingBuffer to write to. - * @payload: payload data in a format suitable to write to the sink. If no - * payloading is required, returns a reffed copy of the original - * buffer, else returns the payloaded buffer with all other metadata - * copied. - * - * #GstAudioBaseSink class. Override the vmethod to implement - * functionality. - */ -struct _GstAudioBaseSinkClass { - GstBaseSinkClass parent_class; - - /* subclass ringbuffer allocation */ - GstAudioRingBuffer* (*create_ringbuffer) (GstAudioBaseSink *sink); - - /* subclass payloader */ - GstBuffer* (*payload) (GstAudioBaseSink *sink, - GstBuffer *buffer); - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_base_sink_get_type(void); -GType gst_audio_base_sink_slave_method_get_type (void); - -GstAudioRingBuffer * - gst_audio_base_sink_create_ringbuffer (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_provide_clock (GstAudioBaseSink *sink, gboolean provide); -gboolean gst_audio_base_sink_get_provide_clock (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_slave_method (GstAudioBaseSink *sink, - GstAudioBaseSinkSlaveMethod method); -GstAudioBaseSinkSlaveMethod - gst_audio_base_sink_get_slave_method (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_drift_tolerance (GstAudioBaseSink *sink, - gint64 drift_tolerance); -gint64 gst_audio_base_sink_get_drift_tolerance (GstAudioBaseSink *sink); - -void gst_audio_base_sink_set_alignment_threshold (GstAudioBaseSink * sink, - GstClockTime alignment_threshold); -GstClockTime - gst_audio_base_sink_get_alignment_threshold (GstAudioBaseSink * sink); - -void gst_audio_base_sink_set_discont_wait (GstAudioBaseSink * sink, - GstClockTime discont_wait); -GstClockTime - gst_audio_base_sink_get_discont_wait (GstAudioBaseSink * sink); - -G_END_DECLS - -#endif /* __GST_AUDIO_BASE_SINK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h deleted file mode 100644 index 37be70e8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiobasesrc.h +++ /dev/null @@ -1,147 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiobasesrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* a base class for audio sources. - */ - -#ifndef __GST_AUDIO_BASE_SRC_H__ -#define __GST_AUDIO_BASE_SRC_H__ - -#include -#include -#include "gstaudioringbuffer.h" -#include "gstaudioclock.h" - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_BASE_SRC (gst_audio_base_src_get_type()) -#define GST_AUDIO_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrc)) -#define GST_AUDIO_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrcClass)) -#define GST_AUDIO_BASE_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SRC, GstAudioBaseSrcClass)) -#define GST_IS_AUDIO_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SRC)) -#define GST_IS_AUDIO_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_BASE_SRC)) - -/** - * GST_AUDIO_BASE_SRC_CLOCK: - * @obj: a #GstAudioBaseSrc - * - * Get the #GstClock of @obj. - */ -#define GST_AUDIO_BASE_SRC_CLOCK(obj) (GST_AUDIO_BASE_SRC (obj)->clock) -/** - * GST_AUDIO_BASE_SRC_PAD: - * @obj: a #GstAudioBaseSrc - * - * Get the source #GstPad of @obj. - */ -#define GST_AUDIO_BASE_SRC_PAD(obj) (GST_BASE_SRC (obj)->srcpad) - -typedef struct _GstAudioBaseSrc GstAudioBaseSrc; -typedef struct _GstAudioBaseSrcClass GstAudioBaseSrcClass; -typedef struct _GstAudioBaseSrcPrivate GstAudioBaseSrcPrivate; - -/** - * GstAudioBaseSrcSlaveMethod: - * @GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE: Resample to match the master clock. - * @GST_AUDIO_BASE_SRC_SLAVE_RETIMESTAMP: Retimestamp output buffers with master - * clock time. - * @GST_AUDIO_BASE_SRC_SLAVE_SKEW: Adjust capture pointer when master clock - * drifts too much. - * @GST_AUDIO_BASE_SRC_SLAVE_NONE: No adjustment is done. - * - * Different possible clock slaving algorithms when the internal audio clock was - * not selected as the pipeline clock. - */ -typedef enum -{ - GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE, - GST_AUDIO_BASE_SRC_SLAVE_RETIMESTAMP, - GST_AUDIO_BASE_SRC_SLAVE_SKEW, - GST_AUDIO_BASE_SRC_SLAVE_NONE -} GstAudioBaseSrcSlaveMethod; - -#define GST_TYPE_AUDIO_BASE_SRC_SLAVE_METHOD (gst_audio_base_src_slave_method_get_type ()) - -/** - * GstAudioBaseSrc: - * - * Opaque #GstAudioBaseSrc. - */ -struct _GstAudioBaseSrc { - GstPushSrc element; - - /*< protected >*/ /* with LOCK */ - /* our ringbuffer */ - GstAudioRingBuffer *ringbuffer; - - /* required buffer and latency */ - GstClockTime buffer_time; - GstClockTime latency_time; - - /* the next sample to write */ - guint64 next_sample; - - /* clock */ - GstClock *clock; - - /*< private >*/ - GstAudioBaseSrcPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioBaseSrcClass: - * @parent_class: the parent class. - * @create_ringbuffer: create and return a #GstAudioRingBuffer to read from. - * - * #GstAudioBaseSrc class. Override the vmethod to implement - * functionality. - */ -struct _GstAudioBaseSrcClass { - GstPushSrcClass parent_class; - - /* subclass ringbuffer allocation */ - GstAudioRingBuffer* (*create_ringbuffer) (GstAudioBaseSrc *src); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_base_src_get_type(void); -GType gst_audio_base_src_slave_method_get_type (void); - -GstAudioRingBuffer * - gst_audio_base_src_create_ringbuffer (GstAudioBaseSrc *src); - -void gst_audio_base_src_set_provide_clock (GstAudioBaseSrc *src, gboolean provide); -gboolean gst_audio_base_src_get_provide_clock (GstAudioBaseSrc *src); - -void gst_audio_base_src_set_slave_method (GstAudioBaseSrc *src, - GstAudioBaseSrcSlaveMethod method); -GstAudioBaseSrcSlaveMethod - gst_audio_base_src_get_slave_method (GstAudioBaseSrc *src); - - -G_END_DECLS - -#endif /* __GST_AUDIO_BASE_SRC_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h deleted file mode 100644 index 88c96287..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiocdsrc.h +++ /dev/null @@ -1,140 +0,0 @@ -/* GStreamer Audio CD Source Base Class - * Copyright (C) 2005 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_CD_SRC_H__ -#define __GST_AUDIO_CD_SRC_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_CD_SRC (gst_audio_cd_src_get_type()) -#define GST_AUDIO_CD_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AUDIO_CD_SRC, GstAudioCdSrc)) -#define GST_AUDIO_CD_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AUDIO_CD_SRC, GstAudioCdSrcClass)) -#define GST_IS_AUDIO_CD_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AUDIO_CD_SRC)) -#define GST_IS_AUDIO_CD_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AUDIO_CD_SRC)) -#define GST_AUDIO_CD_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_CD_SRC, GstAudioCdSrcClass)) - -typedef struct _GstAudioCdSrc GstAudioCdSrc; -typedef struct _GstAudioCdSrcClass GstAudioCdSrcClass; -typedef struct _GstAudioCdSrcTrack GstAudioCdSrcTrack; -typedef struct _GstAudioCdSrcPrivate GstAudioCdSrcPrivate; - -/** - * GstAudioCdSrcMode: - * @GST_AUDIO_CD_SRC_MODE_NORMAL : each single track is a stream - * @GST_AUDIO_CD_SRC_MODE_CONTINUOUS : the entire disc is a single stream - * - * Mode in which the CD audio source operates. Influences timestamping, - * EOS handling and seeking. - */ -typedef enum { - GST_AUDIO_CD_SRC_MODE_NORMAL, /* stream = one track */ - GST_AUDIO_CD_SRC_MODE_CONTINUOUS /* stream = whole disc */ -} GstAudioCdSrcMode; - -#define GST_TYPE_AUDIO_CD_SRC_MODE (gst_audio_cd_src_mode_get_type ()) - -/** - * GstAudioCdSrcTrack: - * @is_audio: Whether this is an audio track - * @num: Track number in TOC (usually starts from 1, but not always) - * @start: The first sector of this track (LBA) - * @end: The last sector of this track (LBA) - * @tags: Track-specific tags (e.g. from cd-text information), or NULL - * - * CD track abstraction to communicate TOC entries to the base class. - * - * This structure is only for use by sub-classed in connection with - * gst_audio_cd_src_add_track(). - * - * Applications will be informed of the available tracks via a TOC message - * on the pipeline's #GstBus instead. - */ -/* FIXME 2.0: remove this struct and pass values directly to _add_track() */ -struct _GstAudioCdSrcTrack { - gboolean is_audio; /* TRUE if this is an audio track */ - guint num; /* real track number (usually starts from 1) */ - guint start; /* first sector of track (LBA, not LSN!) */ - guint end; /* last sector of track (LBA, not LSN!) */ - GstTagList *tags; /* NULL or tags for track (e.g. from cd-text) */ - - /*< private >*/ - guint _gst_reserved1[GST_PADDING/2]; - gpointer _gst_reserved2[GST_PADDING/2]; -}; - -struct _GstAudioCdSrc { - GstPushSrc pushsrc; - - /*< protected >*/ /* for use by sub-classes only */ - GstTagList *tags; /* tags that apply to all tracks */ - - /*< private >*/ - GstAudioCdSrcPrivate *priv; - - /*< private >*/ - guint _gst_reserved1[GST_PADDING/2]; - gpointer _gst_reserved2[GST_PADDING/2]; -}; - -/** - * GstAudioCdSrcClass: - * @pushsrc_class: the parent class - * @open: opening the device - * @close: closing the device - * @read_sector: reading a sector - * @get_default_device: getting the default device - * @probe_devices: probing possible devices - * - * Audio CD source base class. - */ -struct _GstAudioCdSrcClass { - GstPushSrcClass pushsrc_class; - - /* open/close the CD device */ - gboolean (*open) (GstAudioCdSrc *src, const gchar *device); - void (*close) (GstAudioCdSrc *src); - - /* read one sector (LBA) */ - GstBuffer * (*read_sector) (GstAudioCdSrc *src, gint sector); - -#if 0 - /* return default device or NULL (optional) */ - gchar * (*get_default_device) (GstAudioCdSrc *src); - - /* return NULL-terminated string array of CD devices, or NULL (optional) */ - /* FIXME 0.11: reconsider for new probing/device discovery API, remove if in doubt */ - gchar ** (*probe_devices) (GstAudioCdSrc *src); -#endif - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_audio_cd_src_get_type (void); -GType gst_audio_cd_src_mode_get_type (void); - -gboolean gst_audio_cd_src_add_track (GstAudioCdSrc * src, - GstAudioCdSrcTrack * track); - -G_END_DECLS - -#endif /* __GST_AUDIO_CD_SRC_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioclock.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioclock.h deleted file mode 100644 index 57091874..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioclock.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudioclock.h: Clock for use by audio plugins - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_CLOCK_H__ -#define __GST_AUDIO_CLOCK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_CLOCK \ - (gst_audio_clock_get_type()) -#define GST_AUDIO_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_CLOCK,GstAudioClock)) -#define GST_AUDIO_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_CLOCK,GstAudioClockClass)) -#define GST_IS_AUDIO_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_CLOCK)) -#define GST_IS_AUDIO_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_CLOCK)) -#define GST_AUDIO_CLOCK_CAST(obj) \ - ((GstAudioClock*)(obj)) - -typedef struct _GstAudioClock GstAudioClock; -typedef struct _GstAudioClockClass GstAudioClockClass; - -/** - * GstAudioClockGetTimeFunc: - * @clock: the #GstAudioClock - * @user_data: user data - * - * This function will be called whenever the current clock time needs to be - * calculated. If this function returns #GST_CLOCK_TIME_NONE, the last reported - * time will be returned by the clock. - * - * Returns: the current time or #GST_CLOCK_TIME_NONE if the previous time should - * be used. - */ -typedef GstClockTime (*GstAudioClockGetTimeFunc) (GstClock *clock, gpointer user_data); - -/** - * GstAudioClock: - * - * Opaque #GstAudioClock. - */ -struct _GstAudioClock { - GstSystemClock clock; - - /*< protected >*/ - GstAudioClockGetTimeFunc func; - gpointer user_data; - GDestroyNotify destroy_notify; - - /*< private >*/ - GstClockTime last_time; - GstClockTimeDiff time_offset; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstAudioClockClass { - GstSystemClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_clock_get_type (void); -GstClock* gst_audio_clock_new (const gchar *name, GstAudioClockGetTimeFunc func, - gpointer user_data, GDestroyNotify destroy_notify); -void gst_audio_clock_reset (GstAudioClock *clock, GstClockTime time); - -GstClockTime gst_audio_clock_get_time (GstClock * clock); -GstClockTime gst_audio_clock_adjust (GstClock * clock, GstClockTime time); - -void gst_audio_clock_invalidate (GstClock * clock); - -G_END_DECLS - -#endif /* __GST_AUDIO_CLOCK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h deleted file mode 100644 index 27e1fab6..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiodecoder.h +++ /dev/null @@ -1,362 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Igalia S.L. - * Author: Iago Toral Quiroga - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef _GST_AUDIO_DECODER_H_ -#define _GST_AUDIO_DECODER_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_DECODER \ - (gst_audio_decoder_get_type()) -#define GST_AUDIO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_DECODER,GstAudioDecoder)) -#define GST_AUDIO_DECODER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_DECODER,GstAudioDecoderClass)) -#define GST_AUDIO_DECODER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_DECODER,GstAudioDecoderClass)) -#define GST_IS_AUDIO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_DECODER)) -#define GST_IS_AUDIO_DECODER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_DECODER)) -#define GST_AUDIO_DECODER_CAST(obj) \ - ((GstAudioDecoder *)(obj)) - -/** - * GST_AUDIO_DECODER_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_AUDIO_DECODER_SINK_NAME "sink" -/** - * GST_AUDIO_DECODER_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_AUDIO_DECODER_SRC_NAME "src" - -/** - * GST_AUDIO_DECODER_SRC_PAD: - * @obj: base audio codec instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_AUDIO_DECODER_SRC_PAD(obj) (((GstAudioDecoder *) (obj))->srcpad) - -/** - * GST_AUDIO_DECODER_SINK_PAD: - * @obj: base audio codec instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_AUDIO_DECODER_SINK_PAD(obj) (((GstAudioDecoder *) (obj))->sinkpad) - -#define GST_AUDIO_DECODER_STREAM_LOCK(dec) g_rec_mutex_lock (&GST_AUDIO_DECODER (dec)->stream_lock) -#define GST_AUDIO_DECODER_STREAM_UNLOCK(dec) g_rec_mutex_unlock (&GST_AUDIO_DECODER (dec)->stream_lock) - -/** - * GST_AUDIO_DECODER_INPUT_SEGMENT: - * @obj: audio decoder instance - * - * Gives the input segment of the element. - */ -#define GST_AUDIO_DECODER_INPUT_SEGMENT(obj) (GST_AUDIO_DECODER_CAST (obj)->input_segment) - -/** - * GST_AUDIO_DECODER_OUTPUT_SEGMENT: - * @obj: audio decoder instance - * - * Gives the output segment of the element. - */ -#define GST_AUDIO_DECODER_OUTPUT_SEGMENT(obj) (GST_AUDIO_DECODER_CAST (obj)->output_segment) - -typedef struct _GstAudioDecoder GstAudioDecoder; -typedef struct _GstAudioDecoderClass GstAudioDecoderClass; - -typedef struct _GstAudioDecoderPrivate GstAudioDecoderPrivate; - -/* do not use this one, use macro below */ -GstFlowReturn _gst_audio_decoder_error (GstAudioDecoder *dec, gint weight, - GQuark domain, gint code, - gchar *txt, gchar *debug, - const gchar *file, const gchar *function, - gint line); - -/** - * GST_AUDIO_DECODER_ERROR: - * @el: the base audio decoder element that generates the error - * @weight: element defined weight of the error, added to error count - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - * parentheses) - * @debug: debugging information for the message (format string and args - * enclosed in parentheses) - * @ret: variable to receive return value - * - * Utility function that audio decoder elements can use in case they encountered - * a data processing error that may be fatal for the current "data unit" but - * need not prevent subsequent decoding. Such errors are counted and if there - * are too many, as configured in the context's max_errors, the pipeline will - * post an error message and the application will be requested to stop further - * media processing. Otherwise, it is considered a "glitch" and only a warning - * is logged. In either case, @ret is set to the proper value to - * return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK). - */ -#define GST_AUDIO_DECODER_ERROR(el, weight, domain, code, text, debug, ret) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - GstAudioDecoder *dec = GST_AUDIO_DECODER (el); \ - ret = _gst_audio_decoder_error (dec, weight, GST_ ## domain ## _ERROR, \ - GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__, \ - GST_FUNCTION, __LINE__); \ -} G_STMT_END - - -/** - * GST_AUDIO_DECODER_MAX_ERRORS: - * - * Default maximum number of errors tolerated before signaling error. - */ -#define GST_AUDIO_DECODER_MAX_ERRORS 10 - -/** - * GstAudioDecoder: - * - * The opaque #GstAudioDecoder data structure. - */ -struct _GstAudioDecoder -{ - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - /*< private >*/ - GstAudioDecoderPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstAudioDecoderClass: - * @element_class: The parent class structure - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Notifies subclass of incoming data format (caps). - * @parse: Optional. - * Allows chopping incoming data into manageable units (frames) - * for subsequent decoding. This division is at subclass - * discretion and may or may not correspond to 1 (or more) - * frames as defined by audio format. - * @handle_frame: Provides input data (or NULL to clear any remaining data) - * to subclass. Input data ref management is performed by - * base class, subclass should not care or intervene, - * and input data is only valid until next call to base class, - * most notably a call to gst_audio_decoder_finish_frame(). - * @flush: Optional. - * Instructs subclass to clear any codec caches and discard - * any pending samples and not yet returned decoded data. - * @hard indicates whether a FLUSH is being processed, - * or otherwise a DISCONT (or conceptually similar). - * @sink_event: Optional. - * Event handler on the sink pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @src_event: Optional. - * Event handler on the src pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @pre_push: Optional. - * Called just prior to pushing (encoded data) buffer downstream. - * Subclass has full discretionary access to buffer, - * and a not OK flow return will abort downstream pushing. - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @handle_frame (and likely @set_format) needs to be - * overridden. - */ -struct _GstAudioDecoderClass -{ - GstElementClass element_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - gboolean (*start) (GstAudioDecoder *dec); - - gboolean (*stop) (GstAudioDecoder *dec); - - gboolean (*set_format) (GstAudioDecoder *dec, - GstCaps *caps); - - GstFlowReturn (*parse) (GstAudioDecoder *dec, - GstAdapter *adapter, - gint *offset, gint *length); - - GstFlowReturn (*handle_frame) (GstAudioDecoder *dec, - GstBuffer *buffer); - - void (*flush) (GstAudioDecoder *dec, gboolean hard); - - GstFlowReturn (*pre_push) (GstAudioDecoder *dec, - GstBuffer **buffer); - - gboolean (*sink_event) (GstAudioDecoder *dec, - GstEvent *event); - gboolean (*src_event) (GstAudioDecoder *dec, - GstEvent *event); - - gboolean (*open) (GstAudioDecoder *dec); - - gboolean (*close) (GstAudioDecoder *dec); - - gboolean (*negotiate) (GstAudioDecoder *dec); - - gboolean (*decide_allocation) (GstAudioDecoder *dec, GstQuery *query); - - gboolean (*propose_allocation) (GstAudioDecoder *dec, - GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_audio_decoder_get_type (void); - -gboolean gst_audio_decoder_set_output_format (GstAudioDecoder * dec, - const GstAudioInfo * info); - -gboolean gst_audio_decoder_negotiate (GstAudioDecoder * dec); - -GstFlowReturn gst_audio_decoder_finish_frame (GstAudioDecoder * dec, - GstBuffer * buf, gint frames); - -GstBuffer * gst_audio_decoder_allocate_output_buffer (GstAudioDecoder * dec, - gsize size); - -/* context parameters */ -GstAudioInfo * gst_audio_decoder_get_audio_info (GstAudioDecoder * dec); - -void gst_audio_decoder_set_plc_aware (GstAudioDecoder * dec, - gboolean plc); - -gint gst_audio_decoder_get_plc_aware (GstAudioDecoder * dec); - -void gst_audio_decoder_set_estimate_rate (GstAudioDecoder * dec, - gboolean enabled); - -gint gst_audio_decoder_get_estimate_rate (GstAudioDecoder * dec); - -gint gst_audio_decoder_get_delay (GstAudioDecoder * dec); - -void gst_audio_decoder_set_max_errors (GstAudioDecoder * dec, - gint num); - -gint gst_audio_decoder_get_max_errors (GstAudioDecoder * dec); - -void gst_audio_decoder_set_latency (GstAudioDecoder * dec, - GstClockTime min, - GstClockTime max); - -void gst_audio_decoder_get_latency (GstAudioDecoder * dec, - GstClockTime * min, - GstClockTime * max); - -void gst_audio_decoder_get_parse_state (GstAudioDecoder * dec, - gboolean * sync, - gboolean * eos); - - -/* object properties */ -void gst_audio_decoder_set_plc (GstAudioDecoder * dec, - gboolean enabled); - -gboolean gst_audio_decoder_get_plc (GstAudioDecoder * dec); - -void gst_audio_decoder_set_min_latency (GstAudioDecoder * dec, - GstClockTime num); - -GstClockTime gst_audio_decoder_get_min_latency (GstAudioDecoder * dec); - -void gst_audio_decoder_set_tolerance (GstAudioDecoder * dec, - GstClockTime tolerance); - -GstClockTime gst_audio_decoder_get_tolerance (GstAudioDecoder * dec); - -void gst_audio_decoder_set_drainable (GstAudioDecoder * dec, - gboolean enabled); - -gboolean gst_audio_decoder_get_drainable (GstAudioDecoder * dec); - -void gst_audio_decoder_set_needs_format (GstAudioDecoder * dec, - gboolean enabled); - -gboolean gst_audio_decoder_get_needs_format (GstAudioDecoder * dec); - -void gst_audio_decoder_get_allocator (GstAudioDecoder * dec, - GstAllocator ** allocator, - GstAllocationParams * params); - -void gst_audio_decoder_merge_tags (GstAudioDecoder * dec, - const GstTagList * tags, GstTagMergeMode mode); - -G_END_DECLS - -#endif /* _GST_AUDIO_DECODER_H_ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioencoder.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioencoder.h deleted file mode 100644 index e4973aff..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioencoder.h +++ /dev/null @@ -1,311 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_ENCODER_H__ -#define __GST_AUDIO_ENCODER_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_ENCODER (gst_audio_encoder_get_type()) -#define GST_AUDIO_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_ENCODER,GstAudioEncoder)) -#define GST_AUDIO_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_ENCODER,GstAudioEncoderClass)) -#define GST_AUDIO_ENCODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_ENCODER,GstAudioEncoderClass)) -#define GST_IS_AUDIO_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_ENCODER)) -#define GST_IS_AUDIO_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_ENCODER)) -#define GST_AUDIO_ENCODER_CAST(obj) ((GstAudioEncoder *)(obj)) - -/** - * GST_AUDIO_ENCODER_SINK_NAME: - * - * the name of the templates for the sink pad - */ -#define GST_AUDIO_ENCODER_SINK_NAME "sink" -/** - * GST_AUDIO_ENCODER_SRC_NAME: - * - * the name of the templates for the source pad - */ -#define GST_AUDIO_ENCODER_SRC_NAME "src" - -/** - * GST_AUDIO_ENCODER_SRC_PAD: - * @obj: audio encoder instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_AUDIO_ENCODER_SRC_PAD(obj) (GST_AUDIO_ENCODER_CAST (obj)->srcpad) - -/** - * GST_AUDIO_ENCODER_SINK_PAD: - * @obj: audio encoder instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_AUDIO_ENCODER_SINK_PAD(obj) (GST_AUDIO_ENCODER_CAST (obj)->sinkpad) - -/** - * GST_AUDIO_ENCODER_INPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the input segment of the element. - */ -#define GST_AUDIO_ENCODER_INPUT_SEGMENT(obj) (GST_AUDIO_ENCODER_CAST (obj)->input_segment) - -/** - * GST_AUDIO_ENCODER_OUTPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the output segment of the element. - */ -#define GST_AUDIO_ENCODER_OUTPUT_SEGMENT(obj) (GST_AUDIO_ENCODER_CAST (obj)->output_segment) - -#define GST_AUDIO_ENCODER_STREAM_LOCK(enc) g_rec_mutex_lock (&GST_AUDIO_ENCODER (enc)->stream_lock) -#define GST_AUDIO_ENCODER_STREAM_UNLOCK(enc) g_rec_mutex_unlock (&GST_AUDIO_ENCODER (enc)->stream_lock) - -typedef struct _GstAudioEncoder GstAudioEncoder; -typedef struct _GstAudioEncoderClass GstAudioEncoderClass; - -typedef struct _GstAudioEncoderPrivate GstAudioEncoderPrivate; - -/** - * GstAudioEncoder: - * - * The opaque #GstAudioEncoder data structure. - */ -struct _GstAudioEncoder { - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - /*< private >*/ - GstAudioEncoderPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstAudioEncoderClass: - * @element_class: The parent class structure - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Notifies subclass of incoming data format. - * GstAudioInfo contains the format according to provided caps. - * @handle_frame: Provides input samples (or NULL to clear any remaining data) - * according to directions as configured by the subclass - * using the API. Input data ref management is performed - * by base class, subclass should not care or intervene, - * and input data is only valid until next call to base class, - * most notably a call to gst_audio_encoder_finish_frame(). - * @flush: Optional. - * Instructs subclass to clear any codec caches and discard - * any pending samples and not yet returned encoded data. - * @sink_event: Optional. - * Event handler on the sink pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @src_event: Optional. - * Event handler on the src pad. Subclasses should chain up to - * the parent implementation to invoke the default handler. - * @pre_push: Optional. - * Called just prior to pushing (encoded data) buffer downstream. - * Subclass has full discretionary access to buffer, - * and a not OK flow return will abort downstream pushing. - * @getcaps: Optional. - * Allows for a custom sink getcaps implementation (e.g. - * for multichannel input specification). If not implemented, - * default returns gst_audio_encoder_proxy_getcaps - * applied to sink template caps. - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @set_format and @handle_frame needs to be overridden. - */ -struct _GstAudioEncoderClass { - GstElementClass element_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - gboolean (*start) (GstAudioEncoder *enc); - - gboolean (*stop) (GstAudioEncoder *enc); - - gboolean (*set_format) (GstAudioEncoder *enc, - GstAudioInfo *info); - - GstFlowReturn (*handle_frame) (GstAudioEncoder *enc, - GstBuffer *buffer); - - void (*flush) (GstAudioEncoder *enc); - - GstFlowReturn (*pre_push) (GstAudioEncoder *enc, - GstBuffer **buffer); - - gboolean (*sink_event) (GstAudioEncoder *enc, - GstEvent *event); - - gboolean (*src_event) (GstAudioEncoder *enc, - GstEvent *event); - - GstCaps * (*getcaps) (GstAudioEncoder *enc, GstCaps *filter); - - gboolean (*open) (GstAudioEncoder *enc); - - gboolean (*close) (GstAudioEncoder *enc); - - gboolean (*negotiate) (GstAudioEncoder *enc); - - gboolean (*decide_allocation) (GstAudioEncoder *enc, GstQuery *query); - - gboolean (*propose_allocation) (GstAudioEncoder * enc, - GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_audio_encoder_get_type (void); - -GstFlowReturn gst_audio_encoder_finish_frame (GstAudioEncoder * enc, - GstBuffer * buffer, - gint samples); - -GstCaps * gst_audio_encoder_proxy_getcaps (GstAudioEncoder * enc, - GstCaps * caps, - GstCaps * filter); - -gboolean gst_audio_encoder_set_output_format (GstAudioEncoder * enc, - GstCaps * caps); - -gboolean gst_audio_encoder_negotiate (GstAudioEncoder * enc); - -GstBuffer * gst_audio_encoder_allocate_output_buffer (GstAudioEncoder * enc, - gsize size); - -/* context parameters */ -GstAudioInfo * gst_audio_encoder_get_audio_info (GstAudioEncoder * enc); - -gint gst_audio_encoder_get_frame_samples_min (GstAudioEncoder * enc); - -void gst_audio_encoder_set_frame_samples_min (GstAudioEncoder * enc, gint num); - -gint gst_audio_encoder_get_frame_samples_max (GstAudioEncoder * enc); - -void gst_audio_encoder_set_frame_samples_max (GstAudioEncoder * enc, gint num); - -gint gst_audio_encoder_get_frame_max (GstAudioEncoder * enc); - -void gst_audio_encoder_set_frame_max (GstAudioEncoder * enc, gint num); - -gint gst_audio_encoder_get_lookahead (GstAudioEncoder * enc); - -void gst_audio_encoder_set_lookahead (GstAudioEncoder * enc, gint num); - -void gst_audio_encoder_get_latency (GstAudioEncoder * enc, - GstClockTime * min, - GstClockTime * max); - -void gst_audio_encoder_set_latency (GstAudioEncoder * enc, - GstClockTime min, - GstClockTime max); - -void gst_audio_encoder_set_headers (GstAudioEncoder * enc, - GList * headers); - -/* object properties */ - -void gst_audio_encoder_set_mark_granule (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_mark_granule (GstAudioEncoder * enc); - -void gst_audio_encoder_set_perfect_timestamp (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_perfect_timestamp (GstAudioEncoder * enc); - -void gst_audio_encoder_set_hard_resync (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_hard_resync (GstAudioEncoder * enc); - -void gst_audio_encoder_set_tolerance (GstAudioEncoder * enc, - GstClockTime tolerance); - -GstClockTime gst_audio_encoder_get_tolerance (GstAudioEncoder * enc); - -void gst_audio_encoder_set_hard_min (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_hard_min (GstAudioEncoder * enc); - -void gst_audio_encoder_set_drainable (GstAudioEncoder * enc, - gboolean enabled); - -gboolean gst_audio_encoder_get_drainable (GstAudioEncoder * enc); - -void gst_audio_encoder_get_allocator (GstAudioEncoder * enc, - GstAllocator ** allocator, - GstAllocationParams * params); - -void gst_audio_encoder_merge_tags (GstAudioEncoder * enc, - const GstTagList * tags, GstTagMergeMode mode); - -G_END_DECLS - -#endif /* __GST_AUDIO_ENCODER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiofilter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiofilter.h deleted file mode 100644 index 0e5f925a..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiofilter.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_AUDIO_FILTER_H__ -#define __GST_AUDIO_FILTER_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstAudioFilter GstAudioFilter; -typedef struct _GstAudioFilterClass GstAudioFilterClass; - -#define GST_TYPE_AUDIO_FILTER \ - (gst_audio_filter_get_type()) -#define GST_AUDIO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_FILTER,GstAudioFilter)) -#define GST_AUDIO_FILTER_CAST(obj) \ - ((GstAudioFilter *) (obj)) -#define GST_AUDIO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass)) -#define GST_AUDIO_FILTER_CLASS_CAST(klass) \ - ((GstAudioFilterClass *) (klass)) -#define GST_AUDIO_FILTER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass)) -#define GST_IS_AUDIO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_FILTER)) -#define GST_IS_AUDIO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_FILTER)) - -/** - * GstAudioFilter: - * - * Base class for audio filters with the same format for input and output. - */ -struct _GstAudioFilter { - GstBaseTransform basetransform; - - /*< protected >*/ - GstAudioInfo info; /* currently configured format */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_AUDIO_FILTER_INFO(filter) (&GST_AUDIO_FILTER_CAST(filter)->info) - -#define GST_AUDIO_FILTER_FORMAT(filter) (GST_AUDIO_INFO_FORMAT(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_RATE(filter) (GST_AUDIO_INFO_RATE(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_CHANNELS(filter) (GST_AUDIO_INFO_CHANNELS(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_BPF(filter) (GST_AUDIO_INFO_BPF(GST_AUDIO_FILTER_INFO(filter))) -#define GST_AUDIO_FILTER_BPS(filter) (GST_AUDIO_INFO_BPS(GST_AUDIO_FILTER_INFO(filter))) - -/** - * GstAudioFilterClass: - * @basetransformclass: parent class - * @setup: virtual function called whenever the format changes - * - * In addition to the @setup virtual function, you should also override the - * GstBaseTransform::transform and/or GstBaseTransform::transform_ip virtual - * function. - */ - -struct _GstAudioFilterClass { - GstBaseTransformClass basetransformclass; - - /* virtual function, called whenever the format changes */ - gboolean (*setup) (GstAudioFilter * filter, const GstAudioInfo * info); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_filter_get_type (void); - -void gst_audio_filter_class_add_pad_templates (GstAudioFilterClass * klass, - GstCaps * allowed_caps); - -G_END_DECLS - -#endif /* __GST_AUDIO_FILTER_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h deleted file mode 100644 index 1cdc6461..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioiec61937.h +++ /dev/null @@ -1,33 +0,0 @@ -/* GStreamer audio helper functions for IEC 61937 payloading - * (c) 2011 Intel Corporation - * 2011 Collabora Multimedia - * 2011 Arun Raghavan - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_IEC61937_H__ -#define __GST_AUDIO_IEC61937_H__ - -#include - -guint gst_audio_iec61937_frame_size (const GstAudioRingBufferSpec * spec); -gboolean gst_audio_iec61937_payload (const guint8 * src, guint src_n, - guint8 * dst, guint dst_n, - const GstAudioRingBufferSpec * spec, - gint endianness); - -#endif /* __GST_AUDIO_IEC61937_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiometa.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiometa.h deleted file mode 100644 index 822972ba..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiometa.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_META_H__ -#define __GST_AUDIO_META_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_AUDIO_DOWNMIX_META_API_TYPE (gst_audio_downmix_meta_api_get_type()) -#define GST_AUDIO_DOWNMIX_META_INFO (gst_audio_downmix_meta_get_info()) - -typedef struct _GstAudioDownmixMeta GstAudioDownmixMeta; - -/** - * GstAudioDownmixMeta: - * @meta: parent #GstMeta - * @from_position: the channel positions of the source - * @to_position: the channel positions of the destination - * @from_channels: the number of channels of the source - * @to_channels: the number of channels of the destination - * @matrix: the matrix coefficients. - * - * Extra buffer metadata describing audio downmixing matrix. This metadata is - * attached to audio buffers and contains a matrix to downmix the buffer number - * of channels to @channels. - * - * @matrix is an two-dimensional array of @to_channels times @from_channels - * coefficients, i.e. the i-th output channels is constructed by multiplicating - * the input channels with the coefficients in @matrix[i] and taking the sum - * of the results. - */ -struct _GstAudioDownmixMeta { - GstMeta meta; - - GstAudioChannelPosition *from_position; - GstAudioChannelPosition *to_position; - gint from_channels, to_channels; - gfloat **matrix; -}; - -GType gst_audio_downmix_meta_api_get_type (void); -const GstMetaInfo * gst_audio_downmix_meta_get_info (void); - -#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b),GST_AUDIO_DOWNMIX_META_INFO)) -GstAudioDownmixMeta * gst_buffer_get_audio_downmix_meta_for_channels (GstBuffer *buffer, - const GstAudioChannelPosition *to_position, - gint to_channels); - -GstAudioDownmixMeta * gst_buffer_add_audio_downmix_meta (GstBuffer *buffer, - const GstAudioChannelPosition *from_position, - gint from_channels, - const GstAudioChannelPosition *to_position, - gint to_channels, - const gfloat **matrix); - -G_END_DECLS - -#endif /* __GST_AUDIO_META_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h deleted file mode 100644 index e578aea8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudioringbuffer.h +++ /dev/null @@ -1,333 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudioringbuffer.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_RING_BUFFER_H__ -#define __GST_AUDIO_RING_BUFFER_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_RING_BUFFER (gst_audio_ring_buffer_get_type()) -#define GST_AUDIO_RING_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBuffer)) -#define GST_AUDIO_RING_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBufferClass)) -#define GST_AUDIO_RING_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_RING_BUFFER, GstAudioRingBufferClass)) -#define GST_AUDIO_RING_BUFFER_CAST(obj) ((GstAudioRingBuffer *)obj) -#define GST_IS_AUDIO_RING_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_RING_BUFFER)) -#define GST_IS_AUDIO_RING_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_RING_BUFFER)) - -typedef struct _GstAudioRingBuffer GstAudioRingBuffer; -typedef struct _GstAudioRingBufferClass GstAudioRingBufferClass; -typedef struct _GstAudioRingBufferSpec GstAudioRingBufferSpec; - -/** - * GstAudioRingBufferCallback: - * @rbuf: a #GstAudioRingBuffer - * @data: (array length=len): target to fill - * @len: amount to fill - * @user_data: user data - * - * This function is set with gst_audio_ring_buffer_set_callback() and is - * called to fill the memory at @data with @len bytes of samples. - */ -typedef void (*GstAudioRingBufferCallback) (GstAudioRingBuffer *rbuf, guint8* data, guint len, gpointer user_data); - -/** - * GstAudioRingBufferState: - * @GST_AUDIO_RING_BUFFER_STATE_STOPPED: The ringbuffer is stopped - * @GST_AUDIO_RING_BUFFER_STATE_PAUSED: The ringbuffer is paused - * @GST_AUDIO_RING_BUFFER_STATE_STARTED: The ringbuffer is started - * - * The state of the ringbuffer. - */ -typedef enum { - GST_AUDIO_RING_BUFFER_STATE_STOPPED, - GST_AUDIO_RING_BUFFER_STATE_PAUSED, - GST_AUDIO_RING_BUFFER_STATE_STARTED -} GstAudioRingBufferState; - -/** - * GstAudioRingBufferFormatType: - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW: samples in linear or float - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW: samples in mulaw - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW: samples in alaw - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IMA_ADPCM: samples in ima adpcm - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG: samples in mpeg audio (but not AAC) format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_GSM: samples in gsm format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958: samples in IEC958 frames (e.g. AC3) - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3: samples in AC3 format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3: samples in EAC3 format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS: samples in DTS format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC: samples in MPEG-2 AAC format - * @GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC: samples in MPEG-4 AAC format - * - * The format of the samples in the ringbuffer. - */ -typedef enum -{ - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IMA_ADPCM, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_GSM, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC, - GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC -} GstAudioRingBufferFormatType; - -/** - * GstAudioRingBufferSpec: - * @caps: The caps that generated the Spec. - * @type: the sample type - * @info: the #GstAudioInfo - * @latency_time: the latency in microseconds - * @buffer_time: the total buffer size in microseconds - * @segsize: the size of one segment in bytes - * @segtotal: the total number of segments - * @seglatency: number of segments queued in the lower level device, - * defaults to segtotal - * - * The structure containing the format specification of the ringbuffer. - */ -struct _GstAudioRingBufferSpec -{ - /*< public >*/ - /* in */ - GstCaps *caps; /* the caps of the buffer */ - - /* in/out */ - GstAudioRingBufferFormatType type; - GstAudioInfo info; - - - guint64 latency_time; /* the required/actual latency time, this is the - * actual the size of one segment and the - * minimum possible latency we can achieve. */ - guint64 buffer_time; /* the required/actual time of the buffer, this is - * the total size of the buffer and maximum - * latency we can compensate for. */ - gint segsize; /* size of one buffer segment in bytes, this value - * should be chosen to match latency_time as - * well as possible. */ - gint segtotal; /* total number of segments, this value is the - * number of segments of @segsize and should be - * chosen so that it matches buffer_time as - * close as possible. */ - /* ABI added 0.10.20 */ - gint seglatency; /* number of segments queued in the lower - * level device, defaults to segtotal. */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_AUDIO_RING_BUFFER_GET_COND(buf) (&(((GstAudioRingBuffer *)buf)->cond)) -#define GST_AUDIO_RING_BUFFER_WAIT(buf) (g_cond_wait (GST_AUDIO_RING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf))) -#define GST_AUDIO_RING_BUFFER_SIGNAL(buf) (g_cond_signal (GST_AUDIO_RING_BUFFER_GET_COND (buf))) -#define GST_AUDIO_RING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_AUDIO_RING_BUFFER_GET_COND (buf))) - -/** - * GstAudioRingBuffer: - * @cond: used to signal start/stop/pause/resume actions - * @open: boolean indicating that the ringbuffer is open - * @acquired: boolean indicating that the ringbuffer is acquired - * @memory: data in the ringbuffer - * @size: size of data in the ringbuffer - * @spec: format and layout of the ringbuffer data - * @samples_per_seg: number of samples in one segment - * @empty_seg: pointer to memory holding one segment of silence samples - * @state: state of the buffer - * @segdone: readpointer in the ringbuffer - * @segbase: segment corresponding to segment 0 (unused) - * @waiting: is a reader or writer waiting for a free segment - * - * The ringbuffer base class structure. - */ -struct _GstAudioRingBuffer { - GstObject object; - - /*< public >*/ /* with LOCK */ - GCond cond; - gboolean open; - gboolean acquired; - guint8 *memory; - gsize size; - GstClockTime *timestamps; - GstAudioRingBufferSpec spec; - gint samples_per_seg; - guint8 *empty_seg; - - /*< public >*/ /* ATOMIC */ - gint state; - gint segdone; - gint segbase; - gint waiting; - - /*< private >*/ - GstAudioRingBufferCallback callback; - gpointer cb_data; - - gboolean need_reorder; - /* gst[channel_reorder_map[i]] = device[i] */ - gint channel_reorder_map[64]; - - gboolean flushing; - /* ATOMIC */ - gint may_start; - gboolean active; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioRingBufferClass: - * @parent_class: parent class - * @open_device: open the device, don't set any params or allocate anything - * @acquire: allocate the resources for the ringbuffer using the given spec - * @release: free resources of the ringbuffer - * @close_device: close the device - * @start: start processing of samples - * @pause: pause processing of samples - * @resume: resume processing of samples after pause - * @stop: stop processing of samples - * @delay: get number of samples queued in device - * @activate: activate the thread that starts pulling and monitoring the - * consumed segments in the device. - * @commit: write samples into the ringbuffer - * @clear_all: clear the entire ringbuffer. - * - * The vmethods that subclasses can override to implement the ringbuffer. - */ -struct _GstAudioRingBufferClass { - GstObjectClass parent_class; - - /*< public >*/ - gboolean (*open_device) (GstAudioRingBuffer *buf); - gboolean (*acquire) (GstAudioRingBuffer *buf, GstAudioRingBufferSpec *spec); - gboolean (*release) (GstAudioRingBuffer *buf); - gboolean (*close_device) (GstAudioRingBuffer *buf); - - gboolean (*start) (GstAudioRingBuffer *buf); - gboolean (*pause) (GstAudioRingBuffer *buf); - gboolean (*resume) (GstAudioRingBuffer *buf); - gboolean (*stop) (GstAudioRingBuffer *buf); - - guint (*delay) (GstAudioRingBuffer *buf); - - /* ABI added */ - gboolean (*activate) (GstAudioRingBuffer *buf, gboolean active); - - guint (*commit) (GstAudioRingBuffer * buf, guint64 *sample, - guint8 * data, gint in_samples, - gint out_samples, gint * accum); - - void (*clear_all) (GstAudioRingBuffer * buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_ring_buffer_get_type(void); - -/* callback stuff */ -void gst_audio_ring_buffer_set_callback (GstAudioRingBuffer *buf, - GstAudioRingBufferCallback cb, - gpointer user_data); - -gboolean gst_audio_ring_buffer_parse_caps (GstAudioRingBufferSpec *spec, GstCaps *caps); -void gst_audio_ring_buffer_debug_spec_caps (GstAudioRingBufferSpec *spec); -void gst_audio_ring_buffer_debug_spec_buff (GstAudioRingBufferSpec *spec); - -gboolean gst_audio_ring_buffer_convert (GstAudioRingBuffer * buf, GstFormat src_fmt, - gint64 src_val, GstFormat dest_fmt, - gint64 * dest_val); - -/* device state */ -gboolean gst_audio_ring_buffer_open_device (GstAudioRingBuffer *buf); -gboolean gst_audio_ring_buffer_close_device (GstAudioRingBuffer *buf); - -gboolean gst_audio_ring_buffer_device_is_open (GstAudioRingBuffer *buf); - -/* allocate resources */ -gboolean gst_audio_ring_buffer_acquire (GstAudioRingBuffer *buf, GstAudioRingBufferSpec *spec); -gboolean gst_audio_ring_buffer_release (GstAudioRingBuffer *buf); - -gboolean gst_audio_ring_buffer_is_acquired (GstAudioRingBuffer *buf); - -/* set the device channel positions */ -void gst_audio_ring_buffer_set_channel_positions (GstAudioRingBuffer *buf, const GstAudioChannelPosition *position); - -/* activating */ -gboolean gst_audio_ring_buffer_activate (GstAudioRingBuffer *buf, gboolean active); -gboolean gst_audio_ring_buffer_is_active (GstAudioRingBuffer *buf); - -/* flushing */ -void gst_audio_ring_buffer_set_flushing (GstAudioRingBuffer *buf, gboolean flushing); -gboolean gst_audio_ring_buffer_is_flushing (GstAudioRingBuffer *buf); - -/* playback/pause */ -gboolean gst_audio_ring_buffer_start (GstAudioRingBuffer *buf); -gboolean gst_audio_ring_buffer_pause (GstAudioRingBuffer *buf); -gboolean gst_audio_ring_buffer_stop (GstAudioRingBuffer *buf); - -/* get status */ -guint gst_audio_ring_buffer_delay (GstAudioRingBuffer *buf); -guint64 gst_audio_ring_buffer_samples_done (GstAudioRingBuffer *buf); - -void gst_audio_ring_buffer_set_sample (GstAudioRingBuffer *buf, guint64 sample); - -/* clear all segments */ -void gst_audio_ring_buffer_clear_all (GstAudioRingBuffer *buf); - -/* commit samples */ -guint gst_audio_ring_buffer_commit (GstAudioRingBuffer * buf, guint64 *sample, - guint8 * data, gint in_samples, - gint out_samples, gint * accum); - -/* read samples */ -guint gst_audio_ring_buffer_read (GstAudioRingBuffer *buf, guint64 sample, - guint8 *data, guint len, GstClockTime *timestamp); - -/* Set timestamp on buffer */ -void gst_audio_ring_buffer_set_timestamp (GstAudioRingBuffer * buf, gint readseg, GstClockTime - timestamp); - -/* mostly protected */ -/* not yet implemented -gboolean gst_audio_ring_buffer_prepare_write (GstAudioRingBuffer *buf, gint *segment, guint8 **writeptr, gint *len); -*/ -gboolean gst_audio_ring_buffer_prepare_read (GstAudioRingBuffer *buf, gint *segment, - guint8 **readptr, gint *len); -void gst_audio_ring_buffer_clear (GstAudioRingBuffer *buf, gint segment); -void gst_audio_ring_buffer_advance (GstAudioRingBuffer *buf, guint advance); - -void gst_audio_ring_buffer_may_start (GstAudioRingBuffer *buf, gboolean allowed); - -G_END_DECLS - -#endif /* __GST_AUDIO_RING_BUFFER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosink.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosink.h deleted file mode 100644 index f6fac610..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosink.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiosink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_SINK_H__ -#define __GST_AUDIO_SINK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_SINK (gst_audio_sink_get_type()) -#define GST_AUDIO_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_SINK,GstAudioSink)) -#define GST_AUDIO_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_SINK,GstAudioSinkClass)) -#define GST_AUDIO_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_SINK,GstAudioSinkClass)) -#define GST_IS_AUDIO_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_SINK)) -#define GST_IS_AUDIO_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_SINK)) - -typedef struct _GstAudioSink GstAudioSink; -typedef struct _GstAudioSinkClass GstAudioSinkClass; - -/** - * GstAudioSink: - * - * Opaque #GstAudioSink. - */ -struct _GstAudioSink { - GstAudioBaseSink element; - - /*< private >*/ /* with LOCK */ - GThread *thread; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioSinkClass: - * @parent_class: the parent class structure. - * @open: Open the device. No configuration needs to be done at this point. - * This function is also used to check if the device is available. - * @prepare: Prepare the device to operate with the specified parameters. - * @unprepare: Undo operations done in prepare. - * @close: Close the device. - * @write: Write data to the device. - * @delay: Return how many samples are still in the device. This is used to - * drive the synchronisation. - * @reset: Returns as quickly as possible from a write and flush any pending - * samples from the device. - * - * #GstAudioSink class. Override the vmethods to implement functionality. - */ -struct _GstAudioSinkClass { - GstAudioBaseSinkClass parent_class; - - /* vtable */ - - /* open the device with given specs */ - gboolean (*open) (GstAudioSink *sink); - /* prepare resources and state to operate with the given specs */ - gboolean (*prepare) (GstAudioSink *sink, GstAudioRingBufferSpec *spec); - /* undo anything that was done in prepare() */ - gboolean (*unprepare) (GstAudioSink *sink); - /* close the device */ - gboolean (*close) (GstAudioSink *sink); - /* write samples to the device */ - gint (*write) (GstAudioSink *sink, gpointer data, guint length); - /* get number of samples queued in the device */ - guint (*delay) (GstAudioSink *sink); - /* reset the audio device, unblock from a write */ - void (*reset) (GstAudioSink *sink); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_sink_get_type(void); - -G_END_DECLS - -#endif /* __GST_AUDIO_SINK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosrc.h deleted file mode 100644 index 47e68274..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/gstaudiosrc.h +++ /dev/null @@ -1,99 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstaudiosrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_AUDIO_SRC_H__ -#define __GST_AUDIO_SRC_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_AUDIO_SRC (gst_audio_src_get_type()) -#define GST_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_SRC,GstAudioSrc)) -#define GST_AUDIO_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_SRC,GstAudioSrcClass)) -#define GST_AUDIO_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_SRC,GstAudioSrcClass)) -#define GST_IS_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_SRC)) -#define GST_IS_AUDIO_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_SRC)) - -typedef struct _GstAudioSrc GstAudioSrc; -typedef struct _GstAudioSrcClass GstAudioSrcClass; - -/** - * GstAudioSrc: - * - * Base class for simple audio sources. - */ -struct _GstAudioSrc { - GstAudioBaseSrc element; - - /*< private >*/ /* with LOCK */ - GThread *thread; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAudioSrcClass: - * @parent_class: the parent class. - * @open: open the device with the specified caps - * @prepare: configure device with format - * @unprepare: undo the configuration - * @close: close the device - * @read: read samples to the audio device - * @delay: the number of samples queued in the device - * @reset: unblock a read to the device and reset. - * - * #GstAudioSrc class. Override the vmethod to implement - * functionality. - */ -struct _GstAudioSrcClass { - GstAudioBaseSrcClass parent_class; - - /* vtable */ - - /* open the device with given specs */ - gboolean (*open) (GstAudioSrc *src); - /* prepare resources and state to operate with the given specs */ - gboolean (*prepare) (GstAudioSrc *src, GstAudioRingBufferSpec *spec); - /* undo anything that was done in prepare() */ - gboolean (*unprepare) (GstAudioSrc *src); - /* close the device */ - gboolean (*close) (GstAudioSrc *src); - /* read samples from the device */ - guint (*read) (GstAudioSrc *src, gpointer data, guint length, - GstClockTime *timestamp); - /* get number of samples queued in the device */ - guint (*delay) (GstAudioSrc *src); - /* reset the audio device, unblock from a write */ - void (*reset) (GstAudioSrc *src); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_audio_src_get_type(void); - -G_END_DECLS - -#endif /* __GST_AUDIO_SRC_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/streamvolume.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/streamvolume.h deleted file mode 100644 index 8dfdc16d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/audio/streamvolume.h +++ /dev/null @@ -1,82 +0,0 @@ -/* GStreamer StreamVolume - * Copyright (C) 2009 Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_STREAM_VOLUME_H__ -#define __GST_STREAM_VOLUME_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_STREAM_VOLUME \ - (gst_stream_volume_get_type ()) -#define GST_STREAM_VOLUME(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM_VOLUME, GstStreamVolume)) -#define GST_STREAM_VOLUME_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_CAST ((iface), GST_TYPE_STREAM_VOLUME, GstStreamVolumeInterface)) -#define GST_IS_STREAM_VOLUME(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM_VOLUME)) -#define GST_IS_STREAM_VOLUME_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_TYPE ((iface), GST_TYPE_STREAM_VOLUME)) -#define GST_STREAM_VOLUME_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_STREAM_VOLUME, GstStreamVolumeInterface)) - -typedef struct _GstStreamVolume GstStreamVolume; -typedef struct _GstStreamVolumeInterface GstStreamVolumeInterface; - -struct _GstStreamVolumeInterface { - GTypeInterface iface; -}; - -/** - * GstStreamVolumeFormat: - * @GST_STREAM_VOLUME_FORMAT_LINEAR: Linear scale factor, 1.0 = 100% - * @GST_STREAM_VOLUME_FORMAT_CUBIC: Cubic volume scale - * @GST_STREAM_VOLUME_FORMAT_DB: Logarithmic volume scale (dB, amplitude not power) - * - * Different representations of a stream volume. gst_stream_volume_convert_volume() - * allows to convert between the different representations. - * - * Formulas to convert from a linear to a cubic or dB volume are - * cbrt(val) and 20 * log10 (val). - */ -typedef enum { - GST_STREAM_VOLUME_FORMAT_LINEAR = 0, - GST_STREAM_VOLUME_FORMAT_CUBIC, - GST_STREAM_VOLUME_FORMAT_DB -} GstStreamVolumeFormat; - -GType gst_stream_volume_get_type (void); -void gst_stream_volume_set_volume (GstStreamVolume *volume, - GstStreamVolumeFormat format, - gdouble val); -gdouble gst_stream_volume_get_volume (GstStreamVolume *volume, - GstStreamVolumeFormat format); - -void gst_stream_volume_set_mute (GstStreamVolume *volume, - gboolean mute); -gboolean gst_stream_volume_get_mute (GstStreamVolume *volume); - -gdouble gst_stream_volume_convert_volume (GstStreamVolumeFormat from, - GstStreamVolumeFormat to, - gdouble val) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __GST_STREAM_VOLUME_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstadapter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstadapter.h deleted file mode 100644 index 5b897443..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstadapter.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Benjamin Otte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#ifndef __GST_ADAPTER_H__ -#define __GST_ADAPTER_H__ - -G_BEGIN_DECLS - - -#define GST_TYPE_ADAPTER \ - (gst_adapter_get_type()) -#define GST_ADAPTER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_ADAPTER, GstAdapter)) -#define GST_ADAPTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_ADAPTER, GstAdapterClass)) -#define GST_ADAPTER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ADAPTER, GstAdapterClass)) -#define GST_IS_ADAPTER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_ADAPTER)) -#define GST_IS_ADAPTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_ADAPTER)) - -/** - * GstAdapter: - * - * The opaque #GstAdapter data structure. - */ -typedef struct _GstAdapter GstAdapter; -typedef struct _GstAdapterClass GstAdapterClass; - -GType gst_adapter_get_type (void); - -GstAdapter * gst_adapter_new (void) G_GNUC_MALLOC; - -void gst_adapter_clear (GstAdapter *adapter); -void gst_adapter_push (GstAdapter *adapter, GstBuffer* buf); -gconstpointer gst_adapter_map (GstAdapter *adapter, gsize size); -void gst_adapter_unmap (GstAdapter *adapter); -void gst_adapter_copy (GstAdapter *adapter, gpointer dest, - gsize offset, gsize size); -void gst_adapter_flush (GstAdapter *adapter, gsize flush); -gpointer gst_adapter_take (GstAdapter *adapter, gsize nbytes); -GstBuffer* gst_adapter_take_buffer (GstAdapter *adapter, gsize nbytes); -GList* gst_adapter_take_list (GstAdapter *adapter, gsize nbytes); -gsize gst_adapter_available (GstAdapter *adapter); -gsize gst_adapter_available_fast (GstAdapter *adapter); - -GstClockTime gst_adapter_prev_pts (GstAdapter *adapter, guint64 *distance); -GstClockTime gst_adapter_prev_dts (GstAdapter *adapter, guint64 *distance); - -gsize gst_adapter_masked_scan_uint32 (GstAdapter * adapter, guint32 mask, - guint32 pattern, gsize offset, gsize size); - -gsize gst_adapter_masked_scan_uint32_peek (GstAdapter * adapter, guint32 mask, - guint32 pattern, gsize offset, gsize size, guint32 * value); - -G_END_DECLS - -#endif /* __GST_ADAPTER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbaseparse.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbaseparse.h deleted file mode 100644 index d0a1be46..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbaseparse.h +++ /dev/null @@ -1,329 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Nokia Corporation. All rights reserved. - * - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_PARSE_H__ -#define __GST_BASE_PARSE_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BASE_PARSE (gst_base_parse_get_type()) -#define GST_BASE_PARSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_PARSE,GstBaseParse)) -#define GST_BASE_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_PARSE,GstBaseParseClass)) -#define GST_BASE_PARSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_BASE_PARSE,GstBaseParseClass)) -#define GST_IS_BASE_PARSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_PARSE)) -#define GST_IS_BASE_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_PARSE)) -#define GST_BASE_PARSE_CAST(obj) ((GstBaseParse *)(obj)) - -/** - * GST_BASE_PARSE_SRC_PAD: - * @obj: base parse instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_BASE_PARSE_SRC_PAD(obj) (GST_BASE_PARSE_CAST (obj)->srcpad) - -/** - * GST_BASE_PARSE_SINK_PAD: - * @obj: base parse instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_BASE_PARSE_SINK_PAD(obj) (GST_BASE_PARSE_CAST (obj)->sinkpad) - -/** - * GST_BASE_PARSE_FLOW_DROPPED: - * - * A #GstFlowReturn that can be returned from parse_frame to - * indicate that no output buffer was generated, or from pre_push_frame to - * to forego pushing buffer. - */ -#define GST_BASE_PARSE_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS - -/* not public API, use accessor macros below */ -#define GST_BASE_PARSE_FLAG_LOST_SYNC (1 << 0) -#define GST_BASE_PARSE_FLAG_DRAINING (1 << 1) - -/** - * GST_BASE_PARSE_LOST_SYNC: - * @parse: base parse instance - * - * Obtains current sync status. - */ -#define GST_BASE_PARSE_LOST_SYNC(parse) (!!(GST_BASE_PARSE_CAST(parse)->flags & GST_BASE_PARSE_FLAG_LOST_SYNC)) - -/** - * GST_BASE_PARSE_DRAINING: - * @parse: base parse instance - * - * Obtains current drain status (ie. whether EOS has been received and - * the parser is now processing the frames at the end of the stream) - */ -#define GST_BASE_PARSE_DRAINING(parse) (!!(GST_BASE_PARSE_CAST(parse)->flags & GST_BASE_PARSE_FLAG_DRAINING)) - -/** - * GstBaseParseFrameFlags: - * @GST_BASE_PARSE_FRAME_FLAG_NONE: no flag - * @GST_BASE_PARSE_FRAME_FLAG_NEW_FRAME: set by baseclass if current frame - * is passed for processing to the subclass for the first time - * (and not set on subsequent calls with same data). - * @GST_BASE_PARSE_FRAME_FLAG_NO_FRAME: set to indicate this buffer should not be - * counted as frame, e.g. if this frame is dependent on a previous one. - * As it is not counted as a frame, bitrate increases but frame to time - * conversions are maintained. - * @GST_BASE_PARSE_FRAME_FLAG_CLIP: @pre_push_frame can set this to indicate - * that regular segment clipping can still be performed (as opposed to - * any custom one having been done). - * @GST_BASE_PARSE_FRAME_FLAG_DROP: indicates to @finish_frame that the - * the frame should be dropped (and might be handled internall by subclass) - * @GST_BASE_PARSE_FRAME_FLAG_QUEUE: indicates to @finish_frame that the - * the frame should be queued for now and processed fully later - * when the first non-queued frame is finished - * - * Flags to be used in a #GstBaseParseFrame. - */ -typedef enum { - GST_BASE_PARSE_FRAME_FLAG_NONE = 0, - GST_BASE_PARSE_FRAME_FLAG_NEW_FRAME = (1 << 0), - GST_BASE_PARSE_FRAME_FLAG_NO_FRAME = (1 << 1), - GST_BASE_PARSE_FRAME_FLAG_CLIP = (1 << 2), - GST_BASE_PARSE_FRAME_FLAG_DROP = (1 << 3), - GST_BASE_PARSE_FRAME_FLAG_QUEUE = (1 << 4) -} GstBaseParseFrameFlags; - -/** - * GstBaseParseFrame: - * @buffer: input data to be parsed for frames. - * @out_buffer: (optional) (replacement) output data. - * @offset: media specific offset of input frame - * Note that a converter may have a different one on the frame's buffer. - * @overhead: subclass can set this to indicates the metadata overhead - * for the given frame, which is then used to enable more accurate bitrate - * computations. If this is -1, it is assumed that this frame should be - * skipped in bitrate calculation. - * @flags: a combination of input and output #GstBaseParseFrameFlags that - * convey additional context to subclass or allow subclass to tune - * subsequent #GstBaseParse actions. - * - * Frame (context) data passed to each frame parsing virtual methods. In - * addition to providing the data to be checked for a valid frame or an already - * identified frame, it conveys additional metadata or control information - * from and to the subclass w.r.t. the particular frame in question (rather - * than global parameters). Some of these may apply to each parsing stage, others - * only to some a particular one. These parameters are effectively zeroed at start - * of each frame's processing, i.e. parsing virtual method invocation sequence. - */ -typedef struct { - GstBuffer * buffer; - GstBuffer * out_buffer; - guint flags; - guint64 offset; - gint overhead; - /*< private >*/ - gint size; - guint _gst_reserved_i[2]; - gpointer _gst_reserved_p[2]; - guint _private_flags; -} GstBaseParseFrame; - -typedef struct _GstBaseParse GstBaseParse; -typedef struct _GstBaseParseClass GstBaseParseClass; -typedef struct _GstBaseParsePrivate GstBaseParsePrivate; - -/** - * GstBaseParse: - * @element: the parent element. - * - * The opaque #GstBaseParse data structure. - */ -struct _GstBaseParse { - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - guint flags; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment segment; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; - GstBaseParsePrivate *priv; -}; - -/** - * GstBaseParseClass: - * @parent_class: the parent class - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_sink_caps: allows the subclass to be notified of the actual caps set. - * @get_sink_caps: allows the subclass to do its own sink get caps if needed. - * @handle_frame: Parses the input data into valid frames as defined by subclass - * which should be passed to gst_base_parse_finish_frame(). - * The frame's input buffer is guaranteed writable, - * whereas the input frame ownership is held by caller - * (so subclass should make a copy if it needs to hang on). - * Input buffer (data) is provided by baseclass with as much - * metadata set as possible by baseclass according to upstream - * information and/or subclass settings, - * though subclass may still set buffer timestamp and duration - * if desired. - * @convert: Optional. - * Convert between formats. - * @sink_event: Optional. - * Event handler on the sink pad. This function should chain - * up to the parent implementation to let the default handler - * run. - * @src_event: Optional. - * Event handler on the source pad. Should chain up to the - * parent to let the default handler run. - * @pre_push_frame: Optional. - * Called just prior to pushing a frame (after any pending - * events have been sent) to give subclass a chance to perform - * additional actions at this time (e.g. tag sending) or to - * decide whether this buffer should be dropped or not - * (e.g. custom segment clipping). - * @detect: Optional. - * Called until it doesn't return GST_FLOW_OK anymore for - * the first buffers. Can be used by the subclass to detect - * the stream format. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @check_valid_frame and @parse_frame needs to be - * overridden. - */ -struct _GstBaseParseClass { - GstElementClass parent_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - gboolean (*start) (GstBaseParse * parse); - - gboolean (*stop) (GstBaseParse * parse); - - gboolean (*set_sink_caps) (GstBaseParse * parse, - GstCaps * caps); - - GstFlowReturn (*handle_frame) (GstBaseParse * parse, - GstBaseParseFrame * frame, - gint * skipsize); - - GstFlowReturn (*pre_push_frame) (GstBaseParse * parse, - GstBaseParseFrame * frame); - - gboolean (*convert) (GstBaseParse * parse, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 * dest_value); - - gboolean (*sink_event) (GstBaseParse * parse, - GstEvent * event); - - gboolean (*src_event) (GstBaseParse * parse, - GstEvent * event); - - GstCaps * (*get_sink_caps) (GstBaseParse * parse, - GstCaps * filter); - - GstFlowReturn (*detect) (GstBaseParse * parse, - GstBuffer * buffer); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_parse_get_type (void); - -GType gst_base_parse_frame_get_type (void); - -GstBaseParseFrame * gst_base_parse_frame_new (GstBuffer * buffer, - GstBaseParseFrameFlags flags, - gint overhead); - -void gst_base_parse_frame_init (GstBaseParseFrame * frame); - -void gst_base_parse_frame_free (GstBaseParseFrame * frame); - -GstFlowReturn gst_base_parse_push_frame (GstBaseParse * parse, - GstBaseParseFrame * frame); - -GstFlowReturn gst_base_parse_finish_frame (GstBaseParse * parse, - GstBaseParseFrame * frame, - gint size); - -void gst_base_parse_set_duration (GstBaseParse * parse, - GstFormat fmt, - gint64 duration, - gint interval); - -void gst_base_parse_set_average_bitrate (GstBaseParse * parse, - guint bitrate); - -void gst_base_parse_set_min_frame_size (GstBaseParse * parse, - guint min_size); - -void gst_base_parse_set_has_timing_info (GstBaseParse * parse, - gboolean has_timing); - -void gst_base_parse_set_syncable (GstBaseParse * parse, - gboolean syncable); - -void gst_base_parse_set_passthrough (GstBaseParse * parse, - gboolean passthrough); - -void gst_base_parse_set_pts_interpolation (GstBaseParse * parse, - gboolean pts_interpolate); - -void gst_base_parse_set_frame_rate (GstBaseParse * parse, - guint fps_num, - guint fps_den, - guint lead_in, - guint lead_out); - -void gst_base_parse_set_latency (GstBaseParse * parse, - GstClockTime min_latency, - GstClockTime max_latency); - -gboolean gst_base_parse_convert_default (GstBaseParse * parse, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 * dest_value); - -gboolean gst_base_parse_add_index_entry (GstBaseParse * parse, - guint64 offset, - GstClockTime ts, - gboolean key, - gboolean force); - -G_END_DECLS - -#endif /* __GST_BASE_PARSE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesink.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesink.h deleted file mode 100644 index e4bb7350..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesink.h +++ /dev/null @@ -1,255 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstbasesink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_SINK_H__ -#define __GST_BASE_SINK_H__ - -#include - -G_BEGIN_DECLS - - -#define GST_TYPE_BASE_SINK (gst_base_sink_get_type()) -#define GST_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_SINK,GstBaseSink)) -#define GST_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_SINK,GstBaseSinkClass)) -#define GST_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SINK, GstBaseSinkClass)) -#define GST_IS_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_SINK)) -#define GST_IS_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_SINK)) -#define GST_BASE_SINK_CAST(obj) ((GstBaseSink *) (obj)) - -/** - * GST_BASE_SINK_PAD: - * @obj: base sink instance - * - * Gives the pointer to the #GstPad object of the element. - */ -#define GST_BASE_SINK_PAD(obj) (GST_BASE_SINK_CAST (obj)->sinkpad) - -#define GST_BASE_SINK_GET_PREROLL_LOCK(pad) (&GST_BASE_SINK_CAST(pad)->preroll_lock) -#define GST_BASE_SINK_PREROLL_LOCK(pad) (g_mutex_lock(GST_BASE_SINK_GET_PREROLL_LOCK(pad))) -#define GST_BASE_SINK_PREROLL_TRYLOCK(pad) (g_mutex_trylock(GST_BASE_SINK_GET_PREROLL_LOCK(pad))) -#define GST_BASE_SINK_PREROLL_UNLOCK(pad) (g_mutex_unlock(GST_BASE_SINK_GET_PREROLL_LOCK(pad))) - -#define GST_BASE_SINK_GET_PREROLL_COND(pad) (&GST_BASE_SINK_CAST(pad)->preroll_cond) -#define GST_BASE_SINK_PREROLL_WAIT(pad) \ - g_cond_wait (GST_BASE_SINK_GET_PREROLL_COND (pad), GST_BASE_SINK_GET_PREROLL_LOCK (pad)) -#define GST_BASE_SINK_PREROLL_WAIT_UNTIL(pad, end_time) \ - g_cond_wait_until (GST_BASE_SINK_GET_PREROLL_COND (pad), GST_BASE_SINK_GET_PREROLL_LOCK (pad), end_time) -#define GST_BASE_SINK_PREROLL_SIGNAL(pad) g_cond_signal (GST_BASE_SINK_GET_PREROLL_COND (pad)); -#define GST_BASE_SINK_PREROLL_BROADCAST(pad) g_cond_broadcast (GST_BASE_SINK_GET_PREROLL_COND (pad)); - -typedef struct _GstBaseSink GstBaseSink; -typedef struct _GstBaseSinkClass GstBaseSinkClass; -typedef struct _GstBaseSinkPrivate GstBaseSinkPrivate; - -/** - * GstBaseSink: - * - * The opaque #GstBaseSink data structure. - */ -struct _GstBaseSink { - GstElement element; - - /*< protected >*/ - GstPad *sinkpad; - GstPadMode pad_mode; - - /*< protected >*/ /* with LOCK */ - guint64 offset; - gboolean can_activate_pull; - gboolean can_activate_push; - - /*< protected >*/ /* with PREROLL_LOCK */ - GMutex preroll_lock; - GCond preroll_cond; - gboolean eos; - gboolean need_preroll; - gboolean have_preroll; - gboolean playing_async; - - /*< protected >*/ /* with STREAM_LOCK */ - gboolean have_newsegment; - GstSegment segment; - - /*< private >*/ /* with LOCK */ - GstClockID clock_id; - gboolean sync; - gboolean flushing; - gboolean running; - - gint64 max_lateness; - - /*< private >*/ - GstBaseSinkPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstBaseSinkClass: - * @parent_class: Element parent class - * @get_caps: Called to get sink pad caps from the subclass - * @set_caps: Notify subclass of changed caps - * @fixate: Only useful in pull mode. Implement if you have - * ideas about what should be the default values for the caps you support. - * @activate_pull: Subclasses should override this when they can provide an - * alternate method of spawning a thread to drive the pipeline in pull mode. - * Should start or stop the pulling thread, depending on the value of the - * "active" argument. Called after actually activating the sink pad in pull - * mode. The default implementation starts a task on the sink pad. - * @get_times: Called to get the start and end times for synchronising - * the passed buffer to the clock - * @propose_allocation: configure the allocation query - * @start: Start processing. Ideal for opening resources in the subclass - * @stop: Stop processing. Subclasses should use this to close resources. - * @unlock: Unlock any pending access to the resource. Subclasses should - * unblock any blocked function ASAP - * @unlock_stop: Clear the previous unlock request. Subclasses should clear - * any state they set during unlock(), such as clearing command queues. - * @query: perform a #GstQuery on the element. - * @event: Override this to handle events arriving on the sink pad - * @wait_event: Override this to implement custom logic to wait for the event - * time (for events like EOS and GAP). Subclasses should always first - * chain up to the default implementation. - * @prepare: Called to prepare the buffer for @render and @preroll. This - * function is called before synchronisation is performed. - * @prepare_list: Called to prepare the buffer list for @render_list. This - * function is called before synchronisation is performed. - * @preroll: Called to present the preroll buffer if desired. - * @render: Called when a buffer should be presented or output, at the - * correct moment if the #GstBaseSink has been set to sync to the clock. - * @render_list: Same as @render but used whith buffer lists instead of - * buffers. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At the minimum, the @render method should be overridden to - * output/present buffers. - */ -struct _GstBaseSinkClass { - GstElementClass parent_class; - - /* get caps from subclass */ - GstCaps* (*get_caps) (GstBaseSink *sink, GstCaps *filter); - /* notify subclass of new caps */ - gboolean (*set_caps) (GstBaseSink *sink, GstCaps *caps); - - /* fixate sink caps during pull-mode negotiation */ - GstCaps * (*fixate) (GstBaseSink *sink, GstCaps *caps); - /* start or stop a pulling thread */ - gboolean (*activate_pull)(GstBaseSink *sink, gboolean active); - - /* get the start and end times for syncing on this buffer */ - void (*get_times) (GstBaseSink *sink, GstBuffer *buffer, - GstClockTime *start, GstClockTime *end); - - /* propose allocation parameters for upstream */ - gboolean (*propose_allocation) (GstBaseSink *sink, GstQuery *query); - - /* start and stop processing, ideal for opening/closing the resource */ - gboolean (*start) (GstBaseSink *sink); - gboolean (*stop) (GstBaseSink *sink); - - /* unlock any pending access to the resource. subclasses should unlock - * any function ASAP. */ - gboolean (*unlock) (GstBaseSink *sink); - /* Clear a previously indicated unlock request not that unlocking is - * complete. Sub-classes should clear any command queue or indicator they - * set during unlock */ - gboolean (*unlock_stop) (GstBaseSink *sink); - - /* notify subclass of query */ - gboolean (*query) (GstBaseSink *sink, GstQuery *query); - - /* notify subclass of event */ - gboolean (*event) (GstBaseSink *sink, GstEvent *event); - /* wait for eos or gap, subclasses should chain up to parent first */ - GstFlowReturn (*wait_event) (GstBaseSink *sink, GstEvent *event); - - /* notify subclass of buffer or list before doing sync */ - GstFlowReturn (*prepare) (GstBaseSink *sink, GstBuffer *buffer); - GstFlowReturn (*prepare_list) (GstBaseSink *sink, GstBufferList *buffer_list); - - /* notify subclass of preroll buffer or real buffer */ - GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer); - GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer); - /* Render a BufferList */ - GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_list); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_sink_get_type(void); - -GstFlowReturn gst_base_sink_do_preroll (GstBaseSink *sink, GstMiniObject *obj); -GstFlowReturn gst_base_sink_wait_preroll (GstBaseSink *sink); - -/* synchronizing against the clock */ -void gst_base_sink_set_sync (GstBaseSink *sink, gboolean sync); -gboolean gst_base_sink_get_sync (GstBaseSink *sink); - -/* dropping late buffers */ -void gst_base_sink_set_max_lateness (GstBaseSink *sink, gint64 max_lateness); -gint64 gst_base_sink_get_max_lateness (GstBaseSink *sink); - -/* performing QoS */ -void gst_base_sink_set_qos_enabled (GstBaseSink *sink, gboolean enabled); -gboolean gst_base_sink_is_qos_enabled (GstBaseSink *sink); - -/* doing async state changes */ -void gst_base_sink_set_async_enabled (GstBaseSink *sink, gboolean enabled); -gboolean gst_base_sink_is_async_enabled (GstBaseSink *sink); - -/* tuning synchronisation */ -void gst_base_sink_set_ts_offset (GstBaseSink *sink, GstClockTimeDiff offset); -GstClockTimeDiff gst_base_sink_get_ts_offset (GstBaseSink *sink); - -/* last sample */ -GstSample * gst_base_sink_get_last_sample (GstBaseSink *sink); -void gst_base_sink_set_last_sample_enabled (GstBaseSink *sink, gboolean enabled); -gboolean gst_base_sink_is_last_sample_enabled (GstBaseSink *sink); - -/* latency */ -gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolean *live, gboolean *upstream_live, - GstClockTime *min_latency, GstClockTime *max_latency); -GstClockTime gst_base_sink_get_latency (GstBaseSink *sink); - -/* render delay */ -void gst_base_sink_set_render_delay (GstBaseSink *sink, GstClockTime delay); -GstClockTime gst_base_sink_get_render_delay (GstBaseSink *sink); - -/* blocksize */ -void gst_base_sink_set_blocksize (GstBaseSink *sink, guint blocksize); -guint gst_base_sink_get_blocksize (GstBaseSink *sink); - -/* throttle-time */ -void gst_base_sink_set_throttle_time (GstBaseSink *sink, guint64 throttle); -guint64 gst_base_sink_get_throttle_time (GstBaseSink *sink); - -GstClockReturn gst_base_sink_wait_clock (GstBaseSink *sink, GstClockTime time, - GstClockTimeDiff * jitter); -GstFlowReturn gst_base_sink_wait (GstBaseSink *sink, GstClockTime time, - GstClockTimeDiff *jitter); - -G_END_DECLS - -#endif /* __GST_BASE_SINK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesrc.h deleted file mode 100644 index 466f0fc7..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasesrc.h +++ /dev/null @@ -1,270 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstbasesrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_SRC_H__ -#define __GST_BASE_SRC_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BASE_SRC (gst_base_src_get_type()) -#define GST_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_SRC,GstBaseSrc)) -#define GST_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_SRC,GstBaseSrcClass)) -#define GST_BASE_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_SRC, GstBaseSrcClass)) -#define GST_IS_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_SRC)) -#define GST_IS_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_SRC)) -#define GST_BASE_SRC_CAST(obj) ((GstBaseSrc *)(obj)) - -/** - * GstBaseSrcFlags: - * @GST_BASE_SRC_FLAG_STARTING: has source is starting - * @GST_BASE_SRC_FLAG_STARTED: has source been started - * @GST_BASE_SRC_FLAG_LAST: offset to define more flags - * - * The #GstElement flags that a basesrc element may have. - */ -typedef enum { - GST_BASE_SRC_FLAG_STARTING = (GST_ELEMENT_FLAG_LAST << 0), - GST_BASE_SRC_FLAG_STARTED = (GST_ELEMENT_FLAG_LAST << 1), - /* padding */ - GST_BASE_SRC_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 6) -} GstBaseSrcFlags; - -#define GST_BASE_SRC_IS_STARTING(obj) GST_OBJECT_FLAG_IS_SET ((obj), GST_BASE_SRC_FLAG_STARTING) -#define GST_BASE_SRC_IS_STARTED(obj) GST_OBJECT_FLAG_IS_SET ((obj), GST_BASE_SRC_FLAG_STARTED) - -typedef struct _GstBaseSrc GstBaseSrc; -typedef struct _GstBaseSrcClass GstBaseSrcClass; -typedef struct _GstBaseSrcPrivate GstBaseSrcPrivate; - -/** - * GST_BASE_SRC_PAD: - * @obj: base source instance - * - * Gives the pointer to the #GstPad object of the element. - */ -#define GST_BASE_SRC_PAD(obj) (GST_BASE_SRC_CAST (obj)->srcpad) - - -/** - * GstBaseSrc: - * - * The opaque #GstBaseSrc data structure. - */ -struct _GstBaseSrc { - GstElement element; - - /*< protected >*/ - GstPad *srcpad; - - /* available to subclass implementations */ - /* MT-protected (with LIVE_LOCK) */ - GMutex live_lock; - GCond live_cond; - gboolean is_live; - gboolean live_running; - - /* MT-protected (with LOCK) */ - guint blocksize; /* size of buffers when operating push based */ - gboolean can_activate_push; /* some scheduling properties */ - gboolean random_access; - - GstClockID clock_id; /* for syncing */ - - /* MT-protected (with STREAM_LOCK *and* OBJECT_LOCK) */ - GstSegment segment; - /* MT-protected (with STREAM_LOCK) */ - gboolean need_newsegment; - - gint num_buffers; - gint num_buffers_left; - - gboolean typefind; - gboolean running; - GstEvent *pending_seek; - - GstBaseSrcPrivate *priv; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstBaseSrcClass: - * @parent_class: Element parent class - * @get_caps: Called to get the caps to report - * @negotiate: Negotiated the caps with the peer. - * @fixate: Called during negotiation if caps need fixating. Implement instead of - * setting a fixate function on the source pad. - * @set_caps: Notify subclass of changed output caps - * @decide_allocation: configure the allocation query - * @start: Start processing. Subclasses should open resources and prepare - * to produce data. Implementation should call gst_base_src_start_complete() - * when the operation completes, either from the current thread or any other - * thread that finishes the start operation asynchronously. - * @stop: Stop processing. Subclasses should use this to close resources. - * @get_times: Given a buffer, return the start and stop time when it - * should be pushed out. The base class will sync on the clock using - * these times. - * @get_size: Return the total size of the resource, in the configured format. - * @is_seekable: Check if the source can seek - * @prepare_seek_segment: Prepare the GstSegment that will be passed to the - * do_seek vmethod for executing a seek request. Sub-classes should override - * this if they support seeking in formats other than the configured native - * format. By default, it tries to convert the seek arguments to the - * configured native format and prepare a segment in that format. - * @do_seek: Perform seeking on the resource to the indicated segment. - * @unlock: Unlock any pending access to the resource. Subclasses should - * unblock any blocked function ASAP. In particular, any create() function in - * progress should be unblocked and should return GST_FLOW_FLUSHING. Any - * future @create() function call should also return GST_FLOW_FLUSHING - * until the @unlock_stop() function has been called. - * @unlock_stop: Clear the previous unlock request. Subclasses should clear - * any state they set during unlock(), such as clearing command queues. - * @query: Handle a requested query. - * @event: Override this to implement custom event handling. - * @create: Ask the subclass to create a buffer with offset and size. - * When the subclass returns GST_FLOW_OK, it MUST return a buffer of the - * requested size unless fewer bytes are available because an EOS condition - * is near. No buffer should be returned when the return value is different - * from GST_FLOW_OK. A return value of GST_FLOW_EOS signifies that the - * end of stream is reached. The default implementation will call @alloc and - * then call @fill. - * @alloc: Ask the subclass to allocate a buffer with for offset and size. The - * default implementation will create a new buffer from the negotiated allocator. - * @fill: Ask the subclass to fill the buffer with data for offset and size. The - * passed buffer is guaranteed to hold the requested amount of bytes. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At the minimum, the @create method should be overridden to produce - * buffers. - */ -struct _GstBaseSrcClass { - GstElementClass parent_class; - - /*< public >*/ - /* virtual methods for subclasses */ - - /* get caps from subclass */ - GstCaps* (*get_caps) (GstBaseSrc *src, GstCaps *filter); - /* decide on caps */ - gboolean (*negotiate) (GstBaseSrc *src); - /* called if, in negotiation, caps need fixating */ - GstCaps * (*fixate) (GstBaseSrc *src, GstCaps *caps); - /* notify the subclass of new caps */ - gboolean (*set_caps) (GstBaseSrc *src, GstCaps *caps); - - /* setup allocation query */ - gboolean (*decide_allocation) (GstBaseSrc *src, GstQuery *query); - - /* start and stop processing, ideal for opening/closing the resource */ - gboolean (*start) (GstBaseSrc *src); - gboolean (*stop) (GstBaseSrc *src); - - /* given a buffer, return start and stop time when it should be pushed - * out. The base class will sync on the clock using these times. */ - void (*get_times) (GstBaseSrc *src, GstBuffer *buffer, - GstClockTime *start, GstClockTime *end); - - /* get the total size of the resource in bytes */ - gboolean (*get_size) (GstBaseSrc *src, guint64 *size); - - /* check if the resource is seekable */ - gboolean (*is_seekable) (GstBaseSrc *src); - - /* Prepare the segment on which to perform do_seek(), converting to the - * current basesrc format. */ - gboolean (*prepare_seek_segment) (GstBaseSrc *src, GstEvent *seek, - GstSegment *segment); - /* notify subclasses of a seek */ - gboolean (*do_seek) (GstBaseSrc *src, GstSegment *segment); - - /* unlock any pending access to the resource. subclasses should unlock - * any function ASAP. */ - gboolean (*unlock) (GstBaseSrc *src); - /* Clear any pending unlock request, as we succeeded in unlocking */ - gboolean (*unlock_stop) (GstBaseSrc *src); - - /* notify subclasses of a query */ - gboolean (*query) (GstBaseSrc *src, GstQuery *query); - - /* notify subclasses of an event */ - gboolean (*event) (GstBaseSrc *src, GstEvent *event); - - /* ask the subclass to create a buffer with offset and size, the default - * implementation will call alloc and fill. */ - GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size, - GstBuffer **buf); - /* ask the subclass to allocate an output buffer. The default implementation - * will use the negotiated allocator. */ - GstFlowReturn (*alloc) (GstBaseSrc *src, guint64 offset, guint size, - GstBuffer **buf); - /* ask the subclass to fill the buffer with data from offset and size */ - GstFlowReturn (*fill) (GstBaseSrc *src, guint64 offset, guint size, - GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_src_get_type (void); - -GstFlowReturn gst_base_src_wait_playing (GstBaseSrc *src); - -void gst_base_src_set_live (GstBaseSrc *src, gboolean live); -gboolean gst_base_src_is_live (GstBaseSrc *src); - -void gst_base_src_set_format (GstBaseSrc *src, GstFormat format); - -void gst_base_src_set_dynamic_size (GstBaseSrc * src, gboolean dynamic); - -void gst_base_src_set_async (GstBaseSrc *src, gboolean async); -gboolean gst_base_src_is_async (GstBaseSrc *src); - -void gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret); -GstFlowReturn gst_base_src_start_wait (GstBaseSrc * basesrc); - -gboolean gst_base_src_query_latency (GstBaseSrc *src, gboolean * live, - GstClockTime * min_latency, - GstClockTime * max_latency); - -void gst_base_src_set_blocksize (GstBaseSrc *src, guint blocksize); -guint gst_base_src_get_blocksize (GstBaseSrc *src); - -void gst_base_src_set_do_timestamp (GstBaseSrc *src, gboolean timestamp); -gboolean gst_base_src_get_do_timestamp (GstBaseSrc *src); - -gboolean gst_base_src_new_seamless_segment (GstBaseSrc *src, gint64 start, gint64 stop, gint64 time); - -gboolean gst_base_src_set_caps (GstBaseSrc *src, GstCaps *caps); - -GstBufferPool * gst_base_src_get_buffer_pool (GstBaseSrc *src); -void gst_base_src_get_allocator (GstBaseSrc *src, - GstAllocator **allocator, - GstAllocationParams *params); - - -G_END_DECLS - -#endif /* __GST_BASE_SRC_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasetransform.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasetransform.h deleted file mode 100644 index 666fbb19..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbasetransform.h +++ /dev/null @@ -1,298 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BASE_TRANSFORM_H__ -#define __GST_BASE_TRANSFORM_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BASE_TRANSFORM (gst_base_transform_get_type()) -#define GST_BASE_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_TRANSFORM,GstBaseTransform)) -#define GST_BASE_TRANSFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_TRANSFORM,GstBaseTransformClass)) -#define GST_BASE_TRANSFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_BASE_TRANSFORM,GstBaseTransformClass)) -#define GST_IS_BASE_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_TRANSFORM)) -#define GST_IS_BASE_TRANSFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_TRANSFORM)) -#define GST_BASE_TRANSFORM_CAST(obj) ((GstBaseTransform *)(obj)) - -/** - * GST_BASE_TRANSFORM_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_BASE_TRANSFORM_SINK_NAME "sink" -/** - * GST_BASE_TRANSFORM_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_BASE_TRANSFORM_SRC_NAME "src" - -/** - * GST_BASE_TRANSFORM_SRC_PAD: - * @obj: base transform instance - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_BASE_TRANSFORM_SRC_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)->srcpad) - -/** - * GST_BASE_TRANSFORM_SINK_PAD: - * @obj: base transform instance - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_BASE_TRANSFORM_SINK_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)->sinkpad) - -/** - * GST_BASE_TRANSFORM_FLOW_DROPPED: - * - * A #GstFlowReturn that can be returned from transform and transform_ip to - * indicate that no output buffer was generated. - */ -#define GST_BASE_TRANSFORM_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS - -typedef struct _GstBaseTransform GstBaseTransform; -typedef struct _GstBaseTransformClass GstBaseTransformClass; -typedef struct _GstBaseTransformPrivate GstBaseTransformPrivate; - -/** - * GstBaseTransform: - * - * The opaque #GstBaseTransform data structure. - */ -struct _GstBaseTransform { - GstElement element; - - /*< protected >*/ - /* source and sink pads */ - GstPad *sinkpad; - GstPad *srcpad; - - /* MT-protected (with STREAM_LOCK) */ - gboolean have_segment; - GstSegment segment; - - /*< private >*/ - GstBaseTransformPrivate *priv; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -/** - * GstBaseTransformClass: - * @parent_class: Element parent class - * @passthrough_on_same_caps: If set to %TRUE, passthrough mode will be - * automatically enabled if the caps are the same. - * Set to %FALSE by default. - * @transform_ip_on_passthrough: If set to %TRUE, @transform_ip will be called in - * passthrough mode. The passed buffer might not be - * writable. When %FALSE, neither @transform nor - * @transform_ip will be called in passthrough mode. - * Set to %TRUE by default. - * @transform_caps: Optional. Given the pad in this direction and the given - * caps, what caps are allowed on the other pad in this - * element ? - * @fixate_caps: Optional. Given the pad in this direction and the given - * caps, fixate the caps on the other pad. The function takes - * ownership of @othercaps and returns a fixated version of - * @othercaps. @othercaps is not guaranteed to be writable. - * @accept_caps: Optional. - * Subclasses can override this method to check if @caps can be - * handled by the element. The default implementation might not be - * the most optimal way to check this in all cases. - * @set_caps: allows the subclass to be notified of the actual caps set. - * @query: Optional. - * Handle a requested query. Subclasses that implement this - * should must chain up to the parent if they didn't handle the - * query - * @decide_allocation: Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. This function is only called - * when not operating in passthrough mode. The default - * implementation will remove all memory dependent metadata. - * If there is ia @filter_meta method implementation, it will - * be called for all metadata API in the downstream query, - * otherwise the metadata API is removed. - * @filter_meta: Return TRUE if the metadata API should be proposed in the - * upstream allocation query. The default implementation is NULL - * and will cause all metadata to be removed. - * @propose_allocation: Propose buffer allocation parameters for upstream elements. - * This function must be implemented if the element reads or - * writes the buffer content. The query that was passed to - * the decide_allocation is passed in this method (or NULL - * when the element is in passthrough mode). The default - * implementation will pass the query downstream when in - * passthrough mode and will copy all the filtered metadata - * API in non-passthrough mode. - * @transform_size: Optional. Given the size of a buffer in the given direction - * with the given caps, calculate the size in bytes of a buffer - * on the other pad with the given other caps. - * The default implementation uses get_unit_size and keeps - * the number of units the same. - * @get_unit_size: Required if the transform is not in-place. - * get the size in bytes of one unit for the given caps. - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @sink_event: Optional. - * Event handler on the sink pad. The default implementation - * handles the event and forwards it downstream. - * @src_event: Optional. - * Event handler on the source pad. The default implementation - * handles the event and forwards it upstream. - * @prepare_output_buffer: Optional. - * Subclasses can override this to do their own - * allocation of output buffers. Elements that only do - * analysis can return a subbuffer or even just - * return a reference to the input buffer (if in - * passthrough mode). The default implementation will - * use the negotiated allocator or bufferpool and - * transform_size to allocate an output buffer or it - * will return the input buffer in passthrough mode. - * @copy_metadata: Optional. - * Copy the metadata from the input buffer to the output buffer. - * The default implementation will copy the flags, timestamps and - * offsets of the buffer. - * @transform_meta: Optional. Transform the metadata on the input buffer to the - * output buffer. By default this method is NULL and no - * metadata is copied. subclasses can implement this method and - * return TRUE if the metadata is to be copied. - * @before_transform: Optional. - * This method is called right before the base class will - * start processing. Dynamic properties or other delayed - * configuration could be performed in this method. - * @transform: Required if the element does not operate in-place. - * Transforms one incoming buffer to one outgoing buffer. - * The function is allowed to change size/timestamp/duration - * of the outgoing buffer. - * @transform_ip: Required if the element operates in-place. - * Transform the incoming buffer in-place. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum either @transform or @transform_ip need to be overridden. - * If the element can overwrite the input data with the results (data is of the - * same type and quantity) it should provide @transform_ip. - */ -struct _GstBaseTransformClass { - GstElementClass parent_class; - - /*< public >*/ - gboolean passthrough_on_same_caps; - gboolean transform_ip_on_passthrough; - - /* virtual methods for subclasses */ - GstCaps* (*transform_caps) (GstBaseTransform *trans, - GstPadDirection direction, - GstCaps *caps, GstCaps *filter); - GstCaps* (*fixate_caps) (GstBaseTransform *trans, - GstPadDirection direction, GstCaps *caps, - GstCaps *othercaps); - gboolean (*accept_caps) (GstBaseTransform *trans, GstPadDirection direction, - GstCaps *caps); - gboolean (*set_caps) (GstBaseTransform *trans, GstCaps *incaps, - GstCaps *outcaps); - gboolean (*query) (GstBaseTransform *trans, GstPadDirection direction, - GstQuery *query); - - /* decide allocation query for output buffers */ - gboolean (*decide_allocation) (GstBaseTransform *trans, GstQuery *query); - gboolean (*filter_meta) (GstBaseTransform *trans, GstQuery *query, - GType api, const GstStructure *params); - - /* propose allocation query parameters for input buffers */ - gboolean (*propose_allocation) (GstBaseTransform *trans, GstQuery *decide_query, - GstQuery *query); - - /* transform size */ - gboolean (*transform_size) (GstBaseTransform *trans, - GstPadDirection direction, - GstCaps *caps, gsize size, - GstCaps *othercaps, gsize *othersize); - - gboolean (*get_unit_size) (GstBaseTransform *trans, GstCaps *caps, - gsize *size); - - /* states */ - gboolean (*start) (GstBaseTransform *trans); - gboolean (*stop) (GstBaseTransform *trans); - - /* sink and src pad event handlers */ - gboolean (*sink_event) (GstBaseTransform *trans, GstEvent *event); - gboolean (*src_event) (GstBaseTransform *trans, GstEvent *event); - - GstFlowReturn (*prepare_output_buffer) (GstBaseTransform * trans, - GstBuffer *input, GstBuffer **outbuf); - - /* metadata */ - gboolean (*copy_metadata) (GstBaseTransform *trans, GstBuffer *input, - GstBuffer *outbuf); - gboolean (*transform_meta) (GstBaseTransform *trans, GstBuffer *outbuf, - GstMeta *meta, GstBuffer *inbuf); - - void (*before_transform) (GstBaseTransform *trans, GstBuffer *buffer); - - /* transform */ - GstFlowReturn (*transform) (GstBaseTransform *trans, GstBuffer *inbuf, - GstBuffer *outbuf); - GstFlowReturn (*transform_ip) (GstBaseTransform *trans, GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_base_transform_get_type (void); - -void gst_base_transform_set_passthrough (GstBaseTransform *trans, - gboolean passthrough); -gboolean gst_base_transform_is_passthrough (GstBaseTransform *trans); - -void gst_base_transform_set_in_place (GstBaseTransform *trans, - gboolean in_place); -gboolean gst_base_transform_is_in_place (GstBaseTransform *trans); - -void gst_base_transform_update_qos (GstBaseTransform *trans, - gdouble proportion, - GstClockTimeDiff diff, - GstClockTime timestamp); -void gst_base_transform_set_qos_enabled (GstBaseTransform *trans, - gboolean enabled); -gboolean gst_base_transform_is_qos_enabled (GstBaseTransform *trans); - -void gst_base_transform_set_gap_aware (GstBaseTransform *trans, - gboolean gap_aware); - -void gst_base_transform_set_prefer_passthrough (GstBaseTransform *trans, - gboolean prefer_passthrough); - -GstBufferPool * gst_base_transform_get_buffer_pool (GstBaseTransform *trans); -void gst_base_transform_get_allocator (GstBaseTransform *trans, - GstAllocator **allocator, - GstAllocationParams *params); - -void gst_base_transform_reconfigure_sink (GstBaseTransform *trans); -void gst_base_transform_reconfigure_src (GstBaseTransform *trans); -G_END_DECLS - -#endif /* __GST_BASE_TRANSFORM_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbitreader.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbitreader.h deleted file mode 100644 index 4a2b4a0d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbitreader.h +++ /dev/null @@ -1,301 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2008 Sebastian Dröge . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BIT_READER_H__ -#define __GST_BIT_READER_H__ - -#include - -/* FIXME: inline functions */ - -G_BEGIN_DECLS - -#define GST_BIT_READER(reader) ((GstBitReader *) (reader)) - -/** - * GstBitReader: - * @data: (array length=size): Data from which the bit reader will - * read - * @size: Size of @data in bytes - * @byte: Current byte position - * @bit: Bit position in the current byte - * - * A bit reader instance. - */ -typedef struct { - const guint8 *data; - guint size; - - guint byte; /* Byte position */ - guint bit; /* Bit position in the current byte */ - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstBitReader; - -GstBitReader * gst_bit_reader_new (const guint8 *data, guint size) G_GNUC_MALLOC; -void gst_bit_reader_free (GstBitReader *reader); - -void gst_bit_reader_init (GstBitReader *reader, const guint8 *data, guint size); - -gboolean gst_bit_reader_set_pos (GstBitReader *reader, guint pos); -guint gst_bit_reader_get_pos (const GstBitReader *reader); - -guint gst_bit_reader_get_remaining (const GstBitReader *reader); - -guint gst_bit_reader_get_size (const GstBitReader *reader); - -gboolean gst_bit_reader_skip (GstBitReader *reader, guint nbits); -gboolean gst_bit_reader_skip_to_byte (GstBitReader *reader); - -gboolean gst_bit_reader_get_bits_uint8 (GstBitReader *reader, guint8 *val, guint nbits); -gboolean gst_bit_reader_get_bits_uint16 (GstBitReader *reader, guint16 *val, guint nbits); -gboolean gst_bit_reader_get_bits_uint32 (GstBitReader *reader, guint32 *val, guint nbits); -gboolean gst_bit_reader_get_bits_uint64 (GstBitReader *reader, guint64 *val, guint nbits); - -gboolean gst_bit_reader_peek_bits_uint8 (const GstBitReader *reader, guint8 *val, guint nbits); -gboolean gst_bit_reader_peek_bits_uint16 (const GstBitReader *reader, guint16 *val, guint nbits); -gboolean gst_bit_reader_peek_bits_uint32 (const GstBitReader *reader, guint32 *val, guint nbits); -gboolean gst_bit_reader_peek_bits_uint64 (const GstBitReader *reader, guint64 *val, guint nbits); - -/** - * GST_BIT_READER_INIT: - * @data: Data from which the #GstBitReader should read - * @size: Size of @data in bytes - * - * A #GstBitReader must be initialized with this macro, before it can be - * used. This macro can used be to initialize a variable, but it cannot - * be assigned to a variable. In that case you have to use - * gst_bit_reader_init(). - */ -#define GST_BIT_READER_INIT(data, size) {data, size, 0, 0} - -/* Unchecked variants */ - -static inline void -gst_bit_reader_skip_unchecked (GstBitReader * reader, guint nbits) -{ - reader->bit += nbits; - reader->byte += reader->bit / 8; - reader->bit = reader->bit % 8; -} - -static inline void -gst_bit_reader_skip_to_byte_unchecked (GstBitReader * reader) -{ - if (reader->bit) { - reader->bit = 0; - reader->byte++; - } -} - -#define __GST_BIT_READER_READ_BITS_UNCHECKED(bits) \ -static inline guint##bits \ -gst_bit_reader_peek_bits_uint##bits##_unchecked (const GstBitReader *reader, guint nbits) \ -{ \ - guint##bits ret = 0; \ - const guint8 *data; \ - guint byte, bit; \ - \ - data = reader->data; \ - byte = reader->byte; \ - bit = reader->bit; \ - \ - while (nbits > 0) { \ - guint toread = MIN (nbits, 8 - bit); \ - \ - ret <<= toread; \ - ret |= (data[byte] & (0xff >> bit)) >> (8 - toread - bit); \ - \ - bit += toread; \ - if (bit >= 8) { \ - byte++; \ - bit = 0; \ - } \ - nbits -= toread; \ - } \ - \ - return ret; \ -} \ -\ -static inline guint##bits \ -gst_bit_reader_get_bits_uint##bits##_unchecked (GstBitReader *reader, guint nbits) \ -{ \ - guint##bits ret; \ - \ - ret = gst_bit_reader_peek_bits_uint##bits##_unchecked (reader, nbits); \ - \ - gst_bit_reader_skip_unchecked (reader, nbits); \ - \ - return ret; \ -} - -__GST_BIT_READER_READ_BITS_UNCHECKED (8) -__GST_BIT_READER_READ_BITS_UNCHECKED (16) -__GST_BIT_READER_READ_BITS_UNCHECKED (32) -__GST_BIT_READER_READ_BITS_UNCHECKED (64) - -#undef __GST_BIT_READER_READ_BITS_UNCHECKED - -/* unchecked variants -- do not use */ - -static inline guint -_gst_bit_reader_get_size_unchecked (const GstBitReader * reader) -{ - return reader->size * 8; -} - -static inline guint -_gst_bit_reader_get_pos_unchecked (const GstBitReader * reader) -{ - return reader->byte * 8 + reader->bit; -} - -static inline guint -_gst_bit_reader_get_remaining_unchecked (const GstBitReader * reader) -{ - return reader->size * 8 - (reader->byte * 8 + reader->bit); -} - -/* inlined variants -- do not use directly */ -static inline guint -_gst_bit_reader_get_size_inline (const GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_bit_reader_get_size_unchecked (reader); -} - -static inline guint -_gst_bit_reader_get_pos_inline (const GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_bit_reader_get_pos_unchecked (reader); -} - -static inline guint -_gst_bit_reader_get_remaining_inline (const GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_bit_reader_get_remaining_unchecked (reader); -} - -static inline gboolean -_gst_bit_reader_skip_inline (GstBitReader * reader, guint nbits) -{ - g_return_val_if_fail (reader != NULL, FALSE); - - if (_gst_bit_reader_get_remaining_unchecked (reader) < nbits) - return FALSE; - - gst_bit_reader_skip_unchecked (reader, nbits); - - return TRUE; -} - -static inline gboolean -_gst_bit_reader_skip_to_byte_inline (GstBitReader * reader) -{ - g_return_val_if_fail (reader != NULL, FALSE); - - if (reader->byte > reader->size) - return FALSE; - - gst_bit_reader_skip_to_byte_unchecked (reader); - - return TRUE; -} - -#define __GST_BIT_READER_READ_BITS_INLINE(bits) \ -static inline gboolean \ -_gst_bit_reader_get_bits_uint##bits##_inline (GstBitReader *reader, guint##bits *val, guint nbits) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - g_return_val_if_fail (nbits <= bits, FALSE); \ - \ - if (_gst_bit_reader_get_remaining_unchecked (reader) < nbits) \ - return FALSE; \ -\ - *val = gst_bit_reader_get_bits_uint##bits##_unchecked (reader, nbits); \ - return TRUE; \ -} \ -\ -static inline gboolean \ -_gst_bit_reader_peek_bits_uint##bits##_inline (const GstBitReader *reader, guint##bits *val, guint nbits) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - g_return_val_if_fail (nbits <= bits, FALSE); \ - \ - if (_gst_bit_reader_get_remaining_unchecked (reader) < nbits) \ - return FALSE; \ -\ - *val = gst_bit_reader_peek_bits_uint##bits##_unchecked (reader, nbits); \ - return TRUE; \ -} - -__GST_BIT_READER_READ_BITS_INLINE (8) -__GST_BIT_READER_READ_BITS_INLINE (16) -__GST_BIT_READER_READ_BITS_INLINE (32) -__GST_BIT_READER_READ_BITS_INLINE (64) - -#undef __GST_BIT_READER_READ_BITS_INLINE - -#ifndef GST_BIT_READER_DISABLE_INLINES - -#define gst_bit_reader_get_size(reader) \ - _gst_bit_reader_get_size_inline (reader) -#define gst_bit_reader_get_pos(reader) \ - _gst_bit_reader_get_pos_inline (reader) -#define gst_bit_reader_get_remaining(reader) \ - _gst_bit_reader_get_remaining_inline (reader) - -/* we use defines here so we can add the G_LIKELY() */ - -#define gst_bit_reader_skip(reader, nbits)\ - G_LIKELY (_gst_bit_reader_skip_inline(reader, nbits)) -#define gst_bit_reader_skip_to_byte(reader)\ - G_LIKELY (_gst_bit_reader_skip_to_byte_inline(reader)) - -#define gst_bit_reader_get_bits_uint8(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint8_inline (reader, val, nbits)) -#define gst_bit_reader_get_bits_uint16(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint16_inline (reader, val, nbits)) -#define gst_bit_reader_get_bits_uint32(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint32_inline (reader, val, nbits)) -#define gst_bit_reader_get_bits_uint64(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_get_bits_uint64_inline (reader, val, nbits)) - -#define gst_bit_reader_peek_bits_uint8(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint8_inline (reader, val, nbits)) -#define gst_bit_reader_peek_bits_uint16(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint16_inline (reader, val, nbits)) -#define gst_bit_reader_peek_bits_uint32(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint32_inline (reader, val, nbits)) -#define gst_bit_reader_peek_bits_uint64(reader, val, nbits) \ - G_LIKELY (_gst_bit_reader_peek_bits_uint64_inline (reader, val, nbits)) -#endif - -G_END_DECLS - -#endif /* __GST_BIT_READER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytereader.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytereader.h deleted file mode 100644 index 15ac2ed0..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytereader.h +++ /dev/null @@ -1,513 +0,0 @@ -/* GStreamer byte reader - * - * Copyright (C) 2008 Sebastian Dröge . - * Copyright (C) 2009 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BYTE_READER_H__ -#define __GST_BYTE_READER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_BYTE_READER(reader) ((GstByteReader *) (reader)) - -/** - * GstByteReader: - * @data: (array length=size): Data from which the bit reader will - * read - * @size: Size of @data in bytes - * @byte: Current byte position - * - * A byte reader instance. - */ -typedef struct { - const guint8 *data; - guint size; - - guint byte; /* Byte position */ - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstByteReader; - -GstByteReader * gst_byte_reader_new (const guint8 *data, guint size) G_GNUC_MALLOC; -void gst_byte_reader_free (GstByteReader *reader); - -void gst_byte_reader_init (GstByteReader *reader, const guint8 *data, guint size); - -gboolean gst_byte_reader_set_pos (GstByteReader *reader, guint pos); -guint gst_byte_reader_get_pos (const GstByteReader *reader); - -guint gst_byte_reader_get_remaining (const GstByteReader *reader); - -guint gst_byte_reader_get_size (const GstByteReader *reader); - -gboolean gst_byte_reader_skip (GstByteReader *reader, guint nbytes); - -gboolean gst_byte_reader_get_uint8 (GstByteReader *reader, guint8 *val); -gboolean gst_byte_reader_get_int8 (GstByteReader *reader, gint8 *val); -gboolean gst_byte_reader_get_uint16_le (GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_get_int16_le (GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_get_uint16_be (GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_get_int16_be (GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_get_uint24_le (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int24_le (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint24_be (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int24_be (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint32_le (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int32_le (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint32_be (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int32_be (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint64_le (GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_get_int64_le (GstByteReader *reader, gint64 *val); -gboolean gst_byte_reader_get_uint64_be (GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_get_int64_be (GstByteReader *reader, gint64 *val); - -gboolean gst_byte_reader_peek_uint8 (const GstByteReader *reader, guint8 *val); -gboolean gst_byte_reader_peek_int8 (const GstByteReader *reader, gint8 *val); -gboolean gst_byte_reader_peek_uint16_le (const GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_peek_int16_le (const GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_peek_uint16_be (const GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_peek_int16_be (const GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_peek_uint24_le (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int24_le (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint24_be (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int24_be (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint32_le (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int32_le (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint32_be (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int32_be (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint64_le (const GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_peek_int64_le (const GstByteReader *reader, gint64 *val); -gboolean gst_byte_reader_peek_uint64_be (const GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_peek_int64_be (const GstByteReader *reader, gint64 *val); - -gboolean gst_byte_reader_get_float32_le (GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_get_float32_be (GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_get_float64_le (GstByteReader *reader, gdouble *val); -gboolean gst_byte_reader_get_float64_be (GstByteReader *reader, gdouble *val); - -gboolean gst_byte_reader_peek_float32_le (const GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_peek_float32_be (const GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_peek_float64_le (const GstByteReader *reader, gdouble *val); -gboolean gst_byte_reader_peek_float64_be (const GstByteReader *reader, gdouble *val); - -gboolean gst_byte_reader_dup_data (GstByteReader * reader, guint size, guint8 ** val); -gboolean gst_byte_reader_get_data (GstByteReader * reader, guint size, const guint8 ** val); -gboolean gst_byte_reader_peek_data (const GstByteReader * reader, guint size, const guint8 ** val); - -#define gst_byte_reader_dup_string(reader,str) \ - gst_byte_reader_dup_string_utf8(reader,str) - -gboolean gst_byte_reader_dup_string_utf8 (GstByteReader * reader, gchar ** str); -gboolean gst_byte_reader_dup_string_utf16 (GstByteReader * reader, guint16 ** str); -gboolean gst_byte_reader_dup_string_utf32 (GstByteReader * reader, guint32 ** str); - -#define gst_byte_reader_skip_string(reader) \ - gst_byte_reader_skip_string_utf8(reader) - -gboolean gst_byte_reader_skip_string_utf8 (GstByteReader * reader); -gboolean gst_byte_reader_skip_string_utf16 (GstByteReader * reader); -gboolean gst_byte_reader_skip_string_utf32 (GstByteReader * reader); - -#define gst_byte_reader_get_string(reader,str) \ - gst_byte_reader_get_string_utf8(reader,str) - -#define gst_byte_reader_peek_string(reader,str) \ - gst_byte_reader_peek_string_utf8(reader,str) - -gboolean gst_byte_reader_get_string_utf8 (GstByteReader * reader, const gchar ** str); -gboolean gst_byte_reader_peek_string_utf8 (const GstByteReader * reader, const gchar ** str); - -guint gst_byte_reader_masked_scan_uint32 (const GstByteReader * reader, - guint32 mask, - guint32 pattern, - guint offset, - guint size); - -/** - * GST_BYTE_READER_INIT: - * @data: Data from which the #GstByteReader should read - * @size: Size of @data in bytes - * - * A #GstByteReader must be initialized with this macro, before it can be - * used. This macro can used be to initialize a variable, but it cannot - * be assigned to a variable. In that case you have to use - * gst_byte_reader_init(). - */ -#define GST_BYTE_READER_INIT(data, size) {data, size, 0} - -/* unchecked variants */ -static inline void -gst_byte_reader_skip_unchecked (GstByteReader * reader, guint nbytes) -{ - reader->byte += nbytes; -} - -#define __GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(bits,type,lower,upper,adj) \ -\ -static inline type \ -gst_byte_reader_peek_##lower##_unchecked (const GstByteReader * reader) \ -{ \ - type val = (type) GST_READ_##upper (reader->data + reader->byte); \ - adj \ - return val; \ -} \ -\ -static inline type \ -gst_byte_reader_get_##lower##_unchecked (GstByteReader * reader) \ -{ \ - type val = gst_byte_reader_peek_##lower##_unchecked (reader); \ - reader->byte += bits / 8; \ - return val; \ -} - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(8,guint8,uint8,UINT8,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(8,gint8,int8,UINT8,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,guint16,uint16_le,UINT16_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,guint16,uint16_be,UINT16_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,gint16,int16_le,UINT16_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(16,gint16,int16_be,UINT16_BE,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,guint32,uint32_le,UINT32_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,guint32,uint32_be,UINT32_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gint32,int32_le,UINT32_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gint32,int32_be,UINT32_BE,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,guint32,uint24_le,UINT24_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,guint32,uint24_be,UINT24_BE,/* */) - -/* fix up the sign for 24-bit signed ints stored in 32-bit signed ints */ -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,gint32,int24_le,UINT24_LE, - if (val & 0x00800000) val |= 0xff000000;) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(24,gint32,int24_be,UINT24_BE, - if (val & 0x00800000) val |= 0xff000000;) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,guint64,uint64_le,UINT64_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,guint64,uint64_be,UINT64_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gint64,int64_le,UINT64_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gint64,int64_be,UINT64_BE,/* */) - -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gfloat,float32_le,FLOAT_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(32,gfloat,float32_be,FLOAT_BE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gdouble,float64_le,DOUBLE_LE,/* */) -__GST_BYTE_READER_GET_PEEK_BITS_UNCHECKED(64,gdouble,float64_be,DOUBLE_BE,/* */) - -#undef __GET_PEEK_BITS_UNCHECKED - -static inline const guint8 * -gst_byte_reader_peek_data_unchecked (const GstByteReader * reader) -{ - return (const guint8 *) (reader->data + reader->byte); -} - -static inline const guint8 * -gst_byte_reader_get_data_unchecked (GstByteReader * reader, guint size) -{ - const guint8 *data; - - data = gst_byte_reader_peek_data_unchecked (reader); - gst_byte_reader_skip_unchecked (reader, size); - return data; -} - -static inline guint8 * -gst_byte_reader_dup_data_unchecked (GstByteReader * reader, guint size) -{ - gconstpointer data = gst_byte_reader_get_data_unchecked (reader, size); - return (guint8 *) g_memdup (data, size); -} - -/* Unchecked variants that should not be used */ -static inline guint -_gst_byte_reader_get_pos_unchecked (const GstByteReader * reader) -{ - return reader->byte; -} - -static inline guint -_gst_byte_reader_get_remaining_unchecked (const GstByteReader * reader) -{ - return reader->size - reader->byte; -} - -static inline guint -_gst_byte_reader_get_size_unchecked (const GstByteReader * reader) -{ - return reader->size; -} - -/* inlined variants (do not use directly) */ - -static inline guint -_gst_byte_reader_get_remaining_inline (const GstByteReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_byte_reader_get_remaining_unchecked (reader); -} - -static inline guint -_gst_byte_reader_get_size_inline (const GstByteReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_byte_reader_get_size_unchecked (reader); -} - -#define __GST_BYTE_READER_GET_PEEK_BITS_INLINE(bits,type,name) \ -\ -static inline gboolean \ -_gst_byte_reader_peek_##name##_inline (const GstByteReader * reader, type * val) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - \ - if (_gst_byte_reader_get_remaining_unchecked (reader) < (bits / 8)) \ - return FALSE; \ -\ - *val = gst_byte_reader_peek_##name##_unchecked (reader); \ - return TRUE; \ -} \ -\ -static inline gboolean \ -_gst_byte_reader_get_##name##_inline (GstByteReader * reader, type * val) \ -{ \ - g_return_val_if_fail (reader != NULL, FALSE); \ - g_return_val_if_fail (val != NULL, FALSE); \ - \ - if (_gst_byte_reader_get_remaining_unchecked (reader) < (bits / 8)) \ - return FALSE; \ -\ - *val = gst_byte_reader_get_##name##_unchecked (reader); \ - return TRUE; \ -} - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(8,guint8,uint8) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(8,gint8,int8) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,guint16,uint16_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,guint16,uint16_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,gint16,int16_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(16,gint16,int16_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,guint32,uint32_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,guint32,uint32_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gint32,int32_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gint32,int32_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,guint32,uint24_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,guint32,uint24_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,gint32,int24_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(24,gint32,int24_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,guint64,uint64_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,guint64,uint64_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gint64,int64_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gint64,int64_be) - -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gfloat,float32_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(32,gfloat,float32_be) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_le) -__GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_be) - -#undef __GST_BYTE_READER_GET_PEEK_BITS_INLINE - -#ifndef GST_BYTE_READER_DISABLE_INLINES - -#define gst_byte_reader_get_remaining(reader) \ - _gst_byte_reader_get_remaining_inline(reader) - -#define gst_byte_reader_get_size(reader) \ - _gst_byte_reader_get_size_inline(reader) - -#define gst_byte_reader_get_pos(reader) \ - _gst_byte_reader_get_pos_inline(reader) - -/* we use defines here so we can add the G_LIKELY() */ -#define gst_byte_reader_get_uint8(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint8_inline(reader,val)) -#define gst_byte_reader_get_int8(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int8_inline(reader,val)) -#define gst_byte_reader_get_uint16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint16_le_inline(reader,val)) -#define gst_byte_reader_get_int16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int16_le_inline(reader,val)) -#define gst_byte_reader_get_uint16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint16_be_inline(reader,val)) -#define gst_byte_reader_get_int16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int16_be_inline(reader,val)) -#define gst_byte_reader_get_uint24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint24_le_inline(reader,val)) -#define gst_byte_reader_get_int24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int24_le_inline(reader,val)) -#define gst_byte_reader_get_uint24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint24_be_inline(reader,val)) -#define gst_byte_reader_get_int24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int24_be_inline(reader,val)) -#define gst_byte_reader_get_uint32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint32_le_inline(reader,val)) -#define gst_byte_reader_get_int32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int32_le_inline(reader,val)) -#define gst_byte_reader_get_uint32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint32_be_inline(reader,val)) -#define gst_byte_reader_get_int32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int32_be_inline(reader,val)) -#define gst_byte_reader_get_uint64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint64_le_inline(reader,val)) -#define gst_byte_reader_get_int64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int64_le_inline(reader,val)) -#define gst_byte_reader_get_uint64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_uint64_be_inline(reader,val)) -#define gst_byte_reader_get_int64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_int64_be_inline(reader,val)) - -#define gst_byte_reader_peek_uint8(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint8_inline(reader,val)) -#define gst_byte_reader_peek_int8(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int8_inline(reader,val)) -#define gst_byte_reader_peek_uint16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint16_le_inline(reader,val)) -#define gst_byte_reader_peek_int16_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int16_le_inline(reader,val)) -#define gst_byte_reader_peek_uint16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint16_be_inline(reader,val)) -#define gst_byte_reader_peek_int16_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int16_be_inline(reader,val)) -#define gst_byte_reader_peek_uint24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint24_le_inline(reader,val)) -#define gst_byte_reader_peek_int24_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int24_le_inline(reader,val)) -#define gst_byte_reader_peek_uint24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint24_be_inline(reader,val)) -#define gst_byte_reader_peek_int24_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int24_be_inline(reader,val)) -#define gst_byte_reader_peek_uint32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint32_le_inline(reader,val)) -#define gst_byte_reader_peek_int32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int32_le_inline(reader,val)) -#define gst_byte_reader_peek_uint32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint32_be_inline(reader,val)) -#define gst_byte_reader_peek_int32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int32_be_inline(reader,val)) -#define gst_byte_reader_peek_uint64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint64_le_inline(reader,val)) -#define gst_byte_reader_peek_int64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int64_le_inline(reader,val)) -#define gst_byte_reader_peek_uint64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_uint64_be_inline(reader,val)) -#define gst_byte_reader_peek_int64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_int64_be_inline(reader,val)) - -#define gst_byte_reader_get_float32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float32_le_inline(reader,val)) -#define gst_byte_reader_get_float32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float32_be_inline(reader,val)) -#define gst_byte_reader_get_float64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float64_le_inline(reader,val)) -#define gst_byte_reader_get_float64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_get_float64_be_inline(reader,val)) -#define gst_byte_reader_peek_float32_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float32_le_inline(reader,val)) -#define gst_byte_reader_peek_float32_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float32_be_inline(reader,val)) -#define gst_byte_reader_peek_float64_le(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float64_le_inline(reader,val)) -#define gst_byte_reader_peek_float64_be(reader,val) \ - G_LIKELY(_gst_byte_reader_peek_float64_be_inline(reader,val)) - -#endif /* GST_BYTE_READER_DISABLE_INLINES */ - -static inline gboolean -_gst_byte_reader_dup_data_inline (GstByteReader * reader, guint size, guint8 ** val) -{ - g_return_val_if_fail (reader != NULL, FALSE); - g_return_val_if_fail (val != NULL, FALSE); - - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) - return FALSE; - - *val = gst_byte_reader_dup_data_unchecked (reader, size); - return TRUE; -} - -static inline gboolean -_gst_byte_reader_get_data_inline (GstByteReader * reader, guint size, const guint8 ** val) -{ - g_return_val_if_fail (reader != NULL, FALSE); - g_return_val_if_fail (val != NULL, FALSE); - - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) - return FALSE; - - *val = gst_byte_reader_get_data_unchecked (reader, size); - return TRUE; -} - -static inline gboolean -_gst_byte_reader_peek_data_inline (const GstByteReader * reader, guint size, const guint8 ** val) -{ - g_return_val_if_fail (reader != NULL, FALSE); - g_return_val_if_fail (val != NULL, FALSE); - - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) - return FALSE; - - *val = gst_byte_reader_peek_data_unchecked (reader); - return TRUE; -} - -static inline guint -_gst_byte_reader_get_pos_inline (const GstByteReader * reader) -{ - g_return_val_if_fail (reader != NULL, 0); - - return _gst_byte_reader_get_pos_unchecked (reader); -} - -static inline gboolean -_gst_byte_reader_skip_inline (GstByteReader * reader, guint nbytes) -{ - g_return_val_if_fail (reader != NULL, FALSE); - - if (G_UNLIKELY (_gst_byte_reader_get_remaining_unchecked (reader) < nbytes)) - return FALSE; - - reader->byte += nbytes; - return TRUE; -} - -#ifndef GST_BYTE_READER_DISABLE_INLINES - -#define gst_byte_reader_dup_data(reader,size,val) \ - G_LIKELY(_gst_byte_reader_dup_data_inline(reader,size,val)) -#define gst_byte_reader_get_data(reader,size,val) \ - G_LIKELY(_gst_byte_reader_get_data_inline(reader,size,val)) -#define gst_byte_reader_peek_data(reader,size,val) \ - G_LIKELY(_gst_byte_reader_peek_data_inline(reader,size,val)) -#define gst_byte_reader_skip(reader,nbytes) \ - G_LIKELY(_gst_byte_reader_skip_inline(reader,nbytes)) - -#endif /* GST_BYTE_READER_DISABLE_INLINES */ - -G_END_DECLS - -#endif /* __GST_BYTE_READER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytewriter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytewriter.h deleted file mode 100644 index 079e16fc..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstbytewriter.h +++ /dev/null @@ -1,401 +0,0 @@ -/* GStreamer byte writer - * - * Copyright (C) 2009 Sebastian Dröge . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BYTE_WRITER_H__ -#define __GST_BYTE_WRITER_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_BYTE_WRITER(writer) ((GstByteWriter *) (writer)) - -/** - * GstByteWriter: - * @parent: #GstByteReader parent - * @alloc_size: Allocation size of the data - * @fixed: If %TRUE no reallocations are allowed - * @owned: If %FALSE no reallocations are allowed and copies of data are returned - * - * A byte writer instance. - */ -typedef struct { - GstByteReader parent; - - guint alloc_size; - - gboolean fixed; - gboolean owned; - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstByteWriter; - -GstByteWriter * gst_byte_writer_new (void) G_GNUC_MALLOC; -GstByteWriter * gst_byte_writer_new_with_size (guint size, gboolean fixed) G_GNUC_MALLOC; -GstByteWriter * gst_byte_writer_new_with_data (guint8 *data, guint size, gboolean initialized) G_GNUC_MALLOC; - -void gst_byte_writer_init (GstByteWriter *writer); -void gst_byte_writer_init_with_size (GstByteWriter *writer, guint size, gboolean fixed); -void gst_byte_writer_init_with_data (GstByteWriter *writer, guint8 *data, - guint size, gboolean initialized); - -void gst_byte_writer_free (GstByteWriter *writer); -guint8 * gst_byte_writer_free_and_get_data (GstByteWriter *writer); -GstBuffer * gst_byte_writer_free_and_get_buffer (GstByteWriter *writer) G_GNUC_MALLOC; - -void gst_byte_writer_reset (GstByteWriter *writer); -guint8 * gst_byte_writer_reset_and_get_data (GstByteWriter *writer); -GstBuffer * gst_byte_writer_reset_and_get_buffer (GstByteWriter *writer) G_GNUC_MALLOC; - -/** - * gst_byte_writer_get_pos: - * @writer: #GstByteWriter instance - * - * Returns: The current position of the read/write cursor - */ -/** - * gst_byte_writer_set_pos: - * @writer: #GstByteWriter instance - * @pos: new position - * - * Sets the current read/write cursor of @writer. The new position - * can only be between 0 and the current size. - * - * Returns: %TRUE if the new position could be set - */ -/** - * gst_byte_writer_get_size: - * @writer: #GstByteWriter instance - * - * Returns: The current, initialized size of the data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC guint gst_byte_writer_get_pos (const GstByteWriter *writer); -G_INLINE_FUNC gboolean gst_byte_writer_set_pos (GstByteWriter *writer, guint pos); -G_INLINE_FUNC guint gst_byte_writer_get_size (const GstByteWriter *writer); -#else -static inline guint -gst_byte_writer_get_pos (const GstByteWriter *writer) -{ - return gst_byte_reader_get_pos ((const GstByteReader *) writer); -} - -static inline gboolean -gst_byte_writer_set_pos (GstByteWriter *writer, guint pos) -{ - return gst_byte_reader_set_pos (GST_BYTE_READER (writer), pos); -} - -static inline guint -gst_byte_writer_get_size (const GstByteWriter *writer) -{ - return gst_byte_reader_get_size ((const GstByteReader *) writer); -} -#endif - -guint gst_byte_writer_get_remaining (const GstByteWriter *writer); -gboolean gst_byte_writer_ensure_free_space (GstByteWriter *writer, guint size); - -gboolean gst_byte_writer_put_uint8 (GstByteWriter *writer, guint8 val); -gboolean gst_byte_writer_put_int8 (GstByteWriter *writer, gint8 val); -gboolean gst_byte_writer_put_uint16_be (GstByteWriter *writer, guint16 val); -gboolean gst_byte_writer_put_uint16_le (GstByteWriter *writer, guint16 val); -gboolean gst_byte_writer_put_int16_be (GstByteWriter *writer, gint16 val); -gboolean gst_byte_writer_put_int16_le (GstByteWriter *writer, gint16 val); -gboolean gst_byte_writer_put_uint24_be (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_uint24_le (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_int24_be (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_int24_le (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_uint32_be (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_uint32_le (GstByteWriter *writer, guint32 val); -gboolean gst_byte_writer_put_int32_be (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_int32_le (GstByteWriter *writer, gint32 val); -gboolean gst_byte_writer_put_uint64_be (GstByteWriter *writer, guint64 val); -gboolean gst_byte_writer_put_uint64_le (GstByteWriter *writer, guint64 val); -gboolean gst_byte_writer_put_int64_be (GstByteWriter *writer, gint64 val); -gboolean gst_byte_writer_put_int64_le (GstByteWriter *writer, gint64 val); - -gboolean gst_byte_writer_put_float32_be (GstByteWriter *writer, gfloat val); -gboolean gst_byte_writer_put_float32_le (GstByteWriter *writer, gfloat val); -gboolean gst_byte_writer_put_float64_be (GstByteWriter *writer, gdouble val); -gboolean gst_byte_writer_put_float64_le (GstByteWriter *writer, gdouble val); - -gboolean gst_byte_writer_put_data (GstByteWriter *writer, const guint8 *data, guint size); -gboolean gst_byte_writer_fill (GstByteWriter *writer, guint8 value, guint size); -gboolean gst_byte_writer_put_string_utf8 (GstByteWriter *writer, const gchar *data); -gboolean gst_byte_writer_put_string_utf16 (GstByteWriter *writer, const guint16 *data); -gboolean gst_byte_writer_put_string_utf32 (GstByteWriter *writer, const guint32 *data); -gboolean gst_byte_writer_put_buffer (GstByteWriter *writer, GstBuffer * buffer, gsize offset, gssize size); - -/** - * gst_byte_writer_put_string: - * @writer: #GstByteWriter instance - * @data: (in) (array zero-terminated=1): Null terminated string - * - * Write a NUL-terminated string to @writer (including the terminator). The - * string is assumed to be in an 8-bit encoding (e.g. ASCII,UTF-8 or - * ISO-8859-1). - * - * Returns: %TRUE if the string could be written - */ -#define gst_byte_writer_put_string(writer, data) \ - gst_byte_writer_put_string_utf8(writer, data) - -static inline guint -_gst_byte_writer_next_pow2 (guint n) -{ - guint ret = 16; - - /* We start with 16, smaller allocations make no sense */ - - while (ret < n && ret > 0) - ret <<= 1; - - return ret ? ret : n; -} - -static inline gboolean -_gst_byte_writer_ensure_free_space_inline (GstByteWriter * writer, guint size) -{ - gpointer data; - - if (G_LIKELY (size <= writer->alloc_size - writer->parent.byte)) - return TRUE; - if (G_UNLIKELY (writer->fixed || !writer->owned)) - return FALSE; - if (G_UNLIKELY (writer->parent.byte > G_MAXUINT - size)) - return FALSE; - - writer->alloc_size = _gst_byte_writer_next_pow2 (writer->parent.byte + size); - data = g_try_realloc ((guint8 *) writer->parent.data, writer->alloc_size); - if (G_UNLIKELY (data == NULL)) - return FALSE; - - writer->parent.data = (guint8 *) data; - - return TRUE; -} - -#define __GST_BYTE_WRITER_CREATE_WRITE_FUNC(bits,type,name,write_func) \ -static inline void \ -gst_byte_writer_put_##name##_unchecked (GstByteWriter *writer, type val) \ -{ \ - guint8 *write_data; \ - \ - write_data = (guint8 *) writer->parent.data + writer->parent.byte; \ - write_func (write_data, val); \ - writer->parent.byte += bits/8; \ - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); \ -} \ -\ -static inline gboolean \ -_gst_byte_writer_put_##name##_inline (GstByteWriter *writer, type val) \ -{ \ - g_return_val_if_fail (writer != NULL, FALSE); \ - \ - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline(writer, bits/8))) \ - return FALSE; \ - \ - gst_byte_writer_put_##name##_unchecked (writer, val); \ - \ - return TRUE; \ -} - -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (8, guint8, uint8, GST_WRITE_UINT8) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (8, gint8, int8, GST_WRITE_UINT8) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, guint16, uint16_le, GST_WRITE_UINT16_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, guint16, uint16_be, GST_WRITE_UINT16_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, gint16, int16_le, GST_WRITE_UINT16_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (16, gint16, int16_be, GST_WRITE_UINT16_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, guint32, uint24_le, GST_WRITE_UINT24_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, guint32, uint24_be, GST_WRITE_UINT24_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, gint32, int24_le, GST_WRITE_UINT24_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (24, gint32, int24_be, GST_WRITE_UINT24_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, guint32, uint32_le, GST_WRITE_UINT32_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, guint32, uint32_be, GST_WRITE_UINT32_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gint32, int32_le, GST_WRITE_UINT32_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gint32, int32_be, GST_WRITE_UINT32_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, guint64, uint64_le, GST_WRITE_UINT64_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, guint64, uint64_be, GST_WRITE_UINT64_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gint64, int64_le, GST_WRITE_UINT64_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gint64, int64_be, GST_WRITE_UINT64_BE) - -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gfloat, float32_be, GST_WRITE_FLOAT_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (32, gfloat, float32_le, GST_WRITE_FLOAT_LE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gdouble, float64_be, GST_WRITE_DOUBLE_BE) -__GST_BYTE_WRITER_CREATE_WRITE_FUNC (64, gdouble, float64_le, GST_WRITE_DOUBLE_LE) - -#undef __GST_BYTE_WRITER_CREATE_WRITE_FUNC - -static inline void -gst_byte_writer_put_data_unchecked (GstByteWriter * writer, const guint8 * data, - guint size) -{ - memcpy ((guint8 *) & writer->parent.data[writer->parent.byte], data, size); - writer->parent.byte += size; - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); -} - -static inline gboolean -_gst_byte_writer_put_data_inline (GstByteWriter * writer, const guint8 * data, - guint size) -{ - g_return_val_if_fail (writer != NULL, FALSE); - - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline (writer, size))) - return FALSE; - - gst_byte_writer_put_data_unchecked (writer, data, size); - - return TRUE; -} - -static inline void -gst_byte_writer_fill_unchecked (GstByteWriter * writer, guint8 value, guint size) -{ - memset ((guint8 *) & writer->parent.data[writer->parent.byte], value, size); - writer->parent.byte += size; - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); -} - -static inline gboolean -_gst_byte_writer_fill_inline (GstByteWriter * writer, guint8 value, guint size) -{ - g_return_val_if_fail (writer != NULL, FALSE); - - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline (writer, size))) - return FALSE; - - gst_byte_writer_fill_unchecked (writer, value, size); - - return TRUE; -} - -static inline void -gst_byte_writer_put_buffer_unchecked (GstByteWriter * writer, GstBuffer * buffer, - gsize offset, gssize size) -{ - if (size == -1) { - size = gst_buffer_get_size (buffer); - - if (offset >= (gsize) size) - return; - - size -= offset; - } - - gst_buffer_extract (buffer, offset, - (guint8 *) & writer->parent.data[writer->parent.byte], size); - writer->parent.byte += size; - writer->parent.size = MAX (writer->parent.size, writer->parent.byte); -} - -static inline gboolean -_gst_byte_writer_put_buffer_inline (GstByteWriter * writer, GstBuffer * buffer, - gsize offset, gssize size) -{ - g_return_val_if_fail (writer != NULL, FALSE); - g_return_val_if_fail (size >= -1, FALSE); - - if (size == -1) { - size = gst_buffer_get_size (buffer); - - if (offset >= (gsize) size) - return TRUE; - - size -= offset; - } - - if (G_UNLIKELY (!_gst_byte_writer_ensure_free_space_inline (writer, size))) - return FALSE; - - gst_byte_writer_put_buffer_unchecked (writer, buffer, offset, size); - - return TRUE; -} - -#ifndef GST_BYTE_WRITER_DISABLE_INLINES - -/* we use defines here so we can add the G_LIKELY() */ - -#define gst_byte_writer_ensure_free_space(writer, size) \ - G_LIKELY (_gst_byte_writer_ensure_free_space_inline (writer, size)) -#define gst_byte_writer_put_uint8(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint8_inline (writer, val)) -#define gst_byte_writer_put_int8(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int8_inline (writer, val)) -#define gst_byte_writer_put_uint16_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint16_be_inline (writer, val)) -#define gst_byte_writer_put_uint16_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint16_le_inline (writer, val)) -#define gst_byte_writer_put_int16_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int16_be_inline (writer, val)) -#define gst_byte_writer_put_int16_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int16_le_inline (writer, val)) -#define gst_byte_writer_put_uint24_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint24_be_inline (writer, val)) -#define gst_byte_writer_put_uint24_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint24_le_inline (writer, val)) -#define gst_byte_writer_put_int24_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int24_be_inline (writer, val)) -#define gst_byte_writer_put_int24_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int24_le_inline (writer, val)) -#define gst_byte_writer_put_uint32_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint32_be_inline (writer, val)) -#define gst_byte_writer_put_uint32_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint32_le_inline (writer, val)) -#define gst_byte_writer_put_int32_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int32_be_inline (writer, val)) -#define gst_byte_writer_put_int32_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int32_le_inline (writer, val)) -#define gst_byte_writer_put_uint64_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint64_be_inline (writer, val)) -#define gst_byte_writer_put_uint64_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_uint64_le_inline (writer, val)) -#define gst_byte_writer_put_int64_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int64_be_inline (writer, val)) -#define gst_byte_writer_put_int64_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_int64_le_inline (writer, val)) - -#define gst_byte_writer_put_float32_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float32_be_inline (writer, val)) -#define gst_byte_writer_put_float32_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float32_le_inline (writer, val)) -#define gst_byte_writer_put_float64_be(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float64_be_inline (writer, val)) -#define gst_byte_writer_put_float64_le(writer, val) \ - G_LIKELY (_gst_byte_writer_put_float64_le_inline (writer, val)) - -#define gst_byte_writer_put_data(writer, data, size) \ - G_LIKELY (_gst_byte_writer_put_data_inline (writer, data, size)) -#define gst_byte_writer_fill(writer, val, size) \ - G_LIKELY (_gst_byte_writer_fill_inline (writer, val, size)) -#define gst_byte_writer_put_buffer(writer, buffer, offset, size) \ - G_LIKELY (_gst_byte_writer_put_buffer_inline (writer, buffer, offset, size)) - -#endif - -G_END_DECLS - -#endif /* __GST_BYTE_WRITER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstcollectpads.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstcollectpads.h deleted file mode 100644 index c33ca4f5..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstcollectpads.h +++ /dev/null @@ -1,358 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Wim Taymans - * Copyright (C) 2008 Mark Nauwelaerts - * - * gstcollectpads.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_COLLECT_PADS_H__ -#define __GST_COLLECT_PADS_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_COLLECT_PADS (gst_collect_pads_get_type()) -#define GST_COLLECT_PADS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_COLLECT_PADS,GstCollectPads)) -#define GST_COLLECT_PADS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_COLLECT_PADS,GstCollectPadsClass)) -#define GST_COLLECT_PADS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_COLLECT_PADS,GstCollectPadsClass)) -#define GST_IS_COLLECT_PADS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_COLLECT_PADS)) -#define GST_IS_COLLECT_PADS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_COLLECT_PADS)) - -typedef struct _GstCollectData GstCollectData; -typedef struct _GstCollectDataPrivate GstCollectDataPrivate; -typedef struct _GstCollectPads GstCollectPads; -typedef struct _GstCollectPadsPrivate GstCollectPadsPrivate; -typedef struct _GstCollectPadsClass GstCollectPadsClass; - -/** - * GstCollectDataDestroyNotify: - * @data: the #GstCollectData that will be freed - * - * A function that will be called when the #GstCollectData will be freed. - * It is passed the pointer to the structure and should free any custom - * memory and resources allocated for it. - */ -typedef void (*GstCollectDataDestroyNotify) (GstCollectData *data); - -/** - * GstCollectPadsStateFlags: - * @GST_COLLECT_PADS_STATE_EOS: Set if collectdata's pad is EOS. - * @GST_COLLECT_PADS_STATE_FLUSHING: Set if collectdata's pad is flushing. - * @GST_COLLECT_PADS_STATE_NEW_SEGMENT: Set if collectdata's pad received a - * new_segment event. - * @GST_COLLECT_PADS_STATE_WAITING: Set if collectdata's pad must be waited - * for when collecting. - * @GST_COLLECT_PADS_STATE_LOCKED: Set collectdata's pad WAITING state must - * not be changed. - * #GstCollectPadsStateFlags indicate private state of a collectdata('s pad). - */ -typedef enum { - GST_COLLECT_PADS_STATE_EOS = 1 << 0, - GST_COLLECT_PADS_STATE_FLUSHING = 1 << 1, - GST_COLLECT_PADS_STATE_NEW_SEGMENT = 1 << 2, - GST_COLLECT_PADS_STATE_WAITING = 1 << 3, - GST_COLLECT_PADS_STATE_LOCKED = 1 << 4 -} GstCollectPadsStateFlags; - -/** - * GST_COLLECT_PADS_STATE: - * @data: a #GstCollectData. - * - * A flags word containing #GstCollectPadsStateFlags flags set - * on this collected pad. - */ -#define GST_COLLECT_PADS_STATE(data) (((GstCollectData *) data)->state) -/** - * GST_COLLECT_PADS_STATE_IS_SET: - * @data: a #GstCollectData. - * @flag: the #GstCollectPadsStateFlags to check. - * - * Gives the status of a specific flag on a collected pad. - */ -#define GST_COLLECT_PADS_STATE_IS_SET(data,flag) !!(GST_COLLECT_PADS_STATE (data) & flag) -/** - * GST_COLLECT_PADS_STATE_SET: - * @data: a #GstCollectData. - * @flag: the #GstCollectPadsStateFlags to set. - * - * Sets a state flag on a collected pad. - */ -#define GST_COLLECT_PADS_STATE_SET(data,flag) (GST_COLLECT_PADS_STATE (data) |= flag) -/** - * GST_COLLECT_PADS_STATE_UNSET: - * @data: a #GstCollectData. - * @flag: the #GstCollectPadsStateFlags to clear. - * - * Clears a state flag on a collected pad. - */ -#define GST_COLLECT_PADS_STATE_UNSET(data,flag) (GST_COLLECT_PADS_STATE (data) &= ~(flag)) - -/** - * GstCollectData: - * @collect: owner #GstCollectPads - * @pad: #GstPad managed by this data - * @buffer: currently queued buffer. - * @pos: position in the buffer - * @segment: last segment received. - * - * Structure used by the collect_pads. - */ -struct _GstCollectData -{ - /* with STREAM_LOCK of @collect */ - GstCollectPads *collect; - GstPad *pad; - GstBuffer *buffer; - guint pos; - GstSegment segment; - - /*< private >*/ - /* state: bitfield for easier extension; - * eos, flushing, new_segment, waiting */ - GstCollectPadsStateFlags state; - - GstCollectDataPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstCollectPadsFunction: - * @pads: the #GstCollectPads that trigered the callback - * @user_data: user data passed to gst_collect_pads_set_function() - * - * A function that will be called when all pads have received data. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstCollectPadsFunction) (GstCollectPads *pads, gpointer user_data); - -/** - * GstCollectPadsBufferFunction: - * @pads: the #GstCollectPads that trigered the callback - * @data: the #GstCollectData of pad that has received the buffer - * @buffer: (transfer full): the #GstBuffer - * @user_data: user data passed to gst_collect_pads_set_buffer_function() - * - * A function that will be called when a (considered oldest) buffer can be muxed. - * If all pads have reached EOS, this function is called with NULL @buffer - * and NULL @data. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstCollectPadsBufferFunction) (GstCollectPads *pads, GstCollectData *data, - GstBuffer *buffer, gpointer user_data); - -/** - * GstCollectPadsCompareFunction: - * @pads: the #GstCollectPads that is comparing the timestamps - * @data1: the first #GstCollectData - * @timestamp1: the first timestamp - * @data2: the second #GstCollectData - * @timestamp2: the second timestamp - * @user_data: user data passed to gst_collect_pads_set_compare_function() - * - * A function for comparing two timestamps of buffers or newsegments collected on one pad. - * - * Returns: Integer less than zero when first timestamp is deemed older than the second one. - * Zero if the timestamps are deemed equally old. - * Integer greate than zero when second timestamp is deemed older than the first one. - */ -typedef gint (*GstCollectPadsCompareFunction) (GstCollectPads *pads, - GstCollectData * data1, GstClockTime timestamp1, - GstCollectData * data2, GstClockTime timestamp2, - gpointer user_data); - -/** - * GstCollectPadsEventFunction: - * @pads: the #GstCollectPads that trigered the callback - * @pad: the #GstPad that received an event - * @event: the #GstEvent received - * @user_data: user data passed to gst_collect_pads_set_event_function() - * - * A function that will be called while processing an event. It takes - * ownership of the event and is responsible for chaining up (to - * gst_collect_pads_event_default()) or dropping events (such typical cases - * being handled by the default handler). - * - * Returns: %TRUE if the pad could handle the event - */ -typedef gboolean (*GstCollectPadsEventFunction) (GstCollectPads *pads, GstCollectData * pad, - GstEvent * event, gpointer user_data); - - -/** - * GstCollectPadsQueryFunction: - * @pads: the #GstCollectPads that trigered the callback - * @pad: the #GstPad that received an event - * @query: the #GstEvent received - * @user_data: user data passed to gst_collect_pads_set_query_function() - * - * A function that will be called while processing a query. It takes - * ownership of the query and is responsible for chaining up (to - * events downstream (with gst_pad_event_default()). - * - * Returns: %TRUE if the pad could handle the event - */ -typedef gboolean (*GstCollectPadsQueryFunction) (GstCollectPads *pads, GstCollectData * pad, - GstQuery * query, gpointer user_data); - -/** - * GstCollectPadsClipFunction: - * @pads: a #GstCollectPads - * @data: a #GstCollectData - * @inbuffer: (transfer full): the input #GstBuffer - * @outbuffer: the output #GstBuffer - * @user_data: user data - * - * A function that will be called when @inbuffer is received on the pad managed - * by @data in the collecpad object @pads. - * - * The function should use the segment of @data and the negotiated media type on - * the pad to perform clipping of @inbuffer. - * - * This function takes ownership of @inbuffer and should output a buffer in - * @outbuffer or return %NULL in @outbuffer if the buffer should be dropped. - * - * Returns: a #GstFlowReturn that corresponds to the result of clipping. - */ -typedef GstFlowReturn (*GstCollectPadsClipFunction) (GstCollectPads *pads, GstCollectData *data, - GstBuffer *inbuffer, GstBuffer **outbuffer, - gpointer user_data); - -/** - * GST_COLLECT_PADS_GET_STREAM_LOCK: - * @pads: a #GstCollectPads - * - * Get the stream lock of @pads. The stream lock is used to coordinate and - * serialize execution among the various streams being collected, and in - * protecting the resources used to accomplish this. - */ -#define GST_COLLECT_PADS_GET_STREAM_LOCK(pads) (&((GstCollectPads *)pads)->stream_lock) -/** - * GST_COLLECT_PADS_STREAM_LOCK: - * @pads: a #GstCollectPads - * - * Lock the stream lock of @pads. - */ -#define GST_COLLECT_PADS_STREAM_LOCK(pads) g_rec_mutex_lock(GST_COLLECT_PADS_GET_STREAM_LOCK (pads)) -/** - * GST_COLLECT_PADS_STREAM_UNLOCK: - * @pads: a #GstCollectPads - * - * Unlock the stream lock of @pads. - */ -#define GST_COLLECT_PADS_STREAM_UNLOCK(pads) g_rec_mutex_unlock(GST_COLLECT_PADS_GET_STREAM_LOCK (pads)) - -/** - * GstCollectPads: - * @data: #GList of #GstCollectData managed by this #GstCollectPads. - * - * Collectpads object. - */ -struct _GstCollectPads { - GstObject object; - - /*< public >*/ /* with LOCK and/or STREAM_LOCK */ - GSList *data; /* list of CollectData items */ - - /*< private >*/ - GRecMutex stream_lock; /* used to serialize collection among several streams */ - - GstCollectPadsPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstCollectPadsClass { - GstObjectClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_collect_pads_get_type(void); - -/* creating the object */ -GstCollectPads* gst_collect_pads_new (void); - -/* set the callbacks */ -void gst_collect_pads_set_function (GstCollectPads *pads, - GstCollectPadsFunction func, - gpointer user_data); -void gst_collect_pads_set_buffer_function (GstCollectPads *pads, - GstCollectPadsBufferFunction func, - gpointer user_data); -void gst_collect_pads_set_event_function (GstCollectPads *pads, - GstCollectPadsEventFunction func, - gpointer user_data); -void gst_collect_pads_set_query_function (GstCollectPads *pads, - GstCollectPadsQueryFunction func, - gpointer user_data); -void gst_collect_pads_set_compare_function (GstCollectPads *pads, - GstCollectPadsCompareFunction func, - gpointer user_data); -void gst_collect_pads_set_clip_function (GstCollectPads *pads, - GstCollectPadsClipFunction clipfunc, - gpointer user_data); - -/* pad management */ -GstCollectData* gst_collect_pads_add_pad (GstCollectPads *pads, GstPad *pad, guint size, - GstCollectDataDestroyNotify destroy_notify, - gboolean lock); -gboolean gst_collect_pads_remove_pad (GstCollectPads *pads, GstPad *pad); - -/* start/stop collection */ -void gst_collect_pads_start (GstCollectPads *pads); -void gst_collect_pads_stop (GstCollectPads *pads); -void gst_collect_pads_set_flushing (GstCollectPads *pads, gboolean flushing); - -/* get collected buffers */ -GstBuffer* gst_collect_pads_peek (GstCollectPads *pads, GstCollectData *data); -GstBuffer* gst_collect_pads_pop (GstCollectPads *pads, GstCollectData *data); - -/* get collected bytes */ -guint gst_collect_pads_available (GstCollectPads *pads); -guint gst_collect_pads_flush (GstCollectPads *pads, GstCollectData *data, - guint size); -GstBuffer* gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data, - guint size); -GstBuffer* gst_collect_pads_take_buffer (GstCollectPads * pads, GstCollectData * data, - guint size); - -/* setting and unsetting waiting mode */ -void gst_collect_pads_set_waiting (GstCollectPads *pads, GstCollectData *data, - gboolean waiting); - -/* convenience helper */ -GstFlowReturn gst_collect_pads_clip_running_time (GstCollectPads * pads, - GstCollectData * cdata, - GstBuffer * buf, GstBuffer ** outbuf, - gpointer user_data); - -/* default handlers */ -gboolean gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data, - GstEvent * event, gboolean discard); -gboolean gst_collect_pads_query_default (GstCollectPads * pads, GstCollectData * data, - GstQuery * query, gboolean discard); - - -G_END_DECLS - -#endif /* __GST_COLLECT_PADS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstpushsrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstpushsrc.h deleted file mode 100644 index b936d83f..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gstpushsrc.h +++ /dev/null @@ -1,73 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstpushsrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PUSH_SRC_H__ -#define __GST_PUSH_SRC_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PUSH_SRC (gst_push_src_get_type()) -#define GST_PUSH_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PUSH_SRC,GstPushSrc)) -#define GST_PUSH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PUSH_SRC,GstPushSrcClass)) -#define GST_PUSH_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PUSH_SRC, GstPushSrcClass)) -#define GST_IS_PUSH_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PUSH_SRC)) -#define GST_IS_PUSH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PUSH_SRC)) - -typedef struct _GstPushSrc GstPushSrc; -typedef struct _GstPushSrcClass GstPushSrcClass; - -/** - * GstPushSrc: - * - * The opaque #GstPushSrc data structure. - */ -struct _GstPushSrc { - GstBaseSrc parent; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPushSrcClass { - GstBaseSrcClass parent_class; - - /* ask the subclass to create a buffer, the default implementation - * uses alloc and fill */ - GstFlowReturn (*create) (GstPushSrc *src, GstBuffer **buf); - /* allocate memory for a buffer */ - GstFlowReturn (*alloc) (GstPushSrc *src, GstBuffer **buf); - /* ask the subclass to fill a buffer */ - GstFlowReturn (*fill) (GstPushSrc *src, GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_push_src_get_type(void); - -G_END_DECLS - -#endif /* __GST_PUSH_SRC_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gsttypefindhelper.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gsttypefindhelper.h deleted file mode 100644 index a61c0428..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/base/gsttypefindhelper.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * Copyright (C) 2000,2005 Wim Taymans - * Copyright (C) 2006 Tim-Philipp Müller - * - * gsttypefindhelper.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TYPEFINDHELPER_H__ -#define __GST_TYPEFINDHELPER_H__ - -#include - -G_BEGIN_DECLS - -GstCaps * gst_type_find_helper (GstPad *src, guint64 size); - -GstCaps * gst_type_find_helper_for_data (GstObject *obj, - const guint8 *data, - gsize size, - GstTypeFindProbability *prob); -GstCaps * gst_type_find_helper_for_buffer (GstObject *obj, - GstBuffer *buf, - GstTypeFindProbability *prob); - -GstCaps * gst_type_find_helper_for_extension (GstObject * obj, - const gchar * extension); - -/** - * GstTypeFindHelperGetRangeFunction: - * @obj: a #GstObject that will handle the getrange request - * @parent: the parent of @obj or NULL - * @offset: the offset of the range - * @length: the length of the range - * @buffer: a memory location to hold the result buffer - * - * This function will be called by gst_type_find_helper_get_range() when - * typefinding functions request to peek at the data of a stream at certain - * offsets. If this function returns GST_FLOW_OK, the result buffer will be - * stored in @buffer. The contents of @buffer is invalid for any other - * return value. - * - * This function is supposed to behave exactly like a #GstPadGetRangeFunction. - * - * Returns: GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstTypeFindHelperGetRangeFunction) (GstObject *obj, - GstObject *parent, - guint64 offset, - guint length, - GstBuffer **buffer); - -GstCaps * gst_type_find_helper_get_range (GstObject *obj, - GstObject *parent, - GstTypeFindHelperGetRangeFunction func, - guint64 size, - const gchar *extension, - GstTypeFindProbability *prob); - -G_END_DECLS - -#endif /* __GST_TYPEFINDHELPER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h deleted file mode 100644 index d4979f56..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstbasecamerasrc.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2010 Texas Instruments, Inc - * Copyright (C) 2011 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BASE_CAMERA_SRC_H__ -#define __GST_BASE_CAMERA_SRC_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "GstBaseCameraSrc is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include -#include "gstcamerabin-enum.h" -#include "gstcamerabinpreview.h" - -G_BEGIN_DECLS -#define GST_TYPE_BASE_CAMERA_SRC \ - (gst_base_camera_src_get_type()) -#define GST_BASE_CAMERA_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_CAMERA_SRC,GstBaseCameraSrc)) -#define GST_BASE_CAMERA_SRC_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_CAMERA_SRC, GstBaseCameraSrcClass)) -#define GST_BASE_CAMERA_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_CAMERA_SRC,GstBaseCameraSrcClass)) -#define GST_IS_BASE_CAMERA_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_CAMERA_SRC)) -#define GST_IS_BASE_CAMERA_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_CAMERA_SRC)) -#define GST_BASE_CAMERA_SRC_CAST(obj) \ - ((GstBaseCameraSrc *) (obj)) -GType gst_base_camera_src_get_type (void); - -typedef struct _GstBaseCameraSrc GstBaseCameraSrc; -typedef struct _GstBaseCameraSrcClass GstBaseCameraSrcClass; - -#define GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME "vfsrc" -#define GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME "imgsrc" -#define GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME "vidsrc" - -#define GST_BASE_CAMERA_SRC_PREVIEW_MESSAGE_NAME "preview-image" - -/** - * GstBaseCameraSrc: - */ -struct _GstBaseCameraSrc -{ - GstBin parent; - - GstCameraBinMode mode; - - gboolean capturing; - GMutex capturing_mutex; - - /* Preview convert pipeline */ - GstCaps *preview_caps; - gboolean post_preview; - GstElement *preview_filter; - GstCameraBinPreviewPipelineData *preview_pipeline; - - /* Resolution of the buffers configured to camerabin */ - gint width; - gint height; - - gfloat zoom; - gfloat max_zoom; - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - - -/** - * GstBaseCameraSrcClass: - * @construct_pipeline: construct pipeline - * @setup_pipeline: configure pipeline for the chosen settings - * @set_zoom: set the zoom - * @set_mode: set the mode - */ -struct _GstBaseCameraSrcClass -{ - GstBinClass parent; - - /* Construct pipeline. (called in GST_STATE_CHANGE_NULL_TO_READY) Optional. */ - gboolean (*construct_pipeline) (GstBaseCameraSrc *self); - - /* (called in GST_STATE_CHANGE_READY_TO_PAUSED). Optional. */ - gboolean (*setup_pipeline) (GstBaseCameraSrc *self); - - /* Set the zoom. If set, called when changing 'zoom' property. Optional. */ - void (*set_zoom) (GstBaseCameraSrc *self, gfloat zoom); - - /* Set the mode. If set, called when changing 'mode' property. Optional. */ - gboolean (*set_mode) (GstBaseCameraSrc *self, - GstCameraBinMode mode); - - /* Set preview caps. If set, called called when setting new 'preview-caps'. Optional. */ - gboolean (*set_preview) (GstBaseCameraSrc *self, - GstCaps *preview_caps); - - /* Called by the handler for 'start-capture'. Mandatory. */ - gboolean (*start_capture) (GstBaseCameraSrc * src); - - /* Called by the handler for 'stop-capture'. Mandatory. */ - void (*stop_capture) (GstBaseCameraSrc * src); - - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - - -#define MIN_ZOOM 1.0f -#define MAX_ZOOM 10.0f -#define ZOOM_1X MIN_ZOOM - -gboolean gst_base_camera_src_set_mode (GstBaseCameraSrc *self, GstCameraBinMode mode); -void gst_base_camera_src_setup_zoom (GstBaseCameraSrc * self); -void gst_base_camera_src_setup_preview (GstBaseCameraSrc * self, GstCaps * preview_caps); -void gst_base_camera_src_finish_capture (GstBaseCameraSrc *self); - - -void gst_base_camera_src_post_preview (GstBaseCameraSrc *self, GstSample * sample); -// XXX add methods to get/set img capture and vid capture caps.. - -#endif /* __GST_BASE_CAMERA_SRC_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h deleted file mode 100644 index c6dbf043..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabin-enum.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2009 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CAMERABIN_ENUM_H__ -#define __GST_CAMERABIN_ENUM_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "camerabin enums are unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define DEFAULT_WIDTH 640 -#define DEFAULT_HEIGHT 480 -#define DEFAULT_CAPTURE_WIDTH 800 -#define DEFAULT_CAPTURE_HEIGHT 600 -#define DEFAULT_FPS_N 0 /* makes it use the default */ -#define DEFAULT_FPS_D 1 -#define DEFAULT_ZOOM MIN_ZOOM - - -/** - * GstCameraBinMode: - * @MODE_IMAGE: image capture - * @MODE_VIDEO: video capture - * - * Capture mode to use. - */ -typedef enum -{ - /* MODE_PREVIEW = 0, No use for this */ - MODE_IMAGE = 1, - MODE_VIDEO = 2, -} GstCameraBinMode; - - -#define GST_TYPE_CAMERABIN_MODE (gst_camerabin_mode_get_type ()) -GType gst_camerabin_mode_get_type (void); - -G_END_DECLS - -#endif /* #ifndef __GST_CAMERABIN_ENUM_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h deleted file mode 100644 index 6627cf66..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/basecamerabinsrc/gstcamerabinpreview.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2008 Nokia Corporation - * Copyright (C) 2010 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __CAMERABIN_PREVIEW_H_ -#define __CAMERABIN_PREVIEW_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "camera bin preview is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -typedef struct -{ - GstElement *pipeline; - - GstElement *appsrc; - GstElement *filter; - GstElement *appsink; - GstElement *vscale; - - GstElement *element; - - GstCaps *pending_preview_caps; - guint processing; - GMutex processing_lock; - GCond processing_cond; - -} GstCameraBinPreviewPipelineData; - -GstCameraBinPreviewPipelineData *gst_camerabin_create_preview_pipeline (GstElement * element, GstElement * filter); -void gst_camerabin_destroy_preview_pipeline (GstCameraBinPreviewPipelineData * preview); -gboolean gst_camerabin_preview_pipeline_post (GstCameraBinPreviewPipelineData * preview, GstSample * sample); -void gst_camerabin_preview_set_caps (GstCameraBinPreviewPipelineData * preview, GstCaps * caps); -gboolean gst_camerabin_preview_set_filter (GstCameraBinPreviewPipelineData * preview, GstElement * filter); - -#endif /* #ifndef __CAMERABIN_PREVIEW_H_ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h deleted file mode 100644 index 6698922e..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gsth264parser.h +++ /dev/null @@ -1,723 +0,0 @@ -/* Gstreamer - * Copyright (C) <2011> Intel Corporation - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * Some bits C-c,C-v'ed and s/4/3 from h264parse and videoparsers/h264parse.c: - * Copyright (C) <2010> Mark Nauwelaerts - * Copyright (C) <2010> Collabora Multimedia - * Copyright (C) <2010> Nokia Corporation - * - * (C) 2005 Michal Benes - * (C) 2008 Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_H264_PARSER_H__ -#define __GST_H264_PARSER_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The H.264 parsing library is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define GST_H264_MAX_SPS_COUNT 32 -#define GST_H264_MAX_PPS_COUNT 256 - -#define GST_H264_IS_P_SLICE(slice) (((slice)->type % 5) == GST_H264_P_SLICE) -#define GST_H264_IS_B_SLICE(slice) (((slice)->type % 5) == GST_H264_B_SLICE) -#define GST_H264_IS_I_SLICE(slice) (((slice)->type % 5) == GST_H264_I_SLICE) -#define GST_H264_IS_SP_SLICE(slice) (((slice)->type % 5) == GST_H264_SP_SLICE) -#define GST_H264_IS_SI_SLICE(slice) (((slice)->type % 5) == GST_H264_SI_SLICE) - -/** - * GstH264NalUnitType: - * @GST_H264_NAL_UNKNOWN: Unknown nal type - * @GST_H264_NAL_SLICE: Slice nal - * @GST_H264_NAL_SLICE_DPA: DPA slice nal - * @GST_H264_NAL_SLICE_DPB: DPB slice nal - * @GST_H264_NAL_SLICE_DPC: DPC slice nal - * @GST_H264_NAL_SLICE_IDR: DPR slice nal - * @GST_H264_NAL_SEI: Supplemental enhancement information (SEI) nal unit - * @GST_H264_NAL_SPS: Sequence parameter set (SPS) nal unit - * @GST_H264_NAL_PPS: Picture parameter set (PPS) nal unit - * @GST_H264_NAL_AU_DELIMITER: Access unit (AU) delimiter nal unit - * @GST_H264_NAL_SEQ_END: End of sequence nal unit - * @GST_H264_NAL_STREAM_END: End of stream nal unit - * @GST_H264_NAL_FILLER_DATA: Filler data nal lunit - * - * Indicates the type of H264 Nal Units - */ -typedef enum -{ - GST_H264_NAL_UNKNOWN = 0, - GST_H264_NAL_SLICE = 1, - GST_H264_NAL_SLICE_DPA = 2, - GST_H264_NAL_SLICE_DPB = 3, - GST_H264_NAL_SLICE_DPC = 4, - GST_H264_NAL_SLICE_IDR = 5, - GST_H264_NAL_SEI = 6, - GST_H264_NAL_SPS = 7, - GST_H264_NAL_PPS = 8, - GST_H264_NAL_AU_DELIMITER = 9, - GST_H264_NAL_SEQ_END = 10, - GST_H264_NAL_STREAM_END = 11, - GST_H264_NAL_FILLER_DATA = 12 -} GstH264NalUnitType; - -/** - * GstH264ParserResult: - * @GST_H264_PARSER_OK: The parsing succeded - * @GST_H264_PARSER_BROKEN_DATA: The data to parse is broken - * @GST_H264_PARSER_BROKEN_LINK: The link to structure needed for the parsing couldn't be found - * @GST_H264_PARSER_ERROR: An error accured when parsing - * @GST_H264_PARSER_NO_NAL: No nal found during the parsing - * @GST_H264_PARSER_NO_NAL_END: Start of the nal found, but not the end. - * - * The result of parsing H264 data. - */ -typedef enum -{ - GST_H264_PARSER_OK, - GST_H264_PARSER_BROKEN_DATA, - GST_H264_PARSER_BROKEN_LINK, - GST_H264_PARSER_ERROR, - GST_H264_PARSER_NO_NAL, - GST_H264_PARSER_NO_NAL_END -} GstH264ParserResult; - -/** - * GstH264SEIPayloadType: - * @GST_H264_SEI_BUF_PERIOD: Buffering Period SEI Message - * @GST_H264_SEI_PIC_TIMING: Picture Timing SEI Message - * ... - * - * The type of SEI message. - */ -typedef enum -{ - GST_H264_SEI_BUF_PERIOD = 0, - GST_H264_SEI_PIC_TIMING = 1 - /* and more... */ -} GstH264SEIPayloadType; - -/** - * GstH264SEIPicStructType: - * @GST_H264_SEI_PIC_STRUCT_FRAME: Picture is a frame - * @GST_H264_SEI_PIC_STRUCT_TOP_FIELD: Top field of frame - * @GST_H264_SEI_PIC_STRUCT_BOTTOM_FIELD: Botom field of frame - * @GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM: Top bottom field of frame - * @GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP: bottom top field of frame - * @GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP: top bottom top field of frame - * @GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: bottom top bottom field of frame - * @GST_H264_SEI_PIC_STRUCT_FRAME_DOUBLING: indicates that the frame should - * be displayed two times consecutively - * @GST_H264_SEI_PIC_STRUCT_FRAME_TRIPLING: indicates that the frame should be - * displayed three times consecutively - * - * SEI pic_struct type - */ -typedef enum -{ - GST_H264_SEI_PIC_STRUCT_FRAME = 0, - GST_H264_SEI_PIC_STRUCT_TOP_FIELD = 1, - GST_H264_SEI_PIC_STRUCT_BOTTOM_FIELD = 2, - GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM = 3, - GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP = 4, - GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP = 5, - GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM = 6, - GST_H264_SEI_PIC_STRUCT_FRAME_DOUBLING = 7, - GST_H264_SEI_PIC_STRUCT_FRAME_TRIPLING = 8 -} GstH264SEIPicStructType; - -/** - * GstH264SliceType: - * - * Type of Picture slice - */ - -typedef enum -{ - GST_H264_P_SLICE = 0, - GST_H264_B_SLICE = 1, - GST_H264_I_SLICE = 2, - GST_H264_SP_SLICE = 3, - GST_H264_SI_SLICE = 4, - GST_H264_S_P_SLICE = 5, - GST_H264_S_B_SLICE = 6, - GST_H264_S_I_SLICE = 7, - GST_H264_S_SP_SLICE = 8, - GST_H264_S_SI_SLICE = 9 -} GstH264SliceType; - -typedef struct _GstH264NalParser GstH264NalParser; - -typedef struct _GstH264NalUnit GstH264NalUnit; - -typedef struct _GstH264SPS GstH264SPS; -typedef struct _GstH264PPS GstH264PPS; -typedef struct _GstH264HRDParams GstH264HRDParams; -typedef struct _GstH264VUIParams GstH264VUIParams; - -typedef struct _GstH264RefPicListModification GstH264RefPicListModification; -typedef struct _GstH264DecRefPicMarking GstH264DecRefPicMarking; -typedef struct _GstH264RefPicMarking GstH264RefPicMarking; -typedef struct _GstH264PredWeightTable GstH264PredWeightTable; -typedef struct _GstH264SliceHdr GstH264SliceHdr; - -typedef struct _GstH264ClockTimestamp GstH264ClockTimestamp; -typedef struct _GstH264PicTiming GstH264PicTiming; -typedef struct _GstH264BufferingPeriod GstH264BufferingPeriod; -typedef struct _GstH264SEIMessage GstH264SEIMessage; - -/** - * GstH264NalUnit: - * @ref_idc: not equal to 0 specifies that the content of the NAL unit contains a sequence - * parameter set, a sequence * parameter set extension, a subset sequence parameter set, a - * picture parameter set, a slice of a reference picture, a slice data partition of a - * reference picture, or a prefix NAL unit preceding a slice of a reference picture. - * @type: A #GstH264NalUnitType - * @idr_pic_flag: calculated idr_pic_flag - * @size: The size of the nal unit starting from @offset - * @offset: The offset of the actual start of the nal unit - * @sc_offset:The offset of the start code of the nal unit - * @valid: If the nal unit is valid, which mean it has - * already been parsed - * @data: The data from which the Nalu has been parsed - * - * Structure defining the Nal unit headers - */ -struct _GstH264NalUnit -{ - guint16 ref_idc; - guint16 type; - - /* calculated values */ - guint8 idr_pic_flag; - guint size; - guint offset; - guint sc_offset; - gboolean valid; - - guint8 *data; -}; - -/** - * GstH264HRDParams: - * @cpb_cnt_minus1: plus 1 specifies the number of alternative - * CPB specifications in the bitstream - * @bit_rate_scale: specifies the maximum input bit rate of the - * SchedSelIdx-th CPB - * @cpb_size_scale: specifies the CPB size of the SchedSelIdx-th CPB - * @guint32 bit_rate_value_minus1: specifies the maximum input bit rate for the - * SchedSelIdx-th CPB - * @cpb_size_value_minus1: is used together with cpb_size_scale to specify the - * SchedSelIdx-th CPB size - * @cbr_flag: Specifies if running in itermediate bitrate mode or constant - * @initial_cpb_removal_delay_length_minus1: specifies the length in bits of - * the cpb_removal_delay syntax element - * @cpb_removal_delay_length_minus1: specifies the length in bits of the - * dpb_output_delay syntax element - * @dpb_output_delay_length_minus1: >0 specifies the length in bits of the time_offset syntax element. - * =0 specifies that the time_offset syntax element is not present - * @time_offset_length: Length of the time offset - * - * Defines the HRD parameters - */ -struct _GstH264HRDParams -{ - guint8 cpb_cnt_minus1; - guint8 bit_rate_scale; - guint8 cpb_size_scale; - - guint32 bit_rate_value_minus1[32]; - guint32 cpb_size_value_minus1[32]; - guint8 cbr_flag[32]; - - guint8 initial_cpb_removal_delay_length_minus1; - guint8 cpb_removal_delay_length_minus1; - guint8 dpb_output_delay_length_minus1; - guint8 time_offset_length; -}; - -/** - * GstH264VUIParams: - * @aspect_ratio_info_present_flag: %TRUE specifies that aspect_ratio_idc is present. - * %FALSE specifies that aspect_ratio_idc is not present - * @aspect_ratio_idc specifies the value of the sample aspect ratio of the luma samples - * @sar_width indicates the horizontal size of the sample aspect ratio - * @sar_height indicates the vertical size of the sample aspect ratio - * @overscan_info_present_flag: %TRUE overscan_appropriate_flag is present %FALSE otherwize - * @overscan_appropriate_flag: %TRUE indicates that the cropped decoded pictures - * output are suitable for display using overscan. %FALSE the cropped decoded pictures - * output contain visually important information - * @video_signal_type_present_flag: %TRUE specifies that video_format, video_full_range_flag and - * colour_description_present_flag are present. - * @video_format: indicates the representation of the picture - * @video_full_range_flag: indicates the black level and range of the luma and chroma signals - * @colour_description_present_flag: %TRUE specifies that colour_primaries, - * transfer_characteristics and matrix_coefficients are present - * @colour_primaries: indicates the chromaticity coordinates of the source primaries - * @transfer_characteristics: indicates the opto-electronic transfer characteristic - * @matrix_coefficients: describes the matrix coefficients used in deriving luma and chroma signals - * @chroma_loc_info_present_flag: %TRUE specifies that chroma_sample_loc_type_top_field and - * chroma_sample_loc_type_bottom_field are present, %FALSE otherwize - * @chroma_sample_loc_type_top_field: specify the location of chroma for top field - * @chroma_sample_loc_type_bottom_field specify the location of chroma for bottom field - * @timing_info_present_flag: %TRUE specifies that num_units_in_tick, - * time_scale and fixed_frame_rate_flag are present in the bitstream - * @num_units_in_tick: is the number of time units of a clock operating at the frequency time_scale Hz - * time_scale: is the number of time units that pass in one second - * @fixed_frame_rate_flag: %TRUE indicates that the temporal distance between the HRD output times - * of any two consecutive pictures in output order is constrained as specified in the spec, %FALSE - * otherwize. - * @nal_hrd_parameters_present_flag: %TRUE if nal hrd parameters present in the bitstream - * @vcl_hrd_parameters_present_flag: %TRUE if nal vlc hrd parameters present in the bitstream - * @low_delay_hrd_flag: specifies the HRD operational mode - * @pic_struct_present_flag: %TRUE specifies that picture timing SEI messages are present or not - * @bitstream_restriction_flag: %TRUE specifies that the following coded video sequence bitstream restriction - * parameters are present - * @motion_vectors_over_pic_boundaries_flag: %FALSE indicates that no sample outside the - * picture boundaries and no sample at a fractional sample position, %TRUE indicates that one or more - * samples outside picture boundaries may be used in inter prediction - * @max_bytes_per_pic_denom: indicates a number of bytes not exceeded by the sum of the sizes of - * the VCL NAL units associated with any coded picture in the coded video sequence. - * @max_bits_per_mb_denom: indicates the maximum number of coded bits of macroblock_layer - * @log2_max_mv_length_horizontal: indicate the maximum absolute value of a decoded horizontal - * motion vector component - * @log2_max_mv_length_vertical: indicate the maximum absolute value of a decoded vertical - * motion vector component - * @num_reorder_frames: indicates the maximum number of frames, complementary field pairs, - * or non-paired fields that precede any frame, - * @max_dec_frame_buffering: specifies the required size of the HRD decoded picture buffer in - * units of frame buffers. - * - * The structure representing the VUI parameters. - */ -struct _GstH264VUIParams -{ - guint8 aspect_ratio_info_present_flag; - guint8 aspect_ratio_idc; - /* if aspect_ratio_idc == 255 */ - guint16 sar_width; - guint16 sar_height; - - guint8 overscan_info_present_flag; - /* if overscan_info_present_flag */ - guint8 overscan_appropriate_flag; - - guint8 video_signal_type_present_flag; - guint8 video_format; - guint8 video_full_range_flag; - guint8 colour_description_present_flag; - guint8 colour_primaries; - guint8 transfer_characteristics; - guint8 matrix_coefficients; - - guint8 chroma_loc_info_present_flag; - guint8 chroma_sample_loc_type_top_field; - guint8 chroma_sample_loc_type_bottom_field; - - guint8 timing_info_present_flag; - /* if timing_info_present_flag */ - guint32 num_units_in_tick; - guint32 time_scale; - guint8 fixed_frame_rate_flag; - - guint8 nal_hrd_parameters_present_flag; - /* if nal_hrd_parameters_present_flag */ - GstH264HRDParams nal_hrd_parameters; - - guint8 vcl_hrd_parameters_present_flag; - /* if nal_hrd_parameters_present_flag */ - GstH264HRDParams vcl_hrd_parameters; - - guint8 low_delay_hrd_flag; - guint8 pic_struct_present_flag; - - guint8 bitstream_restriction_flag; - /* if bitstream_restriction_flag */ - guint8 motion_vectors_over_pic_boundaries_flag; - guint32 max_bytes_per_pic_denom; - guint32 max_bits_per_mb_denom; - guint32 log2_max_mv_length_horizontal; - guint32 log2_max_mv_length_vertical; - guint32 num_reorder_frames; - guint32 max_dec_frame_buffering; - - /* calculated values */ - guint par_n; - guint par_d; -}; - -/** - * GstH264SPS: - * @id: The ID of the sequence parameter set - * @profile_idc: indicate the profile to which the coded video sequence conforms - * - * H264 Sequence Parameter Set (SPS) - */ -struct _GstH264SPS -{ - gint id; - - guint8 profile_idc; - guint8 constraint_set0_flag; - guint8 constraint_set1_flag; - guint8 constraint_set2_flag; - guint8 constraint_set3_flag; - guint8 level_idc; - - guint8 chroma_format_idc; - guint8 separate_colour_plane_flag; - guint8 bit_depth_luma_minus8; - guint8 bit_depth_chroma_minus8; - guint8 qpprime_y_zero_transform_bypass_flag; - - guint8 scaling_matrix_present_flag; - guint8 scaling_lists_4x4[6][16]; - guint8 scaling_lists_8x8[6][64]; - - guint8 log2_max_frame_num_minus4; - guint8 pic_order_cnt_type; - - /* if pic_order_cnt_type == 0 */ - guint8 log2_max_pic_order_cnt_lsb_minus4; - - /* else if pic_order_cnt_type == 1 */ - guint8 delta_pic_order_always_zero_flag; - gint32 offset_for_non_ref_pic; - gint32 offset_for_top_to_bottom_field; - guint8 num_ref_frames_in_pic_order_cnt_cycle; - gint32 offset_for_ref_frame[255]; - - guint32 num_ref_frames; - guint8 gaps_in_frame_num_value_allowed_flag; - guint32 pic_width_in_mbs_minus1; - guint32 pic_height_in_map_units_minus1; - guint8 frame_mbs_only_flag; - - guint8 mb_adaptive_frame_field_flag; - - guint8 direct_8x8_inference_flag; - - guint8 frame_cropping_flag; - - /* if frame_cropping_flag */ - guint32 frame_crop_left_offset; - guint32 frame_crop_right_offset; - guint32 frame_crop_top_offset; - guint32 frame_crop_bottom_offset; - - guint8 vui_parameters_present_flag; - /* if vui_parameters_present_flag */ - GstH264VUIParams vui_parameters; - - /* calculated values */ - guint8 chroma_array_type; - guint32 max_frame_num; - gint width, height; - gint fps_num, fps_den; - gboolean valid; -}; - -/** - * GstH264PPS: - * - * H264 Picture Parameter Set - */ -struct _GstH264PPS -{ - gint id; - - GstH264SPS *sequence; - - guint8 entropy_coding_mode_flag; - guint8 pic_order_present_flag; - - guint32 num_slice_groups_minus1; - - /* if num_slice_groups_minus1 > 0 */ - guint8 slice_group_map_type; - /* and if slice_group_map_type == 0 */ - guint32 run_length_minus1[8]; - /* or if slice_group_map_type == 2 */ - guint32 top_left[8]; - guint32 bottom_right[8]; - /* or if slice_group_map_type == (3, 4, 5) */ - guint8 slice_group_change_direction_flag; - guint32 slice_group_change_rate_minus1; - /* or if slice_group_map_type == 6 */ - guint32 pic_size_in_map_units_minus1; - guint8 *slice_group_id; - - guint8 num_ref_idx_l0_active_minus1; - guint8 num_ref_idx_l1_active_minus1; - guint8 weighted_pred_flag; - guint8 weighted_bipred_idc; - gint8 pic_init_qp_minus26; - gint8 pic_init_qs_minus26; - gint8 chroma_qp_index_offset; - guint8 deblocking_filter_control_present_flag; - guint8 constrained_intra_pred_flag; - guint8 redundant_pic_cnt_present_flag; - - guint8 transform_8x8_mode_flag; - - guint8 scaling_lists_4x4[6][16]; - guint8 scaling_lists_8x8[6][64]; - - guint8 second_chroma_qp_index_offset; - - gboolean valid; -}; - -struct _GstH264RefPicListModification -{ - guint8 modification_of_pic_nums_idc; - union - { - /* if modification_of_pic_nums_idc == 0 || 1 */ - guint32 abs_diff_pic_num_minus1; - /* if modification_of_pic_nums_idc == 2 */ - guint32 long_term_pic_num; - } value; -}; - -struct _GstH264PredWeightTable -{ - guint8 luma_log2_weight_denom; - guint8 chroma_log2_weight_denom; - - gint16 luma_weight_l0[32]; - gint8 luma_offset_l0[32]; - - /* if seq->ChromaArrayType != 0 */ - gint16 chroma_weight_l0[32][2]; - gint8 chroma_offset_l0[32][2]; - - /* if slice->slice_type % 5 == 1 */ - gint16 luma_weight_l1[32]; - gint8 luma_offset_l1[32]; - - /* and if seq->ChromaArrayType != 0 */ - gint16 chroma_weight_l1[32][2]; - gint8 chroma_offset_l1[32][2]; -}; - -struct _GstH264RefPicMarking -{ - guint8 memory_management_control_operation; - - guint32 difference_of_pic_nums_minus1; - guint32 long_term_pic_num; - guint32 long_term_frame_idx; - guint32 max_long_term_frame_idx_plus1; -}; - -struct _GstH264DecRefPicMarking -{ - /* if slice->nal_unit.IdrPicFlag */ - guint8 no_output_of_prior_pics_flag; - guint8 long_term_reference_flag; - - guint8 adaptive_ref_pic_marking_mode_flag; - GstH264RefPicMarking ref_pic_marking[10]; - guint8 n_ref_pic_marking; -}; - - -struct _GstH264SliceHdr -{ - guint32 first_mb_in_slice; - guint32 type; - GstH264PPS *pps; - - /* if seq->separate_colour_plane_flag */ - guint8 colour_plane_id; - - guint16 frame_num; - - guint8 field_pic_flag; - guint8 bottom_field_flag; - - /* if nal_unit.type == 5 */ - guint16 idr_pic_id; - - /* if seq->pic_order_cnt_type == 0 */ - guint16 pic_order_cnt_lsb; - /* if seq->pic_order_present_flag && !field_pic_flag */ - gint32 delta_pic_order_cnt_bottom; - - gint32 delta_pic_order_cnt[2]; - guint8 redundant_pic_cnt; - - /* if slice_type == B_SLICE */ - guint8 direct_spatial_mv_pred_flag; - - guint8 num_ref_idx_l0_active_minus1; - guint8 num_ref_idx_l1_active_minus1; - - guint8 ref_pic_list_modification_flag_l0; - guint8 n_ref_pic_list_modification_l0; - GstH264RefPicListModification ref_pic_list_modification_l0[32]; - guint8 ref_pic_list_modification_flag_l1; - guint8 n_ref_pic_list_modification_l1; - GstH264RefPicListModification ref_pic_list_modification_l1[32]; - - GstH264PredWeightTable pred_weight_table; - /* if nal_unit.ref_idc != 0 */ - GstH264DecRefPicMarking dec_ref_pic_marking; - - guint8 cabac_init_idc; - gint8 slice_qp_delta; - gint8 slice_qs_delta; - - guint8 disable_deblocking_filter_idc; - gint8 slice_alpha_c0_offset_div2; - gint8 slice_beta_offset_div2; - - guint16 slice_group_change_cycle; - - /* calculated values */ - guint32 max_pic_num; - gboolean valid; - - /* Size of the slice_header() in bits */ - guint header_size; - - /* Number of emulation prevention bytes (EPB) in this slice_header() */ - guint n_emulation_prevention_bytes; -}; - - -struct _GstH264ClockTimestamp -{ - guint8 ct_type; - guint8 nuit_field_based_flag; - guint8 counting_type; - guint8 discontinuity_flag; - guint8 cnt_dropped_flag; - guint8 n_frames; - - guint8 seconds_flag; - guint8 seconds_value; - - guint8 minutes_flag; - guint8 minutes_value; - - guint8 hours_flag; - guint8 hours_value; - - guint32 time_offset; -}; - -struct _GstH264PicTiming -{ - guint32 cpb_removal_delay; - guint32 dpb_output_delay; - - guint8 pic_struct_present_flag; - /* if pic_struct_present_flag */ - guint8 pic_struct; - - guint8 clock_timestamp_flag[3]; - GstH264ClockTimestamp clock_timestamp[3]; -}; - -struct _GstH264BufferingPeriod -{ - GstH264SPS *sps; - - /* seq->vui_parameters->nal_hrd_parameters_present_flag */ - guint8 nal_initial_cpb_removal_delay[32]; - guint8 nal_initial_cpb_removal_delay_offset[32]; - - /* seq->vui_parameters->vcl_hrd_parameters_present_flag */ - guint8 vcl_initial_cpb_removal_delay[32]; - guint8 vcl_initial_cpb_removal_delay_offset[32]; -}; - -struct _GstH264SEIMessage -{ - GstH264SEIPayloadType payloadType; - - union { - GstH264BufferingPeriod buffering_period; - GstH264PicTiming pic_timing; - /* ... could implement more */ - } payload; -}; - -/** - * GstH264NalParser: - * - * H264 NAL Parser (opaque structure). - */ -struct _GstH264NalParser -{ - /*< private >*/ - GstH264SPS sps[GST_H264_MAX_SPS_COUNT]; - GstH264PPS pps[GST_H264_MAX_PPS_COUNT]; - GstH264SPS *last_sps; - GstH264PPS *last_pps; -}; - -GstH264NalParser *gst_h264_nal_parser_new (void); - -GstH264ParserResult gst_h264_parser_identify_nalu (GstH264NalParser *nalparser, - const guint8 *data, guint offset, - gsize size, GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_identify_nalu_unchecked (GstH264NalParser *nalparser, - const guint8 *data, guint offset, - gsize size, GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_identify_nalu_avc (GstH264NalParser *nalparser, const guint8 *data, - guint offset, gsize size, guint8 nal_length_size, - GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_parse_nal (GstH264NalParser *nalparser, - GstH264NalUnit *nalu); - -GstH264ParserResult gst_h264_parser_parse_slice_hdr (GstH264NalParser *nalparser, GstH264NalUnit *nalu, - GstH264SliceHdr *slice, gboolean parse_pred_weight_table, - gboolean parse_dec_ref_pic_marking); - -GstH264ParserResult gst_h264_parser_parse_sps (GstH264NalParser *nalparser, GstH264NalUnit *nalu, - GstH264SPS *sps, gboolean parse_vui_params); - -GstH264ParserResult gst_h264_parser_parse_pps (GstH264NalParser *nalparser, - GstH264NalUnit *nalu, GstH264PPS *pps); - -GstH264ParserResult gst_h264_parser_parse_sei (GstH264NalParser *nalparser, - GstH264NalUnit *nalu, GstH264SEIMessage *sei); - -void gst_h264_nal_parser_free (GstH264NalParser *nalparser); - -GstH264ParserResult gst_h264_parse_sps (GstH264NalUnit *nalu, - GstH264SPS *sps, gboolean parse_vui_params); - -GstH264ParserResult gst_h264_parse_pps (GstH264NalParser *nalparser, - GstH264NalUnit *nalu, GstH264PPS *pps); - -G_END_DECLS -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h deleted file mode 100644 index 457919a2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpeg4parser.h +++ /dev/null @@ -1,578 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2009 Carl-Anton Ingmarsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MPEG4UTIL_H__ -#define __GST_MPEG4UTIL_H__ - -#include -#include - -typedef struct _GstMpeg4VisualObjectSequence GstMpeg4VisualObjectSequence; -typedef struct _GstMpeg4VisualObject GstMpeg4VisualObject; -typedef struct _GstMpeg4VideoObjectLayer GstMpeg4VideoObjectLayer; -typedef struct _GstMpeg4GroupOfVOP GstMpeg4GroupOfVOP; -typedef struct _GstMpeg4VideoObjectPlane GstMpeg4VideoObjectPlane; -typedef struct _GstMpeg4VideoSignalType GstMpeg4VideoSignalType; -typedef struct _GstMpeg4VideoPlaneShortHdr GstMpeg4VideoPlaneShortHdr; -typedef struct _GstMpeg4VideoPacketHdr GstMpeg4VideoPacketHdr; - -typedef struct _GstMpeg4SpriteTrajectory GstMpeg4SpriteTrajectory; - -typedef struct _GstMpeg4Packet GstMpeg4Packet; - -/** - * GstMpeg4StartCode: - * - * Defines the different startcodes present in the bitstream as - * defined in: Table 6-3 — Start code values - */ -typedef enum -{ - GST_MPEG4_VIDEO_OBJ_FIRST = 0x00, - GST_MPEG4_VIDEO_OBJ_LAST = 0x1f, - GST_MPEG4_VIDEO_LAYER_FIRST = 0x20, - GST_MPEG4_VIDEO_LAYER_LAST = 0x2f, - GST_MPEG4_VISUAL_OBJ_SEQ_START = 0xb0, - GST_MPEG4_VISUAL_OBJ_SEQ_END = 0xb1, - GST_MPEG4_USER_DATA = 0xb2, - GST_MPEG4_GROUP_OF_VOP = 0xb3, - GST_MPEG4_VIDEO_SESSION_ERR = 0xb4, - GST_MPEG4_VISUAL_OBJ = 0xb5, - GST_MPEG4_VIDEO_OBJ_PLANE = 0xb6, - GST_MPEG4_FBA = 0xba, - GST_MPEG4_FBA_PLAN = 0xbb, - GST_MPEG4_MESH = 0xbc, - GST_MPEG4_MESH_PLAN = 0xbd, - GST_MPEG4_STILL_TEXTURE_OBJ = 0xbe, - GST_MPEG4_TEXTURE_SPATIAL = 0xbf, - GST_MPEG4_TEXTURE_SNR_LAYER = 0xc0, - GST_MPEG4_TEXTURE_TILE = 0xc1, - GST_MPEG4_SHAPE_LAYER = 0xc2, - GST_MPEG4_STUFFING = 0xc3, - GST_MPEG4_SYSTEM_FIRST = 0xc6, - GST_MPEG4_SYSTEM_LAST = 0xff, - GST_MPEG4_RESYNC = 0xfff -} GstMpeg4StartCode; - -/** - * GstMpeg4VisualObjectType: - * - * Defines the different visual object types as - * defined in: Table 6-5 -- Meaning of visual object type - */ -typedef enum { - GST_MPEG4_VIDEO_ID = 0x01, - GST_MPEG4_STILL_TEXTURE_ID = 0x02, - GST_MPEG4_STILL_MESH_ID = 0x03, - GST_MPEG4_STILL_FBA_ID = 0x04, - GST_MPEG4_STILL_3D_MESH_ID = 0x05, - /*... reserved */ - -} GstMpeg4VisualObjectType; - -/** - * GstMpeg4AspectRatioInfo: - * @GST_MPEG4_SQUARE: 1:1 square - * @GST_MPEG4_625_TYPE_4_3: 12:11 (625-type for 4:3 picture) - * @GST_MPEG4_525_TYPE_4_3: 10:11 (525-type for 4:3 picture) - * @GST_MPEG4_625_TYPE_16_9: 16:11 (625-type stretched for 16:9 picture) - * @GST_MPEG4_525_TYPE_16_9: 40:33 (525-type stretched for 16:9 picture) - * @GST_MPEG4_EXTENDED_PAR: Extended par - * - * Defines the different pixel aspect ratios as - * defined in: Table 6-12 -- Meaning of pixel aspect ratio - */ -typedef enum { - GST_MPEG4_SQUARE = 0x01, - GST_MPEG4_625_TYPE_4_3 = 0x02, - GST_MPEG4_525_TYPE_4_3 = 0x03, - GST_MPEG4_625_TYPE_16_9 = 0x04, - GST_MPEG4_525_TYPE_16_9 = 0x05, - GST_MPEG4_EXTENDED_PAR = 0x0f, -} GstMpeg4AspectRatioInfo; - -/** - * GstMpeg4ParseResult: - * @GST_MPEG4_PARSER_OK: The parsing went well - * @GST_MPEG4_PARSER_BROKEN_DATA: The bitstream was broken - * @GST_MPEG4_PARSER_NO_PACKET: There was no packet in the buffer - * @GST_MPEG4_PARSER_NO_PACKET_END: There was no packet end in the buffer - * @GST_MPEG4_PARSER_NO_PACKET_ERROR: An error accured durint the parsing - * - * Result type of any parsing function. - */ -typedef enum { - GST_MPEG4_PARSER_OK, - GST_MPEG4_PARSER_BROKEN_DATA, - GST_MPEG4_PARSER_NO_PACKET, - GST_MPEG4_PARSER_NO_PACKET_END, - GST_MPEG4_PARSER_ERROR, -} GstMpeg4ParseResult; - -/** - * GstMpeg4VideoObjectCodingType: - * @GST_MPEG4_I_VOP: intra-coded (I) - * @GST_MPEG4_P_VOP: predictive-coded (P) - * @GST_MPEG4_B_VOP: bidirectionally-predictive-coded (B) - * @GST_MPEG4_S_VOP: sprite (S) - * - * The vop coding types as defined in: - * Table 6-20 -- Meaning of vop_coding_type - */ -typedef enum { - GST_MPEG4_I_VOP = 0x0, - GST_MPEG4_P_VOP = 0x1, - GST_MPEG4_B_VOP = 0x2, - GST_MPEG4_S_VOP = 0x3 -} GstMpeg4VideoObjectCodingType; - -/** - * GstMpeg4ChromaFormat - * - * The chroma format in use as - * defined in: Table 6-13 -- Meaning of chroma_format - */ -typedef enum { - /* Other value are reserved */ - GST_MPEG4_CHROMA_4_2_0 = 0x01 -} GstMpeg4ChromaFormat; - -/** - * GstMpeg4VideoObjectLayerShape: - * - * The different video object layer shapes as defined in: - * Table 6-16 — Video Object Layer shape type - */ -typedef enum { - GST_MPEG4_RECTANGULAR, - GST_MPEG4_BINARY, - GST_MPEG4_BINARY_ONLY, - GST_MPEG4_GRAYSCALE -} GstMpeg4VideoObjectLayerShape; - -/** - * GstMpeg4SpriteEnable: - * - * Indicates the usage of static sprite coding - * or global motion compensation (GMC) as defined in: - * Table V2 - 2 -- Meaning of sprite_enable codewords - */ -typedef enum { - GST_MPEG4_SPRITE_UNUSED, - GST_MPEG4_SPRITE_STATIC, - GST_MPEG4_SPRITE_GMG -} GstMpeg4SpriteEnable; - -/** - * GstMpeg4Profile: - * - * Different defined profiles as defined in: - * 9- Profiles and levels - * - * It is computed using: - * Table G.1 — FLC table for profile_and_level_indication - */ -typedef enum { - GST_MPEG4_PROFILE_CORE, - GST_MPEG4_PROFILE_MAIN, - GST_MPEG4_PROFILE_N_BIT, - GST_MPEG4_PROFILE_SIMPLE, - GST_MPEG4_PROFILE_HYBRID, - GST_MPEG4_PROFILE_RESERVED, - GST_MPEG4_PROFILE_SIMPLE_FBA, - GST_MPEG4_PROFILE_CORE_STUDIO, - GST_MPEG4_PROFILE_SIMPLE_STUDIO, - GST_MPEG4_PROFILE_CORE_SCALABLE, - GST_MPEG4_PROFILE_ADVANCED_CORE, - GST_MPEG4_PROFILE_ADVANCED_SIMPLE, - GST_MPEG4_PROFILE_SIMPLE_SCALABLE, - GST_MPEG4_PROFILE_SCALABLE_TEXTURE, - GST_MPEG4_PROFILE_SIMPLE_FACE_ANIMATION, - GST_MPEG4_PROFILE_BASIC_ANIMATED_TEXTURE, - GST_MPEG4_PROFILE_ADVANCED_REALTIME_SIMPLE, - GST_MPEG4_PROFILE_ADVANCED_SCALABLE_TEXTURE, - GST_MPEG4_PROFILE_FINE_GRANULARITY_SCALABLE, - GST_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY -} GstMpeg4Profile; - -/** - * GstMpeg4Level: - * - * Different levels as defined in: - * 9- Profiles and levels - * - * It is computed using: - * Table G.1 — FLC table for profile_and_level_indication - */ -typedef enum { - GST_MPEG4_LEVEL0, - GST_MPEG4_LEVEL1, - GST_MPEG4_LEVEL2, - GST_MPEG4_LEVEL3, - GST_MPEG4_LEVEL3b, - GST_MPEG4_LEVEL4, - GST_MPEG4_LEVEL5, - GST_MPEG4_LEVEL_RESERVED -} GstMpeg4Level; - -/** - * GstMpeg4VisualObjectSequence: - * - * The visual object sequence structure as defined in: - * 6.2.2 Visual Object Sequence and Visual Object - */ -struct _GstMpeg4VisualObjectSequence { - guint8 profile_and_level_indication; - - /* Computed according to: - * Table G.1 — FLC table for profile_and_level_indication */ - GstMpeg4Level level; - GstMpeg4Profile profile; -}; - -/** - * The visual object structure as defined in: - * 6.2.2 Visual Object Sequence and Visual Object - */ -struct _GstMpeg4VisualObject { - guint8 is_identifier; - /* If is_identifier */ - guint8 verid; - guint8 priority; - - GstMpeg4VisualObjectType type; -}; - -/** - * GstMpeg4VideoSignalType: - * - * The video signal type structure as defined in: - * 6.2.2 Visual Object Sequence and Visual Object. - */ -struct _GstMpeg4VideoSignalType { - guint8 type; - - guint8 format; - guint8 range; - guint8 color_description; - guint8 color_primaries; - guint8 transfer_characteristics; - guint8 matrix_coefficients; -}; - -/** - * GstMpeg4VideoPlaneShortHdr: - * - * The video plane short header structure as defined in: - * 6.2.5.2 Video Plane with Short Header - */ -struct _GstMpeg4VideoPlaneShortHdr { - guint8 temporal_reference; - guint8 split_screen_indicator; - guint8 document_camera_indicator; - guint8 full_picture_freeze_release; - guint8 source_format; - guint8 picture_coding_type; - guint8 vop_quant; - guint8 pei; - guint8 psupp; - - /* Gob layer specific fields */ - guint8 gob_header_empty; - guint8 gob_number; - guint8 gob_frame_id; - guint8 quant_scale; - - /* Computed - * If all the values are set to 0, then it is reserved - * Table 6-25 -- Parameters Defined by source_format Field - */ - guint16 vop_width; - guint16 vop_height; - guint16 num_macroblocks_in_gob; - guint8 num_gobs_in_vop; - - /* The size in bits */ - guint size; -}; - -/** - * GstMpeg4VideoObjectLayer: - * - * The video object layer structure as defined in: - * 6.2.3 Video Object Layer - */ -struct _GstMpeg4VideoObjectLayer { - guint8 random_accessible_vol; - guint8 video_object_type_indication; - - guint8 is_object_layer_identifier; - /* if is_object_layer_identifier */ - guint8 verid; - guint8 priority; - - GstMpeg4AspectRatioInfo aspect_ratio_info; - guint8 par_width; - guint8 par_height; - - guint8 control_parameters; - /* if control_parameters */ - GstMpeg4ChromaFormat chroma_format; - guint8 low_delay; - guint8 vbv_parameters; - /* if vbv_parameters */ - guint16 first_half_bitrate; - guint16 latter_half_bitrate; - guint16 first_half_vbv_buffer_size; - guint16 latter_half_vbv_buffer_size; - guint16 first_half_vbv_occupancy; - guint16 latter_half_vbv_occupancy; - - /* Computed values */ - guint32 bit_rate; - guint32 vbv_buffer_size; - - GstMpeg4VideoObjectLayerShape shape; - /* if shape == GST_MPEG4_GRAYSCALE && verid =! 1 */ - guint8 shape_extension; - - guint16 vop_time_increment_resolution; - guint8 vop_time_increment_bits; - guint8 fixed_vop_rate; - /* if fixed_vop_rate */ - guint16 fixed_vop_time_increment; - - guint16 width; - guint16 height; - guint8 interlaced; - guint8 obmc_disable; - - GstMpeg4SpriteEnable sprite_enable; - /* if vol->sprite_enable == SPRITE_GMG or SPRITE_STATIC*/ - /* if vol->sprite_enable != GST_MPEG4_SPRITE_GMG */ - guint16 sprite_width; - guint16 sprite_height; - guint16 sprite_left_coordinate; - guint16 sprite_top_coordinate; - - guint8 no_of_sprite_warping_points; - guint8 sprite_warping_accuracy; - guint8 sprite_brightness_change; - /* if vol->sprite_enable != GST_MPEG4_SPRITE_GMG */ - guint8 low_latency_sprite_enable; - - /* if shape != GST_MPEG4_RECTANGULAR */ - guint8 sadct_disable; - - guint8 not_8_bit; - - /* if no_8_bit */ - guint8 quant_precision; - guint8 bits_per_pixel; - - /* if shape == GRAYSCALE */ - guint8 no_gray_quant_update; - guint8 composition_method; - guint8 linear_composition; - - guint8 quant_type; - /* if quant_type */ - guint8 load_intra_quant_mat; - guint8 intra_quant_mat[64]; - guint8 load_non_intra_quant_mat; - guint8 non_intra_quant_mat[64]; - - guint8 quarter_sample; - guint8 complexity_estimation_disable; - guint8 resync_marker_disable; - guint8 data_partitioned; - guint8 reversible_vlc; - guint8 newpred_enable; - guint8 reduced_resolution_vop_enable; - guint8 scalability; - guint8 enhancement_type; - - GstMpeg4VideoPlaneShortHdr short_hdr; -}; - -/** - * GstMpeg4SpriteTrajectory: - * - * The sprite trajectory structure as defined in: - * 7.8.4 Sprite reference point decoding and - * 6.2.5.4 Sprite coding - */ -struct _GstMpeg4SpriteTrajectory { - guint16 vop_ref_points[63]; /* Defined as "du" in 6.2.5.4 */ - guint16 sprite_ref_points[63]; /* Defined as "dv" in 6.2.5.4 */ -}; - -/** - * GstMpeg4GroupOfVOP: - * - * The group of video object plane structure as defined in: - * 6.2.4 Group of Video Object Plane - */ -struct _GstMpeg4GroupOfVOP { - guint8 hours; - guint8 minutes; - guint8 seconds; - - guint8 closed; - guint8 broken_link; -}; - -/** - * GstMpeg4VideoObjectPlane: - * - * The Video object plane structure as defined in: - * 6.2.5 Video Object Plane and Video Plane with Short Header - */ -struct _GstMpeg4VideoObjectPlane { - GstMpeg4VideoObjectCodingType coding_type; - - guint8 modulo_time_base; - guint16 time_increment; - - guint8 coded; - /* if newpred_enable */ - guint16 id; - guint8 id_for_prediction_indication; - guint16 id_for_prediction; - - guint16 width; - guint16 height; - guint16 horizontal_mc_spatial_ref; - guint16 vertical_mc_spatial_ref; - - guint8 rounding_type; - /*if vol->shape != GST_MPEG4_RECTANGULAR */ - guint8 background_composition; - guint8 change_conv_ratio_disable; - guint8 constant_alpha; - guint8 constant_alpha_value; - guint8 reduced_resolution; - - guint8 intra_dc_vlc_thr; - - - guint8 top_field_first; - guint8 alternate_vertical_scan_flag; - - guint16 quant; - - guint8 fcode_forward; - guint8 fcode_backward; - - guint8 shape_coding_type; - guint8 load_backward_shape; - guint8 ref_select_code; - - /* Computed macroblock informations */ - guint16 mb_height; - guint16 mb_width; - guint mb_num; - - /* The size of the header */ - guint size; -}; - -/** - * GstMpeg4VideoPacketHdr: - * @size: Size of the header in bit. - * - * The video packet header structure as defined in: - * 6.2.5.2 Video Plane with Short Header - */ -struct _GstMpeg4VideoPacketHdr { - guint8 header_extension_code; - guint16 macroblock_number; - guint16 quant_scale; - guint size; -}; - -/** - * GstMpeg4Packet: - * @type: the type of the packet that start at @offset - * @data: the data containing packet starting at @offset - * @offset: offset of the start of the packet (without the 3 bytes startcode), but - * including the #GstMpeg4StartCode byte. - * @size: The size in bytes of the packet or %G_MAXUINT if the end wasn't found. - * @marker_size: The size in bit of the resync marker. - * - * A structure that contains the type of a packet, its offset and its size - */ -struct _GstMpeg4Packet -{ - const guint8 *data; - guint offset; - gsize size; - guint marker_size; - - GstMpeg4StartCode type; -}; - -GstMpeg4ParseResult gst_h263_parse (GstMpeg4Packet * packet, - const guint8 * data, guint offset, - gsize size); - - -GstMpeg4ParseResult gst_mpeg4_parse (GstMpeg4Packet * packet, - gboolean skip_user_data, - GstMpeg4VideoObjectPlane *vop, - const guint8 * data, guint offset, - gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_video_object_plane (GstMpeg4VideoObjectPlane *vop, - GstMpeg4SpriteTrajectory *sprite_trajectory, - GstMpeg4VideoObjectLayer *vol, - const guint8 * data, - gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_group_of_vop (GstMpeg4GroupOfVOP *gov, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_video_object_layer (GstMpeg4VideoObjectLayer *vol, - GstMpeg4VisualObject *vo, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_visual_object (GstMpeg4VisualObject *vo, - GstMpeg4VideoSignalType *signal_type, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_visual_object_sequence (GstMpeg4VisualObjectSequence *vos, - const guint8 * data, gsize size); -GstMpeg4ParseResult -gst_mpeg4_parse_video_plane_short_header (GstMpeg4VideoPlaneShortHdr * shorthdr, - const guint8 * data, gsize size); - -GstMpeg4ParseResult -gst_mpeg4_parse_video_packet_header (GstMpeg4VideoPacketHdr * videopackethdr, - GstMpeg4VideoObjectLayer * vol, - GstMpeg4VideoObjectPlane * vop, - GstMpeg4SpriteTrajectory * sprite_trajectory, - const guint8 * data, gsize size); - -#endif /* __GST_MPEG4UTIL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h deleted file mode 100644 index 2b13a064..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstmpegvideoparser.h +++ /dev/null @@ -1,431 +0,0 @@ -/* Gstreamer - * Copyright (C) <2011> Intel Corporation - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * From bad/sys/vdpau/mpeg/mpegutil.c: - * Copyright (C) <2007> Jan Schmidt - * Copyright (C) <2009> Carl-Anton Ingmarsson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MPEG_VIDEO_UTILS_H__ -#define __GST_MPEG_VIDEO_UTILS_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The Mpeg video parsing library is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -/** - * GstMpegVideoPacketTypeCode: - * @GST_MPEG_VIDEO_PACKET_PICTURE: Picture packet starting code - * @GST_MPEG_VIDEO_PACKET_SLICE_MIN: Slice min packet starting code - * @GST_MPEG_VIDEO_PACKET_SLICE_MAX: Slice max packet starting code - * @GST_MPEG_VIDEO_PACKET_USER_DATA: User data packet starting code - * @GST_MPEG_VIDEO_PACKET_SEQUENCE : Sequence packet starting code - * @GST_MPEG_VIDEO_PACKET_EXTENSION: Extension packet starting code - * @GST_MPEG_VIDEO_PACKET_SEQUENCE_END: Sequence end packet code - * @GST_MPEG_VIDEO_PACKET_GOP: Group of Picture packet starting code - * @GST_MPEG_VIDEO_PACKET_NONE: None packet code - * - * Indicates the type of MPEG packet - */ -typedef enum { - GST_MPEG_VIDEO_PACKET_PICTURE = 0x00, - GST_MPEG_VIDEO_PACKET_SLICE_MIN = 0x01, - GST_MPEG_VIDEO_PACKET_SLICE_MAX = 0xaf, - GST_MPEG_VIDEO_PACKET_USER_DATA = 0xb2, - GST_MPEG_VIDEO_PACKET_SEQUENCE = 0xb3, - GST_MPEG_VIDEO_PACKET_EXTENSION = 0xb5, - GST_MPEG_VIDEO_PACKET_SEQUENCE_END = 0xb7, - GST_MPEG_VIDEO_PACKET_GOP = 0xb8, - GST_MPEG_VIDEO_PACKET_NONE = 0xff -} GstMpegVideoPacketTypeCode; - -/** - * GST_MPEG_VIDEO_PACKET_IS_SLICE: - * @typecode: The MPEG video packet type code - * - * Checks whether a packet type code is a slice. - * - * Returns: %TRUE if the packet type code corresponds to a slice, - * else %FALSE. - */ -#define GST_MPEG_VIDEO_PACKET_IS_SLICE(typecode) ((typecode) >= GST_MPEG_VIDEO_PACKET_SLICE_MIN && \ - (typecode) <= GST_MPEG_VIDEO_PACKET_SLICE_MAX) - -/** - * GstMpegVideoPacketExtensionCode: - * @GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE: Sequence extension code - * @GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY: Sequence Display extension code - * @GST_MPEG_VIDEO_PACKET_EXT_QUANT_MATRIX: Quantization Matrix extension code - * @GST_MPEG_VIDEO_PACKET_EXT_PICTURE: Picture coding extension - * - * Indicates what type of packets are in this block, some are mutually - * exclusive though - ie, sequence packs are accumulated separately. GOP & - * Picture may occur together or separately. - */ -typedef enum { - GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE = 0x01, - GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY = 0x02, - GST_MPEG_VIDEO_PACKET_EXT_QUANT_MATRIX = 0x03, - GST_MPEG_VIDEO_PACKET_EXT_PICTURE = 0x08 -} GstMpegVideoPacketExtensionCode; - -/** - * GstMpegVideoLevel: - * @GST_MPEG_VIDEO_LEVEL_LOW: Low level (LL) - * @GST_MPEG_VIDEO_LEVEL_MAIN: Main level (ML) - * @GST_MPEG_VIDEO_LEVEL_HIGH_1440: High 1440 level (H-14) - * @GST_MPEG_VIDEO_LEVEL_HIGH: High level (HL) - * - * Mpeg-2 Levels. - **/ -typedef enum { - GST_MPEG_VIDEO_LEVEL_HIGH = 0x04, - GST_MPEG_VIDEO_LEVEL_HIGH_1440 = 0x06, - GST_MPEG_VIDEO_LEVEL_MAIN = 0x08, - GST_MPEG_VIDEO_LEVEL_LOW = 0x0a -} GstMpegVideoLevel; - -/** - * GstMpegVideoProfile: - * @GST_MPEG_VIDEO_PROFILE_422: 4:2:2 profile (422) - * @GST_MPEG_VIDEO_PROFILE_HIGH: High profile (HP) - * @GST_MPEG_VIDEO_PROFILE_SPATIALLY_SCALABLE: Spatially Scalable profile (Spatial) - * @GST_MPEG_VIDEO_PROFILE_SNR_SCALABLE: SNR Scalable profile (SNR) - * @GST_MPEG_VIDEO_PROFILE_MAIN: Main profile (MP) - * @GST_MPEG_VIDEO_PROFILE_SIMPLE: Simple profile (SP) - * - * Mpeg-2 Profiles. - **/ -typedef enum { - GST_MPEG_VIDEO_PROFILE_422 = 0x00, - GST_MPEG_VIDEO_PROFILE_HIGH = 0x01, - GST_MPEG_VIDEO_PROFILE_SPATIALLY_SCALABLE = 0x02, - GST_MPEG_VIDEO_PROFILE_SNR_SCALABLE = 0x03, - GST_MPEG_VIDEO_PROFILE_MAIN = 0x04, - GST_MPEG_VIDEO_PROFILE_SIMPLE = 0x05 -} GstMpegVideoProfile; - -/** - * GstMpegVideoChromaFormat: - * @GST_MPEG_VIDEO_CHROMA_RES: Invalid (reserved for future use) - * @GST_MPEG_VIDEO_CHROMA_420: 4:2:0 subsampling - * @GST_MPEG_VIDEO_CHROMA_422: 4:2:2 subsampling - * @GST_MPEG_VIDEO_CHROMA_444: 4:4:4 (non-subsampled) - * - * Chroma subsampling type. - */ -typedef enum { - GST_MPEG_VIDEO_CHROMA_RES = 0x00, - GST_MPEG_VIDEO_CHROMA_420 = 0x01, - GST_MPEG_VIDEO_CHROMA_422 = 0x02, - GST_MPEG_VIDEO_CHROMA_444 = 0x03, -} GstMpegVideoChromaFormat; - -/** - * GstMpegVideoPictureType: - * @GST_MPEG_VIDEO_PICTURE_TYPE_I: Intra-coded (I) frame - * @GST_MPEG_VIDEO_PICTURE_TYPE_P: Predictive-codec (P) frame - * @GST_MPEG_VIDEO_PICTURE_TYPE_B: Bidirectionally predictive-coded (B) frame - * @GST_MPEG_VIDEO_PICTURE_TYPE_D: D frame - * - * Picture type. - */ -typedef enum { - GST_MPEG_VIDEO_PICTURE_TYPE_I = 0x01, - GST_MPEG_VIDEO_PICTURE_TYPE_P = 0x02, - GST_MPEG_VIDEO_PICTURE_TYPE_B = 0x03, - GST_MPEG_VIDEO_PICTURE_TYPE_D = 0x04 -} GstMpegVideoPictureType; - -/** - * GstMpegVideoPictureStructure: - * @GST_MPEG_VIDEO_PICTURE_STRUCTURE_TOP_FIELD: Top field - * @GST_MPEG_VIDEO_PICTURE_STRUCTURE_BOTTOM_FIELD: Bottom field - * @GST_MPEG_VIDEO_PICTURE_STRUCTURE_FRAME: Frame picture - * - * Picture structure type. - */ -typedef enum { - GST_MPEG_VIDEO_PICTURE_STRUCTURE_TOP_FIELD = 0x01, - GST_MPEG_VIDEO_PICTURE_STRUCTURE_BOTTOM_FIELD = 0x02, - GST_MPEG_VIDEO_PICTURE_STRUCTURE_FRAME = 0x03 -} GstMpegVideoPictureStructure; - -typedef struct _GstMpegVideoSequenceHdr GstMpegVideoSequenceHdr; -typedef struct _GstMpegVideoSequenceExt GstMpegVideoSequenceExt; -typedef struct _GstMpegVideoSequenceDisplayExt GstMpegVideoSequenceDisplayExt; -typedef struct _GstMpegVideoPictureHdr GstMpegVideoPictureHdr; -typedef struct _GstMpegVideoGop GstMpegVideoGop; -typedef struct _GstMpegVideoPictureExt GstMpegVideoPictureExt; -typedef struct _GstMpegVideoQuantMatrixExt GstMpegVideoQuantMatrixExt; -typedef struct _GstMpegVideoPacket GstMpegVideoPacket; - -/** - * GstMpegVideoSequenceHdr: - * @width: Width of each frame - * @height: Height of each frame - * @par_w: Calculated Pixel Aspect Ratio width - * @par_h: Calculated Pixel Aspect Ratio height - * @fps_n: Calculated Framrate nominator - * @fps_d: Calculated Framerate denominator - * @bitrate_value: Value of the bitrate as is in the stream (400bps unit) - * @bitrate: the real bitrate of the Mpeg video stream in bits per second, 0 if VBR stream - * @constrained_parameters_flag: %TRUE if this stream uses contrained parameters. - * @intra_quantizer_matrix: intra-quantization table - * @non_intra_quantizer_matrix: non-intra quantization table - * - * The Mpeg2 Video Sequence Header structure. - */ -struct _GstMpegVideoSequenceHdr -{ - guint16 width, height; - guint8 aspect_ratio_info; - guint8 frame_rate_code; - guint32 bitrate_value; - guint16 vbv_buffer_size_value; - - guint8 constrained_parameters_flag; - - guint8 intra_quantizer_matrix[64]; - guint8 non_intra_quantizer_matrix[64]; - - /* Calculated values */ - guint par_w, par_h; - guint fps_n, fps_d; - guint bitrate; -}; - -/** - * GstMpegVideoSequenceExt: - * @profile: mpeg2 decoder profile - * @level: mpeg2 decoder level - * @progressive: %TRUE if the frames are progressive %FALSE otherwise - * @chroma_format: indicates the chrominance format - * @horiz_size_ext: Horizontal size - * @vert_size_ext: Vertical size - * @bitrate_ext: The bitrate - * @vbv_buffer_size_extension: VBV vuffer size - * @low_delay: %TRUE if the sequence doesn't contain any B-pictures, %FALSE - * otherwise - * @fps_n_ext: Framerate nominator code - * @fps_d_ext: Framerate denominator code - * - * The Mpeg2 Video Sequence Extension structure. - **/ -struct _GstMpegVideoSequenceExt -{ - /* mpeg2 decoder profile */ - guint8 profile; - /* mpeg2 decoder level */ - guint8 level; - - guint8 progressive; - guint8 chroma_format; - - guint8 horiz_size_ext, vert_size_ext; - - guint16 bitrate_ext; - guint8 vbv_buffer_size_extension; - guint8 low_delay; - guint8 fps_n_ext, fps_d_ext; - -}; - -/** - * GstMpegVideoSequenceDisplayExt: - * @profile: mpeg2 decoder profil - - */ -struct _GstMpegVideoSequenceDisplayExt -{ - guint8 video_format; - guint8 colour_description_flag; - - /* if colour_description_flag: */ - guint8 colour_primaries; - guint8 transfer_characteristics; - guint8 matrix_coefficients; - - guint16 display_horizontal_size; - guint16 display_vertical_size; -}; - -/** - * GstMpegVideoQuantMatrixExt: - * @load_intra_quantiser_matrix: - * @intra_quantiser_matrix: - * @load_non_intra_quantiser_matrix: - * @non_intra_quantiser_matrix: - * @load_chroma_intra_quantiser_matrix: - * @chroma_intra_quantiser_matrix: - * @load_chroma_non_intra_quantiser_matrix: - * @chroma_non_intra_quantiser_matrix: - * - * The Quant Matrix Extension structure - */ -struct _GstMpegVideoQuantMatrixExt -{ - guint8 load_intra_quantiser_matrix; - guint8 intra_quantiser_matrix[64]; - guint8 load_non_intra_quantiser_matrix; - guint8 non_intra_quantiser_matrix[64]; - guint8 load_chroma_intra_quantiser_matrix; - guint8 chroma_intra_quantiser_matrix[64]; - guint8 load_chroma_non_intra_quantiser_matrix; - guint8 chroma_non_intra_quantiser_matrix[64]; -}; - -/** - * GstMpegVideoPictureHdr: - * @tsn: Temporal Sequence Number - * @pic_type: Type of the frame - * @full_pel_forward_vector: the full pel forward flag of - * the frame: 0 or 1. - * @full_pel_backward_vector: the full pel backward flag - * of the frame: 0 or 1. - * @f_code: F code - * - * The Mpeg2 Video Picture Header structure. - */ -struct _GstMpegVideoPictureHdr -{ - guint16 tsn; - guint8 pic_type; - - guint8 full_pel_forward_vector, full_pel_backward_vector; - - guint8 f_code[2][2]; -}; - -/** - * GstMpegVideoPictureExt: - * @intra_dc_precision: Intra DC precision - * @picture_structure: Structure of the picture - * @top_field_first: Top field first - * @frame_pred_frame_dct: Frame - * @concealment_motion_vectors: Concealment Motion Vectors - * @q_scale_type: Q Scale Type - * @intra_vlc_format: Intra Vlc Format - * @alternate_scan: Alternate Scan - * @repeat_first_field: Repeat First Field - * @chroma_420_type: Chroma 420 Type - * @progressive_frame: %TRUE if the frame is progressive %FALSE otherwize - * - * The Mpeg2 Video Picture Extension structure. - */ -struct _GstMpegVideoPictureExt -{ - guint8 f_code[2][2]; - - guint8 intra_dc_precision; - guint8 picture_structure; - guint8 top_field_first; - guint8 frame_pred_frame_dct; - guint8 concealment_motion_vectors; - guint8 q_scale_type; - guint8 intra_vlc_format; - guint8 alternate_scan; - guint8 repeat_first_field; - guint8 chroma_420_type; - guint8 progressive_frame; - guint8 composite_display; - guint8 v_axis; - guint8 field_sequence; - guint8 sub_carrier; - guint8 burst_amplitude; - guint8 sub_carrier_phase; -}; - -/** - * GstMpegVideoGop: - * @drop_frame_flag: Drop Frame Flag - * @hour: Hour (0-23) - * @minute: Minute (O-59) - * @second: Second (0-59) - * @frame: Frame (0-59) - * @closed_gop: Closed Gop - * @broken_link: Broken link - * - * The Mpeg Video Group of Picture structure. - */ -struct _GstMpegVideoGop -{ - guint8 drop_frame_flag; - - guint8 hour, minute, second, frame; - - guint8 closed_gop; - guint8 broken_link; -}; - -/** - * GstMpegVideoTypeOffsetSize: - * - * @type: the type of the packet that start at @offset - * @data: the data containing the packet starting at @offset - * @offset: the offset of the packet start in bytes, it is the exact, start of the packet, no sync code included - * @size: The size in bytes of the packet or -1 if the end wasn't found. It is the exact size of the packet, no sync code included - * - * A structure that contains the type of a packet, its offset and its size - */ -struct _GstMpegVideoPacket -{ - const guint8 *data; - guint8 type; - guint offset; - gint size; -}; - -gboolean gst_mpeg_video_parse (GstMpegVideoPacket * packet, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * params, - const guint8 * data, gsize size, guint offset); - -/* seqext and displayext may be NULL if not received */ -gboolean gst_mpeg_video_finalise_mpeg2_sequence_header (GstMpegVideoSequenceHdr *hdr, - GstMpegVideoSequenceExt *seqext, GstMpegVideoSequenceDisplayExt *displayext); - -gboolean gst_mpeg_video_parse_picture_header (GstMpegVideoPictureHdr* hdr, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_picture_extension (GstMpegVideoPictureExt *ext, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_gop (GstMpegVideoGop * gop, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_sequence_extension (GstMpegVideoSequenceExt * seqext, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_sequence_display_extension (GstMpegVideoSequenceDisplayExt * seqdisplayext, - const guint8 * data, gsize size, guint offset); - -gboolean gst_mpeg_video_parse_quant_matrix_extension (GstMpegVideoQuantMatrixExt * quant, - const guint8 * data, gsize size, guint offset); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h deleted file mode 100644 index ce463d72..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/codecparsers/gstvc1parser.h +++ /dev/null @@ -1,622 +0,0 @@ -/* Gstreamer - * Copyright (C) <2011> Intel - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VC1_PARSER_H__ -#define __GST_VC1_PARSER_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The VC1 parsing library is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define MAX_HRD_NUM_LEAKY_BUCKETS 31 - -/** - * @GST_VC1_BFRACTION_BASIS: The @bfraction variable should be divided - * by this constant to have the actual value. - */ -#define GST_VC1_BFRACTION_BASIS 840 - -#define GST_VC1_BFRACTION_RESERVED (GST_VC1_BFRACTION_BASIS + 1) -#define GST_VC1_BFRACTION_PTYPE_BI (GST_VC1_BFRACTION_BASIS + 2) - -typedef enum { - GST_VC1_END_OF_SEQ = 0x0A, - GST_VC1_SLICE = 0x0B, - GST_VC1_FIELD = 0x0C, - GST_VC1_FRAME = 0x0D, - GST_VC1_ENTRYPOINT = 0x0E, - GST_VC1_SEQUENCE = 0x0F, - GST_VC1_SLICE_USER = 0x1B, - GST_VC1_FIELD_USER = 0x1C, - GST_VC1_FRAME_USER = 0x1D, - GST_VC1_ENTRY_POINT_USER = 0x1E, - GST_VC1_SEQUENCE_USER = 0x1F -} GstVC1StartCode; - -typedef enum { - GST_VC1_PROFILE_SIMPLE, - GST_VC1_PROFILE_MAIN, - GST_VC1_PROFILE_RESERVED, - GST_VC1_PROFILE_ADVANCED -} GstVC1Profile; - -typedef enum { - GST_VC1_PARSER_OK, - GST_VC1_PARSER_BROKEN_DATA, - GST_VC1_PARSER_NO_BDU, - GST_VC1_PARSER_NO_BDU_END, - GST_VC1_PARSER_ERROR, -} GstVC1ParserResult; - -typedef enum -{ - GST_VC1_PICTURE_TYPE_P, - GST_VC1_PICTURE_TYPE_B, - GST_VC1_PICTURE_TYPE_I, - GST_VC1_PICTURE_TYPE_BI, - GST_VC1_PICTURE_TYPE_SKIPPED -} GstVC1PictureType; - -typedef enum -{ - GST_VC1_LEVEL_LOW = 0, /* Simple/Main profile low level */ - GST_VC1_LEVEL_MEDIUM = 1, /* Simple/Main profile medium level */ - GST_VC1_LEVEL_HIGH = 2, /* Main profile high level */ - - GST_VC1_LEVEL_L0 = 0, /* Advanced profile level 0 */ - GST_VC1_LEVEL_L1 = 1, /* Advanced profile level 1 */ - GST_VC1_LEVEL_L2 = 2, /* Advanced profile level 2 */ - GST_VC1_LEVEL_L3 = 3, /* Advanced profile level 3 */ - GST_VC1_LEVEL_L4 = 4, /* Advanced profile level 4 */ - - /* 5 to 7 reserved */ - GST_VC1_LEVEL_UNKNOWN = 255 /* Unknown profile */ -} GstVC1Level; - -typedef enum -{ - GST_VC1_QUANTIZER_IMPLICITLY, - GST_VC1_QUANTIZER_EXPLICITLY, - GST_VC1_QUANTIZER_NON_UNIFORM, - GST_VC1_QUANTIZER_UNIFORM -} GstVC1QuantizerSpec; - -typedef enum { - GST_VC1_DQPROFILE_FOUR_EDGES, - GST_VC1_DQPROFILE_DOUBLE_EDGES, - GST_VC1_DQPROFILE_SINGLE_EDGE, - GST_VC1_DQPROFILE_ALL_MBS -} GstVC1DQProfile; - -typedef enum { - GST_VC1_CONDOVER_NONE, - GST_VC1_CONDOVER_ALL, - GST_VC1_CONDOVER_SELECT -} GstVC1Condover; - -/** - * GstVC1MvMode: - * - */ -typedef enum -{ - GST_VC1_MVMODE_1MV_HPEL_BILINEAR, - GST_VC1_MVMODE_1MV, - GST_VC1_MVMODE_1MV_HPEL, - GST_VC1_MVMODE_MIXED_MV, - GST_VC1_MVMODE_INTENSITY_COMP -} GstVC1MvMode; - -typedef enum -{ - GST_VC1_FRAME_PROGRESSIVE = 0x0, - GST_VC1_FRAME_INTERLACE = 0x10, - GST_VC1_FIELD_INTERLACE = 0x11 -} GstVC1FrameCodingMode; - -typedef struct _GstVC1SeqHdr GstVC1SeqHdr; -typedef struct _GstVC1AdvancedSeqHdr GstVC1AdvancedSeqHdr; -typedef struct _GstVC1HrdParam GstVC1HrdParam; -typedef struct _GstVC1EntryPointHdr GstVC1EntryPointHdr; - -typedef struct _GstVC1SeqLayer GstVC1SeqLayer; - -typedef struct _GstVC1SeqStructA GstVC1SeqStructA; -typedef struct _GstVC1SeqStructB GstVC1SeqStructB; -typedef struct _GstVC1SeqStructC GstVC1SeqStructC; - -/* Pictures Structures */ -typedef struct _GstVC1FrameLayer GstVC1FrameLayer; -typedef struct _GstVC1FrameHdr GstVC1FrameHdr; -typedef struct _GstVC1PicAdvanced GstVC1PicAdvanced; -typedef struct _GstVC1PicSimpleMain GstVC1PicSimpleMain; -typedef struct _GstVC1Picture GstVC1Picture; - -typedef struct _GstVC1VopDquant GstVC1VopDquant; - -typedef struct _GstVC1BitPlanes GstVC1BitPlanes; - -typedef struct _GstVC1BDU GstVC1BDU; - -struct _GstVC1HrdParam -{ - guint8 hrd_num_leaky_buckets; - guint8 bit_rate_exponent; - guint8 buffer_size_exponent; - guint16 hrd_rate[MAX_HRD_NUM_LEAKY_BUCKETS]; - guint16 hrd_buffer[MAX_HRD_NUM_LEAKY_BUCKETS]; -}; - -/** - * GstVC1EntryPointHdr: - * - * Structure for entrypoint header, this will be used only in advanced profiles - */ -struct _GstVC1EntryPointHdr -{ - guint8 broken_link; - guint8 closed_entry; - guint8 panscan_flag; - guint8 refdist_flag; - guint8 loopfilter; - guint8 fastuvmc; - guint8 extended_mv; - guint8 dquant; - guint8 vstransform; - guint8 overlap; - guint8 quantizer; - guint8 coded_size_flag; - guint16 coded_width; - guint16 coded_height; - guint8 extended_dmv; - guint8 range_mapy_flag; - guint8 range_mapy; - guint8 range_mapuv_flag; - guint8 range_mapuv; - - guint8 hrd_full[MAX_HRD_NUM_LEAKY_BUCKETS]; -}; - -/** - * GstVC1AdvancedSeqHdr: - * - * Structure for the advanced profile sequence headers specific parameters. - */ -struct _GstVC1AdvancedSeqHdr -{ - GstVC1Level level; - - guint8 frmrtq_postproc; - guint8 bitrtq_postproc; - guint8 postprocflag; - guint16 max_coded_width; - guint16 max_coded_height; - guint8 pulldown; - guint8 interlace; - guint8 tfcntrflag; - guint8 finterpflag; - guint8 psf; - guint8 display_ext; - guint16 disp_horiz_size; - guint16 disp_vert_size; - guint8 aspect_ratio_flag; - guint8 aspect_ratio; - guint8 aspect_horiz_size; - guint8 aspect_vert_size; - guint8 framerate_flag; - guint8 framerateind; - guint8 frameratenr; - guint8 frameratedr; - guint16 framerateexp; - guint8 color_format_flag; - guint8 color_prim; - guint8 transfer_char; - guint8 matrix_coef; - guint8 hrd_param_flag; - guint8 colordiff_format; - - GstVC1HrdParam hrd_param; - - /* computed */ - guint framerate; /* Around in fps, 0 if unknown*/ - guint bitrate; /* Around in kpbs, 0 if unknown*/ - guint par_n; - guint par_d; - guint fps_n; - guint fps_d; - - /* The last parsed entry point */ - GstVC1EntryPointHdr entrypoint; -}; - -struct _GstVC1SeqStructA -{ - guint32 vert_size; - guint32 horiz_size; -}; - -struct _GstVC1SeqStructB -{ - GstVC1Level level; - - guint8 cbr; - guint32 framerate; - - /* In simple and main profiles only */ - guint32 hrd_buffer; - guint32 hrd_rate; -}; - -struct _GstVC1SeqStructC -{ - GstVC1Profile profile; - - /* Only in simple and main profiles */ - guint8 frmrtq_postproc; - guint8 bitrtq_postproc; - guint8 res_sprite; - guint8 loop_filter; - guint8 multires; - guint8 fastuvmc; - guint8 extended_mv; - guint8 dquant; - guint8 vstransform; - guint8 overlap; - guint8 syncmarker; - guint8 rangered; - guint8 maxbframes; - guint8 quantizer; - guint8 finterpflag; - - /* Computed */ - guint framerate; /* Around in fps, 0 if unknown*/ - guint bitrate; /* Around in kpbs, 0 if unknown*/ - - /* This should be filled by user if previously known */ - guint16 coded_width; - /* This should be filled by user if previously known */ - guint16 coded_height; - - /* Wmvp specific */ - guint8 wmvp; /* Specify if the stream is wmp or not */ - /* In the wmvp case, the framerate is not computed but in the bistream */ - guint8 slice_code; -}; - -struct _GstVC1SeqLayer -{ - guint32 numframes; - - GstVC1SeqStructA struct_a; - GstVC1SeqStructB struct_b; - GstVC1SeqStructC struct_c; -}; - -/** - * GstVC1SeqHdr: - * - * Structure for sequence headers in any profile. - */ -struct _GstVC1SeqHdr -{ - GstVC1Profile profile; - - GstVC1SeqStructC struct_c; - - /* calculated */ - guint mb_height; - guint mb_width; - guint mb_stride; - - GstVC1AdvancedSeqHdr advanced; - -}; - -/** - * GstVC1PicSimpleMain: - * @bfaction: Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. - */ -struct _GstVC1PicSimpleMain -{ - guint8 frmcnt; - guint8 mvrange; - guint8 rangeredfrm; - - /* I and P pic simple and main profiles only */ - guint8 respic; - - /* I and BI pic simple and main profiles only */ - guint8 transacfrm2; - guint8 bf; - - /* B and P pic simple and main profiles only */ - guint8 mvmode; - guint8 mvtab; - guint8 ttmbf; - - /* P pic simple and main profiles only */ - guint8 mvmode2; - guint8 lumscale; - guint8 lumshift; - - guint8 cbptab; - guint8 ttfrm; - - /* B and BI picture only - * Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. */ - guint16 bfraction; - - /* Biplane value, those fields only mention the fact - * that the bitplane is in raw mode or not */ - guint8 mvtypemb; - guint8 skipmb; - guint8 directmb; /* B pic main profile only */ -}; - -/** - * GstVC1PicAdvanced: - * @bfaction: Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. - */ -struct _GstVC1PicAdvanced -{ - GstVC1FrameCodingMode fcm; - guint8 tfcntr; - - guint8 rptfrm; - guint8 tff; - guint8 rff; - guint8 ps_present; - guint32 ps_hoffset; - guint32 ps_voffset; - guint16 ps_width; - guint16 ps_height; - guint8 rndctrl; - guint8 uvsamp; - guint8 postproc; - - /* B and P picture specific */ - guint8 mvrange; - guint8 mvmode; - guint8 mvtab; - guint8 cbptab; - guint8 ttmbf; - guint8 ttfrm; - - /* B and BI picture only - * Should be divided by #GST_VC1_BFRACTION_BASIS - * to get the real value. */ - guint16 bfraction; - - /* ppic */ - guint8 mvmode2; - guint8 lumscale; - guint8 lumshift; - - /* bipic */ - guint8 bf; - guint8 condover; - guint8 transacfrm2; - - /* Biplane value, those fields only mention the fact - * that the bitplane is in raw mode or not */ - guint8 acpred; - guint8 overflags; - guint8 mvtypemb; - guint8 skipmb; - guint8 directmb; - guint8 forwardmb; /* B pic interlace field only */ - - /* For interlaced pictures only */ - guint8 fieldtx; - - /* P and B pictures */ - guint8 intcomp; - guint8 dmvrange; - guint8 mbmodetab; - guint8 imvtab; - guint8 icbptab; - guint8 mvbptab2; - guint8 mvbptab4; /* If 4mvswitch in ppic */ - - /* P picture */ - guint8 mvswitch4; - - /* For interlaced fields only */ - guint16 refdist; - guint8 fptype; /* Raw value */ - - /* P pic */ - guint8 numref; - guint8 reffield; - guint8 lumscale2; - guint8 lumshift2; - guint8 intcompfield; - -}; - -struct _GstVC1BitPlanes -{ - guint8 *acpred; - guint8 *fieldtx; - guint8 *overflags; - guint8 *mvtypemb; - guint8 *skipmb; - guint8 *directmb; - guint8 *forwardmb; - - guint size; /* Size of the arrays */ -}; - -struct _GstVC1VopDquant -{ - guint8 pqdiff; - guint8 abspq; - - /* Computed */ - guint8 altpquant; - - /* if dqant != 2*/ - guint8 dquantfrm; - guint8 dqprofile; - - /* if dqprofile == GST_VC1_DQPROFILE_SINGLE_EDGE - * or GST_VC1_DQPROFILE_DOUBLE_EDGE:*/ - guint8 dqsbedge; - - /* if dqprofile == GST_VC1_DQPROFILE_SINGLE_EDGE - * or GST_VC1_DQPROFILE_DOUBLE_EDGE:*/ - guint8 dqbedge; - - /* if dqprofile == GST_VC1_DQPROFILE_ALL_MBS */ - guint8 dqbilevel; - -}; - -struct _GstVC1FrameLayer -{ - guint8 key; - guint32 framesize; - - guint32 timestamp; - - /* calculated */ - guint32 next_framelayer_offset; - guint8 skiped_p_frame; -}; - -/** - * GstVC1FrameHdr: - * - * Structure that represent picture in any profile or mode. - * You should look at @ptype and @profile to know what is currently - * in use. - */ -struct _GstVC1FrameHdr -{ - /* common fields */ - GstVC1PictureType ptype; - guint8 interpfrm; - guint8 halfqp; - guint8 transacfrm; - guint8 transdctab; - guint8 pqindex; - guint8 pquantizer; - - /* Computed */ - guint8 pquant; - - /* Convenience fields */ - guint8 profile; - guint8 dquant; - - /* If dquant */ - GstVC1VopDquant vopdquant; - - union { - GstVC1PicSimpleMain simple; - GstVC1PicAdvanced advanced; - } pic; - - /* Size of the picture layer in bits */ - guint header_size; -}; - -/** - * GstVC1BDU: - * - * Structure that represents a Bitstream Data Unit. - */ -struct _GstVC1BDU -{ - GstVC1StartCode type; - guint size; - guint sc_offset; - guint offset; - guint8 * data; -}; - -GstVC1ParserResult gst_vc1_identify_next_bdu (const guint8 *data, - gsize size, - GstVC1BDU *bdu); - - -GstVC1ParserResult gst_vc1_parse_sequence_header (const guint8 *data, - gsize size, - GstVC1SeqHdr * seqhdr); - -GstVC1ParserResult gst_vc1_parse_entry_point_header (const guint8 *data, - gsize size, - GstVC1EntryPointHdr * entrypoint, - GstVC1SeqHdr *seqhdr); - -GstVC1ParserResult gst_vc1_parse_sequence_layer (const guint8 *data, - gsize size, - GstVC1SeqLayer * seqlayer); - -GstVC1ParserResult -gst_vc1_parse_sequence_header_struct_a (const guint8 *data, - gsize size, - GstVC1SeqStructA *structa); -GstVC1ParserResult -gst_vc1_parse_sequence_header_struct_b (const guint8 *data, - gsize size, - GstVC1SeqStructB *structb); - -GstVC1ParserResult -gst_vc1_parse_sequence_header_struct_c (const guint8 *data, - gsize size, - GstVC1SeqStructC *structc); - -GstVC1ParserResult gst_vc1_parse_frame_layer (const guint8 *data, - gsize size, - GstVC1FrameLayer * framelayer); - -GstVC1ParserResult gst_vc1_parse_frame_header (const guint8 *data, - gsize size, - GstVC1FrameHdr * framehdr, - GstVC1SeqHdr *seqhdr, - GstVC1BitPlanes *bitplanes); - -GstVC1ParserResult gst_vc1_parse_field_header (const guint8 *data, - gsize size, - GstVC1FrameHdr * fieldhdr, - GstVC1SeqHdr *seqhdr, - GstVC1BitPlanes *bitplanes); - -GstVC1BitPlanes * gst_vc1_bitplanes_new (void); - -void gst_vc1_bitplanes_free (GstVC1BitPlanes *bitplanes); - -void gst_vc1_bitplanes_free_1 (GstVC1BitPlanes *bitplanes); - -gboolean gst_vc1_bitplanes_ensure_size (GstVC1BitPlanes *bitplanes, - GstVC1SeqHdr *seqhdr); - -G_END_DECLS -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h deleted file mode 100644 index 26bfc6dc..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstargbcontrolbinding.h +++ /dev/null @@ -1,98 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Stefan Sauer - * - * gstargbcontrolbinding.h: Attachment for multiple control sources to gargb - * properties - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ARGB_CONTROL_BINDING_H__ -#define __GST_ARGB_CONTROL_BINDING_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ARGB_CONTROL_BINDING \ - (gst_argb_control_binding_get_type()) -#define GST_ARGB_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ARGB_CONTROL_BINDING,GstARGBControlBinding)) -#define GST_ARGB_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ARGB_CONTROL_BINDING,GstARGBControlBindingClass)) -#define GST_IS_ARGB_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ARGB_CONTROL_BINDING)) -#define GST_IS_ARGB_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ARGB_CONTROL_BINDING)) -#define GST_ARGB_CONTROL_BINDING_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstARGBControlBindingClass)) - -typedef struct _GstARGBControlBinding GstARGBControlBinding; -typedef struct _GstARGBControlBindingClass GstARGBControlBindingClass; - -/** - * GstARGBControlBinding: - * @name: name of the property of this binding - * - * The instance structure of #GstARGBControlBinding. - */ -struct _GstARGBControlBinding { - GstControlBinding parent; - - /*< private >*/ - GstControlSource *cs_a; /* GstControlSources for this property */ - GstControlSource *cs_r; - GstControlSource *cs_g; - GstControlSource *cs_b; - - GValue cur_value; - guint32 last_value; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstARGBControlBindingClass: - * @parent_class: Parent class - * @convert: Class method to convert control-values - * - * The class structure of #GstARGBControlBinding. - */ - -struct _GstARGBControlBindingClass -{ - GstControlBindingClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_argb_control_binding_get_type (void); - -/* Functions */ - -GstControlBinding * gst_argb_control_binding_new (GstObject * object, const gchar * property_name, - GstControlSource * cs_a, GstControlSource * cs_r, - GstControlSource * cs_g, GstControlSource * cs_b); - -G_END_DECLS - -#endif /* __GST_ARGB_CONTROL_BINDING_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h deleted file mode 100644 index 24ece6d2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstdirectcontrolbinding.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Stefan Sauer - * - * gstdirectcontrolbinding.h: Direct attachment for control sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_DIRECT_CONTROL_BINDING_H__ -#define __GST_DIRECT_CONTROL_BINDING_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_DIRECT_CONTROL_BINDING \ - (gst_direct_control_binding_get_type()) -#define GST_DIRECT_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DIRECT_CONTROL_BINDING,GstDirectControlBinding)) -#define GST_DIRECT_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DIRECT_CONTROL_BINDING,GstDirectControlBindingClass)) -#define GST_IS_DIRECT_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DIRECT_CONTROL_BINDING)) -#define GST_IS_DIRECT_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DIRECT_CONTROL_BINDING)) -#define GST_DIRECT_CONTROL_BINDING_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstDirectControlBindingClass)) - -typedef struct _GstDirectControlBinding GstDirectControlBinding; -typedef struct _GstDirectControlBindingClass GstDirectControlBindingClass; - -/** - * GstDirectControlBindingConvertValue: - * @self: the #GstDirectControlBinding instance - * @src_value: the value returned by the cotnrol source - * @dest_value: the target location - * - * Function to map a control-value to the target plain data type. - */ -typedef void (* GstDirectControlBindingConvertValue) (GstDirectControlBinding *self, gdouble src_value, gpointer dest_value); - -/** - * GstDirectControlBindingConvertGValue: - * @self: the #GstDirectControlBinding instance - * @src_value: the value returned by the cotnrol source - * @dest_value: the target GValue - * - * Function to map a control-value to the target GValue. - */ -typedef void (* GstDirectControlBindingConvertGValue) (GstDirectControlBinding *self, gdouble src_value, GValue *dest_value); - -/** - * GstDirectControlBinding: - * @name: name of the property of this binding - * - * The instance structure of #GstDirectControlBinding. - */ -struct _GstDirectControlBinding { - GstControlBinding parent; - - /*< private >*/ - GstControlSource *cs; /* GstControlSource for this property */ - GValue cur_value; - gdouble last_value; - gint byte_size; - - GstDirectControlBindingConvertValue convert_value; - GstDirectControlBindingConvertGValue convert_g_value; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstDirectControlBindingClass: - * @parent_class: Parent class - * @convert: Class method to convert control-values - * - * The class structure of #GstDirectControlBinding. - */ - -struct _GstDirectControlBindingClass -{ - GstControlBindingClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_direct_control_binding_get_type (void); - -/* Functions */ - -GstControlBinding * gst_direct_control_binding_new (GstObject * object, const gchar * property_name, - GstControlSource * cs); -G_END_DECLS - -#endif /* __GST_DIRECT_CONTROL_BINDING_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h deleted file mode 100644 index daf17bd8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstinterpolationcontrolsource.h +++ /dev/null @@ -1,97 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * - * gstinterpolationcontrolsource.h: Control source that provides several - * interpolation methods - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_INTERPOLATION_CONTROL_SOURCE_H__ -#define __GST_INTERPOLATION_CONTROL_SOURCE_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_INTERPOLATION_CONTROL_SOURCE \ - (gst_interpolation_control_source_get_type ()) -#define GST_INTERPOLATION_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_INTERPOLATION_CONTROL_SOURCE, GstInterpolationControlSource)) -#define GST_INTERPOLATION_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_INTERPOLATION_CONTROL_SOURCE, GstInterpolationControlSourceClass)) -#define GST_IS_INTERPOLATION_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_INTERPOLATION_CONTROL_SOURCE)) -#define GST_IS_INTERPOLATION_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_INTERPOLATION_CONTROL_SOURCE)) -#define GST_INTERPOLATION_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_INTERPOLATION_CONTROL_SOURCE, GstInterpolationControlSourceClass)) - -#define GST_TYPE_INTERPOLATION_MODE (gst_interpolation_mode_get_type ()) - -typedef struct _GstInterpolationControlSource GstInterpolationControlSource; -typedef struct _GstInterpolationControlSourceClass GstInterpolationControlSourceClass; -typedef struct _GstInterpolationControlSourcePrivate GstInterpolationControlSourcePrivate; - -/** - * GstInterpolationMode: - * @GST_INTERPOLATION_MODE_NONE: steps-like interpolation, default - * @GST_INTERPOLATION_MODE_LINEAR: linear interpolation - * @GST_INTERPOLATION_MODE_CUBIC: cubic interpolation - * - * The various interpolation modes available. - */ -typedef enum -{ - GST_INTERPOLATION_MODE_NONE, - GST_INTERPOLATION_MODE_LINEAR, - GST_INTERPOLATION_MODE_CUBIC -} GstInterpolationMode; - -/** - * GstInterpolationControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstInterpolationControlSource { - GstTimedValueControlSource parent; - - /*< private >*/ - GstInterpolationControlSourcePrivate *priv; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstInterpolationControlSourceClass { - GstTimedValueControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_interpolation_control_source_get_type (void); -GType gst_interpolation_mode_get_type (void); - -/* Functions */ - -GstControlSource * gst_interpolation_control_source_new (void); - -G_END_DECLS - -#endif /* __GST_INTERPOLATION_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h deleted file mode 100644 index 2ce6d842..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gstlfocontrolsource.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * - * gstlfocontrolsource.h: Control source that provides some periodic waveforms - * as control values. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_LFO_CONTROL_SOURCE_H__ -#define __GST_LFO_CONTROL_SOURCE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_LFO_CONTROL_SOURCE \ - (gst_lfo_control_source_get_type ()) -#define GST_LFO_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_LFO_CONTROL_SOURCE, GstLFOControlSource)) -#define GST_LFO_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_LFO_CONTROL_SOURCE, GstLFOControlSourceClass)) -#define GST_IS_LFO_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_LFO_CONTROL_SOURCE)) -#define GST_IS_LFO_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_LFO_CONTROL_SOURCE)) -#define GST_LFO_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_LFO_CONTROL_SOURCE, GstLFOControlSourceClass)) - -#define GST_TYPE_LFO_WAVEFORM (gst_lfo_waveform_get_type ()) - -typedef struct _GstLFOControlSource GstLFOControlSource; -typedef struct _GstLFOControlSourceClass GstLFOControlSourceClass; -typedef struct _GstLFOControlSourcePrivate GstLFOControlSourcePrivate; - -/** - * GstLFOWaveform: - * @GST_LFO_WAVEFORM_SINE: sine waveform - * @GST_LFO_WAVEFORM_SQUARE: square waveform - * @GST_LFO_WAVEFORM_SAW: saw waveform - * @GST_LFO_WAVEFORM_REVERSE_SAW: reverse saw waveform - * @GST_LFO_WAVEFORM_TRIANGLE: triangle waveform - * - * The various waveform modes available. - */ -typedef enum -{ - GST_LFO_WAVEFORM_SINE, - GST_LFO_WAVEFORM_SQUARE, - GST_LFO_WAVEFORM_SAW, - GST_LFO_WAVEFORM_REVERSE_SAW, - GST_LFO_WAVEFORM_TRIANGLE -} GstLFOWaveform; - -/** - * GstLFOControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstLFOControlSource { - GstControlSource parent; - - /* */ - GstLFOControlSourcePrivate *priv; - GMutex lock; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstLFOControlSourceClass { - GstControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_lfo_control_source_get_type (void); -GType gst_lfo_waveform_get_type (void); - -/* Functions */ - -GstControlSource *gst_lfo_control_source_new (void); - -G_END_DECLS - -#endif /* __GST_LFO_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h deleted file mode 100644 index 06577cb3..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttimedvaluecontrolsource.h +++ /dev/null @@ -1,133 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * 2011 Stefan Sauer - * - * gsttimedvaluecontrolsource.h: Base class for timeed value based control - * sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TIMED_VALUE_CONTROL_SOURCE_H__ -#define __GST_TIMED_VALUE_CONTROL_SOURCE_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TIMED_VALUE_CONTROL_SOURCE \ - (gst_timed_value_control_source_get_type ()) -#define GST_TIMED_VALUE_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSource)) -#define GST_TIMED_VALUE_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSourceClass)) -#define GST_IS_TIMED_VALUE_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE)) -#define GST_IS_TIMED_VALUE_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE)) -#define GST_TIMED_VALUE_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSourceClass)) - -typedef struct _GstTimedValueControlSource GstTimedValueControlSource; -typedef struct _GstTimedValueControlSourceClass GstTimedValueControlSourceClass; -typedef struct _GstTimedValueControlSourcePrivate GstTimedValueControlSourcePrivate; -typedef struct _GstControlPoint GstControlPoint; - -/** - * GstControlPoint: - * - * a internal structure for value+time and various temporary - * values used for interpolation. This "inherits" from - * GstTimedValue. - */ -struct _GstControlPoint -{ - /* fields from GstTimedValue. DO NOT CHANGE! */ - GstClockTime timestamp; /* timestamp of the value change */ - gdouble value; /* the new value */ - - /* internal fields */ - - /* Caches for the interpolators */ - /* FIXME: we should not have this here already ... */ - union { - struct { - gdouble h; - gdouble z; - } cubic; - } cache; - -}; - -/** - * GstTimedValueControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstTimedValueControlSource { - GstControlSource parent; - - /*< protected >*/ - GMutex lock; - - GSequence *values; /* List of GstControlPoint */ - gint nvalues; /* Number of control points */ - gboolean valid_cache; - - /*< private >*/ - GstTimedValueControlSourcePrivate *priv; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTimedValueControlSourceClass { - GstControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_TIMED_VALUE_CONTROL_SOURCE_LOCK(o) \ - g_mutex_lock(&((GstTimedValueControlSource *)o)->lock) -#define GST_TIMED_VALUE_CONTROL_SOURCE_UNLOCK(o) \ - g_mutex_unlock(&((GstTimedValueControlSource *)o)->lock) - -GType gst_timed_value_control_source_get_type (void); - -/* Functions */ - -GSequenceIter * gst_timed_value_control_source_find_control_point_iter ( - GstTimedValueControlSource * self, - GstClockTime timestamp); - -gboolean gst_timed_value_control_source_set (GstTimedValueControlSource * self, - GstClockTime timestamp, - const gdouble value); -gboolean gst_timed_value_control_source_set_from_list (GstTimedValueControlSource * self, - const GSList * timedvalues); -gboolean gst_timed_value_control_source_unset (GstTimedValueControlSource * self, - GstClockTime timestamp); -void gst_timed_value_control_source_unset_all (GstTimedValueControlSource *self); -GList * gst_timed_value_control_source_get_all (GstTimedValueControlSource * self); -gint gst_timed_value_control_source_get_count (GstTimedValueControlSource * self); -void gst_timed_value_control_invalidate_cache (GstTimedValueControlSource * self); - -G_END_DECLS - -#endif /* __GST_TIMED_VALUE_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h deleted file mode 100644 index 1f1f1326..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/controller/gsttriggercontrolsource.h +++ /dev/null @@ -1,83 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * 2011 Stefan Sauer - * - * gsttriggercontrolsource.h: Control source that provides some values at time- - * stamps - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TRIGGER_CONTROL_SOURCE_H__ -#define __GST_TRIGGER_CONTROL_SOURCE_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TRIGGER_CONTROL_SOURCE \ - (gst_trigger_control_source_get_type ()) -#define GST_TRIGGER_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TRIGGER_CONTROL_SOURCE, GstTriggerControlSource)) -#define GST_TRIGGER_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_TRIGGER_CONTROL_SOURCE, GstTriggerControlSourceClass)) -#define GST_IS_TRIGGER_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TRIGGER_CONTROL_SOURCE)) -#define GST_IS_TRIGGER_CONTROL_SOURCE_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_TRIGGER_CONTROL_SOURCE)) -#define GST_TRIGGER_CONTROL_SOURCE_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_TRIGGER_CONTROL_SOURCE, GstTriggerControlSourceClass)) - -#define GST_TYPE_TRIGGER_WAVEFORM (gst_trigger_waveform_get_type ()) - -typedef struct _GstTriggerControlSource GstTriggerControlSource; -typedef struct _GstTriggerControlSourceClass GstTriggerControlSourceClass; -typedef struct _GstTriggerControlSourcePrivate GstTriggerControlSourcePrivate; - -/** - * GstTriggerControlSource: - * - * The instance structure of #GstControlSource. - */ -struct _GstTriggerControlSource { - GstTimedValueControlSource parent; - - /*< private >*/ - GstTriggerControlSourcePrivate *priv; - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTriggerControlSourceClass { - GstTimedValueControlSourceClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_trigger_control_source_get_type (void); - -/* Functions */ - -GstControlSource *gst_trigger_control_source_new (void); - -G_END_DECLS - -#endif /* __GST_TRIGGER_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfft.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfft.h deleted file mode 100644 index 9071b1c8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfft.h +++ /dev/null @@ -1,53 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include - -#ifndef __GST_FFT_H__ -#define __GST_FFT_H__ - -G_BEGIN_DECLS - -/** - * GstFFTWindow: - * @GST_FFT_WINDOW_RECTANGULAR: Rectangular window - * @GST_FFT_WINDOW_HAMMING: Hamming window - * @GST_FFT_WINDOW_HANN: Hann (sometimes also called Hanning) window - * @GST_FFT_WINDOW_BARTLETT: Bartlett window - * @GST_FFT_WINDOW_BLACKMAN: Blackman window - * - * The various window functions available. - */ -typedef enum -{ - GST_FFT_WINDOW_RECTANGULAR, - GST_FFT_WINDOW_HAMMING, - GST_FFT_WINDOW_HANN, - GST_FFT_WINDOW_BARTLETT, - GST_FFT_WINDOW_BLACKMAN -} GstFFTWindow; - -/* Functions */ - -gint gst_fft_next_fast_length (gint n) G_GNUC_CONST; - -G_END_DECLS - -#endif /* __GST_FFT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf32.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf32.h deleted file mode 100644 index 60bf98c0..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf32.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_F32_H__ -#define __GST_FFT_F32_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTF32 GstFFTF32; -typedef struct _GstFFTF32Complex GstFFTF32Complex; - -/* Copy of kiss_fft_f32_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTF32Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * 32 bit float. - */ -struct _GstFFTF32Complex -{ - gfloat r; - gfloat i; -}; - -/* Functions */ -GstFFTF32 * gst_fft_f32_new (gint len, gboolean inverse); -void gst_fft_f32_free (GstFFTF32 *self); - -void gst_fft_f32_fft (GstFFTF32 *self, const gfloat *timedata, - GstFFTF32Complex *freqdata); -void gst_fft_f32_inverse_fft (GstFFTF32 *self, const GstFFTF32Complex *freqdata, - gfloat *timedata); - -void gst_fft_f32_window (GstFFTF32 *self, gfloat *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_F32_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf64.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf64.h deleted file mode 100644 index 782bd8b7..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstfftf64.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_F64_H__ -#define __GST_FFT_F64_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTF64 GstFFTF64; -typedef struct _GstFFTF64Complex GstFFTF64Complex; - -/* Copy of kiss_fft_f64_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTF64Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * 64 bit float. - */ -struct _GstFFTF64Complex -{ - gdouble r; - gdouble i; -}; - -/* Functions */ -GstFFTF64 * gst_fft_f64_new (gint len, gboolean inverse); -void gst_fft_f64_free (GstFFTF64 *self); - -void gst_fft_f64_fft (GstFFTF64 *self, const gdouble *timedata, - GstFFTF64Complex *freqdata); -void gst_fft_f64_inverse_fft (GstFFTF64 *self, const GstFFTF64Complex *freqdata, - gdouble *timedata); - -void gst_fft_f64_window (GstFFTF64 *self, gdouble *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_F64_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts16.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts16.h deleted file mode 100644 index 4f94bb01..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts16.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_S16_H__ -#define __GST_FFT_S16_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTS16 GstFFTS16; -typedef struct _GstFFTS16Complex GstFFTS16Complex; - -/* Copy of kiss_fft_s16_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTS16Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * signed 16 bit integers. - */ -struct _GstFFTS16Complex -{ - gint16 r; - gint16 i; -}; - -/* Functions */ -GstFFTS16 * gst_fft_s16_new (gint len, gboolean inverse); -void gst_fft_s16_free (GstFFTS16 *self); - -void gst_fft_s16_fft (GstFFTS16 *self, const gint16 *timedata, - GstFFTS16Complex *freqdata); -void gst_fft_s16_inverse_fft (GstFFTS16 *self, const GstFFTS16Complex *freqdata, - gint16 *timedata); - -void gst_fft_s16_window (GstFFTS16 *self, gint16 *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_S16_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts32.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts32.h deleted file mode 100644 index 99d7815d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/fft/gstffts32.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_FFT_S32_H__ -#define __GST_FFT_S32_H__ - -#include -#include - -#include "gstfft.h" - -G_BEGIN_DECLS - -typedef struct _GstFFTS32 GstFFTS32; -typedef struct _GstFFTS32Complex GstFFTS32Complex; - -/* Copy of kiss_fft_s32_cpx for documentation reasons, - * do NOT change! */ - -/** - * GstFFTS32Complex: - * @r: Real part - * @i: Imaginary part - * - * Data type for complex numbers composed of - * signed 32 bit integers. - */ -struct _GstFFTS32Complex -{ - gint32 r; - gint32 i; -}; - -/* Functions */ -GstFFTS32 * gst_fft_s32_new (gint len, gboolean inverse); -void gst_fft_s32_free (GstFFTS32 *self); - -void gst_fft_s32_fft (GstFFTS32 *self, const gint32 *timedata, - GstFFTS32Complex *freqdata); -void gst_fft_s32_inverse_fft (GstFFTS32 *self, const GstFFTS32Complex *freqdata, - gint32 *timedata); - -void gst_fft_s32_window (GstFFTS32 *self, gint32 *timedata, GstFFTWindow window); - -G_END_DECLS - -#endif /* __GST_FFT_S32_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/glib-compat.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/glib-compat.h deleted file mode 100644 index 77943068..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/glib-compat.h +++ /dev/null @@ -1,37 +0,0 @@ -/* GStreamer - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * glib-compat.h: Public GLib compatibility shims - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -/* - * Modified by the GLib Team and others 1997-2000. See the AUTHORS file from - * glib-2.8.0 for a list of people on the GLib Team. See the ChangeLog files - * from glib-2.8.0 for a list of changes. These files are distributed with GLib - * at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GST_GLIB_COMPAT_H__ -#define __GST_GLIB_COMPAT_H__ - -G_BEGIN_DECLS - -G_END_DECLS - -#endif /* __GST_GLIB_COMPAT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gst.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gst.h deleted file mode 100644 index 31887583..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gst.h +++ /dev/null @@ -1,108 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gst.h: Main header for GStreamer, apps should include this - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_H__ -#define __GST_H__ - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* API compatibility stuff */ -#include - -G_BEGIN_DECLS - -void gst_init (int *argc, char **argv[]); -gboolean gst_init_check (int *argc, char **argv[], - GError ** err); -gboolean gst_is_initialized (void); -GOptionGroup * gst_init_get_option_group (void); -void gst_deinit (void); - -void gst_version (guint *major, guint *minor, - guint *micro, guint *nano); -gchar * gst_version_string (void); - -gboolean gst_segtrap_is_enabled (void); -void gst_segtrap_set_enabled (gboolean enabled); - -gboolean gst_registry_fork_is_enabled (void); -void gst_registry_fork_set_enabled (gboolean enabled); - -gboolean gst_update_registry (void); - -G_END_DECLS - -#endif /* __GST_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstallocator.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstallocator.h deleted file mode 100644 index f9edd50f..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstallocator.h +++ /dev/null @@ -1,159 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Wim Taymans - * - * gstallocator.h: Header for memory allocation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_ALLOCATOR_H__ -#define __GST_ALLOCATOR_H__ - -#include - -G_BEGIN_DECLS - -typedef struct _GstAllocatorPrivate GstAllocatorPrivate; -typedef struct _GstAllocatorClass GstAllocatorClass; - -#define GST_TYPE_ALLOCATOR (gst_allocator_get_type()) -#define GST_IS_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ALLOCATOR)) -#define GST_IS_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ALLOCATOR)) -#define GST_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ALLOCATOR, GstAllocatorClass)) -#define GST_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ALLOCATOR, GstAllocator)) -#define GST_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ALLOCATOR, GstAllocatorClass)) -#define GST_ALLOCATOR_CAST(obj) ((GstAllocator *)(obj)) - -#define GST_TYPE_ALLOCATION_PARAMS (gst_allocation_params_get_type()) -GType gst_allocation_params_get_type(void); - -typedef struct _GstAllocationParams GstAllocationParams; - -/** - * gst_memory_alignment: - * - * The default memory alignment in bytes - 1 - * an alignment of 7 would be the same as what malloc() guarantees. - */ -GST_EXPORT gsize gst_memory_alignment; - -/** - * GST_ALLOCATOR_SYSMEM: - * - * The allocator name for the default system memory allocator - */ -#define GST_ALLOCATOR_SYSMEM "SystemMemory" - -/** - * GstAllocationParams: - * @flags: flags to control allocation - * @align: the desired alignment of the memory - * @prefix: the desired prefix - * @padding: the desired padding - * - * Parameters to control the allocation of memory - */ -struct _GstAllocationParams { - GstMemoryFlags flags; - gsize align; - gsize prefix; - gsize padding; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstAllocatorFlags: - * @GST_ALLOCATOR_FLAG_CUSTOM_ALLOC: The allocator has a custom alloc function. - * @GST_ALLOCATOR_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags for allocators. - */ -typedef enum { - GST_ALLOCATOR_FLAG_CUSTOM_ALLOC = (GST_OBJECT_FLAG_LAST << 0), - - GST_ALLOCATOR_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) -} GstAllocatorFlags; - -/** - * GstAllocator: - * @object: parent structure - * @mem_type: the memory type this allocator provides - * @mem_map: the implementation of the GstMemoryMapFunction - * @mem_unmap: the implementation of the GstMemoryUnmapFunction - * @mem_copy: the implementation of the GstMemoryCopyFunction - * @mem_share: the implementation of the GstMemoryShareFunction - * @mem_is_span: the implementation of the GstMemoryIsSpanFunction - * - * The #GstAllocator is used to create new memory. - */ -struct _GstAllocator -{ - GstObject object; - - const gchar *mem_type; - - GstMemoryMapFunction mem_map; - GstMemoryUnmapFunction mem_unmap; - - GstMemoryCopyFunction mem_copy; - GstMemoryShareFunction mem_share; - GstMemoryIsSpanFunction mem_is_span; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; - - GstAllocatorPrivate *priv; -}; - -struct _GstAllocatorClass { - GstObjectClass object_class; - - GstMemory * (*alloc) (GstAllocator *allocator, gsize size, - GstAllocationParams *params); - void (*free) (GstAllocator *allocator, GstMemory *memory); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_allocator_get_type(void); - -/* allocators */ -void gst_allocator_register (const gchar *name, GstAllocator *allocator); -GstAllocator * gst_allocator_find (const gchar *name); -void gst_allocator_set_default (GstAllocator * allocator); - -/* allocation parameters */ -void gst_allocation_params_init (GstAllocationParams *params); -GstAllocationParams * - gst_allocation_params_copy (const GstAllocationParams *params) G_GNUC_MALLOC; -void gst_allocation_params_free (GstAllocationParams *params); - -/* allocating memory blocks */ -GstMemory * gst_allocator_alloc (GstAllocator * allocator, gsize size, - GstAllocationParams *params); -void gst_allocator_free (GstAllocator * allocator, GstMemory *memory); - -GstMemory * gst_memory_new_wrapped (GstMemoryFlags flags, gpointer data, gsize maxsize, - gsize offset, gsize size, gpointer user_data, - GDestroyNotify notify); - -G_END_DECLS - -#endif /* __GST_ALLOCATOR_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstatomicqueue.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstatomicqueue.h deleted file mode 100644 index af6d693c..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstatomicqueue.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GStreamer - * Copyright (C) 2009-2010 Edward Hervey - * (C) 2011 Wim Taymans - * - * gstatomicqueue.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#ifndef __GST_ATOMIC_QUEUE_H__ -#define __GST_ATOMIC_QUEUE_H__ - -G_BEGIN_DECLS - -#define GST_TYPE_ATOMIC_QUEUE (gst_atomic_queue_get_type()) - -/** - * GstAtomicQueue: - * - * Opaque atomic data queue. - * - * Use the acessor functions to get the stored values. - */ -typedef struct _GstAtomicQueue GstAtomicQueue; - - -GType gst_atomic_queue_get_type (void); - -GstAtomicQueue * gst_atomic_queue_new (guint initial_size) G_GNUC_MALLOC; - -void gst_atomic_queue_ref (GstAtomicQueue * queue); -void gst_atomic_queue_unref (GstAtomicQueue * queue); - -void gst_atomic_queue_push (GstAtomicQueue* queue, gpointer data); -gpointer gst_atomic_queue_pop (GstAtomicQueue* queue); -gpointer gst_atomic_queue_peek (GstAtomicQueue* queue); - -guint gst_atomic_queue_length (GstAtomicQueue * queue); - -G_END_DECLS - -#endif /* __GST_ATOMIC_QUEUE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbin.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbin.h deleted file mode 100644 index 06cbc743..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbin.h +++ /dev/null @@ -1,204 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstbin.h: Header for GstBin container object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BIN_H__ -#define __GST_BIN_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BIN (gst_bin_get_type ()) -#define GST_IS_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_BIN)) -#define GST_IS_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_BIN)) -#define GST_BIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BIN, GstBinClass)) -#define GST_BIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_BIN, GstBin)) -#define GST_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_BIN, GstBinClass)) -#define GST_BIN_CAST(obj) ((GstBin*)(obj)) - -/** - * GstBinFlags: - * @GST_BIN_FLAG_NO_RESYNC: don't resync a state change when elements are - * added or linked in the bin (Since 1.0.5) - * @GST_BIN_FLAG_LAST: the last enum in the series of flags for bins. - * Derived classes can use this as first value in a list of flags. - * - * GstBinFlags are a set of flags specific to bins. Most are set/used - * internally. They can be checked using the GST_OBJECT_FLAG_IS_SET () macro, - * and (un)set using GST_OBJECT_FLAG_SET () and GST_OBJECT_FLAG_UNSET (). - */ -typedef enum { - GST_BIN_FLAG_NO_RESYNC = (GST_ELEMENT_FLAG_LAST << 0), - /* padding */ - GST_BIN_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 5) -} GstBinFlags; - -/** - * GST_BIN_IS_NO_RESYNC: - * @bin: A #GstBin - * - * Check if @bin will resync its state change when elements are added and - * removed. - * - * Since: 1.0.5 - */ -#define GST_BIN_IS_NO_RESYNC(bin) (GST_OBJECT_FLAG_IS_SET(bin,GST_BIN_FLAG_NO_RESYNC)) - -typedef struct _GstBin GstBin; -typedef struct _GstBinClass GstBinClass; -typedef struct _GstBinPrivate GstBinPrivate; - -/** - * GST_BIN_NUMCHILDREN: - * @bin: a #GstBin - * - * Gets the number of children in a bin. - */ -#define GST_BIN_NUMCHILDREN(bin) (GST_BIN_CAST(bin)->numchildren) -/** - * GST_BIN_CHILDREN: - * @bin: a #GstBin - * - * Gets the list with children in a bin. - */ -#define GST_BIN_CHILDREN(bin) (GST_BIN_CAST(bin)->children) -/** - * GST_BIN_CHILDREN_COOKIE: - * @bin: a #GstBin - * - * Gets the children cookie that watches the children list. - */ -#define GST_BIN_CHILDREN_COOKIE(bin) (GST_BIN_CAST(bin)->children_cookie) - -/** - * GstBin: - * @numchildren: the number of children in this bin - * @children: (element-type Gst.Element): the list of children in this bin - * @children_cookie: updated whenever @children changes - * @child_bus: internal bus for handling child messages - * @messages: (element-type Gst.Message): queued and cached messages - * @polling: the bin is currently calculating its state - * @state_dirty: the bin needs to recalculate its state (deprecated) - * @clock_dirty: the bin needs to select a new clock - * @provided_clock: the last clock selected - * @clock_provider: the element that provided @provided_clock - * - * The GstBin base class. Subclasses can access these fields provided - * the LOCK is taken. - */ -struct _GstBin { - GstElement element; - - /*< public >*/ /* with LOCK */ - /* our children, subclass are supposed to update these - * fields to reflect their state with _iterate_*() */ - gint numchildren; - GList *children; - guint32 children_cookie; - - GstBus *child_bus; - GList *messages; - - gboolean polling; - gboolean state_dirty; - - gboolean clock_dirty; - GstClock *provided_clock; - GstElement *clock_provider; - - /*< private >*/ - GstBinPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstBinClass: - * @parent_class: bin parent class - * @add_element: method to add an element to a bin - * @remove_element: method to remove an element from a bin - * @handle_message: method to handle a message from the children - * - * Subclasses can override the @add_element and @remove_element to - * update the list of children in the bin. - * - * The @handle_message method can be overridden to implement custom - * message handling. @handle_message takes ownership of the message, just like - * #gst_element_post_message. - */ -struct _GstBinClass { - GstElementClass parent_class; - - /*< private >*/ - GThreadPool *pool; - - /* signals */ - void (*element_added) (GstBin *bin, GstElement *child); - void (*element_removed) (GstBin *bin, GstElement *child); - - /*< public >*/ - /* virtual methods for subclasses */ - gboolean (*add_element) (GstBin *bin, GstElement *element); - gboolean (*remove_element) (GstBin *bin, GstElement *element); - - void (*handle_message) (GstBin *bin, GstMessage *message); - - /*< private >*/ - /* signal */ - gboolean (*do_latency) (GstBin *bin); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_bin_get_type (void); -GstElement* gst_bin_new (const gchar *name); - -/* add and remove elements from the bin */ -gboolean gst_bin_add (GstBin *bin, GstElement *element); -gboolean gst_bin_remove (GstBin *bin, GstElement *element); - -/* retrieve a single child */ -GstElement* gst_bin_get_by_name (GstBin *bin, const gchar *name); -GstElement* gst_bin_get_by_name_recurse_up (GstBin *bin, const gchar *name); -GstElement* gst_bin_get_by_interface (GstBin *bin, GType iface); - -/* retrieve multiple children */ -GstIterator* gst_bin_iterate_elements (GstBin *bin); -GstIterator* gst_bin_iterate_sorted (GstBin *bin); -GstIterator* gst_bin_iterate_recurse (GstBin *bin); - -GstIterator* gst_bin_iterate_sinks (GstBin *bin); -GstIterator* gst_bin_iterate_sources (GstBin *bin); -GstIterator* gst_bin_iterate_all_by_interface (GstBin *bin, GType iface); - -/* latency */ -gboolean gst_bin_recalculate_latency (GstBin * bin); - - -G_END_DECLS - - -#endif /* __GST_BIN_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbuffer.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbuffer.h deleted file mode 100644 index 49ad3d54..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbuffer.h +++ /dev/null @@ -1,543 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstbuffer.h: Header for GstBuffer object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BUFFER_H__ -#define __GST_BUFFER_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_buffer_type; - -typedef struct _GstBuffer GstBuffer; -typedef struct _GstBufferPool GstBufferPool; - -#define GST_TYPE_BUFFER (_gst_buffer_type) -#define GST_IS_BUFFER(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER)) -#define GST_BUFFER_CAST(obj) ((GstBuffer *)(obj)) -#define GST_BUFFER(obj) (GST_BUFFER_CAST(obj)) - -/** - * GST_BUFFER_FLAGS: - * @buf: a #GstBuffer. - * - * A flags word containing #GstBufferFlag flags set on this buffer. - */ -#define GST_BUFFER_FLAGS(buf) GST_MINI_OBJECT_FLAGS(buf) -/** - * GST_BUFFER_FLAG_IS_SET: - * @buf: a #GstBuffer. - * @flag: the #GstBufferFlag to check. - * - * Gives the status of a specific flag on a buffer. - */ -#define GST_BUFFER_FLAG_IS_SET(buf,flag) GST_MINI_OBJECT_FLAG_IS_SET (buf, flag) -/** - * GST_BUFFER_FLAG_SET: - * @buf: a #GstBuffer. - * @flag: the #GstBufferFlag to set. - * - * Sets a buffer flag on a buffer. - */ -#define GST_BUFFER_FLAG_SET(buf,flag) GST_MINI_OBJECT_FLAG_SET (buf, flag) -/** - * GST_BUFFER_FLAG_UNSET: - * @buf: a #GstBuffer. - * @flag: the #GstBufferFlag to clear. - * - * Clears a buffer flag. - */ -#define GST_BUFFER_FLAG_UNSET(buf,flag) GST_MINI_OBJECT_FLAG_UNSET (buf, flag) - - -/** - * GST_BUFFER_PTS: - * @buf: a #GstBuffer.: - * - * The presentation timestamp (pts) in nanoseconds (as a #GstClockTime) - * of the data in the buffer. This is the timestamp when the media should be - * presented to the user. - * Value will be %GST_CLOCK_TIME_NONE if the pts is unknown. - */ -#define GST_BUFFER_PTS(buf) (GST_BUFFER_CAST(buf)->pts) -/** - * GST_BUFFER_DTS: - * @buf: a #GstBuffer.: - * - * The decoding timestamp (dts) in nanoseconds (as a #GstClockTime) - * of the data in the buffer. This is the timestamp when the media should be - * decoded or processed otherwise. - * Value will be %GST_CLOCK_TIME_NONE if the dts is unknown. - */ -#define GST_BUFFER_DTS(buf) (GST_BUFFER_CAST(buf)->dts) -/** - * GST_BUFFER_DURATION: - * @buf: a #GstBuffer. - * - * The duration in nanoseconds (as a #GstClockTime) of the data in the buffer. - * Value will be %GST_CLOCK_TIME_NONE if the duration is unknown. - */ -#define GST_BUFFER_DURATION(buf) (GST_BUFFER_CAST(buf)->duration) -/** - * GST_BUFFER_OFFSET: - * @buf: a #GstBuffer. - * - * The offset in the source file of the beginning of this buffer. - */ -#define GST_BUFFER_OFFSET(buf) (GST_BUFFER_CAST(buf)->offset) -/** - * GST_BUFFER_OFFSET_END: - * @buf: a #GstBuffer. - * - * The offset in the source file of the end of this buffer. - */ -#define GST_BUFFER_OFFSET_END(buf) (GST_BUFFER_CAST(buf)->offset_end) - -/** - * GST_BUFFER_OFFSET_NONE: - * - * Constant for no-offset return results. - */ -#define GST_BUFFER_OFFSET_NONE ((guint64)-1) - -/** - * GST_BUFFER_DURATION_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the duration is known. - */ -#define GST_BUFFER_DURATION_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) -/** - * GST_BUFFER_PTS_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the pts is known. - */ -#define GST_BUFFER_PTS_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buffer))) -/** - * GST_BUFFER_DTS_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the dts is known. - */ -#define GST_BUFFER_DTS_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (buffer))) -/** - * GST_BUFFER_OFFSET_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the start offset is known. - */ -#define GST_BUFFER_OFFSET_IS_VALID(buffer) (GST_BUFFER_OFFSET (buffer) != GST_BUFFER_OFFSET_NONE) -/** - * GST_BUFFER_OFFSET_END_IS_VALID: - * @buffer: a #GstBuffer - * - * Tests if the end offset is known. - */ -#define GST_BUFFER_OFFSET_END_IS_VALID(buffer) (GST_BUFFER_OFFSET_END (buffer) != GST_BUFFER_OFFSET_NONE) -/** - * GST_BUFFER_IS_DISCONT: - * @buffer: a #GstBuffer - * - * Tests if the buffer marks a discontinuity in the stream. - */ -#define GST_BUFFER_IS_DISCONT(buffer) (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) - -/** - * GstBufferFlags: - * @GST_BUFFER_FLAG_LIVE: the buffer is live data and should be discarded in - * the PAUSED state. - * @GST_BUFFER_FLAG_DECODE_ONLY: the buffer contains data that should be dropped - * because it will be clipped against the segment - * boundaries or because it does not contain data - * that should be shown to the user. - * @GST_BUFFER_FLAG_DISCONT: the buffer marks a data discontinuity in the stream. - * This typically occurs after a seek or a dropped buffer - * from a live or network source. - * @GST_BUFFER_FLAG_RESYNC: the buffer timestamps might have a discontinuity - * and this buffer is a good point to resynchronize. - * @GST_BUFFER_FLAG_CORRUPTED: the buffer data is corrupted. - * @GST_BUFFER_FLAG_MARKER: the buffer contains a media specific marker. for - * video this is typically the end of a frame boundary, for audio - * this is usually the start of a talkspurt. - * @GST_BUFFER_FLAG_HEADER: the buffer contains header information that is - * needed to decode the following data. - * @GST_BUFFER_FLAG_GAP: the buffer has been created to fill a gap in the - * stream and contains media neutral data (elements can - * switch to optimized code path that ignores the buffer - * content). - * @GST_BUFFER_FLAG_DROPPABLE: the buffer can be dropped without breaking the - * stream, for example to reduce bandwidth. - * @GST_BUFFER_FLAG_DELTA_UNIT: this unit cannot be decoded independently. - * @GST_BUFFER_FLAG_LAST: additional media specific flags can be added starting from - * this flag. - * - * A set of buffer flags used to describe properties of a #GstBuffer. - */ -typedef enum { - GST_BUFFER_FLAG_LIVE = (GST_MINI_OBJECT_FLAG_LAST << 0), - GST_BUFFER_FLAG_DECODE_ONLY = (GST_MINI_OBJECT_FLAG_LAST << 1), - GST_BUFFER_FLAG_DISCONT = (GST_MINI_OBJECT_FLAG_LAST << 2), - GST_BUFFER_FLAG_RESYNC = (GST_MINI_OBJECT_FLAG_LAST << 3), - GST_BUFFER_FLAG_CORRUPTED = (GST_MINI_OBJECT_FLAG_LAST << 4), - GST_BUFFER_FLAG_MARKER = (GST_MINI_OBJECT_FLAG_LAST << 5), - GST_BUFFER_FLAG_HEADER = (GST_MINI_OBJECT_FLAG_LAST << 6), - GST_BUFFER_FLAG_GAP = (GST_MINI_OBJECT_FLAG_LAST << 7), - GST_BUFFER_FLAG_DROPPABLE = (GST_MINI_OBJECT_FLAG_LAST << 8), - GST_BUFFER_FLAG_DELTA_UNIT = (GST_MINI_OBJECT_FLAG_LAST << 9), - - GST_BUFFER_FLAG_LAST = (GST_MINI_OBJECT_FLAG_LAST << 16) -} GstBufferFlags; - -/** - * GstBuffer: - * @mini_object: the parent structure - * @pool: pointer to the pool owner of the buffer - * @pts: presentation timestamp of the buffer, can be #GST_CLOCK_TIME_NONE when the - * pts is not known or relevant. The pts contains the timestamp when the - * media should be presented to the user. - * @dts: decoding timestamp of the buffer, can be #GST_CLOCK_TIME_NONE when the - * dts is not known or relevant. The dts contains the timestamp when the - * media should be processed. - * @duration: duration in time of the buffer data, can be #GST_CLOCK_TIME_NONE - * when the duration is not known or relevant. - * @offset: a media specific offset for the buffer data. - * For video frames, this is the frame number of this buffer. - * For audio samples, this is the offset of the first sample in this buffer. - * For file data or compressed data this is the byte offset of the first - * byte in this buffer. - * @offset_end: the last offset contained in this buffer. It has the same - * format as @offset. - * - * The structure of a #GstBuffer. Use the associated macros to access the public - * variables. - */ -struct _GstBuffer { - GstMiniObject mini_object; - - /*< public >*/ /* with COW */ - GstBufferPool *pool; - - /* timestamp */ - GstClockTime pts; - GstClockTime dts; - GstClockTime duration; - - /* media specific offset */ - guint64 offset; - guint64 offset_end; -}; - -GType gst_buffer_get_type (void); - -/* allocation */ -GstBuffer * gst_buffer_new (void); -GstBuffer * gst_buffer_new_allocate (GstAllocator * allocator, gsize size, - GstAllocationParams * params); -GstBuffer * gst_buffer_new_wrapped_full (GstMemoryFlags flags, gpointer data, gsize maxsize, - gsize offset, gsize size, gpointer user_data, - GDestroyNotify notify); -GstBuffer * gst_buffer_new_wrapped (gpointer data, gsize size); - -/* memory blocks */ -guint gst_buffer_n_memory (GstBuffer *buffer); -void gst_buffer_insert_memory (GstBuffer *buffer, gint idx, GstMemory *mem); -void gst_buffer_replace_memory_range (GstBuffer *buffer, guint idx, gint length, GstMemory *mem); -GstMemory * gst_buffer_peek_memory (GstBuffer *buffer, guint idx); -GstMemory * gst_buffer_get_memory_range (GstBuffer *buffer, guint idx, gint length); -void gst_buffer_remove_memory_range (GstBuffer *buffer, guint idx, gint length); - -void gst_buffer_prepend_memory (GstBuffer *buffer, GstMemory *mem); -void gst_buffer_append_memory (GstBuffer *buffer, GstMemory *mem); -void gst_buffer_replace_memory (GstBuffer *buffer, guint idx, GstMemory *mem); -void gst_buffer_replace_all_memory (GstBuffer *buffer, GstMemory *mem); -GstMemory * gst_buffer_get_memory (GstBuffer *buffer, guint idx); -GstMemory * gst_buffer_get_all_memory (GstBuffer *buffer); -void gst_buffer_remove_memory (GstBuffer *buffer, guint idx); -void gst_buffer_remove_all_memory (GstBuffer *buffer); - -gboolean gst_buffer_find_memory (GstBuffer *buffer, gsize offset, gsize size, - guint *idx, guint *length, gsize *skip); - -gsize gst_buffer_fill (GstBuffer *buffer, gsize offset, - gconstpointer src, gsize size); -gsize gst_buffer_extract (GstBuffer *buffer, gsize offset, - gpointer dest, gsize size); -gint gst_buffer_memcmp (GstBuffer *buffer, gsize offset, - gconstpointer mem, gsize size); -gsize gst_buffer_memset (GstBuffer *buffer, gsize offset, - guint8 val, gsize size); - -gsize gst_buffer_get_sizes_range (GstBuffer *buffer, guint idx, gint length, - gsize *offset, gsize *maxsize); -void gst_buffer_resize_range (GstBuffer *buffer, guint idx, gint length, - gssize offset, gssize size); - -gsize gst_buffer_get_sizes (GstBuffer *buffer, gsize *offset, gsize *maxsize); -gsize gst_buffer_get_size (GstBuffer *buffer); -void gst_buffer_resize (GstBuffer *buffer, gssize offset, gssize size); -void gst_buffer_set_size (GstBuffer *buffer, gssize size); - -gboolean gst_buffer_map_range (GstBuffer *buffer, guint idx, gint length, - GstMapInfo *info, GstMapFlags flags); -gboolean gst_buffer_map (GstBuffer *buffer, GstMapInfo *info, GstMapFlags flags); - -void gst_buffer_unmap (GstBuffer *buffer, GstMapInfo *info); - - -/* refcounting */ -/** - * gst_buffer_ref: - * @buf: a #GstBuffer. - * - * Increases the refcount of the given buffer by one. - * - * Note that the refcount affects the writeability - * of @buf and its metadata, see gst_buffer_is_writable(). - * It is important to note that keeping additional references to - * GstBuffer instances can potentially increase the number - * of memcpy operations in a pipeline. - * - * Returns: (transfer full): @buf - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBuffer * gst_buffer_ref (GstBuffer * buf); -#endif - -static inline GstBuffer * -gst_buffer_ref (GstBuffer * buf) -{ - return (GstBuffer *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (buf)); -} - -/** - * gst_buffer_unref: - * @buf: (transfer full): a #GstBuffer. - * - * Decreases the refcount of the buffer. If the refcount reaches 0, the buffer - * with the associated metadata and memory will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_buffer_unref (GstBuffer * buf); -#endif - -static inline void -gst_buffer_unref (GstBuffer * buf) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (buf)); -} - -/* copy buffer */ -/** - * gst_buffer_copy: - * @buf: a #GstBuffer. - * - * Create a copy of the given buffer. This will also make a newly allocated - * copy of the data the source buffer contains. - * - * Returns: (transfer full): a new copy of @buf. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBuffer * gst_buffer_copy (const GstBuffer * buf); -#endif - -static inline GstBuffer * -gst_buffer_copy (const GstBuffer * buf) -{ - return GST_BUFFER (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (buf))); -} - - -/** - * GstBufferCopyFlags: - * @GST_BUFFER_COPY_NONE: copy nothing - * @GST_BUFFER_COPY_FLAGS: flag indicating that buffer flags should be copied - * @GST_BUFFER_COPY_TIMESTAMPS: flag indicating that buffer pts, dts, - * duration, offset and offset_end should be copied - * @GST_BUFFER_COPY_MEMORY: flag indicating that buffer memory should be copied - * and appended to already existing memory - * @GST_BUFFER_COPY_MERGE: flag indicating that buffer memory should be - * merged - * @GST_BUFFER_COPY_META: flag indicating that buffer meta should be - * copied - * - * A set of flags that can be provided to the gst_buffer_copy_into() - * function to specify which items should be copied. - */ -typedef enum { - GST_BUFFER_COPY_NONE = 0, - GST_BUFFER_COPY_FLAGS = (1 << 0), - GST_BUFFER_COPY_TIMESTAMPS = (1 << 1), - GST_BUFFER_COPY_META = (1 << 2), - GST_BUFFER_COPY_MEMORY = (1 << 3), - GST_BUFFER_COPY_MERGE = (1 << 4) -} GstBufferCopyFlags; - -/** - * GST_BUFFER_COPY_METADATA: - * - * Combination of all possible metadata fields that can be copied with - * gst_buffer_copy_into(). - */ -#define GST_BUFFER_COPY_METADATA (GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS |\ - GST_BUFFER_COPY_META) - -/** - * GST_BUFFER_COPY_ALL: - * - * Combination of all possible fields that can be copied with - * gst_buffer_copy_into(). - */ -#define GST_BUFFER_COPY_ALL ((GstBufferCopyFlags)(GST_BUFFER_COPY_METADATA | GST_BUFFER_COPY_MEMORY)) - -/* copies memory or metadata into newly allocated buffer */ -void gst_buffer_copy_into (GstBuffer *dest, GstBuffer *src, - GstBufferCopyFlags flags, - gsize offset, gsize size); - -/** - * gst_buffer_is_writable: - * @buf: a #GstBuffer - * - * Tests if you can safely write to a buffer's metadata or its memory array. - * It is only safe to change buffer metadata when the current reference is - * writable, i.e. nobody can see the modifications you will make. - */ -#define gst_buffer_is_writable(buf) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (buf)) -/** - * gst_buffer_make_writable: - * @buf: (transfer full): a #GstBuffer - * - * Makes a writable buffer from the given buffer. If the source buffer is - * already writable, this will simply return the same buffer. A copy will - * otherwise be made using gst_buffer_copy(). - * - * Returns: (transfer full): a writable buffer which may or may not be the - * same as @buf - */ -#define gst_buffer_make_writable(buf) GST_BUFFER_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (buf))) - -/** - * gst_buffer_replace: - * @obuf: (inout) (transfer full): pointer to a pointer to a #GstBuffer to be - * replaced. - * @nbuf: (transfer none) (allow-none): pointer to a #GstBuffer that will - * replace the buffer pointed to by @obuf. - * - * Modifies a pointer to a #GstBuffer to point to a different #GstBuffer. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * buffer is unreffed, the new is reffed). - * - * Either @nbuf or the #GstBuffer pointed to by @obuf may be NULL. - * - * Returns: TRUE when @obuf was different from @nbuf. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_buffer_replace (GstBuffer **obuf, GstBuffer *nbuf); -#endif - -static inline gboolean -gst_buffer_replace (GstBuffer **obuf, GstBuffer *nbuf) -{ - return gst_mini_object_replace ((GstMiniObject **) obuf, (GstMiniObject *) nbuf); -} - -/* creating a region */ -GstBuffer* gst_buffer_copy_region (GstBuffer *parent, GstBufferCopyFlags flags, - gsize offset, gsize size); - -/* append two buffers */ -GstBuffer* gst_buffer_append_region (GstBuffer *buf1, GstBuffer *buf2, - gssize offset, gssize size); -GstBuffer* gst_buffer_append (GstBuffer *buf1, GstBuffer *buf2); - -/* metadata */ -#include - -/** - * GstBufferForeachMetaFunc: - * @buffer: a #GstBuffer - * @meta: a pointer to a #GstMeta - * @user_data: user data passed to gst_buffer_foreach_meta() - * - * A function that will be called from gst_buffer_foreach_meta(). The @meta - * field will point to a the reference of the meta. - * - * @buffer should not be modified from this callback. - * - * When this function returns %TRUE, the next meta will be - * returned. When %FALSE is returned, gst_buffer_foreach_meta() will return. - * - * When @meta is set to NULL, the item will be removed from the buffer. - * - * Returns: %FALSE when gst_buffer_foreach_meta() should stop - */ -typedef gboolean (*GstBufferForeachMetaFunc) (GstBuffer *buffer, GstMeta **meta, - gpointer user_data); - -GstMeta * gst_buffer_get_meta (GstBuffer *buffer, GType api); -GstMeta * gst_buffer_add_meta (GstBuffer *buffer, const GstMetaInfo *info, - gpointer params); -gboolean gst_buffer_remove_meta (GstBuffer *buffer, GstMeta *meta); - -GstMeta * gst_buffer_iterate_meta (GstBuffer *buffer, gpointer *state); - -gboolean gst_buffer_foreach_meta (GstBuffer *buffer, - GstBufferForeachMetaFunc func, - gpointer user_data); - -/** - * gst_value_set_buffer: - * @v: a #GValue to receive the data - * @b: (transfer none): a #GstBuffer to assign to the GstValue - * - * Sets @b as the value of @v. Caller retains reference to buffer. - */ -#define gst_value_set_buffer(v,b) g_value_set_boxed((v),(b)) -/** - * gst_value_take_buffer: - * @v: a #GValue to receive the data - * @b: (transfer full): a #GstBuffer to assign to the GstValue - * - * Sets @b as the value of @v. Caller gives away reference to buffer. - */ -#define gst_value_take_buffer(v,b) g_value_take_boxed(v,(b)) -/** - * gst_value_get_buffer: - * @v: a #GValue to query - * - * Receives a #GstBuffer as the value of @v. Does not return a reference to - * the buffer, so the pointer is only valid for as long as the caller owns - * a reference to @v. - * - * Returns: (transfer none): buffer - */ -#define gst_value_get_buffer(v) GST_BUFFER_CAST (g_value_get_boxed(v)) - -G_END_DECLS - -#endif /* __GST_BUFFER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferlist.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferlist.h deleted file mode 100644 index eff9d9ca..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferlist.h +++ /dev/null @@ -1,166 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Axis Communications - * @author Jonas Holmberg - * - * gstbufferlist.h: Header for GstBufferList object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BUFFER_LIST_H__ -#define __GST_BUFFER_LIST_H__ - -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_buffer_list_type; - -#define GST_TYPE_BUFFER_LIST (_gst_buffer_list_type) -#define GST_IS_BUFFER_LIST(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_BUFFER_LIST)) -#define GST_BUFFER_LIST_CAST(obj) ((GstBufferList *)obj) -#define GST_BUFFER_LIST(obj) (GST_BUFFER_LIST_CAST(obj)) - -typedef struct _GstBufferList GstBufferList; - -/** - * GstBufferListFunc: - * @buffer: pointer the buffer - * @idx: the index of @buffer - * @user_data: user data passed to gst_buffer_list_foreach() - * - * A function that will be called from gst_buffer_list_foreach(). The @buffer - * field will point to a the reference of the buffer at @idx. - * - * When this function returns %TRUE, the next buffer will be - * returned. When %FALSE is returned, gst_buffer_list_foreach() will return. - * - * When @buffer is set to NULL, the item will be removed from the bufferlist. - * When @buffer has been made writable, the new buffer reference can be assigned - * to @buffer. This function is responsible for unreffing the old buffer when - * removing or modifying. - * - * Returns: %FALSE when gst_buffer_list_foreach() should stop - */ -typedef gboolean (*GstBufferListFunc) (GstBuffer **buffer, guint idx, - gpointer user_data); - - -/* refcounting */ -/** - * gst_buffer_list_ref: - * @list: a #GstBufferList - * - * Increases the refcount of the given buffer list by one. - * - * Note that the refcount affects the writeability of @list and its data, see - * gst_buffer_list_make_writable(). It is important to note that keeping - * additional references to GstBufferList instances can potentially increase - * the number of memcpy operations in a pipeline. - * - * Returns: (transfer full): @list - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBufferList * gst_buffer_list_ref (GstBufferList * list); -#endif - -static inline GstBufferList * -gst_buffer_list_ref (GstBufferList * list) -{ - return GST_BUFFER_LIST_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST ( - list))); -} - -/** - * gst_buffer_list_unref: - * @list: (transfer full): a #GstBufferList - * - * Decreases the refcount of the buffer list. If the refcount reaches 0, the - * buffer list will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_buffer_list_unref (GstBufferList * list); -#endif - -static inline void -gst_buffer_list_unref (GstBufferList * list) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (list)); -} - -/* copy */ -/** - * gst_buffer_list_copy: - * @list: a #GstBufferList - * - * Create a shallow copy of the given buffer list. This will make a newly - * allocated copy of the source list with copies of buffer pointers. The - * refcount of buffers pointed to will be increased by one. - * - * Returns: (transfer full): a new copy of @list. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstBufferList * gst_buffer_list_copy (const GstBufferList * list); -#endif - -static inline GstBufferList * -gst_buffer_list_copy (const GstBufferList * list) -{ - return GST_BUFFER_LIST_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (list))); -} - -/** - * gst_buffer_list_is_writable: - * @list: a #GstBufferList - * - * Tests if you can safely add buffers and groups into a buffer list. - */ -#define gst_buffer_list_is_writable(list) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (list)) - -/** - * gst_buffer_list_make_writable: - * @list: (transfer full): a #GstBufferList - * - * Makes a writable buffer list from the given buffer list. If the source buffer - * list is already writable, this will simply return the same buffer list. A - * copy will otherwise be made using gst_buffer_list_copy(). - * - * Returns: (transfer full): a writable list, which may or may not be the - * same as @list - */ -#define gst_buffer_list_make_writable(list) GST_BUFFER_LIST_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (list))) - -GType gst_buffer_list_get_type (void); - -/* allocation */ -GstBufferList * gst_buffer_list_new (void) G_GNUC_MALLOC; -GstBufferList * gst_buffer_list_new_sized (guint size) G_GNUC_MALLOC; - -guint gst_buffer_list_length (GstBufferList *list); - -GstBuffer * gst_buffer_list_get (GstBufferList *list, guint idx); -void gst_buffer_list_insert (GstBufferList *list, gint idx, GstBuffer *buffer); -void gst_buffer_list_remove (GstBufferList *list, guint idx, guint length); - -gboolean gst_buffer_list_foreach (GstBufferList *list, - GstBufferListFunc func, - gpointer user_data); - -#define gst_buffer_list_add(l,b) gst_buffer_list_insert((l),-1,(b)); - -G_END_DECLS - -#endif /* __GST_BUFFER_LIST_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferpool.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferpool.h deleted file mode 100644 index b718f995..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbufferpool.h +++ /dev/null @@ -1,208 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 Wim Taymans - * - * gstbufferpool.h: Header for GstBufferPool object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_BUFFER_POOL_H__ -#define __GST_BUFFER_POOL_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstBufferPoolPrivate GstBufferPoolPrivate; -typedef struct _GstBufferPoolClass GstBufferPoolClass; - -#define GST_TYPE_BUFFER_POOL (gst_buffer_pool_get_type()) -#define GST_IS_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_BUFFER_POOL)) -#define GST_IS_BUFFER_POOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_BUFFER_POOL)) -#define GST_BUFFER_POOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BUFFER_POOL, GstBufferPoolClass)) -#define GST_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_BUFFER_POOL, GstBufferPool)) -#define GST_BUFFER_POOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_BUFFER_POOL, GstBufferPoolClass)) -#define GST_BUFFER_POOL_CAST(obj) ((GstBufferPool *)(obj)) - -/** - * GstBufferPoolAcquireFlags: - * @GST_BUFFER_POOL_ACQUIRE_FLAG_NONE: no flags - * @GST_BUFFER_POOL_ACQUIRE_FLAG_KEY_UNIT: buffer is keyframe - * @GST_BUFFER_POOL_ACQUIRE_FLAG_DONTWAIT: when the bufferpool is empty, acquire_buffer - * will by default block until a buffer is released into the pool again. Setting - * this flag makes acquire_buffer return #GST_FLOW_EOS instead of blocking. - * @GST_BUFFER_POOL_ACQUIRE_FLAG_DISCONT: buffer is discont - * @GST_BUFFER_POOL_ACQUIRE_FLAG_LAST: last flag, subclasses can use private flags - * starting from this value. - * - * Additional flags to control the allocation of a buffer - */ -typedef enum { - GST_BUFFER_POOL_ACQUIRE_FLAG_NONE = 0, - GST_BUFFER_POOL_ACQUIRE_FLAG_KEY_UNIT = (1 << 0), - GST_BUFFER_POOL_ACQUIRE_FLAG_DONTWAIT = (1 << 1), - GST_BUFFER_POOL_ACQUIRE_FLAG_DISCONT = (1 << 2), - GST_BUFFER_POOL_ACQUIRE_FLAG_LAST = (1 << 16), -} GstBufferPoolAcquireFlags; - -typedef struct _GstBufferPoolAcquireParams GstBufferPoolAcquireParams; - -/** - * GstBufferPoolAcquireParams: - * @format: the format of @start and @stop - * @start: the start position - * @stop: the stop position - * @flags: additional flags - * - * Parameters passed to the gst_buffer_pool_acquire_buffer() function to control the - * allocation of the buffer. - * - * The default implementation ignores the @start and @stop members but other - * implementations can use this extra information to decide what buffer to - * return. - */ -struct _GstBufferPoolAcquireParams { - GstFormat format; - gint64 start; - gint64 stop; - GstBufferPoolAcquireFlags flags; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GST_BUFFER_POOL_IS_FLUSHING: - * @pool: a GstBufferPool - * - * Check if the bufferpool is flushing. Subclasses might want to check the - * state of the pool in the acquire function. - */ -#define GST_BUFFER_POOL_IS_FLUSHING(pool) (g_atomic_int_get (&pool->flushing)) - -/** - * GstBufferPool: - * @object: the parent structure - * - * The structure of a #GstBufferPool. Use the associated macros to access the public - * variables. - */ -struct _GstBufferPool { - GstObject object; - - /*< protected >*/ - gint flushing; - - /*< private >*/ - GstBufferPoolPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstBufferPoolClass: - * @object_class: Object parent class - * @get_options: get a list of options supported by this pool - * @set_config: apply the bufferpool configuration. The default configuration - * will parse the default config parameters - * @start: start the bufferpool. The default implementation will preallocate - * min-buffers buffers and put them in the queue - * @stop: stop the bufferpool. the default implementation will free the - * preallocated buffers. This function is called when all the buffers are - * returned to the pool. - * @acquire_buffer: get a new buffer from the pool. The default implementation - * will take a buffer from the queue and optionally wait for a buffer to - * be released when there are no buffers available. - * @alloc_buffer: allocate a buffer. the default implementation allocates - * buffers from the configured memory allocator and with the configured - * parameters. All metadata that is present on the allocated buffer will - * be marked as #GST_META_FLAG_POOLED and #GST_META_FLAG_LOCKED and will - * not be removed from the buffer in @reset_buffer. - * @reset_buffer: reset the buffer to its state when it was freshly allocated. - * The default implementation will clear the flags, timestamps and - * will remove the metadata without the #GST_META_FLAG_POOLED flag (even - * the metadata with #GST_META_FLAG_LOCKED). - * @release_buffer: release a buffer back in the pool. The default - * implementation will put the buffer back in the queue and notify any - * blocking acquire_buffer calls. - * @free_buffer: free a buffer. The default implementation unrefs the buffer. - * - * The GstBufferPool class. - */ -struct _GstBufferPoolClass { - GstObjectClass object_class; - - /* vmethods */ - const gchar ** (*get_options) (GstBufferPool *pool); - gboolean (*set_config) (GstBufferPool *pool, GstStructure *config); - - gboolean (*start) (GstBufferPool *pool); - gboolean (*stop) (GstBufferPool *pool); - - GstFlowReturn (*acquire_buffer) (GstBufferPool *pool, GstBuffer **buffer, - GstBufferPoolAcquireParams *params); - GstFlowReturn (*alloc_buffer) (GstBufferPool *pool, GstBuffer **buffer, - GstBufferPoolAcquireParams *params); - void (*reset_buffer) (GstBufferPool *pool, GstBuffer *buffer); - void (*release_buffer) (GstBufferPool *pool, GstBuffer *buffer); - void (*free_buffer) (GstBufferPool *pool, GstBuffer *buffer); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_buffer_pool_get_type (void); - -/* allocation */ -GstBufferPool * gst_buffer_pool_new (void); - -/* state management */ -gboolean gst_buffer_pool_set_active (GstBufferPool *pool, gboolean active); -gboolean gst_buffer_pool_is_active (GstBufferPool *pool); - -gboolean gst_buffer_pool_set_config (GstBufferPool *pool, GstStructure *config); -GstStructure * gst_buffer_pool_get_config (GstBufferPool *pool); - -const gchar ** gst_buffer_pool_get_options (GstBufferPool *pool); -gboolean gst_buffer_pool_has_option (GstBufferPool *pool, const gchar *option); - -/* helpers for configuring the config structure */ -void gst_buffer_pool_config_set_params (GstStructure *config, GstCaps *caps, - guint size, guint min_buffers, guint max_buffers); -gboolean gst_buffer_pool_config_get_params (GstStructure *config, GstCaps **caps, - guint *size, guint *min_buffers, guint *max_buffers); -void gst_buffer_pool_config_set_allocator (GstStructure *config, GstAllocator *allocator, - const GstAllocationParams *params); -gboolean gst_buffer_pool_config_get_allocator (GstStructure *config, GstAllocator **allocator, - GstAllocationParams *params); - -/* options */ -guint gst_buffer_pool_config_n_options (GstStructure *config); -void gst_buffer_pool_config_add_option (GstStructure *config, const gchar *option); -const gchar * gst_buffer_pool_config_get_option (GstStructure *config, guint index); -gboolean gst_buffer_pool_config_has_option (GstStructure *config, const gchar *option); - -/* buffer management */ -GstFlowReturn gst_buffer_pool_acquire_buffer (GstBufferPool *pool, GstBuffer **buffer, - GstBufferPoolAcquireParams *params); -void gst_buffer_pool_release_buffer (GstBufferPool *pool, GstBuffer *buffer); - -G_END_DECLS - -#endif /* __GST_BUFFER_POOL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbus.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbus.h deleted file mode 100644 index ed05ddba..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstbus.h +++ /dev/null @@ -1,183 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Wim Taymans - * - * gstbus.h: Header for GstBus subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BUS_H__ -#define __GST_BUS_H__ - -typedef struct _GstBus GstBus; -typedef struct _GstBusPrivate GstBusPrivate; -typedef struct _GstBusClass GstBusClass; - -#include -#include - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -#define GST_TYPE_BUS (gst_bus_get_type ()) -#define GST_BUS(bus) (G_TYPE_CHECK_INSTANCE_CAST ((bus), GST_TYPE_BUS, GstBus)) -#define GST_IS_BUS(bus) (G_TYPE_CHECK_INSTANCE_TYPE ((bus), GST_TYPE_BUS)) -#define GST_BUS_CLASS(bclass) (G_TYPE_CHECK_CLASS_CAST ((bclass), GST_TYPE_BUS, GstBusClass)) -#define GST_IS_BUS_CLASS(bclass) (G_TYPE_CHECK_CLASS_TYPE ((bclass), GST_TYPE_BUS)) -#define GST_BUS_GET_CLASS(bus) (G_TYPE_INSTANCE_GET_CLASS ((bus), GST_TYPE_BUS, GstBusClass)) -#define GST_BUS_CAST(bus) ((GstBus*)(bus)) - -/** - * GstBusFlags: - * @GST_BUS_FLUSHING: The bus is currently dropping all messages - * @GST_BUS_FLAG_LAST: offset to define more flags - * - * The standard flags that a bus may have. - */ -typedef enum { - GST_BUS_FLUSHING = (GST_OBJECT_FLAG_LAST << 0), - /* padding */ - GST_BUS_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 1) -} GstBusFlags; - -/** - * GstBusSyncReply: - * @GST_BUS_DROP: drop the message - * @GST_BUS_PASS: pass the message to the async queue - * @GST_BUS_ASYNC: pass message to async queue, continue if message is handled - * - * The result values for a GstBusSyncHandler. - */ -typedef enum -{ - GST_BUS_DROP = 0, - GST_BUS_PASS = 1, - GST_BUS_ASYNC = 2 -} GstBusSyncReply; - -/** - * GstBusSyncHandler: - * @bus: the #GstBus that sent the message - * @message: the #GstMessage - * @user_data: user data that has been given, when registering the handler - * - * Handler will be invoked synchronously, when a new message has been injected - * into the bus. This function is mostly used internally. Only one sync handler - * can be attached to a given bus. - * - * If the handler returns GST_BUS_DROP, it should unref the message, else the - * message should not be unreffed by the sync handler. - * - * Returns: #GstBusSyncReply stating what to do with the message - */ -typedef GstBusSyncReply (*GstBusSyncHandler) (GstBus * bus, GstMessage * message, gpointer user_data); - -/** - * GstBusFunc: - * @bus: the #GstBus that sent the message - * @message: the #GstMessage - * @user_data: user data that has been given, when registering the handler - * - * Specifies the type of function passed to gst_bus_add_watch() or - * gst_bus_add_watch_full(), which is called from the mainloop when a message - * is available on the bus. - * - * The message passed to the function will be unreffed after execution of this - * function so it should not be freed in the function. - * - * Note that this function is used as a GSourceFunc which means that returning - * FALSE will remove the GSource from the mainloop. - * - * Returns: %FALSE if the event source should be removed. - */ -typedef gboolean (*GstBusFunc) (GstBus * bus, GstMessage * message, gpointer user_data); - -/** - * GstBus: - * - * The opaque #GstBus data structure. - */ -struct _GstBus -{ - GstObject object; - - /*< private >*/ - GstBusPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstBusClass -{ - GstObjectClass parent_class; - - /* signals */ - void (*message) (GstBus *bus, GstMessage *message); - void (*sync_message) (GstBus *bus, GstMessage *message); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_bus_get_type (void); - -GstBus* gst_bus_new (void); - -gboolean gst_bus_post (GstBus * bus, GstMessage * message); - -gboolean gst_bus_have_pending (GstBus * bus); -GstMessage * gst_bus_peek (GstBus * bus); -GstMessage * gst_bus_pop (GstBus * bus); -GstMessage * gst_bus_pop_filtered (GstBus * bus, GstMessageType types); -GstMessage * gst_bus_timed_pop (GstBus * bus, GstClockTime timeout); -GstMessage * gst_bus_timed_pop_filtered (GstBus * bus, GstClockTime timeout, GstMessageType types); -void gst_bus_set_flushing (GstBus * bus, gboolean flushing); - -/* synchronous dispatching */ -void gst_bus_set_sync_handler (GstBus * bus, GstBusSyncHandler func, - gpointer user_data, GDestroyNotify notify); -/* GSource based dispatching */ -GSource * gst_bus_create_watch (GstBus * bus); -guint gst_bus_add_watch_full (GstBus * bus, - gint priority, - GstBusFunc func, - gpointer user_data, - GDestroyNotify notify); -guint gst_bus_add_watch (GstBus * bus, - GstBusFunc func, - gpointer user_data); - -/* polling the bus */ -GstMessage* gst_bus_poll (GstBus *bus, GstMessageType events, - GstClockTime timeout); - -/* signal based dispatching helper functions. */ -gboolean gst_bus_async_signal_func (GstBus *bus, GstMessage *message, - gpointer data); -GstBusSyncReply gst_bus_sync_signal_handler (GstBus *bus, GstMessage *message, - gpointer data); - -/* convenience api to add/remove a gsource that emits the async signals */ -void gst_bus_add_signal_watch (GstBus * bus); -void gst_bus_add_signal_watch_full (GstBus * bus, gint priority); -void gst_bus_remove_signal_watch (GstBus * bus); - -void gst_bus_enable_sync_message_emission (GstBus * bus); -void gst_bus_disable_sync_message_emission (GstBus * bus); - -G_END_DECLS - -#endif /* __GST_BUS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcaps.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcaps.h deleted file mode 100644 index 923199bd..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcaps.h +++ /dev/null @@ -1,447 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 David A. Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CAPS_H__ -#define __GST_CAPS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_caps_type; - -#define GST_TYPE_CAPS (_gst_caps_type) -#define GST_IS_CAPS(obj) (GST_IS_MINI_OBJECT_TYPE((obj), GST_TYPE_CAPS)) -#define GST_CAPS_CAST(obj) ((GstCaps*)(obj)) -#define GST_CAPS(obj) (GST_CAPS_CAST(obj)) - -#define GST_TYPE_STATIC_CAPS (gst_static_caps_get_type()) - -/** - * GstCapsFlags: - * @GST_CAPS_FLAG_ANY: Caps has no specific content, but can contain - * anything. - * - * Extra flags for a caps. - */ -typedef enum { - GST_CAPS_FLAG_ANY = (GST_MINI_OBJECT_FLAG_LAST << 0) -} GstCapsFlags; - -/** - * GstCapsIntersectMode: - * @GST_CAPS_INTERSECT_ZIG_ZAG : Zig-zags over both caps. - * @GST_CAPS_INTERSECT_FIRST : Keeps the first caps order. - * - * Modes of caps intersection - * - * @GST_CAPS_INTERSECT_ZIG_ZAG tries to preserve overall order of both caps - * by iterating on the caps' structures as the following matrix shows: - * |[ - * caps1 - * +------------- - * | 1 2 4 7 - * caps2 | 3 5 8 10 - * | 6 9 11 12 - * ]| - * Used when there is no explicit precedence of one caps over the other. e.g. - * tee's sink pad getcaps function, it will probe its src pad peers' for their - * caps and intersect them with this mode. - * - * @GST_CAPS_INTERSECT_FIRST is useful when an element wants to preserve - * another element's caps priority order when intersecting with its own caps. - * Example: If caps1 is [A, B, C] and caps2 is [E, B, D, A], the result - * would be [A, B], maintaining the first caps priority on the intersection. - */ -typedef enum { - GST_CAPS_INTERSECT_ZIG_ZAG = 0, - GST_CAPS_INTERSECT_FIRST = 1 -} GstCapsIntersectMode; - -/** - * GST_CAPS_ANY: - * - * Means that the element/pad can output 'anything'. Useful for elements - * that output unknown media, such as filesrc. This macro returns a singleton and - * should not be unreffed. - */ -#define GST_CAPS_ANY _gst_caps_any -/** - * GST_CAPS_NONE: - * - * The opposite of %GST_CAPS_ANY: it means that the pad/element outputs an - * undefined media type that can not be detected. This macro returns a singleton - * and should not be unreffed. - */ -#define GST_CAPS_NONE _gst_caps_none - -/** - * GST_STATIC_CAPS_ANY: - * - * Creates a new #GstCaps static caps that matches anything. - * This can be used in pad templates. - */ -#define GST_STATIC_CAPS_ANY GST_STATIC_CAPS("ANY") -/** - * GST_STATIC_CAPS_NONE: - * - * Creates a new #GstCaps static caps that matches nothing. - * This can be used in pad templates. - */ -#define GST_STATIC_CAPS_NONE GST_STATIC_CAPS("NONE") - -/** - * GST_CAPS_IS_SIMPLE: - * @caps: the #GstCaps instance to check - * - * Convenience macro that checks if the number of structures in the given caps - * is exactly one. - */ -#define GST_CAPS_IS_SIMPLE(caps) (gst_caps_get_size(caps) == 1) - -/** - * GST_STATIC_CAPS: - * @string: the string describing the caps - * - * Creates a new #GstCaps static caps from an input string. - * This can be used in pad templates. - */ -#define GST_STATIC_CAPS(string) \ -{ \ - /* caps */ NULL, \ - /* string */ string, \ - GST_PADDING_INIT \ -} - -typedef struct _GstCaps GstCaps; -typedef struct _GstStaticCaps GstStaticCaps; - -GST_EXPORT GstCaps * _gst_caps_any; -GST_EXPORT GstCaps * _gst_caps_none; -/** - * GST_CAPS_FLAGS: - * @caps: a #GstCaps. - * - * A flags word containing #GstCapsFlags flags set on this caps. - */ -#define GST_CAPS_FLAGS(caps) GST_MINI_OBJECT_FLAGS(caps) - -/* refcount */ -/** - * GST_CAPS_REFCOUNT: - * @caps: a #GstCaps - * - * Get access to the reference count field of the caps - */ -#define GST_CAPS_REFCOUNT(caps) GST_MINI_OBJECT_REFCOUNT(caps) -/** - * GST_CAPS_REFCOUNT_VALUE: - * @caps: a #GstCaps - * - * Get the reference count value of the caps. - */ -#define GST_CAPS_REFCOUNT_VALUE(caps) GST_MINI_OBJECT_REFCOUNT_VALUE(caps) - -/** - * GST_CAPS_FLAG_IS_SET: - * @caps: a #GstCaps. - * @flag: the #GstCapsFlags to check. - * - * Gives the status of a specific flag on a caps. - */ -#define GST_CAPS_FLAG_IS_SET(caps,flag) GST_MINI_OBJECT_FLAG_IS_SET (caps, flag) -/** - * GST_CAPS_FLAG_SET: - * @caps: a #GstCaps. - * @flag: the #GstCapsFlags to set. - * - * Sets a caps flag on a caps. - */ -#define GST_CAPS_FLAG_SET(caps,flag) GST_MINI_OBJECT_FLAG_SET (caps, flag) -/** - * GST_CAPS_FLAG_UNSET: - * @caps: a #GstCaps. - * @flag: the #GstCapsFlags to clear. - * - * Clears a caps flag. - */ -#define GST_CAPS_FLAG_UNSET(caps,flag) GST_MINI_OBJECT_FLAG_UNSET (caps, flag) - -/* refcounting */ -/** - * gst_caps_ref: - * @caps: the #GstCaps to reference - * - * Add a reference to a #GstCaps object. - * - * From this point on, until the caller calls gst_caps_unref() or - * gst_caps_make_writable(), it is guaranteed that the caps object will not - * change. This means its structures won't change, etc. To use a #GstCaps - * object, you must always have a refcount on it -- either the one made - * implicitly by e.g. gst_caps_new_simple(), or via taking one explicitly with - * this function. - * - * Returns: the same #GstCaps object. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstCaps * gst_caps_ref (GstCaps * caps); -#endif - -static inline GstCaps * -gst_caps_ref (GstCaps * caps) -{ - return (GstCaps *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (caps)); -} - -/** - * gst_caps_unref: - * @caps: a #GstCaps. - * - * Unref a #GstCaps and and free all its structures and the - * structures' values when the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_caps_unref (GstCaps * caps); -#endif - -static inline void -gst_caps_unref (GstCaps * caps) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (caps)); -} - -/* copy caps */ -/** - * gst_caps_copy: - * @caps: a #GstCaps. - * - * Creates a new #GstCaps as a copy of the old @caps. The new caps will have a - * refcount of 1, owned by the caller. The structures are copied as well. - * - * Note that this function is the semantic equivalent of a gst_caps_ref() - * followed by a gst_caps_make_writable(). If you only want to hold on to a - * reference to the data, you should use gst_caps_ref(). - * - * When you are finished with the caps, call gst_caps_unref() on it. - * - * Returns: the new #GstCaps - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstCaps * gst_caps_copy (const GstCaps * caps); -#endif - -static inline GstCaps * -gst_caps_copy (const GstCaps * caps) -{ - return GST_CAPS (gst_mini_object_copy (GST_MINI_OBJECT_CAST (caps))); -} - -/** - * gst_caps_is_writable: - * @caps: a #GstCaps - * - * Tests if you can safely modify @caps. It is only safe to modify caps when - * there is only one owner of the caps - ie, the object is writable. - */ -#define gst_caps_is_writable(caps) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (caps)) - -/** - * gst_caps_make_writable: - * @caps: (transfer full): a #GstCaps - * - * Returns a writable copy of @caps. - * - * If there is only one reference count on @caps, the caller must be the owner, - * and so this function will return the caps object unchanged. If on the other - * hand there is more than one reference on the object, a new caps object will - * be returned. The caller's reference on @caps will be removed, and instead the - * caller will own a reference to the returned object. - * - * In short, this function unrefs the caps in the argument and refs the caps - * that it returns. Don't access the argument after calling this function. See - * also: gst_caps_ref(). - * - * Returns: (transfer full): a writable caps which may or may not be the - * same as @caps - */ -#define gst_caps_make_writable(caps) GST_CAPS_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (caps))) - -/** - * gst_caps_replace: - * @old_caps: (inout) (transfer full): pointer to a pointer to a #GstCaps to be - * replaced. - * @new_caps: (transfer none) (allow-none): pointer to a #GstCaps that will - * replace the caps pointed to by @ocaps. - * - * Modifies a pointer to a #GstCaps to point to a different #GstCaps. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * caps is unreffed, the new is reffed). - * - * Either @ncaps or the #GstCaps pointed to by @ocaps may be NULL. - * - * Returns: TRUE if @new_caps was different from @old_caps - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_caps_replace (GstCaps **old_caps, GstCaps *new_caps); -#endif - -static inline gboolean -gst_caps_replace (GstCaps **old_caps, GstCaps *new_caps) -{ - return gst_mini_object_replace ((GstMiniObject **) old_caps, (GstMiniObject *) new_caps); -} - -/** - * gst_caps_take: - * @old_caps: (inout) (transfer full): pointer to a pointer to a #GstCaps to be - * replaced. - * @new_caps: (transfer full) (allow-none): pointer to a #GstCaps that will - * replace the caps pointed to by @ocaps. - * - * Modifies a pointer to a #GstCaps to point to a different #GstCaps. This - * function is similar to gst_caps_replace() except that it takes ownership - * of @new_caps. - * - * Returns: TRUE if @new_caps was different from @old_caps - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_caps_take (GstCaps **old_caps, GstCaps *new_caps); -#endif - -static inline gboolean -gst_caps_take (GstCaps **old_caps, GstCaps *new_caps) -{ - return gst_mini_object_take ((GstMiniObject **) old_caps, (GstMiniObject *) new_caps); -} - -/** - * GstCaps: - * @mini_object: the parent type - * - * Object describing media types. - */ -struct _GstCaps { - GstMiniObject mini_object; -}; - -/** - * GstStaticCaps: - * @caps: the cached #GstCaps - * @string: a string describing a caps - * - * Datastructure to initialize #GstCaps from a string description usually - * used in conjunction with GST_STATIC_CAPS() and gst_static_caps_get() to - * instantiate a #GstCaps. - */ -struct _GstStaticCaps { - /*< public >*/ - GstCaps *caps; - const char *string; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_caps_get_type (void); - -GstCaps * gst_caps_new_empty (void); -GstCaps * gst_caps_new_any (void); -GstCaps * gst_caps_new_empty_simple (const char *media_type) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_new_simple (const char *media_type, - const char *fieldname, - ...) G_GNUC_NULL_TERMINATED G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_new_full (GstStructure *struct1, - ...) G_GNUC_NULL_TERMINATED G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_new_full_valist (GstStructure *structure, - va_list var_args) G_GNUC_WARN_UNUSED_RESULT; - -GType gst_static_caps_get_type (void); -GstCaps * gst_static_caps_get (GstStaticCaps *static_caps); -void gst_static_caps_cleanup (GstStaticCaps *static_caps); - -/* manipulation */ -void gst_caps_append (GstCaps *caps1, - GstCaps *caps2); -void gst_caps_append_structure (GstCaps *caps, - GstStructure *structure); -void gst_caps_remove_structure (GstCaps *caps, guint idx); -GstCaps * gst_caps_merge (GstCaps *caps1, - GstCaps *caps2) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_merge_structure (GstCaps *caps, - GstStructure *structure) G_GNUC_WARN_UNUSED_RESULT; -guint gst_caps_get_size (const GstCaps *caps); -GstStructure * gst_caps_get_structure (const GstCaps *caps, - guint index); -GstStructure * gst_caps_steal_structure (GstCaps *caps, - guint index) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_copy_nth (const GstCaps *caps, guint nth) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_truncate (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; -void gst_caps_set_value (GstCaps *caps, - const char *field, - const GValue *value); -void gst_caps_set_simple (GstCaps *caps, - const char *field, ...) G_GNUC_NULL_TERMINATED; -void gst_caps_set_simple_valist (GstCaps *caps, - const char *field, - va_list varargs); - -/* tests */ -gboolean gst_caps_is_any (const GstCaps *caps); -gboolean gst_caps_is_empty (const GstCaps *caps); -gboolean gst_caps_is_fixed (const GstCaps *caps); -gboolean gst_caps_is_always_compatible (const GstCaps *caps1, - const GstCaps *caps2); -gboolean gst_caps_is_subset (const GstCaps *subset, - const GstCaps *superset); -gboolean gst_caps_is_subset_structure (const GstCaps *caps, - const GstStructure *structure); -gboolean gst_caps_is_equal (const GstCaps *caps1, - const GstCaps *caps2); -gboolean gst_caps_is_equal_fixed (const GstCaps *caps1, - const GstCaps *caps2); -gboolean gst_caps_can_intersect (const GstCaps * caps1, - const GstCaps * caps2); -gboolean gst_caps_is_strictly_equal (const GstCaps *caps1, - const GstCaps *caps2); - - -/* operations */ -GstCaps * gst_caps_intersect (GstCaps *caps1, - GstCaps *caps2) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_intersect_full (GstCaps *caps1, - GstCaps *caps2, - GstCapsIntersectMode mode) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_subtract (GstCaps *minuend, - GstCaps *subtrahend) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_normalize (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; -GstCaps * gst_caps_simplify (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; - -GstCaps * gst_caps_fixate (GstCaps *caps) G_GNUC_WARN_UNUSED_RESULT; - -/* utility */ -gchar * gst_caps_to_string (const GstCaps *caps) G_GNUC_MALLOC; -GstCaps * gst_caps_from_string (const gchar *string) G_GNUC_WARN_UNUSED_RESULT; - -G_END_DECLS - -#endif /* __GST_CAPS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstchildproxy.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstchildproxy.h deleted file mode 100644 index 1614d4b1..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstchildproxy.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Stefan Kost - * - * gstchildproxy.h: interface header for multi child elements - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CHILD_PROXY_H__ -#define __GST_CHILD_PROXY_H__ - -#include -#include - -G_BEGIN_DECLS - - -#define GST_TYPE_CHILD_PROXY (gst_child_proxy_get_type ()) -#define GST_CHILD_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CHILD_PROXY, GstChildProxy)) -#define GST_IS_CHILD_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CHILD_PROXY)) -#define GST_CHILD_PROXY_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_CHILD_PROXY, GstChildProxyInterface)) - -/** - * GstChildProxy: - * - * Opaque #GstChildProxy data structure. - */ -typedef struct _GstChildProxy GstChildProxy; /* dummy object */ -typedef struct _GstChildProxyInterface GstChildProxyInterface; - -/** - * GstChildProxyInterface: - * @parent: parent interface type. - * @get_child_by_name: virtual method to fetch the child by name - * @get_child_by_index: virtual method to fetch the child by index - * @get_children_count: virtual method to get the children count - * - * #GstChildProxy interface. - */ -struct _GstChildProxyInterface -{ - GTypeInterface parent; - - /* methods */ - GObject * (*get_child_by_name) (GstChildProxy * parent, const gchar * name); - GObject * (*get_child_by_index) (GstChildProxy * parent, guint index); - guint (*get_children_count) (GstChildProxy * parent); - /*< private >*/ - /* signals */ - void (*child_added) (GstChildProxy * parent, GObject * child, const gchar * name); - void (*child_removed) (GstChildProxy * parent, GObject * child, const gchar * name); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_child_proxy_get_type (void); - -GObject * gst_child_proxy_get_child_by_name (GstChildProxy * parent, const gchar * name); - -guint gst_child_proxy_get_children_count (GstChildProxy * parent); -GObject * gst_child_proxy_get_child_by_index (GstChildProxy * parent, guint index); - -gboolean gst_child_proxy_lookup (GstChildProxy *object, const gchar *name, - GObject **target, GParamSpec **pspec); - -void gst_child_proxy_get_property (GstChildProxy * object, const gchar *name, - GValue *value); -void gst_child_proxy_get_valist (GstChildProxy * object, - const gchar * first_property_name, - va_list var_args); -void gst_child_proxy_get (GstChildProxy * object, - const gchar * first_property_name, - ...) G_GNUC_NULL_TERMINATED; - -void gst_child_proxy_set_property (GstChildProxy * object, const gchar *name, - const GValue *value); -void gst_child_proxy_set_valist (GstChildProxy* object, - const gchar * first_property_name, - va_list var_args); -void gst_child_proxy_set (GstChildProxy * object, - const gchar * first_property_name, - ...) G_GNUC_NULL_TERMINATED; - -void gst_child_proxy_child_added (GstChildProxy * parent, GObject * child, - const gchar *name); -void gst_child_proxy_child_removed (GstChildProxy * parent, GObject * child, - const gchar *name); - -G_END_DECLS - -#endif /* __GST_CHILD_PROXY_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstclock.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstclock.h deleted file mode 100644 index 5d42ce60..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstclock.h +++ /dev/null @@ -1,521 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstclock.h: Header for clock subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CLOCK_H__ -#define __GST_CLOCK_H__ - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -#define GST_TYPE_CLOCK (gst_clock_get_type ()) -#define GST_CLOCK(clock) (G_TYPE_CHECK_INSTANCE_CAST ((clock), GST_TYPE_CLOCK, GstClock)) -#define GST_IS_CLOCK(clock) (G_TYPE_CHECK_INSTANCE_TYPE ((clock), GST_TYPE_CLOCK)) -#define GST_CLOCK_CLASS(cclass) (G_TYPE_CHECK_CLASS_CAST ((cclass), GST_TYPE_CLOCK, GstClockClass)) -#define GST_IS_CLOCK_CLASS(cclass) (G_TYPE_CHECK_CLASS_TYPE ((cclass), GST_TYPE_CLOCK)) -#define GST_CLOCK_GET_CLASS(clock) (G_TYPE_INSTANCE_GET_CLASS ((clock), GST_TYPE_CLOCK, GstClockClass)) -#define GST_CLOCK_CAST(clock) ((GstClock*)(clock)) - -/** - * GstClockTime: - * - * A datatype to hold a time, measured in nanoseconds. - */ -typedef guint64 GstClockTime; - -/** - * GST_TYPE_CLOCK_TIME: - * - * The #GType of a #GstClockTime. - */ -#define GST_TYPE_CLOCK_TIME G_TYPE_UINT64 - -/** - * GstClockTimeDiff: - * - * A datatype to hold a time difference, measured in nanoseconds. - */ -typedef gint64 GstClockTimeDiff; -/** - * GstClockID: - * - * A datatype to hold the handle to an outstanding sync or async clock callback. - */ -typedef gpointer GstClockID; - -/** - * GST_CLOCK_TIME_NONE: - * - * Constant to define an undefined clock time. - * - * Value: 18446744073709551615 - * Type: GstClockTime - */ -#define GST_CLOCK_TIME_NONE ((GstClockTime) -1) -/** - * GST_CLOCK_TIME_IS_VALID: - * @time: clock time to validate - * - * Tests if a given #GstClockTime represents a valid defined time. - */ -#define GST_CLOCK_TIME_IS_VALID(time) (((GstClockTime)(time)) != GST_CLOCK_TIME_NONE) - -/* FIXME: still need to explicitly force types on the defines below */ -/** - * GST_SECOND: - * - * Constant that defines one GStreamer second. - * - * Value: 1000000000 - * Type: GstClockTime - */ -#define GST_SECOND (G_USEC_PER_SEC * G_GINT64_CONSTANT (1000)) -/** - * GST_MSECOND: - * - * Constant that defines one GStreamer millisecond. - * - * Value: 1000000 - * Type: GstClockTime - */ -#define GST_MSECOND (GST_SECOND / G_GINT64_CONSTANT (1000)) -/** - * GST_USECOND: - * - * Constant that defines one GStreamer microsecond. - * - * Value: 1000 - * Type: GstClockTime - */ -#define GST_USECOND (GST_SECOND / G_GINT64_CONSTANT (1000000)) -/** - * GST_NSECOND: - * - * Constant that defines one GStreamer nanosecond - * - * Value: 1 - * Type: GstClockTime - */ -#define GST_NSECOND (GST_SECOND / G_GINT64_CONSTANT (1000000000)) - - -/** - * GST_TIME_AS_SECONDS: - * @time: the time - * - * Convert a #GstClockTime to seconds. - */ -#define GST_TIME_AS_SECONDS(time) ((time) / GST_SECOND) -/** - * GST_TIME_AS_MSECONDS: - * @time: the time - * - * Convert a #GstClockTime to milliseconds (1/1000 of a second). - */ -#define GST_TIME_AS_MSECONDS(time) ((time) / G_GINT64_CONSTANT (1000000)) -/** - * GST_TIME_AS_USECONDS: - * @time: the time - * - * Convert a #GstClockTime to microseconds (1/1000000 of a second). - */ -#define GST_TIME_AS_USECONDS(time) ((time) / G_GINT64_CONSTANT (1000)) -/** - * GST_TIME_AS_NSECONDS: - * @time: the time - * - * Convert a #GstClockTime to nanoseconds (1/1000000000 of a second). - */ -#define GST_TIME_AS_NSECONDS(time) (time) - -/** - * GST_CLOCK_DIFF: - * @s: the first time - * @e: the second time - * - * Calculate a difference between two clock times as a #GstClockTimeDiff. - * The difference is calculated as @e - @s. - */ -#define GST_CLOCK_DIFF(s, e) (GstClockTimeDiff)((e) - (s)) - -/** - * GST_TIMEVAL_TO_TIME: - * @tv: the timeval to convert - * - * Convert a #GTimeVal to a #GstClockTime. - */ -#define GST_TIMEVAL_TO_TIME(tv) (GstClockTime)((tv).tv_sec * GST_SECOND + (tv).tv_usec * GST_USECOND) - -/** - * GST_TIME_TO_TIMEVAL: - * @t: The #GstClockTime to convert - * @tv: The target timeval - * - * Convert a #GstClockTime to a #GTimeVal - * - * on 32-bit systems, a timeval has a range of only 2^32 - 1 seconds, - * which is about 68 years. Expect trouble if you want to schedule stuff - * in your pipeline for 2038. - */ -#define GST_TIME_TO_TIMEVAL(t,tv) \ -G_STMT_START { \ - g_assert ("Value of time " #t " is out of timeval's range" && \ - ((t) / GST_SECOND) < G_MAXLONG); \ - (tv).tv_sec = (glong) (((GstClockTime) (t)) / GST_SECOND); \ - (tv).tv_usec = (glong) ((((GstClockTime) (t)) - \ - ((GstClockTime) (tv).tv_sec) * GST_SECOND) \ - / GST_USECOND); \ -} G_STMT_END - -/** - * GST_TIMESPEC_TO_TIME: - * @ts: the timespec to convert - * - * Convert a struct timespec (see man pselect) to a #GstClockTime. - */ -#define GST_TIMESPEC_TO_TIME(ts) (GstClockTime)((ts).tv_sec * GST_SECOND + (ts).tv_nsec * GST_NSECOND) -/** - * GST_TIME_TO_TIMESPEC: - * @t: The #GstClockTime to convert - * @ts: The target timespec - * - * Convert a #GstClockTime to a struct timespec (see man pselect) - */ -#define GST_TIME_TO_TIMESPEC(t,ts) \ -G_STMT_START { \ - g_assert ("Value of time " #t " is out of timespec's range" && \ - ((t) / GST_SECOND) < G_MAXLONG); \ - (ts).tv_sec = (glong) ((t) / GST_SECOND); \ - (ts).tv_nsec = (glong) (((t) - (ts).tv_sec * GST_SECOND) / GST_NSECOND); \ -} G_STMT_END - -/* timestamp debugging macros */ -/** - * GST_TIME_FORMAT: - * - * A string that can be used in printf-like format strings to display a - * #GstClockTime value in h:m:s format. Use GST_TIME_ARGS() to construct - * the matching arguments. - * - * Example: - * |[ - * printf("%" GST_TIME_FORMAT "\n", GST_TIME_ARGS(ts)); - * ]| - */ -#define GST_TIME_FORMAT "u:%02u:%02u.%09u" -/** - * GST_TIME_ARGS: - * @t: a #GstClockTime - * - * Format @t for the #GST_TIME_FORMAT format string. Note: @t will be - * evaluated more than once. - */ -#define GST_TIME_ARGS(t) \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) (((GstClockTime)(t)) / (GST_SECOND * 60 * 60)) : 99, \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) ((((GstClockTime)(t)) / (GST_SECOND * 60)) % 60) : 99, \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) ((((GstClockTime)(t)) / GST_SECOND) % 60) : 99, \ - GST_CLOCK_TIME_IS_VALID (t) ? \ - (guint) (((GstClockTime)(t)) % GST_SECOND) : 999999999 - -typedef struct _GstClockEntry GstClockEntry; -typedef struct _GstClock GstClock; -typedef struct _GstClockClass GstClockClass; -typedef struct _GstClockPrivate GstClockPrivate; - -/* --- prototype for async callbacks --- */ -/** - * GstClockCallback: - * @clock: The clock that triggered the callback - * @time: The time it was triggered - * @id: The #GstClockID that expired - * @user_data: user data passed in the gst_clock_id_wait_async() function - * - * The function prototype of the callback. - * - * Returns: %TRUE or %FALSE (currently unused) - */ -typedef gboolean (*GstClockCallback) (GstClock *clock, GstClockTime time, - GstClockID id, gpointer user_data); -/** - * GstClockReturn: - * @GST_CLOCK_OK: The operation succeeded. - * @GST_CLOCK_EARLY: The operation was scheduled too late. - * @GST_CLOCK_UNSCHEDULED: The clockID was unscheduled - * @GST_CLOCK_BUSY: The ClockID is busy - * @GST_CLOCK_BADTIME: A bad time was provided to a function. - * @GST_CLOCK_ERROR: An error occurred - * @GST_CLOCK_UNSUPPORTED: Operation is not supported - * @GST_CLOCK_DONE: The ClockID is done waiting - * - * The return value of a clock operation. - */ -typedef enum -{ - GST_CLOCK_OK = 0, - GST_CLOCK_EARLY = 1, - GST_CLOCK_UNSCHEDULED = 2, - GST_CLOCK_BUSY = 3, - GST_CLOCK_BADTIME = 4, - GST_CLOCK_ERROR = 5, - GST_CLOCK_UNSUPPORTED = 6, - GST_CLOCK_DONE = 7 -} GstClockReturn; - -/** - * GstClockEntryType: - * @GST_CLOCK_ENTRY_SINGLE: a single shot timeout - * @GST_CLOCK_ENTRY_PERIODIC: a periodic timeout request - * - * The type of the clock entry - */ -typedef enum { - GST_CLOCK_ENTRY_SINGLE, - GST_CLOCK_ENTRY_PERIODIC -} GstClockEntryType; - -/** - * GST_CLOCK_ENTRY: - * @entry: the entry to cast - * - * Cast to a clock entry - */ -#define GST_CLOCK_ENTRY(entry) ((GstClockEntry *)(entry)) -/** - * GST_CLOCK_ENTRY_CLOCK: - * @entry: the entry to query - * - * Get the owner clock of the entry - */ -#define GST_CLOCK_ENTRY_CLOCK(entry) ((entry)->clock) -/** - * GST_CLOCK_ENTRY_TYPE: - * @entry: the entry to query - * - * Get the type of the clock entry - */ -#define GST_CLOCK_ENTRY_TYPE(entry) ((entry)->type) -/** - * GST_CLOCK_ENTRY_TIME: - * @entry: the entry to query - * - * Get the requested time of this entry - */ -#define GST_CLOCK_ENTRY_TIME(entry) ((entry)->time) -/** - * GST_CLOCK_ENTRY_INTERVAL: - * @entry: the entry to query - * - * Get the interval of this periodic entry - */ -#define GST_CLOCK_ENTRY_INTERVAL(entry) ((entry)->interval) -/** - * GST_CLOCK_ENTRY_STATUS: - * @entry: the entry to query - * - * The status of the entry - */ -#define GST_CLOCK_ENTRY_STATUS(entry) ((entry)->status) - -/** - * GstClockEntry: - * @refcount: reference counter (read-only) - * - * All pending timeouts or periodic notifies are converted into - * an entry. - * Note that GstClockEntry should be treated as an opaque structure. It must - * not be extended or allocated using a custom allocator. - */ -struct _GstClockEntry { - gint refcount; - /*< protected >*/ - GstClock *clock; - GstClockEntryType type; - GstClockTime time; - GstClockTime interval; - GstClockReturn status; - GstClockCallback func; - gpointer user_data; - GDestroyNotify destroy_data; - gboolean unscheduled; - gboolean woken_up; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#include - -/** - * GstClockFlags: - * @GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC: clock can do a single sync timeout request - * @GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC: clock can do a single async timeout request - * @GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC: clock can do sync periodic timeout requests - * @GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC: clock can do async periodic timeout callbacks - * @GST_CLOCK_FLAG_CAN_SET_RESOLUTION: clock's resolution can be changed - * @GST_CLOCK_FLAG_CAN_SET_MASTER: clock can be slaved to a master clock - * @GST_CLOCK_FLAG_LAST: subclasses can add additional flags starting from this flag - * - * The capabilities of this clock - */ -typedef enum { - GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC = (GST_OBJECT_FLAG_LAST << 0), - GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC = (GST_OBJECT_FLAG_LAST << 1), - GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC = (GST_OBJECT_FLAG_LAST << 2), - GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC = (GST_OBJECT_FLAG_LAST << 3), - GST_CLOCK_FLAG_CAN_SET_RESOLUTION = (GST_OBJECT_FLAG_LAST << 4), - GST_CLOCK_FLAG_CAN_SET_MASTER = (GST_OBJECT_FLAG_LAST << 5), - /* padding */ - GST_CLOCK_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 8) -} GstClockFlags; - -/** - * GST_CLOCK_FLAGS: - * @clock: the clock to query - * - * Gets the #GstClockFlags clock flags. - */ -#define GST_CLOCK_FLAGS(clock) GST_OBJECT_FLAGS(clock) - -/** - * GstClock: - * - * #GstClock base structure. The values of this structure are - * protected for subclasses, use the methods to use the #GstClock. - */ -struct _GstClock { - GstObject object; - - /*< private >*/ - GstClockPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstClockClass: - * @parent_class: the parent class structure - * @change_resolution: change the resolution of the clock. Not all values might - * be acceptable. The new resolution should be returned. - * @get_resolution: get the resolution of the clock. - * @get_internal_time: get the internal unadjusted time of the clock. - * implement @wait_jitter instead. - * @wait: perform a blocking wait on the given #GstClockEntry and return - * the jitter. - * @wait_async: perform an asynchronous wait for the given #GstClockEntry. - * @unschedule: unblock a blocking or async wait operation. - * - * GStreamer clock class. Override the vmethods to implement the clock - * functionality. - */ -struct _GstClockClass { - GstObjectClass parent_class; - - /*< public >*/ - /* vtable */ - GstClockTime (*change_resolution) (GstClock *clock, - GstClockTime old_resolution, - GstClockTime new_resolution); - GstClockTime (*get_resolution) (GstClock *clock); - - GstClockTime (*get_internal_time) (GstClock *clock); - - /* waiting on an ID */ - GstClockReturn (*wait) (GstClock *clock, GstClockEntry *entry, - GstClockTimeDiff *jitter); - GstClockReturn (*wait_async) (GstClock *clock, GstClockEntry *entry); - void (*unschedule) (GstClock *clock, GstClockEntry *entry); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_clock_get_type (void); - -GstClockTime gst_clock_set_resolution (GstClock *clock, - GstClockTime resolution); -GstClockTime gst_clock_get_resolution (GstClock *clock); - -GstClockTime gst_clock_get_time (GstClock *clock); -void gst_clock_set_calibration (GstClock *clock, GstClockTime internal, - GstClockTime external, - GstClockTime rate_num, - GstClockTime rate_denom); -void gst_clock_get_calibration (GstClock *clock, GstClockTime *internal, - GstClockTime *external, - GstClockTime *rate_num, - GstClockTime *rate_denom); - -/* master/slave clocks */ -gboolean gst_clock_set_master (GstClock *clock, GstClock *master); -GstClock* gst_clock_get_master (GstClock *clock); - -void gst_clock_set_timeout (GstClock *clock, - GstClockTime timeout); -GstClockTime gst_clock_get_timeout (GstClock *clock); - -gboolean gst_clock_add_observation (GstClock *clock, GstClockTime slave, - GstClockTime master, gdouble *r_squared); - - -/* getting and adjusting internal/external time */ -GstClockTime gst_clock_get_internal_time (GstClock *clock); -GstClockTime gst_clock_adjust_unlocked (GstClock *clock, GstClockTime internal); -GstClockTime gst_clock_unadjust_unlocked (GstClock * clock, GstClockTime external); - - -/* creating IDs that can be used to get notifications */ -GstClockID gst_clock_new_single_shot_id (GstClock *clock, - GstClockTime time); -GstClockID gst_clock_new_periodic_id (GstClock *clock, - GstClockTime start_time, - GstClockTime interval); - -/* reference counting */ -GstClockID gst_clock_id_ref (GstClockID id); -void gst_clock_id_unref (GstClockID id); - -/* operations on IDs */ -gint gst_clock_id_compare_func (gconstpointer id1, gconstpointer id2); - -GstClockTime gst_clock_id_get_time (GstClockID id); -GstClockReturn gst_clock_id_wait (GstClockID id, - GstClockTimeDiff *jitter); -GstClockReturn gst_clock_id_wait_async (GstClockID id, - GstClockCallback func, - gpointer user_data, - GDestroyNotify destroy_data); -void gst_clock_id_unschedule (GstClockID id); - -gboolean gst_clock_single_shot_id_reinit (GstClock * clock, - GstClockID id, - GstClockTime time); -gboolean gst_clock_periodic_id_reinit (GstClock * clock, - GstClockID id, - GstClockTime start_time, - GstClockTime interval); - -G_END_DECLS - -#endif /* __GST_CLOCK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcompat.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcompat.h deleted file mode 100644 index cace2e1d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcompat.h +++ /dev/null @@ -1,98 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2004 Wim Taymans - * - * gstcompat.h: backwards compatibility stuff - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/** - * SECTION:gstcompat - * @short_description: Deprecated API entries - * - * Please do not use these in new code. - * These symbols are only available by defining GST_DISABLE_DEPRECATED. - * This can be done in CFLAGS for compiling old code. - */ - -/* API compatibility stuff */ -#ifndef __GSTCOMPAT_H__ -#define __GSTCOMPAT_H__ - -G_BEGIN_DECLS - -/* added to ease the transition to 0.11 */ -#define gst_element_class_set_details_simple gst_element_class_set_metadata - -#define gst_element_factory_get_longname(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_LONGNAME) -#define gst_element_factory_get_klass(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_KLASS) -#define gst_element_factory_get_description(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_DESCRIPTION) -#define gst_element_factory_get_author(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_AUTHOR) -#define gst_element_factory_get_documentation_uri(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_DOC_URI) -#define gst_element_factory_get_icon_name(f) gst_element_factory_get_metadata(f, GST_ELEMENT_METADATA_ICON_NAME) - -#define gst_pad_get_caps_reffed(p) gst_pad_get_caps(p) -#define gst_pad_peer_get_caps_reffed(p) gst_pad_peer_get_caps(p) - -#define gst_buffer_new_and_alloc(s) gst_buffer_new_allocate(NULL, s, NULL) - -#define GST_BUFFER_TIMESTAMP GST_BUFFER_PTS -#define GST_BUFFER_TIMESTAMP_IS_VALID GST_BUFFER_PTS_IS_VALID - -#define gst_adapter_prev_timestamp gst_adapter_prev_pts - -#define gst_tag_list_free(taglist) gst_tag_list_unref(taglist) - -static inline gboolean -gst_pad_set_caps (GstPad * pad, GstCaps * caps) -{ - GstEvent *event; - gboolean res = TRUE; - - g_return_val_if_fail (GST_IS_PAD (pad), FALSE); - g_return_val_if_fail (caps != NULL && gst_caps_is_fixed (caps), FALSE); - - event = gst_event_new_caps (caps); - - if (GST_PAD_IS_SRC (pad)) - res = gst_pad_push_event (pad, event); - else - res = gst_pad_send_event (pad, event); - - return res; -} - - -#ifndef GST_DISABLE_DEPRECATED - -#define GST_MESSAGE_DURATION GST_MESSAGE_DURATION_CHANGED -#define gst_message_new_duration(src,fmt,dur) \ - gst_message_new_duration_changed(src) -#define gst_message_parse_duration(msg,fmt,dur) \ -G_STMT_START { \ - GstFormat *p_fmt = fmt; \ - gint64 *p_dur = dur; \ - if (p_fmt) \ - *p_fmt = GST_FORMAT_TIME; \ - if (p_dur) \ - *p_dur = GST_CLOCK_TIME_NONE; \ -} G_STMT_END - -#endif /* not GST_DISABLE_DEPRECATED */ - -G_END_DECLS - -#endif /* __GSTCOMPAT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstconfig.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstconfig.h deleted file mode 100644 index b23beb3e..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstconfig.h +++ /dev/null @@ -1,201 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2004,2005 Wim Taymans - * - * gstconfig.h: GST_DISABLE_* macros for build configuration - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/** - * SECTION:gstconfig - * @short_description: Build configuration options - * - * This describes the configuration options for GStreamer. When building - * GStreamer there are a lot of parts (known internally as "subsystems" ) that - * can be disabled for various reasons. The most common reasons are speed and - * size, which is important because GStreamer is designed to run on embedded - * systems. - * - * If a subsystem is disabled, most of this changes are done in an API - * compatible way, so you don't need to adapt your code in most cases. It is - * never done in an ABI compatible way though. So if you want to disable a - * suybsystem, you have to rebuild all programs depending on GStreamer, too. - * - * If a subsystem is disabled in GStreamer, a value is defined in - * <gst/gst.h>. You can check this if you do subsystem-specific stuff. - * - * Doing subsystem specific things - * - * &hash;ifndef GST_DISABLE_GST_DEBUG - * // do stuff specific to the debugging subsystem - * &hash;endif // GST_DISABLE_GST_DEBUG - * - * - */ - -#ifndef __GST_CONFIG_H__ -#define __GST_CONFIG_H__ - -/* trick gtk-doc into believing these symbols are defined (yes, it's ugly) */ - -#if 0 -#define GST_DISABLE_GST_DEBUG 1 -#define GST_DISABLE_PARSE 1 -#define GST_DISABLE_TRACE 1 -#define GST_DISABLE_ALLOC_TRACE 1 -#define GST_DISABLE_REGISTRY 1 -#define GST_DISABLE_PLUGIN 1 -#define GST_HAVE_GLIB_2_8 1 -#endif - -/***** default padding of structures *****/ -#define GST_PADDING 4 -#define GST_PADDING_INIT { NULL } - -/***** padding for very extensible base classes *****/ -#define GST_PADDING_LARGE 20 - -/***** disabling of subsystems *****/ - -/** - * GST_DISABLE_GST_DEBUG: - * - * Configures the inclusion of the debugging subsystem - */ -/* #undef GST_DISABLE_GST_DEBUG */ - -/** - * GST_DISABLE_PARSE: - * - * Configures the inclusion of the gst-lauch parser - */ -/* #undef GST_DISABLE_PARSE */ - -/** - * GST_DISABLE_TRACE: - * - * Configures the inclusion of a resource tracing facillity - * (seems to be unused) - */ -/* #undef GST_DISABLE_TRACE */ - -/** - * GST_DISABLE_ALLOC_TRACE: - * - * Configures the use of a memory tracer based on the resource tracer - * if TRACE is disabled, ALLOC_TRACE is disabled as well - */ -/* #undef GST_DISABLE_ALLOC_TRACE */ - -/** - * GST_DISABLE_REGISTRY: - * - * Configures the use of the plugin registry. - * If one disables this, required plugins need to be loaded and registered - * manually - */ -/* #undef GST_DISABLE_REGISTRY */ - -/* FIXME: test and document these! */ -/* Configures the use of external plugins */ -/* #undef GST_DISABLE_PLUGIN */ - -/* printf extension format */ -/** - * GST_PTR_FORMAT: - * - * printf format type used to debug GStreamer types. - * This can only be used on types whose size is >= sizeof(gpointer). - */ -#define GST_PTR_FORMAT "p" -/** - * GST_SEGMENT_FORMAT: - * - * printf format type used to debug GStreamer segments. - * This can only be used on pointers to GstSegment structures. - */ -#define GST_SEGMENT_FORMAT "p" - -/* whether or not GST_PTR_FORMAT or GST_SEGMENT_FORMAT are using - * the printf extension mechanism. This is for internal use in our - * header files so we know whether we can use G_GNUC_PRINTF or not */ -#undef GST_USING_PRINTF_EXTENSION - -/* GST_DISABLE_PRINTF_EXTENSION: - * - * Define this to debug your debug log messages and make gcc spew warnings - * if printf format string and arguments don't match up (this is usually - * not the case when libc and gcc are used because printf format warnings - * have to be disabled when the printf extension mechanism is in use). - * - * Note that using this option disables 'pretty logging' of GStreamer objects - * like caps, tags, structures, events, pads etc., so that only their address - * will be printed in the log. - * - * This define only disables use of the special registered printf format - * extensions in the code compiled with it defined. It does not stop - * GStreamer from registering these extensions in the first place if it - * was compiled against a libc that supports this. - * - * (not official API) - */ -/* If GLib is not using the system printf, we can't use the registered - * extensions because the GLib-internal printf won't know how to parse them */ -#if defined(GST_DISABLE_PRINTF_EXTENSION) || !defined(GLIB_USING_SYSTEM_PRINTF) - #undef GST_PTR_FORMAT - #define GST_PTR_FORMAT "p" - #undef GST_SEGMENT_FORMAT - #define GST_SEGMENT_FORMAT "p" - #undef GST_USING_PRINTF_EXTENSION -#endif - -/* whether or not the CPU supports unaligned access */ -#define GST_HAVE_UNALIGNED_ACCESS 1 - -/** - * GST_EXPORT: - * - * Export the given variable from the built shared object. - * - * On Windows, this exports the variable from the DLL. - * On other platforms, this gets defined to "extern". - */ -/** - * GST_PLUGIN_EXPORT: - * - * Export the plugin's definition. - * - * On Windows, this exports the plugin definition from the DLL. - * On other platforms, this gets defined as a no-op. - */ -#ifdef _MSC_VER -#define GST_PLUGIN_EXPORT __declspec(dllexport) extern -#ifdef GST_EXPORTS -#define GST_EXPORT __declspec(dllexport) extern -#else -#define GST_EXPORT __declspec(dllimport) extern -#endif -#else /* not _MSC_VER */ -#define GST_PLUGIN_EXPORT -#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -#define GST_EXPORT extern __attribute__ ((visibility ("default"))) -#else -#define GST_EXPORT extern -#endif -#endif - -#endif /* __GST_CONFIG_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolbinding.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolbinding.h deleted file mode 100644 index a37be1d4..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolbinding.h +++ /dev/null @@ -1,122 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Stefan Sauer - * - * gstcontrolbinding.h: Attachment for control sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CONTROL_BINDING_H__ -#define __GST_CONTROL_BINDING_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_CONTROL_BINDING \ - (gst_control_binding_get_type()) -#define GST_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CONTROL_BINDING,GstControlBinding)) -#define GST_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CONTROL_BINDING,GstControlBindingClass)) -#define GST_IS_CONTROL_BINDING(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CONTROL_BINDING)) -#define GST_IS_CONTROL_BINDING_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CONTROL_BINDING)) -#define GST_CONTROL_BINDING_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstControlBindingClass)) - -typedef struct _GstControlBinding GstControlBinding; -typedef struct _GstControlBindingClass GstControlBindingClass; - -/** - * GstControlBindingConvert: - * @binding: the #GstControlBinding instance - * @src_value: the value returned by the cotnrol source - * @dest_value: the target GValue - * - * Function to map a control-value to the target GValue. - */ -typedef void (* GstControlBindingConvert) (GstControlBinding *binding, gdouble src_value, GValue *dest_value); - -/** - * GstControlBinding: - * @name: name of the property of this binding - * @pspec: #GParamSpec for this property - * - * The instance structure of #GstControlBinding. - */ -struct _GstControlBinding { - GstObject parent; - - /*< public >*/ - gchar *name; - GParamSpec *pspec; - - /*< private >*/ - GstObject *object; /* GstObject owning the property - * (== parent when bound) */ - gboolean disabled; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstControlBindingClass: - * @parent_class: Parent class - * - * The class structure of #GstControlBinding. - */ - -struct _GstControlBindingClass -{ - GstObjectClass parent_class; - - /* virtual methods */ - gboolean (* sync_values) (GstControlBinding *binding, GstObject *object, GstClockTime timestamp, GstClockTime last_sync); - GValue * (* get_value) (GstControlBinding *binding, GstClockTime timestamp); - gboolean (* get_value_array) (GstControlBinding *binding, GstClockTime timestamp,GstClockTime interval, guint n_values, gpointer values); - gboolean (* get_g_value_array) (GstControlBinding *binding, GstClockTime timestamp,GstClockTime interval, guint n_values, GValue *values); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_CONTROL_BINDING_PSPEC(cb) (((GstControlBinding *) cb)->pspec) - -GType gst_control_binding_get_type (void); - -/* Functions */ - -gboolean gst_control_binding_sync_values (GstControlBinding * binding, GstObject *object, - GstClockTime timestamp, GstClockTime last_sync); -GValue * gst_control_binding_get_value (GstControlBinding *binding, - GstClockTime timestamp); -gboolean gst_control_binding_get_value_array (GstControlBinding *binding, GstClockTime timestamp, - GstClockTime interval, guint n_values, gpointer values); -gboolean gst_control_binding_get_g_value_array (GstControlBinding *binding, GstClockTime timestamp, - GstClockTime interval, guint n_values, GValue *values); - -void gst_control_binding_set_disabled (GstControlBinding * binding, gboolean disabled); -gboolean gst_control_binding_is_disabled (GstControlBinding * binding); -G_END_DECLS - -#endif /* __GST_CONTROL_BINDING_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolsource.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolsource.h deleted file mode 100644 index e61c59a7..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstcontrolsource.h +++ /dev/null @@ -1,139 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2007 Sebastian Dröge - * - * gstcontrolsource.h: Interface declaration for control sources - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_CONTROL_SOURCE_H__ -#define __GST_CONTROL_SOURCE_H__ - -#include - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_CONTROL_SOURCE \ - (gst_control_source_get_type()) -#define GST_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CONTROL_SOURCE,GstControlSource)) -#define GST_CONTROL_SOURCE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CONTROL_SOURCE,GstControlSourceClass)) -#define GST_IS_CONTROL_SOURCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CONTROL_SOURCE)) -#define GST_IS_CONTROL_SOURCE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CONTROL_SOURCE)) -#define GST_CONTROL_SOURCE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CONTOL_SOURCE, GstControlSourceClass)) - -typedef struct _GstControlSource GstControlSource; -typedef struct _GstControlSourceClass GstControlSourceClass; -typedef struct _GstTimedValue GstTimedValue; -typedef struct _GstValueArray GstValueArray; - -/** - * GstTimedValue: - * @timestamp: timestamp of the value change - * @value: the corresponding value - * - * Structure for saving a timestamp and a value. - */ -struct _GstTimedValue -{ - GstClockTime timestamp; - gdouble value; -}; - -/** - * GstControlSourceGetValue: - * @self: the #GstControlSource instance - * @timestamp: timestamp for which a value should be calculated - * @value: a #GValue which will be set to the result. It must be initialized to the correct type. - * - * Function for returning a value for a given timestamp. - * - * Returns: %TRUE if the value was successfully calculated. - * - */ -typedef gboolean (* GstControlSourceGetValue) (GstControlSource *self, - GstClockTime timestamp, gdouble *value); - -/** - * GstControlSourceGetValueArray: - * @self: the #GstControlSource instance - * @timestamp: timestamp for which a value should be calculated - * @interval: the time spacing between subsequent values - * @n_values: the number of values - * @values: array to put control-values in - * - * Function for returning an array of values for starting at a given timestamp. - * - * Returns: %TRUE if the values were successfully calculated. - * - */ -typedef gboolean (* GstControlSourceGetValueArray) (GstControlSource *self, - GstClockTime timestamp, GstClockTime interval, guint n_values, gdouble *values); - -/** - * GstControlSource: - * @get_value: Function for returning a value for a given timestamp - * @get_value_array: Function for returning a #GstValueArray for a given timestamp - * - * The instance structure of #GstControlSource. - */ -struct _GstControlSource { - GstObject parent; - - /*< public >*/ - GstControlSourceGetValue get_value; /* Returns the value for a property at a given timestamp */ - GstControlSourceGetValueArray get_value_array; /* Returns values for a property in a given timespan */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstControlSourceClass: - * @parent_class: Parent class - * @bind: Class method for binding the #GstControlSource to a specific GParamSpec - * - * The class structure of #GstControlSource. - */ - -struct _GstControlSourceClass -{ - GstObjectClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_control_source_get_type (void); - -/* Functions */ -gboolean gst_control_source_get_value (GstControlSource *self, GstClockTime timestamp, - gdouble *value); -gboolean gst_control_source_get_value_array (GstControlSource *self, GstClockTime timestamp, - GstClockTime interval, guint n_values, - gdouble *values); -G_END_DECLS - -#endif /* __GST_CONTROL_SOURCE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdatetime.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdatetime.h deleted file mode 100644 index 500b9cc2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdatetime.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_DATE_TIME_H__ -#define __GST_DATE_TIME_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstDateTime: - * - * Opaque, immutable, refcounted struct that stores date, time and timezone - * information. It currently supports ranges from 0001-01-01 to - * 9999-12-31 in the Gregorian proleptic calendar. - * - * Use the acessor functions to get the stored values. - */ -typedef struct _GstDateTime GstDateTime; - -/* query which fields are set */ - -gboolean gst_date_time_has_year (const GstDateTime * datetime); -gboolean gst_date_time_has_month (const GstDateTime * datetime); -gboolean gst_date_time_has_day (const GstDateTime * datetime); -gboolean gst_date_time_has_time (const GstDateTime * datetime); -gboolean gst_date_time_has_second (const GstDateTime * datetime); - -/* field getters */ - -gint gst_date_time_get_year (const GstDateTime * datetime); -gint gst_date_time_get_month (const GstDateTime * datetime); -gint gst_date_time_get_day (const GstDateTime * datetime); -gint gst_date_time_get_hour (const GstDateTime * datetime); -gint gst_date_time_get_minute (const GstDateTime * datetime); -gint gst_date_time_get_second (const GstDateTime * datetime); -gint gst_date_time_get_microsecond (const GstDateTime * datetime); -gfloat gst_date_time_get_time_zone_offset (const GstDateTime * datetime); - -/* constructors */ - -GstDateTime * gst_date_time_new_from_unix_epoch_local_time (gint64 secs) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_from_unix_epoch_utc (gint64 secs) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_local_time (gint year, - gint month, - gint day, - gint hour, - gint minute, - gdouble seconds) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_y (gint year) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_ym (gint year, - gint month) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_ymd (gint year, - gint month, - gint day) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new (gfloat tzoffset, - gint year, gint month, - gint day, gint hour, - gint minute, - gdouble seconds) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_now_local_time (void) G_GNUC_MALLOC; - -GstDateTime * gst_date_time_new_now_utc (void) G_GNUC_MALLOC; - - -gchar * gst_date_time_to_iso8601_string (GstDateTime * datetime) G_GNUC_MALLOC; -GstDateTime * gst_date_time_new_from_iso8601_string (const gchar * string) G_GNUC_MALLOC; - -GDateTime * gst_date_time_to_g_date_time (GstDateTime * datetime); - -GstDateTime * gst_date_time_new_from_g_date_time (GDateTime * dt); - -/* refcounting */ - -GstDateTime * gst_date_time_ref (GstDateTime * datetime); - -void gst_date_time_unref (GstDateTime * datetime); - -G_END_DECLS - -#endif /* __GST_DATE_TIME_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdebugutils.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdebugutils.h deleted file mode 100644 index 39decd85..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstdebugutils.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Stefan Kost - * - * gstdebugutils.h: debugging and analysis utillities - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GSTDEBUGUTILS_H__ -#define __GSTDEBUGUTILS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstDebugGraphDetails: - * @GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE: show caps-name on edges - * @GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS: show caps-details on edges - * @GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS: show modified parameters on elements - * @GST_DEBUG_GRAPH_SHOW_STATES: show element states - * @GST_DEBUG_GRAPH_SHOW_ALL: show all details - * - * Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE() - * and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(). - */ -typedef enum { - GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE = (1<<0), - GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS = (1<<1), - GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS = (1<<2), - GST_DEBUG_GRAPH_SHOW_STATES = (1<<3), - GST_DEBUG_GRAPH_SHOW_ALL = ((1<<4)-1) -} GstDebugGraphDetails; - - -/********** pipeline graphs **********/ - -void gst_debug_bin_to_dot_file (GstBin *bin, GstDebugGraphDetails details, const gchar *file_name); -void gst_debug_bin_to_dot_file_with_ts (GstBin *bin, GstDebugGraphDetails details, const gchar *file_name); - -#ifndef GST_DISABLE_GST_DEBUG - -/** - * GST_DEBUG_BIN_TO_DOT_FILE: - * @bin: the top-level pipeline that should be analyzed - * @details: details to show in the graph, e.g. #GST_DEBUG_GRAPH_SHOW_ALL or - * one or more other #GstDebugGraphDetails flags. - * @file_name: output base filename (e.g. "myplayer") - * - * To aid debugging applications one can use this method to write out the whole - * network of gstreamer elements that form the pipeline into an dot file. - * This file can be processed with graphviz to get an image. - * - * dot -Tpng -oimage.png graph_lowlevel.dot - * - * - * The macro is only active if gstreamer is configured with - * "--gst-enable-gst-debug" and the environment variable - * GST_DEBUG_DUMP_DOT_DIR is set to a basepath (e.g. /tmp). - */ -#define GST_DEBUG_BIN_TO_DOT_FILE(bin, details, file_name) gst_debug_bin_to_dot_file (bin, details, file_name) - -/** - * GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS: - * @bin: the top-level pipeline that should be analyzed - * @details: details to show in the graph, e.g. #GST_DEBUG_GRAPH_SHOW_ALL or - * one or more other #GstDebugGraphDetails flags. - * @file_name: output base filename (e.g. "myplayer") - * - * This works like GST_DEBUG_BIN_TO_DOT_FILE(), but adds the current timestamp - * to the filename, so that it can be used to take multiple snapshots. - */ -#define GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(bin, details, file_name) gst_debug_bin_to_dot_file_with_ts (bin, details, file_name) - - -#else /* GST_DISABLE_GST_DEBUG */ - - -#define GST_DEBUG_BIN_TO_DOT_FILE(bin, details, file_name) -#define GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(bin, details, file_name) - -#endif /* GST_DISABLE_GST_DEBUG */ - -G_END_DECLS - -#endif /* __GSTDEBUGUTILS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelement.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelement.h deleted file mode 100644 index df71720c..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelement.h +++ /dev/null @@ -1,801 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000,2004 Wim Taymans - * - * gstelement.h: Header for GstElement - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_ELEMENT_H__ -#define __GST_ELEMENT_H__ - -/* gstelement.h and gstelementfactory.h include eachother */ -typedef struct _GstElement GstElement; -typedef struct _GstElementClass GstElementClass; - -/* gstmessage.h needs State */ -/** - * GstState: - * @GST_STATE_VOID_PENDING: no pending state. - * @GST_STATE_NULL : the NULL state or initial state of an element. - * @GST_STATE_READY : the element is ready to go to PAUSED. - * @GST_STATE_PAUSED : the element is PAUSED, it is ready to accept and - * process data. Sink elements however only accept one - * buffer and then block. - * @GST_STATE_PLAYING : the element is PLAYING, the #GstClock is running and - * the data is flowing. - * - * The possible states an element can be in. States can be changed using - * gst_element_set_state() and checked using gst_element_get_state(). - */ -typedef enum { - GST_STATE_VOID_PENDING = 0, - GST_STATE_NULL = 1, - GST_STATE_READY = 2, - GST_STATE_PAUSED = 3, - GST_STATE_PLAYING = 4 -} GstState; - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ELEMENT (gst_element_get_type ()) -#define GST_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_ELEMENT)) -#define GST_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_ELEMENT)) -#define GST_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ELEMENT, GstElementClass)) -#define GST_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_ELEMENT, GstElement)) -#define GST_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_ELEMENT, GstElementClass)) -#define GST_ELEMENT_CAST(obj) ((GstElement*)(obj)) - -/** - * GstStateChangeReturn: - * @GST_STATE_CHANGE_FAILURE : the state change failed - * @GST_STATE_CHANGE_SUCCESS : the state change succeeded - * @GST_STATE_CHANGE_ASYNC : the state change will happen asynchronously - * @GST_STATE_CHANGE_NO_PREROLL: the state change succeeded but the element - * cannot produce data in %GST_STATE_PAUSED. - * This typically happens with live sources. - * - * The possible return values from a state change function such as - * gst_element_set_state(). Only @GST_STATE_CHANGE_FAILURE is a real failure. - */ -typedef enum { - GST_STATE_CHANGE_FAILURE = 0, - GST_STATE_CHANGE_SUCCESS = 1, - GST_STATE_CHANGE_ASYNC = 2, - GST_STATE_CHANGE_NO_PREROLL = 3 -} GstStateChangeReturn; - -/* NOTE: this probably should be done with an #ifdef to decide - * whether to safe-cast or to just do the non-checking cast. - */ - -/** - * GST_STATE: - * @elem: a #GstElement to return state for. - * - * This macro returns the current #GstState of the element. - */ -#define GST_STATE(elem) (GST_ELEMENT_CAST(elem)->current_state) - -/** - * GST_STATE_NEXT: - * @elem: a #GstElement to return the next state for. - * - * This macro returns the next #GstState of the element. - */ -#define GST_STATE_NEXT(elem) (GST_ELEMENT_CAST(elem)->next_state) - -/** - * GST_STATE_PENDING: - * @elem: a #GstElement to return the pending state for. - * - * This macro returns the currently pending #GstState of the element. - */ -#define GST_STATE_PENDING(elem) (GST_ELEMENT_CAST(elem)->pending_state) - -/** - * GST_STATE_TARGET: - * @elem: a #GstElement to return the target state for. - * - * This macro returns the target #GstState of the element. - */ -#define GST_STATE_TARGET(elem) (GST_ELEMENT_CAST(elem)->target_state) - -/** - * GST_STATE_RETURN: - * @elem: a #GstElement to return the last state result for. - * - * This macro returns the last #GstStateChangeReturn value. - */ -#define GST_STATE_RETURN(elem) (GST_ELEMENT_CAST(elem)->last_return) - -#define __GST_SIGN(val) ((val) < 0 ? -1 : ((val) > 0 ? 1 : 0)) -/** - * GST_STATE_GET_NEXT: - * @cur: A starting #GstState - * @pending: A target #GstState - * - * Given a current state @cur and a target state @pending, calculate the next (intermediate) - * #GstState. - */ -#define GST_STATE_GET_NEXT(cur,pending) ((GstState)((cur) + __GST_SIGN ((gint)(pending) - (gint)(cur)))) -/** - * GST_STATE_TRANSITION: - * @cur: A current state - * @next: A next state - * - * Given a current state @cur and a next state @next, calculate the associated - * #GstStateChange transition. - */ -#define GST_STATE_TRANSITION(cur,next) ((GstStateChange)(((cur)<<3)|(next))) -/** - * GST_STATE_TRANSITION_CURRENT: - * @trans: A #GstStateChange - * - * Given a state transition @trans, extract the current #GstState. - */ -#define GST_STATE_TRANSITION_CURRENT(trans) ((GstState)((trans)>>3)) -/** - * GST_STATE_TRANSITION_NEXT: - * @trans: A #GstStateChange - * - * Given a state transition @trans, extract the next #GstState. - */ -#define GST_STATE_TRANSITION_NEXT(trans) ((GstState)((trans)&0x7)) - -/** - * GstStateChange: - * @GST_STATE_CHANGE_NULL_TO_READY : state change from NULL to READY. - * - * - * The element must check if the resources it needs are available. Device - * sinks and -sources typically try to probe the device to constrain their - * caps. - * - * - * The element opens the device (in case feature need to be probed). - * - * - * @GST_STATE_CHANGE_READY_TO_PAUSED : state change from READY to PAUSED. - * - * - * The element pads are activated in order to receive data in PAUSED. - * Streaming threads are started. - * - * - * Some elements might need to return %GST_STATE_CHANGE_ASYNC and complete - * the state change when they have enough information. It is a requirement - * for sinks to return %GST_STATE_CHANGE_ASYNC and complete the state change - * when they receive the first buffer or %GST_EVENT_EOS (preroll). - * Sinks also block the dataflow when in PAUSED. - * - * - * A pipeline resets the running_time to 0. - * - * - * Live sources return %GST_STATE_CHANGE_NO_PREROLL and don't generate data. - * - * - * @GST_STATE_CHANGE_PAUSED_TO_PLAYING: state change from PAUSED to PLAYING. - * - * - * Most elements ignore this state change. - * - * - * The pipeline selects a #GstClock and distributes this to all the children - * before setting them to PLAYING. This means that it is only alowed to - * synchronize on the #GstClock in the PLAYING state. - * - * - * The pipeline uses the #GstClock and the running_time to calculate the - * base_time. The base_time is distributed to all children when performing - * the state change. - * - * - * Sink elements stop blocking on the preroll buffer or event and start - * rendering the data. - * - * - * Sinks can post %GST_MESSAGE_EOS in the PLAYING state. It is not allowed - * to post %GST_MESSAGE_EOS when not in the PLAYING state. - * - * - * While streaming in PAUSED or PLAYING elements can create and remove - * sometimes pads. - * - * - * Live sources start generating data and return %GST_STATE_CHANGE_SUCCESS. - * - * - * @GST_STATE_CHANGE_PLAYING_TO_PAUSED: state change from PLAYING to PAUSED. - * - * - * Most elements ignore this state change. - * - * - * The pipeline calculates the running_time based on the last selected - * #GstClock and the base_time. It stores this information to continue - * playback when going back to the PLAYING state. - * - * - * Sinks unblock any #GstClock wait calls. - * - * - * When a sink does not have a pending buffer to play, it returns - * %GST_STATE_CHANGE_ASYNC from this state change and completes the state - * change when it receives a new buffer or an %GST_EVENT_EOS. - * - * - * Any queued %GST_MESSAGE_EOS items are removed since they will be reposted - * when going back to the PLAYING state. The EOS messages are queued in - * #GstBin containers. - * - * - * Live sources stop generating data and return %GST_STATE_CHANGE_NO_PREROLL. - * - * - * @GST_STATE_CHANGE_PAUSED_TO_READY : state change from PAUSED to READY. - * - * - * Sinks unblock any waits in the preroll. - * - * - * Elements unblock any waits on devices - * - * - * Chain or get_range functions return %GST_FLOW_FLUSHING. - * - * - * The element pads are deactivated so that streaming becomes impossible and - * all streaming threads are stopped. - * - * - * The sink forgets all negotiated formats - * - * - * Elements remove all sometimes pads - * - * - * @GST_STATE_CHANGE_READY_TO_NULL : state change from READY to NULL. - * - * - * Elements close devices - * - * - * Elements reset any internal state. - * - * - * - * These are the different state changes an element goes through. - * %GST_STATE_NULL ⇒ %GST_STATE_PLAYING is called an upwards state change - * and %GST_STATE_PLAYING ⇒ %GST_STATE_NULL a downwards state change. - */ -typedef enum /*< flags=0 >*/ -{ - GST_STATE_CHANGE_NULL_TO_READY = (GST_STATE_NULL<<3) | GST_STATE_READY, - GST_STATE_CHANGE_READY_TO_PAUSED = (GST_STATE_READY<<3) | GST_STATE_PAUSED, - GST_STATE_CHANGE_PAUSED_TO_PLAYING = (GST_STATE_PAUSED<<3) | GST_STATE_PLAYING, - GST_STATE_CHANGE_PLAYING_TO_PAUSED = (GST_STATE_PLAYING<<3) | GST_STATE_PAUSED, - GST_STATE_CHANGE_PAUSED_TO_READY = (GST_STATE_PAUSED<<3) | GST_STATE_READY, - GST_STATE_CHANGE_READY_TO_NULL = (GST_STATE_READY<<3) | GST_STATE_NULL -} GstStateChange; - -/** - * GstElementFlags: - * @GST_ELEMENT_FLAG_LOCKED_STATE: ignore state changes from parent - * @GST_ELEMENT_FLAG_SINK: the element is a sink - * @GST_ELEMENT_FLAG_SOURCE: the element is a source. - * @GST_ELEMENT_FLAG_PROVIDE_CLOCK: the element can provide a clock - * @GST_ELEMENT_FLAG_REQUIRE_CLOCK: the element requires a clock - * @GST_ELEMENT_FLAG_INDEXABLE: the element can use an index - * @GST_ELEMENT_FLAG_LAST: offset to define more flags - * - * The standard flags that an element may have. - */ -typedef enum -{ - GST_ELEMENT_FLAG_LOCKED_STATE = (GST_OBJECT_FLAG_LAST << 0), - GST_ELEMENT_FLAG_SINK = (GST_OBJECT_FLAG_LAST << 1), - GST_ELEMENT_FLAG_SOURCE = (GST_OBJECT_FLAG_LAST << 2), - GST_ELEMENT_FLAG_PROVIDE_CLOCK = (GST_OBJECT_FLAG_LAST << 3), - GST_ELEMENT_FLAG_REQUIRE_CLOCK = (GST_OBJECT_FLAG_LAST << 4), - GST_ELEMENT_FLAG_INDEXABLE = (GST_OBJECT_FLAG_LAST << 5), - /* padding */ - GST_ELEMENT_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 10) -} GstElementFlags; - -/** - * GST_ELEMENT_IS_LOCKED_STATE: - * @elem: A #GstElement to query - * - * Check if the element is in the locked state and therefore will ignore state - * changes from its parent object. - */ -#define GST_ELEMENT_IS_LOCKED_STATE(elem) (GST_OBJECT_FLAG_IS_SET(elem,GST_ELEMENT_FLAG_LOCKED_STATE)) - -/** - * GST_ELEMENT_NAME: - * @elem: A #GstElement to query - * - * Gets the name of this element. Use only in core as this is not - * ABI-compatible. Others use gst_element_get_name() - */ -#define GST_ELEMENT_NAME(elem) (GST_OBJECT_NAME(elem)) - -/** - * GST_ELEMENT_PARENT: - * @elem: A #GstElement to query - * - * Get the parent object of this element. - */ -#define GST_ELEMENT_PARENT(elem) (GST_ELEMENT_CAST(GST_OBJECT_PARENT(elem))) - -/** - * GST_ELEMENT_BUS: - * @elem: A #GstElement to query - * - * Get the message bus of this element. - */ -#define GST_ELEMENT_BUS(elem) (GST_ELEMENT_CAST(elem)->bus) - -/** - * GST_ELEMENT_CLOCK: - * @elem: A #GstElement to query - * - * Get the clock of this element - */ -#define GST_ELEMENT_CLOCK(elem) (GST_ELEMENT_CAST(elem)->clock) - -/** - * GST_ELEMENT_PADS: - * @elem: A #GstElement to query - * - * Get the pads of this elements. - */ -#define GST_ELEMENT_PADS(elem) (GST_ELEMENT_CAST(elem)->pads) - -/** - * GST_ELEMENT_START_TIME: - * @elem: a #GstElement to return the start time for. - * - * This macro returns the start_time of the @elem. The start_time is the - * running_time of the pipeline when the element went to PAUSED. - */ -#define GST_ELEMENT_START_TIME(elem) (GST_ELEMENT_CAST(elem)->start_time) - -/** - * GST_ELEMENT_ERROR: - * @el: the element that generates the error - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - parentheses) - * @debug: debugging information for the message (format string and args - enclosed in parentheses) - * - * Utility function that elements can use in case they encountered a fatal - * data processing error. The pipeline will post an error message and the - * application will be requested to stop further media processing. - */ -#define GST_ELEMENT_ERROR(el, domain, code, text, debug) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - if (__txt) \ - GST_WARNING_OBJECT (el, "error: %s", __txt); \ - if (__dbg) \ - GST_WARNING_OBJECT (el, "error: %s", __dbg); \ - gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR, \ - GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ - __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/** - * GST_ELEMENT_WARNING: - * @el: the element that generates the warning - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - parentheses) - * @debug: debugging information for the message (format string and args - enclosed in parentheses) - * - * Utility function that elements can use in case they encountered a non-fatal - * data processing problem. The pipeline will post a warning message and the - * application will be informed. - */ -#define GST_ELEMENT_WARNING(el, domain, code, text, debug) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - if (__txt) \ - GST_WARNING_OBJECT (el, "warning: %s", __txt); \ - if (__dbg) \ - GST_WARNING_OBJECT (el, "warning: %s", __dbg); \ - gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_WARNING, \ - GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ - __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/** - * GST_ELEMENT_INFO: - * @el: the element that generates the information - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - parentheses) - * @debug: debugging information for the message (format string and args - enclosed in parentheses) - * - * Utility function that elements can use in case they want to inform - * the application of something noteworthy that is not an error. - * The pipeline will post a info message and the - * application will be informed. - */ -#define GST_ELEMENT_INFO(el, domain, code, text, debug) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - if (__txt) \ - GST_INFO_OBJECT (el, "info: %s", __txt); \ - if (__dbg) \ - GST_INFO_OBJECT (el, "info: %s", __dbg); \ - gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_INFO, \ - GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \ - __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/* the state change mutexes and conds */ -/** - * GST_STATE_GET_LOCK: - * @elem: a #GstElement - * - * Get a reference to the state lock of @elem. - * This lock is used by the core. It is taken while getting or setting - * the state, during state changes, and while finalizing. - */ -#define GST_STATE_GET_LOCK(elem) (&(GST_ELEMENT_CAST(elem)->state_lock)) -/** - * GST_STATE_GET_COND: - * @elem: a #GstElement - * - * Get the conditional used to signal the completion of a state change. - */ -#define GST_STATE_GET_COND(elem) (&GST_ELEMENT_CAST(elem)->state_cond) - -#define GST_STATE_LOCK(elem) g_rec_mutex_lock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_TRYLOCK(elem) g_rec_mutex_trylock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_UNLOCK(elem) g_rec_mutex_unlock(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_UNLOCK_FULL(elem) g_rec_mutex_unlock_full(GST_STATE_GET_LOCK(elem)) -#define GST_STATE_LOCK_FULL(elem,t) g_rec_mutex_lock_full(GST_STATE_GET_LOCK(elem), t) -#define GST_STATE_WAIT(elem) g_cond_wait (GST_STATE_GET_COND (elem), \ - GST_OBJECT_GET_LOCK (elem)) -#define GST_STATE_WAIT_UNTIL(elem, end_time) g_cond_wait_until (GST_STATE_GET_COND (elem), \ - GST_OBJECT_GET_LOCK (elem), end_time) -#define GST_STATE_SIGNAL(elem) g_cond_signal (GST_STATE_GET_COND (elem)); -#define GST_STATE_BROADCAST(elem) g_cond_broadcast (GST_STATE_GET_COND (elem)); - -/** - * GstElement: - * @state_lock: Used to serialize execution of gst_element_set_state() - * @state_cond: Used to signal completion of a state change - * @state_cookie: Used to detect concurrent execution of - * gst_element_set_state() and gst_element_get_state() - * @target_state: the target state of an element as set by the application - * @current_state: the current state of an element - * @next_state: the next state of an element, can be #GST_STATE_VOID_PENDING if - * the element is in the correct state. - * @pending_state: the final state the element should go to, can be - * #GST_STATE_VOID_PENDING if the element is in the correct state - * @last_return: the last return value of an element state change - * @bus: the bus of the element. This bus is provided to the element by the - * parent element or the application. A #GstPipeline has a bus of its own. - * @clock: the clock of the element. This clock is usually provided to the - * element by the toplevel #GstPipeline. - * @base_time: the time of the clock right before the element is set to - * PLAYING. Subtracting @base_time from the current clock time in the PLAYING - * state will yield the running_time against the clock. - * @start_time: the running_time of the last PAUSED state - * @numpads: number of pads of the element, includes both source and sink pads. - * @pads: (element-type Gst.Pad): list of pads - * @numsrcpads: number of source pads of the element. - * @srcpads: (element-type Gst.Pad): list of source pads - * @numsinkpads: number of sink pads of the element. - * @sinkpads: (element-type Gst.Pad): list of sink pads - * @pads_cookie: updated whenever the a pad is added or removed - * - * GStreamer element abstract base class. - */ -struct _GstElement -{ - GstObject object; - - /*< public >*/ /* with LOCK */ - GRecMutex state_lock; - - /* element state */ - GCond state_cond; - guint32 state_cookie; - GstState target_state; - GstState current_state; - GstState next_state; - GstState pending_state; - GstStateChangeReturn last_return; - - GstBus *bus; - - /* allocated clock */ - GstClock *clock; - GstClockTimeDiff base_time; /* NULL/READY: 0 - PAUSED: current time - PLAYING: difference to clock */ - GstClockTime start_time; - - /* element pads, these lists can only be iterated while holding - * the LOCK or checking the cookie after each LOCK. */ - guint16 numpads; - GList *pads; - guint16 numsrcpads; - GList *srcpads; - guint16 numsinkpads; - GList *sinkpads; - guint32 pads_cookie; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstElementClass: - * @parent_class: the parent class structure - * @metadata: metadata for elements of this class - * @elementfactory: the #GstElementFactory that creates these elements - * @padtemplates: a #GList of #GstPadTemplate - * @numpadtemplates: the number of padtemplates - * @pad_templ_cookie: changed whenever the padtemplates change - * @request_new_pad: called when a new pad is requested - * @release_pad: called when a request pad is to be released - * @get_state: get the state of the element - * @set_state: set a new state on the element - * @change_state: called by @set_state to perform an incremental state change - * @set_bus: set a #GstBus on the element - * @provide_clock: gets the #GstClock provided by the element - * @set_clock: set the #GstClock on the element - * @send_event: send a #GstEvent to the element - * @query: perform a #GstQuery on the element - * @state_changed: called immediately after a new state was set. - * @post_message: called when a message is posted on the element. Chain up to - * the parent class' handler to have it posted on the bus. - * - * GStreamer element class. Override the vmethods to implement the element - * functionality. - */ -struct _GstElementClass -{ - GstObjectClass parent_class; - - /*< public >*/ - /* the element metadata */ - gpointer metadata; - - /* factory that the element was created from */ - GstElementFactory *elementfactory; - - /* templates for our pads */ - GList *padtemplates; - gint numpadtemplates; - guint32 pad_templ_cookie; - - /*< private >*/ - /* signal callbacks */ - void (*pad_added) (GstElement *element, GstPad *pad); - void (*pad_removed) (GstElement *element, GstPad *pad); - void (*no_more_pads) (GstElement *element); - - /*< public >*/ - /* virtual methods for subclasses */ - - /* request/release pads */ - GstPad* (*request_new_pad) (GstElement *element, GstPadTemplate *templ, - const gchar* name, const GstCaps *caps); - void (*release_pad) (GstElement *element, GstPad *pad); - - /* state changes */ - GstStateChangeReturn (*get_state) (GstElement * element, GstState * state, - GstState * pending, GstClockTime timeout); - GstStateChangeReturn (*set_state) (GstElement *element, GstState state); - GstStateChangeReturn (*change_state) (GstElement *element, GstStateChange transition); - void (*state_changed) (GstElement *element, GstState oldstate, - GstState newstate, GstState pending); - - /* bus */ - void (*set_bus) (GstElement * element, GstBus * bus); - - /* set/get clocks */ - GstClock* (*provide_clock) (GstElement *element); - gboolean (*set_clock) (GstElement *element, GstClock *clock); - - /* query functions */ - gboolean (*send_event) (GstElement *element, GstEvent *event); - - gboolean (*query) (GstElement *element, GstQuery *query); - - gboolean (*post_message) (GstElement *element, GstMessage *message); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE-1]; -}; - -/* element class pad templates */ -void gst_element_class_add_pad_template (GstElementClass *klass, GstPadTemplate *templ); -GstPadTemplate* gst_element_class_get_pad_template (GstElementClass *element_class, const gchar *name); -GList* gst_element_class_get_pad_template_list (GstElementClass *element_class); - -/* element class meta data */ -void gst_element_class_set_metadata (GstElementClass *klass, - const gchar *longname, - const gchar *classification, - const gchar *description, - const gchar *author); -void gst_element_class_set_static_metadata (GstElementClass *klass, - const gchar *longname, - const gchar *classification, - const gchar *description, - const gchar *author); -void gst_element_class_add_metadata (GstElementClass * klass, - const gchar * key, const gchar * value); -void gst_element_class_add_static_metadata (GstElementClass * klass, - const gchar * key, const gchar * value); -const gchar * gst_element_class_get_metadata (GstElementClass * klass, - const gchar * key); - - -/* element instance */ -GType gst_element_get_type (void); - -/* basic name and parentage stuff from GstObject */ - -/** - * gst_element_get_name: - * @elem: a #GstElement to get the name of @elem. - * - * Returns a copy of the name of @elem. - * Caller should g_free() the return value after usage. - * For a nameless element, this returns NULL, which you can safely g_free() - * as well. - * - * Returns: (transfer full): the name of @elem. g_free() after usage. MT safe. - * - */ -#define gst_element_get_name(elem) gst_object_get_name(GST_OBJECT_CAST(elem)) - -/** - * gst_element_set_name: - * @elem: a #GstElement to set the name of. - * @name: the new name - * - * Sets the name of the element, getting rid of the old name if there was one. - */ -#define gst_element_set_name(elem,name) gst_object_set_name(GST_OBJECT_CAST(elem),name) - -/** - * gst_element_get_parent: - * @elem: a #GstElement to get the parent of. - * - * Get the parent of an element. - * - * Returns: (transfer full): the parent of an element. - */ -#define gst_element_get_parent(elem) gst_object_get_parent(GST_OBJECT_CAST(elem)) - -/** - * gst_element_set_parent: - * @elem: a #GstElement to set the parent of. - * @parent: the new parent #GstObject of the element. - * - * Sets the parent of an element. - */ -#define gst_element_set_parent(elem,parent) gst_object_set_parent(GST_OBJECT_CAST(elem),parent) - -/* clocking */ -GstClock* gst_element_provide_clock (GstElement *element); -GstClock* gst_element_get_clock (GstElement *element); -gboolean gst_element_set_clock (GstElement *element, GstClock *clock); -void gst_element_set_base_time (GstElement *element, GstClockTime time); -GstClockTime gst_element_get_base_time (GstElement *element); -void gst_element_set_start_time (GstElement *element, GstClockTime time); -GstClockTime gst_element_get_start_time (GstElement *element); - -/* bus */ -void gst_element_set_bus (GstElement * element, GstBus * bus); -GstBus * gst_element_get_bus (GstElement * element); - -/* pad management */ -gboolean gst_element_add_pad (GstElement *element, GstPad *pad); -gboolean gst_element_remove_pad (GstElement *element, GstPad *pad); -void gst_element_no_more_pads (GstElement *element); - -GstPad* gst_element_get_static_pad (GstElement *element, const gchar *name); -GstPad* gst_element_get_request_pad (GstElement *element, const gchar *name); -GstPad* gst_element_request_pad (GstElement *element, GstPadTemplate *templ, - const gchar * name, const GstCaps *caps); -void gst_element_release_request_pad (GstElement *element, GstPad *pad); - -GstIterator * gst_element_iterate_pads (GstElement * element); -GstIterator * gst_element_iterate_src_pads (GstElement * element); -GstIterator * gst_element_iterate_sink_pads (GstElement * element); - -/* event/query/format stuff */ -gboolean gst_element_send_event (GstElement *element, GstEvent *event); -gboolean gst_element_seek (GstElement *element, gdouble rate, - GstFormat format, GstSeekFlags flags, - GstSeekType start_type, gint64 start, - GstSeekType stop_type, gint64 stop); -gboolean gst_element_query (GstElement *element, GstQuery *query); - -/* messages */ -gboolean gst_element_post_message (GstElement * element, GstMessage * message); - -/* error handling */ -/* gcc versions < 3.3 warn about NULL being passed as format to printf */ -#if (defined(GST_USING_PRINTF_EXTENSION) || !defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)) -gchar * _gst_element_error_printf (const gchar *format, ...); -#else -gchar * _gst_element_error_printf (const gchar *format, ...) G_GNUC_PRINTF (1, 2); -#endif -void gst_element_message_full (GstElement * element, GstMessageType type, - GQuark domain, gint code, gchar * text, - gchar * debug, const gchar * file, - const gchar * function, gint line); - -/* state management */ -gboolean gst_element_is_locked_state (GstElement *element); -gboolean gst_element_set_locked_state (GstElement *element, gboolean locked_state); -gboolean gst_element_sync_state_with_parent (GstElement *element); - -GstStateChangeReturn gst_element_get_state (GstElement * element, - GstState * state, - GstState * pending, - GstClockTime timeout); -GstStateChangeReturn gst_element_set_state (GstElement *element, GstState state); - -void gst_element_abort_state (GstElement * element); -GstStateChangeReturn gst_element_change_state (GstElement * element, - GstStateChange transition); -GstStateChangeReturn gst_element_continue_state (GstElement * element, - GstStateChangeReturn ret); -void gst_element_lost_state (GstElement * element); - -/* factory management */ -GstElementFactory* gst_element_get_factory (GstElement *element); - -G_END_DECLS - -#endif /* __GST_ELEMENT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementfactory.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementfactory.h deleted file mode 100644 index 337cc4c2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementfactory.h +++ /dev/null @@ -1,222 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000,2004 Wim Taymans - * - * gstelement.h: Header for GstElement - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_ELEMENT_FACTORY_H__ -#define __GST_ELEMENT_FACTORY_H__ - -/** - * GstElementFactory: - * - * The opaque #GstElementFactory data structure. - */ -typedef struct _GstElementFactory GstElementFactory; -typedef struct _GstElementFactoryClass GstElementFactoryClass; - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ELEMENT_FACTORY (gst_element_factory_get_type()) -#define GST_ELEMENT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ELEMENT_FACTORY,\ - GstElementFactory)) -#define GST_ELEMENT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT_FACTORY,\ - GstElementFactoryClass)) -#define GST_IS_ELEMENT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ELEMENT_FACTORY)) -#define GST_IS_ELEMENT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT_FACTORY)) -#define GST_ELEMENT_FACTORY_CAST(obj) ((GstElementFactory *)(obj)) - -GType gst_element_factory_get_type (void); - -GstElementFactory * gst_element_factory_find (const gchar *name); - -GType gst_element_factory_get_element_type (GstElementFactory *factory); - -const gchar * gst_element_factory_get_metadata (GstElementFactory *factory, const gchar *key); -gchar ** gst_element_factory_get_metadata_keys (GstElementFactory *factory); - -guint gst_element_factory_get_num_pad_templates (GstElementFactory *factory); -const GList * gst_element_factory_get_static_pad_templates (GstElementFactory *factory); - -GstURIType gst_element_factory_get_uri_type (GstElementFactory *factory); -const gchar * const * gst_element_factory_get_uri_protocols (GstElementFactory *factory); - -gboolean gst_element_factory_has_interface (GstElementFactory *factory, - const gchar *interfacename); - -GstElement* gst_element_factory_create (GstElementFactory *factory, - const gchar *name) G_GNUC_MALLOC; -GstElement* gst_element_factory_make (const gchar *factoryname, const gchar *name) G_GNUC_MALLOC; - -gboolean gst_element_register (GstPlugin *plugin, const gchar *name, - guint rank, GType type); - -/* Factory list functions */ - -/** - * GstFactoryListType: - * @GST_ELEMENT_FACTORY_TYPE_DECODER: Decoder elements - * @GST_ELEMENT_FACTORY_TYPE_ENCODER: Encoder elements - * @GST_ELEMENT_FACTORY_TYPE_SINK: Sink elements - * @GST_ELEMENT_FACTORY_TYPE_SRC: Source elements - * @GST_ELEMENT_FACTORY_TYPE_MUXER: Muxer elements - * @GST_ELEMENT_FACTORY_TYPE_DEMUXER: Demuxer elements - * @GST_ELEMENT_FACTORY_TYPE_PARSER: Parser elements - * @GST_ELEMENT_FACTORY_TYPE_PAYLOADER: Payloader elements - * @GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER: Depayloader elements - * @GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS: Private, do not use - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO: Elements handling video media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO: Elements handling audio media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE: Elements handling image media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_SUBTITLE: Elements handling subtitle media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_METADATA: Elements handling metadata media types - * - * The type of #GstElementFactory to filter. - * - * All @GstFactoryListType up to @GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS are exclusive. - * - * If one or more of the MEDIA types are specified, then only elements - * matching the specified media types will be selected. - */ - -typedef guint64 GstElementFactoryListType; - -#define GST_ELEMENT_FACTORY_TYPE_DECODER (G_GUINT64_CONSTANT (1) << 0) -#define GST_ELEMENT_FACTORY_TYPE_ENCODER (G_GUINT64_CONSTANT (1) << 1) -#define GST_ELEMENT_FACTORY_TYPE_SINK (G_GUINT64_CONSTANT (1) << 2) -#define GST_ELEMENT_FACTORY_TYPE_SRC (G_GUINT64_CONSTANT (1) << 3) -#define GST_ELEMENT_FACTORY_TYPE_MUXER (G_GUINT64_CONSTANT (1) << 4) -#define GST_ELEMENT_FACTORY_TYPE_DEMUXER (G_GUINT64_CONSTANT (1) << 5) -#define GST_ELEMENT_FACTORY_TYPE_PARSER (G_GUINT64_CONSTANT (1) << 6) -#define GST_ELEMENT_FACTORY_TYPE_PAYLOADER (G_GUINT64_CONSTANT (1) << 7) -#define GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER (G_GUINT64_CONSTANT (1) << 8) -#define GST_ELEMENT_FACTORY_TYPE_FORMATTER (G_GUINT64_CONSTANT (1) << 9) - -#define GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS (G_GUINT64_CONSTANT (1) << 48) - -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO (G_GUINT64_CONSTANT (1) << 49) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO (G_GUINT64_CONSTANT (1) << 50) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE (G_GUINT64_CONSTANT (1) << 51) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_SUBTITLE (G_GUINT64_CONSTANT (1) << 52) -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_METADATA (G_GUINT64_CONSTANT (1) << 53) - -/** - * GST_ELEMENT_FACTORY_TYPE_ANY: - * - * Elements of any of the defined GST_ELEMENT_FACTORY_LIST types - * - * Value: 562949953421311 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_ANY ((G_GUINT64_CONSTANT (1) << 49) - 1) - -/** - * GST_ELEMENT_FACTORY_TYPE_MEDIA_ANY: - * - * Elements matching any of the defined GST_ELEMENT_FACTORY_TYPE_MEDIA types - * - * Note: Do not use this if you wish to not filter against any of the defined - * media types. If you wish to do this, simply don't specify any - * GST_ELEMENT_FACTORY_TYPE_MEDIA flag. - * - * Value: 18446462598732840960 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_MEDIA_ANY (~G_GUINT64_CONSTANT (0) << 48) - -/** - * GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER: - * - * All encoders handling video or image media types - * - * Value: 2814749767106562 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER (GST_ELEMENT_FACTORY_TYPE_ENCODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO | GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE) - -/** - * GST_ELEMENT_FACTORY_TYPE_AUDIO_ENCODER: - * - * All encoders handling audio media types - * - * Value: 1125899906842626 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_AUDIO_ENCODER (GST_ELEMENT_FACTORY_TYPE_ENCODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO) - -/** - * GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS: - * - * All sinks handling audio, video or image media types - * - * Value: 3940649673949188 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS (GST_ELEMENT_FACTORY_TYPE_SINK | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO | GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE) - -/** - * GST_ELEMENT_FACTORY_TYPE_DECODABLE: - * - * All elements used to 'decode' streams (decoders, demuxers, parsers, depayloaders) - * - * Value: 353 - * Type: GstElementFactoryListType - */ -#define GST_ELEMENT_FACTORY_TYPE_DECODABLE \ - (GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_DEMUXER | GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER | GST_ELEMENT_FACTORY_TYPE_PARSER) - -/* Element klass defines */ -#define GST_ELEMENT_FACTORY_KLASS_DECODER "Decoder" -#define GST_ELEMENT_FACTORY_KLASS_ENCODER "Encoder" -#define GST_ELEMENT_FACTORY_KLASS_SINK "Sink" -#define GST_ELEMENT_FACTORY_KLASS_SRC "Source" -#define GST_ELEMENT_FACTORY_KLASS_MUXER "Muxer" -#define GST_ELEMENT_FACTORY_KLASS_DEMUXER "Demuxer" -#define GST_ELEMENT_FACTORY_KLASS_PARSER "Parser" -#define GST_ELEMENT_FACTORY_KLASS_PAYLOADER "Payloader" -#define GST_ELEMENT_FACTORY_KLASS_DEPAYLOADER "Depayloader" -#define GST_ELEMENT_FACTORY_KLASS_FORMATTER "Formatter" - -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_VIDEO "Video" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_AUDIO "Audio" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_IMAGE "Image" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_SUBTITLE "Subtitle" -#define GST_ELEMENT_FACTORY_KLASS_MEDIA_METADATA "Metadata" - -gboolean gst_element_factory_list_is_type (GstElementFactory *factory, - GstElementFactoryListType type); - -GList * gst_element_factory_list_get_elements (GstElementFactoryListType type, - GstRank minrank) G_GNUC_MALLOC; - - -GList * gst_element_factory_list_filter (GList *list, const GstCaps *caps, - GstPadDirection direction, - gboolean subsetonly) G_GNUC_MALLOC; -G_END_DECLS - -#endif /* __GST_ELEMENT_FACTORY_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementmetadata.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementmetadata.h deleted file mode 100644 index 6c331d90..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstelementmetadata.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000,2004 Wim Taymans - * - * gstelementmetadata.h: Metadata for GstElement classes - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ELEMENT_METADATA_H__ -#define __GST_ELEMENT_METADATA_H__ - -G_BEGIN_DECLS - -/** - * GST_ELEMENT_METADATA_LONGNAME: - * - * The long English name of the element. E.g. "File Sink" - */ -#define GST_ELEMENT_METADATA_LONGNAME "long-name" -/** - * GST_ELEMENT_METADATA_KLASS: - * - * String describing the type of element, as an unordered list - * separated with slashes ('/'). See draft-klass.txt of the design docs - * for more details and common types. E.g: "Sink/File" - */ -#define GST_ELEMENT_METADATA_KLASS "klass" - -/** - * GST_ELEMENT_METADATA_DESCRIPTION: - * - * Sentence describing the purpose of the element. - * E.g: "Write stream to a file" - */ -#define GST_ELEMENT_METADATA_DESCRIPTION "description" -/** - * GST_ELEMENT_METADATA_AUTHOR: - * - * Name and contact details of the author(s). Use \n to separate - * multiple author details. - * E.g: "Joe Bloggs <joe.blogs at foo.com>" - */ -#define GST_ELEMENT_METADATA_AUTHOR "author" - -/** - * GST_ELEMENT_METADATA_DOC_URI: - * - * Set uri pointing to user documentation. Applications can use this to show - * help for e.g. effects to users. - */ -#define GST_ELEMENT_METADATA_DOC_URI "doc-uri" -/** - * GST_ELEMENT_METADATA_ICON_NAME: - * - * Elements that bridge to certain other products can include an icon of that - * used product. Application can show the icon in menus/selectors to help - * identifying specific elements. - */ -#define GST_ELEMENT_METADATA_ICON_NAME "icon-name" - -G_END_DECLS - -#endif /* __GST_ELEMENT_METADATA_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstenumtypes.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstenumtypes.h deleted file mode 100644 index c15314f4..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstenumtypes.h +++ /dev/null @@ -1,231 +0,0 @@ - - - -#ifndef __GST_ENUM_TYPES_H__ -#define __GST_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "gstobject.h" */ -GType gst_object_flags_get_type (void); -#define GST_TYPE_OBJECT_FLAGS (gst_object_flags_get_type()) - -/* enumerations from "gstallocator.h" */ -GType gst_allocator_flags_get_type (void); -#define GST_TYPE_ALLOCATOR_FLAGS (gst_allocator_flags_get_type()) - -/* enumerations from "gstbin.h" */ -GType gst_bin_flags_get_type (void); -#define GST_TYPE_BIN_FLAGS (gst_bin_flags_get_type()) - -/* enumerations from "gstbuffer.h" */ -GType gst_buffer_flags_get_type (void); -#define GST_TYPE_BUFFER_FLAGS (gst_buffer_flags_get_type()) -GType gst_buffer_copy_flags_get_type (void); -#define GST_TYPE_BUFFER_COPY_FLAGS (gst_buffer_copy_flags_get_type()) - -/* enumerations from "gstbufferpool.h" */ -GType gst_buffer_pool_acquire_flags_get_type (void); -#define GST_TYPE_BUFFER_POOL_ACQUIRE_FLAGS (gst_buffer_pool_acquire_flags_get_type()) - -/* enumerations from "gstbus.h" */ -GType gst_bus_flags_get_type (void); -#define GST_TYPE_BUS_FLAGS (gst_bus_flags_get_type()) -GType gst_bus_sync_reply_get_type (void); -#define GST_TYPE_BUS_SYNC_REPLY (gst_bus_sync_reply_get_type()) - -/* enumerations from "gstcaps.h" */ -GType gst_caps_flags_get_type (void); -#define GST_TYPE_CAPS_FLAGS (gst_caps_flags_get_type()) -GType gst_caps_intersect_mode_get_type (void); -#define GST_TYPE_CAPS_INTERSECT_MODE (gst_caps_intersect_mode_get_type()) - -/* enumerations from "gstclock.h" */ -GType gst_clock_return_get_type (void); -#define GST_TYPE_CLOCK_RETURN (gst_clock_return_get_type()) -GType gst_clock_entry_type_get_type (void); -#define GST_TYPE_CLOCK_ENTRY_TYPE (gst_clock_entry_type_get_type()) -GType gst_clock_flags_get_type (void); -#define GST_TYPE_CLOCK_FLAGS (gst_clock_flags_get_type()) - -/* enumerations from "gstdebugutils.h" */ -GType gst_debug_graph_details_get_type (void); -#define GST_TYPE_DEBUG_GRAPH_DETAILS (gst_debug_graph_details_get_type()) - -/* enumerations from "gstelement.h" */ -GType gst_state_get_type (void); -#define GST_TYPE_STATE (gst_state_get_type()) -GType gst_state_change_return_get_type (void); -#define GST_TYPE_STATE_CHANGE_RETURN (gst_state_change_return_get_type()) -GType gst_state_change_get_type (void); -#define GST_TYPE_STATE_CHANGE (gst_state_change_get_type()) -GType gst_element_flags_get_type (void); -#define GST_TYPE_ELEMENT_FLAGS (gst_element_flags_get_type()) - -/* enumerations from "gsterror.h" */ -GType gst_core_error_get_type (void); -#define GST_TYPE_CORE_ERROR (gst_core_error_get_type()) -GType gst_library_error_get_type (void); -#define GST_TYPE_LIBRARY_ERROR (gst_library_error_get_type()) -GType gst_resource_error_get_type (void); -#define GST_TYPE_RESOURCE_ERROR (gst_resource_error_get_type()) -GType gst_stream_error_get_type (void); -#define GST_TYPE_STREAM_ERROR (gst_stream_error_get_type()) - -/* enumerations from "gstevent.h" */ -GType gst_event_type_flags_get_type (void); -#define GST_TYPE_EVENT_TYPE_FLAGS (gst_event_type_flags_get_type()) -GType gst_event_type_get_type (void); -#define GST_TYPE_EVENT_TYPE (gst_event_type_get_type()) -GType gst_qos_type_get_type (void); -#define GST_TYPE_QOS_TYPE (gst_qos_type_get_type()) - -/* enumerations from "gstformat.h" */ -GType gst_format_get_type (void); -#define GST_TYPE_FORMAT (gst_format_get_type()) - -/* enumerations from "gstinfo.h" */ -GType gst_debug_level_get_type (void); -#define GST_TYPE_DEBUG_LEVEL (gst_debug_level_get_type()) -GType gst_debug_color_flags_get_type (void); -#define GST_TYPE_DEBUG_COLOR_FLAGS (gst_debug_color_flags_get_type()) - -/* enumerations from "gstiterator.h" */ -GType gst_iterator_result_get_type (void); -#define GST_TYPE_ITERATOR_RESULT (gst_iterator_result_get_type()) -GType gst_iterator_item_get_type (void); -#define GST_TYPE_ITERATOR_ITEM (gst_iterator_item_get_type()) - -/* enumerations from "gstmessage.h" */ -GType gst_message_type_get_type (void); -#define GST_TYPE_MESSAGE_TYPE (gst_message_type_get_type()) -GType gst_structure_change_type_get_type (void); -#define GST_TYPE_STRUCTURE_CHANGE_TYPE (gst_structure_change_type_get_type()) -GType gst_stream_status_type_get_type (void); -#define GST_TYPE_STREAM_STATUS_TYPE (gst_stream_status_type_get_type()) -GType gst_progress_type_get_type (void); -#define GST_TYPE_PROGRESS_TYPE (gst_progress_type_get_type()) - -/* enumerations from "gstmeta.h" */ -GType gst_meta_flags_get_type (void); -#define GST_TYPE_META_FLAGS (gst_meta_flags_get_type()) - -/* enumerations from "gstmemory.h" */ -GType gst_memory_flags_get_type (void); -#define GST_TYPE_MEMORY_FLAGS (gst_memory_flags_get_type()) -GType gst_map_flags_get_type (void); -#define GST_TYPE_MAP_FLAGS (gst_map_flags_get_type()) - -/* enumerations from "gstminiobject.h" */ -GType gst_mini_object_flags_get_type (void); -#define GST_TYPE_MINI_OBJECT_FLAGS (gst_mini_object_flags_get_type()) -GType gst_lock_flags_get_type (void); -#define GST_TYPE_LOCK_FLAGS (gst_lock_flags_get_type()) - -/* enumerations from "gstpad.h" */ -GType gst_pad_direction_get_type (void); -#define GST_TYPE_PAD_DIRECTION (gst_pad_direction_get_type()) -GType gst_pad_mode_get_type (void); -#define GST_TYPE_PAD_MODE (gst_pad_mode_get_type()) -GType gst_pad_link_return_get_type (void); -#define GST_TYPE_PAD_LINK_RETURN (gst_pad_link_return_get_type()) -GType gst_flow_return_get_type (void); -#define GST_TYPE_FLOW_RETURN (gst_flow_return_get_type()) -GType gst_pad_link_check_get_type (void); -#define GST_TYPE_PAD_LINK_CHECK (gst_pad_link_check_get_type()) -GType gst_pad_probe_type_get_type (void); -#define GST_TYPE_PAD_PROBE_TYPE (gst_pad_probe_type_get_type()) -GType gst_pad_probe_return_get_type (void); -#define GST_TYPE_PAD_PROBE_RETURN (gst_pad_probe_return_get_type()) -GType gst_pad_flags_get_type (void); -#define GST_TYPE_PAD_FLAGS (gst_pad_flags_get_type()) - -/* enumerations from "gstpadtemplate.h" */ -GType gst_pad_presence_get_type (void); -#define GST_TYPE_PAD_PRESENCE (gst_pad_presence_get_type()) -GType gst_pad_template_flags_get_type (void); -#define GST_TYPE_PAD_TEMPLATE_FLAGS (gst_pad_template_flags_get_type()) - -/* enumerations from "gstpipeline.h" */ -GType gst_pipeline_flags_get_type (void); -#define GST_TYPE_PIPELINE_FLAGS (gst_pipeline_flags_get_type()) - -/* enumerations from "gstplugin.h" */ -GType gst_plugin_error_get_type (void); -#define GST_TYPE_PLUGIN_ERROR (gst_plugin_error_get_type()) -GType gst_plugin_flags_get_type (void); -#define GST_TYPE_PLUGIN_FLAGS (gst_plugin_flags_get_type()) -GType gst_plugin_dependency_flags_get_type (void); -#define GST_TYPE_PLUGIN_DEPENDENCY_FLAGS (gst_plugin_dependency_flags_get_type()) - -/* enumerations from "gstpluginfeature.h" */ -GType gst_rank_get_type (void); -#define GST_TYPE_RANK (gst_rank_get_type()) - -/* enumerations from "gstquery.h" */ -GType gst_query_type_flags_get_type (void); -#define GST_TYPE_QUERY_TYPE_FLAGS (gst_query_type_flags_get_type()) -GType gst_query_type_get_type (void); -#define GST_TYPE_QUERY_TYPE (gst_query_type_get_type()) -GType gst_buffering_mode_get_type (void); -#define GST_TYPE_BUFFERING_MODE (gst_buffering_mode_get_type()) -GType gst_scheduling_flags_get_type (void); -#define GST_TYPE_SCHEDULING_FLAGS (gst_scheduling_flags_get_type()) - -/* enumerations from "gstsegment.h" */ -GType gst_seek_type_get_type (void); -#define GST_TYPE_SEEK_TYPE (gst_seek_type_get_type()) -GType gst_seek_flags_get_type (void); -#define GST_TYPE_SEEK_FLAGS (gst_seek_flags_get_type()) -GType gst_segment_flags_get_type (void); -#define GST_TYPE_SEGMENT_FLAGS (gst_segment_flags_get_type()) - -/* enumerations from "gstsystemclock.h" */ -GType gst_clock_type_get_type (void); -#define GST_TYPE_CLOCK_TYPE (gst_clock_type_get_type()) - -/* enumerations from "gsttaglist.h" */ -GType gst_tag_merge_mode_get_type (void); -#define GST_TYPE_TAG_MERGE_MODE (gst_tag_merge_mode_get_type()) -GType gst_tag_flag_get_type (void); -#define GST_TYPE_TAG_FLAG (gst_tag_flag_get_type()) -GType gst_tag_scope_get_type (void); -#define GST_TYPE_TAG_SCOPE (gst_tag_scope_get_type()) - -/* enumerations from "gsttask.h" */ -GType gst_task_state_get_type (void); -#define GST_TYPE_TASK_STATE (gst_task_state_get_type()) - -/* enumerations from "gsttoc.h" */ -GType gst_toc_scope_get_type (void); -#define GST_TYPE_TOC_SCOPE (gst_toc_scope_get_type()) -GType gst_toc_entry_type_get_type (void); -#define GST_TYPE_TOC_ENTRY_TYPE (gst_toc_entry_type_get_type()) - -/* enumerations from "gsttypefind.h" */ -GType gst_type_find_probability_get_type (void); -#define GST_TYPE_TYPE_FIND_PROBABILITY (gst_type_find_probability_get_type()) - -/* enumerations from "gsturi.h" */ -GType gst_uri_error_get_type (void); -#define GST_TYPE_URI_ERROR (gst_uri_error_get_type()) -GType gst_uri_type_get_type (void); -#define GST_TYPE_URI_TYPE (gst_uri_type_get_type()) - -/* enumerations from "gstutils.h" */ -GType gst_search_mode_get_type (void); -#define GST_TYPE_SEARCH_MODE (gst_search_mode_get_type()) - -/* enumerations from "gstparse.h" */ -GType gst_parse_error_get_type (void); -#define GST_TYPE_PARSE_ERROR (gst_parse_error_get_type()) -GType gst_parse_flags_get_type (void); -#define GST_TYPE_PARSE_FLAGS (gst_parse_flags_get_type()) -G_END_DECLS - -#endif /* __GST_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsterror.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsterror.h deleted file mode 100644 index a066be92..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsterror.h +++ /dev/null @@ -1,248 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Thomas Vander Stichele - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ERROR_H__ -#define __GST_ERROR_H__ - -#include -#include -#include - -G_BEGIN_DECLS -/* - * we define FIXME error domains: - * GST_CORE_ERROR - * GST_LIBRARY_ERROR - * GST_RESOURCE_ERROR - * GST_STREAM_ERROR - * - * Check GError API docs for rationale for naming. - */ -/** - * GstCoreError: - * @GST_CORE_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_CORE_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_CORE_ERROR_NOT_IMPLEMENTED: use this when you do not want to implement - * this functionality yet. - * @GST_CORE_ERROR_STATE_CHANGE: used for state change errors. - * @GST_CORE_ERROR_PAD: used for pad-related errors. - * @GST_CORE_ERROR_THREAD: used for thread-related errors. - * @GST_CORE_ERROR_NEGOTIATION: used for negotiation-related errors. - * @GST_CORE_ERROR_EVENT: used for event-related errors. - * @GST_CORE_ERROR_SEEK: used for seek-related errors. - * @GST_CORE_ERROR_CAPS: used for caps-related errors. - * @GST_CORE_ERROR_TAG: used for negotiation-related errors. - * @GST_CORE_ERROR_MISSING_PLUGIN: used if a plugin is missing. - * @GST_CORE_ERROR_CLOCK: used for clock related errors. - * @GST_CORE_ERROR_DISABLED: used if functionality has been disabled at - * compile time. - * @GST_CORE_ERROR_NUM_ERRORS: the number of core error types. - * - * Core errors are errors inside the core GStreamer library. - */ -/* FIXME: should we divide in numerical blocks so we can easily add - for example PAD errors later ? */ -typedef enum -{ - GST_CORE_ERROR_FAILED = 1, - GST_CORE_ERROR_TOO_LAZY, - GST_CORE_ERROR_NOT_IMPLEMENTED, - GST_CORE_ERROR_STATE_CHANGE, - GST_CORE_ERROR_PAD, - GST_CORE_ERROR_THREAD, - GST_CORE_ERROR_NEGOTIATION, - GST_CORE_ERROR_EVENT, - GST_CORE_ERROR_SEEK, - GST_CORE_ERROR_CAPS, - GST_CORE_ERROR_TAG, - GST_CORE_ERROR_MISSING_PLUGIN, - GST_CORE_ERROR_CLOCK, - GST_CORE_ERROR_DISABLED, - GST_CORE_ERROR_NUM_ERRORS -} GstCoreError; - -/** - * GstLibraryError: - * @GST_LIBRARY_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_LIBRARY_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_LIBRARY_ERROR_INIT: used when the library could not be opened. - * @GST_LIBRARY_ERROR_SHUTDOWN: used when the library could not be closed. - * @GST_LIBRARY_ERROR_SETTINGS: used when the library doesn't accept settings. - * @GST_LIBRARY_ERROR_ENCODE: used when the library generated an encoding error. - * @GST_LIBRARY_ERROR_NUM_ERRORS: the number of library error types. - * - * Library errors are for errors from the library being used by elements - * (initializing, finalizing, settings, ...) - */ -typedef enum -{ - GST_LIBRARY_ERROR_FAILED = 1, - GST_LIBRARY_ERROR_TOO_LAZY, - GST_LIBRARY_ERROR_INIT, - GST_LIBRARY_ERROR_SHUTDOWN, - GST_LIBRARY_ERROR_SETTINGS, - GST_LIBRARY_ERROR_ENCODE, - GST_LIBRARY_ERROR_NUM_ERRORS -} GstLibraryError; - -/** - * GstResourceError: - * @GST_RESOURCE_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_RESOURCE_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_RESOURCE_ERROR_NOT_FOUND: used when the resource could not be found. - * @GST_RESOURCE_ERROR_BUSY: used when resource is busy. - * @GST_RESOURCE_ERROR_OPEN_READ: used when resource fails to open for reading. - * @GST_RESOURCE_ERROR_OPEN_WRITE: used when resource fails to open for writing. - * @GST_RESOURCE_ERROR_OPEN_READ_WRITE: used when resource cannot be opened for - * both reading and writing, or either (but unspecified which). - * @GST_RESOURCE_ERROR_CLOSE: used when the resource can't be closed. - * @GST_RESOURCE_ERROR_READ: used when the resource can't be read from. - * @GST_RESOURCE_ERROR_WRITE: used when the resource can't be written to. - * @GST_RESOURCE_ERROR_SEEK: used when a seek on the resource fails. - * @GST_RESOURCE_ERROR_SYNC: used when a synchronize on the resource fails. - * @GST_RESOURCE_ERROR_SETTINGS: used when settings can't be manipulated on. - * @GST_RESOURCE_ERROR_NO_SPACE_LEFT: used when the resource has no space left. - * @GST_RESOURCE_ERROR_NUM_ERRORS: the number of resource error types. - * - * Resource errors are for any resource used by an element: - * memory, files, network connections, process space, ... - * They're typically used by source and sink elements. - */ -typedef enum -{ - GST_RESOURCE_ERROR_FAILED = 1, - GST_RESOURCE_ERROR_TOO_LAZY, - GST_RESOURCE_ERROR_NOT_FOUND, - GST_RESOURCE_ERROR_BUSY, - GST_RESOURCE_ERROR_OPEN_READ, - GST_RESOURCE_ERROR_OPEN_WRITE, - GST_RESOURCE_ERROR_OPEN_READ_WRITE, - GST_RESOURCE_ERROR_CLOSE, - GST_RESOURCE_ERROR_READ, - GST_RESOURCE_ERROR_WRITE, - GST_RESOURCE_ERROR_SEEK, - GST_RESOURCE_ERROR_SYNC, - GST_RESOURCE_ERROR_SETTINGS, - GST_RESOURCE_ERROR_NO_SPACE_LEFT, - GST_RESOURCE_ERROR_NUM_ERRORS -} GstResourceError; - -/** - * GstStreamError: - * @GST_STREAM_ERROR_FAILED: a general error which doesn't fit in any other - * category. Make sure you add a custom message to the error call. - * @GST_STREAM_ERROR_TOO_LAZY: do not use this except as a placeholder for - * deciding where to go while developing code. - * @GST_STREAM_ERROR_NOT_IMPLEMENTED: use this when you do not want to implement - * this functionality yet. - * @GST_STREAM_ERROR_TYPE_NOT_FOUND: used when the element doesn't know the - * stream's type. - * @GST_STREAM_ERROR_WRONG_TYPE: used when the element doesn't handle this type - * of stream. - * @GST_STREAM_ERROR_CODEC_NOT_FOUND: used when there's no codec to handle the - * stream's type. - * @GST_STREAM_ERROR_DECODE: used when decoding fails. - * @GST_STREAM_ERROR_ENCODE: used when encoding fails. - * @GST_STREAM_ERROR_DEMUX: used when demuxing fails. - * @GST_STREAM_ERROR_MUX: used when muxing fails. - * @GST_STREAM_ERROR_FORMAT: used when the stream is of the wrong format - * (for example, wrong caps). - * @GST_STREAM_ERROR_DECRYPT: used when the stream is encrypted and can't be - * decrypted because this is not supported by the element. - * @GST_STREAM_ERROR_DECRYPT_NOKEY: used when the stream is encrypted and - * can't be decrypted because no suitable key is available. - * @GST_STREAM_ERROR_NUM_ERRORS: the number of stream error types. - * - * Stream errors are for anything related to the stream being processed: - * format errors, media type errors, ... - * They're typically used by decoders, demuxers, converters, ... - */ -typedef enum -{ - GST_STREAM_ERROR_FAILED = 1, - GST_STREAM_ERROR_TOO_LAZY, - GST_STREAM_ERROR_NOT_IMPLEMENTED, - GST_STREAM_ERROR_TYPE_NOT_FOUND, - GST_STREAM_ERROR_WRONG_TYPE, - GST_STREAM_ERROR_CODEC_NOT_FOUND, - GST_STREAM_ERROR_DECODE, - GST_STREAM_ERROR_ENCODE, - GST_STREAM_ERROR_DEMUX, - GST_STREAM_ERROR_MUX, - GST_STREAM_ERROR_FORMAT, - GST_STREAM_ERROR_DECRYPT, - GST_STREAM_ERROR_DECRYPT_NOKEY, - GST_STREAM_ERROR_NUM_ERRORS -} GstStreamError; - -/** - * GST_LIBRARY_ERROR: - * - * Error domain for library loading. Errors in this domain will - * be from the #GstLibraryError enumeration. - * See #GError for information on error domains. - */ -#define GST_LIBRARY_ERROR gst_library_error_quark () -/** - * GST_RESOURCE_ERROR: - * - * Error domain for resource handling. Errors in this domain will - * be from the #GstResourceError enumeration. - * See #GError for information on error domains. - */ -#define GST_RESOURCE_ERROR gst_resource_error_quark () -/** - * GST_CORE_ERROR: - * - * Error domain for core system. Errors in this domain will - * be from the #GstCoreError enumeration. - * See #GError for information on error domains. - */ -#define GST_CORE_ERROR gst_core_error_quark () -/** - * GST_STREAM_ERROR: - * - * Error domain for media stream processing. Errors in this domain will - * be from the #GstStreamError enumeration. - * See #GError for information on error domains. - */ -#define GST_STREAM_ERROR gst_stream_error_quark () - -/** - * GST_ERROR_SYSTEM: - * - * Builds a string using errno describing the previously failed system - * call. To be used as the debug argument in #GST_ELEMENT_ERROR. - */ -#define GST_ERROR_SYSTEM ("system error: %s", g_strerror (errno)) - -gchar *gst_error_get_message (GQuark domain, gint code); -GQuark gst_stream_error_quark (void); -GQuark gst_core_error_quark (void); -GQuark gst_resource_error_quark (void); -GQuark gst_library_error_quark (void); - -G_END_DECLS -#endif /* __GST_ERROR_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstevent.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstevent.h deleted file mode 100644 index 7907a69d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstevent.h +++ /dev/null @@ -1,550 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstevent.h: Header for GstEvent subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_EVENT_H__ -#define __GST_EVENT_H__ - -typedef struct _GstEvent GstEvent; - -/** - * GstEventTypeFlags: - * @GST_EVENT_TYPE_UPSTREAM: Set if the event can travel upstream. - * @GST_EVENT_TYPE_DOWNSTREAM: Set if the event can travel downstream. - * @GST_EVENT_TYPE_SERIALIZED: Set if the event should be serialized with data - * flow. - * @GST_EVENT_TYPE_STICKY: Set if the event is sticky on the pads. - * @GST_EVENT_TYPE_STICKY_MULTI: Multiple sticky events can be on a pad, each - * identified by the event name. - * - * #GstEventTypeFlags indicate the aspects of the different #GstEventType - * values. You can get the type flags of a #GstEventType with the - * gst_event_type_get_flags() function. - */ -typedef enum { - GST_EVENT_TYPE_UPSTREAM = 1 << 0, - GST_EVENT_TYPE_DOWNSTREAM = 1 << 1, - GST_EVENT_TYPE_SERIALIZED = 1 << 2, - GST_EVENT_TYPE_STICKY = 1 << 3, - GST_EVENT_TYPE_STICKY_MULTI = 1 << 4 -} GstEventTypeFlags; - -/** - * GST_EVENT_TYPE_BOTH: - * - * The same thing as #GST_EVENT_TYPE_UPSTREAM | #GST_EVENT_TYPE_DOWNSTREAM. - */ -#define GST_EVENT_TYPE_BOTH \ - (GST_EVENT_TYPE_UPSTREAM | GST_EVENT_TYPE_DOWNSTREAM) - -#define GST_EVENT_NUM_SHIFT (8) - -/** - * GST_EVENT_MAKE_TYPE: - * @num: the event number to create - * @flags: the event flags - * - * when making custom event types, use this macro with the num and - * the given flags - */ -#define GST_EVENT_MAKE_TYPE(num,flags) \ - (((num) << GST_EVENT_NUM_SHIFT) | (flags)) - -#define FLAG(name) GST_EVENT_TYPE_##name - -/** - * GstEventType: - * @GST_EVENT_UNKNOWN: unknown event. - * @GST_EVENT_FLUSH_START: Start a flush operation. This event clears all data - * from the pipeline and unblock all streaming threads. - * @GST_EVENT_FLUSH_STOP: Stop a flush operation. This event resets the - * running-time of the pipeline. - * @GST_EVENT_STREAM_START: Event to mark the start of a new stream. Sent before any - * other serialized event and only sent at the start of a new stream, - * not after flushing seeks. - * @GST_EVENT_CAPS: #GstCaps event. Notify the pad of a new media type. - * @GST_EVENT_SEGMENT: A new media segment follows in the dataflow. The - * segment events contains information for clipping buffers and - * converting buffer timestamps to running-time and - * stream-time. - * @GST_EVENT_TAG: A new set of metadata tags has been found in the stream. - * @GST_EVENT_BUFFERSIZE: Notification of buffering requirements. Currently not - * used yet. - * @GST_EVENT_SINK_MESSAGE: An event that sinks turn into a message. Used to - * send messages that should be emitted in sync with - * rendering. - * @GST_EVENT_EOS: End-Of-Stream. No more data is to be expected to follow - * without a SEGMENT event. - * @GST_EVENT_SEGMENT_DONE: Marks the end of a segment playback. - * @GST_EVENT_GAP: Marks a gap in the datastream. - * @GST_EVENT_TOC: An event which indicates that a new table of contents (TOC) - * was found or updated. - * @GST_EVENT_QOS: A quality message. Used to indicate to upstream elements - * that the downstream elements should adjust their processing - * rate. - * @GST_EVENT_SEEK: A request for a new playback position and rate. - * @GST_EVENT_NAVIGATION: Navigation events are usually used for communicating - * user requests, such as mouse or keyboard movements, - * to upstream elements. - * @GST_EVENT_LATENCY: Notification of new latency adjustment. Sinks will use - * the latency information to adjust their synchronisation. - * @GST_EVENT_STEP: A request for stepping through the media. Sinks will usually - * execute the step operation. - * @GST_EVENT_RECONFIGURE: A request for upstream renegotiating caps and reconfiguring. - * @GST_EVENT_TOC_SELECT: A request for a new playback position based on TOC - * entry's UID. - * @GST_EVENT_CUSTOM_UPSTREAM: Upstream custom event - * @GST_EVENT_CUSTOM_DOWNSTREAM: Downstream custom event that travels in the - * data flow. - * @GST_EVENT_CUSTOM_DOWNSTREAM_OOB: Custom out-of-band downstream event. - * @GST_EVENT_CUSTOM_DOWNSTREAM_STICKY: Custom sticky downstream event. - * @GST_EVENT_CUSTOM_BOTH: Custom upstream or downstream event. - * In-band when travelling downstream. - * @GST_EVENT_CUSTOM_BOTH_OOB: Custom upstream or downstream out-of-band event. - * - * #GstEventType lists the standard event types that can be sent in a pipeline. - * - * The custom event types can be used for private messages between elements - * that can't be expressed using normal - * GStreamer buffer passing semantics. Custom events carry an arbitrary - * #GstStructure. - * Specific custom events are distinguished by the name of the structure. - */ -/* NOTE: keep in sync with quark registration in gstevent.c */ -typedef enum { - GST_EVENT_UNKNOWN = GST_EVENT_MAKE_TYPE (0, 0), - - /* bidirectional events */ - GST_EVENT_FLUSH_START = GST_EVENT_MAKE_TYPE (10, FLAG(BOTH)), - GST_EVENT_FLUSH_STOP = GST_EVENT_MAKE_TYPE (20, FLAG(BOTH) | FLAG(SERIALIZED)), - - /* downstream serialized events */ - GST_EVENT_STREAM_START = GST_EVENT_MAKE_TYPE (40, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_CAPS = GST_EVENT_MAKE_TYPE (50, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_SEGMENT = GST_EVENT_MAKE_TYPE (70, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TAG = GST_EVENT_MAKE_TYPE (80, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (90, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (100, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - GST_EVENT_EOS = GST_EVENT_MAKE_TYPE (110, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - - /* non-sticky downstream serialized */ - GST_EVENT_SEGMENT_DONE = GST_EVENT_MAKE_TYPE (150, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_EVENT_GAP = GST_EVENT_MAKE_TYPE (160, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - - /* upstream events */ - GST_EVENT_QOS = GST_EVENT_MAKE_TYPE (190, FLAG(UPSTREAM)), - GST_EVENT_SEEK = GST_EVENT_MAKE_TYPE (200, FLAG(UPSTREAM)), - GST_EVENT_NAVIGATION = GST_EVENT_MAKE_TYPE (210, FLAG(UPSTREAM)), - GST_EVENT_LATENCY = GST_EVENT_MAKE_TYPE (220, FLAG(UPSTREAM)), - GST_EVENT_STEP = GST_EVENT_MAKE_TYPE (230, FLAG(UPSTREAM)), - GST_EVENT_RECONFIGURE = GST_EVENT_MAKE_TYPE (240, FLAG(UPSTREAM)), - GST_EVENT_TOC_SELECT = GST_EVENT_MAKE_TYPE (250, FLAG(UPSTREAM)), - - /* custom events start here */ - GST_EVENT_CUSTOM_UPSTREAM = GST_EVENT_MAKE_TYPE (270, FLAG(UPSTREAM)), - GST_EVENT_CUSTOM_DOWNSTREAM = GST_EVENT_MAKE_TYPE (280, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_EVENT_CUSTOM_DOWNSTREAM_OOB = GST_EVENT_MAKE_TYPE (290, FLAG(DOWNSTREAM)), - GST_EVENT_CUSTOM_DOWNSTREAM_STICKY = GST_EVENT_MAKE_TYPE (300, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), - GST_EVENT_CUSTOM_BOTH = GST_EVENT_MAKE_TYPE (310, FLAG(BOTH) | FLAG(SERIALIZED)), - GST_EVENT_CUSTOM_BOTH_OOB = GST_EVENT_MAKE_TYPE (320, FLAG(BOTH)) -} GstEventType; -#undef FLAG - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_event_type; - -#define GST_TYPE_EVENT (_gst_event_type) -#define GST_IS_EVENT(obj) (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_EVENT)) -#define GST_EVENT_CAST(obj) ((GstEvent *)(obj)) -#define GST_EVENT(obj) (GST_EVENT_CAST(obj)) - -/** - * GST_EVENT_TYPE: - * @event: the event to query - * - * Get the #GstEventType of the event. - */ -#define GST_EVENT_TYPE(event) (GST_EVENT_CAST(event)->type) - -/** - * GST_EVENT_TYPE_NAME: - * @event: the event to query - * - * Get a constant string representation of the #GstEventType of the event. - */ -#define GST_EVENT_TYPE_NAME(event) (gst_event_type_get_name(GST_EVENT_TYPE(event))) - -/** - * GST_EVENT_TIMESTAMP: - * @event: the event to query - * - * Get the #GstClockTime timestamp of the event. This is the time when the event - * was created. - */ -#define GST_EVENT_TIMESTAMP(event) (GST_EVENT_CAST(event)->timestamp) - -/** - * GST_EVENT_SEQNUM: - * @event: the event to query - * - * The sequence number of @event. - */ -#define GST_EVENT_SEQNUM(event) (GST_EVENT_CAST(event)->seqnum) - -/** - * GST_EVENT_IS_UPSTREAM: - * @ev: the event to query - * - * Check if an event can travel upstream. - */ -#define GST_EVENT_IS_UPSTREAM(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_UPSTREAM) -/** - * GST_EVENT_IS_DOWNSTREAM: - * @ev: the event to query - * - * Check if an event can travel downstream. - */ -#define GST_EVENT_IS_DOWNSTREAM(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_DOWNSTREAM) -/** - * GST_EVENT_IS_SERIALIZED: - * @ev: the event to query - * - * Check if an event is serialized with the data stream. - */ -#define GST_EVENT_IS_SERIALIZED(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_SERIALIZED) -/** - * GST_EVENT_IS_STICKY: - * @ev: the event to query - * - * Check if an event is sticky on the pads. - */ -#define GST_EVENT_IS_STICKY(ev) !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_STICKY) - -/** - * gst_event_is_writable: - * @ev: a #GstEvent - * - * Tests if you can safely write data into a event's structure or validly - * modify the seqnum and timestamp field. - */ -#define gst_event_is_writable(ev) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (ev)) -/** - * gst_event_make_writable: - * @ev: (transfer full): a #GstEvent - * - * Makes a writable event from the given event. If the source event is - * already writable, this will simply return the same event. A copy will - * otherwise be made using gst_event_copy(). - * - * Returns: (transfer full): a writable event which may or may not be the - * same as @ev - */ -#define gst_event_make_writable(ev) GST_EVENT_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (ev))) -/** - * gst_event_replace: - * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent - * to be replaced. - * @new_event: (allow-none) (transfer none): pointer to a #GstEvent that will - * replace the event pointed to by @old_event. - * - * Modifies a pointer to a #GstEvent to point to a different #GstEvent. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * event is unreffed, the new one is reffed). - * - * Either @new_event or the #GstEvent pointed to by @old_event may be NULL. - * - * Returns: TRUE if @new_event was different from @old_event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_event_replace (GstEvent **old_event, GstEvent *new_event); -#endif - -static inline gboolean -gst_event_replace (GstEvent **old_event, GstEvent *new_event) -{ - return gst_mini_object_replace ((GstMiniObject **) old_event, (GstMiniObject *) new_event); -} - -/** - * gst_event_steal: - * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent - * to be stolen. - * - * Atomically replace the #GstEvent pointed to by @old_event with NULL and - * return the original event. - * - * Returns: the #GstEvent that was in @old_event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstEvent * gst_event_steal (GstEvent **old_event); -#endif - -static inline GstEvent * -gst_event_steal (GstEvent **old_event) -{ - return GST_EVENT_CAST (gst_mini_object_steal ((GstMiniObject **) old_event)); -} - -/** - * gst_event_take: - * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent - * to be stolen. - * @new_event: (allow-none) (transfer full): pointer to a #GstEvent that will - * replace the event pointed to by @old_event. - * - * Modifies a pointer to a #GstEvent to point to a different #GstEvent. This - * function is similar to gst_event_replace() except that it takes ownership of - * @new_event. - * - * Either @new_event or the #GstEvent pointed to by @old_event may be NULL. - * - * Returns: TRUE if @new_event was different from @old_event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_event_take (GstEvent **old_event, GstEvent *new_event); -#endif - -static inline gboolean -gst_event_take (GstEvent **old_event, GstEvent *new_event) -{ - return gst_mini_object_take ((GstMiniObject **) old_event, (GstMiniObject *) new_event); -} - -/** - * GstQOSType: - * @GST_QOS_TYPE_OVERFLOW: The QoS event type that is produced when downstream - * elements are producing data too quickly and the element can't keep up - * processing the data. Upstream should reduce their processing rate. This - * type is also used when buffers arrive early or in time. - * @GST_QOS_TYPE_UNDERFLOW: The QoS event type that is produced when downstream - * elements are producing data too slowly and need to speed up their processing - * rate. - * @GST_QOS_TYPE_THROTTLE: The QoS event type that is produced when the - * application enabled throttling to limit the datarate. - * - * The different types of QoS events that can be given to the - * gst_event_new_qos() method. - */ -typedef enum { - GST_QOS_TYPE_OVERFLOW = 0, - GST_QOS_TYPE_UNDERFLOW = 1, - GST_QOS_TYPE_THROTTLE = 2 -} GstQOSType; - -/** - * GstEvent: - * @mini_object: the parent structure - * @type: the #GstEventType of the event - * @timestamp: the timestamp of the event - * @seqnum: the sequence number of the event - * - * A #GstEvent. - */ -struct _GstEvent { - GstMiniObject mini_object; - - /*< public >*/ /* with COW */ - GstEventType type; - guint64 timestamp; - guint32 seqnum; -}; - -const gchar* gst_event_type_get_name (GstEventType type); -GQuark gst_event_type_to_quark (GstEventType type); -GstEventTypeFlags - gst_event_type_get_flags (GstEventType type); - - -/* refcounting */ -/** - * gst_event_ref: - * @event: The event to refcount - * - * Increase the refcount of this event. - * - * Returns: (transfer full): @event (for convenience when doing assignments) - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstEvent * gst_event_ref (GstEvent * event); -#endif - -static inline GstEvent * -gst_event_ref (GstEvent * event) -{ - return (GstEvent *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (event)); -} - -/** - * gst_event_unref: - * @event: (transfer full): the event to refcount - * - * Decrease the refcount of an event, freeing it if the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_event_unref (GstEvent * event); -#endif - -static inline void -gst_event_unref (GstEvent * event) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (event)); -} - -/* copy event */ -/** - * gst_event_copy: - * @event: The event to copy - * - * Copy the event using the event specific copy function. - * - * Returns: (transfer full): the new event - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstEvent * gst_event_copy (const GstEvent * event); -#endif - -static inline GstEvent * -gst_event_copy (const GstEvent * event) -{ - return GST_EVENT_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (event))); -} - -GType gst_event_get_type (void); - -/* custom event */ -GstEvent* gst_event_new_custom (GstEventType type, GstStructure *structure) G_GNUC_MALLOC; - -const GstStructure * - gst_event_get_structure (GstEvent *event); -GstStructure * gst_event_writable_structure (GstEvent *event); - -gboolean gst_event_has_name (GstEvent *event, const gchar *name); - -/* identifiers for events and messages */ -guint32 gst_event_get_seqnum (GstEvent *event); -void gst_event_set_seqnum (GstEvent *event, guint32 seqnum); - -/* Stream start event */ -GstEvent * gst_event_new_stream_start (const gchar *stream_id) G_GNUC_MALLOC; -void gst_event_parse_stream_start (GstEvent *event, const gchar **stream_id); - -/* flush events */ -GstEvent * gst_event_new_flush_start (void) G_GNUC_MALLOC; - -GstEvent * gst_event_new_flush_stop (gboolean reset_time) G_GNUC_MALLOC; -void gst_event_parse_flush_stop (GstEvent *event, gboolean *reset_time); - -/* EOS event */ -GstEvent * gst_event_new_eos (void) G_GNUC_MALLOC; - -/* GAP event */ -GstEvent * gst_event_new_gap (GstClockTime timestamp, - GstClockTime duration) G_GNUC_MALLOC; - -void gst_event_parse_gap (GstEvent * event, - GstClockTime * timestamp, - GstClockTime * duration); - -/* Caps events */ -GstEvent * gst_event_new_caps (GstCaps *caps) G_GNUC_MALLOC; -void gst_event_parse_caps (GstEvent *event, GstCaps **caps); - -/* segment event */ -GstEvent* gst_event_new_segment (const GstSegment *segment) G_GNUC_MALLOC; -void gst_event_parse_segment (GstEvent *event, const GstSegment **segment); -void gst_event_copy_segment (GstEvent *event, GstSegment *segment); - -/* tag event */ -GstEvent* gst_event_new_tag (GstTagList *taglist) G_GNUC_MALLOC; -void gst_event_parse_tag (GstEvent *event, GstTagList **taglist); - -/* TOC event */ -GstEvent* gst_event_new_toc (GstToc *toc, gboolean updated); -void gst_event_parse_toc (GstEvent *event, GstToc **toc, gboolean *updated); - - -/* buffer */ -GstEvent * gst_event_new_buffer_size (GstFormat format, gint64 minsize, gint64 maxsize, - gboolean async) G_GNUC_MALLOC; -void gst_event_parse_buffer_size (GstEvent *event, GstFormat *format, gint64 *minsize, - gint64 *maxsize, gboolean *async); - -/* sink message */ -GstEvent* gst_event_new_sink_message (const gchar *name, GstMessage *msg) G_GNUC_MALLOC; -void gst_event_parse_sink_message (GstEvent *event, GstMessage **msg); - -/* QOS events */ -GstEvent* gst_event_new_qos (GstQOSType type, gdouble proportion, - GstClockTimeDiff diff, GstClockTime timestamp) G_GNUC_MALLOC; -void gst_event_parse_qos (GstEvent *event, GstQOSType *type, - gdouble *proportion, GstClockTimeDiff *diff, - GstClockTime *timestamp); -/* seek event */ -GstEvent* gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags, - GstSeekType start_type, gint64 start, - GstSeekType stop_type, gint64 stop) G_GNUC_MALLOC; -void gst_event_parse_seek (GstEvent *event, gdouble *rate, GstFormat *format, - GstSeekFlags *flags, - GstSeekType *start_type, gint64 *start, - GstSeekType *stop_type, gint64 *stop); - -/* navigation event */ -GstEvent* gst_event_new_navigation (GstStructure *structure) G_GNUC_MALLOC; - -/* latency event */ -GstEvent* gst_event_new_latency (GstClockTime latency) G_GNUC_MALLOC; -void gst_event_parse_latency (GstEvent *event, GstClockTime *latency); - -/* step event */ -GstEvent* gst_event_new_step (GstFormat format, guint64 amount, gdouble rate, - gboolean flush, gboolean intermediate) G_GNUC_MALLOC; -void gst_event_parse_step (GstEvent *event, GstFormat *format, guint64 *amount, - gdouble *rate, gboolean *flush, gboolean *intermediate); - -/* renegotiate event */ -GstEvent* gst_event_new_reconfigure (void) G_GNUC_MALLOC; - -/* TOC select event */ -GstEvent* gst_event_new_toc_select (const gchar *uid) G_GNUC_MALLOC; -void gst_event_parse_toc_select (GstEvent *event, gchar **uid); - -/* segment-done event */ -GstEvent* gst_event_new_segment_done (GstFormat format, gint64 position) G_GNUC_MALLOC; -void gst_event_parse_segment_done (GstEvent *event, GstFormat *format, gint64 *position); - -G_END_DECLS - -#endif /* __GST_EVENT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstformat.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstformat.h deleted file mode 100644 index 13dad037..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstformat.h +++ /dev/null @@ -1,113 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstformat.h: Header for GstFormat types used in queries and - * seeking. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_FORMAT_H__ -#define __GST_FORMAT_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstFormat: - * @GST_FORMAT_UNDEFINED: undefined format - * @GST_FORMAT_DEFAULT: the default format of the pad/element. This can be - * samples for raw audio, frames/fields for raw video (some, but not all, - * elements support this; use @GST_FORMAT_TIME if you don't have a good - * reason to query for samples/frames) - * @GST_FORMAT_BYTES: bytes - * @GST_FORMAT_TIME: time in nanoseconds - * @GST_FORMAT_BUFFERS: buffers (few, if any, elements implement this as of - * May 2009) - * @GST_FORMAT_PERCENT: percentage of stream (few, if any, elements implement - * this as of May 2009) - * - * Standard predefined formats - */ -/* NOTE: don't forget to update the table in gstformat.c when changing - * this enum */ -typedef enum { - GST_FORMAT_UNDEFINED = 0, /* must be first in list */ - GST_FORMAT_DEFAULT = 1, - GST_FORMAT_BYTES = 2, - GST_FORMAT_TIME = 3, - GST_FORMAT_BUFFERS = 4, - GST_FORMAT_PERCENT = 5 -} GstFormat; - -/* a percentage is always relative to 1000000 */ -/** - * GST_FORMAT_PERCENT_MAX: - * - * The PERCENT format is between 0 and this value - */ -#define GST_FORMAT_PERCENT_MAX G_GINT64_CONSTANT (1000000) -/** - * GST_FORMAT_PERCENT_SCALE: - * - * The value used to scale down the reported PERCENT format value to - * its real value. - */ -#define GST_FORMAT_PERCENT_SCALE G_GINT64_CONSTANT (10000) - -typedef struct _GstFormatDefinition GstFormatDefinition; - -/** - * GstFormatDefinition: - * @value: The unique id of this format - * @nick: A short nick of the format - * @description: A longer description of the format - * @quark: A quark for the nick - * - * A format definition - */ -struct _GstFormatDefinition -{ - GstFormat value; - const gchar *nick; - const gchar *description; - GQuark quark; -}; - -const gchar* gst_format_get_name (GstFormat format); -GQuark gst_format_to_quark (GstFormat format); - -/* register a new format */ -GstFormat gst_format_register (const gchar *nick, - const gchar *description); -GstFormat gst_format_get_by_nick (const gchar *nick); - -/* check if a format is in an array of formats */ -gboolean gst_formats_contains (const GstFormat *formats, GstFormat format); - -/* query for format details */ -const GstFormatDefinition* - gst_format_get_details (GstFormat format); -GstIterator* gst_format_iterate_definitions (void); - -G_END_DECLS - -#endif /* __GST_FORMAT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstghostpad.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstghostpad.h deleted file mode 100644 index 77c79c4f..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstghostpad.h +++ /dev/null @@ -1,128 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Andy Wingo - * - * gstghostpad.h: Proxy pads - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_GHOST_PAD_H__ -#define __GST_GHOST_PAD_H__ - - -#include - - -G_BEGIN_DECLS - -#define GST_TYPE_PROXY_PAD (gst_proxy_pad_get_type ()) -#define GST_IS_PROXY_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PROXY_PAD)) -#define GST_IS_PROXY_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PROXY_PAD)) -#define GST_PROXY_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PROXY_PAD, GstProxyPad)) -#define GST_PROXY_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PROXY_PAD, GstProxyPadClass)) - -typedef struct _GstProxyPad GstProxyPad; -typedef struct _GstProxyPadPrivate GstProxyPadPrivate; -typedef struct _GstProxyPadClass GstProxyPadClass; - -struct _GstProxyPad -{ - GstPad pad; - - /*< private >*/ - GstProxyPadPrivate *priv; -}; - -struct _GstProxyPadClass -{ - GstPadClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[1]; -}; - -GType gst_proxy_pad_get_type (void); - -GstProxyPad* gst_proxy_pad_get_internal (GstProxyPad *pad); - - -GstIterator* gst_proxy_pad_iterate_internal_links_default (GstPad *pad, GstObject *parent) G_GNUC_MALLOC; -GstFlowReturn gst_proxy_pad_chain_default (GstPad *pad, GstObject *parent, - GstBuffer *buffer); -GstFlowReturn gst_proxy_pad_chain_list_default (GstPad *pad, GstObject *parent, - GstBufferList *list); -GstFlowReturn gst_proxy_pad_getrange_default (GstPad *pad, GstObject *parent, - guint64 offset, guint size, - GstBuffer **buffer); - -#define GST_TYPE_GHOST_PAD (gst_ghost_pad_get_type ()) -#define GST_IS_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GHOST_PAD)) -#define GST_IS_GHOST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GHOST_PAD)) -#define GST_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GHOST_PAD, GstGhostPad)) -#define GST_GHOST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GHOST_PAD, GstGhostPadClass)) -#define GST_GHOST_PAD_CAST(obj) ((GstGhostPad*)(obj)) - -/** - * GstGhostPad: - * - * Opaque #GstGhostPad structure. - */ -typedef struct _GstGhostPad GstGhostPad; -typedef struct _GstGhostPadPrivate GstGhostPadPrivate; -typedef struct _GstGhostPadClass GstGhostPadClass; - -struct _GstGhostPad -{ - GstProxyPad pad; - - /*< private >*/ - GstGhostPadPrivate *priv; -}; - -struct _GstGhostPadClass -{ - GstProxyPadClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - - -GType gst_ghost_pad_get_type (void); - -GstPad* gst_ghost_pad_new (const gchar *name, GstPad *target) G_GNUC_MALLOC; -GstPad* gst_ghost_pad_new_no_target (const gchar *name, GstPadDirection dir) G_GNUC_MALLOC; - -GstPad* gst_ghost_pad_new_from_template (const gchar *name, GstPad * target, GstPadTemplate * templ) G_GNUC_MALLOC; -GstPad* gst_ghost_pad_new_no_target_from_template (const gchar *name, GstPadTemplate * templ) G_GNUC_MALLOC; - -GstPad* gst_ghost_pad_get_target (GstGhostPad *gpad); -gboolean gst_ghost_pad_set_target (GstGhostPad *gpad, GstPad *newtarget); - -gboolean gst_ghost_pad_construct (GstGhostPad *gpad); - -gboolean gst_ghost_pad_activate_mode_default (GstPad * pad, GstObject * parent, - GstPadMode mode, gboolean active); - -gboolean gst_ghost_pad_internal_activate_mode_default (GstPad * pad, GstObject * parent, - GstPadMode mode, gboolean active); - -G_END_DECLS - -#endif /* __GST_GHOST_PAD_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstinfo.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstinfo.h deleted file mode 100644 index 155851cc..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstinfo.h +++ /dev/null @@ -1,1515 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2003 Benjamin Otte - * - * gstinfo.h: debugging functions - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GSTINFO_H__ -#define __GSTINFO_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstDebugLevel: - * @GST_LEVEL_NONE: No debugging level specified or desired. Used to deactivate - * debugging output. - * @GST_LEVEL_ERROR: Error messages are to be used only when an error occured - * that stops the application from keeping working correctly. - * An examples is gst_element_error, which outputs a message with this priority. - * It does not mean that the application is terminating as with g_errror. - * @GST_LEVEL_WARNING: Warning messages are to inform about abnormal behaviour - * that could lead to problems or weird behaviour later on. An example of this - * would be clocking issues ("your computer is pretty slow") or broken input - * data ("Can't synchronize to stream.") - * @GST_LEVEL_FIXME: Fixme messages are messages that indicate that something - * in the executed code path is not fully implemented or handled yet. Note - * that this does not replace proper error handling in any way, the purpose - * of this message is to make it easier to spot incomplete/unfinished pieces - * of code when reading the debug log. - * @GST_LEVEL_INFO: Informational messages should be used to keep the developer - * updated about what is happening. - * Examples where this should be used are when a typefind function has - * successfully determined the type of the stream or when an mp3 plugin detects - * the format to be used. ("This file has mono sound.") - * @GST_LEVEL_DEBUG: Debugging messages should be used when something common - * happens that is not the expected default behavior, or something that's - * useful to know but doesn't happen all the time (ie. per loop iteration or - * buffer processed or event handled). - * An example would be notifications about state changes or receiving/sending - * of events. - * @GST_LEVEL_LOG: Log messages are messages that are very common but might be - * useful to know. As a rule of thumb a pipeline that is iterating as expected - * should never output anything else but LOG messages. Use this log level to - * log recurring information in chain functions and loop functions, for - * example. - * @GST_LEVEL_TRACE: Tracing-related messages. - * Examples for this are referencing/dereferencing of objects. - * @GST_LEVEL_MEMDUMP: memory dump messages are used to log (small) chunks of - * data as memory dumps in the log. They will be displayed as hexdump with - * ASCII characters. - * @GST_LEVEL_COUNT: The number of defined debugging levels. - * - * The level defines the importance of a debugging message. The more important a - * message is, the greater the probability that the debugging system outputs it. - */ -typedef enum { - GST_LEVEL_NONE = 0, - GST_LEVEL_ERROR = 1, - GST_LEVEL_WARNING = 2, - GST_LEVEL_FIXME = 3, - GST_LEVEL_INFO = 4, - GST_LEVEL_DEBUG = 5, - GST_LEVEL_LOG = 6, - GST_LEVEL_TRACE = 7, - /* add more */ - GST_LEVEL_MEMDUMP = 9, - /* add more */ - GST_LEVEL_COUNT -} GstDebugLevel; - -/** - * GST_LEVEL_DEFAULT: - * - * Defines the default debugging level to be used with GStreamer. It is normally - * set to #GST_LEVEL_NONE so nothing get printed. - * As it can be configured at compile time, developer builds may chose to - * override that though. - * You can use this as an argument to gst_debug_set_default_threshold() to - * reset the debugging output to default behaviour. - */ -#ifndef GST_LEVEL_DEFAULT -#define GST_LEVEL_DEFAULT GST_LEVEL_NONE -#endif - -/* defines for format (colors etc) - * don't change them around, it uses terminal layout - * Terminal color strings: - * 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed - * Text color codes: - * 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white - * Background color codes: - * 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white - */ -/** - * GstDebugColorFlags: - * @GST_DEBUG_FG_BLACK: Use black as foreground color. - * @GST_DEBUG_FG_RED: Use red as foreground color. - * @GST_DEBUG_FG_GREEN: Use green as foreground color. - * @GST_DEBUG_FG_YELLOW: Use yellow as foreground color. - * @GST_DEBUG_FG_BLUE: Use blue as foreground color. - * @GST_DEBUG_FG_MAGENTA: Use magenta as foreground color. - * @GST_DEBUG_FG_CYAN: Use cyan as foreground color. - * @GST_DEBUG_FG_WHITE: Use white as foreground color. - * @GST_DEBUG_BG_BLACK: Use black as background color. - * @GST_DEBUG_BG_RED: Use red as background color. - * @GST_DEBUG_BG_GREEN: Use green as background color. - * @GST_DEBUG_BG_YELLOW: Use yellow as background color. - * @GST_DEBUG_BG_BLUE: Use blue as background color. - * @GST_DEBUG_BG_MAGENTA: Use magenta as background color. - * @GST_DEBUG_BG_CYAN: Use cyan as background color. - * @GST_DEBUG_BG_WHITE: Use white as background color. - * @GST_DEBUG_BOLD: Make the output bold. - * @GST_DEBUG_UNDERLINE: Underline the output. - * - * These are some terminal style flags you can use when creating your - * debugging categories to make them stand out in debugging output. - */ -typedef enum { - /* colors */ - GST_DEBUG_FG_BLACK = 0x0000, - GST_DEBUG_FG_RED = 0x0001, - GST_DEBUG_FG_GREEN = 0x0002, - GST_DEBUG_FG_YELLOW = 0x0003, - GST_DEBUG_FG_BLUE = 0x0004, - GST_DEBUG_FG_MAGENTA = 0x0005, - GST_DEBUG_FG_CYAN = 0x0006, - GST_DEBUG_FG_WHITE = 0x0007, - /* background colors */ - GST_DEBUG_BG_BLACK = 0x0000, - GST_DEBUG_BG_RED = 0x0010, - GST_DEBUG_BG_GREEN = 0x0020, - GST_DEBUG_BG_YELLOW = 0x0030, - GST_DEBUG_BG_BLUE = 0x0040, - GST_DEBUG_BG_MAGENTA = 0x0050, - GST_DEBUG_BG_CYAN = 0x0060, - GST_DEBUG_BG_WHITE = 0x0070, - /* other formats */ - GST_DEBUG_BOLD = 0x0100, - GST_DEBUG_UNDERLINE = 0x0200 -} GstDebugColorFlags; - -#define GST_DEBUG_FG_MASK (0x000F) -#define GST_DEBUG_BG_MASK (0x00F0) -#define GST_DEBUG_FORMAT_MASK (0xFF00) - -typedef struct _GstDebugCategory GstDebugCategory; -/** - * GstDebugCategory: - * - * This is the struct that describes the categories. Once initialized with - * #GST_DEBUG_CATEGORY_INIT, its values can't be changed anymore. - */ -struct _GstDebugCategory { - /*< private >*/ - gint threshold; - guint color; /* see defines above */ - - const gchar * name; - const gchar * description; -}; - -/********** some convenience macros for debugging **********/ - -/** - * GST_STR_NULL: - * @str: The string to check. - * - * Macro to use when a string must not be NULL, but may be NULL. If the string - * is NULL, "(NULL)" is printed instead. - * In GStreamer printf string arguments may not be NULL, because on some - * platforms (ie Solaris) the libc crashes in that case. This includes debugging - * strings. - */ -#define GST_STR_NULL(str) ((str) ? (str) : "(NULL)") - -/* FIXME, not MT safe */ -/** - * GST_DEBUG_PAD_NAME: - * @pad: The pad to debug. - * - * Evaluates to 2 strings, that describe the pad. Often used in debugging - * statements. - */ -#define GST_DEBUG_PAD_NAME(pad) \ - (pad != NULL) ? \ - ((GST_OBJECT_PARENT(pad) != NULL) ? \ - GST_STR_NULL (GST_OBJECT_NAME (GST_OBJECT_PARENT(pad))) : \ - "''" ) : "''", \ - (pad != NULL) ? GST_STR_NULL (GST_OBJECT_NAME (pad)) : "''" - -/** - * GST_FUNCTION: - * - * This macro should evaluate to the name of the current function and be should - * be defined when configuring your project, as it is compiler dependant. If it - * is not defined, some default value is used. It is used to provide debugging - * output with the function name of the message. - * - * Note that this is different from G_STRFUNC as we do not want the full - * function signature in C++ code. - */ -#ifndef GST_FUNCTION -#if defined (__GNUC__) || (defined (_MSC_VER) && _MSC_VER >= 1300) -# define GST_FUNCTION ((const char*) (__FUNCTION__)) -#elif defined (__STDC__) && defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -# define GST_FUNCTION ((const char*) (__func__)) -#else -# define GST_FUNCTION ((const char*) ("???")) -#endif -#endif /* ifndef GST_FUNCTION */ - - -typedef struct _GstDebugMessage GstDebugMessage; - -/** - * GstLogFunction: - * @category: a #GstDebugCategory - * @level: a #GstDebugLevel - * @file: file name - * @function: function name - * @line: line number - * @object: a #GObject - * @message: the message - * @user_data: user data for the log function - * - * Function prototype for a logging function that can be registered with - * gst_debug_add_log_function(). - * Use G_GNUC_NO_INSTRUMENT on that function. - */ -typedef void (*GstLogFunction) (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - GstDebugMessage * message, - gpointer user_data); - -#ifdef GST_USING_PRINTF_EXTENSION - -/* not using G_GNUC_PRINTF, since gcc will choke on GST_PTR_FORMAT being %P */ -void gst_debug_log (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - const gchar * format, - ...) G_GNUC_NO_INSTRUMENT; - -#else /* GST_USING_PRINTF_EXTENSION */ - -void gst_debug_log (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - const gchar * format, - ...) G_GNUC_PRINTF (7, 8) G_GNUC_NO_INSTRUMENT; - -#endif /* GST_USING_PRINTF_EXTENSION */ - -void gst_debug_log_valist (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - const gchar * format, - va_list args) G_GNUC_NO_INSTRUMENT; - -/* do not use this function, use the GST_DEBUG_CATEGORY_INIT macro */ -GstDebugCategory *_gst_debug_category_new (const gchar * name, - guint color, - const gchar * description); -/* do not use this function, use the GST_DEBUG_CATEGORY_GET macro */ -GstDebugCategory *_gst_debug_get_category (const gchar *name); - - -/* do not use this function, use the GST_CAT_MEMDUMP_* macros */ -void _gst_debug_dump_mem (GstDebugCategory * cat, const gchar * file, - const gchar * func, gint line, GObject * obj, const gchar * msg, - const guint8 * data, guint length); - -/* we define this to avoid a compiler warning regarding a cast from a function - * pointer to a void pointer - * (see https://bugzilla.gnome.org/show_bug.cgi?id=309253) - */ -typedef void (* GstDebugFuncPtr) (void); - -/* do no use these functions, use the GST_DEBUG*_FUNCPTR macros */ -void _gst_debug_register_funcptr (GstDebugFuncPtr func, - const gchar * ptrname); -const gchar * - _gst_debug_nameof_funcptr (GstDebugFuncPtr func) G_GNUC_NO_INSTRUMENT; - - -const gchar * gst_debug_message_get (GstDebugMessage * message); - -void gst_debug_log_default (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, - const gchar * function, - gint line, - GObject * object, - GstDebugMessage * message, - gpointer unused) G_GNUC_NO_INSTRUMENT; - -const gchar * gst_debug_level_get_name (GstDebugLevel level); - -void gst_debug_add_log_function (GstLogFunction func, - gpointer user_data, - GDestroyNotify notify); - -guint gst_debug_remove_log_function (GstLogFunction func); -guint gst_debug_remove_log_function_by_data (gpointer data); - -void gst_debug_set_active (gboolean active); -gboolean gst_debug_is_active (void); - -void gst_debug_set_colored (gboolean colored); -gboolean gst_debug_is_colored (void); - -void gst_debug_set_default_threshold (GstDebugLevel level); -GstDebugLevel gst_debug_get_default_threshold (void); -void gst_debug_set_threshold_for_name (const gchar * name, - GstDebugLevel level); -void gst_debug_unset_threshold_for_name (const gchar * name); - - -void gst_debug_category_free (GstDebugCategory * category); -void gst_debug_category_set_threshold (GstDebugCategory * category, - GstDebugLevel level); -void gst_debug_category_reset_threshold (GstDebugCategory * category); -GstDebugLevel gst_debug_category_get_threshold (GstDebugCategory * category); -const gchar * gst_debug_category_get_name (GstDebugCategory * category); -guint gst_debug_category_get_color (GstDebugCategory * category); -const gchar * gst_debug_category_get_description (GstDebugCategory * category); -GSList * gst_debug_get_all_categories (void); - - -gchar * gst_debug_construct_term_color (guint colorinfo); -gint gst_debug_construct_win_color (guint colorinfo); - - -#ifndef GST_DISABLE_GST_DEBUG - -#define gst_debug_add_log_function(func,data,notify) \ -G_STMT_START{ \ - if (func == gst_debug_log_default) { \ - gst_debug_add_log_function(NULL,data,notify); \ - } else { \ - gst_debug_add_log_function(func,data,notify); \ - } \ -}G_STMT_END - -#define gst_debug_remove_log_function(func) \ - (func == gst_debug_log_default) ? \ - gst_debug_remove_log_function(NULL) : \ - gst_debug_remove_log_function(func) - -/** - * GST_DEBUG_CATEGORY: - * @cat: the category - * - * Defines a GstDebugCategory variable. - * This macro expands to nothing if debugging is disabled. - */ -#define GST_DEBUG_CATEGORY(cat) GstDebugCategory *cat = NULL -/** - * GST_DEBUG_CATEGORY_EXTERN: - * @cat: the category - * - * Declares a GstDebugCategory variable as extern. Use in header files. - * This macro expands to nothing if debugging is disabled. - */ -#define GST_DEBUG_CATEGORY_EXTERN(cat) extern GstDebugCategory *cat - -/** - * GST_DEBUG_CATEGORY_STATIC: - * @cat: the category - * - * Defines a static GstDebugCategory variable. - * This macro expands to nothing if debugging is disabled. - */ -#define GST_DEBUG_CATEGORY_STATIC(cat) static GstDebugCategory *cat = NULL - -/** - * GST_DEBUG_CATEGORY_INIT: - * @cat: the category to initialize. - * @name: the name of the category. - * @color: the colors to use for a color representation or 0 for no color. - * @description: optional description of the category. - * - * Initializes a new #GstDebugCategory with the given properties and set to - * the default threshold. - * - * - * - * This macro expands to nothing if debugging is disabled. - * - * - * When naming your category, please follow the following conventions to ensure - * that the pattern matching for categories works as expected. It is not - * earth-shattering if you don't follow these conventions, but it would be nice - * for everyone. - * - * - * If you define a category for a plugin or a feature of it, name the category - * like the feature. So if you wanted to write a "filesrc" element, you would - * name the category "filesrc". Use lowercase letters only. - * If you define more than one category for the same element, append an - * underscore and an identifier to your categories, like this: "filesrc_cache" - * - * - * If you create a library or an application using debugging categories, use a - * common prefix followed by an underscore for all your categories. GStreamer - * uses the GST prefix so GStreamer categories look like "GST_STATES". Be sure - * to include uppercase letters. - * - * - */ -#define GST_DEBUG_CATEGORY_INIT(cat,name,color,description) G_STMT_START{\ - if (cat == NULL) \ - cat = _gst_debug_category_new (name,color,description); \ -}G_STMT_END - -/** - * GST_DEBUG_CATEGORY_GET: - * @cat: the category to initialize. - * @name: log category name - * - * Looks up an existing #GstDebugCategory by its @name and sets @cat. If the - * category is not found, but GST_CAT_DEFAULT is defined, that is assigned to - * @cat. Otherwise @cat will be NULL. - * - * |[ - * GST_DEBUG_CATEGORY_STATIC (gst_myplugin_debug); - * #define GST_CAT_DEFAULT gst_myplugin_debug - * GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE); - * ... - * GST_DEBUG_CATEGORY_INIT (gst_myplugin_debug, "myplugin", 0, "nice element"); - * GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE"); - * ]| - */ -#ifdef GST_CAT_DEFAULT -#define GST_DEBUG_CATEGORY_GET(cat,name) G_STMT_START{\ - cat = _gst_debug_get_category (name); \ - if (!cat) { \ - cat = GST_CAT_DEFAULT; \ - } \ -}G_STMT_END -#else -#define GST_DEBUG_CATEGORY_GET(cat,name) G_STMT_START{\ - cat = _gst_debug_get_category (name); \ -}G_STMT_END -#endif - -/** - * GST_CAT_DEFAULT: - * - * Default gstreamer core debug log category. Please define your own. - */ -GST_EXPORT GstDebugCategory * GST_CAT_DEFAULT; -/* this symbol may not be used */ -GST_EXPORT gboolean _gst_debug_enabled; - -/* the min debug level, used for quickly discarding debug - * messages that fall under the threshold. */ -GST_EXPORT GstDebugLevel _gst_debug_min; - -/** - * GST_CAT_LEVEL_LOG: - * @cat: category to use - * @level: the severity of the message - * @object: the #GObject the message belongs to or NULL if none - * @...: A printf-style message to output - * - * Outputs a debugging message. This is the most general macro for outputting - * debugging messages. You will probably want to use one of the ones described - * below. - */ -#ifdef G_HAVE_ISO_VARARGS -#define GST_CAT_LEVEL_LOG(cat,level,object,...) G_STMT_START{ \ - if (G_UNLIKELY (level <= _gst_debug_min)) { \ - gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \ - (GObject *) (object), __VA_ARGS__); \ - } \ -}G_STMT_END -#else /* G_HAVE_GNUC_VARARGS */ -#ifdef G_HAVE_GNUC_VARARGS -#define GST_CAT_LEVEL_LOG(cat,level,object,args...) G_STMT_START{ \ - if (G_UNLIKELY (level <= _gst_debug_min)) { \ - gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \ - (GObject *) (object), ##args ); \ - } \ -}G_STMT_END -#else /* no variadic macros, use inline */ -static inline void -GST_CAT_LEVEL_LOG_valist (GstDebugCategory * cat, - GstDebugLevel level, gpointer object, const char *format, va_list varargs) -{ - if (G_UNLIKELY (level <= _gst_debug_min)) { - gst_debug_log_valist (cat, level, "", "", 0, (GObject *) object, format, - varargs); - } -} - -static inline void -GST_CAT_LEVEL_LOG (GstDebugCategory * cat, GstDebugLevel level, - gpointer object, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, level, object, format, varargs); - va_end (varargs); -} -#endif -#endif /* G_HAVE_ISO_VARARGS */ - -/* This one doesn't have varargs in the macro, so it's different than all the - * other macros and hence in a separate block right here. Docs chunks are - * with the other doc chunks below though. */ -#define __GST_CAT_MEMDUMP_LOG(cat,object,msg,data,length) G_STMT_START{ \ - if (G_UNLIKELY (GST_LEVEL_MEMDUMP <= _gst_debug_min)) { \ - _gst_debug_dump_mem ((cat), __FILE__, GST_FUNCTION, __LINE__, \ - (GObject *) (object), (msg), (data), (length)); \ - } \ -}G_STMT_END - -#define GST_CAT_MEMDUMP_OBJECT(cat,obj,msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(cat,obj,msg,data,length) -#define GST_CAT_MEMDUMP(cat,msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(cat,NULL,msg,data,length) -#define GST_MEMDUMP_OBJECT(obj,msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(GST_CAT_DEFAULT,obj,msg,data,length) -#define GST_MEMDUMP(msg,data,length) \ - __GST_CAT_MEMDUMP_LOG(GST_CAT_DEFAULT,NULL,msg,data,length) - -/** - * GST_CAT_ERROR_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an error message belonging to the given object in the given category. - */ -/** - * GST_CAT_WARNING_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a warning message belonging to the given object in the given category. - */ -/** - * GST_CAT_INFO_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an informational message belonging to the given object in the given - * category. - */ -/** - * GST_CAT_DEBUG_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an debugging message belonging to the given object in the given category. - */ -/** - * GST_CAT_LOG_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an logging message belonging to the given object in the given category. - */ -/** - * GST_CAT_FIXME_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a fixme message belonging to the given object in the given category. - */ -/** - * GST_CAT_TRACE_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a tracing message belonging to the given object in the given - * category. - */ -/** - * GST_CAT_MEMDUMP_OBJECT: - * @cat: category to use - * @obj: the #GObject the message belongs to - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a hexdump of @data relating to the given object in the given - * category. - */ - - -/** - * GST_CAT_ERROR: - * @cat: category to use - * @...: printf-style message to output - * - * Output an error message in the given category. - */ -/** - * GST_CAT_WARNING: - * @cat: category to use - * @...: printf-style message to output - * - * Output an warning message in the given category. - */ -/** - * GST_CAT_INFO: - * @cat: category to use - * @...: printf-style message to output - * - * Output an informational message in the given category. - */ -/** - * GST_CAT_DEBUG: - * @cat: category to use - * @...: printf-style message to output - * - * Output an debugging message in the given category. - */ -/** - * GST_CAT_LOG: - * @cat: category to use - * @...: printf-style message to output - * - * Output an logging message in the given category. - */ -/** - * GST_CAT_FIXME: - * @cat: category to use - * @...: printf-style message to output - * - * Output an fixme message in the given category. - */ -/** - * GST_CAT_TRACE: - * @cat: category to use - * @...: printf-style message to output - * - * Output a tracing message in the given category. - */ -/** - * GST_CAT_MEMDUMP: - * @cat: category to use - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a hexdump of @data in the given category. - */ - - -/** - * GST_ERROR_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an error message belonging to the given object in the default category. - */ -/** - * GST_WARNING_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a warning message belonging to the given object in the default category. - */ -/** - * GST_INFO_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output an informational message belonging to the given object in the default - * category. - */ -/** - * GST_DEBUG_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a debugging message belonging to the given object in the default - * category. - */ -/** - * GST_LOG_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a logging message belonging to the given object in the default category. - */ -/** - * GST_FIXME_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a fixme message belonging to the given object in the default category. - */ -/** - * GST_TRACE_OBJECT: - * @obj: the #GObject the message belongs to - * @...: printf-style message to output - * - * Output a tracing message belonging to the given object in the default category. - */ -/** - * GST_MEMDUMP_OBJECT: - * @obj: the #GObject the message belongs to - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a logging message belonging to the given object in the default category. - */ - - -/** - * GST_ERROR: - * @...: printf-style message to output - * - * Output an error message in the default category. - */ -/** - * GST_WARNING: - * @...: printf-style message to output - * - * Output a warning message in the default category. - */ -/** - * GST_INFO: - * @...: printf-style message to output - * - * Output an informational message in the default category. - */ -/** - * GST_DEBUG: - * @...: printf-style message to output - * - * Output a debugging message in the default category. - */ -/** - * GST_LOG: - * @...: printf-style message to output - * - * Output a logging message in the default category. - */ -/** - * GST_FIXME: - * @...: printf-style message to output - * - * Output a fixme message in the default category. - */ -/** - * GST_TRACE: - * @...: printf-style message to output - * - * Output a tracing message in the default category. - */ -/** - * GST_MEMDUMP: - * @msg: message string to log with the data - * @data: pointer to the data to output - * @length: length of the data to output - * - * Output a hexdump of @data. - */ - -#ifdef G_HAVE_ISO_VARARGS - -#define GST_CAT_ERROR_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, obj, __VA_ARGS__) -#define GST_CAT_WARNING_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, obj, __VA_ARGS__) -#define GST_CAT_INFO_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, obj, __VA_ARGS__) -#define GST_CAT_DEBUG_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, obj, __VA_ARGS__) -#define GST_CAT_LOG_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, obj, __VA_ARGS__) -#define GST_CAT_FIXME_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, obj, __VA_ARGS__) -#define GST_CAT_TRACE_OBJECT(cat,obj,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, obj, __VA_ARGS__) - -#define GST_CAT_ERROR(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, NULL, __VA_ARGS__) -#define GST_CAT_WARNING(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, NULL, __VA_ARGS__) -#define GST_CAT_INFO(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, NULL, __VA_ARGS__) -#define GST_CAT_DEBUG(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, NULL, __VA_ARGS__) -#define GST_CAT_LOG(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, NULL, __VA_ARGS__) -#define GST_CAT_FIXME(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, NULL, __VA_ARGS__) -#define GST_CAT_TRACE(cat,...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, NULL, __VA_ARGS__) - -#define GST_ERROR_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, obj, __VA_ARGS__) -#define GST_WARNING_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, obj, __VA_ARGS__) -#define GST_INFO_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, obj, __VA_ARGS__) -#define GST_DEBUG_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, obj, __VA_ARGS__) -#define GST_LOG_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, obj, __VA_ARGS__) -#define GST_FIXME_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, obj, __VA_ARGS__) -#define GST_TRACE_OBJECT(obj,...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, obj, __VA_ARGS__) - -#define GST_ERROR(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, NULL, __VA_ARGS__) -#define GST_WARNING(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, NULL, __VA_ARGS__) -#define GST_INFO(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, NULL, __VA_ARGS__) -#define GST_DEBUG(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, NULL, __VA_ARGS__) -#define GST_LOG(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, NULL, __VA_ARGS__) -#define GST_FIXME(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, NULL, __VA_ARGS__) -#define GST_TRACE(...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, NULL, __VA_ARGS__) - -#else -#ifdef G_HAVE_GNUC_VARARGS - -#define GST_CAT_ERROR_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, obj, ##args ) -#define GST_CAT_WARNING_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, obj, ##args ) -#define GST_CAT_INFO_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, obj, ##args ) -#define GST_CAT_DEBUG_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, obj, ##args ) -#define GST_CAT_LOG_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, obj, ##args ) -#define GST_CAT_FIXME_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, obj, ##args ) -#define GST_CAT_TRACE_OBJECT(cat,obj,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, obj, ##args ) - -#define GST_CAT_ERROR(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_ERROR, NULL, ##args ) -#define GST_CAT_WARNING(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_WARNING, NULL, ##args ) -#define GST_CAT_INFO(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_INFO, NULL, ##args ) -#define GST_CAT_DEBUG(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_DEBUG, NULL, ##args ) -#define GST_CAT_LOG(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_LOG, NULL, ##args ) -#define GST_CAT_FIXME(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_FIXME, NULL, ##args ) -#define GST_CAT_TRACE(cat,args...) GST_CAT_LEVEL_LOG (cat, GST_LEVEL_TRACE, NULL, ##args ) - -#define GST_ERROR_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, obj, ##args ) -#define GST_WARNING_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, obj, ##args ) -#define GST_INFO_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, obj, ##args ) -#define GST_DEBUG_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, obj, ##args ) -#define GST_LOG_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, obj, ##args ) -#define GST_FIXME_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, obj, ##args ) -#define GST_TRACE_OBJECT(obj,args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, obj, ##args ) - -#define GST_ERROR(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_ERROR, NULL, ##args ) -#define GST_WARNING(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_WARNING, NULL, ##args ) -#define GST_INFO(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_INFO, NULL, ##args ) -#define GST_DEBUG(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, NULL, ##args ) -#define GST_LOG(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_LOG, NULL, ##args ) -#define GST_FIXME(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_FIXME, NULL, ##args ) -#define GST_TRACE(args...) GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, GST_LEVEL_TRACE, NULL, ##args ) - -#else -/* no variadic macros, use inline */ -static inline void -GST_CAT_ERROR_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_ERROR, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_WARNING_OBJECT (GstDebugCategory * cat, gpointer obj, - const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_WARNING, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_INFO_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_INFO, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_DEBUG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_DEBUG, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_LOG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_LOG, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_FIXME_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_FIXME, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_TRACE_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_TRACE, obj, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_ERROR (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_ERROR, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_WARNING (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_WARNING, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_INFO (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_INFO, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_DEBUG (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_DEBUG, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_LOG (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_LOG, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_FIXME (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_FIXME, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_CAT_TRACE (GstDebugCategory * cat, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (cat, GST_LEVEL_TRACE, NULL, format, varargs); - va_end (varargs); -} - -static inline void -GST_ERROR_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_ERROR, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_WARNING_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_WARNING, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_INFO_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_INFO, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_DEBUG_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_LOG_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_LOG, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_FIXME_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_FIXME, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_TRACE_OBJECT (gpointer obj, const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_TRACE, obj, format, - varargs); - va_end (varargs); -} - -static inline void -GST_ERROR (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_ERROR, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_WARNING (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_WARNING, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_INFO (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_INFO, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_DEBUG (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_DEBUG, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_LOG (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_LOG, NULL, - format, varargs); - va_end (varargs); -} - -static inline void -GST_FIXME (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_FIXME, NULL, format, - varargs); - va_end (varargs); -} - -static inline void -GST_TRACE (const char *format, ...) -{ - va_list varargs; - - va_start (varargs, format); - GST_CAT_LEVEL_LOG_valist (GST_CAT_DEFAULT, GST_LEVEL_TRACE, NULL, format, - varargs); - va_end (varargs); -} -#endif -#endif - - -/********** function pointer stuff **********/ - -/** - * GST_DEBUG_REGISTER_FUNCPTR: - * @ptr: pointer to the function to register - * - * Register a pointer to a function with its name, so it can later be used by - * GST_DEBUG_FUNCPTR_NAME(). - * - * Use this variant of #GST_DEBUG_FUNCPTR if you do not need to use @ptr. - */ -#define GST_DEBUG_REGISTER_FUNCPTR(ptr) \ - _gst_debug_register_funcptr((GstDebugFuncPtr)(ptr), #ptr) -/** - * GST_DEBUG_FUNCPTR: - * @ptr: pointer to the function to register - * - * Register a pointer to a function with its name, so it can later be used by - * GST_DEBUG_FUNCPTR_NAME(). - * - * Returns: the value passed to @ptr. - */ -#define GST_DEBUG_FUNCPTR(ptr) \ - (_gst_debug_register_funcptr((GstDebugFuncPtr)(ptr), #ptr) , ptr) - -/** - * GST_DEBUG_FUNCPTR_NAME: - * @ptr: address of the function of which to look up the name - * - * Retrieves the name of the function, if it was previously registered with - * GST_DEBUG_FUNCPTR(). If not, it returns a description of the pointer. - * - * This macro returns a constant string which must not be modified or - * freed by the caller. - */ -#define GST_DEBUG_FUNCPTR_NAME(ptr) \ - _gst_debug_nameof_funcptr((GstDebugFuncPtr)ptr) - - -#else /* GST_DISABLE_GST_DEBUG */ - - -#ifndef GST_INFO_C - -#if defined(__GNUC__) && __GNUC__ >= 3 -# pragma GCC poison gst_debug_log -# pragma GCC poison gst_debug_log_valist -# pragma GCC poison _gst_debug_category_new -#endif - -#define _gst_debug_min GST_LEVEL_NONE - -#define gst_debug_set_default_threshold(level) G_STMT_START{ }G_STMT_END -#define gst_debug_get_default_threshold() (GST_LEVEL_NONE) - -#define gst_debug_level_get_name(level) ("NONE") -#define gst_debug_message_get(message) ("") -#define gst_debug_add_log_function(func,data,notify) G_STMT_START{ }G_STMT_END -#define gst_debug_set_active(active) G_STMT_START{ }G_STMT_END -#define gst_debug_is_active() (FALSE) -#define gst_debug_set_colored(colored) G_STMT_START{ }G_STMT_END -#define gst_debug_is_colored() (FALSE) -#define gst_debug_set_default_threshold(level) G_STMT_START{ }G_STMT_END -#define gst_debug_get_default_threshold() (GST_LEVEL_NONE) -#define gst_debug_set_threshold_for_name(name,level) G_STMT_START{ }G_STMT_END -#define gst_debug_unset_threshold_for_name(name) G_STMT_START{ }G_STMT_END - -/* we are using dummy function prototypes here to eat ';' as these macros are - * used outside of functions */ -#define GST_DEBUG_CATEGORY(var) void _gst_debug_dummy_##var (void) -#define GST_DEBUG_CATEGORY_EXTERN(var) void _gst_debug_dummy_extern_##var (void) -#define GST_DEBUG_CATEGORY_STATIC(var) void _gst_debug_dummy_static_##var (void) - -#define GST_DEBUG_CATEGORY_INIT(var,name,color,desc) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_CATEGORY_GET(var,name) G_STMT_START{ }G_STMT_END -#define gst_debug_category_free(category) G_STMT_START{ }G_STMT_END -#define gst_debug_category_set_threshold(category,level) G_STMT_START{ }G_STMT_END -#define gst_debug_category_reset_threshold(category) G_STMT_START{ }G_STMT_END -#define gst_debug_category_get_threshold(category) (GST_LEVEL_NONE) -#define gst_debug_category_get_name(cat) ("") -#define gst_debug_category_get_color(cat) (0) -#define gst_debug_category_get_description(cat) ("") -#define gst_debug_get_all_categories() (NULL) -#define gst_debug_construct_term_color(colorinfo) (g_strdup ("00")) -#define gst_debug_construct_win_color(colorinfo) (0) - -#endif /* !GST_INFO_C */ - -#ifdef G_HAVE_ISO_VARARGS - -#define GST_CAT_LEVEL_LOG(cat,level,...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE_OBJECT(...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME(...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE(...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_WARNING_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_INFO_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_LOG_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_FIXME_OBJECT(...) G_STMT_START{ }G_STMT_END -#define GST_TRACE_OBJECT(...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR(...) G_STMT_START{ }G_STMT_END -#define GST_WARNING(...) G_STMT_START{ }G_STMT_END -#define GST_INFO(...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG(...) G_STMT_START{ }G_STMT_END -#define GST_LOG(...) G_STMT_START{ }G_STMT_END -#define GST_FIXME(...) G_STMT_START{ }G_STMT_END -#define GST_TRACE(...) G_STMT_START{ }G_STMT_END - -#else /* !G_HAVE_ISO_VARARGS */ -#ifdef G_HAVE_GNUC_VARARGS - -#define GST_CAT_LEVEL_LOG(cat,level,args...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE_OBJECT(args...) G_STMT_START{ }G_STMT_END - -#define GST_CAT_ERROR(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_WARNING(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_INFO(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_DEBUG(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_LOG(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_FIXME(args...) G_STMT_START{ }G_STMT_END -#define GST_CAT_TRACE(args...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_WARNING_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_INFO_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_LOG_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_FIXME_OBJECT(args...) G_STMT_START{ }G_STMT_END -#define GST_TRACE_OBJECT(args...) G_STMT_START{ }G_STMT_END - -#define GST_ERROR(args...) G_STMT_START{ }G_STMT_END -#define GST_WARNING(args...) G_STMT_START{ }G_STMT_END -#define GST_INFO(args...) G_STMT_START{ }G_STMT_END -#define GST_DEBUG(args...) G_STMT_START{ }G_STMT_END -#define GST_LOG(args...) G_STMT_START{ }G_STMT_END -#define GST_FIXME(args...) G_STMT_START{ }G_STMT_END -#define GST_TRACE(args...) G_STMT_START{ }G_STMT_END - -#else /* !G_HAVE_GNUC_VARARGS */ -static inline void -GST_CAT_LEVEL_LOG_valist (GstDebugCategory * cat, - GstDebugLevel level, gpointer object, const char *format, va_list varargs) -{ -} - -static inline void -GST_CAT_ERROR_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_WARNING_OBJECT (GstDebugCategory * cat, gpointer obj, - const char *format, ...) -{ -} - -static inline void -GST_CAT_INFO_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_DEBUG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_LOG_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_FIXME_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_TRACE_OBJECT (GstDebugCategory * cat, gpointer obj, const char *format, - ...) -{ -} - -static inline void -GST_CAT_ERROR (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_WARNING (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_INFO (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_DEBUG (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_LOG (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_FIXME (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_CAT_TRACE (GstDebugCategory * cat, const char *format, ...) -{ -} - -static inline void -GST_ERROR_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_WARNING_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_INFO_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_DEBUG_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_LOG_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_FIXME_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_TRACE_OBJECT (gpointer obj, const char *format, ...) -{ -} - -static inline void -GST_ERROR (const char *format, ...) -{ -} - -static inline void -GST_WARNING (const char *format, ...) -{ -} - -static inline void -GST_INFO (const char *format, ...) -{ -} - -static inline void -GST_DEBUG (const char *format, ...) -{ -} - -static inline void -GST_LOG (const char *format, ...) -{ -} - -static inline void -GST_FIXME (const char *format, ...) -{ -} - -static inline void -GST_TRACE (const char *format, ...) -{ -} - -#endif /* G_HAVE_GNUC_VARARGS */ -#endif /* G_HAVE_ISO_VARARGS */ - -#define GST_DEBUG_REGISTER_FUNCPTR(ptr) G_STMT_START{ }G_STMT_END -#define GST_DEBUG_FUNCPTR(ptr) (ptr) -#define GST_DEBUG_FUNCPTR_NAME(ptr) (g_strdup_printf ("%p", ptr)) - -#define GST_CAT_MEMDUMP_OBJECT(cat,obj,msg,data,length) G_STMT_START{ }G_STMT_END -#define GST_CAT_MEMDUMP(cat,msg,data,length) G_STMT_START{ }G_STMT_END -#define GST_MEMDUMP_OBJECT(obj,msg,data,length) G_STMT_START{ }G_STMT_END -#define GST_MEMDUMP(msg,data,length) G_STMT_START{ }G_STMT_END - -#endif /* GST_DISABLE_GST_DEBUG */ - - -void gst_debug_print_stack_trace (void); - -G_END_DECLS - -#endif /* __GSTINFO_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstiterator.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstiterator.h deleted file mode 100644 index 2a21f8b3..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstiterator.h +++ /dev/null @@ -1,273 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Wim Taymans - * Copyright (C) 2011 Sebastian Dröge - * - * gstiterator.h: Header for GstIterator - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_ITERATOR_H__ -#define __GST_ITERATOR_H__ - -#include /* for GValue in the fold */ -#include - -G_BEGIN_DECLS - -#define GST_TYPE_ITERATOR (gst_iterator_get_type ()) - -/** - * GstIteratorResult: - * @GST_ITERATOR_DONE: No more items in the iterator - * @GST_ITERATOR_OK: An item was retrieved - * @GST_ITERATOR_RESYNC: Datastructure changed while iterating - * @GST_ITERATOR_ERROR: An error happened - * - * The result of gst_iterator_next(). - */ -typedef enum { - GST_ITERATOR_DONE = 0, - GST_ITERATOR_OK = 1, - GST_ITERATOR_RESYNC = 2, - GST_ITERATOR_ERROR = 3 -} GstIteratorResult; - -typedef struct _GstIterator GstIterator; - -/** - * GstIteratorItem: - * @GST_ITERATOR_ITEM_SKIP: Skip this item - * @GST_ITERATOR_ITEM_PASS: Return item - * @GST_ITERATOR_ITEM_END: Stop after this item. - * - * The result of a #GstIteratorItemFunction. - */ -typedef enum { - GST_ITERATOR_ITEM_SKIP = 0, - GST_ITERATOR_ITEM_PASS = 1, - GST_ITERATOR_ITEM_END = 2 -} GstIteratorItem; - -/** - * GstIteratorCopyFunction: - * @it: The original iterator - * @copy: The copied iterator - * - * This function will be called when creating a copy of @it and should - * create a copy of all custom iterator fields or increase their - * reference counts. - */ -typedef void (*GstIteratorCopyFunction) (const GstIterator *it, GstIterator *copy); - -/** - * GstIteratorItemFunction: - * @it: the iterator - * @item: the item being retrieved. - * - * The function that will be called after the next item of the iterator - * has been retrieved. This function can be used to skip items or stop - * the iterator. - * - * The function will be called with the iterator lock held. - * - * Returns: the result of the operation. - */ -typedef GstIteratorItem (*GstIteratorItemFunction) (GstIterator *it, const GValue * item); - -/** - * GstIteratorNextFunction: - * @it: the iterator - * @result: a pointer to hold the next item - * - * The function that will be called when the next element of the iterator - * should be retrieved. - * - * Implementors of a #GstIterator should implement this - * function and pass it to the constructor of the custom iterator. - * The function will be called with the iterator lock held. - * - * Returns: the result of the operation. - */ -typedef GstIteratorResult (*GstIteratorNextFunction) (GstIterator *it, GValue *result); -/** - * GstIteratorResyncFunction: - * @it: the iterator - * - * This function will be called whenever a concurrent update happened - * to the iterated datastructure. The implementor of the iterator should - * restart the iterator from the beginning and clean up any state it might - * have. - * - * Implementors of a #GstIterator should implement this - * function and pass it to the constructor of the custom iterator. - * The function will be called with the iterator lock held. - */ -typedef void (*GstIteratorResyncFunction) (GstIterator *it); -/** - * GstIteratorFreeFunction: - * @it: the iterator - * - * This function will be called when the iterator is freed. - * - * Implementors of a #GstIterator should implement this - * function and pass it to the constructor of the custom iterator. - * The function will be called with the iterator lock held. - */ -typedef void (*GstIteratorFreeFunction) (GstIterator *it); - -/** - * GstIteratorForeachFunction: - * @item: The item - * @user_data: User data - * - * A function that is called by gst_iterator_foreach() for every element. - */ -typedef void (*GstIteratorForeachFunction) (const GValue * item, gpointer user_data); - -/** - * GstIteratorFoldFunction: - * @item: the item to fold - * @ret: a #GValue collecting the result - * @user_data: data passed to gst_iterator_fold() - * - * A function to be passed to gst_iterator_fold(). - * - * Returns: TRUE if the fold should continue, FALSE if it should stop. - */ -typedef gboolean (*GstIteratorFoldFunction) (const GValue * item, GValue * ret, gpointer user_data); - -/** - * GST_ITERATOR: - * @it: the #GstIterator value - * - * Macro to cast to a #GstIterator - */ -#define GST_ITERATOR(it) ((GstIterator*)(it)) -/** - * GST_ITERATOR_LOCK: - * @it: the #GstIterator to get the lock of - * - * Macro to get the lock protecting the datastructure being iterated. - */ -#define GST_ITERATOR_LOCK(it) (GST_ITERATOR(it)->lock) -/** - * GST_ITERATOR_COOKIE: - * @it: the #GstIterator to get the cookie of - * - * Macro to get the cookie of a #GstIterator. The cookie of the - * iterator is the value of the master cookie when the iterator - * was created. - * Whenever the iterator is iterated, the value is compared to the - * value of the master cookie. If they are different, a concurrent - * modification happened to the iterator and a resync is needed. - */ -#define GST_ITERATOR_COOKIE(it) (GST_ITERATOR(it)->cookie) -/** - * GST_ITERATOR_ORIG_COOKIE: - * @it: the #GstIterator to get the master cookie of - * - * Macro to get a pointer to where the master cookie is stored. The - * master cookie protects the structure being iterated and gets updated - * whenever the datastructure changes. - */ -#define GST_ITERATOR_ORIG_COOKIE(it) (GST_ITERATOR(it)->master_cookie) - -/** - * GstIterator: - * @copy: The function to copy the iterator - * @next: The function to get the next item in the iterator - * @item: The function to be called for each item retrieved - * @resync: The function to call when a resync is needed. - * @free: The function to call when the iterator is freed - * @pushed: The iterator that is currently pushed with gst_iterator_push() - * @type: The type of the object that this iterator will return - * @lock: The lock protecting the data structure and the cookie. - * @cookie: The cookie; the value of the master_cookie when this iterator was - * created. - * @master_cookie: A pointer to the master cookie. - * @size: the size of the iterator - * - * #GstIterator base structure. The values of this structure are - * protected for subclasses, use the methods to use the #GstIterator. - */ -struct _GstIterator { - /*< protected >*/ - GstIteratorCopyFunction copy; - GstIteratorNextFunction next; - GstIteratorItemFunction item; - GstIteratorResyncFunction resync; - GstIteratorFreeFunction free; - - GstIterator *pushed; /* pushed iterator */ - - GType type; - GMutex *lock; - guint32 cookie; /* cookie of the iterator */ - guint32 *master_cookie; /* pointer to guint32 holding the cookie when this - iterator was created */ - guint size; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_iterator_get_type (void); - -/* creating iterators */ -GstIterator* gst_iterator_new (guint size, - GType type, - GMutex *lock, - guint32 *master_cookie, - GstIteratorCopyFunction copy, - GstIteratorNextFunction next, - GstIteratorItemFunction item, - GstIteratorResyncFunction resync, - GstIteratorFreeFunction free) G_GNUC_MALLOC; - -GstIterator* gst_iterator_new_list (GType type, - GMutex *lock, - guint32 *master_cookie, - GList **list, - GObject * owner, - GstIteratorItemFunction item) G_GNUC_MALLOC; - -GstIterator* gst_iterator_new_single (GType type, - const GValue * object) G_GNUC_MALLOC; - -GstIterator* gst_iterator_copy (const GstIterator *it) G_GNUC_MALLOC; - -/* using iterators */ -GstIteratorResult gst_iterator_next (GstIterator *it, GValue * elem); -void gst_iterator_resync (GstIterator *it); -void gst_iterator_free (GstIterator *it); - -void gst_iterator_push (GstIterator *it, GstIterator *other); - -/* higher-order functions that operate on iterators */ -GstIterator* gst_iterator_filter (GstIterator *it, GCompareFunc func, - const GValue * user_data) G_GNUC_MALLOC; -GstIteratorResult gst_iterator_fold (GstIterator *it, - GstIteratorFoldFunction func, - GValue *ret, gpointer user_data); -GstIteratorResult gst_iterator_foreach (GstIterator *it, - GstIteratorForeachFunction func, gpointer user_data); -gboolean gst_iterator_find_custom (GstIterator *it, GCompareFunc func, - GValue *elem, gpointer user_data); - -G_END_DECLS - -#endif /* __GST_ITERATOR_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmacros.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmacros.h deleted file mode 100644 index e38af539..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmacros.h +++ /dev/null @@ -1,54 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __GST_MACROS_H__ -#define __GST_MACROS_H__ - -G_BEGIN_DECLS - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -# define GST_GNUC_CONSTRUCTOR \ - __attribute__ ((constructor)) -#else /* !__GNUC__ */ -# define GST_GNUC_CONSTRUCTOR -#endif /* !__GNUC__ */ - -#if defined (__GNUC__) && !defined (GST_IMPLEMENT_INLINES) -# define GST_INLINE_FUNC extern __inline__ -# define GST_CAN_INLINE 1 -#elif defined(_MSC_VER) -# define GST_INLINE_FUNC extern __inline -# define GST_CAN_INLINE 1 -#else -# define GST_INLINE_FUNC extern -# undef GST_CAN_INLINE -#endif - -#if (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) && !defined(restrict) -# if defined(__GNUC__) && __GNUC__ >= 4 -# define restrict __restrict__ -# else -# define restrict -# endif -#endif - -G_END_DECLS - -#endif /* __GST_MACROS_H__ */ - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmemory.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmemory.h deleted file mode 100644 index 08208186..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmemory.h +++ /dev/null @@ -1,325 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Wim Taymans - * - * gstmemory.h: Header for memory blocks - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_MEMORY_H__ -#define __GST_MEMORY_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_MEMORY (gst_memory_get_type()) -GType gst_memory_get_type(void); - -typedef struct _GstMemory GstMemory; -typedef struct _GstAllocator GstAllocator; - -#define GST_MEMORY_CAST(mem) ((GstMemory *)(mem)) - -/** - * GstMemoryFlags: - * @GST_MEMORY_FLAG_READONLY: memory is readonly. It is not allowed to map the - * memory with #GST_MAP_WRITE. - * @GST_MEMORY_FLAG_NO_SHARE: memory must not be shared. Copies will have to be - * made when this memory needs to be shared between buffers. - * @GST_MEMORY_FLAG_ZERO_PREFIXED: the memory prefix is filled with 0 bytes - * @GST_MEMORY_FLAG_ZERO_PADDED: the memory padding is filled with 0 bytes - * @GST_MEMORY_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags for wrapped memory. - */ -typedef enum { - GST_MEMORY_FLAG_READONLY = GST_MINI_OBJECT_FLAG_LOCK_READONLY, - GST_MEMORY_FLAG_NO_SHARE = (GST_MINI_OBJECT_FLAG_LAST << 0), - GST_MEMORY_FLAG_ZERO_PREFIXED = (GST_MINI_OBJECT_FLAG_LAST << 1), - GST_MEMORY_FLAG_ZERO_PADDED = (GST_MINI_OBJECT_FLAG_LAST << 2), - - GST_MEMORY_FLAG_LAST = (GST_MINI_OBJECT_FLAG_LAST << 16) -} GstMemoryFlags; - -/** - * GST_MEMORY_FLAGS: - * @mem: a #GstMemory. - * - * A flags word containing #GstMemoryFlags flags set on @mem - */ -#define GST_MEMORY_FLAGS(mem) GST_MINI_OBJECT_FLAGS (mem) -/** - * GST_MEMORY_FLAG_IS_SET: - * @mem: a #GstMemory. - * @flag: the #GstMemoryFlags to check. - * - * Gives the status of a specific flag on a @mem. - */ -#define GST_MEMORY_FLAG_IS_SET(mem,flag) GST_MINI_OBJECT_FLAG_IS_SET (mem,flag) -/** - * GST_MEMORY_FLAG_UNSET: - * @mem: a #GstMemory. - * @flag: the #GstMemoryFlags to clear. - * - * Clear a specific flag on a @mem. - */ -#define GST_MEMORY_FLAG_UNSET(mem,flag) GST_MINI_OBJECT_FLAG_UNSET (mem, flag) - -/** - * GST_MEMORY_IS_READONLY: - * @mem: a #GstMemory. - * - * Check if @mem is readonly. - */ -#define GST_MEMORY_IS_READONLY(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_READONLY) -/** - * GST_MEMORY_IS_NO_SHARE: - * @mem: a #GstMemory. - * - * Check if @mem cannot be shared between buffers - */ -#define GST_MEMORY_IS_NO_SHARE(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_NO_SHARE) -/** - * GST_MEMORY_IS_ZERO_PREFIXED: - * @mem: a #GstMemory. - * - * Check if the prefix in @mem is 0 filled. - */ -#define GST_MEMORY_IS_ZERO_PREFIXED(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_ZERO_PREFIXED) -/** - * GST_MEMORY_IS_ZERO_PADDED: - * @mem: a #GstMemory. - * - * Check if the padding in @mem is 0 filled. - */ -#define GST_MEMORY_IS_ZERO_PADDED(mem) GST_MEMORY_FLAG_IS_SET(mem,GST_MEMORY_FLAG_ZERO_PADDED) - - -/** - * GstMemory: - * @mini_object: parent structure - * @allocator: pointer to the #GstAllocator - * @parent: parent memory block - * @maxsize: the maximum size allocated - * @align: the alignment of the memory - * @offset: the offset where valid data starts - * @size: the size of valid data - * - * Base structure for memory implementations. Custom memory will put this structure - * as the first member of their structure. - */ -struct _GstMemory { - GstMiniObject mini_object; - - GstAllocator *allocator; - - GstMemory *parent; - gsize maxsize; - gsize align; - gsize offset; - gsize size; -}; - -/** - * GstMapFlags: - * @GST_MAP_READ: map for read access - * @GST_MAP_WRITE: map for write access - * @GST_MAP_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags used when mapping memory - */ -typedef enum { - GST_MAP_READ = GST_LOCK_FLAG_READ, - GST_MAP_WRITE = GST_LOCK_FLAG_WRITE, - - GST_MAP_FLAG_LAST = (1 << 16) -} GstMapFlags; - -/** - * GST_MAP_READWRITE: - * - * GstMapFlags value alias for GST_MAP_READ | GST_MAP_WRITE - */ -#define GST_MAP_READWRITE (GST_MAP_READ | GST_MAP_WRITE) - - -/** - * GstMapInfo: - * @memory: a pointer to the mapped memory - * @flags: flags used when mapping the memory - * @data: (array length=size): a pointer to the mapped data - * @size: the valid size in @data - * @maxsize: the maximum bytes in @data - * @user_data: extra private user_data that the implementation of the memory - * can use to store extra info. - * - * A structure containing the result of a map operation such as - * gst_memory_map(). It contains the data and size. - */ -typedef struct { - GstMemory *memory; - GstMapFlags flags; - guint8 *data; - gsize size; - gsize maxsize; - /*< protected >*/ - gpointer user_data[4]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstMapInfo; - -/** - * GST_MAP_INFO_INIT: - * - * Initializer for #GstMapInfo - */ -#define GST_MAP_INFO_INIT { NULL, 0, NULL, 0, 0, } - -/** - * GstMemoryMapFunction: - * @mem: a #GstMemory - * @maxsize: size to map - * @flags: access mode for the memory - * - * Get the memory of @mem that can be accessed according to the mode specified - * in @flags. The function should return a pointer that contains at least - * @maxsize bytes. - * - * Returns: a pointer to memory of which at least @maxsize bytes can be - * accessed according to the access pattern in @flags. - */ -typedef gpointer (*GstMemoryMapFunction) (GstMemory *mem, gsize maxsize, GstMapFlags flags); - -/** - * GstMemoryUnmapFunction: - * @mem: a #GstMemory - * - * Return the pointer previously retrieved with gst_memory_map(). - * - * Returns: %TRUE on success. - */ -typedef void (*GstMemoryUnmapFunction) (GstMemory *mem); - -/** - * GstMemoryCopyFunction: - * @mem: a #GstMemory - * @offset: an offset - * @size: a size or -1 - * - * Copy @size bytes from @mem starting at @offset and return them wrapped in a - * new GstMemory object. - * If @size is set to -1, all bytes starting at @offset are copied. - * - * Returns: a new #GstMemory object wrapping a copy of the requested region in - * @mem. - */ -typedef GstMemory * (*GstMemoryCopyFunction) (GstMemory *mem, gssize offset, gssize size); - -/** - * GstMemoryShareFunction: - * @mem: a #GstMemory - * @offset: an offset - * @size: a size or -1 - * - * Share @size bytes from @mem starting at @offset and return them wrapped in a - * new GstMemory object. If @size is set to -1, all bytes starting at @offset are - * shared. This function does not make a copy of the bytes in @mem. - * - * Returns: a new #GstMemory object sharing the requested region in @mem. - */ -typedef GstMemory * (*GstMemoryShareFunction) (GstMemory *mem, gssize offset, gssize size); - -/** - * GstMemoryIsSpanFunction: - * @mem1: a #GstMemory - * @mem2: a #GstMemory - * @offset: a result offset - * - * Check if @mem1 and @mem2 occupy contiguous memory and return the offset of - * @mem1 in the parent buffer in @offset. - * - * Returns: %TRUE if @mem1 and @mem2 are in contiguous memory. - */ -typedef gboolean (*GstMemoryIsSpanFunction) (GstMemory *mem1, GstMemory *mem2, gsize *offset); - -void gst_memory_init (GstMemory *mem, GstMemoryFlags flags, - GstAllocator *allocator, GstMemory *parent, - gsize maxsize, gsize align, - gsize offset, gsize size); -/* refcounting */ -/** - * gst_memory_ref: - * @memory: The memory to refcount - * - * Increase the refcount of this memory. - * - * Returns: (transfer full): @memory (for convenience when doing assignments) - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMemory * gst_memory_ref (GstMemory * memory); -#endif - -static inline GstMemory * -gst_memory_ref (GstMemory * memory) -{ - return (GstMemory *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (memory)); -} - -/** - * gst_memory_unref: - * @memory: (transfer full): the memory to refcount - * - * Decrease the refcount of an memory, freeing it if the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_memory_unref (GstMemory * memory); -#endif - -static inline void -gst_memory_unref (GstMemory * memory) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (memory)); -} - -/* getting/setting memory properties */ -gsize gst_memory_get_sizes (GstMemory *mem, gsize *offset, gsize *maxsize); -void gst_memory_resize (GstMemory *mem, gssize offset, gsize size); - -#define gst_memory_lock(m,f) gst_mini_object_lock (GST_MINI_OBJECT_CAST (m), (f)) -#define gst_memory_unlock(m,f) gst_mini_object_unlock (GST_MINI_OBJECT_CAST (m), (f)) -#define gst_memory_is_writable(m) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (m)) -#define gst_memory_make_writable(m) GST_MEMORY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (m))) - -/* retrieving data */ -GstMemory * gst_memory_make_mapped (GstMemory *mem, GstMapInfo *info, GstMapFlags flags); -gboolean gst_memory_map (GstMemory *mem, GstMapInfo *info, GstMapFlags flags); -void gst_memory_unmap (GstMemory *mem, GstMapInfo *info); - -/* copy and subregions */ -GstMemory * gst_memory_copy (GstMemory *mem, gssize offset, gssize size); -GstMemory * gst_memory_share (GstMemory *mem, gssize offset, gssize size); - -/* span memory */ -gboolean gst_memory_is_span (GstMemory *mem1, GstMemory *mem2, gsize *offset); - -G_END_DECLS - -#endif /* __GST_MEMORY_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmessage.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmessage.h deleted file mode 100644 index 03286674..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmessage.h +++ /dev/null @@ -1,562 +0,0 @@ -/* GStreamer - * Copyright (C) 2004 Wim Taymans - * - * gstmessage.h: Header for GstMessage subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MESSAGE_H__ -#define __GST_MESSAGE_H__ - -G_BEGIN_DECLS - -typedef struct _GstMessage GstMessage; - -/** - * GstMessageType: - * @GST_MESSAGE_UNKNOWN: an undefined message - * @GST_MESSAGE_EOS: end-of-stream reached in a pipeline. The application will - * only receive this message in the PLAYING state and every time it sets a - * pipeline to PLAYING that is in the EOS state. The application can perform a - * flushing seek in the pipeline, which will undo the EOS state again. - * @GST_MESSAGE_ERROR: an error occured. When the application receives an error - * message it should stop playback of the pipeline and not assume that more - * data will be played. - * @GST_MESSAGE_WARNING: a warning occured. - * @GST_MESSAGE_INFO: an info message occured - * @GST_MESSAGE_TAG: a tag was found. - * @GST_MESSAGE_BUFFERING: the pipeline is buffering. When the application - * receives a buffering message in the PLAYING state for a non-live pipeline it - * must PAUSE the pipeline until the buffering completes, when the percentage - * field in the message is 100%. For live pipelines, no action must be - * performed and the buffering percentage can be used to inform the user about - * the progress. - * @GST_MESSAGE_STATE_CHANGED: a state change happened - * @GST_MESSAGE_STATE_DIRTY: an element changed state in a streaming thread. - * This message is deprecated. - * @GST_MESSAGE_STEP_DONE: a stepping operation finished. - * @GST_MESSAGE_CLOCK_PROVIDE: an element notifies its capability of providing - * a clock. This message is used internally and - * never forwarded to the application. - * @GST_MESSAGE_CLOCK_LOST: The current clock as selected by the pipeline became - * unusable. The pipeline will select a new clock on - * the next PLAYING state change. The application - * should set the pipeline to PAUSED and back to - * PLAYING when this message is received. - * @GST_MESSAGE_NEW_CLOCK: a new clock was selected in the pipeline. - * @GST_MESSAGE_STRUCTURE_CHANGE: the structure of the pipeline changed. This - * message is used internally and never forwarded to the application. - * @GST_MESSAGE_STREAM_STATUS: status about a stream, emitted when it starts, - * stops, errors, etc.. - * @GST_MESSAGE_APPLICATION: message posted by the application, possibly - * via an application-specific element. - * @GST_MESSAGE_ELEMENT: element-specific message, see the specific element's - * documentation - * @GST_MESSAGE_SEGMENT_START: pipeline started playback of a segment. This - * message is used internally and never forwarded to the application. - * @GST_MESSAGE_SEGMENT_DONE: pipeline completed playback of a segment. This - * message is forwarded to the application after all elements that posted - * @GST_MESSAGE_SEGMENT_START posted a GST_MESSAGE_SEGMENT_DONE message. - * @GST_MESSAGE_DURATION_CHANGED: The duration of a pipeline changed. The - * application can get the new duration with a duration query. - * @GST_MESSAGE_ASYNC_START: Posted by elements when they start an ASYNC - * #GstStateChange. This message is not forwarded to the application but is used - * internally. - * @GST_MESSAGE_ASYNC_DONE: Posted by elements when they complete an ASYNC - * #GstStateChange. The application will only receive this message from the toplevel - * pipeline. - * @GST_MESSAGE_LATENCY: Posted by elements when their latency changes. The - * application should recalculate and distribute a new latency. - * @GST_MESSAGE_REQUEST_STATE: Posted by elements when they want the pipeline to - * change state. This message is a suggestion to the application which can - * decide to perform the state change on (part of) the pipeline. - * @GST_MESSAGE_STEP_START: A stepping operation was started. - * @GST_MESSAGE_QOS: A buffer was dropped or an element changed its processing - * strategy for Quality of Service reasons. - * @GST_MESSAGE_PROGRESS: A progress message. - * @GST_MESSAGE_TOC: A new table of contents (TOC) was found or previously found TOC - * was updated. - * @GST_MESSAGE_RESET_TIME: Message to request resetting the pipeline's - * running time from the pipeline. This is an internal message which - * applications will likely never receive. - * @GST_MESSAGE_STREAM_START: Message indicating start of a new stream. Useful - * e.g. when using playbin in gapless playback mode, to get notified when - * the next title actually starts playing (which will be some time after - * the URI for the next title has been set). - * @GST_MESSAGE_ANY: mask for all of the above messages. - * - * The different message types that are available. - */ -/* NOTE: keep in sync with quark registration in gstmessage.c - * NOTE: keep GST_MESSAGE_ANY a valid gint to avoid compiler warnings. - */ -typedef enum -{ - GST_MESSAGE_UNKNOWN = 0, - GST_MESSAGE_EOS = (1 << 0), - GST_MESSAGE_ERROR = (1 << 1), - GST_MESSAGE_WARNING = (1 << 2), - GST_MESSAGE_INFO = (1 << 3), - GST_MESSAGE_TAG = (1 << 4), - GST_MESSAGE_BUFFERING = (1 << 5), - GST_MESSAGE_STATE_CHANGED = (1 << 6), - GST_MESSAGE_STATE_DIRTY = (1 << 7), - GST_MESSAGE_STEP_DONE = (1 << 8), - GST_MESSAGE_CLOCK_PROVIDE = (1 << 9), - GST_MESSAGE_CLOCK_LOST = (1 << 10), - GST_MESSAGE_NEW_CLOCK = (1 << 11), - GST_MESSAGE_STRUCTURE_CHANGE = (1 << 12), - GST_MESSAGE_STREAM_STATUS = (1 << 13), - GST_MESSAGE_APPLICATION = (1 << 14), - GST_MESSAGE_ELEMENT = (1 << 15), - GST_MESSAGE_SEGMENT_START = (1 << 16), - GST_MESSAGE_SEGMENT_DONE = (1 << 17), - GST_MESSAGE_DURATION_CHANGED = (1 << 18), - GST_MESSAGE_LATENCY = (1 << 19), - GST_MESSAGE_ASYNC_START = (1 << 20), - GST_MESSAGE_ASYNC_DONE = (1 << 21), - GST_MESSAGE_REQUEST_STATE = (1 << 22), - GST_MESSAGE_STEP_START = (1 << 23), - GST_MESSAGE_QOS = (1 << 24), - GST_MESSAGE_PROGRESS = (1 << 25), - GST_MESSAGE_TOC = (1 << 26), - GST_MESSAGE_RESET_TIME = (1 << 27), - GST_MESSAGE_STREAM_START = (1 << 28), - GST_MESSAGE_ANY = ~0 -} GstMessageType; - -#include -#include -#include -#include -#include -#include -#include - -#define GST_TYPE_MESSAGE (gst_message_get_type()) -#define GST_IS_MESSAGE(obj) (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_MESSAGE)) -#define GST_MESSAGE_CAST(obj) ((GstMessage*)(obj)) -#define GST_MESSAGE(obj) (GST_MESSAGE_CAST(obj)) - -/* the lock is used to handle the synchronous handling of messages, - * the emiting thread is block until the handling thread processed - * the message using this mutex/cond pair */ -#define GST_MESSAGE_GET_LOCK(message) (&GST_MESSAGE_CAST(message)->lock) -#define GST_MESSAGE_LOCK(message) g_mutex_lock(GST_MESSAGE_GET_LOCK(message)) -#define GST_MESSAGE_UNLOCK(message) g_mutex_unlock(GST_MESSAGE_GET_LOCK(message)) -#define GST_MESSAGE_GET_COND(message) (&GST_MESSAGE_CAST(message)->cond) -#define GST_MESSAGE_WAIT(message) g_cond_wait(GST_MESSAGE_GET_COND(message),GST_MESSAGE_GET_LOCK(message)) -#define GST_MESSAGE_SIGNAL(message) g_cond_signal(GST_MESSAGE_GET_COND(message)) - -/** - * GST_MESSAGE_TYPE: - * @message: a #GstMessage - * - * Get the #GstMessageType of @message. - */ -#define GST_MESSAGE_TYPE(message) (GST_MESSAGE_CAST(message)->type) -/** - * GST_MESSAGE_TYPE_NAME: - * @message: a #GstMessage - * - * Get a constant string representation of the #GstMessageType of @message. - */ -#define GST_MESSAGE_TYPE_NAME(message) gst_message_type_get_name(GST_MESSAGE_TYPE(message)) -/** - * GST_MESSAGE_TIMESTAMP: - * @message: a #GstMessage - * - * Get the timestamp of @message. This is the timestamp when the message - * was created. - */ -#define GST_MESSAGE_TIMESTAMP(message) (GST_MESSAGE_CAST(message)->timestamp) -/** - * GST_MESSAGE_SRC: - * @message: a #GstMessage - * - * Get the object that posted @message. - */ -#define GST_MESSAGE_SRC(message) (GST_MESSAGE_CAST(message)->src) - -/** - * GST_MESSAGE_SEQNUM: - * @message: a #GstMessage - * - * Get the sequence number of @message. - */ -#define GST_MESSAGE_SEQNUM(message) (GST_MESSAGE_CAST(message)->seqnum) - -/** - * GST_MESSAGE_SRC_NAME: - * @message: a #GstMessage - * - * Get the name of the object that posted @message. Returns "(NULL)" if - * the message has no source object set. - */ -#define GST_MESSAGE_SRC_NAME(message) (GST_MESSAGE_SRC(message) ? \ - GST_OBJECT_NAME (GST_MESSAGE_SRC(message)) : "(NULL)") - -/** - * GstStructureChangeType: - * @GST_STRUCTURE_CHANGE_TYPE_PAD_LINK: Pad linking is starting or done. - * @GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK: Pad unlinking is starting or done. - * - * The type of a %GST_MESSAGE_STRUCTURE_CHANGE. - */ -typedef enum { - GST_STRUCTURE_CHANGE_TYPE_PAD_LINK = 0, - GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK = 1 -} GstStructureChangeType; - -/** - * GstStreamStatusType: - * @GST_STREAM_STATUS_TYPE_CREATE: A new thread need to be created. - * @GST_STREAM_STATUS_TYPE_ENTER: a thread entered its loop function - * @GST_STREAM_STATUS_TYPE_LEAVE: a thread left its loop function - * @GST_STREAM_STATUS_TYPE_DESTROY: a thread is destroyed - * @GST_STREAM_STATUS_TYPE_START: a thread is started - * @GST_STREAM_STATUS_TYPE_PAUSE: a thread is paused - * @GST_STREAM_STATUS_TYPE_STOP: a thread is stopped - * - * The type of a %GST_MESSAGE_STREAM_STATUS. The stream status messages inform the - * application of new streaming threads and their status. - */ -typedef enum { - GST_STREAM_STATUS_TYPE_CREATE = 0, - GST_STREAM_STATUS_TYPE_ENTER = 1, - GST_STREAM_STATUS_TYPE_LEAVE = 2, - GST_STREAM_STATUS_TYPE_DESTROY = 3, - - GST_STREAM_STATUS_TYPE_START = 8, - GST_STREAM_STATUS_TYPE_PAUSE = 9, - GST_STREAM_STATUS_TYPE_STOP = 10 -} GstStreamStatusType; - -/** - * GstProgressType: - * @GST_PROGRESS_TYPE_START: A new task started. - * @GST_PROGRESS_TYPE_CONTINUE: A task completed and a new one continues. - * @GST_PROGRESS_TYPE_COMPLETE: A task completed. - * @GST_PROGRESS_TYPE_CANCELED: A task was canceled. - * @GST_PROGRESS_TYPE_ERROR: A task caused an error. An error message is also - * posted on the bus. - * - * The type of a %GST_MESSAGE_PROGRESS. The progress messages inform the - * application of the status of assynchronous tasks. - */ -typedef enum { - GST_PROGRESS_TYPE_START = 0, - GST_PROGRESS_TYPE_CONTINUE = 1, - GST_PROGRESS_TYPE_COMPLETE = 2, - GST_PROGRESS_TYPE_CANCELED = 3, - GST_PROGRESS_TYPE_ERROR = 4 -} GstProgressType; - -/** - * GstMessage: - * @mini_object: the parent structure - * @type: the #GstMessageType of the message - * @timestamp: the timestamp of the message - * @src: the src of the message - * @seqnum: the sequence number of the message - * - * A #GstMessage. - */ -struct _GstMessage -{ - GstMiniObject mini_object; - - /*< public > *//* with COW */ - GstMessageType type; - guint64 timestamp; - GstObject *src; - guint32 seqnum; - - /*< private >*//* with MESSAGE_LOCK */ - GMutex lock; /* lock and cond for async delivery */ - GCond cond; -}; - -GType gst_message_get_type (void); - -const gchar* gst_message_type_get_name (GstMessageType type); -GQuark gst_message_type_to_quark (GstMessageType type); - -/* refcounting */ -/** - * gst_message_ref: - * @msg: the message to ref - * - * Convenience macro to increase the reference count of the message. - * - * Returns: @msg (for convenience when doing assignments) - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMessage * gst_message_ref (GstMessage * msg); -#endif - -static inline GstMessage * -gst_message_ref (GstMessage * msg) -{ - return (GstMessage *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (msg)); -} - -/** - * gst_message_unref: - * @msg: the message to unref - * - * Convenience macro to decrease the reference count of the message, possibly - * freeing it. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_message_unref (GstMessage * msg); -#endif - -static inline void -gst_message_unref (GstMessage * msg) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (msg)); -} - -/* copy message */ -/** - * gst_message_copy: - * @msg: the message to copy - * - * Creates a copy of the message. Returns a copy of the message. - * - * Returns: (transfer full): a new copy of @msg. - * - * MT safe - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMessage * gst_message_copy (const GstMessage * msg); -#endif - -static inline GstMessage * -gst_message_copy (const GstMessage * msg) -{ - return GST_MESSAGE_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (msg))); -} - -/** - * gst_message_is_writable: - * @msg: a #GstMessage - * - * Tests if you can safely write into a message's structure or validly - * modify the seqnum and timestamp fields. - */ -#define gst_message_is_writable(msg) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (msg)) -/** - * gst_message_make_writable: - * @msg: (transfer full): the message to make writable - * - * Checks if a message is writable. If not, a writable copy is made and - * returned. - * - * Returns: (transfer full): a message (possibly a duplicate) that is writable. - * - * MT safe - */ -#define gst_message_make_writable(msg) GST_MESSAGE_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (msg))) -/** - * gst_message_replace: - * @old_message: (inout) (transfer full): pointer to a pointer to a #GstMessage - * to be replaced. - * @new_message: (allow-none) (transfer none): pointer to a #GstMessage that will - * replace the message pointed to by @old_message. - * - * Modifies a pointer to a #GstMessage to point to a different #GstMessage. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * message is unreffed, the new one is reffed). - * - * Either @new_message or the #GstMessage pointed to by @old_message may be NULL. - * - * Returns: TRUE if @new_message was different from @old_message - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_message_replace (GstMessage **old_message, GstMessage *new_message); -#endif - -static inline gboolean -gst_message_replace (GstMessage **old_message, GstMessage *new_message) -{ - return gst_mini_object_replace ((GstMiniObject **) old_message, (GstMiniObject *) new_message); -} - - -/* custom messages */ -GstMessage * gst_message_new_custom (GstMessageType type, - GstObject * src, - GstStructure * structure) G_GNUC_MALLOC; -const GstStructure * - gst_message_get_structure (GstMessage *message); - -gboolean gst_message_has_name (GstMessage *message, const gchar *name); - -/* identifiers for events and messages */ -guint32 gst_message_get_seqnum (GstMessage *message); -void gst_message_set_seqnum (GstMessage *message, guint32 seqnum); - -/* EOS */ -GstMessage * gst_message_new_eos (GstObject * src) G_GNUC_MALLOC; - -/* ERROR */ - -GstMessage * gst_message_new_error (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC; -void gst_message_parse_error (GstMessage *message, GError **gerror, gchar **debug); - -/* WARNING */ -GstMessage * gst_message_new_warning (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC; -void gst_message_parse_warning (GstMessage *message, GError **gerror, gchar **debug); - -/* INFO */ -GstMessage * gst_message_new_info (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC; -void gst_message_parse_info (GstMessage *message, GError **gerror, gchar **debug); - -/* TAG */ -GstMessage * gst_message_new_tag (GstObject * src, GstTagList * tag_list) G_GNUC_MALLOC; -void gst_message_parse_tag (GstMessage *message, GstTagList **tag_list); - -/* BUFFERING */ -GstMessage * gst_message_new_buffering (GstObject * src, gint percent) G_GNUC_MALLOC; -void gst_message_parse_buffering (GstMessage *message, gint *percent); -void gst_message_set_buffering_stats (GstMessage *message, GstBufferingMode mode, - gint avg_in, gint avg_out, - gint64 buffering_left); -void gst_message_parse_buffering_stats (GstMessage *message, GstBufferingMode *mode, - gint *avg_in, gint *avg_out, - gint64 *buffering_left); - -/* STATE_CHANGED */ -GstMessage * gst_message_new_state_changed (GstObject * src, GstState oldstate, - GstState newstate, GstState pending) G_GNUC_MALLOC; -void gst_message_parse_state_changed (GstMessage *message, GstState *oldstate, - GstState *newstate, GstState *pending); - -/* STATE_DIRTY */ -GstMessage * gst_message_new_state_dirty (GstObject * src) G_GNUC_MALLOC; - -/* STEP_DONE */ -GstMessage * gst_message_new_step_done (GstObject * src, GstFormat format, guint64 amount, - gdouble rate, gboolean flush, gboolean intermediate, - guint64 duration, gboolean eos) G_GNUC_MALLOC; -void gst_message_parse_step_done (GstMessage * message, GstFormat *format, guint64 *amount, - gdouble *rate, gboolean *flush, gboolean *intermediate, - guint64 *duration, gboolean *eos); -/* CLOCK_PROVIDE */ -GstMessage * gst_message_new_clock_provide (GstObject * src, GstClock *clock, gboolean ready) G_GNUC_MALLOC; -void gst_message_parse_clock_provide (GstMessage *message, GstClock **clock, - gboolean *ready); - -/* CLOCK_LOST */ -GstMessage * gst_message_new_clock_lost (GstObject * src, GstClock *clock) G_GNUC_MALLOC; -void gst_message_parse_clock_lost (GstMessage *message, GstClock **clock); - -/* NEW_CLOCK */ -GstMessage * gst_message_new_new_clock (GstObject * src, GstClock *clock) G_GNUC_MALLOC; -void gst_message_parse_new_clock (GstMessage *message, GstClock **clock); - -/* APPLICATION */ -GstMessage * gst_message_new_application (GstObject * src, GstStructure * structure) G_GNUC_MALLOC; - -/* ELEMENT */ -GstMessage * gst_message_new_element (GstObject * src, GstStructure * structure) G_GNUC_MALLOC; - -/* SEGMENT_START */ -GstMessage * gst_message_new_segment_start (GstObject * src, GstFormat format, gint64 position) G_GNUC_MALLOC; -void gst_message_parse_segment_start (GstMessage *message, GstFormat *format, - gint64 *position); - -/* SEGMENT_DONE */ -GstMessage * gst_message_new_segment_done (GstObject * src, GstFormat format, gint64 position) G_GNUC_MALLOC; -void gst_message_parse_segment_done (GstMessage *message, GstFormat *format, - gint64 *position); - -/* DURATION_CHANGED */ -GstMessage * gst_message_new_duration_changed (GstObject * src) G_GNUC_MALLOC; - -/* LATENCY */ -GstMessage * gst_message_new_latency (GstObject * src) G_GNUC_MALLOC; - -/* ASYNC_START */ -GstMessage * gst_message_new_async_start (GstObject * src) G_GNUC_MALLOC; - -/* ASYNC_DONE */ -GstMessage * gst_message_new_async_done (GstObject * src, GstClockTime running_time) G_GNUC_MALLOC; -void gst_message_parse_async_done (GstMessage *message, GstClockTime *running_time); - -/* STRUCTURE CHANGE */ -GstMessage * gst_message_new_structure_change (GstObject * src, GstStructureChangeType type, - GstElement *owner, gboolean busy) G_GNUC_MALLOC; -void gst_message_parse_structure_change (GstMessage *message, GstStructureChangeType *type, - GstElement **owner, gboolean *busy); - -/* STREAM STATUS */ -GstMessage * gst_message_new_stream_status (GstObject * src, GstStreamStatusType type, - GstElement *owner) G_GNUC_MALLOC; -void gst_message_parse_stream_status (GstMessage *message, GstStreamStatusType *type, - GstElement **owner); -void gst_message_set_stream_status_object (GstMessage *message, const GValue *object); -const GValue * gst_message_get_stream_status_object (GstMessage *message); - -/* REQUEST_STATE */ -GstMessage * gst_message_new_request_state (GstObject * src, GstState state) G_GNUC_MALLOC; -void gst_message_parse_request_state (GstMessage * message, GstState *state); - -/* STEP_START */ -GstMessage * gst_message_new_step_start (GstObject * src, gboolean active, GstFormat format, - guint64 amount, gdouble rate, gboolean flush, - gboolean intermediate) G_GNUC_MALLOC; -void gst_message_parse_step_start (GstMessage * message, gboolean *active, GstFormat *format, - guint64 *amount, gdouble *rate, gboolean *flush, - gboolean *intermediate); - -/* QOS */ -GstMessage * gst_message_new_qos (GstObject * src, gboolean live, guint64 running_time, - guint64 stream_time, guint64 timestamp, guint64 duration) G_GNUC_MALLOC; -void gst_message_set_qos_values (GstMessage * message, gint64 jitter, gdouble proportion, - gint quality); -void gst_message_set_qos_stats (GstMessage * message, GstFormat format, guint64 processed, - guint64 dropped); -void gst_message_parse_qos (GstMessage * message, gboolean * live, guint64 * running_time, - guint64 * stream_time, guint64 * timestamp, guint64 * duration); -void gst_message_parse_qos_values (GstMessage * message, gint64 * jitter, gdouble * proportion, - gint * quality); -void gst_message_parse_qos_stats (GstMessage * message, GstFormat * format, guint64 * processed, - guint64 * dropped); -/* PROGRESS */ -GstMessage * gst_message_new_progress (GstObject * src, GstProgressType type, const gchar *code, - const gchar *text) G_GNUC_MALLOC; -void gst_message_parse_progress (GstMessage * message, GstProgressType * type, gchar ** code, - gchar ** text); - -/* TOC */ -GstMessage * gst_message_new_toc (GstObject *src, GstToc *toc, gboolean updated); -void gst_message_parse_toc (GstMessage *message, GstToc **toc, gboolean *updated); - -/* RESET_TIME */ -GstMessage * gst_message_new_reset_time (GstObject * src, GstClockTime running_time) G_GNUC_MALLOC; -void gst_message_parse_reset_time (GstMessage *message, GstClockTime *running_time); - -/* STREAM_START */ -GstMessage * gst_message_new_stream_start (GstObject * src) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_MESSAGE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmeta.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmeta.h deleted file mode 100644 index e6d4f006..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstmeta.h +++ /dev/null @@ -1,216 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Wim Taymans - * - * gstmeta.h: Header for Metadata structures - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_META_H__ -#define __GST_META_H__ - -G_BEGIN_DECLS - -typedef struct _GstMeta GstMeta; -typedef struct _GstMetaInfo GstMetaInfo; - -#define GST_META_CAST(meta) ((GstMeta *)(meta)) - -/** - * GstMetaFlags: - * @GST_META_FLAG_NONE: no flags - * @GST_META_FLAG_READONLY: metadata should not be modified - * @GST_META_FLAG_POOLED: metadata is managed by a bufferpool - * @GST_META_FLAG_LOCKED: metadata should not be removed - * @GST_META_FLAG_LAST: additional flags can be added starting from this flag. - * - * Extra metadata flags. - */ -typedef enum { - GST_META_FLAG_NONE = 0, - GST_META_FLAG_READONLY = (1 << 0), - GST_META_FLAG_POOLED = (1 << 1), - GST_META_FLAG_LOCKED = (1 << 2), - - GST_META_FLAG_LAST = (1 << 16) -} GstMetaFlags; - -/** - * GST_META_FLAGS: - * @meta: a #GstMeta. - * - * A flags word containing #GstMetaFlags flags set on @meta - */ -#define GST_META_FLAGS(meta) (GST_META_CAST (meta)->flags) -/** - * GST_META_FLAG_IS_SET: - * @meta: a #GstMeta. - * @flag: the #GstMetaFlags to check. - * - * Gives the status of a specific flag on a metadata. - */ -#define GST_META_FLAG_IS_SET(meta,flag) !!(GST_META_FLAGS (meta) & (flag)) -/** - * GST_META_FLAG_SET: - * @meta: a #GstMeta. - * @flag: the #GstMetaFlags to set. - * - * Sets a metadata flag on a metadata. - */ -#define GST_META_FLAG_SET(meta,flag) (GST_META_FLAGS (meta) |= (flag)) -/** - * GST_META_FLAG_UNSET: - * @meta: a #GstMeta. - * @flag: the #GstMetaFlags to clear. - * - * Clears a metadata flag. - */ -#define GST_META_FLAG_UNSET(meta,flag) (GST_META_FLAGS (meta) &= ~(flag)) - -/** - * GstMeta: - * @flags: extra flags for the metadata - * @info: pointer to the #GstMetaInfo - * - * Base structure for metadata. Custom metadata will put this structure - * as the first member of their structure. - */ -struct _GstMeta { - GstMetaFlags flags; - const GstMetaInfo *info; -}; - -/** - * GstMetaInitFunction: - * @meta: a #GstMeta - * @params: parameters passed to the init function - * @buffer: a #GstBuffer - * - * Function called when @meta is initialized in @buffer. - */ -typedef gboolean (*GstMetaInitFunction) (GstMeta *meta, gpointer params, GstBuffer *buffer); - -/** - * GstMetaFreeFunction: - * @meta: a #GstMeta - * @buffer: a #GstBuffer - * - * Function called when @meta is freed in @buffer. - */ -typedef void (*GstMetaFreeFunction) (GstMeta *meta, GstBuffer *buffer); - -/** - * gst_meta_transform_copy: - * - * GQuark for the "gst-copy" transform. - */ -GST_EXPORT GQuark _gst_meta_transform_copy; - -/** - * GST_META_TRANSFORM_IS_COPY: - * @type: a transform type - * - * Check if the transform type is a copy transform - */ -#define GST_META_TRANSFORM_IS_COPY(type) ((type) == _gst_meta_transform_copy) - -/** - * GstMetaTransformCopy: - * @region: %TRUE if only region is copied - * @offset: the offset to copy, 0 if @region is %FALSE, otherwise > 0 - * @size: the size to copy, -1 or the buffer size when @region is %FALSE - * - * Extra data passed to a "gst-copy" transform #GstMetaTransformFunction. - */ -typedef struct { - gboolean region; - gsize offset; - gsize size; -} GstMetaTransformCopy; - -/** - * GstMetaTransformFunction: - * @transbuf: a #GstBuffer - * @meta: a #GstMeta - * @buffer: a #GstBuffer - * @type: the transform type - * @data: transform specific data. - * - * Function called for each @meta in @buffer as a result of performing a - * transformation on @transbuf. Additional @type specific transform data - * is passed to the function as @data. - * - * Implementations should check the @type of the transform and parse - * additional type specific fields in @data that should be used to update - * the metadata on @transbuf. - * - * Returns: %TRUE if the transform could be performed - */ -typedef gboolean (*GstMetaTransformFunction) (GstBuffer *transbuf, - GstMeta *meta, GstBuffer *buffer, - GQuark type, gpointer data); - -/** - * GstMetaInfo: - * @api: tag indentifying the metadata structure and api - * @type: type indentifying the implementor of the api - * @size: size of the metadata - * @init_func: function for initializing the metadata - * @free_func: function for freeing the metadata - * @transform_func: function for transforming the metadata - * - * The #GstMetaInfo provides information about a specific metadata - * structure. - */ -struct _GstMetaInfo { - GType api; - GType type; - gsize size; - - GstMetaInitFunction init_func; - GstMetaFreeFunction free_func; - GstMetaTransformFunction transform_func; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_meta_api_type_register (const gchar *api, - const gchar **tags); -gboolean gst_meta_api_type_has_tag (GType api, GQuark tag); - -const GstMetaInfo * gst_meta_register (GType api, const gchar *impl, - gsize size, - GstMetaInitFunction init_func, - GstMetaFreeFunction free_func, - GstMetaTransformFunction transform_func); -const GstMetaInfo * gst_meta_get_info (const gchar * impl); - -/* some default tags */ -GST_EXPORT GQuark _gst_meta_tag_memory; - -/** - * GST_META_TAG_MEMORY: - * - * Metadata tagged with this tag depends on the particular memory - * or buffer that it is on. - */ -#define GST_META_TAG_MEMORY (_gst_meta_tag_memory) - -G_END_DECLS - -#endif /* __GST_META_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstminiobject.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstminiobject.h deleted file mode 100644 index f873b7a8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstminiobject.h +++ /dev/null @@ -1,275 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 David Schleef - * - * gstminiobject.h: Header for GstMiniObject - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_MINI_OBJECT_H__ -#define __GST_MINI_OBJECT_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_IS_MINI_OBJECT_TYPE(obj,type) ((obj) && GST_MINI_OBJECT_TYPE(obj) == (type)) -#define GST_MINI_OBJECT_CAST(obj) ((GstMiniObject*)(obj)) -#define GST_MINI_OBJECT_CONST_CAST(obj) ((const GstMiniObject*)(obj)) -#define GST_MINI_OBJECT(obj) (GST_MINI_OBJECT_CAST(obj)) - -typedef struct _GstMiniObject GstMiniObject; - -/** - * GstMiniObjectCopyFunction: - * @obj: MiniObject to copy - * - * Function prototype for methods to create copies of instances. - * - * Returns: reference to cloned instance. - */ -typedef GstMiniObject * (*GstMiniObjectCopyFunction) (const GstMiniObject *obj); -/** - * GstMiniObjectDisposeFunction: - * @obj: MiniObject to dispose - * - * Function prototype for when a miniobject has lost its last refcount. - * Implementation of the mini object are allowed to revive the - * passed object by doing a gst_mini_object_ref(). If the object is not - * revived after the dispose function, the function should return %TRUE - * and the memory associated with the object is freed. - * - * Returns: %TRUE if the object should be cleaned up. - */ -typedef gboolean (*GstMiniObjectDisposeFunction) (GstMiniObject *obj); -/** - * GstMiniObjectFreeFunction: - * @obj: MiniObject to free - * - * Virtual function prototype for methods to free ressources used by - * mini-objects. - */ -typedef void (*GstMiniObjectFreeFunction) (GstMiniObject *obj); - - /** - * GstMiniObjectNotify: - * @user_data: data that was provided when the notify was added - * @obj: the mini object - * - * A #GstMiniObjectNotify function can be added to a mini object as a - * callback that gets triggered when gst_mini_object_unref() drops the - * last ref and @obj is about to be freed. - */ -typedef void (*GstMiniObjectNotify) (gpointer user_data, GstMiniObject * obj); - -/** - * GST_MINI_OBJECT_TYPE: - * @obj: MiniObject to return type for. - * - * This macro returns the type of the mini-object. - */ -#define GST_MINI_OBJECT_TYPE(obj) (GST_MINI_OBJECT_CAST(obj)->type) - -/** - * GST_MINI_OBJECT_FLAGS: - * @obj: MiniObject to return flags for. - * - * This macro returns the entire set of flags for the mini-object. - */ -#define GST_MINI_OBJECT_FLAGS(obj) (GST_MINI_OBJECT_CAST(obj)->flags) -/** - * GST_MINI_OBJECT_FLAG_IS_SET: - * @obj: MiniObject to check for flags. - * @flag: Flag to check for - * - * This macro checks to see if the given flag is set. - */ -#define GST_MINI_OBJECT_FLAG_IS_SET(obj,flag) !!(GST_MINI_OBJECT_FLAGS (obj) & (flag)) -/** - * GST_MINI_OBJECT_FLAG_SET: - * @obj: MiniObject to set flag in. - * @flag: Flag to set, can by any number of bits in guint32. - * - * This macro sets the given bits. - */ -#define GST_MINI_OBJECT_FLAG_SET(obj,flag) (GST_MINI_OBJECT_FLAGS (obj) |= (flag)) -/** - * GST_MINI_OBJECT_FLAG_UNSET: - * @obj: MiniObject to unset flag in. - * @flag: Flag to set, must be a single bit in guint32. - * - * This macro usets the given bits. - */ -#define GST_MINI_OBJECT_FLAG_UNSET(obj,flag) (GST_MINI_OBJECT_FLAGS (obj) &= ~(flag)) - -/** - * GstMiniObjectFlags: - * @GST_MINI_OBJECT_FLAG_LOCKABLE: the object can be locked and unlocked with - * gst_mini_object_lock() and gst_mini_object_unlock(). - * @GST_MINI_OBJECT_FLAG_LOCK_READONLY: the object is permanently locked in - * READONLY mode. Only read locks can be performed on the object. - * @GST_MINI_OBJECT_FLAG_LAST: first flag that can be used by subclasses. - * - * Flags for the mini object - */ -typedef enum -{ - GST_MINI_OBJECT_FLAG_LOCKABLE = (1 << 0), - GST_MINI_OBJECT_FLAG_LOCK_READONLY = (1 << 1), - /* padding */ - GST_MINI_OBJECT_FLAG_LAST = (1 << 4) -} GstMiniObjectFlags; - -/** - * GST_MINI_OBJECT_IS_LOCKABLE: - * @obj: a #GstMiniObject - * - * Check if @obj is lockable. A lockable object can be locked and unlocked with - * gst_mini_object_lock() and gst_mini_object_unlock(). - */ -#define GST_MINI_OBJECT_IS_LOCKABLE(obj) GST_MINI_OBJECT_FLAG_IS_SET(obj, GST_MINI_OBJECT_FLAG_LOCKABLE) - -/** - * GstLockFlags: - * @GST_LOCK_FLAG_READ: lock for read access - * @GST_LOCK_FLAG_WRITE: lock for write access - * @GST_LOCK_FLAG_EXCLUSIVE: lock for exclusive access - * @GST_LOCK_FLAG_LAST: first flag that can be used for custom purposes - * - * Flags used when locking miniobjects - */ -typedef enum { - GST_LOCK_FLAG_READ = (1 << 0), - GST_LOCK_FLAG_WRITE = (1 << 1), - GST_LOCK_FLAG_EXCLUSIVE = (1 << 2), - - GST_LOCK_FLAG_LAST = (1 << 8) -} GstLockFlags; - -/** - * GST_LOCK_FLAG_READWRITE: - * - * GstLockFlags value alias for GST_LOCK_FLAG_READ | GST_LOCK_FLAG_WRITE - */ -#define GST_LOCK_FLAG_READWRITE (GST_LOCK_FLAG_READ | GST_LOCK_FLAG_WRITE) - -/** - * GST_MINI_OBJECT_REFCOUNT: - * @obj: a #GstMiniObject - * - * Get access to the reference count field of the mini-object. - */ -#define GST_MINI_OBJECT_REFCOUNT(obj) ((GST_MINI_OBJECT_CAST(obj))->refcount) -/** - * GST_MINI_OBJECT_REFCOUNT_VALUE: - * @obj: a #GstMiniObject - * - * Get the reference count value of the mini-object. - */ -#define GST_MINI_OBJECT_REFCOUNT_VALUE(obj) (g_atomic_int_get (&(GST_MINI_OBJECT_CAST(obj))->refcount)) - -/** - * GstMiniObject: - * @type: the GType of the object - * @refcount: atomic refcount - * @lockstate: atomic state of the locks - * @flags: extra flags. - * @copy: a copy function - * @dispose: a dispose function - * @free: the free function - * - * Base class for refcounted lightweight objects. - * Ref Func: gst_mini_object_ref - * Unref Func: gst_mini_object_unref - * Set Value Func: g_value_set_boxed - * Get Value Func: g_value_get_boxed - */ -struct _GstMiniObject { - GType type; - - /*< public >*/ /* with COW */ - gint refcount; - gint lockstate; - guint flags; - - GstMiniObjectCopyFunction copy; - GstMiniObjectDisposeFunction dispose; - GstMiniObjectFreeFunction free; - - /* < private > */ - /* Used to keep track of weak ref notifies and qdata */ - guint n_qdata; - gpointer qdata; -}; - -void gst_mini_object_init (GstMiniObject *mini_object, - guint flags, GType type, - GstMiniObjectCopyFunction copy_func, - GstMiniObjectDisposeFunction dispose_func, - GstMiniObjectFreeFunction free_func); - - -/* refcounting */ -GstMiniObject * gst_mini_object_ref (GstMiniObject *mini_object); -void gst_mini_object_unref (GstMiniObject *mini_object); - -void gst_mini_object_weak_ref (GstMiniObject *object, - GstMiniObjectNotify notify, - gpointer data); -void gst_mini_object_weak_unref (GstMiniObject *object, - GstMiniObjectNotify notify, - gpointer data); - -/* locking */ -gboolean gst_mini_object_lock (GstMiniObject *object, GstLockFlags flags); -void gst_mini_object_unlock (GstMiniObject *object, GstLockFlags flags); - -gboolean gst_mini_object_is_writable (const GstMiniObject *mini_object); -GstMiniObject * gst_mini_object_make_writable (GstMiniObject *mini_object); - -/* copy */ -GstMiniObject * gst_mini_object_copy (const GstMiniObject *mini_object) G_GNUC_MALLOC; - - -void gst_mini_object_set_qdata (GstMiniObject *object, GQuark quark, - gpointer data, GDestroyNotify destroy); -gpointer gst_mini_object_get_qdata (GstMiniObject *object, GQuark quark); -gpointer gst_mini_object_steal_qdata (GstMiniObject *object, GQuark quark); - - -gboolean gst_mini_object_replace (GstMiniObject **olddata, GstMiniObject *newdata); -gboolean gst_mini_object_take (GstMiniObject **olddata, GstMiniObject *newdata); -GstMiniObject * gst_mini_object_steal (GstMiniObject **olddata); - -/** - * GST_DEFINE_MINI_OBJECT_TYPE: - * @TypeName: name of the new type in CamelCase - * @type_name: name of the new type - * - * Define a new mini-object type with the given name - */ -#define GST_DEFINE_MINI_OBJECT_TYPE(TypeName,type_name) \ - G_DEFINE_BOXED_TYPE(TypeName,type_name, \ - (GBoxedCopyFunc) gst_mini_object_ref, \ - (GBoxedFreeFunc) gst_mini_object_unref) - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstobject.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstobject.h deleted file mode 100644 index 6c9f9f5c..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstobject.h +++ /dev/null @@ -1,267 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstobject.h: Header for base GstObject - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_OBJECT_H__ -#define __GST_OBJECT_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_OBJECT (gst_object_get_type ()) -#define GST_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_OBJECT)) -#define GST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_OBJECT)) -#define GST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_OBJECT, GstObjectClass)) -#define GST_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_OBJECT, GstObject)) -#define GST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_OBJECT, GstObjectClass)) -#define GST_OBJECT_CAST(obj) ((GstObject*)(obj)) -#define GST_OBJECT_CLASS_CAST(klass) ((GstObjectClass*)(klass)) - -/** - * GstObjectFlags: - * @GST_OBJECT_FLAG_LAST: subclasses can add additional flags starting from this flag - * - * The standard flags that an gstobject may have. - */ -typedef enum -{ - /* padding */ - GST_OBJECT_FLAG_LAST = (1<<4) -} GstObjectFlags; - -/** - * GST_OBJECT_REFCOUNT: - * @obj: a #GstObject - * - * Get access to the reference count field of the object. - */ -#define GST_OBJECT_REFCOUNT(obj) (((GObject*)(obj))->ref_count) -/** - * GST_OBJECT_REFCOUNT_VALUE: - * @obj: a #GstObject - * - * Get the reference count value of the object. - */ -#define GST_OBJECT_REFCOUNT_VALUE(obj) g_atomic_int_get ((gint *) &GST_OBJECT_REFCOUNT(obj)) - -/* we do a GST_OBJECT_CAST to avoid type checking, better call these - * function with a valid object! */ - -/** - * GST_OBJECT_GET_LOCK: - * @obj: a #GstObject - * - * Acquire a reference to the mutex of this object. - */ -#define GST_OBJECT_GET_LOCK(obj) (&GST_OBJECT_CAST(obj)->lock) -/** - * GST_OBJECT_LOCK: - * @obj: a #GstObject to lock - * - * This macro will obtain a lock on the object, making serialization possible. - * It blocks until the lock can be obtained. - */ -#define GST_OBJECT_LOCK(obj) g_mutex_lock(GST_OBJECT_GET_LOCK(obj)) -/** - * GST_OBJECT_TRYLOCK: - * @obj: a #GstObject. - * - * This macro will try to obtain a lock on the object, but will return with - * FALSE if it can't get it immediately. - */ -#define GST_OBJECT_TRYLOCK(obj) g_mutex_trylock(GST_OBJECT_GET_LOCK(obj)) -/** - * GST_OBJECT_UNLOCK: - * @obj: a #GstObject to unlock. - * - * This macro releases a lock on the object. - */ -#define GST_OBJECT_UNLOCK(obj) g_mutex_unlock(GST_OBJECT_GET_LOCK(obj)) - - -/** - * GST_OBJECT_NAME: - * @obj: a #GstObject - * - * Get the name of this object - */ -#define GST_OBJECT_NAME(obj) (GST_OBJECT_CAST(obj)->name) -/** - * GST_OBJECT_PARENT: - * @obj: a #GstObject - * - * Get the parent of this object - */ -#define GST_OBJECT_PARENT(obj) (GST_OBJECT_CAST(obj)->parent) - - -/** - * GST_OBJECT_FLAGS: - * @obj: a #GstObject - * - * This macro returns the entire set of flags for the object. - */ -#define GST_OBJECT_FLAGS(obj) (GST_OBJECT_CAST (obj)->flags) -/** - * GST_OBJECT_FLAG_IS_SET: - * @obj: a #GstObject - * @flag: Flag to check for - * - * This macro checks to see if the given flag is set. - */ -#define GST_OBJECT_FLAG_IS_SET(obj,flag) ((GST_OBJECT_FLAGS (obj) & (flag)) == (flag)) -/** - * GST_OBJECT_FLAG_SET: - * @obj: a #GstObject - * @flag: Flag to set - * - * This macro sets the given bits. - */ -#define GST_OBJECT_FLAG_SET(obj,flag) (GST_OBJECT_FLAGS (obj) |= (flag)) -/** - * GST_OBJECT_FLAG_UNSET: - * @obj: a #GstObject - * @flag: Flag to set - * - * This macro usets the given bits. - */ -#define GST_OBJECT_FLAG_UNSET(obj,flag) (GST_OBJECT_FLAGS (obj) &= ~(flag)) - -typedef struct _GstObject GstObject; -typedef struct _GstObjectClass GstObjectClass; - -/** - * GstObject: - * @lock: object LOCK - * @name: The name of the object - * @parent: this object's parent, weak ref - * @flags: flags for this object - * - * GStreamer base object class. - */ -struct _GstObject { - GInitiallyUnowned object; - - /*< public >*/ /* with LOCK */ - GMutex lock; /* object LOCK */ - gchar *name; /* object name */ - GstObject *parent; /* this object's parent, weak ref */ - guint32 flags; - - /*< private >*/ - GList *control_bindings; /* List of GstControlBinding */ - guint64 control_rate; - guint64 last_sync; - - gpointer _gst_reserved; -}; - -/** - * GstObjectClass: - * @parent_class: parent - * @path_string_separator: separator used by gst_object_get_path_string() - * @deep_notify: default signal handler - * - * GStreamer base object class. - */ -struct _GstObjectClass { - GInitiallyUnownedClass parent_class; - - const gchar *path_string_separator; - - /* signals */ - void (*deep_notify) (GstObject * object, GstObject * orig, GParamSpec * pspec); - - /*< public >*/ - /* virtual methods for subclasses */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/* normal GObject stuff */ -GType gst_object_get_type (void); - -/* name routines */ -gboolean gst_object_set_name (GstObject *object, const gchar *name); -gchar* gst_object_get_name (GstObject *object); - -/* parentage routines */ -gboolean gst_object_set_parent (GstObject *object, GstObject *parent); -GstObject* gst_object_get_parent (GstObject *object); -void gst_object_unparent (GstObject *object); -gboolean gst_object_has_ancestor (GstObject *object, GstObject *ancestor); - -void gst_object_default_deep_notify (GObject *object, GstObject *orig, - GParamSpec *pspec, gchar **excluded_props); - -/* refcounting + life cycle */ -gpointer gst_object_ref (gpointer object); -void gst_object_unref (gpointer object); -gpointer gst_object_ref_sink (gpointer object); - -/* replace object pointer */ -gboolean gst_object_replace (GstObject **oldobj, GstObject *newobj); - -/* printing out the 'path' of the object */ -gchar * gst_object_get_path_string (GstObject *object); - -/* misc utils */ -gboolean gst_object_check_uniqueness (GList *list, const gchar *name); - -/* controller functions */ -#include -#include - -GstClockTime gst_object_suggest_next_sync (GstObject * object); -gboolean gst_object_sync_values (GstObject * object, GstClockTime timestamp); - -gboolean gst_object_has_active_control_bindings (GstObject *object); -void gst_object_set_control_bindings_disabled (GstObject *object, gboolean disabled); -void gst_object_set_control_binding_disabled (GstObject *object, - const gchar * property_name, - gboolean disabled); - -gboolean gst_object_add_control_binding (GstObject * object, GstControlBinding * binding); -GstControlBinding * - gst_object_get_control_binding (GstObject *object, const gchar * property_name); -gboolean gst_object_remove_control_binding (GstObject * object, GstControlBinding * binding); - -GValue * gst_object_get_value (GstObject * object, const gchar * property_name, - GstClockTime timestamp); -gboolean gst_object_get_value_array (GstObject * object, const gchar * property_name, - GstClockTime timestamp, GstClockTime interval, - guint n_values, gpointer values); -gboolean gst_object_get_g_value_array (GstObject * object, const gchar * property_name, - GstClockTime timestamp, GstClockTime interval, - guint n_values, GValue *values); - -GstClockTime gst_object_get_control_rate (GstObject * object); -void gst_object_set_control_rate (GstObject * object, GstClockTime control_rate); - -G_END_DECLS - -#endif /* __GST_OBJECT_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpad.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpad.h deleted file mode 100644 index 0170ab42..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpad.h +++ /dev/null @@ -1,1006 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpad.h: Header for GstPad object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PAD_H__ -#define __GST_PAD_H__ - -#include - -typedef struct _GstPad GstPad; -typedef struct _GstPadPrivate GstPadPrivate; -typedef struct _GstPadClass GstPadClass; -typedef struct _GstPadProbeInfo GstPadProbeInfo; - -/** - * GstPadDirection: - * @GST_PAD_UNKNOWN: direction is unknown. - * @GST_PAD_SRC: the pad is a source pad. - * @GST_PAD_SINK: the pad is a sink pad. - * - * The direction of a pad. - */ -typedef enum { - GST_PAD_UNKNOWN, - GST_PAD_SRC, - GST_PAD_SINK -} GstPadDirection; - -/** - * GstPadMode: - * @GST_PAD_MODE_NONE: Pad will not handle dataflow - * @GST_PAD_MODE_PUSH: Pad handles dataflow in downstream push mode - * @GST_PAD_MODE_PULL: Pad handles dataflow in upstream pull mode - * - * The status of a GstPad. After activating a pad, which usually happens when the - * parent element goes from READY to PAUSED, the GstPadMode defines if the - * pad operates in push or pull mode. - */ -typedef enum { - GST_PAD_MODE_NONE, - GST_PAD_MODE_PUSH, - GST_PAD_MODE_PULL -} GstPadMode; - -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/* - * Pad base class - */ -#define GST_TYPE_PAD (gst_pad_get_type ()) -#define GST_IS_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD)) -#define GST_IS_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD)) -#define GST_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD, GstPad)) -#define GST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD, GstPadClass)) -#define GST_PAD_CAST(obj) ((GstPad*)(obj)) - - - -/** - * GstPadLinkReturn: - * @GST_PAD_LINK_OK : link succeeded - * @GST_PAD_LINK_WRONG_HIERARCHY: pads have no common grandparent - * @GST_PAD_LINK_WAS_LINKED : pad was already linked - * @GST_PAD_LINK_WRONG_DIRECTION: pads have wrong direction - * @GST_PAD_LINK_NOFORMAT : pads do not have common format - * @GST_PAD_LINK_NOSCHED : pads cannot cooperate in scheduling - * @GST_PAD_LINK_REFUSED : refused for some reason - * - * Result values from gst_pad_link and friends. - */ -typedef enum { - GST_PAD_LINK_OK = 0, - GST_PAD_LINK_WRONG_HIERARCHY = -1, - GST_PAD_LINK_WAS_LINKED = -2, - GST_PAD_LINK_WRONG_DIRECTION = -3, - GST_PAD_LINK_NOFORMAT = -4, - GST_PAD_LINK_NOSCHED = -5, - GST_PAD_LINK_REFUSED = -6 -} GstPadLinkReturn; - -/** - * GST_PAD_LINK_FAILED: - * @ret: the #GstPadLinkReturn value - * - * Macro to test if the given #GstPadLinkReturn value indicates a failed - * link step. - */ -#define GST_PAD_LINK_FAILED(ret) ((ret) < GST_PAD_LINK_OK) - -/** - * GST_PAD_LINK_SUCCESSFUL: - * @ret: the #GstPadLinkReturn value - * - * Macro to test if the given #GstPadLinkReturn value indicates a successful - * link step. - */ -#define GST_PAD_LINK_SUCCESSFUL(ret) ((ret) >= GST_PAD_LINK_OK) - -/** - * GstFlowReturn: - * @GST_FLOW_OK: Data passing was ok. - * @GST_FLOW_NOT_LINKED: Pad is not linked. - * @GST_FLOW_FLUSHING: Pad is flushing. - * @GST_FLOW_EOS: Pad is EOS. - * @GST_FLOW_NOT_NEGOTIATED: Pad is not negotiated. - * @GST_FLOW_ERROR: Some (fatal) error occured. Element generating - * this error should post an error message with more - * details. - * @GST_FLOW_NOT_SUPPORTED: This operation is not supported. - * @GST_FLOW_CUSTOM_SUCCESS: Elements can use values starting from - * this (and higher) to define custom success - * codes. - * @GST_FLOW_CUSTOM_SUCCESS_1: Pre-defined custom success code (define your - * custom success code to this to avoid compiler - * warnings). - * @GST_FLOW_CUSTOM_SUCCESS_2: Pre-defined custom success code. - * @GST_FLOW_CUSTOM_ERROR: Elements can use values starting from - * this (and lower) to define custom error codes. - * @GST_FLOW_CUSTOM_ERROR_1: Pre-defined custom error code (define your - * custom error code to this to avoid compiler - * warnings). - * @GST_FLOW_CUSTOM_ERROR_2: Pre-defined custom error code. - * - * The result of passing data to a pad. - * - * Note that the custom return values should not be exposed outside of the - * element scope. - */ -typedef enum { - /* custom success starts here */ - GST_FLOW_CUSTOM_SUCCESS_2 = 102, - GST_FLOW_CUSTOM_SUCCESS_1 = 101, - GST_FLOW_CUSTOM_SUCCESS = 100, - - /* core predefined */ - GST_FLOW_OK = 0, - /* expected failures */ - GST_FLOW_NOT_LINKED = -1, - GST_FLOW_FLUSHING = -2, - /* error cases */ - GST_FLOW_EOS = -3, - GST_FLOW_NOT_NEGOTIATED = -4, - GST_FLOW_ERROR = -5, - GST_FLOW_NOT_SUPPORTED = -6, - - /* custom error starts here */ - GST_FLOW_CUSTOM_ERROR = -100, - GST_FLOW_CUSTOM_ERROR_1 = -101, - GST_FLOW_CUSTOM_ERROR_2 = -102 -} GstFlowReturn; - -const gchar* gst_flow_get_name (GstFlowReturn ret); -GQuark gst_flow_to_quark (GstFlowReturn ret); - -/** - * GstPadLinkCheck: - * @GST_PAD_LINK_CHECK_NOTHING: Don't check hierarchy or caps compatibility. - * @GST_PAD_LINK_CHECK_HIERARCHY: Check the pads have same parents/grandparents. - * Could be omitted if it is already known that the two elements that own the - * pads are in the same bin. - * @GST_PAD_LINK_CHECK_TEMPLATE_CAPS: Check if the pads are compatible by using - * their template caps. This is much faster than @GST_PAD_LINK_CHECK_CAPS, but - * would be unsafe e.g. if one pad has %GST_CAPS_ANY. - * @GST_PAD_LINK_CHECK_CAPS: Check if the pads are compatible by comparing the - * caps returned by gst_pad_query_caps(). - * @GST_PAD_LINK_CHECK_DEFAULT: The default checks done when linking - * pads (i.e. the ones used by gst_pad_link()). - * - * The amount of checking to be done when linking pads. @GST_PAD_LINK_CHECK_CAPS - * and @GST_PAD_LINK_CHECK_TEMPLATE_CAPS are mutually exclusive. If both are - * specified, expensive but safe @GST_PAD_LINK_CHECK_CAPS are performed. - * - * - * Only disable some of the checks if you are 100% certain you know the link - * will not fail because of hierarchy/caps compatibility failures. If uncertain, - * use the default checks (%GST_PAD_LINK_CHECK_DEFAULT) or the regular methods - * for linking the pads. - * - */ - -typedef enum { - GST_PAD_LINK_CHECK_NOTHING = 0, - GST_PAD_LINK_CHECK_HIERARCHY = 1 << 0, - GST_PAD_LINK_CHECK_TEMPLATE_CAPS = 1 << 1, - GST_PAD_LINK_CHECK_CAPS = 1 << 2, - - GST_PAD_LINK_CHECK_DEFAULT = GST_PAD_LINK_CHECK_HIERARCHY | GST_PAD_LINK_CHECK_CAPS -} GstPadLinkCheck; - -/* pad states */ -/** - * GstPadActivateFunction: - * @pad: a #GstPad - * @parent: the parent of @pad - * - * This function is called when the pad is activated during the element - * READY to PAUSED state change. By default this function will call the - * activate function that puts the pad in push mode but elements can - * override this function to activate the pad in pull mode if they wish. - * - * Returns: TRUE if the pad could be activated. - */ -typedef gboolean (*GstPadActivateFunction) (GstPad *pad, GstObject *parent); -/** - * GstPadActivateModeFunction: - * @pad: a #GstPad - * @parent: the parent of @pad - * @mode: the requested activation mode of @pad - * @active: activate or deactivate the pad. - * - * The prototype of the push and pull activate functions. - * - * Returns: TRUE if the pad could be activated or deactivated. - */ -typedef gboolean (*GstPadActivateModeFunction) (GstPad *pad, GstObject *parent, - GstPadMode mode, gboolean active); - - -/* data passing */ -/** - * GstPadChainFunction: - * @pad: the sink #GstPad that performed the chain. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @buffer: the #GstBuffer that is chained, not %NULL. - * - * A function that will be called on sinkpads when chaining buffers. - * The function typically processes the data contained in the buffer and - * either consumes the data or passes it on to the internally linked pad(s). - * - * The implementer of this function receives a refcount to @buffer and should - * gst_buffer_unref() when the buffer is no longer needed. - * - * When a chain function detects an error in the data stream, it must post an - * error on the bus and return an appropriate #GstFlowReturn value. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstPadChainFunction) (GstPad *pad, GstObject *parent, - GstBuffer *buffer); - -/** - * GstPadChainListFunction: - * @pad: the sink #GstPad that performed the chain. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @list: the #GstBufferList that is chained, not %NULL. - * - * A function that will be called on sinkpads when chaining buffer lists. - * The function typically processes the data contained in the buffer list and - * either consumes the data or passes it on to the internally linked pad(s). - * - * The implementer of this function receives a refcount to @list and - * should gst_buffer_list_unref() when the list is no longer needed. - * - * When a chainlist function detects an error in the data stream, it must - * post an error on the bus and return an appropriate #GstFlowReturn value. - * - * Returns: #GST_FLOW_OK for success - */ -typedef GstFlowReturn (*GstPadChainListFunction) (GstPad *pad, GstObject *parent, - GstBufferList *list); - -/** - * GstPadGetRangeFunction: - * @pad: the src #GstPad to perform the getrange on. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @offset: the offset of the range - * @length: the length of the range - * @buffer: a memory location to hold the result buffer, cannot be NULL. - * - * This function will be called on source pads when a peer element - * request a buffer at the specified @offset and @length. If this function - * returns #GST_FLOW_OK, the result buffer will be stored in @buffer. The - * contents of @buffer is invalid for any other return value. - * - * This function is installed on a source pad with - * gst_pad_set_getrange_function() and can only be called on source pads after - * they are successfully activated with gst_pad_activate_mode() with the - * #GST_PAD_MODE_PULL. - * - * @offset and @length are always given in byte units. @offset must normally be a value - * between 0 and the length in bytes of the data available on @pad. The - * length (duration in bytes) can be retrieved with a #GST_QUERY_DURATION or with a - * #GST_QUERY_SEEKING. - * - * Any @offset larger or equal than the length will make the function return - * #GST_FLOW_EOS, which corresponds to EOS. In this case @buffer does not - * contain a valid buffer. - * - * The buffer size of @buffer will only be smaller than @length when @offset is - * near the end of the stream. In all other cases, the size of @buffer must be - * exactly the requested size. - * - * It is allowed to call this function with a 0 @length and valid @offset, in - * which case @buffer will contain a 0-sized buffer and the function returns - * #GST_FLOW_OK. - * - * When this function is called with a -1 @offset, the sequentially next buffer - * of length @length in the stream is returned. - * - * When this function is called with a -1 @length, a buffer with a default - * optimal length is returned in @buffer. The length might depend on the value - * of @offset. - * - * Returns: #GST_FLOW_OK for success and a valid buffer in @buffer. Any other - * return value leaves @buffer undefined. - */ -typedef GstFlowReturn (*GstPadGetRangeFunction) (GstPad *pad, GstObject *parent, - guint64 offset, guint length, - GstBuffer **buffer); - -/** - * GstPadEventFunction: - * @pad: the #GstPad to handle the event. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @event: the #GstEvent to handle. - * - * Function signature to handle an event for the pad. - * - * Returns: TRUE if the pad could handle the event. - */ -typedef gboolean (*GstPadEventFunction) (GstPad *pad, GstObject *parent, - GstEvent *event); - - -/* internal links */ -/** - * GstPadIterIntLinkFunction: - * @pad: The #GstPad to query. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * - * The signature of the internal pad link iterator function. - * - * Returns: a new #GstIterator that will iterate over all pads that are - * linked to the given pad on the inside of the parent element. - * - * the caller must call gst_iterator_free() after usage. - */ -typedef GstIterator* (*GstPadIterIntLinkFunction) (GstPad *pad, GstObject *parent); - -/* generic query function */ -/** - * GstPadQueryFunction: - * @pad: the #GstPad to query. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @query: the #GstQuery object to execute - * - * The signature of the query function. - * - * Returns: TRUE if the query could be performed. - */ -typedef gboolean (*GstPadQueryFunction) (GstPad *pad, GstObject *parent, - GstQuery *query); - - -/* linking */ -/** - * GstPadLinkFunction: - * @pad: the #GstPad that is linked. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * @peer: the peer #GstPad of the link - * - * Function signature to handle a new link on the pad. - * - * Returns: the result of the link with the specified peer. - */ -typedef GstPadLinkReturn (*GstPadLinkFunction) (GstPad *pad, GstObject *parent, GstPad *peer); -/** - * GstPadUnlinkFunction: - * @pad: the #GstPad that is linked. - * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set, - * @parent is guaranteed to be not-NULL and remain valid during the - * execution of this function. - * - * Function signature to handle a unlinking the pad prom its peer. - */ -typedef void (*GstPadUnlinkFunction) (GstPad *pad, GstObject *parent); - - -/* misc */ -/** - * GstPadForwardFunction: - * @pad: the #GstPad that is forwarded. - * @user_data: the gpointer to optional user data. - * - * A forward function is called for all internally linked pads, see - * gst_pad_forward(). - * - * Returns: TRUE if the dispatching procedure has to be stopped. - */ -typedef gboolean (*GstPadForwardFunction) (GstPad *pad, gpointer user_data); - -/** - * GstPadProbeType: - * @GST_PAD_PROBE_TYPE_INVALID: invalid probe type - * @GST_PAD_PROBE_TYPE_IDLE: probe idle pads and block - * @GST_PAD_PROBE_TYPE_BLOCK: probe and block pads - * @GST_PAD_PROBE_TYPE_BUFFER: probe buffers - * @GST_PAD_PROBE_TYPE_BUFFER_LIST: probe buffer lists - * @GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM: probe downstream events - * @GST_PAD_PROBE_TYPE_EVENT_UPSTREAM: probe upstream events - * @GST_PAD_PROBE_TYPE_EVENT_FLUSH: probe flush events. This probe has to be - * explicitly enabled and is not included in the - * @@GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM or - * @@GST_PAD_PROBE_TYPE_EVENT_UPSTREAM probe types. - * @GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM: probe downstream queries - * @GST_PAD_PROBE_TYPE_QUERY_UPSTREAM: probe upstream queries - * @GST_PAD_PROBE_TYPE_PUSH: probe push - * @GST_PAD_PROBE_TYPE_PULL: probe pull - * @GST_PAD_PROBE_TYPE_BLOCKING: probe and block at the next opportunity, at data flow or when idle - * @GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM: probe downstream data (buffers, buffer lists, and events) - * @GST_PAD_PROBE_TYPE_DATA_UPSTREAM: probe upstream data (events) - * @GST_PAD_PROBE_TYPE_DATA_BOTH: probe upstream and downstream data (buffers, buffer lists, and events) - * @GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM: probe and block downstream data (buffers, buffer lists, and events) - * @GST_PAD_PROBE_TYPE_BLOCK_UPSTREAM: probe and block upstream data (events) - * @GST_PAD_PROBE_TYPE_EVENT_BOTH: probe upstream and downstream events - * @GST_PAD_PROBE_TYPE_QUERY_BOTH: probe upstream and downstream queries - * @GST_PAD_PROBE_TYPE_ALL_BOTH: probe upstream events and queries and downstream buffers, buffer lists, events and queries - * @GST_PAD_PROBE_TYPE_SCHEDULING: probe push and pull - * - * The different probing types that can occur. When either one of - * @GST_PAD_PROBE_TYPE_IDLE or @GST_PAD_PROBE_TYPE_BLOCK is used, the probe will be a - * blocking probe. - */ -typedef enum -{ - GST_PAD_PROBE_TYPE_INVALID = 0, - /* flags to control blocking */ - GST_PAD_PROBE_TYPE_IDLE = (1 << 0), - GST_PAD_PROBE_TYPE_BLOCK = (1 << 1), - /* flags to select datatypes */ - GST_PAD_PROBE_TYPE_BUFFER = (1 << 4), - GST_PAD_PROBE_TYPE_BUFFER_LIST = (1 << 5), - GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM = (1 << 6), - GST_PAD_PROBE_TYPE_EVENT_UPSTREAM = (1 << 7), - GST_PAD_PROBE_TYPE_EVENT_FLUSH = (1 << 8), - GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM = (1 << 9), - GST_PAD_PROBE_TYPE_QUERY_UPSTREAM = (1 << 10), - /* flags to select scheduling mode */ - GST_PAD_PROBE_TYPE_PUSH = (1 << 12), - GST_PAD_PROBE_TYPE_PULL = (1 << 13), - - /* flag combinations */ - GST_PAD_PROBE_TYPE_BLOCKING = GST_PAD_PROBE_TYPE_IDLE | GST_PAD_PROBE_TYPE_BLOCK, - GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM = GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, - GST_PAD_PROBE_TYPE_DATA_UPSTREAM = GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, - GST_PAD_PROBE_TYPE_DATA_BOTH = GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM | GST_PAD_PROBE_TYPE_DATA_UPSTREAM, - GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM = GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM, - GST_PAD_PROBE_TYPE_BLOCK_UPSTREAM = GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_DATA_UPSTREAM, - GST_PAD_PROBE_TYPE_EVENT_BOTH = GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM | GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, - GST_PAD_PROBE_TYPE_QUERY_BOTH = GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM | GST_PAD_PROBE_TYPE_QUERY_UPSTREAM, - GST_PAD_PROBE_TYPE_ALL_BOTH = GST_PAD_PROBE_TYPE_DATA_BOTH | GST_PAD_PROBE_TYPE_QUERY_BOTH, - GST_PAD_PROBE_TYPE_SCHEDULING = GST_PAD_PROBE_TYPE_PUSH | GST_PAD_PROBE_TYPE_PULL -} GstPadProbeType; - - -/** - * GstPadProbeReturn: - * @GST_PAD_PROBE_OK: normal probe return value - * @GST_PAD_PROBE_DROP: drop data in data probes. For push mode this means that - * the data item is not sent downstream. For pull mode, it means that the - * data item is not passed upstream. In both cases, this result code - * returns #GST_FLOW_OK or %TRUE to the caller. - * @GST_PAD_PROBE_REMOVE: remove probe - * @GST_PAD_PROBE_PASS: pass the data item in the block probe and block on - * the next item - * - * Different return values for the #GstPadProbeCallback. - */ -typedef enum -{ - GST_PAD_PROBE_DROP, - GST_PAD_PROBE_OK, - GST_PAD_PROBE_REMOVE, - GST_PAD_PROBE_PASS, -} GstPadProbeReturn; - - -/** - * GstPadProbeInfo: - * @type: the current probe type - * @id: the id of the probe - * @data: type specific data, check the @type field to know the datatype. - * This field can be NULL. - * @offset: offset of pull probe, this field is valid when @type contains - * #GST_PAD_PROBE_TYPE_PULL - * @size: size of pull probe, this field is valid when @type contains - * #GST_PAD_PROBE_TYPE_PULL - * - * Info passed in the #GstPadProbeCallback. - */ -struct _GstPadProbeInfo -{ - GstPadProbeType type; - gulong id; - gpointer data; - guint64 offset; - guint size; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_PAD_PROBE_INFO_TYPE(d) ((d)->type) -#define GST_PAD_PROBE_INFO_ID(d) ((d)->id) -#define GST_PAD_PROBE_INFO_DATA(d) ((d)->data) - -#define GST_PAD_PROBE_INFO_BUFFER(d) GST_BUFFER_CAST(GST_PAD_PROBE_INFO_DATA(d)) -#define GST_PAD_PROBE_INFO_BUFFER_LIST(d) GST_BUFFER_LIST_CAST(GST_PAD_PROBE_INFO_DATA(d)) -#define GST_PAD_PROBE_INFO_EVENT(d) GST_EVENT_CAST(GST_PAD_PROBE_INFO_DATA(d)) -#define GST_PAD_PROBE_INFO_QUERY(d) GST_QUERY_CAST(GST_PAD_PROBE_INFO_DATA(d)) - -#define GST_PAD_PROBE_INFO_OFFSET(d) ((d)->offset) -#define GST_PAD_PROBE_INFO_SIZE(d) ((d)->size) - -GstEvent* gst_pad_probe_info_get_event (GstPadProbeInfo * info); -GstQuery* gst_pad_probe_info_get_query (GstPadProbeInfo * info); -GstBuffer* gst_pad_probe_info_get_buffer (GstPadProbeInfo * info); -GstBufferList* gst_pad_probe_info_get_buffer_list (GstPadProbeInfo * info); - -/** - * GstPadProbeCallback: - * @pad: the #GstPad that is blocked - * @info: #GstPadProbeInfo - * @user_data: the gpointer to optional user data. - * - * Callback used by gst_pad_add_probe(). Gets called to notify about the current - * blocking type. - * - * The callback is allowed to modify the data pointer in @info. - * - * Returns: a #GstPadProbeReturn - */ -typedef GstPadProbeReturn (*GstPadProbeCallback) (GstPad *pad, GstPadProbeInfo *info, - gpointer user_data); - -/** - * GstPadStickyEventsForeachFunction: - * @pad: the #GstPad. - * @event: a sticky #GstEvent. - * @user_data: the #gpointer to optional user data. - * - * Callback used by gst_pad_sticky_events_foreach(). - * - * When this function returns %TRUE, the next event will be - * returned. When %FALSE is returned, gst_pad_sticky_events_foreach() will return. - * - * When @event is set to NULL, the item will be removed from the list of sticky events. - * When @event has been made writable, the new buffer reference can be assigned - * to @event. This function is responsible for unreffing the old event when - * removing or modifying. - * - * Returns: %TRUE if the iteration should continue - */ -typedef gboolean (*GstPadStickyEventsForeachFunction) (GstPad *pad, GstEvent **event, - gpointer user_data); - -/** - * GstPadFlags: - * @GST_PAD_FLAG_BLOCKED: is dataflow on a pad blocked - * @GST_PAD_FLAG_FLUSHING: is pad flushing - * @GST_PAD_FLAG_EOS: is pad in EOS state - * @GST_PAD_FLAG_BLOCKING: is pad currently blocking on a buffer or event - * @GST_PAD_FLAG_NEED_PARENT: ensure that there is a parent object before calling - * into the pad callbacks. - * @GST_PAD_FLAG_NEED_RECONFIGURE: the pad should be reconfigured/renegotiated. - * The flag has to be unset manually after - * reconfiguration happened. - * @GST_PAD_FLAG_PENDING_EVENTS: the pad has pending events - * @GST_PAD_FLAG_FIXED_CAPS: the pad is using fixed caps this means that once the - * caps are set on the pad, the caps query function only - * returns those caps. - * @GST_PAD_FLAG_PROXY_CAPS: the default event and query handler will forward - * all events and queries to the internally linked pads - * instead of discarding them. - * @GST_PAD_FLAG_PROXY_ALLOCATION: the default query handler will forward - * allocation queries to the internally linked pads - * instead of discarding them. - * @GST_PAD_FLAG_PROXY_SCHEDULING: the default query handler will forward - * scheduling queries to the internally linked pads - * instead of discarding them. - * @GST_PAD_FLAG_LAST: offset to define more flags - * - * Pad state flags - */ -typedef enum { - GST_PAD_FLAG_BLOCKED = (GST_OBJECT_FLAG_LAST << 0), - GST_PAD_FLAG_FLUSHING = (GST_OBJECT_FLAG_LAST << 1), - GST_PAD_FLAG_EOS = (GST_OBJECT_FLAG_LAST << 2), - GST_PAD_FLAG_BLOCKING = (GST_OBJECT_FLAG_LAST << 3), - GST_PAD_FLAG_NEED_PARENT = (GST_OBJECT_FLAG_LAST << 4), - GST_PAD_FLAG_NEED_RECONFIGURE = (GST_OBJECT_FLAG_LAST << 5), - GST_PAD_FLAG_PENDING_EVENTS = (GST_OBJECT_FLAG_LAST << 6), - GST_PAD_FLAG_FIXED_CAPS = (GST_OBJECT_FLAG_LAST << 7), - GST_PAD_FLAG_PROXY_CAPS = (GST_OBJECT_FLAG_LAST << 8), - GST_PAD_FLAG_PROXY_ALLOCATION = (GST_OBJECT_FLAG_LAST << 9), - GST_PAD_FLAG_PROXY_SCHEDULING = (GST_OBJECT_FLAG_LAST << 10), - /* padding */ - GST_PAD_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) -} GstPadFlags; - -/** - * GstPad: - * @element_private: private data owned by the parent element - * @padtemplate: padtemplate for this pad - * @direction: the direction of the pad, cannot change after creating - * the pad. - * - * The #GstPad structure. Use the functions to update the variables. - */ -struct _GstPad { - GstObject object; - - /*< public >*/ - gpointer element_private; - - GstPadTemplate *padtemplate; - - GstPadDirection direction; - - /*< private >*/ - /* streaming rec_lock */ - GRecMutex stream_rec_lock; - GstTask *task; - - /* block cond, mutex is from the object */ - GCond block_cond; - GHookList probes; - - GstPadMode mode; - GstPadActivateFunction activatefunc; - gpointer activatedata; - GDestroyNotify activatenotify; - GstPadActivateModeFunction activatemodefunc; - gpointer activatemodedata; - GDestroyNotify activatemodenotify; - - /* pad link */ - GstPad *peer; - GstPadLinkFunction linkfunc; - gpointer linkdata; - GDestroyNotify linknotify; - GstPadUnlinkFunction unlinkfunc; - gpointer unlinkdata; - GDestroyNotify unlinknotify; - - /* data transport functions */ - GstPadChainFunction chainfunc; - gpointer chaindata; - GDestroyNotify chainnotify; - GstPadChainListFunction chainlistfunc; - gpointer chainlistdata; - GDestroyNotify chainlistnotify; - GstPadGetRangeFunction getrangefunc; - gpointer getrangedata; - GDestroyNotify getrangenotify; - GstPadEventFunction eventfunc; - gpointer eventdata; - GDestroyNotify eventnotify; - - /* pad offset */ - gint64 offset; - - /* generic query method */ - GstPadQueryFunction queryfunc; - gpointer querydata; - GDestroyNotify querynotify; - - /* internal links */ - GstPadIterIntLinkFunction iterintlinkfunc; - gpointer iterintlinkdata; - GDestroyNotify iterintlinknotify; - - /* counts number of probes attached. */ - gint num_probes; - gint num_blocked; - - GstPadPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPadClass { - GstObjectClass parent_class; - - /* signal callbacks */ - void (*linked) (GstPad *pad, GstPad *peer); - void (*unlinked) (GstPad *pad, GstPad *peer); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - - -/***** helper macros *****/ -/* GstPad */ -#define GST_PAD_NAME(pad) (GST_OBJECT_NAME(pad)) -#define GST_PAD_PARENT(pad) (GST_ELEMENT_CAST(GST_OBJECT_PARENT(pad))) -#define GST_PAD_ELEMENT_PRIVATE(pad) (GST_PAD_CAST(pad)->element_private) -#define GST_PAD_PAD_TEMPLATE(pad) (GST_PAD_CAST(pad)->padtemplate) -#define GST_PAD_DIRECTION(pad) (GST_PAD_CAST(pad)->direction) -#define GST_PAD_TASK(pad) (GST_PAD_CAST(pad)->task) -#define GST_PAD_MODE(pad) (GST_PAD_CAST(pad)->mode) - -#define GST_PAD_ACTIVATEFUNC(pad) (GST_PAD_CAST(pad)->activatefunc) -#define GST_PAD_ACTIVATEMODEFUNC(pad) (GST_PAD_CAST(pad)->activatemodefunc) -#define GST_PAD_CHAINFUNC(pad) (GST_PAD_CAST(pad)->chainfunc) -#define GST_PAD_CHAINLISTFUNC(pad) (GST_PAD_CAST(pad)->chainlistfunc) -#define GST_PAD_GETRANGEFUNC(pad) (GST_PAD_CAST(pad)->getrangefunc) -#define GST_PAD_EVENTFUNC(pad) (GST_PAD_CAST(pad)->eventfunc) -#define GST_PAD_QUERYFUNC(pad) (GST_PAD_CAST(pad)->queryfunc) -#define GST_PAD_ITERINTLINKFUNC(pad) (GST_PAD_CAST(pad)->iterintlinkfunc) - -#define GST_PAD_PEER(pad) (GST_PAD_CAST(pad)->peer) -#define GST_PAD_LINKFUNC(pad) (GST_PAD_CAST(pad)->linkfunc) -#define GST_PAD_UNLINKFUNC(pad) (GST_PAD_CAST(pad)->unlinkfunc) - -#define GST_PAD_IS_SRC(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SRC) -#define GST_PAD_IS_SINK(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SINK) - -#define GST_PAD_IS_LINKED(pad) (GST_PAD_PEER(pad) != NULL) - -#define GST_PAD_IS_ACTIVE(pad) (GST_PAD_MODE(pad) != GST_PAD_MODE_NONE) - -#define GST_PAD_IS_BLOCKED(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_BLOCKED)) -#define GST_PAD_IS_BLOCKING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_BLOCKING)) - -#define GST_PAD_IS_FLUSHING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_FLUSHING)) -#define GST_PAD_SET_FLUSHING(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_FLUSHING)) -#define GST_PAD_UNSET_FLUSHING(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_FLUSHING)) - -#define GST_PAD_IS_EOS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_EOS)) - -#define GST_PAD_NEEDS_RECONFIGURE(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_NEED_RECONFIGURE)) -#define GST_PAD_HAS_PENDING_EVENTS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PENDING_EVENTS)) -#define GST_PAD_IS_FIXED_CAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_FIXED_CAPS)) -#define GST_PAD_NEEDS_PARENT(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_NEED_PARENT)) - -#define GST_PAD_IS_PROXY_CAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PROXY_CAPS)) -#define GST_PAD_SET_PROXY_CAPS(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PROXY_CAPS)) -#define GST_PAD_UNSET_PROXY_CAPS(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PROXY_CAPS)) - -#define GST_PAD_IS_PROXY_ALLOCATION(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PROXY_ALLOCATION)) -#define GST_PAD_SET_PROXY_ALLOCATION(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PROXY_ALLOCATION)) -#define GST_PAD_UNSET_PROXY_ALLOCATION(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PROXY_ALLOCATION)) - -#define GST_PAD_IS_PROXY_SCHEDULING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PROXY_SCHEDULING)) -#define GST_PAD_SET_PROXY_SCHEDULING(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PROXY_SCHEDULING)) -#define GST_PAD_UNSET_PROXY_SCHEDULING(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PROXY_SCHEDULING)) - -/** - * GST_PAD_GET_STREAM_LOCK: - * @pad: a #GstPad - * - * Get the stream lock of @pad. The stream lock is protecting the - * resources used in the data processing functions of @pad. - */ -#define GST_PAD_GET_STREAM_LOCK(pad) (&(GST_PAD_CAST(pad)->stream_rec_lock)) -/** - * GST_PAD_STREAM_LOCK: - * @pad: a #GstPad - * - * Lock the stream lock of @pad. - */ -#define GST_PAD_STREAM_LOCK(pad) g_rec_mutex_lock(GST_PAD_GET_STREAM_LOCK(pad)) -/** - * GST_PAD_STREAM_TRYLOCK: - * @pad: a #GstPad - * - * Try to Lock the stream lock of the pad, return TRUE if the lock could be - * taken. - */ -#define GST_PAD_STREAM_TRYLOCK(pad) g_rec_mutex_trylock(GST_PAD_GET_STREAM_LOCK(pad)) -/** - * GST_PAD_STREAM_UNLOCK: - * @pad: a #GstPad - * - * Unlock the stream lock of @pad. - */ -#define GST_PAD_STREAM_UNLOCK(pad) g_rec_mutex_unlock(GST_PAD_GET_STREAM_LOCK(pad)) - -#define GST_PAD_BLOCK_GET_COND(pad) (&GST_PAD_CAST(pad)->block_cond) -#define GST_PAD_BLOCK_WAIT(pad) (g_cond_wait(GST_PAD_BLOCK_GET_COND (pad), GST_OBJECT_GET_LOCK (pad))) -#define GST_PAD_BLOCK_SIGNAL(pad) (g_cond_signal(GST_PAD_BLOCK_GET_COND (pad))) -#define GST_PAD_BLOCK_BROADCAST(pad) (g_cond_broadcast(GST_PAD_BLOCK_GET_COND (pad))) - -GType gst_pad_get_type (void); - -/* creating pads */ -GstPad* gst_pad_new (const gchar *name, GstPadDirection direction); -GstPad* gst_pad_new_from_template (GstPadTemplate *templ, const gchar *name); -GstPad* gst_pad_new_from_static_template (GstStaticPadTemplate *templ, const gchar *name); - - -/** - * gst_pad_get_name: - * @pad: the pad to get the name from - * - * Get a copy of the name of the pad. g_free() after usage. - * - * MT safe. - */ -#define gst_pad_get_name(pad) gst_object_get_name (GST_OBJECT_CAST (pad)) -/** - * gst_pad_get_parent: - * @pad: the pad to get the parent of - * - * Get the parent of @pad. This function increases the refcount - * of the parent object so you should gst_object_unref() it after usage. - * Can return NULL if the pad did not have a parent. - * - * MT safe. - */ -#define gst_pad_get_parent(pad) gst_object_get_parent (GST_OBJECT_CAST (pad)) - -GstPadDirection gst_pad_get_direction (GstPad *pad); - -gboolean gst_pad_set_active (GstPad *pad, gboolean active); -gboolean gst_pad_is_active (GstPad *pad); -gboolean gst_pad_activate_mode (GstPad *pad, GstPadMode mode, - gboolean active); - -gulong gst_pad_add_probe (GstPad *pad, - GstPadProbeType mask, - GstPadProbeCallback callback, - gpointer user_data, - GDestroyNotify destroy_data); -void gst_pad_remove_probe (GstPad *pad, gulong id); - -gboolean gst_pad_is_blocked (GstPad *pad); -gboolean gst_pad_is_blocking (GstPad *pad); - -void gst_pad_mark_reconfigure (GstPad *pad); -gboolean gst_pad_needs_reconfigure (GstPad *pad); -gboolean gst_pad_check_reconfigure (GstPad *pad); - -void gst_pad_set_element_private (GstPad *pad, gpointer priv); -gpointer gst_pad_get_element_private (GstPad *pad); - -GstPadTemplate* gst_pad_get_pad_template (GstPad *pad); - -GstEvent* gst_pad_get_sticky_event (GstPad *pad, GstEventType event_type, - guint idx); -void gst_pad_sticky_events_foreach (GstPad *pad, GstPadStickyEventsForeachFunction foreach_func, gpointer user_data); - -/* data passing setup functions */ -void gst_pad_set_activate_function_full (GstPad *pad, - GstPadActivateFunction activate, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_activatemode_function_full (GstPad *pad, - GstPadActivateModeFunction activatemode, - gpointer user_data, - GDestroyNotify notify); -/* data passing functions */ -void gst_pad_set_chain_function_full (GstPad *pad, - GstPadChainFunction chain, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_chain_list_function_full (GstPad *pad, - GstPadChainListFunction chainlist, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_getrange_function_full (GstPad *pad, - GstPadGetRangeFunction get, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_event_function_full (GstPad *pad, - GstPadEventFunction event, - gpointer user_data, - GDestroyNotify notify); - -#define gst_pad_set_activate_function(p,f) gst_pad_set_activate_function_full((p),(f),NULL,NULL) -#define gst_pad_set_activatemode_function(p,f) gst_pad_set_activatemode_function_full((p),(f),NULL,NULL) -#define gst_pad_set_chain_function(p,f) gst_pad_set_chain_function_full((p),(f),NULL,NULL) -#define gst_pad_set_chain_list_function(p,f) gst_pad_set_chain_list_function_full((p),(f),NULL,NULL) -#define gst_pad_set_getrange_function(p,f) gst_pad_set_getrange_function_full((p),(f),NULL,NULL) -#define gst_pad_set_event_function(p,f) gst_pad_set_event_function_full((p),(f),NULL,NULL) - -/* pad links */ -void gst_pad_set_link_function_full (GstPad *pad, - GstPadLinkFunction link, - gpointer user_data, - GDestroyNotify notify); -void gst_pad_set_unlink_function_full (GstPad *pad, - GstPadUnlinkFunction unlink, - gpointer user_data, - GDestroyNotify notify); - -#define gst_pad_set_link_function(p,f) gst_pad_set_link_function_full((p),(f),NULL,NULL) -#define gst_pad_set_unlink_function(p,f) gst_pad_set_unlink_function_full((p),(f),NULL,NULL) - -gboolean gst_pad_can_link (GstPad *srcpad, GstPad *sinkpad); -GstPadLinkReturn gst_pad_link (GstPad *srcpad, GstPad *sinkpad); -GstPadLinkReturn gst_pad_link_full (GstPad *srcpad, GstPad *sinkpad, GstPadLinkCheck flags); -gboolean gst_pad_unlink (GstPad *srcpad, GstPad *sinkpad); -gboolean gst_pad_is_linked (GstPad *pad); - -GstPad* gst_pad_get_peer (GstPad *pad); - -GstCaps* gst_pad_get_pad_template_caps (GstPad *pad); - -/* capsnego function for linked/unlinked pads */ -GstCaps * gst_pad_get_current_caps (GstPad * pad); -gboolean gst_pad_has_current_caps (GstPad * pad); - -/* capsnego for linked pads */ -GstCaps * gst_pad_get_allowed_caps (GstPad * pad); - -/* pad offsets */ -gint64 gst_pad_get_offset (GstPad *pad); -void gst_pad_set_offset (GstPad *pad, gint64 offset); - -/* data passing functions to peer */ -GstFlowReturn gst_pad_push (GstPad *pad, GstBuffer *buffer); -GstFlowReturn gst_pad_push_list (GstPad *pad, GstBufferList *list); -GstFlowReturn gst_pad_pull_range (GstPad *pad, guint64 offset, guint size, - GstBuffer **buffer); -gboolean gst_pad_push_event (GstPad *pad, GstEvent *event); -gboolean gst_pad_event_default (GstPad *pad, GstObject *parent, - GstEvent *event); - -/* data passing functions on pad */ -GstFlowReturn gst_pad_chain (GstPad *pad, GstBuffer *buffer); -GstFlowReturn gst_pad_chain_list (GstPad *pad, GstBufferList *list); -GstFlowReturn gst_pad_get_range (GstPad *pad, guint64 offset, guint size, - GstBuffer **buffer); -gboolean gst_pad_send_event (GstPad *pad, GstEvent *event); - -/* pad tasks */ -gboolean gst_pad_start_task (GstPad *pad, GstTaskFunction func, - gpointer user_data, GDestroyNotify notify); -gboolean gst_pad_pause_task (GstPad *pad); -gboolean gst_pad_stop_task (GstPad *pad); - -/* internal links */ -void gst_pad_set_iterate_internal_links_function_full (GstPad * pad, - GstPadIterIntLinkFunction iterintlink, - gpointer user_data, - GDestroyNotify notify); -GstIterator * gst_pad_iterate_internal_links (GstPad * pad); -GstIterator * gst_pad_iterate_internal_links_default (GstPad * pad, GstObject *parent); - -#define gst_pad_set_iterate_internal_links_function(p,f) gst_pad_set_iterate_internal_links_function_full((p),(f),NULL,NULL) - -/* generic query function */ -gboolean gst_pad_query (GstPad *pad, GstQuery *query); -gboolean gst_pad_peer_query (GstPad *pad, GstQuery *query); -void gst_pad_set_query_function_full (GstPad *pad, GstPadQueryFunction query, - gpointer user_data, - GDestroyNotify notify); -gboolean gst_pad_query_default (GstPad *pad, GstObject *parent, - GstQuery *query); - -#define gst_pad_set_query_function(p,f) gst_pad_set_query_function_full((p),(f),NULL,NULL) - -/* misc helper functions */ -gboolean gst_pad_forward (GstPad *pad, GstPadForwardFunction forward, - gpointer user_data); - -const gchar * gst_pad_mode_get_name (GstPadMode mode); - -G_END_DECLS - -#endif /* __GST_PAD_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpadtemplate.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpadtemplate.h deleted file mode 100644 index 90f9b252..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpadtemplate.h +++ /dev/null @@ -1,194 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpadtemplate.h: Header for GstPadTemplate object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PAD_TEMPLATE_H__ -#define __GST_PAD_TEMPLATE_H__ - -#include - -typedef struct _GstPadTemplate GstPadTemplate; -typedef struct _GstPadTemplateClass GstPadTemplateClass; -typedef struct _GstStaticPadTemplate GstStaticPadTemplate; - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_STATIC_PAD_TEMPLATE (gst_static_pad_template_get_type ()) - -#define GST_TYPE_PAD_TEMPLATE (gst_pad_template_get_type ()) -#define GST_PAD_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD_TEMPLATE,GstPadTemplate)) -#define GST_PAD_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD_TEMPLATE,GstPadTemplateClass)) -#define GST_IS_PAD_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD_TEMPLATE)) -#define GST_IS_PAD_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD_TEMPLATE)) - -/** - * GstPadPresence: - * @GST_PAD_ALWAYS: the pad is always available - * @GST_PAD_SOMETIMES: the pad will become available depending on the media stream - * @GST_PAD_REQUEST: the pad is only available on request with - * gst_element_get_request_pad(). - * - * Indicates when this pad will become available. - */ -typedef enum { - GST_PAD_ALWAYS, - GST_PAD_SOMETIMES, - GST_PAD_REQUEST -} GstPadPresence; - -/** - * GST_PAD_TEMPLATE_NAME_TEMPLATE: - * @templ: the template to query - * - * Get the nametemplate of the padtemplate. - */ -#define GST_PAD_TEMPLATE_NAME_TEMPLATE(templ) (((GstPadTemplate *)(templ))->name_template) - -/** - * GST_PAD_TEMPLATE_DIRECTION: - * @templ: the template to query - * - * Get the #GstPadDirection of the padtemplate. - */ -#define GST_PAD_TEMPLATE_DIRECTION(templ) (((GstPadTemplate *)(templ))->direction) - -/** - * GST_PAD_TEMPLATE_PRESENCE: - * @templ: the template to query - * - * Get the #GstPadPresence of the padtemplate. - */ -#define GST_PAD_TEMPLATE_PRESENCE(templ) (((GstPadTemplate *)(templ))->presence) - -/** - * GST_PAD_TEMPLATE_CAPS: - * @templ: the template to query - * - * Get a handle to the padtemplate #GstCaps - */ -#define GST_PAD_TEMPLATE_CAPS(templ) (((GstPadTemplate *)(templ))->caps) - -/** - * GstPadTemplateFlags: - * @GST_PAD_TEMPLATE_FLAG_LAST: first flag that can be used by subclasses. - * - * Flags for the padtemplate - */ -typedef enum { - /* padding */ - GST_PAD_TEMPLATE_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 4) -} GstPadTemplateFlags; - -/** - * GST_PAD_TEMPLATE_IS_FIXED: - * @templ: the template to query - * - * Check if the properties of the padtemplate are fixed - */ -#define GST_PAD_TEMPLATE_IS_FIXED(templ) (GST_OBJECT_FLAG_IS_SET(templ, GST_PAD_TEMPLATE_FIXED)) - -/** - * GstPadTemplate: - * - * The padtemplate object. - */ -struct _GstPadTemplate { - GstObject object; - - gchar *name_template; - GstPadDirection direction; - GstPadPresence presence; - GstCaps *caps; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPadTemplateClass { - GstObjectClass parent_class; - - /* signal callbacks */ - void (*pad_created) (GstPadTemplate *templ, GstPad *pad); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstStaticPadTemplate: - * @name_template: the name of the template - * @direction: the direction of the template - * @presence: the presence of the template - * @static_caps: the caps of the template. - * - * Structure describing the #GstStaticPadTemplate. - */ -struct _GstStaticPadTemplate { - const gchar *name_template; - GstPadDirection direction; - GstPadPresence presence; - GstStaticCaps static_caps; -}; - -/** - * GST_STATIC_PAD_TEMPLATE: - * @padname: the name template of the pad - * @dir: the GstPadDirection of the pad - * @pres: the GstPadPresence of the pad - * @caps: the GstStaticCaps of the pad - * - * Convenience macro to fill the values of a GstStaticPadTemplate - * structure. - */ -#define GST_STATIC_PAD_TEMPLATE(padname, dir, pres, caps) \ -{ \ - /* name_template */ padname, \ - /* direction */ dir, \ - /* presence */ pres, \ - /* caps */ caps \ -} - -/* templates and factories */ -GType gst_pad_template_get_type (void); -GType gst_static_pad_template_get_type (void); - -GstPadTemplate* gst_pad_template_new (const gchar *name_template, - GstPadDirection direction, GstPadPresence presence, - GstCaps *caps) G_GNUC_MALLOC; - -GstPadTemplate * gst_static_pad_template_get (GstStaticPadTemplate *pad_template); -GstCaps* gst_static_pad_template_get_caps (GstStaticPadTemplate *templ); -GstCaps* gst_pad_template_get_caps (GstPadTemplate *templ); - -void gst_pad_template_pad_created (GstPadTemplate * templ, GstPad * pad); - -G_END_DECLS - -#endif /* __GST_PAD_TEMPLATE_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparamspecs.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparamspecs.h deleted file mode 100644 index e7e5fd57..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparamspecs.h +++ /dev/null @@ -1,122 +0,0 @@ -/* GStreamer - GParamSpecs for some of our types - * Copyright (C) 2007 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PARAMSPECS_H__ -#define __GST_PARAMSPECS_H__ - -#include - -G_BEGIN_DECLS - -/* --- paramspec flags */ - -/** - * GST_PARAM_CONTROLLABLE: - * - * Use this flag on GObject properties to signal they can make sense to be. - * controlled over time. This hint is used by the GstController. - */ -#define GST_PARAM_CONTROLLABLE (1 << (G_PARAM_USER_SHIFT + 1)) - -/** - * GST_PARAM_MUTABLE_READY: - * - * Use this flag on GObject properties of GstElements to indicate that - * they can be changed when the element is in the READY or lower state. - */ -#define GST_PARAM_MUTABLE_READY (1 << (G_PARAM_USER_SHIFT + 2)) - -/** - * GST_PARAM_MUTABLE_PAUSED: - * - * Use this flag on GObject properties of GstElements to indicate that - * they can be changed when the element is in the PAUSED or lower state. - * This flag implies GST_PARAM_MUTABLE_READY. - */ -#define GST_PARAM_MUTABLE_PAUSED (1 << (G_PARAM_USER_SHIFT + 3)) - -/** - * GST_PARAM_MUTABLE_PLAYING: - * - * Use this flag on GObject properties of GstElements to indicate that - * they can be changed when the element is in the PLAYING or lower state. - * This flag implies GST_PARAM_MUTABLE_PAUSED. - */ -#define GST_PARAM_MUTABLE_PLAYING (1 << (G_PARAM_USER_SHIFT + 4)) - -/** - * GST_PARAM_USER_SHIFT: - * - * Bits based on GST_PARAM_USER_SHIFT can be used by 3rd party applications. - */ -#define GST_PARAM_USER_SHIFT (1 << (G_PARAM_USER_SHIFT + 8)) - - -/* --- type macros --- */ - -#define GST_TYPE_PARAM_FRACTION (gst_param_spec_fraction_get_type ()) -#define GST_IS_PARAM_SPEC_FRACTION(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GST_TYPE_PARAM_FRACTION)) -#define GST_PARAM_SPEC_FRACTION(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), GST_TYPE_PARAM_FRACTION, GstParamSpecFraction)) - - -/* --- get_type functions --- */ - -GType gst_param_spec_fraction_get_type (void); - - -/* --- typedefs & structures --- */ - -typedef struct _GstParamSpecFraction GstParamSpecFraction; - -/** - * GstParamSpecFraction: - * @parent_instance: super class - * @min_num: minimal numerator - * @min_den: minimal denominator - * @max_num: maximal numerator - * @max_den: maximal denominator - * @def_num: default numerator - * @def_den: default denominator - * - * A GParamSpec derived structure that contains the meta data for fractional - * properties. - */ -struct _GstParamSpecFraction { - GParamSpec parent_instance; - - gint min_num, min_den; - gint max_num, max_den; - gint def_num, def_den; -}; - - -/* --- GParamSpec prototypes --- */ - -GParamSpec * gst_param_spec_fraction (const gchar * name, - const gchar * nick, - const gchar * blurb, - gint min_num, gint min_denom, - gint max_num, gint max_denom, - gint default_num, gint default_denom, - GParamFlags flags) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_PARAMSPECS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparse.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparse.h deleted file mode 100644 index 630c3cef..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstparse.h +++ /dev/null @@ -1,115 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstparse.h: get a pipeline from a text pipeline description - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PARSE_H__ -#define __GST_PARSE_H__ - -#include - -G_BEGIN_DECLS - -GQuark gst_parse_error_quark (void); -/** - * GST_PARSE_ERROR: - * - * Get access to the error quark of the parse subsystem. - */ -#define GST_PARSE_ERROR gst_parse_error_quark () - -/** - * GstParseError: - * @GST_PARSE_ERROR_SYNTAX: A syntax error occured. - * @GST_PARSE_ERROR_NO_SUCH_ELEMENT: The description contained an unknown element - * @GST_PARSE_ERROR_NO_SUCH_PROPERTY: An element did not have a specified property - * @GST_PARSE_ERROR_LINK: There was an error linking two pads. - * @GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY: There was an error setting a property - * @GST_PARSE_ERROR_EMPTY_BIN: An empty bin was specified. - * @GST_PARSE_ERROR_EMPTY: An empty description was specified - * - * The different parsing errors that can occur. - */ -typedef enum -{ - GST_PARSE_ERROR_SYNTAX, - GST_PARSE_ERROR_NO_SUCH_ELEMENT, - GST_PARSE_ERROR_NO_SUCH_PROPERTY, - GST_PARSE_ERROR_LINK, - GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY, - GST_PARSE_ERROR_EMPTY_BIN, - GST_PARSE_ERROR_EMPTY -} GstParseError; - -/** - * GstParseFlags: - * @GST_PARSE_FLAG_NONE: Do not use any special parsing options. - * @GST_PARSE_FLAG_FATAL_ERRORS: Always return NULL when an error occurs - * (default behaviour is to return partially constructed bins or elements - * in some cases) - * - * Parsing options. - */ -typedef enum -{ - GST_PARSE_FLAG_NONE = 0, - GST_PARSE_FLAG_FATAL_ERRORS = (1 << 0) -} GstParseFlags; - -#define GST_TYPE_PARSE_CONTEXT (gst_parse_context_get_type()) - -/** - * GstParseContext: - * - * Opaque structure. - */ -typedef struct _GstParseContext GstParseContext; - -/* create, process and free a parse context */ - -GType gst_parse_context_get_type (void); -GstParseContext * gst_parse_context_new (void) G_GNUC_MALLOC; - -gchar ** gst_parse_context_get_missing_elements (GstParseContext * context) G_GNUC_MALLOC; - -void gst_parse_context_free (GstParseContext * context); - - -/* parse functions */ - -GstElement * gst_parse_launch (const gchar * pipeline_description, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_parse_launchv (const gchar ** argv, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_parse_launch_full (const gchar * pipeline_description, - GstParseContext * context, - GstParseFlags flags, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_parse_launchv_full (const gchar ** argv, - GstParseContext * context, - GstParseFlags flags, - GError ** error) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_PARSE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpipeline.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpipeline.h deleted file mode 100644 index 43563cb8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpipeline.h +++ /dev/null @@ -1,110 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpipeline.h: Header for GstPipeline element - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PIPELINE_H__ -#define __GST_PIPELINE_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PIPELINE (gst_pipeline_get_type ()) -#define GST_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PIPELINE, GstPipeline)) -#define GST_IS_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PIPELINE)) -#define GST_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PIPELINE, GstPipelineClass)) -#define GST_IS_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PIPELINE)) -#define GST_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PIPELINE, GstPipelineClass)) -#define GST_PIPELINE_CAST(obj) ((GstPipeline*)(obj)) - -typedef struct _GstPipeline GstPipeline; -typedef struct _GstPipelineClass GstPipelineClass; -typedef struct _GstPipelinePrivate GstPipelinePrivate; - -/** - * GstPipelineFlags: - * @GST_PIPELINE_FLAG_FIXED_CLOCK: this pipeline works with a fixed clock - * @GST_PIPELINE_FLAG_LAST: offset to define more flags - * - * Pipeline flags - */ -typedef enum { - GST_PIPELINE_FLAG_FIXED_CLOCK = (GST_BIN_FLAG_LAST << 0), - /* padding */ - GST_PIPELINE_FLAG_LAST = (GST_BIN_FLAG_LAST << 4) -} GstPipelineFlags; - -/** - * GstPipeline: - * @fixed_clock: The fixed clock of the pipeline, used when - * GST_PIPELINE_FLAG_FIXED_CLOCK is set. - * @stream_time: The stream time of the pipeline. A better name for this - * property would be the running_time, the total time spent in the - * PLAYING state without being flushed. (deprecated, use the start_time - * on GstElement). - * @delay: Extra delay added to base_time to compensate for computing delays - * when setting elements to PLAYING. - * - * The #GstPipeline structure. - */ -struct _GstPipeline { - GstBin bin; - - /*< public >*/ /* with LOCK */ - GstClock *fixed_clock; - - GstClockTime stream_time; - GstClockTime delay; - - /*< private >*/ - GstPipelinePrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPipelineClass { - GstBinClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_pipeline_get_type (void); -GstElement* gst_pipeline_new (const gchar *name) G_GNUC_MALLOC; - -GstBus* gst_pipeline_get_bus (GstPipeline *pipeline); - -void gst_pipeline_use_clock (GstPipeline *pipeline, GstClock *clock); -gboolean gst_pipeline_set_clock (GstPipeline *pipeline, GstClock *clock); -GstClock* gst_pipeline_get_clock (GstPipeline *pipeline); -void gst_pipeline_auto_clock (GstPipeline *pipeline); - -void gst_pipeline_set_delay (GstPipeline *pipeline, GstClockTime delay); -GstClockTime gst_pipeline_get_delay (GstPipeline *pipeline); - -void gst_pipeline_set_auto_flush_bus (GstPipeline *pipeline, gboolean auto_flush); -gboolean gst_pipeline_get_auto_flush_bus (GstPipeline *pipeline); - -G_END_DECLS - -#endif /* __GST_PIPELINE_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstplugin.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstplugin.h deleted file mode 100644 index 68071865..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstplugin.h +++ /dev/null @@ -1,315 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstplugin.h: Header for plugin subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PLUGIN_H__ -#define __GST_PLUGIN_H__ - -#include - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstPlugin: - * - * The opaque plugin object - */ -typedef struct _GstPlugin GstPlugin; -typedef struct _GstPluginClass GstPluginClass; -typedef struct _GstPluginDesc GstPluginDesc; - -/** - * gst_plugin_error_quark: - * - * Get the error quark. - * - * Returns: The error quark used in GError messages - */ -GQuark gst_plugin_error_quark (void); -/** - * GST_PLUGIN_ERROR: - * - * The error message category quark - */ -#define GST_PLUGIN_ERROR gst_plugin_error_quark () - -/** - * GstPluginError: - * @GST_PLUGIN_ERROR_MODULE: The plugin could not be loaded - * @GST_PLUGIN_ERROR_DEPENDENCIES: The plugin has unresolved dependencies - * @GST_PLUGIN_ERROR_NAME_MISMATCH: The plugin has already be loaded from a different file - * - * The plugin loading errors - */ -typedef enum -{ - GST_PLUGIN_ERROR_MODULE, - GST_PLUGIN_ERROR_DEPENDENCIES, - GST_PLUGIN_ERROR_NAME_MISMATCH -} GstPluginError; - -/** - * GstPluginFlags: - * @GST_PLUGIN_FLAG_CACHED: Temporarily loaded plugins - * @GST_PLUGIN_FLAG_BLACKLISTED: The plugin won't be scanned (again) - * - * The plugin loading state - */ -typedef enum -{ - GST_PLUGIN_FLAG_CACHED = (GST_OBJECT_FLAG_LAST << 0), - GST_PLUGIN_FLAG_BLACKLISTED = (GST_OBJECT_FLAG_LAST << 1) -} GstPluginFlags; - -/** - * GstPluginDependencyFlags: - * @GST_PLUGIN_DEPENDENCY_FLAG_NONE : no special flags - * @GST_PLUGIN_DEPENDENCY_FLAG_RECURSE : recurse into subdirectories - * @GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY : use paths - * argument only if none of the environment variables is set - * @GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX : interpret - * filename argument as filter suffix and check all matching files in - * the directory - * - * Flags used in connection with gst_plugin_add_dependency(). - */ -typedef enum { - GST_PLUGIN_DEPENDENCY_FLAG_NONE = 0, - GST_PLUGIN_DEPENDENCY_FLAG_RECURSE = (1 << 0), - GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY = (1 << 1), - GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX = (1 << 2) -} GstPluginDependencyFlags; - -/** - * GstPluginInitFunc: - * @plugin: The plugin object - * - * A plugin should provide a pointer to a function of this type in the - * plugin_desc struct. - * This function will be called by the loader at startup. One would then - * register each #GstPluginFeature. - * - * Returns: %TRUE if plugin initialised successfully - */ -/* FIXME 0.11: Make return void */ -typedef gboolean (*GstPluginInitFunc) (GstPlugin *plugin); - -/** - * GstPluginInitFullFunc: - * @plugin: The plugin object - * @user_data: extra data - * - * A plugin should provide a pointer to a function of either #GstPluginInitFunc - * or this type in the plugin_desc struct. - * The function will be called by the loader at startup. One would then - * register each #GstPluginFeature. This version allows - * user data to be passed to init function (useful for bindings). - * - * Returns: %TRUE if plugin initialised successfully - */ -/* FIXME 0.11: Merge with GstPluginInitFunc */ -typedef gboolean (*GstPluginInitFullFunc) (GstPlugin *plugin, gpointer user_data); - -/** - * GstPluginDesc: - * @major_version: the major version number of core that plugin was compiled for - * @minor_version: the minor version number of core that plugin was compiled for - * @name: a unique name of the plugin - * @description: description of plugin - * @plugin_init: pointer to the init function of this plugin. - * @version: version of the plugin - * @license: effective license of plugin - * @source: source module plugin belongs to - * @package: shipped package plugin belongs to - * @origin: URL to provider of plugin - * @release_datetime: date time string in ISO 8601 format (or rather, a - * subset thereof), or NULL. Allowed are the following formats: - * "YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with 'T' a separator and 'Z' - * indicating UTC/Zulu time). This field should be set via the - * GST_PACKAGE_RELEASE_DATETIME preprocessor macro. - * - * A plugin should export a variable of this type called plugin_desc. The plugin - * loader will use the data provided there to initialize the plugin. - * - * The @licence parameter must be one of: LGPL, GPL, QPL, GPL/QPL, MPL, - * BSD, MIT/X11, Proprietary, unknown. - */ -struct _GstPluginDesc { - gint major_version; - gint minor_version; - const gchar *name; - const gchar *description; - GstPluginInitFunc plugin_init; - const gchar *version; - const gchar *license; - const gchar *source; - const gchar *package; - const gchar *origin; - const gchar *release_datetime; - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - - -#define GST_TYPE_PLUGIN (gst_plugin_get_type()) -#define GST_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLUGIN)) -#define GST_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLUGIN)) -#define GST_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLUGIN, GstPluginClass)) -#define GST_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLUGIN, GstPlugin)) -#define GST_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLUGIN, GstPluginClass)) -#define GST_PLUGIN_CAST(obj) ((GstPlugin*)(obj)) - -#ifdef GST_PACKAGE_RELEASE_DATETIME -#define __GST_PACKAGE_RELEASE_DATETIME GST_PACKAGE_RELEASE_DATETIME -#else -#define __GST_PACKAGE_RELEASE_DATETIME NULL -#endif - -/** - * GST_PLUGIN_DEFINE: - * @major: major version number of the gstreamer-core that plugin was compiled for - * @minor: minor version number of the gstreamer-core that plugin was compiled for - * @name: short, but unique name of the plugin - * @description: information about the purpose of the plugin - * @init: function pointer to the plugin_init method with the signature of static gboolean plugin_init (GstPlugin * plugin). - * @version: full version string (e.g. VERSION from config.h) - * @license: under which licence the package has been released, e.g. GPL, LGPL. - * @package: the package-name (e.g. PACKAGE_NAME from config.h) - * @origin: a description from where the package comes from (e.g. the homepage URL) - * - * This macro needs to be used to define the entry point and meta data of a - * plugin. One would use this macro to export a plugin, so that it can be used - * by other applications. - * - * The macro uses a define named PACKAGE for the #GstPluginDesc,source field. - * When using autoconf, this is usually set automatically via the AC_INIT - * macro, and set in config.h. If you are not using autoconf, you will need to - * define PACKAGE yourself and set it to a short mnemonic string identifying - * your application/package, e.g. 'someapp' or 'my-plugins-foo. - * - * If defined, the GST_PACKAGE_RELEASE_DATETIME will also be used for the - * #GstPluginDesc,release_datetime field. - */ -#define GST_PLUGIN_DEFINE(major,minor,name,description,init,version,license,package,origin) \ -G_BEGIN_DECLS \ -GST_PLUGIN_EXPORT GstPluginDesc gst_plugin_desc = { \ - major, \ - minor, \ - #name, \ - (gchar *) description, \ - init, \ - version, \ - license, \ - PACKAGE, \ - package, \ - origin, \ - __GST_PACKAGE_RELEASE_DATETIME, \ - GST_PADDING_INIT \ -}; \ -G_END_DECLS - -/** - * GST_LICENSE_UNKNOWN: - * - * To be used in GST_PLUGIN_DEFINE if usure about the licence. - */ -#define GST_LICENSE_UNKNOWN "unknown" - - -/* function for filters */ -/** - * GstPluginFilter: - * @plugin: the plugin to check - * @user_data: the user_data that has been passed on e.g. gst_registry_plugin_filter() - * - * A function that can be used with e.g. gst_registry_plugin_filter() - * to get a list of plugins that match certain criteria. - * - * Returns: TRUE for a positive match, FALSE otherwise - */ -typedef gboolean (*GstPluginFilter) (GstPlugin *plugin, - gpointer user_data); - -GType gst_plugin_get_type (void); - -gboolean gst_plugin_register_static (gint major_version, - gint minor_version, - const gchar *name, - const gchar *description, - GstPluginInitFunc init_func, - const gchar *version, - const gchar *license, - const gchar *source, - const gchar *package, - const gchar *origin); - -gboolean gst_plugin_register_static_full (gint major_version, - gint minor_version, - const gchar *name, - const gchar *description, - GstPluginInitFullFunc init_full_func, - const gchar *version, - const gchar *license, - const gchar *source, - const gchar *package, - const gchar *origin, - gpointer user_data); - -const gchar* gst_plugin_get_name (GstPlugin *plugin); -const gchar* gst_plugin_get_description (GstPlugin *plugin); -const gchar* gst_plugin_get_filename (GstPlugin *plugin); -const gchar* gst_plugin_get_version (GstPlugin *plugin); -const gchar* gst_plugin_get_license (GstPlugin *plugin); -const gchar* gst_plugin_get_source (GstPlugin *plugin); -const gchar* gst_plugin_get_package (GstPlugin *plugin); -const gchar* gst_plugin_get_origin (GstPlugin *plugin); -const gchar* gst_plugin_get_release_date_string (GstPlugin *plugin); -const GstStructure* gst_plugin_get_cache_data (GstPlugin * plugin); -void gst_plugin_set_cache_data (GstPlugin * plugin, GstStructure *cache_data); - -gboolean gst_plugin_is_loaded (GstPlugin *plugin); - -GstPlugin * gst_plugin_load_file (const gchar *filename, GError** error); - -GstPlugin * gst_plugin_load (GstPlugin *plugin); -GstPlugin * gst_plugin_load_by_name (const gchar *name); - -void gst_plugin_add_dependency (GstPlugin * plugin, - const gchar ** env_vars, - const gchar ** paths, - const gchar ** names, - GstPluginDependencyFlags flags); -void gst_plugin_add_dependency_simple (GstPlugin * plugin, - const gchar * env_vars, - const gchar * paths, - const gchar * names, - GstPluginDependencyFlags flags); - -void gst_plugin_list_free (GList *list); - -G_END_DECLS - -#endif /* __GST_PLUGIN_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpluginfeature.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpluginfeature.h deleted file mode 100644 index 69ba44d4..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpluginfeature.h +++ /dev/null @@ -1,145 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstpluginfeature.h: Header for base GstPluginFeature - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_PLUGIN_FEATURE_H__ -#define __GST_PLUGIN_FEATURE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PLUGIN_FEATURE (gst_plugin_feature_get_type()) -#define GST_PLUGIN_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLUGIN_FEATURE, GstPluginFeature)) -#define GST_IS_PLUGIN_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLUGIN_FEATURE)) -#define GST_PLUGIN_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLUGIN_FEATURE, GstPluginFeatureClass)) -#define GST_IS_PLUGIN_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLUGIN_FEATURE)) -#define GST_PLUGIN_FEATURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLUGIN_FEATURE, GstPluginFeatureClass)) -#define GST_PLUGIN_FEATURE_CAST(obj) ((GstPluginFeature*)(obj)) - -/** - * GstPluginFeature: - * - * Opaque #GstPluginFeature structure. - */ -typedef struct _GstPluginFeature GstPluginFeature; -typedef struct _GstPluginFeatureClass GstPluginFeatureClass; - -/** - * GstRank: - * @GST_RANK_NONE: will be chosen last or not at all - * @GST_RANK_MARGINAL: unlikely to be chosen - * @GST_RANK_SECONDARY: likely to be chosen - * @GST_RANK_PRIMARY: will be chosen first - * - * Element priority ranks. Defines the order in which the autoplugger (or - * similar rank-picking mechanisms, such as e.g. gst_element_make_from_uri()) - * will choose this element over an alternative one with the same function. - * - * These constants serve as a rough guidance for defining the rank of a - * #GstPluginFeature. Any value is valid, including values bigger than - * @GST_RANK_PRIMARY. - */ -typedef enum { - GST_RANK_NONE = 0, - GST_RANK_MARGINAL = 64, - GST_RANK_SECONDARY = 128, - GST_RANK_PRIMARY = 256 -} GstRank; - -/** - * gst_plugin_feature_get_name: - * @feature: a #GstPluginFeature to get the name of @feature. - * - * Returns the name of @feature. - * For a nameless plugin feature, this returns NULL. - * - * Returns: (transfer none): the name of @feature. MT safe. - * - */ -#define gst_plugin_feature_get_name(feature) GST_OBJECT_NAME(feature) - -/** - * gst_plugin_feature_set_name: - * @feature: a #GstPluginFeature to set the name of. - * @name: the new name - * - * Sets the name of the plugin feature, getting rid of the old name if there was one. - */ -#define gst_plugin_feature_set_name(feature,name) gst_object_set_name(GST_OBJECT_CAST(feature),name) - -/** - * GstPluginFeatureFilter: - * @feature: the pluginfeature to check - * @user_data: the user_data that has been passed on e.g. - * gst_registry_feature_filter() - * - * A function that can be used with e.g. gst_registry_feature_filter() - * to get a list of pluginfeature that match certain criteria. - * - * Returns: %TRUE for a positive match, %FALSE otherwise - */ -typedef gboolean (*GstPluginFeatureFilter) (GstPluginFeature *feature, - gpointer user_data); - -/* normal GObject stuff */ -GType gst_plugin_feature_get_type (void); - -GstPluginFeature * - gst_plugin_feature_load (GstPluginFeature *feature); - -void gst_plugin_feature_set_rank (GstPluginFeature *feature, guint rank); -guint gst_plugin_feature_get_rank (GstPluginFeature *feature); - -GstPlugin * gst_plugin_feature_get_plugin (GstPluginFeature *feature); - -void gst_plugin_feature_list_free (GList *list); -GList *gst_plugin_feature_list_copy (GList *list) G_GNUC_MALLOC; -void gst_plugin_feature_list_debug (GList *list); - -/** - * GST_PLUGIN_FEATURE_LIST_DEBUG: - * @list: (transfer none) (element-type Gst.PluginFeature): a #GList of - * plugin features - * - * Debug the plugin feature names in @list. - */ -#ifndef GST_DISABLE_GST_DEBUG -#define GST_PLUGIN_FEATURE_LIST_DEBUG(list) gst_plugin_feature_list_debug(list) -#else -#define GST_PLUGIN_FEATURE_LIST_DEBUG(list) -#endif - -gboolean gst_plugin_feature_check_version (GstPluginFeature *feature, - guint min_major, - guint min_minor, - guint min_micro); -gint gst_plugin_feature_rank_compare_func (gconstpointer p1, - gconstpointer p2); - -G_END_DECLS - - -#endif /* __GST_PLUGIN_FEATURE_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpoll.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpoll.h deleted file mode 100644 index b0662769..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpoll.h +++ /dev/null @@ -1,95 +0,0 @@ -/* GStreamer - * Copyright (C) 1999 Erik Walthinsen - * Copyright (C) 2004 Wim Taymans - * Copyright (C) 2007 Peter Kjellerstedt - * - * gstpoll.h: File descriptor set - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_POLL_H__ -#define __GST_POLL_H__ - -#include -#include - -#include - -G_BEGIN_DECLS - -/** - * GstPoll: - * - * A set of file/network descriptors. - */ -typedef struct _GstPoll GstPoll; - -/** - * GstPollFD: - * @fd: a file descriptor - * - * A file descriptor object. - */ -typedef struct { - int fd; - - /*< private >*/ - gint idx; -} GstPollFD; - -/** - * GST_POLL_FD_INIT: - * - * A #GstPollFD must be initialized with this macro, before it can be - * used. This macro can used be to initialize a variable, but it cannot - * be assigned to a variable. In that case you have to use - * gst_poll_fd_init(). - */ -#define GST_POLL_FD_INIT { -1, -1 } - -GstPoll* gst_poll_new (gboolean controllable) G_GNUC_MALLOC; -GstPoll* gst_poll_new_timer (void) G_GNUC_MALLOC; -void gst_poll_free (GstPoll *set); - -void gst_poll_get_read_gpollfd (GstPoll *set, GPollFD *fd); - -void gst_poll_fd_init (GstPollFD *fd); - -gboolean gst_poll_add_fd (GstPoll *set, GstPollFD *fd); -gboolean gst_poll_remove_fd (GstPoll *set, GstPollFD *fd); - -gboolean gst_poll_fd_ctl_write (GstPoll *set, GstPollFD *fd, gboolean active); -gboolean gst_poll_fd_ctl_read (GstPoll *set, GstPollFD *fd, gboolean active); -void gst_poll_fd_ignored (GstPoll *set, GstPollFD *fd); - -gboolean gst_poll_fd_has_closed (const GstPoll *set, GstPollFD *fd); -gboolean gst_poll_fd_has_error (const GstPoll *set, GstPollFD *fd); -gboolean gst_poll_fd_can_read (const GstPoll *set, GstPollFD *fd); -gboolean gst_poll_fd_can_write (const GstPoll *set, GstPollFD *fd); - -gint gst_poll_wait (GstPoll *set, GstClockTime timeout); - -gboolean gst_poll_set_controllable (GstPoll *set, gboolean controllable); -void gst_poll_restart (GstPoll *set); -void gst_poll_set_flushing (GstPoll *set, gboolean flushing); - -gboolean gst_poll_write_control (GstPoll *set); -gboolean gst_poll_read_control (GstPoll *set); - -G_END_DECLS - -#endif /* __GST_POLL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpreset.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpreset.h deleted file mode 100644 index 30973f3a..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstpreset.h +++ /dev/null @@ -1,102 +0,0 @@ -/* GStreamer - * Copyright (C) 2006 Stefan Kost - * - * gstpreset.h: helper interface header for element presets - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PRESET_H__ -#define __GST_PRESET_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PRESET (gst_preset_get_type()) -#define GST_PRESET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PRESET, GstPreset)) -#define GST_IS_PRESET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PRESET)) -#define GST_PRESET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_PRESET, GstPresetInterface)) - -/** - * GstPreset: - * - * Opaque #GstPreset data structure. - */ -typedef struct _GstPreset GstPreset; /* dummy object */ -typedef struct _GstPresetInterface GstPresetInterface; - -/** - * GstPresetInterface: - * @parent: parent interface type. - * @get_preset_names: virtual method to get list of presets - * @get_property_names: virtual methods to get properties that are persistent - * @load_preset: virtual methods to load a preset into properties - * @save_preset: virtual methods to save properties into a preset - * @rename_preset: virtual methods to rename a preset - * @delete_preset: virtual methods to remove a preset - * @set_meta: virtual methods to set textual meta data to a preset - * @get_meta: virtual methods to get textual meta data from a preset - * - * #GstPreset interface. - */ -struct _GstPresetInterface -{ - GTypeInterface parent; - - /* methods */ - gchar** (*get_preset_names) (GstPreset *preset); - - gchar** (*get_property_names) (GstPreset *preset); - - gboolean (*load_preset) (GstPreset *preset, const gchar *name); - gboolean (*save_preset) (GstPreset *preset, const gchar *name); - gboolean (*rename_preset) (GstPreset *preset, const gchar *old_name, - const gchar *new_name); - gboolean (*delete_preset) (GstPreset *preset, const gchar *name); - - gboolean (*set_meta) (GstPreset *preset, const gchar *name, - const gchar *tag, const gchar *value); - gboolean (*get_meta) (GstPreset *preset, const gchar *name, - const gchar *tag, gchar **value); - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_preset_get_type(void); - -gchar** gst_preset_get_preset_names (GstPreset *preset) G_GNUC_MALLOC; - -gchar** gst_preset_get_property_names (GstPreset *preset) G_GNUC_MALLOC; - -gboolean gst_preset_load_preset (GstPreset *preset, const gchar *name); -gboolean gst_preset_save_preset (GstPreset *preset, const gchar *name); -gboolean gst_preset_rename_preset (GstPreset *preset, const gchar *old_name, - const gchar *new_name); -gboolean gst_preset_delete_preset (GstPreset *preset, const gchar *name); - -gboolean gst_preset_set_meta (GstPreset *preset, const gchar *name, - const gchar *tag, const gchar *value); -gboolean gst_preset_get_meta (GstPreset *preset, const gchar *name, - const gchar *tag, gchar **value); - -gboolean gst_preset_set_app_dir (const gchar *app_dir); -const gchar *gst_preset_get_app_dir (void); - -G_END_DECLS - -#endif /* __GST_PRESET_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstquery.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstquery.h deleted file mode 100644 index 47fec237..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstquery.h +++ /dev/null @@ -1,481 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * 2011 Wim Taymans - * - * gstquery.h: GstQuery API declaration - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_QUERY_H__ -#define __GST_QUERY_H__ - -#include - -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstQuery GstQuery; - -/** - * GstQueryTypeFlags: - * @GST_QUERY_TYPE_UPSTREAM: Set if the query can travel upstream. - * @GST_QUERY_TYPE_DOWNSTREAM: Set if the query can travel downstream. - * @GST_QUERY_TYPE_SERIALIZED: Set if the query should be serialized with data - * flow. - * - * #GstQueryTypeFlags indicate the aspects of the different #GstQueryType - * values. You can get the type flags of a #GstQueryType with the - * gst_query_type_get_flags() function. - */ -typedef enum { - GST_QUERY_TYPE_UPSTREAM = 1 << 0, - GST_QUERY_TYPE_DOWNSTREAM = 1 << 1, - GST_QUERY_TYPE_SERIALIZED = 1 << 2 -} GstQueryTypeFlags; - -/** - * GST_QUERY_TYPE_BOTH: - * - * The same thing as #GST_QUERY_TYPE_UPSTREAM | #GST_QUERY_TYPE_DOWNSTREAM. - */ -#define GST_QUERY_TYPE_BOTH \ - (GST_QUERY_TYPE_UPSTREAM | GST_QUERY_TYPE_DOWNSTREAM) - -#define GST_QUERY_NUM_SHIFT (8) - -/** - * GST_QUERY_MAKE_TYPE: - * @num: the query number to create - * @flags: the query flags - * - * when making custom query types, use this macro with the num and - * the given flags - */ -#define GST_QUERY_MAKE_TYPE(num,flags) \ - (((num) << GST_QUERY_NUM_SHIFT) | (flags)) - -#define FLAG(name) GST_QUERY_TYPE_##name - - -/** - * GstQueryType: - * @GST_QUERY_UNKNOWN: unknown query type - * @GST_QUERY_POSITION: current position in stream - * @GST_QUERY_DURATION: total duration of the stream - * @GST_QUERY_LATENCY: latency of stream - * @GST_QUERY_JITTER: current jitter of stream - * @GST_QUERY_RATE: current rate of the stream - * @GST_QUERY_SEEKING: seeking capabilities - * @GST_QUERY_SEGMENT: segment start/stop positions - * @GST_QUERY_CONVERT: convert values between formats - * @GST_QUERY_FORMATS: query supported formats for convert - * @GST_QUERY_BUFFERING: query available media for efficient seeking. - * @GST_QUERY_CUSTOM: a custom application or element defined query. - * @GST_QUERY_URI: query the URI of the source or sink. - * @GST_QUERY_ALLOCATION: the buffer allocation properties - * @GST_QUERY_SCHEDULING: the scheduling properties - * @GST_QUERY_ACCEPT_CAPS: the accept caps query - * @GST_QUERY_CAPS: the caps query - * @GST_QUERY_DRAIN: wait till all serialized data is consumed downstream - * - * Standard predefined Query types - */ -/* NOTE: don't forget to update the table in gstquery.c when changing - * this enum */ -typedef enum { - GST_QUERY_UNKNOWN = GST_QUERY_MAKE_TYPE (0, 0), - GST_QUERY_POSITION = GST_QUERY_MAKE_TYPE (10, FLAG(BOTH)), - GST_QUERY_DURATION = GST_QUERY_MAKE_TYPE (20, FLAG(BOTH)), - GST_QUERY_LATENCY = GST_QUERY_MAKE_TYPE (30, FLAG(BOTH)), - GST_QUERY_JITTER = GST_QUERY_MAKE_TYPE (40, FLAG(BOTH)), - GST_QUERY_RATE = GST_QUERY_MAKE_TYPE (50, FLAG(BOTH)), - GST_QUERY_SEEKING = GST_QUERY_MAKE_TYPE (60, FLAG(BOTH)), - GST_QUERY_SEGMENT = GST_QUERY_MAKE_TYPE (70, FLAG(BOTH)), - GST_QUERY_CONVERT = GST_QUERY_MAKE_TYPE (80, FLAG(BOTH)), - GST_QUERY_FORMATS = GST_QUERY_MAKE_TYPE (90, FLAG(BOTH)), - GST_QUERY_BUFFERING = GST_QUERY_MAKE_TYPE (110, FLAG(BOTH)), - GST_QUERY_CUSTOM = GST_QUERY_MAKE_TYPE (120, FLAG(BOTH)), - GST_QUERY_URI = GST_QUERY_MAKE_TYPE (130, FLAG(BOTH)), - GST_QUERY_ALLOCATION = GST_QUERY_MAKE_TYPE (140, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_QUERY_SCHEDULING = GST_QUERY_MAKE_TYPE (150, FLAG(UPSTREAM)), - GST_QUERY_ACCEPT_CAPS = GST_QUERY_MAKE_TYPE (160, FLAG(BOTH)), - GST_QUERY_CAPS = GST_QUERY_MAKE_TYPE (170, FLAG(BOTH)), - GST_QUERY_DRAIN = GST_QUERY_MAKE_TYPE (180, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)) -} GstQueryType; -#undef FLAG - -#define GST_TYPE_QUERY (gst_query_get_type()) -#define GST_IS_QUERY(obj) (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_QUERY)) -#define GST_QUERY_CAST(obj) ((GstQuery*)(obj)) -#define GST_QUERY(obj) (GST_QUERY_CAST(obj)) - -/** - * GST_QUERY_TYPE: - * @query: the query to query - * - * Get the #GstQueryType of the query. - */ -#define GST_QUERY_TYPE(query) (((GstQuery*)(query))->type) - -/** - * GST_QUERY_TYPE_NAME: - * @query: the query to query - * - * Get a constant string representation of the #GstQueryType of the query. - */ -#define GST_QUERY_TYPE_NAME(query) (gst_query_type_get_name(GST_QUERY_TYPE(query))) - -/** - * GST_QUERY_IS_UPSTREAM: - * @ev: the query to query - * - * Check if an query can travel upstream. - */ -#define GST_QUERY_IS_UPSTREAM(ev) !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_UPSTREAM) -/** - * GST_QUERY_IS_DOWNSTREAM: - * @ev: the query to query - * - * Check if an query can travel downstream. - */ -#define GST_QUERY_IS_DOWNSTREAM(ev) !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_DOWNSTREAM) -/** - * GST_QUERY_IS_SERIALIZED: - * @ev: the query to query - * - * Check if an query is serialized with the data stream. - */ -#define GST_QUERY_IS_SERIALIZED(ev) !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_SERIALIZED) - - -/** - * GstQuery: - * @mini_object: The parent #GstMiniObject type - * @type: the #GstQueryType - * - * The #GstQuery structure. - */ -struct _GstQuery -{ - GstMiniObject mini_object; - - /*< public > *//* with COW */ - GstQueryType type; -}; - -const gchar* gst_query_type_get_name (GstQueryType type); -GQuark gst_query_type_to_quark (GstQueryType type); -GstQueryTypeFlags - gst_query_type_get_flags (GstQueryType type); - - -GType gst_query_get_type (void); - -/* refcounting */ -/** - * gst_query_ref: - * @q: a #GstQuery to increase the refcount of. - * - * Increases the refcount of the given query by one. - * - * Returns: @q - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstQuery * gst_query_ref (GstQuery * q); -#endif - -static inline GstQuery * -gst_query_ref (GstQuery * q) -{ - return GST_QUERY_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST (q))); -} - -/** - * gst_query_unref: - * @q: a #GstQuery to decrease the refcount of. - * - * Decreases the refcount of the query. If the refcount reaches 0, the query - * will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_query_unref (GstQuery * q); -#endif - -static inline void -gst_query_unref (GstQuery * q) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (q)); -} - -/* copy query */ -/** - * gst_query_copy: - * @q: a #GstQuery to copy. - * - * Copies the given query using the copy function of the parent #GstStructure. - * - * Free-function: gst_query_unref - * - * Returns: (transfer full): a new copy of @q. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstQuery * gst_query_copy (const GstQuery * q); -#endif - -static inline GstQuery * -gst_query_copy (const GstQuery * q) -{ - return GST_QUERY_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (q))); -} - -/** - * gst_query_is_writable: - * @q: a #GstQuery - * - * Tests if you can safely write data into a query's structure. - */ -#define gst_query_is_writable(q) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (q)) -/** - * gst_query_make_writable: - * @q: (transfer full): a #GstQuery to make writable - * - * Makes a writable query from the given query. - * - * Returns: (transfer full): a new writable query (possibly same as @q) - */ -#define gst_query_make_writable(q) GST_QUERY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (q))) -/** - * gst_query_replace: - * @old_query: (inout) (transfer full): pointer to a pointer to a #GstQuery - * to be replaced. - * @new_query: (allow-none) (transfer none): pointer to a #GstQuery that will - * replace the query pointed to by @old_query. - * - * Modifies a pointer to a #GstQuery to point to a different #GstQuery. The - * modification is done atomically (so this is useful for ensuring thread safety - * in some cases), and the reference counts are updated appropriately (the old - * query is unreffed, the new one is reffed). - * - * Either @new_query or the #GstQuery pointed to by @old_query may be NULL. - * - * Returns: TRUE if @new_query was different from @old_query - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gboolean gst_query_replace (GstQuery **old_query, GstQuery *new_query); -#endif - -static inline gboolean -gst_query_replace (GstQuery **old_query, GstQuery *new_query) -{ - return gst_mini_object_replace ((GstMiniObject **) old_query, (GstMiniObject *) new_query); -} - -/* application specific query */ -GstQuery * gst_query_new_custom (GstQueryType type, GstStructure *structure) G_GNUC_MALLOC; -const GstStructure * - gst_query_get_structure (GstQuery *query); -GstStructure * gst_query_writable_structure (GstQuery *query); - -/* position query */ -GstQuery* gst_query_new_position (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_position (GstQuery *query, GstFormat format, gint64 cur); -void gst_query_parse_position (GstQuery *query, GstFormat *format, gint64 *cur); - -/* duration query */ -GstQuery* gst_query_new_duration (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_duration (GstQuery *query, GstFormat format, gint64 duration); -void gst_query_parse_duration (GstQuery *query, GstFormat *format, gint64 *duration); - -/* latency query */ -GstQuery* gst_query_new_latency (void) G_GNUC_MALLOC; -void gst_query_set_latency (GstQuery *query, gboolean live, GstClockTime min_latency, - GstClockTime max_latency); -void gst_query_parse_latency (GstQuery *query, gboolean *live, GstClockTime *min_latency, - GstClockTime *max_latency); - -/* convert query */ -GstQuery* gst_query_new_convert (GstFormat src_format, gint64 value, GstFormat dest_format) G_GNUC_MALLOC; -void gst_query_set_convert (GstQuery *query, GstFormat src_format, gint64 src_value, - GstFormat dest_format, gint64 dest_value); -void gst_query_parse_convert (GstQuery *query, GstFormat *src_format, gint64 *src_value, - GstFormat *dest_format, gint64 *dest_value); -/* segment query */ -GstQuery* gst_query_new_segment (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_segment (GstQuery *query, gdouble rate, GstFormat format, - gint64 start_value, gint64 stop_value); -void gst_query_parse_segment (GstQuery *query, gdouble *rate, GstFormat *format, - gint64 *start_value, gint64 *stop_value); - -/* seeking query */ -GstQuery* gst_query_new_seeking (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_seeking (GstQuery *query, GstFormat format, - gboolean seekable, - gint64 segment_start, - gint64 segment_end); -void gst_query_parse_seeking (GstQuery *query, GstFormat *format, - gboolean *seekable, - gint64 *segment_start, - gint64 *segment_end); -/* formats query */ -GstQuery* gst_query_new_formats (void) G_GNUC_MALLOC; -void gst_query_set_formats (GstQuery *query, gint n_formats, ...); -void gst_query_set_formatsv (GstQuery *query, gint n_formats, const GstFormat *formats); -void gst_query_parse_n_formats (GstQuery *query, guint *n_formats); -void gst_query_parse_nth_format (GstQuery *query, guint nth, GstFormat *format); - -/* buffering query */ -/** - * GstBufferingMode: - * @GST_BUFFERING_STREAM: a small amount of data is buffered - * @GST_BUFFERING_DOWNLOAD: the stream is being downloaded - * @GST_BUFFERING_TIMESHIFT: the stream is being downloaded in a ringbuffer - * @GST_BUFFERING_LIVE: the stream is a live stream - * - * The different types of buffering methods. - */ -typedef enum { - GST_BUFFERING_STREAM, - GST_BUFFERING_DOWNLOAD, - GST_BUFFERING_TIMESHIFT, - GST_BUFFERING_LIVE -} GstBufferingMode; - -GstQuery* gst_query_new_buffering (GstFormat format) G_GNUC_MALLOC; -void gst_query_set_buffering_percent (GstQuery *query, gboolean busy, gint percent); -void gst_query_parse_buffering_percent (GstQuery *query, gboolean *busy, gint *percent); - -void gst_query_set_buffering_stats (GstQuery *query, GstBufferingMode mode, - gint avg_in, gint avg_out, - gint64 buffering_left); -void gst_query_parse_buffering_stats (GstQuery *query, GstBufferingMode *mode, - gint *avg_in, gint *avg_out, - gint64 *buffering_left); - -void gst_query_set_buffering_range (GstQuery *query, GstFormat format, - gint64 start, gint64 stop, - gint64 estimated_total); -void gst_query_parse_buffering_range (GstQuery *query, GstFormat *format, - gint64 *start, gint64 *stop, - gint64 *estimated_total); - -gboolean gst_query_add_buffering_range (GstQuery *query, - gint64 start, gint64 stop); -guint gst_query_get_n_buffering_ranges (GstQuery *query); -gboolean gst_query_parse_nth_buffering_range (GstQuery *query, - guint index, gint64 *start, - gint64 *stop); - -/* URI query */ -GstQuery * gst_query_new_uri (void) G_GNUC_MALLOC; -void gst_query_parse_uri (GstQuery *query, gchar **uri); -void gst_query_set_uri (GstQuery *query, const gchar *uri); - -/* allocation query */ -GstQuery * gst_query_new_allocation (GstCaps *caps, gboolean need_pool) G_GNUC_MALLOC; -void gst_query_parse_allocation (GstQuery *query, GstCaps **caps, gboolean *need_pool); - -/* pools */ -void gst_query_add_allocation_pool (GstQuery *query, GstBufferPool *pool, - guint size, guint min_buffers, - guint max_buffers); -guint gst_query_get_n_allocation_pools (GstQuery *query); -void gst_query_parse_nth_allocation_pool (GstQuery *query, guint index, - GstBufferPool **pool, - guint *size, guint *min_buffers, - guint *max_buffers); -void gst_query_set_nth_allocation_pool (GstQuery *query, guint index, - GstBufferPool *pool, - guint size, guint min_buffers, - guint max_buffers); - -/* allocators */ -void gst_query_add_allocation_param (GstQuery *query, GstAllocator *allocator, - const GstAllocationParams *params); -guint gst_query_get_n_allocation_params (GstQuery *query); -void gst_query_parse_nth_allocation_param (GstQuery *query, guint index, - GstAllocator **allocator, - GstAllocationParams *params); -void gst_query_set_nth_allocation_param (GstQuery *query, guint index, - GstAllocator *allocator, - const GstAllocationParams *params); - -/* metadata */ -void gst_query_add_allocation_meta (GstQuery *query, GType api, const GstStructure *params); -guint gst_query_get_n_allocation_metas (GstQuery *query); -GType gst_query_parse_nth_allocation_meta (GstQuery *query, guint index, - const GstStructure **params); -void gst_query_remove_nth_allocation_meta (GstQuery *query, guint index); -gboolean gst_query_find_allocation_meta (GstQuery *query, GType api, guint *index); - - -/* scheduling query */ -/** - * GstSchedulingFlags: - * @GST_SCHEDULING_FLAG_SEEKABLE: if seeking is possible - * @GST_SCHEDULING_FLAG_SEQUENTIAL: if sequential access is recommended - * - * The different scheduling flags. - */ -typedef enum { - GST_SCHEDULING_FLAG_SEEKABLE = (1 << 0), - GST_SCHEDULING_FLAG_SEQUENTIAL = (1 << 1) -} GstSchedulingFlags; - -GstQuery * gst_query_new_scheduling (void) G_GNUC_MALLOC; - -void gst_query_set_scheduling (GstQuery *query, GstSchedulingFlags flags, - gint minsize, gint maxsize, gint align); -void gst_query_parse_scheduling (GstQuery *query, GstSchedulingFlags *flags, - gint *minsize, gint *maxsize, gint *align); - -void gst_query_add_scheduling_mode (GstQuery *query, GstPadMode mode); -guint gst_query_get_n_scheduling_modes (GstQuery *query); -GstPadMode gst_query_parse_nth_scheduling_mode (GstQuery *query, guint index); -gboolean gst_query_has_scheduling_mode (GstQuery *query, GstPadMode mode); -gboolean gst_query_has_scheduling_mode_with_flags (GstQuery * query, GstPadMode mode, - GstSchedulingFlags flags); - -/* accept-caps query */ -GstQuery * gst_query_new_accept_caps (GstCaps *caps) G_GNUC_MALLOC; -void gst_query_parse_accept_caps (GstQuery *query, GstCaps **caps); -void gst_query_set_accept_caps_result (GstQuery *query, gboolean result); -void gst_query_parse_accept_caps_result (GstQuery *query, gboolean *result); - -/* caps query */ -GstQuery * gst_query_new_caps (GstCaps *filter) G_GNUC_MALLOC; -void gst_query_parse_caps (GstQuery *query, GstCaps **filter); - -void gst_query_set_caps_result (GstQuery *query, GstCaps *caps); -void gst_query_parse_caps_result (GstQuery *query, GstCaps **caps); - -/* drain query */ -GstQuery * gst_query_new_drain (void) G_GNUC_MALLOC; - -G_END_DECLS - -#endif /* __GST_QUERY_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstregistry.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstregistry.h deleted file mode 100644 index f17fe7f9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstregistry.h +++ /dev/null @@ -1,105 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstregistry.h: Header for registry handling - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_REGISTRY_H__ -#define __GST_REGISTRY_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_REGISTRY (gst_registry_get_type ()) -#define GST_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_REGISTRY, GstRegistry)) -#define GST_IS_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_REGISTRY)) -#define GST_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_REGISTRY, GstRegistryClass)) -#define GST_IS_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_REGISTRY)) -#define GST_REGISTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_REGISTRY, GstRegistryClass)) - -typedef struct _GstRegistry GstRegistry; -typedef struct _GstRegistryClass GstRegistryClass; -typedef struct _GstRegistryPrivate GstRegistryPrivate; - -/** - * GstRegistry: - * - * Opaque #GstRegistry structure. - */ -struct _GstRegistry { - GstObject object; - - /*< private >*/ - GstRegistryPrivate *priv; -}; - -struct _GstRegistryClass { - GstObjectClass parent_class; -}; - -GType gst_registry_get_type (void); - -GstRegistry * gst_registry_get (void); - -gboolean gst_registry_scan_path (GstRegistry *registry, const gchar *path); - -#if 0 -void gst_registry_add_path (GstRegistry * registry, const gchar * path); -GList* gst_registry_get_path_list (GstRegistry *registry); -#endif - -gboolean gst_registry_add_plugin (GstRegistry *registry, GstPlugin *plugin); -void gst_registry_remove_plugin (GstRegistry *registry, GstPlugin *plugin); -gboolean gst_registry_add_feature (GstRegistry * registry, GstPluginFeature * feature); -void gst_registry_remove_feature (GstRegistry * registry, GstPluginFeature * feature); - -GList* gst_registry_get_plugin_list (GstRegistry *registry); -GList* gst_registry_plugin_filter (GstRegistry *registry, - GstPluginFilter filter, - gboolean first, - gpointer user_data); -GList* gst_registry_feature_filter (GstRegistry *registry, - GstPluginFeatureFilter filter, - gboolean first, - gpointer user_data); -GList * gst_registry_get_feature_list (GstRegistry *registry, - GType type); -GList * gst_registry_get_feature_list_by_plugin (GstRegistry *registry, const gchar *name); -guint32 gst_registry_get_feature_list_cookie (GstRegistry *registry); - -GstPlugin* gst_registry_find_plugin (GstRegistry *registry, const gchar *name); -GstPluginFeature* gst_registry_find_feature (GstRegistry *registry, const gchar *name, GType type); - -GstPlugin * gst_registry_lookup (GstRegistry *registry, const char *filename); -GstPluginFeature * gst_registry_lookup_feature (GstRegistry *registry, const char *name); - -gboolean gst_registry_check_feature_version (GstRegistry *registry, - const gchar *feature_name, - guint min_major, - guint min_minor, - guint min_micro); - -G_END_DECLS - -#endif /* __GST_REGISTRY_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsample.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsample.h deleted file mode 100644 index 97a3843b..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsample.h +++ /dev/null @@ -1,129 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstsample.h: Header for GstSample object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SAMPLE_H__ -#define __GST_SAMPLE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_sample_type; - -#define GST_TYPE_SAMPLE (_gst_sample_type) -#define GST_IS_SAMPLE(obj) (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_SAMPLE)) -#define GST_SAMPLE_CAST(obj) ((GstSample *)obj) -#define GST_SAMPLE(obj) (GST_SAMPLE_CAST(obj)) - -/** - * GstSample: - * - * The opaque structure of a #GstSample. A sample contains a typed memory - * block and the associated timing information. It is mainly used to - * exchange buffers with an application. - */ -typedef struct _GstSample GstSample; - -GType gst_sample_get_type (void); - -/* allocation */ -GstSample * gst_sample_new (GstBuffer *buffer, - GstCaps *caps, - const GstSegment *segment, - GstStructure *info); - -GstBuffer * gst_sample_get_buffer (GstSample *sample); -GstCaps * gst_sample_get_caps (GstSample *sample); -GstSegment * gst_sample_get_segment (GstSample *sample); -const GstStructure * gst_sample_get_info (GstSample *sample); - -/* refcounting */ -/** - * gst_sample_ref: - * @sample: a #GstSample - * - * Increases the refcount of the given sample by one. - * - * Returns: (transfer full): @sample - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstSample * gst_sample_ref (GstSample * sample); -#endif - -static inline GstSample * -gst_sample_ref (GstSample * sample) -{ - return GST_SAMPLE_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST ( - sample))); -} - -/** - * gst_sample_unref: - * @sample: (transfer full): a #GstSample - * - * Decreases the refcount of the sample. If the refcount reaches 0, the - * sample will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_sample_unref (GstSample * sample); -#endif - -static inline void -gst_sample_unref (GstSample * sample) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (sample)); -} - -/** - * gst_value_set_sample: - * @v: a #GValue to receive the data - * @b: (transfer none): a #GstSample to assign to the GstValue - * - * Sets @b as the value of @v. Caller retains reference to sample. - */ -#define gst_value_set_sample(v,b) g_value_set_boxed((v),(b)) -/** - * gst_value_take_sample: - * @v: a #GValue to receive the data - * @b: (transfer full): a #GstSample to assign to the GstValue - * - * Sets @b as the value of @v. Caller gives away reference to sample. - */ -#define gst_value_take_sample(v,b) g_value_take_boxed(v,(b)) -/** - * gst_value_get_sample: - * @v: a #GValue to query - * - * Receives a #GstSample as the value of @v. Does not return a reference to - * the sample, so the pointer is only valid for as long as the caller owns - * a reference to @v. - * - * Returns: (transfer none): sample - */ -#define gst_value_get_sample(v) GST_SAMPLE_CAST (g_value_get_boxed(v)) - -G_END_DECLS - -#endif /* __GST_SAMPLE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsegment.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsegment.h deleted file mode 100644 index c364ce60..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsegment.h +++ /dev/null @@ -1,205 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Wim Taymans - * - * gstsegment.h: Header for GstSegment subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SEGMENT_H__ -#define __GST_SEGMENT_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_SEGMENT (gst_segment_get_type()) - -typedef struct _GstSegment GstSegment; - -/** - * GstSeekType: - * @GST_SEEK_TYPE_NONE: no change in position is required - * @GST_SEEK_TYPE_SET: absolute position is requested - * @GST_SEEK_TYPE_END: relative position to duration is requested - * - * The different types of seek events. When constructing a seek event with - * gst_event_new_seek() or when doing gst_segment_do_seek (). - */ -typedef enum { - /* one of these */ - GST_SEEK_TYPE_NONE = 0, - GST_SEEK_TYPE_SET = 1, - GST_SEEK_TYPE_END = 2 -} GstSeekType; - -/** - * GstSeekFlags: - * @GST_SEEK_FLAG_NONE: no flag - * @GST_SEEK_FLAG_FLUSH: flush pipeline - * @GST_SEEK_FLAG_ACCURATE: accurate position is requested, this might - * be considerably slower for some formats. - * @GST_SEEK_FLAG_KEY_UNIT: seek to the nearest keyframe. This might be - * faster but less accurate. - * @GST_SEEK_FLAG_SEGMENT: perform a segment seek. - * @GST_SEEK_FLAG_SKIP: when doing fast foward or fast reverse playback, allow - * elements to skip frames instead of generating all - * frames. - * @GST_SEEK_FLAG_SNAP_BEFORE: go to a location before the requested position, - * if KEY_UNIT this means the keyframe at or before the - * requested position the one at or before the seek target. - * @GST_SEEK_FLAG_SNAP_AFTER: go to a location after the requested position, - * if KEY_UNIT this means the keyframe at of after the - * requested position. - * @GST_SEEK_FLAG_SNAP_NEAREST: go to a position near the requested position, - * if KEY_UNIT this means the keyframe closest to the - * requested position, if both keyframes are at an equal - * distance, behaves like SNAP_BEFORE. - * - * Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags - * can be used together. - * - * A non flushing seek might take some time to perform as the currently - * playing data in the pipeline will not be cleared. - * - * An accurate seek might be slower for formats that don't have any indexes - * or timestamp markers in the stream. Specifying this flag might require a - * complete scan of the file in those cases. - * - * When performing a segment seek: after the playback of the segment completes, - * no EOS will be emmited by the element that performed the seek, but a - * #GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element. - * When this message is posted, it is possible to send a new seek event to - * continue playback. With this seek method it is possible to perform seamless - * looping or simple linear editing. - * - * When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode - * playback, the @GST_SEEK_FLAG_SKIP flag can be used to instruct decoders - * and demuxers to adjust the playback rate by skipping frames. This can improve - * performance and decrease CPU usage because not all frames need to be decoded. - * - * The @GST_SEEK_FLAG_SNAP_BEFORE flag can be used to snap to the previous - * relevant location, and the @GST_SEEK_FLAG_SNAP_AFTER flag can be used to - * select the next relevant location. If KEY_UNIT is specified, the relevant - * location is a keyframe. If both flags are specified, the nearest of these - * locations will be selected. If none are specified, the implementation is - * free to select whichever it wants. - * The before and after here are in running time, so when playing backwards, - * the next location refers to the one that will played in next, and not the - * one that is located after in the actual source stream. - * - * Also see part-seeking.txt in the GStreamer design documentation for more - * details on the meaning of these flags and the behaviour expected of - * elements that handle them. - */ -typedef enum { - GST_SEEK_FLAG_NONE = 0, - GST_SEEK_FLAG_FLUSH = (1 << 0), - GST_SEEK_FLAG_ACCURATE = (1 << 1), - GST_SEEK_FLAG_KEY_UNIT = (1 << 2), - GST_SEEK_FLAG_SEGMENT = (1 << 3), - GST_SEEK_FLAG_SKIP = (1 << 4), - GST_SEEK_FLAG_SNAP_BEFORE = (1 << 5), - GST_SEEK_FLAG_SNAP_AFTER = (1 << 6), - GST_SEEK_FLAG_SNAP_NEAREST = GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER, - /* Careful to restart next flag with 1<<7 here */ -} GstSeekFlags; - -/** - * GstSegmentFlags: - * @GST_SEGMENT_FLAG_NONE: no flags - * @GST_SEGMENT_FLAG_RESET: reset the pipeline running_time to the segment - * running_time - * @GST_SEGMENT_FLAG_SKIP: perform skip playback - * @GST_SEGMENT_FLAG_SEGMENT: send SEGMENT_DONE instead of EOS - * - * Flags for the GstSegment structure. Currently mapped to the corresponding - * values of the seek flags. - */ -/* Note: update gst_segment_do_seek() when adding new flags here */ -typedef enum { /*< flags >*/ - GST_SEGMENT_FLAG_NONE = GST_SEEK_FLAG_NONE, - GST_SEGMENT_FLAG_RESET = GST_SEEK_FLAG_FLUSH, - GST_SEGMENT_FLAG_SKIP = GST_SEEK_FLAG_SKIP, - GST_SEGMENT_FLAG_SEGMENT = GST_SEEK_FLAG_SEGMENT -} GstSegmentFlags; - -/** - * GstSegment: - * @flags: flags for this segment - * @rate: the rate of the segment - * @applied_rate: the already applied rate to the segment - * @format: the format of the segment values - * @base: the base of the segment - * @offset: the offset to apply to @start or @stop - * @start: the start of the segment - * @stop: the stop of the segment - * @time: the stream time of the segment - * @position: the position in the segment - * @duration: the duration of the segment - * - * A helper structure that holds the configured region of - * interest in a media file. - */ -struct _GstSegment { - /*< public >*/ - GstSegmentFlags flags; - - gdouble rate; - gdouble applied_rate; - - GstFormat format; - guint64 base; - guint64 offset; - guint64 start; - guint64 stop; - guint64 time; - - guint64 position; - guint64 duration; - - /* < private > */ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_segment_get_type (void); - -GstSegment * gst_segment_new (void) G_GNUC_MALLOC; -GstSegment * gst_segment_copy (const GstSegment *segment) G_GNUC_MALLOC; -void gst_segment_copy_into (const GstSegment *src, GstSegment *dest); -void gst_segment_free (GstSegment *segment); - -void gst_segment_init (GstSegment *segment, GstFormat format); - -guint64 gst_segment_to_stream_time (const GstSegment *segment, GstFormat format, guint64 position); -guint64 gst_segment_to_running_time (const GstSegment *segment, GstFormat format, guint64 position); -guint64 gst_segment_to_position (const GstSegment *segment, GstFormat format, guint64 running_time); - -gboolean gst_segment_set_running_time (GstSegment *segment, GstFormat format, guint64 running_time); - -gboolean gst_segment_clip (const GstSegment *segment, GstFormat format, guint64 start, - guint64 stop, guint64 *clip_start, guint64 *clip_stop); - - -gboolean gst_segment_do_seek (GstSegment * segment, gdouble rate, - GstFormat format, GstSeekFlags flags, - GstSeekType start_type, guint64 start, - GstSeekType stop_type, guint64 stop, gboolean * update); - -G_END_DECLS - -#endif /* __GST_SEGMENT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gststructure.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gststructure.h deleted file mode 100644 index 90c4b59b..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gststructure.h +++ /dev/null @@ -1,260 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 David A. Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_STRUCTURE_H__ -#define __GST_STRUCTURE_H__ - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -GST_EXPORT GType _gst_structure_type; - -typedef struct _GstStructure GstStructure; - -#define GST_TYPE_STRUCTURE (_gst_structure_type) -#define GST_IS_STRUCTURE(object) ((object) && (GST_STRUCTURE(object)->type == GST_TYPE_STRUCTURE)) -#define GST_STRUCTURE_CAST(object) ((GstStructure *)(object)) -#define GST_STRUCTURE(object) (GST_STRUCTURE_CAST(object)) - - -/** - * GstStructureForeachFunc: - * @field_id: the #GQuark of the field name - * @value: the #GValue of the field - * @user_data: user data - * - * A function that will be called in gst_structure_foreach(). The function may - * not modify @value. - * - * Returns: TRUE if the foreach operation should continue, FALSE if - * the foreach operation should stop with FALSE. - */ -typedef gboolean (*GstStructureForeachFunc) (GQuark field_id, - const GValue * value, - gpointer user_data); - -/** - * GstStructureMapFunc: - * @field_id: the #GQuark of the field name - * @value: the #GValue of the field - * @user_data: user data - * - * A function that will be called in gst_structure_map_in_place(). The function - * may modify @value. - * - * Returns: TRUE if the map operation should continue, FALSE if - * the map operation should stop with FALSE. - */ -typedef gboolean (*GstStructureMapFunc) (GQuark field_id, - GValue * value, - gpointer user_data); - -/** - * GstStructure: - * @type: the GType of a structure - * - * The GstStructure object. Most fields are private. - */ -struct _GstStructure { - GType type; - - /*< private >*/ - GQuark name; -}; - -GType gst_structure_get_type (void); - -GstStructure * gst_structure_new_empty (const gchar * name) G_GNUC_MALLOC; -GstStructure * gst_structure_new_id_empty (GQuark quark) G_GNUC_MALLOC; -GstStructure * gst_structure_new (const gchar * name, - const gchar * firstfield, - ...) G_GNUC_NULL_TERMINATED G_GNUC_MALLOC; -GstStructure * gst_structure_new_valist (const gchar * name, - const gchar * firstfield, - va_list varargs) G_GNUC_MALLOC; -GstStructure * gst_structure_new_id (GQuark name_quark, - GQuark field_quark, - ...) G_GNUC_MALLOC; -GstStructure * gst_structure_copy (const GstStructure *structure) G_GNUC_MALLOC; -gboolean gst_structure_set_parent_refcount (GstStructure *structure, - gint *refcount); -void gst_structure_free (GstStructure *structure); - -const gchar * gst_structure_get_name (const GstStructure *structure); -GQuark gst_structure_get_name_id (const GstStructure *structure); -gboolean gst_structure_has_name (const GstStructure *structure, - const gchar *name); -void gst_structure_set_name (GstStructure *structure, - const gchar *name); - -void gst_structure_id_set_value (GstStructure *structure, - GQuark field, - const GValue *value); -void gst_structure_set_value (GstStructure *structure, - const gchar *fieldname, - const GValue *value); -void gst_structure_id_take_value (GstStructure *structure, - GQuark field, - GValue *value); -void gst_structure_take_value (GstStructure *structure, - const gchar *fieldname, - GValue *value); -void gst_structure_set (GstStructure *structure, - const gchar *fieldname, - ...) G_GNUC_NULL_TERMINATED; - -void gst_structure_set_valist (GstStructure *structure, - const gchar *fieldname, - va_list varargs); - -void gst_structure_id_set (GstStructure *structure, - GQuark fieldname, - ...) G_GNUC_NULL_TERMINATED; - -void gst_structure_id_set_valist (GstStructure *structure, - GQuark fieldname, - va_list varargs); - -gboolean gst_structure_get_valist (const GstStructure *structure, - const char *first_fieldname, - va_list args); - -gboolean gst_structure_get (const GstStructure *structure, - const char *first_fieldname, - ...) G_GNUC_NULL_TERMINATED; - -gboolean gst_structure_id_get_valist (const GstStructure *structure, - GQuark first_field_id, - va_list args); - -gboolean gst_structure_id_get (const GstStructure *structure, - GQuark first_field_id, - ...) G_GNUC_NULL_TERMINATED; - -const GValue * gst_structure_id_get_value (const GstStructure *structure, - GQuark field); -const GValue * gst_structure_get_value (const GstStructure *structure, - const gchar *fieldname); -void gst_structure_remove_field (GstStructure *structure, - const gchar *fieldname); -void gst_structure_remove_fields (GstStructure *structure, - const gchar *fieldname, - ...) G_GNUC_NULL_TERMINATED; -void gst_structure_remove_fields_valist (GstStructure *structure, - const gchar *fieldname, - va_list varargs); -void gst_structure_remove_all_fields (GstStructure *structure); - -GType gst_structure_get_field_type (const GstStructure *structure, - const gchar *fieldname); -gboolean gst_structure_foreach (const GstStructure *structure, - GstStructureForeachFunc func, - gpointer user_data); -gboolean gst_structure_map_in_place (GstStructure *structure, - GstStructureMapFunc func, - gpointer user_data); -gint gst_structure_n_fields (const GstStructure *structure); -const gchar * gst_structure_nth_field_name (const GstStructure *structure, guint index); -gboolean gst_structure_id_has_field (const GstStructure *structure, - GQuark field); -gboolean gst_structure_id_has_field_typed (const GstStructure *structure, - GQuark field, - GType type); -gboolean gst_structure_has_field (const GstStructure *structure, - const gchar *fieldname); -gboolean gst_structure_has_field_typed (const GstStructure *structure, - const gchar *fieldname, - GType type); - -/* utility functions */ -gboolean gst_structure_get_boolean (const GstStructure *structure, - const gchar *fieldname, - gboolean *value); -gboolean gst_structure_get_int (const GstStructure *structure, - const gchar *fieldname, - gint *value); -gboolean gst_structure_get_uint (const GstStructure *structure, - const gchar *fieldname, - guint *value); -gboolean gst_structure_get_double (const GstStructure *structure, - const gchar *fieldname, - gdouble *value); -gboolean gst_structure_get_date (const GstStructure *structure, - const gchar *fieldname, - GDate **value); -gboolean gst_structure_get_date_time (const GstStructure *structure, - const gchar *fieldname, - GstDateTime **value); -gboolean gst_structure_get_clock_time (const GstStructure *structure, - const gchar *fieldname, - GstClockTime *value); -const gchar * gst_structure_get_string (const GstStructure *structure, - const gchar *fieldname); -gboolean gst_structure_get_enum (const GstStructure *structure, - const gchar *fieldname, - GType enumtype, - gint *value); -gboolean gst_structure_get_fraction (const GstStructure *structure, - const gchar *fieldname, - gint *value_numerator, - gint *value_denominator); - -gchar * gst_structure_to_string (const GstStructure *structure) G_GNUC_MALLOC; -GstStructure * gst_structure_from_string (const gchar *string, - gchar **end) G_GNUC_MALLOC; - -gboolean gst_structure_fixate_field_nearest_int (GstStructure *structure, - const char *field_name, - int target); -gboolean gst_structure_fixate_field_nearest_double (GstStructure *structure, - const char *field_name, - double target); - -gboolean gst_structure_fixate_field_boolean (GstStructure *structure, - const char *field_name, - gboolean target); -gboolean gst_structure_fixate_field_string (GstStructure *structure, - const char *field_name, - const gchar *target); -gboolean gst_structure_fixate_field_nearest_fraction (GstStructure *structure, - const char *field_name, - const gint target_numerator, - const gint target_denominator); -gboolean gst_structure_fixate_field (GstStructure *structure, - const char *field_name); - -gboolean gst_structure_is_equal(const GstStructure *structure1, - const GstStructure *structure2); -gboolean gst_structure_is_subset(const GstStructure *subset, - const GstStructure *superset); -gboolean gst_structure_can_intersect(const GstStructure *struct1, - const GstStructure *struct2); -GstStructure* gst_structure_intersect (const GstStructure *struct1, - const GstStructure *struct2) G_GNUC_MALLOC; -void gst_structure_fixate (GstStructure *structure); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsystemclock.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsystemclock.h deleted file mode 100644 index fc3b9b18..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstsystemclock.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2005 Wim Taymans - * - * gstsystemclock.h: A clock implementation based on system time - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SYSTEM_CLOCK_H__ -#define __GST_SYSTEM_CLOCK_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_SYSTEM_CLOCK (gst_system_clock_get_type ()) -#define GST_SYSTEM_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SYSTEM_CLOCK, GstSystemClock)) -#define GST_SYSTEM_CLOCK_CAST(obj) ((GstSystemClock *)(obj)) -#define GST_IS_SYSTEM_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SYSTEM_CLOCK)) -#define GST_SYSTEM_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SYSTEM_CLOCK, GstSystemClockClass)) -#define GST_IS_SYSTEM_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SYSTEM_CLOCK)) -#define GST_SYSTEM_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_SYSTEM_CLOCK, GstSystemClockClass)) - - -typedef struct _GstSystemClock GstSystemClock; -typedef struct _GstSystemClockClass GstSystemClockClass; -typedef struct _GstSystemClockPrivate GstSystemClockPrivate; - -/** - * GstClockType: - * @GST_CLOCK_TYPE_REALTIME: time since Epoch - * @GST_CLOCK_TYPE_MONOTONIC: monotonic time since some unspecified starting - * point - * @GST_CLOCK_TYPE_OTHER: some other time source is used (Since: 1.0.5) - * - * The different kind of clocks. - */ -typedef enum { - GST_CLOCK_TYPE_REALTIME = 0, - GST_CLOCK_TYPE_MONOTONIC = 1, - GST_CLOCK_TYPE_OTHER = 2 -} GstClockType; - -/** - * GstSystemClock: - * - * The default implementation of a #GstClock that uses the system time. - */ -struct _GstSystemClock { - GstClock clock; - - /*< private >*/ - GstSystemClockPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstSystemClockClass { - GstClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_system_clock_get_type (void); - -GstClock* gst_system_clock_obtain (void); - -G_END_DECLS - -#endif /* __GST_SYSTEM_CLOCK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaglist.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaglist.h deleted file mode 100644 index a818105e..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaglist.h +++ /dev/null @@ -1,1049 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttaglist.h: Header for tag support - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TAGLIST_H__ -#define __GST_TAGLIST_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstTagMergeMode: - * @GST_TAG_MERGE_UNDEFINED: undefined merge mode - * @GST_TAG_MERGE_REPLACE_ALL: replace all tags (clear list and append) - * @GST_TAG_MERGE_REPLACE: replace tags - * @GST_TAG_MERGE_APPEND: append tags - * @GST_TAG_MERGE_PREPEND: prepend tags - * @GST_TAG_MERGE_KEEP: keep existing tags - * @GST_TAG_MERGE_KEEP_ALL: keep all existing tags - * @GST_TAG_MERGE_COUNT: the number of merge modes - * - * The different tag merging modes are basically replace, overwrite and append, - * but they can be seen from two directions. Given two taglists: (A) the tags - * already in the element and (B) the ones that are supplied to the element ( - * e.g. via gst_tag_setter_merge_tags() / gst_tag_setter_add_tags() or a - * %GST_EVENT_TAG), how are these tags merged? - * In the table below this is shown for the cases that a tag exists in the list - * (A) or does not exists (!A) and combinations thereof. - * - * - * merge mode - * - * - * - * merge mode - * A + B - * A + !B - * !A + B - * !A + !B - * - * - * - * - * REPLACE_ALL - * B - * - - * B - * - - * - * - * REPLACE - * B - * A - * B - * - - * - * - * APPEND - * A, B - * A - * B - * - - * - * - * PREPEND - * B, A - * A - * B - * - - * - * - * KEEP - * A - * A - * B - * - - * - * - * KEEP_ALL - * A - * A - * - - * - - * - * - * - *
    - */ -typedef enum { - GST_TAG_MERGE_UNDEFINED, - GST_TAG_MERGE_REPLACE_ALL, - GST_TAG_MERGE_REPLACE, - GST_TAG_MERGE_APPEND, - GST_TAG_MERGE_PREPEND, - GST_TAG_MERGE_KEEP, - GST_TAG_MERGE_KEEP_ALL, - /* add more */ - GST_TAG_MERGE_COUNT -} GstTagMergeMode; - -#define GST_TAG_MODE_IS_VALID(mode) (((mode) > GST_TAG_MERGE_UNDEFINED) && ((mode) < GST_TAG_MERGE_COUNT)) - -/** - * GstTagFlag: - * @GST_TAG_FLAG_UNDEFINED: undefined flag - * @GST_TAG_FLAG_META: tag is meta data - * @GST_TAG_FLAG_ENCODED: tag is encoded - * @GST_TAG_FLAG_DECODED: tag is decoded - * @GST_TAG_FLAG_COUNT: number of tag flags - * - * Extra tag flags used when registering tags. - */ -/* FIXME: these are not really flags .. */ -typedef enum { - GST_TAG_FLAG_UNDEFINED, - GST_TAG_FLAG_META, - GST_TAG_FLAG_ENCODED, - GST_TAG_FLAG_DECODED, - GST_TAG_FLAG_COUNT -} GstTagFlag; - -#define GST_TAG_FLAG_IS_VALID(flag) (((flag) > GST_TAG_FLAG_UNDEFINED) && ((flag) < GST_TAG_FLAG_COUNT)) - -/** - * GstTagList: - * @mini_object: the parent type - * - * Object describing tags / metadata. - */ -typedef struct _GstTagList GstTagList; -struct _GstTagList { - GstMiniObject mini_object; -}; - -#define GST_TAG_LIST(x) ((GstTagList *) (x)) -#define GST_TYPE_TAG_LIST (gst_tag_list_get_type ()) -#define GST_IS_TAG_LIST(obj) (GST_IS_MINI_OBJECT_TYPE((obj), GST_TYPE_TAG_LIST)) - -/** - * GstTagForeachFunc: - * @list: the #GstTagList - * @tag: a name of a tag in @list - * @user_data: user data - * - * A function that will be called in gst_tag_list_foreach(). The function may - * not modify the tag list. - */ -typedef void (*GstTagForeachFunc) (const GstTagList * list, - const gchar * tag, - gpointer user_data); - -/** - * GstTagMergeFunc: - * @dest: the destination #GValue - * @src: the source #GValue - * - * A function for merging multiple values of a tag used when registering - * tags. - */ -typedef void (* GstTagMergeFunc) (GValue *dest, const GValue *src); - -GType gst_tag_list_get_type (void); - -/* tag registration */ -void gst_tag_register (const gchar * name, - GstTagFlag flag, - GType type, - const gchar * nick, - const gchar * blurb, - GstTagMergeFunc func); - -void gst_tag_register_static (const gchar * name, - GstTagFlag flag, - GType type, - const gchar * nick, - const gchar * blurb, - GstTagMergeFunc func); - -/* some default merging functions */ -void gst_tag_merge_use_first (GValue * dest, const GValue * src); -void gst_tag_merge_strings_with_comma (GValue * dest, const GValue * src); - -/* basic tag support */ -gboolean gst_tag_exists (const gchar * tag); -GType gst_tag_get_type (const gchar * tag); -const gchar * gst_tag_get_nick (const gchar * tag); -const gchar * gst_tag_get_description (const gchar * tag); -GstTagFlag gst_tag_get_flag (const gchar * tag); -gboolean gst_tag_is_fixed (const gchar * tag); - -/* tag lists */ - -/** - * GstTagScope: - * @GST_TAG_SCOPE_STREAM: tags specific to this single stream - * @GST_TAG_SCOPE_GLOBAL: global tags for the complete medium - * - * GstTagScope specifies if a taglist applies to the complete - * medium or only to one single stream. - */ -typedef enum { - GST_TAG_SCOPE_STREAM, - GST_TAG_SCOPE_GLOBAL -} GstTagScope; - -GstTagList * gst_tag_list_new_empty (void) G_GNUC_MALLOC; -GstTagList * gst_tag_list_new (const gchar * tag, ...) G_GNUC_MALLOC; -GstTagList * gst_tag_list_new_valist (va_list var_args) G_GNUC_MALLOC; - -void gst_tag_list_set_scope (GstTagList * list, GstTagScope scope); -GstTagScope gst_tag_list_get_scope (const GstTagList * list); - -gchar * gst_tag_list_to_string (const GstTagList * list) G_GNUC_MALLOC; -GstTagList * gst_tag_list_new_from_string (const gchar * str) G_GNUC_MALLOC; - -gint gst_tag_list_n_tags (const GstTagList * list); -const gchar* gst_tag_list_nth_tag_name (const GstTagList * list, guint index); -gboolean gst_tag_list_is_empty (const GstTagList * list); -gboolean gst_tag_list_is_equal (const GstTagList * list1, - const GstTagList * list2); -void gst_tag_list_insert (GstTagList * into, - const GstTagList * from, - GstTagMergeMode mode); -GstTagList * gst_tag_list_merge (const GstTagList * list1, - const GstTagList * list2, - GstTagMergeMode mode) G_GNUC_MALLOC; -guint gst_tag_list_get_tag_size (const GstTagList * list, - const gchar * tag); -void gst_tag_list_add (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; -void gst_tag_list_add_values (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; -void gst_tag_list_add_valist (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); -void gst_tag_list_add_valist_values (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); -void gst_tag_list_add_value (GstTagList * list, - GstTagMergeMode mode, - const gchar * tag, - const GValue * value); -void gst_tag_list_remove_tag (GstTagList * list, - const gchar * tag); -void gst_tag_list_foreach (const GstTagList * list, - GstTagForeachFunc func, - gpointer user_data); - -const GValue * - gst_tag_list_get_value_index (const GstTagList * list, - const gchar * tag, - guint index); -gboolean gst_tag_list_copy_value (GValue * dest, - const GstTagList * list, - const gchar * tag); - -/* simplifications (FIXME: do we want them?) */ -gboolean gst_tag_list_get_boolean (const GstTagList * list, - const gchar * tag, - gboolean * value); -gboolean gst_tag_list_get_boolean_index (const GstTagList * list, - const gchar * tag, - guint index, - gboolean * value); -gboolean gst_tag_list_get_int (const GstTagList * list, - const gchar * tag, - gint * value); -gboolean gst_tag_list_get_int_index (const GstTagList * list, - const gchar * tag, - guint index, - gint * value); -gboolean gst_tag_list_get_uint (const GstTagList * list, - const gchar * tag, - guint * value); -gboolean gst_tag_list_get_uint_index (const GstTagList * list, - const gchar * tag, - guint index, - guint * value); -gboolean gst_tag_list_get_int64 (const GstTagList * list, - const gchar * tag, - gint64 * value); -gboolean gst_tag_list_get_int64_index (const GstTagList * list, - const gchar * tag, - guint index, - gint64 * value); -gboolean gst_tag_list_get_uint64 (const GstTagList * list, - const gchar * tag, - guint64 * value); -gboolean gst_tag_list_get_uint64_index (const GstTagList * list, - const gchar * tag, - guint index, - guint64 * value); -gboolean gst_tag_list_get_float (const GstTagList * list, - const gchar * tag, - gfloat * value); -gboolean gst_tag_list_get_float_index (const GstTagList * list, - const gchar * tag, - guint index, - gfloat * value); -gboolean gst_tag_list_get_double (const GstTagList * list, - const gchar * tag, - gdouble * value); -gboolean gst_tag_list_get_double_index (const GstTagList * list, - const gchar * tag, - guint index, - gdouble * value); -gboolean gst_tag_list_get_string (const GstTagList * list, - const gchar * tag, - gchar ** value); -gboolean gst_tag_list_get_string_index (const GstTagList * list, - const gchar * tag, - guint index, - gchar ** value); -gboolean gst_tag_list_peek_string_index (const GstTagList * list, - const gchar * tag, - guint index, - const gchar ** value); -gboolean gst_tag_list_get_pointer (const GstTagList * list, - const gchar * tag, - gpointer * value); -gboolean gst_tag_list_get_pointer_index (const GstTagList * list, - const gchar * tag, - guint index, - gpointer * value); -gboolean gst_tag_list_get_date (const GstTagList * list, - const gchar * tag, - GDate ** value); -gboolean gst_tag_list_get_date_index (const GstTagList * list, - const gchar * tag, - guint index, - GDate ** value); -gboolean gst_tag_list_get_date_time (const GstTagList * list, - const gchar * tag, - GstDateTime ** value); -gboolean gst_tag_list_get_date_time_index (const GstTagList * list, - const gchar * tag, - guint index, - GstDateTime ** value); -gboolean gst_tag_list_get_sample (const GstTagList * list, - const gchar * tag, - GstSample ** sample); -gboolean gst_tag_list_get_sample_index (const GstTagList * list, - const gchar * tag, - guint index, - GstSample ** sample); - -/* refcounting */ -/** - * gst_tag_list_ref: - * @taglist: the #GstTagList to reference - * - * Add a reference to a #GstTagList mini object. - * - * From this point on, until the caller calls gst_tag_list_unref() or - * gst_tag_list_make_writable(), it is guaranteed that the taglist object will - * not change. To use a #GstTagList object, you must always have a refcount on - * it -- either the one made implicitly by e.g. gst_tag_list_new(), or via - * taking one explicitly with this function. - * - * Returns: the same #GstTagList mini object. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstTagList * gst_tag_list_ref (GstTagList * taglist); -#endif - -static inline GstTagList * -gst_tag_list_ref (GstTagList * taglist) -{ - return (GstTagList *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (taglist)); -} - -/** - * gst_tag_list_unref: - * @taglist: a #GstTagList. - * - * Unref a #GstTagList, and and free all its memory when the refcount reaches 0. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void gst_tag_list_unref (GstTagList * taglist); -#endif - -static inline void -gst_tag_list_unref (GstTagList * taglist) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (taglist)); -} - -/** - * gst_tag_list_copy: - * @taglist: a #GstTagList. - * - * Creates a new #GstTagList as a copy of the old @taglist. The new taglist - * will have a refcount of 1, owned by the caller, and will be writable as - * a result. - * - * Note that this function is the semantic equivalent of a gst_tag_list_ref() - * followed by a gst_tag_list_make_writable(). If you only want to hold on to a - * reference to the data, you should use gst_tag_list_ref(). - * - * When you are finished with the taglist, call gst_tag_list_unref() on it. - * - * Returns: the new #GstTagList - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstTagList * gst_tag_list_copy (const GstTagList * taglist); -#endif - -static inline GstTagList * -gst_tag_list_copy (const GstTagList * taglist) -{ - return GST_TAG_LIST (gst_mini_object_copy (GST_MINI_OBJECT_CAST (taglist))); -} - -/** - * gst_tag_list_is_writable: - * @taglist: a #GstTagList - * - * Tests if you can safely modify @taglist. It is only safe to modify taglist - * when there is only one owner of the taglist - ie, the refcount is 1. - */ -#define gst_tag_list_is_writable(taglist) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (taglist)) - -/** - * gst_tag_list_make_writable: - * @taglist: (transfer full): a #GstTagList - * - * Returns a writable copy of @taglist. - * - * If there is only one reference count on @taglist, the caller must be the - * owner, and so this function will return the taglist object unchanged. If on - * the other hand there is more than one reference on the object, a new taglist - * object will be returned (which will be a copy of @taglist). The caller's - * reference on @taglist will be removed, and instead the caller will own a - * reference to the returned object. - * - * In short, this function unrefs the taglist in the argument and refs the - * taglist that it returns. Don't access the argument after calling this - * function. See also: gst_tag_list_ref(). - * - * Returns: (transfer full): a writable taglist which may or may not be the - * same as @taglist - */ -#define gst_tag_list_make_writable(taglist) GST_TAG_LIST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (taglist))) - -/* GStreamer core tags */ -/** - * GST_TAG_TITLE: - * - * commonly used title (string) - * - * The title as it should be displayed, e.g. 'The Doll House' - */ -#define GST_TAG_TITLE "title" -/** - * GST_TAG_TITLE_SORTNAME: - * - * commonly used title, as used for sorting (string) - * - * The title as it should be sorted, e.g. 'Doll House, The' - */ -#define GST_TAG_TITLE_SORTNAME "title-sortname" -/** - * GST_TAG_ARTIST: - * - * person(s) responsible for the recording (string) - * - * The artist name as it should be displayed, e.g. 'Jimi Hendrix' or - * 'The Guitar Heroes' - */ -#define GST_TAG_ARTIST "artist" -/** - * GST_TAG_ARTIST_SORTNAME: - * - * person(s) responsible for the recording, as used for sorting (string) - * - * The artist name as it should be sorted, e.g. 'Hendrix, Jimi' or - * 'Guitar Heroes, The' - */ -#define GST_TAG_ARTIST_SORTNAME "artist-sortname" -/** - * GST_TAG_ALBUM: - * - * album containing this data (string) - * - * The album name as it should be displayed, e.g. 'The Jazz Guitar' - */ -#define GST_TAG_ALBUM "album" -/** - * GST_TAG_ALBUM_SORTNAME: - * - * album containing this data, as used for sorting (string) - * - * The album name as it should be sorted, e.g. 'Jazz Guitar, The' - */ -#define GST_TAG_ALBUM_SORTNAME "album-sortname" -/** - * GST_TAG_ALBUM_ARTIST: - * - * The artist of the entire album, as it should be displayed. - */ -#define GST_TAG_ALBUM_ARTIST "album-artist" -/** - * GST_TAG_ALBUM_ARTIST_SORTNAME: - * - * The artist of the entire album, as it should be sorted. - */ -#define GST_TAG_ALBUM_ARTIST_SORTNAME "album-artist-sortname" -/** - * GST_TAG_COMPOSER: - * - * person(s) who composed the recording (string) - */ -#define GST_TAG_COMPOSER "composer" -/** - * GST_TAG_DATE: - * - * date the data was created (#GDate structure) - */ -#define GST_TAG_DATE "date" -/** - * GST_TAG_DATE_TIME: - * - * date and time the data was created (#GstDateTime structure) - */ -#define GST_TAG_DATE_TIME "datetime" -/** - * GST_TAG_GENRE: - * - * genre this data belongs to (string) - */ -#define GST_TAG_GENRE "genre" -/** - * GST_TAG_COMMENT: - * - * free text commenting the data (string) - */ -#define GST_TAG_COMMENT "comment" -/** - * GST_TAG_EXTENDED_COMMENT: - * - * key/value text commenting the data (string) - * - * Must be in the form of 'key=comment' or - * 'key[lc]=comment' where 'lc' is an ISO-639 - * language code. - * - * This tag is used for unknown Vorbis comment tags, - * unknown APE tags and certain ID3v2 comment fields. - */ -#define GST_TAG_EXTENDED_COMMENT "extended-comment" -/** - * GST_TAG_TRACK_NUMBER: - * - * track number inside a collection (unsigned integer) - */ -#define GST_TAG_TRACK_NUMBER "track-number" -/** - * GST_TAG_TRACK_COUNT: - * - * count of tracks inside collection this track belongs to (unsigned integer) - */ -#define GST_TAG_TRACK_COUNT "track-count" -/** - * GST_TAG_ALBUM_VOLUME_NUMBER: - * - * disc number inside a collection (unsigned integer) - */ -#define GST_TAG_ALBUM_VOLUME_NUMBER "album-disc-number" -/** - * GST_TAG_ALBUM_VOLUME_COUNT: - * - * count of discs inside collection this disc belongs to (unsigned integer) - */ -#define GST_TAG_ALBUM_VOLUME_COUNT "album-disc-count" -/** - * GST_TAG_LOCATION: - * - * Origin of media as a URI (location, where the original of the file or stream - * is hosted) (string) - */ -#define GST_TAG_LOCATION "location" -/** - * GST_TAG_HOMEPAGE: - * - * Homepage for this media (i.e. artist or movie homepage) (string) - */ -#define GST_TAG_HOMEPAGE "homepage" -/** - * GST_TAG_DESCRIPTION: - * - * short text describing the content of the data (string) - */ -#define GST_TAG_DESCRIPTION "description" -/** - * GST_TAG_VERSION: - * - * version of this data (string) - */ -#define GST_TAG_VERSION "version" -/** - * GST_TAG_ISRC: - * - * International Standard Recording Code - see http://www.ifpi.org/isrc/ (string) - */ -#define GST_TAG_ISRC "isrc" -/** - * GST_TAG_ORGANIZATION: - * - * organization (string) - */ -#define GST_TAG_ORGANIZATION "organization" -/** - * GST_TAG_COPYRIGHT: - * - * copyright notice of the data (string) - */ -#define GST_TAG_COPYRIGHT "copyright" -/** - * GST_TAG_COPYRIGHT_URI: - * - * URI to location where copyright details can be found (string) - */ -#define GST_TAG_COPYRIGHT_URI "copyright-uri" -/** - * GST_TAG_ENCODED_BY: - * - * name of the person or organisation that encoded the file. May contain a - * copyright message if the person or organisation also holds the copyright - * (string) - * - * Note: do not use this field to describe the encoding application. Use - * #GST_TAG_APPLICATION_NAME or #GST_TAG_COMMENT for that. - */ -#define GST_TAG_ENCODED_BY "encoded-by" -/** - * GST_TAG_CONTACT: - * - * contact information (string) - */ -#define GST_TAG_CONTACT "contact" -/** - * GST_TAG_LICENSE: - * - * license of data (string) - */ -#define GST_TAG_LICENSE "license" -/** - * GST_TAG_LICENSE_URI: - * - * URI to location where license details can be found (string) - */ -#define GST_TAG_LICENSE_URI "license-uri" -/** - * GST_TAG_PERFORMER: - * - * person(s) performing (string) - */ -#define GST_TAG_PERFORMER "performer" -/** - * GST_TAG_DURATION: - * - * length in GStreamer time units (nanoseconds) (unsigned 64-bit integer) - */ -#define GST_TAG_DURATION "duration" -/** - * GST_TAG_CODEC: - * - * codec the data is stored in (string) - */ -#define GST_TAG_CODEC "codec" -/** - * GST_TAG_VIDEO_CODEC: - * - * codec the video data is stored in (string) - */ -#define GST_TAG_VIDEO_CODEC "video-codec" -/** - * GST_TAG_AUDIO_CODEC: - * - * codec the audio data is stored in (string) - */ -#define GST_TAG_AUDIO_CODEC "audio-codec" -/** - * GST_TAG_SUBTITLE_CODEC: - * - * codec/format the subtitle data is stored in (string) - */ -#define GST_TAG_SUBTITLE_CODEC "subtitle-codec" -/** - * GST_TAG_CONTAINER_FORMAT: - * - * container format the data is stored in (string) - */ -#define GST_TAG_CONTAINER_FORMAT "container-format" -/** - * GST_TAG_BITRATE: - * - * exact or average bitrate in bits/s (unsigned integer) - */ -#define GST_TAG_BITRATE "bitrate" -/** - * GST_TAG_NOMINAL_BITRATE: - * - * nominal bitrate in bits/s (unsigned integer). The actual bitrate might be - * different from this target bitrate. - */ -#define GST_TAG_NOMINAL_BITRATE "nominal-bitrate" -/** - * GST_TAG_MINIMUM_BITRATE: - * - * minimum bitrate in bits/s (unsigned integer) - */ -#define GST_TAG_MINIMUM_BITRATE "minimum-bitrate" -/** - * GST_TAG_MAXIMUM_BITRATE: - * - * maximum bitrate in bits/s (unsigned integer) - */ -#define GST_TAG_MAXIMUM_BITRATE "maximum-bitrate" -/** - * GST_TAG_SERIAL: - * - * serial number of track (unsigned integer) - */ -#define GST_TAG_SERIAL "serial" -/** - * GST_TAG_ENCODER: - * - * encoder used to encode this stream (string) - */ -#define GST_TAG_ENCODER "encoder" -/** - * GST_TAG_ENCODER_VERSION: - * - * version of the encoder used to encode this stream (unsigned integer) - */ -#define GST_TAG_ENCODER_VERSION "encoder-version" -/** - * GST_TAG_TRACK_GAIN: - * - * track gain in db (double) - */ -#define GST_TAG_TRACK_GAIN "replaygain-track-gain" -/** - * GST_TAG_TRACK_PEAK: - * - * peak of the track (double) - */ -#define GST_TAG_TRACK_PEAK "replaygain-track-peak" -/** - * GST_TAG_ALBUM_GAIN: - * - * album gain in db (double) - */ -#define GST_TAG_ALBUM_GAIN "replaygain-album-gain" -/** - * GST_TAG_ALBUM_PEAK: - * - * peak of the album (double) - */ -#define GST_TAG_ALBUM_PEAK "replaygain-album-peak" -/** - * GST_TAG_REFERENCE_LEVEL: - * - * reference level of track and album gain values (double) - */ -#define GST_TAG_REFERENCE_LEVEL "replaygain-reference-level" -/** - * GST_TAG_LANGUAGE_CODE: - * - * ISO-639-2 or ISO-639-1 code for the language the content is in (string) - * - * There is utility API in libgsttag in gst-plugins-base to obtain a translated - * language name from the language code: gst_tag_get_language_name() - */ -#define GST_TAG_LANGUAGE_CODE "language-code" -/** - * GST_TAG_LANGUAGE_NAME: - * - * Name of the language the content is in (string) - * - * Free-form name of the language the content is in, if a language code - * is not available. This tag should not be set in addition to a language - * code. It is undefined what language or locale the language name is in. - */ -#define GST_TAG_LANGUAGE_NAME "language-name" -/** - * GST_TAG_IMAGE: - * - * image (sample) (sample taglist should specify the content type and preferably - * also set "image-type" field as #GstTagImageType) - */ -#define GST_TAG_IMAGE "image" -/** - * GST_TAG_PREVIEW_IMAGE: - * - * image that is meant for preview purposes, e.g. small icon-sized version - * (sample) (sample taglist should specify the content type) - */ -#define GST_TAG_PREVIEW_IMAGE "preview-image" - -/** - * GST_TAG_ATTACHMENT: - * - * generic file attachment (sample) (sample taglist should specify the content - * type and if possible set "filename" to the file name of the - * attachment) - */ -#define GST_TAG_ATTACHMENT "attachment" - -/** - * GST_TAG_BEATS_PER_MINUTE: - * - * number of beats per minute in audio (double) - */ -#define GST_TAG_BEATS_PER_MINUTE "beats-per-minute" - -/** - * GST_TAG_KEYWORDS: - * - * comma separated keywords describing the content (string). - */ -#define GST_TAG_KEYWORDS "keywords" - -/** - * GST_TAG_GEO_LOCATION_NAME: - * - * human readable descriptive location of where the media has been recorded or - * produced. (string). - */ -#define GST_TAG_GEO_LOCATION_NAME "geo-location-name" - -/** - * GST_TAG_GEO_LOCATION_LATITUDE: - * - * geo latitude location of where the media has been recorded or produced in - * degrees according to WGS84 (zero at the equator, negative values for southern - * latitudes) (double). - */ -#define GST_TAG_GEO_LOCATION_LATITUDE "geo-location-latitude" - -/** - * GST_TAG_GEO_LOCATION_LONGITUDE: - * - * geo longitude location of where the media has been recorded or produced in - * degrees according to WGS84 (zero at the prime meridian in Greenwich/UK, - * negative values for western longitudes). (double). - */ -#define GST_TAG_GEO_LOCATION_LONGITUDE "geo-location-longitude" - -/** - * GST_TAG_GEO_LOCATION_ELEVATION: - * - * geo elevation of where the media has been recorded or produced in meters - * according to WGS84 (zero is average sea level) (double). - */ -#define GST_TAG_GEO_LOCATION_ELEVATION "geo-location-elevation" -/** - * GST_TAG_GEO_LOCATION_COUNTRY: - * - * The country (english name) where the media has been produced (string). - */ -#define GST_TAG_GEO_LOCATION_COUNTRY "geo-location-country" -/** - * GST_TAG_GEO_LOCATION_CITY: - * - * The city (english name) where the media has been produced (string). - */ -#define GST_TAG_GEO_LOCATION_CITY "geo-location-city" -/** - * GST_TAG_GEO_LOCATION_SUBLOCATION: - * - * A location 'smaller' than GST_TAG_GEO_LOCATION_CITY that specifies better - * where the media has been produced. (e.g. the neighborhood) (string). - * - * This tag has been added as this is how it is handled/named in XMP's - * Iptc4xmpcore schema. - */ -#define GST_TAG_GEO_LOCATION_SUBLOCATION "geo-location-sublocation" -/** - * GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR: - * - * Represents the expected error on the horizontal positioning in - * meters (double). - */ -#define GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR "geo-location-horizontal-error" -/** - * GST_TAG_GEO_LOCATION_MOVEMENT_SPEED: - * - * Speed of the capturing device when performing the capture. - * Represented in m/s. (double) - * - * See also #GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION - */ -#define GST_TAG_GEO_LOCATION_MOVEMENT_SPEED "geo-location-movement-speed" -/** - * GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION: - * - * Indicates the movement direction of the device performing the capture - * of a media. It is represented as degrees in floating point representation, - * 0 means the geographic north, and increases clockwise (double from 0 to 360) - * - * See also #GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION - */ -#define GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION "geo-location-movement-direction" -/** - * GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION: - * - * Indicates the direction the device is pointing to when capturing - * a media. It is represented as degrees in floating point representation, - * 0 means the geographic north, and increases clockwise (double from 0 to 360) - * - * See also #GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION - */ -#define GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION "geo-location-capture-direction" -/** - * GST_TAG_SHOW_NAME: - * - * Name of the show, used for displaying (string) - */ -#define GST_TAG_SHOW_NAME "show-name" -/** - * GST_TAG_SHOW_SORTNAME: - * - * Name of the show, used for sorting (string) - */ -#define GST_TAG_SHOW_SORTNAME "show-sortname" -/** - * GST_TAG_SHOW_EPISODE_NUMBER: - * - * Number of the episode within a season/show (unsigned integer) - */ -#define GST_TAG_SHOW_EPISODE_NUMBER "show-episode-number" -/** - * GST_TAG_SHOW_SEASON_NUMBER: - * - * Number of the season of a show/series (unsigned integer) - */ -#define GST_TAG_SHOW_SEASON_NUMBER "show-season-number" -/** - * GST_TAG_LYRICS: - * - * The lyrics of the media (string) - */ -#define GST_TAG_LYRICS "lyrics" -/** - * GST_TAG_COMPOSER_SORTNAME: - * - * The composer's name, used for sorting (string) - */ -#define GST_TAG_COMPOSER_SORTNAME "composer-sortname" -/** - * GST_TAG_GROUPING: - * - * Groups together media that are related and spans multiple tracks. An - * example are multiple pieces of a concerto. (string) - */ -#define GST_TAG_GROUPING "grouping" -/** - * GST_TAG_USER_RATING: - * - * Rating attributed by a person (likely the application user). - * The higher the value, the more the user likes this media - * (unsigned int from 0 to 100) - */ -#define GST_TAG_USER_RATING "user-rating" -/** - * GST_TAG_DEVICE_MANUFACTURER: - * - * Manufacturer of the device used to create the media (string) - */ -#define GST_TAG_DEVICE_MANUFACTURER "device-manufacturer" -/** - * GST_TAG_DEVICE_MODEL: - * - * Model of the device used to create the media (string) - */ -#define GST_TAG_DEVICE_MODEL "device-model" -/** - * GST_TAG_APPLICATION_NAME: - * - * Name of the application used to create the media (string) - */ -#define GST_TAG_APPLICATION_NAME "application-name" -/** - * GST_TAG_APPLICATION_DATA: - * - * Arbitrary application data (sample) - * - * Some formats allow applications to add their own arbitrary data - * into files. This data is application dependent. - */ -#define GST_TAG_APPLICATION_DATA "application-data" -/** - * GST_TAG_IMAGE_ORIENTATION: - * - * Represents the 'Orientation' tag from EXIF. Defines how the image - * should be rotated and mirrored for display. (string) - * - * This tag has a predefined set of allowed values: - * "rotate-0" - * "rotate-90" - * "rotate-180" - * "rotate-270" - * "flip-rotate-0" - * "flip-rotate-90" - * "flip-rotate-180" - * "flip-rotate-270" - * - * The naming is adopted according to a possible transformation to perform - * on the image to fix its orientation, obviously equivalent operations will - * yield the same result. - * - * Rotations indicated by the values are in clockwise direction and - * 'flip' means an horizontal mirroring. - */ -#define GST_TAG_IMAGE_ORIENTATION "image-orientation" - -G_END_DECLS - -#endif /* __GST_TAGLIST_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttagsetter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttagsetter.h deleted file mode 100644 index 580053cc..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttagsetter.h +++ /dev/null @@ -1,100 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttagsetter.h: Interfaces for tagging - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TAG_SETTER_H__ -#define __GST_TAG_SETTER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_SETTER (gst_tag_setter_get_type ()) -#define GST_TAG_SETTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TAG_SETTER, GstTagSetter)) -#define GST_IS_TAG_SETTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TAG_SETTER)) -#define GST_TAG_SETTER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_TAG_SETTER, GstTagSetterInterface)) - -/** - * GstTagSetter: - * - * Opaque #GstTagSetter data structure. - */ -typedef struct _GstTagSetter GstTagSetter; /* Dummy typedef */ -typedef struct _GstTagSetterInterface GstTagSetterInterface; - -/** - * GstTagSetterInterface: - * @g_iface: parent interface type. - * - * #GstTagSetterInterface interface. - */ -/* use an empty interface here to allow detection of elements using user-set - tags */ -struct _GstTagSetterInterface -{ - GTypeInterface g_iface; - - /* signals */ - - /* virtual table */ -}; - -GType gst_tag_setter_get_type (void); - -void gst_tag_setter_reset_tags (GstTagSetter * setter); - -void gst_tag_setter_merge_tags (GstTagSetter * setter, - const GstTagList * list, - GstTagMergeMode mode); -void gst_tag_setter_add_tags (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; - -void gst_tag_setter_add_tag_values (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - ...) G_GNUC_NULL_TERMINATED; - -void gst_tag_setter_add_tag_valist (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); - -void gst_tag_setter_add_tag_valist_values(GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - va_list var_args); - -void gst_tag_setter_add_tag_value (GstTagSetter * setter, - GstTagMergeMode mode, - const gchar * tag, - const GValue * value); - -const GstTagList * - gst_tag_setter_get_tag_list (GstTagSetter * setter); - -void gst_tag_setter_set_tag_merge_mode (GstTagSetter * setter, - GstTagMergeMode mode); -GstTagMergeMode gst_tag_setter_get_tag_merge_mode (GstTagSetter * setter); - -G_END_DECLS - -#endif /* __GST_TAG_SETTER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttask.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttask.h deleted file mode 100644 index 6464d865..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttask.h +++ /dev/null @@ -1,199 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * <2005> Wim Taymans - * - * gsttask.h: Streaming tasks - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TASK_H__ -#define __GST_TASK_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstTaskFunction: - * @user_data: user data passed to the function - * - * A function that will repeatedly be called in the thread created by - * a #GstTask. - */ -typedef void (*GstTaskFunction) (gpointer user_data); - -/* --- standard type macros --- */ -#define GST_TYPE_TASK (gst_task_get_type ()) -#define GST_TASK(task) (G_TYPE_CHECK_INSTANCE_CAST ((task), GST_TYPE_TASK, GstTask)) -#define GST_IS_TASK(task) (G_TYPE_CHECK_INSTANCE_TYPE ((task), GST_TYPE_TASK)) -#define GST_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), GST_TYPE_TASK, GstTaskClass)) -#define GST_IS_TASK_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), GST_TYPE_TASK)) -#define GST_TASK_GET_CLASS(task) (G_TYPE_INSTANCE_GET_CLASS ((task), GST_TYPE_TASK, GstTaskClass)) -#define GST_TASK_CAST(task) ((GstTask*)(task)) - -typedef struct _GstTask GstTask; -typedef struct _GstTaskClass GstTaskClass; -typedef struct _GstTaskPrivate GstTaskPrivate; - -/** - * GstTaskState: - * @GST_TASK_STARTED: the task is started and running - * @GST_TASK_STOPPED: the task is stopped - * @GST_TASK_PAUSED: the task is paused - * - * The different states a task can be in - */ -typedef enum { - GST_TASK_STARTED, - GST_TASK_STOPPED, - GST_TASK_PAUSED -} GstTaskState; - -/** - * GST_TASK_STATE: - * @task: Task to get the state of - * - * Get access to the state of the task. - */ -#define GST_TASK_STATE(task) (GST_TASK_CAST(task)->state) - -/** - * GST_TASK_GET_COND: - * @task: Task to get the cond of - * - * Get access to the cond of the task. - */ -#define GST_TASK_GET_COND(task) (&GST_TASK_CAST(task)->cond) -/** - * GST_TASK_WAIT: - * @task: Task to wait for - * - * Wait for the task cond to be signalled - */ -#define GST_TASK_WAIT(task) g_cond_wait(GST_TASK_GET_COND (task), GST_OBJECT_GET_LOCK (task)) -/** - * GST_TASK_SIGNAL: - * @task: Task to signal - * - * Signal the task cond - */ -#define GST_TASK_SIGNAL(task) g_cond_signal(GST_TASK_GET_COND (task)) -/** - * GST_TASK_BROADCAST: - * @task: Task to broadcast - * - * Send a broadcast signal to all waiting task conds - */ -#define GST_TASK_BROADCAST(task) g_cond_broadcast(GST_TASK_GET_COND (task)) - -/** - * GST_TASK_GET_LOCK: - * @task: Task to get the lock of - * - * Get access to the task lock. - */ -#define GST_TASK_GET_LOCK(task) (GST_TASK_CAST(task)->lock) - -/** - * GstTaskThreadFunc: - * @task: The #GstTask - * @thread: The #GThread - * @user_data: user data - * - * Custom GstTask thread callback functions that can be installed. - */ -typedef void (*GstTaskThreadFunc) (GstTask *task, GThread *thread, gpointer user_data); - -/** - * GstTask: - * @state: the state of the task - * @cond: used to pause/resume the task - * @lock: The lock taken when iterating the task function - * @func: the function executed by this task - * @user_data: user_data passed to the task function - * @notify: GDestroyNotify for @user_data - * @running: a flag indicating that the task is running - * - * The #GstTask object. - */ -struct _GstTask { - GstObject object; - - /*< public >*/ /* with LOCK */ - GstTaskState state; - GCond cond; - - GRecMutex *lock; - - GstTaskFunction func; - gpointer user_data; - GDestroyNotify notify; - - gboolean running; - - /*< private >*/ - GThread *thread; - - GstTaskPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstTaskClass { - GstObjectClass parent_class; - - /*< private >*/ - GstTaskPool *pool; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -void gst_task_cleanup_all (void); - -GType gst_task_get_type (void); - -GstTask* gst_task_new (GstTaskFunction func, - gpointer user_data, GDestroyNotify notify); - -void gst_task_set_lock (GstTask *task, GRecMutex *mutex); - -GstTaskPool * gst_task_get_pool (GstTask *task); -void gst_task_set_pool (GstTask *task, GstTaskPool *pool); - -void gst_task_set_enter_callback (GstTask *task, - GstTaskThreadFunc enter_func, - gpointer user_data, - GDestroyNotify notify); -void gst_task_set_leave_callback (GstTask *task, - GstTaskThreadFunc leave_func, - gpointer user_data, - GDestroyNotify notify); - -GstTaskState gst_task_get_state (GstTask *task); -gboolean gst_task_set_state (GstTask *task, GstTaskState state); - -gboolean gst_task_start (GstTask *task); -gboolean gst_task_stop (GstTask *task); -gboolean gst_task_pause (GstTask *task); - -gboolean gst_task_join (GstTask *task); - -G_END_DECLS - -#endif /* __GST_TASK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaskpool.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaskpool.h deleted file mode 100644 index 4eccbfb9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttaskpool.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GStreamer - * Copyright (C) <2009> Wim Taymans - * - * gsttaskpool.h: Pool for creating streaming threads - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TASK_POOL_H__ -#define __GST_TASK_POOL_H__ - -#include - -G_BEGIN_DECLS - -/* --- standard type macros --- */ -#define GST_TYPE_TASK_POOL (gst_task_pool_get_type ()) -#define GST_TASK_POOL(pool) (G_TYPE_CHECK_INSTANCE_CAST ((pool), GST_TYPE_TASK_POOL, GstTaskPool)) -#define GST_IS_TASK_POOL(pool) (G_TYPE_CHECK_INSTANCE_TYPE ((pool), GST_TYPE_TASK_POOL)) -#define GST_TASK_POOL_CLASS(pclass) (G_TYPE_CHECK_CLASS_CAST ((pclass), GST_TYPE_TASK_POOL, GstTaskPoolClass)) -#define GST_IS_TASK_POOL_CLASS(pclass) (G_TYPE_CHECK_CLASS_TYPE ((pclass), GST_TYPE_TASK_POOL)) -#define GST_TASK_POOL_GET_CLASS(pool) (G_TYPE_INSTANCE_GET_CLASS ((pool), GST_TYPE_TASK_POOL, GstTaskPoolClass)) -#define GST_TASK_POOL_CAST(pool) ((GstTaskPool*)(pool)) - -typedef struct _GstTaskPool GstTaskPool; -typedef struct _GstTaskPoolClass GstTaskPoolClass; - -/** - * GstTaskPoolFunction: - * @user_data: user data for the task function - * - * Task function, see gst_task_pool_push(). - */ -typedef void (*GstTaskPoolFunction) (void *user_data); - -/** - * GstTaskPool: - * - * The #GstTaskPool object. - */ -struct _GstTaskPool { - GstObject object; - - /*< private >*/ - GThreadPool *pool; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstTaskPoolClass: - * @parent_class: the parent class structure - * @prepare: prepare the threadpool - * @cleanup: make sure all threads are stopped - * @push: start a new thread - * @join: join a thread - * - * The #GstTaskPoolClass object. - */ -struct _GstTaskPoolClass { - GstObjectClass parent_class; - - /*< public >*/ - void (*prepare) (GstTaskPool *pool, GError **error); - void (*cleanup) (GstTaskPool *pool); - - gpointer (*push) (GstTaskPool *pool, GstTaskPoolFunction func, - gpointer user_data, GError **error); - void (*join) (GstTaskPool *pool, gpointer id); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_task_pool_get_type (void); - -GstTaskPool * gst_task_pool_new (void); -void gst_task_pool_prepare (GstTaskPool *pool, GError **error); - -gpointer gst_task_pool_push (GstTaskPool *pool, GstTaskPoolFunction func, - gpointer user_data, GError **error); -void gst_task_pool_join (GstTaskPool *pool, gpointer id); - -void gst_task_pool_cleanup (GstTaskPool *pool); - -G_END_DECLS - -#endif /* __GST_TASK_POOL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttoc.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttoc.h deleted file mode 100644 index 9439cca2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttoc.h +++ /dev/null @@ -1,142 +0,0 @@ -/* GStreamer - * (c) 2010, 2012 Alexander Saprykin - * - * gsttoc.h: generic TOC API declaration - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TOC_H__ -#define __GST_TOC_H__ - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TOC (gst_toc_get_type ()) -#define GST_TYPE_TOC_ENTRY (gst_toc_entry_get_type ()) - -typedef struct _GstTocEntry GstTocEntry; -typedef struct _GstToc GstToc; - -/** - * GstTocScope: - * @GST_TOC_SCOPE_GLOBAL: global TOC representing all selectable options - * (this is what applications are usually interested in) - * @GST_TOC_SCOPE_CURRENT: TOC for the currently active/selected stream - * (this is a TOC representing the current stream from start to EOS, - * and is what a TOC writer / muxer is usually interested in; it will - * usually be a subset of the global TOC, e.g. just the chapters of - * the current title, or the chapters selected for playback from the - * current title) - * - * The scope of a TOC. - */ -typedef enum { - GST_TOC_SCOPE_GLOBAL = 1, - GST_TOC_SCOPE_CURRENT = 2 -} GstTocScope; - -/** - * GstTocEntryType: - * @GST_TOC_ENTRY_TYPE_ANGLE: entry is an angle (i.e. an alternative) - * @GST_TOC_ENTRY_TYPE_VERSION: entry is a version (i.e. alternative) - * @GST_TOC_ENTRY_TYPE_EDITION: entry is an edition (i.e. alternative) - * @GST_TOC_ENTRY_TYPE_INVALID: invalid entry type value - * @GST_TOC_ENTRY_TYPE_TITLE: entry is a title (i.e. a part of a sequence) - * @GST_TOC_ENTRY_TYPE_TRACK: entry is a track (i.e. a part of a sequence) - * @GST_TOC_ENTRY_TYPE_CHAPTER: entry is a chapter (i.e. a part of a sequence) - * - * The different types of TOC entries (see #GstTocEntry). - * - * There are two types of TOC entries: alternatives or parts in a sequence. - */ -typedef enum { - GST_TOC_ENTRY_TYPE_ANGLE = -3, - GST_TOC_ENTRY_TYPE_VERSION = -2, - GST_TOC_ENTRY_TYPE_EDITION = -1, - GST_TOC_ENTRY_TYPE_INVALID = 0, - GST_TOC_ENTRY_TYPE_TITLE = 1, - GST_TOC_ENTRY_TYPE_TRACK = 2, - GST_TOC_ENTRY_TYPE_CHAPTER = 3, -} GstTocEntryType; - -#define GST_TOC_ENTRY_TYPE_IS_ALTERNATIVE(entry_type) (entry_type < 0) -#define GST_TOC_ENTRY_TYPE_IS_SEQUENCE(entry_type) (entry_type > 0) - -/* functions to return type structures */ -GType gst_toc_get_type (void); -GType gst_toc_entry_get_type (void); - -/* functions to create, ref and unref/free TOCs */ -GstToc * gst_toc_new (GstTocScope scope); - -GstTocScope gst_toc_get_scope (const GstToc *toc); - -void gst_toc_set_tags (GstToc *toc, GstTagList * tags); -void gst_toc_merge_tags (GstToc *toc, GstTagList *tags, GstTagMergeMode mode); -GstTagList * gst_toc_get_tags (const GstToc *toc); - -void gst_toc_append_entry (GstToc *toc, GstTocEntry *entry); -GList * gst_toc_get_entries (const GstToc *toc); - -void gst_toc_dump (GstToc *toc); - -#define gst_toc_ref(toc) (GstToc*)gst_mini_object_ref(GST_MINI_OBJECT_CAST(toc)) -#define gst_toc_unref(toc) gst_mini_object_unref(GST_MINI_OBJECT_CAST(toc)) -#define gst_toc_copy(toc) (GstToc*)gst_mini_object_copy(GST_MINI_OBJECT_CAST(toc)) -#define gst_toc_make_writable(toc) (GstToc*)gst_mini_object_make_writable(GST_MINI_OBJECT_CAST(toc)) - -/* functions to create, ref and unref/free TOC entries */ -GstTocEntry * gst_toc_entry_new (GstTocEntryType type, const gchar *uid); - -#define gst_toc_entry_ref(entry) (GstTocEntry*)gst_mini_object_ref(GST_MINI_OBJECT_CAST(entry)) -#define gst_toc_entry_unref(entry) gst_mini_object_unref(GST_MINI_OBJECT_CAST(entry)) -#define gst_toc_entry_copy(entry) (GstTocEntry*)gst_mini_object_copy(GST_MINI_OBJECT_CAST(entry)) -#define gst_toc_entry_make_writable(entry) (GstTocEntry*)gst_mini_object_make_writable(GST_MINI_OBJECT_CAST(entry)) - -GstTocEntry * gst_toc_find_entry (const GstToc *toc, const gchar *uid); - -GstTocEntryType gst_toc_entry_get_entry_type (const GstTocEntry *entry); -const gchar * gst_toc_entry_get_uid (const GstTocEntry *entry); - -void gst_toc_entry_append_sub_entry (GstTocEntry *entry, GstTocEntry *subentry); -GList * gst_toc_entry_get_sub_entries (const GstTocEntry *entry); - -void gst_toc_entry_set_tags (GstTocEntry *entry, GstTagList *tags); -void gst_toc_entry_merge_tags (GstTocEntry *entry, GstTagList *tags, GstTagMergeMode mode); -GstTagList * gst_toc_entry_get_tags (const GstTocEntry *entry); - -gboolean gst_toc_entry_is_alternative (const GstTocEntry *entry); -gboolean gst_toc_entry_is_sequence (const GstTocEntry *entry); - -void gst_toc_entry_set_start_stop_times (GstTocEntry *entry, gint64 start, gint64 stop); -gboolean gst_toc_entry_get_start_stop_times (const GstTocEntry *entry, gint64 *start, gint64 *stop); - -GstToc * gst_toc_entry_get_toc (GstTocEntry *entry); -GstTocEntry * gst_toc_entry_get_parent (GstTocEntry *entry); - - -const gchar * gst_toc_entry_type_get_nick (GstTocEntryType type); - -G_END_DECLS - -#endif /* __GST_TOC_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttocsetter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttocsetter.h deleted file mode 100644 index 9c59fa56..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttocsetter.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GStreamer - * Copyright (C) 2010, 2012 Alexander Saprykin - * - * gsttocsetter.h: Interfaces for TOC - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TOC_SETTER_H__ -#define __GST_TOC_SETTER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TOC_SETTER (gst_toc_setter_get_type ()) -#define GST_TOC_SETTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TOC_SETTER, GstTocSetter)) -#define GST_IS_TOC_SETTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TOC_SETTER)) -#define GST_TOC_SETTER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_TOC_SETTER, GstTocSetterInterface)) -/** - * GstTocSetter: - * - * Opaque #GstTocSetter data structure. - */ -typedef struct _GstTocSetter GstTocSetter; -typedef struct _GstTocSetterInterface GstTocSetterInterface; - -/** - * GstTocSetterInterface: - * @g_iface: parent interface type. - * - * #GstTocSetterInterface interface. - */ - -struct _GstTocSetterInterface -{ - GTypeInterface g_iface; - - /* signals */ - - /* virtual table */ -}; - -GType gst_toc_setter_get_type (void); - -void gst_toc_setter_reset (GstTocSetter *setter); - -GstToc * gst_toc_setter_get_toc (GstTocSetter *setter); - -void gst_toc_setter_set_toc (GstTocSetter *setter, GstToc *toc); - -G_END_DECLS - -#endif /* __GST_TOC_SETTER_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefind.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefind.h deleted file mode 100644 index 0a987e4a..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefind.h +++ /dev/null @@ -1,124 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttypefind.h: typefinding subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TYPE_FIND_H__ -#define __GST_TYPE_FIND_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TYPE_FIND (gst_type_find_get_type()) - -typedef struct _GstTypeFind GstTypeFind; - -/** - * GstTypeFindFunction: - * @find: A #GstTypeFind structure - * @user_data: optionnal data to pass to the function - * - * A function that will be called by typefinding. - */ -typedef void (* GstTypeFindFunction) (GstTypeFind *find, gpointer user_data); - -/** - * GstTypeFindProbability: - * @GST_TYPE_FIND_NONE: type undetected. - * @GST_TYPE_FIND_MINIMUM: unlikely typefind. - * @GST_TYPE_FIND_POSSIBLE: possible type detected. - * @GST_TYPE_FIND_LIKELY: likely a type was detected. - * @GST_TYPE_FIND_NEARLY_CERTAIN: nearly certain that a type was detected. - * @GST_TYPE_FIND_MAXIMUM: very certain a type was detected. - * - * The probability of the typefind function. Higher values have more certainty - * in doing a reliable typefind. - */ -typedef enum { - GST_TYPE_FIND_NONE = 0, - GST_TYPE_FIND_MINIMUM = 1, - GST_TYPE_FIND_POSSIBLE = 50, - GST_TYPE_FIND_LIKELY = 80, - GST_TYPE_FIND_NEARLY_CERTAIN = 99, - GST_TYPE_FIND_MAXIMUM = 100 -} GstTypeFindProbability; - -/** - * GstTypeFind: - * @peek: Method to peek data. - * @suggest: Method to suggest #GstCaps with a given probability. - * @data: The data used by the caller of the typefinding function. - * @get_length: Returns the length of current data. - * - * Object that stores typefind callbacks. To use with #GstTypeFindFactory. - */ -struct _GstTypeFind { - /* private to the caller of the typefind function */ - const guint8 * (* peek) (gpointer data, - gint64 offset, - guint size); - - void (* suggest) (gpointer data, - guint probability, - GstCaps *caps); - - gpointer data; - - /* optional */ - guint64 (* get_length) (gpointer data); - - /* */ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_type_find_get_type (void); - -/* typefind function interface */ -const guint8 * gst_type_find_peek (GstTypeFind * find, - gint64 offset, - guint size); - -void gst_type_find_suggest (GstTypeFind * find, - guint probability, - GstCaps * caps); - -void gst_type_find_suggest_simple (GstTypeFind * find, - guint probability, - const char * media_type, - const char * fieldname, ...); - -guint64 gst_type_find_get_length (GstTypeFind * find); - -/* registration interface */ -gboolean gst_type_find_register (GstPlugin * plugin, - const gchar * name, - guint rank, - GstTypeFindFunction func, - const gchar * extensions, - GstCaps * possible_caps, - gpointer data, - GDestroyNotify data_notify); - -G_END_DECLS - -#endif /* __GST_TYPE_FIND_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefindfactory.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefindfactory.h deleted file mode 100644 index 332134bf..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsttypefindfactory.h +++ /dev/null @@ -1,62 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * - * gsttypefindfactory.h: typefinding subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TYPE_FIND_FACTORY_H__ -#define __GST_TYPE_FIND_FACTORY_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TYPE_FIND_FACTORY (gst_type_find_factory_get_type()) -#define GST_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactory)) -#define GST_IS_TYPE_FIND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TYPE_FIND_FACTORY)) -#define GST_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) -#define GST_IS_TYPE_FIND_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TYPE_FIND_FACTORY)) -#define GST_TYPE_FIND_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_TYPE_FIND_FACTORY, GstTypeFindFactoryClass)) - -/** - * GstTypeFindFactory: - * - * Opaque object that stores information about a typefind function. - */ -typedef struct _GstTypeFindFactory GstTypeFindFactory; -typedef struct _GstTypeFindFactoryClass GstTypeFindFactoryClass; - -/* typefinding interface */ - -GType gst_type_find_factory_get_type (void); - -GList * gst_type_find_factory_get_list (void); - -const gchar * const * gst_type_find_factory_get_extensions (GstTypeFindFactory *factory); - -GstCaps * gst_type_find_factory_get_caps (GstTypeFindFactory *factory); -gboolean gst_type_find_factory_has_function (GstTypeFindFactory *factory); -void gst_type_find_factory_call_function (GstTypeFindFactory *factory, - GstTypeFind *find); - -G_END_DECLS - -#endif /* __GST_TYPE_FIND_FACTORY_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsturi.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsturi.h deleted file mode 100644 index d140c3d4..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gsturi.h +++ /dev/null @@ -1,156 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gsturi.h: Header for uri to element mappings - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_URI_H__ -#define __GST_URI_H__ - -#include -#include - -G_BEGIN_DECLS - -GQuark gst_uri_error_quark (void); - -/** - * GST_URI_ERROR: - * - * Get access to the error quark of the uri subsystem. - */ -#define GST_URI_ERROR gst_uri_error_quark () - -/** - * GstURIError: - * @GST_URI_ERROR_UNSUPPORTED_PROTOCOL: The protocol is not supported - * @GST_URI_ERROR_BAD_URI: There was a problem with the URI - * @GST_URI_ERROR_BAD_STATE: Could not set or change the URI because the - * URI handler was in a state where that is not possible or not permitted - * @GST_URI_ERROR_BAD_REFERENCE: There was a problem with the entity that - * the URI references - * - * Different URI-related errors that can occur. - */ -typedef enum -{ - GST_URI_ERROR_UNSUPPORTED_PROTOCOL, - GST_URI_ERROR_BAD_URI, - GST_URI_ERROR_BAD_STATE, - GST_URI_ERROR_BAD_REFERENCE -} GstURIError; - -/** - * GstURIType: - * @GST_URI_UNKNOWN: The URI direction is unknown - * @GST_URI_SINK: The URI is a consumer. - * @GST_URI_SRC: The URI is a producer. - * - * The different types of URI direction. - */ - -typedef enum { - GST_URI_UNKNOWN, - GST_URI_SINK, - GST_URI_SRC -} GstURIType; - -/** - * GST_URI_TYPE_IS_VALID: - * @type: A #GstURIType - * - * Tests if the type direction is valid. - */ -#define GST_URI_TYPE_IS_VALID(type) ((type) == GST_URI_SRC || (type) == GST_URI_SINK) - -/* uri handler functions */ -#define GST_TYPE_URI_HANDLER (gst_uri_handler_get_type ()) -#define GST_URI_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_URI_HANDLER, GstURIHandler)) -#define GST_IS_URI_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_URI_HANDLER)) -#define GST_URI_HANDLER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_URI_HANDLER, GstURIHandlerInterface)) - -/** - * GstURIHandler: - * - * Opaque #GstURIHandler structure. - */ -typedef struct _GstURIHandler GstURIHandler; -typedef struct _GstURIHandlerInterface GstURIHandlerInterface; - -/** - * GstURIHandlerInterface: - * @parent: The parent interface type - * @get_type: Method to tell whether the element handles source or sink URI. - * @get_protocols: Method to return the list of protocols handled by the element. - * @get_uri: Method to return the URI currently handled by the element. - * @set_uri: Method to set a new URI. - * - * Any #GstElement using this interface should implement these methods. - */ -struct _GstURIHandlerInterface { - GTypeInterface parent; - - /* vtable */ - /*< public >*/ - /* querying capabilities */ - GstURIType (* get_type) (GType type); - const gchar * const * (* get_protocols) (GType type); - - /* using the interface */ - gchar * (* get_uri) (GstURIHandler * handler); - gboolean (* set_uri) (GstURIHandler * handler, - const gchar * uri, - GError ** error); -}; - -/* general URI functions */ - -gboolean gst_uri_protocol_is_valid (const gchar * protocol); -gboolean gst_uri_protocol_is_supported (const GstURIType type, - const gchar *protocol); -gboolean gst_uri_is_valid (const gchar * uri); -gchar * gst_uri_get_protocol (const gchar * uri) G_GNUC_MALLOC; -gboolean gst_uri_has_protocol (const gchar * uri, - const gchar * protocol); -gchar * gst_uri_get_location (const gchar * uri) G_GNUC_MALLOC; -gchar * gst_uri_construct (const gchar * protocol, - const gchar * location) G_GNUC_MALLOC; - -gchar * gst_filename_to_uri (const gchar * filename, - GError ** error) G_GNUC_MALLOC; - -GstElement * gst_element_make_from_uri (const GstURIType type, - const gchar * uri, - const gchar * elementname, - GError ** error) G_GNUC_MALLOC; - -/* accessing the interface */ -GType gst_uri_handler_get_type (void); - -GstURIType gst_uri_handler_get_uri_type (GstURIHandler * handler); -const gchar * const * gst_uri_handler_get_protocols (GstURIHandler * handler); -gchar * gst_uri_handler_get_uri (GstURIHandler * handler) G_GNUC_MALLOC; -gboolean gst_uri_handler_set_uri (GstURIHandler * handler, - const gchar * uri, - GError ** error); - -G_END_DECLS - -#endif /* __GST_URI_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstutils.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstutils.h deleted file mode 100644 index 269b3752..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstutils.h +++ /dev/null @@ -1,948 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * 2002 Thomas Vander Stichele - * - * gstutils.h: Header for various utility functions - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_UTILS_H__ -#define __GST_UTILS_H__ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -void gst_util_set_value_from_string (GValue *value, const gchar *value_str); -void gst_util_set_object_arg (GObject *object, const gchar *name, const gchar *value); -void gst_util_dump_mem (const guchar *mem, guint size); - -guint64 gst_util_gdouble_to_guint64 (gdouble value) G_GNUC_CONST; -gdouble gst_util_guint64_to_gdouble (guint64 value) G_GNUC_CONST; - -/** - * gst_guint64_to_gdouble: - * @value: the #guint64 value to convert - * - * Convert @value to a gdouble. - * - * Returns: @value converted to a #gdouble. - */ - -/** - * gst_gdouble_to_guint64: - * @value: the #gdouble value to convert - * - * Convert @value to a guint64. - * - * Returns: @value converted to a #guint64. - */ -#ifdef WIN32 -#define gst_gdouble_to_guint64(value) gst_util_gdouble_to_guint64(value) -#define gst_guint64_to_gdouble(value) gst_util_guint64_to_gdouble(value) -#else -#define gst_gdouble_to_guint64(value) ((guint64) (value)) -#define gst_guint64_to_gdouble(value) ((gdouble) (value)) -#endif - -guint64 gst_util_uint64_scale (guint64 val, guint64 num, guint64 denom); -guint64 gst_util_uint64_scale_round (guint64 val, guint64 num, guint64 denom); -guint64 gst_util_uint64_scale_ceil (guint64 val, guint64 num, guint64 denom); - -guint64 gst_util_uint64_scale_int (guint64 val, gint num, gint denom); -guint64 gst_util_uint64_scale_int_round (guint64 val, gint num, gint denom); -guint64 gst_util_uint64_scale_int_ceil (guint64 val, gint num, gint denom); - -guint32 gst_util_seqnum_next (void); -gint32 gst_util_seqnum_compare (guint32 s1, guint32 s2); - - -/** - * GST_CALL_PARENT: - * @parent_class_cast: the name of the class cast macro for the parent type - * @name: name of the function to call - * @args: arguments enclosed in '( )' - * - * Just call the parent handler. This assumes that there is a variable - * named parent_class that points to the (duh!) parent class. Note that - * this macro is not to be used with things that return something, use - * the _WITH_DEFAULT version for that - */ -#define GST_CALL_PARENT(parent_class_cast, name, args) \ - ((parent_class_cast(parent_class)->name != NULL) ? \ - parent_class_cast(parent_class)->name args : (void) 0) - -/** - * GST_CALL_PARENT_WITH_DEFAULT: - * @parent_class_cast: the name of the class cast macro for the parent type - * @name: name of the function to call - * @args: arguments enclosed in '( )' - * @def_return: default result - * - * Same as GST_CALL_PARENT(), but in case there is no implementation, it - * evaluates to @def_return. - */ -#define GST_CALL_PARENT_WITH_DEFAULT(parent_class_cast, name, args, def_return)\ - ((parent_class_cast(parent_class)->name != NULL) ? \ - parent_class_cast(parent_class)->name args : def_return) - -/* Define PUT and GET functions for unaligned memory */ -#define _GST_GET(__data, __idx, __size, __shift) \ - (((guint##__size) (((const guint8 *) (__data))[__idx])) << (__shift)) - -#define _GST_PUT(__data, __idx, __size, __shift, __num) \ - (((guint8 *) (__data))[__idx] = (((guint##__size) (__num)) >> (__shift)) & 0xff) - -#if GST_HAVE_UNALIGNED_ACCESS -static inline guint16 __gst_fast_read16(const guint8 *v) { - return *(const guint16*)(v); -} -static inline guint32 __gst_fast_read32(const guint8 *v) { - return *(const guint32*)(v); -} -static inline guint64 __gst_fast_read64(const guint8 *v) { - return *(const guint64*)(v); -} -static inline guint16 __gst_fast_read_swap16(const guint8 *v) { - return GUINT16_SWAP_LE_BE(*(const guint16*)(v)); -} -static inline guint32 __gst_fast_read_swap32(const guint8 *v) { - return GUINT32_SWAP_LE_BE(*(const guint32*)(v)); -} -static inline guint64 __gst_fast_read_swap64(const guint8 *v) { - return GUINT64_SWAP_LE_BE(*(const guint64*)(v)); -} -# define _GST_FAST_READ(s, d) __gst_fast_read##s((const guint8 *)(d)) -# define _GST_FAST_READ_SWAP(s, d) __gst_fast_read_swap##s((const guint8 *)(d)) -#endif - - -/** - * GST_READ_UINT64_BE: - * @data: memory location - * - * Read a 64 bit unsigned integer value in big endian format from the memory buffer. - */ - -/** - * GST_READ_UINT64_LE: - * @data: memory location - * - * Read a 64 bit unsigned integer value in little endian format from the memory buffer. - */ -#if GST_HAVE_UNALIGNED_ACCESS -# if (G_BYTE_ORDER == G_BIG_ENDIAN) -# define GST_READ_UINT64_BE(data) _GST_FAST_READ (64, data) -# define GST_READ_UINT64_LE(data) _GST_FAST_READ_SWAP (64, data) -# else -# define GST_READ_UINT64_BE(data) _GST_FAST_READ_SWAP (64, data) -# define GST_READ_UINT64_LE(data) _GST_FAST_READ (64, data) -# endif -#else -# define GST_READ_UINT64_BE(data) (_GST_GET (data, 0, 64, 56) | \ - _GST_GET (data, 1, 64, 48) | \ - _GST_GET (data, 2, 64, 40) | \ - _GST_GET (data, 3, 64, 32) | \ - _GST_GET (data, 4, 64, 24) | \ - _GST_GET (data, 5, 64, 16) | \ - _GST_GET (data, 6, 64, 8) | \ - _GST_GET (data, 7, 64, 0)) - -# define GST_READ_UINT64_LE(data) (_GST_GET (data, 7, 64, 56) | \ - _GST_GET (data, 6, 64, 48) | \ - _GST_GET (data, 5, 64, 40) | \ - _GST_GET (data, 4, 64, 32) | \ - _GST_GET (data, 3, 64, 24) | \ - _GST_GET (data, 2, 64, 16) | \ - _GST_GET (data, 1, 64, 8) | \ - _GST_GET (data, 0, 64, 0)) -#endif - -/** - * GST_READ_UINT32_BE: - * @data: memory location - * - * Read a 32 bit unsigned integer value in big endian format from the memory buffer. - */ - -/** - * GST_READ_UINT32_LE: - * @data: memory location - * - * Read a 32 bit unsigned integer value in little endian format from the memory buffer. - */ -#if GST_HAVE_UNALIGNED_ACCESS -# if (G_BYTE_ORDER == G_BIG_ENDIAN) -# define GST_READ_UINT32_BE(data) _GST_FAST_READ (32, data) -# define GST_READ_UINT32_LE(data) _GST_FAST_READ_SWAP (32, data) -# else -# define GST_READ_UINT32_BE(data) _GST_FAST_READ_SWAP (32, data) -# define GST_READ_UINT32_LE(data) _GST_FAST_READ (32, data) -# endif -#else -# define GST_READ_UINT32_BE(data) (_GST_GET (data, 0, 32, 24) | \ - _GST_GET (data, 1, 32, 16) | \ - _GST_GET (data, 2, 32, 8) | \ - _GST_GET (data, 3, 32, 0)) - -# define GST_READ_UINT32_LE(data) (_GST_GET (data, 3, 32, 24) | \ - _GST_GET (data, 2, 32, 16) | \ - _GST_GET (data, 1, 32, 8) | \ - _GST_GET (data, 0, 32, 0)) -#endif - -/** - * GST_READ_UINT24_BE: - * @data: memory location - * - * Read a 24 bit unsigned integer value in big endian format from the memory buffer. - */ -#define GST_READ_UINT24_BE(data) (_GST_GET (data, 0, 32, 16) | \ - _GST_GET (data, 1, 32, 8) | \ - _GST_GET (data, 2, 32, 0)) - -/** - * GST_READ_UINT24_LE: - * @data: memory location - * - * Read a 24 bit unsigned integer value in little endian format from the memory buffer. - */ -#define GST_READ_UINT24_LE(data) (_GST_GET (data, 2, 32, 16) | \ - _GST_GET (data, 1, 32, 8) | \ - _GST_GET (data, 0, 32, 0)) - -/** - * GST_READ_UINT16_BE: - * @data: memory location - * - * Read a 16 bit unsigned integer value in big endian format from the memory buffer. - */ -/** - * GST_READ_UINT16_LE: - * @data: memory location - * - * Read a 16 bit unsigned integer value in little endian format from the memory buffer. - */ -#if GST_HAVE_UNALIGNED_ACCESS -# if (G_BYTE_ORDER == G_BIG_ENDIAN) -# define GST_READ_UINT16_BE(data) _GST_FAST_READ (16, data) -# define GST_READ_UINT16_LE(data) _GST_FAST_READ_SWAP (16, data) -# else -# define GST_READ_UINT16_BE(data) _GST_FAST_READ_SWAP (16, data) -# define GST_READ_UINT16_LE(data) _GST_FAST_READ (16, data) -# endif -#else -# define GST_READ_UINT16_BE(data) (_GST_GET (data, 0, 16, 8) | \ - _GST_GET (data, 1, 16, 0)) - -# define GST_READ_UINT16_LE(data) (_GST_GET (data, 1, 16, 8) | \ - _GST_GET (data, 0, 16, 0)) -#endif - -/** - * GST_READ_UINT8: - * @data: memory location - * - * Read an 8 bit unsigned integer value from the memory buffer. - */ -#define GST_READ_UINT8(data) (_GST_GET (data, 0, 8, 0)) - -/** - * GST_WRITE_UINT64_BE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT64_BE(data, num) do { \ - _GST_PUT (data, 0, 64, 56, num); \ - _GST_PUT (data, 1, 64, 48, num); \ - _GST_PUT (data, 2, 64, 40, num); \ - _GST_PUT (data, 3, 64, 32, num); \ - _GST_PUT (data, 4, 64, 24, num); \ - _GST_PUT (data, 5, 64, 16, num); \ - _GST_PUT (data, 6, 64, 8, num); \ - _GST_PUT (data, 7, 64, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT64_LE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT64_LE(data, num) do { \ - _GST_PUT (data, 0, 64, 0, num); \ - _GST_PUT (data, 1, 64, 8, num); \ - _GST_PUT (data, 2, 64, 16, num); \ - _GST_PUT (data, 3, 64, 24, num); \ - _GST_PUT (data, 4, 64, 32, num); \ - _GST_PUT (data, 5, 64, 40, num); \ - _GST_PUT (data, 6, 64, 48, num); \ - _GST_PUT (data, 7, 64, 56, num); \ - } while (0) - -/** - * GST_WRITE_UINT32_BE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT32_BE(data, num) do { \ - _GST_PUT (data, 0, 32, 24, num); \ - _GST_PUT (data, 1, 32, 16, num); \ - _GST_PUT (data, 2, 32, 8, num); \ - _GST_PUT (data, 3, 32, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT32_LE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT32_LE(data, num) do { \ - _GST_PUT (data, 0, 32, 0, num); \ - _GST_PUT (data, 1, 32, 8, num); \ - _GST_PUT (data, 2, 32, 16, num); \ - _GST_PUT (data, 3, 32, 24, num); \ - } while (0) - -/** - * GST_WRITE_UINT24_BE: - * @data: memory location - * @num: value to store - * - * Store a 24 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT24_BE(data, num) do { \ - _GST_PUT (data, 0, 32, 16, num); \ - _GST_PUT (data, 1, 32, 8, num); \ - _GST_PUT (data, 2, 32, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT24_LE: - * @data: memory location - * @num: value to store - * - * Store a 24 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT24_LE(data, num) do { \ - _GST_PUT (data, 0, 32, 0, num); \ - _GST_PUT (data, 1, 32, 8, num); \ - _GST_PUT (data, 2, 32, 16, num); \ - } while (0) - -/** - * GST_WRITE_UINT16_BE: - * @data: memory location - * @num: value to store - * - * Store a 16 bit unsigned integer value in big endian format into the memory buffer. - */ -#define GST_WRITE_UINT16_BE(data, num) do { \ - _GST_PUT (data, 0, 16, 8, num); \ - _GST_PUT (data, 1, 16, 0, num); \ - } while (0) - -/** - * GST_WRITE_UINT16_LE: - * @data: memory location - * @num: value to store - * - * Store a 16 bit unsigned integer value in little endian format into the memory buffer. - */ -#define GST_WRITE_UINT16_LE(data, num) do { \ - _GST_PUT (data, 0, 16, 0, num); \ - _GST_PUT (data, 1, 16, 8, num); \ - } while (0) - -/** - * GST_WRITE_UINT8: - * @data: memory location - * @num: value to store - * - * Store an 8 bit unsigned integer value into the memory buffer. - */ -#define GST_WRITE_UINT8(data, num) do { \ - _GST_PUT (data, 0, 8, 0, num); \ - } while (0) - -/* Float endianness conversion macros */ - -/* FIXME: Remove this once we depend on a GLib version with this */ -#ifndef GFLOAT_FROM_LE -/** - * GFLOAT_SWAP_LE_BE: - * @in: input value - * - * Swap byte order of a 32-bit floating point value (float). - * - * Returns: @in byte-swapped. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gfloat GFLOAT_SWAP_LE_BE (gfloat in); -#endif - -inline static gfloat -GFLOAT_SWAP_LE_BE(gfloat in) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.f = in; - u.i = GUINT32_SWAP_LE_BE (u.i); - return u.f; -} - -/** - * GDOUBLE_SWAP_LE_BE: - * @in: input value - * - * Swap byte order of a 64-bit floating point value (double). - * - * Returns: @in byte-swapped. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gdouble GDOUBLE_SWAP_LE_BE (gdouble in); -#endif - -inline static gdouble -GDOUBLE_SWAP_LE_BE(gdouble in) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.d = in; - u.i = GUINT64_SWAP_LE_BE (u.i); - return u.d; -} - -/** - * GDOUBLE_TO_LE: - * @val: value - * - * Convert 64-bit floating point value (double) from native byte order into - * little endian byte order. - */ -/** - * GDOUBLE_TO_BE: - * @val: value - * - * Convert 64-bit floating point value (double) from native byte order into - * big endian byte order. - */ -/** - * GDOUBLE_FROM_LE: - * @val: value - * - * Convert 64-bit floating point value (double) from little endian byte order - * into native byte order. - */ -/** - * GDOUBLE_FROM_BE: - * @val: value - * - * Convert 64-bit floating point value (double) from big endian byte order - * into native byte order. - */ - -/** - * GFLOAT_TO_LE: - * @val: value - * - * Convert 32-bit floating point value (float) from native byte order into - * little endian byte order. - */ -/** - * GFLOAT_TO_BE: - * @val: value - * - * Convert 32-bit floating point value (float) from native byte order into - * big endian byte order. - */ -/** - * GFLOAT_FROM_LE: - * @val: value - * - * Convert 32-bit floating point value (float) from little endian byte order - * into native byte order. - */ -/** - * GFLOAT_FROM_BE: - * @val: value - * - * Convert 32-bit floating point value (float) from big endian byte order - * into native byte order. - */ - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define GFLOAT_TO_LE(val) ((gfloat) (val)) -#define GFLOAT_TO_BE(val) (GFLOAT_SWAP_LE_BE (val)) -#define GDOUBLE_TO_LE(val) ((gdouble) (val)) -#define GDOUBLE_TO_BE(val) (GDOUBLE_SWAP_LE_BE (val)) - -#elif G_BYTE_ORDER == G_BIG_ENDIAN -#define GFLOAT_TO_LE(val) (GFLOAT_SWAP_LE_BE (val)) -#define GFLOAT_TO_BE(val) ((gfloat) (val)) -#define GDOUBLE_TO_LE(val) (GDOUBLE_SWAP_LE_BE (val)) -#define GDOUBLE_TO_BE(val) ((gdouble) (val)) - -#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ -#error unknown ENDIAN type -#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */ - -#define GFLOAT_FROM_LE(val) (GFLOAT_TO_LE (val)) -#define GFLOAT_FROM_BE(val) (GFLOAT_TO_BE (val)) -#define GDOUBLE_FROM_LE(val) (GDOUBLE_TO_LE (val)) -#define GDOUBLE_FROM_BE(val) (GDOUBLE_TO_BE (val)) - -#endif /* !defined(GFLOAT_FROM_LE) */ - -/** - * GST_READ_FLOAT_LE: - * @data: memory location - * - * Read a 32 bit float value in little endian format from the memory buffer. - * - * Returns: The floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gfloat GST_READ_FLOAT_LE (const guint8 *data); -#endif - -inline static gfloat -GST_READ_FLOAT_LE(const guint8 *data) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.i = GST_READ_UINT32_LE (data); - return u.f; -} - -/** - * GST_READ_FLOAT_BE: - * @data: memory location - * - * Read a 32 bit float value in big endian format from the memory buffer. - * - * Returns: The floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gfloat GST_READ_FLOAT_BE (const guint8 *data); -#endif - -inline static gfloat -GST_READ_FLOAT_BE(const guint8 *data) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.i = GST_READ_UINT32_BE (data); - return u.f; -} - -/** - * GST_READ_DOUBLE_LE: - * @data: memory location - * - * Read a 64 bit double value in little endian format from the memory buffer. - * - * Returns: The double-precision floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gdouble GST_READ_DOUBLE_LE (const guint8 *data); -#endif - -inline static gdouble -GST_READ_DOUBLE_LE(const guint8 *data) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.i = GST_READ_UINT64_LE (data); - return u.d; -} - -/** - * GST_READ_DOUBLE_BE: - * @data: memory location - * - * Read a 64 bit double value in big endian format from the memory buffer. - * - * Returns: The double-precision floating point value read from @data - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC gdouble GST_READ_DOUBLE_BE (const guint8 *data); -#endif - -inline static gdouble -GST_READ_DOUBLE_BE(const guint8 *data) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.i = GST_READ_UINT64_BE (data); - return u.d; -} - -/** - * GST_WRITE_FLOAT_LE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit float value in little endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_FLOAT_LE (guint8 *data, gfloat num); -#endif - -inline static void -GST_WRITE_FLOAT_LE(guint8 *data, gfloat num) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.f = num; - GST_WRITE_UINT32_LE (data, u.i); -} - -/** - * GST_WRITE_FLOAT_BE: - * @data: memory location - * @num: value to store - * - * Store a 32 bit float value in big endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_FLOAT_BE (guint8 *data, gfloat num); -#endif - -inline static void -GST_WRITE_FLOAT_BE(guint8 *data, gfloat num) -{ - union - { - guint32 i; - gfloat f; - } u; - - u.f = num; - GST_WRITE_UINT32_BE (data, u.i); -} - -/** - * GST_WRITE_DOUBLE_LE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit double value in little endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_DOUBLE_LE (guint8 *data, gdouble num); -#endif - -inline static void -GST_WRITE_DOUBLE_LE(guint8 *data, gdouble num) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.d = num; - GST_WRITE_UINT64_LE (data, u.i); -} - -/** - * GST_WRITE_DOUBLE_BE: - * @data: memory location - * @num: value to store - * - * Store a 64 bit double value in big endian format into the memory buffer. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void GST_WRITE_DOUBLE_BE (guint8 *data, gdouble num); -#endif - -inline static void -GST_WRITE_DOUBLE_BE(guint8 *data, gdouble num) -{ - union - { - guint64 i; - gdouble d; - } u; - - u.d = num; - GST_WRITE_UINT64_BE (data, u.i); -} - -/* Miscellaneous utility macros */ - -/** - * GST_ROUND_UP_2: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 2. - */ -#define GST_ROUND_UP_2(num) (((num)+1)&~1) -/** - * GST_ROUND_UP_4: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 4. - */ -#define GST_ROUND_UP_4(num) (((num)+3)&~3) -/** - * GST_ROUND_UP_8: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 8. - */ -#define GST_ROUND_UP_8(num) (((num)+7)&~7) -/** - * GST_ROUND_UP_16: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 16. - */ -#define GST_ROUND_UP_16(num) (((num)+15)&~15) -/** - * GST_ROUND_UP_32: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 32. - */ -#define GST_ROUND_UP_32(num) (((num)+31)&~31) -/** - * GST_ROUND_UP_64: - * @num: integer value to round up - * - * Rounds an integer value up to the next multiple of 64. - */ -#define GST_ROUND_UP_64(num) (((num)+63)&~63) - -/** - * GST_ROUND_DOWN_2: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 2. - */ -#define GST_ROUND_DOWN_2(num) ((num)&(~1)) -/** - * GST_ROUND_DOWN_4: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 4. - */ -#define GST_ROUND_DOWN_4(num) ((num)&(~3)) -/** - * GST_ROUND_DOWN_8: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 8. - */ -#define GST_ROUND_DOWN_8(num) ((num)&(~7)) -/** - * GST_ROUND_DOWN_16: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 16. - */ -#define GST_ROUND_DOWN_16(num) ((num)&(~15)) -/** - * GST_ROUND_DOWN_32: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 32. - */ -#define GST_ROUND_DOWN_32(num) ((num)&(~31)) -/** - * GST_ROUND_DOWN_64: - * @num: integer value to round down - * - * Rounds an integer value down to the next multiple of 64. - */ -#define GST_ROUND_DOWN_64(num) ((num)&(~63)) - -void gst_object_default_error (GstObject * source, - const GError * error, - const gchar * debug); - -/* element functions */ -void gst_element_create_all_pads (GstElement *element); -GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad, - GstCaps *caps); - -GstPadTemplate* gst_element_get_compatible_pad_template (GstElement *element, GstPadTemplate *compattempl); - -const gchar* gst_element_state_get_name (GstState state); -const gchar * gst_element_state_change_return_get_name (GstStateChangeReturn state_ret); - -gboolean gst_element_link (GstElement *src, GstElement *dest); -gboolean gst_element_link_many (GstElement *element_1, - GstElement *element_2, ...) G_GNUC_NULL_TERMINATED; -gboolean gst_element_link_filtered (GstElement * src, - GstElement * dest, - GstCaps *filter); -void gst_element_unlink (GstElement *src, GstElement *dest); -void gst_element_unlink_many (GstElement *element_1, - GstElement *element_2, ...) G_GNUC_NULL_TERMINATED; - -gboolean gst_element_link_pads (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname); -gboolean gst_element_link_pads_full (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname, - GstPadLinkCheck flags); -void gst_element_unlink_pads (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname); - -gboolean gst_element_link_pads_filtered (GstElement * src, const gchar * srcpadname, - GstElement * dest, const gchar * destpadname, - GstCaps *filter); - -gboolean gst_element_seek_simple (GstElement *element, - GstFormat format, - GstSeekFlags seek_flags, - gint64 seek_pos); - -/* util elementfactory functions */ -gboolean gst_element_factory_can_sink_all_caps (GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_src_all_caps (GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_sink_any_caps (GstElementFactory *factory, const GstCaps *caps); -gboolean gst_element_factory_can_src_any_caps (GstElementFactory *factory, const GstCaps *caps); - -/* util query functions */ -gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur); -gboolean gst_element_query_duration (GstElement *element, GstFormat format, gint64 *duration); -gboolean gst_element_query_convert (GstElement *element, GstFormat src_format, gint64 src_val, - GstFormat dest_format, gint64 *dest_val); - -/* pad functions */ -void gst_pad_use_fixed_caps (GstPad *pad); -GstElement* gst_pad_get_parent_element (GstPad *pad); - -/* util query functions */ -gboolean gst_pad_proxy_query_accept_caps (GstPad *pad, GstQuery *query); -gboolean gst_pad_proxy_query_caps (GstPad *pad, GstQuery *query); - -gboolean gst_pad_query_position (GstPad *pad, GstFormat format, gint64 *cur); -gboolean gst_pad_query_duration (GstPad *pad, GstFormat format, gint64 *duration); -gboolean gst_pad_query_convert (GstPad *pad, GstFormat src_format, gint64 src_val, - GstFormat dest_format, gint64 *dest_val); -GstCaps * gst_pad_query_caps (GstPad *pad, GstCaps *filter); -gboolean gst_pad_query_accept_caps (GstPad *pad, GstCaps *caps); - - -gboolean gst_pad_peer_query_position (GstPad *pad, GstFormat format, gint64 *cur); -gboolean gst_pad_peer_query_duration (GstPad *pad, GstFormat format, gint64 *duration); -gboolean gst_pad_peer_query_convert (GstPad *pad, GstFormat src_format, gint64 src_val, - GstFormat dest_format, gint64 *dest_val); -GstCaps * gst_pad_peer_query_caps (GstPad * pad, GstCaps *filter); -gboolean gst_pad_peer_query_accept_caps (GstPad * pad, GstCaps *caps); - -gchar * gst_pad_create_stream_id (GstPad * pad, GstElement * parent, const gchar *stream_id); -gchar * gst_pad_create_stream_id_printf (GstPad * pad, GstElement * parent, const gchar *stream_id, ...); -gchar * gst_pad_create_stream_id_printf_valist (GstPad * pad, GstElement * parent, const gchar *stream_id, va_list var_args); - -/* bin functions */ -void gst_bin_add_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED; -void gst_bin_remove_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED; -GstPad * gst_bin_find_unlinked_pad (GstBin *bin, GstPadDirection direction); - -/* parse utility functions */ -GstElement * gst_parse_bin_from_description (const gchar * bin_description, - gboolean ghost_unlinked_pads, - GError ** err); - -GstElement * gst_parse_bin_from_description_full (const gchar * bin_description, - gboolean ghost_unlinked_pads, - GstParseContext * context, - GstParseFlags flags, - GError ** err); - -GstClockTime gst_util_get_timestamp (void); - -/** - * GstSearchMode: - * @GST_SEARCH_MODE_EXACT : Only search for exact matches. - * @GST_SEARCH_MODE_BEFORE: Search for an exact match or the element just before. - * @GST_SEARCH_MODE_AFTER : Search for an exact match or the element just after. - * - * The different search modes. - */ -typedef enum { - GST_SEARCH_MODE_EXACT = 0, - GST_SEARCH_MODE_BEFORE, - GST_SEARCH_MODE_AFTER -} GstSearchMode; - -gpointer gst_util_array_binary_search (gpointer array, guint num_elements, - gsize element_size, GCompareDataFunc search_func, - GstSearchMode mode, gconstpointer search_data, - gpointer user_data); - -/* fraction operations */ -gint gst_util_greatest_common_divisor (gint a, gint b); -gint64 gst_util_greatest_common_divisor_int64 (gint64 a, gint64 b); - -void gst_util_fraction_to_double (gint src_n, gint src_d, gdouble *dest); -void gst_util_double_to_fraction (gdouble src, gint *dest_n, gint *dest_d); - -gboolean gst_util_fraction_multiply (gint a_n, gint a_d, gint b_n, gint b_d, - gint *res_n, gint *res_d); -gboolean gst_util_fraction_add (gint a_n, gint a_d, gint b_n, gint b_d, - gint *res_n, gint *res_d); -gint gst_util_fraction_compare (gint a_n, gint a_d, gint b_n, gint b_d); - - -G_END_DECLS - -#endif /* __GST_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstvalue.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstvalue.h deleted file mode 100644 index 4ea492fc..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstvalue.h +++ /dev/null @@ -1,528 +0,0 @@ -/* GStreamer - * Copyright (C) <2003> David A. Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VALUE_H__ -#define __GST_VALUE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GST_MAKE_FOURCC: - * @a: the first character - * @b: the second character - * @c: the third character - * @d: the fourth character - * - * Transform four characters into a #guint32 fourcc value with host - * endianness. - * - * - * guint32 fourcc = GST_MAKE_FOURCC ('M', 'J', 'P', 'G'); - * - * - */ -#define GST_MAKE_FOURCC(a,b,c,d) ((guint32)((a)|(b)<<8|(c)<<16|(d)<<24)) - -/** - * GST_STR_FOURCC: - * @f: a string with at least four characters - * - * Transform an input string into a #guint32 fourcc value with host - * endianness. - * Caller is responsible for ensuring the input string consists of at least - * four characters. - * - * - * guint32 fourcc = GST_STR_FOURCC ("MJPG"); - * - * - */ -#define GST_STR_FOURCC(f) ((guint32)(((f)[0])|((f)[1]<<8)|((f)[2]<<16)|((f)[3]<<24))) - -/** - * GST_FOURCC_FORMAT: - * - * Can be used together with #GST_FOURCC_ARGS to properly output a - * #guint32 fourcc value in a printf()-style text message. - * - * - * printf ("fourcc: %" GST_FOURCC_FORMAT "\n", GST_FOURCC_ARGS (fcc)); - * - * - */ -#define GST_FOURCC_FORMAT "c%c%c%c" - -/** - * GST_FOURCC_ARGS: - * @fourcc: a #guint32 fourcc value to output - * - * Can be used together with #GST_FOURCC_FORMAT to properly output a - * #guint32 fourcc value in a printf()-style text message. - */ -#define GST_FOURCC_ARGS(fourcc) \ - ((gchar) ((fourcc) &0xff)), \ - ((gchar) (((fourcc)>>8 )&0xff)), \ - ((gchar) (((fourcc)>>16)&0xff)), \ - ((gchar) (((fourcc)>>24)&0xff)) - -/** - * GST_VALUE_HOLDS_INT_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_INT_RANGE value. - */ -#define GST_VALUE_HOLDS_INT_RANGE(x) (G_VALUE_HOLDS((x), gst_int_range_get_type ())) - -/** - * GST_VALUE_HOLDS_INT64_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_INT64_RANGE value. - */ -#define GST_VALUE_HOLDS_INT64_RANGE(x) (G_VALUE_HOLDS((x), gst_int64_range_get_type ())) - -/** - * GST_VALUE_HOLDS_DOUBLE_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_DOUBLE_RANGE value. - */ -#define GST_VALUE_HOLDS_DOUBLE_RANGE(x) (G_VALUE_HOLDS((x), gst_double_range_get_type ())) - -/** - * GST_VALUE_HOLDS_FRACTION_RANGE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_FRACTION_RANGE value. - */ -#define GST_VALUE_HOLDS_FRACTION_RANGE(x) (G_VALUE_HOLDS((x), gst_fraction_range_get_type ())) - -/** - * GST_VALUE_HOLDS_LIST: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_LIST value. - */ -#define GST_VALUE_HOLDS_LIST(x) (G_VALUE_HOLDS((x), gst_value_list_get_type ())) - -/** - * GST_VALUE_HOLDS_ARRAY: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_ARRAY value. - */ -#define GST_VALUE_HOLDS_ARRAY(x) (G_VALUE_HOLDS((x), gst_value_array_get_type ())) - -/** - * GST_VALUE_HOLDS_CAPS: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_CAPS value. - */ -#define GST_VALUE_HOLDS_CAPS(x) (G_VALUE_HOLDS((x), GST_TYPE_CAPS)) - -/** - * GST_VALUE_HOLDS_STRUCTURE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_STRUCTURE value. - */ -#define GST_VALUE_HOLDS_STRUCTURE(x) (G_VALUE_HOLDS((x), GST_TYPE_STRUCTURE)) - -/** - * GST_VALUE_HOLDS_BUFFER: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_BUFFER value. - */ -#define GST_VALUE_HOLDS_BUFFER(x) (G_VALUE_HOLDS((x), GST_TYPE_BUFFER)) - -/** - * GST_VALUE_HOLDS_SAMPLE: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_SAMPLE value. - */ -#define GST_VALUE_HOLDS_SAMPLE(x) (G_VALUE_HOLDS((x), GST_TYPE_SAMPLE)) - -/** - * GST_VALUE_HOLDS_FRACTION: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_FRACTION value. - */ -#define GST_VALUE_HOLDS_FRACTION(x) (G_VALUE_HOLDS((x), gst_fraction_get_type ())) - -/** - * GST_VALUE_HOLDS_DATE_TIME: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_DATE_TIME value. - */ -#define GST_VALUE_HOLDS_DATE_TIME(x) (G_VALUE_HOLDS((x), gst_date_time_get_type ())) - -/** - * GST_VALUE_HOLDS_BITMASK: - * @x: the #GValue to check - * - * Checks if the given #GValue contains a #GST_TYPE_BITMASK value. - */ -#define GST_VALUE_HOLDS_BITMASK(x) (G_VALUE_HOLDS((x), gst_bitmask_get_type ())) - -/** - * GST_TYPE_INT_RANGE: - * - * a #GValue type that represents an integer range - * - * Returns: the #GType of GstIntRange - */ -#define GST_TYPE_INT_RANGE gst_int_range_get_type () - -/** - * GST_TYPE_INT64_RANGE: - * - * a #GValue type that represents an #gint64 range - * - * Returns: the #GType of GstInt64Range - */ -#define GST_TYPE_INT64_RANGE gst_int64_range_get_type () - -/** - * GST_TYPE_DOUBLE_RANGE: - * - * a #GValue type that represents a floating point range with double precission - * - * Returns: the #GType of GstIntRange - */ -#define GST_TYPE_DOUBLE_RANGE gst_double_range_get_type () - -/** - * GST_TYPE_FRACTION_RANGE: - * - * a #GValue type that represents a GstFraction range - * - * Returns: the #GType of GstFractionRange - */ -#define GST_TYPE_FRACTION_RANGE gst_fraction_range_get_type () - -/** - * GST_TYPE_LIST: - * - * a #GValue type that represents an unordered list of #GValue values. This - * is used for example to express a list of possible values for a field in - * a caps structure, like a list of possible sample rates, of which only one - * will be chosen in the end. This means that all values in the list are - * meaningful on their own. - * - * Returns: the #GType of GstValueList (which is not explicitly typed) - */ -#define GST_TYPE_LIST gst_value_list_get_type () - -/** - * GST_TYPE_ARRAY: - * - * a #GValue type that represents an ordered list of #GValue values. This is - * used to express a set of values that is meaningful only in their specific - * combination and order of values. Each value on its own is not particularly - * meaningful, only the ordered array in its entirety is meaningful. This is - * used for example to express channel layouts for multichannel audio where - * each channel needs to be mapped to a position in the room. - * - * Returns: the #GType of GstArrayList (which is not explicitly typed) - */ -#define GST_TYPE_ARRAY gst_value_array_get_type () - -/** - * GST_TYPE_FRACTION: - * - * a #GValue type that represents a fraction of an integer numerator over - * an integer denominator - * - * Returns: the #GType of GstFraction (which is not explicitly typed) - */ - -#define GST_TYPE_FRACTION gst_fraction_get_type () - -/** - * GST_TYPE_DATE_TIME: - * - * a boxed #GValue type for #GstDateTime that represents a date and time. - * - * Returns: the #GType of GstDateTime - */ - -#define GST_TYPE_DATE_TIME gst_date_time_get_type () - -/** - * GST_TYPE_BITMASK: - * - * a #GValue type that represents a 64-bit bitmask. - * - * Returns: the #GType of GstBitmask (which is not explicitly typed) - */ - -#define GST_TYPE_BITMASK gst_bitmask_get_type () - -/** - * GST_VALUE_LESS_THAN: - * - * Indicates that the first value provided to a comparison function - * (gst_value_compare()) is lesser than the second one. - */ -#define GST_VALUE_LESS_THAN (-1) - -/** - * GST_VALUE_EQUAL: - * - * Indicates that the first value provided to a comparison function - * (gst_value_compare()) is equal to the second one. - */ -#define GST_VALUE_EQUAL 0 - -/** - * GST_VALUE_GREATER_THAN: - * - * Indicates that the first value provided to a comparison function - * (gst_value_compare()) is greater than the second one. - */ -#define GST_VALUE_GREATER_THAN 1 - -/** - * GST_VALUE_UNORDERED: - * - * Indicates that the comparison function (gst_value_compare()) can not - * determine a order for the two provided values. - */ -#define GST_VALUE_UNORDERED 2 - -/** - * GstValueCompareFunc: - * @value1: first value for comparison - * @value2: second value for comparison - * - * Used together with gst_value_compare() to compare #GValue items. - * - * Returns: one of GST_VALUE_LESS_THAN, GST_VALUE_EQUAL, GST_VALUE_GREATER_THAN - * or GST_VALUE_UNORDERED - */ -typedef gint (* GstValueCompareFunc) (const GValue *value1, - const GValue *value2); - -/** - * GstValueSerializeFunc: - * @value1: a #GValue - * - * Used by gst_value_serialize() to obtain a non-binary form of the #GValue. - * - * Free-function: g_free - * - * Returns: (transfer full): the string representation of the value - */ -typedef gchar * (* GstValueSerializeFunc) (const GValue *value1); - -/** - * GstValueDeserializeFunc: - * @dest: a #GValue - * @s: a string - * - * Used by gst_value_deserialize() to parse a non-binary form into the #GValue. - * - * Returns: %TRUE for success - */ -typedef gboolean (* GstValueDeserializeFunc) (GValue *dest, - const gchar *s); - -typedef struct _GstValueTable GstValueTable; -/** - * GstValueTable: - * @type: a #GType - * @compare: a #GstValueCompareFunc - * @serialize: a #GstValueSerializeFunc - * @deserialize: a #GstValueDeserializeFunc - * - * VTable for the #GValue @type. - */ -struct _GstValueTable { - GType type; - GstValueCompareFunc compare; - GstValueSerializeFunc serialize; - GstValueDeserializeFunc deserialize; - - /*< private >*/ - gpointer _gst_reserved [GST_PADDING]; -}; - -GType gst_int_range_get_type (void); -GType gst_int64_range_get_type (void); -GType gst_double_range_get_type (void); -GType gst_fraction_range_get_type (void); -GType gst_fraction_get_type (void); -GType gst_value_list_get_type (void); -GType gst_value_array_get_type (void); -GType gst_bitmask_get_type (void); - -GType gst_date_time_get_type (void); - -void gst_value_register (const GstValueTable *table); -void gst_value_init_and_copy (GValue *dest, - const GValue *src); - -gchar * gst_value_serialize (const GValue *value) G_GNUC_MALLOC; -gboolean gst_value_deserialize (GValue *dest, - const gchar *src); - -/* list */ -void gst_value_list_append_value (GValue *value, - const GValue *append_value); -void gst_value_list_prepend_value (GValue *value, - const GValue *prepend_value); -void gst_value_list_concat (GValue *dest, - const GValue *value1, - const GValue *value2); -void gst_value_list_merge (GValue *dest, - const GValue *value1, - const GValue *value2); -guint gst_value_list_get_size (const GValue *value); -const GValue * gst_value_list_get_value (const GValue *value, - guint index); - -/* array */ -void gst_value_array_append_value (GValue *value, - const GValue *append_value); -void gst_value_array_prepend_value (GValue *value, - const GValue *prepend_value); -guint gst_value_array_get_size (const GValue *value); -const GValue * gst_value_array_get_value (const GValue *value, - guint index); - -/* int range */ -void gst_value_set_int_range (GValue *value, - gint start, - gint end); -void gst_value_set_int_range_step (GValue *value, - gint start, - gint end, - gint step); -gint gst_value_get_int_range_min (const GValue *value); -gint gst_value_get_int_range_max (const GValue *value); -gint gst_value_get_int_range_step (const GValue *value); - -/* int64 range */ -void gst_value_set_int64_range (GValue *value, - gint64 start, - gint64 end); -void gst_value_set_int64_range_step (GValue *value, - gint64 start, - gint64 end, - gint64 step); -gint64 gst_value_get_int64_range_min (const GValue *value); -gint64 gst_value_get_int64_range_max (const GValue *value); -gint64 gst_value_get_int64_range_step (const GValue *value); - -/* double range */ -void gst_value_set_double_range (GValue *value, - gdouble start, - gdouble end); -gdouble gst_value_get_double_range_min (const GValue *value); -gdouble gst_value_get_double_range_max (const GValue *value); - -/* caps */ -const GstCaps * gst_value_get_caps (const GValue *value); -void gst_value_set_caps (GValue *value, - const GstCaps *caps); - -/* structure */ -const GstStructure * - gst_value_get_structure (const GValue *value); -void gst_value_set_structure (GValue *value, - const GstStructure *structure); - -/* fraction */ -void gst_value_set_fraction (GValue *value, - gint numerator, - gint denominator); -gint gst_value_get_fraction_numerator (const GValue *value); -gint gst_value_get_fraction_denominator (const GValue *value); -gboolean gst_value_fraction_multiply (GValue *product, - const GValue *factor1, - const GValue *factor2); -gboolean gst_value_fraction_subtract (GValue * dest, - const GValue * minuend, - const GValue * subtrahend); - -/* fraction range */ -void gst_value_set_fraction_range (GValue *value, - const GValue *start, - const GValue *end); -void gst_value_set_fraction_range_full (GValue *value, - gint numerator_start, - gint denominator_start, - gint numerator_end, - gint denominator_end); -const GValue *gst_value_get_fraction_range_min (const GValue *value); -const GValue *gst_value_get_fraction_range_max (const GValue *value); - -/* bitmask */ -guint64 gst_value_get_bitmask (const GValue *value); -void gst_value_set_bitmask (GValue *value, - guint64 bitmask); - -/* compare */ -gint gst_value_compare (const GValue *value1, - const GValue *value2); -gboolean gst_value_can_compare (const GValue *value1, - const GValue *value2); -gboolean gst_value_is_subset (const GValue *value1, - const GValue *value2); - -/* union */ -gboolean gst_value_union (GValue *dest, - const GValue *value1, - const GValue *value2); -gboolean gst_value_can_union (const GValue *value1, - const GValue *value2); - -/* intersection */ -gboolean gst_value_intersect (GValue *dest, - const GValue *value1, - const GValue *value2); -gboolean gst_value_can_intersect (const GValue *value1, - const GValue *value2); - -/* subtraction */ -gboolean gst_value_subtract (GValue *dest, - const GValue *minuend, - const GValue *subtrahend); -gboolean gst_value_can_subtract (const GValue *minuend, - const GValue *subtrahend); - -/* fixation */ -gboolean gst_value_is_fixed (const GValue *value); -gboolean gst_value_fixate (GValue *dest, - const GValue *src); - -G_END_DECLS - -#endif - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstversion.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstversion.h deleted file mode 100644 index 82b17344..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/gstversion.h +++ /dev/null @@ -1,88 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans - * - * gstversion.h: Version information for GStreamer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/** - * SECTION:gstversion - * @short_description: GStreamer version macros. - * - * Use the GST_VERSION_* macros e.g. when defining own plugins. The GStreamer - * runtime checks if these plugin and core version match and refuses to use a - * plugin compiled against a different version of GStreamer. - * You can also use the macros to keep the GStreamer version information in - * your application. - * - * Use the gst_version() function if you want to know which version of - * GStreamer you are currently linked against. - * - * The version macros get defined by including "gst/gst.h". - */ - -#ifndef __GST_VERSION_H__ -#define __GST_VERSION_H__ - -G_BEGIN_DECLS - -/** - * GST_VERSION_MAJOR: - * - * The major version of GStreamer at compile time: - */ -#define GST_VERSION_MAJOR (1) -/** - * GST_VERSION_MINOR: - * - * The minor version of GStreamer at compile time: - */ -#define GST_VERSION_MINOR (0) -/** - * GST_VERSION_MICRO: - * - * The micro version of GStreamer at compile time: - */ -#define GST_VERSION_MICRO (5) -/** - * GST_VERSION_NANO: - * - * The nano version of GStreamer at compile time: - * Actual releases have 0, GIT versions have 1, prerelease versions have 2-... - */ -#define GST_VERSION_NANO (0) - -/** - * GST_CHECK_VERSION: - * @major: a number indicating the major version - * @minor: a number indicating the minor version - * @micro: a number indicating the micro version - * - * Check whether a GStreamer version equal to or greater than - * major.minor.micro is present. - */ -#define GST_CHECK_VERSION(major,minor,micro) \ - (GST_VERSION_MAJOR > (major) || \ - (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR > (minor)) || \ - (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR == (minor) && \ - GST_VERSION_MICRO >= (micro)) || \ - (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR == (minor) && \ - GST_VERSION_MICRO + 1 == (micro) && GST_VERSION_NANO > 0)) - -G_END_DECLS - -#endif /* __GST_VERSION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h deleted file mode 100644 index 4c0a5aa3..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography-enumtypes.h +++ /dev/null @@ -1,39 +0,0 @@ - - - -#ifndef __GST_PHOTOGRAPHY_ENUM_TYPES_H__ -#define __GST_PHOTOGRAPHY_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "photography.h" */ -GType gst_photography_noise_reduction_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_NOISE_REDUCTION (gst_photography_noise_reduction_get_type()) -GType gst_photography_white_balance_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_WHITE_BALANCE_MODE (gst_photography_white_balance_mode_get_type()) -GType gst_photography_color_tone_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_COLOR_TONE_MODE (gst_photography_color_tone_mode_get_type()) -GType gst_photography_scene_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_SCENE_MODE (gst_photography_scene_mode_get_type()) -GType gst_photography_flash_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FLASH_MODE (gst_photography_flash_mode_get_type()) -GType gst_photography_focus_status_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FOCUS_STATUS (gst_photography_focus_status_get_type()) -GType gst_photography_caps_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_CAPS (gst_photography_caps_get_type()) -GType gst_photography_shake_risk_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_SHAKE_RISK (gst_photography_shake_risk_get_type()) -GType gst_photography_flicker_reduction_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FLICKER_REDUCTION_MODE (gst_photography_flicker_reduction_mode_get_type()) -GType gst_photography_focus_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_FOCUS_MODE (gst_photography_focus_mode_get_type()) -GType gst_photography_exposure_mode_get_type (void); -#define GST_TYPE_PHOTOGRAPHY_EXPOSURE_MODE (gst_photography_exposure_mode_get_type()) -G_END_DECLS - -#endif /* __GST_PHOTOGRAPHY_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography.h deleted file mode 100644 index d3a16e9d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/interfaces/photography.h +++ /dev/null @@ -1,590 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2008 Nokia Corporation - * - * photography.h: photography interface for digital imaging - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PHOTOGRAPHY_H__ -#define __GST_PHOTOGRAPHY_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The GstPhotography interface is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_PHOTOGRAPHY \ - (gst_photography_get_type ()) -#define GST_PHOTOGRAPHY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PHOTOGRAPHY, GstPhotography)) -#define GST_IS_PHOTOGRAPHY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PHOTOGRAPHY)) -#define GST_PHOTOGRAPHY_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_PHOTOGRAPHY, GstPhotographyInterface)) - - -/** - * GST_PHOTOGRAPHY_AUTOFOCUS_DONE: - * - * Name of custom GstMessage that will be posted to #GstBus when autofocusing - * is complete. - * This message contains following fields: - * - * - * - * #GstPhotographyFocusStatus - * "status": - * Tells if focusing succeeded or failed. - * - * - * - * - * #G_TYPE_INT - * "focus-window-rows": - * Tells number of focus matrix rows. - * - * - * - * - * #G_TYPE_INT - * "focus-window-columns": - * Tells number of focus matrix columns. - * - * - * - * - * #G_TYPE_INT - * "focus-window-mask": - * Bitmask containing rows x columns bits which mark the focus points in the - * focus matrix. Lowest bit (LSB) always represents the top-left corner of the - * focus matrix. This field is only valid when focusing status is SUCCESS. - * - * - * - */ -#define GST_PHOTOGRAPHY_AUTOFOCUS_DONE "autofocus-done" - -/** - * GST_PHOTOGRAPHY_SHAKE_RISK: - * - * Name of custom GstMessage that is posted to #GstBus during autofocusing - * process. It is posted if there is change in the risk of captured image - * becoming "shaken" due to camera movement and too long exposure time. - * - * This message contains following fields: - * - * - * - * #GstPhotographyShakeRisk - * "status": - * Tells risk level of capturing shaken image. - * - * - * - */ -#define GST_PHOTOGRAPHY_SHAKE_RISK "shake-risk" - -/* Maximum white point values used in #GstPhotographySettings */ -#define MAX_WHITE_POINT_VALUES 4 - -/* Interface property names */ -#define GST_PHOTOGRAPHY_PROP_WB_MODE "white-balance-mode" -#define GST_PHOTOGRAPHY_PROP_COLOR_TONE "color-tone-mode" -#define GST_PHOTOGRAPHY_PROP_SCENE_MODE "scene-mode" -#define GST_PHOTOGRAPHY_PROP_FLASH_MODE "flash-mode" -#define GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION "noise-reduction" -#define GST_PHOTOGRAPHY_PROP_FOCUS_STATUS "focus-status" -#define GST_PHOTOGRAPHY_PROP_CAPABILITIES "capabilities" -#define GST_PHOTOGRAPHY_PROP_SHAKE_RISK "shake-risk" -#define GST_PHOTOGRAPHY_PROP_EV_COMP "ev-compensation" -#define GST_PHOTOGRAPHY_PROP_ISO_SPEED "iso-speed" -#define GST_PHOTOGRAPHY_PROP_APERTURE "aperture" -#define GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME "exposure-time" -#define GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS \ - "image-capture-supported-caps" -#define GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS \ - "image-preview-supported-caps" -#define GST_PHOTOGRAPHY_PROP_FLICKER_MODE "flicker-mode" -#define GST_PHOTOGRAPHY_PROP_FOCUS_MODE "focus-mode" -#define GST_PHOTOGRAPHY_PROP_ZOOM "zoom" -#define GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE "color-temperature" -#define GST_PHOTOGRAPHY_PROP_WHITE_POINT "white-point" -#define GST_PHOTOGRAPHY_PROP_ANALOG_GAIN "analog-gain" -#define GST_PHOTOGRAPHY_PROP_EXPOSURE_MODE "exposure-mode" -#define GST_PHOTOGRAPHY_PROP_LENS_FOCUS "lens-focus" -#define GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME "min-exposure-time" -#define GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME "max-exposure-time" - -/** - * GstPhotography: - * - * Opaque #GstPhotography data structure. - */ -typedef struct _GstPhotography GstPhotography; - -/** - * GstPhotographyNoiseReduction: - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER: Adaptive noise reduction on Bayer - * format - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC: reduces the noise on Y and 2-chroma - * images. - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL: Multi-frame adaptive NR, - * provided for the video mode - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED: Fixed Pattern Noise refers to noise - * that does not change between frames. The noise is removed from the sensor - * image, by subtracting a previously-captured black image in memory. - * @GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA: Extra Noise Reduction. In the case - * of high-ISO capturing, some noise remains after YCC NR. XNR reduces this - * remaining noise. - * - * Noise Reduction features of a photography capture or filter element. - * - * Since: 0.10.21 - */ -typedef enum -{ - GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER = ( 1<<0 ), - GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC = ( 1<<1 ), - GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL= ( 1<< 2), - GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED = (1 << 3), - GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA = (1 << 4) -} GstPhotographyNoiseReduction; - -/** - * GstPhotographyWhiteBalanceMode: - * @GST_PHOTOGRAPHY_WB_MODE_AUTO: Choose white balance mode automatically - * @GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT: Mode for daylight conditions - * @GST_PHOTOGRAPHY_WB_MODE_CLOUDY: Mode for cloudy conditions - * @GST_PHOTOGRAPHY_WB_MODE_SUNSET: Mode for sunset conditions - * @GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN: Mode for tungsten lighting - * @GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT: Mode for fluorescent lighting - * @GST_PHOTOGRAPHY_WB_MODE_MANUAL: Disable automatic white balance adjustment - * and keep current values. - * - * Modes for white balance control. - */ -typedef enum -{ - GST_PHOTOGRAPHY_WB_MODE_AUTO = 0, - GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT, - GST_PHOTOGRAPHY_WB_MODE_CLOUDY, - GST_PHOTOGRAPHY_WB_MODE_SUNSET, - GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN, - GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT, - GST_PHOTOGRAPHY_WB_MODE_MANUAL -} GstPhotographyWhiteBalanceMode; - -/** - * GstPhotographyColorToneMode: - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL: No effects - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA: Sepia - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE: Negative - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE: Grayscale - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL: Natural - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID: Vivid - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP: Colorswap - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE: Solarize - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS: Out of focus - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE: Sky blue - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN: Grass green - * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN: Skin whiten - * - * Modes for special color effects. - */ -typedef enum -{ - GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL = 0, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN, - GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN -} GstPhotographyColorToneMode; - -/** - * GstPhotographySceneMode: - * @GST_PHOTOGRAPHY_SCENE_MODE_MANUAL: Set individual options manually - * @GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP: Mode for close objects - * @GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT: Mode for portraits - * @GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE: Mode for landscapes - * @GST_PHOTOGRAPHY_SCENE_MODE_SPORT: Mode for scene with fast motion - * @GST_PHOTOGRAPHY_SCENE_MODE_NIGHT: Mode for night conditions - * @GST_PHOTOGRAPHY_SCENE_MODE_AUTO: Choose scene mode automatically - * - * Each mode contains preset #GstPhotography options in order to produce - * good capturing result in certain scene. - */ -typedef enum -{ - GST_PHOTOGRAPHY_SCENE_MODE_MANUAL = 0, - GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP, - GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT, - GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE, - GST_PHOTOGRAPHY_SCENE_MODE_SPORT, - GST_PHOTOGRAPHY_SCENE_MODE_NIGHT, - GST_PHOTOGRAPHY_SCENE_MODE_AUTO -} GstPhotographySceneMode; - -/** - * GstPhotographyFlashMode: - * @GST_PHOTOGRAPHY_FLASH_MODE_AUTO: Fire flash automatically according to - * lighting conditions. - * @GST_PHOTOGRAPHY_FLASH_MODE_OFF: Never fire flash - * @GST_PHOTOGRAPHY_FLASH_MODE_ON: Always fire flash - * @GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN: Fill in flash - * @GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE: Flash mode for reducing chance of - * capturing red eyes - * - * Modes for flash control. - */ -typedef enum -{ - GST_PHOTOGRAPHY_FLASH_MODE_AUTO = 0, - GST_PHOTOGRAPHY_FLASH_MODE_OFF, - GST_PHOTOGRAPHY_FLASH_MODE_ON, - GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN, - GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE -} GstPhotographyFlashMode; - -/** - * GstPhotographyFocusStatus: - * @GST_PHOTOGRAPHY_FOCUS_STATUS_NONE: No status available - * @GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING: Focusing is ongoing - * @GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL: Focusing failed - * @GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS: Focusing succeeded - * - * Status of the focusing operation, used in #GST_PHOTOGRAPHY_AUTOFOCUS_DONE - * message. - */ -typedef enum -{ - GST_PHOTOGRAPHY_FOCUS_STATUS_NONE = 0, - GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING, - GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL, - GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS -} GstPhotographyFocusStatus; - -/** - * GstPhotographyCaps: - * - * Bitmask that indicates which #GstPhotography interface features an instance - * supports. - */ -typedef enum -{ - GST_PHOTOGRAPHY_CAPS_NONE = (0 << 0), - GST_PHOTOGRAPHY_CAPS_EV_COMP = (1 << 0), - GST_PHOTOGRAPHY_CAPS_ISO_SPEED = (1 << 1), - GST_PHOTOGRAPHY_CAPS_WB_MODE = (1 << 2), - GST_PHOTOGRAPHY_CAPS_TONE = (1 << 3), - GST_PHOTOGRAPHY_CAPS_SCENE = (1 << 4), - GST_PHOTOGRAPHY_CAPS_FLASH = (1 << 5), - GST_PHOTOGRAPHY_CAPS_ZOOM = (1 << 6), - GST_PHOTOGRAPHY_CAPS_FOCUS = (1 << 7), - GST_PHOTOGRAPHY_CAPS_APERTURE = (1 << 8), - GST_PHOTOGRAPHY_CAPS_EXPOSURE = (1 << 9), - GST_PHOTOGRAPHY_CAPS_SHAKE = (1 << 10), - GST_PHOTOGRAPHY_CAPS_WHITE_BALANCE = (1 << 11), - GST_PHOTOGRAPHY_CAPS_NOISE_REDUCTION = (1 << 12), - GST_PHOTOGRAPHY_CAPS_FLICKER_REDUCTION = (1 << 13), - GST_PHOTOGRAPHY_CAPS_ALL = (~0) -} GstPhotographyCaps; - -/** - * GstPhotographyShakeRisk: - * @GST_PHOTOGRAPHY_SHAKE_RISK_LOW: Low risk - * @GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM: Medium risk - * @GST_PHOTOGRAPHY_SHAKE_RISK_HIGH: High risk - * - * Risk level of captured image becoming "shaken" due to camera movement and - * too long exposure time. Used in #GST_PHOTOGRAPHY_SHAKE_RISK #GstMessage. - */ -typedef enum -{ - GST_PHOTOGRAPHY_SHAKE_RISK_LOW = 0, - GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM, - GST_PHOTOGRAPHY_SHAKE_RISK_HIGH, -} GstPhotographyShakeRisk; - -/** - * GstPhotographyFlickerReductionMode: - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF: Disable flicker reduction - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ: 50Hz flicker reduction - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ: 60Hz flicker reduction - * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO: Choose mode automatically - * - * Reduce flicker in video caused by light source fluctuation. - */ -typedef enum -{ - GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF = 0, - GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ, - GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ, - GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO, -} GstPhotographyFlickerReductionMode; - -/** - * GstPhotographyFocusMode: - * @GST_PHOTOGRAPHY_FOCUS_MODE_AUTO: Choose focus mode automatically - * @GST_PHOTOGRAPHY_FOCUS_MODE_MACRO: Mode for focusing objects close to lens - * @GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT: Mode for portraits - * @GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY: Mode for landscapes and far away objects - * @GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL: Mode for maximum depth of field, keeping - * focus acceptable both in infinify and as close objects as possible - * @GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED: Extended focus mode - * @GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL: Continuous autofocus mode - * @GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED: Extended continuous - * autofocus mode - * @GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL: Disable automatic focusing - * and keep current value. #GstPhotography:lens-focus property can - * be used to change focus manually. - * - * Choose mode for focusing algorithm. - */ -typedef enum { - GST_PHOTOGRAPHY_FOCUS_MODE_AUTO = 0, - GST_PHOTOGRAPHY_FOCUS_MODE_MACRO, - GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT, - GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY, - GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL, - GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED, - GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL, - GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED, - GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL -} GstPhotographyFocusMode; - -/** - * GstPhotographyExposureMode: - * @GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO: Adjust exposure automatically - * @GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL: Disable automatic exposure adjustment - * and keep current values. - * - */ -typedef enum { - GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO = 0, - GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL -} GstPhotographyExposureMode; - -/** - * GstPhotographySettings: - * - * Structure containing all #GstPhotography settings, used to set all - * settings in one call with @gst_photography_set_config(). - */ -typedef struct -{ - GstPhotographyWhiteBalanceMode wb_mode; - GstPhotographyColorToneMode tone_mode; - GstPhotographySceneMode scene_mode; - GstPhotographyFlashMode flash_mode; - guint32 exposure_time; - guint aperture; - gfloat ev_compensation; - guint iso_speed; - gfloat zoom; - GstPhotographyFlickerReductionMode flicker_mode; - GstPhotographyFocusMode focus_mode; - GstPhotographyNoiseReduction noise_reduction; - GstPhotographyExposureMode exposure_mode; - guint color_temperature; - guint white_point[MAX_WHITE_POINT_VALUES]; - gfloat analog_gain; - gfloat lens_focus; - guint min_exposure_time; - guint max_exposure_time; -} GstPhotographySettings; - -/** - * GstPhotographyCapturePrepared: - * @data: user data that has been given, when registering the callback - * @configured_caps: #GstCaps defining the configured capture format. - * Ownership of these caps stays in the element. - * - * This callback will be called when the element has finished preparations - * and is ready for image capture. The next buffer that element produces - * will be of @configured_caps format, so this callback allows the application - * to e.g. reconfigure capsfilters in pipeline if any. - */ -typedef void (*GstPhotographyCapturePrepared) (gpointer data, - const GstCaps *configured_caps); - -/** - * GstPhotographyInterface: - * @parent: parent interface type. - * @get_ev_compensation: vmethod to get ev exposure compensation value - * @get_iso_speed: vmethod to get iso speed (light sensitivity) value - * @get_aperture: vmethod to get aperture value - * @get_exposure: vmethod to get exposure time value - * @get_white_balance_mode: vmethod to get white balance mode value - * @get_color_tone_mode: vmethod to get color tone mode value - * @get_scene_mode: vmethod to get scene mode value - * @get_flash_mode: vmethod to get flash mode value - * @get_noise_reduction: vmethod to get noise reduction mode value - * @get_zoom: vmethod to get zoom factor value - * @set_ev_compensation: vmethod to set ev exposure compensation value - * @set_iso_speed: vmethod to set iso speed (light sensitivity) value - * @set_aperture: vmethod to set aperture value - * @set_exposure: vmethod to set exposure time value - * @set_white_balance_mode: vmethod to set white balance mode value - * @set_color_tone_mode: vmethod to set color tone mode value - * @set_scene_mode: vmethod to set scene mode value - * @set_flash_mode: vmethod to set flash mode value - * @set_noise_reduction: vmethod to set noise reduction mode value - * @set_zoom: vmethod to set zoom factor value - * @get_capabilities: vmethod to get supported capabilities of the interface - * @prepare_for_capture: vmethod to tell the element to prepare for capturing - * @set_autofocus: vmethod to set autofocus on/off - * @set_config: vmethod to set all configuration parameters at once - * @get_config: vmethod to get all configuration parameters at once - * @get_image_capture_supported_caps: vmethod to get caps describing supported image capture formats - * - * #GstPhotographyInterface interface. - */ -typedef struct _GstPhotographyInterface -{ - GTypeInterface parent; - - /* virtual functions */ - gboolean (*get_ev_compensation) (GstPhotography * photo, gfloat * ev_comp); - gboolean (*get_iso_speed) (GstPhotography * photo, guint * iso_speed); - gboolean (*get_aperture) (GstPhotography * photo, guint * aperture); - gboolean (*get_exposure) (GstPhotography * photo, guint32 * exposure); - gboolean (*get_white_balance_mode) (GstPhotography * photo, - GstPhotographyWhiteBalanceMode * wb_mode); - gboolean (*get_color_tone_mode) (GstPhotography * photo, - GstPhotographyColorToneMode * tone_mode); - gboolean (*get_scene_mode) (GstPhotography * photo, - GstPhotographySceneMode * scene_mode); - gboolean (*get_flash_mode) (GstPhotography * photo, - GstPhotographyFlashMode * flash_mode); - gboolean (*get_zoom) (GstPhotography * photo, gfloat * zoom); - gboolean (*get_flicker_mode) (GstPhotography * photo, - GstPhotographyFlickerReductionMode * flicker_mode); - gboolean (*get_focus_mode) (GstPhotography * photo, - GstPhotographyFocusMode * focus_mode); - - gboolean (*set_ev_compensation) (GstPhotography * photo, gfloat ev_comp); - gboolean (*set_iso_speed) (GstPhotography * photo, guint iso_speed); - gboolean (*set_aperture) (GstPhotography * photo, guint aperture); - gboolean (*set_exposure) (GstPhotography * photo, guint32 exposure); - gboolean (*set_white_balance_mode) (GstPhotography * photo, - GstPhotographyWhiteBalanceMode wb_mode); - gboolean (*set_color_tone_mode) (GstPhotography * photo, - GstPhotographyColorToneMode tone_mode); - gboolean (*set_scene_mode) (GstPhotography * photo, - GstPhotographySceneMode scene_mode); - gboolean (*set_flash_mode) (GstPhotography * photo, - GstPhotographyFlashMode flash_mode); - gboolean (*set_zoom) (GstPhotography * photo, gfloat zoom); - gboolean (*set_flicker_mode) (GstPhotography * photo, - GstPhotographyFlickerReductionMode flicker_mode); - gboolean (*set_focus_mode) (GstPhotography * photo, - GstPhotographyFocusMode focus_mode); - - GstPhotographyCaps (*get_capabilities) (GstPhotography * photo); - gboolean (*prepare_for_capture) (GstPhotography * photo, - GstPhotographyCapturePrepared func, GstCaps *capture_caps, gpointer user_data); - void (*set_autofocus) (GstPhotography * photo, gboolean on); - gboolean (*set_config) (GstPhotography * photo, GstPhotographySettings * config); - gboolean (*get_config) (GstPhotography * photo, GstPhotographySettings * config); - - gboolean (*get_noise_reduction) (GstPhotography * photo, - GstPhotographyNoiseReduction * noise_reduction); - gboolean (*set_noise_reduction) (GstPhotography * photo, - GstPhotographyNoiseReduction noise_reduction); - - /*< private > */ - gpointer _gst_reserved[GST_PADDING]; -} GstPhotographyInterface; - -GType gst_photography_get_type (void); - -/* virtual class function wrappers */ -gboolean gst_photography_get_ev_compensation (GstPhotography * photo, - gfloat * ev_comp); -gboolean gst_photography_get_iso_speed (GstPhotography * photo, - guint * iso_speed); -gboolean gst_photography_get_aperture (GstPhotography * photo, - guint * aperture); -gboolean gst_photography_get_exposure (GstPhotography * photo, - guint32 * exposure); -gboolean gst_photography_get_white_balance_mode (GstPhotography * photo, - GstPhotographyWhiteBalanceMode * wb_mode); -gboolean gst_photography_get_color_tone_mode (GstPhotography * photo, - GstPhotographyColorToneMode * tone_mode); -gboolean gst_photography_get_scene_mode (GstPhotography * photo, - GstPhotographySceneMode * scene_mode); -gboolean gst_photography_get_flash_mode (GstPhotography * photo, - GstPhotographyFlashMode * flash_mode); -gboolean gst_photography_get_noise_reduction (GstPhotography * photo, - GstPhotographyNoiseReduction * noise_reduction); -gboolean gst_photography_get_zoom (GstPhotography * photo, gfloat * zoom); -gboolean gst_photography_get_flicker_mode (GstPhotography * photo, - GstPhotographyFlickerReductionMode *mode); -gboolean gst_photography_get_focus_mode (GstPhotography * photo, - GstPhotographyFocusMode *mode); - -gboolean gst_photography_set_ev_compensation (GstPhotography * photo, - gfloat ev_comp); -gboolean gst_photography_set_iso_speed (GstPhotography * photo, - guint iso_speed); -gboolean gst_photography_set_aperture (GstPhotography * photo, guint aperture); -gboolean gst_photography_set_exposure (GstPhotography * photo, guint exposure); -gboolean gst_photography_set_white_balance_mode (GstPhotography * photo, - GstPhotographyWhiteBalanceMode wb_mode); -gboolean gst_photography_set_color_tone_mode (GstPhotography * photo, - GstPhotographyColorToneMode tone_mode); -gboolean gst_photography_set_scene_mode (GstPhotography * photo, - GstPhotographySceneMode scene_mode); -gboolean gst_photography_set_flash_mode (GstPhotography * photo, - GstPhotographyFlashMode flash_mode); -gboolean gst_photography_set_noise_reduction (GstPhotography * photo, - GstPhotographyNoiseReduction noise_reduction); -gboolean gst_photography_set_zoom (GstPhotography * photo, gfloat zoom); -gboolean gst_photography_set_flicker_mode (GstPhotography * photo, - GstPhotographyFlickerReductionMode mode); -gboolean gst_photography_set_focus_mode (GstPhotography * photo, - GstPhotographyFocusMode mode); - -GstPhotographyCaps gst_photography_get_capabilities (GstPhotography * photo); - -gboolean gst_photography_prepare_for_capture (GstPhotography * photo, - GstPhotographyCapturePrepared func, GstCaps *capture_caps, gpointer user_data); - -void gst_photography_set_autofocus (GstPhotography * photo, gboolean on); - -gboolean gst_photography_set_config (GstPhotography * photo, - GstPhotographySettings * config); -gboolean gst_photography_get_config (GstPhotography * photo, - GstPhotographySettings * config); - -G_END_DECLS - -#endif /* __GST_PHOTOGRAPHY_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/math-compat.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/math-compat.h deleted file mode 100644 index d160c2cf..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/math-compat.h +++ /dev/null @@ -1,112 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_MATH_COMPAT_H__ -#define __GST_MATH_COMPAT_H__ - -/* This header is not included automatically via gst/gst.h, you need to - * include it explicitly if you need it. */ - -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES /* so MSVC defines M_PI etc. */ -#endif -#include - -#include - -G_BEGIN_DECLS - -/* http://en.wikipedia.org/wiki/Math.h */ - -#define __GST_MATH_COMPAT_NEED_RINT -#define __GST_MATH_COMPAT_NEED_RINTF -#define __GST_MATH_COMPAT_NEED_ISNAN - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#undef __GST_MATH_COMPAT_NEED_RINT -#undef __GST_MATH_COMPAT_NEED_RINTF -#undef __GST_MATH_COMPAT_NEED_ISNAN -#endif - -#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L -#undef __GST_MATH_COMPAT_NEED_RINT -#undef __GST_MATH_COMPAT_NEED_RINTF -#undef __GST_MATH_COMPAT_NEED_ISNAN -#endif - -#ifndef M_PI -#define M_PI G_PI -#endif - -#ifndef M_PI_2 -#define M_PI_2 G_PI_2 -#endif - -#ifndef M_PI_4 -#define M_PI_4 G_PI_4 -#endif - -static inline double -__gst_math_compat_rint (double x) -{ - return floor (x + 0.5); -} - -static inline float -__gst_math_compat_rintf (float x) -{ - return floorf (x + 0.5); -} - -static inline gboolean -__gst_math_compat_isnan (double x) -{ - return x != x; -} - -#if defined (__GST_MATH_COMPAT_NEED_RINT) && !defined (rint) -#define rint(x) __gst_math_compat_rint(x) -#endif - -#if defined (__GST_MATH_COMPAT_NEED_RINTF) && !defined (rintf) -#define rintf(x) __gst_math_compat_rintf(x) -#endif - -#if defined (__GST_MATH_COMPAT_NEED_ISNAN) && !defined (isnan) -#define isnan(x) __gst_math_compat_isnan (x) -#endif - -#ifndef NAN -#if G_BYTE_ORDER == G_BIG_ENDIAN -#define __GST_NAN_BYTES { 0x7f, 0xc0, 0, 0 } -#elif G_BYTE_ORDER == G_LITTLE_ENDIAN -#define __GST_NAN_BYTES { 0, 0, 0xc0, 0x7f } -#endif -static union { - unsigned char __c[4]; - float __d; -} __gst_nan_union G_GNUC_UNUSED = { - __GST_NAN_BYTES -}; -#define NAN (__gst_nan_union.__d) -#endif - -G_END_DECLS - -#endif /* __GST_MATH_COMPAT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnet.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnet.h deleted file mode 100644 index 078cad59..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnet.h +++ /dev/null @@ -1,30 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_H__ -#define __GST_NET_H__ - - -#include -#include -#include - - -#endif /* __GST_NET_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h deleted file mode 100644 index 0173d874..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetaddressmeta.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_NET_ADDRESS_META_H__ -#define __GST_NET_ADDRESS_META_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstNetAddressMeta GstNetAddressMeta; - -/** - * GstNetAddressMeta: - * - * Buffer metadata for network addresses. - */ -struct _GstNetAddressMeta { - GstMeta meta; - - GSocketAddress *addr; -}; - -GType gst_net_address_meta_api_get_type (void); -#define GST_NET_ADDRESS_META_API_TYPE (gst_net_address_meta_api_get_type()) - -#define gst_buffer_get_net_address_meta(b) \ - ((GstNetAddressMeta*)gst_buffer_get_meta((b),GST_NET_ADDRESS_META_API_TYPE)) - -/* implementation */ -const GstMetaInfo *gst_net_address_meta_get_info (void); -#define GST_NET_ADDRESS_META_INFO (gst_net_address_meta_get_info()) - -GstNetAddressMeta * gst_buffer_add_net_address_meta (GstBuffer *buffer, - GSocketAddress *addr); - -G_END_DECLS - -#endif /* __GST_NET_ADDRESS_META_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetclientclock.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetclientclock.h deleted file mode 100644 index a0fcf1f9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnetclientclock.h +++ /dev/null @@ -1,78 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * 2005 Andy Wingo - * Copyright (C) 2012 Collabora Ltd. - * - * gstnetclientclock.h: clock that synchronizes itself to a time provider over - * the network - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_CLIENT_CLOCK_H__ -#define __GST_NET_CLIENT_CLOCK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_NET_CLIENT_CLOCK \ - (gst_net_client_clock_get_type()) -#define GST_NET_CLIENT_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NET_CLIENT_CLOCK,GstNetClientClock)) -#define GST_NET_CLIENT_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NET_CLIENT_CLOCK,GstNetClientClockClass)) -#define GST_IS_NET_CLIENT_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NET_CLIENT_CLOCK)) -#define GST_IS_NET_CLIENT_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NET_CLIENT_CLOCK)) - -typedef struct _GstNetClientClock GstNetClientClock; -typedef struct _GstNetClientClockClass GstNetClientClockClass; -typedef struct _GstNetClientClockPrivate GstNetClientClockPrivate; - -/** - * GstNetClientClock: - * - * Opaque #GstNetClientClock structure. - */ -struct _GstNetClientClock { - GstSystemClock clock; - - /*< private >*/ - GstNetClientClockPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstNetClientClockClass { - GstSystemClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_net_client_clock_get_type (void); - -GstClock* gst_net_client_clock_new (gchar *name, const gchar *remote_address, - gint remote_port, GstClockTime base_time); - -G_END_DECLS - -#endif /* __GST_NET_CLIENT_CLOCK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimepacket.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimepacket.h deleted file mode 100644 index 88395967..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimepacket.h +++ /dev/null @@ -1,70 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_TIME_PACKET_H__ -#define __GST_NET_TIME_PACKET_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_NET_TIME_PACKET_SIZE: - * - * The size of the packets sent between network clocks. - */ -#define GST_NET_TIME_PACKET_SIZE 16 - -typedef struct _GstNetTimePacket GstNetTimePacket; - -/** - * GstNetTimePacket: - * @local_time: the local time when this packet was sent - * @remote_time: the remote time observation - * - * Content of a #GstNetTimePacket. - */ -struct _GstNetTimePacket { - GstClockTime local_time; - GstClockTime remote_time; -}; - -GType gst_net_time_packet_get_type(void); - -GstNetTimePacket* gst_net_time_packet_new (const guint8 *buffer); -GstNetTimePacket* gst_net_time_packet_copy (const GstNetTimePacket *packet); -void gst_net_time_packet_free (GstNetTimePacket *packet); - -guint8* gst_net_time_packet_serialize (const GstNetTimePacket *packet); - -GstNetTimePacket* gst_net_time_packet_receive (GSocket * socket, - GSocketAddress ** src_address, - GError ** error); - -gboolean gst_net_time_packet_send (const GstNetTimePacket * packet, - GSocket * socket, - GSocketAddress * dest_address, - GError ** error); - -G_END_DECLS - - -#endif /* __GST_NET_TIME_PACKET_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimeprovider.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimeprovider.h deleted file mode 100644 index 81c0fbe9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/net/gstnettimeprovider.h +++ /dev/null @@ -1,74 +0,0 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo - * 2006 Joni Valtanen - * Copyright (C) 2012 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_NET_TIME_PROVIDER_H__ -#define __GST_NET_TIME_PROVIDER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_NET_TIME_PROVIDER \ - (gst_net_time_provider_get_type()) -#define GST_NET_TIME_PROVIDER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NET_TIME_PROVIDER,GstNetTimeProvider)) -#define GST_NET_TIME_PROVIDER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NET_TIME_PROVIDER,GstNetTimeProviderClass)) -#define GST_IS_NET_TIME_PROVIDER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NET_TIME_PROVIDER)) -#define GST_IS_NET_TIME_PROVIDER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NET_TIME_PROVIDER)) - -typedef struct _GstNetTimeProvider GstNetTimeProvider; -typedef struct _GstNetTimeProviderClass GstNetTimeProviderClass; -typedef struct _GstNetTimeProviderPrivate GstNetTimeProviderPrivate; - -/** - * GstNetTimeProvider: - * - * Opaque #GstNetTimeProvider structure. - */ -struct _GstNetTimeProvider { - GstObject parent; - - /*< private >*/ - GstNetTimeProviderPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstNetTimeProviderClass { - GstObjectClass parent_class; - - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_net_time_provider_get_type (void); - -GstNetTimeProvider* gst_net_time_provider_new (GstClock *clock, - const gchar *address, - gint port); - -G_END_DECLS - - -#endif /* __GST_NET_TIME_PROVIDER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/codec-utils.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/codec-utils.h deleted file mode 100644 index 7c2febf7..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/codec-utils.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GStreamer base utils library codec-specific utility functions - * Copyright (C) 2010 Arun Raghavan - * 2010 Collabora Multimedia - * 2010 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_CODEC_UTILS_H__ -#define __GST_PB_UTILS_CODEC_UTILS_H__ - -#include - -G_BEGIN_DECLS - -/* AAC */ - -guint gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx); - -const gchar * gst_codec_utils_aac_get_profile (const guint8 * audio_config, guint len); - -const gchar * gst_codec_utils_aac_get_level (const guint8 * audio_config, guint len); - -gboolean gst_codec_utils_aac_caps_set_level_and_profile (GstCaps * caps, - const guint8 * audio_config, - guint len); - -/* H.264 */ - -const gchar * gst_codec_utils_h264_get_profile (const guint8 * sps, guint len); - -const gchar * gst_codec_utils_h264_get_level (const guint8 * sps, guint len); - -guint8 gst_codec_utils_h264_get_level_idc (const gchar * level); - -gboolean gst_codec_utils_h264_caps_set_level_and_profile (GstCaps * caps, - const guint8 * sps, - guint len); - -/* MPEG-4 part 2 */ - -const gchar * gst_codec_utils_mpeg4video_get_profile (const guint8 * vis_obj_seq, guint len); - -const gchar * gst_codec_utils_mpeg4video_get_level (const guint8 * vis_obj_seq, guint len); - -gboolean gst_codec_utils_mpeg4video_caps_set_level_and_profile (GstCaps * caps, - const guint8 * vis_obj_seq, - guint len); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_CODEC_UTILS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/descriptions.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/descriptions.h deleted file mode 100644 index 5b19ecca..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/descriptions.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GStreamer base utils library source/sink/codec description support - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_DESCRIPTIONS_H__ -#define __GST_PB_UTILS_DESCRIPTIONS_H__ - -#include -#include - -G_BEGIN_DECLS - -/* - * functions for use by demuxers or decoders to add CODEC tags to tag lists - * from caps - */ - -gboolean gst_pb_utils_add_codec_description_to_tag_list (GstTagList * taglist, - const gchar * codec_tag, - const GstCaps * caps); - -gchar * gst_pb_utils_get_codec_description (const GstCaps * caps); - -/* - * functions mainly used by the missing plugins message creation functions to - * find descriptions of what exactly is missing - */ - -gchar * gst_pb_utils_get_source_description (const gchar * protocol); - -gchar * gst_pb_utils_get_sink_description (const gchar * protocol); - -gchar * gst_pb_utils_get_decoder_description (const GstCaps * caps); - -gchar * gst_pb_utils_get_encoder_description (const GstCaps * caps); - -gchar * gst_pb_utils_get_element_description (const gchar * factory_name); - - -G_END_DECLS - -#endif /* __GST_PB_UTILS_DESCRIPTIONS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-profile.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-profile.h deleted file mode 100644 index f6de6ed3..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-profile.h +++ /dev/null @@ -1,183 +0,0 @@ -/* GStreamer encoding profiles library - * Copyright (C) 2009-2010 Edward Hervey - * (C) 2009-2010 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PROFILE_H__ -#define __GST_PROFILE_H__ - -#include - -G_BEGIN_DECLS - -#include -#include - -/** - * GstEncodingProfile: - * - * The opaque base class object for all encoding profiles. This contains generic - * information like name, description, format and preset. - */ - -#define GST_TYPE_ENCODING_PROFILE \ - (gst_encoding_profile_get_type ()) -#define GST_ENCODING_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_PROFILE, GstEncodingProfile)) -#define GST_IS_ENCODING_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_PROFILE)) -typedef struct _GstEncodingProfile GstEncodingProfile; -typedef struct _GstEncodingProfileClass GstEncodingProfileClass; -GType gst_encoding_profile_get_type (void); - - - -/** - * GstEncodingContainerProfile: - * - * Encoding profiles for containers. Keeps track of a list of #GstEncodingProfile - */ -#define GST_TYPE_ENCODING_CONTAINER_PROFILE \ - (gst_encoding_container_profile_get_type ()) -#define GST_ENCODING_CONTAINER_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE, GstEncodingContainerProfile)) -#define GST_IS_ENCODING_CONTAINER_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE)) -typedef struct _GstEncodingContainerProfile GstEncodingContainerProfile; -typedef struct _GstEncodingContainerProfileClass GstEncodingContainerProfileClass; -GType gst_encoding_container_profile_get_type (void); - - - -/** - * GstEncodingVideoProfile: - * - * Variant of #GstEncodingProfile for video streams, allows specifying the @pass. - */ -#define GST_TYPE_ENCODING_VIDEO_PROFILE \ - (gst_encoding_video_profile_get_type ()) -#define GST_ENCODING_VIDEO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_VIDEO_PROFILE, GstEncodingVideoProfile)) -#define GST_IS_ENCODING_VIDEO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_VIDEO_PROFILE)) -typedef struct _GstEncodingVideoProfile GstEncodingVideoProfile; -typedef struct _GstEncodingVideoProfileClass GstEncodingVideoProfileClass; -GType gst_encoding_video_profile_get_type (void); - - - -/** - * GstEncodingAudioProfile: - * - * Variant of #GstEncodingProfile for audio streams. - */ -#define GST_TYPE_ENCODING_AUDIO_PROFILE \ - (gst_encoding_audio_profile_get_type ()) -#define GST_ENCODING_AUDIO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_AUDIO_PROFILE, GstEncodingAudioProfile)) -#define GST_IS_ENCODING_AUDIO_PROFILE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_AUDIO_PROFILE)) -typedef struct _GstEncodingAudioProfile GstEncodingAudioProfile; -typedef struct _GstEncodingAudioProfileClass GstEncodingAudioProfileClass; -GType gst_encoding_audio_profile_get_type (void); - - - -/* GstEncodingProfile API */ - -/** - * gst_encoding_profile_unref: - * @profile: a #GstEncodingProfile - * - * Decreases the reference count of the @profile, possibly freeing the @profile. - */ -#define gst_encoding_profile_unref(profile) (g_object_unref ((GObject*) profile)) - -/** - * gst_encoding_profile_ref: - * @profile: a #GstEncodingProfile - * - * Increases the reference count of the @profile. - */ -#define gst_encoding_profile_ref(profile) (g_object_ref ((GObject*) profile)) - -const gchar * gst_encoding_profile_get_name (GstEncodingProfile *profile); -void gst_encoding_profile_set_name (GstEncodingProfile *profile, - const gchar *name); -const gchar * gst_encoding_profile_get_description (GstEncodingProfile *profile); -void gst_encoding_profile_set_description (GstEncodingProfile *profile, - const gchar *description); -GstCaps * gst_encoding_profile_get_format (GstEncodingProfile *profile); -void gst_encoding_profile_set_format (GstEncodingProfile *profile, - GstCaps *format); -const gchar * gst_encoding_profile_get_preset (GstEncodingProfile *profile); -void gst_encoding_profile_set_preset (GstEncodingProfile *profile, - const gchar *preset); -guint gst_encoding_profile_get_presence (GstEncodingProfile *profile); -void gst_encoding_profile_set_presence (GstEncodingProfile *profile, - guint presence); -GstCaps * gst_encoding_profile_get_restriction (GstEncodingProfile *profile); -void gst_encoding_profile_set_restriction (GstEncodingProfile *profile, - GstCaps *restriction); - -gboolean gst_encoding_profile_is_equal (GstEncodingProfile *a, - GstEncodingProfile *b); -GstCaps * gst_encoding_profile_get_input_caps (GstEncodingProfile *profile); -const gchar * gst_encoding_profile_get_type_nick (GstEncodingProfile *profile); - -GstEncodingProfile * gst_encoding_profile_find (const gchar *targetname, - const gchar *profilename, - const gchar *category); - -/* GstEncodingContainerProfile API */ -gboolean gst_encoding_container_profile_add_profile (GstEncodingContainerProfile *container, - GstEncodingProfile *profile); -gboolean gst_encoding_container_profile_contains_profile (GstEncodingContainerProfile * container, - GstEncodingProfile *profile); -const GList * gst_encoding_container_profile_get_profiles (GstEncodingContainerProfile *profile); - - -GstEncodingContainerProfile * gst_encoding_container_profile_new (const gchar *name, - const gchar *description, - GstCaps *format, - const gchar *preset); - - -/* Invidual stream encodingprofile API */ -GstEncodingVideoProfile * gst_encoding_video_profile_new (GstCaps *format, - const gchar *preset, - GstCaps *restriction, - guint presence); -GstEncodingAudioProfile * gst_encoding_audio_profile_new (GstCaps *format, - const gchar *preset, - GstCaps *restriction, - guint presence); - -guint gst_encoding_video_profile_get_pass (GstEncodingVideoProfile *prof); -gboolean gst_encoding_video_profile_get_variableframerate (GstEncodingVideoProfile *prof); - -void gst_encoding_video_profile_set_pass (GstEncodingVideoProfile *prof, - guint pass); -void gst_encoding_video_profile_set_variableframerate (GstEncodingVideoProfile *prof, - gboolean variableframerate); - -GstEncodingProfile * gst_encoding_profile_from_discoverer (GstDiscovererInfo *info); - -G_END_DECLS - -#endif /* __GST_PROFILE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-target.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-target.h deleted file mode 100644 index bdfe3065..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/encoding-target.h +++ /dev/null @@ -1,143 +0,0 @@ -/* GStreamer encoding profile registry - * Copyright (C) 2010 Edward Hervey - * (C) 2010 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PROFILE_REGISTRY_H__ -#define __GST_PROFILE_REGISTRY_H__ - -#include - -G_BEGIN_DECLS - - -/* FIXME/UNKNOWNS - * - * Should encoding categories be well-known strings/quarks ? - * - */ - -/** - * GST_ENCODING_CATEGORY_DEVICE: - * - * #GstEncodingTarget category for device-specific targets. - * The name of the target will usually be the constructor and model of the device, - * and that target will contain #GstEncodingProfiles suitable for that device. - */ -#define GST_ENCODING_CATEGORY_DEVICE "device" - -/** - * GST_ENCODING_CATEGORY_ONLINE_SERVICE: - * - * #GstEncodingTarget category for online-services. - * The name of the target will usually be the name of the online service - * and that target will contain #GstEncodingProfiles suitable for that online - * service. - */ - -#define GST_ENCODING_CATEGORY_ONLINE_SERVICE "online-service" - -/** - * GST_ENCODING_CATEGORY_STORAGE_EDITING: - * - * #GstEncodingTarget category for storage, archiving and editing targets. - * Those targets can be lossless and/or provide very fast random access content. - * The name of the target will usually be the container type or editing target, - * and that target will contain #GstEncodingProfiles suitable for editing or - * storage. - */ -#define GST_ENCODING_CATEGORY_STORAGE_EDITING "storage-editing" - -/** - * GST_ENCODING_CATEGORY_CAPTURE: - * - * #GstEncodingTarget category for recording and capture. - * Targets within this category are optimized for low latency encoding. - */ -#define GST_ENCODING_CATEGORY_CAPTURE "capture" - -/** - * GstEncodingTarget: - * - * Collection of #GstEncodingProfile for a specific target or use-case. - * - * When being stored/loaded, targets come from a specific category, like - * #GST_ENCODING_CATEGORY_DEVICE. - */ -#define GST_TYPE_ENCODING_TARGET \ - (gst_encoding_target_get_type ()) -#define GST_ENCODING_TARGET(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_TARGET, GstEncodingTarget)) -#define GST_IS_ENCODING_TARGET(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_TARGET)) - -typedef struct _GstEncodingTarget GstEncodingTarget; -typedef GObjectClass GstEncodingTargetClass; - -GType gst_encoding_target_get_type (void); - -/** - * gst_encoding_target_unref: - * @target: a #GstEncodingTarget - * - * Decreases the reference count of the @target, possibly freeing it. - */ -#define gst_encoding_target_unref(target) \ - (g_object_unref ((GObject*) target)) - -/** - * gst_encoding_target_ref: - * @target: a #GstEncodingTarget - * - * Increases the reference count of the @target. - */ -#define gst_encoding_target_ref(target) \ - (g_object_ref ((GObject*) target)) - -GstEncodingTarget * gst_encoding_target_new (const gchar *name, - const gchar *category, - const gchar *description, - const GList *profiles); - -const gchar * gst_encoding_target_get_name (GstEncodingTarget *target); -const gchar * gst_encoding_target_get_category (GstEncodingTarget *target); -const gchar * gst_encoding_target_get_description (GstEncodingTarget *target); -const GList * gst_encoding_target_get_profiles (GstEncodingTarget *target); -GstEncodingProfile * gst_encoding_target_get_profile (GstEncodingTarget *target, - const gchar *name); - -gboolean gst_encoding_target_add_profile (GstEncodingTarget *target, - GstEncodingProfile *profile); - -gboolean gst_encoding_target_save (GstEncodingTarget *target, - GError **error); -gboolean gst_encoding_target_save_to_file (GstEncodingTarget *target, - const gchar *filepath, - GError **error); -GstEncodingTarget * gst_encoding_target_load (const gchar *name, - const gchar *category, - GError **error); -GstEncodingTarget * gst_encoding_target_load_from_file (const gchar *filepath, - GError **error); - -GList * gst_encoding_list_available_categories (void); -GList * gst_encoding_list_all_targets (const gchar * categoryname); - -G_END_DECLS - -#endif /* __GST_PROFILE_REGISTRY_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h deleted file mode 100644 index d71272ca..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstdiscoverer.h +++ /dev/null @@ -1,277 +0,0 @@ -/* GStreamer - * Copyright (C) 2009 Edward Hervey - * 2009 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_DISCOVERER_H_ -#define _GST_DISCOVERER_H_ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_DISCOVERER_STREAM_INFO \ - (gst_discoverer_stream_info_get_type ()) -#define GST_DISCOVERER_STREAM_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_STREAM_INFO, GstDiscovererStreamInfo)) -#define GST_IS_DISCOVERER_STREAM_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_STREAM_INFO)) -typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo; -typedef GObjectClass GstDiscovererStreamInfoClass; -GType gst_discoverer_stream_info_get_type (void); - -/** - * GstDiscovererStreamInfo: - * - * Base structure for information concerning a media stream. Depending on the - * stream type, one can find more media-specific information in - * #GstDiscovererAudioInfo, #GstDiscovererVideoInfo, and - * #GstDiscovererContainerInfo. - * - * The #GstDiscovererStreamInfo represents the topology of the stream. Siblings - * can be iterated over with gst_discoverer_stream_info_get_next() and - * gst_discoverer_stream_info_get_previous(). Children (sub-streams) of a - * stream can be accessed using the #GstDiscovererContainerInfo API. - * - * As a simple example, if you run #GstDiscoverer on an AVI file with one audio - * and one video stream, you will get a #GstDiscovererContainerInfo - * corresponding to the AVI container, which in turn will have a - * #GstDiscovererAudioInfo sub-stream and a #GstDiscovererVideoInfo sub-stream - * for the audio and video streams respectively. - */ -#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info)) -#define gst_discoverer_stream_info_unref(info) (g_object_unref((GObject*) info)) - -GstDiscovererStreamInfo* gst_discoverer_stream_info_get_previous(GstDiscovererStreamInfo* info); -GstDiscovererStreamInfo* gst_discoverer_stream_info_get_next(GstDiscovererStreamInfo* info); -GstCaps* gst_discoverer_stream_info_get_caps(GstDiscovererStreamInfo* info); -const GstTagList* gst_discoverer_stream_info_get_tags(GstDiscovererStreamInfo* info); -const GstToc* gst_discoverer_stream_info_get_toc(GstDiscovererStreamInfo* info); -const GstStructure* gst_discoverer_stream_info_get_misc(GstDiscovererStreamInfo* info); -const gchar * gst_discoverer_stream_info_get_stream_type_nick(GstDiscovererStreamInfo* info); - -/** - * GstDiscovererContainerInfo: - * - * #GstDiscovererStreamInfo specific to container streams. - */ -#define GST_TYPE_DISCOVERER_CONTAINER_INFO \ - (gst_discoverer_container_info_get_type ()) -#define GST_DISCOVERER_CONTAINER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO, GstDiscovererContainerInfo)) -#define GST_IS_DISCOVERER_CONTAINER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO)) -typedef struct _GstDiscovererContainerInfo GstDiscovererContainerInfo; -typedef GObjectClass GstDiscovererContainerInfoClass; - -GType gst_discoverer_container_info_get_type (void); - -GList *gst_discoverer_container_info_get_streams(GstDiscovererContainerInfo *info); - - -/** - * GstDiscovererAudioInfo: - * - * #GstDiscovererStreamInfo specific to audio streams. - */ -#define GST_TYPE_DISCOVERER_AUDIO_INFO \ - (gst_discoverer_audio_info_get_type ()) -#define GST_DISCOVERER_AUDIO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_AUDIO_INFO, GstDiscovererAudioInfo)) -#define GST_IS_DISCOVERER_AUDIO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_AUDIO_INFO)) -typedef struct _GstDiscovererAudioInfo GstDiscovererAudioInfo; -typedef GObjectClass GstDiscovererAudioInfoClass; - -GType gst_discoverer_audio_info_get_type (void); - -guint gst_discoverer_audio_info_get_channels(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_depth(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_bitrate(const GstDiscovererAudioInfo* info); -guint gst_discoverer_audio_info_get_max_bitrate(const GstDiscovererAudioInfo* info); -const gchar * gst_discoverer_audio_info_get_language(const GstDiscovererAudioInfo* info); - -/** - * GstDiscovererVideoInfo: - * - * #GstDiscovererStreamInfo specific to video streams (this includes images). - */ -#define GST_TYPE_DISCOVERER_VIDEO_INFO \ - (gst_discoverer_video_info_get_type ()) -#define GST_DISCOVERER_VIDEO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_VIDEO_INFO, GstDiscovererVideoInfo)) -#define GST_IS_DISCOVERER_VIDEO_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_VIDEO_INFO)) -typedef struct _GstDiscovererVideoInfo GstDiscovererVideoInfo; -typedef GObjectClass GstDiscovererVideoInfoClass; -GType gst_discoverer_video_info_get_type (void); - -guint gst_discoverer_video_info_get_width(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_height(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_depth(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_framerate_num(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_framerate_denom(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_par_num(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_par_denom(const GstDiscovererVideoInfo* info); -gboolean gst_discoverer_video_info_is_interlaced(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_bitrate(const GstDiscovererVideoInfo* info); -guint gst_discoverer_video_info_get_max_bitrate(const GstDiscovererVideoInfo* info); -gboolean gst_discoverer_video_info_is_image(const GstDiscovererVideoInfo* info); - -/** - * GstDiscovererSubtitleInfo: - * - * #GstDiscovererStreamInfo specific to subtitle streams (this includes text and - * image based ones). - */ -#define GST_TYPE_DISCOVERER_SUBTITLE_INFO \ - (gst_discoverer_subtitle_info_get_type ()) -#define GST_DISCOVERER_SUBTITLE_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO, GstDiscovererSubtitleInfo)) -#define GST_IS_DISCOVERER_SUBTITLE_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO)) -typedef struct _GstDiscovererSubtitleInfo GstDiscovererSubtitleInfo; -typedef GObjectClass GstDiscovererSubtitleInfoClass; -GType gst_discoverer_subtitle_info_get_type (void); - -const gchar * gst_discoverer_subtitle_info_get_language(const GstDiscovererSubtitleInfo* info); - -/** - * GstDiscovererResult: - * @GST_DISCOVERER_OK: The discovery was successful - * @GST_DISCOVERER_URI_INVALID: the URI is invalid - * @GST_DISCOVERER_ERROR: an error happened and the GError is set - * @GST_DISCOVERER_TIMEOUT: the discovery timed-out - * @GST_DISCOVERER_BUSY: the discoverer was already discovering a file - * @GST_DISCOVERER_MISSING_PLUGINS: Some plugins are missing for full discovery - * - * Result values for the discovery process. - */ -typedef enum { - GST_DISCOVERER_OK = 0, - GST_DISCOVERER_URI_INVALID = 1, - GST_DISCOVERER_ERROR = 2, - GST_DISCOVERER_TIMEOUT = 3, - GST_DISCOVERER_BUSY = 4, - GST_DISCOVERER_MISSING_PLUGINS = 5 -} GstDiscovererResult; - - -/** - * GstDiscovererInfo: - * - * Structure containing the information of a URI analyzed by #GstDiscoverer. - */ -typedef struct _GstDiscovererInfo GstDiscovererInfo; - -#define GST_TYPE_DISCOVERER_INFO \ - (gst_discoverer_info_get_type ()) -#define GST_DISCOVERER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_INFO, GstDiscovererInfo)) -#define GST_IS_DISCOVERER_INFO(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_INFO)) -typedef GObjectClass GstDiscovererInfoClass; -GType gst_discoverer_info_get_type (void); - -#define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info)) -#define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info)) - -GstDiscovererInfo* gst_discoverer_info_copy (GstDiscovererInfo * ptr); - -const gchar* gst_discoverer_info_get_uri(const GstDiscovererInfo* info); -GstDiscovererResult gst_discoverer_info_get_result(const GstDiscovererInfo* info); -GstDiscovererStreamInfo* gst_discoverer_info_get_stream_info(GstDiscovererInfo* info); -GList* gst_discoverer_info_get_stream_list(GstDiscovererInfo* info); -GstClockTime gst_discoverer_info_get_duration(const GstDiscovererInfo* info); -gboolean gst_discoverer_info_get_seekable(const GstDiscovererInfo* info); -const GstStructure* gst_discoverer_info_get_misc(const GstDiscovererInfo* info); -const GstTagList* gst_discoverer_info_get_tags(const GstDiscovererInfo* info); -const GstToc* gst_discoverer_info_get_toc(const GstDiscovererInfo* info); - -GList * gst_discoverer_info_get_streams (GstDiscovererInfo *info, - GType streamtype); -GList * gst_discoverer_info_get_audio_streams (GstDiscovererInfo *info); -GList * gst_discoverer_info_get_video_streams (GstDiscovererInfo *info); -GList * gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info); -GList * gst_discoverer_info_get_container_streams (GstDiscovererInfo *info); - -void gst_discoverer_stream_info_list_free (GList *infos); - -#define GST_TYPE_DISCOVERER \ - (gst_discoverer_get_type()) -#define GST_DISCOVERER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER,GstDiscoverer)) -#define GST_DISCOVERER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISCOVERER,GstDiscovererClass)) -#define GST_IS_DISCOVERER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER)) -#define GST_IS_DISCOVERER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISCOVERER)) - -typedef struct _GstDiscoverer GstDiscoverer; -typedef struct _GstDiscovererClass GstDiscovererClass; -typedef struct _GstDiscovererPrivate GstDiscovererPrivate; - -/** - * GstDiscoverer: - * - * The #GstDiscoverer structure. - **/ -struct _GstDiscoverer { - GObject parent; - - /*< private >*/ - GstDiscovererPrivate *priv; - - gpointer _reserved[GST_PADDING]; -}; - -struct _GstDiscovererClass { - GObjectClass parentclass; - - /* signals */ - void (*finished) (GstDiscoverer *discoverer); - void (*starting) (GstDiscoverer *discoverer); - void (*discovered) (GstDiscoverer *discoverer, - GstDiscovererInfo *info, - const GError *err); - void (*source_setup) (GstDiscoverer *discoverer, - GstElement *source); - - gpointer _reserved[GST_PADDING]; -}; - -GType gst_discoverer_get_type (void); -GstDiscoverer *gst_discoverer_new (GstClockTime timeout, GError **err); - -/* Asynchronous API */ -void gst_discoverer_start (GstDiscoverer *discoverer); -void gst_discoverer_stop (GstDiscoverer *discoverer); -gboolean gst_discoverer_discover_uri_async (GstDiscoverer *discoverer, - const gchar *uri); - -/* Synchronous API */ -GstDiscovererInfo * -gst_discoverer_discover_uri (GstDiscoverer * discoverer, - const gchar * uri, - GError ** err); - -G_END_DECLS - -#endif /* _GST_DISCOVERER_H */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h deleted file mode 100644 index c8ff07a2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/gstpluginsbaseversion.h +++ /dev/null @@ -1,76 +0,0 @@ -/* GStreamer base plugins libraries version information - * Copyright (C) 2010 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PLUGINS_BASE_VERSION_H__ -#define __GST_PLUGINS_BASE_VERSION_H__ - -#include - -G_BEGIN_DECLS - -/** - * GST_PLUGINS_BASE_VERSION_MAJOR: - * - * The major version of GStreamer's gst-plugins-base libraries at compile time. - */ -#define GST_PLUGINS_BASE_VERSION_MAJOR (1) -/** - * GST_PLUGINS_BASE_VERSION_MINOR: - * - * The minor version of GStreamer's gst-plugins-base libraries at compile time. - */ -#define GST_PLUGINS_BASE_VERSION_MINOR (0) -/** - * GST_PLUGINS_BASE_VERSION_MICRO: - * - * The micro version of GStreamer's gst-plugins-base libraries at compile time. - */ -#define GST_PLUGINS_BASE_VERSION_MICRO (5) -/** - * GST_PLUGINS_BASE_VERSION_NANO: - * - * The nano version of GStreamer's gst-plugins-base libraries at compile time. - * Actual releases have 0, GIT versions have 1, prerelease versions have 2-... - */ -#define GST_PLUGINS_BASE_VERSION_NANO (0) - -/** - * GST_CHECK_PLUGIN_BASE_VERSION: - * @major: a number indicating the major version - * @minor: a number indicating the minor version - * @micro: a number indicating the micro version - * - * Check whether a GStreamer's gst-plugins-base libraries' version equal to - * or greater than major.minor.micro is present. - */ -#define GST_CHECK_PLUGINS_BASE_VERSION(major,minor,micro) \ - (GST_PLUGINS_BASE_VERSION_MAJOR > (major) || \ - (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR > (minor)) || \ - (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \ - GST_PLUGINS_BASE_VERSION_MICRO >= (micro)) || \ - (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \ - GST_PLUGINS_BASE_VERSION_MICRO + 1 == (micro) && GST_PLUGINS_BASE_VERSION_NANO > 0)) - -void gst_plugins_base_version (guint *major, guint *minor, guint *micro, guint *nano); - -gchar * gst_plugins_base_version_string (void); - -G_END_DECLS - -#endif /* __GST_PLUGINS_BASE_VERSION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/install-plugins.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/install-plugins.h deleted file mode 100644 index 173adb1b..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/install-plugins.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GStreamer base utils library plugin install support for applications - * Copyright (C) 2007 Tim-Philipp Müller - * Copyright (C) 2006 Ryan Lortie - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_INSTALL_PLUGINS_H__ -#define __GST_PB_UTILS_INSTALL_PLUGINS_H__ - -#include - -G_BEGIN_DECLS - -/* - * functions for use by applications to initiate installation of missing plugins - */ - -/** - * GstInstallPluginsReturn: - * @GST_INSTALL_PLUGINS_SUCCESS: all of the requested plugins could be - * installed - * @GST_INSTALL_PLUGINS_NOT_FOUND: no appropriate installation candidate for - * any of the requested plugins could be found. Only return this if nothing - * has been installed. Return #GST_INSTALL_PLUGINS_PARTIAL_SUCCESS if - * some (but not all) of the requested plugins could be installed. - * @GST_INSTALL_PLUGINS_ERROR: an error occured during the installation. If - * this happens, the user has already seen an error message and another - * one should not be displayed - * @GST_INSTALL_PLUGINS_CRASHED: the installer had an unclean exit code - * (ie. death by signal) - * @GST_INSTALL_PLUGINS_PARTIAL_SUCCESS: some of the requested plugins could - * be installed, but not all - * @GST_INSTALL_PLUGINS_USER_ABORT: the user has aborted the installation - * @GST_INSTALL_PLUGINS_INVALID: the helper returned an invalid status code - * @GST_INSTALL_PLUGINS_STARTED_OK: returned by gst_install_plugins_async() to - * indicate that everything went fine so far and the provided callback - * will be called with the result of the installation later - * @GST_INSTALL_PLUGINS_INTERNAL_FAILURE: some internal failure has - * occured when trying to start the installer - * @GST_INSTALL_PLUGINS_HELPER_MISSING: the helper script to call the - * actual installer is not installed - * @GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS: a previously-started plugin - * installation is still in progress, try again later - * - * Result codes returned by gst_install_plugins_async() and - * gst_install_plugins_sync(), and also the result code passed to the - * #GstInstallPluginsResultFunc specified with gst_install_plugins_async(). - * - * These codes indicate success or failure of starting an external installer - * program and to what extent the requested plugins could be installed. - */ -typedef enum { - /* Return codes from the installer. Returned by gst_install_plugins_sync(), - * or passed as result code to your #GstInstallPluginsResultFunc */ - GST_INSTALL_PLUGINS_SUCCESS = 0, - GST_INSTALL_PLUGINS_NOT_FOUND = 1, - GST_INSTALL_PLUGINS_ERROR = 2, - GST_INSTALL_PLUGINS_PARTIAL_SUCCESS = 3, - GST_INSTALL_PLUGINS_USER_ABORT = 4, - - /* Returned by gst_install_plugins_sync(), or passed as result code to your - * #GstInstallPluginsResultFunc */ - GST_INSTALL_PLUGINS_CRASHED = 100, - GST_INSTALL_PLUGINS_INVALID, - - /* Return codes from starting the external helper, may be returned by both - * gst_install_plugins_sync() and gst_install_plugins_async(), but should - * never be seen by a #GstInstallPluginsResultFunc */ - GST_INSTALL_PLUGINS_STARTED_OK = 200, - GST_INSTALL_PLUGINS_INTERNAL_FAILURE, - GST_INSTALL_PLUGINS_HELPER_MISSING, - GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS -} GstInstallPluginsReturn; - -/** - * GstInstallPluginsContext: - * - * Opaque context structure for the plugin installation. Use the provided - * API to set details on it. - */ - -#define GST_TYPE_INSTALL_PLUGINS_CONTEXT (gst_install_plugins_context_get_type()) - -typedef struct _GstInstallPluginsContext GstInstallPluginsContext; - -GstInstallPluginsContext * gst_install_plugins_context_new (void); - -void gst_install_plugins_context_free (GstInstallPluginsContext * ctx); - -void gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx, - guint xid); - -GType gst_install_plugins_context_get_type (void); - -/** - * GstInstallPluginsResultFunc: - * @result: whether the installation of the requested plugins succeeded or not - * @user_data: the user data passed to gst_install_plugins_async() - * - * The prototype of the callback function that will be called once the - * external plugin installer program has returned. You only need to provide - * a callback function if you are using the asynchronous interface. - */ -typedef void (*GstInstallPluginsResultFunc) (GstInstallPluginsReturn result, - gpointer user_data); - -GstInstallPluginsReturn gst_install_plugins_async (const gchar * const * details, - GstInstallPluginsContext * ctx, - GstInstallPluginsResultFunc func, - gpointer user_data); - -GstInstallPluginsReturn gst_install_plugins_sync (const gchar * const * details, - GstInstallPluginsContext * ctx); - -const gchar * gst_install_plugins_return_get_name (GstInstallPluginsReturn ret); - -gboolean gst_install_plugins_installation_in_progress (void); - -gboolean gst_install_plugins_supported (void); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/missing-plugins.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/missing-plugins.h deleted file mode 100644 index 508304e4..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/missing-plugins.h +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer base utils library missing plugins support - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_MISSING_PLUGINS_H__ -#define __GST_PB_UTILS_MISSING_PLUGINS_H__ - -#include -#include - -G_BEGIN_DECLS - -/* - * functions to create missing-plugin messages, for use by plugins primarily - */ - -GstMessage * gst_missing_uri_source_message_new (GstElement * element, - const gchar * protocol); - -GstMessage * gst_missing_uri_sink_message_new (GstElement * element, - const gchar * protocol); - -GstMessage * gst_missing_element_message_new (GstElement * element, - const gchar * factory_name); - -GstMessage * gst_missing_decoder_message_new (GstElement * element, - const GstCaps * decode_caps); - -GstMessage * gst_missing_encoder_message_new (GstElement * element, - const GstCaps * encode_caps); - -/* - * functions for use by applications when dealing with missing-plugin messages - */ - -gchar * gst_missing_plugin_message_get_installer_detail (GstMessage * msg); - -gchar * gst_missing_plugin_message_get_description (GstMessage * msg); - -gboolean gst_is_missing_plugin_message (GstMessage * msg); - - -/* - * functions for use by applications that know exactly what plugins they are - * missing and want to request them directly rather than just react to - * missing-plugin messages posted by elements such as playbin or decodebin - */ - -gchar * gst_missing_uri_source_installer_detail_new (const gchar * protocol); - -gchar * gst_missing_uri_sink_installer_detail_new (const gchar * protocol); - -gchar * gst_missing_element_installer_detail_new (const gchar * factory_name); - -gchar * gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps); - -gchar * gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_MISSING_PLUGINS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h deleted file mode 100644 index 30dadfd9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils-enumtypes.h +++ /dev/null @@ -1,23 +0,0 @@ - - - -#ifndef __PB_UTILS_ENUM_TYPES_H__ -#define __PB_UTILS_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "install-plugins.h" */ -GType gst_install_plugins_return_get_type (void); -#define GST_TYPE_INSTALL_PLUGINS_RETURN (gst_install_plugins_return_get_type()) - -/* enumerations from "gstdiscoverer.h" */ -GType gst_discoverer_result_get_type (void); -#define GST_TYPE_DISCOVERER_RESULT (gst_discoverer_result_get_type()) -G_END_DECLS - -#endif /* __PB_UTILS_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils.h deleted file mode 100644 index b9277b13..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/pbutils/pbutils.h +++ /dev/null @@ -1,42 +0,0 @@ -/* GStreamer base utils library - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_PB_UTILS_BASE_UTILS_H__ -#define __GST_PB_UTILS_BASE_UTILS_H__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -void gst_pb_utils_init (void); - -G_END_DECLS - -#endif /* __GST_PB_UTILS_BASE_UTILS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-ids.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-ids.h deleted file mode 100644 index ab561792..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-ids.h +++ /dev/null @@ -1,523 +0,0 @@ -/* GStreamer RIFF I/O - * Copyright (C) 2003 Ronald Bultje - * - * riff-ids.h: RIFF IDs and structs - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RIFF_IDS_H__ -#define __GST_RIFF_IDS_H__ - -#include - -G_BEGIN_DECLS - -/* RIFF types */ -#define GST_RIFF_RIFF_WAVE GST_MAKE_FOURCC ('W','A','V','E') -#define GST_RIFF_RIFF_AVI GST_MAKE_FOURCC ('A','V','I',' ') -#define GST_RIFF_RIFF_CDXA GST_MAKE_FOURCC ('C','D','X','A') - -/* tags */ -#define GST_RIFF_TAG_RIFF GST_MAKE_FOURCC ('R','I','F','F') -#define GST_RIFF_TAG_AVF0 GST_MAKE_FOURCC ('A','V','F','0') -#define GST_RIFF_TAG_RIFX GST_MAKE_FOURCC ('R','I','F','X') -#define GST_RIFF_TAG_LIST GST_MAKE_FOURCC ('L','I','S','T') -#define GST_RIFF_TAG_avih GST_MAKE_FOURCC ('a','v','i','h') -#define GST_RIFF_TAG_strd GST_MAKE_FOURCC ('s','t','r','d') -#define GST_RIFF_TAG_strn GST_MAKE_FOURCC ('s','t','r','n') -#define GST_RIFF_TAG_strh GST_MAKE_FOURCC ('s','t','r','h') -#define GST_RIFF_TAG_strf GST_MAKE_FOURCC ('s','t','r','f') -#define GST_RIFF_TAG_vedt GST_MAKE_FOURCC ('v','e','d','t') -#define GST_RIFF_TAG_JUNK GST_MAKE_FOURCC ('J','U','N','K') -#define GST_RIFF_TAG_JUNQ GST_MAKE_FOURCC ('J','U','N','Q') -#define GST_RIFF_TAG_idx1 GST_MAKE_FOURCC ('i','d','x','1') -#define GST_RIFF_TAG_dmlh GST_MAKE_FOURCC ('d','m','l','h') -#define GST_RIFF_TAG_ID32 GST_MAKE_FOURCC ('I','D','3','2') -#define GST_RIFF_TAG_IDVX GST_MAKE_FOURCC ('I','D','V','X') -/* WAV stuff */ -#define GST_RIFF_TAG_fmt GST_MAKE_FOURCC ('f','m','t',' ') -#define GST_RIFF_TAG_data GST_MAKE_FOURCC ('d','a','t','a') -#define GST_RIFF_TAG_plst GST_MAKE_FOURCC ('p','l','s','t') -#define GST_RIFF_TAG_cue GST_MAKE_FOURCC ('c','u','e',' ') -#define GST_RIFF_TAG_bext GST_MAKE_FOURCC ('b','e','x','t') -#define GST_RIFF_TAG_BEXT GST_MAKE_FOURCC ('B','E','X','T') -#define GST_RIFF_TAG_fact GST_MAKE_FOURCC ('f','a','c','t') -#define GST_RIFF_TAG_acid GST_MAKE_FOURCC ('a','c','i','d') -#define GST_RIFF_TAG_labl GST_MAKE_FOURCC ('l','a','b','l') - -/* LIST types */ -#define GST_RIFF_LIST_movi GST_MAKE_FOURCC ('m','o','v','i') -#define GST_RIFF_LIST_hdrl GST_MAKE_FOURCC ('h','d','r','l') -#define GST_RIFF_LIST_odml GST_MAKE_FOURCC ('o','d','m','l') -#define GST_RIFF_LIST_strl GST_MAKE_FOURCC ('s','t','r','l') -#define GST_RIFF_LIST_INFO GST_MAKE_FOURCC ('I','N','F','O') -#define GST_RIFF_LIST_AVIX GST_MAKE_FOURCC ('A','V','I','X') -#define GST_RIFF_LIST_adtl GST_MAKE_FOURCC ('a','d','t','l') - -/* fcc types */ -#define GST_RIFF_FCC_vids GST_MAKE_FOURCC ('v','i','d','s') -#define GST_RIFF_FCC_auds GST_MAKE_FOURCC ('a','u','d','s') -#define GST_RIFF_FCC_pads GST_MAKE_FOURCC ('p','a','d','s') -#define GST_RIFF_FCC_txts GST_MAKE_FOURCC ('t','x','t','s') -#define GST_RIFF_FCC_vidc GST_MAKE_FOURCC ('v','i','d','c') -#define GST_RIFF_FCC_iavs GST_MAKE_FOURCC ('i','a','v','s') -/* fcc handlers */ -#define GST_RIFF_FCCH_RLE GST_MAKE_FOURCC ('R','L','E',' ') -#define GST_RIFF_FCCH_msvc GST_MAKE_FOURCC ('m','s','v','c') -#define GST_RIFF_FCCH_MSVC GST_MAKE_FOURCC ('M','S','V','C') - -/* INFO types - see http://www.saettler.com/RIFFMCI/riffmci.html */ -#define GST_RIFF_INFO_IARL GST_MAKE_FOURCC ('I','A','R','L') /* location */ -#define GST_RIFF_INFO_IART GST_MAKE_FOURCC ('I','A','R','T') /* artist */ -#define GST_RIFF_INFO_ICMS GST_MAKE_FOURCC ('I','C','M','S') /* commissioned */ -#define GST_RIFF_INFO_ICMT GST_MAKE_FOURCC ('I','C','M','T') /* comment */ -#define GST_RIFF_INFO_ICOP GST_MAKE_FOURCC ('I','C','O','P') /* copyright */ -#define GST_RIFF_INFO_ICRD GST_MAKE_FOURCC ('I','C','R','D') /* creation date */ -#define GST_RIFF_INFO_ICRP GST_MAKE_FOURCC ('I','C','R','P') /* cropped */ -#define GST_RIFF_INFO_IDIM GST_MAKE_FOURCC ('I','D','I','M') /* dimensions */ -#define GST_RIFF_INFO_IDPI GST_MAKE_FOURCC ('I','D','P','I') /* dots-per-inch */ -#define GST_RIFF_INFO_IENG GST_MAKE_FOURCC ('I','E','N','G') /* engineer(s) */ -#define GST_RIFF_INFO_IGNR GST_MAKE_FOURCC ('I','G','N','R') /* genre */ -#define GST_RIFF_INFO_IKEY GST_MAKE_FOURCC ('I','K','E','Y') /* keywords */ -#define GST_RIFF_INFO_ILGT GST_MAKE_FOURCC ('I','L','G','T') /* lightness */ -#define GST_RIFF_INFO_IMED GST_MAKE_FOURCC ('I','M','E','D') /* medium */ -#define GST_RIFF_INFO_INAM GST_MAKE_FOURCC ('I','N','A','M') /* name */ -#define GST_RIFF_INFO_IPLT GST_MAKE_FOURCC ('I','P','L','T') /* palette setting */ -#define GST_RIFF_INFO_IPRD GST_MAKE_FOURCC ('I','P','R','D') /* product (album) */ -#define GST_RIFF_INFO_ISBJ GST_MAKE_FOURCC ('I','S','B','J') /* subject */ -#define GST_RIFF_INFO_ISFT GST_MAKE_FOURCC ('I','S','F','T') /* software */ -#define GST_RIFF_INFO_ISHP GST_MAKE_FOURCC ('I','S','H','P') /* sharpness */ -#define GST_RIFF_INFO_ISRC GST_MAKE_FOURCC ('I','S','R','C') /* source */ -#define GST_RIFF_INFO_ISRF GST_MAKE_FOURCC ('I','S','R','F') /* source form */ -#define GST_RIFF_INFO_ITCH GST_MAKE_FOURCC ('I','T','C','H') /* technician(s) */ - -#define GST_RIFF_INFO_IAAR GST_MAKE_FOURCC ('I','A','A','R') /* album artist */ -#define GST_RIFF_INFO_ITRK GST_MAKE_FOURCC ('I','T','R','K') /* track number */ - -/*********Chunk Names***************/ -#define GST_RIFF_FF00 GST_MAKE_FOURCC (0xFF,0xFF,0x00,0x00) -#define GST_RIFF_00 GST_MAKE_FOURCC ('0', '0',0x00,0x00) -#define GST_RIFF_01 GST_MAKE_FOURCC ('0', '1',0x00,0x00) -#define GST_RIFF_02 GST_MAKE_FOURCC ('0', '2',0x00,0x00) -#define GST_RIFF_03 GST_MAKE_FOURCC ('0', '3',0x00,0x00) -#define GST_RIFF_04 GST_MAKE_FOURCC ('0', '4',0x00,0x00) -#define GST_RIFF_05 GST_MAKE_FOURCC ('0', '5',0x00,0x00) -#define GST_RIFF_06 GST_MAKE_FOURCC ('0', '6',0x00,0x00) -#define GST_RIFF_07 GST_MAKE_FOURCC ('0', '7',0x00,0x00) -#define GST_RIFF_00pc GST_MAKE_FOURCC ('0', '0', 'p', 'c') -#define GST_RIFF_01pc GST_MAKE_FOURCC ('0', '1', 'p', 'c') -#define GST_RIFF_00dc GST_MAKE_FOURCC ('0', '0', 'd', 'c') -#define GST_RIFF_00dx GST_MAKE_FOURCC ('0', '0', 'd', 'x') -#define GST_RIFF_00db GST_MAKE_FOURCC ('0', '0', 'd', 'b') -#define GST_RIFF_00xx GST_MAKE_FOURCC ('0', '0', 'x', 'x') -#define GST_RIFF_00id GST_MAKE_FOURCC ('0', '0', 'i', 'd') -#define GST_RIFF_00rt GST_MAKE_FOURCC ('0', '0', 'r', 't') -#define GST_RIFF_0021 GST_MAKE_FOURCC ('0', '0', '2', '1') -#define GST_RIFF_00iv GST_MAKE_FOURCC ('0', '0', 'i', 'v') -#define GST_RIFF_0031 GST_MAKE_FOURCC ('0', '0', '3', '1') -#define GST_RIFF_0032 GST_MAKE_FOURCC ('0', '0', '3', '2') -#define GST_RIFF_00vc GST_MAKE_FOURCC ('0', '0', 'v', 'c') -#define GST_RIFF_00xm GST_MAKE_FOURCC ('0', '0', 'x', 'm') -#define GST_RIFF_01wb GST_MAKE_FOURCC ('0', '1', 'w', 'b') -#define GST_RIFF_01dc GST_MAKE_FOURCC ('0', '1', 'd', 'c') -#define GST_RIFF_00__ GST_MAKE_FOURCC ('0', '0', '_', '_') - -/*********VIDEO CODECS**************/ -#define GST_RIFF_cram GST_MAKE_FOURCC ('c', 'r', 'a', 'm') -#define GST_RIFF_CRAM GST_MAKE_FOURCC ('C', 'R', 'A', 'M') -#define GST_RIFF_wham GST_MAKE_FOURCC ('w', 'h', 'a', 'm') -#define GST_RIFF_WHAM GST_MAKE_FOURCC ('W', 'H', 'A', 'M') -#define GST_RIFF_rgb GST_MAKE_FOURCC (0x00,0x00,0x00,0x00) -#define GST_RIFF_RGB GST_MAKE_FOURCC ('R', 'G', 'B', ' ') -#define GST_RIFF_RAW GST_MAKE_FOURCC ('R', 'A', 'W', ' ') -#define GST_RIFF_DIB GST_MAKE_FOURCC ('D', 'I', 'B', ' ') -#define GST_RIFF_rle8 GST_MAKE_FOURCC (0x01,0x00,0x00,0x00) -#define GST_RIFF_RLE8 GST_MAKE_FOURCC ('R', 'L', 'E', '8') -#define GST_RIFF_rle4 GST_MAKE_FOURCC (0x02,0x00,0x00,0x00) -#define GST_RIFF_RLE4 GST_MAKE_FOURCC ('R', 'L', 'E', '4') -#define GST_RIFF_none GST_MAKE_FOURCC (0x00,0x00,0xFF,0xFF) -#define GST_RIFF_NONE GST_MAKE_FOURCC ('N', 'O', 'N', 'E') -#define GST_RIFF_pack GST_MAKE_FOURCC (0x01,0x00,0xFF,0xFF) -#define GST_RIFF_PACK GST_MAKE_FOURCC ('P', 'A', 'C', 'K') -#define GST_RIFF_tran GST_MAKE_FOURCC (0x02,0x00,0xFF,0xFF) -#define GST_RIFF_TRAN GST_MAKE_FOURCC ('T', 'R', 'A', 'N') -#define GST_RIFF_ccc GST_MAKE_FOURCC (0x03,0x00,0xFF,0xFF) -#define GST_RIFF_CCC GST_MAKE_FOURCC ('C', 'C', 'C', ' ') -#define GST_RIFF_cyuv GST_MAKE_FOURCC ('c', 'y', 'u', 'v') -#define GST_RIFF_CYUV GST_MAKE_FOURCC ('C', 'Y', 'U', 'V') -#define GST_RIFF_jpeg GST_MAKE_FOURCC (0x04,0x00,0xFF,0xFF) -#define GST_RIFF_JPEG GST_MAKE_FOURCC ('J', 'P', 'E', 'G') -#define GST_RIFF_MJPG GST_MAKE_FOURCC ('M', 'J', 'P', 'G') -#define GST_RIFF_mJPG GST_MAKE_FOURCC ('m', 'J', 'P', 'G') -#define GST_RIFF_IJPG GST_MAKE_FOURCC ('I', 'J', 'P', 'G') -#define GST_RIFF_rt21 GST_MAKE_FOURCC ('r', 't', '2', '1') -#define GST_RIFF_RT21 GST_MAKE_FOURCC ('R', 'T', '2', '1') -#define GST_RIFF_iv31 GST_MAKE_FOURCC ('i', 'v', '3', '1') -#define GST_RIFF_IV31 GST_MAKE_FOURCC ('I', 'V', '3', '1') -#define GST_RIFF_iv32 GST_MAKE_FOURCC ('i', 'v', '3', '2') -#define GST_RIFF_IV32 GST_MAKE_FOURCC ('I', 'V', '3', '2') -#define GST_RIFF_iv41 GST_MAKE_FOURCC ('i', 'v', '4', '1') -#define GST_RIFF_IV41 GST_MAKE_FOURCC ('I', 'V', '4', '1') -#define GST_RIFF_iv50 GST_MAKE_FOURCC ('i', 'v', '5', '0') -#define GST_RIFF_IV50 GST_MAKE_FOURCC ('I', 'V', '5', '0') -#define GST_RIFF_cvid GST_MAKE_FOURCC ('c', 'v', 'i', 'd') -#define GST_RIFF_CVID GST_MAKE_FOURCC ('C', 'V', 'I', 'D') -#define GST_RIFF_ULTI GST_MAKE_FOURCC ('U', 'L', 'T', 'I') -#define GST_RIFF_ulti GST_MAKE_FOURCC ('u', 'l', 't', 'i') -#define GST_RIFF_YUV9 GST_MAKE_FOURCC ('Y', 'V', 'U', '9') -#define GST_RIFF_YVU9 GST_MAKE_FOURCC ('Y', 'U', 'V', '9') -#define GST_RIFF_XMPG GST_MAKE_FOURCC ('X', 'M', 'P', 'G') -#define GST_RIFF_xmpg GST_MAKE_FOURCC ('x', 'm', 'p', 'g') -#define GST_RIFF_VDOW GST_MAKE_FOURCC ('V', 'D', 'O', 'W') -#define GST_RIFF_MVI1 GST_MAKE_FOURCC ('M', 'V', 'I', '1') -#define GST_RIFF_v422 GST_MAKE_FOURCC ('v', '4', '2', '2') -#define GST_RIFF_V422 GST_MAKE_FOURCC ('V', '4', '2', '2') -#define GST_RIFF_mvi1 GST_MAKE_FOURCC ('m', 'v', 'i', '1') -#define GST_RIFF_MPIX GST_MAKE_FOURCC (0x04,0x00, 'i', '1') /* MotionPixels munged their id */ -#define GST_RIFF_AURA GST_MAKE_FOURCC ('A', 'U', 'R', 'A') -#define GST_RIFF_DMB1 GST_MAKE_FOURCC ('D', 'M', 'B', '1') -#define GST_RIFF_dmb1 GST_MAKE_FOURCC ('d', 'm', 'b', '1') - -#define GST_RIFF_BW10 GST_MAKE_FOURCC ('B', 'W', '1', '0') -#define GST_RIFF_bw10 GST_MAKE_FOURCC ('b', 'w', '1', '0') - -#define GST_RIFF_yuy2 GST_MAKE_FOURCC ('y', 'u', 'y', '2') -#define GST_RIFF_YUY2 GST_MAKE_FOURCC ('Y', 'U', 'Y', '2') -#define GST_RIFF_YUV8 GST_MAKE_FOURCC ('Y', 'U', 'V', '8') -#define GST_RIFF_WINX GST_MAKE_FOURCC ('W', 'I', 'N', 'X') -#define GST_RIFF_WPY2 GST_MAKE_FOURCC ('W', 'P', 'Y', '2') -#define GST_RIFF_m263 GST_MAKE_FOURCC ('m', '2', '6', '3') -#define GST_RIFF_M263 GST_MAKE_FOURCC ('M', '2', '6', '3') -#define GST_RIFF_H263 GST_MAKE_FOURCC ('H', '2', '6', '3') -#define GST_RIFF_h263 GST_MAKE_FOURCC ('h', '2', '6', '3') -#define GST_RIFF_i263 GST_MAKE_FOURCC ('i', '2', '6', '3') -#define GST_RIFF_L263 GST_MAKE_FOURCC ('L', '2', '6', '3') -#define GST_RIFF_x263 GST_MAKE_FOURCC ('x', '2', '6', '3') -#define GST_RIFF_VSSH GST_MAKE_FOURCC ( 'V', 'S', 'S', 'H') /* H2.64 */ - -#define GST_RIFF_Q1_0 GST_MAKE_FOURCC ('Q', '1',0x2e, '0') -#define GST_RIFF_SFMC GST_MAKE_FOURCC ('S', 'F', 'M', 'C') - -#define GST_RIFF_y41p GST_MAKE_FOURCC ('y', '4', '1', 'p') -#define GST_RIFF_Y41P GST_MAKE_FOURCC ('Y', '4', '1', 'P') -#define GST_RIFF_yv12 GST_MAKE_FOURCC ('y', 'v', '1', '2') -#define GST_RIFF_YV12 GST_MAKE_FOURCC ('Y', 'V', '1', '2') -#define GST_RIFF_vixl GST_MAKE_FOURCC ('v', 'i', 'x', 'l') -#define GST_RIFF_VIXL GST_MAKE_FOURCC ('V', 'I', 'X', 'L') -#define GST_RIFF_iyuv GST_MAKE_FOURCC ('i', 'y', 'u', 'v') -#define GST_RIFF_IYUV GST_MAKE_FOURCC ('I', 'Y', 'U', 'V') -#define GST_RIFF_i420 GST_MAKE_FOURCC ('i', '4', '2', '0') -#define GST_RIFF_I420 GST_MAKE_FOURCC ('I', '4', '2', '0') -#define GST_RIFF_vyuy GST_MAKE_FOURCC ('v', 'y', 'u', 'y') -#define GST_RIFF_VYUY GST_MAKE_FOURCC ('V', 'Y', 'U', 'Y') - -#define GST_RIFF_DIV3 GST_MAKE_FOURCC ('D', 'I', 'V', '3') - -#define GST_RIFF_rpza GST_MAKE_FOURCC ('r', 'p', 'z', 'a') -/* And this here's the mistakes that need to be supported */ -#define GST_RIFF_azpr GST_MAKE_FOURCC ('a', 'z', 'p', 'r') /* recognize Apple's rpza mangled? */ - -/*********** FND in MJPG **********/ -#define GST_RIFF_ISFT GST_MAKE_FOURCC ('I', 'S', 'F', 'T') -#define GST_RIFF_IDIT GST_MAKE_FOURCC ('I', 'D', 'I', 'T') - -#define GST_RIFF_00AM GST_MAKE_FOURCC ('0', '0', 'A', 'M') -#define GST_RIFF_DISP GST_MAKE_FOURCC ('D', 'I', 'S', 'P') -#define GST_RIFF_ISBJ GST_MAKE_FOURCC ('I', 'S', 'B', 'J') - -#define GST_RIFF_rec GST_MAKE_FOURCC ('r', 'e', 'c', ' ') - -/* common data structures */ -typedef struct _gst_riff_strh { - guint32 type; /* stream type */ - guint32 fcc_handler; /* fcc_handler */ - guint32 flags; -/* flags values */ -#define GST_RIFF_STRH_DISABLED 0x000000001 -#define GST_RIFF_STRH_VIDEOPALCHANGES 0x000010000 - guint32 priority; - guint32 init_frames; /* initial frames (???) */ - guint32 scale; - guint32 rate; - guint32 start; - guint32 length; - guint32 bufsize; /* suggested buffer size */ - guint32 quality; - guint32 samplesize; - /* rcFrame, RECT structure(struct of 4 shorts) - gint32 left; - gint32 top; - gint32 right; - gint32 bottom; - */ -} gst_riff_strh; - -typedef struct _gst_riff_strf_vids { /* == BitMapInfoHeader */ - guint32 size; - guint32 width; - guint32 height; - guint16 planes; - guint16 bit_cnt; - guint32 compression; - guint32 image_size; - guint32 xpels_meter; - guint32 ypels_meter; - guint32 num_colors; /* used colors */ - guint32 imp_colors; /* important colors */ - /* may be more for some codecs */ -} gst_riff_strf_vids; - - -typedef struct _gst_riff_strf_auds { /* == WaveHeader (?) */ - guint16 format; -/**** from public Microsoft RIFF docs ******/ -#define GST_RIFF_WAVE_FORMAT_UNKNOWN (0x0000) -#define GST_RIFF_WAVE_FORMAT_PCM (0x0001) -#define GST_RIFF_WAVE_FORMAT_ADPCM (0x0002) -#define GST_RIFF_WAVE_FORMAT_IEEE_FLOAT (0x0003) -#define GST_RIFF_WAVE_FORMAT_VSELP (0x0004) -#define GST_RIFF_WAVE_FORMAT_IBM_CVSD (0x0005) -#define GST_RIFF_WAVE_FORMAT_ALAW (0x0006) -#define GST_RIFF_WAVE_FORMAT_MULAW (0x0007) -#define GST_RIFF_WAVE_FORMAT_WMS (0x000a) /* WMS Windows Media Audio Speech */ -#define GST_RIFF_WAVE_FORMAT_OKI_ADPCM (0x0010) -#define GST_RIFF_WAVE_FORMAT_DVI_ADPCM (0x0011) -#define GST_RIFF_WAVE_FORMAT_MEDIASPACE_ADPCM (0x0012) -#define GST_RIFF_WAVE_FORMAT_SIERRA_ADPCM (0x0013) -#define GST_RIFF_WAVE_FORMAT_G723_ADPCM (0x0014) -#define GST_RIFF_WAVE_FORMAT_DIGISTD (0x0015) -#define GST_RIFF_WAVE_FORMAT_DIGIFIX (0x0016) -#define GST_RIFF_WAVE_FORMAT_DIALOGIC_OKI_ADPCM (0x0017) -#define GST_RIFF_WAVE_FORMAT_MEDIAVISION_ADPCM (0x0018) -#define GST_RIFF_WAVE_FORMAT_CU_CODEC (0x0019) -#define GST_RIFF_WAVE_FORMAT_YAMAHA_ADPCM (0x0020) -#define GST_RIFF_WAVE_FORMAT_SONARC (0x0021) -#define GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH (0x0022) -#define GST_RIFF_WAVE_FORMAT_ECHOSC1 (0x0023) -#define GST_RIFF_WAVE_FORMAT_AUDIOFILE_AF36 (0x0024) -#define GST_RIFF_WAVE_FORMAT_APTX (0x0025) -#define GST_RIFF_WAVE_FORMAT_AUDIOFILE_AF10 (0x0026) -#define GST_RIFF_WAVE_FORMAT_PROSODY_1612 (0x0027) -#define GST_RIFF_WAVE_FORMAT_LRC (0x0028) -#define GST_RIFF_WAVE_FORMAT_DOLBY_AC2 (0x0030) -#define GST_RIFF_WAVE_FORMAT_GSM610 (0x0031) -#define GST_RIFF_WAVE_FORMAT_MSN (0x0032) -#define GST_RIFF_WAVE_FORMAT_ANTEX_ADPCME (0x0033 -#define GST_RIFF_WAVE_FORMAT_CONTROL_RES_VQLPC (0x0034) -#define GST_RIFF_WAVE_FORMAT_DIGIREAL (0x0035) -#define GST_RIFF_WAVE_FORMAT_DIGIADPCM (0x0036) -#define GST_RIFF_WAVE_FORMAT_CONTROL_RES_CR10 (0x0037) -#define GST_RIFF_WAVE_FORMAT_NMS_VBXADPCM (0x0038) -#define GST_RIFF_WAVE_FORMAT_CS_IMAADPCM (0x0039) -#define GST_RIFF_WAVE_FORMAT_ECHOSC3 (0x003A) -#define GST_RIFF_WAVE_FORMAT_ROCKWELL_ADPCM (0x003B) -#define GST_RIFF_WAVE_FORMAT_ROCKWELL_DIGITALK (0x003C) -#define GST_RIFF_WAVE_FORMAT_XEBEC (0x003D) -#define GST_RIFF_WAVE_FORMAT_ITU_G721_ADPCM (0x0040) -#define GST_RIFF_WAVE_FORMAT_G728_CELP (0x0041) -#define GST_RIFF_WAVE_FORMAT_MSG723 (0x0042) -#define GST_RIFF_WAVE_FORMAT_MPEGL12 (0x0050) -#define GST_RIFF_WAVE_FORMAT_RT24 (0x0052) -#define GST_RIFF_WAVE_FORMAT_PAC (0x0053) -#define GST_RIFF_WAVE_FORMAT_MPEGL3 (0x0055) -#define GST_RIFF_WAVE_FORMAT_AMR_NB (0x0057) -#define GST_RIFF_WAVE_FORMAT_AMR_WB (0x0058) -#define GST_RIFF_WAVE_FORMAT_LUCENT_G723 (0x0059) -#define GST_RIFF_WAVE_FORMAT_CIRRUS (0x0060) -#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK4 (0x0061) /* not official */ -#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK3 (0x0062) /* not official */ -/* FIXME: where are these from? are they used at all? */ -#if 0 -#define GST_RIFF_WAVE_FORMAT_ESPCM (0x0061) -#define GST_RIFF_WAVE_FORMAT_VOXWARE (0x0062) -#endif -#define GST_RIFF_WAVE_FORMAT_CANOPUS_ATRAC (0x0063) -#define GST_RIFF_WAVE_FORMAT_G726_ADPCM (0x0064) -#define GST_RIFF_WAVE_FORMAT_G722_ADPCM (0x0065) -#define GST_RIFF_WAVE_FORMAT_DSAT_DISPLAY (0x0067) -#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_WAV (0x0069) -/* FIXME: where are these from? are they used at all? */ -#if 0 -#define GST_RIFF_WAVE_FORMAT_VOXWARE_BYTE_ALIGNED (0x0069) -#endif -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC8 (0x0070) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC10 (0x0071) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC16 (0x0072) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC20 (0x0073) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_METAVOICE (0x0074) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_METASOUND (0x0075) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_RT29HW (0x0076) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_VR12 (0x0077) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_VR18 (0x0078) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_TQ40 (0x0079) -#define GST_RIFF_WAVE_FORMAT_SOFTSOUND (0x0080) -#define GST_RIFF_WAVE_FORMAT_VOXWARE_TQ60 (0x0081) -#define GST_RIFF_WAVE_FORMAT_MSRT24 (0x0082) -#define GST_RIFF_WAVE_FORMAT_G729A (0x0083) -#define GST_RIFF_WAVE_FORMAT_MVI_MVI2 (0x0084) -#define GST_RIFF_WAVE_FORMAT_DF_G726 (0x0085) -#define GST_RIFF_WAVE_FORMAT_DF_GSM610 (0x0086) -#define GST_RIFF_WAVE_FORMAT_ISIAUDIO (0x0088) -#define GST_RIFF_WAVE_FORMAT_ONLIVE (0x0089) -#define GST_RIFF_WAVE_FORMAT_SBC24 (0x0091) -#define GST_RIFF_WAVE_FORMAT_DOLBY_AC3_SPDIF (0x0092) -#define GST_RIFF_WAVE_FORMAT_MEDIASONIC_G723 (0x0093) -#define GST_RIFF_WAVE_FORMAT_PROSODY_8KBPS (0x0094) -#define GST_RIFF_WAVE_FORMAT_ZYXEL_ADPCM (0x0097) -#define GST_RIFF_WAVE_FORMAT_PHILIPS_LPCBB (0x0098) -#define GST_RIFF_WAVE_FORMAT_PACKED (0x0099) -#define GST_RIFF_WAVE_FORMAT_MALDEN_PHONYTALK (0x00A0) -#define GST_RIFF_WAVE_FORMAT_AAC (0x00ff) -#define GST_RIFF_WAVE_FORMAT_RHETOREX_ADPCM (0x0100) -#define GST_RIFF_IBM_FORMAT_MULAW (0x0101) -#define GST_RIFF_IBM_FORMAT_ALAW (0x0102) -#define GST_RIFF_IBM_FORMAT_ADPCM (0x0103) -#define GST_RIFF_WAVE_FORMAT_VIVO_G723 (0x0111) -#define GST_RIFF_WAVE_FORMAT_VIVO_SIREN (0x0112) -#define GST_RIFF_WAVE_FORMAT_DIGITAL_G723 (0x0123) -#define GST_RIFF_WAVE_FORMAT_SANYO_LD_ADPCM (0x0125) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACEPLNET (0x0130) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACELP4800 (0x0131) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACELP8V3 (0x0132) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_G729 (0x0133) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_G729A (0x0134) -#define GST_RIFF_WAVE_FORMAT_SIPROLAB_KELVIN (0x0135) -#define GST_RIFF_WAVE_FORMAT_G726ADPCM (0x0140) -#define GST_RIFF_WAVE_FORMAT_QUALCOMM_PUREVOICE (0x0150) -#define GST_RIFF_WAVE_FORMAT_QUALCOMM_HALFRATE (0x0151) -#define GST_RIFF_WAVE_FORMAT_TUBGSM (0x0155) -#define GST_RIFF_WAVE_FORMAT_WMAV1 (0x0160) -#define GST_RIFF_WAVE_FORMAT_WMAV2 (0x0161) -#define GST_RIFF_WAVE_FORMAT_WMAV3 (0x0162) -#define GST_RIFF_WAVE_FORMAT_WMAV3_L (0x0163) -#define GST_RIFF_WAVE_FORMAT_CREATIVE_ADPCM (0x0200) -#define GST_RIFF_WAVE_FORMAT_CREATIVE_FASTSPEECH8 (0x0202) -#define GST_RIFF_WAVE_FORMAT_CREATIVE_FASTSPEECH10 (0x0203) -#define GST_RIFF_WAVE_FORMAT_UHER_ADPCM (0x0210) -#define GST_RIFF_WAVE_FORMAT_QUARTERDECK (0x0220) -#define GST_RIFF_WAVE_FORMAT_ILINK_VC (0x0230) -#define GST_RIFF_WAVE_FORMAT_RAW_SPORT (0x0240) -#define GST_RIFF_WAVE_FORMAT_IPI_HSX (0x0250) -#define GST_RIFF_WAVE_FORMAT_IPI_RPELP (0x0251) -#define GST_RIFF_WAVE_FORMAT_CS2 (0x0260) -#define GST_RIFF_WAVE_FORMAT_SONY_ATRAC3 (0x0270) -#define GST_RIFF_WAVE_FORMAT_SIREN (0x028E) -#define GST_RIFF_WAVE_FORMAT_FM_TOWNS_SND (0x0300) -#define GST_RIFF_WAVE_FORMAT_BTV_DIGITAL (0x0400) -#define GST_RIFF_WAVE_FORMAT_IMC (0x0401) -#define GST_RIFF_WAVE_FORMAT_QDESIGN_MUSIC (0x0450) -#define GST_RIFF_WAVE_FORMAT_VME_VMPCM (0x0680) -#define GST_RIFF_WAVE_FORMAT_TPC (0x0681) -#define GST_RIFF_WAVE_FORMAT_OLIGSM (0x1000) -#define GST_RIFF_WAVE_FORMAT_OLIADPCM (0x1001) -#define GST_RIFF_WAVE_FORMAT_OLICELP (0x1002) -#define GST_RIFF_WAVE_FORMAT_OLISBC (0x1003) -#define GST_RIFF_WAVE_FORMAT_OLIOPR (0x1004) -#define GST_RIFF_WAVE_FORMAT_LH_CODEC (0x1100) -#define GST_RIFF_WAVE_FORMAT_NORRIS (0x1400) -#define GST_RIFF_WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS (0x1500) -#define GST_RIFF_WAVE_FORMAT_A52 (0x2000) -#define GST_RIFF_WAVE_FORMAT_DTS (0x2001) -#define GST_RIFF_WAVE_FORMAT_SONIC (0x2048) -#define GST_RIFF_WAVE_FORMAT_SONIC_LS (0x2048) -#define GST_RIFF_WAVE_FORMAT_AAC_AC (0x4143) -#define GST_RIFF_WAVE_FORMAT_VORBIS1 (0x674f) -#define GST_RIFF_WAVE_FORMAT_VORBIS2 (0x6750) -#define GST_RIFF_WAVE_FORMAT_VORBIS3 (0x6751) -#define GST_RIFF_WAVE_FORMAT_VORBIS1PLUS (0x676f) -#define GST_RIFF_WAVE_FORMAT_VORBIS2PLUS (0x6770) -#define GST_RIFF_WAVE_FORMAT_VORBIS3PLUS (0x6771) -#define GST_RIFF_WAVE_FORMAT_AAC_pm (0x706d) -#define GST_RIFF_WAVE_FORMAT_GSM_AMR_CBR (0x7A21) -#define GST_RIFF_WAVE_FORMAT_GSM_AMR_VBR (0x7A22) -#define GST_RIFF_WAVE_FORMAT_FLAC (0xF1AC) -#define GST_RIFF_WAVE_FORMAT_EXTENSIBLE (0xFFFE) - guint16 channels; - guint32 rate; - guint32 av_bps; - guint16 blockalign; - guint16 bits_per_sample; -#if 0 - /* missing field */ - guint16 extra_size; -#endif -} gst_riff_strf_auds; - -typedef struct _gst_riff_strf_iavs { - guint32 DVAAuxSrc; - guint32 DVAAuxCtl; - guint32 DVAAuxSrc1; - guint32 DVAAuxCtl1; - guint32 DVVAuxSrc; - guint32 DVVAuxCtl; - guint32 DVReserved1; - guint32 DVReserved2; -} gst_riff_strf_iavs; - -typedef struct _gst_riff_index_entry { - guint32 id; - guint32 flags; -#define GST_RIFF_IF_LIST (0x00000001L) -#define GST_RIFF_IF_KEYFRAME (0x00000010L) -#define GST_RIFF_IF_NO_TIME (0x00000100L) -#define GST_RIFF_IF_COMPUSE (0x0FFF0000L) - guint32 offset; - guint32 size; -} gst_riff_index_entry; - -typedef struct _gst_riff_dmlh { - guint32 totalframes; -} gst_riff_dmlh; - -/* taken from libsndfile/wav.c (LGPL) */ -typedef struct _gst_riff_acid { - /* 4 bytes (int) type of file: - * this appears to be a bit mask,however some combinations - * are probably impossible and/or qualified as "errors" - * - * 0x01 On: One Shot Off: Loop - * 0x02 On: Root note is Set Off: No root - * 0x04 On: Stretch is On, Off: Strech is OFF - * 0x08 On: Disk Based Off: Ram based - * 0x10 On: ?????????? Off: ????????? (Acidizer puts that ON) - */ - guint32 loop_type; - /* 2 bytes (short) root note - * if type 0x10 is OFF : [C,C#,(...),B] -> [0x30 to 0x3B] - * if type 0x10 is ON : [C,C#,(...),B] -> [0x3C to 0x47] - * (both types fit on same MIDI pitch albeit different octaves, so who cares) - */ - guint16 root_note; - /* 2 bytes (short) ??? always set to 0x8000 - * 4 bytes (float) ??? seems to be always 0 - */ - guint16 unknown1; - gfloat unknown2; - /* 4 bytes (int) number of beats - * 2 bytes (short) meter denominator //always 4 in SF/ACID - * 2 bytes (short) meter numerator //always 4 in SF/ACID - * //are we sure about the order?? usually its num/denom - * 4 bytes (float) tempo - */ - guint32 number_of_beats; - guint16 meter_d, meter_n; - gfloat tempo; -} gst_riff_acid; - -G_END_DECLS - -#endif /* __GST_RIFF_IDS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-media.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-media.h deleted file mode 100644 index ef5bc2bc..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-media.h +++ /dev/null @@ -1,66 +0,0 @@ -/* GStreamer RIFF I/O - * Copyright (C) 2003 Ronald Bultje - * - * riff-media.h: RIFF-id to/from caps routines - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RIFF_MEDIA_H__ -#define __GST_RIFF_MEDIA_H__ - -#include -#include -#include "riff-ids.h" - -G_BEGIN_DECLS - -/* - * Create caos. strh/strf, strf/strd_data and codec_name can be NULL. - */ - -GstCaps * gst_riff_create_video_caps (guint32 codec_fcc, - gst_riff_strh * strh, - gst_riff_strf_vids * strf, - GstBuffer * strf_data, - GstBuffer * strd_data, - char ** codec_name); - -GstCaps * gst_riff_create_audio_caps (guint16 codec_id, - gst_riff_strh * strh, - gst_riff_strf_auds * strf, - GstBuffer * strf_data, - GstBuffer * strd_data, - char ** codec_name, - gint channel_reorder_map[18]); - -GstCaps * gst_riff_create_iavs_caps (guint32 codec_fcc, - gst_riff_strh * strh, - gst_riff_strf_iavs * strf, - GstBuffer * strf_data, - GstBuffer * strd_data, - char ** codec_name); -/* - * Create template caps (includes all known types). - */ - -GstCaps * gst_riff_create_video_template_caps (void); -GstCaps * gst_riff_create_audio_template_caps (void); -GstCaps * gst_riff_create_iavs_template_caps (void); - -G_END_DECLS - -#endif /* __GST_RIFF_READ_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-read.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-read.h deleted file mode 100644 index cf07dda2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/riff/riff-read.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer RIFF I/O - * Copyright (C) 2003 Ronald Bultje - * - * riff-read.h: function declarations for parsing a RIFF file - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RIFF_READ_H__ -#define __GST_RIFF_READ_H__ - -#include -#include - -#include "riff-ids.h" - -G_BEGIN_DECLS - -/* - * Operate using pull_range(). - */ - -GstFlowReturn gst_riff_read_chunk (GstElement * element, - GstPad * pad, - guint64 * offset, - guint32 * tag, - GstBuffer ** chunk_data); - -/* - * These functions operate on provided data (the caller is - * supposed to strip the chunk headers). The buffer is - * provided by the caller, the strf/strh/data are filled in - * by the function. - */ - -gboolean gst_riff_parse_chunk (GstElement * element, - GstBuffer * buf, - guint * offset, - guint32 * fourcc, - GstBuffer ** chunk_data); - -gboolean gst_riff_parse_file_header (GstElement * element, - GstBuffer * buf, - guint32 * doctype); - -gboolean gst_riff_parse_strh (GstElement * element, - GstBuffer * buf, - gst_riff_strh ** strh); - -gboolean gst_riff_parse_strf_vids (GstElement * element, - GstBuffer * buf, - gst_riff_strf_vids ** strf, - GstBuffer ** data); -gboolean gst_riff_parse_strf_auds (GstElement * element, - GstBuffer * buf, - gst_riff_strf_auds ** strf, - GstBuffer ** data); -gboolean gst_riff_parse_strf_iavs (GstElement * element, - GstBuffer * buf, - gst_riff_strf_iavs ** strf, - GstBuffer ** data); - -void gst_riff_parse_info (GstElement * element, - GstBuffer * buf, - GstTagList ** taglist); - -/* - * Init. - */ -void gst_riff_init (void); - -G_END_DECLS - -#endif /* __GST_RIFF_READ_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h deleted file mode 100644 index b1a76559..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtcpbuffer.h +++ /dev/null @@ -1,310 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Wim Taymans - * - * gstrtcpbuffer.h: various helper functions to manipulate buffers - * with RTCP payload. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTCPBUFFER_H__ -#define __GST_RTCPBUFFER_H__ - -#include - -G_BEGIN_DECLS - -/** - * GST_RTCP_VERSION: - * - * The supported RTCP version 2. - */ -#define GST_RTCP_VERSION 2 - -/** - * GstRTCPType: - * @GST_RTCP_TYPE_INVALID: Invalid type - * @GST_RTCP_TYPE_SR: Sender report - * @GST_RTCP_TYPE_RR: Receiver report - * @GST_RTCP_TYPE_SDES: Source description - * @GST_RTCP_TYPE_BYE: Goodbye - * @GST_RTCP_TYPE_APP: Application defined - * @GST_RTCP_TYPE_RTPFB: Transport layer feedback. - * @GST_RTCP_TYPE_PSFB: Payload-specific feedback. - * - * Different RTCP packet types. - */ -typedef enum -{ - GST_RTCP_TYPE_INVALID = 0, - GST_RTCP_TYPE_SR = 200, - GST_RTCP_TYPE_RR = 201, - GST_RTCP_TYPE_SDES = 202, - GST_RTCP_TYPE_BYE = 203, - GST_RTCP_TYPE_APP = 204, - GST_RTCP_TYPE_RTPFB = 205, - GST_RTCP_TYPE_PSFB = 206 -} GstRTCPType; - -/** - * GstRTCPFBType: - * @GST_RTCP_FB_TYPE_INVALID: Invalid type - * @GST_RTCP_RTPFB_TYPE_NACK: Generic NACK - * @GST_RTCP_RTPFB_TYPE_TMMBR: Temporary Maximum Media Stream Bit Rate Request - * @GST_RTCP_RTPFB_TYPE_TMMBN: Temporary Maximum Media Stream Bit Rate - * Notification - * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication - * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication - * @GST_RTCP_PSFB_TYPE_RPSI: Reference Picture Selection Indication - * @GST_RTCP_PSFB_TYPE_AFB: Application layer Feedback - * @GST_RTCP_PSFB_TYPE_FIR: Full Intra Request Command - * @GST_RTCP_PSFB_TYPE_TSTR: Temporal-Spatial Trade-off Request - * @GST_RTCP_PSFB_TYPE_TSTN: Temporal-Spatial Trade-off Notification - * @GST_RTCP_PSFB_TYPE_VBCN: Video Back Channel Message - * - * Different types of feedback messages. - */ -typedef enum -{ - /* generic */ - GST_RTCP_FB_TYPE_INVALID = 0, - /* RTPFB types */ - GST_RTCP_RTPFB_TYPE_NACK = 1, - /* RTPFB types assigned in RFC 5104 */ - GST_RTCP_RTPFB_TYPE_TMMBR = 3, - GST_RTCP_RTPFB_TYPE_TMMBN = 4, - /* PSFB types */ - GST_RTCP_PSFB_TYPE_PLI = 1, - GST_RTCP_PSFB_TYPE_SLI = 2, - GST_RTCP_PSFB_TYPE_RPSI = 3, - GST_RTCP_PSFB_TYPE_AFB = 15, - /* PSFB types assigned in RFC 5104 */ - GST_RTCP_PSFB_TYPE_FIR = 4, - GST_RTCP_PSFB_TYPE_TSTR = 5, - GST_RTCP_PSFB_TYPE_TSTN = 6, - GST_RTCP_PSFB_TYPE_VBCN = 7, -} GstRTCPFBType; - -/** - * GstRTCPSDESType: - * @GST_RTCP_SDES_INVALID: Invalid SDES entry - * @GST_RTCP_SDES_END: End of SDES list - * @GST_RTCP_SDES_CNAME: Canonical name - * @GST_RTCP_SDES_NAME: User name - * @GST_RTCP_SDES_EMAIL: User's electronic mail address - * @GST_RTCP_SDES_PHONE: User's phone number - * @GST_RTCP_SDES_LOC: Geographic user location - * @GST_RTCP_SDES_TOOL: Name of application or tool - * @GST_RTCP_SDES_NOTE: Notice about the source - * @GST_RTCP_SDES_PRIV: Private extensions - * - * Different types of SDES content. - */ -typedef enum -{ - GST_RTCP_SDES_INVALID = -1, - GST_RTCP_SDES_END = 0, - GST_RTCP_SDES_CNAME = 1, - GST_RTCP_SDES_NAME = 2, - GST_RTCP_SDES_EMAIL = 3, - GST_RTCP_SDES_PHONE = 4, - GST_RTCP_SDES_LOC = 5, - GST_RTCP_SDES_TOOL = 6, - GST_RTCP_SDES_NOTE = 7, - GST_RTCP_SDES_PRIV = 8 -} GstRTCPSDESType; - -/** - * GST_RTCP_MAX_SDES: - * - * The maximum text length for an SDES item. - */ -#define GST_RTCP_MAX_SDES 255 - -/** - * GST_RTCP_MAX_RB_COUNT: - * - * The maximum amount of Receiver report blocks in RR and SR messages. - */ -#define GST_RTCP_MAX_RB_COUNT 31 - -/** - * GST_RTCP_MAX_SDES_ITEM_COUNT: - * - * The maximum amount of SDES items. - */ -#define GST_RTCP_MAX_SDES_ITEM_COUNT 31 - -/** - * GST_RTCP_MAX_BYE_SSRC_COUNT: - * - * The maximum amount of SSRCs in a BYE packet. - */ -#define GST_RTCP_MAX_BYE_SSRC_COUNT 31 - -/** - * GST_RTCP_VALID_MASK: - * - * Mask for version, padding bit and packet type pair - */ -#define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe) -/** - * GST_RTCP_VALID_VALUE: - * - * Valid value for the first two bytes of an RTCP packet after applying - * #GST_RTCP_VALID_MASK to them. - */ -#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR) - -typedef struct _GstRTCPBuffer GstRTCPBuffer; -typedef struct _GstRTCPPacket GstRTCPPacket; - -struct _GstRTCPBuffer -{ - GstBuffer *buffer; - GstMapInfo map; -}; - -#define GST_RTCP_BUFFER_INIT { NULL, GST_MAP_INFO_INIT } - -/** - * GstRTCPPacket: - * @rtcp: pointer to RTCP buffer - * @offset: offset of packet in buffer data - * - * Data structure that points to a packet at @offset in @buffer. - * The size of the structure is made public to allow stack allocations. - */ -struct _GstRTCPPacket -{ - GstRTCPBuffer *rtcp; - guint offset; - - /*< private >*/ - gboolean padding; /* padding field of current packet */ - guint8 count; /* count field of current packet */ - GstRTCPType type; /* type of current packet */ - guint16 length; /* length of current packet in 32-bits words */ - - guint item_offset; /* current item offset for navigating SDES */ - guint item_count; /* current item count */ - guint entry_offset; /* current entry offset for navigating SDES items */ -}; - -/* creating buffers */ -GstBuffer* gst_rtcp_buffer_new_take_data (gpointer data, guint len); -GstBuffer* gst_rtcp_buffer_new_copy_data (gpointer data, guint len); - -gboolean gst_rtcp_buffer_validate_data (guint8 *data, guint len); -gboolean gst_rtcp_buffer_validate (GstBuffer *buffer); - -GstBuffer* gst_rtcp_buffer_new (guint mtu); - -gboolean gst_rtcp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp); -gboolean gst_rtcp_buffer_unmap (GstRTCPBuffer *rtcp); - -/* adding/retrieving packets */ -guint gst_rtcp_buffer_get_packet_count (GstRTCPBuffer *rtcp); -gboolean gst_rtcp_buffer_get_first_packet (GstRTCPBuffer *rtcp, GstRTCPPacket *packet); -gboolean gst_rtcp_packet_move_to_next (GstRTCPPacket *packet); - -gboolean gst_rtcp_buffer_add_packet (GstRTCPBuffer *rtcp, GstRTCPType type, - GstRTCPPacket *packet); -gboolean gst_rtcp_packet_remove (GstRTCPPacket *packet); - -/* working with packets */ -gboolean gst_rtcp_packet_get_padding (GstRTCPPacket *packet); -guint8 gst_rtcp_packet_get_count (GstRTCPPacket *packet); -GstRTCPType gst_rtcp_packet_get_type (GstRTCPPacket *packet); -guint16 gst_rtcp_packet_get_length (GstRTCPPacket *packet); - - -/* sender reports */ -void gst_rtcp_packet_sr_get_sender_info (GstRTCPPacket *packet, guint32 *ssrc, - guint64 *ntptime, guint32 *rtptime, - guint32 *packet_count, guint32 *octet_count); -void gst_rtcp_packet_sr_set_sender_info (GstRTCPPacket *packet, guint32 ssrc, - guint64 ntptime, guint32 rtptime, - guint32 packet_count, guint32 octet_count); -/* receiver reports */ -guint32 gst_rtcp_packet_rr_get_ssrc (GstRTCPPacket *packet); -void gst_rtcp_packet_rr_set_ssrc (GstRTCPPacket *packet, guint32 ssrc); - - -/* report blocks for SR and RR */ -guint gst_rtcp_packet_get_rb_count (GstRTCPPacket *packet); -void gst_rtcp_packet_get_rb (GstRTCPPacket *packet, guint nth, guint32 *ssrc, - guint8 *fractionlost, gint32 *packetslost, - guint32 *exthighestseq, guint32 *jitter, - guint32 *lsr, guint32 *dlsr); -gboolean gst_rtcp_packet_add_rb (GstRTCPPacket *packet, guint32 ssrc, - guint8 fractionlost, gint32 packetslost, - guint32 exthighestseq, guint32 jitter, - guint32 lsr, guint32 dlsr); -void gst_rtcp_packet_set_rb (GstRTCPPacket *packet, guint nth, guint32 ssrc, - guint8 fractionlost, gint32 packetslost, - guint32 exthighestseq, guint32 jitter, - guint32 lsr, guint32 dlsr); - -/* source description packet */ -guint gst_rtcp_packet_sdes_get_item_count (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_first_item (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_next_item (GstRTCPPacket *packet); -guint32 gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_first_entry (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_next_entry (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_sdes_get_entry (GstRTCPPacket *packet, - GstRTCPSDESType *type, guint8 *len, - guint8 **data); -gboolean gst_rtcp_packet_sdes_copy_entry (GstRTCPPacket *packet, - GstRTCPSDESType *type, guint8 *len, - guint8 **data); - -gboolean gst_rtcp_packet_sdes_add_item (GstRTCPPacket *packet, guint32 ssrc); -gboolean gst_rtcp_packet_sdes_add_entry (GstRTCPPacket *packet, GstRTCPSDESType type, - guint8 len, const guint8 *data); - -/* bye packet */ -guint gst_rtcp_packet_bye_get_ssrc_count (GstRTCPPacket *packet); -guint32 gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket *packet, guint nth); -gboolean gst_rtcp_packet_bye_add_ssrc (GstRTCPPacket *packet, guint32 ssrc); -gboolean gst_rtcp_packet_bye_add_ssrcs (GstRTCPPacket *packet, guint32 *ssrc, guint len); -guint8 gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket *packet); -gchar* gst_rtcp_packet_bye_get_reason (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_bye_set_reason (GstRTCPPacket *packet, const gchar *reason); - -/* feedback packets */ -guint32 gst_rtcp_packet_fb_get_sender_ssrc (GstRTCPPacket *packet); -void gst_rtcp_packet_fb_set_sender_ssrc (GstRTCPPacket *packet, guint32 ssrc); -guint32 gst_rtcp_packet_fb_get_media_ssrc (GstRTCPPacket *packet); -void gst_rtcp_packet_fb_set_media_ssrc (GstRTCPPacket *packet, guint32 ssrc); -GstRTCPFBType gst_rtcp_packet_fb_get_type (GstRTCPPacket *packet); -void gst_rtcp_packet_fb_set_type (GstRTCPPacket *packet, GstRTCPFBType type); -guint16 gst_rtcp_packet_fb_get_fci_length (GstRTCPPacket *packet); -gboolean gst_rtcp_packet_fb_set_fci_length (GstRTCPPacket *packet, guint16 wordlen); -guint8 * gst_rtcp_packet_fb_get_fci (GstRTCPPacket *packet); - -/* helper functions */ -guint64 gst_rtcp_ntp_to_unix (guint64 ntptime); -guint64 gst_rtcp_unix_to_ntp (guint64 unixtime); - -const gchar * gst_rtcp_sdes_type_to_name (GstRTCPSDESType type); -GstRTCPSDESType gst_rtcp_sdes_name_to_type (const gchar *name); - -G_END_DECLS - -#endif /* __GST_RTCPBUFFER_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h deleted file mode 100644 index a6dedd86..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbaseaudiopayload.h +++ /dev/null @@ -1,106 +0,0 @@ -/* GStreamer - * Copyright (C) <2006> Philippe Khalaf - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTP_BASE_AUDIO_PAYLOAD_H__ -#define __GST_RTP_BASE_AUDIO_PAYLOAD_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstRTPBaseAudioPayload GstRTPBaseAudioPayload; -typedef struct _GstRTPBaseAudioPayloadClass GstRTPBaseAudioPayloadClass; - -typedef struct _GstRTPBaseAudioPayloadPrivate GstRTPBaseAudioPayloadPrivate; - -#define GST_TYPE_RTP_BASE_AUDIO_PAYLOAD \ - (gst_rtp_base_audio_payload_get_type()) -#define GST_RTP_BASE_AUDIO_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GST_TYPE_RTP_BASE_AUDIO_PAYLOAD,GstRTPBaseAudioPayload)) -#define GST_RTP_BASE_AUDIO_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GST_TYPE_RTP_BASE_AUDIO_PAYLOAD,GstRTPBaseAudioPayloadClass)) -#define GST_IS_RTP_BASE_AUDIO_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_AUDIO_PAYLOAD)) -#define GST_IS_RTP_BASE_AUDIO_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_AUDIO_PAYLOAD)) -#define GST_RTP_BASE_AUDIO_PAYLOAD_CAST(obj) \ - ((GstRTPBaseAudioPayload *) (obj)) - -struct _GstRTPBaseAudioPayload -{ - GstRTPBasePayload payload; - - GstRTPBaseAudioPayloadPrivate *priv; - - GstClockTime base_ts; - gint frame_size; - gint frame_duration; - - gint sample_size; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstRTPBaseAudioPayloadClass: - * @parent_class: the parent class - * - * Base class for audio RTP payloader. - */ -struct _GstRTPBaseAudioPayloadClass -{ - GstRTPBasePayloadClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtp_base_audio_payload_get_type (void); - -/* configure frame based */ -void gst_rtp_base_audio_payload_set_frame_based (GstRTPBaseAudioPayload *rtpbaseaudiopayload); - -void gst_rtp_base_audio_payload_set_frame_options (GstRTPBaseAudioPayload *rtpbaseaudiopayload, - gint frame_duration, gint frame_size); - -/* configure sample based */ -void gst_rtp_base_audio_payload_set_sample_based (GstRTPBaseAudioPayload *rtpbaseaudiopayload); -void gst_rtp_base_audio_payload_set_sample_options (GstRTPBaseAudioPayload *rtpbaseaudiopayload, - gint sample_size); -void gst_rtp_base_audio_payload_set_samplebits_options (GstRTPBaseAudioPayload *rtpbaseaudiopayload, - gint sample_size); - -/* get the internal adapter */ -GstAdapter* gst_rtp_base_audio_payload_get_adapter (GstRTPBaseAudioPayload *rtpbaseaudiopayload); - -/* push and flushing data */ -GstFlowReturn gst_rtp_base_audio_payload_push (GstRTPBaseAudioPayload * baseaudiopayload, - const guint8 * data, guint payload_len, - GstClockTime timestamp); -GstFlowReturn gst_rtp_base_audio_payload_flush (GstRTPBaseAudioPayload * baseaudiopayload, - guint payload_len, GstClockTime timestamp); - -G_END_DECLS - -#endif /* __GST_RTP_BASE_AUDIO_PAYLOAD_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h deleted file mode 100644 index fc838a2c..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasedepayload.h +++ /dev/null @@ -1,110 +0,0 @@ -/* GStreamer - * Copyright (C) <2005> Philippe Khalaf - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTP_BASE_DEPAYLOAD_H__ -#define __GST_RTP_BASE_DEPAYLOAD_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_RTP_BASE_DEPAYLOAD (gst_rtp_base_depayload_get_type()) -#define GST_RTP_BASE_DEPAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_BASE_DEPAYLOAD,GstRTPBaseDepayload)) -#define GST_RTP_BASE_DEPAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_BASE_DEPAYLOAD,GstRTPBaseDepayloadClass)) -#define GST_RTP_BASE_DEPAYLOAD_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_RTP_BASE_DEPAYLOAD,GstRTPBaseDepayloadClass)) -#define GST_IS_RTP_BASE_DEPAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_DEPAYLOAD)) -#define GST_IS_RTP_BASE_DEPAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_DEPAYLOAD)) - -#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->sinkpad) -#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->srcpad) - -typedef struct _GstRTPBaseDepayload GstRTPBaseDepayload; -typedef struct _GstRTPBaseDepayloadClass GstRTPBaseDepayloadClass; -typedef struct _GstRTPBaseDepayloadPrivate GstRTPBaseDepayloadPrivate; - -struct _GstRTPBaseDepayload -{ - GstElement parent; - - GstPad *sinkpad, *srcpad; - - /* this attribute must be set by the child */ - guint clock_rate; - - GstSegment segment; - gboolean need_newsegment; - - /*< private >*/ - GstRTPBaseDepayloadPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstRTPBaseDepayloadClass: - * @parent_class: the parent class - * @set_caps: configure the depayloader - * @process: process incoming rtp packets - * @packet_lost: signal the depayloader about packet loss - * @handle_event: custom event handling - * - * Base class for audio RTP payloader. - */ -struct _GstRTPBaseDepayloadClass -{ - GstElementClass parent_class; - - /* virtuals, inform the subclass of the caps. */ - gboolean (*set_caps) (GstRTPBaseDepayload *filter, GstCaps *caps); - - /* pure virtual function, child must use this to process incoming - * rtp packets. If the child returns a buffer without a valid timestamp, - * the timestamp of @in will be applied to the result buffer and the - * buffer will be pushed. If this function returns %NULL, nothing is - * pushed. */ - GstBuffer * (*process) (GstRTPBaseDepayload *base, GstBuffer *in); - - /* non-pure function used to to signal the depayloader about packet loss. the - * timestamp and duration are the estimated values of the lost packet. - * The default implementation of this message pushes a segment update. */ - gboolean (*packet_lost) (GstRTPBaseDepayload *filter, GstEvent *event); - - /* the default implementation does the default actions for events but - * implementation can override. */ - gboolean (*handle_event) (GstRTPBaseDepayload * filter, GstEvent * event); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtp_base_depayload_get_type (void); - -GstFlowReturn gst_rtp_base_depayload_push (GstRTPBaseDepayload *filter, GstBuffer *out_buf); -GstFlowReturn gst_rtp_base_depayload_push_list (GstRTPBaseDepayload *filter, GstBufferList *out_list); - - -G_END_DECLS - -#endif /* __GST_RTP_BASE_DEPAYLOAD_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h deleted file mode 100644 index 39ce430a..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbasepayload.h +++ /dev/null @@ -1,170 +0,0 @@ -/* GStreamer - * Copyright (C) <2005> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTP_BASE_PAYLOAD_H__ -#define __GST_RTP_BASE_PAYLOAD_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_RTP_BASE_PAYLOAD \ - (gst_rtp_base_payload_get_type()) -#define GST_RTP_BASE_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_BASE_PAYLOAD,GstRTPBasePayload)) -#define GST_RTP_BASE_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_BASE_PAYLOAD,GstRTPBasePayloadClass)) -#define GST_RTP_BASE_PAYLOAD_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RTP_BASE_PAYLOAD, GstRTPBasePayloadClass)) -#define GST_IS_RTP_BASE_PAYLOAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_PAYLOAD)) -#define GST_IS_RTP_BASE_PAYLOAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_PAYLOAD)) -#define GST_RTP_BASE_PAYLOAD_CAST(obj) \ - ((GstRTPBasePayload*)(obj)) - -typedef struct _GstRTPBasePayload GstRTPBasePayload; -typedef struct _GstRTPBasePayloadPrivate GstRTPBasePayloadPrivate; -typedef struct _GstRTPBasePayloadClass GstRTPBasePayloadClass; - -/** - * GST_RTP_BASE_PAYLOAD_SINKPAD: - * @payload: a #GstRTPBasePayload - * - * Get access to the sinkpad of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_SINKPAD(payload) (GST_RTP_BASE_PAYLOAD (payload)->sinkpad) -/** - * GST_RTP_BASE_PAYLOAD_SRCPAD: - * @payload: a #GstRTPBasePayload - * - * Get access to the srcpad of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_SRCPAD(payload) (GST_RTP_BASE_PAYLOAD (payload)->srcpad) - -/** - * GST_RTP_BASE_PAYLOAD_PT: - * @payload: a #GstRTPBasePayload - * - * Get access to the configured payload type of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_PT(payload) (GST_RTP_BASE_PAYLOAD (payload)->pt) -/** - * GST_RTP_BASE_PAYLOAD_MTU: - * @payload: a #GstRTPBasePayload - * - * Get access to the configured MTU of @payload. - */ -#define GST_RTP_BASE_PAYLOAD_MTU(payload) (GST_RTP_BASE_PAYLOAD (payload)->mtu) - -struct _GstRTPBasePayload -{ - GstElement element; - - /*< private >*/ - GstPad *sinkpad; - GstPad *srcpad; - - guint32 ts_base; - guint16 seqnum_base; - - gchar *media; - gchar *encoding_name; - gboolean dynamic; - guint32 clock_rate; - - gint32 ts_offset; - guint32 timestamp; - gint16 seqnum_offset; - guint16 seqnum; - gint64 max_ptime; - guint pt; - guint ssrc; - guint current_ssrc; - guint mtu; - - GstSegment segment; - - guint64 min_ptime; - guint64 ptime; /* in ns */ - guint64 ptime_multiple; /* in ns */ - - /*< private >*/ - GstRTPBasePayloadPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstRTPBasePayloadClass: - * @parent_class: the parent class - * @get_caps: get desired caps - * @set_caps: configure the payloader - * @handle_buffer: process data - * @sink_event: custom event handling on the sinkpad - * @src_event: custom event handling on the srcpad - * @query: custom query handling - * - * Base class for audio RTP payloader. - */ -struct _GstRTPBasePayloadClass -{ - GstElementClass parent_class; - - /* query accepted caps */ - GstCaps * (*get_caps) (GstRTPBasePayload *payload, GstPad * pad, GstCaps * filter); - /* receive caps on the sink pad, configure the payloader. */ - gboolean (*set_caps) (GstRTPBasePayload *payload, GstCaps *caps); - - /* handle a buffer, perform 0 or more gst_rtp_base_payload_push() on - * the RTP buffers. This function takes ownership of the buffer. */ - GstFlowReturn (*handle_buffer) (GstRTPBasePayload *payload, - GstBuffer *buffer); - /* handle events and queries */ - gboolean (*sink_event) (GstRTPBasePayload *payload, GstEvent * event); - gboolean (*src_event) (GstRTPBasePayload *payload, GstEvent * event); - gboolean (*query) (GstRTPBasePayload *payload, GstPad *pad, GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtp_base_payload_get_type (void); - -void gst_rtp_base_payload_set_options (GstRTPBasePayload *payload, - const gchar *media, - gboolean dynamic, - const gchar *encoding_name, - guint32 clock_rate); - -gboolean gst_rtp_base_payload_set_outcaps (GstRTPBasePayload *payload, - const gchar *fieldname, ...); - -gboolean gst_rtp_base_payload_is_filled (GstRTPBasePayload *payload, - guint size, GstClockTime duration); - -GstFlowReturn gst_rtp_base_payload_push (GstRTPBasePayload *payload, - GstBuffer *buffer); - -GstFlowReturn gst_rtp_base_payload_push_list (GstRTPBasePayload *payload, - GstBufferList *list); - -G_END_DECLS - -#endif /* __GST_RTP_BASE_PAYLOAD_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h deleted file mode 100644 index 5551c5a3..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtpbuffer.h +++ /dev/null @@ -1,155 +0,0 @@ -/* GStreamer - * Copyright (C) <2005> Philippe Khalaf - * <2005> Wim Taymans - * - * gstrtpbuffer.h: various helper functions to manipulate buffers - * with RTP payload. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTPBUFFER_H__ -#define __GST_RTPBUFFER_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_RTP_VERSION: - * - * The supported RTP version 2. - */ -#define GST_RTP_VERSION 2 - - -typedef struct _GstRTPBuffer GstRTPBuffer; - -/** - * GstRTPBuffer: - * @buffer: pointer to RTP buffer - * @state: internal state - * @data: array of data - * @size: array of size - * @map: array of #GstMapInfo - * - * Data structure that points to an RTP packet. - * The size of the structure is made public to allow stack allocations. - */ -struct _GstRTPBuffer -{ - GstBuffer *buffer; - guint state; - gpointer data[4]; - gsize size[4]; - GstMapInfo map[4]; -}; - -#define GST_RTP_BUFFER_INIT { NULL, 0, { NULL, NULL, NULL, NULL}, { 0, 0, 0, 0 }, \ - { GST_MAP_INFO_INIT, GST_MAP_INFO_INIT, GST_MAP_INFO_INIT, GST_MAP_INFO_INIT} } - -/* creating buffers */ -void gst_rtp_buffer_allocate_data (GstBuffer *buffer, guint payload_len, - guint8 pad_len, guint8 csrc_count); - -GstBuffer* gst_rtp_buffer_new_take_data (gpointer data, gsize len); -GstBuffer* gst_rtp_buffer_new_copy_data (gpointer data, gsize len); -GstBuffer* gst_rtp_buffer_new_allocate (guint payload_len, guint8 pad_len, guint8 csrc_count); -GstBuffer* gst_rtp_buffer_new_allocate_len (guint packet_len, guint8 pad_len, guint8 csrc_count); - -guint gst_rtp_buffer_calc_header_len (guint8 csrc_count); -guint gst_rtp_buffer_calc_packet_len (guint payload_len, guint8 pad_len, guint8 csrc_count); -guint gst_rtp_buffer_calc_payload_len (guint packet_len, guint8 pad_len, guint8 csrc_count); - -gboolean gst_rtp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTPBuffer *rtp); -void gst_rtp_buffer_unmap (GstRTPBuffer *rtp); - -void gst_rtp_buffer_set_packet_len (GstRTPBuffer *rtp, guint len); -guint gst_rtp_buffer_get_packet_len (GstRTPBuffer *rtp); - -guint gst_rtp_buffer_get_header_len (GstRTPBuffer *rtp); - -guint8 gst_rtp_buffer_get_version (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_version (GstRTPBuffer *rtp, guint8 version); - -gboolean gst_rtp_buffer_get_padding (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_padding (GstRTPBuffer *rtp, gboolean padding); -void gst_rtp_buffer_pad_to (GstRTPBuffer *rtp, guint len); - -gboolean gst_rtp_buffer_get_extension (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_extension (GstRTPBuffer *rtp, gboolean extension); -gboolean gst_rtp_buffer_get_extension_data (GstRTPBuffer *rtp, guint16 *bits, - gpointer *data, guint *wordlen); -gboolean gst_rtp_buffer_set_extension_data (GstRTPBuffer *rtp, guint16 bits, guint16 length); - -guint32 gst_rtp_buffer_get_ssrc (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_ssrc (GstRTPBuffer *rtp, guint32 ssrc); - -guint8 gst_rtp_buffer_get_csrc_count (GstRTPBuffer *rtp); -guint32 gst_rtp_buffer_get_csrc (GstRTPBuffer *rtp, guint8 idx); -void gst_rtp_buffer_set_csrc (GstRTPBuffer *rtp, guint8 idx, guint32 csrc); - -gboolean gst_rtp_buffer_get_marker (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_marker (GstRTPBuffer *rtp, gboolean marker); - -guint8 gst_rtp_buffer_get_payload_type (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_payload_type (GstRTPBuffer *rtp, guint8 payload_type); - -guint16 gst_rtp_buffer_get_seq (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_seq (GstRTPBuffer *rtp, guint16 seq); - -guint32 gst_rtp_buffer_get_timestamp (GstRTPBuffer *rtp); -void gst_rtp_buffer_set_timestamp (GstRTPBuffer *rtp, guint32 timestamp); - -GstBuffer* gst_rtp_buffer_get_payload_buffer (GstRTPBuffer *rtp); -GstBuffer* gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer *rtp, guint offset, guint len); - -guint gst_rtp_buffer_get_payload_len (GstRTPBuffer *rtp); -gpointer gst_rtp_buffer_get_payload (GstRTPBuffer *rtp); - -/* some helpers */ -guint32 gst_rtp_buffer_default_clock_rate (guint8 payload_type); -gint gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2); -guint64 gst_rtp_buffer_ext_timestamp (guint64 *exttimestamp, guint32 timestamp); - -gboolean gst_rtp_buffer_get_extension_onebyte_header (GstRTPBuffer *rtp, - guint8 id, - guint nth, - gpointer * data, - guint * size); -gboolean gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer *rtp, - guint8 * appbits, - guint8 id, - guint nth, - gpointer * data, - guint * size); - -gboolean gst_rtp_buffer_add_extension_onebyte_header (GstRTPBuffer *rtp, - guint8 id, - gpointer data, - guint size); -gboolean gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer *rtp, - guint8 appbits, - guint8 id, - gpointer data, - guint size); - - -G_END_DECLS - -#endif /* __GST_RTPBUFFER_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h deleted file mode 100644 index cdfef135..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtp/gstrtppayloads.h +++ /dev/null @@ -1,196 +0,0 @@ -/* GStreamer - * Copyright (C) <2007> Wim Taymans - * - * gstrtppayloads.h: various helper functions to deal with RTP payload - * types. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTPPAYLOADS_H__ -#define __GST_RTPPAYLOADS_H__ - -#include - -G_BEGIN_DECLS - -/** - * GstRTPPayload: - * @GST_RTP_PAYLOAD_PCMU: ITU-T G.711. mu-law audio (RFC 3551) - * @GST_RTP_PAYLOAD_1016: RFC 3551 says reserved - * @GST_RTP_PAYLOAD_G721: RFC 3551 says reserved - * @GST_RTP_PAYLOAD_GSM: GSM audio - * @GST_RTP_PAYLOAD_G723: ITU G.723.1 audio - * @GST_RTP_PAYLOAD_DVI4_8000: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_DVI4_16000: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_LPC: experimental linear predictive encoding - * @GST_RTP_PAYLOAD_PCMA: ITU-T G.711 A-law audio (RFC 3551) - * @GST_RTP_PAYLOAD_G722: ITU-T G.722 (RFC 3551) - * @GST_RTP_PAYLOAD_L16_STEREO: stereo PCM - * @GST_RTP_PAYLOAD_L16_MONO: mono PCM - * @GST_RTP_PAYLOAD_QCELP: EIA & TIA standard IS-733 - * @GST_RTP_PAYLOAD_CN: Comfort Noise (RFC 3389) - * @GST_RTP_PAYLOAD_MPA: Audio MPEG 1-3. - * @GST_RTP_PAYLOAD_G728: ITU-T G.728 Speech coder (RFC 3551) - * @GST_RTP_PAYLOAD_DVI4_11025: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_DVI4_22050: IMA ADPCM wave type (RFC 3551) - * @GST_RTP_PAYLOAD_G729: ITU-T G.729 Speech coder (RFC 3551) - * @GST_RTP_PAYLOAD_CELLB: See RFC 2029 - * @GST_RTP_PAYLOAD_JPEG: ISO Standards 10918-1 and 10918-2 (RFC 2435) - * @GST_RTP_PAYLOAD_NV: nv encoding by Ron Frederick - * @GST_RTP_PAYLOAD_H261: ITU-T Recommendation H.261 (RFC 2032) - * @GST_RTP_PAYLOAD_MPV: Video MPEG 1 & 2 (RFC 2250) - * @GST_RTP_PAYLOAD_MP2T: MPEG-2 transport stream (RFC 2250) - * @GST_RTP_PAYLOAD_H263: Video H263 (RFC 2190) - * - * - * Standard predefined fixed payload types. - * - * The official list is at: - * http://www.iana.org/assignments/rtp-parameters - * - * Audio: - * reserved: 19 - * unassigned: 20-23, - * - * Video: - * unassigned: 24, 27, 29, 30, 35-71, 77-95 - * Reserved for RTCP conflict avoidance: 72-76 - */ -typedef enum -{ - /* Audio: */ - GST_RTP_PAYLOAD_PCMU = 0, - GST_RTP_PAYLOAD_1016 = 1, /* RFC 3551 says reserved */ - GST_RTP_PAYLOAD_G721 = 2, /* RFC 3551 says reserved */ - GST_RTP_PAYLOAD_GSM = 3, - GST_RTP_PAYLOAD_G723 = 4, - GST_RTP_PAYLOAD_DVI4_8000 = 5, - GST_RTP_PAYLOAD_DVI4_16000 = 6, - GST_RTP_PAYLOAD_LPC = 7, - GST_RTP_PAYLOAD_PCMA = 8, - GST_RTP_PAYLOAD_G722 = 9, - GST_RTP_PAYLOAD_L16_STEREO = 10, - GST_RTP_PAYLOAD_L16_MONO = 11, - GST_RTP_PAYLOAD_QCELP = 12, - GST_RTP_PAYLOAD_CN = 13, - GST_RTP_PAYLOAD_MPA = 14, - GST_RTP_PAYLOAD_G728 = 15, - GST_RTP_PAYLOAD_DVI4_11025 = 16, - GST_RTP_PAYLOAD_DVI4_22050 = 17, - GST_RTP_PAYLOAD_G729 = 18, - - /* Video: */ - - GST_RTP_PAYLOAD_CELLB = 25, - GST_RTP_PAYLOAD_JPEG = 26, - GST_RTP_PAYLOAD_NV = 28, - GST_RTP_PAYLOAD_H261 = 31, - GST_RTP_PAYLOAD_MPV = 32, - GST_RTP_PAYLOAD_MP2T = 33, - GST_RTP_PAYLOAD_H263 = 34, - - /* BOTH */ -} GstRTPPayload; - -/* backward compatibility */ -#define GST_RTP_PAYLOAD_G723_63 16 -#define GST_RTP_PAYLOAD_G723_53 17 -#define GST_RTP_PAYLOAD_TS48 18 -#define GST_RTP_PAYLOAD_TS41 19 - -#define GST_RTP_PAYLOAD_G723_63_STRING "16" -#define GST_RTP_PAYLOAD_G723_53_STRING "17" -#define GST_RTP_PAYLOAD_TS48_STRING "18" -#define GST_RTP_PAYLOAD_TS41_STRING "19" - -/* Defining the above as strings, to make the declaration of pad_templates - * easier. So if please keep these synchronized with the above. - */ -#define GST_RTP_PAYLOAD_PCMU_STRING "0" -#define GST_RTP_PAYLOAD_1016_STRING "1" -#define GST_RTP_PAYLOAD_G721_STRING "2" -#define GST_RTP_PAYLOAD_GSM_STRING "3" -#define GST_RTP_PAYLOAD_G723_STRING "4" -#define GST_RTP_PAYLOAD_DVI4_8000_STRING "5" -#define GST_RTP_PAYLOAD_DVI4_16000_STRING "6" -#define GST_RTP_PAYLOAD_LPC_STRING "7" -#define GST_RTP_PAYLOAD_PCMA_STRING "8" -#define GST_RTP_PAYLOAD_G722_STRING "9" -#define GST_RTP_PAYLOAD_L16_STEREO_STRING "10" -#define GST_RTP_PAYLOAD_L16_MONO_STRING "11" -#define GST_RTP_PAYLOAD_QCELP_STRING "12" -#define GST_RTP_PAYLOAD_CN_STRING "13" -#define GST_RTP_PAYLOAD_MPA_STRING "14" -#define GST_RTP_PAYLOAD_G728_STRING "15" -#define GST_RTP_PAYLOAD_DVI4_11025_STRING "16" -#define GST_RTP_PAYLOAD_DVI4_22050_STRING "17" -#define GST_RTP_PAYLOAD_G729_STRING "18" - -#define GST_RTP_PAYLOAD_CELLB_STRING "25" -#define GST_RTP_PAYLOAD_JPEG_STRING "26" -#define GST_RTP_PAYLOAD_NV_STRING "28" - -#define GST_RTP_PAYLOAD_H261_STRING "31" -#define GST_RTP_PAYLOAD_MPV_STRING "32" -#define GST_RTP_PAYLOAD_MP2T_STRING "33" -#define GST_RTP_PAYLOAD_H263_STRING "34" - -#define GST_RTP_PAYLOAD_DYNAMIC_STRING "[96, 127]" - -/** - * GST_RTP_PAYLOAD_IS_DYNAMIC: - * @pt: a payload type - * - * Check if @pt is a dynamic payload type. - */ -#define GST_RTP_PAYLOAD_IS_DYNAMIC(pt) ((pt) >= 96 && (pt) <= 127) - -typedef struct _GstRTPPayloadInfo GstRTPPayloadInfo; - -/** - * GstRTPPayloadInfo: - * @payload_type: payload type, -1 means dynamic - * @media: the media type(s), usually "audio", "video", "application", "text", - * "message". - * @encoding_name: the encoding name of @pt - * @clock_rate: default clock rate, 0 = unknown/variable - * @encoding_parameters: encoding parameters. For audio this is the number of - * channels. NULL = not applicable. - * @bitrate: the bitrate of the media. 0 = unknown/variable. - * - * Structure holding default payload type information. - */ -struct _GstRTPPayloadInfo -{ - guint8 payload_type; - const gchar *media; - const gchar *encoding_name; - guint clock_rate; - const gchar *encoding_parameters; - guint bitrate; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -const GstRTPPayloadInfo * gst_rtp_payload_info_for_pt (guint8 payload_type); -const GstRTPPayloadInfo * gst_rtp_payload_info_for_name (const gchar *media, const gchar *encoding_name); - -G_END_DECLS - -#endif /* __GST_RTPPAYLOADS_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h deleted file mode 100644 index 3254324f..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsp-enumtypes.h +++ /dev/null @@ -1,35 +0,0 @@ - - - -#ifndef __gst_rtsp_ENUM_TYPES_H__ -#define __gst_rtsp_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "gstrtspdefs.h" */ -GType gst_rtsp_result_get_type (void); -#define GST_TYPE_RTSP_RESULT (gst_rtsp_result_get_type()) -GType gst_rtsp_event_get_type (void); -#define GST_TYPE_RTSP_EVENT (gst_rtsp_event_get_type()) -GType gst_rtsp_family_get_type (void); -#define GST_TYPE_RTSP_FAMILY (gst_rtsp_family_get_type()) -GType gst_rtsp_state_get_type (void); -#define GST_TYPE_RTSP_STATE (gst_rtsp_state_get_type()) -GType gst_rtsp_version_get_type (void); -#define GST_TYPE_RTSP_VERSION (gst_rtsp_version_get_type()) -GType gst_rtsp_method_get_type (void); -#define GST_TYPE_RTSP_METHOD (gst_rtsp_method_get_type()) -GType gst_rtsp_auth_method_get_type (void); -#define GST_TYPE_RTSP_AUTH_METHOD (gst_rtsp_auth_method_get_type()) -GType gst_rtsp_header_field_get_type (void); -#define GST_TYPE_RTSP_HEADER_FIELD (gst_rtsp_header_field_get_type()) -GType gst_rtsp_status_code_get_type (void); -#define GST_TYPE_RTSP_STATUS_CODE (gst_rtsp_status_code_get_type()) -G_END_DECLS - -#endif /* __gst_rtsp_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h deleted file mode 100644 index c004535a..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspconnection.h +++ /dev/null @@ -1,199 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2009> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_CONNECTION_H__ -#define __GST_RTSP_CONNECTION_H__ - -#include - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstRTSPConnection: - * - * Opaque RTSP connection object. - */ -typedef struct _GstRTSPConnection GstRTSPConnection; - -/* opening/closing a connection */ -GstRTSPResult gst_rtsp_connection_create (const GstRTSPUrl *url, GstRTSPConnection **conn); -GstRTSPResult gst_rtsp_connection_create_from_socket (GSocket * socket, - const gchar * ip, - guint16 port, - const gchar * initial_buffer, - GstRTSPConnection ** conn); -GstRTSPResult gst_rtsp_connection_accept (GSocket *socket, GstRTSPConnection **conn, GCancellable *cancellable); -GstRTSPResult gst_rtsp_connection_connect (GstRTSPConnection *conn, GTimeVal *timeout); -GstRTSPResult gst_rtsp_connection_close (GstRTSPConnection *conn); -GstRTSPResult gst_rtsp_connection_free (GstRTSPConnection *conn); - - -/* sending/receiving raw bytes */ -GstRTSPResult gst_rtsp_connection_read (GstRTSPConnection * conn, guint8 * data, - guint size, GTimeVal * timeout); -GstRTSPResult gst_rtsp_connection_write (GstRTSPConnection * conn, const guint8 * data, - guint size, GTimeVal * timeout); - -/* sending/receiving messages */ -GstRTSPResult gst_rtsp_connection_send (GstRTSPConnection *conn, GstRTSPMessage *message, - GTimeVal *timeout); -GstRTSPResult gst_rtsp_connection_receive (GstRTSPConnection *conn, GstRTSPMessage *message, - GTimeVal *timeout); - -/* status management */ -GstRTSPResult gst_rtsp_connection_poll (GstRTSPConnection *conn, GstRTSPEvent events, - GstRTSPEvent *revents, GTimeVal *timeout); - -/* reset the timeout */ -GstRTSPResult gst_rtsp_connection_next_timeout (GstRTSPConnection *conn, GTimeVal *timeout); -GstRTSPResult gst_rtsp_connection_reset_timeout (GstRTSPConnection *conn); - -/* flushing state */ -GstRTSPResult gst_rtsp_connection_flush (GstRTSPConnection *conn, gboolean flush); - -/* HTTP proxy support */ -GstRTSPResult gst_rtsp_connection_set_proxy (GstRTSPConnection *conn, - const gchar *host, guint port); - -/* configure authentication data */ -GstRTSPResult gst_rtsp_connection_set_auth (GstRTSPConnection *conn, GstRTSPAuthMethod method, - const gchar *user, const gchar *pass); - -void gst_rtsp_connection_set_auth_param (GstRTSPConnection *conn, - const gchar * param, - const gchar *value); -void gst_rtsp_connection_clear_auth_params (GstRTSPConnection *conn); - -/* configure DSCP */ -GstRTSPResult gst_rtsp_connection_set_qos_dscp (GstRTSPConnection *conn, - guint qos_dscp); - -/* accessors */ -GstRTSPUrl * gst_rtsp_connection_get_url (const GstRTSPConnection *conn); -const gchar * gst_rtsp_connection_get_ip (const GstRTSPConnection *conn); -void gst_rtsp_connection_set_ip (GstRTSPConnection *conn, const gchar *ip); - -GSocket * gst_rtsp_connection_get_read_socket (const GstRTSPConnection *conn); -GSocket * gst_rtsp_connection_get_write_socket (const GstRTSPConnection *conn); - -void gst_rtsp_connection_set_http_mode (GstRTSPConnection *conn, - gboolean enable); - -/* tunneling */ -void gst_rtsp_connection_set_tunneled (GstRTSPConnection *conn, gboolean tunneled); -gboolean gst_rtsp_connection_is_tunneled (const GstRTSPConnection *conn); - -const gchar * gst_rtsp_connection_get_tunnelid (const GstRTSPConnection *conn); -GstRTSPResult gst_rtsp_connection_do_tunnel (GstRTSPConnection *conn, GstRTSPConnection *conn2); - -/* async IO */ - -/** - * GstRTSPWatch: - * - * Opaque RTSP watch object that can be used for asynchronous RTSP - * operations. - */ -typedef struct _GstRTSPWatch GstRTSPWatch; - -/** - * GstRTSPWatchFuncs: - * @message_received: callback when a message was received - * @message_sent: callback when a message was sent - * @closed: callback when the connection is closed - * @error: callback when an error occured - * @tunnel_start: a client started a tunneled connection. The tunnelid of the - * connection must be saved. - * @tunnel_complete: a client finished a tunneled connection. In this callback - * you usually pair the tunnelid of this connection with the saved one using - * gst_rtsp_connection_do_tunnel(). - * @error_full: callback when an error occured with more information than - * the @error callback. - * @tunnel_lost: callback when the post connection of a tunnel is closed. - * - * Callback functions from a #GstRTSPWatch. - */ -typedef struct { - GstRTSPResult (*message_received) (GstRTSPWatch *watch, GstRTSPMessage *message, - gpointer user_data); - GstRTSPResult (*message_sent) (GstRTSPWatch *watch, guint id, - gpointer user_data); - GstRTSPResult (*closed) (GstRTSPWatch *watch, gpointer user_data); - GstRTSPResult (*error) (GstRTSPWatch *watch, GstRTSPResult result, - gpointer user_data); - GstRTSPStatusCode (*tunnel_start) (GstRTSPWatch *watch, gpointer user_data); - GstRTSPResult (*tunnel_complete) (GstRTSPWatch *watch, gpointer user_data); - GstRTSPResult (*error_full) (GstRTSPWatch *watch, GstRTSPResult result, - GstRTSPMessage *message, guint id, - gpointer user_data); - GstRTSPResult (*tunnel_lost) (GstRTSPWatch *watch, gpointer user_data); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -} GstRTSPWatchFuncs; - -GstRTSPWatch * gst_rtsp_watch_new (GstRTSPConnection *conn, - GstRTSPWatchFuncs *funcs, - gpointer user_data, - GDestroyNotify notify); -void gst_rtsp_watch_reset (GstRTSPWatch *watch); -void gst_rtsp_watch_unref (GstRTSPWatch *watch); - -guint gst_rtsp_watch_attach (GstRTSPWatch *watch, - GMainContext *context); - -GstRTSPResult gst_rtsp_watch_write_data (GstRTSPWatch *watch, - const guint8 *data, - guint size, guint *id); -GstRTSPResult gst_rtsp_watch_send_message (GstRTSPWatch *watch, - GstRTSPMessage *message, - guint *id); - -G_END_DECLS - -#endif /* __GST_RTSP_CONNECTION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h deleted file mode 100644 index e0b37935..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspdefs.h +++ /dev/null @@ -1,410 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_DEFS_H__ -#define __GST_RTSP_DEFS_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_RTSP_CHECK: - * @stmt: a statement - * @label: a label - * - * Macro that checks the return value of @stmt and jumps to @label when it does - * not equal #GST_RTSP_OK. - */ -#define GST_RTSP_CHECK(stmt, label) \ -G_STMT_START { \ - if (G_UNLIKELY ((res = (stmt)) != GST_RTSP_OK)) \ - goto label; \ -} G_STMT_END - -/** - * GstRTSPResult: - * @GST_RTSP_OK: no error - * @GST_RTSP_ERROR: some unspecified error occured - * @GST_RTSP_EINVAL: invalid arguments were provided to a function - * @GST_RTSP_EINTR: an operation was canceled - * @GST_RTSP_ENOMEM: no memory was available for the operation - * @GST_RTSP_ERESOLV: a host resolve error occured - * @GST_RTSP_ENOTIMPL: function not implemented - * @GST_RTSP_ESYS: a system error occured, errno contains more details - * @GST_RTSP_EPARSE: a persing error occured - * @GST_RTSP_EWSASTART: windows networking could not start - * @GST_RTSP_EWSAVERSION: windows networking stack has wrong version - * @GST_RTSP_EEOF: end-of-file was reached - * @GST_RTSP_ENET: a network problem occured, h_errno contains more details - * @GST_RTSP_ENOTIP: the host is not an IP host - * @GST_RTSP_ETIMEOUT: a timeout occured - * @GST_RTSP_ETGET: the tunnel GET request has been performed - * @GST_RTSP_ETPOST: the tunnel POST request has been performed - * @GST_RTSP_ELAST: last error - * - * Result codes from the RTSP functions. - */ -typedef enum { - GST_RTSP_OK = 0, - /* errors */ - GST_RTSP_ERROR = -1, - GST_RTSP_EINVAL = -2, - GST_RTSP_EINTR = -3, - GST_RTSP_ENOMEM = -4, - GST_RTSP_ERESOLV = -5, - GST_RTSP_ENOTIMPL = -6, - GST_RTSP_ESYS = -7, - GST_RTSP_EPARSE = -8, - GST_RTSP_EWSASTART = -9, - GST_RTSP_EWSAVERSION = -10, - GST_RTSP_EEOF = -11, - GST_RTSP_ENET = -12, - GST_RTSP_ENOTIP = -13, - GST_RTSP_ETIMEOUT = -14, - GST_RTSP_ETGET = -15, - GST_RTSP_ETPOST = -16, - - GST_RTSP_ELAST = -17 -} GstRTSPResult; - -/** - * GstRTSPEvent: - * @GST_RTSP_EV_READ: connection is readable - * @GST_RTSP_EV_WRITE: connection is writable - * - * The possible events for the connection. - */ -typedef enum { - GST_RTSP_EV_READ = (1 << 0), - GST_RTSP_EV_WRITE = (1 << 1) -} GstRTSPEvent; - -/** - * GstRTSPFamily: - * @GST_RTSP_FAM_NONE: unknown network family - * @GST_RTSP_FAM_INET: internet - * @GST_RTSP_FAM_INET6: internet V6 - * - * The possible network families. - */ -typedef enum { - GST_RTSP_FAM_NONE, - GST_RTSP_FAM_INET, - GST_RTSP_FAM_INET6 -} GstRTSPFamily; - -/** - * GstRTSPState: - * @GST_RTSP_STATE_INVALID: invalid state - * @GST_RTSP_STATE_INIT: initializing - * @GST_RTSP_STATE_READY: ready for operation - * @GST_RTSP_STATE_SEEKING: seeking in progress - * @GST_RTSP_STATE_PLAYING: playing - * @GST_RTSP_STATE_RECORDING: recording - * - * The different RTSP states. - */ -typedef enum { - GST_RTSP_STATE_INVALID, - GST_RTSP_STATE_INIT, - GST_RTSP_STATE_READY, - GST_RTSP_STATE_SEEKING, - GST_RTSP_STATE_PLAYING, - GST_RTSP_STATE_RECORDING -} GstRTSPState; - -/** - * GstRTSPVersion: - * @GST_RTSP_VERSION_INVALID: unknown/invalid version - * @GST_RTSP_VERSION_1_0: version 1.0 - * @GST_RTSP_VERSION_1_1: version 1.1. - * - * The supported RTSP versions. - */ -typedef enum { - GST_RTSP_VERSION_INVALID = 0x00, - GST_RTSP_VERSION_1_0 = 0x10, - GST_RTSP_VERSION_1_1 = 0x11 -} GstRTSPVersion; - -/** - * GstRTSPMethod: - * @GST_RTSP_INVALID: invalid method - * @GST_RTSP_DESCRIBE: the DESCRIBE method - * @GST_RTSP_ANNOUNCE: the ANNOUNCE method - * @GST_RTSP_GET_PARAMETER: the GET_PARAMETER method - * @GST_RTSP_OPTIONS: the OPTIONS method - * @GST_RTSP_PAUSE: the PAUSE method - * @GST_RTSP_PLAY: the PLAY method - * @GST_RTSP_RECORD: the RECORD method - * @GST_RTSP_REDIRECT: the REDIRECT method - * @GST_RTSP_SETUP: the SETUP method - * @GST_RTSP_SET_PARAMETER: the SET_PARAMETER method - * @GST_RTSP_TEARDOWN: the TEARDOWN method - * @GST_RTSP_GET: the GET method (HTTP). - * @GST_RTSP_POST: the POST method (HTTP). - * - * The different supported RTSP methods. - */ -typedef enum { - GST_RTSP_INVALID = 0, - GST_RTSP_DESCRIBE = (1 << 0), - GST_RTSP_ANNOUNCE = (1 << 1), - GST_RTSP_GET_PARAMETER = (1 << 2), - GST_RTSP_OPTIONS = (1 << 3), - GST_RTSP_PAUSE = (1 << 4), - GST_RTSP_PLAY = (1 << 5), - GST_RTSP_RECORD = (1 << 6), - GST_RTSP_REDIRECT = (1 << 7), - GST_RTSP_SETUP = (1 << 8), - GST_RTSP_SET_PARAMETER = (1 << 9), - GST_RTSP_TEARDOWN = (1 << 10), - GST_RTSP_GET = (1 << 11), - GST_RTSP_POST = (1 << 12) -} GstRTSPMethod; - -/** - * GstRTSPAuthMethod: - * @GST_RTSP_AUTH_NONE: no authentication - * @GST_RTSP_AUTH_BASIC: basic authentication - * @GST_RTSP_AUTH_DIGEST: digest authentication - * - * Authentication methods, ordered by strength - */ -typedef enum { - GST_RTSP_AUTH_NONE = 0x00, - GST_RTSP_AUTH_BASIC = 0x01, - GST_RTSP_AUTH_DIGEST = 0x02 -} GstRTSPAuthMethod; - -/** - * GST_RTSP_AUTH_MAX: - * - * Strongest available authentication method - */ -#define GST_RTSP_AUTH_MAX GST_RTSP_AUTH_DIGEST - -/** - * GstRTSPHeaderField: - * - * Enumeration of rtsp header fields - */ -typedef enum { - GST_RTSP_HDR_INVALID, - - /* - * R = Request - * r = response - * g = general - * e = entity - */ - GST_RTSP_HDR_ACCEPT, /* Accept R opt. entity */ - GST_RTSP_HDR_ACCEPT_ENCODING, /* Accept-Encoding R opt. entity */ - GST_RTSP_HDR_ACCEPT_LANGUAGE, /* Accept-Language R opt. all */ - GST_RTSP_HDR_ALLOW, /* Allow r opt. all */ - GST_RTSP_HDR_AUTHORIZATION, /* Authorization R opt. all */ - GST_RTSP_HDR_BANDWIDTH, /* Bandwidth R opt. all */ - GST_RTSP_HDR_BLOCKSIZE, /* Blocksize R opt. all but OPTIONS, TEARDOWN */ - GST_RTSP_HDR_CACHE_CONTROL, /* Cache-Control g opt. SETUP */ - GST_RTSP_HDR_CONFERENCE, /* Conference R opt. SETUP */ - GST_RTSP_HDR_CONNECTION, /* Connection g req. all */ - GST_RTSP_HDR_CONTENT_BASE, /* Content-Base e opt. entity */ - GST_RTSP_HDR_CONTENT_ENCODING, /* Content-Encoding e req. SET_PARAMETER, DESCRIBE, ANNOUNCE */ - GST_RTSP_HDR_CONTENT_LANGUAGE, /* Content-Language e req. DESCRIBE, ANNOUNCE */ - GST_RTSP_HDR_CONTENT_LENGTH, /* Content-Length e req. SET_PARAMETER, ANNOUNCE, entity */ - GST_RTSP_HDR_CONTENT_LOCATION, /* Content-Location e opt. entity */ - GST_RTSP_HDR_CONTENT_TYPE, /* Content-Type e req. SET_PARAMETER, ANNOUNCE, entity */ - GST_RTSP_HDR_CSEQ, /* CSeq g req. all */ - GST_RTSP_HDR_DATE, /* Date g opt. all */ - GST_RTSP_HDR_EXPIRES, /* Expires e opt. DESCRIBE, ANNOUNCE */ - GST_RTSP_HDR_FROM, /* From R opt. all */ - GST_RTSP_HDR_IF_MODIFIED_SINCE, /* If-Modified-Since R opt. DESCRIBE, SETUP */ - GST_RTSP_HDR_LAST_MODIFIED, /* Last-Modified e opt. entity */ - GST_RTSP_HDR_PROXY_AUTHENTICATE, /* Proxy-Authenticate */ - GST_RTSP_HDR_PROXY_REQUIRE, /* Proxy-Require R req. all */ - GST_RTSP_HDR_PUBLIC, /* Public r opt. all */ - GST_RTSP_HDR_RANGE, /* Range Rr opt. PLAY, PAUSE, RECORD */ - GST_RTSP_HDR_REFERER, /* Referer R opt. all */ - GST_RTSP_HDR_REQUIRE, /* Require R req. all */ - GST_RTSP_HDR_RETRY_AFTER, /* Retry-After r opt. all */ - GST_RTSP_HDR_RTP_INFO, /* RTP-Info r req. PLAY */ - GST_RTSP_HDR_SCALE, /* Scale Rr opt. PLAY, RECORD */ - GST_RTSP_HDR_SESSION, /* Session Rr req. all but SETUP, OPTIONS */ - GST_RTSP_HDR_SERVER, /* Server r opt. all */ - GST_RTSP_HDR_SPEED, /* Speed Rr opt. PLAY */ - GST_RTSP_HDR_TRANSPORT, /* Transport Rr req. SETUP */ - GST_RTSP_HDR_UNSUPPORTED, /* Unsupported r req. all */ - GST_RTSP_HDR_USER_AGENT, /* User-Agent R opt. all */ - GST_RTSP_HDR_VIA, /* Via g opt. all */ - GST_RTSP_HDR_WWW_AUTHENTICATE, /* WWW-Authenticate r opt. all */ - - /* Real extensions */ - GST_RTSP_HDR_CLIENT_CHALLENGE, /* ClientChallenge */ - GST_RTSP_HDR_REAL_CHALLENGE1, /* RealChallenge1 */ - GST_RTSP_HDR_REAL_CHALLENGE2, /* RealChallenge2 */ - GST_RTSP_HDR_REAL_CHALLENGE3, /* RealChallenge3 */ - GST_RTSP_HDR_SUBSCRIBE, /* Subscribe */ - GST_RTSP_HDR_ALERT, /* Alert */ - GST_RTSP_HDR_CLIENT_ID, /* ClientID */ - GST_RTSP_HDR_COMPANY_ID, /* CompanyID */ - GST_RTSP_HDR_GUID, /* GUID */ - GST_RTSP_HDR_REGION_DATA, /* RegionData */ - GST_RTSP_HDR_MAX_ASM_WIDTH, /* SupportsMaximumASMBandwidth */ - GST_RTSP_HDR_LANGUAGE, /* Language */ - GST_RTSP_HDR_PLAYER_START_TIME, /* PlayerStarttime */ - - /* Since 0.10.16 */ - GST_RTSP_HDR_LOCATION, /* Location */ - - /* Since 0.10.23 */ - GST_RTSP_HDR_ETAG, /* ETag */ - GST_RTSP_HDR_IF_MATCH, /* If-Match */ - - /* WM extensions [MS-RTSP] Since 0.10.23 */ - GST_RTSP_HDR_ACCEPT_CHARSET, /* Accept-Charset */ - GST_RTSP_HDR_SUPPORTED, /* Supported */ - GST_RTSP_HDR_VARY, /* Vary */ - GST_RTSP_HDR_X_ACCELERATE_STREAMING, /* X-Accelerate-Streaming */ - GST_RTSP_HDR_X_ACCEPT_AUTHENT, /* X-Accept-Authentication */ - GST_RTSP_HDR_X_ACCEPT_PROXY_AUTHENT, /* X-Accept-Proxy-Authentication */ - GST_RTSP_HDR_X_BROADCAST_ID, /* X-Broadcast-Id */ - GST_RTSP_HDR_X_BURST_STREAMING, /* X-Burst-Streaming */ - GST_RTSP_HDR_X_NOTICE, /* X-Notice */ - GST_RTSP_HDR_X_PLAYER_LAG_TIME, /* X-Player-Lag-Time */ - GST_RTSP_HDR_X_PLAYLIST, /* X-Playlist */ - GST_RTSP_HDR_X_PLAYLIST_CHANGE_NOTICE, /* X-Playlist-Change-Notice */ - GST_RTSP_HDR_X_PLAYLIST_GEN_ID, /* X-Playlist-Gen-Id */ - GST_RTSP_HDR_X_PLAYLIST_SEEK_ID, /* X-Playlist-Seek-Id */ - GST_RTSP_HDR_X_PROXY_CLIENT_AGENT, /* X-Proxy-Client-Agent */ - GST_RTSP_HDR_X_PROXY_CLIENT_VERB, /* X-Proxy-Client-Verb */ - GST_RTSP_HDR_X_RECEDING_PLAYLISTCHANGE, /* X-Receding-PlaylistChange */ - GST_RTSP_HDR_X_RTP_INFO, /* X-RTP-Info */ - GST_RTSP_HDR_X_STARTUPPROFILE, /* X-StartupProfile */ - - /* Since 0.10.24 */ - GST_RTSP_HDR_TIMESTAMP, /* Timestamp */ - - /* Since 0.10.25 */ - GST_RTSP_HDR_AUTHENTICATION_INFO, /* Authentication-Info */ - GST_RTSP_HDR_HOST, /* Host */ - GST_RTSP_HDR_PRAGMA, /* Pragma */ - GST_RTSP_HDR_X_SERVER_IP_ADDRESS, /* X-Server-IP-Address */ - GST_RTSP_HDR_X_SESSIONCOOKIE, /* X-Sessioncookie */ - - /* Since 0.10.36 */ - GST_RTSP_HDR_RTCP_INTERVAL, /* RTCP-Interval */ - - GST_RTSP_HDR_LAST -} GstRTSPHeaderField; - -/** - * GstRTSPStatusCode: - * - * Enumeration of rtsp status codes - */ -typedef enum { - GST_RTSP_STS_INVALID = 0, - GST_RTSP_STS_CONTINUE = 100, - GST_RTSP_STS_OK = 200, - GST_RTSP_STS_CREATED = 201, - GST_RTSP_STS_LOW_ON_STORAGE = 250, - GST_RTSP_STS_MULTIPLE_CHOICES = 300, - GST_RTSP_STS_MOVED_PERMANENTLY = 301, - GST_RTSP_STS_MOVE_TEMPORARILY = 302, - GST_RTSP_STS_SEE_OTHER = 303, - GST_RTSP_STS_NOT_MODIFIED = 304, - GST_RTSP_STS_USE_PROXY = 305, - GST_RTSP_STS_BAD_REQUEST = 400, - GST_RTSP_STS_UNAUTHORIZED = 401, - GST_RTSP_STS_PAYMENT_REQUIRED = 402, - GST_RTSP_STS_FORBIDDEN = 403, - GST_RTSP_STS_NOT_FOUND = 404, - GST_RTSP_STS_METHOD_NOT_ALLOWED = 405, - GST_RTSP_STS_NOT_ACCEPTABLE = 406, - GST_RTSP_STS_PROXY_AUTH_REQUIRED = 407, - GST_RTSP_STS_REQUEST_TIMEOUT = 408, - GST_RTSP_STS_GONE = 410, - GST_RTSP_STS_LENGTH_REQUIRED = 411, - GST_RTSP_STS_PRECONDITION_FAILED = 412, - GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE = 413, - GST_RTSP_STS_REQUEST_URI_TOO_LARGE = 414, - GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE = 415, - GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD = 451, - GST_RTSP_STS_CONFERENCE_NOT_FOUND = 452, - GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH = 453, - GST_RTSP_STS_SESSION_NOT_FOUND = 454, - GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE = 455, - GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE = 456, - GST_RTSP_STS_INVALID_RANGE = 457, - GST_RTSP_STS_PARAMETER_IS_READONLY = 458, - GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED = 459, - GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED = 460, - GST_RTSP_STS_UNSUPPORTED_TRANSPORT = 461, - GST_RTSP_STS_DESTINATION_UNREACHABLE = 462, - GST_RTSP_STS_INTERNAL_SERVER_ERROR = 500, - GST_RTSP_STS_NOT_IMPLEMENTED = 501, - GST_RTSP_STS_BAD_GATEWAY = 502, - GST_RTSP_STS_SERVICE_UNAVAILABLE = 503, - GST_RTSP_STS_GATEWAY_TIMEOUT = 504, - GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED = 505, - GST_RTSP_STS_OPTION_NOT_SUPPORTED = 551 -} GstRTSPStatusCode; - -gchar* gst_rtsp_strresult (GstRTSPResult result); - -const gchar* gst_rtsp_method_as_text (GstRTSPMethod method); -const gchar* gst_rtsp_version_as_text (GstRTSPVersion version); -const gchar* gst_rtsp_header_as_text (GstRTSPHeaderField field); -const gchar* gst_rtsp_status_as_text (GstRTSPStatusCode code); - -gchar* gst_rtsp_options_as_text (GstRTSPMethod options); - -GstRTSPHeaderField gst_rtsp_find_header_field (const gchar *header); -GstRTSPMethod gst_rtsp_find_method (const gchar *method); - -gboolean gst_rtsp_header_allow_multiple (GstRTSPHeaderField field); - -G_END_DECLS - -#endif /* __GST_RTSP_DEFS_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h deleted file mode 100644 index 66aa7ac7..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspextension.h +++ /dev/null @@ -1,97 +0,0 @@ -/* GStreamer RTSP Extension - * Copyright (C) 2007 Wim Taymans - * - * gstrtspextension.h: RTSP Extension interface. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_RTSP_EXTENSION_H__ -#define __GST_RTSP_EXTENSION_H__ - -#include - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_RTSP_EXTENSION \ - (gst_rtsp_extension_get_type ()) -#define GST_RTSP_EXTENSION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTSP_EXTENSION, GstRTSPExtension)) -#define GST_IS_RTSP_EXTENSION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_EXTENSION)) -#define GST_RTSP_EXTENSION_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_RTSP_EXTENSION, GstRTSPExtensionInterface)) - -typedef struct _GstRTSPExtension GstRTSPExtension; -typedef struct _GstRTSPExtensionInterface GstRTSPExtensionInterface; - -struct _GstRTSPExtensionInterface { - GTypeInterface parent; - - /* vfunctions */ - gboolean (*detect_server) (GstRTSPExtension *ext, GstRTSPMessage *resp); - - GstRTSPResult (*before_send) (GstRTSPExtension *ext, GstRTSPMessage *req); - GstRTSPResult (*after_send) (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp); - - GstRTSPResult (*parse_sdp) (GstRTSPExtension *ext, GstSDPMessage *sdp, GstStructure *s); - GstRTSPResult (*setup_media) (GstRTSPExtension *ext, GstSDPMedia *media); - - gboolean (*configure_stream) (GstRTSPExtension *ext, GstCaps *caps); - - GstRTSPResult (*get_transports) (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, gchar **transport); - - GstRTSPResult (*stream_select) (GstRTSPExtension *ext, GstRTSPUrl *url); - - /* signals */ - GstRTSPResult (*send) (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp); - - /* ABI: more vfunctions added later */ - GstRTSPResult (*receive_request) (GstRTSPExtension *ext, GstRTSPMessage *req); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_rtsp_extension_get_type (void); - -/* invoke vfunction on interface */ -gboolean gst_rtsp_extension_detect_server (GstRTSPExtension *ext, GstRTSPMessage *resp); - -GstRTSPResult gst_rtsp_extension_before_send (GstRTSPExtension *ext, GstRTSPMessage *req); -GstRTSPResult gst_rtsp_extension_after_send (GstRTSPExtension *ext, GstRTSPMessage *req, - GstRTSPMessage *resp); -GstRTSPResult gst_rtsp_extension_parse_sdp (GstRTSPExtension *ext, GstSDPMessage *sdp, - GstStructure *s); -GstRTSPResult gst_rtsp_extension_setup_media (GstRTSPExtension *ext, GstSDPMedia *media); -gboolean gst_rtsp_extension_configure_stream (GstRTSPExtension *ext, GstCaps *caps); -GstRTSPResult gst_rtsp_extension_get_transports (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, - gchar **transport); -GstRTSPResult gst_rtsp_extension_stream_select (GstRTSPExtension *ext, GstRTSPUrl *url); -GstRTSPResult gst_rtsp_extension_receive_request (GstRTSPExtension *ext, GstRTSPMessage *req); - -/* signal emision */ -GstRTSPResult gst_rtsp_extension_send (GstRTSPExtension *ext, GstRTSPMessage *req, - GstRTSPMessage *resp); - -G_END_DECLS - -#endif /* __GST_RTSP_EXTENSION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h deleted file mode 100644 index b430ce29..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspmessage.h +++ /dev/null @@ -1,189 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_MESSAGE_H__ -#define __GST_RTSP_MESSAGE_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstRTSPMsgType: - * @GST_RTSP_MESSAGE_INVALID: invalid message type - * @GST_RTSP_MESSAGE_REQUEST: RTSP request message - * @GST_RTSP_MESSAGE_RESPONSE: RTSP response message - * @GST_RTSP_MESSAGE_HTTP_REQUEST: HTTP request message. - * @GST_RTSP_MESSAGE_HTTP_RESPONSE: HTTP response message. - * @GST_RTSP_MESSAGE_DATA: data message - * - * The type of a message. - */ -typedef enum -{ - GST_RTSP_MESSAGE_INVALID, - GST_RTSP_MESSAGE_REQUEST, - GST_RTSP_MESSAGE_RESPONSE, - GST_RTSP_MESSAGE_HTTP_REQUEST, - GST_RTSP_MESSAGE_HTTP_RESPONSE, - GST_RTSP_MESSAGE_DATA -} GstRTSPMsgType; - -typedef struct _GstRTSPMessage GstRTSPMessage; - -/** - * GstRTSPMessage: - * @type: the message type - * - * An RTSP message containing request, response or data messages. Depending on - * the @type, the appropriate structure may be accessed. - */ -struct _GstRTSPMessage -{ - GstRTSPMsgType type; - - union { - struct { - GstRTSPMethod method; - gchar *uri; - GstRTSPVersion version; - } request; - struct { - GstRTSPStatusCode code; - gchar *reason; - GstRTSPVersion version; - } response; - struct { - guint8 channel; - } data; - } type_data; - - /*< private >*/ - GArray *hdr_fields; - - guint8 *body; - guint body_size; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/* memory management */ -GstRTSPResult gst_rtsp_message_new (GstRTSPMessage **msg); -GstRTSPResult gst_rtsp_message_init (GstRTSPMessage *msg); -GstRTSPResult gst_rtsp_message_unset (GstRTSPMessage *msg); -GstRTSPResult gst_rtsp_message_free (GstRTSPMessage *msg); - -GstRTSPMsgType gst_rtsp_message_get_type (GstRTSPMessage *msg); - -/* request */ -GstRTSPResult gst_rtsp_message_new_request (GstRTSPMessage **msg, - GstRTSPMethod method, - const gchar *uri); -GstRTSPResult gst_rtsp_message_init_request (GstRTSPMessage *msg, - GstRTSPMethod method, - const gchar *uri); -GstRTSPResult gst_rtsp_message_parse_request (GstRTSPMessage *msg, - GstRTSPMethod *method, - const gchar **uri, - GstRTSPVersion *version); - -/* response */ -GstRTSPResult gst_rtsp_message_new_response (GstRTSPMessage **msg, - GstRTSPStatusCode code, - const gchar *reason, - const GstRTSPMessage *request); -GstRTSPResult gst_rtsp_message_init_response (GstRTSPMessage *msg, - GstRTSPStatusCode code, - const gchar *reason, - const GstRTSPMessage *request); -GstRTSPResult gst_rtsp_message_parse_response (GstRTSPMessage *msg, - GstRTSPStatusCode *code, - const gchar **reason, - GstRTSPVersion *version); - -/* data */ -GstRTSPResult gst_rtsp_message_new_data (GstRTSPMessage **msg, - guint8 channel); -GstRTSPResult gst_rtsp_message_init_data (GstRTSPMessage *msg, - guint8 channel); -GstRTSPResult gst_rtsp_message_parse_data (GstRTSPMessage *msg, - guint8 *channel); - -/* headers */ -GstRTSPResult gst_rtsp_message_add_header (GstRTSPMessage *msg, - GstRTSPHeaderField field, - const gchar *value); -GstRTSPResult gst_rtsp_message_take_header (GstRTSPMessage *msg, - GstRTSPHeaderField field, - gchar *value); -GstRTSPResult gst_rtsp_message_remove_header (GstRTSPMessage *msg, - GstRTSPHeaderField field, - gint indx); -GstRTSPResult gst_rtsp_message_get_header (const GstRTSPMessage *msg, - GstRTSPHeaderField field, - gchar **value, - gint indx); -GstRTSPResult gst_rtsp_message_append_headers (const GstRTSPMessage *msg, - GString *str); - -/* handling the body */ -GstRTSPResult gst_rtsp_message_set_body (GstRTSPMessage *msg, - const guint8 *data, - guint size); -GstRTSPResult gst_rtsp_message_take_body (GstRTSPMessage *msg, - guint8 *data, - guint size); -GstRTSPResult gst_rtsp_message_get_body (const GstRTSPMessage *msg, - guint8 **data, - guint *size); -GstRTSPResult gst_rtsp_message_steal_body (GstRTSPMessage *msg, - guint8 **data, - guint *size); - -/* debug */ -GstRTSPResult gst_rtsp_message_dump (GstRTSPMessage *msg); - -G_END_DECLS - -#endif /* __GST_RTSP_MESSAGE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h deleted file mode 100644 index 6778fea8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsprange.h +++ /dev/null @@ -1,121 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_RANGE_H__ -#define __GST_RTSP_RANGE_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstRTSPRangeUnit: - * @GST_RTSP_RANGE_SMPTE: SMPTE timecode - * @GST_RTSP_RANGE_SMPTE_30_DROP: 29.97 frames per second - * @GST_RTSP_RANGE_SMPTE_25: 25 frames per second - * @GST_RTSP_RANGE_NPT: Normal play time - * @GST_RTSP_RANGE_CLOCK: Absolute time expressed as ISO 8601 timestamps - * - * Different possible time range units. - */ -typedef enum -{ - GST_RTSP_RANGE_SMPTE, - GST_RTSP_RANGE_SMPTE_30_DROP, - GST_RTSP_RANGE_SMPTE_25, - GST_RTSP_RANGE_NPT, - GST_RTSP_RANGE_CLOCK -} GstRTSPRangeUnit; - -typedef struct _GstRTSPTimeRange GstRTSPTimeRange; -typedef struct _GstRTSPTime GstRTSPTime; - -/** - * GstRTSPTimeType: - * @GST_RTSP_TIME_SECONDS: seconds - * @GST_RTSP_TIME_NOW: now - * @GST_RTSP_TIME_END: end - * - * Possible time types. - */ -typedef enum { - GST_RTSP_TIME_SECONDS, - GST_RTSP_TIME_NOW, - GST_RTSP_TIME_END -} GstRTSPTimeType; - -/** - * GstRTSPTime: - * @type: the time of the time - * @seconds: seconds when @type is GST_RTSP_TIME_SECONDS - * - * A time indication. - */ -struct _GstRTSPTime { - GstRTSPTimeType type; - gdouble seconds; -}; - -/** - * GstRTSPTimeRange: - * @unit: the time units used - * @min: the minimum interval - * @max: the maximum interval - * - * A time range. - */ -struct _GstRTSPTimeRange { - GstRTSPRangeUnit unit; - - GstRTSPTime min; - GstRTSPTime max; -}; - -GstRTSPResult gst_rtsp_range_parse (const gchar *rangestr, GstRTSPTimeRange **range); -gchar * gst_rtsp_range_to_string (const GstRTSPTimeRange *range); -void gst_rtsp_range_free (GstRTSPTimeRange *range); - -G_END_DECLS - -#endif /* __GST_RTSP_RANGE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h deleted file mode 100644 index e971ef7b..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtsptransport.h +++ /dev/null @@ -1,177 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_TRANSPORT_H__ -#define __GST_RTSP_TRANSPORT_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstRTSPTransMode: - * @GST_RTSP_TRANS_UNKNOWN: invalid tansport mode - * @GST_RTSP_TRANS_RTP: transfer RTP data - * @GST_RTSP_TRANS_RDT: transfer RDT (RealMedia) data - * - * The transfer mode to use. - */ -typedef enum { - GST_RTSP_TRANS_UNKNOWN = 0, - GST_RTSP_TRANS_RTP = (1 << 0), - GST_RTSP_TRANS_RDT = (1 << 1) -} GstRTSPTransMode; - -/** - * GstRTSPProfile: - * @GST_RTSP_PROFILE_UNKNOWN: invalid profile - * @GST_RTSP_PROFILE_AVP: the Audio/Visual profile - * @GST_RTSP_PROFILE_SAVP: the secure Audio/Visual profile - * - * The transfer profile to use. - */ -typedef enum { - GST_RTSP_PROFILE_UNKNOWN = 0, - GST_RTSP_PROFILE_AVP = (1 << 0), - GST_RTSP_PROFILE_SAVP = (1 << 1) -} GstRTSPProfile; - -/** - * GstRTSPLowerTrans: - * @GST_RTSP_LOWER_TRANS_UNKNOWN: invalid transport flag - * @GST_RTSP_LOWER_TRANS_UDP: stream data over UDP - * @GST_RTSP_LOWER_TRANS_UDP_MCAST: stream data over UDP multicast - * @GST_RTSP_LOWER_TRANS_TCP: stream data over TCP - * @GST_RTSP_LOWER_TRANS_HTTP: stream data tunneled over HTTP. - * - * The different transport methods. - */ -typedef enum { - GST_RTSP_LOWER_TRANS_UNKNOWN = 0, - GST_RTSP_LOWER_TRANS_UDP = (1 << 0), - GST_RTSP_LOWER_TRANS_UDP_MCAST = (1 << 1), - GST_RTSP_LOWER_TRANS_TCP = (1 << 2), - GST_RTSP_LOWER_TRANS_HTTP = (1 << 4) -} GstRTSPLowerTrans; - -#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type()) -GType gst_rtsp_lower_trans_get_type (void); - -typedef struct _GstRTSPRange GstRTSPRange; -typedef struct _GstRTSPTransport GstRTSPTransport; - -/** - * GstRTSPRange: - * @min: minimum value of the range - * @max: maximum value of the range - * - * A type to specify a range. - */ - -struct _GstRTSPRange { - gint min; - gint max; -}; - -/** - * GstRTSPTransport: - * @trans: the transport mode - * @profile: the tansport profile - * @lower_transport: the lower transport - * @destination: the destination ip/hostname - * @source: the source ip/hostname - * @layers: the number of layers - * @mode_play: if play mode was selected - * @mode_record: if record mode was selected - * @append: is append mode was selected - * @interleaved: the interleave range - * @ttl: the time to live for multicast UDP - * @port: the port pair for multicast sessions - * @client_port: the client port pair for receiving data - * @server_port: the server port pair for receiving data - * @ssrc: the ssrc that the sender/receiver will use - * - * A structure holding the RTSP transport values. - */ - -struct _GstRTSPTransport { - GstRTSPTransMode trans; - GstRTSPProfile profile; - GstRTSPLowerTrans lower_transport; - - gchar *destination; - gchar *source; - guint layers; - gboolean mode_play; - gboolean mode_record; - gboolean append; - GstRTSPRange interleaved; - - /* multicast specific */ - guint ttl; - - /* UDP specific */ - GstRTSPRange port; - GstRTSPRange client_port; - GstRTSPRange server_port; - /* RTP specific */ - guint ssrc; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GstRTSPResult gst_rtsp_transport_new (GstRTSPTransport **transport); -GstRTSPResult gst_rtsp_transport_init (GstRTSPTransport *transport); - -GstRTSPResult gst_rtsp_transport_parse (const gchar *str, GstRTSPTransport *transport); -gchar* gst_rtsp_transport_as_text (GstRTSPTransport *transport); - -GstRTSPResult gst_rtsp_transport_get_mime (GstRTSPTransMode trans, const gchar **mime); -GstRTSPResult gst_rtsp_transport_get_manager (GstRTSPTransMode trans, const gchar **manager, guint option); - -GstRTSPResult gst_rtsp_transport_free (GstRTSPTransport *transport); - -G_END_DECLS - -#endif /* __GST_RTSP_TRANSPORT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h deleted file mode 100644 index 61b2dfaa..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/rtsp/gstrtspurl.h +++ /dev/null @@ -1,103 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_RTSP_URL_H__ -#define __GST_RTSP_URL_H__ - -#include -#include - -#include -#include - -G_BEGIN_DECLS - -/** - * GST_RTSP_DEFAULT_PORT: - * - * The default RTSP port to connect to. - */ -#define GST_RTSP_DEFAULT_PORT 554 - -#define GST_TYPE_RTSP_URL (gst_rtsp_url_get_type()) - -typedef struct _GstRTSPUrl GstRTSPUrl; - -/** - * GstRTSPUrl: - * @transports: the transports allowed - * @family: the family - * @user: the user - * @passwd: the password - * @host: the host - * @port: the port - * @abspath: the absolute path - * @query: additional query parameters - * - * This structure contains the result of a parsed RTSP URL - */ -struct _GstRTSPUrl { - GstRTSPLowerTrans transports; - GstRTSPFamily family; - gchar *user; - gchar *passwd; - gchar *host; - guint16 port; - gchar *abspath; - gchar *query; -}; - -GType gst_rtsp_url_get_type (void); - -GstRTSPResult gst_rtsp_url_parse (const gchar *urlstr, GstRTSPUrl **url); -GstRTSPUrl* gst_rtsp_url_copy (const GstRTSPUrl *url); -void gst_rtsp_url_free (GstRTSPUrl *url); -gchar* gst_rtsp_url_get_request_uri (const GstRTSPUrl *url); -gchar** gst_rtsp_url_decode_path_components - (const GstRTSPUrl *url); - -GstRTSPResult gst_rtsp_url_set_port (GstRTSPUrl *url, guint16 port); -GstRTSPResult gst_rtsp_url_get_port (const GstRTSPUrl *url, guint16 *port); - -G_END_DECLS - -#endif /* __GST_RTSP_URL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdp.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdp.h deleted file mode 100644 index 3dbd86d2..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdp.h +++ /dev/null @@ -1,58 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_SDP_H__ -#define __GST_SDP_H__ - -/** - * GstSDPResult: - * @GST_SDP_OK: A successful return value - * @GST_SDP_EINVAL: a function was given invalid parameters - * - * Return values for the SDP functions. - */ -typedef enum { - GST_SDP_OK = 0, - GST_SDP_EINVAL = -1 -} GstSDPResult; - -#endif /* __GST_SDP_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h deleted file mode 100644 index d1e65ddb..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/sdp/gstsdpmessage.h +++ /dev/null @@ -1,417 +0,0 @@ -/* GStreamer - * Copyright (C) <2005,2006> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Unless otherwise indicated, Source Code is licensed under MIT license. - * See further explanation attached in License Statement (distributed in the file - * LICENSE). - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef __GST_SDP_MESSAGE_H__ -#define __GST_SDP_MESSAGE_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstSDPOrigin: - * @username: the user's login on the originating host, or it is "-" - * if the originating host does not support the concept of user ids. - * @sess_id: is a numeric string such that the tuple of @username, @sess_id, - * @nettype, @addrtype and @addr form a globally unique identifier for the - * session. - * @sess_version: a version number for this announcement - * @nettype: the type of network. "IN" is defined to have the meaning - * "Internet". - * @addrtype: the type of @addr. - * @addr: the globally unique address of the machine from which the session was - * created. - * - * The contents of the SDP "o=" field which gives the originator of the session - * (their username and the address of the user's host) plus a session id and - * session version number. - */ -typedef struct { - gchar *username; - gchar *sess_id; - gchar *sess_version; - gchar *nettype; - gchar *addrtype; - gchar *addr; -} GstSDPOrigin; - -/** - * GstSDPConnection: - * @nettype: the type of network. "IN" is defined to have the meaning - * "Internet". - * @addrtype: the type of @address. - * @address: the address - * @ttl: the time to live of the address - * @addr_number: the number of layers - * - * The contents of the SDP "c=" field which contains connection data. - */ -typedef struct { - gchar *nettype; - gchar *addrtype; - gchar *address; - guint ttl; - guint addr_number; -} GstSDPConnection; - -/** - * GST_SDP_BWTYPE_CT: - * - * The Conference Total bandwidth modifier. - */ -#define GST_SDP_BWTYPE_CT "CT" -/** - * GST_SDP_BWTYPE_AS: - * - * The Application-Specific Maximum bandwidth modifier. - */ -#define GST_SDP_BWTYPE_AS "AS" -/** - * GST_SDP_BWTYPE_EXT_PREFIX: - * - * The extension prefix bandwidth modifier. - */ -#define GST_SDP_BWTYPE_EXT_PREFIX "X-" - -/** - * GST_SDP_BWTYPE_RS: - * - * RTCP bandwidth allocated to active data senders (RFC 3556). - */ -#define GST_SDP_BWTYPE_RS "RS" -/** - * GST_SDP_BWTYPE_RR: - * - * RTCP bandwidth allocated to data receivers (RFC 3556). - */ -#define GST_SDP_BWTYPE_RR "RR" -/** - * GST_SDP_BWTYPE_TIAS: - * - * Transport Independent Application Specific Maximum bandwidth (RFC 3890). - */ -#define GST_SDP_BWTYPE_TIAS "TIAS" - - -/** - * GstSDPBandwidth: - * @bwtype: the bandwidth modifier type - * @bandwidth: the bandwidth in kilobits per second - * - * The contents of the SDP "b=" field which specifies the proposed bandwidth to - * be used by the session or media. - */ -typedef struct { - gchar *bwtype; - guint bandwidth; -} GstSDPBandwidth; - -/** - * GstSDPTime: - * @start: start time for the conference. The value is the decimal - * representation of Network Time Protocol (NTP) time values in seconds - * @stop: stop time for the conference. The value is the decimal - * representation of Network Time Protocol (NTP) time values in seconds - * @repeat: repeat times for a session - * - * The contents of the SDP "t=" field which specify the start and stop times for - * a conference session. - */ -typedef struct { - gchar *start; - gchar *stop; - GArray *repeat; -} GstSDPTime; - -/** - * GstSDPZone: - * @time: the NTP time that a time zone adjustment happens - * @typed_time: the offset from the time when the session was first scheduled - * - * The contents of the SDP "z=" field which allows the sender to - * specify a list of time zone adjustments and offsets from the base - * time. - */ -typedef struct { - gchar *time; - gchar *typed_time; -} GstSDPZone; - -/** - * GstSDPKey: - * @type: the encryption type - * @data: the encryption data - * - * The contents of the SDP "k=" field which is used to convey encryption - * keys. - */ -typedef struct { - gchar *type; - gchar *data; -} GstSDPKey; - -/** - * GstSDPAttribute: - * @key: the attribute key - * @value: the attribute value or NULL when it was a property attribute - * - * The contents of the SDP "a=" field which contains a key/value pair. - */ -typedef struct { - gchar *key; - gchar *value; -} GstSDPAttribute; - -/** - * GstSDPMedia: - * @media: the media type - * @port: the transport port to which the media stream will be sent - * @num_ports: the number of ports or -1 if only one port was specified - * @proto: the transport protocol - * @fmts: an array of #gchar formats - * @information: the media title - * @connections: array of #GstSDPConnection with media connection information - * @bandwidths: array of #GstSDPBandwidth with media bandwidth information - * @key: the encryption key - * @attributes: array of #GstSDPAttribute with the additional media attributes - * - * The contents of the SDP "m=" field with all related fields. - */ -typedef struct { - gchar *media; - guint port; - guint num_ports; - gchar *proto; - GArray *fmts; - gchar *information; - GArray *connections; - GArray *bandwidths; - GstSDPKey key; - GArray *attributes; -} GstSDPMedia; - -/** - * GstSDPMessage: - * @version: the protocol version - * @origin: owner/creator and session identifier - * @session_name: session name - * @information: session information - * @uri: URI of description - * @emails: array of #gchar with email addresses - * @phones: array of #gchar with phone numbers - * @connection: connection information for the session - * @bandwidths: array of #GstSDPBandwidth with bandwidth information - * @times: array of #GstSDPTime with time descriptions - * @zones: array of #GstSDPZone with time zone adjustments - * @key: encryption key - * @attributes: array of #GstSDPAttribute with session attributes - * @medias: array of #GstSDPMedia with media descriptions - * - * The contents of the SDP message. - */ -typedef struct { - gchar *version; - GstSDPOrigin origin; - gchar *session_name; - gchar *information; - gchar *uri; - GArray *emails; - GArray *phones; - GstSDPConnection connection; - GArray *bandwidths; - GArray *times; - GArray *zones; - GstSDPKey key; - GArray *attributes; - GArray *medias; -} GstSDPMessage; - -/* Session descriptions */ -GstSDPResult gst_sdp_message_new (GstSDPMessage **msg); -GstSDPResult gst_sdp_message_init (GstSDPMessage *msg); -GstSDPResult gst_sdp_message_uninit (GstSDPMessage *msg); -GstSDPResult gst_sdp_message_free (GstSDPMessage *msg); - -GstSDPResult gst_sdp_message_parse_buffer (const guint8 *data, guint size, GstSDPMessage *msg); -gchar* gst_sdp_message_as_text (const GstSDPMessage *msg); - -/* convert from/to uri */ -GstSDPResult gst_sdp_message_parse_uri (const gchar *uri, GstSDPMessage *msg); -gchar* gst_sdp_message_as_uri (const gchar *scheme, const GstSDPMessage *msg); - -/* utils */ -gboolean gst_sdp_address_is_multicast (const gchar *nettype, const gchar *addrtype, - const gchar *addr); -/* v=.. */ -const gchar* gst_sdp_message_get_version (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_version (GstSDPMessage *msg, const gchar *version); - -/* o= */ -const GstSDPOrigin* gst_sdp_message_get_origin (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_origin (GstSDPMessage *msg, const gchar *username, - const gchar *sess_id, const gchar *sess_version, - const gchar *nettype, const gchar *addrtype, - const gchar *addr); - -/* s= */ -const gchar* gst_sdp_message_get_session_name (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_session_name (GstSDPMessage *msg, const gchar *session_name); - -/* i= */ -const gchar* gst_sdp_message_get_information (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_information (GstSDPMessage *msg, const gchar *information); - -/* u= */ -const gchar* gst_sdp_message_get_uri (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_uri (GstSDPMessage *msg, const gchar *uri); - -/* e= */ -guint gst_sdp_message_emails_len (const GstSDPMessage *msg); -const gchar* gst_sdp_message_get_email (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_email (GstSDPMessage *msg, const gchar *email); - -/* p= */ -guint gst_sdp_message_phones_len (const GstSDPMessage *msg); -const gchar* gst_sdp_message_get_phone (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_phone (GstSDPMessage *msg, const gchar *phone); - -/* c= [/][/] */ -const GstSDPConnection* gst_sdp_message_get_connection (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_connection (GstSDPMessage *msg, const gchar *nettype, - const gchar *addrtype, const gchar *address, - guint ttl, guint addr_number); -/* b=: */ -guint gst_sdp_message_bandwidths_len (const GstSDPMessage *msg); -const GstSDPBandwidth* gst_sdp_message_get_bandwidth (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_bandwidth (GstSDPMessage *msg, const gchar *bwtype, - guint bandwidth); -/* t= and - * r= */ -guint gst_sdp_message_times_len (const GstSDPMessage *msg); -const GstSDPTime* gst_sdp_message_get_time (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_time (GstSDPMessage *msg, const gchar *start, const gchar *stop, const gchar **repeat); - -/* z= .... */ -guint gst_sdp_message_zones_len (const GstSDPMessage *msg); -const GstSDPZone* gst_sdp_message_get_zone (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_zone (GstSDPMessage *msg, const gchar *adj_time, - const gchar *typed_time); - -/* k=[:] */ -const GstSDPKey* gst_sdp_message_get_key (const GstSDPMessage *msg); -GstSDPResult gst_sdp_message_set_key (GstSDPMessage *msg, const gchar *type, - const gchar *data); -/* a=... */ -guint gst_sdp_message_attributes_len (const GstSDPMessage *msg); -const GstSDPAttribute* gst_sdp_message_get_attribute (const GstSDPMessage *msg, guint idx); -const gchar* gst_sdp_message_get_attribute_val (const GstSDPMessage *msg, const gchar *key); -const gchar* gst_sdp_message_get_attribute_val_n (const GstSDPMessage *msg, const gchar *key, - guint nth); -GstSDPResult gst_sdp_message_add_attribute (GstSDPMessage *msg, const gchar *key, - const gchar *value); - -/* m=.. sections */ -guint gst_sdp_message_medias_len (const GstSDPMessage *msg); -const GstSDPMedia* gst_sdp_message_get_media (const GstSDPMessage *msg, guint idx); -GstSDPResult gst_sdp_message_add_media (GstSDPMessage *msg, GstSDPMedia *media); - -GstSDPResult gst_sdp_message_dump (const GstSDPMessage *msg); - -/* Media descriptions */ -GstSDPResult gst_sdp_media_new (GstSDPMedia **media); -GstSDPResult gst_sdp_media_init (GstSDPMedia *media); -GstSDPResult gst_sdp_media_uninit (GstSDPMedia *media); -GstSDPResult gst_sdp_media_free (GstSDPMedia *media); - -gchar* gst_sdp_media_as_text (const GstSDPMedia *media); - -/* m= / ... */ -const gchar* gst_sdp_media_get_media (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_media (GstSDPMedia *media, const gchar *med); - -guint gst_sdp_media_get_port (const GstSDPMedia *media); -guint gst_sdp_media_get_num_ports (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_port_info (GstSDPMedia *media, guint port, - guint num_ports); - -const gchar* gst_sdp_media_get_proto (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_proto (GstSDPMedia *media, const gchar *proto); - -guint gst_sdp_media_formats_len (const GstSDPMedia *media); -const gchar* gst_sdp_media_get_format (const GstSDPMedia *media, guint idx); -GstSDPResult gst_sdp_media_add_format (GstSDPMedia *media, const gchar *format); - -/* i= */ -const gchar* gst_sdp_media_get_information (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_information (GstSDPMedia *media, const gchar *information); - -/* c= [/][/] */ -guint gst_sdp_media_connections_len (const GstSDPMedia *media); -const GstSDPConnection* gst_sdp_media_get_connection (const GstSDPMedia *media, guint idx); -GstSDPResult gst_sdp_media_add_connection (GstSDPMedia *media, const gchar *nettype, - const gchar *addrtype, const gchar *address, - guint ttl, guint addr_number); - -/* b=: */ -guint gst_sdp_media_bandwidths_len (const GstSDPMedia *media); -const GstSDPBandwidth* gst_sdp_media_get_bandwidth (const GstSDPMedia *media, guint idx); -GstSDPResult gst_sdp_media_add_bandwidth (GstSDPMedia *media, const gchar *bwtype, - guint bandwidth); - -/* k=: */ -const GstSDPKey* gst_sdp_media_get_key (const GstSDPMedia *media); -GstSDPResult gst_sdp_media_set_key (GstSDPMedia *media, const gchar *type, - const gchar *data); -/* a=... */ -guint gst_sdp_media_attributes_len (const GstSDPMedia *media); -const GstSDPAttribute * gst_sdp_media_get_attribute (const GstSDPMedia *media, guint idx); -const gchar* gst_sdp_media_get_attribute_val (const GstSDPMedia *media, const gchar *key); -const gchar* gst_sdp_media_get_attribute_val_n (const GstSDPMedia *media, const gchar *key, - guint nth); -GstSDPResult gst_sdp_media_add_attribute (GstSDPMedia *media, const gchar *key, - const gchar *value); - -G_END_DECLS - -#endif /* __GST_SDP_MESSAGE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h deleted file mode 100644 index 05dd3dee..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/signalprocessor/gstsignalprocessor.h +++ /dev/null @@ -1,136 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen - * 2005 Wim Taymans - * - * gstsignalprocessor.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_SIGNAL_PROCESSOR_H__ -#define __GST_SIGNAL_PROCESSOR_H__ - -#include -#include - -G_BEGIN_DECLS - - -typedef enum -{ - GST_SIGNAL_PROCESSOR_CLASS_FLAG_CAN_PROCESS_IN_PLACE = 1<<0 -} GstSignalProcessorClassFlags; - -#define GST_SIGNAL_PROCESSOR_CLASS_CAN_PROCESS_IN_PLACE(klass) \ - (GST_SIGNAL_PROCESSOR_CLASS (klass)->flags & \ - GST_SIGNAL_PROCESSOR_CLASS_FLAG_CAN_PROCESS_IN_PLACE) -#define GST_SIGNAL_PROCESSOR_CLASS_SET_CAN_PROCESS_IN_PLACE(klass) \ - GST_SIGNAL_PROCESSOR_CLASS (klass)->flags |= \ - GST_SIGNAL_PROCESSOR_CLASS_FLAG_CAN_PROCESS_IN_PLACE - -typedef enum -{ - GST_SIGNAL_PROCESSOR_STATE_NULL, - GST_SIGNAL_PROCESSOR_STATE_INITIALIZED, - GST_SIGNAL_PROCESSOR_STATE_RUNNING -} GstSignalProcessorState; - - -#define GST_TYPE_SIGNAL_PROCESSOR (gst_signal_processor_get_type()) -#define GST_SIGNAL_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SIGNAL_PROCESSOR,GstSignalProcessor)) -#define GST_SIGNAL_PROCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SIGNAL_PROCESSOR,GstSignalProcessorClass)) -#define GST_SIGNAL_PROCESSOR_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_SIGNAL_PROCESSOR,GstSignalProcessorClass)) -#define GST_IS_SIGNAL_PROCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SIGNAL_PROCESSOR)) -#define GST_IS_SIGNAL_PROCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SIGNAL_PROCESSOR)) - -#define GST_SIGNAL_PROCESSOR_IS_INITIALIZED(obj) \ - (GST_SIGNAL_PROCESSOR (obj)->state >= GST_SIGNAL_PROCESSOR_STATE_INITIALIZED) -#define GST_SIGNAL_PROCESSOR_IS_RUNNING(obj) \ - (GST_SIGNAL_PROCESSOR (obj)->state == GST_SIGNAL_PROCESSOR_STATE_RUNNING) - -typedef struct _GstSignalProcessorGroup GstSignalProcessorGroup; -typedef struct _GstSignalProcessor GstSignalProcessor; -typedef struct _GstSignalProcessorClass GstSignalProcessorClass; - - -struct _GstSignalProcessorGroup { - guint channels; /**< Number of channels in buffers */ - guint nframes; /**< Number of frames currently allocated per channel */ - GstMapInfo interleaved_map; /**< Interleaved buffer (c1c2c1c2...)*/ - gfloat *buffer; /**< De-interleaved buffer (c1c1...c2c2...) */ -}; - -struct _GstSignalProcessor { - GstElement element; - - /* state */ - GstCaps *caps; - GstSignalProcessorState state; - GstFlowReturn flow_state; - GstPadMode mode; - - /* pending inputs before processing can take place */ - guint pending_in; - /* pending outputs to be filled */ - guint pending_out; - - /* multi-channel signal pads */ - GstSignalProcessorGroup *group_in; - GstSignalProcessorGroup *group_out; - - /* single channel signal pads */ - GstMapInfo *audio_in; - GstMapInfo *audio_out; - - /* sampling rate */ - gint sample_rate; - -}; - -struct _GstSignalProcessorClass { - GstElementClass parent_class; - - /*< public >*/ - guint num_group_in; - guint num_group_out; - guint num_audio_in; - guint num_audio_out; - - guint flags; - - /* virtual methods for subclasses */ - - gboolean (*setup) (GstSignalProcessor *self, GstCaps *caps); - gboolean (*start) (GstSignalProcessor *self); - void (*stop) (GstSignalProcessor *self); - void (*cleanup) (GstSignalProcessor *self); - void (*process) (GstSignalProcessor *self, guint num_frames); - gboolean (*event) (GstSignalProcessor *self, GstEvent *event); -}; - - -GType gst_signal_processor_get_type (void); -void gst_signal_processor_class_add_pad_template (GstSignalProcessorClass *klass, - const gchar *name, GstPadDirection direction, guint index, guint channels); - - - -G_END_DECLS - - -#endif /* __GST_SIGNAL_PROCESSOR_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagdemux.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagdemux.h deleted file mode 100644 index ba49447a..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagdemux.h +++ /dev/null @@ -1,138 +0,0 @@ -/* GStreamer Base Class for Tag Demuxing - * Copyright (C) 2005 Jan Schmidt - * Copyright (C) 2006 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_TAG_DEMUX_H__ -#define __GST_TAG_DEMUX_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_DEMUX (gst_tag_demux_get_type()) -#define GST_TAG_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TAG_DEMUX,GstTagDemux)) -#define GST_TAG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAG_DEMUX,GstTagDemuxClass)) -#define GST_IS_TAG_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAG_DEMUX)) -#define GST_IS_TAG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAG_DEMUX)) - -typedef struct _GstTagDemux GstTagDemux; -typedef struct _GstTagDemuxClass GstTagDemuxClass; -typedef struct _GstTagDemuxPrivate GstTagDemuxPrivate; - -/** - * GstTagDemuxResult: - * @GST_TAG_DEMUX_RESULT_BROKEN_TAG: cannot parse tag, just skip it - * @GST_TAG_DEMUX_RESULT_AGAIN : call again with less or more data - * @GST_TAG_DEMUX_RESULT_OK : parsed tag successfully - * - * Result values from the parse_tag virtual function. - */ -typedef enum { - GST_TAG_DEMUX_RESULT_BROKEN_TAG, - GST_TAG_DEMUX_RESULT_AGAIN, - GST_TAG_DEMUX_RESULT_OK -} GstTagDemuxResult; - -GType gst_tag_demux_result_get_type (void); -#define GST_TYPE_TAG_DEMUX_RESULT (gst_tag_demux_result_get_type()) - -/** - * GstTagDemux: - * @element: parent element - * - * Opaque #GstTagDemux structure. - */ -struct _GstTagDemux -{ - GstElement element; - - /*< private >*/ - GstTagDemuxPrivate *priv; - - gpointer reserved[GST_PADDING]; -}; - -/** - * GstTagDemuxClass: - * @parent_class: the parent class. - * @min_start_size: minimum size required to identify a tag at the start and - * determine its total size. Set to 0 if not interested in start tags. - * Subclasses should set this in their class_init function. - * @min_end_size: minimum size required to identify a tag at the end and - * determine its total size. Set to 0 if not interested in end tags. - * Subclasses should set this in their class_init function. - * @identify_tag: identify tag and determine the size required to parse the - * tag. Buffer may be larger than the specified minimum size. - * Subclassed MUST override this vfunc in their class_init function. - * @parse_tag: parse the tag. Buffer will be exactly of the size determined by - * the identify_tag vfunc before. The parse_tag vfunc may change the size - * stored in *tag_size and return GST_TAG_DEMUX_RESULT_AGAIN to request a - * larger or smaller buffer. It is also permitted to adjust the tag_size to a - * smaller value and then return GST_TAG_DEMUX_RESULT_OK in one go. - * Subclassed MUST override the parse_tag vfunc in their class_init function. - * @merge_tags: merge start and end tags. Subclasses may want to override this - * vfunc to allow prioritising of start or end tag according to user - * preference. Note that both start_tags and end_tags may be NULL. By default - * start tags are prefered over end tags. - * - * The #GstTagDemuxClass structure. See documentation at beginning of section - * for details about what subclasses need to override and do. - */ -struct _GstTagDemuxClass -{ - GstElementClass parent_class; - - /* minimum size required to identify a tag at the start and determine - * its total size */ - guint min_start_size; - - /* minimum size required to identify a tag at the end and determine - * its total size */ - guint min_end_size; - - /* vtable */ - - /* identify tag and determine the size required to parse the tag */ - gboolean (*identify_tag) (GstTagDemux * demux, - GstBuffer * buffer, - gboolean start_tag, - guint * tag_size); - - /* parse the tag once it is identified and its size is known */ - GstTagDemuxResult (*parse_tag) (GstTagDemux * demux, - GstBuffer * buffer, - gboolean start_tag, - guint * tag_size, - GstTagList ** tags); - - /* merge start and end tags (optional) */ - GstTagList * (*merge_tags) (GstTagDemux * demux, - const GstTagList * start_tags, - const GstTagList * end_tags); - - /*< private >*/ - gpointer reserved[GST_PADDING]; -}; - -GType gst_tag_demux_get_type (void); - -G_END_DECLS - -#endif /* __GST_TAG_DEMUX_H__ */ - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagmux.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagmux.h deleted file mode 100644 index 8b103e06..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/gsttagmux.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GStreamer tag muxer base class - * Copyright (C) 2006 Christophe Fergeau - * Copyright (C) 2006,2011 Tim-Philipp Müller - * Copyright (C) 2009 Pioneers of the Inevitable - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef GST_TAG_MUX_H -#define GST_TAG_MUX_H - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_MUX \ - (gst_tag_mux_get_type()) -#define GST_TAG_MUX(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TAG_MUX,GstTagMux)) -#define GST_TAG_MUX_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAG_MUX,GstTagMuxClass)) -#define GST_IS_TAG_MUX(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAG_MUX)) -#define GST_IS_TAG_MUX_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAG_MUX)) - -typedef struct _GstTagMux GstTagMux; -typedef struct _GstTagMuxClass GstTagMuxClass; -typedef struct _GstTagMuxPrivate GstTagMuxPrivate; - -/** - * GstTagMux: - * @element: parent element - * - * Opaque #GstTagMux structure. - */ -struct _GstTagMux { - GstElement element; - - /*< private >*/ - GstTagMuxPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstTagMuxClass: - * @parent_class: the parent class. - * @render_start_tag: create a tag buffer to add to the beginning of the - * input stream given a tag list, or NULL - * @render_end_tag: create a tag buffer to add to the end of the - * input stream given a tag list, or NULL - * - * The #GstTagMuxClass structure. Subclasses need to override at least one - * of the two render vfuncs. - */ -struct _GstTagMuxClass { - GstElementClass parent_class; - - /* vfuncs */ - GstBuffer * (*render_start_tag) (GstTagMux * mux, const GstTagList * tag_list); - GstBuffer * (*render_end_tag) (GstTagMux * mux, const GstTagList * tag_list); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_tag_mux_get_type (void); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/tag.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/tag.h deleted file mode 100644 index b75ad6ea..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/tag.h +++ /dev/null @@ -1,591 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Benjamin Otte - * Copyright (C) 2006-2011 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_TAG_TAG_H__ -#define __GST_TAG_TAG_H__ - -#include - -G_BEGIN_DECLS - -/* Tag names */ - -/** - * GST_TAG_MUSICBRAINZ_TRACKID: - * - * MusicBrainz track ID - */ -#define GST_TAG_MUSICBRAINZ_TRACKID "musicbrainz-trackid" -/** - * GST_TAG_MUSICBRAINZ_ARTISTID: - * - * MusicBrainz artist ID - */ -#define GST_TAG_MUSICBRAINZ_ARTISTID "musicbrainz-artistid" -/** - * GST_TAG_MUSICBRAINZ_ALBUMID: - * - * MusicBrainz album ID - */ -#define GST_TAG_MUSICBRAINZ_ALBUMID "musicbrainz-albumid" -/** - * GST_TAG_MUSICBRAINZ_ALBUMARTISTID: - * - * MusicBrainz album artist ID - */ -#define GST_TAG_MUSICBRAINZ_ALBUMARTISTID "musicbrainz-albumartistid" -/** - * GST_TAG_MUSICBRAINZ_TRMID: - * - * MusicBrainz track TRM ID - */ -#define GST_TAG_MUSICBRAINZ_TRMID "musicbrainz-trmid" - -/** - * GST_TAG_CMML_STREAM: - * - * Annodex CMML stream element tag - */ -#define GST_TAG_CMML_STREAM "cmml-stream" -/** - * GST_TAG_CMML_HEAD: - * - * Annodex CMML head element tag - */ - -#define GST_TAG_CMML_HEAD "cmml-head" -/** - * GST_TAG_CMML_CLIP: - * - * Annodex CMML clip element tag - */ -#define GST_TAG_CMML_CLIP "cmml-clip" - -/* CDDA tags */ - -/** - * GST_TAG_CDDA_CDDB_DISCID: - * - * CDDB disc id in its short form (e.g. 'aa063d0f') - */ -#define GST_TAG_CDDA_CDDB_DISCID "discid" - -/** - * GST_TAG_CDDA_CDDB_DISCID_FULL: - * - * CDDB disc id including all details - */ -#define GST_TAG_CDDA_CDDB_DISCID_FULL "discid-full" - -/** - * GST_TAG_CDDA_MUSICBRAINZ_DISCID: - * - * Musicbrainz disc id (e.g. 'ahg7JUcfR3vCYBphSDIogOOWrr0-') - */ -#define GST_TAG_CDDA_MUSICBRAINZ_DISCID "musicbrainz-discid" - -/** - * GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL: - * - * Musicbrainz disc id details - */ -#define GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL "musicbrainz-discid-full" - -/** - * GST_TAG_CAPTURING_SHUTTER_SPEED: - * - * Shutter speed used when capturing an image, in seconds. (fraction) - */ -#define GST_TAG_CAPTURING_SHUTTER_SPEED "capturing-shutter-speed" - -/** - * GST_TAG_CAPTURING_FOCAL_RATIO: - * - * Focal ratio (f-number) used when capturing an image. (double) - * - * The value stored is the denominator of the focal ratio (f-number). - * For example, if this tag value is 2, the focal ratio is f/2. - */ -#define GST_TAG_CAPTURING_FOCAL_RATIO "capturing-focal-ratio" - -/** - * GST_TAG_CAPTURING_FOCAL_LENGTH: - * - * Focal length used when capturing an image, in mm. (double) - */ -#define GST_TAG_CAPTURING_FOCAL_LENGTH "capturing-focal-length" - -/** - * GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO: - * - * Digital zoom ratio used when capturing an image. (double) - */ -#define GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO "capturing-digital-zoom-ratio" - -/** - * GST_TAG_CAPTURING_ISO_SPEED: - * - * ISO speed used when capturing an image. (integer) - */ -#define GST_TAG_CAPTURING_ISO_SPEED "capturing-iso-speed" - -/** - * GST_TAG_CAPTURING_EXPOSURE_PROGRAM: - * - * Type of exposure control used when capturing an image. (string) - * - * The allowed values are: - * "undefined" - * "manual" - * "normal" - automatically controlled - * "aperture-priority" - user selects aperture value - * "shutter-priority" - user selects shutter speed - * "creative" - biased towards depth of field - * "action" - biased towards fast shutter speed - * "portrait" - closeup, leaving background out of focus - * "landscape" - landscape photos, background in focus - */ -#define GST_TAG_CAPTURING_EXPOSURE_PROGRAM "capturing-exposure-program" - -/** - * GST_TAG_CAPTURING_EXPOSURE_MODE: - * - * Exposure mode used when capturing an image. (string) - * - * The allowed values are: - * "auto-exposure" - * "manual-exposure" - * "auto-bracket" - */ -#define GST_TAG_CAPTURING_EXPOSURE_MODE "capturing-exposure-mode" - -/** - * GST_TAG_CAPTURING_EXPOSURE_COMPENSATION: - * - * Exposure compensation using when capturing an image in EV. (double) - */ -#define GST_TAG_CAPTURING_EXPOSURE_COMPENSATION "capturing-exposure-compensation" - -/** - * GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE: - * - * Scene mode used when capturing an image. (string) - * - * The allowed values are: - * "standard" - * "landscape" - * "portrait" - * "night-scene" - */ -#define GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE "capturing-scene-capture-type" - -/** - * GST_TAG_CAPTURING_GAIN_ADJUSTMENT: - * - * Gain adjustment applied to an image. (string) - * - * The allowed values are: - * "none" - * "low-gain-up" - * "high-gain-up" - * "low-gain-down" - * "high-gain-down" - */ -#define GST_TAG_CAPTURING_GAIN_ADJUSTMENT "capturing-gain-adjustment" - -/** - * GST_TAG_CAPTURING_WHITE_BALANCE: - * - * White balance mode used when capturing an image. (string) - * - * The allowed values are: - * "auto" - * "manual" - * "daylight" - * "cloudy" - * "tungsten" - * "fluorescent" - * "fluorescent h" (newer daylight-calibrated fluorescents) - * "flash" - */ -#define GST_TAG_CAPTURING_WHITE_BALANCE "capturing-white-balance" - -/** - * GST_TAG_CAPTURING_CONTRAST: - * - * Direction of contrast processing applied when capturing an image. (string) - * - * The allowed values are: - * "normal" - * "soft" - * "hard" - */ -#define GST_TAG_CAPTURING_CONTRAST "capturing-contrast" - -/** - * GST_TAG_CAPTURING_SATURATION: - * - * Direction of saturation processing applied when capturing an image. (string) - * - * The allowed values are: - * "normal" - * "low-saturation" - * "high-saturation" - */ -#define GST_TAG_CAPTURING_SATURATION "capturing-saturation" - -/** - * GST_TAG_CAPTURING_SHARPNESS: - * - * Direction of sharpness processing applied when capturing an image. (string) - * - * The allowed values are: - * "normal" - * "soft" - * "hard" - */ -#define GST_TAG_CAPTURING_SHARPNESS "capturing-sharpness" - -/** - * GST_TAG_CAPTURING_FLASH_FIRED: - * - * If flash was fired during the capture of an image. (boolean) - * - * Note that if this tag isn't present, it should not be assumed that - * the flash did not fire. It should be treated as unknown. - */ -#define GST_TAG_CAPTURING_FLASH_FIRED "capturing-flash-fired" - -/** - * GST_TAG_CAPTURING_FLASH_MODE: - * - * The flash mode selected during the capture of an image. (string) - * - * The allowed values are: - * "auto" - * "always" - * "never" - */ -#define GST_TAG_CAPTURING_FLASH_MODE "capturing-flash-mode" - -/** - * GST_TAG_CAPTURING_METERING_MODE: - * - * Defines the way a camera determines the exposure. (string) - * - * The allowed values are: - * "unknown" - * "average" - * "center-weighted-average" - * "spot" - * "multi-spot" - * "pattern" - * "partial" - * "other" - */ -#define GST_TAG_CAPTURING_METERING_MODE "capturing-metering-mode" - -/** - * GST_TAG_CAPTURING_SOURCE: - * - * Indicates the source of capture. The device/medium used to do the - * capture. (string) - * - * Allowed values are: - * "dsc" (= digital still camera) - * "transparent-scanner" - * "reflex-scanner" - * "other" - */ -#define GST_TAG_CAPTURING_SOURCE "capturing-source" - -/** - * GST_TAG_IMAGE_HORIZONTAL_PPI: - * - * Media (image/video) intended horizontal pixel density in ppi. (double) - */ -#define GST_TAG_IMAGE_HORIZONTAL_PPI "image-horizontal-ppi" -/** - * GST_TAG_IMAGE_VERTICAL_PPI: - * - * Media (image/video) intended vertical pixel density in ppi. (double) - */ -#define GST_TAG_IMAGE_VERTICAL_PPI "image-vertical-ppi" - - -/* additional information for image tags */ - -/** - * GstTagImageType: - * @GST_TAG_IMAGE_TYPE_NONE : No image type. Can be used to - * tell functions such as gst_tag_image_data_to_image_sample() that no - * image type should be set. - * @GST_TAG_IMAGE_TYPE_UNDEFINED : Undefined/other image type - * @GST_TAG_IMAGE_TYPE_FRONT_COVER : Cover (front) - * @GST_TAG_IMAGE_TYPE_BACK_COVER : Cover (back) - * @GST_TAG_IMAGE_TYPE_LEAFLET_PAGE : Leaflet page - * @GST_TAG_IMAGE_TYPE_MEDIUM : Medium (e.g. label side of CD) - * @GST_TAG_IMAGE_TYPE_LEAD_ARTIST : Lead artist/lead performer/soloist - * @GST_TAG_IMAGE_TYPE_ARTIST : Artist/performer - * @GST_TAG_IMAGE_TYPE_CONDUCTOR : Conductor - * @GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA : Band/orchestra - * @GST_TAG_IMAGE_TYPE_COMPOSER : Composer - * @GST_TAG_IMAGE_TYPE_LYRICIST : Lyricist/text writer - * @GST_TAG_IMAGE_TYPE_RECORDING_LOCATION : Recording location - * @GST_TAG_IMAGE_TYPE_DURING_RECORDING : During recording - * @GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE : During performance - * @GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE : Movie/video screen capture - * @GST_TAG_IMAGE_TYPE_FISH : A fish as funny as the ID3v2 spec - * @GST_TAG_IMAGE_TYPE_ILLUSTRATION : Illustration - * @GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO : Band/artist logotype - * @GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO : Publisher/studio logotype - * - * Type of image contained in an image tag (specified as field in - * the image buffer's caps structure) - */ -/* Note: keep in sync with register_tag_image_type_enum() */ -typedef enum { - GST_TAG_IMAGE_TYPE_NONE = -1, - GST_TAG_IMAGE_TYPE_UNDEFINED = 0, - GST_TAG_IMAGE_TYPE_FRONT_COVER, - GST_TAG_IMAGE_TYPE_BACK_COVER, - GST_TAG_IMAGE_TYPE_LEAFLET_PAGE, - GST_TAG_IMAGE_TYPE_MEDIUM, - GST_TAG_IMAGE_TYPE_LEAD_ARTIST, - GST_TAG_IMAGE_TYPE_ARTIST, - GST_TAG_IMAGE_TYPE_CONDUCTOR, - GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA, - GST_TAG_IMAGE_TYPE_COMPOSER, - GST_TAG_IMAGE_TYPE_LYRICIST, - GST_TAG_IMAGE_TYPE_RECORDING_LOCATION, - GST_TAG_IMAGE_TYPE_DURING_RECORDING, - GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE, - GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE, - GST_TAG_IMAGE_TYPE_FISH, - GST_TAG_IMAGE_TYPE_ILLUSTRATION, - GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO, - GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO -} GstTagImageType; - -#define GST_TYPE_TAG_IMAGE_TYPE (gst_tag_image_type_get_type ()) -GType gst_tag_image_type_get_type (void); - -/** - * GST_TAG_ID3V2_HEADER_SIZE: - * - * ID3V2 header size considered minimum input for some functions such as - * gst_tag_list_from_id3v2_tag() and gst_tag_get_id3v2_tag_size() for example. - */ -#define GST_TAG_ID3V2_HEADER_SIZE 10 - -/* functions for vorbis comment manipulation */ - -const gchar * gst_tag_from_vorbis_tag (const gchar * vorbis_tag); -const gchar * gst_tag_to_vorbis_tag (const gchar * gst_tag); -void gst_vorbis_tag_add (GstTagList * list, - const gchar * tag, - const gchar * value); - -GList * gst_tag_to_vorbis_comments (const GstTagList * list, - const gchar * tag); - -/* functions to convert GstBuffers with vorbiscomment contents to GstTagLists and back */ -GstTagList * gst_tag_list_from_vorbiscomment (const guint8 * data, - gsize size, - const guint8 * id_data, - const guint id_data_length, - gchar ** vendor_string); -GstTagList * gst_tag_list_from_vorbiscomment_buffer (GstBuffer * buffer, - const guint8 * id_data, - const guint id_data_length, - gchar ** vendor_string); -GstBuffer * gst_tag_list_to_vorbiscomment_buffer (const GstTagList * list, - const guint8 * id_data, - const guint id_data_length, - const gchar * vendor_string); - -/* functions for ID3 tag manipulation */ - -/* FIXME 0.11: inconsistent API naming: gst_tag_list_new_from_id3v1(), gst_tag_list_from_*_buffer(), - * gst_tag_list_from_id3v2_tag(). Also, note gst.tag.list_xyz() namespace vs. gst.tag_list_xyz(), - * which is a bit confusing and possibly doesn't map too well */ - -guint gst_tag_id3_genre_count (void); -const gchar * gst_tag_id3_genre_get (const guint id); -GstTagList * gst_tag_list_new_from_id3v1 (const guint8 * data); - -const gchar * gst_tag_from_id3_tag (const gchar * id3_tag); -const gchar * gst_tag_from_id3_user_tag (const gchar * type, - const gchar * id3_user_tag); -const gchar * gst_tag_to_id3_tag (const gchar * gst_tag); - -gboolean gst_tag_list_add_id3_image (GstTagList * tag_list, - const guint8 * image_data, - guint image_data_len, - guint id3_picture_type); - -GstTagList * gst_tag_list_from_id3v2_tag (GstBuffer * buffer); - -guint gst_tag_get_id3v2_tag_size (GstBuffer * buffer); - -/* functions to convert GstBuffers with xmp packets contents to GstTagLists and back */ -GstTagList * gst_tag_list_from_xmp_buffer (GstBuffer * buffer); -GstBuffer * gst_tag_list_to_xmp_buffer (const GstTagList * list, - gboolean read_only, - const gchar ** schemas); -const gchar** gst_tag_xmp_list_schemas (void); - -/* functions related to exif */ -GstBuffer * gst_tag_list_to_exif_buffer (const GstTagList * taglist, - gint byte_order, - guint32 base_offset); - -GstBuffer * gst_tag_list_to_exif_buffer_with_tiff_header (const GstTagList * taglist); - -GstTagList * gst_tag_list_from_exif_buffer (GstBuffer * buffer, - gint byte_order, - guint32 base_offset); - -GstTagList * gst_tag_list_from_exif_buffer_with_tiff_header ( - GstBuffer * buffer); - -/* other tag-related functions */ - -gboolean gst_tag_parse_extended_comment (const gchar * ext_comment, - gchar ** key, - gchar ** lang, - gchar ** value, - gboolean fail_if_no_key); - -gchar * gst_tag_freeform_string_to_utf8 (const gchar * data, - gint size, - const gchar ** env_vars); - -GstSample * gst_tag_image_data_to_image_sample (const guint8 * image_data, - guint image_data_len, - GstTagImageType image_type); - -/* FIXME 0.11: get rid of this awkward register/init function, see tags.c */ -void gst_tag_register_musicbrainz_tags (void); - - -/* language tag related functions */ - -gchar ** gst_tag_get_language_codes (void); - -const gchar * gst_tag_get_language_name (const gchar * language_code); - -const gchar * gst_tag_get_language_code_iso_639_1 (const gchar * lang_code); - -const gchar * gst_tag_get_language_code_iso_639_2B (const gchar * lang_code); - -const gchar * gst_tag_get_language_code_iso_639_2T (const gchar * lang_code); - -gboolean gst_tag_check_language_code (const gchar * lang_code); - -/** - * gst_tag_get_language_code: - * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de") - * - * Convenience macro wrapping gst_tag_get_language_code_iso_639_1(). - */ -#define gst_tag_get_language_code(lang_code) \ - gst_tag_get_language_code_iso_639_1(lang_code) - - -/* functions to deal with (mostly) Creative Commons licenses */ - -/** - * GstTagLicenseFlags: - * @GST_TAG_LICENSE_PERMITS_REPRODUCTION: making multiple copies - * is allowed - * @GST_TAG_LICENSE_PERMITS_DISTRIBUTION: distribution, public display - * and public performance are allowed - * @GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS: distribution of derivative - * works is allowed - * @GST_TAG_LICENSE_PERMITS_SHARING: commercial derivatives are allowed, - * but only non-commercial distribution is allowed - * @GST_TAG_LICENSE_REQUIRES_NOTICE: copyright and license notices - * must be kept intact - * @GST_TAG_LICENSE_REQUIRES_ATTRIBUTION: credit must be given to - * copyright holder and/or author - * @GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE: derivative works must be - * licensed under the same terms or compatible terms as the original work - * @GST_TAG_LICENSE_REQUIRES_SOURCE_CODE: source code (the preferred - * form for making modifications) must be provided when exercising some - * rights granted by the license - * @GST_TAG_LICENSE_REQUIRES_COPYLEFT: derivative and combined works - * must be licensed under specified terms, similar to those of the original - * work - * @GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT: derivative works must be - * licensed under specified terms, with at least the same conditions as - * the original work; combinations with the work may be licensed under - * different terms - * @GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE: exercising rights for - * commercial purposes is prohibited - * @GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE: use in a - * non-developing country is prohibited - * @GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE: this license was created - * by the Creative Commons project - * @GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE: this license was - * created by the Free Software Foundation (FSF) - * - * See http://creativecommons.org/ns for more information. - */ -typedef enum { - GST_TAG_LICENSE_PERMITS_REPRODUCTION = (1 << 0), - GST_TAG_LICENSE_PERMITS_DISTRIBUTION = (1 << 1), - GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS = (1 << 2), - GST_TAG_LICENSE_PERMITS_SHARING = (1 << 3), - - GST_TAG_LICENSE_REQUIRES_NOTICE = (1 << 8), - GST_TAG_LICENSE_REQUIRES_ATTRIBUTION = (1 << 9), - GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE = (1 << 10), - GST_TAG_LICENSE_REQUIRES_SOURCE_CODE = (1 << 11), - GST_TAG_LICENSE_REQUIRES_COPYLEFT = (1 << 12), - GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT = (1 << 13), - - GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE = (1 << 16), - GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE = (1 << 17), - - GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE = (1 << 24), - GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE = (1 << 25) -} GstTagLicenseFlags; - -gchar ** gst_tag_get_licenses (void); - -GstTagLicenseFlags gst_tag_get_license_flags (const gchar * license_ref); - -const gchar * gst_tag_get_license_nick (const gchar * license_ref); - -const gchar * gst_tag_get_license_title (const gchar * license_ref); - -const gchar * gst_tag_get_license_version (const gchar * license_ref); - -const gchar * gst_tag_get_license_description (const gchar * license_ref); - -const gchar * gst_tag_get_license_jurisdiction (const gchar * license_ref); - -GType gst_tag_license_flags_get_type (void); - -G_END_DECLS - -#endif /* __GST_TAG_TAG_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/xmpwriter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/xmpwriter.h deleted file mode 100644 index a7f6e4a9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/tag/xmpwriter.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GStreamer XmpConfig - * Copyright (C) 2011 Thiago Santos - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __TAG_XMP_WRITER_H__ -#define __TAG_XMP_WRITER_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_TAG_XMP_WRITER \ - (gst_tag_xmp_writer_get_type ()) -#define GST_TAG_XMP_WRITER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriter)) -#define GST_TAG_XMP_WRITER_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_CAST ((iface), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriterInterface)) -#define GST_IS_TAG_XMP_WRITER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TAG_XMP_WRITER)) -#define GST_IS_TAG_XMP_WRITER_INTERFACE(iface) \ - (G_TYPE_CHECK_INTERFACE_TYPE ((iface), GST_TYPE_TAG_XMP_WRITER)) -#define GST_TAG_XMP_WRITER_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriterInterface)) - -typedef struct _GstTagXmpWriter GstTagXmpWriter; -typedef struct _GstTagXmpWriterInterface GstTagXmpWriterInterface; - -struct _GstTagXmpWriterInterface { - GTypeInterface parent; -}; - -GType gst_tag_xmp_writer_get_type (void); - -void gst_tag_xmp_writer_add_all_schemas (GstTagXmpWriter * config); - -void gst_tag_xmp_writer_add_schema (GstTagXmpWriter * config, - const gchar * schema); - -gboolean gst_tag_xmp_writer_has_schema (GstTagXmpWriter * config, - const gchar * schema); - -void gst_tag_xmp_writer_remove_schema (GstTagXmpWriter * config, - const gchar * schema); - -void gst_tag_xmp_writer_remove_all_schemas (GstTagXmpWriter * config); - -GstBuffer* gst_tag_xmp_writer_tag_list_to_xmp_buffer (GstTagXmpWriter * config, - const GstTagList * taglist, - gboolean read_only); - -G_END_DECLS - -#endif /* __TAG_XMP_WRITER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalance.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalance.h deleted file mode 100644 index ec5d1722..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalance.h +++ /dev/null @@ -1,114 +0,0 @@ -/* GStreamer Color Balance - * Copyright (C) 2003 Ronald Bultje - * - * color-balance.h: image color balance interface design - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_COLOR_BALANCE_H__ -#define __GST_COLOR_BALANCE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_COLOR_BALANCE \ - (gst_color_balance_get_type ()) -#define GST_COLOR_BALANCE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE, GstColorBalance)) -#define GST_IS_COLOR_BALANCE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE)) -#define GST_COLOR_BALANCE_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_COLOR_BALANCE, GstColorBalanceInterface)) - -typedef struct _GstColorBalance GstColorBalance; -typedef struct _GstColorBalanceInterface GstColorBalanceInterface; - -/** - * GstColorBalanceType: - * @GST_COLOR_BALANCE_HARDWARE: Color balance is implemented with dedicated - * hardware. - * @GST_COLOR_BALANCE_SOFTWARE: Color balance is implemented via software - * processing. - * - * An enumeration indicating whether an element implements color balancing - * operations in software or in dedicated hardware. In general, dedicated - * hardware implementations (such as those provided by xvimagesink) are - * preferred. - */ -typedef enum -{ - GST_COLOR_BALANCE_HARDWARE, - GST_COLOR_BALANCE_SOFTWARE -} GstColorBalanceType; - -/** - * GstColorBalanceInterface: - * @iface: the parent interface - * @balance_type: implementation type - * @list_channels: list handled channels - * @set_value: set a channel value - * @get_value: get a channel value - * @value_changed: default handler for value changed notification - * - * Color-balance interface. - */ -struct _GstColorBalanceInterface { - GTypeInterface iface; - - /* virtual functions */ - const GList * (* list_channels) (GstColorBalance *balance); - - void (* set_value) (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); - gint (* get_value) (GstColorBalance *balance, - GstColorBalanceChannel *channel); - GstColorBalanceType (*get_balance_type) (GstColorBalance *balance); - - /* signals */ - void (* value_changed) (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_color_balance_get_type (void); - -/* virtual class function wrappers */ -const GList * - gst_color_balance_list_channels (GstColorBalance *balance); -void gst_color_balance_set_value (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); -gint gst_color_balance_get_value (GstColorBalance *balance, - GstColorBalanceChannel *channel); - -GstColorBalanceType - gst_color_balance_get_balance_type (GstColorBalance *balance); - -/* trigger signal */ -void gst_color_balance_value_changed (GstColorBalance *balance, - GstColorBalanceChannel *channel, - gint value); - -G_END_DECLS - -#endif /* __GST_COLOR_BALANCE_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalancechannel.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalancechannel.h deleted file mode 100644 index ca23ee2c..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/colorbalancechannel.h +++ /dev/null @@ -1,85 +0,0 @@ -/* GStreamer Color Balance - * Copyright (C) 2003 Ronald Bultje - * - * colorbalancechannel.h: individual channel object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_COLOR_BALANCE_CHANNEL_H__ -#define __GST_COLOR_BALANCE_CHANNEL_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_COLOR_BALANCE_CHANNEL \ - (gst_color_balance_channel_get_type ()) -#define GST_COLOR_BALANCE_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL, \ - GstColorBalanceChannel)) -#define GST_COLOR_BALANCE_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL, \ - GstColorBalanceChannelClass)) -#define GST_IS_COLOR_BALANCE_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL)) -#define GST_IS_COLOR_BALANCE_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL)) - -typedef struct _GstColorBalanceChannel GstColorBalanceChannel; -typedef struct _GstColorBalanceChannelClass GstColorBalanceChannelClass; - -/** - * GstColorBalanceChannel: - * @label: A string containing a descriptive name for this channel - * @min_value: The minimum valid value for this channel. - * @max_value: The maximum valid value for this channel. - */ -struct _GstColorBalanceChannel { - GObject parent; - - /*< public >*/ - gchar *label; - gint min_value; - gint max_value; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstColorBalanceChannelClass: - * @parent: the parent class - * @value_changed: default handler for value changed notification - * - * Color-balance channel class. - */ -struct _GstColorBalanceChannelClass { - GObjectClass parent; - - /* signals */ - void (* value_changed) (GstColorBalanceChannel *channel, - gint value); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_color_balance_channel_get_type (void); - -G_END_DECLS - -#endif /* __GST_COLOR_BALANCE_CHANNEL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h deleted file mode 100644 index 70249449..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfaceconverter.h +++ /dev/null @@ -1,65 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2011 Intel - * - * Author: Nicolas Dufresne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_SURFACE_CONVERTER_H_ -#define _GST_SURFACE_CONVERTER_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "GstSurfaceConverter is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_SURFACE_CONVERTER (gst_surface_converter_get_type ()) -#define GST_SURFACE_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverter)) -#define GST_IS_SURFACE_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SURFACE_CONVERTER)) -#define GST_SURFACE_CONVERTER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverterInterface)) - -typedef struct _GstSurfaceConverter GstSurfaceConverter; -typedef struct _GstSurfaceConverterInterface GstSurfaceConverterInterface; - -/** - * GstSurfaceConverterInterface: - * @parent: parent interface type. - * @upload: vmethod to upload #GstSurfaceBuffer. - * - * #GstSurfaceConverterInterface interface. - */ -struct _GstSurfaceConverterInterface -{ - GTypeInterface parent; - - gboolean (*upload) (GstSurfaceConverter *converter, - GstBuffer *buffer); -}; - -GType gst_surface_converter_get_type (void); - -gboolean gst_surface_converter_upload (GstSurfaceConverter *converter, - GstBuffer *buffer); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfacemeta.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfacemeta.h deleted file mode 100644 index ed04bc28..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstsurfacemeta.h +++ /dev/null @@ -1,68 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2011 Intel - * - * Author: Nicolas Dufresne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_SURFACE_META_H_ -#define _GST_SURFACE_META_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "GstSurfaceMeta is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstSurfaceMeta GstSurfaceMeta; - -/** - * GstSurfaceMeta: - * @create_converter: vmethod to create a converter. - * - */ -struct _GstSurfaceMeta { - GstMeta meta; - - GstSurfaceConverter * (*create_converter) (GstSurfaceMeta *meta, - const gchar *type, - GValue *dest); -}; - -GType gst_surface_meta_api_get_type (void); -#define GST_SURFACE_META_API_TYPE (gst_surface_meta_api_get_type()) - -const GstMetaInfo *gst_surface_meta_get_info (void); -#define GST_SURFACE_META_INFO (gst_surface_meta_get_info()) - -#define gst_buffer_get_surface_meta(b) \ - ((GstSurfaceMeta*)gst_buffer_get_meta((b),GST_SURFACE_META_API_TYPE)) -#define gst_buffer_add_surface_meta(b) \ - ((GstSurfaceMeta*)gst_buffer_add_meta((b),GST_SURFACE_META_INFO,NULL)) - -GstSurfaceConverter *gst_surface_meta_create_converter (GstSurfaceMeta *meta, - const gchar *type, - GValue *dest); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideodecoder.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideodecoder.h deleted file mode 100644 index 8e2b7c70..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideodecoder.h +++ /dev/null @@ -1,371 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * Copyright (C) 2012 Collabora Ltd. - * Author : Edward Hervey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_VIDEO_DECODER_H_ -#define _GST_VIDEO_DECODER_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_DECODER \ - (gst_video_decoder_get_type()) -#define GST_VIDEO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_DECODER,GstVideoDecoder)) -#define GST_VIDEO_DECODER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_DECODER,GstVideoDecoderClass)) -#define GST_VIDEO_DECODER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_VIDEO_DECODER,GstVideoDecoderClass)) -#define GST_IS_VIDEO_DECODER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_DECODER)) -#define GST_IS_VIDEO_DECODER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_DECODER)) - -/** - * GST_VIDEO_DECODER_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_VIDEO_DECODER_SINK_NAME "sink" -/** - * GST_VIDEO_DECODER_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_VIDEO_DECODER_SRC_NAME "src" - -/** - * GST_VIDEO_DECODER_SRC_PAD: - * @obj: a #GstVideoDecoder - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_VIDEO_DECODER_SRC_PAD(obj) (((GstVideoDecoder *) (obj))->srcpad) - -/** - * GST_VIDEO_DECODER_SINK_PAD: - * @obj: a #GstVideoDecoder - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_VIDEO_DECODER_SINK_PAD(obj) (((GstVideoDecoder *) (obj))->sinkpad) -/** - * GST_VIDEO_DECODER_FLOW_NEED_DATA: - * - * Returned while parsing to indicate more data is needed. - **/ -#define GST_VIDEO_DECODER_FLOW_NEED_DATA GST_FLOW_CUSTOM_SUCCESS - -/** - * GST_VIDEO_DECODER_INPUT_SEGMENT: - * @obj: base decoder instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_DECODER_INPUT_SEGMENT(obj) (GST_VIDEO_DECODER_CAST (obj)->input_segment) - -/** - * GST_VIDEO_DECODER_OUTPUT_SEGMENT: - * @obj: base decoder instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_DECODER_OUTPUT_SEGMENT(obj) (GST_VIDEO_DECODER_CAST (obj)->output_segment) - -/** - * GST_VIDEO_DECODER_STREAM_LOCK: - * @decoder: video decoder instance - * - * Obtain a lock to protect the decoder function from concurrent access. - */ -#define GST_VIDEO_DECODER_STREAM_LOCK(decoder) g_rec_mutex_lock (&GST_VIDEO_DECODER (decoder)->stream_lock) - -/** - * GST_VIDEO_DECODER_STREAM_UNLOCK: - * @decoder: video decoder instance - * - * Release the lock that protects the decoder function from concurrent access. - */ -#define GST_VIDEO_DECODER_STREAM_UNLOCK(decoder) g_rec_mutex_unlock (&GST_VIDEO_DECODER (decoder)->stream_lock) - -typedef struct _GstVideoDecoder GstVideoDecoder; -typedef struct _GstVideoDecoderClass GstVideoDecoderClass; -typedef struct _GstVideoDecoderPrivate GstVideoDecoderPrivate; - - -/* do not use this one, use macro below */ -GstFlowReturn _gst_video_decoder_error (GstVideoDecoder *dec, gint weight, - GQuark domain, gint code, - gchar *txt, gchar *debug, - const gchar *file, const gchar *function, - gint line); - -/** - * GST_VIDEO_DECODER_ERROR: - * @el: the base video decoder element that generates the error - * @w: element defined weight of the error, added to error count - * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError) - * @code: error code defined for that domain (see #gstreamer-GstGError) - * @text: the message to display (format string and args enclosed in - * parentheses) - * @debug: debugging information for the message (format string and args - * enclosed in parentheses) - * @ret: variable to receive return value - * - * Utility function that video decoder elements can use in case they encountered - * a data processing error that may be fatal for the current "data unit" but - * need not prevent subsequent decoding. Such errors are counted and if there - * are too many, as configured in the context's max_errors, the pipeline will - * post an error message and the application will be requested to stop further - * media processing. Otherwise, it is considered a "glitch" and only a warning - * is logged. In either case, @ret is set to the proper value to - * return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK). - */ -#define GST_VIDEO_DECODER_ERROR(el, w, domain, code, text, debug, ret) \ -G_STMT_START { \ - gchar *__txt = _gst_element_error_printf text; \ - gchar *__dbg = _gst_element_error_printf debug; \ - GstVideoDecoder *dec = GST_VIDEO_DECODER (el); \ - ret = _gst_video_decoder_error (dec, w, GST_ ## domain ## _ERROR, \ - GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__, \ - GST_FUNCTION, __LINE__); \ -} G_STMT_END - -/** - * GST_VIDEO_DECODER_MAX_ERRORS: - * - * Default maximum number of errors tolerated before signaling error. - */ -#define GST_VIDEO_DECODER_MAX_ERRORS 10 - - -/** - * GstVideoDecoder: - * - * The opaque #GstVideoDecoder data structure. - */ -struct _GstVideoDecoder -{ - /*< private >*/ - GstElement element; - - /*< protected >*/ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - GstVideoDecoderPrivate *priv; - - /*< private >*/ - void *padding[GST_PADDING_LARGE]; -}; - -/** - * GstVideoDecoderClass: - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Notifies subclass of incoming data format (caps). - * @parse: Required for non-packetized input. - * Allows chopping incoming data into manageable units (frames) - * for subsequent decoding. - * @reset: Optional. - * Allows subclass (decoder) to perform post-seek semantics reset. - * @handle_frame: Provides input data frame to subclass. - * @finish: Optional. - * Called to request subclass to dispatch any pending remaining - * data (e.g. at EOS). - * @sink_event: Optional. - * Event handler on the sink pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @src_event: Optional. - * Event handler on the source pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @handle_frame needs to be overridden, and @set_format - * and likely as well. If non-packetized input is supported or expected, - * @parse needs to be overridden as well. - */ -struct _GstVideoDecoderClass -{ - /*< private >*/ - GstElementClass element_class; - - /*< public >*/ - gboolean (*open) (GstVideoDecoder *decoder); - - gboolean (*close) (GstVideoDecoder *decoder); - - gboolean (*start) (GstVideoDecoder *decoder); - - gboolean (*stop) (GstVideoDecoder *decoder); - - GstFlowReturn (*parse) (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame, - GstAdapter *adapter, - gboolean at_eos); - - gboolean (*set_format) (GstVideoDecoder *decoder, - GstVideoCodecState * state); - - gboolean (*reset) (GstVideoDecoder *decoder, - gboolean hard); - - GstFlowReturn (*finish) (GstVideoDecoder *decoder); - - GstFlowReturn (*handle_frame) (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - - gboolean (*sink_event) (GstVideoDecoder *decoder, - GstEvent *event); - - gboolean (*src_event) (GstVideoDecoder *decoder, - GstEvent *event); - - gboolean (*negotiate) (GstVideoDecoder *decoder); - - gboolean (*decide_allocation) (GstVideoDecoder *decoder, GstQuery *query); - - gboolean (*propose_allocation) (GstVideoDecoder *decoder, GstQuery * query); - - /*< private >*/ - void *padding[GST_PADDING_LARGE]; -}; - -GType gst_video_decoder_get_type (void); - -/* Context parameters */ -void gst_video_decoder_set_packetized (GstVideoDecoder * decoder, - gboolean packetized); - -gboolean gst_video_decoder_get_packetized (GstVideoDecoder * decoder); - -void gst_video_decoder_set_estimate_rate (GstVideoDecoder * dec, - gboolean enabled); - -gint gst_video_decoder_get_estimate_rate (GstVideoDecoder * dec); - -void gst_video_decoder_set_max_errors (GstVideoDecoder * dec, - gint num); - -gint gst_video_decoder_get_max_errors (GstVideoDecoder * dec); - -void gst_video_decoder_set_latency (GstVideoDecoder *decoder, - GstClockTime min_latency, - GstClockTime max_latency); -void gst_video_decoder_get_latency (GstVideoDecoder *decoder, - GstClockTime *min_latency, - GstClockTime *max_latency); - -void gst_video_decoder_get_allocator (GstVideoDecoder *decoder, - GstAllocator **allocator, - GstAllocationParams *params); -GstBufferPool *gst_video_decoder_get_buffer_pool (GstVideoDecoder *decoder); - -/* Object methods */ - -GstVideoCodecFrame *gst_video_decoder_get_frame (GstVideoDecoder *decoder, - int frame_number); - -GstVideoCodecFrame *gst_video_decoder_get_oldest_frame (GstVideoDecoder *decoder); - -GList * gst_video_decoder_get_frames (GstVideoDecoder *decoder); - -/* Parsing related methods */ -void gst_video_decoder_add_to_frame (GstVideoDecoder *decoder, - int n_bytes); -GstFlowReturn gst_video_decoder_have_frame (GstVideoDecoder *decoder); - -GstBuffer *gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder); - -GstFlowReturn gst_video_decoder_allocate_output_frame (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - -GstVideoCodecState *gst_video_decoder_set_output_state (GstVideoDecoder *decoder, - GstVideoFormat fmt, guint width, guint height, - GstVideoCodecState *reference); - -GstVideoCodecState *gst_video_decoder_get_output_state (GstVideoDecoder *decoder); - -gboolean gst_video_decoder_negotiate (GstVideoDecoder * decoder); - -GstClockTimeDiff gst_video_decoder_get_max_decode_time (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - -gdouble gst_video_decoder_get_qos_proportion (GstVideoDecoder * decoder); - -GstFlowReturn gst_video_decoder_finish_frame (GstVideoDecoder *decoder, - GstVideoCodecFrame *frame); - -GstFlowReturn gst_video_decoder_drop_frame (GstVideoDecoder *dec, - GstVideoCodecFrame *frame); - -void gst_video_decoder_merge_tags (GstVideoDecoder *dec, - const GstTagList *tags, - GstTagMergeMode mode); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoencoder.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoencoder.h deleted file mode 100644 index da420365..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoencoder.h +++ /dev/null @@ -1,320 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * Copyright (C) 2012 Collabora Ltd. - * Author : Edward Hervey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_VIDEO_ENCODER_H_ -#define _GST_VIDEO_ENCODER_H_ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_ENCODER \ - (gst_video_encoder_get_type()) -#define GST_VIDEO_ENCODER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_ENCODER,GstVideoEncoder)) -#define GST_VIDEO_ENCODER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_ENCODER,GstVideoEncoderClass)) -#define GST_VIDEO_ENCODER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_VIDEO_ENCODER,GstVideoEncoderClass)) -#define GST_IS_VIDEO_ENCODER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_ENCODER)) -#define GST_IS_VIDEO_ENCODER_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_ENCODER)) -#define GST_VIDEO_ENCODER_CAST(enc) ((GstVideoEncoder*)enc) - -/** - * GST_VIDEO_ENCODER_SINK_NAME: - * - * The name of the templates for the sink pad. - */ -#define GST_VIDEO_ENCODER_SINK_NAME "sink" -/** - * GST_VIDEO_ENCODER_SRC_NAME: - * - * The name of the templates for the source pad. - */ -#define GST_VIDEO_ENCODER_SRC_NAME "src" - -/** - * GST_VIDEO_ENCODER_SRC_PAD: - * @obj: a #GstVideoEncoder - * - * Gives the pointer to the source #GstPad object of the element. - */ -#define GST_VIDEO_ENCODER_SRC_PAD(obj) (((GstVideoEncoder *) (obj))->srcpad) - -/** - * GST_VIDEO_ENCODER_SINK_PAD: - * @obj: a #GstVideoEncoder - * - * Gives the pointer to the sink #GstPad object of the element. - */ -#define GST_VIDEO_ENCODER_SINK_PAD(obj) (((GstVideoEncoder *) (obj))->sinkpad) - -/** - * GST_VIDEO_ENCODER_FLOW_NEED_DATA: - * - * Returned while parsing to indicate more data is needed. - **/ -#define GST_VIDEO_ENCODER_FLOW_NEED_DATA GST_FLOW_CUSTOM_SUCCESS - -/** - * GST_VIDEO_ENCODER_FLOW_DROPPED: - * - * Returned when the event/buffer should be dropped. - */ -#define GST_VIDEO_ENCODER_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS_1 - -/** - * GST_VIDEO_ENCODER_INPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_ENCODER_INPUT_SEGMENT(obj) (GST_VIDEO_ENCODER_CAST (obj)->input_segment) - -/** - * GST_VIDEO_ENCODER_OUTPUT_SEGMENT: - * @obj: base parse instance - * - * Gives the segment of the element. - */ -#define GST_VIDEO_ENCODER_OUTPUT_SEGMENT(obj) (GST_VIDEO_ENCODER_CAST (obj)->output_segment) - -/** - * GST_VIDEO_ENCODER_STREAM_LOCK: - * @encoder: video encoder instance - * - * Obtain a lock to protect the encoder function from concurrent access. - */ -#define GST_VIDEO_ENCODER_STREAM_LOCK(encoder) g_rec_mutex_lock (&GST_VIDEO_ENCODER (encoder)->stream_lock) - -/** - * GST_VIDEO_ENCODER_STREAM_UNLOCK: - * @encoder: video encoder instance - * - * Release the lock that protects the encoder function from concurrent access. - */ -#define GST_VIDEO_ENCODER_STREAM_UNLOCK(encoder) g_rec_mutex_unlock (&GST_VIDEO_ENCODER (encoder)->stream_lock) - -typedef struct _GstVideoEncoder GstVideoEncoder; -typedef struct _GstVideoEncoderPrivate GstVideoEncoderPrivate; -typedef struct _GstVideoEncoderClass GstVideoEncoderClass; - -/** - * GstVideoEncoder: - * - * The opaque #GstVideoEncoder data structure. - */ -struct _GstVideoEncoder -{ - /*< private >*/ - GstElement element; - - /*< protected >*/ - GstPad *sinkpad; - GstPad *srcpad; - - /* protects all data processing, i.e. is locked - * in the chain function, finish_frame and when - * processing serialized events */ - GRecMutex stream_lock; - - /* MT-protected (with STREAM_LOCK) */ - GstSegment input_segment; - GstSegment output_segment; - - /*< private >*/ - GstVideoEncoderPrivate *priv; - - void *padding[GST_PADDING_LARGE]; -}; - -/** - * GstVideoEncoderClass: - * @open: Optional. - * Called when the element changes to GST_STATE_READY. - * Allows opening external resources. - * @close: Optional. - * Called when the element changes to GST_STATE_NULL. - * Allows closing external resources. - * @start: Optional. - * Called when the element starts processing. - * Allows opening external resources. - * @stop: Optional. - * Called when the element stops processing. - * Allows closing external resources. - * @set_format: Optional. - * Notifies subclass of incoming data format. - * GstVideoCodecState fields have already been - * set according to provided caps. - * @handle_frame: Provides input frame to subclass. - * @reset: Optional. - * Allows subclass (encoder) to perform post-seek semantics reset. - * @finish: Optional. - * Called to request subclass to dispatch any pending remaining - * data (e.g. at EOS). - * @pre_push: Optional. - * Allows subclass to push frame downstream in whatever - * shape or form it deems appropriate. If not provided, - * provided encoded frame data is simply pushed downstream. - * @getcaps: Optional. - * Allows for a custom sink getcaps implementation (e.g. - * for multichannel input specification). If not implemented, - * default returns gst_video_encoder_proxy_getcaps - * applied to sink template caps. - * @sink_event: Optional. - * Event handler on the sink pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @src_event: Optional. - * Event handler on the source pad. This function should return - * TRUE if the event was handled and should be discarded - * (i.e. not unref'ed). - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @negotiate: Optional. - * Negotiate with downstream and configure buffer pools, etc. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @decide_allocation: Optional. - * Setup the allocation parameters for allocating output - * buffers. The passed in query contains the result of the - * downstream allocation query. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * @propose_allocation: Optional. - * Propose buffer allocation parameters for upstream elements. - * Subclasses should chain up to the parent implementation to - * invoke the default handler. - * - * Subclasses can override any of the available virtual methods or not, as - * needed. At minimum @handle_frame needs to be overridden, and @set_format - * and @get_caps are likely needed as well. - */ -struct _GstVideoEncoderClass -{ - /*< private >*/ - GstElementClass element_class; - - /*< public >*/ - /* virtual methods for subclasses */ - gboolean (*open) (GstVideoEncoder *encoder); - - gboolean (*close) (GstVideoEncoder *encoder); - - gboolean (*start) (GstVideoEncoder *encoder); - - gboolean (*stop) (GstVideoEncoder *encoder); - - gboolean (*set_format) (GstVideoEncoder *encoder, - GstVideoCodecState *state); - - GstFlowReturn (*handle_frame) (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame); - - gboolean (*reset) (GstVideoEncoder *encoder, - gboolean hard); - - GstFlowReturn (*finish) (GstVideoEncoder *encoder); - - GstFlowReturn (*pre_push) (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame); - - GstCaps * (*getcaps) (GstVideoEncoder *enc, - GstCaps *filter); - - gboolean (*sink_event) (GstVideoEncoder *encoder, - GstEvent *event); - - gboolean (*src_event) (GstVideoEncoder *encoder, - GstEvent *event); - - gboolean (*negotiate) (GstVideoEncoder *encoder); - - gboolean (*decide_allocation) (GstVideoEncoder *encoder, GstQuery *query); - - gboolean (*propose_allocation) (GstVideoEncoder * encoder, - GstQuery * query); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; -}; - -GType gst_video_encoder_get_type (void); - -GstVideoCodecState* gst_video_encoder_get_output_state (GstVideoEncoder *encoder); - -GstVideoCodecState* gst_video_encoder_set_output_state (GstVideoEncoder * encoder, - GstCaps * caps, - GstVideoCodecState * reference); - -gboolean gst_video_encoder_negotiate (GstVideoEncoder * encoder); - -GstVideoCodecFrame* gst_video_encoder_get_frame (GstVideoEncoder *encoder, - int frame_number); -GstVideoCodecFrame* gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder); - -GList * gst_video_encoder_get_frames (GstVideoEncoder *encoder); - -GstBuffer * gst_video_encoder_allocate_output_buffer (GstVideoEncoder * encoder, - gsize size); - -GstFlowReturn gst_video_encoder_allocate_output_frame (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame, - gsize size); - -GstFlowReturn gst_video_encoder_finish_frame (GstVideoEncoder *encoder, - GstVideoCodecFrame *frame); - -GstCaps * gst_video_encoder_proxy_getcaps (GstVideoEncoder * enc, - GstCaps * caps, - GstCaps * filter); -void gst_video_encoder_set_discont (GstVideoEncoder *encoder); -gboolean gst_video_encoder_get_discont (GstVideoEncoder *encoder); - -void gst_video_encoder_set_latency (GstVideoEncoder *encoder, - GstClockTime min_latency, - GstClockTime max_latency); -void gst_video_encoder_get_latency (GstVideoEncoder *encoder, - GstClockTime *min_latency, - GstClockTime *max_latency); - -void gst_video_encoder_set_headers (GstVideoEncoder *encoder, - GList *headers); - -void gst_video_encoder_merge_tags (GstVideoEncoder *encoder, - const GstTagList *tags, - GstTagMergeMode mode); - -void gst_video_encoder_get_allocator (GstVideoEncoder *encoder, - GstAllocator **allocator, - GstAllocationParams *params); - -G_END_DECLS - -#endif - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideofilter.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideofilter.h deleted file mode 100644 index 8e21ba5d..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideofilter.h +++ /dev/null @@ -1,86 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_VIDEO_FILTER_H__ -#define __GST_VIDEO_FILTER_H__ - -#include -#include - -G_BEGIN_DECLS - -typedef struct _GstVideoFilter GstVideoFilter; -typedef struct _GstVideoFilterClass GstVideoFilterClass; - -#define GST_TYPE_VIDEO_FILTER \ - (gst_video_filter_get_type()) -#define GST_VIDEO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_FILTER,GstVideoFilter)) -#define GST_VIDEO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_FILTER,GstVideoFilterClass)) -#define GST_VIDEO_FILTER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_VIDEO_FILTER, GstVideoFilterClass)) -#define GST_IS_VIDEO_FILTER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_FILTER)) -#define GST_IS_VIDEO_FILTER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_FILTER)) -#define GST_VIDEO_FILTER_CAST(obj) ((GstVideoFilter *)(obj)) - -struct _GstVideoFilter { - GstBaseTransform element; - - gboolean negotiated; - GstVideoInfo in_info; - GstVideoInfo out_info; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstVideoFilterClass: - * @parent_class: the parent class structure - * @set_info: function to be called with the negotiated caps and video infos - * @transform_frame: transform a video frame - * @transform_frame_ip: transform a video frame in place - * - * The video filter class structure. - */ -struct _GstVideoFilterClass { - GstBaseTransformClass parent_class; - - gboolean (*set_info) (GstVideoFilter *filter, - GstCaps *incaps, GstVideoInfo *in_info, - GstCaps *outcaps, GstVideoInfo *out_info); - - /* transform */ - GstFlowReturn (*transform_frame) (GstVideoFilter *filter, - GstVideoFrame *inframe, GstVideoFrame *outframe); - GstFlowReturn (*transform_frame_ip) (GstVideoFilter *trans, GstVideoFrame *frame); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_video_filter_get_type (void); - -G_END_DECLS - -#endif /* __GST_VIDEO_FILTER_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideometa.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideometa.h deleted file mode 100644 index ffba35eb..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideometa.h +++ /dev/null @@ -1,143 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_META_H__ -#define __GST_VIDEO_META_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GST_VIDEO_META_API_TYPE (gst_video_meta_api_get_type()) -#define GST_VIDEO_META_INFO (gst_video_meta_get_info()) -typedef struct _GstVideoMeta GstVideoMeta; - -#define GST_VIDEO_CROP_META_API_TYPE (gst_video_crop_meta_api_get_type()) -#define GST_VIDEO_CROP_META_INFO (gst_video_crop_meta_get_info()) -typedef struct _GstVideoCropMeta GstVideoCropMeta; - -/** - * GstVideoMeta: - * @meta: parent #GstMeta - * @buffer: the buffer this metadata belongs to - * @flags: additional video flags - * @format: the video format - * @id: identifier of the frame - * @width: the video width - * @height: the video height - * @n_planes: the number of planes in the image - * @offset: array of offsets for the planes. This field might not always be - * valid, it is used by the default implementation of @map. - * @stride: array of strides for the planes. This field might not always be - * valid, it is used by the default implementation of @map. - * @map: map the memory of a plane - * @unmap: unmap the memory of a plane - * - * Extra buffer metadata describing image properties - */ -struct _GstVideoMeta { - GstMeta meta; - - GstBuffer *buffer; - - GstVideoFrameFlags flags; - GstVideoFormat format; - gint id; - guint width; - guint height; - - guint n_planes; - gsize offset[GST_VIDEO_MAX_PLANES]; - gint stride[GST_VIDEO_MAX_PLANES]; - - gboolean (*map) (GstVideoMeta *meta, guint plane, GstMapInfo *info, - gpointer *data, gint * stride, GstMapFlags flags); - gboolean (*unmap) (GstVideoMeta *meta, guint plane, GstMapInfo *info); -}; - -GType gst_video_meta_api_get_type (void); -const GstMetaInfo * gst_video_meta_get_info (void); - -#define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE)) -GstVideoMeta * gst_buffer_get_video_meta_id (GstBuffer *buffer, gint id); - -GstVideoMeta * gst_buffer_add_video_meta (GstBuffer *buffer, GstVideoFrameFlags flags, - GstVideoFormat format, guint width, guint height); -GstVideoMeta * gst_buffer_add_video_meta_full (GstBuffer *buffer, GstVideoFrameFlags flags, - GstVideoFormat format, guint width, guint height, - guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES], - gint stride[GST_VIDEO_MAX_PLANES]); - -gboolean gst_video_meta_map (GstVideoMeta *meta, guint plane, GstMapInfo *info, - gpointer *data, gint *stride, GstMapFlags flags); -gboolean gst_video_meta_unmap (GstVideoMeta *meta, guint plane, GstMapInfo *info); - -/** - * GstVideoCropMeta: - * @meta: parent #GstMeta - * @x: the horizontal offset - * @y: the vertical offset - * @width: the cropped width - * @height: the cropped height - * - * Extra buffer metadata describing image cropping. - */ -struct _GstVideoCropMeta { - GstMeta meta; - - guint x; - guint y; - guint width; - guint height; -}; - -GType gst_video_crop_meta_api_get_type (void); -const GstMetaInfo * gst_video_crop_meta_get_info (void); - -#define gst_buffer_get_video_crop_meta(b) ((GstVideoCropMeta*)gst_buffer_get_meta((b),GST_VIDEO_CROP_META_API_TYPE)) -#define gst_buffer_add_video_crop_meta(b) ((GstVideoCropMeta*)gst_buffer_add_meta((b),GST_VIDEO_CROP_META_INFO, NULL)) - -/* video metadata transforms */ - -GQuark gst_video_meta_transform_scale_get_quark (void); -/** - * gst_video_meta_transform_scale: - * - * GQuark for the video "gst-video-scale" transform. - */ -#define GST_VIDEO_META_TRANSFORM_IS_SCALE(type) ((type) == gst_video_meta_transform_scale_get_quark()) - -/** - * GstVideoMetaTransform: - * @old_info: the old #GstVideoInfo - * @new_info: the new #GstVideoInfo - * - * Extra data passed to a video transform #GstMetaTransformFunction such as: - * "gst-video-scale". - */ -typedef struct { - GstVideoInfo *in_info; - GstVideoInfo *out_info; -} GstVideoMetaTransform; - -G_END_DECLS - -#endif /* __GST_VIDEO_META_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideopool.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideopool.h deleted file mode 100644 index c1b3e1e9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideopool.h +++ /dev/null @@ -1,80 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_POOL_H__ -#define __GST_VIDEO_POOL_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GST_BUFFER_POOL_OPTION_VIDEO_META: - * - * An option that can be activated on bufferpool to request video metadata - * on buffers from the pool. - */ -#define GST_BUFFER_POOL_OPTION_VIDEO_META "GstBufferPoolOptionVideoMeta" - -/** - * GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT: - * - * A bufferpool option to enable extra padding. When a bufferpool supports this - * option, gst_buffer_pool_config_set_video_alignment() can be called. - * - * When this option is enabled on the bufferpool, - * #GST_BUFFER_POOL_OPTION_VIDEO_META should also be enabled. - */ -#define GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT "GstBufferPoolOptionVideoAlignment" - -/* setting a bufferpool config */ -void gst_buffer_pool_config_set_video_alignment (GstStructure *config, GstVideoAlignment *align); -gboolean gst_buffer_pool_config_get_video_alignment (GstStructure *config, GstVideoAlignment *align); - -/* video bufferpool */ -typedef struct _GstVideoBufferPool GstVideoBufferPool; -typedef struct _GstVideoBufferPoolClass GstVideoBufferPoolClass; -typedef struct _GstVideoBufferPoolPrivate GstVideoBufferPoolPrivate; - -#define GST_TYPE_VIDEO_BUFFER_POOL (gst_video_buffer_pool_get_type()) -#define GST_IS_VIDEO_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_BUFFER_POOL)) -#define GST_VIDEO_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_BUFFER_POOL, GstVideoBufferPool)) -#define GST_VIDEO_BUFFER_POOL_CAST(obj) ((GstVideoBufferPool*)(obj)) - -struct _GstVideoBufferPool -{ - GstBufferPool bufferpool; - - GstVideoBufferPoolPrivate *priv; -}; - -struct _GstVideoBufferPoolClass -{ - GstBufferPoolClass parent_class; -}; - -GType gst_video_buffer_pool_get_type (void); - -GstBufferPool * gst_video_buffer_pool_new (void); - -G_END_DECLS - -#endif /* __GST_VIDEO_POOL_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideosink.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideosink.h deleted file mode 100644 index ac8dc956..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideosink.h +++ /dev/null @@ -1,130 +0,0 @@ -/* GStreamer video sink base class - * Copyright (C) <2003> Julien Moutte - * Copyright (C) <2009> Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* FIXME 0.11: turn this into a proper base class */ - -#ifndef __GST_VIDEO_SINK_H__ -#define __GST_VIDEO_SINK_H__ - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_SINK (gst_video_sink_get_type()) -#define GST_VIDEO_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_SINK, GstVideoSink)) -#define GST_VIDEO_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VIDEO_SINK, GstVideoSinkClass)) -#define GST_IS_VIDEO_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_SINK)) -#define GST_IS_VIDEO_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VIDEO_SINK)) -#define GST_VIDEO_SINK_GET_CLASS(klass) \ - (G_TYPE_INSTANCE_GET_CLASS ((klass), GST_TYPE_VIDEO_SINK, GstVideoSinkClass)) - -/** - * GST_VIDEO_SINK_CAST: - * @obj: a #GstVideoSink or derived object - * - * Cast @obj to a #GstVideoSink without runtime type check. - */ -#define GST_VIDEO_SINK_CAST(obj) ((GstVideoSink *) (obj)) - -/** - * GST_VIDEO_SINK_PAD: - * @obj: a #GstVideoSink - * - * Get the sink #GstPad of @obj. - */ -#define GST_VIDEO_SINK_PAD(obj) GST_BASE_SINK_PAD(obj) - -#define GST_VIDEO_SINK_WIDTH(obj) (GST_VIDEO_SINK_CAST (obj)->width) -#define GST_VIDEO_SINK_HEIGHT(obj) (GST_VIDEO_SINK_CAST (obj)->height) - -typedef struct _GstVideoSink GstVideoSink; -typedef struct _GstVideoSinkClass GstVideoSinkClass; -typedef struct _GstVideoRectangle GstVideoRectangle; -typedef struct _GstVideoSinkPrivate GstVideoSinkPrivate; - -/** - * GstVideoRectangle: - * @x: X coordinate of rectangle's top-left point - * @y: Y coordinate of rectangle's top-left point - * @w: width of the rectangle - * @h: height of the rectangle - * - * Helper structure representing a rectangular area. - */ -struct _GstVideoRectangle { - gint x; - gint y; - gint w; - gint h; -}; - -/** - * GstVideoSink: - * @height: video height (derived class needs to set this) - * @width: video width (derived class needs to set this) - * - * The video sink instance structure. Derived video sinks should set the - * @height and @width members. - */ -struct _GstVideoSink { - GstBaseSink element; /* FIXME 0.11: this should not be called 'element' */ - - /*< public >*/ - gint width, height; - - /*< private >*/ - GstVideoSinkPrivate *priv; - - gpointer _gst_reserved[GST_PADDING]; -}; - -/** - * GstVideoSinkClass: - * @parent_class: the parent class structure - * @show_frame: render a video frame. Maps to #GstBaseSinkClass.render() and - * #GstBaseSinkClass.preroll() vfuncs. Rendering during preroll will be - * suppressed if the #GstVideoSink:show-preroll-frame property is set to - * %FALSE. - * - * The video sink class structure. Derived classes should override the - * @show_frame virtual function. - */ -struct _GstVideoSinkClass { - GstBaseSinkClass parent_class; - - GstFlowReturn (*show_frame) (GstVideoSink *video_sink, GstBuffer *buf); - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType gst_video_sink_get_type (void); - -void gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst, - GstVideoRectangle *result, gboolean scaling); - -G_END_DECLS - -#endif /* __GST_VIDEO_SINK_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoutils.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoutils.h deleted file mode 100644 index 63833e23..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/gstvideoutils.h +++ /dev/null @@ -1,278 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * Copyright (C) 2012 Collabora Ltd. - * Author : Edward Hervey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_VIDEO_UTILS_H_ -#define _GST_VIDEO_UTILS_H_ - -#include -#include - -G_BEGIN_DECLS -#define GST_TYPE_VIDEO_CODEC_STATE \ - (gst_video_codec_state_get_type()) - -#define GST_TYPE_VIDEO_CODEC_FRAME \ - (gst_video_codec_frame_get_type()) - -typedef struct _GstVideoCodecState GstVideoCodecState; -typedef struct _GstVideoCodecFrame GstVideoCodecFrame; - -/** - * GstVideoCodecState: - * @info: The #GstVideoInfo describing the stream - * @caps: The #GstCaps - * @codec_data: (optional) a #GstBuffer corresponding to the - * 'codec_data' field of a stream. - * - * Structure representing the state of an incoming or outgoing video - * stream for encoders and decoders. - * - * Decoders and encoders will receive such a state through their - * respective @set_format vmethods. - * - * Decoders and encoders can set the downstream state, by using the - * @gst_video_decoder_set_output_state() or - * @gst_video_encoder_set_output_state() methods. - */ -struct _GstVideoCodecState -{ - /*< private >*/ - gint ref_count; - - /*< public >*/ - GstVideoInfo info; - - GstCaps *caps; - - GstBuffer *codec_data; - - /*< private >*/ - void *padding[GST_PADDING_LARGE]; -}; - -/** - * GstVideoCodecFrameFlags: - * @GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY: is the frame only meant to be decoded - * @GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT: is the frame a synchronization point (keyframe) - * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME: should the output frame be made a keyframe - * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS: should the encoder output stream headers - * - * Flags for #GstVideoCodecFrame - */ -typedef enum -{ - GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY = (1<<0), - GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT = (1<<1), - GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME = (1<<2), - GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS = (1<<3) -} GstVideoCodecFrameFlags; - -/** - * GST_VIDEO_CODEC_FRAME_FLAGS: - * @frame: a #GstVideoCodecFrame - * - * The entire set of flags for the @frame - */ -#define GST_VIDEO_CODEC_FRAME_FLAGS(frame) ((frame)->flags) - -/** - * GST_VIDEO_CODEC_FRAME_FLAG_IS_SET: - * @frame: a #GstVideoCodecFrame - * @flag: a flag to check for - * - * Checks whether the given @flag is set - */ -#define GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame,flag) !!(GST_VIDEO_CODEC_FRAME_FLAGS(frame) & (flag)) - -/** - * GST_VIDEO_CODEC_FRAME_FLAG_SET: - * @frame: a #GstVideoCodecFrame - * @flag: Flag to set, can be any number of bits in guint32. - * - * This macro sets the given bits - */ -#define GST_VIDEO_CODEC_FRAME_FLAG_SET(frame,flag) (GST_VIDEO_CODEC_FRAME_FLAGS(frame) |= (flag)) - -/** - * GST_VIDEO_CODEC_FRAME_FLAG_UNSET: - * @frame: a #GstVideoCodecFrame - * @flag: Flag to unset - * - * This macro usets the given bits. - */ -#define GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame,flag) (GST_VIDEO_CODEC_FRAME_FLAGS(frame) &= ~(flag)) - -/** - * GST_VIDEO_CODEC_FRAME_IS_DECODE_ONLY: - * @frame: a #GstVideoCodecFrame - * - * Tests if the buffer should only be decoded but not sent downstream. - */ -#define GST_VIDEO_CODEC_FRAME_IS_DECODE_ONLY(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY)) - -/** - * GST_VIDEO_CODEC_FRAME_SET_DECODE_ONLY: - * @frame: a #GstVideoCodecFrame - * - * Sets the buffer to not be sent downstream. - * - * Decoder implementation can use this if they have frames that - * are not meant to be displayed. - * - * Encoder implementation can safely ignore this field. - */ -#define GST_VIDEO_CODEC_FRAME_SET_DECODE_ONLY(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY)) - -/** - * GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT: - * @frame: a #GstVideoCodecFrame - * - * Tests if the frame is a synchronization point (like a keyframe). - * - * Decoder implementations can use this to detect keyframes. - */ -#define GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT)) - -/** - * GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT: - * @frame: a #GstVideoCodecFrame - * - * Sets the frame to be a synchronization point (like a keyframe). - * - * Encoder implementations should set this accordingly. - * - * Decoder implementing parsing features should set this when they - * detect such a synchronization point. - */ -#define GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT)) -#define GST_VIDEO_CODEC_FRAME_UNSET_SYNC_POINT(frame) (GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame, GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT)) - - -/** - * GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME: - * @frame: a #GstVideoCodecFrame - * - * Tests if the frame must be encoded as a keyframe. Applies only to - * frames provided to encoders. Decoders can safely ignore this field. - */ -#define GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME)) -#define GST_VIDEO_CODEC_FRAME_SET_FORCE_KEYFRAME(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME)) -#define GST_VIDEO_CODEC_FRAME_UNSET_FORCE_KEYFRAME(frame) (GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME)) - -/** - * GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME_HEADERS: - * @frame: a #GstVideoCodecFrame - * - * Tests if encoder should output stream headers before outputting the - * resulting encoded buffer for the given frame. - * - * Applies only to frames provided to encoders. Decoders can safely - * ignore this field. - */ -#define GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME_HEADERS(frame) (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS)) -#define GST_VIDEO_CODEC_FRAME_SET_FORCE_KEYFRAME_HEADERS(frame) (GST_VIDEO_CODEC_FRAME_FLAG_SET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS)) -#define GST_VIDEO_CODEC_FRAME_UNSET_FORCE_KEYFRAME_HEADERS(frame) (GST_VIDEO_CODEC_FRAME_FLAG_UNSET(frame, GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS)) - -/** - * GstVideoCodecFrame: - * @pts: Presentation timestamp - * @dts: Decoding timestamp - * @duration: Duration of the frame - * @system_frame_number: Unique identifier for the frame. Use this if you need - * to get hold of the frame later (like when data is being decoded). - * Typical usage in decoders is to set this on the opaque value provided - * to the library and get back the frame using gst_video_decoder_get_frame() - * @distance_from_sync: Distance in frames from the last synchronization point. - * @input_buffer: the input #GstBuffer that created this frame. The buffer is owned - * by the frame and references to the frame instead of the buffer should - * @output_buffer: the output #GstBuffer. Implementations should set this either - * directly, or by using the @gst_video_decoder_alloc_output_frame() or - * @gst_video_decoder_alloc_output_buffer() methods. The buffer is owned - * by the frame and references to the frame instead of the buffer should - * be kept. - * @deadline: Running time when the frame will be used. - * @events: Events that will be pushed downstream before this frame is pushed. - * - * A #GstVideoCodecFrame represents a video frame both in raw and - * encoded form. - */ -struct _GstVideoCodecFrame -{ - /*< private >*/ - gint ref_count; - - guint32 flags; - - /*< public >*/ - guint32 system_frame_number; /* ED */ - guint32 decode_frame_number; /* ED */ - guint32 presentation_frame_number; /* ED */ - - GstClockTime dts; /* ED */ - GstClockTime pts; /* ED */ - GstClockTime duration; /* ED */ - - int distance_from_sync; /* ED */ - - GstBuffer *input_buffer; /* ED */ - GstBuffer *output_buffer; /* ED */ - - GstClockTime deadline; /* D */ - - /*< private >*/ - - /* Events that should be pushed downstream *before* - * the next output_buffer */ - GList *events; /* ED */ - - gpointer user_data; - GDestroyNotify user_data_destroy_notify; - - union { - struct { - GstClockTime ts; - GstClockTime ts2; - } ABI; - void *padding[GST_PADDING_LARGE]; - } abidata; -}; - -/* GstVideoCodecState */ -GType gst_video_codec_state_get_type (void); - -GstVideoCodecState *gst_video_codec_state_ref (GstVideoCodecState * state); - -void gst_video_codec_state_unref (GstVideoCodecState * state); - - -/* GstVideoCodecFrame */ -GType gst_video_codec_frame_get_type (void); - -GstVideoCodecFrame *gst_video_codec_frame_ref (GstVideoCodecFrame * frame); -void gst_video_codec_frame_unref (GstVideoCodecFrame * frame); -void gst_video_codec_frame_set_user_data (GstVideoCodecFrame *frame, - gpointer user_data, - GDestroyNotify notify); -gpointer gst_video_codec_frame_get_user_data (GstVideoCodecFrame *frame); - -G_END_DECLS - -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/navigation.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/navigation.h deleted file mode 100644 index 2cec16d9..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/navigation.h +++ /dev/null @@ -1,265 +0,0 @@ -/* GStreamer Navigation - * Copyright (C) 2003 Ronald Bultje - * Copyright (C) 2003 David A. Schleef - * - * navigation.h: navigation interface design - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_NAVIGATION_H__ -#define __GST_NAVIGATION_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_NAVIGATION \ - (gst_navigation_get_type ()) -#define GST_NAVIGATION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NAVIGATION, GstNavigation)) -#define GST_IS_NAVIGATION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NAVIGATION)) -#define GST_NAVIGATION_GET_INTERFACE(obj) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_NAVIGATION, GstNavigationInterface)) - -typedef struct _GstNavigation GstNavigation; -typedef struct _GstNavigationInterface GstNavigationInterface; - -/** - * GstNavigationInterface: - * @iface: the parent interface - * @send_event: sending a navigation event - * - * Navigation interface. - */ -struct _GstNavigationInterface { - GTypeInterface iface; - - /* virtual functions */ - void (*send_event) (GstNavigation *navigation, GstStructure *structure); -}; - -GType gst_navigation_get_type (void); - -/* Navigation commands */ - -/** - * GstNavigationCommand: - * @GST_NAVIGATION_COMMAND_INVALID: An invalid command entry - * @GST_NAVIGATION_COMMAND_MENU1: Execute navigation menu command 1. For DVD, - * this enters the DVD root menu, or exits back to the title from the menu. - * @GST_NAVIGATION_COMMAND_MENU2: Execute navigation menu command 2. For DVD, - * this jumps to the DVD title menu. - * @GST_NAVIGATION_COMMAND_MENU3: Execute navigation menu command 3. For DVD, - * this jumps into the DVD root menu. - * @GST_NAVIGATION_COMMAND_MENU4: Execute navigation menu command 4. For DVD, - * this jumps to the Subpicture menu. - * @GST_NAVIGATION_COMMAND_MENU5: Execute navigation menu command 5. For DVD, - * the jumps to the audio menu. - * @GST_NAVIGATION_COMMAND_MENU6: Execute navigation menu command 6. For DVD, - * this jumps to the angles menu. - * @GST_NAVIGATION_COMMAND_MENU7: Execute navigation menu command 7. For DVD, - * this jumps to the chapter menu. - * @GST_NAVIGATION_COMMAND_LEFT: Select the next button to the left in a menu, - * if such a button exists. - * @GST_NAVIGATION_COMMAND_RIGHT: Select the next button to the right in a menu, - * if such a button exists. - * @GST_NAVIGATION_COMMAND_UP: Select the button above the current one in a - * menu, if such a button exists. - * @GST_NAVIGATION_COMMAND_DOWN: Select the button below the current one in a - * menu, if such a button exists. - * @GST_NAVIGATION_COMMAND_ACTIVATE: Activate (click) the currently selected - * button in a menu, if such a button exists. - * @GST_NAVIGATION_COMMAND_PREV_ANGLE: Switch to the previous angle in a - * multiangle feature. - * @GST_NAVIGATION_COMMAND_NEXT_ANGLE: Switch to the next angle in a multiangle - * feature. - * - * A set of commands that may be issued to an element providing the - * #GstNavigation interface. The available commands can be queried via - * the gst_navigation_query_new_commands() query. - * - * For convenience in handling DVD navigation, the MENU commands are aliased as: - * GST_NAVIGATION_COMMAND_DVD_MENU = @GST_NAVIGATION_COMMAND_MENU1 - * GST_NAVIGATION_COMMAND_DVD_TITLE_MENU = @GST_NAVIGATION_COMMAND_MENU2 - * GST_NAVIGATION_COMMAND_DVD_ROOT_MENU = @GST_NAVIGATION_COMMAND_MENU3 - * GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = @GST_NAVIGATION_COMMAND_MENU4 - * GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU = @GST_NAVIGATION_COMMAND_MENU5 - * GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU = @GST_NAVIGATION_COMMAND_MENU6 - * GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU = @GST_NAVIGATION_COMMAND_MENU7 - */ -typedef enum { - GST_NAVIGATION_COMMAND_INVALID = 0, - - GST_NAVIGATION_COMMAND_MENU1 = 1, - GST_NAVIGATION_COMMAND_MENU2 = 2, - GST_NAVIGATION_COMMAND_MENU3 = 3, - GST_NAVIGATION_COMMAND_MENU4 = 4, - GST_NAVIGATION_COMMAND_MENU5 = 5, - GST_NAVIGATION_COMMAND_MENU6 = 6, - GST_NAVIGATION_COMMAND_MENU7 = 7, - - GST_NAVIGATION_COMMAND_LEFT = 20, - GST_NAVIGATION_COMMAND_RIGHT = 21, - GST_NAVIGATION_COMMAND_UP = 22, - GST_NAVIGATION_COMMAND_DOWN = 23, - GST_NAVIGATION_COMMAND_ACTIVATE = 24, - - GST_NAVIGATION_COMMAND_PREV_ANGLE = 30, - GST_NAVIGATION_COMMAND_NEXT_ANGLE = 31 -} GstNavigationCommand; - -/* Some aliases for the menu command types */ -#define GST_NAVIGATION_COMMAND_DVD_MENU GST_NAVIGATION_COMMAND_MENU1 -#define GST_NAVIGATION_COMMAND_DVD_TITLE_MENU GST_NAVIGATION_COMMAND_MENU2 -#define GST_NAVIGATION_COMMAND_DVD_ROOT_MENU GST_NAVIGATION_COMMAND_MENU3 -#define GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU GST_NAVIGATION_COMMAND_MENU4 -#define GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU GST_NAVIGATION_COMMAND_MENU5 -#define GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU GST_NAVIGATION_COMMAND_MENU6 -#define GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU GST_NAVIGATION_COMMAND_MENU7 - -/* Queries */ -/** - * GstNavigationQueryType: - * @GST_NAVIGATION_QUERY_INVALID: invalid query - * @GST_NAVIGATION_QUERY_COMMANDS: command query - * @GST_NAVIGATION_QUERY_ANGLES: viewing angle query - * - * Tyoes of navigation interface queries. - */ -typedef enum -{ - GST_NAVIGATION_QUERY_INVALID = 0, - GST_NAVIGATION_QUERY_COMMANDS = 1, - GST_NAVIGATION_QUERY_ANGLES = 2 -} GstNavigationQueryType; - -GstNavigationQueryType gst_navigation_query_get_type (GstQuery *query); - -GstQuery * gst_navigation_query_new_commands (void); -void gst_navigation_query_set_commands (GstQuery *query, gint n_cmds, ...); -void gst_navigation_query_set_commandsv (GstQuery *query, gint n_cmds, - GstNavigationCommand *cmds); -gboolean gst_navigation_query_parse_commands_length (GstQuery *query, - guint *n_cmds); -gboolean gst_navigation_query_parse_commands_nth (GstQuery *query, guint nth, - GstNavigationCommand *cmd); - -GstQuery * gst_navigation_query_new_angles (void); -void gst_navigation_query_set_angles (GstQuery *query, guint cur_angle, - guint n_angles); -gboolean gst_navigation_query_parse_angles (GstQuery *query, guint *cur_angle, - guint *n_angles); - -/* Element messages */ -/** - * GstNavigationMessageType: - * @GST_NAVIGATION_MESSAGE_INVALID: Returned from - * gst_navigation_message_get_type() when the passed message is not a - * navigation message. - * @GST_NAVIGATION_MESSAGE_MOUSE_OVER: Sent when the mouse moves over or leaves a - * clickable region of the output, such as a DVD menu button. - * @GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED: Sent when the set of available commands - * changes and should re-queried by interested applications. - * @GST_NAVIGATION_MESSAGE_ANGLES_CHANGED: Sent when display angles in a multi-angle - * feature (such as a multiangle DVD) change - either angles have appeared or - * disappeared. - * - * A set of notifications that may be received on the bus when navigation - * related status changes. - */ -typedef enum { - GST_NAVIGATION_MESSAGE_INVALID, - GST_NAVIGATION_MESSAGE_MOUSE_OVER, - GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED, - GST_NAVIGATION_MESSAGE_ANGLES_CHANGED -} GstNavigationMessageType; - -GstNavigationMessageType gst_navigation_message_get_type (GstMessage *message); - -GstMessage * gst_navigation_message_new_mouse_over (GstObject *src, - gboolean active); -gboolean gst_navigation_message_parse_mouse_over (GstMessage *message, - gboolean *active); - -GstMessage * gst_navigation_message_new_commands_changed (GstObject *src); - -GstMessage * gst_navigation_message_new_angles_changed (GstObject *src, - guint cur_angle, - guint n_angles); -gboolean gst_navigation_message_parse_angles_changed (GstMessage *message, - guint *cur_angle, - guint *n_angles); - -/* event parsing functions */ -/** - * GstNavigationEventType: - * @GST_NAVIGATION_EVENT_INVALID: Returned from - * gst_navigation_event_get_type() when the passed event is not a navigation event. - * @GST_NAVIGATION_EVENT_KEY_PRESS: A key press event. Use - * gst_navigation_event_parse_key_event() to extract the details from the event. - * @GST_NAVIGATION_EVENT_KEY_RELEASE: A key release event. Use - * gst_navigation_event_parse_key_event() to extract the details from the event. - * @GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: A mouse button press event. Use - * gst_navigation_event_parse_mouse_button_event() to extract the details from the - * event. - * @GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE: A mouse button release event. Use - * gst_navigation_event_parse_mouse_button_event() to extract the details from the - * event. - * @GST_NAVIGATION_EVENT_MOUSE_MOVE: A mouse movement event. Use - * gst_navigation_event_parse_mouse_move_event() to extract the details from the - * event. - * @GST_NAVIGATION_EVENT_COMMAND: A navigation command event. Use - * gst_navigation_event_parse_command() to extract the details from the event. - * - * Enum values for the various events that an element implementing the - * GstNavigation interface might send up the pipeline. - */ -typedef enum { - GST_NAVIGATION_EVENT_INVALID = 0, - GST_NAVIGATION_EVENT_KEY_PRESS = 1, - GST_NAVIGATION_EVENT_KEY_RELEASE = 2, - GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS = 3, - GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE = 4, - GST_NAVIGATION_EVENT_MOUSE_MOVE = 5, - GST_NAVIGATION_EVENT_COMMAND = 6 -} GstNavigationEventType; - -GstNavigationEventType gst_navigation_event_get_type (GstEvent *event); - -gboolean gst_navigation_event_parse_key_event (GstEvent *event, - const gchar **key); -gboolean gst_navigation_event_parse_mouse_button_event (GstEvent *event, - gint *button, gdouble *x, gdouble *y); -gboolean gst_navigation_event_parse_mouse_move_event (GstEvent *event, - gdouble *x, gdouble *y); -gboolean gst_navigation_event_parse_command (GstEvent *event, - GstNavigationCommand *command); - -/* interface virtual function wrappers */ -void gst_navigation_send_event (GstNavigation *navigation, - GstStructure *structure); -void gst_navigation_send_key_event (GstNavigation *navigation, - const char *event, const char *key); -void gst_navigation_send_mouse_event (GstNavigation *navigation, - const char *event, int button, double x, double y); -void gst_navigation_send_command (GstNavigation *navigation, - GstNavigationCommand command); - -G_END_DECLS - -#endif /* __GST_NAVIGATION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-blend.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-blend.h deleted file mode 100644 index 906752ba..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-blend.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Gstreamer video blending utility functions - * - * Copyright (C) <2011> Intel Corporation - * Copyright (C) <2011> Collabora Ltd. - * Copyright (C) <2011> Thibault Saunier - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_VIDEO_BLEND__ -#define __GST_VIDEO_BLEND__ - -#include -#include - -void gst_video_blend_scale_linear_RGBA (GstVideoInfo * src, GstBuffer * src_buffer, - gint dest_height, gint dest_width, - GstVideoInfo * dest, GstBuffer ** dest_buffer); - -gboolean gst_video_blend (GstVideoFrame * dest, - GstVideoFrame * src, - gint x, gint y, - gfloat global_alpha); - -#endif diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-color.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-color.h deleted file mode 100644 index dcbb66f4..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-color.h +++ /dev/null @@ -1,161 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_COLOR_H__ -#define __GST_VIDEO_COLOR_H__ - -#include - -#include - -G_BEGIN_DECLS - -/** - * GstVideoColorRange: - * @GST_VIDEO_COLOR_RANGE_UNKNOWN: unknown range - * @GST_VIDEO_COLOR_RANGE_0_255: [0..255] for 8 bit components - * @GST_VIDEO_COLOR_RANGE_16_235: [16..235] for 8 bit components. Chroma has - * [16..240] range. - * - * Possible color range values. These constants are defined for 8 bit color - * values and can be scaled for other bit depths. - */ -typedef enum { - GST_VIDEO_COLOR_RANGE_UNKNOWN = 0, - GST_VIDEO_COLOR_RANGE_0_255, - GST_VIDEO_COLOR_RANGE_16_235 -} GstVideoColorRange; - -/** - * GstVideoColorMatrix: - * @GST_VIDEO_COLOR_MATRIX_UNKNOWN: unknown matrix - * @GST_VIDEO_COLOR_MATRIX_RGB: identity matrix - * @GST_VIDEO_COLOR_MATRIX_FCC: FCC color matrix - * @GST_VIDEO_COLOR_MATRIX_BT709: ITU-R BT.709 color matrix - * @GST_VIDEO_COLOR_MATRIX_BT601: ITU-R BT.601 color matrix - * @GST_VIDEO_COLOR_MATRIX_SMPTE240M: SMPTE 240M color matrix - * - * The color matrix is used to convert between Y'PbPr and - * non-linear RGB (R'G'B') - */ -typedef enum { - GST_VIDEO_COLOR_MATRIX_UNKNOWN = 0, - GST_VIDEO_COLOR_MATRIX_RGB, - GST_VIDEO_COLOR_MATRIX_FCC, - GST_VIDEO_COLOR_MATRIX_BT709, - GST_VIDEO_COLOR_MATRIX_BT601, - GST_VIDEO_COLOR_MATRIX_SMPTE240M -} GstVideoColorMatrix; - -/** - * GstVideoTransferFunction: - * @GST_VIDEO_TRANSFER_UNKNOWN: unknown transfer function - * @GST_VIDEO_TRANSFER_GAMMA10: linear RGB, gamma 1.0 curve - * @GST_VIDEO_TRANSFER_GAMMA18: Gamma 1.8 curve - * @GST_VIDEO_TRANSFER_GAMMA20: Gamma 2.0 curve - * @GST_VIDEO_TRANSFER_GAMMA22: Gamma 2.2 curve - * @GST_VIDEO_TRANSFER_BT709: Gamma 2.2 curve with a linear segment in the lower - * range - * @GST_VIDEO_TRANSFER_SMPTE240M: Gamma 2.2 curve with a linear segment in the - * lower range - * @GST_VIDEO_TRANSFER_SRGB: Gamma 2.4 curve with a linear segment in the lower - * range - * @GST_VIDEO_TRANSFER_GAMMA28: Gamma 2.8 curve - * @GST_VIDEO_TRANSFER_LOG100: Logarithmic transfer characteristic - * 100:1 range - * @GST_VIDEO_TRANSFER_LOG316: Logarithmic transfer characteristic - * 316.22777:1 range - * - * The video transfer function defines the formula for converting between - * non-linear RGB (R'G'B') and linear RGB - */ -typedef enum { - GST_VIDEO_TRANSFER_UNKNOWN = 0, - GST_VIDEO_TRANSFER_GAMMA10, - GST_VIDEO_TRANSFER_GAMMA18, - GST_VIDEO_TRANSFER_GAMMA20, - GST_VIDEO_TRANSFER_GAMMA22, - GST_VIDEO_TRANSFER_BT709, - GST_VIDEO_TRANSFER_SMPTE240M, - GST_VIDEO_TRANSFER_SRGB, - GST_VIDEO_TRANSFER_GAMMA28, - GST_VIDEO_TRANSFER_LOG100, - GST_VIDEO_TRANSFER_LOG316 -} GstVideoTransferFunction; - -/** - * GstVideoColorPrimaries: - * @GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: unknown color primaries - * @GST_VIDEO_COLOR_PRIMARIES_BT709: BT709 primaries - * @GST_VIDEO_COLOR_PRIMARIES_BT470M: BT470M primaries - * @GST_VIDEO_COLOR_PRIMARIES_BT470BG: BT470BG primaries - * @GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: SMPTE170M primaries - * @GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: SMPTE240M primaries - * @GST_VIDEO_COLOR_PRIMARIES_FILM: Generic film - * - * The color primaries define the how to transform linear RGB values to and from - * the CIE XYZ colorspace. - */ -typedef enum { - GST_VIDEO_COLOR_PRIMARIES_UNKNOWN = 0, - GST_VIDEO_COLOR_PRIMARIES_BT709, - GST_VIDEO_COLOR_PRIMARIES_BT470M, - GST_VIDEO_COLOR_PRIMARIES_BT470BG, - GST_VIDEO_COLOR_PRIMARIES_SMPTE170M, - GST_VIDEO_COLOR_PRIMARIES_SMPTE240M, - GST_VIDEO_COLOR_PRIMARIES_FILM -} GstVideoColorPrimaries; - -/** - * GstVideoColorimetry: - * @range: the color range. This is the valid range for the samples. - * It is used to convert the samples to Y'PbPr values. - * @matrix: the color matrix. Used to convert between Y'PbPr and - * non-linear RGB (R'G'B') - * @transfer: the transfer function. used to convert between R'G'B' and RGB - * @primaries: color primaries. used to convert between R'G'B' and CIE XYZ - * - * Structure describing the color info. - */ -typedef struct { - GstVideoColorRange range; - GstVideoColorMatrix matrix; - GstVideoTransferFunction transfer; - GstVideoColorPrimaries primaries; -} GstVideoColorimetry; - -/* predefined colorimetry */ -#define GST_VIDEO_COLORIMETRY_BT601 "bt601" -#define GST_VIDEO_COLORIMETRY_BT709 "bt709" -#define GST_VIDEO_COLORIMETRY_SMPTE240M "smpte240m" - -gboolean gst_video_colorimetry_matches (GstVideoColorimetry *cinfo, const gchar *color); -gboolean gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo, const gchar *color); -gchar * gst_video_colorimetry_to_string (GstVideoColorimetry *cinfo); - -/* compute offset and scale */ -void gst_video_color_range_offsets (GstVideoColorRange range, - const GstVideoFormatInfo *info, - gint offset[GST_VIDEO_MAX_COMPONENTS], - gint scale[GST_VIDEO_MAX_COMPONENTS]); - - -G_END_DECLS - -#endif /* __GST_VIDEO_COLOR_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-enumtypes.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-enumtypes.h deleted file mode 100644 index 6e78a829..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-enumtypes.h +++ /dev/null @@ -1,55 +0,0 @@ - - - -#ifndef __GST_VIDEO_ENUM_TYPES_H__ -#define __GST_VIDEO_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/* enumerations from "video-format.h" */ -GType gst_video_format_get_type (void); -#define GST_TYPE_VIDEO_FORMAT (gst_video_format_get_type()) -GType gst_video_chroma_site_get_type (void); -#define GST_TYPE_VIDEO_CHROMA_SITE (gst_video_chroma_site_get_type()) -GType gst_video_format_flags_get_type (void); -#define GST_TYPE_VIDEO_FORMAT_FLAGS (gst_video_format_flags_get_type()) -GType gst_video_pack_flags_get_type (void); -#define GST_TYPE_VIDEO_PACK_FLAGS (gst_video_pack_flags_get_type()) - -/* enumerations from "video-color.h" */ -GType gst_video_color_range_get_type (void); -#define GST_TYPE_VIDEO_COLOR_RANGE (gst_video_color_range_get_type()) -GType gst_video_color_matrix_get_type (void); -#define GST_TYPE_VIDEO_COLOR_MATRIX (gst_video_color_matrix_get_type()) -GType gst_video_transfer_function_get_type (void); -#define GST_TYPE_VIDEO_TRANSFER_FUNCTION (gst_video_transfer_function_get_type()) -GType gst_video_color_primaries_get_type (void); -#define GST_TYPE_VIDEO_COLOR_PRIMARIES (gst_video_color_primaries_get_type()) - -/* enumerations from "video-info.h" */ -GType gst_video_interlace_mode_get_type (void); -#define GST_TYPE_VIDEO_INTERLACE_MODE (gst_video_interlace_mode_get_type()) -GType gst_video_flags_get_type (void); -#define GST_TYPE_VIDEO_FLAGS (gst_video_flags_get_type()) - -/* enumerations from "colorbalance.h" */ -GType gst_color_balance_type_get_type (void); -#define GST_TYPE_COLOR_BALANCE_TYPE (gst_color_balance_type_get_type()) - -/* enumerations from "navigation.h" */ -GType gst_navigation_command_get_type (void); -#define GST_TYPE_NAVIGATION_COMMAND (gst_navigation_command_get_type()) -GType gst_navigation_query_type_get_type (void); -#define GST_TYPE_NAVIGATION_QUERY_TYPE (gst_navigation_query_type_get_type()) -GType gst_navigation_message_type_get_type (void); -#define GST_TYPE_NAVIGATION_MESSAGE_TYPE (gst_navigation_message_type_get_type()) -GType gst_navigation_event_type_get_type (void); -#define GST_TYPE_NAVIGATION_EVENT_TYPE (gst_navigation_event_type_get_type()) -G_END_DECLS - -#endif /* __GST_VIDEO_ENUM_TYPES_H__ */ - - - diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-event.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-event.h deleted file mode 100644 index 78559f6f..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-event.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_EVENT_H__ -#define __GST_VIDEO_EVENT_H__ - -#include - -G_BEGIN_DECLS - -/* video still frame event creation and parsing */ - -GstEvent * gst_video_event_new_still_frame (gboolean in_still); - -gboolean gst_video_event_parse_still_frame (GstEvent * event, gboolean * in_still); - -/* video force key unit event creation and parsing */ - -GstEvent * gst_video_event_new_downstream_force_key_unit (GstClockTime timestamp, - GstClockTime stream_time, - GstClockTime running_time, - gboolean all_headers, - guint count); - -gboolean gst_video_event_parse_downstream_force_key_unit (GstEvent * event, - GstClockTime * timestamp, - GstClockTime * stream_time, - GstClockTime * running_time, - gboolean * all_headers, - guint * count); - -GstEvent * gst_video_event_new_upstream_force_key_unit (GstClockTime running_time, - gboolean all_headers, - guint count); - -gboolean gst_video_event_parse_upstream_force_key_unit (GstEvent * event, - GstClockTime * running_time, - gboolean * all_headers, - guint * count); - -gboolean gst_video_event_is_force_key_unit(GstEvent *event); - -G_END_DECLS - -#endif /* __GST_VIDEO_EVENT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-format.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-format.h deleted file mode 100644 index 25229cc8..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-format.h +++ /dev/null @@ -1,458 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_FORMAT_H__ -#define __GST_VIDEO_FORMAT_H__ - -#include - -G_BEGIN_DECLS - -#include - -/** - * GstVideoFormat: - * @GST_VIDEO_FORMAT_UNKNOWN: Unknown or unset video format id - * @GST_VIDEO_FORMAT_ENCODED: Encoded video format - * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV - * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped) - * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...) - * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...) - * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last - * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last - * @GST_VIDEO_FORMAT_xRGB: sparse rgb packed into 32 bit, space first - * @GST_VIDEO_FORMAT_xBGR: sparse reverse rgb packed into 32 bit, space first - * @GST_VIDEO_FORMAT_RGBA: rgb with alpha channel last - * @GST_VIDEO_FORMAT_BGRA: reverse rgb with alpha channel last - * @GST_VIDEO_FORMAT_ARGB: rgb with alpha channel first - * @GST_VIDEO_FORMAT_ABGR: reverse rgb with alpha channel first - * @GST_VIDEO_FORMAT_RGB: rgb - * @GST_VIDEO_FORMAT_BGR: reverse rgb - * @GST_VIDEO_FORMAT_Y41B: planar 4:1:1 YUV - * @GST_VIDEO_FORMAT_Y42B: planar 4:2:2 YUV - * @GST_VIDEO_FORMAT_YVYU: packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) - * @GST_VIDEO_FORMAT_Y444: planar 4:4:4 YUV - * @GST_VIDEO_FORMAT_v210: packed 4:2:2 10-bit YUV, complex format - * @GST_VIDEO_FORMAT_v216: packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order - * @GST_VIDEO_FORMAT_NV12: planar 4:2:0 YUV with interleaved UV plane - * @GST_VIDEO_FORMAT_NV21: planar 4:2:0 YUV with interleaved VU plane - * @GST_VIDEO_FORMAT_GRAY8: 8-bit grayscale - * @GST_VIDEO_FORMAT_GRAY16_BE: 16-bit grayscale, most significant byte first - * @GST_VIDEO_FORMAT_GRAY16_LE: 16-bit grayscale, least significant byte first - * @GST_VIDEO_FORMAT_v308: packed 4:4:4 YUV - * @GST_VIDEO_FORMAT_RGB16: rgb 5-6-5 bits per component - * @GST_VIDEO_FORMAT_BGR16: reverse rgb 5-6-5 bits per component - * @GST_VIDEO_FORMAT_RGB15: rgb 5-5-5 bits per component - * @GST_VIDEO_FORMAT_BGR15: reverse rgb 5-5-5 bits per component - * @GST_VIDEO_FORMAT_UYVP: packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - * @GST_VIDEO_FORMAT_A420: planar 4:4:2:0 AYUV - * @GST_VIDEO_FORMAT_RGB8P: 8-bit paletted RGB - * @GST_VIDEO_FORMAT_YUV9: planar 4:1:0 YUV - * @GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (like YUV9 but UV planes swapped) - * @GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) - * @GST_VIDEO_FORMAT_ARGB64: rgb with alpha channel first, 16 bits per channel - * @GST_VIDEO_FORMAT_AYUV64: packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) - * @GST_VIDEO_FORMAT_r210: packed 4:4:4 RGB, 10 bits per channel - * @GST_VIDEO_FORMAT_I420_10BE: planar 4:2:0 YUV, 10 bits per channel - * @GST_VIDEO_FORMAT_I420_10LE: planar 4:2:0 YUV, 10 bits per channel - * @GST_VIDEO_FORMAT_I422_10BE: planar 4:2:2 YUV, 10 bits per channel - * @GST_VIDEO_FORMAT_I422_10LE: planar 4:2:2 YUV, 10 bits per channel - * - * Enum value describing the most common video formats. - */ -typedef enum { - GST_VIDEO_FORMAT_UNKNOWN, - GST_VIDEO_FORMAT_ENCODED, - GST_VIDEO_FORMAT_I420, - GST_VIDEO_FORMAT_YV12, - GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_FORMAT_RGBx, - GST_VIDEO_FORMAT_BGRx, - GST_VIDEO_FORMAT_xRGB, - GST_VIDEO_FORMAT_xBGR, - GST_VIDEO_FORMAT_RGBA, - GST_VIDEO_FORMAT_BGRA, - GST_VIDEO_FORMAT_ARGB, - GST_VIDEO_FORMAT_ABGR, - GST_VIDEO_FORMAT_RGB, - GST_VIDEO_FORMAT_BGR, - GST_VIDEO_FORMAT_Y41B, - GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_FORMAT_YVYU, - GST_VIDEO_FORMAT_Y444, - GST_VIDEO_FORMAT_v210, - GST_VIDEO_FORMAT_v216, - GST_VIDEO_FORMAT_NV12, - GST_VIDEO_FORMAT_NV21, - GST_VIDEO_FORMAT_GRAY8, - GST_VIDEO_FORMAT_GRAY16_BE, - GST_VIDEO_FORMAT_GRAY16_LE, - GST_VIDEO_FORMAT_v308, - GST_VIDEO_FORMAT_RGB16, - GST_VIDEO_FORMAT_BGR16, - GST_VIDEO_FORMAT_RGB15, - GST_VIDEO_FORMAT_BGR15, - GST_VIDEO_FORMAT_UYVP, - GST_VIDEO_FORMAT_A420, - GST_VIDEO_FORMAT_RGB8P, - GST_VIDEO_FORMAT_YUV9, - GST_VIDEO_FORMAT_YVU9, - GST_VIDEO_FORMAT_IYU1, - GST_VIDEO_FORMAT_ARGB64, - GST_VIDEO_FORMAT_AYUV64, - GST_VIDEO_FORMAT_r210, - GST_VIDEO_FORMAT_I420_10BE, - GST_VIDEO_FORMAT_I420_10LE, - GST_VIDEO_FORMAT_I422_10BE, - GST_VIDEO_FORMAT_I422_10LE, -} GstVideoFormat; - -#define GST_VIDEO_MAX_PLANES 4 -#define GST_VIDEO_MAX_COMPONENTS 4 - -typedef struct _GstVideoFormatInfo GstVideoFormatInfo; - -/** - * GstVideoChromaSite: - * @GST_VIDEO_CHROMA_SITE_UNKNOWN: unknown cositing - * @GST_VIDEO_CHROMA_SITE_NONE: no cositing - * @GST_VIDEO_CHROMA_SITE_H_COSITED: chroma is horizontally cosited - * @GST_VIDEO_CHROMA_SITE_V_COSITED: chroma is vertically cosited - * @GST_VIDEO_CHROMA_SITE_ALT_LINE: choma samples are sited on alternate lines - * @GST_VIDEO_CHROMA_SITE_COSITED: chroma samples cosited with luma samples - * @GST_VIDEO_CHROMA_SITE_JPEG: jpeg style cositing, also for mpeg1 and mjpeg - * @GST_VIDEO_CHROMA_SITE_MPEG2: mpeg2 style cositing - * @GST_VIDEO_CHROMA_SITE_DV: DV style cositing - * - * Various Chroma sitings. - */ -typedef enum { - GST_VIDEO_CHROMA_SITE_UNKNOWN = 0, - GST_VIDEO_CHROMA_SITE_NONE = (1 << 0), - GST_VIDEO_CHROMA_SITE_H_COSITED = (1 << 1), - GST_VIDEO_CHROMA_SITE_V_COSITED = (1 << 2), - GST_VIDEO_CHROMA_SITE_ALT_LINE = (1 << 3), - /* some common chroma cositing */ - GST_VIDEO_CHROMA_SITE_COSITED = (GST_VIDEO_CHROMA_SITE_H_COSITED | GST_VIDEO_CHROMA_SITE_V_COSITED), - GST_VIDEO_CHROMA_SITE_JPEG = (GST_VIDEO_CHROMA_SITE_NONE), - GST_VIDEO_CHROMA_SITE_MPEG2 = (GST_VIDEO_CHROMA_SITE_H_COSITED), - GST_VIDEO_CHROMA_SITE_DV = (GST_VIDEO_CHROMA_SITE_COSITED | GST_VIDEO_CHROMA_SITE_ALT_LINE), -} GstVideoChromaSite; - -GstVideoChromaSite gst_video_chroma_from_string (const gchar * s); -const gchar * gst_video_chroma_to_string (GstVideoChromaSite site); - -/** - * GstVideoFormatFlags: - * @GST_VIDEO_FORMAT_FLAG_YUV: The video format is YUV, components are numbered - * 0=Y, 1=U, 2=V. - * @GST_VIDEO_FORMAT_FLAG_RGB: The video format is RGB, components are numbered - * 0=R, 1=G, 2=B. - * @GST_VIDEO_FORMAT_FLAG_GRAY: The video is gray, there is one gray component - * with index 0. - * @GST_VIDEO_FORMAT_FLAG_ALPHA: The video format has an alpha components with - * the number 3. - * @GST_VIDEO_FORMAT_FLAG_LE: The video format has data stored in little - * endianness. - * @GST_VIDEO_FORMAT_FLAG_PALETTE: The video format has a palette. The palette - * is stored in the second plane and indexes are stored in the first plane. - * @GST_VIDEO_FORMAT_FLAG_COMPLEX: The video format has a complex layout that - * can't be described with the usual information in the #GstVideoFormatInfo. - * @GST_VIDEO_FORMAT_FLAG_UNPACK: This format can be used in a - * #GstVideoFormatUnpack and #GstVideoFormatPack function. - * - * The different video flags that a format info can have. - */ -typedef enum -{ - GST_VIDEO_FORMAT_FLAG_YUV = (1 << 0), - GST_VIDEO_FORMAT_FLAG_RGB = (1 << 1), - GST_VIDEO_FORMAT_FLAG_GRAY = (1 << 2), - GST_VIDEO_FORMAT_FLAG_ALPHA = (1 << 3), - GST_VIDEO_FORMAT_FLAG_LE = (1 << 4), - GST_VIDEO_FORMAT_FLAG_PALETTE = (1 << 5), - GST_VIDEO_FORMAT_FLAG_COMPLEX = (1 << 6), - GST_VIDEO_FORMAT_FLAG_UNPACK = (1 << 7) -} GstVideoFormatFlags; - -/* YUV components */ -#define GST_VIDEO_COMP_Y 0 -#define GST_VIDEO_COMP_U 1 -#define GST_VIDEO_COMP_V 2 - -/* RGB components */ -#define GST_VIDEO_COMP_R 0 -#define GST_VIDEO_COMP_G 1 -#define GST_VIDEO_COMP_B 2 - -/* alpha component */ -#define GST_VIDEO_COMP_A 3 - -/* palette components */ -#define GST_VIDEO_COMP_INDEX 0 -#define GST_VIDEO_COMP_PALETTE 1 - -/** - * GstVideoPackFlags: - * @GST_VIDEO_PACK_FLAG_NONE: No flag - * @GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE: When the source has a smaller depth - * than the target format, set the least significant bits of the target - * to 0. This is likely sightly faster but less accurate. When this flag - * is not specified, the most significant bits of the source are duplicated - * in the least significant bits of the destination. - * - * The different flags that can be used when packing and unpacking. - */ -typedef enum -{ - GST_VIDEO_PACK_FLAG_NONE = 0, - GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE = 1 -} GstVideoPackFlags; - -/** - * GstVideoFormatUnpack: - * @info: a #GstVideoFormatInfo - * @flags: flags to control the unpacking - * @dest: a destination array - * @data: pointers to the data planes - * @stride: strides of the planes - * @x: the x position in the image to start from - * @y: the y position in the image to start from - * @width: the amount of pixels to unpack. - * - * Unpacks @width pixels from the given planes and strides containing data of - * format @info. The pixels will be unpacked into @dest which each component - * interleaved. @dest should at least be big enough to hold @width * - * n_components * size(unpack_format) bytes. - */ -typedef void (*GstVideoFormatUnpack) (const GstVideoFormatInfo *info, - GstVideoPackFlags flags, gpointer dest, - const gpointer data[GST_VIDEO_MAX_PLANES], - const gint stride[GST_VIDEO_MAX_PLANES], - gint x, gint y, gint width); -/** - * GstVideoFormatPack: - * @info: a #GstVideoFormatInfo - * @flags: flags to control the packing - * @src: a source array - * @sstride: the source array stride - * @data: pointers to the destination data planes - * @stride: strides of the destination planes - * @chroma_site: the chroma siting of the target when subsampled - * @y: the y position in the image to pack to - * @width: the amount of pixels to pack. - * - * Packs @width pixels from @src to the given planes and strides in the - * format @info. The pixels from source have each component interleaved - * and will be packed into the planes in @data. - * - * This function operates on pack_lines lines, meaning that @src should - * contain at least pack_lines lines with a stride of @sstride and @y - * should be a multiple of pack_lines. - */ -typedef void (*GstVideoFormatPack) (const GstVideoFormatInfo *info, - GstVideoPackFlags flags, - const gpointer src, gint sstride, - gpointer data[GST_VIDEO_MAX_PLANES], - const gint stride[GST_VIDEO_MAX_PLANES], - GstVideoChromaSite chroma_site, - gint y, gint width); - -/** - * GstVideoFormatInfo: - * @format: #GstVideoFormat - * @name: string representation of the format - * @description: use readable description of the format - * @flags: #GstVideoFormatFlags - * @bits: The number of bits used to pack data items. This can be less than 8 - * when multiple pixels are stored in a byte. for values > 8 multiple bytes - * should be read according to the endianness flag before applying the shift - * and mask. - * @n_components: the number of components in the video format. - * @shift: the number of bits to shift away to get the component data - * @depth: the depth in bits for each component - * @pixel_stride: the pixel stride of each component. This is the amount of - * bytes to the pixel immediately to the right. When bits < 8, the stride is - * expressed in bits. For 24-bit RGB, this would be 3 bytes, for example, - * while it would be 4 bytes for RGBx or ARGB. - * @n_planes: the number of planes for this format. The number of planes can be - * less than the amount of components when multiple components are packed into - * one plane. - * @plane: the plane number where a component can be found - * @poffset: the offset in the plane where the first pixel of the components - * can be found. - * @w_sub: subsampling factor of the width for the component. Use - * GST_VIDEO_SUB_SCALE to scale a width. - * @h_sub: subsampling factor of the height for the component. Use - * GST_VIDEO_SUB_SCALE to scale a height. - * @unpack_format: the format of the unpacked pixels. This format must have the - * #GST_VIDEO_FORMAT_FLAG_UNPACK flag set. - * @unpack_func: an unpack function for this format - * @pack_lines: the amount of lines that will be packed - * @pack_func: an pack function for this format - * - * Information for a video format. - */ -struct _GstVideoFormatInfo { - GstVideoFormat format; - const gchar *name; - const gchar *description; - GstVideoFormatFlags flags; - guint bits; - guint n_components; - guint shift[GST_VIDEO_MAX_COMPONENTS]; - guint depth[GST_VIDEO_MAX_COMPONENTS]; - gint pixel_stride[GST_VIDEO_MAX_COMPONENTS]; - guint n_planes; - guint plane[GST_VIDEO_MAX_COMPONENTS]; - guint poffset[GST_VIDEO_MAX_COMPONENTS]; - guint w_sub[GST_VIDEO_MAX_COMPONENTS]; - guint h_sub[GST_VIDEO_MAX_COMPONENTS]; - - GstVideoFormat unpack_format; - GstVideoFormatUnpack unpack_func; - gint pack_lines; - GstVideoFormatPack pack_func; - - gpointer _gst_reserved[GST_PADDING]; -}; - -#define GST_VIDEO_FORMAT_INFO_FORMAT(info) ((info)->format) -#define GST_VIDEO_FORMAT_INFO_NAME(info) ((info)->name) -#define GST_VIDEO_FORMAT_INFO_FLAGS(info) ((info)->flags) - -#define GST_VIDEO_FORMAT_INFO_IS_YUV(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_YUV) -#define GST_VIDEO_FORMAT_INFO_IS_RGB(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_RGB) -#define GST_VIDEO_FORMAT_INFO_IS_GRAY(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_GRAY) -#define GST_VIDEO_FORMAT_INFO_HAS_ALPHA(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_ALPHA) -#define GST_VIDEO_FORMAT_INFO_IS_LE(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_LE) -#define GST_VIDEO_FORMAT_INFO_HAS_PALETTE(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_PALETTE) -#define GST_VIDEO_FORMAT_INFO_IS_COMPLEX(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_COMPLEX) - -#define GST_VIDEO_FORMAT_INFO_BITS(info) ((info)->bits) -#define GST_VIDEO_FORMAT_INFO_N_COMPONENTS(info) ((info)->n_components) -#define GST_VIDEO_FORMAT_INFO_SHIFT(info,c) ((info)->shift[c]) -#define GST_VIDEO_FORMAT_INFO_DEPTH(info,c) ((info)->depth[c]) -/** - * GST_VIDEO_FORMAT_INFO_PSTRIDE: - * - * pixel stride for the given component. This is the amount of bytes to the - * pixel immediately to the right, so basically bytes from one pixel to the - * next. When bits < 8, the stride is expressed in bits. - * - * Examples: for 24-bit RGB, the pixel stride would be 3 bytes, while it - * would be 4 bytes for RGBx or ARGB, and 8 bytes for ARGB64 or AYUV64. - * For planar formats such as I420 the pixel stride is usually 1. For - * YUY2 it would be 2 bytes. - */ -#define GST_VIDEO_FORMAT_INFO_PSTRIDE(info,c) ((info)->pixel_stride[c]) -/** - * GST_VIDEO_FORMAT_INFO_N_PLANES: - * - * Number of planes. This is the number of planes the pixel layout is - * organized in in memory. The number of planes can be less than the - * number of components (e.g. Y,U,V,A or R, G, B, A) when multiple - * components are packed into one plane. - * - * Examples: RGB/RGBx/RGBA: 1 plane, 3/3/4 components; - * I420: 3 planes, 3 components; NV21/NV12: 2 planes, 3 components. - */ -#define GST_VIDEO_FORMAT_INFO_N_PLANES(info) ((info)->n_planes) -/** - * GST_VIDEO_FORMAT_INFO_PLANE: - * - * Plane number where the given component can be found. A plane may - * contain data for multiple components. - */ -#define GST_VIDEO_FORMAT_INFO_PLANE(info,c) ((info)->plane[c]) -#define GST_VIDEO_FORMAT_INFO_POFFSET(info,c) ((info)->poffset[c]) -#define GST_VIDEO_FORMAT_INFO_W_SUB(info,c) ((info)->w_sub[c]) -#define GST_VIDEO_FORMAT_INFO_H_SUB(info,c) ((info)->h_sub[c]) - -/* rounds up */ -#define GST_VIDEO_SUB_SCALE(scale,val) (-((-((gint)(val)))>>(scale))) - -#define GST_VIDEO_FORMAT_INFO_SCALE_WIDTH(info,c,w) GST_VIDEO_SUB_SCALE ((info)->w_sub[c],(w)) -#define GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT(info,c,h) GST_VIDEO_SUB_SCALE ((info)->h_sub[c],(h)) - -#define GST_VIDEO_FORMAT_INFO_DATA(info,planes,comp) \ - (((guint8*)(planes)[(info)->plane[comp]]) + (info)->poffset[comp]) -/** - * GST_VIDEO_FORMAT_INFO_STRIDE: - * - * Row stride in bytes, that is number of bytes from the first pixel component - * of a row to the first pixel component in the next row. This might include - * some row padding (memory not actually used for anything, to make sure the - * beginning of the next row is aligned in a particular way). - */ -#define GST_VIDEO_FORMAT_INFO_STRIDE(info,strides,comp) ((strides)[(info)->plane[comp]]) -#define GST_VIDEO_FORMAT_INFO_OFFSET(info,offsets,comp) \ - (((offsets)[(info)->plane[comp]]) + (info)->poffset[comp]) - -/* format properties */ -GstVideoFormat gst_video_format_from_masks (gint depth, gint bpp, gint endianness, - gint red_mask, gint green_mask, - gint blue_mask, gint alpha_mask) G_GNUC_CONST; - -GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc) G_GNUC_CONST; -GstVideoFormat gst_video_format_from_string (const gchar *format) G_GNUC_CONST; - -guint32 gst_video_format_to_fourcc (GstVideoFormat format) G_GNUC_CONST; -const gchar * gst_video_format_to_string (GstVideoFormat format) G_GNUC_CONST; - -const GstVideoFormatInfo * - gst_video_format_get_info (GstVideoFormat format) G_GNUC_CONST; - -#define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]" -#define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]" - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -# define GST_VIDEO_NE(s) G_STRINGIFY(s)"_LE" -# define GST_VIDEO_OE(s) G_STRINGIFY(s)"_BE" -#else -# define GST_VIDEO_NE(s) G_STRINGIFY(s)"_BE" -# define GST_VIDEO_OE(s) G_STRINGIFY(s)"_LE" -#endif - -#define GST_VIDEO_FORMATS_ALL "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, " \ - "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, " \ - "YVYU, Y444, v210, v216, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, " \ - "v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, " \ - "IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE }" - -/** - * GST_VIDEO_CAPS_MAKE: - * @format: string format that describes the pixel layout, as string - * (e.g. "I420", "RGB", "YV12", "YUY2", "AYUV", etc.) - * - * Generic caps string for video, for use in pad templates. - */ -#define GST_VIDEO_CAPS_MAKE(format) \ - "video/x-raw, " \ - "format = (string) " format ", " \ - "width = " GST_VIDEO_SIZE_RANGE ", " \ - "height = " GST_VIDEO_SIZE_RANGE ", " \ - "framerate = " GST_VIDEO_FPS_RANGE - -G_END_DECLS - -#endif /* __GST_VIDEO_FORMAT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-frame.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-frame.h deleted file mode 100644 index 8f55fbd3..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-frame.h +++ /dev/null @@ -1,151 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_FRAME_H__ -#define __GST_VIDEO_FRAME_H__ - -#include -#include - -G_BEGIN_DECLS - -#include - -typedef struct _GstVideoFrame GstVideoFrame; - -/** - * GstVideoFrameFlags: - * @GST_VIDEO_FRAME_FLAG_NONE: no flags - * @GST_VIDEO_FRAME_FLAG_INTERLACED: The video frame is interlaced. In mixed - * interlace-mode, this flags specifies if the frame is interlace or - * progressive. - * @GST_VIDEO_FRAME_FLAG_TFF: The video frame has the top field first - * @GST_VIDEO_FRAME_FLAG_RFF: The video frame has the repeat flag - * @GST_VIDEO_FRAME_FLAG_ONEFIELD: The video frame has one field - * - * Extra video frame flags - */ -typedef enum { - GST_VIDEO_FRAME_FLAG_NONE = 0, - GST_VIDEO_FRAME_FLAG_INTERLACED = (1 << 0), - GST_VIDEO_FRAME_FLAG_TFF = (1 << 1), - GST_VIDEO_FRAME_FLAG_RFF = (1 << 2), - GST_VIDEO_FRAME_FLAG_ONEFIELD = (1 << 3) -} GstVideoFrameFlags; - -/** - * GstVideoFrame: - * @info: the #GstVideoInfo - * @buffer: the mapped buffer - * @meta: pointer to metadata if any - * @id: id of the mapped frame. the id can for example be used to - * indentify the frame in case of multiview video. - * @data: pointers to the plane data - * @map: mappings of the planes - * - * A video frame obtained from gst_video_frame_map() - */ -struct _GstVideoFrame { - GstVideoInfo info; - GstVideoFrameFlags flags; - - GstBuffer *buffer; - gpointer meta; - gint id; - - gpointer data[GST_VIDEO_MAX_PLANES]; - GstMapInfo map[GST_VIDEO_MAX_PLANES]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -gboolean gst_video_frame_map (GstVideoFrame *frame, GstVideoInfo *info, - GstBuffer *buffer, GstMapFlags flags); -gboolean gst_video_frame_map_id (GstVideoFrame *frame, GstVideoInfo *info, - GstBuffer *buffer, gint id, GstMapFlags flags); -void gst_video_frame_unmap (GstVideoFrame *frame); - -gboolean gst_video_frame_copy (GstVideoFrame *dest, const GstVideoFrame *src); -gboolean gst_video_frame_copy_plane (GstVideoFrame *dest, const GstVideoFrame *src, - guint plane); - -/* general info */ -#define GST_VIDEO_FRAME_FORMAT(f) (GST_VIDEO_INFO_FORMAT(&(f)->info)) -#define GST_VIDEO_FRAME_WIDTH(f) (GST_VIDEO_INFO_WIDTH(&(f)->info)) -#define GST_VIDEO_FRAME_HEIGHT(f) (GST_VIDEO_INFO_HEIGHT(&(f)->info)) -#define GST_VIDEO_FRAME_SIZE(f) (GST_VIDEO_INFO_SIZE(&(f)->info)) - -/* flags */ -#define GST_VIDEO_FRAME_FLAGS(f) ((f)->flags) -#define GST_VIDEO_FRAME_FLAG_IS_SET(f,fl) ((GST_VIDEO_FRAME_FLAGS(f) & (fl)) == (fl)) -#define GST_VIDEO_FRAME_IS_INTERLACED(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_INTERLACED)) -#define GST_VIDEO_FRAME_IS_TFF(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_TFF)) -#define GST_VIDEO_FRAME_IS_RFF(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_RFF)) -#define GST_VIDEO_FRAME_IS_ONEFIELD(f) (GST_VIDEO_FRAME_FLAG_IS_SET(f, GST_VIDEO_FRAME_FLAG_ONEFIELD)) - -/* dealing with planes */ -#define GST_VIDEO_FRAME_N_PLANES(f) (GST_VIDEO_INFO_N_PLANES(&(f)->info)) -#define GST_VIDEO_FRAME_PLANE_DATA(f,p) ((f)->data[p]) -#define GST_VIDEO_FRAME_PLANE_OFFSET(f,p) (GST_VIDEO_INFO_PLANE_OFFSET(&(f)->info,(p))) -#define GST_VIDEO_FRAME_PLANE_STRIDE(f,p) (GST_VIDEO_INFO_PLANE_STRIDE(&(f)->info,(p))) - -/* dealing with components */ -#define GST_VIDEO_FRAME_N_COMPONENTS(f) GST_VIDEO_INFO_N_COMPONENTS(&(f)->info) -#define GST_VIDEO_FRAME_COMP_DEPTH(f,c) GST_VIDEO_INFO_COMP_DEPTH(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_DATA(f,c) GST_VIDEO_INFO_COMP_DATA(&(f)->info,(f)->data,(c)) -#define GST_VIDEO_FRAME_COMP_STRIDE(f,c) GST_VIDEO_INFO_COMP_STRIDE(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_OFFSET(f,c) GST_VIDEO_INFO_COMP_OFFSET(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_WIDTH(f,c) GST_VIDEO_INFO_COMP_WIDTH(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_HEIGHT(f,c) GST_VIDEO_INFO_COMP_HEIGHT(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_PLANE(f,c) GST_VIDEO_INFO_COMP_PLANE(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_PSTRIDE(f,c) GST_VIDEO_INFO_COMP_PSTRIDE(&(f)->info,(c)) -#define GST_VIDEO_FRAME_COMP_POFFSET(f,c) GST_VIDEO_INFO_COMP_POFFSET(&(f)->info,(c)) - -/* buffer flags */ - -/** - * GstVideoBufferFlags: - * @GST_VIDEO_BUFFER_FLAG_INTERLACED: If the #GstBuffer is interlaced. In mixed - * interlace-mode, this flags specifies if the frame is - * interlaced or progressive. - * @GST_VIDEO_BUFFER_FLAG_TFF: If the #GstBuffer is interlaced, then the first field - * in the video frame is the top field. If unset, the - * bottom field is first. - * @GST_VIDEO_BUFFER_FLAG_RFF: If the #GstBuffer is interlaced, then the first field - * (as defined by the %GST_VIDEO_BUFFER_TFF flag setting) - * is repeated. - * @GST_VIDEO_BUFFER_FLAG_ONEFIELD: If the #GstBuffer is interlaced, then only the - * first field (as defined by the %GST_VIDEO_BUFFER_TFF - * flag setting) is to be displayed. - * - * Additional video buffer flags. - */ -typedef enum { - GST_VIDEO_BUFFER_FLAG_INTERLACED = (GST_BUFFER_FLAG_LAST << 0), - GST_VIDEO_BUFFER_FLAG_TFF = (GST_BUFFER_FLAG_LAST << 1), - GST_VIDEO_BUFFER_FLAG_RFF = (GST_BUFFER_FLAG_LAST << 2), - GST_VIDEO_BUFFER_FLAG_ONEFIELD = (GST_BUFFER_FLAG_LAST << 3), - - GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8) -} GstVideoBufferFlags; - -G_END_DECLS - -#endif /* __GST_VIDEO_FRAME_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-info.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-info.h deleted file mode 100644 index ce0f0fef..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-info.h +++ /dev/null @@ -1,190 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_INFO_H__ -#define __GST_VIDEO_INFO_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#include - -typedef struct _GstVideoInfo GstVideoInfo; - -/** - * GstVideoInterlaceMode: - * @GST_VIDEO_INTERLACE_MODE_PROGRESSIVE: all frames are progressive - * @GST_VIDEO_INTERLACE_MODE_INTERLEAVED: 2 fields are interleaved in one video - * frame. Extra buffer flags describe the field order. - * @GST_VIDEO_INTERLACE_MODE_MIXED: frames contains both interlaced and - * progressive video, the buffer flags describe the frame and fields. - * @GST_VIDEO_INTERLACE_MODE_FIELDS: 2 fields are stored in one buffer, use the - * frame ID to get access to the required field. For multiview (the - * 'views' property > 1) the fields of view N can be found at frame ID - * (N * 2) and (N * 2) + 1. - * Each field has only half the amount of lines as noted in the - * height property. This mode requires multiple GstVideoMeta metadata - * to describe the fields. - * - * The possible values of the #GstVideoInterlaceMode describing the interlace - * mode of the stream. - */ -typedef enum { - GST_VIDEO_INTERLACE_MODE_PROGRESSIVE = 0, - GST_VIDEO_INTERLACE_MODE_INTERLEAVED, - GST_VIDEO_INTERLACE_MODE_MIXED, - GST_VIDEO_INTERLACE_MODE_FIELDS -} GstVideoInterlaceMode; - -/** - * GstVideoFlags: - * @GST_VIDEO_FLAG_NONE: no flags - * @GST_VIDEO_FLAG_VARIABLE_FPS: a variable fps is selected, fps_n and fps_d - * denote the maximum fps of the video - * @GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA: Each color has been scaled by the alpha - * value. - * - * Extra video flags - */ -typedef enum { - GST_VIDEO_FLAG_NONE = 0, - GST_VIDEO_FLAG_VARIABLE_FPS = (1 << 0), - GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA = (1 << 1) -} GstVideoFlags; - -/** - * GstVideoInfo: - * @finfo: the format info of the video - * @interlace_mode: the interlace mode - * @flags: additional video flags - * @width: the width of the video - * @height: the height of the video - * @views: the number of views for multiview video - * @size: the default size of one frame - * @chroma_site: a #GstVideoChromaSite. - * @colorimetry: the colorimetry info - * @par_n: the pixel-aspect-ratio numerator - * @par_d: the pixel-aspect-ratio demnominator - * @fps_n: the framerate numerator - * @fps_d: the framerate demnominator - * @offset: offsets of the planes - * @stride: strides of the planes - * - * Information describing image properties. This information can be filled - * in from GstCaps with gst_video_info_from_caps(). The information is also used - * to store the specific video info when mapping a video frame with - * gst_video_frame_map(). - * - * Use the provided macros to access the info in this structure. - */ -struct _GstVideoInfo { - const GstVideoFormatInfo *finfo; - - GstVideoInterlaceMode interlace_mode; - GstVideoFlags flags; - gint width; - gint height; - gsize size; - gint views; - - GstVideoChromaSite chroma_site; - GstVideoColorimetry colorimetry; - - gint par_n; - gint par_d; - gint fps_n; - gint fps_d; - - gsize offset[GST_VIDEO_MAX_PLANES]; - gint stride[GST_VIDEO_MAX_PLANES]; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -/* general info */ -#define GST_VIDEO_INFO_FORMAT(i) (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo)) -#define GST_VIDEO_INFO_NAME(i) (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo)) -#define GST_VIDEO_INFO_IS_YUV(i) (GST_VIDEO_FORMAT_INFO_IS_YUV((i)->finfo)) -#define GST_VIDEO_INFO_IS_RGB(i) (GST_VIDEO_FORMAT_INFO_IS_RGB((i)->finfo)) -#define GST_VIDEO_INFO_IS_GRAY(i) (GST_VIDEO_FORMAT_INFO_IS_GRAY((i)->finfo)) -#define GST_VIDEO_INFO_HAS_ALPHA(i) (GST_VIDEO_FORMAT_INFO_HAS_ALPHA((i)->finfo)) - -#define GST_VIDEO_INFO_INTERLACE_MODE(i) ((i)->interlace_mode) -#define GST_VIDEO_INFO_IS_INTERLACED(i) ((i)->interlace_mode != GST_VIDEO_INTERLACE_MODE_PROGRESSIVE) -#define GST_VIDEO_INFO_FLAGS(i) ((i)->flags) -#define GST_VIDEO_INFO_WIDTH(i) ((i)->width) -#define GST_VIDEO_INFO_HEIGHT(i) ((i)->height) -#define GST_VIDEO_INFO_SIZE(i) ((i)->size) -#define GST_VIDEO_INFO_VIEWS(i) ((i)->views) -#define GST_VIDEO_INFO_PAR_N(i) ((i)->par_n) -#define GST_VIDEO_INFO_PAR_D(i) ((i)->par_d) -#define GST_VIDEO_INFO_FPS_N(i) ((i)->fps_n) -#define GST_VIDEO_INFO_FPS_D(i) ((i)->fps_d) - -/* dealing with GstVideoInfo flags */ -#define GST_VIDEO_INFO_FLAG_IS_SET(i,flag) ((GST_VIDEO_INFO_FLAGS(i) & (flag)) == (flag)) -#define GST_VIDEO_INFO_FLAG_SET(i,flag) (GST_VIDEO_INFO_FLAGS(i) |= (flag)) -#define GST_VIDEO_INFO_FLAG_UNSET(i,flag) (GST_VIDEO_INFO_FLAGS(i) &= ~(flag)) - -/* dealing with planes */ -#define GST_VIDEO_INFO_N_PLANES(i) (GST_VIDEO_FORMAT_INFO_N_PLANES((i)->finfo)) -#define GST_VIDEO_INFO_PLANE_OFFSET(i,p) ((i)->offset[p]) -#define GST_VIDEO_INFO_PLANE_STRIDE(i,p) ((i)->stride[p]) - -/* dealing with components */ -#define GST_VIDEO_INFO_N_COMPONENTS(i) GST_VIDEO_FORMAT_INFO_N_COMPONENTS((i)->finfo) -#define GST_VIDEO_INFO_COMP_DEPTH(i,c) GST_VIDEO_FORMAT_INFO_DEPTH((i)->finfo,(c)) -#define GST_VIDEO_INFO_COMP_DATA(i,d,c) GST_VIDEO_FORMAT_INFO_DATA((i)->finfo,d,(c)) -#define GST_VIDEO_INFO_COMP_OFFSET(i,c) GST_VIDEO_FORMAT_INFO_OFFSET((i)->finfo,(i)->offset,(c)) -#define GST_VIDEO_INFO_COMP_STRIDE(i,c) GST_VIDEO_FORMAT_INFO_STRIDE((i)->finfo,(i)->stride,(c)) -#define GST_VIDEO_INFO_COMP_WIDTH(i,c) GST_VIDEO_FORMAT_INFO_SCALE_WIDTH((i)->finfo,(c),(i)->width) -#define GST_VIDEO_INFO_COMP_HEIGHT(i,c) GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT((i)->finfo,(c),(i)->height) -#define GST_VIDEO_INFO_COMP_PLANE(i,c) GST_VIDEO_FORMAT_INFO_PLANE((i)->finfo,(c)) -#define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,(c)) -#define GST_VIDEO_INFO_COMP_POFFSET(i,c) GST_VIDEO_FORMAT_INFO_POFFSET((i)->finfo,(c)) - -void gst_video_info_init (GstVideoInfo *info); - -void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format, - guint width, guint height); - -gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps); - -GstCaps * gst_video_info_to_caps (GstVideoInfo *info); - -gboolean gst_video_info_convert (GstVideoInfo *info, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 *dest_value); -gboolean gst_video_info_is_equal (const GstVideoInfo *info, - const GstVideoInfo *other); - -#include - -void gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align); - - -G_END_DECLS - -#endif /* __GST_VIDEO_INFO_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-overlay-composition.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-overlay-composition.h deleted file mode 100644 index d2f62d03..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video-overlay-composition.h +++ /dev/null @@ -1,285 +0,0 @@ -/* GStreamer Video Overlay Composition - * Copyright (C) 2011 Intel Corporation - * Copyright (C) 2011 Collabora Ltd. - * Copyright (C) 2011 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_OVERLAY_COMPOSITION_H__ -#define __GST_VIDEO_OVERLAY_COMPOSITION_H__ - -#include -#include - -G_BEGIN_DECLS - -/** - * GstVideoOverlayRectangle: - * - * An opaque video overlay rectangle object. A rectangle contains a single - * overlay rectangle which can be added to a composition. - */ -#define GST_TYPE_VIDEO_OVERLAY_RECTANGLE \ - (gst_video_overlay_rectangle_get_type ()) -#define GST_VIDEO_OVERLAY_RECTANGLE_CAST(obj) \ - ((GstVideoOverlayRectangle *)(obj) -#define GST_VIDEO_OVERLAY_RECTANGLE(obj) \ - (GST_VIDEO_OVERLAY_RECTANGLE_CAST(obj)) -#define GST_IS_VIDEO_OVERLAY_RECTANGLE(obj) \ - (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_VIDEO_OVERLAY_RECTANGLE)) - -typedef struct _GstVideoOverlayRectangle GstVideoOverlayRectangle; - -/** - * gst_video_overlay_rectangle_ref: - * @comp: a a #GstVideoOverlayRectangle. - * - * Increases the refcount of the given rectangle by one. - * - * Note that the refcount affects the writeability - * of @comp, use gst_video_overlay_rectangle_copy() to ensure a rectangle can - * be modified (there is no gst_video_overlay_rectangle_make_writable() because - * it is unlikely that someone will hold the single reference to the rectangle - * and not know that that's the case). - * - * Returns: (transfer full): @comp - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstVideoOverlayRectangle * -gst_video_overlay_rectangle_ref (GstVideoOverlayRectangle * comp); -#endif - -static inline GstVideoOverlayRectangle * -gst_video_overlay_rectangle_ref (GstVideoOverlayRectangle * comp) -{ - return (GstVideoOverlayRectangle *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (comp)); -} - -/** - * gst_video_overlay_rectangle_unref: - * @comp: (transfer full): a #GstVideoOverlayRectangle. - * - * Decreases the refcount of the rectangle. If the refcount reaches 0, the - * rectangle will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void -gst_video_overlay_rectangle_unref (GstVideoOverlayRectangle * comp); -#endif - -static inline void -gst_video_overlay_rectangle_unref (GstVideoOverlayRectangle * comp) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (comp)); -} - -/** - * GstVideoOverlayFormatFlags: - * @GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE: no flags - * @GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA: RGB are premultiplied by A/255. - * @GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA: a global-alpha value != 1 is set. - * - * Overlay format flags. - */ -typedef enum { - GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE = 0, - GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA = 1, - GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA = 2 -} GstVideoOverlayFormatFlags; - -/** - * GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB: - * - * Supported RGB overlay video format. - */ -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB GST_VIDEO_FORMAT_BGRA -#else -#define GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB GST_VIDEO_FORMAT_ARGB -#endif - -/** - * GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_YUV: - * - * Supported YUV overlay video format. - */ -#define GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_YUV GST_VIDEO_FORMAT_AYUV - -GType gst_video_overlay_rectangle_get_type (void); - -GstVideoOverlayRectangle * gst_video_overlay_rectangle_new_raw (GstBuffer * pixels, - gint render_x, gint render_y, - guint render_width, guint render_height, - GstVideoOverlayFormatFlags flags); - -GstVideoOverlayRectangle * gst_video_overlay_rectangle_copy (GstVideoOverlayRectangle * rectangle); - -guint gst_video_overlay_rectangle_get_seqnum (GstVideoOverlayRectangle * rectangle); - -void gst_video_overlay_rectangle_set_render_rectangle (GstVideoOverlayRectangle * rectangle, - gint render_x, - gint render_y, - guint render_width, - guint render_height); - -gboolean gst_video_overlay_rectangle_get_render_rectangle (GstVideoOverlayRectangle * rectangle, - gint * render_x, - gint * render_y, - guint * render_width, - guint * render_height); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_raw (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_argb (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_ayuv (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_unscaled_raw (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_unscaled_argb (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstBuffer * gst_video_overlay_rectangle_get_pixels_unscaled_ayuv (GstVideoOverlayRectangle * rectangle, - GstVideoOverlayFormatFlags flags); - -GstVideoOverlayFormatFlags gst_video_overlay_rectangle_get_flags (GstVideoOverlayRectangle * rectangle); - -gfloat gst_video_overlay_rectangle_get_global_alpha (GstVideoOverlayRectangle * rectangle); -void gst_video_overlay_rectangle_set_global_alpha (GstVideoOverlayRectangle * rectangle, - gfloat global_alpha); - -/** - * GstVideoOverlayComposition: - * - * An opaque video overlay composition object. A composition contains - * multiple overlay rectangles. - */ -#define GST_TYPE_VIDEO_OVERLAY_COMPOSITION \ - (gst_video_overlay_composition_get_type ()) -#define GST_VIDEO_OVERLAY_COMPOSITION_CAST(obj) \ - ((GstVideoOverlayComposition *)(obj) -#define GST_VIDEO_OVERLAY_COMPOSITION(obj) \ - (GST_VIDEO_OVERLAY_COMPOSITION_CAST(obj)) -#define GST_IS_VIDEO_OVERLAY_COMPOSITION(obj) \ - (GST_IS_MINI_OBJECT_TYPE(obj, GST_TYPE_VIDEO_OVERLAY_COMPOSITION)) - -typedef struct _GstVideoOverlayComposition GstVideoOverlayComposition; - -/** - * gst_video_overlay_composition_ref: - * @comp: a a #GstVideoOverlayComposition. - * - * Increases the refcount of the given composition by one. - * - * Note that the refcount affects the writeability - * of @comp, use gst_video_overlay_composition_make_writable() to ensure - * a composition and its rectangles can be modified. - * - * Returns: (transfer full): @comp - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstVideoOverlayComposition * -gst_video_overlay_composition_ref (GstVideoOverlayComposition * comp); -#endif - -static inline GstVideoOverlayComposition * -gst_video_overlay_composition_ref (GstVideoOverlayComposition * comp) -{ - return (GstVideoOverlayComposition *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (comp)); -} - -/** - * gst_video_overlay_composition_unref: - * @comp: (transfer full): a #GstVideoOverlayComposition. - * - * Decreases the refcount of the composition. If the refcount reaches 0, the - * composition will be freed. - */ -#ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC void -gst_video_overlay_composition_unref (GstVideoOverlayComposition * comp); -#endif - -static inline void -gst_video_overlay_composition_unref (GstVideoOverlayComposition * comp) -{ - gst_mini_object_unref (GST_MINI_OBJECT_CAST (comp)); -} - -GType gst_video_overlay_composition_get_type (void); - -GstVideoOverlayComposition * gst_video_overlay_composition_copy (GstVideoOverlayComposition * comp); - -GstVideoOverlayComposition * gst_video_overlay_composition_make_writable (GstVideoOverlayComposition * comp); - -GstVideoOverlayComposition * gst_video_overlay_composition_new (GstVideoOverlayRectangle * rectangle); - -void gst_video_overlay_composition_add_rectangle (GstVideoOverlayComposition * comp, - GstVideoOverlayRectangle * rectangle); - -guint gst_video_overlay_composition_n_rectangles (GstVideoOverlayComposition * comp); - -GstVideoOverlayRectangle * gst_video_overlay_composition_get_rectangle (GstVideoOverlayComposition * comp, guint n); - -guint gst_video_overlay_composition_get_seqnum (GstVideoOverlayComposition * comp); - -/* blend composition onto raw video buffer */ - -gboolean gst_video_overlay_composition_blend (GstVideoOverlayComposition * comp, - GstVideoFrame * video_buf); - -/* attach/retrieve composition from buffers */ - -#define GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE \ - (gst_video_overlay_composition_meta_api_get_type()) -#define GST_VIDEO_OVERLAY_COMPOSITION_META_INFO \ - (gst_video_overlay_composition_meta_get_info()) - -typedef struct _GstVideoOverlayCompositionMeta GstVideoOverlayCompositionMeta; - -/** - * GstVideoOverlayCompositionMeta: - * @meta: parent #GstMeta - * @overlay: the attached #GstVideoOverlayComposition - * - * Extra buffer metadata describing image overlay data. - */ -struct _GstVideoOverlayCompositionMeta -{ - GstMeta meta; - - GstVideoOverlayComposition *overlay; -}; - -GType gst_video_overlay_composition_meta_api_get_type (void); -const GstMetaInfo *gst_video_overlay_composition_meta_get_info (void); - -GstVideoOverlayCompositionMeta * gst_buffer_add_video_overlay_composition_meta (GstBuffer * buf, - GstVideoOverlayComposition * comp); - -#define gst_buffer_get_video_overlay_composition_meta(b) \ - ((GstVideoOverlayCompositionMeta*)gst_buffer_get_meta((b),GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE)) -#define gst_buffer_remove_video_overlay_composition_meta(b,m) \ - gst_buffer_remove_meta((b),((GstMeta *) m)) - -G_END_DECLS - -#endif /* __GST_VIDEO_OVERLAY_COMPOSITION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video.h deleted file mode 100644 index cafa58c6..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/video.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer - * Copyright (C) <2011> Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_H__ -#define __GST_VIDEO_H__ - -#include - -typedef struct _GstVideoAlignment GstVideoAlignment; - -#include -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -/** - * GstVideoAlignment: - * @padding_left: extra pixels on the left side - * @padding_right: extra pixels on the right side - * @padding_top: extra pixels on the top - * @padding_bottom: extra pixels on the bottom - * @stride_align: array with extra alignment requirements for the strides - * - * Extra alignment paramters for the memory of video buffers. This - * structure is usually used to configure the bufferpool if it supports the - * #GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT. - */ -struct _GstVideoAlignment -{ - guint padding_top; - guint padding_bottom; - guint padding_left; - guint padding_right; - guint stride_align[GST_VIDEO_MAX_PLANES]; -}; - -void gst_video_alignment_reset (GstVideoAlignment *align); - - -/* some helper functions */ -gboolean gst_video_calculate_display_ratio (guint * dar_n, - guint * dar_d, - guint video_width, - guint video_height, - guint video_par_n, - guint video_par_d, - guint display_par_n, - guint display_par_d); - -/* convert/encode video sample from one format to another */ - -typedef void (*GstVideoConvertSampleCallback) (GstSample * sample, GError *error, gpointer user_data); - -void gst_video_convert_sample_async (GstSample * sample, - const GstCaps * to_caps, - GstClockTime timeout, - GstVideoConvertSampleCallback callback, - gpointer user_data, - GDestroyNotify destroy_notify); - -GstSample * gst_video_convert_sample (GstSample * sample, - const GstCaps * to_caps, - GstClockTime timeout, - GError ** error); -G_END_DECLS - -#endif /* __GST_VIDEO_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videocontext.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videocontext.h deleted file mode 100644 index 98d4b542..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videocontext.h +++ /dev/null @@ -1,117 +0,0 @@ -/* GStreamer - * - * Copyright (C) 2011 Intel - * Copyright (C) 2011 Collabora Ltd. - * Author: Nicolas Dufresne - * - * video-context.h: Video Context interface and helpers - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_CONTEXT_H__ -#define __GST_VIDEO_CONTEXT_H__ - -#ifndef GST_USE_UNSTABLE_API -#warning "The GstVideoContext interface is unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_CONTEXT (gst_video_context_iface_get_type ()) -#define GST_VIDEO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_CONTEXT, GstVideoContext)) -#define GST_IS_VIDEO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_CONTEXT)) -#define GST_VIDEO_CONTEXT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_CONTEXT, GstVideoContextInterface)) - -/** - * GstVideoContext: - * - * Opaque #GstVideoContext data structure. - */ -typedef struct _GstVideoContext GstVideoContext; -typedef struct _GstVideoContextInterface GstVideoContextInterface; - -/** - * GstVideoContextInterface: - * @parent: parent interface type. - * @set_context: vmethod to set video context. - * - * #GstVideoContextInterface interface. - */ -struct _GstVideoContextInterface -{ - GTypeInterface parent; - - /* virtual functions */ - void (*set_context) (GstVideoContext * context, - const gchar * type, - const GValue * value); - -}; - -GType gst_video_context_iface_get_type (void); - -/* virtual class method and associated helpers */ -void gst_video_context_set_context (GstVideoContext * context, - const gchar * type, - const GValue * value); -void gst_video_context_set_context_string (GstVideoContext * context, - const gchar * type, - const gchar * value); -void gst_video_context_set_context_pointer (GstVideoContext * context, - const gchar * type, - gpointer value); -void gst_video_context_set_context_object (GstVideoContext * context, - const gchar * type, - GObject * value); - - -/* message helpers */ -void gst_video_context_prepare (GstVideoContext *context, - const gchar ** types); - -gboolean gst_video_context_message_parse_prepare (GstMessage * message, - const gchar *** types, - GstVideoContext ** ctx); - -/* query helpers */ -GstQuery * gst_video_context_query_new (const gchar ** types); -gboolean gst_video_context_run_query (GstElement *element, - GstQuery *query); -const gchar ** gst_video_context_query_get_supported_types (GstQuery * query); -void gst_video_context_query_parse_value (GstQuery * query, - const gchar ** type, - const GValue ** value); -void gst_video_context_query_set_value (GstQuery * query, - const gchar * type, - GValue * value); -void gst_video_context_query_set_string (GstQuery * query, - const gchar * type, - const gchar * value); -void gst_video_context_query_set_pointer (GstQuery * query, - const gchar * type, - gpointer value); -void gst_video_context_query_set_object (GstQuery * query, - const gchar * type, - GObject * value); - -G_END_DECLS - -#endif /* __GST_VIDEO_CONTEXT_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videoorientation.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videoorientation.h deleted file mode 100644 index c7407b71..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videoorientation.h +++ /dev/null @@ -1,94 +0,0 @@ -/* GStreamer - * Copyright (C) 2006 Nokia - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_ORIENTATION \ - (gst_video_orientation_get_type ()) -#define GST_VIDEO_ORIENTATION(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_ORIENTATION, GstVideoOrientation)) -#define GST_IS_VIDEO_ORIENTATION(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_ORIENTATION)) -#define GST_VIDEO_ORIENTATION_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_ORIENTATION, GstVideoOrientationInterface)) - -/** - * GstVideoOrientation: - * - * Opaque #GstVideoOrientation data structure. - */ -typedef struct _GstVideoOrientation GstVideoOrientation; -typedef struct _GstVideoOrientationInterface GstVideoOrientationInterface; - -/** - * GstVideoOrientationInterface: - * @iface: parent interface type. - * @get_hflip: virtual method to get horizontal flipping state - * @get_vflip: virtual method to get vertical flipping state - * @get_hcenter: virtual method to get horizontal centering state - * @get_vcenter: virtual method to get vertical centering state - * @set_hflip: virtual method to set horizontal flipping state - * @set_vflip: virtual method to set vertical flipping state - * @set_hcenter: virtual method to set horizontal centering state - * @set_vcenter: virtual method to set vertical centering state - * - * #GstVideoOrientationInterface interface. - */ -struct _GstVideoOrientationInterface { - GTypeInterface iface; - - /* FIXME 0.11: fix awkward API? add some kind of get_supported flags thing - * and then just return booleans/int from all vfuncs requiring the caller - * to check the flags first */ - - /* virtual functions */ - gboolean (* get_hflip) (GstVideoOrientation *video_orientation, gboolean *flip); - gboolean (* get_vflip) (GstVideoOrientation *video_orientation, gboolean *flip); - gboolean (* get_hcenter) (GstVideoOrientation *video_orientation, gint *center); - gboolean (* get_vcenter) (GstVideoOrientation *video_orientation, gint *center); - - gboolean (* set_hflip) (GstVideoOrientation *video_orientation, gboolean flip); - gboolean (* set_vflip) (GstVideoOrientation *video_orientation, gboolean flip); - gboolean (* set_hcenter) (GstVideoOrientation *video_orientation, gint center); - gboolean (* set_vcenter) (GstVideoOrientation *video_orientation, gint center); -}; - -GType gst_video_orientation_get_type (void); - -/* virtual class function wrappers */ -gboolean gst_video_orientation_get_hflip (GstVideoOrientation *video_orientation, gboolean *flip); -gboolean gst_video_orientation_get_vflip (GstVideoOrientation *video_orientation, gboolean *flip); -gboolean gst_video_orientation_get_hcenter (GstVideoOrientation *video_orientation, gint *center); -gboolean gst_video_orientation_get_vcenter (GstVideoOrientation *video_orientation, gint *center); - -gboolean gst_video_orientation_set_hflip (GstVideoOrientation *video_orientation, gboolean flip); -gboolean gst_video_orientation_set_vflip (GstVideoOrientation *video_orientation, gboolean flip); -gboolean gst_video_orientation_set_hcenter (GstVideoOrientation *video_orientation, gint center); -gboolean gst_video_orientation_set_vcenter (GstVideoOrientation *video_orientation, gint center); - -G_END_DECLS - -#endif /* __GST_VIDEO_ORIENTATION_H__ */ diff --git a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videooverlay.h b/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videooverlay.h deleted file mode 100644 index 2c01c5d6..00000000 --- a/GstreamerHelper/x86/include/gstreamer-1.0/gst/video/videooverlay.h +++ /dev/null @@ -1,99 +0,0 @@ -/* GStreamer Video Overlay Interface - * Copyright (C) 2003 Ronald Bultje - * Copyright (C) 2003 Julien Moutte - * Copyright (C) 2011 Tim-Philipp Müller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_VIDEO_OVERLAY_H__ -#define __GST_VIDEO_OVERLAY_H__ - -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VIDEO_OVERLAY \ - (gst_video_overlay_get_type ()) -#define GST_VIDEO_OVERLAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_OVERLAY, GstVideoOverlay)) -#define GST_IS_VIDEO_OVERLAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_OVERLAY)) -#define GST_VIDEO_OVERLAY_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_OVERLAY, GstVideoOverlayInterface)) - -/** - * GstVideoOverlay: - * - * Opaque #GstVideoOverlay interface structure - */ -typedef struct _GstVideoOverlay GstVideoOverlay; -typedef struct _GstVideoOverlayInterface GstVideoOverlayInterface; - -/** - * GstVideoOverlayInterface: - * @iface: parent interface type. - * @expose: virtual method to handle expose events - * @handle_events: virtual method to handle events - * @set_render_rectangle: virtual method to set the render rectangle - * @set_window_handle: virtual method to configure the window handle - * - * #GstVideoOverlay interface - */ -struct _GstVideoOverlayInterface { - GTypeInterface iface; - - /* virtual functions */ - void (*expose) (GstVideoOverlay *overlay); - - void (*handle_events) (GstVideoOverlay *overlay, gboolean handle_events); - - void (*set_render_rectangle) (GstVideoOverlay *overlay, - gint x, gint y, - gint width, gint height); - - void (*set_window_handle) (GstVideoOverlay *overlay, guintptr handle); -}; - -GType gst_video_overlay_get_type (void); - -/* virtual function wrappers */ - -gboolean gst_video_overlay_set_render_rectangle (GstVideoOverlay * overlay, - gint x, - gint y, - gint width, - gint height); - -void gst_video_overlay_expose (GstVideoOverlay * overlay); - -void gst_video_overlay_handle_events (GstVideoOverlay * overlay, - gboolean handle_events); - -void gst_video_overlay_set_window_handle (GstVideoOverlay * overlay, - guintptr handle); - -/* public methods to dispatch bus messages */ -void gst_video_overlay_got_window_handle (GstVideoOverlay * overlay, - guintptr handle); - -void gst_video_overlay_prepare_window_handle (GstVideoOverlay * overlay); - -gboolean gst_is_video_overlay_prepare_window_handle_message (GstMessage * msg); - -G_END_DECLS - -#endif /* __GST_VIDEO_OVERLAY_H__ */ diff --git a/GstreamerHelper/x86/lib/glib-2.0.lib b/GstreamerHelper/x86/lib/glib-2.0.lib deleted file mode 100644 index 0e7b43cf4624c8dfd081d8f4d4c9eed73011c189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208454 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
    f4!j&SLG_?9vZp#`Q*;(`Eeu{ zyB#A}*2T%)QJ1Pw>Cco?4$!NM#^O zri%&7%2m^fWeqW{^KMcs>$|wD4#)kx$6e``6}uer17tZtD_21)v>qC*ce}J^AInXr zH5A81)4C{zyTMh>%3eMstxHhL9b>(-ORI|6iU2Mw^#c*keAk|1?&V|o1YY+;MmNwX zZh<$ridtEJj$}Gz{kd1TOhb;8zBqmy`g11! zb!&ocekYgXpiY#teSWF<#@q2Q%-2;%r-C4LD;^fS1R<^?4GF%vnp*Lc#SJ=)h}k)p z@9g!obWb^?rJ<+1NJrb?>S%@5L!}&xqDF+Sx#=o%P+?wIvvub^9u>RmLd8m%F*I^1AVRjlE?~HT)a? zeolV(4}ZS_Aq=Op@Fk7wz9w4plSvtOt_!X1!O`4v*Rx;@{A+V=TT4wXHN{D6Y9rp9O7w4!&9ho<$1s)5eE z>^FEtTDd9E4D-DhvZZ=jT76FUr82wj?lk;_l#>0Wk8Jq)nBz0)>T{b@L#psxVz`xR zYiV^D%WcTI#xERhtJ+~Pb1Pka-h#7TL#%C~*H#l7NOiX4OR(gI_!3twa-se(Y_?q1 z)xvX39z|_^H}EB#De(Fdo?hKHc~7dzrFu>**&#Ohb3fTp(=4p#WZK=DQ@=N%FEZ>( zwYMv7-XZM?(h(j$@mA^we`d2gndOV4@}9EH&C^A6l=n0J?N_H>b^vdzD6jNQgWo#) zdoq+umARxa(+%p1_CgfqPrE6P+Dc0mX2Wwf$nLPz8ffUia4c2e(zDuGj?r(FTI(ww zj>nd*jyVz(KC8XubpWo`6m;5YryoPNRIy7{&se%cs-9i$q8olg%v1}jo_VS6w$TJL zZ=t0+-oRB%(zAiJKOORH;DN>PYEd)~M57c(%pAW#f9a-L@@?IMFTD(R+FO2fd-z_% zYjbz)$Gx~jyc)C}-iVZXpg4UjfZoJ)| z4CPWKFli(#XeF}4eIGuV|s^q1N1xs^C z#^Pg_=BVxO1{n(=xWoL?1;%HPs&>2X&i(YfEuCQtQJz1tc%A3R!-JzK7K@IWTlD|& z(7EEzss=juvLE5q%CxDWd#$cA2+}3u3D6M-J)7m{uyHX`CRbOMN-GZyq^_TD4)aLWU($F?y z&M`=i>6j@rJg8tB~1aQ6~L zZQh|9M!4fTLvhmGXpXIjY`2;I)9?l>yZ>2r$gF;Yre6rf@AxS$3MhCUGsR-v&7qWr z&S6}4U^tfQZb`xL@vb-yQ83>2a=brVu1c`Saa-gqnkCaBcPJP(%k}UXm{kvk=A_5b z{9D%6vC4m~vC1JdU+AKFel)}XOw5*fi)M2(nsN9%%~cPEW~m;Rs$J22vZzP z)z=MHr;FqJjn!(%4y#Qw!>UkQ+Z*gTPeeX|kH<&o4xWDCVwsYDM4DchoY$P8Tj?E9Rx4Pt`&rM-NlA&=~Qz zsumgz{%=mfSM~Gws{PU?y2938_A#7odRZ54N+Bv$y#i&5X%u zM^s;PS`FDnwP|N)mFil_-=up|8CLg60U`e8%WYa|QFzR>2E|5TK+6RT*#|2%GptHg zs~xwRZ;InLi{oEvvpU8taj~pj?c-sA4NaYEql+fSmPOlSlH(jwFir0HY(AHjoB**varpN zEnIao!>U+|O7Rv#Z85DfSs|=Gt5_YE3y78R-;J5opm?huvW2Q@Wk?k&QG>Js5P|9> zH6-48Mw4nTO^KS;pm@t%kz*rk%m|k!*iL$uk4F{cHoIf~Pd)2t|9z$qaL$|WrRANw*L9|ZG6+t6g=4?IBp*n{dYWc78Yy$Hb*bR z3P_lRRn!`af!W3oDps~q4SbyUu1E``4Jo1LHKCI~q3$x)^oiNFO6wa{M5-a%X4SaB z@G8}}(i#`U^?%{@3C(L>4p(rW;ncOASnG2AgFA3Llh#FGXCZs99#;ex z`D}439~PteVdOSfy7!7~Zfn>UyVf;^T&dobp1Z)>-jMn)XKivP^KpJMJQ%IYsBN#b z{)Q?BgWLo7xtKlPC+Y9mjMFaEE%?&QuE1Gkzp97lO=ioX)zr;rU#fv6%S!X! z6`h4x)<+bd%OYRq^D!0{fZc#Ga~fn>Tf?>-1M3WKJb_D#IGJWtFaqAt=pZTZXlLiLt9vH7r#= zX1NW?89b!8J%prXKFw$O{9aHQutFmqT4lf;Ud^E^9}~OI&@F&H*BOeX8d+L(K)0jI zuMJss@SvjjpvWW7)dsCPpy67y)@=--Qe7{=sQQ=m@G}sle<0@ej;lTfnw2 zG2BYkuvD{v80#X?X*7J435f3tgm(5_`O_xtsDM+&VGbH{QU-m zFr3c9msBfw0BPOdhiA>iZBa3chlh@|n%E0ld)W@0Q52|#s!eJ0Jwv5b!Ac4NPBr~? p8I&t3LlgqMSJTPOA%?v8sXxt!<4F-Wp(2IAJM5a)j%zNt{{eBV$&CO2 diff --git a/GstreamerHelper/x86/lib/glib-2.0/include/glibconfig.h b/GstreamerHelper/x86/lib/glib-2.0/include/glibconfig.h deleted file mode 100644 index 4d169fb2..00000000 --- a/GstreamerHelper/x86/lib/glib-2.0/include/glibconfig.h +++ /dev/null @@ -1,266 +0,0 @@ -/* glibconfig.h.win32.in. Originally merged from two versions of - * glibconfig.h, generated by the GLib configure script, for gcc and - * MSVC. - */ - -/* glibconfig.h - * - * This is a generated file. Please modify 'glibconfig.h.win32.in' - */ - -#ifndef __G_LIBCONFIG_H__ -#define __G_LIBCONFIG_H__ - -#include - -#include -#include - -G_BEGIN_DECLS - -#define G_MINFLOAT FLT_MIN -#define G_MAXFLOAT FLT_MAX -#define G_MINDOUBLE DBL_MIN -#define G_MAXDOUBLE DBL_MAX -#define G_MINSHORT SHRT_MIN -#define G_MAXSHORT SHRT_MAX -#define G_MAXUSHORT USHRT_MAX -#define G_MININT INT_MIN -#define G_MAXINT INT_MAX -#define G_MAXUINT UINT_MAX -#define G_MINLONG LONG_MIN -#define G_MAXLONG LONG_MAX -#define G_MAXULONG ULONG_MAX - -typedef signed char gint8; -typedef unsigned char guint8; -typedef signed short gint16; -typedef unsigned short guint16; -#define G_GINT16_MODIFIER "h" -#define G_GINT16_FORMAT "hi" -#define G_GUINT16_FORMAT "hu" -typedef signed int gint32; -typedef unsigned int guint32; -#define G_GINT32_MODIFIER "" -#define G_GINT32_FORMAT "i" -#define G_GUINT32_FORMAT "u" -#define G_HAVE_GINT64 1 /* deprecated, always true */ - -#ifndef _MSC_VER -G_GNUC_EXTENSION typedef signed long long gint64; -G_GNUC_EXTENSION typedef unsigned long long guint64; -#else /* _MSC_VER */ -typedef signed __int64 gint64; -typedef unsigned __int64 guint64; -#endif /* _MSC_VER */ - -#ifndef _MSC_VER -#define G_GINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##LL)) -#else /* _MSC_VER */ -#define G_GINT64_CONSTANT(val) (val##i64) -#endif /* _MSC_VER */ -#ifndef _MSC_VER -#define G_GUINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##ULL)) -#else /* _MSC_VER */ -#define G_GUINT64_CONSTANT(val) (val##Ui64) -#endif /* _MSC_VER */ -#define G_GINT64_MODIFIER "I64" -#define G_GINT64_FORMAT "I64i" -#define G_GUINT64_FORMAT "I64u" - -#if defined(_WIN64) || defined(_M_X64) || defined(_M_AMD64) - -#define GLIB_SIZEOF_VOID_P 8 -#define GLIB_SIZEOF_LONG 4 -#define GLIB_SIZEOF_SIZE_T 8 - -typedef signed long long gssize; -typedef unsigned long long gsize; -#define G_GSIZE_MODIFIER "I64" -#define G_GSSIZE_FORMAT "I64d" -#define G_GSIZE_FORMAT "I64u" - -#define G_MAXSIZE G_MAXUINT64 -#define G_MINSSIZE G_MININT64 -#define G_MAXSSIZE G_MAXINT64 - -#else - -#define GLIB_SIZEOF_VOID_P 4 -#define GLIB_SIZEOF_LONG 4 -#define GLIB_SIZEOF_SIZE_T 4 - -typedef signed int gssize; -typedef unsigned int gsize; -#define G_GSIZE_MODIFIER "" -#define G_GSSIZE_FORMAT "i" -#define G_GSIZE_FORMAT "u" - -#define G_MAXSIZE G_MAXUINT -#define G_MINSSIZE G_MININT -#define G_MAXSSIZE G_MAXINT - -#endif - -typedef gint64 goffset; -#define G_MINOFFSET G_MININT64 -#define G_MAXOFFSET G_MAXINT64 - -#define G_GOFFSET_MODIFIER G_GINT64_MODIFIER -#define G_GOFFSET_FORMAT G_GINT64_FORMAT -#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val) - - -#ifndef _WIN64 - -#define GPOINTER_TO_INT(p) ((gint) (p)) -#define GPOINTER_TO_UINT(p) ((guint) (p)) - -#define GINT_TO_POINTER(i) ((gpointer) (i)) -#define GUINT_TO_POINTER(u) ((gpointer) (u)) - -typedef signed int gintptr; -typedef unsigned int guintptr; - -#define G_GINTPTR_MODIFIER "" -#define G_GINTPTR_FORMAT "i" -#define G_GUINTPTR_FORMAT "u" - -#else - -#define GPOINTER_TO_INT(p) ((gint) (gint64) (p)) -#define GPOINTER_TO_UINT(p) ((guint) (guint64) (p)) - -#define GINT_TO_POINTER(i) ((gpointer) (gint64) (i)) -#define GUINT_TO_POINTER(u) ((gpointer) (guint64) (u)) - -#ifndef _MSC_VER -typedef signed long long gintptr; -typedef unsigned long long guintptr; -#else -typedef signed __int64 gintptr; -typedef unsigned __int64 guintptr; -#endif - -#define G_GINTPTR_MODIFIER "I64" -#define G_GINTPTR_FORMAT "I64i" -#define G_GUINTPTR_FORMAT "I64u" - -#endif - -#ifdef NeXT /* @#%@! NeXTStep */ -# define g_ATEXIT(proc) (!atexit (proc)) -#else -# define g_ATEXIT(proc) (atexit (proc)) -#endif - -#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END - -#define GLIB_MAJOR_VERSION 2 -#define GLIB_MINOR_VERSION 34 -#define GLIB_MICRO_VERSION 2 - -#define G_OS_WIN32 -#define G_PLATFORM_WIN32 - - -#ifndef _MSC_VER -#define G_VA_COPY va_copy -#endif /* not _MSC_VER */ - -#ifdef __cplusplus -#define G_HAVE_INLINE 1 -#else /* !__cplusplus */ -#ifndef _MSC_VER -#define G_HAVE_INLINE 1 -#endif /* _MSC_VER */ -#define G_HAVE___INLINE 1 -#if !defined(_MSC_VER) && !defined(__DMC__) -#define G_HAVE___INLINE__ 1 -#endif /* !_MSC_VER and !__DMC__ */ -#endif /* !__cplusplus */ - -#define G_CAN_INLINE 1 - -#ifndef _MSC_VER -#define G_HAVE_ISO_VARARGS 1 - -/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi - * is passed ISO vararg support is turned off, and there is no work - * around to turn it on, so we unconditionally turn it off. - */ -#if __GNUC__ == 2 && __GNUC_MINOR__ == 95 -# undef G_HAVE_ISO_VARARGS -#endif - -#define G_HAVE_GNUC_VARARGS 1 -#else /* _MSC_VER */ -/* varargs macros available since msvc8 (vs2005) */ -# if _MSC_VER >= 1400 -# define G_HAVE_ISO_VARARGS 1 -# endif -#endif /* not _MSC_VER */ -#define G_HAVE_GROWING_STACK 0 - -#define G_GNUC_INTERNAL - -#define G_THREADS_ENABLED -#define G_THREADS_IMPL_WIN32 - -#define G_ATOMIC_LOCK_FREE - -#define GINT16_TO_LE(val) ((gint16) (val)) -#define GUINT16_TO_LE(val) ((guint16) (val)) -#define GINT16_TO_BE(val) ((gint16) GUINT16_SWAP_LE_BE (val)) -#define GUINT16_TO_BE(val) (GUINT16_SWAP_LE_BE (val)) -#define GINT32_TO_LE(val) ((gint32) (val)) -#define GUINT32_TO_LE(val) ((guint32) (val)) -#define GINT32_TO_BE(val) ((gint32) GUINT32_SWAP_LE_BE (val)) -#define GUINT32_TO_BE(val) (GUINT32_SWAP_LE_BE (val)) -#define GINT64_TO_LE(val) ((gint64) (val)) -#define GUINT64_TO_LE(val) ((guint64) (val)) -#define GINT64_TO_BE(val) ((gint64) GUINT64_SWAP_LE_BE (val)) -#define GUINT64_TO_BE(val) (GUINT64_SWAP_LE_BE (val)) -#define GLONG_TO_LE(val) ((glong) GINT32_TO_LE (val)) -#define GULONG_TO_LE(val) ((gulong) GUINT32_TO_LE (val)) -#define GLONG_TO_BE(val) ((glong) GINT32_TO_BE (val)) -#define GULONG_TO_BE(val) ((gulong) GUINT32_TO_BE (val)) -#define GINT_TO_LE(val) ((gint) GINT32_TO_LE (val)) -#define GUINT_TO_LE(val) ((guint) GUINT32_TO_LE (val)) -#define GINT_TO_BE(val) ((gint) GINT32_TO_BE (val)) -#define GUINT_TO_BE(val) ((guint) GUINT32_TO_BE (val)) -#define GSIZE_TO_LE(val) ((gsize) GUINT32_TO_LE (val)) -#define GSSIZE_TO_LE(val) ((gssize) GINT32_TO_LE (val)) -#define GSIZE_TO_BE(val) ((gsize) GUINT32_TO_BE (val)) -#define GSSIZE_TO_BE(val) ((gssize) GINT32_TO_BE (val)) -#define G_BYTE_ORDER G_LITTLE_ENDIAN - -#define GLIB_SYSDEF_POLLIN =1 -#define GLIB_SYSDEF_POLLOUT =4 -#define GLIB_SYSDEF_POLLPRI =2 -#define GLIB_SYSDEF_POLLHUP =16 -#define GLIB_SYSDEF_POLLERR =8 -#define GLIB_SYSDEF_POLLNVAL =32 - -#define G_MODULE_SUFFIX "dll" - -/* A GPid is an abstraction for a process "handle". It is *not* an - * abstraction for a process identifier in general. GPid is used in - * GLib only for descendant processes spawned with the g_spawn* - * functions. On POSIX there is no "process handle" concept as such, - * but on Windows a GPid is a handle to a process, a kind of pointer, - * not a process identifier. - */ -typedef void * GPid; - -#define GLIB_SYSDEF_AF_UNIX 1 -#define GLIB_SYSDEF_AF_INET 2 -#define GLIB_SYSDEF_AF_INET6 23 - -#define GLIB_SYSDEF_MSG_OOB 1 -#define GLIB_SYSDEF_MSG_PEEK 2 -#define GLIB_SYSDEF_MSG_DONTROUTE 4 - -G_END_DECLS - -#endif /* GLIBCONFIG_H */ diff --git a/GstreamerHelper/x86/lib/gobject-2.0.lib b/GstreamerHelper/x86/lib/gobject-2.0.lib deleted file mode 100644 index 1c69913d7eea1c7532a9cbd1f2d6b720d9539a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322612 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�#ns9AW_+=AtTf+(b4JF^^c6p*OZ(W#bRPTo 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 diff --git a/GstreamerHelper/x86/lib/gstreamer-1.0.lib b/GstreamerHelper/x86/lib/gstreamer-1.0.lib deleted file mode 100644 index 431a3575ea67ec9354328e86463633ef1f502a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1005224 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 diff --git a/Vocaluxe.sln b/Vocaluxe.sln index 2ff35075..da685caf 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -5,7 +5,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocalu {55F89808-4E79-4FFE-BC13-48258913F5C9} = {55F89808-4E79-4FFE-BC13-48258913F5C9} {6F3E1874-F28A-40E9-AFBD-31934D593678} = {6F3E1874-F28A-40E9-AFBD-31934D593678} {6F3E1874-F28A-40E9-AFBD-31934D593679} = {6F3E1874-F28A-40E9-AFBD-31934D593679} - {ED007796-367F-4142-AA55-5450C7645C2C} = {ED007796-367F-4142-AA55-5450C7645C2C} {EC5167E4-CCFB-4CEE-987C-CF816F1062A3} = {EC5167E4-CCFB-4CEE-987C-CF816F1062A3} {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} = {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} {5A4053F1-5AD5-441F-B254-D97A088127B6} = {5A4053F1-5AD5-441F-B254-D97A088127B6} @@ -20,8 +19,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallenge", "Party EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallengeMedley", "PartyModes\PartyModeChallengeMedley\PartyModeChallengeMedley.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593678}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GstreamerHelper", "GstreamerHelper\GstreamerHelper.vcxproj", "{ED007796-367F-4142-AA55-5450C7645C2C}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerLib", "ClientServerLib\ClientServerLib\ServerLib.csproj", "{EC5167E4-CCFB-4CEE-987C-CF816F1062A3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebserverInitalConfig", "WebserverInitalConfig\WebserverInitalConfig.csproj", "{55F89808-4E79-4FFE-BC13-48258913F5C9}" @@ -142,23 +139,6 @@ Global {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x64.ActiveCfg = DebugWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x86.ActiveCfg = DebugWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x86.Build.0 = DebugWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x64.ActiveCfg = DebugWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x64.Build.0 = DebugWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x86.ActiveCfg = DebugWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x86.Build.0 = DebugWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x64.ActiveCfg = ReleaseWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x64.Build.0 = ReleaseWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x86.ActiveCfg = ReleaseWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x86.Build.0 = ReleaseWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x64.ActiveCfg = ReleaseWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x86.ActiveCfg = ReleaseWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Win32 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x86.Build.0 = ReleaseWin|Win32 {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU diff --git a/Vocaluxe/Base/CVideo.cs b/Vocaluxe/Base/CVideo.cs index 3dee6082..5bb596e9 100644 --- a/Vocaluxe/Base/CVideo.cs +++ b/Vocaluxe/Base/CVideo.cs @@ -38,9 +38,6 @@ namespace Vocaluxe.Base case EVideoDecoder.FFmpeg: _VideoDecoder = new CVideoDecoderFFmpeg(); break; - case EVideoDecoder.Gstreamer: - _VideoDecoder = new CVideoDecoderGstreamer(); - break; default: _VideoDecoder = new CVideoDecoderFFmpeg(); break; diff --git a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs deleted file mode 100644 index 31740333..00000000 --- a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs +++ /dev/null @@ -1,126 +0,0 @@ -#region license -// This file is part of Vocaluxe. -// -// Vocaluxe is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Vocaluxe is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Vocaluxe. If not, see . -#endregion - -using System; -using Vocaluxe.Base; -using Vocaluxe.Lib.Video.Gstreamer; -using VocaluxeLib.Draw; - -namespace Vocaluxe.Lib.Video -{ - class CVideoDecoderGstreamer : IVideoDecoder - { - #region log - private CGstreamerVideoWrapper.LogCallback _Log; - - private void _LogHandler(string text) - { - CLog.LogError(text); - } - #endregion log - - public bool Init() - { - bool retval = CGstreamerVideoWrapper.InitVideo(); - _Log = _LogHandler; - //Really needed? CodeAnalysis complains - //GC.SuppressFinalize(Log); - CGstreamerVideoWrapper.SetVideoLogCallback(_Log); - return retval; - } - - public void CloseAll() - { - CGstreamerVideoWrapper.CloseAllVideos(); - } - - public int Load(string videoFileName) - { - int i = -1; - try - { - var u = new Uri(videoFileName); - i = CGstreamerVideoWrapper.LoadVideo(u.AbsoluteUri); - return i; - } - catch (Exception) {} - return i; - } - - public bool Close(int streamID) - { - return CGstreamerVideoWrapper.CloseVideo(streamID); - } - - public int GetNumStreams() - { - return CGstreamerVideoWrapper.GetVideoNumStreams(); - } - - public float GetLength(int streamID) - { - return CGstreamerVideoWrapper.GetVideoLength(streamID); - } - - public bool GetFrame(int streamID, ref CTexture frame, float time, out float videoTime) - { - SManagedFrame managedFrame = CGstreamerVideoWrapper.GetFrame(streamID, time); - videoTime = managedFrame.Videotime; - - _UploadNewFrame(ref frame, ref managedFrame.Buffer, managedFrame.Width, managedFrame.Height); - return frame != null; - } - - public bool Skip(int streamID, float start, float gap) - { - return CGstreamerVideoWrapper.Skip(streamID, start, gap); - } - - public void SetLoop(int streamID, bool loop) - { - CGstreamerVideoWrapper.SetVideoLoop(streamID, loop); - } - - public void Pause(int streamID) - { - CGstreamerVideoWrapper.PauseVideo(streamID); - } - - public void Resume(int streamID) - { - CGstreamerVideoWrapper.ResumeVideo(streamID); - } - - public bool Finished(int streamID) - { - return CGstreamerVideoWrapper.Finished(streamID); - } - - public void Update() - { - CGstreamerVideoWrapper.UpdateVideo(); - } - - private void _UploadNewFrame(ref CTexture frame, ref byte[] data, int width, int height) - { - if (data == null) - return; - CDraw.UpdateOrAddTexture(ref frame, width, height, data); - data = null; - } - } -} \ No newline at end of file diff --git a/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs b/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs deleted file mode 100644 index 5c17198a..00000000 --- a/Vocaluxe/Lib/Video/Gstreamer/CGstreamerVideoWrapper.cs +++ /dev/null @@ -1,129 +0,0 @@ -#region license -// This file is part of Vocaluxe. -// -// Vocaluxe is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Vocaluxe is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Vocaluxe. If not, see . -#endregion - -using System; -using System.Runtime.InteropServices; - -namespace Vocaluxe.Lib.Video.Gstreamer -{ - public struct SNativeFrame - { - // ReSharper disable UnassignedField.Global - internal IntPtr Buffer; - public int Size; - public int Width; - public int Height; - public float Videotime; - // ReSharper restore UnassignedField.Global - } - - public struct SManagedFrame - { - public byte[] Buffer; - public int Width; - public int Height; - public float Videotime; - } - - public static class CGstreamerVideoWrapper - { - #region arch -#if ARCH_X86 -#if WIN - private const string _Dll = "x86\\gstreamer\\gstreamerhelper.dll"; -#endif -#endif - -#if ARCH_X64 -#if WIN - private const string _Dll = "x64\\gstreamer\\gstreamerhelper.dll"; -#endif -#endif - #endregion arch - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - public delegate void LogCallback(string message); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetVideoLogCallback(LogCallback c); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool InitVideo(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void CloseAllVideos(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern int LoadVideo(string videoFileName); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool CloseVideo(int streamID); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern int GetVideoNumStreams(); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern float GetVideoLength(int streamID); - - [DllImport(_Dll, EntryPoint = "GetFrame", CallingConvention = CallingConvention.Cdecl)] - public static extern SNativeFrame GetFrameNative(int streamID, float time); - - public static SManagedFrame GetFrame(int streamID, float time) - { - SNativeFrame f = GetFrameNative(streamID, time); - - byte[] buffer = null; - - if (f.Size > 0) - { - buffer = new byte[f.Size]; - Marshal.Copy(f.Buffer, buffer, 0, f.Size); - } - - SManagedFrame m; - m.Buffer = buffer; - m.Height = f.Height; - m.Videotime = f.Videotime; - m.Width = f.Width; - return m; - } - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool Skip(int streamID, float start, float gap); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void SetVideoLoop(int streamID, - [MarshalAs(UnmanagedType.U1)] bool loop); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void PauseVideo(int streamID); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - public static extern void ResumeVideo(int streamID); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool Finished(int streamID); - - [DllImport(_Dll, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool UpdateVideo(); - } -} \ No newline at end of file diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 76a901b5..f18b3b11 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -322,8 +322,6 @@ - - diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs index cba7554d..0df1d888 100644 --- a/VocaluxeLib/Enums.cs +++ b/VocaluxeLib/Enums.cs @@ -163,8 +163,7 @@ namespace VocaluxeLib public enum EVideoDecoder { - FFmpeg, - Gstreamer + FFmpeg } public enum ESongMenu diff --git a/gstreamerhelper/VocaluxeClock.cpp b/gstreamerhelper/VocaluxeClock.cpp deleted file mode 100644 index d1a47f7a..00000000 --- a/gstreamerhelper/VocaluxeClock.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "VocaluxeClock.h" - -static void vocaluxe_clock_class_init (VocaluxeClockClass * klass); -static void vocaluxe_clock_init (VocaluxeClock * clock); - -static GstClockTime vocaluxe_clock_get_internal_time (GstClock * clock); - -static GstSystemClockClass *parent_class = NULL; - -GType -vocaluxe_clock_get_type (void) -{ - static GType clock_type = 0; - - if (!clock_type) { - static const GTypeInfo clock_info = { - sizeof (VocaluxeClockClass), - NULL, - NULL, - (GClassInitFunc) vocaluxe_clock_class_init, - NULL, - NULL, - sizeof (VocaluxeClock), - 4, - (GInstanceInitFunc) vocaluxe_clock_init, - NULL - }; - - clock_type = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "VocaluxeClock", - &clock_info, (GTypeFlags) 0); - } - return clock_type; -} - - -static void -vocaluxe_clock_class_init (VocaluxeClockClass * klass) -{ - GstClockClass *gstclock_class; - - gstclock_class = (GstClockClass *) klass; - - parent_class = (GstSystemClockClass*) g_type_class_peek_parent (klass); - - gstclock_class->get_internal_time = vocaluxe_clock_get_internal_time; -} - -static void -vocaluxe_clock_init (VocaluxeClock * clock) -{ - clock->last_time = 0; - GST_OBJECT_FLAG_SET (clock, GST_CLOCK_FLAG_CAN_SET_MASTER); -} - -VocaluxeClock * -vocaluxe_clock_new (const gchar * name) -{ - VocaluxeClock *_vocaluxeclock = - VOCALUXE_CLOCK (g_object_new (GST_TYPE_VOCALUXE_CLOCK, "name", name, NULL)); - - return _vocaluxeclock; -} - -static GstClockTime -vocaluxe_clock_get_internal_time (GstClock * clock) -{ - VocaluxeClock *_vocaluxeclock; - GstClockTime result; - - _vocaluxeclock = GST_VOCALUXE_CLOCK_CAST (clock); - - result = (GstClockTime) _vocaluxeclock->time * GST_SECOND; - return result; -} - -void -vocaluxe_clock_set_time (VocaluxeClock * clock, float time) -{ - clock->time = time; -} \ No newline at end of file diff --git a/gstreamerhelper/VocaluxeClock.h b/gstreamerhelper/VocaluxeClock.h deleted file mode 100644 index e6377220..00000000 --- a/gstreamerhelper/VocaluxeClock.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_VOCALUXE_CLOCK \ - (vocaluxe_clock_get_type()) -#define VOCALUXE_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VOCALUXE_CLOCK,VocaluxeClock)) -#define VOCALUXE_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VOCALUXE_CLOCK,VocaluxeClockClass)) -#define GST_IS_VOCALUXE_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VOCALUXE_CLOCK)) -#define GST_IS_VOCALUXE_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VOCALUXE_CLOCK)) -#define GST_VOCALUXE_CLOCK_CAST(obj) \ - ((VocaluxeClock*)(obj)) - -typedef struct _VocaluxeClock VocaluxeClock; -typedef struct _VocaluxeClockClass VocaluxeClockClass; - -struct _VocaluxeClock { - GstSystemClock clock; - - GstClockTime last_time; - gfloat time; -}; - -struct _VocaluxeClockClass { - GstSystemClockClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -GType vocaluxe_clock_get_type (void); -VocaluxeClock* vocaluxe_clock_new (const gchar *name); -void vocaluxe_clock_set_time (VocaluxeClock *clock, float time); - -} \ No newline at end of file diff --git a/gstreamerhelper/x64/lib/gstapp-1.0.lib b/gstreamerhelper/x64/lib/gstapp-1.0.lib deleted file mode 100644 index 9d5f770bcaef3cd7aebcd905881921a9ed94c47b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24940 zcmeI4&2Jk;6u@7c^eeQql(wXwY)h$%)Ec`Vz#oA)@Hh0xnImWZ0FE3`%X>3BJ2N{UUav~g%Dd96*Zbb=?9BV^^P7FU zK7F;`SzNs~{%)Wz)ye70)#~JAWjY8dOr)-ZpgKEK<2B~T0pJ?Iu73c=e+1a~2`>lE z0Z=*kjF-bt0jNwo;pO<(08~!ZcnSUnpz_vlyqx<9fXX{x@^YaJK&AW_FI7Aim8r+P z%q#;?xpJPDt9UFb@BPlp^xuL z$I?Gls@8H@9mhWwCH4K*rfRB&QQK~9RxN35+9|DRBBINaEeU(t>j`PHmS#$ORZS&X z-(hV!Rm0kijiqpNIT|jD)pU8>QgdUCU3P3}n8giLY$`^5tsjZ5iUVjm#u1h}o9*Oz zi<(Sk)UXYYsG*OK+$(T*oZ@0#C}^#fw$cBj$VY_)8CV-{jT5qYNb-E;jjJl>|_)q%#SZU+zGUt9|73Uwst_d*SOzf+wN5Wx8}=B z^uGtR+wG$U4@j>`2Ru6^bn%B8#_+tuX|1v|k-JYGyRi7OAOYR&wbm z<2CBiQO0VF>ChI7u6r|b2f-( z%7RV$q-zS`C|mPY2`ac@4dfjN6T#g|rE+POW8BZ5)@rkgKi$QeeS!lx&bCZ~=_sTd1%+e zIT>F9{J0V6M7!`Kc>4Tp`t}6pk>+wz&RcA=EM{kFpWA*9ZgF-vCv?1s80EK&PGQva zz@UyN^S2Oj#zu}>z*^kjN?$7Wu+h-yWc?-z_!;pt1fbSAou_e&7P{*Ap7+^zzAC{T z+=$}_TkjKrhgHQkab>=lk$pKW*)s*%Xblc;9C^fKpF-K7WS@|>71MNSKs+81kyo+< zJa<|o+1L3Fwl2X}_!*OJ>3srhn}(n3nUq{l;q5TCP|U$S_9HZMKaV}nL0~+*Opkp} zY1ikmdv-m;V}Ebgi@BaaI}OV9anrJNLn7Bai#S5^91kUqPzgS^@oc|C!*293k)PmN zN`j}&nBy^8wI9JtisfG>!5d1uK7#Mt_2OX{F~<*fy_nz=83;aR5G?PW<=HFKuM{nk zV!X{CFD1B*+exo1dv5p1irmlhbXuNGk6iG4Hs<*l+GtRZeAKY2xNDnluT0lAEt2Oe zdX;4}P8@+^98r#Y7TS)NMCaxoudmf$YhjG6X)*4vzP2FcQjr#$R56Y z2@&ncmq?MH;ItXPB5w8)oF#7FrxC2br8Z1)v)*&lDJSH9p3~<4ide(TbAZx8V~xF% zXYtk{o9;v}(G5?mVe5SYYpaT%?6jG{nX2(jbMY36e1a|u*{_&nYf)mJz4aO92h@Ad zA4YrVqXc(x9X~}Uu+@6+KwH=Gvz0{b=mvJd1jij z{j|s@L*oZ%ac>E3;@V)^^+q;5vCm~*hAU}vgHr{=WE5o5?0BTIgJw~b-(kQnn?`F$VoO}gN5k^Xp&edntZe1RK=KXyJs zCxI5j<9~*(k~%kNdgkKY6G?TJdmOuTyQ+T|lk555$%tP`^i_@M&yz%}J+}nRn%M87 zQ)dQ?Hv`Eet~etL%{whLi~lgnbF4AYn}OthwSRAN;Ved`k9SU+9h_4Ct*CfcJNhSz zcw%z|Ss(O{-431S=>N6yo#m$a11-`s$A8^}drR;UuC-XB@BfYU;Wu>-(2OpMdlxdg z$TII6(=ACkFZNh-o_+Da_b%dITl}z;`D2Q-S->J|LaxObQv@g*)CZ563=ePCgm_hZ z??75p@spi4A6R5f2<#V1cF81L%L(M!OP^t*rA8TjvL-~f)_Vuqx{jaiv>CzTjTR{8=J=e9Q_yn)RmYAk;R5DYZCX`;g3C8lYaqLR@a39 From 235ce266e53ad86c5da170a78b6fe20d0993f4f6 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 20:03:28 +0200 Subject: [PATCH 113/116] Fix Duration Update --- .../CGstreamerSharpAudioStream.cs | 43 +++++-------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs index 36b6a7d8..d7ac9f72 100644 --- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs +++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs @@ -30,10 +30,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp private volatile bool _IsFinished; private volatile float _Position; - private volatile bool _QueryingDuration; - private System.Threading.Thread _QueryDurationThread; - private readonly object _DurationLock = new object(); //For atomic check-and-update of _QueryingDuration private readonly object _ElementLock = new object(); //Hold this if you set _Element=null or when accessing _Element from outside the main thread public override float Volume @@ -60,12 +57,9 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp { get { - if (base.Length < 0 && _QueryDurationThread == null && _Element != null) - { - // _QueryDurationThread does not get reset so it is created only once! - _QueryDurationThread = new System.Threading.Thread(_UpdateDuration) {Name = "GSt Update Duration"}; - _QueryDurationThread.Start(); - } + //TODO: Is it ok, to remove this? Gst should post a message if duration was changed so this should not be required + //if (base.Length < 0 && _Element != null) + // _UpdateDuration(); return base.Length >= 0f ? base.Length : 0f; } } @@ -180,12 +174,9 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp // Passing CLOCK_TIME_NONE here causes the pipeline to block for a long time so with // prescan enabled the pipeline will wait 500ms for stream to initialize and then continue // if it takes more than 500ms, duration queries will be performed asynchronously - if (prescan) - { - Message msg = _Element.Bus.TimedPopFiltered(0xffffffffffffffff, MessageType.AsyncDone); - if (msg.Handle != IntPtr.Zero) - _UpdateDuration(); - } + Message msg = _Element.Bus.TimedPopFiltered(prescan ? ulong.MaxValue : 0L, MessageType.AsyncDone); + if (msg.Handle != IntPtr.Zero) + _UpdateDuration(); _FileOpened = true; return true; } @@ -274,26 +265,14 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp private void _UpdateDuration() { - if (_QueryingDuration) - return; - lock (_DurationLock) + lock (_ElementLock) { - if (_QueryingDuration) + if (_Element == null) return; - _QueryingDuration = true; + long duration; + if (_Element.QueryDuration(Format.Time, out duration)) + Length = duration / (float)Constants.SECOND; } - long duration = -1; - while (duration < 0 && !IsFinished) - { - lock (_ElementLock) - { - if (_Element == null) - break; - if (_Element.QueryDuration(Format.Time, out duration)) - Length = duration / (float)Constants.SECOND; - } - } - _QueryingDuration = false; } } } \ No newline at end of file From 9695e98bbb0dc89d9e48491d633fb68d418f7842 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 7 May 2014 20:20:44 +0200 Subject: [PATCH 114/116] Update display of no length --- VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs | 1 + VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index b1106b7b..cc7f62b8 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -523,6 +523,7 @@ namespace VocaluxeLib.Menu.SongMenu if (song == null) return; + //TODO: Using prescan here causes Vocaluxe to hang a bit on loading the song but we need the length below int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true, true); float startposition = song.Preview.StartTime; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index e15be31d..1fef5094 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -137,7 +137,7 @@ namespace VocaluxeLib.Menu.SongMenu _Tiles[i].Selected = _Locked == i + _Offset; } - if (_Length < 0 && CBase.Sound.GetLength(_PreviewSongStream) > 0 && CBase.Songs.IsInCategory()) + if (_Length < 0 && CBase.Songs.IsInCategory() && CBase.Sound.GetLength(_PreviewSongStream) > 0) _UpdateLength(CBase.Songs.GetVisibleSong(_PreviewId)); } @@ -215,6 +215,8 @@ namespace VocaluxeLib.Menu.SongMenu _SongLength.Text = min.ToString("00") + ":" + sec.ToString("00"); _Length = time; } + else + _SongLength.Text = "..."; } public override void OnShow() From 8199c3a1807a32ccb42c79ab04660d72001d3d37 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 9 May 2014 19:22:37 +0200 Subject: [PATCH 115/116] Disable prescan for now in the previews --- VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index cc7f62b8..7d1f0be2 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -524,7 +524,7 @@ namespace VocaluxeLib.Menu.SongMenu return; //TODO: Using prescan here causes Vocaluxe to hang a bit on loading the song but we need the length below - int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true, true); + int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true); float startposition = song.Preview.StartTime; float length = CBase.Sound.GetLength(stream); From 45d539892a1ca19ad655ac49838c003bc6d3d2b2 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 9 May 2014 19:23:06 +0200 Subject: [PATCH 116/116] Increase version to 0.3.1 --- Vocaluxe/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Properties/AssemblyInfo.cs b/Vocaluxe/Properties/AssemblyInfo.cs index 7a725ec9..56f417d4 100644 --- a/Vocaluxe/Properties/AssemblyInfo.cs +++ b/Vocaluxe/Properties/AssemblyInfo.cs @@ -49,5 +49,5 @@ using System.Runtime.InteropServices; // Revision // -[assembly: AssemblyVersion("0.3.0.84")] -[assembly: AssemblyFileVersion("0.3.0.84")] \ No newline at end of file +[assembly: AssemblyVersion("0.3.1.0")] +[assembly: AssemblyFileVersion("0.3.1.0")] \ No newline at end of file

    JWx^rT4Wb9Zg+QM5)F7X8TF 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°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 c@vr~=Bf>zd9}0@1(XoF-ZTfXn-ZlpQKXsO Date: Mon, 24 Mar 2014 01:56:44 +0100 Subject: [PATCH 061/116] Fix using --- Vocaluxe/Lib/Sound/Record/CBuffer.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Lib/Sound/Record/CBuffer.cs b/Vocaluxe/Lib/Sound/Record/CBuffer.cs index b7f84c54..9c668741 100644 --- a/Vocaluxe/Lib/Sound/Record/CBuffer.cs +++ b/Vocaluxe/Lib/Sound/Record/CBuffer.cs @@ -15,15 +15,18 @@ // along with Vocaluxe. If not, see . #endregion -#define TEST_PITCH +//#define TEST_PITCH #define USE_NATIVE_DETECTION //If defined, it uses a library with native code that speeds up detection by a factor of 10 using System; using System.IO; -#if TEST_PITCH using System.Diagnostics; +#if USE_NATIVE_DETECTION using System.Runtime.InteropServices; + +#endif +#if TEST_PITCH using System.Windows.Forms; using VocaluxeLib; From 64b4f15281ec9e390f56c9eb3a7e91ddb2d03fd6 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 24 Mar 2014 02:00:41 +0100 Subject: [PATCH 062/116] Fix wrong array bounds --- PitchTracker/pitchTracker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PitchTracker/pitchTracker.cpp b/PitchTracker/pitchTracker.cpp index 72904102..31e82059 100644 --- a/PitchTracker/pitchTracker.cpp +++ b/PitchTracker/pitchTracker.cpp @@ -43,7 +43,7 @@ void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ DeInit(); if(maxHalfTone <= 0) return; - SamplesPerPeriodPerTone = (double*) malloc(MaxHalfTone * sizeof(double)); + SamplesPerPeriodPerTone = (double*) malloc((MaxHalfTone + 1) * sizeof(double)); //Init Array to avoid costly calculations for (int toneIndex = 0; toneIndex <= MaxHalfTone; toneIndex++) { @@ -105,7 +105,7 @@ int GetTone(double *samples, int sampleCt, float *weights){ if (curWeight < minWeight) minWeight = curWeight; - weights[toneIndex] = (float) curWeight; + weights[toneIndex - MinHalfTone] = (float) curWeight; } if(maxWeight - minWeight > 0.01){ From 0a59b250d37580683b3b4f0e294b554c83af945b Mon Sep 17 00:00:00 2001 From: Flamefire Date: Mon, 24 Mar 2014 02:03:31 +0100 Subject: [PATCH 063/116] Fix build configurations (use anycpu where it was used) --- .../PartyModeChallenge.csproj | 71 +------- .../PartyModeChallengeMedley.csproj | 71 +------- .../PartyModeTicTacToe.csproj | 71 +------- Vocaluxe.sln | 169 +++++++++--------- VocaluxeLib/VocaluxeLib.csproj | 64 +------ 5 files changed, 111 insertions(+), 335 deletions(-) diff --git a/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj b/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj index e9ca8fc6..193da7d0 100644 --- a/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj +++ b/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj @@ -1,8 +1,8 @@  - Debug - x86 + DebugWin + AnyCPU 8.0.30703 2.0 {5A4053F1-5AD5-441F-B254-D97A088127B6} @@ -14,29 +14,7 @@ Client 512 - - AnyCPU - true - full - false - bin - TRACE;DEBUG;WIN - prompt - 4 - Off - - - AnyCPU - none - true - bin - prompt - 4 - false - WIN - Off - - + AnyCPU true full @@ -48,7 +26,7 @@ Off ..\..\CheckingRules.ruleset - + AnyCPU none true @@ -59,7 +37,7 @@ WIN Off - + AnyCPU true full @@ -70,7 +48,7 @@ 4 Off - + AnyCPU none true @@ -81,42 +59,7 @@ LINUX Off - - AnyCPU - true - full - false - bin - TRACE;DEBUG;LINUX - prompt - 4 - Off - - - AnyCPU - none - true - bin - prompt - 4 - false - LINUX - Off - - - - - - bin - WIN - true - AnyCPU - false - Off - prompt - ManagedMinimumRules.ruleset - - + bin WIN true diff --git a/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj b/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj index 4f6ab862..135ffa4c 100644 --- a/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj +++ b/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj @@ -1,8 +1,8 @@  - Debug - x86 + DebugWin + AnyCPU 8.0.30703 2.0 {6F3E1874-F28A-40E9-AFBD-31934D593678} @@ -14,29 +14,7 @@ Client 512 - - AnyCPU - true - full - false - bin - TRACE;DEBUG;WIN - prompt - 4 - Off - - - AnyCPU - none - true - bin - prompt - 4 - false - WIN - Off - - + AnyCPU true full @@ -48,7 +26,7 @@ Off ..\..\CheckingRules.ruleset - + AnyCPU none true @@ -59,7 +37,7 @@ WIN Off - + AnyCPU true full @@ -70,7 +48,7 @@ 4 Off - + AnyCPU none true @@ -81,42 +59,7 @@ LINUX Off - - AnyCPU - true - full - false - bin - TRACE;DEBUG;LINUX - prompt - 4 - Off - - - AnyCPU - none - true - bin - prompt - 4 - false - LINUX - Off - - - - - - bin - WIN - true - AnyCPU - false - Off - prompt - ManagedMinimumRules.ruleset - - + bin WIN true diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj index fb739e23..0ccffb7b 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj @@ -1,8 +1,8 @@  - Debug - x86 + DebugWin + AnyCPU 8.0.30703 2.0 {6F3E1874-F28A-40E9-AFBD-31934D593679} @@ -14,29 +14,7 @@ Client 512 - - AnyCPU - true - full - false - bin - TRACE;DEBUG;WIN - prompt - 4 - Off - - - AnyCPU - none - true - bin - prompt - 4 - false - WIN - Off - - + AnyCPU true full @@ -48,7 +26,7 @@ Off ..\..\CheckingRules.ruleset - + AnyCPU none true @@ -59,7 +37,7 @@ WIN Off - + AnyCPU true full @@ -70,7 +48,7 @@ 4 Off - + AnyCPU none true @@ -81,42 +59,7 @@ LINUX Off - - AnyCPU - true - full - false - bin - TRACE;DEBUG;LINUX - prompt - 4 - Off - - - AnyCPU - none - true - bin - prompt - 4 - false - LINUX - Off - - - - - - bin - WIN - true - AnyCPU - false - Off - prompt - ManagedMinimumRules.ruleset - - + bin WIN true diff --git a/Vocaluxe.sln b/Vocaluxe.sln index 347f685a..c3821ed5 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -59,88 +59,89 @@ Global {2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 {2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 {2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.ReleaseWin|x86.Build.0 = ReleaseWin|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x64.ActiveCfg = DebugLinux|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x64.Build.0 = DebugLinux|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x86.ActiveCfg = DebugLinux|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x86.Build.0 = DebugLinux|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x64.ActiveCfg = DebugWin|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x64.Build.0 = DebugWin|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x86.ActiveCfg = DebugWin|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x86.Build.0 = DebugWin|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x64.ActiveCfg = InstallerWin|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x64.Build.0 = InstallerWin|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x86.ActiveCfg = InstallerWin|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x86.Build.0 = InstallerWin|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x86.Build.0 = ReleaseLinux|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 - {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x86.Build.0 = ReleaseWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x64.ActiveCfg = DebugLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x64.Build.0 = DebugLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x86.ActiveCfg = DebugLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x86.Build.0 = DebugLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x64.ActiveCfg = DebugWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x64.Build.0 = DebugWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x86.ActiveCfg = DebugWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x86.Build.0 = DebugWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x64.ActiveCfg = InstallerWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x64.Build.0 = InstallerWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x86.ActiveCfg = InstallerWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x86.Build.0 = InstallerWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x86.Build.0 = ReleaseLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.Build.0 = ReleaseWin|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x64.ActiveCfg = DebugLinux|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x64.Build.0 = DebugLinux|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x86.ActiveCfg = DebugLinux|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x86.Build.0 = DebugLinux|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x64.ActiveCfg = DebugWin|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x64.Build.0 = DebugWin|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.ActiveCfg = DebugWin|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.Build.0 = DebugWin|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x64.ActiveCfg = ReleaseWin|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x64.Build.0 = ReleaseWin|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x86.ActiveCfg = ReleaseWin|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x86.Build.0 = ReleaseWin|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.Build.0 = ReleaseLinux|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 - {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.Build.0 = ReleaseWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.ActiveCfg = DebugLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.Build.0 = DebugLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.ActiveCfg = DebugLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.Build.0 = DebugLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x64.ActiveCfg = DebugWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x64.Build.0 = DebugWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.ActiveCfg = DebugWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.Build.0 = DebugWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.ActiveCfg = ReleaseWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.Build.0 = ReleaseWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.ActiveCfg = ReleaseWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.Build.0 = ReleaseWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.Build.0 = ReleaseLinux|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 - {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.Build.0 = ReleaseWin|x86 + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x64.Build.0 = DebugWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.DebugWin|x86.Build.0 = DebugWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x64.ActiveCfg = InstallerWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x64.Build.0 = InstallerWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x86.ActiveCfg = InstallerWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.InstallerWin|x86.Build.0 = InstallerWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x64.Build.0 = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.DebugWin|x86.Build.0 = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x64.ActiveCfg = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x64.Build.0 = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x86.ActiveCfg = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.InstallerWin|x86.Build.0 = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x64.Build.0 = DebugWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.DebugWin|x86.Build.0 = DebugWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x64.ActiveCfg = InstallerWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x64.Build.0 = InstallerWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x86.ActiveCfg = InstallerWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.InstallerWin|x86.Build.0 = InstallerWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU + {5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x64.Build.0 = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.Build.0 = DebugWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.ActiveCfg = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.Build.0 = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.ActiveCfg = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.Build.0 = InstallerWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU + {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x64.ActiveCfg = DebugWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x86.ActiveCfg = DebugWin|x64 + {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x86.ActiveCfg = DebugWin|Win32 + {ED007796-367F-4142-AA55-5450C7645C2C}.DebugLinux|x86.Build.0 = DebugWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x64.ActiveCfg = DebugWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x64.Build.0 = DebugWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.DebugWin|x86.ActiveCfg = DebugWin|Win32 @@ -150,7 +151,7 @@ Global {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x86.ActiveCfg = ReleaseWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.InstallerWin|x86.Build.0 = ReleaseWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x64.ActiveCfg = ReleaseWin|x64 - {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x86.ActiveCfg = ReleaseWin|x64 + {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseLinux|x86.ActiveCfg = ReleaseWin|Win32 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 {ED007796-367F-4142-AA55-5450C7645C2C}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Win32 @@ -165,8 +166,8 @@ Global {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.DebugWin|x86.Build.0 = DebugWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x64.ActiveCfg = ReleaseWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x64.Build.0 = ReleaseWin|Any CPU - {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x86.ActiveCfg = ReleaseLinux|Any CPU - {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x86.Build.0 = ReleaseLinux|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x86.ActiveCfg = ReleaseWin|Any CPU + {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.InstallerWin|x86.Build.0 = ReleaseWin|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU {EC5167E4-CCFB-4CEE-987C-CF816F1062A3}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index 22d6a2b1..3f309ff2 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -14,29 +14,7 @@ 512 Client - - AnyCPU - true - full - false - bin\ - TRACE;DEBUG;WIN - prompt - 4 - Off - - - AnyCPU - none - true - bin\ - prompt - 4 - false - WIN - Off - - + AnyCPU true full @@ -48,7 +26,7 @@ Off ..\CheckingRules.ruleset - + AnyCPU none true @@ -59,7 +37,7 @@ WIN Off - + AnyCPU true full @@ -70,7 +48,7 @@ 4 Off - + AnyCPU none true @@ -81,39 +59,7 @@ LINUX Off - - AnyCPU - true - full - false - bin\ - TRACE;DEBUG;LINUX - prompt - 4 - Off - - - AnyCPU - none - true - bin\ - prompt - 4 - false - LINUX - Off - - - bin\ - WIN - true - AnyCPU - false - Off - prompt - ManagedMinimumRules.ruleset - - + bin\ WIN true From 94c7f6868859e0cd901421ae08f1f572f92f6fb8 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Tue, 25 Mar 2014 18:10:41 +0100 Subject: [PATCH 064/116] Add another pitch detection algorithm (from Performous) and wrapped everything in c++/cli classes --- PitchTracker/Helper.h | 61 ++++ PitchTracker/License.txt | 2 + PitchTracker/Performous.txt | 346 ++++++++++++++++++++++ PitchTracker/PitchTracker.vcxproj | 25 ++ PitchTracker/PitchTracker.vcxproj.filters | 32 ++ PitchTracker/PitchWrapper.cpp | 92 ++++++ PitchTracker/PitchWrapper.h | 62 ++++ PitchTracker/compatibility.cpp | 30 ++ PitchTracker/compatibility.h | 17 ++ PitchTracker/libda/fft.hpp | 84 ++++++ PitchTracker/libda/sample.hpp | 82 +++++ PitchTracker/pitch.cc | 233 +++++++++++++++ PitchTracker/pitch.hh | 132 +++++++++ PitchTracker/pitchTracker.cpp | 169 ++++++----- PitchTracker/pitchTracker.h | 22 +- PitchTracker/util.hh | 45 +++ Vocaluxe/Lib/Sound/Record/CBuffer.cs | 37 +-- Vocaluxe/Vocaluxe.csproj | 4 + 18 files changed, 1349 insertions(+), 126 deletions(-) create mode 100644 PitchTracker/Helper.h create mode 100644 PitchTracker/License.txt create mode 100644 PitchTracker/Performous.txt create mode 100644 PitchTracker/PitchWrapper.cpp create mode 100644 PitchTracker/PitchWrapper.h create mode 100644 PitchTracker/compatibility.cpp create mode 100644 PitchTracker/compatibility.h create mode 100644 PitchTracker/libda/fft.hpp create mode 100644 PitchTracker/libda/sample.hpp create mode 100644 PitchTracker/pitch.cc create mode 100644 PitchTracker/pitch.hh create mode 100644 PitchTracker/util.hh diff --git a/PitchTracker/Helper.h b/PitchTracker/Helper.h new file mode 100644 index 00000000..f0416375 --- /dev/null +++ b/PitchTracker/Helper.h @@ -0,0 +1,61 @@ +#pragma once +#include "pitch.hh" +#include "PitchWrapper.h" + +#pragma managed(push, off) + +#include +#include + +float* short2FloatArray(short* in, size_t len){ + const float maxShort = 32768.0; //maximum abs value of a short + + float* result = static_cast(malloc(len * sizeof(float))); + float* curOut = result; + for(int i=0; i(malloc(len * sizeof(double))); + double* curOut = result; + for(int i=0; iFreq = tone.freq; + result->DB = tone.db; + result->Stabledb = tone.stabledb; + result->Age = static_cast(tone.age); + result->NoteExact = 12.0 * std::log(tone.freq / 127.09) / std::log(2.0) + 27.5 - 16; // 16 = C2 + result->Note = static_cast(std::round(result->NoteExact)); + return result; + } + } +} \ No newline at end of file diff --git a/PitchTracker/License.txt b/PitchTracker/License.txt new file mode 100644 index 00000000..0db6541a --- /dev/null +++ b/PitchTracker/License.txt @@ -0,0 +1,2 @@ +Some code is taken from Performous: https://github.com/performous/performous/tree/master/game +From 25.03.2014 \ No newline at end of file diff --git a/PitchTracker/Performous.txt b/PitchTracker/Performous.txt new file mode 100644 index 00000000..5861375b --- /dev/null +++ b/PitchTracker/Performous.txt @@ -0,0 +1,346 @@ +GNU GPLv2 or later. Some parts of the project may have more liberal licenses. +See Authors.txt for information on copyright holders and licenses of specific +parts. Fonts are licensed under SIL OFL. + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + diff --git a/PitchTracker/PitchTracker.vcxproj b/PitchTracker/PitchTracker.vcxproj index 73e5ca52..e17ebdcd 100644 --- a/PitchTracker/PitchTracker.vcxproj +++ b/PitchTracker/PitchTracker.vcxproj @@ -167,10 +167,35 @@ + + + + true + true + true + true + false + false + false + false + false + false + Default + Default + + + + + + + + + + diff --git a/PitchTracker/PitchTracker.vcxproj.filters b/PitchTracker/PitchTracker.vcxproj.filters index aa287032..f122cd3f 100644 --- a/PitchTracker/PitchTracker.vcxproj.filters +++ b/PitchTracker/PitchTracker.vcxproj.filters @@ -18,10 +18,42 @@ Quelldateien + + Quelldateien + + + Quelldateien + + + Quelldateien + Headerdateien + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + + + Headerdateien + + + Headerdateien + \ No newline at end of file diff --git a/PitchTracker/PitchWrapper.cpp b/PitchTracker/PitchWrapper.cpp new file mode 100644 index 00000000..6c18714e --- /dev/null +++ b/PitchTracker/PitchWrapper.cpp @@ -0,0 +1,92 @@ +#include "PitchWrapper.h" +#pragma managed(push, off) +#include "pitchTracker.h" +#pragma managed(pop) + +#include "Helper.h" + +namespace Native{ + namespace PitchTracking{ + + //CAnalyzer + + void CAnalyzer::Input(array^ data){ + if(data->Length == 0) + return; + pin_ptr dataPtr = &data[0]; + float* dataPtr2 = dataPtr; + m_analyzer->input(dataPtr2, dataPtr2 + data->Length); + } + + void CAnalyzer::Input(array^ data){ + if(data->Length == 0) + return; + pin_ptr dataPtr = &data[0]; + float* dataFloat = short2FloatArray(dataPtr, data->Length); + m_analyzer->input(dataFloat, dataFloat + data->Length); + freeFloatArray(dataFloat); + } + + void CAnalyzer::Process(){ + m_analyzer->process(); + } + + double CAnalyzer::GetPeak(){ + return m_analyzer->getPeak(); + } + + array^ CAnalyzer::GetTones(){ + Analyzer::tones_t umTones = m_analyzer->getTones(); + array^ tones = gcnew array(static_cast(umTones.size())); + int i = 0; + for(auto it=umTones.begin(); it!=umTones.end(); it++, i++){ + tones[i]=ConvertToneToManaged(*it); + } + return tones; + } + + CTone^ CAnalyzer::FindTone(){ + return FindTone(65.0); + } + + CTone^ CAnalyzer::FindTone(double minFreq){ + return FindTone(minFreq, 1000.0); + } + + CTone^ CAnalyzer::FindTone(double minFreq, double maxFreq){ + const Tone* tone = m_analyzer->findTone(minFreq, maxFreq); + return (tone == NULL) ? nullptr : ConvertToneToManaged(*tone); + } + + void CAnalyzer::Output(array^ data, float rate){ + pin_ptr dataPtr = &data[0]; + m_analyzer->output(dataPtr, dataPtr + data->Length, rate); + } + + String^ CAnalyzer::GetId(){ + return m_id; + } + + + //CPitchTracker + + void CPitchTracker::Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){ + PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone); + } + + void CPitchTracker::DeInit(){ + PitchTracker::DeInit(); + } + + int CPitchTracker::GetTone(array^ samples, array^ weights){ + if(samples->Length == 0) + return -1; + pin_ptr dataPtr = &samples[0]; + pin_ptr weightsPtr = &weights[0]; + double* dataDouble = short2DoubleArray(dataPtr, samples->Length, false); + int result = PitchTracker::GetTone(dataDouble, samples->Length, weightsPtr, true); + freeDoubleArray(dataDouble); + return result; + } + } +} \ No newline at end of file diff --git a/PitchTracker/PitchWrapper.h b/PitchTracker/PitchWrapper.h new file mode 100644 index 00000000..617c24f3 --- /dev/null +++ b/PitchTracker/PitchWrapper.h @@ -0,0 +1,62 @@ +#pragma once + +#pragma managed(push, off) +#include "pitch.hh" +#pragma managed(pop) + +using namespace System; +using namespace System::Collections::Generic; + +namespace Native{ + namespace PitchTracking{ + public ref class CTone { + public: + static const int MAXHARM = 48; ///< The maximum number of harmonics tracked + static const int MINAGE = 2; ///< The minimum age required for a tone to be output + double Freq; ///< Frequency (Hz) + double DB; ///< Level (dB) + double Stabledb; ///< Stable level, useful for graphics rendering + int Age; ///< How many times the tone has been detected in row + double NoteExact; + int Note; + /// Less-than compare by levels (instead of frequencies like operator< does) + static bool dbCompare(CTone l, CTone r) { return l.DB < r.DB; } + }; + + public ref class CAnalyzer { + public: + CAnalyzer(double rate, String^ id) { + m_analyzer = new Analyzer(rate,""); + m_id = id; + } + CAnalyzer(double rate, String^ id, unsigned step) { + m_analyzer = new Analyzer(rate,"",step); + m_id = id; + } + ~CAnalyzer() { this->!CAnalyzer(); } + !CAnalyzer() { delete m_analyzer; } + + void Input(array^ data); + void Input(array^ data); + void Process(); + double GetPeak(); + array^ GetTones(); + CTone^ FindTone(); + CTone^ FindTone(double minFreq); + CTone^ FindTone(double minFreq, double maxFreq); + void Output(array^ data, float rate); + String^ GetId(); + + private: + Analyzer* m_analyzer; + String^ m_id; + }; + + public ref class CPitchTracker abstract sealed{ + public: + static void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone); + static void DeInit(); + static int GetTone(array^ samples, array^ weights); + }; + } +} \ No newline at end of file diff --git a/PitchTracker/compatibility.cpp b/PitchTracker/compatibility.cpp new file mode 100644 index 00000000..207b750d --- /dev/null +++ b/PitchTracker/compatibility.cpp @@ -0,0 +1,30 @@ +#include "compatibility.h" + +#include + +#ifdef _MSC_VER +#if(_MSC_VER < 1800) // < VS2013 +namespace std +{ + float round(float d) + { + return static_cast(floor(d + 0.5)); + } + + double round(double d) + { + return floor(d + 0.5); + } + + long double round(long double d) + { + return floor(d + 0.5); + } + +} + +double remainder(double num, double denom){ + return num - std::round(num/denom) * denom; +} +#endif +#endif \ No newline at end of file diff --git a/PitchTracker/compatibility.h b/PitchTracker/compatibility.h new file mode 100644 index 00000000..ebdf8a88 --- /dev/null +++ b/PitchTracker/compatibility.h @@ -0,0 +1,17 @@ +//Contains some definitions to make the code work with compilers that do not support all feautures + +#pragma once + +#ifdef _MSC_VER + #define constexpr const + #if(_MSC_VER < 1800) // < VS2013 + namespace std + { + float round(float d); + double round(double d); + long double round(long double d); + } + + double remainder(double num, double denom); + #endif +#endif \ No newline at end of file diff --git a/PitchTracker/libda/fft.hpp b/PitchTracker/libda/fft.hpp new file mode 100644 index 00000000..1611c2fb --- /dev/null +++ b/PitchTracker/libda/fft.hpp @@ -0,0 +1,84 @@ +#pragma once + +/** + * @file fft.hpp FFT and related facilities. + */ + +#include "sample.hpp" +#include +#include +#include + +#ifndef M_PI +#define M_PI 3.141592653589793 +#endif + +#define M_TAU (2.0 * M_PI) + +namespace da { + + // With g++ optimization -fcx-limited-range should be used for 5x performance boost. + + // Based on the description of Volodymyr Myrnyy in + // http://www.dspdesignline.com/showArticle.jhtml?printableArticle=true&articleId=199903272 + template struct DanielsonLanczos { + static void apply(std::complex* data) { + constexpr std::size_t N = 1 << P; + constexpr std::size_t M = N / 2; + // Compute even and odd halves + DanielsonLanczos