Full Code of namkazt/PinBox for AI

master 8a7a8e61be28 cached
407 files
3.3 MB
881.6k tokens
2011 symbols
1 requests
Download .txt
Showing preview only (3,522K chars total). Download the full file or copy to clipboard to get everything.
Repository: namkazt/PinBox
Branch: master
Commit: 8a7a8e61be28
Files: 407
Total size: 3.3 MB

Directory structure:
gitextract_jvazmwrt/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── LICENSE
├── PinBox/
│   ├── PinBox/
│   │   ├── Makefile
│   │   ├── PinBox.rsf
│   │   ├── PinBox.vcxproj
│   │   ├── PinBox.vcxproj.filters
│   │   ├── build-cia.bat
│   │   ├── create-smdh.bat
│   │   ├── include/
│   │   │   ├── Anim.h
│   │   │   ├── Color.h
│   │   │   ├── ConfigManager.h
│   │   │   ├── HubItem.h
│   │   │   ├── Logger.h
│   │   │   ├── Mutex.h
│   │   │   ├── PPAudio.h
│   │   │   ├── PPDecoder.h
│   │   │   ├── PPGraphics.h
│   │   │   ├── PPMessage.h
│   │   │   ├── PPSession.h
│   │   │   ├── PPSessionManager.h
│   │   │   ├── PPUI.h
│   │   │   ├── constant.h
│   │   │   ├── easing.h
│   │   │   ├── lodepng.h
│   │   │   └── yuv_rgb.h
│   │   ├── source/
│   │   │   ├── ConfigManager.cpp
│   │   │   ├── Mutex.cpp
│   │   │   ├── PPAudio.cpp
│   │   │   ├── PPDecoder.cpp
│   │   │   ├── PPGraphics.cpp
│   │   │   ├── PPMessage.cpp
│   │   │   ├── PPSession.cpp
│   │   │   ├── PPSessionManager.cpp
│   │   │   ├── PPUI.cpp
│   │   │   ├── easing.cpp
│   │   │   ├── lodepng.cpp
│   │   │   ├── main.cpp
│   │   │   ├── vshader.v.pica
│   │   │   └── yuv_rgb.c
│   │   └── tools/
│   │       └── citra/
│   │           ├── README.md
│   │           └── license.txt
│   └── PinBox.sln
├── PinBoxServer/
│   ├── Check-Pinbox-Firewall-Rules.bat
│   ├── PinBoxServer/
│   │   ├── AudioStreamSession.cpp
│   │   ├── AudioStreamSession.h
│   │   ├── Check-Pinbox-Firewall-Rules.bat
│   │   ├── HubItem.h
│   │   ├── InputStreamSession.cpp
│   │   ├── InputStreamSession.h
│   │   ├── PPClientSession.cpp
│   │   ├── PPClientSession.h
│   │   ├── PPMessage.cpp
│   │   ├── PPMessage.h
│   │   ├── PPServer.cpp
│   │   ├── PPServer.h
│   │   ├── PinBoxServer.cpp
│   │   ├── PinBoxServer.vcxproj
│   │   ├── PinBoxServer.vcxproj.filters
│   │   ├── ScreenCaptureSession.cpp
│   │   ├── ScreenCaptureSession.h
│   │   ├── ServerConfig.cpp
│   │   ├── ServerConfig.h
│   │   ├── UIMainWindow.cpp
│   │   ├── UIMainWindow.h
│   │   ├── const.h
│   │   ├── hub.cfg
│   │   ├── input.cfg
│   │   ├── server.cfg
│   │   ├── stdafx.cpp
│   │   ├── stdafx.h
│   │   ├── targetver.h
│   │   └── winmain-inl.h
│   └── PinBoxServer.sln
├── PinBoxTestProject/
│   ├── PinBoxTestProject/
│   │   ├── PPDecoder.cpp
│   │   ├── PPDecoder.h
│   │   ├── PPMessage.cpp
│   │   ├── PPMessage.h
│   │   ├── PPNetwork.cpp
│   │   ├── PPNetwork.h
│   │   ├── PPSession.cpp
│   │   ├── PPSession.h
│   │   ├── PPSessionManager.cpp
│   │   ├── PPSessionManager.h
│   │   ├── PinBoxTestProject.vcxproj
│   │   ├── PinBoxTestProject.vcxproj.filters
│   │   ├── main.cpp
│   │   ├── yuv_rgb.c
│   │   └── yuv_rgb.h
│   └── PinBoxTestProject.sln
├── README.md
├── ThirdParty/
│   ├── FakeInput/
│   │   ├── LICENSE
│   │   └── src/
│   │       ├── actions/
│   │       │   ├── action.hpp
│   │       │   ├── actions.hpp
│   │       │   ├── actionsequence.cpp
│   │       │   ├── actionsequence.hpp
│   │       │   ├── commandaction.cpp
│   │       │   ├── commandaction.hpp
│   │       │   ├── keyaction.cpp
│   │       │   ├── keyaction.hpp
│   │       │   ├── mouseaction.cpp
│   │       │   ├── mouseaction.hpp
│   │       │   ├── waitaction.cpp
│   │       │   └── waitaction.hpp
│   │       ├── config.hpp
│   │       ├── config.hpp.cmake
│   │       ├── display_unix.cpp
│   │       ├── display_unix.hpp
│   │       ├── fakeinput.hpp
│   │       ├── key.hpp
│   │       ├── key_base.cpp
│   │       ├── key_base.hpp
│   │       ├── key_unix.cpp
│   │       ├── key_unix.hpp
│   │       ├── key_win.cpp
│   │       ├── key_win.hpp
│   │       ├── keyboard.cpp
│   │       ├── keyboard.hpp
│   │       ├── keyboard_unix.cpp
│   │       ├── keyboard_win.cpp
│   │       ├── mapper.hpp
│   │       ├── mapper_unix.cpp
│   │       ├── mapper_win.cpp
│   │       ├── mouse.hpp
│   │       ├── mouse_unix.cpp
│   │       ├── mouse_win.cpp
│   │       ├── system.hpp
│   │       ├── system_unix.cpp
│   │       ├── system_win.cpp
│   │       └── types.hpp
│   ├── ViGEm/
│   │   ├── Debug (dynamic)/
│   │   │   ├── ViGEmClient.exp
│   │   │   └── ViGEmClient.lib
│   │   ├── Debug (static)/
│   │   │   └── ViGEmClient.lib
│   │   ├── Include/
│   │   │   ├── ViGEmBusDriver.h
│   │   │   ├── ViGEmBusShared.h
│   │   │   ├── ViGEmClient.h
│   │   │   ├── ViGEmCommon.h
│   │   │   ├── ViGEmUtil.h
│   │   │   ├── XInputOverrides.h
│   │   │   └── XnaGuardianShared.h
│   │   ├── LICENSE
│   │   ├── Release (dynamic)/
│   │   │   ├── ViGEmClient.exp
│   │   │   └── ViGEmClient.lib
│   │   └── Release (static)/
│   │       └── ViGEmClient.lib
│   ├── ffmpeg/
│   │   ├── LICENSE.txt
│   │   ├── README.txt
│   │   ├── examples/
│   │   │   ├── Makefile
│   │   │   ├── README
│   │   │   ├── avio_dir_cmd.c
│   │   │   ├── avio_reading.c
│   │   │   ├── decode_audio.c
│   │   │   ├── decode_video.c
│   │   │   ├── demuxing_decoding.c
│   │   │   ├── encode_audio.c
│   │   │   ├── encode_video.c
│   │   │   ├── extract_mvs.c
│   │   │   ├── filter_audio.c
│   │   │   ├── filtering_audio.c
│   │   │   ├── filtering_video.c
│   │   │   ├── http_multiclient.c
│   │   │   ├── hw_decode.c
│   │   │   ├── metadata.c
│   │   │   ├── muxing.c
│   │   │   ├── qsvdec.c
│   │   │   ├── remuxing.c
│   │   │   ├── resampling_audio.c
│   │   │   ├── scaling_video.c
│   │   │   ├── transcode_aac.c
│   │   │   ├── transcoding.c
│   │   │   ├── vaapi_encode.c
│   │   │   └── vaapi_transcode.c
│   │   ├── include/
│   │   │   ├── libavcodec/
│   │   │   │   ├── ac3_parser.h
│   │   │   │   ├── adts_parser.h
│   │   │   │   ├── avcodec.h
│   │   │   │   ├── avdct.h
│   │   │   │   ├── avfft.h
│   │   │   │   ├── d3d11va.h
│   │   │   │   ├── dirac.h
│   │   │   │   ├── dv_profile.h
│   │   │   │   ├── dxva2.h
│   │   │   │   ├── jni.h
│   │   │   │   ├── mediacodec.h
│   │   │   │   ├── qsv.h
│   │   │   │   ├── vaapi.h
│   │   │   │   ├── vdpau.h
│   │   │   │   ├── version.h
│   │   │   │   ├── videotoolbox.h
│   │   │   │   ├── vorbis_parser.h
│   │   │   │   └── xvmc.h
│   │   │   ├── libavdevice/
│   │   │   │   ├── avdevice.h
│   │   │   │   └── version.h
│   │   │   ├── libavfilter/
│   │   │   │   ├── avfilter.h
│   │   │   │   ├── buffersink.h
│   │   │   │   ├── buffersrc.h
│   │   │   │   └── version.h
│   │   │   ├── libavformat/
│   │   │   │   ├── avformat.h
│   │   │   │   ├── avio.h
│   │   │   │   └── version.h
│   │   │   ├── libavutil/
│   │   │   │   ├── adler32.h
│   │   │   │   ├── aes.h
│   │   │   │   ├── aes_ctr.h
│   │   │   │   ├── attributes.h
│   │   │   │   ├── audio_fifo.h
│   │   │   │   ├── avassert.h
│   │   │   │   ├── avconfig.h
│   │   │   │   ├── avstring.h
│   │   │   │   ├── avutil.h
│   │   │   │   ├── base64.h
│   │   │   │   ├── blowfish.h
│   │   │   │   ├── bprint.h
│   │   │   │   ├── bswap.h
│   │   │   │   ├── buffer.h
│   │   │   │   ├── camellia.h
│   │   │   │   ├── cast5.h
│   │   │   │   ├── channel_layout.h
│   │   │   │   ├── common.h
│   │   │   │   ├── cpu.h
│   │   │   │   ├── crc.h
│   │   │   │   ├── des.h
│   │   │   │   ├── dict.h
│   │   │   │   ├── display.h
│   │   │   │   ├── downmix_info.h
│   │   │   │   ├── encryption_info.h
│   │   │   │   ├── error.h
│   │   │   │   ├── eval.h
│   │   │   │   ├── ffversion.h
│   │   │   │   ├── fifo.h
│   │   │   │   ├── file.h
│   │   │   │   ├── frame.h
│   │   │   │   ├── hash.h
│   │   │   │   ├── hmac.h
│   │   │   │   ├── hwcontext.h
│   │   │   │   ├── hwcontext_cuda.h
│   │   │   │   ├── hwcontext_d3d11va.h
│   │   │   │   ├── hwcontext_drm.h
│   │   │   │   ├── hwcontext_dxva2.h
│   │   │   │   ├── hwcontext_mediacodec.h
│   │   │   │   ├── hwcontext_qsv.h
│   │   │   │   ├── hwcontext_vaapi.h
│   │   │   │   ├── hwcontext_vdpau.h
│   │   │   │   ├── hwcontext_videotoolbox.h
│   │   │   │   ├── imgutils.h
│   │   │   │   ├── intfloat.h
│   │   │   │   ├── intreadwrite.h
│   │   │   │   ├── lfg.h
│   │   │   │   ├── log.h
│   │   │   │   ├── lzo.h
│   │   │   │   ├── macros.h
│   │   │   │   ├── mastering_display_metadata.h
│   │   │   │   ├── mathematics.h
│   │   │   │   ├── md5.h
│   │   │   │   ├── mem.h
│   │   │   │   ├── motion_vector.h
│   │   │   │   ├── murmur3.h
│   │   │   │   ├── opt.h
│   │   │   │   ├── parseutils.h
│   │   │   │   ├── pixdesc.h
│   │   │   │   ├── pixelutils.h
│   │   │   │   ├── pixfmt.h
│   │   │   │   ├── random_seed.h
│   │   │   │   ├── rational.h
│   │   │   │   ├── rc4.h
│   │   │   │   ├── replaygain.h
│   │   │   │   ├── ripemd.h
│   │   │   │   ├── samplefmt.h
│   │   │   │   ├── sha.h
│   │   │   │   ├── sha512.h
│   │   │   │   ├── spherical.h
│   │   │   │   ├── stereo3d.h
│   │   │   │   ├── tea.h
│   │   │   │   ├── threadmessage.h
│   │   │   │   ├── time.h
│   │   │   │   ├── timecode.h
│   │   │   │   ├── timestamp.h
│   │   │   │   ├── tree.h
│   │   │   │   ├── twofish.h
│   │   │   │   ├── version.h
│   │   │   │   └── xtea.h
│   │   │   ├── libpostproc/
│   │   │   │   ├── postprocess.h
│   │   │   │   └── version.h
│   │   │   ├── libswresample/
│   │   │   │   ├── swresample.h
│   │   │   │   └── version.h
│   │   │   └── libswscale/
│   │   │       ├── swscale.h
│   │   │       └── version.h
│   │   └── lib/
│   │       ├── avcodec-58.def
│   │       ├── avcodec.lib
│   │       ├── avdevice-58.def
│   │       ├── avdevice.lib
│   │       ├── avfilter-7.def
│   │       ├── avfilter.lib
│   │       ├── avformat-58.def
│   │       ├── avformat.lib
│   │       ├── avutil-56.def
│   │       ├── avutil.lib
│   │       ├── libavcodec.dll.a
│   │       ├── libavdevice.dll.a
│   │       ├── libavfilter.dll.a
│   │       ├── libavformat.dll.a
│   │       ├── libavutil.dll.a
│   │       ├── libpostproc.dll.a
│   │       ├── libswresample.dll.a
│   │       ├── libswscale.dll.a
│   │       ├── postproc-55.def
│   │       ├── postproc.lib
│   │       ├── swresample-3.def
│   │       ├── swresample.lib
│   │       ├── swscale-5.def
│   │       └── swscale.lib
│   ├── libopusenc/
│   │   ├── AUTHORS
│   │   ├── include/
│   │   │   └── opusenc.h
│   │   ├── src/
│   │   │   ├── arch.h
│   │   │   ├── ogg_packer.c
│   │   │   ├── ogg_packer.h
│   │   │   ├── opus_header.c
│   │   │   ├── opus_header.h
│   │   │   ├── opusenc.c
│   │   │   ├── picture.c
│   │   │   ├── picture.h
│   │   │   ├── resample.c
│   │   │   ├── resample_sse.h
│   │   │   ├── speex_resampler.h
│   │   │   └── stack_alloc.h
│   │   └── win32/
│   │       └── config.h
│   ├── loopback/
│   │   ├── cleanup.h
│   │   ├── common.h
│   │   ├── guid.cpp
│   │   ├── log.h
│   │   ├── loopback-capture.cpp
│   │   ├── loopback-capture.h
│   │   ├── main.cpp
│   │   ├── prefs.cpp
│   │   └── prefs.h
│   ├── opus-1.2.1/
│   │   ├── AUTHORS
│   │   ├── COPYING
│   │   ├── INSTALL
│   │   ├── include/
│   │   │   ├── opus.h
│   │   │   ├── opus_custom.h
│   │   │   ├── opus_defines.h
│   │   │   ├── opus_multistream.h
│   │   │   └── opus_types.h
│   │   └── src/
│   │       ├── analysis.c
│   │       ├── analysis.h
│   │       ├── mlp.c
│   │       ├── mlp.h
│   │       ├── mlp_data.c
│   │       ├── opus.c
│   │       ├── opus_compare.c
│   │       ├── opus_decoder.c
│   │       ├── opus_demo.c
│   │       ├── opus_encoder.c
│   │       ├── opus_multistream.c
│   │       ├── opus_multistream_decoder.c
│   │       ├── opus_multistream_encoder.c
│   │       ├── opus_private.h
│   │       ├── repacketizer.c
│   │       ├── repacketizer_demo.c
│   │       └── tansig_table.h
│   ├── opusfile-0.9/
│   │   ├── AUTHORS
│   │   ├── include/
│   │   │   └── opusfile.h
│   │   ├── src/
│   │   │   ├── http.c
│   │   │   ├── info.c
│   │   │   ├── internal.c
│   │   │   ├── internal.h
│   │   │   ├── opusfile.c
│   │   │   ├── stream.c
│   │   │   ├── wincerts.c
│   │   │   └── winerrno.h
│   │   └── win32/
│   │       └── VS2015/
│   │           └── Win32/
│   │               └── Release-NoHTTP/
│   │                   └── opusfile.lib
│   ├── screen_capture_lite/
│   │   └── include/
│   │       └── ScreenCapture.h
│   └── screen_capture_lite - Copy/
│       ├── LICENSE
│       ├── ScreenCapture.h
│       ├── include/
│       │   ├── SCCommon.h
│       │   ├── ScreenCapture.h
│       │   ├── ThreadManager.h
│       │   ├── ios/
│       │   │   ├── CGFrameProcessor.h
│       │   │   ├── NSMouseCapture.h
│       │   │   └── NSMouseProcessor.h
│       │   ├── linux/
│       │   │   ├── X11FrameProcessor.h
│       │   │   └── X11MouseProcessor.h
│       │   └── windows/
│       │       ├── DXFrameProcessor.h
│       │       ├── GDIFrameProcessor.h
│       │       ├── GDIHelpers.h
│       │       ├── GDIMouseProcessor.h
│       │       └── GDIWindowProcessor.h
│       └── src/
│           ├── SCCommon.cpp
│           ├── ScreenCapture.cpp
│           ├── ThreadManager.cpp
│           ├── ios/
│           │   ├── CGFrameProcessor.cpp
│           │   ├── GetMonitors.cpp
│           │   ├── GetWindows.cpp
│           │   ├── NSMouseCapture.m
│           │   ├── NSMouseProcessor.cpp
│           │   └── ThreadRunner.cpp
│           ├── linux/
│           │   ├── GetMonitors.cpp
│           │   ├── GetWindows.cpp
│           │   ├── ThreadRunner.cpp
│           │   ├── X11FrameProcessor.cpp
│           │   └── X11MouseProcessor.cpp
│           └── windows/
│               ├── DXFrameProcessor.cpp
│               ├── GDIFrameProcessor.cpp
│               ├── GDIMouseProcessor.cpp
│               ├── GDIWindowProcessor.cpp
│               ├── GetMonitors.cpp
│               ├── GetWindows.cpp
│               └── ThreadRunner.cpp
└── _config.yml

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
Please, set a title for the issue that starts with "BUG" or "FEATURE REQUEST" accordingly. Use [the Pinbox Discord Server](https://discord.gg/9Qae7fT) for supporting issues.

<!--- Provide a general summary of the issue in the Title above -->

## Expected Behavior
<!--- Tell us what should happen -->

## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->

## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->

## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.

## Context (Environment)
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->

<!--- Provide a general summary of the issue in the Title above -->

## Detailed Description
<!--- Provide a detailed description of the change or addition you are proposing -->

## Possible Implementation
<!--- Not obligatory, but suggest an idea for implementing addition or change -->


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Please, set a title for the pull request that starts with "BUG" or "FEATURE REQUEST" accordingly.

<!--- Provide a general summary of your changes in the Title above -->

## Description
<!--- Describe your changes in detail -->

## Related Issue
<!--- This project only accepts pull requests related to open issues -->
<!--- If suggesting a new feature or change, please discuss it in an issue first -->
<!--- If fixing a bug, there should be an issue describing it with steps to reproduce -->
<!--- Please link to the issue here: -->

## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->

## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->

## Screenshots (if appropriate):


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/


#==============================================
# 3DS
#==============================================
*.d
*.o
*.elf
*.3dsx

#==============================================
# PinBox
#==============================================
PinBox/PinBox/build/
PinBox/PinBox/data/

#==============================================
# PinBoxServer
#==============================================
PinBoxServer/Debug/
PinBoxServer/Release/

#==============================================
# Other File
#==============================================
*.rar
*.flv
*.mp4
*.cia
*.smdh
PinBox/PinBox/Pre-Built/PinBox.smdh
ThirdParty/xinput1_3.dll
ThirdParty/x360ce.ini


================================================
FILE: LICENSE
================================================
		GLWT(Good Luck With That) Public License
                 Copyright (c) Everyone, except Author

Everyone is permitted to copy, distribute, modify, merge, sell, publish,
sublicense or whatever they want with this software but at their OWN RISK.

	      	       	     Preamble

The author has absolutely no clue what the code in this project does.
It might just work or not, there is no third option.


                GOOD LUCK WITH THAT PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION

  0. You just DO WHATEVER YOU WANT TO as long as you NEVER LEAVE A
TRACE TO TRACK THE AUTHOR of the original product to blame for or hold
responsible.

IN NO EVENT SHALL THE AUTHORS 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.

Good luck and Godspeed.


================================================
FILE: PinBox/PinBox/Makefile
================================================
export DEVKITPRO = /c/devkitPro
export DEVKITARM = /c/devkitPro/devkitARM
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

ifeq ($(strip $(DEVKITARM)),)
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
endif

TOPDIR ?= $(CURDIR)
include $(DEVKITARM)/3ds_rules

#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# DATA is a list of directories containing data files
# INCLUDES is a list of directories containing header files
#
# NO_SMDH: if set to anything, no SMDH file is generated.
# ROMFS is the directory which contains the RomFS, relative to the Makefile (Optional)
# APP_TITLE is the name of the app stored in the SMDH file (Optional)
# APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional)
# APP_AUTHOR is the author of the app stored in the SMDH file (Optional)
# ICON is the filename of the icon (.png), relative to the project folder.
#   If not set, it attempts to use one of the following (in this order):
#     - <Project name>.png
#     - icon.png
#     - <libctru folder>/default_icon.png
#---------------------------------------------------------------------------------
TARGET		:=	PinBox
BUILD		:=	build
SOURCES		:=	source
DATA		:=	data
INCLUDES	:=	include
ICON        :=  assets/icon.png
ROMFS		:=	romfs


#---------------------------------------------------------------------------------
APP_TITLE					:= PinBox
APP_DESCRIPTION				:= 3DS Client - PC Desktop Streaming
APP_AUTHOR					:= Namkazt
APP_PRODUCT_CODE			:= CTR-P-PINBOX
APP_UNIQUE_ID				:= 0x18EF
APP_ENCRYPTED				:= false
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH	:=	-march=armv6k -mtune=mpcore -mtp=soft -mfloat-abi=hard

CFLAGS	:=	-ggdb -Wall -Og -mword-relocations -DDEBUG=1 \
				-ffunction-sections \
				$(ARCH)
	CFLAGS	+=	$(INCLUDE) -DARM11 -D_3DS
	CXXFLAGS	:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 -fpermissive -fexceptions -ffast-math
	ASFLAGS	:=	-g $(ARCH)
	LDFLAGS	=	-specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
	LIBS	:= -lavformat -lavcodec -lavutil -lswscale -lswresample -lconfig -lcitro3dd -lctrud -lz -lm
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
ADDITION_LIBS := $(DEVKITPRO)/libwebp $(DEVKITPRO)/libcitro3d
LIBDIRS	:= $(CTRULIB) $(PORTLIBS) $(ADDITION_LIBS)


#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#---------------------------------------------------------------------------------

export OUTPUT	:=	$(CURDIR)/$(TARGET)
export TOPDIR	:=	$(CURDIR)

export VPATH	:=	$(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
			$(foreach dir,$(DATA),$(CURDIR)/$(dir))

export DEPSDIR	:=	$(CURDIR)/$(BUILD)

CFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
PICAFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.v.pica)))
SHLISTFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.shlist)))
BINFILES	:=	$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))

#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
#---------------------------------------------------------------------------------
	export LD	:=	$(CC)
#---------------------------------------------------------------------------------
else
#---------------------------------------------------------------------------------
	export LD	:=	$(CXX)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------

export OFILES_SOURCES 	:=	$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)

export OFILES_BIN	:=	$(addsuffix .o,$(BINFILES)) \
			$(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o)

export OFILES := $(OFILES_BIN) $(OFILES_SOURCES)

export HFILES	:=	$(PICAFILES:.v.pica=_shbin.h) $(SHLISTFILES:.shlist=_shbin.h) $(addsuffix .h,$(subst .,_,$(BINFILES)))

export INCLUDE	:=	$(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
			$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
			-I$(CURDIR)/$(BUILD)

export LIBPATHS	:=	$(foreach dir,$(LIBDIRS),-L$(dir)/lib)

ifeq ($(strip $(ICON)),)
	icons := $(wildcard *.png)
	ifneq (,$(findstring $(TARGET).png,$(icons)))
		export APP_ICON := $(TOPDIR)/assets/$(TARGET).png
	else
		ifneq (,$(findstring icon.png,$(icons)))
			export APP_ICON := $(TOPDIR)/assets/icon.png
		endif
	endif
else
	export APP_ICON := $(TOPDIR)/assets/$(ICON)
endif

ifeq ($(strip $(NO_SMDH)),)
	export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh
endif

ifneq ($(ROMFS),)
	export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS)
endif

.PHONY: $(BUILD) clean all

#---------------------------------------------------------------------------------
all: $(BUILD)

$(BUILD):
	@[ -d $@ ] || mkdir -p $@
	@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile

#---------------------------------------------------------------------------------
clean:
	@echo clean ...
	@rm -fr $(BUILD) $(TARGET).3dsx $(TARGET).elf
	
#---------------------------------------------------------------------------------
$(TARGET)-strip.elf: $(BUILD)
	@$(STRIP) $(TARGET).elf -o $(TARGET)-strip.elf
#---------------------------------------------------------------------------------
cci: $(TARGET)-strip.elf
	@makerom -f cci -rsf $(CURDIR)/$(TARGET).rsf -target d -exefslogo -elf $(TARGET)-strip.elf -o $(TARGET).3ds
#---------------------------------------------------------------------------------
cia: $(TARGET)-strip.elf
	@$(CURDIR)/tools/makerom32.exe -f cia -o $(TARGET).cia -elf $(TARGET)-strip.elf -rsf $(CURDIR)/$(TARGET).rsf -exefslogo -target t
#---------------------------------------------------------------------------------
netlink: $(BUILD)
	$(DEVKITARM)/bin/3dslink.exe --address 192.168.50.231 $(TARGET).3dsx
#---------------------------------------------------------------------------------
citra: $(BUILD)
	$(CURDIR)/tools/citra/citra.exe $(TARGET).3dsx
#---------------------------------------------------------------------------------
citra-qt: $(BUILD)
	$(CURDIR)/tools/citra/citra-qt.exe $(TARGET).3dsx
#---------------------------------------------------------------------------------
else

DEPENDS	:=	$(OFILES:.o=.d)

#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
ifeq ($(strip $(NO_SMDH)),)
$(OUTPUT).3dsx	:	$(OUTPUT).elf $(OUTPUT).smdh
else
$(OUTPUT).3dsx	:	$(OUTPUT).elf
endif

$(OFILES_SOURCES) : $(HFILES)

$(OUTPUT).elf	:	$(OFILES)

#---------------------------------------------------------------------------------
# you need a rule like this for each extension you use as binary data
#---------------------------------------------------------------------------------
%.bin.o	%_bin.h :	%.bin
#---------------------------------------------------------------------------------
	@echo $(notdir $<)
	@$(bin2o)
#---------------------------------------------------------------------------------
%.ttf.o	:	%.ttf
#---------------------------------------------------------------------------------
	@echo $(notdir $<)
	@$(bin2o)
#---------------------------------------------------------------------------------
%.png.o	:	%.png
#---------------------------------------------------------------------------------
	@echo $(notdir $<)
	@$(bin2o)
#---------------------------------------------------------------------------------
# rules for assembling GPU shaders
#---------------------------------------------------------------------------------
define shader-as
	$(eval CURBIN := $*.shbin)
	$(eval DEPSFILE := $(DEPSDIR)/$*.shbin.d)
	echo "$(CURBIN).o: $< $1" > $(DEPSFILE)
	echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(CURBIN) | tr . _)`.h
	echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(CURBIN) | tr . _)`.h
	echo "extern const u32" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(CURBIN) | tr . _)`.h
	picasso -o $(CURBIN) $1
	bin2s $(CURBIN) | $(AS) -o $*.shbin.o
endef

%.shbin.o %_shbin.h : %.v.pica %.g.pica
	@echo $(notdir $^)
	@$(call shader-as,$^)

%.shbin.o %_shbin.h : %.v.pica
	@echo $(notdir $<)
	@$(call shader-as,$<)

%.shbin.o %_shbin.h : %.shlist
	@echo $(notdir $<)
	@$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)$(file)))


-include $(DEPENDS)

#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------


================================================
FILE: PinBox/PinBox/PinBox.rsf
================================================
BasicInfo:
  Title                   : PINBOX r0.2.1
  ProductCode             : CTR-P-PINBOX
  ContentType            : Application # Application / SystemUpdate / Manual / Child / Trial
  Logo                    : Nintendo # Nintendo / Licensed / Distributed / iQue / iQueForSystem

RomFs:
  RootPath: $(APP_ROMFS)

TitleInfo:
  Category                : Application
  UniqueId                : 0x18EF

Option:
  UseOnSD                 : true # true if App is to be installed to SD
  FreeProductCode         : true # Removes limitations on ProductCode
  MediaFootPadding        : false # If true CCI files are created with padding
  EnableCrypt             : false #$(APP_ENCRYPTED) # Enables encryption for NCCH and CIA
  EnableCompress          : true # Compresses where applicable (currently only exefs:/.code)
  
AccessControlInfo:
  CoreVersion                   : 2

  # Exheader Format Version
  DescVersion                   : 2
  
  # Minimum Required Kernel Version (below is for 4.5.0)
  ReleaseKernelMajor            : "02"
  ReleaseKernelMinor            : "33" 

  # ExtData
  UseExtSaveData                : false # enables ExtData       
  #ExtSaveDataId                : 0x300 # only set this when the ID is different to the UniqueId

  # FS:USER Archive Access Permissions
  # Uncomment as required
  FileSystemAccess:
   - CategorySystemApplication
   - CategoryHardwareCheck
   - CategoryFileSystemTool
   - Debug
   - TwlCardBackup
   - TwlNandData
   - Boss
   - DirectSdmc
   - Core
   - CtrNandRo
   - CtrNandRw
   - CtrNandRoWrite
   - CategorySystemSettings
   - CardBoard
   - ExportImportIvs
   - DirectSdmcWrite
   - SwitchCleanup
   - SaveDataMove
   - Shop
   - Shell
   - CategoryHomeMenu
  IoAccessControl:
   - FsMountNand
   - FsMountNandRoWrite
   - FsMountTwln
   - FsMountWnand
   - FsMountCardSpi
   - UseSdif3
   - CreateSeed
   - UseCardSpi

  # Process Settings
  MemoryType                    : Application # Application/System/Base
  SystemMode                    : $(APP_SYSTEM_MODE) # 64MB(Default)/96MB/80MB/72MB/32MB
  IdealProcessor                : 0
  AffinityMask                  : 1
  Priority                      : 16
  MaxCpu                        : 0x9E # Default
  HandleTableSize               : 0x200
  DisableDebug                  : false
  EnableForceDebug              : false
  CanWriteSharedPage            : true
  CanUsePrivilegedPriority      : false
  CanUseNonAlphabetAndNumber    : true
  PermitMainFunctionArgument    : true
  CanShareDeviceMemory          : true
  RunnableOnSleep               : false
  SpecialMemoryArrange          : true

  # New3DS Exclusive Process Settings
  SystemModeExt                 : $(APP_SYSTEM_MODE_EXT) # Legacy(Default)/124MB/178MB  Legacy:Use Old3DS SystemMode
  CpuSpeed                      : 804MHz # 256MHz(Default)/804MHz
  EnableL2Cache                 : true # false(default)/true
  CanAccessCore2                : true 

  # Virtual Address Mappings
  IORegisterMapping:
   - 1ff00000-1ff7ffff   # DSP memory
  MemoryMapping: 
   - 1f000000-1f5fffff:r # VRAM

  # Accessible SVCs, <Name>:<ID>
  SystemCallAccess: 
    ControlMemory: 1
    QueryMemory: 2
    ExitProcess: 3
    GetProcessAffinityMask: 4
    SetProcessAffinityMask: 5
    GetProcessIdealProcessor: 6
    SetProcessIdealProcessor: 7
    CreateThread: 8
    ExitThread: 9
    SleepThread: 10
    GetThreadPriority: 11
    SetThreadPriority: 12
    GetThreadAffinityMask: 13
    SetThreadAffinityMask: 14
    GetThreadIdealProcessor: 15
    SetThreadIdealProcessor: 16
    GetCurrentProcessorNumber: 17
    Run: 18
    CreateMutex: 19
    ReleaseMutex: 20
    CreateSemaphore: 21
    ReleaseSemaphore: 22
    CreateEvent: 23
    SignalEvent: 24
    ClearEvent: 25
    CreateTimer: 26
    SetTimer: 27
    CancelTimer: 28
    ClearTimer: 29
    CreateMemoryBlock: 30
    MapMemoryBlock: 31
    UnmapMemoryBlock: 32
    CreateAddressArbiter: 33
    ArbitrateAddress: 34
    CloseHandle: 35
    WaitSynchronization1: 36
    WaitSynchronizationN: 37
    SignalAndWait: 38
    DuplicateHandle: 39
    GetSystemTick: 40
    GetHandleInfo: 41
    GetSystemInfo: 42
    GetProcessInfo: 43
    GetThreadInfo: 44
    ConnectToPort: 45
    SendSyncRequest1: 46
    SendSyncRequest2: 47
    SendSyncRequest3: 48
    SendSyncRequest4: 49
    SendSyncRequest: 50
    OpenProcess: 51
    OpenThread: 52
    GetProcessId: 53
    GetProcessIdOfThread: 54
    GetThreadId: 55
    GetResourceLimit: 56
    GetResourceLimitLimitValues: 57
    GetResourceLimitCurrentValues: 58
    GetThreadContext: 59
    Break: 60
    OutputDebugString: 61
    ControlPerformanceCounter: 62
    CreatePort: 71
    CreateSessionToPort: 72
    CreateSession: 73
    AcceptSession: 74
    ReplyAndReceive1: 75
    ReplyAndReceive2: 76
    ReplyAndReceive3: 77
    ReplyAndReceive4: 78
    ReplyAndReceive: 79
    BindInterrupt: 80
    UnbindInterrupt: 81
    InvalidateProcessDataCache: 82
    StoreProcessDataCache: 83
    FlushProcessDataCache: 84
    StartInterProcessDma: 85
    StopDma: 86
    GetDmaState: 87
    RestartDma: 88
    DebugActiveProcess: 96
    BreakDebugProcess: 97
    TerminateDebugProcess: 98
    GetProcessDebugEvent: 99
    ContinueDebugEvent: 100
    GetProcessList: 101
    GetThreadList: 102
    GetDebugThreadContext: 103
    SetDebugThreadContext: 104
    QueryDebugProcessMemory: 105
    ReadProcessMemory: 106
    WriteProcessMemory: 107
    SetHardwareBreakPoint: 108
    GetDebugThreadParam: 109
    ControlProcessMemory: 112
    MapProcessMemory: 113
    UnmapProcessMemory: 114
    CreateCodeSet: 115
    CreateProcess: 117
    TerminateProcess: 118
    SetProcessResourceLimits: 119
    CreateResourceLimit: 120
    SetResourceLimitValues: 121
    AddCodeSegment: 122
    Backdoor: 123
    KernelSetState: 124
    QueryProcessMemory: 125

  # Service List
  # Maximum 34 services (32 if firmware is prior to 9.6.0)
  ServiceAccessControl:
   - APT:U
   - ac:u
   - am:net
   - boss:U
   - cam:u
   - cecd:u
   - cfg:nor
   - cfg:u
   - csnd:SND
   - dsp::DSP
   - frd:u
   - fs:USER
   - gsp::Gpu
   - gsp::Lcd
   - hid:USER
   - http:C
   - ir:rst
   - ir:u
   - ir:USER
   - mic:u
   - ndm:u
   - news:s
   - nwm::EXT
   - nwm::UDS
   - ptm:sysm
   - ptm:u
   - pxi:dev
   - soc:U
   - ssl:C
   - y2r:u


SystemControlInfo:
  SaveDataSize: 0KB # Change if the app uses savedata
  RemasterVersion: 2
  StackSize: 0x40000

  # Modules that run services listed above should be included below
  # Maximum 48 dependencies
  # <module name>:<module titleid>
  Dependency: 
    ac: 0x0004013000002402
    #act: 0x0004013000003802
    am: 0x0004013000001502
    boss: 0x0004013000003402
    camera: 0x0004013000001602
    cecd: 0x0004013000002602
    cfg: 0x0004013000001702
    codec: 0x0004013000001802
    csnd: 0x0004013000002702
    dlp: 0x0004013000002802
    dsp: 0x0004013000001a02
    friends: 0x0004013000003202
    gpio: 0x0004013000001b02
    gsp: 0x0004013000001c02
    hid: 0x0004013000001d02
    http: 0x0004013000002902
    i2c: 0x0004013000001e02
    ir: 0x0004013000003302
    mcu: 0x0004013000001f02
    mic: 0x0004013000002002
    ndm: 0x0004013000002b02
    news: 0x0004013000003502
    #nfc: 0x0004013000004002
    nim: 0x0004013000002c02
    nwm: 0x0004013000002d02
    pdn: 0x0004013000002102
    ps: 0x0004013000003102
    ptm: 0x0004013000002202
    #qtm: 0x0004013020004202
    ro: 0x0004013000003702
    socket: 0x0004013000002e02
    spi: 0x0004013000002302
    ssl: 0x0004013000002f02


================================================
FILE: PinBox/PinBox/PinBox.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Citra-QT|Win32">
      <Configuration>Citra-QT</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Citra-QT|x64">
      <Configuration>Citra-QT</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Citra|Win32">
      <Configuration>Citra</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Netlink|Win32">
      <Configuration>Netlink</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Citra|x64">
      <Configuration>Citra</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Netlink|x64">
      <Configuration>Netlink</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="TestClient|Win32">
      <Configuration>TestClient</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="TestClient|x64">
      <Configuration>TestClient</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <None Include="Makefile" />
    <None Include="source\vshader.v.pica" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="source\ConfigManager.cpp" />
    <ClCompile Include="source\easing.cpp" />
    <ClCompile Include="source\lodepng.cpp" />
    <ClCompile Include="source\main.cpp" />
    <ClCompile Include="source\Mutex.cpp" />
    <ClCompile Include="source\PPAudio.cpp" />
    <ClCompile Include="source\PPDecoder.cpp" />
    <ClCompile Include="source\PPGraphics.cpp" />
    <ClCompile Include="source\PPMessage.cpp" />
    <ClCompile Include="source\PPSession.cpp" />
    <ClCompile Include="source\PPSessionManager.cpp" />
    <ClCompile Include="source\PPUI.cpp" />
    <ClCompile Include="source\yuv_rgb.c" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="include\Anim.h" />
    <ClInclude Include="include\Color.h" />
    <ClInclude Include="include\ConfigManager.h" />
    <ClInclude Include="include\constant.h" />
    <ClInclude Include="include\easing.h" />
    <ClInclude Include="include\HubItem.h" />
    <ClInclude Include="include\lodepng.h" />
    <ClInclude Include="include\Logger.h" />
    <ClInclude Include="include\Mutex.h" />
    <ClInclude Include="include\PPAudio.h" />
    <ClInclude Include="include\PPDecoder.h" />
    <ClInclude Include="include\PPGraphics.h" />
    <ClInclude Include="include\PPMessage.h" />
    <ClInclude Include="include\PPSession.h" />
    <ClInclude Include="include\PPSessionManager.h" />
    <ClInclude Include="include\PPUI.h" />
    <ClInclude Include="include\yuv_rgb.h" />
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{7C85BF63-9A1F-43F0-9560-6E51BA537C01}</ProjectGuid>
    <Keyword>MakeFileProj</Keyword>
    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Citra|Win32'" Label="Configuration">
    <ConfigurationType>Makefile</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='TestClient|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Netlink|Win32'" Label="Configuration">
    <ConfigurationType>Makefile</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Citra|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='TestClient|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Netlink|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Citra-QT|Win32'">
    <PlatformToolset>v140</PlatformToolset>
    <ConfigurationType>Makefile</ConfigurationType>
  </PropertyGroup>
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Citra-QT|x64'">
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Citra|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='TestClient|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Netlink|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Citra|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='TestClient|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Netlink|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Citra|Win32'">
    <NMakeOutput>
    </NMakeOutput>
    <NMakePreprocessorDefinitions>USE_CITRA;CITRA;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
    <IncludePath>C:\devkitPro\devkitARM\arm-none-eabi\include;C:\devkitPro\libctru\include;C:\devkitPro\libwebp\include;C:\devkitPro\libimgui\include;include;build;C:\devkitPro\portlibs\armv6k\include;$(IncludePath)</IncludePath>
    <NMakeBuildCommandLine>make &amp; start make citra</NMakeBuildCommandLine>
    <NMakeReBuildCommandLine>make clean all</NMakeReBuildCommandLine>
    <NMakeCleanCommandLine>make clean</NMakeCleanCommandLine>
    <NMakeIncludeSearchPath>C:\devkitPro\libctru\include;C:\devkitPro\devkitARM\arm-none-eabi\include;include;C:\devkitPro\libwebp\include;build;C:\devkitPro\libimgui\include;C:\devkitPro\portlibs\armv6k\include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
    <OutDir>..\tmp\out\$(Configuration)\</OutDir>
    <IntDir>..\tmp\intermediate\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='TestClient|Win32'">
    <NMakeOutput />
    <NMakePreprocessorDefinitions>WIN32;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
    <IncludePath>C:\devkitPro\devkitARM\arm-none-eabi\include;C:\devkitPro\libctru\include;C:\devkitPro\libwebp\include;C:\devkitPro\libimgui\include;include;build;$(IncludePath)</IncludePath>
    <NMakeBuildCommandLine>
    </NMakeBuildCommandLine>
    <NMakeReBuildCommandLine>
    </NMakeReBuildCommandLine>
    <NMakeCleanCommandLine>
    </NMakeCleanCommandLine>
    <NMakeIncludeSearchPath>C:\devkitPro\libctru\include;C:\devkitPro\devkitARM\arm-none-eabi\include;include;C:\devkitPro\libwebp\include;build;C:\devkitPro\libimgui\include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
    <OutDir>..\tmp\out\$(Configuration)\</OutDir>
    <IntDir>..\tmp\intermediate\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Netlink|Win32'">
    <NMakeOutput>
    </NMakeOutput>
    <NMakePreprocessorDefinitions>$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
    <IncludePath>C:\devkitPro\devkitARM\arm-none-eabi\include;C:\devkitPro\libctru\include;C:\devkitPro\libwebp\include;C:\devkitPro\libimgui\include;include;build;C:\devkitPro\portlibs\armv6k\include;$(IncludePath)</IncludePath>
    <NMakeBuildCommandLine>make &amp; start make netlink</NMakeBuildCommandLine>
    <NMakeReBuildCommandLine>make clean all</NMakeReBuildCommandLine>
    <NMakeCleanCommandLine>make clean</NMakeCleanCommandLine>
    <NMakeIncludeSearchPath>C:\devkitPro\libctru\include;C:\devkitPro\devkitARM\arm-none-eabi\include;C:\devkitPro\libwebp\include;include;build;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
    <OutDir>..\tmp\out\$(Configuration)\</OutDir>
    <IntDir>..\tmp\intermediate\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Citra-QT|Win32'">
    <IncludePath>C:\devkitPro\devkitARM\arm-none-eabi\include;C:\devkitPro\libctru\include;C:\devkitPro\libwebp\include;C:\devkitPro\libimgui\include;include;build;C:\devkitPro\portlibs\armv6k\include;$(IncludePath)</IncludePath>
    <NMakePreprocessorDefinitions>USE_CITRA;CITRA;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
    <NMakeIncludeSearchPath>C:\devkitPro\libctru\include;C:\devkitPro\devkitARM\arm-none-eabi\include;include;C:\devkitPro\libwebp\include;build;C:\devkitPro\libimgui\include;C:\devkitPro\portlibs\armv6k\include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
    <NMakeBuildCommandLine>make &amp; start make citra-qt</NMakeBuildCommandLine>
    <NMakeReBuildCommandLine>make clean all</NMakeReBuildCommandLine>
    <NMakeCleanCommandLine>make clean</NMakeCleanCommandLine>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Citra|Win32'">
    <BuildLog>
      <Path />
    </BuildLog>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='TestClient|Win32'">
    <BuildLog>
      <Path>
      </Path>
    </BuildLog>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Netlink|Win32'">
    <BuildLog>
      <Path />
    </BuildLog>
  </ItemDefinitionGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: PinBox/PinBox/PinBox.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <None Include="source\vshader.v.pica">
      <Filter>Source Files</Filter>
    </None>
    <None Include="Makefile">
      <Filter>Resource Files</Filter>
    </None>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="source\main.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPGraphics.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPSession.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPUI.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPMessage.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\Mutex.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPSessionManager.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\ConfigManager.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPDecoder.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\yuv_rgb.c">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\PPAudio.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\easing.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="source\lodepng.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="include\PPGraphics.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\PPSession.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\PPUI.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\PPMessage.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\Mutex.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\PPSessionManager.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\ConfigManager.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\PPDecoder.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\yuv_rgb.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\PPAudio.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\constant.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\easing.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\Color.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\Anim.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\Logger.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\HubItem.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\lodepng.h">
      <Filter>Header Files</Filter>
    </ClInclude>
  </ItemGroup>
</Project>

================================================
FILE: PinBox/PinBox/build-cia.bat
================================================
start make clean & make all & make PinBox-strip.elf & make cia

================================================
FILE: PinBox/PinBox/create-smdh.bat
================================================
start smdhtool --create "PinBox" "3DS Client - PC Desktop Streaming" "Namkazt" "E:\3ds\PinBoxStreaming\PinBox\PinBox\assets\icon.png" Pinbox.smdh

================================================
FILE: PinBox/PinBox/include/Anim.h
================================================
#ifndef _PP_ANIM_H_
#define _PP_ANIM_H_

#include <easing.h>
#include <3ds/services/am.h>
#include <3ds/ndsp/ndsp.h>
#include <cstdlib>

#define TIME_MILISECOND 1Ull
#define TIME_SECOND 1000Ull
#define TIME_MINUTE 3600000Ull
#define TIME_HOUR 216000000Ull

class Anim {
	struct AnimInfo
	{
		u32 idx;
		u64 startTime;
		u64 duration;
		float from;
		float to;
		easing_functions func;
	};
};


#endif

================================================
FILE: PinBox/PinBox/include/Color.h
================================================
#ifndef _PP_COLOR_H_
#define _PP_COLOR_H_

#include <functional>

#define M_MIN(a,b) (((a) < (b)) ? (a) : (b))
#define M_MAX(a,b) (((a) > (b)) ? (a) : (b))

#define M_MIN3(a,b,c) (((a) < (b)) ? (((a) < (c)) ? (a) : (c)) : (((b) < (c)) ? (b) : (c)))
#define M_MAX3(a,b,c) (((a) > (b)) ? (((a) > (c)) ? (a) : (c)) : (((b) > (c)) ? (b) : (c)))

//TODO: port this
// https://github.com/Qix-/color-convert/blob/master/conversions.js
// and this https://github.com/Qix-/color/blob/master/index.js#L298

struct Color;
#define RGB(r,g,b) Color{r, g, b, 255}
#define RGBA(r,g,b,a) Color{r, g, b, a}
#define TRANSPARENT Color{0, 0, 0, 0}

typedef struct Color
{
	Color() : r(255), g(255), b(255), a(255) {};
	Color(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a) : r(_r), g(_g), b(_b), a(_a) {};
	uint8_t r, g, b, a;
	float h, l, s, v;
	u32 toU32() const { return (((a) & 0xFF) << 24) | (((b) & 0xFF) << 16) | (((g) & 0xFF) << 8) | (((r) & 0xFF) << 0); }
	// type conversions
	inline void rgb2hsl()
	{
		float _r = r / 255.f, _g = g / 255.f, _b = b / 255.f;
		float vMin = M_MIN3(r, g, b);
		float vMax = M_MAX3(r, g, b);
		float delta = vMax - vMin;
		if (vMax == vMin) h = 0;
		else if (_r == vMax) h = (_g - _b) / delta;
		else if (_g == vMax) h = 2 + (_b - _r) / delta;
		else if (_b == vMax) h = 4 + (_r - _g) / delta;
		h = M_MIN(h * 60.f, 36.f);
		if (h < 0) h += 360.f;
		l = (vMin + vMax) / 2.0f;
		if (vMax == vMin) s = 0;
		else if (l <= 0.5f) s = delta / (vMax + vMin);
		else s = delta / (2 - vMax - vMin);
	}
	inline void hsl2rgb()
	{
		float _h = h / 360.f, _s = s / 360.f, _l = l / 360.f;
		float t1 = 0, t2 = 0, t3 = 0, val = 0;
		if (_s == 0) {
			val = _l * 255.f;
			r = val, g = val, b = val;
		}else
		{
			if (_l < 0.5f) t2 = _l * (1 + _s);
			else t2 = _l + _s - _l * _s;
			t1 = 2 * _l - t2;
			std::function<float(int i)> get = std::function<float(int i)>([&](int i) {
				t3 = _h + 1.f / 3.f * -(i - 1);
				if (t3 < 0) t3++;
				if (t3 > 1) t3--;
				if (6.f * t3 < 1) val = t1 + (t2 - t1) * 6.f * t3;
				else if (2.f * t3 < 1.f) val = t2;
				else if (3.f * t3 < 2.f) val = t1 + (t2 - t1) * (2.f / 3.f - t3) * 6.f;
				else val = t1;
				return val * 255.f;
			});
			r = get(0);
			g = get(1);
			b = get(2);
		}
	}
	inline void rgb2hsv()
	{
		float rd, gd, bd;
		float _r = r / 255.f, _g = g / 255.f, _b = b / 255.f;
		v = M_MAX3(_r, _g, _b);
		float diff = v - M_MIN3(_r, _g, _b);
		std::function<float(float c)> diffc = std::function<float(float c)>([&](float c) {
			return (v - c) / 6.f / diff + 1.f / 2.f;
		});
		if (diff == 0.f) h = s = 0.f;
		else
		{
			s = diff / v;
			rd = diffc(_r);
			gd = diffc(_g);
			bd = diffc(_b);
			if (_r == v) h = bd - gd;
			else if (_g == v) h = (1.f / 3.f) + rd - bd;
			else if (_b == v) h = (2.f / 3.f) + gd - rd;
			if (h < 0) h += 1;
			else if (h > 1) h -= 1;
		}
		h *= 360; s *= 100; v *= 100;
	}
	inline void hsv2rgb()
	{
		float _h = h / 60.f, _s = s / 100.f, _v = v / 100.f;
		int hi = (int)floor(_h) % 6;
		uint8_t f = _h - floor(_h);
		uint8_t p = 255.f * _v * (1.f - _s);
		uint8_t q = 255.f * _v * (1.f - (_s * f));
		uint8_t t = 255.f * _v * (1 - (_s * (1 - f)));
		_v *= 255.f;
		switch (hi) {
		case 0: r = _v; g = t; b = p; break;
		case 1: r = q; g = _v; b = p; break;
		case 2: r = p; g = _v; b = t; break;
		case 3: r = p; g = q; b = _v; break;
		case 4: r = t; g = p; b = _v; break;
		case 5: r = _v; g = p; b = q; break;
		}
	}

#define WARP_HSL(func)  rgb2hsl(); func; hsl2rgb();
#define WARP_HSV(func)  rgb2hsv(); func; hsv2rgb();

	// funcs
	inline float luminosity()
	{
		float lr = ((float)r / 255.0f); lr = lr <= 0.03928f ? lr / 12.92f : powf((lr + 0.055f) / 1.055f, 2.4f);
		float lg = ((float)g / 255.0f); lg = lg <= 0.03928f ? lg / 12.92f : powf((lg + 0.055f) / 1.055f, 2.4f);
		float lb = ((float)b / 255.0f); lb = lb <= 0.03928f ? lb / 12.92f : powf((lb + 0.055f) / 1.055f, 2.4f);
		return  0.2126 * lr + 0.7152 * lg + 0.0722 * lb;
	}
	inline float contrast(Color c)
	{
		float l1 = luminosity(), l2 = c.luminosity();
		return l1 > l2 ? (l1 + 0.05f) / (l2 + 0.05f) : (l2 + 0.05f) / (l1 + 0.05f);
	}
	inline int level(Color c)
	{
		float cRatio = contrast(c);
		if (cRatio >= 7.1f) return 3;
		return (cRatio >= 4.5) ? 2 : 1;
	}
	inline bool isDark() { return (float)(r * 299 + g * 587 + b * 114) / 1000.0f < 128.0f; }
	inline bool isLight() { return !isDark(); }
	inline Color negate() { return RGB(255-r, 255-g, 255-b); }
	inline void lighten(float ratio) { WARP_HSL(l += l * ratio) }
	inline void darken(float ratio) { WARP_HSL(l -= l * ratio) }
	inline void saturate(float ratio) { WARP_HSL(s += s * ratio) }
	inline void desaturate(float ratio) { WARP_HSL(s -= s * ratio) }
	inline Color grayscale() { float v = r * 0.3f + g * 0.59f + b * 0.11f; return RGB(v, v, v); }
	inline void rorate(float degrees) { WARP_HSL( h = (int)(h + degrees) % 360; h = h < 0 ? 360 + h : h; ) }
	inline Color mix(Color mixin, float weight)
	{
		float w = 2.f * weight - 1;
		uint8_t _a = a - mixin.a;
		float w1 = (((w * _a == -1) ? w : (w + _a) / (1.f + w * _a)) + 1.f) / 2.f;
		float w2 = 1 - w1;
		return RGBA(w1 * r + w2 * mixin.r, w1 * g + w2 * mixin.g, w1 * b + w2 * mixin.b, a * weight + mixin.a * (1 - weight));
	}
};


#endif

================================================
FILE: PinBox/PinBox/include/ConfigManager.h
================================================
#pragma once
#ifndef _CONFIG_MANAGER_H_
#define _CONFIG_MANAGER_H_

#include <3ds.h>
#include "libconfig.h"
#include <vector>
#include <string>

#define FORCE_OVERRIDE_VERSION 2

typedef struct ServerConfig {
	std::string ip;
	std::string port;
	std::string name;
};

class ConfigManager
{
private:
	config_t _config;
	bool shouldCreateNewConfigFile();
	void createNewConfigFile();
	void loadConfigFile();

public:

	ServerConfig* activateServer;

	std::vector<ServerConfig> servers;
	int lastUsingServer = -1;

	int videoBitRate;
	int videoGOP;
	int videoMaxBFrames;

	int audioBitRate;

	bool waitForSync;
public:
	static ConfigManager* Get();
	ConfigManager();

	void InitConfig();
	void Save();
	void Destroy();
};


#endif

================================================
FILE: PinBox/PinBox/include/HubItem.h
================================================
#ifndef _PP_HUB_TITEM_H_
#define _PP_HUB_TITEM_H_
#include <3ds.h>

enum HubItemType
{
	HUB_SCREEN = 0x0,
	HUB_APP,
	HUB_MOVIE,
};

class HubItem
{
public:
	std::string				uuid;

	// app name
	std::string				name;

	// thumb image should be 64x64 png image
	u8*						thumbBuf;
	u32						thumbSize;

	HubItemType				type;
};

#endif

================================================
FILE: PinBox/PinBox/include/Logger.h
================================================
#ifndef _PP_LOGGER_H_
#define _PP_LOGGER_H_
#include <cstdio>


class Logger
{
public:
};

#endif

================================================
FILE: PinBox/PinBox/include/Mutex.h
================================================
#pragma once
#include <3ds.h>
#include <3ds/svc.h>

class Mutex
{
private:
	LightLock							_handler;
	bool								_isLocked = false;

public:
	Mutex();
	~Mutex();

	void Lock();
	void TryLock();
	void Unlock();
};



================================================
FILE: PinBox/PinBox/include/PPAudio.h
================================================
#pragma once
#ifndef _PP_AUDIO_H_
#define _PP_AUDIO_H_

#include <3ds.h>
#include <libavutil/frame.h>
#include "Mutex.h"

#define MAX_AUDIO_BUF 2


class PPAudio
{
private:
	bool						_initialized = false;
	ndspWaveBuf					_waveBuf[MAX_AUDIO_BUF];
	int							_nextBuf = 0;

public:
	~PPAudio();
	static PPAudio* Get();

	void AudioInit();
	void AudioExit();


	void FillBuffer(u8* buffer, u32 size);


};

#endif

================================================
FILE: PinBox/PinBox/include/PPDecoder.h
================================================
#pragma once
#include <3ds.h>
#include "Mutex.h"
#include "yuv_rgb.h"
#include <3ds/services/y2r.h>
//ffmpeg
extern "C" {
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
#include <libavformat/avio.h>
#include <libavutil/file.h>
#include <libavutil/opt.h>
#include <libswscale/swscale.h>
#include <libswresample/swresample.h>
}

#define MEMORY_BUFFER_SIZE 0x1400000
#define MEMORY_BUFFER_PADDING 0x04

typedef struct MemoryBuffer {
	u8* pBufferAddr;
	u32 iCursor;
	u32 iSize;
	u32 iMaxSize;
	Mutex* pMutex;

	void write(u8* buf, u32 size)
	{
		if (iSize < size) return;
		pMutex->Lock();
		memcpy(pBufferAddr + iCursor, buf, size);
		iCursor += size;
		iSize -= size;
		pMutex->Unlock();
	}

	int read(u8* buf, u32 size)
	{
		if (iCursor == 0) return -1;
		pMutex->Lock();
		int ret = FFMIN(iCursor, size);
		memcpy(buf, pBufferAddr, ret);
		iSize += ret;
		iCursor -= ret;
		pMutex->Unlock();
		return ret;
	}
}MemoryBuffer;

typedef struct DecodeState{
	Y2RU_ConversionParams y2rParams;
	Handle endEvent;
}DecodeState;

class PPDecoder
{
private:

	// video stream
	//AVCodecParserContext*		pVideoParser;
	AVCodecContext*				pVideoContext;
	AVPacket*					pVideoPacket;
	AVFrame*					pVideoFrame;
	DecodeState*				pDecodeState;
	u8*							decodeVideoStream();
	void						initY2RImageConverter();
	void						convertColor();

	// audio stream
	AVCodecContext*				pAudioContext;
	AVPacket*					pAudioPacket;
	AVFrame*					pAudioFrame;

public:
	PPDecoder();
	~PPDecoder();

	u32 iFrameWidth;
	u32 iFrameHeight;

	void initDecoder();
	void releaseDecoder();

	u8* appendVideoBuffer(u8* buffer, u32 size);
	void decodeAudioStream(u8* buffer, u32 size);
};

================================================
FILE: PinBox/PinBox/include/PPGraphics.h
================================================
#pragma once
#ifndef _PP_GRAPHICS_H_
#define _PP_GRAPHICS_H_

#include <3ds.h>
#include <3ds/gfx.h>
#include <citro3d.h>
#include "Color.h"
#include <map>

//=========================================================================================
// Const
//=========================================================================================

#define CLEAR_COLOR 0x000000FF

#define DISPLAY_TRANSFER_FLAGS \
	(GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \
	GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \
	GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO))

// Used to convert textures to 3DS tiled format
// Note: vertical flip flag set so 0,0 is top left of texture
#define TEXTURE_TRANSFER_FLAGS \
	(GX_TRANSFER_FLIP_VERT(1) | GX_TRANSFER_OUT_TILED(1) | GX_TRANSFER_RAW_COPY(0) | \
	GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGB8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \
	GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO))

#define TEXTURE_RGBA_TRANSFER_FLAGS \
	(GX_TRANSFER_FLIP_VERT(1) | GX_TRANSFER_OUT_TILED(1) | GX_TRANSFER_RAW_COPY(0) | \
	GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGBA8) | \
	GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO))

#define TEX_GRAPHIC 0
#define TEX_VIDEO_STREAM_LEFT 1
#define TEX_VIDEO_STREAM_RIGHT 2
#define TEX_FONT_GRAPHIC 3


//=========================================================================================
// Type
//=========================================================================================
typedef struct
{
	float x;
	float y;
}Vector2;

typedef struct
{
	float x;
	float y;
	float z;
}Vector3;

typedef struct
{
	Vector3 position;
	u32 color;
}VertexPosCol;

typedef struct
{
	Vector3 position;
	Vector2 textcoord;
}VertexPosTex;

typedef struct 
{
	C3D_Tex tex;
	u32 width;
	u32 height;
	bool initialized = false;
}Sprite;

//=========================================================================================
// Class
//=========================================================================================
class PPGraphics
{
public:
	Color PrimaryColor = Color{ 76, 175, 80, 255 };
	Color PrimaryDarkColor = Color{ 0, 150, 136, 255 };
	Color AccentColor = Color{ 230, 126, 34, 255 };
	Color AccentDarkColor = Color{ 211, 84, 0, 255 };
	Color PrimaryTextColor = Color{ 38, 50, 56, 255 };
	Color AccentTextColor = Color{ 255, 255, 255, 255 };

	Color TransBackgroundDark = Color{3, 3, 3, 180};

private:
	C3D_RenderTarget*				mRenderTargetTop = nullptr;
	C3D_Mtx							mProjectionTop;
	C3D_RenderTarget*				mRenderTargetBtm = nullptr;
	C3D_Mtx							mProjectionBtm;

	DVLB_s*							mVShaderDVLB;
	shaderProgram_s					mShaderProgram;
	int								mULocProjection;

	// system font
	C3D_Tex*						mGlyphSheets;

	// top screen sprite
	Sprite*							mTopScreenSprite;

	// Temporary memory pool
	void							*memoryPoolAddr = NULL;
	u32								memoryPoolIndex = 0;
	u32								memoryPoolSize = 0;

	gfxScreen_t						mCurrentDrawScreen = GFX_TOP;
	int								mRendering = 0;

	// Texture cache
	std::map<std::string, Sprite*>	mTexCached;

	void setupForPosCollEnv(void* vertices);
	void setupForPosTexlEnv(void* vertices, u32 color, int texID);

	int getTextUnit(GPU_TEXUNIT unit);
	

	void *allocMemoryPoolAligned(u32 size, u32 alignment);
	void resetMemoryPool() { memoryPoolIndex = 0; }

public:
	~PPGraphics();
	static PPGraphics* Get();

	void GraphicsInit();
	void GraphicExit();

	// cache functions
	Sprite* AddCacheImageAsset(const char* name, std::string key);
	Sprite* AddCacheImage(const char* path, std::string key);
	Sprite* AddCacheImage(u8 *buf, u32 size, std::string key);
	Sprite* GetCacheImage(std::string key);

	// draw functions
	void BeginRender();
	void RenderOn(gfxScreen_t screen);
	void EndRender();

	void UpdateTopScreenSprite(u8* data, u32 size);
	void DrawTopScreenSprite();

	// Draw image
	void DrawImage(Sprite* sprite, int x, int y);
	void DrawImage(std::string key, int x, int y) { DrawImage(GetCacheImage(key), x, y); }
	void DrawImage(Sprite* sprite, int x, int y, int w, int h);
	void DrawImage(std::string key, int x, int y, int w, int h) { DrawImage(GetCacheImage(key), x, y, w, h); }
	void DrawImage(Sprite* sprite, int x, int y, int w, int h, int degrees);
	void DrawImage(std::string key, int x, int y, int w, int h, int degrees) { DrawImage(GetCacheImage(key), x, y, w, h, degrees); }
	void DrawImage(Sprite* sprite, int x, int y, int w, int h, int degrees, Vector2 anchor);
	void DrawImage(std::string key, int x, int y, int w, int h, int degrees, Vector2 anchor) { DrawImage(GetCacheImage(key), x, y, w, h, degrees, anchor); }

	// draw rectangle
	void DrawRectangle(float x, float y, float w, float h, Color color, float rounding = 0.0f);

	// mask
	void StartMasked(float x, float y, float w, float h, gfxScreen_t screen) const;
	void StopMasked() const;

	// draw text
	void DrawText(const char* text, float x, float y, float scaleX, float scaleY, Color color, bool baseline);
	void DrawTextAutoWrap(const char* text, float x, float y, float w, float scaleX, float scaleY, Color color, bool baseline);
	Vector2 GetTextSize(const char* text, float scaleX, float scaleY);
	Vector3 GetTextSizeAutoWrap(const char* text, float scaleX, float scaleY, float w);
};


#endif

================================================
FILE: PinBox/PinBox/include/PPMessage.h
================================================
#pragma once
#ifndef _PP_MESSAGE_H_
#define _PP_MESSAGE_H_

#include <3ds.h>
#include <cstdint>
#include <cstring>
#include <cstdlib>
#include <cstdio>

#define WRITE_CHAR_PTR(BUFFER, DATA, SIZE) memcpy(BUFFER, DATA, SIZE); BUFFER += SIZE;
#define WRITE_U8(BUFFER, DATA) *(BUFFER++) = DATA & 0xff;
#define WRITE_U16(BUFFER, DATA) *(BUFFER++) = DATA & 0xff; *(BUFFER++) = (DATA >> 8) & 0xff;
#define WRITE_U32(BUFFER, DATA) *(BUFFER++) = DATA; *(BUFFER++) = DATA >> 8; *(BUFFER++) = DATA >> 16; *(BUFFER++) = DATA >> 24;
#define READ_U8(BUFFER, INDEX) BUFFER[INDEX];
#define READ_U16(BUFFER, INDEX) BUFFER[INDEX] | BUFFER[INDEX + 1] << 8;
#define READ_U32(BUFFER, INDEX) BUFFER[INDEX] | BUFFER[INDEX + 1] << 8 | BUFFER[INDEX + 2] << 16 | BUFFER[INDEX + 3] << 24;
#define IS_INVALID_CODE(BUFFER, INDEX) BUFFER[INDEX] != 'P' || BUFFER[INDEX+1] != 'P' || BUFFER[INDEX+2] != 'B' || BUFFER[INDEX+3] != 'X'

class PPMessage
{
private:
	//-----------------------------------------------
	// message header - 9 bytes
	// [4b] validate code : "PPBX"
	// [1b] message code : 0 to 255 - define message type
	// [4b] message content size 
	//-----------------------------------------------
	const char							g_validateCode[4] = { 'P','P','B','X' };
	u8									g_code = 0;
	u32									g_contentSize = 0;

	//-----------------------------------------------
	// message content
	//-----------------------------------------------
	u8*									g_content = nullptr;
public:
	~PPMessage();
	u32									GetMessageSize() const { return g_contentSize + 9; }
	u8*									GetMessageContent() { return g_content; }
	u32									GetContentSize() { return g_contentSize; }
	u8									GetMessageCode() { return g_code; }
	//-----------------------------------------------
	// NOTE: after using this message, returned data must be free whenever it sent.
	//-----------------------------------------------
	u8*									BuildMessage(u8* contentBuffer, u32 contentSize);
	u8*									BuildMessageEmpty();
	void								BuildMessageHeader(u8 code);

	bool								ParseHeader(u8* buffer);
	void								ClearHeader();
};

#endif

================================================
FILE: PinBox/PinBox/include/PPSession.h
================================================
#pragma once
#ifndef _PP_SESSION_H_
#define _PP_SESSION_H_

//=======================================================================
// PinBox Video Session
// container streaming data can be movie or screen capture
// With:
// 1, Movie :
// TODO: using ffmpeg to decode movie stream from server
// TODO: support 3D movie on N3DS
// TODO: mainly support RGB565 for lower size and speed up stream
// 2, Screen Capture:
// TODO: capture entire screen or a part of screen that config in server
//-----------------------------------------------------------------------
// Note: each session is running standalone and only 1 session can be run
// at a time.
//=======================================================================

#include <3ds.h>
#include <map>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> 
#include <fcntl.h>
#include <memory>
#include <cerrno>
#include <functional>
#include <queue>

#include <constant.h>
#include "Mutex.h"
#include "PPMessage.h"
#include "HubItem.h"

enum PPSession_Type { PPSESSION_NONE, PPSESSION_MOVIE, PPSESSION_SCREEN_CAPTURE, PPSESSION_INPUT_CAPTURE};

#define MSG_COMMAND_SIZE 9

#define PPREQUEST_AUTHEN 50
#define PPREQUEST_HEADER 10
#define PPREQUEST_BODY 15
// authentication code
#define MSG_CODE_REQUEST_AUTHENTICATION_SESSION 1

#define MSG_CODE_RESULT_AUTHENTICATION_SUCCESS 5
#define MSG_CODE_RESULT_AUTHENTICATION_FAILED 6
// screen capture code
#define MSG_CODE_REQUEST_START_SCREEN_CAPTURE 10
#define MSG_CODE_REQUEST_STOP_SCREEN_CAPTURE 11
#define MSG_CODE_REQUEST_CHANGE_SETTING_SCREEN_CAPTURE 12
#define MSG_CODE_REQUEST_NEW_SCREEN_FRAME 15
#define MSG_CODE_REQUEST_SCREEN_RECEIVED_FRAME 16
#define MSG_CODE_REQUEST_NEW_AUDIO_FRAME 18
#define MSG_CODE_REQUEST_RECEIVED_AUDIO_FRAME 19


// input
#define MSG_CODE_SEND_INPUT_CAPTURE 42
#define MSG_CODE_SEND_INPUT_CAPTURE_IDLE 44

// hub
#define MSG_CODE_REQUEST_HUB_ITEMS 60
#define MSG_CODE_RECEIVED_HUB_ITEMS 61

// audio
#define AUDIO_CHANNEL	0x08


typedef struct
{
	void		*msgBuffer;
	u32			msgSize;
} QueueMessage;


class PPSessionManager;


enum ppConectState { IDLE, CONNECTING, CONNECTED, FAIL };
typedef std::function<void(u8* buffer, u32 size, u32 tag)> PPNetworkReceivedRequest;
typedef std::function<void(u8* data, u32 code)> PPNetworkCallback;

class PPSession
{
private:
	PPSessionManager				*_manager;
	PPMessage*						_tmpMessage = nullptr;
	bool							_authenticated = false;
	std::queue<QueueMessage*>		_sendingMessages;
	Mutex*							_queueMessageMutex;
private:
	// threading
	bool							_running = false;
	bool							_kill = false;
	Thread							_thread;
	// socket
	const char*						_ip = 0;
	const char*						_port = 0;
	int								_sock = -1;
	ppConectState					_connect_state = IDLE;

	// test connection result
	int	volatile					_testConnectionResult = 0;

	// hub items
	std::vector<HubItem*>			_hubItems;

	void connectToServer();
	void closeConnect();
	void recvSocketData();
	void sendMessageData();

	void processReceivedMsg(u8* buffer, u32 size, u32 tag);;
	void processMessageData(u8* buffer, size_t size);

public:
	PPSession();
	~PPSession();

	int GetTestConnectionResult() const { return _testConnectionResult; }
	void InitTestSession(PPSessionManager* manager, const char* ip, const char* port);
	void threadTest();

	void InitSession(PPSessionManager* manager, const char* ip, const char* port);
	void threadMain();
	void ReleaseSession();
	void CleanUp();

	void StartStream();
	void StopStream();

	void RequestForData(u32 size, u32 tag = 0);
	void AddMessageToQueue(u8 *msgBuffer, int32_t msgSize);

	int GetHubItemCount() { return _hubItems.size(); }
	HubItem* GetHubItem(int i) { return _hubItems.at(i); }

private:
	bool								isInputStarted = false;
	bool								isSessionStarted = false;

public:
	// Authentication
	void								SendMsgAuthentication();

	// Stream
	void								SendMsgStartStream();
	void								SendMsgStopStream();

	// Setting
	void								SendMsgChangeSetting();

	// Hub 
	void								SendMsgRequestHubItems();

	// Input
	bool								SendMsgSendInputData(u32 down, u32 up, short cx, short cy, short ctx, short cty);
};

#endif

================================================
FILE: PinBox/PinBox/include/PPSessionManager.h
================================================
#pragma once
#include <vector>
#include "PPSession.h"
#include <webp/decode.h>
#include <turbojpeg.h>
#include "opusfile.h"
#include <map>
#include <stack>
#include "PPDecoder.h"

#include "constant.h"
#include "ConfigManager.h"

enum SessionState
{
	SS_NOT_CONNECTED = 0,
	SS_CONNECTING,
	SS_CONNECTED,
	SS_PAIRED,
	SS_STREAMING,

	SS_FAILED
};

typedef struct
{
	u8		*buffer;
	u32			size;
} VideoFrame;

enum BusyState
{
	BS_NONE = 0,
	BS_AUTHENTICATION,
	BS_HUB_ITEMS
};

class PPSessionManager
{
protected:
	PPSession*										_session = nullptr;
	PPSession*										_testSession = nullptr;

	//--------------------------------------------
	// decoder
	//--------------------------------------------
	PPDecoder*										_decoder = nullptr;

	//--------------------------------------------
	// input
	//--------------------------------------------
	u32												_oldDown;
	u32												_oldUp;
	short											_oldCX;
	short											_oldCY;
	short											_oldCTX;
	short											_oldCTY;
	bool											_initInputFirstFrame = false;

	//--------------------------------------------
	// fps
	//--------------------------------------------
	u64												_lastRenderTime = 0;
	float											_currentRenderFPS = 0.0f;
	u32												_renderFrames = 0;

	u64												_lastVideoTime = 0;
	float											_currentVideoFPS = 0.0f;
	u32												_videoFrame = 0;
	bool											_receivedFirstVideoFrame = false;


	
	SessionState									_sessionState = SS_NOT_CONNECTED;
	BusyState										_busyState = BS_NONE;
public:
	PPSessionManager();
	~PPSessionManager();

	/**
	 * \brief Test connections
	 * \param config server informations 
	 * \return  0 as pending\n
	 *			-1 as failed\n
	 *			1 as successfully
	 */
	int TestConnection(ServerConfig *config);

	/**
	 * \brief Must call after @ref InitNewSession to connect to server by config.
	 * update follow @ref GetSessionState to get connection state
	 * @ref GetSessionState return @ref SS_FAILED if connect error
	 * 						return @ref SS_PAIRED if connect and authentication successfully
	 * \param config server informations
	 * \return @ref SessionState
	 */
	SessionState ConnectToServer(ServerConfig* config);

	/**
	 * \brief Disconnect to Paired server
	 *  @ref GetSessionState will return @ref SS_NOT_CONNECTED
	 */
	void DisconnectToServer();

	int GetHubItemCount() { return _session->GetHubItemCount(); }
	HubItem* GetHubItem(int i) { return _session->GetHubItem(i); }

	/**
	 * \brief Get current session state
	 * \return @ref SessionState
	 */
	SessionState GetSessionState() const { return _sessionState; };


	/**
	 * \brief Set current session state
	 * \param v new state that apply for session
	 */
	void SetSessionState(SessionState v) { _sessionState = v; };


	/**
	 * \brief init video and audio decoder
	 */
	void InitDecoder();

	/**
	 * \brief release video and audio decoder
	 */
	void ReleaseDecoder();


	/**
	 * \brief update new stream setting to server
	 * user need update config from @ref PPConfigManager first before call this function
	 */
	void UpdateStreamSetting();

	/**
	* \brief get server's controller profiles ( it only return key name of each profiles )
	*/
	void GetControllerProfiles();


	/**
	 * \brief Send authentication message
	 */
	void Authentication();


	BusyState GetBusyState() { return _busyState; }
	void SetBusyState(BusyState bs) { _busyState = bs; }

	/**
	 * \brief Tell server that client want to start streaming
	 * 
	 */
	void StartStreaming();

	void StopStreaming();

	void StartFPSCounter();
	void UpdateFPSCounter();

	void UpdateInputStream(u32 down, u32 up, short cx, short cy, short ctx, short cty);
	void ProcessVideoFrame(u8* buffer, u32 size);
	void ProcessAudioFrame(u8* buffer, u32 size);

	

	void DrawVideoFrame();

	

	// fps
	float GetFPS() const { return _currentRenderFPS; }
	float GetVideoFPS() const { return _currentVideoFPS; }


};



================================================
FILE: PinBox/PinBox/include/PPUI.h
================================================
#pragma once
#ifndef _PP_UI_H_
#define _PP_UI_H_
#include <3ds.h>
#include <string>
#include <citro3d.h>
#include "PPGraphics.h"
#include "PPSessionManager.h"
#include "easing.h"
#include "Color.h"

//#define UI_DEBUG 1
#define RET_CLOSE_APP -1000

#define SCROLL_THRESHOLD 5
#define SCROLL_BAR_MIN 0.2f
#define SCROLL_SPEED_MODIFIED 0.2f
#define SCROLL_SPEED_STEP 0.18f

enum Direction
{
	D_NONE = 0,
	D_HORIZONTAL = 1,
	D_VERTICAL = 2,
	D_BOTH = 3
};

typedef struct DialogBoxOverride {
	bool isActivate = false;
	Color TitleBgColor;
	Color TitleTextColor;
	const char* Title = nullptr;
	const char* Body = nullptr;
};

typedef struct WH {
	int width;
	int height;
};

typedef std::function<void(float x, float y, float w, float h)> TabContentDraw;
typedef std::function<int()> PopupCallback;
typedef std::function<WH()> WHCallback;
typedef std::function<void(void* arg1, void* arg2)> ResultCallback;

class PPUI
{

public:
	static u32 getKeyDown();
	static u32 getKeyHold();
	static u32 getKeyUp();
	static circlePosition getLeftCircle();
	static circlePosition getRightCircle();

	static u32 getSleepModeState();

	static void UpdateInput();
	static bool TouchDownOnArea(float x, float y, float w, float h);
	static bool TouchUpOnArea(float x, float y, float w, float h);
	static bool TouchDown();
	static bool TouchMove();
	static bool TouchUp();


	// RESOURCES
	static void InitResource();
	static void CleanupResource();

	// SCREEN
	static int DrawIdleTopScreen(PPSessionManager *sessionManager);


	static int DrawBtmServerSelectScreen(PPSessionManager *sessionManager);
	static int DrawBtmAddNewServerProfileScreen(PPSessionManager *sessionManager, ResultCallback cancel, ResultCallback ok);
	static int DrawBtmPairedScreen(PPSessionManager *sessionManager);

	static int DrawStreamConfigUI(PPSessionManager *sessionManager, ResultCallback cancel, ResultCallback ok);
	static int DrawIdleBottomScreen(PPSessionManager *sessionManager);

	static void InfoBox(PPSessionManager *sessionManager);

	// TAB
	static int DrawTabs(const char* tabs[], u32 tabCount, int activeTab, float x, float y, float w, float h);

	// DIALOG
	static void OverrideDialogTypeWarning();
	static void OverrideDialogTypeInfo();
	static void OverrideDialogTypeSuccess();
	static void OverrideDialogTypeCritical();

	static void OverrideDialogContent(const char* title, const char* body);

	static int DrawDialogKeyboard( ResultCallback cancelCallback, ResultCallback okCallback);
	static int DrawDialogNumberInput( ResultCallback cancelCallback, ResultCallback okCallback);
	static int DrawDialogLoading(const char* title, const char* body, PopupCallback callback);
	static int DrawDialogMessage(PPSessionManager *sessionManager, const char* title, const char* body);
	static int DrawDialogMessage(PPSessionManager *sessionManager, const char* title, const char* body, PopupCallback closeCallback);
	static int DrawDialogMessage(PPSessionManager *sessionManager, const char* title, const char* body, PopupCallback cancelCallback, PopupCallback okCallback);

	static int DrawDialogBox(PPSessionManager *sessionManager);


	// SCROLL BOX
	static Vector2 ScrollBox(float x, float y, float w, float h, Direction dir, Vector2 cursor, WHCallback contentDraw);

	// SLIDE
	static float Slide(float x, float y, float w, float h, float val, float min, float max, float step, const char* label);
	
	// CHECKBOX
	static bool ToggleBox(float x, float y, float w, float h, bool value, const char* label);

	// SELECT BOX
	static bool SelectBox(float x, float y, float w, float h, Color color, float rounding);

	// BUTTON
	static bool FlatButton(float x, float y, float w, float h, const char* label, float rounding = 0.0f);
	static bool FlatDarkButton(float x, float y, float w, float h, const char* label, float rounding = 0.0f);
	static bool FlatColorButton(float x, float y, float w, float h, const char* label, Color colNormal, Color colActive, Color txtCol, float rounding = 0.0f);

	static bool RepeatButton(float x, float y, float w, float h, const char* label, Color colNormal, Color colActive, Color txtCol);

	// TEXT
	static int LabelBox(float x, float y, float w, float h, const char* label, Color bgColor, Color txtColor, float scale = 0.5f, float rounding = 0.f);
	static int LabelBoxAutoWrap(float x, float y, float w, float h, const char* label, Color bgColor, Color txtColor, float scale = 0.5f, float rounding = 0.f);
	static int LabelBoxLeft(float x, float y, float w, float h, const char* label, Color bgColor, Color txtColor, float scale = 0.5f, float rounding = 0.f);

	// POPUP
	static bool HasPopup();
	static PopupCallback GetPopup();
	static void ClosePopup();
	static void AddPopup(PopupCallback callback);

};

#endif

================================================
FILE: PinBox/PinBox/include/constant.h
================================================
#pragma once

#define SOC_ALIGN       0x1000
#define SOC_BUFFERSIZE  0x100000

#define CONSOLE_DEBUG 1
#define USE_CITRA 1

================================================
FILE: PinBox/PinBox/include/easing.h
================================================
#pragma once 

enum easing_functions
{
	EaseInSine,
	EaseOutSine,
	EaseInOutSine,
	EaseInQuad,
	EaseOutQuad,
	EaseInOutQuad,
	EaseInCubic,
	EaseOutCubic,
	EaseInOutCubic,
	EaseInQuart,
	EaseOutQuart,
	EaseInOutQuart,
	EaseInQuint,
	EaseOutQuint,
	EaseInOutQuint,
	EaseInExpo,
	EaseOutExpo,
	EaseInOutExpo,
	EaseInCirc,
	EaseOutCirc,
	EaseInOutCirc,
	EaseInBack,
	EaseOutBack,
	EaseInOutBack,
	EaseInElastic,
	EaseOutElastic,
	EaseInOutElastic,
	EaseInBounce,
	EaseOutBounce,
	EaseInOutBounce
};

typedef double(*easingFunction)(double);

easingFunction getEasingFunction( easing_functions function );



================================================
FILE: PinBox/PinBox/include/lodepng.h
================================================
/*
LodePNG version 20180819

Copyright (c) 2005-2018 Lode Vandevenne

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.

2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.

3. This notice may not be removed or altered from any source
distribution.
*/

#ifndef LODEPNG_H
#define LODEPNG_H

#include <string.h> /*for size_t*/

extern const char* LODEPNG_VERSION_STRING;

/*
The following #defines are used to create code sections. They can be disabled
to disable code sections, which can give faster compile time and smaller binary.
The "NO_COMPILE" defines are designed to be used to pass as defines to the
compiler command to disable them without modifying this header, e.g.
-DLODEPNG_NO_COMPILE_ZLIB for gcc.
In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to
allow implementing a custom lodepng_crc32.
*/
/*deflate & zlib. If disabled, you must specify alternative zlib functions in
the custom_zlib field of the compress and decompress settings*/
#ifndef LODEPNG_NO_COMPILE_ZLIB
#define LODEPNG_COMPILE_ZLIB
#endif
/*png encoder and png decoder*/
#ifndef LODEPNG_NO_COMPILE_PNG
#define LODEPNG_COMPILE_PNG
#endif
/*deflate&zlib decoder and png decoder*/
#ifndef LODEPNG_NO_COMPILE_DECODER
#define LODEPNG_COMPILE_DECODER
#endif
/*deflate&zlib encoder and png encoder*/
#ifndef LODEPNG_NO_COMPILE_ENCODER
#define LODEPNG_COMPILE_ENCODER
#endif
/*the optional built in harddisk file loading and saving functions*/
#ifndef LODEPNG_NO_COMPILE_DISK
#define LODEPNG_COMPILE_DISK
#endif
/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/
#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
#define LODEPNG_COMPILE_ANCILLARY_CHUNKS
#endif
/*ability to convert error numerical codes to English text string*/
#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT
#define LODEPNG_COMPILE_ERROR_TEXT
#endif
/*Compile the default allocators (C's free, malloc and realloc). If you disable this,
you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your
source files with custom allocators.*/
#ifndef LODEPNG_NO_COMPILE_ALLOCATORS
#define LODEPNG_COMPILE_ALLOCATORS
#endif
/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/
#ifdef __cplusplus
#ifndef LODEPNG_NO_COMPILE_CPP
#define LODEPNG_COMPILE_CPP
#endif
#endif

#ifdef LODEPNG_COMPILE_CPP
#include <vector>
#include <string>
#endif /*LODEPNG_COMPILE_CPP*/

#ifdef LODEPNG_COMPILE_PNG
/*The PNG color types (also used for raw).*/
typedef enum LodePNGColorType
{
	LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/
	LCT_RGB = 2, /*RGB: 8,16 bit*/
	LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/
	LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/
	LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/
} LodePNGColorType;

#ifdef LODEPNG_COMPILE_DECODER
/*
Converts PNG data in memory to raw pixel data.
out: Output parameter. Pointer to buffer that will contain the raw pixel data.
After decoding, its size is w * h * (bytes per pixel) bytes larger than
initially. Bytes per pixel depends on colortype and bitdepth.
Must be freed after usage with free(*out).
Note: for 16-bit per channel colors, uses big endian format like PNG does.
w: Output parameter. Pointer to width of pixel data.
h: Output parameter. Pointer to height of pixel data.
in: Memory buffer with the PNG file.
insize: size of the in buffer.
colortype: the desired color type for the raw output image. See explanation on PNG color types.
bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.
Return value: LodePNG error code (0 means no error).
*/
unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,
	const unsigned char* in, size_t insize,
	LodePNGColorType colortype, unsigned bitdepth);

/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/
unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
	const unsigned char* in, size_t insize);

/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/
unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
	const unsigned char* in, size_t insize);

#ifdef LODEPNG_COMPILE_DISK
/*
Load PNG from disk, from file with given name.
Same as the other decode functions, but instead takes a filename as input.
*/
unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
	const char* filename,
	LodePNGColorType colortype, unsigned bitdepth);

/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/
unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,
	const char* filename);

/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/
unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,
	const char* filename);
#endif /*LODEPNG_COMPILE_DISK*/
#endif /*LODEPNG_COMPILE_DECODER*/


#ifdef LODEPNG_COMPILE_ENCODER
/*
Converts raw pixel data into a PNG image in memory. The colortype and bitdepth
of the output PNG image cannot be chosen, they are automatically determined
by the colortype, bitdepth and content of the input pixel data.
Note: for 16-bit per channel colors, needs big endian format like PNG does.
out: Output parameter. Pointer to buffer that will contain the PNG image data.
Must be freed after usage with free(*out).
outsize: Output parameter. Pointer to the size in bytes of the out buffer.
image: The raw pixel data to encode. The size of this buffer should be
w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.
w: width of the raw pixel data in pixels.
h: height of the raw pixel data in pixels.
colortype: the color type of the raw input image. See explanation on PNG color types.
bitdepth: the bit depth of the raw input image. See explanation on PNG color types.
Return value: LodePNG error code (0 means no error).
*/
unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
	const unsigned char* image, unsigned w, unsigned h,
	LodePNGColorType colortype, unsigned bitdepth);

/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/
unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
	const unsigned char* image, unsigned w, unsigned h);

/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/
unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
	const unsigned char* image, unsigned w, unsigned h);

#ifdef LODEPNG_COMPILE_DISK
/*
Converts raw pixel data into a PNG file on disk.
Same as the other encode functions, but instead takes a filename as output.
NOTE: This overwrites existing files without warning!
*/
unsigned lodepng_encode_file(const char* filename,
	const unsigned char* image, unsigned w, unsigned h,
	LodePNGColorType colortype, unsigned bitdepth);

/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/
unsigned lodepng_encode32_file(const char* filename,
	const unsigned char* image, unsigned w, unsigned h);

/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/
unsigned lodepng_encode24_file(const char* filename,
	const unsigned char* image, unsigned w, unsigned h);
#endif /*LODEPNG_COMPILE_DISK*/
#endif /*LODEPNG_COMPILE_ENCODER*/


#ifdef LODEPNG_COMPILE_CPP
namespace lodepng
{
#ifdef LODEPNG_COMPILE_DECODER
	/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
	is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
	unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
		const unsigned char* in, size_t insize,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
	unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
		const std::vector<unsigned char>& in,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
#ifdef LODEPNG_COMPILE_DISK
	/*
	Converts PNG file from disk to raw pixel data in memory.
	Same as the other decode functions, but instead takes a filename as input.
	*/
	unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
		const std::string& filename,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
#endif /* LODEPNG_COMPILE_DISK */
#endif /* LODEPNG_COMPILE_DECODER */

#ifdef LODEPNG_COMPILE_ENCODER
	/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
	is that of the raw input data. The output PNG color type will be auto chosen.*/
	unsigned encode(std::vector<unsigned char>& out,
		const unsigned char* in, unsigned w, unsigned h,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
	unsigned encode(std::vector<unsigned char>& out,
		const std::vector<unsigned char>& in, unsigned w, unsigned h,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
#ifdef LODEPNG_COMPILE_DISK
	/*
	Converts 32-bit RGBA raw pixel data into a PNG file on disk.
	Same as the other encode functions, but instead takes a filename as output.
	NOTE: This overwrites existing files without warning!
	*/
	unsigned encode(const std::string& filename,
		const unsigned char* in, unsigned w, unsigned h,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
	unsigned encode(const std::string& filename,
		const std::vector<unsigned char>& in, unsigned w, unsigned h,
		LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
#endif /* LODEPNG_COMPILE_DISK */
#endif /* LODEPNG_COMPILE_ENCODER */
} /* namespace lodepng */
#endif /*LODEPNG_COMPILE_CPP*/
#endif /*LODEPNG_COMPILE_PNG*/

#ifdef LODEPNG_COMPILE_ERROR_TEXT
  /*Returns an English description of the numerical error code.*/
const char* lodepng_error_text(unsigned code);
#endif /*LODEPNG_COMPILE_ERROR_TEXT*/

#ifdef LODEPNG_COMPILE_DECODER
/*Settings for zlib decompression*/
typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
struct LodePNGDecompressSettings
{
	/* Check LodePNGDecoderSettings for more ignorable errors such as ignore_crc */
	unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/

							 /*use custom zlib decoder instead of built in one (default: null)*/
	unsigned(*custom_zlib)(unsigned char**, size_t*,
		const unsigned char*, size_t,
		const LodePNGDecompressSettings*);
	/*use custom deflate decoder instead of built in one (default: null)
	if custom_zlib is used, custom_deflate is ignored since only the built in
	zlib function will call custom_deflate*/
	unsigned(*custom_inflate)(unsigned char**, size_t*,
		const unsigned char*, size_t,
		const LodePNGDecompressSettings*);

	const void* custom_context; /*optional custom settings for custom functions*/
};

extern const LodePNGDecompressSettings lodepng_default_decompress_settings;
void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);
#endif /*LODEPNG_COMPILE_DECODER*/

#ifdef LODEPNG_COMPILE_ENCODER
/*
Settings for zlib compression. Tweaking these settings tweaks the balance
between speed and compression ratio.
*/
typedef struct LodePNGCompressSettings LodePNGCompressSettings;
struct LodePNGCompressSettings /*deflate = compress*/
{
	/*LZ77 related settings*/
	unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/
	unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/
	unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/
	unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/
	unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/
	unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/

						   /*use custom zlib encoder instead of built in one (default: null)*/
	unsigned(*custom_zlib)(unsigned char**, size_t*,
		const unsigned char*, size_t,
		const LodePNGCompressSettings*);
	/*use custom deflate encoder instead of built in one (default: null)
	if custom_zlib is used, custom_deflate is ignored since only the built in
	zlib function will call custom_deflate*/
	unsigned(*custom_deflate)(unsigned char**, size_t*,
		const unsigned char*, size_t,
		const LodePNGCompressSettings*);

	const void* custom_context; /*optional custom settings for custom functions*/
};

extern const LodePNGCompressSettings lodepng_default_compress_settings;
void lodepng_compress_settings_init(LodePNGCompressSettings* settings);
#endif /*LODEPNG_COMPILE_ENCODER*/

#ifdef LODEPNG_COMPILE_PNG
/*
Color mode of an image. Contains all information required to decode the pixel
bits to RGBA colors. This information is the same as used in the PNG file
format, and is used both for PNG and raw image data in LodePNG.
*/
typedef struct LodePNGColorMode
{
	/*header (IHDR)*/
	LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/
	unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/

						/*
						palette (PLTE and tRNS)

						Dynamically allocated with the colors of the palette, including alpha.
						When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
						lodepng_palette_clear, then for each color use lodepng_palette_add.
						If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.

						When decoding, by default you can ignore this palette, since LodePNG already
						fills the palette colors in the pixels of the raw RGBA output.

						The palette is only supported for color type 3.
						*/
	unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
	size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/

						/*
						transparent color key (tRNS)

						This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.
						For greyscale PNGs, r, g and b will all 3 be set to the same.

						When decoding, by default you can ignore this information, since LodePNG sets
						pixels with this key to transparent already in the raw RGBA output.

						The color key is only supported for color types 0 and 2.
						*/
	unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/
	unsigned key_r;       /*red/greyscale component of color key*/
	unsigned key_g;       /*green component of color key*/
	unsigned key_b;       /*blue component of color key*/
} LodePNGColorMode;

/*init, cleanup and copy functions to use with this struct*/
void lodepng_color_mode_init(LodePNGColorMode* info);
void lodepng_color_mode_cleanup(LodePNGColorMode* info);
/*return value is error code (0 means no error)*/
unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);

void lodepng_palette_clear(LodePNGColorMode* info);
/*add 1 color to the palette*/
unsigned lodepng_palette_add(LodePNGColorMode* info,
	unsigned char r, unsigned char g, unsigned char b, unsigned char a);

/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/
unsigned lodepng_get_bpp(const LodePNGColorMode* info);
/*get the amount of color channels used, based on colortype in the struct.
If a palette is used, it counts as 1 channel.*/
unsigned lodepng_get_channels(const LodePNGColorMode* info);
/*is it a greyscale type? (only colortype 0 or 4)*/
unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);
/*has it got an alpha channel? (only colortype 2 or 6)*/
unsigned lodepng_is_alpha_type(const LodePNGColorMode* info);
/*has it got a palette? (only colortype 3)*/
unsigned lodepng_is_palette_type(const LodePNGColorMode* info);
/*only returns true if there is a palette and there is a value in the palette with alpha < 255.
Loops through the palette to check this.*/
unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);
/*
Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image.
Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).
Returns false if the image can only have opaque pixels.
In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,
or if "key_defined" is true.
*/
unsigned lodepng_can_have_alpha(const LodePNGColorMode* info);
/*Returns the byte size of a raw image buffer with given width, height and color mode*/
size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);

#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
/*The information of a Time chunk in PNG.*/
typedef struct LodePNGTime
{
	unsigned year;    /*2 bytes used (0-65535)*/
	unsigned month;   /*1-12*/
	unsigned day;     /*1-31*/
	unsigned hour;    /*0-23*/
	unsigned minute;  /*0-59*/
	unsigned second;  /*0-60 (to allow for leap seconds)*/
} LodePNGTime;
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/

/*Information about the PNG image, except pixels, width and height.*/
typedef struct LodePNGInfo
{
	/*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/
	unsigned compression_method;/*compression method of the original file. Always 0.*/
	unsigned filter_method;     /*filter method of the original file*/
	unsigned interlace_method;  /*interlace method of the original file: 0=none, 1=Adam7*/
	LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/

#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
								/*
								Suggested background color chunk (bKGD)

								This uses the same color mode and bit depth as the PNG (except no alpha channel),
								with values truncated to the bit depth in the unsigned integer.

								For greyscale and palette PNGs, the value is stored in background_r. The values
								in background_g and background_b are then unused.

								So when decoding, you may get these in a different color mode than the one you requested
								for the raw pixels.

								When encoding with auto_convert, you must use the color model defined in info_png.color for
								these values. The encoder normally ignores info_png.color when auto_convert is on, but will
								use it to interpret these values (and convert copies of them to its chosen color model).

								When encoding, avoid setting this to an expensive color, such as a non-grey value
								when the image is grey, or the compression will be worse since it will be forced to
								write the PNG with a more expensive color mode (when auto_convert is on).

								The decoder does not use this background color to edit the color of pixels. This is a
								completely optional metadata feature.
								*/
	unsigned background_defined; /*is a suggested background color given?*/
	unsigned background_r;       /*red/grey/palette component of suggested background color*/
	unsigned background_g;       /*green component of suggested background color*/
	unsigned background_b;       /*blue component of suggested background color*/

								 /*
								 non-international text chunks (tEXt and zTXt)

								 The char** arrays each contain num strings. The actual messages are in
								 text_strings, while text_keys are keywords that give a short description what
								 the actual text represents, e.g. Title, Author, Description, or anything else.

								 All the string fields below including keys, names and language tags are null terminated.
								 The PNG specification uses null characters for the keys, names and tags, and forbids null
								 characters to appear in the main text which is why we can use null termination everywhere here.

								 A keyword is minimum 1 character and maximum 79 characters long. It's
								 discouraged to use a single line length longer than 79 characters for texts.

								 Don't allocate these text buffers yourself. Use the init/cleanup functions
								 correctly and use lodepng_add_text and lodepng_clear_text.
								 */
	size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/
	char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/
	char** text_strings; /*the actual text*/

						 /*
						 international text chunks (iTXt)
						 Similar to the non-international text chunks, but with additional strings
						 "langtags" and "transkeys".
						 */
	size_t itext_num; /*the amount of international texts in this PNG*/
	char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/
	char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
	char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/
	char** itext_strings; /*the actual international text - UTF-8 string*/

						  /*time chunk (tIME)*/
	unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/
	LodePNGTime time;

	/*phys chunk (pHYs)*/
	unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/
	unsigned phys_x; /*pixels per unit in x direction*/
	unsigned phys_y; /*pixels per unit in y direction*/
	unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/

						/*
						Color profile related chunks: gAMA, cHRM, sRGB, iCPP

						LodePNG does not apply any color conversions on pixels in the encoder or decoder and does not interpret these color
						profile values. It merely passes on the information. If you wish to use color profiles and convert colors, please
						use these values with a color management library.

						See the PNG, ICC and sRGB specifications for more information about the meaning of these values.
						*/

						/* gAMA chunk: optional, overridden by sRGB or iCCP if those are present. */
	unsigned gama_defined; /* Whether a gAMA chunk is present (0 = not present, 1 = present). */
	unsigned gama_gamma;   /* Gamma exponent times 100000 */

						   /* cHRM chunk: optional, overridden by sRGB or iCCP if those are present. */
	unsigned chrm_defined; /* Whether a cHRM chunk is present (0 = not present, 1 = present). */
	unsigned chrm_white_x; /* White Point x times 100000 */
	unsigned chrm_white_y; /* White Point y times 100000 */
	unsigned chrm_red_x;   /* Red x times 100000 */
	unsigned chrm_red_y;   /* Red y times 100000 */
	unsigned chrm_green_x; /* Green x times 100000 */
	unsigned chrm_green_y; /* Green y times 100000 */
	unsigned chrm_blue_x;  /* Blue x times 100000 */
	unsigned chrm_blue_y;  /* Blue y times 100000 */

						   /*
						   sRGB chunk: optional. May not appear at the same time as iCCP.
						   If gAMA is also present gAMA must contain value 45455.
						   If cHRM is also present cHRM must contain respectively 31270,32900,64000,33000,30000,60000,15000,6000.
						   */
	unsigned srgb_defined; /* Whether an sRGB chunk is present (0 = not present, 1 = present). */
	unsigned srgb_intent;  /* Rendering intent: 0=perceptual, 1=rel. colorimetric, 2=saturation, 3=abs. colorimetric */

						   /*
						   iCCP chunk: optional. May not appear at the same time as sRGB.

						   LodePNG does not parse or use the ICC profile (except its color space header field for an edge case), a
						   separate library to handle the ICC data (not included in LodePNG) format is needed to use it for color
						   management and conversions.

						   For encoding, if iCCP is present, gAMA and cHRM are recommended to be added as well with values that match the ICC
						   profile as closely as possible, if you wish to do this you should provide the correct values for gAMA and cHRM and
						   enable their '_defined' flags since LodePNG will not automatically compute them from the ICC profile.

						   For encoding, the ICC profile is required by the PNG specification to be an "RGB" profile for non-grey
						   PNG color types and a "GRAY" profile for grey PNG color types. If you disable auto_convert, you must ensure
						   the ICC profile type matches your requested color type, else the encoder gives an error. If auto_convert is
						   enabled (the default), and the ICC profile is not a good match for the pixel data, this will result in an encoder
						   error if the pixel data has non-grey pixels for a GRAY profile, or a silent less-optimal compression of the pixel
						   data if the pixels could be encoded as greyscale but the ICC profile is RGB.

						   To avoid this do not set an ICC profile in the image unless there is a good reason for it, and when doing so
						   make sure you compute it carefully to avoid the above problems.
						   */
	unsigned iccp_defined;      /* Whether an iCCP chunk is present (0 = not present, 1 = present). */
	char* iccp_name;            /* Null terminated string with profile name, 1-79 bytes */
								/*
								The ICC profile in iccp_profile_size bytes.
								Don't allocate this buffer yourself. Use the init/cleanup functions
								correctly and use lodepng_set_icc and lodepng_clear_icc.
								*/
	unsigned char* iccp_profile;
	unsigned iccp_profile_size; /* The size of iccp_profile in bytes */

								/* End of color profile related chunks */


								/*
								unknown chunks: chunks not known by LodePNG, passed on byte for byte.

								There are 3 buffers, one for each position in the PNG where unknown chunks can appear.
								Each buffer contains all unknown chunks for that position consecutively.
								The 3 positions are:
								0: between IHDR and PLTE, 1: between PLTE and IDAT, 2: between IDAT and IEND.

								For encoding, do not store critical chunks or known chunks that are enabled with a "_defined" flag
								above in here, since the encoder will blindly follow this and could then encode an invalid PNG file
								(such as one with two IHDR chunks or the disallowed combination of sRGB with iCCP). But do use
								this if you wish to store an ancillary chunk that is not supported by LodePNG (such as sPLT or hIST),
								or any non-standard PNG chunk.

								Do not allocate or traverse this data yourself. Use the chunk traversing functions declared
								later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.
								*/
	unsigned char* unknown_chunks_data[3];
	size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
} LodePNGInfo;

/*init, cleanup and copy functions to use with this struct*/
void lodepng_info_init(LodePNGInfo* info);
void lodepng_info_cleanup(LodePNGInfo* info);
/*return value is error code (0 means no error)*/
unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);

#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/
void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/

unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
	const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/

											 /*replaces if exists*/
unsigned lodepng_set_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size);
void lodepng_clear_icc(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/

										   /*
										   Converts raw buffer from one color type to another color type, based on
										   LodePNGColorMode structs to describe the input and output color type.
										   See the reference manual at the end of this header file to see which color conversions are supported.
										   return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)
										   The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel
										   of the output color type (lodepng_get_bpp).
										   For < 8 bpp images, there should not be padding bits at the end of scanlines.
										   For 16-bit per channel colors, uses big endian format like PNG does.
										   Return value is LodePNG error code
										   */
unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
	const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
	unsigned w, unsigned h);

#ifdef LODEPNG_COMPILE_DECODER
/*
Settings for the decoder. This contains settings for the PNG and the Zlib
decoder, but not the Info settings from the Info structs.
*/
typedef struct LodePNGDecoderSettings
{
	LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/

											/* Check LodePNGDecompressSettings for more ignorable errors such as ignore_adler32 */
	unsigned ignore_crc; /*ignore CRC checksums*/
	unsigned ignore_critical; /*ignore unknown critical chunks*/
	unsigned ignore_end; /*ignore issues at end of file if possible (missing IEND chunk, too large chunk, ...)*/
						 /* TODO: make a system involving warnings with levels and a strict mode instead. Other potentially recoverable
						 errors: srgb rendering intent value, size of content of ancillary chunks, more than 79 characters for some
						 strings, placement/combination rules for ancillary chunks, crc of unknown chunks, allowed characters
						 in string keys, etc... */

	unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/

#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
	unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/
							   /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/
	unsigned remember_unknown_chunks;
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
} LodePNGDecoderSettings;

void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);
#endif /*LODEPNG_COMPILE_DECODER*/

#ifdef LODEPNG_COMPILE_ENCODER
/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/
typedef enum LodePNGFilterStrategy
{
	/*every filter at zero*/
	LFS_ZERO,
	/*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/
	LFS_MINSUM,
	/*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
	on the image, this is better or worse than minsum.*/
	LFS_ENTROPY,
	/*
	Brute-force-search PNG filters by compressing each filter for each scanline.
	Experimental, very slow, and only rarely gives better compression than MINSUM.
	*/
	LFS_BRUTE_FORCE,
	/*use predefined_filters buffer: you specify the filter type for each scanline*/
	LFS_PREDEFINED
} LodePNGFilterStrategy;

/*Gives characteristics about the integer RGBA colors of the image (count, alpha channel usage, bit depth, ...),
which helps decide which color model to use for encoding.
Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.
NOTE: This is not related to the ICC color profile, search "iccp_profile" instead to find the ICC/chromacity/...
fields in this header file.*/
typedef struct LodePNGColorProfile
{
	unsigned colored; /*not greyscale*/
	unsigned key; /*image is not opaque and color key is possible instead of full alpha*/
	unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/
	unsigned short key_g;
	unsigned short key_b;
	unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/
	unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/
	unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/
	unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/
	size_t numpixels;
} LodePNGColorProfile;

void lodepng_color_profile_init(LodePNGColorProfile* profile);

/*Get a LodePNGColorProfile of the image. The profile must already have been inited.
NOTE: This is not related to the ICC color profile, search "iccp_profile" instead to find the ICC/chromacity/...
fields in this header file.*/
unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
	const unsigned char* image, unsigned w, unsigned h,
	const LodePNGColorMode* mode_in);
/*The function LodePNG uses internally to decide the PNG color with auto_convert.
Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/
unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
	const unsigned char* image, unsigned w, unsigned h,
	const LodePNGColorMode* mode_in);

/*Settings for the encoder.*/
typedef struct LodePNGEncoderSettings
{
	LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/

	unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/

						   /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than
						   8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to
						   completely follow the official PNG heuristic, filter_palette_zero must be true and
						   filter_strategy must be LFS_MINSUM*/
	unsigned filter_palette_zero;
	/*Which filter strategy to use when not using zeroes due to filter_palette_zero.
	Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/
	LodePNGFilterStrategy filter_strategy;
	/*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with
	the same length as the amount of scanlines in the image, and each value must <= 5. You
	have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero
	must be set to 0 to ensure this is also used on palette or low bitdepth images.*/
	const unsigned char* predefined_filters;

	/*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).
	If colortype is 3, PLTE is _always_ created.*/
	unsigned force_palette;
#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
	/*add LodePNG identifier and version as a text chunk, for debugging*/
	unsigned add_id;
	/*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
	unsigned text_compression;
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
} LodePNGEncoderSettings;

void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);
#endif /*LODEPNG_COMPILE_ENCODER*/


#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
/*The settings, state and information for extended encoding and decoding.*/
typedef struct LodePNGState
{
#ifdef LODEPNG_COMPILE_DECODER
	LodePNGDecoderSettings decoder; /*the decoding settings*/
#endif /*LODEPNG_COMPILE_DECODER*/
#ifdef LODEPNG_COMPILE_ENCODER
	LodePNGEncoderSettings encoder; /*the encoding settings*/
#endif /*LODEPNG_COMPILE_ENCODER*/
	LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
	LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
	unsigned error;
#ifdef LODEPNG_COMPILE_CPP
	/* For the lodepng::State subclass. */
	virtual ~LodePNGState() {}
#endif
} LodePNGState;

/*init, cleanup and copy functions to use with this struct*/
void lodepng_state_init(LodePNGState* state);
void lodepng_state_cleanup(LodePNGState* state);
void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);
#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */

#ifdef LODEPNG_COMPILE_DECODER
/*
Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and
getting much more information about the PNG image and color mode.
*/
unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
	LodePNGState* state,
	const unsigned char* in, size_t insize);

/*
Read the PNG header, but not the actual data. This returns only the information
that is in the IHDR chunk of the PNG, such as width, height and color type. The
information is placed in the info_png field of the LodePNGState.
*/
unsigned lodepng_inspect(unsigned* w, unsigned* h,
	LodePNGState* state,
	const unsigned char* in, size_t insize);
#endif /*LODEPNG_COMPILE_DECODER*/


#ifdef LODEPNG_COMPILE_ENCODER
/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/
unsigned lodepng_encode(unsigned char** out, size_t* outsize,
	const unsigned char* image, unsigned w, unsigned h,
	LodePNGState* state);
#endif /*LODEPNG_COMPILE_ENCODER*/

/*
The lodepng_chunk functions are normally not needed, except to traverse the
unknown chunks stored in the LodePNGInfo struct, or add new ones to it.
It also allows traversing the chunks of an encoded PNG file yourself.

The chunk pointer always points to the beginning of the chunk itself, that is
the first byte of the 4 length bytes.

In the PNG file format, chunks have the following format:
-4 bytes length: length of the data of the chunk in bytes (chunk itself is 12 bytes longer)
-4 bytes chunk name (ASCII a-z,A-Z only, see below)
-length bytes of data (may be 0 bytes if length was 0)
-4 bytes of CRC, computed on chunk name + data

The first chunk starts at the 8th byte of the PNG file, the entire rest of the file
exists out of concatenated chunks with the above format.

PNG standard chunk ASCII naming conventions:
-First byte: uppercase = critical, lowercase = ancillary
-Second byte: uppercase = public, lowercase = private
-Third byte: must be uppercase
-Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy
*/

/*
Gets the length of the data of the chunk. Total chunk length has 12 bytes more.
There must be at least 4 bytes to read from. If the result value is too large,
it may be corrupt data.
*/
unsigned lodepng_chunk_length(const unsigned char* chunk);

/*puts the 4-byte type in null terminated string*/
void lodepng_chunk_type(char type[5], const unsigned char* chunk);

/*check if the type is the given type*/
unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);

/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/
unsigned char lodepng_chunk_ancillary(const unsigned char* chunk);

/*0: public, 1: private (see PNG standard)*/
unsigned char lodepng_chunk_private(const unsigned char* chunk);

/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/
unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);

/*get pointer to the data of the chunk, where the input points to the header of the chunk*/
unsigned char* lodepng_chunk_data(unsigned char* chunk);
const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);

/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/
unsigned lodepng_chunk_check_crc(const unsigned char* chunk);

/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
void lodepng_chunk_generate_crc(unsigned char* chunk);

/*
Iterate to next chunks, allows iterating through all chunks of the PNG file. Expects at least 4 readable
bytes of memory in the input pointer. Will output pointer to the start of the next chunk or the end of the
file if there is no more chunk after this. Start this process at the 8th byte of the PNG file. In a non-corrupt
PNG file, the last chunk should have name "IEND".
*/
unsigned char* lodepng_chunk_next(unsigned char* chunk);
const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);

/*
Appends chunk to the data in out. The given chunk should already have its chunk header.
The out variable and outlength are updated to reflect the new reallocated buffer.
Returns error code (0 if it went ok)
*/
unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);

/*
Appends new chunk to out. The chunk to append is given by giving its length, type
and data separately. The type is a 4-letter string.
The out variable and outlength are updated to reflect the new reallocated buffer.
Returne error code (0 if it went ok)
*/
unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
	const char* type, const unsigned char* data);


/*Calculate CRC32 of buffer*/
unsigned lodepng_crc32(const unsigned char* buf, size_t len);
#endif /*LODEPNG_COMPILE_PNG*/


#ifdef LODEPNG_COMPILE_ZLIB
/*
This zlib part can be used independently to zlib compress and decompress a
buffer. It cannot be used to create gzip files however, and it only supports the
part of zlib that is required for PNG, it does not support dictionaries.
*/

#ifdef LODEPNG_COMPILE_DECODER
/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/
unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
	const unsigned char* in, size_t insize,
	const LodePNGDecompressSettings* settings);

/*
Decompresses Zlib data. Reallocates the out buffer and appends the data. The
data must be according to the zlib specification.
Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
buffer and *outsize its size in bytes. out must be freed by user after usage.
*/
unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
	const unsigned char* in, size_t insize,
	const LodePNGDecompressSettings* settings);
#endif /*LODEPNG_COMPILE_DECODER*/

#ifdef LODEPNG_COMPILE_ENCODER
/*
Compresses data with Zlib. Reallocates the out buffer and appends the data.
Zlib adds a small header and trailer around the deflate data.
The data is output in the format of the zlib specification.
Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
buffer and *outsize its size in bytes. out must be freed by user after usage.
*/
unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
	const unsigned char* in, size_t insize,
	const LodePNGCompressSettings* settings);

/*
Find length-limited Huffman code for given frequencies. This function is in the
public interface only for tests, it's used internally by lodepng_deflate.
*/
unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
	size_t numcodes, unsigned maxbitlen);

/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/
unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
	const unsigned char* in, size_t insize,
	const LodePNGCompressSettings* settings);

#endif /*LODEPNG_COMPILE_ENCODER*/
#endif /*LODEPNG_COMPILE_ZLIB*/

#ifdef LODEPNG_COMPILE_DISK
/*
Load a file from disk into buffer. The function allocates the out buffer, and
after usage you should free it.
out: output parameter, contains pointer to loaded buffer.
outsize: output parameter, size of the allocated out buffer
filename: the path to the file to load
return value: error code (0 means ok)
*/
unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);

/*
Save a file from buffer to disk. Warning, if it exists, this function overwrites
the file without warning!
buffer: the buffer to write
buffersize: size of the buffer to write
filename: the path to the file to save to
return value: error code (0 means ok)
*/
unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);
#endif /*LODEPNG_COMPILE_DISK*/

#ifdef LODEPNG_COMPILE_CPP
/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
namespace lodepng
{
#ifdef LODEPNG_COMPILE_PNG
	class State : public LodePNGState
	{
	public:
		State();
		State(const State& other);
		virtual ~State();
		State& operator=(const State& other);
	};

#ifdef LODEPNG_COMPILE_DECODER
	/* Same as other lodepng::decode, but using a State for more settings and information. */
	unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
		State& state,
		const unsigned char* in, size_t insize);
	unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
		State& state,
		const std::vector<unsigned char>& in);
#endif /*LODEPNG_COMPILE_DECODER*/

#ifdef LODEPNG_COMPILE_ENCODER
	/* Same as other lodepng::encode, but using a State for more settings and information. */
	unsigned encode(std::vector<unsigned char>& out,
		const unsigned char* in, unsigned w, unsigned h,
		State& state);
	unsigned encode(std::vector<unsigned char>& out,
		const std::vector<unsigned char>& in, unsigned w, unsigned h,
		State& state);
#endif /*LODEPNG_COMPILE_ENCODER*/

#ifdef LODEPNG_COMPILE_DISK
	/*
	Load a file from disk into an std::vector.
	return value: error code (0 means ok)
	*/
	unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);

	/*
	Save the binary data in an std::vector to a file on disk. The file is overwritten
	without warning.
	*/
	unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
#endif /* LODEPNG_COMPILE_DISK */
#endif /* LODEPNG_COMPILE_PNG */

#ifdef LODEPNG_COMPILE_ZLIB
#ifdef LODEPNG_COMPILE_DECODER
	/* Zlib-decompress an unsigned char buffer */
	unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
		const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);

	/* Zlib-decompress an std::vector */
	unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
		const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
#endif /* LODEPNG_COMPILE_DECODER */

#ifdef LODEPNG_COMPILE_ENCODER
	/* Zlib-compress an unsigned char buffer */
	unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
		const LodePNGCompressSettings& settings = lodepng_default_compress_settings);

	/* Zlib-compress an std::vector */
	unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
		const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
#endif /* LODEPNG_COMPILE_ENCODER */
#endif /* LODEPNG_COMPILE_ZLIB */
} /* namespace lodepng */
#endif /*LODEPNG_COMPILE_CPP*/

  /*
  TODO:
  [.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
  [.] check compatibility with various compilers  - done but needs to be redone for every newer version
  [X] converting color to 16-bit per channel types
  [X] support color profile chunk types (but never let them touch RGB values by default)
  [ ] support all public PNG chunk types
  [ ] make sure encoder generates no chunks with size > (2^31)-1
  [ ] partial decoding (stream processing)
  [X] let the "isFullyOpaque" function check color keys and transparent palettes too
  [X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
  [ ] don't stop decoding on errors like 69, 57, 58 (make warnings)
  [ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ...
  [ ] errors with line numbers (and version)
  [ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
  [ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
  [ ] allow user to give data (void*) to custom allocator
  */

#endif /*LODEPNG_H inclusion guard*/

  /*
  LodePNG Documentation
  ---------------------

  0. table of contents
  --------------------

  1. about
  1.1. supported features
  1.2. features not supported
  2. C and C++ version
  3. security
  4. decoding
  5. encoding
  6. color conversions
  6.1. PNG color types
  6.2. color conversions
  6.3. padding bits
  6.4. A note about 16-bits per channel and endianness
  7. error values
  8. chunks and PNG editing
  9. compiler support
  10. examples
  10.1. decoder C++ example
  10.2. decoder C example
  11. state settings reference
  12. changes
  13. contact information


  1. about
  --------

  PNG is a file format to store raster images losslessly with good compression,
  supporting different color types and alpha channel.

  LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
  Specification (Second Edition) - W3C Recommendation 10 November 2003.

  The specifications used are:

  *) Portable Network Graphics (PNG) Specification (Second Edition):
  http://www.w3.org/TR/2003/REC-PNG-20031110
  *) RFC 1950 ZLIB Compressed Data Format version 3.3:
  http://www.gzip.org/zlib/rfc-zlib.html
  *) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
  http://www.gzip.org/zlib/rfc-deflate.html

  The most recent version of LodePNG can currently be found at
  http://lodev.org/lodepng/

  LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
  extra functionality.

  LodePNG exists out of two files:
  -lodepng.h: the header file for both C and C++
  -lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage

  If you want to start using LodePNG right away without reading this doc, get the
  examples from the LodePNG website to see how to use it in code, or check the
  smaller examples in chapter 13 here.

  LodePNG is simple but only supports the basic requirements. To achieve
  simplicity, the following design choices were made: There are no dependencies
  on any external library. There are functions to decode and encode a PNG with
  a single function call, and extended versions of these functions taking a
  LodePNGState struct allowing to specify or get more information. By default
  the colors of the raw image are always RGB or RGBA, no matter what color type
  the PNG file uses. To read and write files, there are simple functions to
  convert the files to/from buffers in memory.

  This all makes LodePNG suitable for loading textures in games, demos and small
  programs, ... It's less suitable for full fledged image editors, loading PNGs
  over network (it requires all the image data to be available before decoding can
  begin), life-critical systems, ...

  1.1. supported features
  -----------------------

  The following features are supported by the decoder:

  *) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,
  or the same color type as the PNG
  *) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
  *) Adam7 interlace and deinterlace for any color type
  *) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
  *) support for alpha channels, including RGBA color model, translucent palettes and color keying
  *) zlib decompression (inflate)
  *) zlib compression (deflate)
  *) CRC32 and ADLER32 checksums
  *) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
  *) the following chunks are supported (generated/interpreted) by both encoder and decoder:
  IHDR: header information
  PLTE: color palette
  IDAT: pixel data
  IEND: the final chunk
  tRNS: transparency for palettized images
  tEXt: textual information
  zTXt: compressed textual information
  iTXt: international textual information
  bKGD: suggested background color
  pHYs: physical dimensions
  tIME: modification time

  1.2. features not supported
  ---------------------------

  The following features are _not_ supported:

  *) some features needed to make a conformant PNG-Editor might be still missing.
  *) partial loading/stream processing. All data must be available and is processed in one call.
  *) The following public chunks are not supported but treated as unknown chunks by LodePNG
  cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
  Some of these are not supported on purpose: LodePNG wants to provide the RGB values
  stored in the pixels, not values modified by system dependent gamma or color models.


  2. C and C++ version
  --------------------

  The C version uses buffers allocated with alloc that you need to free()
  yourself. You need to use init and cleanup functions for each struct whenever
  using a struct from the C version to avoid exploits and memory leaks.

  The C++ version has extra functions with std::vectors in the interface and the
  lodepng::State class which is a LodePNGState with constructor and destructor.

  These files work without modification for both C and C++ compilers because all
  the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers
  ignore it, and the C code is made to compile both with strict ISO C90 and C++.

  To use the C++ version, you need to rename the source file to lodepng.cpp
  (instead of lodepng.c), and compile it with a C++ compiler.

  To use the C version, you need to rename the source file to lodepng.c (instead
  of lodepng.cpp), and compile it with a C compiler.


  3. Security
  -----------

  Even if carefully designed, it's always possible that LodePNG contains possible
  exploits. If you discover one, please let me know, and it will be fixed.

  When using LodePNG, care has to be taken with the C version of LodePNG, as well
  as the C-style structs when working with C++. The following conventions are used
  for all C-style structs:

  -if a struct has a corresponding init function, always call the init function when making a new one
  -if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
  -if a struct has a corresponding copy function, use the copy function instead of "=".
  The destination must also be inited already.


  4. Decoding
  -----------

  Decoding converts a PNG compressed image to a raw pixel buffer.

  Most documentation on using the decoder is at its declarations in the header
  above. For C, simple decoding can be done with functions such as
  lodepng_decode32, and more advanced decoding can be done with the struct
  LodePNGState and lodepng_decode. For C++, all decoding can be done with the
  various lodepng::decode functions, and lodepng::State can be used for advanced
  features.

  When using the LodePNGState, it uses the following fields for decoding:
  *) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here
  *) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get
  *) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use

  LodePNGInfo info_png
  --------------------

  After decoding, this contains extra information of the PNG image, except the actual
  pixels, width and height because these are already gotten directly from the decoder
  functions.

  It contains for example the original color type of the PNG image, text comments,
  suggested background color, etc... More details about the LodePNGInfo struct are
  at its declaration documentation.

  LodePNGColorMode info_raw
  -------------------------

  When decoding, here you can specify which color type you want
  the resulting raw image to be. If this is different from the colortype of the
  PNG, then the decoder will automatically convert the result. This conversion
  always works, except if you want it to convert a color PNG to greyscale or to
  a palette with missing colors.

  By default, 32-bit color is used for the result.

  LodePNGDecoderSettings decoder
  ------------------------------

  The settings can be used to ignore the errors created by invalid CRC and Adler32
  chunks, and to disable the decoding of tEXt chunks.

  There's also a setting color_convert, true by default. If false, no conversion
  is done, the resulting data will be as it was in the PNG (after decompression)
  and you'll have to puzzle the colors of the pixels together yourself using the
  color type information in the LodePNGInfo.


  5. Encoding
  -----------

  Encoding converts a raw pixel buffer to a PNG compressed image.

  Most documentation on using the encoder is at its declarations in the header
  above. For C, simple encoding can be done with functions such as
  lodepng_encode32, and more advanced decoding can be done with the struct
  LodePNGState and lodepng_encode. For C++, all encoding can be done with the
  various lodepng::encode functions, and lodepng::State can be used for advanced
  features.

  Like the decoder, the encoder can also give errors. However it gives less errors
  since the encoder input is trusted, the decoder input (a PNG image that could
  be forged by anyone) is not trusted.

  When using the LodePNGState, it uses the following fields for encoding:
  *) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.
  *) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has
  *) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use

  LodePNGInfo info_png
  --------------------

  When encoding, you use this the opposite way as when decoding: for encoding,
  you fill in the values you want the PNG to have before encoding. By default it's
  not needed to specify a color type for the PNG since it's automatically chosen,
  but it's possible to choose it yourself given the right settings.

  The encoder will not always exactly match the LodePNGInfo struct you give,
  it tries as close as possible. Some things are ignored by the encoder. The
  encoder uses, for example, the following settings from it when applicable:
  colortype and bitdepth, text chunks, time chunk, the color key, the palette, the
  background color, the interlace method, unknown chunks, ...

  When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.
  If the palette contains any colors for which the alpha channel is not 255 (so
  there are translucent colors in the palette), it'll add a tRNS chunk.

  LodePNGColorMode info_raw
  -------------------------

  You specify the color type of the raw image that you give to the input here,
  including a possible transparent color key and palette you happen to be using in
  your raw image data.

  By default, 32-bit color is assumed, meaning your input has to be in RGBA
  format with 4 bytes (unsigned chars) per pixel.

  LodePNGEncoderSettings encoder
  ------------------------------

  The following settings are supported (some are in sub-structs):
  *) auto_convert: when this option is enabled, the encoder will
  automatically choose the smallest possible color mode (including color key) that
  can encode the colors of all pixels without information loss.
  *) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,
  2 = dynamic huffman tree (best compression). Should be 2 for proper
  compression.
  *) use_lz77: whether or not to use LZ77 for compressed block types. Should be
  true for proper compression.
  *) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value
  2048 by default, but can be set to 32768 for better, but slow, compression.
  *) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE
  chunk if force_palette is true. This can used as suggested palette to convert
  to by viewers that don't support more than 256 colors (if those still exist)
  *) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
  *) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.
  zTXt chunks use zlib compression on the text. This gives a smaller result on
  large texts but a larger result on small texts (such as a single program name).
  It's all tEXt or all zTXt though, there's no separate setting per text yet.


  6. color conversions
  --------------------

  An important thing to note about LodePNG, is that the color type of the PNG, and
  the color type of the raw image, are completely independent. By default, when
  you decode a PNG, you get the result as a raw image in the color type you want,
  no matter whether the PNG was encoded with a palette, greyscale or RGBA color.
  And if you encode an image, by default LodePNG will automatically choose the PNG
  color type that gives good compression based on the values of colors and amount
  of colors in the image. It can be configured to let you control it instead as
  well, though.

  To be able to do this, LodePNG does conversions from one color mode to another.
  It can convert from almost any color type to any other color type, except the
  following conversions: RGB to greyscale is not supported, and converting to a
  palette when the palette doesn't have a required color is not supported. This is
  not supported on purpose: this is information loss which requires a color
  reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey
  is easy, but there are multiple ways if you want to give some channels more
  weight).

  By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB
  color, no matter what color type the PNG has. And by default when encoding,
  LodePNG automatically picks the best color model for the output PNG, and expects
  the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control
  the color format of the images yourself, you can skip this chapter.

  6.1. PNG color types
  --------------------

  A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
  as well as palettized color modes. After the zlib decompression and unfiltering
  in the PNG image is done, the raw pixel data will have that color type and thus
  a certain amount of bits per pixel. If you want the output raw image after
  decoding to have another color type, a conversion is done by LodePNG.

  The PNG specification gives the following color types:

  0: greyscale, bit depths 1, 2, 4, 8, 16
  2: RGB, bit depths 8 and 16
  3: palette, bit depths 1, 2, 4 and 8
  4: greyscale with alpha, bit depths 8 and 16
  6: RGBA, bit depths 8 and 16

  Bit depth is the amount of bits per pixel per color channel. So the total amount
  of bits per pixel is: amount of channels * bitdepth.

  6.2. color conversions
  ----------------------

  As explained in the sections about the encoder and decoder, you can specify
  color types and bit depths in info_png and info_raw to change the default
  behaviour.

  If, when decoding, you want the raw image to be something else than the default,
  you need to set the color type and bit depth you want in the LodePNGColorMode,
  or the parameters colortype and bitdepth of the simple decoding function.

  If, when encoding, you use another color type than the default in the raw input
  image, you need to specify its color type and bit depth in the LodePNGColorMode
  of the raw image, or use the parameters colortype and bitdepth of the simple
  encoding function.

  If, when encoding, you don't want LodePNG to choose the output PNG color type
  but control it yourself, you need to set auto_convert in the encoder settings
  to false, and specify the color type you want in the LodePNGInfo of the
  encoder (including palette: it can generate a palette if auto_convert is true,
  otherwise not).

  If the input and output color type differ (whether user chosen or auto chosen),
  LodePNG will do a color conversion, which follows the rules below, and may
  sometimes result in an error.

  To avoid some confusion:
  -the decoder converts from PNG to raw image
  -the encoder converts from raw image to PNG
  -the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image
  -the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG
  -when encoding, the color type in LodePNGInfo is ignored if auto_convert
  is enabled, it is automatically generated instead
  -when decoding, the color type in LodePNGInfo is set by the decoder to that of the original
  PNG image, but it can be ignored since the raw image has the color type you requested instead
  -if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion
  between the color types is done if the color types are supported. If it is not
  supported, an error is returned. If the types are the same, no conversion is done.
  -even though some conversions aren't supported, LodePNG supports loading PNGs from any
  colortype and saving PNGs to any colortype, sometimes it just requires preparing
  the raw image correctly before encoding.
  -both encoder and decoder use the same color converter.

  Non supported color conversions:
  -color to greyscale: no error is thrown, but the result will look ugly because
  only the red channel is taken
  -anything to palette when that palette does not have that color in it: in this
  case an error is thrown

  Supported color conversions:
  -anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
  -any grey or grey+alpha, to grey or grey+alpha
  -anything to a palette, as long as the palette has the requested colors in it
  -removing alpha channel
  -higher to smaller bitdepth, and vice versa

  If you want no color conversion to be done (e.g. for speed or control):
  -In the encoder, you can make it save a PNG with any color type by giving the
  raw color mode and LodePNGInfo the same color mode, and setting auto_convert to
  false.
  -In the decoder, you can make it store the pixel data in the same color type
  as the PNG has, by setting the color_convert setting to false. Settings in
  info_raw are then ignored.

  The function lodepng_convert does the color conversion. It is available in the
  interface but normally isn't needed since the encoder and decoder already call
  it.

  6.3. padding bits
  -----------------

  In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
  have a bit amount that isn't a multiple of 8, then padding bits are used so that each
  scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.
  The raw input image you give to the encoder, and the raw output image you get from the decoder
  will NOT have these padding bits, e.g. in the case of a 1-bit image with a width
  of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
  not the first bit of a new byte.

  6.4. A note about 16-bits per channel and endianness
  ----------------------------------------------------

  LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like
  for any other color format. The 16-bit values are stored in big endian (most
  significant byte first) in these arrays. This is the opposite order of the
  little endian used by x86 CPU's.

  LodePNG always uses big endian because the PNG file format does so internally.
  Conversions to other formats than PNG uses internally are not supported by
  LodePNG on purpose, there are myriads of formats, including endianness of 16-bit
  colors, the order in which you store R, G, B and A, and so on. Supporting and
  converting to/from all that is outside the scope of LodePNG.

  This may mean that, depending on your use case, you may want to convert the big
  endian output of LodePNG to little endian with a for loop. This is certainly not
  always needed, many applications and libraries support big endian 16-bit colors
  anyway, but it means you cannot simply cast the unsigned char* buffer to an
  unsigned short* buffer on x86 CPUs.


  7. error values
  ---------------

  All functions in LodePNG that return an error code, return 0 if everything went
  OK, or a non-zero code if there was an error.

  The meaning of the LodePNG error values can be retrieved with the function
  lodepng_error_text: given the numerical error code, it returns a description
  of the error in English as a string.

  Check the implementation of lodepng_error_text to see the meaning of each code.


  8. chunks and PNG editing
  -------------------------

  If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
  editor that should follow the rules about handling of unknown chunks, or if your
  program is able to read other types of chunks than the ones handled by LodePNG,
  then that's possible with the chunk functions of LodePNG.

  A PNG chunk has the following layout:

  4 bytes length
  4 bytes type name
  length bytes data
  4 bytes CRC

  8.1. iterating through chunks
  -----------------------------

  If you have a buffer containing the PNG image data, then the first chunk (the
  IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
  signature of the PNG and are not part of a chunk. But if you start at byte 8
  then you have a chunk, and can check the following things of it.

  NOTE: none of these functions check for memory buffer boundaries. To avoid
  exploits, always make sure the buffer contains all the data of the chunks.
  When using lodepng_chunk_next, make sure the returned value is within the
  allocated memory.

  unsigned lodepng_chunk_length(const unsigned char* chunk):

  Get the length of the chunk's data. The total chunk length is this length + 12.

  void lodepng_chunk_type(char type[5], const unsigned char* chunk):
  unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):

  Get the type of the chunk or compare if it's a certain type

  unsigned char lodepng_chunk_critical(const unsigned char* chunk):
  unsigned char lodepng_chunk_private(const unsigned char* chunk):
  unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):

  Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
  Check if the chunk is private (public chunks are part of the standard, private ones not).
  Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
  chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
  program doesn't handle that type of unknown chunk.

  unsigned char* lodepng_chunk_data(unsigned char* chunk):
  const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):

  Get a pointer to the start of the data of the chunk.

  unsigned lodepng_chunk_check_crc(const unsigned char* chunk):
  void lodepng_chunk_generate_crc(unsigned char* chunk):

  Check if the crc is correct or generate a correct one.

  unsigned char* lodepng_chunk_next(unsigned char* chunk):
  const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):

  Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
  functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
  data available in the buffer to be able to go to the next chunk.

  unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
  unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
  const char* type, const unsigned char* data):

  These functions are used to create new chunks that are appended to the data in *out that has
  length *outlength. The append function appends an existing chunk to the new data. The create
  function creates a new chunk with the given parameters and appends it. Type is the 4-letter
  name of the chunk.

  8.2. chunks in info_png
  -----------------------

  The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3
  buffers (each with size) to contain 3 types of unknown chunks:
  the ones that come before the PLTE chunk, the ones that come between the PLTE
  and the IDAT chunks, and the ones that come after the IDAT chunks.
  It's necessary to make the distionction between these 3 cases because the PNG
  standard forces to keep the ordering of unknown chunks compared to the critical
  chunks, but does not force any other ordering rules.

  info_png.unknown_chunks_data[0] is the chunks before PLTE
  info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT
  info_png.unknown_chunks_data[2] is the chunks after IDAT

  The chunks in these 3 buffers can be iterated through and read by using the same
  way described in the previous subchapter.

  When using the decoder to decode a PNG, you can make it store all unknown chunks
  if you set the option settings.remember_unknown_chunks to 1. By default, this
  option is off (0).

  The encoder will always encode unknown chunks that are stored in the info_png.
  If you need it to add a particular chunk that isn't known by LodePNG, you can
  use lodepng_chunk_append or lodepng_chunk_create to the chunk data in
  info_png.unknown_chunks_data[x].

  Chunks that are known by LodePNG should not be added in that way. E.g. to make
  LodePNG add a bKGD chunk, set background_defined to true and add the correct
  parameters there instead.


  9. compiler support
  -------------------

  No libraries other than the current standard C library are needed to compile
  LodePNG. For the C++ version, only the standard C++ library is needed on top.
  Add the files lodepng.c(pp) and lodepng.h to your project, include
  lodepng.h where needed, and your program can read/write PNG files.

  It is compatible with C90 and up, and C++03 and up.

  If performance is important, use optimization when compiling! For both the
  encoder and decoder, this makes a large difference.

  Make sure that LodePNG is compiled with the same compiler of the same version
  and with the same settings as the rest of the program, or the interfaces with
  std::vectors and std::strings in C++ can be incompatible.

  CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.

  *) gcc and g++

  LodePNG is developed in gcc so this compiler is natively supported. It gives no
  warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
  version 4.7.1 on Linux, 32-bit and 64-bit.

  *) Clang

  Fully supported and warning-free.

  *) Mingw

  The Mingw compiler (a port of gcc for Windows) should be fully supported by
  LodePNG.

  *) Visual Studio and Visual C++ Express Edition

  LodePNG should be warning-free with warning level W4. Two warnings were disabled
  with pragmas though: warning 4244 about implicit conversions, and warning 4996
  where it wants to use a non-standard function fopen_s instead of the standard C
  fopen.

  Visual Studio may want "stdafx.h" files to be included in each source file and
  give an error "unexpected end of file while looking for precompiled header".
  This is not standard C++ and will not be added to the stock LodePNG. You can
  disable it for lodepng.cpp only by right clicking it, Properties, C/C++,
  Precompiled Headers, and set it to Not Using Precompiled Headers there.

  NOTE: Modern versions of VS should be fully supported, but old versions, e.g.
  VS6, are not guaranteed to work.

  *) Compilers on Macintosh

  LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for
  C and C++.

  *) Other Compilers

  If you encounter problems on any compilers, feel free to let me know and I may
  try to fix it if the compiler is modern and standards complient.


  10. examples
  ------------

  This decoder example shows the most basic usage of LodePNG. More complex
  examples can be found on the LodePNG website.

  10.1. decoder C++ example
  -------------------------

  #include "lodepng.h"
  #include <iostream>

  int main(int argc, char *argv[])
  {
  const char* filename = argc > 1 ? argv[1] : "test.png";

  //load and decode
  std::vector<unsigned char> image;
  unsigned width, height;
  unsigned error = lodepng::decode(image, width, height, filename);

  //if there's an error, display it
  if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;

  //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
  }

  10.2. decoder C example
  -----------------------

  #include "lodepng.h"

  int main(int argc, char *argv[])
  {
  unsigned error;
  unsigned char* image;
  size_t width, height;
  const char* filename = argc > 1 ? argv[1] : "test.png";

  error = lodepng_decode32_file(&image, &width, &height, filename);

  if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error));

  / * use image here * /

  free(image);
  return 0;
  }

  11. state settings reference
  ----------------------------

  A quick reference of some settings to set on the LodePNGState

  For decoding:

  state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums
  state.decoder.zlibsettings.custom_...: use custom inflate function
  state.decoder.ignore_crc: ignore CRC checksums
  state.decoder.ignore_critical: ignore unknown critical chunks
  state.decoder.ignore_end: ignore missing IEND chunk. May fail if this corruption causes other errors
  state.decoder.color_convert: convert internal PNG color to chosen one
  state.decoder.read_text_chunks: whether to read in text metadata chunks
  state.decoder.remember_unknown_chunks: whether to read in unknown chunks
  state.info_raw.colortype: desired color type for decoded image
  state.info_raw.bitdepth: desired bit depth for decoded image
  state.info_raw....: more color settings, see struct LodePNGColorMode
  state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo

  For encoding:

  state.encoder.zlibsettings.btype: disable compression by setting it to 0
  state.encoder.zlibsettings.use_lz77: use LZ77 in compression
  state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize
  state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match
  state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching
  state.encoder.zlibsettings.lazymatching: try one more LZ77 matching
  state.encoder.zlibsettings.custom_...: use custom deflate function
  state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png
  state.encoder.filter_palette_zero: PNG filter strategy for palette
  state.encoder.filter_strategy: PNG filter strategy to encode with
  state.encoder.force_palette: add palette even if not encoding to one
  state.encoder.add_id: add LodePNG identifier and version as a text chunk
  state.encoder.text_compression: use compressed text chunks for metadata
  state.info_raw.colortype: color type of raw input image you provide
  state.info_raw.bitdepth: bit depth of raw input image you provide
  state.info_raw: more color settings, see struct LodePNGColorMode
  state.info_png.color.colortype: desired color type if auto_convert is false
  state.info_png.color.bitdepth: desired bit depth if auto_convert is false
  state.info_png.color....: more color settings, see struct LodePNGColorMode
  state.info_png....: more PNG related settings, see struct LodePNGInfo


  12. changes
  -----------

  The version number of LodePNG is the date of the change given in the format
  yyyymmdd.

  Some changes aren't backwards compatible. Those are indicated with a (!)
  symbol.

  *) 19 aug 2018 (!): fixed color mode bKGD is encoded with and made it use palette
  index in case of palette.
  *) 10 aug 2018 (!): added support for gAMA, cHRM, sRGB and iCCP chunks. This
  change is backwards compatible unless you relied on unknown_chunks for those.
  *) 11 jun 2018: less restrictive check for pixel size integer overflow
  *) 14 jan 2018: allow optionally ignoring a few more recoverable errors
  *) 17 sep 2017: fix memory leak for some encoder input error cases
  *) 27 nov 2016: grey+alpha auto color model detection bugfix
  *) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort).
  *) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within
  the limits of pure C90).
  *) 08 dec 2015: Made load_file function return error if file can't be opened.
  *) 24 okt 2015: Bugfix with decoding to palette output.
  *) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.
  *) 23 aug 2014: Reduced needless memory usage of decoder.
  *) 28 jun 2014: Removed fix_png setting, always support palette OOB for
  simplicity. Made ColorProfile public.
  *) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.
  *) 22 dec 2013: Power of two windowsize required for optimization.
  *) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
  *) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
  *) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
  prefix for the custom allocators and made it possible with a new #define to
  use custom ones in your project without needing to change lodepng's code.
  *) 28 jan 2013: Bugfix with color key.
  *) 27 okt 2012: Tweaks in text chunk keyword length error handling.
  *) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
  (no palette). Better deflate tree encoding. New compression tweak settings.
  Faster color conversions while decoding. Some internal cleanups.
  *) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
  *) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
  and made it work with function pointers instead.
  *) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
  and free functions and toggle #defines from compiler flags. Small fixes.
  *) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
  *) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
  redundant C++ codec classes. Reduced amount of structs. Everything changed,
  but it is cleaner now imho and functionality remains the same. Also fixed
  several bugs and shrunk the implementation code. Made new samples.
  *) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
  PNG color model and bit depth, based on the amount and type of colors of the
  raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
  *) 9 okt 2011: simpler hash chain implementation for the encoder.
  *) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.
  *) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.
  A bug with the PNG filtertype heuristic was fixed, so that it chooses much
  better ones (it's quite significant). A setting to do an experimental, slow,
  brute force search for PNG filter types is added.
  *) 17 aug 2011 (!): changed some C zlib related function names.
  *) 16 aug 2011: made the code less wide (max 120 characters per line).
  *) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
  *) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
  *) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman
  to optimize long sequences of zeros.
  *) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and
  LodePNG_InfoColor_canHaveAlpha functions for convenience.
  *) 7 nov 2010: added LodePNG_error_text function to get error code description.
  *) 30 okt 2010: made decoding slightly faster
  *) 26 okt 2010: (!) changed some C function and struct names (more consistent).
  Reorganized the documentation and the declaration order in the header.
  *) 08 aug 2010: only changed some comments and external samples.
  *) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.
  *) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.
  *) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
  read by ignoring the problem but windows apps couldn't.
  *) 06 jun 2008: added more error checks for out of memory cases.
  *) 26 apr 2008: added a few more checks here and there to ensure more safety.
  *) 06 mar 2008: crash with encoding of strings fixed
  *) 02 feb 2008: support for international text chunks added (iTXt)
  *) 23 jan 2008: small cleanups, and #defines to divide code in sections
  *) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
  *) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
  *) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
  Also various fixes, such as in the deflate and the padding bits code.
  *) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
  filtering code of encoder.
  *) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
  C++ wrapper around this provides an interface almost identical to before.
  Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
  are together in these files but it works both for C and C++ compilers.
  *) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
  *) 30 aug 2007: bug fixed which makes this Borland C++ compatible
  *) 09 aug 2007: some VS2005 warnings removed again
  *) 21 jul 2007: deflate code placed in new namespace separate from zlib code
  *) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
  *) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
  invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
  *) 02 jun 2007: made the encoder add a tag with version by default
  *) 27 may 2007: zlib and png code separated (but still in the same file),
  simple encoder/decoder functions added for more simple usage cases
  *) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
  moved some examples from here to lodepng_examples.cpp
  *) 12 may 2007: palette decoding bug fixed
  *) 24 apr 2007: changed the license from BSD to the zlib license
  *) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
  *) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
  palettized PNG images. Plus little interface change with palette and texts.
  *) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
  Fixed a bug where the end code of a block had length 0 in the Huffman tree.
  *) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
  and supported by the encoder, resulting in smaller PNGs at the output.
  *) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
  *) 24 jan 2007: gave encoder an error interface. Added color conversion from any
  greyscale type to 8-bit greyscale with or without alpha.
  *) 21 jan 2007: (!) Totally changed the interface. It allows more color types
  to convert to and is more uniform. See the manual for how it works now.
  *) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
  encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
  at last made the decoder give errors for incorrect Adler32 or Crc.
  *) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
  *) 29 dec 2006: Added support for encoding images without alpha channel, and
  cleaned out code as well as making certain parts faster.
  *) 28 dec 2006: Added "Settings" to the encoder.
  *) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
  Removed some code duplication in the decoder. Fixed little bug in an example.
  *) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
  Fixed a bug of the decoder with 16-bit per color.
  *) 15 okt 2006: Changed documentation structure
  *) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
  given image buffer, however for now it's not compressed.
  *) 08 sep 2006: (!) Changed to interface with a Decoder class
  *) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
  way. Renamed decodePNG to decodePNGGeneric.
  *) 29 jul 2006: (!) Changed the interface: image info is now returned as a
  struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
  *) 28 jul 2006: Cleaned the code and added new error checks.
  Corrected terminology "deflate" into "inflate".
  *) 23 jun 2006: Added SDL example in the documentation in the header, this
  example allows easy debugging by displaying the PNG and its transparency.
  *) 22 jun 2006: (!) Changed way to obtain error value. Added
  loadFile function for convenience. Made decodePNG32 faster.
  *) 21 jun 2006: (!) Changed type of info vector to unsigned.
  Changed position of palette in info vector. Fixed an important bug that
  happened on PNGs with an uncompressed block.
  *) 16 jun 2006: Internally changed unsigned into unsigned where
  needed, and performed some optimizations.
  *) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
  in LodePNG namespace. Changed the order of the parameters. Rewrote the
  documentation in the header. Renamed files to lodepng.cpp and lodepng.h
  *) 22 apr 2006: Optimized and improved some code
  *) 07 sep 2005: (!) Changed to std::vector interface
  *) 12 aug 2005: Initial release (C++, decoder only)


  13. contact information
  -----------------------

  Feel free to contact me with suggestions, problems, comments, ... concerning
  LodePNG. If you encounter a PNG image that doesn't work properly with this
  decoder, feel free to send it and I'll use it to find and fix the problem.

  My email address is (puzzle the account and domain together with an @ symbol):
  Domain: gmail dot com.
  Account: lode dot vandevenne.


  Copyright (c) 2005-2018 Lode Vandevenne
  */


================================================
FILE: PinBox/PinBox/include/yuv_rgb.h
================================================
// Copyright 2016 Adrien Descamps
// Distributed under BSD 3-Clause License

// Provide optimized functions to convert images from 8bits yuv420 to rgb24 format

// There are a few slightly different variations of the YCbCr color space with different parameters that 
// change the conversion matrix.
// The three most common YCbCr color space, defined by BT.601, BT.709 and JPEG standard are implemented here.
// See the respective standards for details
// The matrix values used are derived from http://www.equasys.de/colorconversion.html

// YUV420 is stored as three separate channels, with U and V (Cb and Cr) subsampled by a 2 factor
// For conversion from yuv to rgb, no interpolation is done, and the same UV value are used for 4 rgb pixels. This 
// is suboptimal for image quality, but by far the fastest method.

// For all methods, width and height should be even, if not, the last row/column of the result image won't be affected.
// For sse methods, if the width if not divisable by 32, the last (width%32) pixels of each line won't be affected.

#include <stdint.h>

typedef enum
{
	YCBCR_JPEG,
	YCBCR_601,
	YCBCR_709
} YCbCrType;

#ifdef __cplusplus
extern "C" {
#endif

// yuv to rgb, standard c implementation
void yuv420_rgb24_std(
	uint32_t width, uint32_t height, 
	const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, 
	uint8_t *rgb, uint32_t rgb_stride, 
	YCbCrType yuv_type);

// yuv to rgb, sse implementation
// pointers must be 16 byte aligned, and strides must be divisable by 16
void yuv420_rgb24_sse(
	uint32_t width, uint32_t height, 
	const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, 
	uint8_t *rgb, uint32_t rgb_stride, 
	YCbCrType yuv_type);

// yuv to rgb, sse implementation
// pointers do not need to be 16 byte aligned
void yuv420_rgb24_sseu(
	uint32_t width, uint32_t height, 
	const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, 
	uint8_t *rgb, uint32_t rgb_stride, 
	YCbCrType yuv_type);



// rgb to yuv, standard c implementation
void rgb24_yuv420_std(
	uint32_t width, uint32_t height, 
	const uint8_t *rgb, uint32_t rgb_stride, 
	uint8_t *y, uint8_t *u, uint8_t *v, uint32_t y_stride, uint32_t uv_stride, 
	YCbCrType yuv_type);

// rgb to yuv, sse implementation
// pointers must be 16 byte aligned, and strides must be divisible by 16
void rgb24_yuv420_sse(
	uint32_t width, uint32_t height, 
	const uint8_t *rgb, uint32_t rgb_stride, 
	uint8_t *y, uint8_t *u, uint8_t *v, uint32_t y_stride, uint32_t uv_stride, 
	YCbCrType yuv_type);

// rgb to yuv, sse implementation
// pointers do not need to be 16 byte aligned
void rgb24_yuv420_sseu(
	uint32_t width, uint32_t height, 
	const uint8_t *rgb, uint32_t rgb_stride, 
	uint8_t *y, uint8_t *u, uint8_t *v, uint32_t y_stride, uint32_t uv_stride, 
	YCbCrType yuv_type);

#ifdef __cplusplus
}
#endif


================================================
FILE: PinBox/PinBox/source/ConfigManager.cpp
================================================
#include "ConfigManager.h"
#define CONFIG_FILE_NAME "pinbox/pinbox.cfg"

static ConfigManager* ref;

ConfigManager* ConfigManager::Get()
{
	if (ref == nullptr) ref = new ConfigManager();
	return ref;
}

ConfigManager::ConfigManager()
{
}


bool ConfigManager::shouldCreateNewConfigFile()
{
	if (!config_read_file(&_config, CONFIG_FILE_NAME)) {
		printf("> Config file was not found.\n");
		return true;
	}
	config_setting_t *root, *setting;
	root = config_root_setting(&_config);
	int version = 0;
	if (!config_lookup_int(&_config, "version", &version)) {
		printf("> Config do not have version.\n");
		return true;
	}
	if (version < FORCE_OVERRIDE_VERSION) {
		printf("> Config file was outdate.\n");
		return true;
	}
	return false;
}

void ConfigManager::createNewConfigFile()
{
	config_setting_t *root, *setting;
	config_destroy(&_config);
	config_init(&_config);
	root = config_root_setting(&_config);

	// server config group
	setting = config_setting_add(root, "servers", CONFIG_TYPE_LIST);
	setting = config_setting_add(root, "last_using_server", CONFIG_TYPE_INT);
	config_setting_set_int(setting, -1);

	// video config
	setting = config_setting_add(root, "video_bit_rate", CONFIG_TYPE_INT);
	config_setting_set_int(setting, 120000);
	setting = config_setting_add(root, "video_gop", CONFIG_TYPE_INT);
	config_setting_set_int(setting, 18);
	setting = config_setting_add(root, "video_max_b_frames", CONFIG_TYPE_INT);
	config_setting_set_int(setting, 2);

	// audio
	setting = config_setting_add(root, "audio_bit_rate", CONFIG_TYPE_INT);
	config_setting_set_int(setting, 48000);

	// mode
	setting = config_setting_add(root, "wait_for_sync", CONFIG_TYPE_BOOL);
	config_setting_set_bool(setting, true);

	setting = config_setting_add(root, "version", CONFIG_TYPE_INT);
	config_setting_set_int(setting, FORCE_OVERRIDE_VERSION);

	config_set_options(&_config,
		(CONFIG_OPTION_SEMICOLON_SEPARATORS
			| CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS
			| CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE));
	config_write_file(&_config, CONFIG_FILE_NAME);

	// default values
	videoBitRate = 120000;
	videoGOP = 18;
	videoMaxBFrames = 2;
	audioBitRate = 48000;
	waitForSync = true;
	lastUsingServer = -1;
}

void ConfigManager::loadConfigFile()
{
	config_setting_t *root, *setting;
	root = config_root_setting(&_config);
	setting = config_lookup(&_config, "servers");
	if (setting != NULL)
	{
		printf("> Load server profiles\n");
		int count = config_setting_length(setting), i = 0;
		for(i = 0; i < count; ++i)
		{
			config_setting_t* serverCfg = config_setting_get_elem(setting, i);
			ServerConfig server{};
			const char* ip, * port, *name;
			if(!(config_setting_lookup_string(serverCfg, "ip", &ip)
				&& config_setting_lookup_string(serverCfg, "port", &port)
				&& config_setting_lookup_string(serverCfg, "name", &name)))
			{
				continue;
			}
			server.name = std::string(name);
			server.ip = std::string(ip);
			server.port = std::string(port);
			servers.push_back(server);
		}
	}
	if (!config_lookup_int(&_config, "last_using_server", &lastUsingServer)) lastUsingServer = -1;

	// video
	if (!config_lookup_int(&_config, "video_bit_rate", &videoBitRate)) videoBitRate = 120000;
	if (!config_lookup_int(&_config, "video_gop", &videoGOP)) videoGOP = 18;
	if (!config_lookup_int(&_config, "video_max_b_frames", &videoMaxBFrames)) videoMaxBFrames = 2;

	// audio
	if (!config_lookup_int(&_config, "audio_bit_rate", &audioBitRate)) audioBitRate = 48000;

	// mode
	int waitForReceived = 0;
	if (!config_lookup_bool(&_config, "wait_for_sync", &waitForReceived)) {
		waitForSync = true;
	}
	else waitForSync = waitForReceived;
}


void ConfigManager::InitConfig()
{
	config_init(&_config);
	config_set_options(&_config,
		(CONFIG_OPTION_SEMICOLON_SEPARATORS
			| CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS
			| CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE));
	printf("----------------------\nInitialize Config\n----------------------\n");
	if(shouldCreateNewConfigFile())
	{
		printf("> Create new config file\n");
		createNewConfigFile();
	}else
	{
		printf("> Load config file\n");
		loadConfigFile();
	}
}

void ConfigManager::Save()
{
	config_setting_t *root, *setting, *element;
	root = config_root_setting(&_config);

	// reset server list
	setting = config_lookup(&_config, "servers");
	if (setting != NULL) {
		int profileCount = config_setting_length(setting);
		while (profileCount >= 0)
		{
			int ret = config_setting_remove_elem(setting, 0);
			if (ret != CONFIG_TRUE)
			{
				printf("> Failed to detele profile at: %d\n", profileCount);
			}
			--profileCount;
		}
	}
	for (auto& i : servers)
	{
		config_setting_t* server = config_setting_add(setting, NULL, CONFIG_TYPE_GROUP);
		if(server != nullptr)
		{
			printf("> Profile: %s %s:%s.\n", i.name.c_str(), i.ip.c_str(), i.port.c_str());
			element = config_setting_add(server, "ip", CONFIG_TYPE_STRING);
			config_setting_set_string(element, i.ip.c_str());
			element = config_setting_add(server, "port", CONFIG_TYPE_STRING);
			config_setting_set_string(element, i.port.c_str());
			element = config_setting_add(server, "name", CONFIG_TYPE_STRING);
			config_setting_set_string(element, i.name.c_str());
		}
	}
	setting = config_setting_get_member(root, "last_using_server");
	if (!setting) setting = config_setting_add(root, "last_using_server", CONFIG_TYPE_INT);
	config_setting_set_int(setting, lastUsingServer);

	printf("> Write video config.\n");
	// video
	setting = config_setting_get_member(root, "video_bit_rate");
	if (!setting) setting = config_setting_add(root, "video_bit_rate", CONFIG_TYPE_INT);
	config_setting_set_int(setting, videoBitRate);

	setting = config_setting_get_member(root, "video_gop");
	if (!setting) setting = config_setting_add(root, "video_gop", CONFIG_TYPE_INT);
	config_setting_set_int(setting, videoGOP);

	setting = config_setting_get_member(root, "video_max_b_frames");
	if (!setting) setting = config_setting_add(root, "video_max_b_frames", CONFIG_TYPE_INT);
	config_setting_set_int(setting, videoMaxBFrames);

	printf("> Write audio config.\n");
	// audio
	setting = config_setting_get_member(root, "audio_bit_rate");
	if (!setting) setting = config_setting_add(root, "audio_bit_rate", CONFIG_TYPE_INT);
	config_setting_set_int(setting, audioBitRate);

	// mode
	setting = config_setting_get_member(root, "wait_for_sync");
	if (!setting) setting = config_setting_add(root, "wait_for_sync", CONFIG_TYPE_BOOL);
	config_setting_set_bool(setting, waitForSync);

	setting = config_setting_get_member(root, "version");
	if (!setting) setting = config_setting_add(root, "version", CONFIG_TYPE_INT);
	config_setting_set_int(setting, FORCE_OVERRIDE_VERSION);

	// write file
	int ret = config_write_file(&_config, CONFIG_FILE_NAME);
	printf("> Save result: %d\n", ret);
}

void ConfigManager::Destroy()
{
	config_destroy(&_config);
}


================================================
FILE: PinBox/PinBox/source/Mutex.cpp
================================================
#include "Mutex.h"



Mutex::Mutex()
{
	_isLocked = false;
	LightLock_Init(&_handler);
}


Mutex::~Mutex()
{
	if(_isLocked) LightLock_Unlock(&_handler);
}

void Mutex::Lock()
{
	LightLock_Lock(&_handler);
}

void Mutex::TryLock()
{
	if(!LightLock_TryLock(&_handler)) _isLocked = true;
}

void Mutex::Unlock()
{
	LightLock_Unlock(&_handler);
	_isLocked = false;
}


================================================
FILE: PinBox/PinBox/source/PPAudio.cpp
================================================
#include "PPAudio.h"
#include <cstring>
#include <cstdio>

#define SAMPLERATE 22050
#define SAMPLESPERBUF 1152
#define BYTESPERSAMPLE 4
/* Channel to play audio on */
#define CHANNEL 0x00

//---------------------------------------------------------------------
static PPAudio* mInstance = nullptr;
PPAudio* PPAudio::Get()
{
	if (mInstance == nullptr)
	{
		mInstance = new PPAudio();
	}
	return mInstance;
}

void PPAudio::AudioInit()
{
	if (_initialized) return;

	ndspInit();

	// buf temporary
	u8 * temp = (u8 *)linearAlloc(SAMPLESPERBUF * BYTESPERSAMPLE * MAX_AUDIO_BUF);
	// fail to alloc tmp memory
	if(temp == nullptr)
	{
		ndspExit();
		return;
	}

	memset(temp, 0, SAMPLESPERBUF * BYTESPERSAMPLE * MAX_AUDIO_BUF);
	DSP_FlushDataCache(temp, SAMPLESPERBUF * BYTESPERSAMPLE * MAX_AUDIO_BUF);

	ndspChnWaveBufClear(CHANNEL);
	ndspChnReset(CHANNEL);
	ndspSetOutputMode(NDSP_OUTPUT_STEREO);
	ndspChnSetInterp(CHANNEL, NDSP_INTERP_POLYPHASE);
	ndspChnSetRate(CHANNEL, SAMPLERATE);
	ndspChnSetFormat(CHANNEL, NDSP_FORMAT_STEREO_PCM16);

	// set mix
	float mix[12];
	memset(mix, 0, sizeof(mix));
	mix[0] = 1.0;
	mix[1] = 1.0;
	ndspChnSetMix(0, mix);

	memset(_waveBuf, 0, sizeof(_waveBuf));
	_waveBuf[0].data_vaddr = temp;
	_waveBuf[0].nsamples = SAMPLESPERBUF;
	_waveBuf[0].status = NDSP_WBUF_DONE;
	_waveBuf[1].data_vaddr = temp + (SAMPLESPERBUF * BYTESPERSAMPLE);
	_waveBuf[1].nsamples = SAMPLESPERBUF;
	_waveBuf[1].status = NDSP_WBUF_DONE;

	_initialized = true;
}

void PPAudio::AudioExit()
{
	if (!_initialized) return;
	_initialized = false;

	ndspChnWaveBufClear(CHANNEL);
	ndspExit();

	linearFree(_waveBuf[0].data_vaddr);
	_waveBuf[0].data_vaddr = NULL;
}

void PPAudio::FillBuffer(u8* buffer, u32 size)
{
	if (!_initialized) return;

	size_t nextBuf = _nextBuf;
	while (_waveBuf[nextBuf].status != NDSP_WBUF_DONE)
	{
		svcSleepThread(25* 1000ULL);
	}

	memcpy(_waveBuf[nextBuf].data_pcm16, buffer, SAMPLESPERBUF * BYTESPERSAMPLE);
	DSP_FlushDataCache(_waveBuf[nextBuf].data_pcm16, SAMPLESPERBUF * BYTESPERSAMPLE);

	_waveBuf[nextBuf].offset = 0;
	_waveBuf[nextBuf].status = NDSP_WBUF_QUEUED;
	ndspChnWaveBufAdd(CHANNEL, &_waveBuf[nextBuf]);

	_nextBuf = (nextBuf + 1) % MAX_AUDIO_BUF;
}

================================================
FILE: PinBox/PinBox/source/PPDecoder.cpp
================================================
#include "PPDecoder.h"
#include "PPAudio.h"

static u8* pRGBBuffer = nullptr;

volatile bool initialized = false;


PPDecoder::PPDecoder()
{
}

PPDecoder::~PPDecoder()
{
	
}

void PPDecoder::initDecoder()
{
	if (initialized) return;
	initialized = true;

	av_log_set_level(AV_LOG_QUIET);
	av_register_all();
	//-----------------------------------------------------------------
	// init video encoder
	//-----------------------------------------------------------------
	const AVCodec* videoCodec = avcodec_find_decoder(AV_CODEC_ID_MPEG4);
	pVideoContext = avcodec_alloc_context3(videoCodec);
	pVideoContext->width = 400;
	pVideoContext->height = 240;
	pVideoContext->pix_fmt = AV_PIX_FMT_YUV420P;
	pVideoContext->thread_count = 4;
	pVideoContext->thread_type = FF_THREAD_FRAME;
	// Open
	int ret = avcodec_open2(pVideoContext, videoCodec, NULL);
	if (ret < 0)
	{
		printf("failed to open Video decoder: %d\n", ret);
	}
	pVideoPacket = av_packet_alloc();
	pVideoFrame = av_frame_alloc();
	initY2RImageConverter();

	//-----------------------------------------------------------------
	// init audio encoder
	//-----------------------------------------------------------------
	const AVCodec *audioCodec = avcodec_find_decoder(AV_CODEC_ID_MP2);
	if(!audioCodec)
	{
		printf("[Audio] Codec not found!\n");
	}
	pAudioContext = avcodec_alloc_context3(audioCodec);
	pAudioContext->bit_rate = 64000;
	pAudioContext->sample_fmt = AV_SAMPLE_FMT_S16;
	pAudioContext->request_sample_fmt = AV_SAMPLE_FMT_S16;
	pAudioContext->request_channel_layout = AV_CH_LAYOUT_STEREO;
	pAudioContext->sample_rate = 22050;
	pAudioContext->channels = av_get_channel_layout_nb_channels(AV_CH_LAYOUT_STEREO);;
	pAudioContext->channel_layout = AV_CH_LAYOUT_STEREO;
	ret = avcodec_open2(pAudioContext, audioCodec, NULL);
	if(ret < 0)
	{
		printf("[Audio] Failed to open context: %d\n", ret);
	}
	pAudioPacket = av_packet_alloc();
	pAudioFrame = av_frame_alloc();
}

void PPDecoder::releaseDecoder()
{
	if (!initialized) return;
	initialized = false;
	printf("Release audio/video decoder.\n");
	// free video
	avcodec_free_context(&pVideoContext);
	av_frame_free(&pVideoFrame);
	av_packet_free(&pVideoPacket);
	// free audio
	avcodec_free_context(&pAudioContext);
	av_frame_free(&pAudioFrame);
	av_packet_free(&pAudioPacket);
	//---------------------------------------------------
	bool is_busy = 0;
	Y2RU_StopConversion();
	Y2RU_IsBusyConversion(&is_busy);
	y2rExit();

	linearFree(pRGBBuffer);
}

u8* PPDecoder::appendVideoBuffer(u8* buffer, u32 size)
{
	if (!initialized) return nullptr;
	if (size <= 0) return nullptr;
	pVideoPacket->data = buffer;
	pVideoPacket->size = size;
	return decodeVideoStream();
}

void PPDecoder::initY2RImageConverter()
{
	//--------------------------------------------------------------------------------------
	// NOTE: code borrow from 3DS video player
	// ref: https://github.com/Lectem/3Damnesic/blob/master/source/color_converter.c
	//--------------------------------------------------------------------------------------
	pDecodeState = new DecodeState();
	Result res = 0;
	res = y2rInit();
	if (res != 0) printf("Error when init Y2R\n");
	res = Y2RU_StopConversion();
	if (res != 0) printf("Error on Y2RU_StopConversion\n");
	bool is_busy = 0;
	int tries = 0;
	do
	{
		svcSleepThread(25 * 1000ull);
		res = Y2RU_StopConversion();
		if (res != 0) printf("Error on Y2RU_StopConversion\n");
		res = Y2RU_IsBusyConversion(&is_busy);
		if (res != 0) printf("Error on Y2RU_IsBusyConversion\n");
		tries += 1;
	} while (is_busy && tries < 100);
	pDecodeState->y2rParams.input_format = INPUT_YUV420_INDIV_8;
	pDecodeState->y2rParams.output_format = OUTPUT_RGB_24;
	pDecodeState->y2rParams.rotation = ROTATION_NONE;
	pDecodeState->y2rParams.block_alignment = BLOCK_8_BY_8;
	pDecodeState->y2rParams.input_line_width = 400;
	pDecodeState->y2rParams.input_lines = 240;
	if (pDecodeState->y2rParams.input_lines % 8) {
		pDecodeState->y2rParams.input_lines += 8 - (pDecodeState->y2rParams.input_lines % 8);
	}
	pDecodeState->y2rParams.standard_coefficient = COEFFICIENT_ITU_R_BT_601;
	pDecodeState->y2rParams.unused = 0;
	pDecodeState->y2rParams.alpha = 0xFF;
	res = Y2RU_SetConversionParams(&pDecodeState->y2rParams);
	if (res != 0) printf("Error on Y2RU_SetConversionParams\n");
	res = Y2RU_SetTransferEndInterrupt(true);
	if (res != 0) printf("Error on Y2RU_SetTransferEndInterrupt\n");
	pDecodeState->endEvent = 0;
	res = Y2RU_GetTransferEndEvent(&pDecodeState->endEvent);
	if (res != 0) printf("Error on Y2RU_GetTransferEndEvent\n");
}

void PPDecoder::convertColor()
{
	Result res;
	const s16 img_w = pDecodeState->y2rParams.input_line_width;
	const s16 img_h = pDecodeState->y2rParams.input_lines;
	const u32 img_size = img_w * img_h;
	const u32 img_w_UV = img_w >> 1;
	size_t src_Y_size = 0;
	size_t src_UV_size = 0;

	switch (pDecodeState->y2rParams.input_format)
	{
	case INPUT_YUV422_INDIV_8:
		src_Y_size = img_size;
		src_UV_size = img_size / 2;
		break;
	case INPUT_YUV420_INDIV_8:
		src_Y_size = img_size;
		src_UV_size = img_size / 4;
		break;
	case INPUT_YUV422_INDIV_16:
		src_Y_size = img_size * 2;
		src_UV_size = img_size / 2 * 2;
		break;
	case INPUT_YUV420_INDIV_16:
		src_Y_size = img_size * 2;
		src_UV_size = img_size / 4 * 2;
		break;
	case INPUT_YUV422_BATCH:
		src_Y_size = img_size * 2;
		src_UV_size = img_size * 2;
		break;
	}

	u8 *src_Y = (u8*)pVideoFrame->data[0];
	u8 *src_U = (u8*)pVideoFrame->data[1];
	u8 *src_V = (u8*)pVideoFrame->data[2];
	const s16 src_Y_padding = pVideoFrame->linesize[0] - img_w;
	const s16 src_UV_padding = pVideoFrame->linesize[1] - img_w_UV;

	Y2RU_StopConversion();

	res = Y2RU_SetSendingY(src_Y, src_Y_size, img_w, src_Y_padding);
	if (res != 0) 
		printf("Error on Y2RU_SetSendingY\n");
	res = Y2RU_SetSendingU(src_U, src_UV_size, img_w_UV, src_UV_padding);
	if (res != 0) 
		printf("Error on Y2RU_SetSendingU\n");
	res = Y2RU_SetSendingV(src_V, src_UV_size, img_w_UV, src_UV_padding);
	if (res != 0) 
		printf("Error on Y2RU_SetSendingV\n");

	const u16 pixSize = 3;
	size_t rgb_size = (512*256) * pixSize;
	s16 transfer_unit = 8;
	s16 gap = (512 - img_w) * transfer_unit * pixSize;
	//TODO: try this with get frame buffer
	res = Y2RU_SetReceiving(pRGBBuffer, rgb_size, img_w * transfer_unit * pixSize, gap);
	if (res != 0) 
		printf("Error on Y2RU_SetReceiving\n");
	res = Y2RU_StartConversion();
	if (res != 0) 
		printf("Error on Y2RU_StartConversion\n");
	res = svcWaitSynchronization(pDecodeState->endEvent, 1000000000ull);
	if (res != 0) 
		printf("Error on svcWaitSynchronization\n");
}

u8* PPDecoder::decodeVideoStream()
{
	int ret = 0;
	ret = avcodec_send_packet(pVideoContext, pVideoPacket);
	if (ret < 0) return nullptr;
	ret = avcodec_receive_frame(pVideoContext, pVideoFrame);
	if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) return nullptr;
	if (ret < 0) return nullptr;

	//----------------------------------------------
	// decode video frame
	//----------------------------------------------
	iFrameWidth = pVideoFrame->width;
	iFrameHeight =pVideoFrame->height;
	if (pRGBBuffer == nullptr) pRGBBuffer = (u8*)linearMemAlign(3 * 512 * 256, 0x80);
	convertColor();

	av_packet_unref(pVideoPacket);

	return pRGBBuffer;
}

void PPDecoder::decodeAudioStream(u8* buffer, u32 size)
{

	if (!initialized) return;
	if (size == 0) return;

	int ret = 0;
	av_packet_unref(pVideoPacket);
	pAudioPacket->data = buffer;
	pAudioPacket->size = size;

	ret = avcodec_send_packet(pAudioContext, pAudioPacket);
	if (ret < 0) {
		printf("[Audio] Error submitting the packet to the decoder: %d\n", ret);
	}
	else {
		while (ret >= 0) {
			ret = avcodec_receive_frame(pAudioContext, pAudioFrame);
			if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) return;
			if (ret < 0)
			{
				printf("[Audio] get frame failed: %d\n", ret);
				return;
			}
			PPAudio::Get()->FillBuffer(pAudioFrame->extended_data[0], pAudioFrame->linesize[0]);
		}
	}
	
}


================================================
FILE: PinBox/PinBox/source/PPGraphics.cpp
================================================
#include "PPGraphics.h"
#include "vshader_shbin.h"
#include <cstdio>
#include <cstdlib>
#include <3ds/gpu/enums.h>
#include <3ds/gfx.h>
#include <c3d/base.h>
#include <c3d/renderqueue.h>
#include <3ds/gpu/gx.h>
#include <3ds/allocator/linear.h>
#include <3ds/gpu/shaderProgram.h>
#include <citro3d.h>
#include <3ds/font.h>
#include <3ds/util/utf.h>
#include "lodepng.h"

#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR)))
//---------------------------------------------------------------------
// Graphics Instance
//---------------------------------------------------------------------
static PPGraphics* mInstance = nullptr;

static Vector2 mCircleVertex12[12];

#define TEX_MIN_SIZE 32
//Grabbed from: http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
unsigned int next_pow2(unsigned int v)
{
	v--;
	v |= v >> 1;
	v |= v >> 2;
	v |= v >> 4;
	v |= v >> 8;
	v |= v >> 16;
	v++;
	return v >= TEX_MIN_SIZE ? v : TEX_MIN_SIZE;
}

PPGraphics* PPGraphics::Get()
{
	if(mInstance == nullptr)
	{
		mInstance = new PPGraphics();
	}
	return mInstance;
}

void PPGraphics::GraphicsInit()
{
	// shared data
	int arrSize = IM_ARRAYSIZE(mCircleVertex12);
	for(int i = 0; i < arrSize; ++i)
	{
		const float a = ((float)i * 2 * M_PI) / (float)IM_ARRAYSIZE(mCircleVertex12);
		mCircleVertex12[i] = Vector2{ cosf(a), sinf(a) };
	}

	// init
	gfxInitDefault();
	C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);

	//---------------------------------------------------------------------
	// Setup render target
	//---------------------------------------------------------------------
	mRenderTargetTop = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
	C3D_RenderTargetClear(mRenderTargetTop, C3D_CLEAR_ALL, CLEAR_COLOR, 0);
	C3D_RenderTargetSetOutput(mRenderTargetTop, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS);
	
	mRenderTargetBtm = C3D_RenderTargetCreate(240, 320, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
	C3D_RenderTargetClear(mRenderTargetBtm, C3D_CLEAR_ALL, CLEAR_COLOR, 0);
	C3D_RenderTargetSetOutput(mRenderTargetBtm, GFX_BOTTOM, GFX_LEFT, DISPLAY_TRANSFER_FLAGS);

	//---------------------------------------------------------------------
	// Setup top screen sprite ( for video render )
	//---------------------------------------------------------------------
	mTopScreenSprite = new Sprite();

	//---------------------------------------------------------------------
	// Init memory pool
	// @Code borrow from libsf2d
	//---------------------------------------------------------------------
	memoryPoolAddr = linearAlloc(0x80000);
	memoryPoolSize = 0x80000;
	//---------------------------------------------------------------------
	// Load the vertex shader, create a shader program and bind it
	//---------------------------------------------------------------------
	mVShaderDVLB = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_size);
	shaderProgramInit(&mShaderProgram);
	shaderProgramSetVsh(&mShaderProgram, &mVShaderDVLB->DVLE[0]);
	C3D_BindProgram(&mShaderProgram);

	mULocProjection = shaderInstanceGetUniformLocation(mShaderProgram.vertexShader, "projection");

	Mtx_OrthoTilt(&mProjectionTop, 0.0, 400, 240, 0.0, 0.0, 1.0, true);
	Mtx_OrthoTilt(&mProjectionBtm, 0.0, 320, 240, 0.0, 0.0, 1.0, true);

	C3D_CullFace(GPU_CULL_NONE);
	C3D_DepthTest(true, GPU_GEQUAL, GPU_WRITE_ALL);
	

	//---------------------------------------------------------------------
	// Init top screen sprite
	//---------------------------------------------------------------------
	mTopScreenSprite->initialized = true;
	C3D_TexInit(&mTopScreenSprite->tex, 512, 256, GPU_RGB8);
	C3D_TexSetFilter(&mTopScreenSprite->tex, GPU_LINEAR, GPU_NEAREST);
	C3D_TexSetWrap(&mTopScreenSprite->tex, GPU_CLAMP_TO_BORDER, GPU_CLAMP_TO_BORDER);
	//---------------------------------------------------------------------
	// System font init
	//---------------------------------------------------------------------
	Result res = fontEnsureMapped();

	int i;
	TGLP_s* glyphInfo = fontGetGlyphInfo();
	mGlyphSheets = malloc(sizeof(C3D_Tex)*glyphInfo->nSheets);
	for (i = 0; i < glyphInfo->nSheets; i++)
	{
		C3D_Tex* tex = &mGlyphSheets[i];
		tex->data = fontGetGlyphSheetTex(i);
		tex->fmt = glyphInfo->sheetFmt;
		tex->size = glyphInfo->sheetSize;
		tex->width = glyphInfo->sheetWidth;
		tex->height = glyphInfo->sheetHeight;
		tex->param = GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR)
			| GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE);
		tex->border = 0;
		tex->lodParam = 0;
	}
}

void PPGraphics::GraphicExit()
{
	// clean up cache
	for(auto it = mTexCached.begin(); it != mTexCached.end(); ++it) {
		if(it->second->initialized) C3D_TexDelete(&it->second->tex);
		delete it->second;
	}
	mTexCached.clear();
	// delete top
	if(mTopScreenSprite->initialized)
		C3D_TexDelete(&mTopScreenSprite->tex);
	delete mTopScreenSprite;
	linearFree(memoryPoolAddr);
	free(mGlyphSheets);
	shaderProgramFree(&mShaderProgram);
	DVLB_Free(mVShaderDVLB);
	C3D_Fini();
	gfxExit();
}

Sprite* PPGraphics::AddCacheImageAsset(const char* name, std::string key)
{
	auto iter = mTexCached.find(key);
	if (iter != mTexCached.end()) {
		return iter->second;
	}

	// get image path
	char path[100];
	sprintf(path, "romfs:/assets/%s", name);
	return AddCacheImage(path, key);
}

Sprite* PPGraphics::AddCacheImage(const char* path, std::string key)
{
	auto iter = mTexCached.find(key);
	if (iter != mTexCached.end()) {
		return iter->second;
	}

	unsigned char* image;
	unsigned width, height;

	int ret = lodepng_decode32_file(&image, &width, &height, path);
	if (ret != 0)
	{
		printf("Failed when decode asset image: %s with key: %s\n", path, key.c_str());
		return nullptr;
	}
	
	u8 *gpusrc = linearAlloc(width*height * 4);
	u8* src = image; u8 *dst = gpusrc;
	// lodepng outputs big endian rgba so we need to convert
	for (int i = 0; i<width*height; i++) {
		int r = *src++;
		int g = *src++;
		int b = *src++;
		int a = *src++;
		*dst++ = a;
		*dst++ = b;
		*dst++ = g;
		*dst++ = r;
	}

	Sprite* sprite = new Sprite();
	// init texture
	bool success = C3D_TexInit(&sprite->tex, next_pow2(width), next_pow2(height), GPU_RGBA8);
	if (!success)
	{
		free(sprite);
		return nullptr;
	}
	sprite->width = width;
	sprite->height = height;
	C3D_TexSetWrap(&sprite->tex, GPU_CLAMP_TO_BORDER, GPU_CLAMP_TO_BORDER);

	printf("Added sprite: %s from path: %s\n", key.c_str(), path);

	GSPGPU_FlushDataCache(gpusrc, width*height * 4);
	C3D_SyncDisplayTransfer((u32*)gpusrc, GX_BUFFER_DIM(width, height), (u32*)sprite->tex.data, GX_BUFFER_DIM(sprite->tex.width, sprite->tex.height), TEXTURE_RGBA_TRANSFER_FLAGS);

	free(image);
	linearFree(gpusrc);

	mTexCached[key] = sprite;

	return sprite;
}

Sprite* PPGraphics::AddCacheImage(u8* buf, u32 size, std::string key)
{
	auto iter = mTexCached.find(key);
	if (iter != mTexCached.end()) {
		return iter->second;
	}
	
	// load data
	unsigned char* image;
	unsigned width, height;
	int ret = lodepng_decode32(&image, &width, &height, buf, size);
	if(ret != 0)
	{
		printf("Failed when decode png image with key: %s\n", key.c_str());
		return nullptr;
	}
	
	u8 *gpusrc = linearAlloc(width*height * 4);
	u8* src = image; u8 *dst = gpusrc;
	// lodepng outputs big endian rgba so we need to convert
	for (int i = 0; i<width*height; i++) {
		int r = *src++;
		int g = *src++;
		int b = *src++;
		int a = *src++;
		*dst++ = a;
		*dst++ = b;
		*dst++ = g;
		*dst++ = r;
	}

	Sprite* sprite = new Sprite();
	// init texture
	bool success = C3D_TexInit(&sprite->tex, next_pow2(width), next_pow2(height), GPU_RGBA8);
	if(!success)
	{
		delete sprite;
		return nullptr;
	}
	sprite->width = width;
	sprite->height = height;
	C3D_TexSetWrap(&sprite->tex, GPU_CLAMP_TO_BORDER, GPU_CLAMP_TO_BORDER);

	printf("added key: %s - size: %d\n", key.c_str(), size);

	GSPGPU_FlushDataCache(gpusrc, width*height * 4);
	C3D_SyncDisplayTransfer((u32*)gpusrc, GX_BUFFER_DIM(width, height), (u32*)sprite->tex.data, GX_BUFFER_DIM(sprite->tex.width, sprite->tex.height), TEXTURE_RGBA_TRANSFER_FLAGS);

	free(image);
	linearFree(gpusrc);

	mTexCached[key] = sprite;

	return sprite;
}

Sprite* PPGraphics::GetCacheImage(std::string key)
{
	auto iter = mTexCached.find(key);
	if (iter != mTexCached.end()) {
		return iter->second;
	}
	printf("Image cache not found: %s\n", key.c_str());
	return nullptr;
}

PPGraphics::~PPGraphics()
{

}

void PPGraphics::BeginRender()
{
	resetMemoryPool();
	C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
}

void PPGraphics::RenderOn(gfxScreen_t screen)
{
	mCurrentDrawScreen = screen;
	if (screen == GFX_TOP)
	{
		C3D_FrameDrawOn(mRenderTargetTop);
		// set uniform projection
		C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, mULocProjection, &mProjectionTop);
		// draw a transparent and small dot to avoid soft lock
		// @ref : https://github.com/fincs/citro3d/issues/35
		DrawRectangle(0, 0, 1, 1, Color{ 0,0,0,255 });
	}
	else {
		C3D_FrameDrawOn(mRenderTargetBtm);
		// set uniform projection
		C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, mULocProjection, &mProjectionBtm);
		// draw a transparent and small dot to avoid soft lock
		// @ref : https://github.com/fincs/citro3d/issues/35
		DrawRectangle(0, 0, 1, 1, Color{ 0,0,0,255 });
	}
}

void PPGraphics::EndRender()
{
	C3D_FrameEnd(0);
}

void PPGraphics::UpdateTopScreenSprite(u8* data, u32 size)
{
	if (!mTopScreenSprite->initialized) return;
	memcpy(mTopScreenSprite->tex.data, data, size);
	GSPGPU_FlushDataCache(mTopScreenSprite->tex.data, size);
}

void PPGraphics::DrawTopScreenSprite()
{
	if (!mTopScreenSprite->initialized) return;

	float x = 0, y = 0, w = 400.0f, h = 240.0f;
	float ow = 512.0f, oh = 256.0f;
	float u = 1;
	float v = 1;

	VertexPosTex *vertices = (VertexPosTex*)allocMemoryPoolAligned(sizeof(VertexPosTex) * 4, 8);
	
	// set position
	vertices[0].position = (Vector3) { 0, 0, 0.5f };
	vertices[1].position = (Vector3) { 512.0f, 0, 0.5f };
	vertices[2].position = (Vector3) { 0, 256
Download .txt
gitextract_jvazmwrt/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── LICENSE
├── PinBox/
│   ├── PinBox/
│   │   ├── Makefile
│   │   ├── PinBox.rsf
│   │   ├── PinBox.vcxproj
│   │   ├── PinBox.vcxproj.filters
│   │   ├── build-cia.bat
│   │   ├── create-smdh.bat
│   │   ├── include/
│   │   │   ├── Anim.h
│   │   │   ├── Color.h
│   │   │   ├── ConfigManager.h
│   │   │   ├── HubItem.h
│   │   │   ├── Logger.h
│   │   │   ├── Mutex.h
│   │   │   ├── PPAudio.h
│   │   │   ├── PPDecoder.h
│   │   │   ├── PPGraphics.h
│   │   │   ├── PPMessage.h
│   │   │   ├── PPSession.h
│   │   │   ├── PPSessionManager.h
│   │   │   ├── PPUI.h
│   │   │   ├── constant.h
│   │   │   ├── easing.h
│   │   │   ├── lodepng.h
│   │   │   └── yuv_rgb.h
│   │   ├── source/
│   │   │   ├── ConfigManager.cpp
│   │   │   ├── Mutex.cpp
│   │   │   ├── PPAudio.cpp
│   │   │   ├── PPDecoder.cpp
│   │   │   ├── PPGraphics.cpp
│   │   │   ├── PPMessage.cpp
│   │   │   ├── PPSession.cpp
│   │   │   ├── PPSessionManager.cpp
│   │   │   ├── PPUI.cpp
│   │   │   ├── easing.cpp
│   │   │   ├── lodepng.cpp
│   │   │   ├── main.cpp
│   │   │   ├── vshader.v.pica
│   │   │   └── yuv_rgb.c
│   │   └── tools/
│   │       └── citra/
│   │           ├── README.md
│   │           └── license.txt
│   └── PinBox.sln
├── PinBoxServer/
│   ├── Check-Pinbox-Firewall-Rules.bat
│   ├── PinBoxServer/
│   │   ├── AudioStreamSession.cpp
│   │   ├── AudioStreamSession.h
│   │   ├── Check-Pinbox-Firewall-Rules.bat
│   │   ├── HubItem.h
│   │   ├── InputStreamSession.cpp
│   │   ├── InputStreamSession.h
│   │   ├── PPClientSession.cpp
│   │   ├── PPClientSession.h
│   │   ├── PPMessage.cpp
│   │   ├── PPMessage.h
│   │   ├── PPServer.cpp
│   │   ├── PPServer.h
│   │   ├── PinBoxServer.cpp
│   │   ├── PinBoxServer.vcxproj
│   │   ├── PinBoxServer.vcxproj.filters
│   │   ├── ScreenCaptureSession.cpp
│   │   ├── ScreenCaptureSession.h
│   │   ├── ServerConfig.cpp
│   │   ├── ServerConfig.h
│   │   ├── UIMainWindow.cpp
│   │   ├── UIMainWindow.h
│   │   ├── const.h
│   │   ├── hub.cfg
│   │   ├── input.cfg
│   │   ├── server.cfg
│   │   ├── stdafx.cpp
│   │   ├── stdafx.h
│   │   ├── targetver.h
│   │   └── winmain-inl.h
│   └── PinBoxServer.sln
├── PinBoxTestProject/
│   ├── PinBoxTestProject/
│   │   ├── PPDecoder.cpp
│   │   ├── PPDecoder.h
│   │   ├── PPMessage.cpp
│   │   ├── PPMessage.h
│   │   ├── PPNetwork.cpp
│   │   ├── PPNetwork.h
│   │   ├── PPSession.cpp
│   │   ├── PPSession.h
│   │   ├── PPSessionManager.cpp
│   │   ├── PPSessionManager.h
│   │   ├── PinBoxTestProject.vcxproj
│   │   ├── PinBoxTestProject.vcxproj.filters
│   │   ├── main.cpp
│   │   ├── yuv_rgb.c
│   │   └── yuv_rgb.h
│   └── PinBoxTestProject.sln
├── README.md
├── ThirdParty/
│   ├── FakeInput/
│   │   ├── LICENSE
│   │   └── src/
│   │       ├── actions/
│   │       │   ├── action.hpp
│   │       │   ├── actions.hpp
│   │       │   ├── actionsequence.cpp
│   │       │   ├── actionsequence.hpp
│   │       │   ├── commandaction.cpp
│   │       │   ├── commandaction.hpp
│   │       │   ├── keyaction.cpp
│   │       │   ├── keyaction.hpp
│   │       │   ├── mouseaction.cpp
│   │       │   ├── mouseaction.hpp
│   │       │   ├── waitaction.cpp
│   │       │   └── waitaction.hpp
│   │       ├── config.hpp
│   │       ├── config.hpp.cmake
│   │       ├── display_unix.cpp
│   │       ├── display_unix.hpp
│   │       ├── fakeinput.hpp
│   │       ├── key.hpp
│   │       ├── key_base.cpp
│   │       ├── key_base.hpp
│   │       ├── key_unix.cpp
│   │       ├── key_unix.hpp
│   │       ├── key_win.cpp
│   │       ├── key_win.hpp
│   │       ├── keyboard.cpp
│   │       ├── keyboard.hpp
│   │       ├── keyboard_unix.cpp
│   │       ├── keyboard_win.cpp
│   │       ├── mapper.hpp
│   │       ├── mapper_unix.cpp
│   │       ├── mapper_win.cpp
│   │       ├── mouse.hpp
│   │       ├── mouse_unix.cpp
│   │       ├── mouse_win.cpp
│   │       ├── system.hpp
│   │       ├── system_unix.cpp
│   │       ├── system_win.cpp
│   │       └── types.hpp
│   ├── ViGEm/
│   │   ├── Debug (dynamic)/
│   │   │   ├── ViGEmClient.exp
│   │   │   └── ViGEmClient.lib
│   │   ├── Debug (static)/
│   │   │   └── ViGEmClient.lib
│   │   ├── Include/
│   │   │   ├── ViGEmBusDriver.h
│   │   │   ├── ViGEmBusShared.h
│   │   │   ├── ViGEmClient.h
│   │   │   ├── ViGEmCommon.h
│   │   │   ├── ViGEmUtil.h
│   │   │   ├── XInputOverrides.h
│   │   │   └── XnaGuardianShared.h
│   │   ├── LICENSE
│   │   ├── Release (dynamic)/
│   │   │   ├── ViGEmClient.exp
│   │   │   └── ViGEmClient.lib
│   │   └── Release (static)/
│   │       └── ViGEmClient.lib
│   ├── ffmpeg/
│   │   ├── LICENSE.txt
│   │   ├── README.txt
│   │   ├── examples/
│   │   │   ├── Makefile
│   │   │   ├── README
│   │   │   ├── avio_dir_cmd.c
│   │   │   ├── avio_reading.c
│   │   │   ├── decode_audio.c
│   │   │   ├── decode_video.c
│   │   │   ├── demuxing_decoding.c
│   │   │   ├── encode_audio.c
│   │   │   ├── encode_video.c
│   │   │   ├── extract_mvs.c
│   │   │   ├── filter_audio.c
│   │   │   ├── filtering_audio.c
│   │   │   ├── filtering_video.c
│   │   │   ├── http_multiclient.c
│   │   │   ├── hw_decode.c
│   │   │   ├── metadata.c
│   │   │   ├── muxing.c
│   │   │   ├── qsvdec.c
│   │   │   ├── remuxing.c
│   │   │   ├── resampling_audio.c
│   │   │   ├── scaling_video.c
│   │   │   ├── transcode_aac.c
│   │   │   ├── transcoding.c
│   │   │   ├── vaapi_encode.c
│   │   │   └── vaapi_transcode.c
│   │   ├── include/
│   │   │   ├── libavcodec/
│   │   │   │   ├── ac3_parser.h
│   │   │   │   ├── adts_parser.h
│   │   │   │   ├── avcodec.h
│   │   │   │   ├── avdct.h
│   │   │   │   ├── avfft.h
│   │   │   │   ├── d3d11va.h
│   │   │   │   ├── dirac.h
│   │   │   │   ├── dv_profile.h
│   │   │   │   ├── dxva2.h
│   │   │   │   ├── jni.h
│   │   │   │   ├── mediacodec.h
│   │   │   │   ├── qsv.h
│   │   │   │   ├── vaapi.h
│   │   │   │   ├── vdpau.h
│   │   │   │   ├── version.h
│   │   │   │   ├── videotoolbox.h
│   │   │   │   ├── vorbis_parser.h
│   │   │   │   └── xvmc.h
│   │   │   ├── libavdevice/
│   │   │   │   ├── avdevice.h
│   │   │   │   └── version.h
│   │   │   ├── libavfilter/
│   │   │   │   ├── avfilter.h
│   │   │   │   ├── buffersink.h
│   │   │   │   ├── buffersrc.h
│   │   │   │   └── version.h
│   │   │   ├── libavformat/
│   │   │   │   ├── avformat.h
│   │   │   │   ├── avio.h
│   │   │   │   └── version.h
│   │   │   ├── libavutil/
│   │   │   │   ├── adler32.h
│   │   │   │   ├── aes.h
│   │   │   │   ├── aes_ctr.h
│   │   │   │   ├── attributes.h
│   │   │   │   ├── audio_fifo.h
│   │   │   │   ├── avassert.h
│   │   │   │   ├── avconfig.h
│   │   │   │   ├── avstring.h
│   │   │   │   ├── avutil.h
│   │   │   │   ├── base64.h
│   │   │   │   ├── blowfish.h
│   │   │   │   ├── bprint.h
│   │   │   │   ├── bswap.h
│   │   │   │   ├── buffer.h
│   │   │   │   ├── camellia.h
│   │   │   │   ├── cast5.h
│   │   │   │   ├── channel_layout.h
│   │   │   │   ├── common.h
│   │   │   │   ├── cpu.h
│   │   │   │   ├── crc.h
│   │   │   │   ├── des.h
│   │   │   │   ├── dict.h
│   │   │   │   ├── display.h
│   │   │   │   ├── downmix_info.h
│   │   │   │   ├── encryption_info.h
│   │   │   │   ├── error.h
│   │   │   │   ├── eval.h
│   │   │   │   ├── ffversion.h
│   │   │   │   ├── fifo.h
│   │   │   │   ├── file.h
│   │   │   │   ├── frame.h
│   │   │   │   ├── hash.h
│   │   │   │   ├── hmac.h
│   │   │   │   ├── hwcontext.h
│   │   │   │   ├── hwcontext_cuda.h
│   │   │   │   ├── hwcontext_d3d11va.h
│   │   │   │   ├── hwcontext_drm.h
│   │   │   │   ├── hwcontext_dxva2.h
│   │   │   │   ├── hwcontext_mediacodec.h
│   │   │   │   ├── hwcontext_qsv.h
│   │   │   │   ├── hwcontext_vaapi.h
│   │   │   │   ├── hwcontext_vdpau.h
│   │   │   │   ├── hwcontext_videotoolbox.h
│   │   │   │   ├── imgutils.h
│   │   │   │   ├── intfloat.h
│   │   │   │   ├── intreadwrite.h
│   │   │   │   ├── lfg.h
│   │   │   │   ├── log.h
│   │   │   │   ├── lzo.h
│   │   │   │   ├── macros.h
│   │   │   │   ├── mastering_display_metadata.h
│   │   │   │   ├── mathematics.h
│   │   │   │   ├── md5.h
│   │   │   │   ├── mem.h
│   │   │   │   ├── motion_vector.h
│   │   │   │   ├── murmur3.h
│   │   │   │   ├── opt.h
│   │   │   │   ├── parseutils.h
│   │   │   │   ├── pixdesc.h
│   │   │   │   ├── pixelutils.h
│   │   │   │   ├── pixfmt.h
│   │   │   │   ├── random_seed.h
│   │   │   │   ├── rational.h
│   │   │   │   ├── rc4.h
│   │   │   │   ├── replaygain.h
│   │   │   │   ├── ripemd.h
│   │   │   │   ├── samplefmt.h
│   │   │   │   ├── sha.h
│   │   │   │   ├── sha512.h
│   │   │   │   ├── spherical.h
│   │   │   │   ├── stereo3d.h
│   │   │   │   ├── tea.h
│   │   │   │   ├── threadmessage.h
│   │   │   │   ├── time.h
│   │   │   │   ├── timecode.h
│   │   │   │   ├── timestamp.h
│   │   │   │   ├── tree.h
│   │   │   │   ├── twofish.h
│   │   │   │   ├── version.h
│   │   │   │   └── xtea.h
│   │   │   ├── libpostproc/
│   │   │   │   ├── postprocess.h
│   │   │   │   └── version.h
│   │   │   ├── libswresample/
│   │   │   │   ├── swresample.h
│   │   │   │   └── version.h
│   │   │   └── libswscale/
│   │   │       ├── swscale.h
│   │   │       └── version.h
│   │   └── lib/
│   │       ├── avcodec-58.def
│   │       ├── avcodec.lib
│   │       ├── avdevice-58.def
│   │       ├── avdevice.lib
│   │       ├── avfilter-7.def
│   │       ├── avfilter.lib
│   │       ├── avformat-58.def
│   │       ├── avformat.lib
│   │       ├── avutil-56.def
│   │       ├── avutil.lib
│   │       ├── libavcodec.dll.a
│   │       ├── libavdevice.dll.a
│   │       ├── libavfilter.dll.a
│   │       ├── libavformat.dll.a
│   │       ├── libavutil.dll.a
│   │       ├── libpostproc.dll.a
│   │       ├── libswresample.dll.a
│   │       ├── libswscale.dll.a
│   │       ├── postproc-55.def
│   │       ├── postproc.lib
│   │       ├── swresample-3.def
│   │       ├── swresample.lib
│   │       ├── swscale-5.def
│   │       └── swscale.lib
│   ├── libopusenc/
│   │   ├── AUTHORS
│   │   ├── include/
│   │   │   └── opusenc.h
│   │   ├── src/
│   │   │   ├── arch.h
│   │   │   ├── ogg_packer.c
│   │   │   ├── ogg_packer.h
│   │   │   ├── opus_header.c
│   │   │   ├── opus_header.h
│   │   │   ├── opusenc.c
│   │   │   ├── picture.c
│   │   │   ├── picture.h
│   │   │   ├── resample.c
│   │   │   ├── resample_sse.h
│   │   │   ├── speex_resampler.h
│   │   │   └── stack_alloc.h
│   │   └── win32/
│   │       └── config.h
│   ├── loopback/
│   │   ├── cleanup.h
│   │   ├── common.h
│   │   ├── guid.cpp
│   │   ├── log.h
│   │   ├── loopback-capture.cpp
│   │   ├── loopback-capture.h
│   │   ├── main.cpp
│   │   ├── prefs.cpp
│   │   └── prefs.h
│   ├── opus-1.2.1/
│   │   ├── AUTHORS
│   │   ├── COPYING
│   │   ├── INSTALL
│   │   ├── include/
│   │   │   ├── opus.h
│   │   │   ├── opus_custom.h
│   │   │   ├── opus_defines.h
│   │   │   ├── opus_multistream.h
│   │   │   └── opus_types.h
│   │   └── src/
│   │       ├── analysis.c
│   │       ├── analysis.h
│   │       ├── mlp.c
│   │       ├── mlp.h
│   │       ├── mlp_data.c
│   │       ├── opus.c
│   │       ├── opus_compare.c
│   │       ├── opus_decoder.c
│   │       ├── opus_demo.c
│   │       ├── opus_encoder.c
│   │       ├── opus_multistream.c
│   │       ├── opus_multistream_decoder.c
│   │       ├── opus_multistream_encoder.c
│   │       ├── opus_private.h
│   │       ├── repacketizer.c
│   │       ├── repacketizer_demo.c
│   │       └── tansig_table.h
│   ├── opusfile-0.9/
│   │   ├── AUTHORS
│   │   ├── include/
│   │   │   └── opusfile.h
│   │   ├── src/
│   │   │   ├── http.c
│   │   │   ├── info.c
│   │   │   ├── internal.c
│   │   │   ├── internal.h
│   │   │   ├── opusfile.c
│   │   │   ├── stream.c
│   │   │   ├── wincerts.c
│   │   │   └── winerrno.h
│   │   └── win32/
│   │       └── VS2015/
│   │           └── Win32/
│   │               └── Release-NoHTTP/
│   │                   └── opusfile.lib
│   ├── screen_capture_lite/
│   │   └── include/
│   │       └── ScreenCapture.h
│   └── screen_capture_lite - Copy/
│       ├── LICENSE
│       ├── ScreenCapture.h
│       ├── include/
│       │   ├── SCCommon.h
│       │   ├── ScreenCapture.h
│       │   ├── ThreadManager.h
│       │   ├── ios/
│       │   │   ├── CGFrameProcessor.h
│       │   │   ├── NSMouseCapture.h
│       │   │   └── NSMouseProcessor.h
│       │   ├── linux/
│       │   │   ├── X11FrameProcessor.h
│       │   │   └── X11MouseProcessor.h
│       │   └── windows/
│       │       ├── DXFrameProcessor.h
│       │       ├── GDIFrameProcessor.h
│       │       ├── GDIHelpers.h
│       │       ├── GDIMouseProcessor.h
│       │       └── GDIWindowProcessor.h
│       └── src/
│           ├── SCCommon.cpp
│           ├── ScreenCapture.cpp
│           ├── ThreadManager.cpp
│           ├── ios/
│           │   ├── CGFrameProcessor.cpp
│           │   ├── GetMonitors.cpp
│           │   ├── GetWindows.cpp
│           │   ├── NSMouseCapture.m
│           │   ├── NSMouseProcessor.cpp
│           │   └── ThreadRunner.cpp
│           ├── linux/
│           │   ├── GetMonitors.cpp
│           │   ├── GetWindows.cpp
│           │   ├── ThreadRunner.cpp
│           │   ├── X11FrameProcessor.cpp
│           │   └── X11MouseProcessor.cpp
│           └── windows/
│               ├── DXFrameProcessor.cpp
│               ├── GDIFrameProcessor.cpp
│               ├── GDIMouseProcessor.cpp
│               ├── GDIWindowProcessor.cpp
│               ├── GetMonitors.cpp
│               ├── GetWindows.cpp
│               └── ThreadRunner.cpp
└── _config.yml
Download .txt
SYMBOL INDEX (2011 symbols across 284 files)

FILE: PinBox/PinBox/include/Anim.h
  function class (line 14) | class Anim {

FILE: PinBox/PinBox/include/Color.h
  type Color (line 16) | struct Color
  function rgb2hsv (line 73) | inline void rgb2hsv()
  function hsv2rgb (line 97) | inline void hsv2rgb()
  function luminosity (line 120) | inline float luminosity()
  function contrast (line 127) | inline float contrast(Color c)
  function level (line 132) | inline int level(Color c)
  function isDark (line 138) | inline bool isDark() { return (float)(r * 299 + g * 587 + b * 114) / 100...
  function isLight (line 139) | inline bool isLight() { return !isDark(); }
  function Color (line 140) | inline Color negate() { return RGB(255-r, 255-g, 255-b); }
  function lighten (line 141) | inline void lighten(float ratio) { WARP_HSL(l += l * ratio) }
  function darken (line 142) | inline void darken(float ratio) { WARP_HSL(l -= l * ratio) }
  function saturate (line 143) | inline void saturate(float ratio) { WARP_HSL(s += s * ratio) }
  function desaturate (line 144) | inline void desaturate(float ratio) { WARP_HSL(s -= s * ratio) }
  function Color (line 145) | inline Color grayscale() { float v = r * 0.3f + g * 0.59f + b * 0.11f; r...
  function rorate (line 146) | inline void rorate(float degrees) { WARP_HSL( h = (int)(h + degrees) % 3...
  function Color (line 147) | inline Color mix(Color mixin, float weight)

FILE: PinBox/PinBox/include/ConfigManager.h
  type ServerConfig (line 12) | struct ServerConfig {
  function class (line 18) | class ConfigManager

FILE: PinBox/PinBox/include/HubItem.h
  type HubItemType (line 5) | enum HubItemType
  function class (line 12) | class HubItem

FILE: PinBox/PinBox/include/Logger.h
  function class (line 6) | class Logger

FILE: PinBox/PinBox/include/Mutex.h
  function class (line 5) | class Mutex

FILE: PinBox/PinBox/include/PPAudio.h
  function class (line 12) | class PPAudio

FILE: PinBox/PinBox/include/PPDecoder.h
  type MemoryBuffer (line 22) | struct MemoryBuffer {
  type DecodeState (line 52) | typedef struct DecodeState{
  function class (line 57) | class PPDecoder

FILE: PinBox/PinBox/include/PPGraphics.h
  type Vector2 (line 43) | typedef struct
  type Vector3 (line 49) | typedef struct
  type VertexPosCol (line 56) | typedef struct
  type VertexPosTex (line 62) | typedef struct
  type Sprite (line 68) | typedef struct
  function class (line 79) | class PPGraphics

FILE: PinBox/PinBox/include/PPMessage.h
  function class (line 20) | class PPMessage

FILE: PinBox/PinBox/include/PPSession.h
  type PPSession_Type (line 39) | enum PPSession_Type { PPSESSION_NONE, PPSESSION_MOVIE, PPSESSION_SCREEN_...
  type QueueMessage (line 73) | typedef struct
  type ppConectState (line 83) | enum ppConectState { IDLE, CONNECTING, CONNECTED, FAIL }
  type std (line 84) | typedef std::function<void(u8* buffer, u32 size, u32 tag)> PPNetworkRece...
  type std (line 85) | typedef std::function<void(u8* data, u32 code)> PPNetworkCallback;
  function class (line 87) | class PPSession

FILE: PinBox/PinBox/include/PPSessionManager.h
  type SessionState (line 14) | enum SessionState
  type VideoFrame (line 25) | typedef struct
  type BusyState (line 31) | enum BusyState
  function class (line 38) | class PPSessionManager

FILE: PinBox/PinBox/include/PPUI.h
  type Direction (line 20) | enum Direction
  type DialogBoxOverride (line 28) | struct DialogBoxOverride {
  type WH (line 36) | struct WH {
  type std (line 41) | typedef std::function<void(float x, float y, float w, float h)> TabConte...
  type std (line 42) | typedef std::function<int()> PopupCallback;
  type std (line 43) | typedef std::function<WH()> WHCallback;
  type std (line 44) | typedef std::function<void(void* arg1, void* arg2)> ResultCallback;
  function class (line 46) | class PPUI

FILE: PinBox/PinBox/include/easing.h
  type easing_functions (line 3) | enum easing_functions

FILE: PinBox/PinBox/include/lodepng.h
  type LodePNGColorType (line 91) | typedef enum LodePNGColorType
  function namespace (line 199) | namespace lodepng
  type LodePNGDecompressSettings (line 255) | typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
  type LodePNGDecompressSettings (line 256) | struct LodePNGDecompressSettings
  type LodePNGCompressSettings (line 284) | typedef struct LodePNGCompressSettings LodePNGCompressSettings;
  type LodePNGCompressSettings (line 285) | struct LodePNGCompressSettings /*deflate = compress*/
  type LodePNGColorMode (line 319) | typedef struct LodePNGColorMode
  type LodePNGTime (line 396) | typedef struct LodePNGTime
  type LodePNGInfo (line 408) | typedef struct LodePNGInfo
  type LodePNGDecoderSettings (line 615) | typedef struct LodePNGDecoderSettings
  type LodePNGFilterStrategy (line 642) | typedef enum LodePNGFilterStrategy
  type LodePNGColorProfile (line 665) | typedef struct LodePNGColorProfile
  type LodePNGEncoderSettings (line 694) | typedef struct LodePNGEncoderSettings
  type LodePNGState (line 731) | typedef struct LodePNGState
  function namespace (line 943) | namespace lodepng

FILE: PinBox/PinBox/include/yuv_rgb.h
  type YCbCrType (line 21) | typedef enum

FILE: PinBox/PinBox/source/ConfigManager.cpp
  function ConfigManager (line 6) | ConfigManager* ConfigManager::Get()

FILE: PinBox/PinBox/source/PPAudio.cpp
  function PPAudio (line 13) | PPAudio* PPAudio::Get()

FILE: PinBox/PinBox/source/PPDecoder.cpp
  function u8 (line 92) | u8* PPDecoder::appendVideoBuffer(u8* buffer, u32 size)
  function u8 (line 213) | u8* PPDecoder::decodeVideoStream()

FILE: PinBox/PinBox/source/PPGraphics.cpp
  function next_pow2 (line 27) | unsigned int next_pow2(unsigned int v)
  function PPGraphics (line 39) | PPGraphics* PPGraphics::Get()
  function Sprite (line 151) | Sprite* PPGraphics::AddCacheImageAsset(const char* name, std::string key)
  function Sprite (line 164) | Sprite* PPGraphics::AddCacheImage(const char* path, std::string key)
  function Sprite (line 220) | Sprite* PPGraphics::AddCacheImage(u8* buf, u32 size, std::string key)
  function Sprite (line 276) | Sprite* PPGraphics::GetCacheImage(std::string key)
  function Vector2 (line 758) | Vector2 PPGraphics::GetTextSize(const char* text, float scaleX, float sc...
  function Vector3 (line 796) | Vector3 PPGraphics::GetTextSizeAutoWrap(const char* text, float scaleX, ...

FILE: PinBox/PinBox/source/PPMessage.cpp
  function u8 (line 9) | u8* PPMessage::BuildMessage(u8* contentBuffer, u32 contentSize)
  function u8 (line 34) | u8* PPMessage::BuildMessageEmpty()

FILE: PinBox/PinBox/source/PPSession.cpp
  function createNew (line 17) | void createNew(void* arg) {
  function createTest (line 20) | void createTest(void* arg) {
  type sockaddr_in (line 148) | struct sockaddr_in
  type sockaddr (line 164) | struct sockaddr

FILE: PinBox/PinBox/source/PPSessionManager.cpp
  function SessionState (line 42) | SessionState PPSessionManager::ConnectToServer(ServerConfig* config)

FILE: PinBox/PinBox/source/PPUI.cpp
  function u32 (line 77) | u32 PPUI::getKeyDown()
  function u32 (line 82) | u32 PPUI::getKeyHold()
  function u32 (line 87) | u32 PPUI::getKeyUp()
  function circlePosition (line 92) | circlePosition PPUI::getLeftCircle()
  function circlePosition (line 97) | circlePosition PPUI::getRightCircle()
  function u32 (line 102) | u32 PPUI::getSleepModeState()
  type stat (line 184) | struct stat
  function Vector2 (line 1084) | Vector2 PPUI::ScrollBox(float x, float y, float w, float h, Direction di...
  function PopupCallback (line 1438) | PopupCallback PPUI::GetPopup()

FILE: PinBox/PinBox/source/easing.cpp
  function easeInSine (line 10) | double easeInSine( double t ) {
  function easeOutSine (line 14) | double easeOutSine( double t ) {
  function easeInOutSine (line 18) | double easeInOutSine( double t ) {
  function easeInQuad (line 22) | double easeInQuad( double t ) {
  function easeOutQuad (line 26) | double easeOutQuad( double t ) {
  function easeInOutQuad (line 30) | double easeInOutQuad( double t ) {
  function easeInCubic (line 34) | double easeInCubic( double t ) {
  function easeOutCubic (line 38) | double easeOutCubic( double t ) {
  function easeInOutCubic (line 42) | double easeInOutCubic( double t ) {
  function easeInQuart (line 46) | double easeInQuart( double t ) {
  function easeOutQuart (line 51) | double easeOutQuart( double t ) {
  function easeInOutQuart (line 56) | double easeInOutQuart( double t ) {
  function easeInQuint (line 66) | double easeInQuint( double t ) {
  function easeOutQuint (line 71) | double easeOutQuint( double t ) {
  function easeInOutQuint (line 76) | double easeInOutQuint( double t ) {
  function easeInExpo (line 87) | double easeInExpo( double t ) {
  function easeOutExpo (line 91) | double easeOutExpo( double t ) {
  function easeInOutExpo (line 95) | double easeInOutExpo( double t ) {
  function easeInCirc (line 103) | double easeInCirc( double t ) {
  function easeOutCirc (line 107) | double easeOutCirc( double t ) {
  function easeInOutCirc (line 111) | double easeInOutCirc( double t ) {
  function easeInBack (line 119) | double easeInBack( double t ) {
  function easeOutBack (line 123) | double easeOutBack( double t ) {
  function easeInOutBack (line 127) | double easeInOutBack( double t ) {
  function easeInElastic (line 135) | double easeInElastic( double t ) {
  function easeOutElastic (line 140) | double easeOutElastic( double t ) {
  function easeInOutElastic (line 145) | double easeInOutElastic( double t ) {
  function easeInBounce (line 158) | double easeInBounce( double t ) {
  function easeOutBounce (line 162) | double easeOutBounce( double t ) {
  function easeInOutBounce (line 166) | double easeInOutBounce( double t ) {
  function easingFunction (line 174) | easingFunction getEasingFunction( easing_functions function )

FILE: PinBox/PinBox/source/lodepng.cpp
  function lodepng_free (line 79) | static void lodepng_free(void* ptr)
  type uivector (line 146) | struct uivector
  function uivector_cleanup (line 153) | static void uivector_cleanup(void* p)
  function uivector_reserve (line 161) | static unsigned uivector_reserve(uivector* p, size_t allocsize)
  function uivector_resize (line 178) | static unsigned uivector_resize(uivector* p, size_t size)
  function uivector_resizev (line 186) | static unsigned uivector_resizev(uivector* p, size_t size, unsigned value)
  function uivector_init (line 194) | static void uivector_init(uivector* p)
  function uivector_push_back (line 202) | static unsigned uivector_push_back(uivector* p, unsigned c)
  type ucvector (line 214) | struct ucvector
  function ucvector_reserve (line 222) | static unsigned ucvector_reserve(ucvector* p, size_t allocsize)
  function ucvector_resize (line 239) | static unsigned ucvector_resize(ucvector* p, size_t size)
  function ucvector_cleanup (line 248) | static void ucvector_cleanup(void* p)
  function ucvector_init (line 255) | static void ucvector_init(ucvector* p)
  function ucvector_init_buffer (line 265) | static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, siz...
  function ucvector_push_back (line 274) | static unsigned ucvector_push_back(ucvector* p, unsigned char c)
  function string_cleanup (line 289) | static void string_cleanup(char** out)
  function lodepng_read32bitInt (line 316) | unsigned lodepng_read32bitInt(const unsigned char* buffer)
  function lodepng_set32bitInt (line 323) | static void lodepng_set32bitInt(unsigned char* buffer, unsigned value)
  function lodepng_add32bitInt (line 333) | static void lodepng_add32bitInt(ucvector* buffer, unsigned value)
  function lodepng_filesize (line 347) | static long lodepng_filesize(const char* filename)
  function lodepng_buffer_file (line 369) | static unsigned lodepng_buffer_file(unsigned char* out, size_t size, con...
  function lodepng_load_file (line 383) | unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const c...
  function lodepng_save_file (line 396) | unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersiz...
  function addBitsToStream (line 426) | static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, uns...
  function addBitsToStreamReversed (line 432) | static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstr...
  function readBitFromStream (line 443) | static unsigned char readBitFromStream(size_t* bitpointer, const unsigne...
  function readBitsFromStream (line 450) | static unsigned readBitsFromStream(size_t* bitpointer, const unsigned ch...
  type HuffmanTree (line 505) | struct HuffmanTree
  function HuffmanTree_init (line 527) | static void HuffmanTree_init(HuffmanTree* tree)
  function HuffmanTree_cleanup (line 534) | static void HuffmanTree_cleanup(HuffmanTree* tree)
  function HuffmanTree_make2DTree (line 542) | static unsigned HuffmanTree_make2DTree(HuffmanTree* tree)
  function HuffmanTree_makeFromLengths2 (line 607) | static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)
  function HuffmanTree_makeFromLengths (line 652) | static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const uns...
  type BPMNode (line 670) | struct BPMNode
    type BPMNode (line 674) | struct BPMNode
  type BPMLists (line 679) | struct BPMLists
  function BPMNode (line 694) | static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned ind...
    type BPMNode (line 674) | struct BPMNode
  function bpmnode_sort (line 727) | static void bpmnode_sort(BPMNode* leaves, size_t num)
  function boundaryPM (line 754) | static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numprese...
  function lodepng_huffman_code_lengths (line 785) | unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned*...
  function HuffmanTree_makeFromFrequencies (line 875) | static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const...
  function HuffmanTree_getCode (line 892) | static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned in...
  function HuffmanTree_getLength (line 897) | static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned ...
  function generateFixedLitLenTree (line 904) | static unsigned generateFixedLitLenTree(HuffmanTree* tree)
  function generateFixedDistanceTree (line 923) | static unsigned generateFixedDistanceTree(HuffmanTree* tree)
  function huffmanDecodeSymbol (line 943) | static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
  function getTreeInflateFixed (line 971) | static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)
  function getTreeInflateDynamic (line 979) | static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree*...
  function inflateHuffmanBlock (line 1127) | static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* ...
  function inflateNoCompression (line 1222) | static unsigned inflateNoCompression(ucvector* out, const unsigned char*...
  function lodepng_inflatev (line 1250) | static unsigned lodepng_inflatev(ucvector* out,
  function lodepng_inflate (line 1280) | unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
  function inflate (line 1293) | static unsigned inflate(unsigned char** out, size_t* outsize,
  function addHuffmanSymbol (line 1318) | static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned ...
  function searchCodeIndex (line 1325) | static size_t searchCodeIndex(const unsigned* array, size_t array_size, ...
  function addLengthDistance (line 1340) | static void addLengthDistance(uivector* values, size_t length, size_t di...
  type Hash (line 1364) | struct Hash
  function hash_init (line 1378) | static unsigned hash_init(Hash* hash, unsigned windowsize)
  function hash_cleanup (line 1405) | static void hash_cleanup(Hash* hash)
  function getHash (line 1418) | static unsigned getHash(const unsigned char* data, size_t size, size_t pos)
  function countZeros (line 1440) | static unsigned countZeros(const unsigned char* data, size_t size, size_...
  function updateHashChain (line 1452) | static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, u...
  function encodeLZ77 (line 1472) | static unsigned encodeLZ77(uivector* out, Hash* hash,
  function deflateNoCompression (line 1651) | static unsigned deflateNoCompression(ucvector* out, const unsigned char*...
  function writeLZ77data (line 1693) | static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz7...
  function deflateDynamic (line 1722) | static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
  function deflateFixed (line 1967) | static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
  function lodepng_deflatev (line 2015) | static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in,...
  function lodepng_deflate (line 2056) | unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
  function deflate (line 2069) | static unsigned deflate(unsigned char** out, size_t* outsize,
  function update_adler32 (line 2089) | static unsigned update_adler32(unsigned adler, const unsigned char* data...
  function adler32 (line 2113) | static unsigned adler32(const unsigned char* data, unsigned len)
  function lodepng_zlib_decompress (line 2124) | unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, c...
  function zlib_decompress (line 2169) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize, co...
  function lodepng_zlib_compress (line 2186) | unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, con...
  function zlib_compress (line 2228) | static unsigned zlib_compress(unsigned char** out, size_t* outsize, cons...
  function zlib_decompress (line 2246) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize, co...
  function zlib_compress (line 2254) | static unsigned zlib_compress(unsigned char** out, size_t* outsize, cons...
  function lodepng_compress_settings_init (line 2271) | void lodepng_compress_settings_init(LodePNGCompressSettings* settings)
  function lodepng_decompress_settings_init (line 2293) | void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)
  function lodepng_crc32 (line 2357) | unsigned lodepng_crc32(const unsigned char* data, size_t length)
  function readBitFromReversedStream (line 2375) | static unsigned char readBitFromReversedStream(size_t* bitpointer, const...
  function readBitsFromReversedStream (line 2382) | static unsigned readBitsFromReversedStream(size_t* bitpointer, const uns...
  function setBitOfReversedStream0 (line 2395) | static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* b...
  function setBitOfReversedStream (line 2407) | static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bi...
  function lodepng_chunk_length (line 2419) | unsigned lodepng_chunk_length(const unsigned char* chunk)
  function lodepng_chunk_type (line 2424) | void lodepng_chunk_type(char type[5], const unsigned char* chunk)
  function lodepng_chunk_type_equals (line 2431) | unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, cons...
  function lodepng_chunk_ancillary (line 2437) | unsigned char lodepng_chunk_ancillary(const unsigned char* chunk)
  function lodepng_chunk_private (line 2442) | unsigned char lodepng_chunk_private(const unsigned char* chunk)
  function lodepng_chunk_safetocopy (line 2447) | unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)
  function lodepng_chunk_check_crc (line 2462) | unsigned lodepng_chunk_check_crc(const unsigned char* chunk)
  function lodepng_chunk_generate_crc (line 2472) | void lodepng_chunk_generate_crc(unsigned char* chunk)
  function lodepng_chunk_append (line 2491) | unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, co...
  function lodepng_chunk_create (line 2510) | unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, un...
  function checkColorValidity (line 2546) | static unsigned checkColorValidity(LodePNGColorType colortype, unsigned ...
  function getNumColorChannels (line 2560) | static unsigned getNumColorChannels(LodePNGColorType colortype)
  function lodepng_get_bpp_lct (line 2573) | static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned...
  function lodepng_color_mode_init (line 2581) | void lodepng_color_mode_init(LodePNGColorMode* info)
  function lodepng_color_mode_cleanup (line 2591) | void lodepng_color_mode_cleanup(LodePNGColorMode* info)
  function lodepng_color_mode_copy (line 2596) | unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGCo...
  function lodepng_color_mode_equal (line 2610) | static int lodepng_color_mode_equal(const LodePNGColorMode* a, const Lod...
  function LodePNGColorMode (line 2633) | static LodePNGColorMode lodepng_color_mode_make(LodePNGColorType colorty...
  function lodepng_palette_clear (line 2644) | void lodepng_palette_clear(LodePNGColorMode* info)
  function lodepng_palette_add (line 2651) | unsigned lodepng_palette_add(LodePNGColorMode* info,
  function lodepng_get_bpp (line 2673) | unsigned lodepng_get_bpp(const LodePNGColorMode* info)
  function lodepng_get_channels (line 2678) | unsigned lodepng_get_channels(const LodePNGColorMode* info)
  function lodepng_is_greyscale_type (line 2683) | unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)
  function lodepng_is_alpha_type (line 2688) | unsigned lodepng_is_alpha_type(const LodePNGColorMode* info)
  function lodepng_is_palette_type (line 2693) | unsigned lodepng_is_palette_type(const LodePNGColorMode* info)
  function lodepng_has_palette_alpha (line 2698) | unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)
  function lodepng_can_have_alpha (line 2708) | unsigned lodepng_can_have_alpha(const LodePNGColorMode* info)
  function lodepng_get_raw_size_lct (line 2715) | size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType...
  function lodepng_get_raw_size (line 2722) | size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMo...
  function lodepng_get_raw_size_idat (line 2734) | static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const Lo...
  function lodepng_mulofl (line 2744) | static int lodepng_mulofl(size_t a, size_t b, size_t* result)
  function lodepng_addofl (line 2752) | static int lodepng_addofl(size_t a, size_t b, size_t* result)
  function lodepng_pixel_overflow (line 2766) | static int lodepng_pixel_overflow(unsigned w, unsigned h,
  function LodePNGUnknownChunks_init (line 2790) | static void LodePNGUnknownChunks_init(LodePNGInfo* info)
  function LodePNGUnknownChunks_cleanup (line 2797) | static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)
  function LodePNGUnknownChunks_copy (line 2803) | static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodeP...
  function LodePNGText_init (line 2826) | static void LodePNGText_init(LodePNGInfo* info)
  function LodePNGText_cleanup (line 2833) | static void LodePNGText_cleanup(LodePNGInfo* info)
  function LodePNGText_copy (line 2845) | static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* s...
  function lodepng_clear_text (line 2858) | void lodepng_clear_text(LodePNGInfo* info)
  function lodepng_add_text (line 2863) | unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char...
  function LodePNGIText_init (line 2886) | static void LodePNGIText_init(LodePNGInfo* info)
  function LodePNGIText_cleanup (line 2895) | static void LodePNGIText_cleanup(LodePNGInfo* info)
  function LodePNGIText_copy (line 2911) | static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* ...
  function lodepng_clear_itext (line 2927) | void lodepng_clear_itext(LodePNGInfo* info)
  function lodepng_add_itext (line 2932) | unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const cha...
  function lodepng_assign_icc (line 2963) | static unsigned lodepng_assign_icc(LodePNGInfo* info, const char* name, ...
  function lodepng_set_icc (line 2976) | unsigned lodepng_set_icc(LodePNGInfo* info, const char* name, const unsi...
  function lodepng_clear_icc (line 2983) | void lodepng_clear_icc(LodePNGInfo* info)
  function lodepng_info_init (line 2992) | void lodepng_info_init(LodePNGInfo* info)
  function lodepng_info_cleanup (line 3019) | void lodepng_info_cleanup(LodePNGInfo* info)
  function lodepng_info_copy (line 3032) | unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)
  function addColorBits (line 3056) | static void addColorBits(unsigned char* out, size_t index, unsigned bits...
  type ColorTree (line 3067) | struct ColorTree
  type ColorTree (line 3075) | struct ColorTree
  function color_tree_init (line 3081) | static void color_tree_init(ColorTree* tree)
  function color_tree_cleanup (line 3088) | static void color_tree_cleanup(ColorTree* tree)
  function color_tree_get (line 3102) | static int color_tree_get(ColorTree* tree, unsigned char r, unsigned cha...
  function color_tree_has (line 3115) | static int color_tree_has(ColorTree* tree, unsigned char r, unsigned cha...
  function color_tree_add (line 3123) | static void color_tree_add(ColorTree* tree,
  function rgba8ToPixel (line 3141) | static unsigned rgba8ToPixel(unsigned char* out, size_t i,
  function rgba16ToPixel (line 3215) | static void rgba16ToPixel(unsigned char* out, size_t i,
  function getPixelColorRGBA8 (line 3256) | static void getPixelColorRGBA8(unsigned char* r, unsigned char* g,
  function getPixelColorsRGBA8 (line 3366) | static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,
  function getPixelColorRGBA16 (line 3500) | static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, un...
  function lodepng_convert (line 3534) | unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
  function lodepng_convert_rgb (line 3624) | unsigned lodepng_convert_rgb(
  function lodepng_color_profile_init (line 3692) | void lodepng_color_profile_init(LodePNGColorProfile* profile)
  function getValueRequiredBits (line 3717) | static unsigned getValueRequiredBits(unsigned char value)
  function lodepng_get_color_profile (line 3727) | unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
  function lodepng_color_profile_add (line 3943) | static unsigned lodepng_color_profile_add(LodePNGColorProfile* profile,
  function auto_choose_color_from_profile (line 3962) | static unsigned auto_choose_color_from_profile(LodePNGColorMode* mode_out,
  function lodepng_auto_choose_color (line 4034) | unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
  function paethPredictor (line 4053) | static unsigned char paethPredictor(short a, short b, short c)
  function Adam7_getpassvalues (line 4086) | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], si...
  function lodepng_inspect (line 4121) | unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
  function unfilterScanline (line 4187) | static unsigned unfilterScanline(unsigned char* recon, const unsigned ch...
  function unfilter (line 4261) | static unsigned unfilter(unsigned char* out, const unsigned char* in, un...
  function Adam7_deinterlace (line 4303) | static void Adam7_deinterlace(unsigned char* out, const unsigned char* i...
  function removePaddingBits (line 4353) | static void removePaddingBits(unsigned char* out, const unsigned char* in,
  function postProcessScanlines (line 4383) | static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
  function readChunk_PLTE (line 4433) | static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned c...
  function readChunk_tRNS (line 4457) | static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned c...
  function readChunk_bKGD (line 4493) | static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* d...
  function readChunk_tEXt (line 4531) | static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* d...
  function readChunk_zTXt (line 4574) | static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompres...
  function readChunk_iTXt (line 4623) | static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompres...
  function readChunk_tIME (line 4716) | static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* d...
  function readChunk_pHYs (line 4731) | static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* d...
  function readChunk_gAMA (line 4743) | static unsigned readChunk_gAMA(LodePNGInfo* info, const unsigned char* d...
  function readChunk_cHRM (line 4753) | static unsigned readChunk_cHRM(LodePNGInfo* info, const unsigned char* d...
  function readChunk_sRGB (line 4770) | static unsigned readChunk_sRGB(LodePNGInfo* info, const unsigned char* d...
  function readChunk_iCCP (line 4780) | static unsigned readChunk_iCCP(LodePNGInfo* info, const LodePNGDecompres...
  function decodeGeneric (line 4828) | static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode (line 5061) | unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode_memory (line 5106) | unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decode32 (line 5119) | unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,...
  function lodepng_decode24 (line 5124) | unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,...
  function lodepng_decode_file (line 5130) | unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned*...
  function lodepng_decode32_file (line 5142) | unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decode24_file (line 5147) | unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decoder_settings_init (line 5153) | void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)
  function lodepng_state_init (line 5170) | void lodepng_state_init(LodePNGState* state)
  function lodepng_state_cleanup (line 5183) | void lodepng_state_cleanup(LodePNGState* state)
  function lodepng_state_copy (line 5189) | void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)
  function addChunk (line 5208) | static unsigned addChunk(ucvector* out, const char* chunkName, const uns...
  function writeSignature (line 5215) | static void writeSignature(ucvector* out)
  function addChunk_IHDR (line 5228) | static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
  function addChunk_PLTE (line 5249) | static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)
  function addChunk_tRNS (line 5266) | static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)
  function addChunk_IDAT (line 5311) | static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, ...
  function addChunk_IEND (line 5326) | static unsigned addChunk_IEND(ucvector* out)
  function addChunk_tEXt (line 5335) | static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const ...
  function addChunk_zTXt (line 5351) | static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const ...
  function addChunk_iTXt (line 5378) | static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const ...
  function addChunk_bKGD (line 5419) | static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)
  function addChunk_tIME (line 5449) | static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)
  function addChunk_pHYs (line 5466) | static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)
  function addChunk_gAMA (line 5482) | static unsigned addChunk_gAMA(ucvector* out, const LodePNGInfo* info)
  function addChunk_cHRM (line 5496) | static unsigned addChunk_cHRM(ucvector* out, const LodePNGInfo* info)
  function addChunk_sRGB (line 5517) | static unsigned addChunk_sRGB(ucvector* out, const LodePNGInfo* info)
  function addChunk_iCCP (line 5523) | static unsigned addChunk_iCCP(ucvector* out, const LodePNGInfo* info, Lo...
  function filterScanline (line 5551) | static void filterScanline(unsigned char* out, const unsigned char* scan...
  function flog2 (line 5608) | static float flog2(float f)
  function filter (line 5616) | static unsigned filter(unsigned char* out, const unsigned char* in, unsi...
  function addPaddingBits (line 5836) | static void addPaddingBits(unsigned char* out, const unsigned char* in,
  function Adam7_interlace (line 5869) | static void Adam7_interlace(unsigned char* out, const unsigned char* in,...
  function preProcessScanlines (line 5920) | static unsigned preProcessScanlines(unsigned char** out, size_t* outsize...
  function getPaletteTranslucency (line 6013) | static unsigned getPaletteTranslucency(const unsigned char* palette, siz...
  function addUnknownChunks (line 6034) | static unsigned addUnknownChunks(ucvector* out, unsigned char* data, siz...
  function isGreyICCProfile (line 6046) | static unsigned isGreyICCProfile(const unsigned char* profile, unsigned ...
  function isRGBICCProfile (line 6061) | static unsigned isRGBICCProfile(const unsigned char* profile, unsigned s...
  function lodepng_encode (line 6069) | unsigned lodepng_encode(unsigned char** out, size_t* outsize,
  function lodepng_encode_memory (line 6338) | unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, con...
  function lodepng_encode32 (line 6354) | unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const un...
  function lodepng_encode24 (line 6359) | unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const un...
  function lodepng_encode_file (line 6365) | unsigned lodepng_encode_file(const char* filename, const unsigned char* ...
  function lodepng_encode32_file (line 6376) | unsigned lodepng_encode32_file(const char* filename, const unsigned char...
  function lodepng_encode24_file (line 6381) | unsigned lodepng_encode24_file(const char* filename, const unsigned char...
  function lodepng_encoder_settings_init (line 6387) | void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)
  type lodepng (line 6528) | namespace lodepng
    function load_file (line 6532) | unsigned load_file(std::vector<unsigned char>& buffer, const std::stri...
    function save_file (line 6541) | unsigned save_file(const std::vector<unsigned char>& buffer, const std...
    function decompress (line 6549) | unsigned decompress(std::vector<unsigned char>& out, const unsigned ch...
    function decompress (line 6563) | unsigned decompress(std::vector<unsigned char>& out, const std::vector...
    function compress (line 6571) | unsigned compress(std::vector<unsigned char>& out, const unsigned char...
    function compress (line 6585) | unsigned compress(std::vector<unsigned char>& out, const std::vector<u...
    function State (line 6612) | State& State::operator=(const State& other)
    function decode (line 6620) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6637) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6643) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6658) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6666) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function encode (line 6678) | unsigned encode(std::vector<unsigned char>& out, const unsigned char* ...
    function encode (line 6692) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6700) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6715) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6724) | unsigned encode(const std::string& filename,
    function encode (line 6734) | unsigned encode(const std::string& filename,

FILE: PinBox/PinBox/source/main.cpp
  function initDbgConsole (line 21) | void initDbgConsole()
  function main (line 32) | int main()

FILE: PinBox/PinBox/source/yuv_rgb.c
  function clamp (line 11) | uint8_t clamp(int16_t value)
  type RGB2YUVParam (line 78) | typedef struct
  type YUV2RGBParam (line 89) | typedef struct
  function rgb24_yuv420_std (line 135) | void rgb24_yuv420_std(
  function yuv420_rgb24_std (line 194) | void yuv420_rgb24_std(
  function rgb24_yuv420_sse (line 428) | void rgb24_yuv420_sse(uint32_t width, uint32_t height,
  function rgb24_yuv420_sseu (line 464) | void rgb24_yuv420_sseu(uint32_t width, uint32_t height,
  function yuv420_rgb24_sse (line 641) | void yuv420_rgb24_sse(
  function yuv420_rgb24_sseu (line 678) | void yuv420_rgb24_sseu(

FILE: PinBoxServer/PinBoxServer/AudioStreamSession.cpp
  function createNew (line 11) | void createNew(void* arg) {

FILE: PinBoxServer/PinBoxServer/AudioStreamSession.h
  function class (line 12) | class AudioStreamSession

FILE: PinBoxServer/PinBoxServer/HubItem.h
  type HubItemType (line 5) | enum HubItemType
  function class (line 12) | class HubItem

FILE: PinBoxServer/PinBoxServer/InputStreamSession.h
  type KeyMappingProfile (line 43) | struct KeyMappingProfile
  function class (line 53) | class InputStreamSession

FILE: PinBoxServer/PinBoxServer/PPClientSession.h
  type PPSession_Type (line 15) | enum PPSession_Type { PPSESSION_NONE, PPSESSION_MOVIE, PPSESSION_SCREEN_...
  function class (line 48) | class PPClientSession

FILE: PinBoxServer/PinBoxServer/PPMessage.cpp
  function u8 (line 11) | u8* PPMessage::BuildMessage(u8* contentBuffer, u32 contentSize)
  function u8 (line 38) | u8* PPMessage::BuildMessageEmpty()

FILE: PinBoxServer/PinBoxServer/PPMessage.h
  type u8 (line 10) | typedef unsigned char      u8;
  type u16 (line 11) | typedef unsigned short     u16;
  type u32 (line 12) | typedef unsigned int       u32;
  function class (line 25) | class PPMessage

FILE: PinBoxServer/PinBoxServer/PPServer.cpp
  type sockaddr_in (line 16) | struct sockaddr_in
  type hostent (line 17) | struct hostent

FILE: PinBoxServer/PinBoxServer/PPServer.h
  function class (line 22) | class PPServer

FILE: PinBoxServer/PinBoxServer/PinBoxServer.cpp
  function main (line 7) | int main(int argc, char *argv[])

FILE: PinBoxServer/PinBoxServer/ScreenCaptureSession.cpp
  function printError (line 10) | static void printError(int errorCode)
  type AVSampleFormat (line 33) | enum AVSampleFormat
  type SwrContext (line 34) | struct SwrContext

FILE: PinBoxServer/PinBoxServer/ScreenCaptureSession.h
  type FramePiece (line 38) | typedef struct
  type std (line 46) | typedef std::function<void()> OnClientReallyClose;
  type MemoryBuffer (line 57) | struct MemoryBuffer {
  type FPSCounter (line 87) | struct FPSCounter {
  type FrameData (line 94) | typedef struct FrameData {
  function class (line 103) | class ScreenCaptureSession

FILE: PinBoxServer/PinBoxServer/ServerConfig.cpp
  function genRandom (line 8) | void genRandom(char *s, const int len) {
  function ServerConfig (line 33) | ServerConfig* ServerConfig::Get()

FILE: PinBoxServer/PinBoxServer/ServerConfig.h
  function class (line 9) | class ServerConfig

FILE: PinBoxServer/PinBoxServer/UIMainWindow.h
  function class (line 4) | class UIMainWindow : public QMainWindow

FILE: PinBoxServer/PinBoxServer/winmain-inl.h
  function OnApp (line 4) | struct OnApp {

FILE: PinBoxTestProject/PinBoxTestProject/PPDecoder.cpp
  function videoDecodeThreadFunc (line 28) | static void videoDecodeThreadFunc(void* arg)

FILE: PinBoxTestProject/PinBoxTestProject/PPDecoder.h
  type MemoryBuffer (line 24) | struct MemoryBuffer {
  function class (line 57) | class ITimer {
  function virtual (line 71) | virtual ~Timer() {}
  function virtual (line 72) | virtual void start() { StartTime = std::chrono::high_resolution_clock::n...
  function virtual (line 73) | virtual void wait()
  function class (line 83) | class PPDecoder

FILE: PinBoxTestProject/PinBoxTestProject/PPMessage.cpp
  function u8 (line 10) | u8* PPMessage::BuildMessage(u8* contentBuffer, u32 contentSize)
  function u8 (line 36) | u8* PPMessage::BuildMessageEmpty()

FILE: PinBoxTestProject/PinBoxTestProject/PPMessage.h
  type u8 (line 10) | typedef unsigned char      u8;
  type u16 (line 11) | typedef unsigned short     u16;
  type u32 (line 12) | typedef unsigned int       u32;
  function class (line 23) | class PPMessage

FILE: PinBoxTestProject/PinBoxTestProject/PPNetwork.cpp
  type addrinfo (line 101) | struct addrinfo

FILE: PinBoxTestProject/PinBoxTestProject/PPNetwork.h
  type ppConectState (line 20) | enum ppConectState { IDLE, CONNECTING, CONNECTED, FAIL }
  type std (line 21) | typedef std::function<void(u8* buffer, u32 size, u32 tag)> PPNetworkRece...
  type std (line 22) | typedef std::function<void(u8* data, u32 code)> PPNetworkCallback;
  type QueueMessage (line 24) | typedef struct
  function class (line 32) | class PPNetwork

FILE: PinBoxTestProject/PinBoxTestProject/PPSession.cpp
  function FramePiece (line 323) | FramePiece* PPSession::SafeGetFramePiece(u32 index)

FILE: PinBoxTestProject/PinBoxTestProject/PPSession.h
  type PPSession_Type (line 24) | enum PPSession_Type { PPSESSION_NONE, PPSESSION_MOVIE, PPSESSION_SCREEN_...
  type FramePiece (line 50) | typedef struct
  function class (line 62) | class PPSession

FILE: PinBoxTestProject/PinBoxTestProject/PPSessionManager.h
  function class (line 21) | class PPSessionManager

FILE: PinBoxTestProject/PinBoxTestProject/main.cpp
  function updateSessionManager (line 6) | void updateSessionManager(void* arg)
  function main (line 19) | int main()

FILE: PinBoxTestProject/PinBoxTestProject/yuv_rgb.c
  function clamp (line 11) | uint8_t clamp(int16_t value)
  type RGB2YUVParam (line 78) | typedef struct
  type YUV2RGBParam (line 89) | typedef struct
  function rgb24_yuv420_std (line 135) | void rgb24_yuv420_std(
  function yuv420_rgb24_std (line 194) | void yuv420_rgb24_std(
  function rgb24_yuv420_sse (line 428) | void rgb24_yuv420_sse(uint32_t width, uint32_t height,
  function rgb24_yuv420_sseu (line 464) | void rgb24_yuv420_sseu(uint32_t width, uint32_t height,
  function yuv420_rgb24_sse (line 641) | void yuv420_rgb24_sse(
  function yuv420_rgb24_sseu (line 678) | void yuv420_rgb24_sseu(

FILE: PinBoxTestProject/PinBoxTestProject/yuv_rgb.h
  type YCbCrType (line 21) | typedef enum

FILE: ThirdParty/FakeInput/src/actions/action.hpp
  type FakeInput (line 28) | namespace FakeInput
    class Action (line 31) | class Action

FILE: ThirdParty/FakeInput/src/actions/actionsequence.cpp
  type FakeInput (line 29) | namespace FakeInput
    function Action (line 53) | Action* ActionSequence::clone() const
    function ActionSequence (line 58) | ActionSequence& ActionSequence::join(ActionSequence& anotherSequence)
    function ActionSequence (line 64) | ActionSequence& ActionSequence::press(Key key)
    function ActionSequence (line 70) | ActionSequence& ActionSequence::press(KeyType type)
    function ActionSequence (line 76) | ActionSequence& ActionSequence::press(MouseButton button)
    function ActionSequence (line 82) | ActionSequence& ActionSequence::release(Key key)
    function ActionSequence (line 88) | ActionSequence& ActionSequence::release(KeyType type)
    function ActionSequence (line 94) | ActionSequence& ActionSequence::release(MouseButton button)
    function ActionSequence (line 100) | ActionSequence& ActionSequence::moveMouse(int dx, int dy)
    function ActionSequence (line 106) | ActionSequence& ActionSequence::moveMouseTo(int x, int y)
    function ActionSequence (line 112) | ActionSequence& ActionSequence::wheelUp()
    function ActionSequence (line 118) | ActionSequence& ActionSequence::wheelDown()
    function ActionSequence (line 124) | ActionSequence& ActionSequence::runCommand(const std::string& cmd)
    function ActionSequence (line 130) | ActionSequence& ActionSequence::wait(unsigned int milisec)

FILE: ThirdParty/FakeInput/src/actions/actionsequence.hpp
  type FakeInput (line 37) | namespace FakeInput
    class ActionSequence (line 40) | class ActionSequence : public Action

FILE: ThirdParty/FakeInput/src/actions/commandaction.cpp
  type FakeInput (line 29) | namespace FakeInput
    function Action (line 36) | Action* CommandRun::clone() const

FILE: ThirdParty/FakeInput/src/actions/commandaction.hpp
  type FakeInput (line 32) | namespace FakeInput
    class CommandRun (line 38) | class CommandRun : public Action

FILE: ThirdParty/FakeInput/src/actions/keyaction.cpp
  type FakeInput (line 29) | namespace FakeInput
    function Action (line 37) | Action* KeyAction::clone() const

FILE: ThirdParty/FakeInput/src/actions/keyaction.hpp
  type FakeInput (line 31) | namespace FakeInput
    class KeyAction (line 36) | class KeyAction : public Action
    class KeyboardPress (line 64) | class KeyboardPress : public KeyAction
    class KeyboardRelease (line 83) | class KeyboardRelease : public KeyAction

FILE: ThirdParty/FakeInput/src/actions/mouseaction.cpp
  type FakeInput (line 27) | namespace FakeInput
    function Action (line 36) | Action* MouseButtonAction::clone() const
    function Action (line 64) | Action* MouseMotionAction::clone() const
    function Action (line 90) | Action* MouseWheelAction::clone() const

FILE: ThirdParty/FakeInput/src/actions/mouseaction.hpp
  type FakeInput (line 31) | namespace FakeInput
    class MouseButtonAction (line 37) | class MouseButtonAction : public Action
    class MousePress (line 65) | class MousePress : public MouseButtonAction
    class MouseRelease (line 77) | class MouseRelease : public MouseButtonAction
    class MouseMotionAction (line 92) | class MouseMotionAction : public Action
    class MouseRelativeMotion (line 126) | class MouseRelativeMotion : public MouseMotionAction
    class MouseAbsoluteMotion (line 143) | class MouseAbsoluteMotion : public MouseMotionAction
    class MouseWheelAction (line 159) | class MouseWheelAction : public Action
    class MouseWheelUp (line 184) | class MouseWheelUp : public MouseWheelAction
    class MouseWheelDown (line 192) | class MouseWheelDown : public MouseWheelAction

FILE: ThirdParty/FakeInput/src/actions/waitaction.cpp
  type FakeInput (line 29) | namespace FakeInput
    function Action (line 36) | Action* Wait::clone() const

FILE: ThirdParty/FakeInput/src/actions/waitaction.hpp
  type FakeInput (line 30) | namespace FakeInput
    class Wait (line 36) | class Wait : public Action

FILE: ThirdParty/FakeInput/src/display_unix.cpp
  type FakeInput (line 27) | namespace FakeInput
    function Display (line 29) | Display* display()

FILE: ThirdParty/FakeInput/src/display_unix.hpp
  type FakeInput (line 32) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/key.hpp
  type FakeInput (line 36) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/key_base.cpp
  type FakeInput (line 30) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/key_base.hpp
  type FakeInput (line 32) | namespace FakeInput
    class Key_base (line 36) | class Key_base

FILE: ThirdParty/FakeInput/src/key_unix.cpp
  type FakeInput (line 33) | namespace FakeInput
    function KeySym (line 75) | KeySym Key_unix::keysym() const

FILE: ThirdParty/FakeInput/src/key_unix.hpp
  type FakeInput (line 37) | namespace FakeInput
    class Key_unix (line 44) | class Key_unix : public Key_base

FILE: ThirdParty/FakeInput/src/key_win.cpp
  type FakeInput (line 32) | namespace FakeInput
    function WORD (line 108) | WORD Key_win::virtualKey() const

FILE: ThirdParty/FakeInput/src/key_win.hpp
  type FakeInput (line 37) | namespace FakeInput
    class Key_win (line 44) | class Key_win : public Key_base

FILE: ThirdParty/FakeInput/src/keyboard.cpp
  type FakeInput (line 27) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/keyboard.hpp
  type FakeInput (line 32) | namespace FakeInput
    class Keyboard (line 38) | class Keyboard

FILE: ThirdParty/FakeInput/src/keyboard_unix.cpp
  type FakeInput (line 34) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/keyboard_win.cpp
  type FakeInput (line 31) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/mapper.hpp
  type FakeInput (line 31) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/mapper_unix.cpp
  type FakeInput (line 30) | namespace FakeInput
    function translateMouseButton (line 102) | long translateMouseButton(MouseButton button)
    function translateKey (line 107) | unsigned long translateKey(KeyType key)

FILE: ThirdParty/FakeInput/src/mapper_win.cpp
  type FakeInput (line 29) | namespace FakeInput
    function translateMouseButton (line 101) | long translateMouseButton(MouseButton button)
    function translateKey (line 106) | unsigned long translateKey(KeyType key)

FILE: ThirdParty/FakeInput/src/mouse.hpp
  type FakeInput (line 31) | namespace FakeInput
    class Mouse (line 38) | class Mouse

FILE: ThirdParty/FakeInput/src/mouse_unix.cpp
  type FakeInput (line 34) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/mouse_win.cpp
  type FakeInput (line 37) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/system.hpp
  type FakeInput (line 32) | namespace FakeInput
    class System (line 39) | class System

FILE: ThirdParty/FakeInput/src/system_unix.cpp
  type FakeInput (line 30) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/system_win.cpp
  type FakeInput (line 30) | namespace FakeInput

FILE: ThirdParty/FakeInput/src/types.hpp
  type FakeInput (line 28) | namespace FakeInput
    type MouseButton (line 31) | enum MouseButton {
    type KeyType (line 38) | enum KeyType {

FILE: ThirdParty/ViGEm/Include/ViGEmBusDriver.h
  type VIGEM_PDO_STAGE (line 41) | typedef enum _VIGEM_PDO_STAGE
  type VOID (line 52) | typedef
  type VIGEM_BUS_INTERFACE (line 61) | typedef struct _VIGEM_BUS_INTERFACE {
  function VOID (line 76) | VOID FORCEINLINE BUS_PDO_REPORT_STAGE_RESULT(

FILE: ThirdParty/ViGEm/Include/ViGEmBusShared.h
  type VIGEM_PLUGIN_TARGET (line 78) | typedef struct _VIGEM_PLUGIN_TARGET
  function VOID (line 110) | VOID FORCEINLINE VIGEM_PLUGIN_TARGET_INIT(
  type VIGEM_UNPLUG_TARGET (line 130) | typedef struct _VIGEM_UNPLUG_TARGET
  function VOID (line 147) | VOID FORCEINLINE VIGEM_UNPLUG_TARGET_INIT(
  type VIGEM_CHECK_VERSION (line 162) | typedef struct _VIGEM_CHECK_VERSION
  function VOID (line 170) | VOID FORCEINLINE VIGEM_CHECK_VERSION_INIT(
  type XUSB_REQUEST_NOTIFICATION (line 188) | typedef struct _XUSB_REQUEST_NOTIFICATION
  function VOID (line 220) | VOID FORCEINLINE XUSB_REQUEST_NOTIFICATION_INIT(
  type XUSB_SUBMIT_REPORT (line 234) | typedef struct _XUSB_SUBMIT_REPORT
  function VOID (line 256) | VOID FORCEINLINE XUSB_SUBMIT_REPORT_INIT(
  type DS4_OUTPUT_REPORT (line 271) | typedef struct _DS4_OUTPUT_REPORT
  type DS4_REQUEST_NOTIFICATION (line 293) | typedef struct _DS4_REQUEST_NOTIFICATION
  function VOID (line 315) | VOID FORCEINLINE DS4_REQUEST_NOTIFICATION_INIT(
  type DS4_SUBMIT_REPORT (line 329) | typedef struct _DS4_SUBMIT_REPORT
  function VOID (line 351) | VOID FORCEINLINE DS4_SUBMIT_REPORT_INIT(
  type XGIP_REPORT (line 368) | typedef struct _XGIP_REPORT
  type XGIP_SUBMIT_REPORT (line 384) | typedef struct _XGIP_SUBMIT_REPORT
  function VOID (line 406) | VOID FORCEINLINE XGIP_SUBMIT_REPORT_INIT(
  type XGIP_SUBMIT_INTERRUPT (line 420) | typedef struct _XGIP_SUBMIT_INTERRUPT
  function VOID (line 447) | VOID FORCEINLINE XGIP_SUBMIT_INTERRUPT_INIT(

FILE: ThirdParty/ViGEm/Include/ViGEmClient.h
  type VIGEM_ERROR (line 50) | typedef enum _VIGEM_ERRORS
  type _VIGEM_CLIENT_T (line 84) | struct _VIGEM_CLIENT_T
  type _VIGEM_TARGET_T (line 91) | struct _VIGEM_TARGET_T

FILE: ThirdParty/ViGEm/Include/ViGEmCommon.h
  type VIGEM_TARGET_TYPE (line 31) | typedef enum _VIGEM_TARGET_TYPE
  type XUSB_BUTTON (line 51) | typedef enum _XUSB_BUTTON
  type XUSB_REPORT (line 74) | typedef struct _XUSB_REPORT
  function VOID (line 89) | VOID FORCEINLINE XUSB_REPORT_INIT(
  type DS4_LIGHTBAR_COLOR (line 99) | typedef struct _DS4_LIGHTBAR_COLOR
  type DS4_BUTTONS (line 121) | typedef enum _DS4_BUTTONS
  type DS4_SPECIAL_BUTTONS (line 141) | typedef enum _DS4_SPECIAL_BUTTONS
  type DS4_DPAD_DIRECTIONS (line 151) | typedef enum _DS4_DPAD_DIRECTIONS
  type DS4_REPORT (line 168) | typedef struct _DS4_REPORT
  function VOID (line 184) | VOID FORCEINLINE DS4_SET_DPAD(
  function VOID (line 193) | VOID FORCEINLINE DS4_REPORT_INIT(

FILE: ThirdParty/ViGEm/Include/ViGEmUtil.h
  function VOID (line 6) | VOID FORCEINLINE XUSB_TO_DS4_REPORT(

FILE: ThirdParty/ViGEm/Include/XInputOverrides.h
  type XINPUT_GAMEPAD_OVERRIDES (line 28) | typedef enum _XINPUT_GAMEPAD_OVERRIDES

FILE: ThirdParty/ViGEm/Include/XnaGuardianShared.h
  type XINPUT_GAMEPAD_STATE (line 47) | typedef struct _XINPUT_GAMEPAD_STATE {
  type XINPUT_EXT_OVERRIDE_GAMEPAD (line 60) | typedef struct _XINPUT_EXT_OVERRIDE_GAMEPAD
  function VOID (line 72) | VOID FORCEINLINE XINPUT_EXT_OVERRIDE_GAMEPAD_INIT(
  type XINPUT_EXT_PEEK_GAMEPAD (line 86) | typedef struct _XINPUT_EXT_PEEK_GAMEPAD
  function VOID (line 94) | VOID FORCEINLINE XINPUT_EXT_PEEK_GAMEPAD_INIT(

FILE: ThirdParty/ffmpeg/examples/avio_dir_cmd.c
  function list_op (line 57) | static int list_op(const char *input_dir)
  function del_op (line 105) | static int del_op(const char *url)
  function move_op (line 113) | static int move_op(const char *src, const char *dst)
  function usage (line 122) | static void usage(const char *program_name)
  function main (line 134) | int main(int argc, char *argv[])

FILE: ThirdParty/ffmpeg/examples/avio_reading.c
  type buffer_data (line 37) | struct buffer_data {
  function read_packet (line 42) | static int read_packet(void *opaque, uint8_t *buf, int buf_size)
  function main (line 59) | int main(int argc, char *argv[])

FILE: ThirdParty/ffmpeg/examples/decode_audio.c
  function decode (line 42) | static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame,
  function main (line 76) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/decode_video.c
  function pgm_save (line 38) | static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
  function decode (line 51) | static void decode(AVCodecContext *dec_ctx, AVFrame *frame, AVPacket *pkt,
  function main (line 83) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/demuxing_decoding.c
  type AVPixelFormat (line 40) | enum AVPixelFormat
  function decode_packet (line 64) | static int decode_packet(int *got_frame, int cached)
  function open_codec_context (line 149) | static int open_codec_context(int *stream_idx,
  function get_format_from_sample_fmt (line 202) | static int get_format_from_sample_fmt(const char **fmt,
  function main (line 231) | int main (int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/encode_audio.c
  function check_sample_fmt (line 42) | static int check_sample_fmt(const AVCodec *codec, enum AVSampleFormat sa...
  function select_sample_rate (line 55) | static int select_sample_rate(const AVCodec *codec)
  function select_channel_layout (line 73) | static int select_channel_layout(const AVCodec *codec)
  function encode (line 95) | static void encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt,
  function main (line 123) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/encode_video.c
  function encode (line 39) | static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt,
  function main (line 69) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/extract_mvs.c
  function decode_packet (line 36) | static int decode_packet(const AVPacket *pkt)
  function open_codec_context (line 76) | static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType...
  function main (line 121) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/filter_audio.c
  function init_filter_graph (line 62) | static int init_filter_graph(AVFilterGraph **graph, AVFilterContext **src,
  function process_output (line 215) | static int process_output(struct AVMD5 *md5, AVFrame *frame)
  function get_input (line 242) | static int get_input(AVFrame *frame, int frame_num)
  function main (line 270) | int main(int argc, char *argv[])

FILE: ThirdParty/ffmpeg/examples/filtering_audio.c
  function open_input_file (line 49) | static int open_input_file(const char *filename)
  function init_filters (line 88) | static int init_filters(const char *filters_descr)
  function print_frame (line 201) | static void print_frame(const AVFrame *frame)
  function main (line 215) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/filtering_video.c
  function open_input_file (line 52) | static int open_input_file(const char *filename)
  function init_filters (line 91) | static int init_filters(const char *filters_descr)
  function display_frame (line 178) | static void display_frame(const AVFrame *frame, AVRational time_base)
  function main (line 209) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/http_multiclient.c
  function process_client (line 36) | static void process_client(AVIOContext *client, const char *in_uri)
  function main (line 100) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/hw_decode.c
  type AVPixelFormat (line 44) | enum AVPixelFormat
  function hw_decoder_init (line 47) | static int hw_decoder_init(AVCodecContext *ctx, const enum AVHWDeviceTyp...
  function get_hw_format (line 61) | static enum AVPixelFormat get_hw_format(AVCodecContext *ctx,
  function decode_write (line 75) | static int decode_write(AVCodecContext *avctx, AVPacket *packet)
  function main (line 147) | int main(int argc, char *argv[])

FILE: ThirdParty/ffmpeg/examples/metadata.c
  function main (line 34) | int main (int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/muxing.c
  type OutputStream (line 53) | typedef struct OutputStream {
  function log_packet (line 70) | static void log_packet(const AVFormatContext *fmt_ctx, const AVPacket *pkt)
  function write_frame (line 81) | static int write_frame(AVFormatContext *fmt_ctx, const AVRational *time_...
  function add_stream (line 93) | static void add_stream(OutputStream *ost, AVFormatContext *oc,
  function AVFrame (line 187) | static AVFrame *alloc_audio_frame(enum AVSampleFormat sample_fmt,
  function open_audio (line 215) | static void open_audio(AVFormatContext *oc, AVCodec *codec, OutputStream...
  function AVFrame (line 280) | static AVFrame *get_audio_frame(OutputStream *ost)
  function write_audio_frame (line 309) | static int write_audio_frame(AVFormatContext *oc, OutputStream *ost)
  function AVFrame (line 373) | static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int...
  function open_video (line 396) | static void open_video(AVFormatContext *oc, AVCodec *codec, OutputStream...
  function fill_yuv_image (line 440) | static void fill_yuv_image(AVFrame *pict, int frame_index,
  function AVFrame (line 461) | static AVFrame *get_video_frame(OutputStream *ost)
  function write_video_frame (line 507) | static int write_video_frame(AVFormatContext *oc, OutputStream *ost)
  function close_stream (line 542) | static void close_stream(AVFormatContext *oc, OutputStream *ost)
  function main (line 554) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/qsvdec.c
  type DecodeContext (line 47) | typedef struct DecodeContext {
  function get_format (line 51) | static int get_format(AVCodecContext *avctx, const enum AVPixelFormat *p...
  function decode_packet (line 90) | static int decode_packet(DecodeContext *decode, AVCodecContext *decoder_...
  function main (line 137) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/remuxing.c
  function log_packet (line 34) | static void log_packet(const AVFormatContext *fmt_ctx, const AVPacket *p...
  function main (line 46) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/resampling_audio.c
  function get_format_from_sample_fmt (line 33) | static int get_format_from_sample_fmt(const char **fmt,
  function fill_samples (line 65) | static void fill_samples(double *dst, int nb_samples, int nb_channels, i...
  function main (line 81) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/scaling_video.c
  function fill_yuv_image (line 33) | static void fill_yuv_image(uint8_t *data[4], int linesize[4],
  function main (line 52) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/transcode_aac.c
  function open_input_file (line 58) | static int open_input_file(const char *filename,
  function open_output_file (line 139) | static int open_output_file(const char *filename,
  function init_packet (line 250) | static void init_packet(AVPacket *packet)
  function init_input_frame (line 263) | static int init_input_frame(AVFrame **frame)
  function init_resampler (line 281) | static int init_resampler(AVCodecContext *input_codec_context,
  function init_fifo (line 328) | static int init_fifo(AVAudioFifo **fifo, AVCodecContext *output_codec_co...
  function write_output_file_header (line 344) | static int write_output_file_header(AVFormatContext *output_format_context)
  function decode_audio_frame (line 368) | static int decode_audio_frame(AVFrame *frame,
  function init_converted_samples (line 437) | static int init_converted_samples(uint8_t ***converted_input_samples,
  function convert_samples (line 481) | static int convert_samples(const uint8_t **input_data,
  function add_samples_to_fifo (line 507) | static int add_samples_to_fifo(AVAudioFifo *fifo,
  function read_decode_convert_and_store (line 545) | static int read_decode_convert_and_store(AVAudioFifo *fifo,
  function init_output_frame (line 612) | static int init_output_frame(AVFrame **frame,
  function encode_audio_frame (line 658) | static int encode_audio_frame(AVFrame *frame,
  function load_encode_and_write (line 728) | static int load_encode_and_write(AVAudioFifo *fifo,
  function write_output_file_trailer (line 768) | static int write_output_file_trailer(AVFormatContext *output_format_cont...
  function main (line 779) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/transcoding.c
  type FilteringContext (line 40) | typedef struct FilteringContext {
  type StreamContext (line 47) | typedef struct StreamContext {
  function open_input_file (line 53) | static int open_input_file(const char *filename)
  function open_output_file (line 111) | static int open_output_file(const char *filename)
  function init_filter (line 225) | static int init_filter(FilteringContext* fctx, AVCodecContext *dec_ctx,
  function init_filters (line 374) | static int init_filters(void)
  function encode_write_frame (line 404) | static int encode_write_frame(AVFrame *filt_frame, unsigned int stream_i...
  function filter_encode_write_frame (line 440) | static int filter_encode_write_frame(AVFrame *frame, unsigned int stream...
  function flush_encoder (line 484) | static int flush_encoder(unsigned int stream_index)
  function main (line 504) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/examples/vaapi_encode.c
  function set_hwframe_ctx (line 42) | static int set_hwframe_ctx(AVCodecContext *ctx, AVBufferRef *hw_device_ctx)
  function encode_write (line 72) | static int encode_write(AVCodecContext *avctx, AVFrame *frame, FILE *fout)
  function main (line 100) | int main(int argc, char *argv[])

FILE: ThirdParty/ffmpeg/examples/vaapi_transcode.c
  function get_vaapi_format (line 46) | static enum AVPixelFormat get_vaapi_format(AVCodecContext *ctx,
  function open_input_file (line 60) | static int open_input_file(const char *filename)
  function encode_write (line 110) | static int encode_write(AVFrame *frame)
  function dec_enc (line 146) | static int dec_enc(AVPacket *pkt, AVCodec *enc_codec)
  function main (line 228) | int main(int argc, char **argv)

FILE: ThirdParty/ffmpeg/include/libavcodec/avcodec.h
  type AVCodecID (line 215) | enum AVCodecID {
  type AVCodecDescriptor (line 699) | typedef struct AVCodecDescriptor {
  type AVDiscard (line 785) | enum AVDiscard{
  type AVAudioServiceType (line 797) | enum AVAudioServiceType {
  type RcOverride (line 813) | typedef struct RcOverride{
  type AVPanScan (line 1070) | typedef struct AVPanScan {
  type AVCPBProperties (line 1099) | typedef struct AVCPBProperties {
  type AVPacketSideDataType (line 1143) | enum AVPacketSideDataType {
  type AVPacketSideData (line 1373) | typedef struct AVPacketSideData {
  type AVPacket (line 1407) | typedef struct AVPacket {
  type AVSideDataParamChangeFlags (line 1484) | enum AVSideDataParamChangeFlags {
  type AVCodecInternal (line 1494) | struct AVCodecInternal
  type AVFieldOrder (line 1496) | enum AVFieldOrder {
  type AVCodecContext (line 1518) | typedef struct AVCodecContext {
  type AVProfile (line 3341) | typedef struct AVProfile {
  type AVCodecHWConfig (line 3382) | typedef struct AVCodecHWConfig {
  type AVCodecDefault (line 3401) | typedef struct AVCodecDefault AVCodecDefault;
  type AVSubtitle (line 3403) | struct AVSubtitle
  type AVCodec (line 3408) | typedef struct AVCodec {
  type MpegEncContext (line 3557) | struct MpegEncContext
  type AVHWAccel (line 3576) | typedef struct AVHWAccel {
  type AVPicture (line 3793) | typedef struct AVPicture {
  type AVSubtitleType (line 3805) | enum AVSubtitleType {
  type AVSubtitleRect (line 3825) | typedef struct AVSubtitleRect {
  type AVSubtitle (line 3860) | typedef struct AVSubtitle {
  type AVCodecParameters (line 3876) | typedef struct AVCodecParameters {
  type AVPacketSideDataType (line 4410) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4426) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4437) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4448) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4459) | enum AVPacketSideDataType
  type AVCodecID (line 4594) | enum AVCodecID
  type AVChromaLocation (line 4639) | enum AVChromaLocation
  type AVChromaLocation (line 4650) | enum AVChromaLocation
  type AVPixelFormat (line 5015) | enum AVPixelFormat
  type AVPictureStructure (line 5025) | enum AVPictureStructure {
  type AVCodecParserContext (line 5032) | typedef struct AVCodecParserContext {
  type AVCodecParser (line 5199) | typedef struct AVCodecParser {
  type AVCodecID (line 5296) | enum AVCodecID
  type AVPixelFormat (line 5407) | enum AVPixelFormat
  type AVPixelFormat (line 5420) | enum AVPixelFormat
  type AVPixelFormat (line 5426) | enum AVPixelFormat
  type AVPixelFormat (line 5434) | enum AVPixelFormat
  type AVPixelFormat (line 5441) | enum AVPixelFormat
  type AVPixelFormat (line 5448) | enum AVPixelFormat
  type AVPixelFormat (line 5454) | enum AVPixelFormat
  type AVPixelFormat (line 5484) | enum AVPixelFormat
  type AVPixelFormat (line 5492) | enum AVPixelFormat
  type AVPixelFormat (line 5497) | enum AVPixelFormat
  type AVPixelFormat (line 5497) | enum AVPixelFormat
  type AVPixelFormat (line 5517) | enum AVPixelFormat
  type AVPixelFormat (line 5517) | enum AVPixelFormat
  type AVPixelFormat (line 5518) | enum AVPixelFormat
  type AVPixelFormat (line 5524) | enum AVPixelFormat
  type AVPixelFormat (line 5524) | enum AVPixelFormat
  type AVPixelFormat (line 5524) | enum AVPixelFormat
  type AVPixelFormat (line 5525) | enum AVPixelFormat
  type AVPixelFormat (line 5528) | enum AVPixelFormat
  type AVPixelFormat (line 5528) | enum AVPixelFormat
  type AVPixelFormat (line 5529) | enum AVPixelFormat
  type AVPixelFormat (line 5531) | enum AVPixelFormat
  type AVCodecContext (line 5531) | struct AVCodecContext
  type AVPixelFormat (line 5531) | enum AVPixelFormat
  type AVCodecID (line 5575) | enum AVCodecID
  type AVSampleFormat (line 5605) | enum AVSampleFormat
  type AVCodecID (line 5625) | enum AVCodecID
  type AVCodecID (line 5633) | enum AVCodecID
  type AVSampleFormat (line 5633) | enum AVSampleFormat
  type AVCodecID (line 5643) | enum AVCodecID
  type AVBitStreamFilterContext (line 5662) | typedef struct AVBitStreamFilterContext {
  type AVBSFInternal (line 5675) | typedef struct AVBSFInternal AVBSFInternal;
  type AVBSFContext (line 5687) | typedef struct AVBSFContext {
  type AVBitStreamFilter (line 5736) | typedef struct AVBitStreamFilter {
  type AVBSFList (line 5913) | typedef struct AVBSFList AVBSFList;
  type AVLockOp (line 6047) | enum AVLockOp {
  type AVLockOp (line 6081) | enum AVLockOp
  type AVMediaType (line 6087) | enum AVMediaType
  type AVCodecID (line 6087) | enum AVCodecID
  type AVCodecID (line 6093) | enum AVCodecID
  type AVCodecID (line 6114) | enum AVCodecID

FILE: ThirdParty/ffmpeg/include/libavcodec/avdct.h
  type AVDCT (line 29) | typedef struct AVDCT {

FILE: ThirdParty/ffmpeg/include/libavcodec/avfft.h
  type FFTSample (line 35) | typedef float FFTSample;
  type FFTComplex (line 37) | typedef struct FFTComplex {
  type FFTContext (line 41) | typedef struct FFTContext FFTContext;
  type RDFTransformType (line 71) | enum RDFTransformType {
  type RDFTContext (line 78) | typedef struct RDFTContext RDFTContext;
  type RDFTransformType (line 85) | enum RDFTransformType
  type DCTContext (line 91) | typedef struct DCTContext DCTContext;
  type DCTTransformType (line 93) | enum DCTTransformType {
  type DCTTransformType (line 110) | enum DCTTransformType

FILE: ThirdParty/ffmpeg/include/libavcodec/d3d11va.h
  type AVD3D11VAContext (line 59) | typedef struct AVD3D11VAContext {

FILE: ThirdParty/ffmpeg/include/libavcodec/dirac.h
  type DiracParseCodes (line 57) | enum DiracParseCodes {
  type DiracVersionInfo (line 76) | typedef struct DiracVersionInfo {
  type AVDiracSeqHeader (line 81) | typedef struct AVDiracSeqHeader {

FILE: ThirdParty/ffmpeg/include/libavcodec/dv_profile.h
  type AVDVProfile (line 39) | typedef struct AVDVProfile {
  type AVPixelFormat (line 75) | enum AVPixelFormat
  type AVPixelFormat (line 81) | enum AVPixelFormat

FILE: ThirdParty/ffmpeg/include/libavcodec/dxva2.h
  type dxva_context (line 57) | struct dxva_context {

FILE: ThirdParty/ffmpeg/include/libavcodec/mediacodec.h
  type AVMediaCodecContext (line 33) | typedef struct AVMediaCodecContext {
  type AVMediaCodecBuffer (line 73) | typedef struct MediaCodecBuffer AVMediaCodecBuffer;

FILE: ThirdParty/ffmpeg/include/libavcodec/qsv.h
  type AVQSVContext (line 36) | typedef struct AVQSVContext {

FILE: ThirdParty/ffmpeg/include/libavcodec/vaapi.h
  function vaapi_context (line 56) | struct attribute_deprecated vaapi_context {

FILE: ThirdParty/ffmpeg/include/libavcodec/vdpau.h
  type AVCodecContext (line 60) | struct AVCodecContext
  type AVFrame (line 61) | struct AVFrame
  type AVCodecContext (line 63) | struct AVCodecContext
  type AVFrame (line 63) | struct AVFrame
  type AVVDPAUContext (line 81) | typedef struct AVVDPAUContext {

FILE: ThirdParty/ffmpeg/include/libavcodec/videotoolbox.h
  type AVVideotoolboxContext (line 46) | typedef struct AVVideotoolboxContext {

FILE: ThirdParty/ffmpeg/include/libavcodec/vorbis_parser.h
  type AVVorbisParseContext (line 31) | typedef struct AVVorbisParseContext AVVorbisParseContext;

FILE: ThirdParty/ffmpeg/include/libavcodec/xvmc.h
  function xvmc_pix_fmt (line 46) | struct attribute_deprecated xvmc_pix_fmt {

FILE: ThirdParty/ffmpeg/include/libavdevice/avdevice.h
  type AVDeviceRect (line 109) | typedef struct AVDeviceRect {
  type AVAppToDevMessageType (line 119) | enum AVAppToDevMessageType {
  type AVDevToAppMessageType (line 198) | enum AVDevToAppMessageType {
  type AVFormatContext (line 306) | struct AVFormatContext
  type AVAppToDevMessageType (line 307) | enum AVAppToDevMessageType
  type AVFormatContext (line 320) | struct AVFormatContext
  type AVDevToAppMessageType (line 321) | enum AVDevToAppMessageType
  type AVDeviceCapabilitiesQuery (line 400) | typedef struct AVDeviceCapabilitiesQuery {
  type AVDeviceInfo (line 452) | typedef struct AVDeviceInfo {
  type AVDeviceInfoList (line 460) | typedef struct AVDeviceInfoList {
  type AVFormatContext (line 479) | struct AVFormatContext
  type AVInputFormat (line 505) | struct AVInputFormat
  type AVOutputFormat (line 507) | struct AVOutputFormat

FILE: ThirdParty/ffmpeg/include/libavfilter/avfilter.h
  type AVFilterContext (line 67) | typedef struct AVFilterContext AVFilterContext;
  type AVFilterLink (line 68) | typedef struct AVFilterLink    AVFilterLink;
  type AVFilterPad (line 69) | typedef struct AVFilterPad     AVFilterPad;
  type AVFilterFormats (line 70) | typedef struct AVFilterFormats AVFilterFormats;
  type AVMediaType (line 98) | enum AVMediaType
  type AVFilter (line 144) | typedef struct AVFilter {
  type AVFilterInternal (line 335) | typedef struct AVFilterInternal AVFilterInternal;
  type AVFilterContext (line 338) | struct AVFilterContext {
  type AVFilterLink (line 439) | struct AVFilterLink {
  type AVFilterGraphInternal (line 809) | typedef struct AVFilterGraphInternal AVFilterGraphInternal;
  type AVFilterGraph (line 840) | typedef struct AVFilterGraph {
  type AVFilterInOut (line 1003) | typedef struct AVFilterInOut {

FILE: ThirdParty/ffmpeg/include/libavfilter/buffersink.h
  type AVBufferSinkParams (line 65) | typedef struct AVBufferSinkParams {
  type AVABufferSinkParams (line 79) | typedef struct AVABufferSinkParams {
  type AVMediaType (line 109) | enum AVMediaType

FILE: ThirdParty/ffmpeg/include/libavfilter/buffersrc.h
  type AVBufferSrcParameters (line 73) | typedef struct AVBufferSrcParameters {

FILE: ThirdParty/ffmpeg/include/libavformat/avformat.h
  type AVFormatContext (line 326) | struct AVFormatContext
  type AVDeviceInfoList (line 328) | struct AVDeviceInfoList
  type AVDeviceCapabilitiesQuery (line 329) | struct AVDeviceCapabilitiesQuery
  type AVCodecTag (line 443) | struct AVCodecTag
  type AVProbeData (line 448) | typedef struct AVProbeData {
  type AVOutputFormat (line 497) | typedef struct AVOutputFormat {
  type AVInputFormat (line 633) | typedef struct AVInputFormat {
  type AVStreamParseType (line 782) | enum AVStreamParseType {
  type AVIndexEntry (line 793) | typedef struct AVIndexEntry {
  type AVStreamInternal (line 840) | typedef struct AVStreamInternal AVStreamInternal;
  type AVStream (line 864) | typedef struct AVStream {
  type AVCodecParserContext (line 1234) | struct AVCodecParserContext
  type AVProgram (line 1251) | typedef struct AVProgram {
  type AVChapter (line 1285) | typedef struct AVChapter {
  type AVFormatContext (line 1296) | struct AVFormatContext
  type AVFormatContext (line 1299) | struct AVFormatContext
  type AVDurationEstimationMethod (line 1306) | enum AVDurationEstimationMethod {
  type AVFormatInternal (line 1312) | typedef struct AVFormatInternal AVFormatInternal;
  type AVFormatContext (line 1328) | typedef struct AVFormatContext {
  type AVDurationEstimationMethod (line 1983) | enum AVDurationEstimationMethod
  type AVPacketList (line 1985) | typedef struct AVPacketList {
  type AVPacketSideDataType (line 2149) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 2161) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 2171) | enum AVPacketSideDataType
  type AVMediaType (line 2354) | enum AVMediaType
  type AVCodecID (line 2679) | enum AVCodecID
  type AVMediaType (line 2681) | enum AVMediaType
  type AVFormatContext (line 2698) | struct AVFormatContext
  type AVCodecID (line 2774) | enum AVCodecID
  type AVCodecTag (line 2774) | struct AVCodecTag
  type AVCodecTag (line 2784) | struct AVCodecTag
  type AVCodecID (line 2784) | enum AVCodecID
  type AVCodecTag (line 2795) | struct AVCodecTag
  type AVCodecID (line 2795) | enum AVCodecID
  type AVCodecID (line 2933) | enum AVCodecID
  type AVCodecTag (line 2951) | struct AVCodecTag
  type AVCodecTag (line 2955) | struct AVCodecTag
  type AVCodecTag (line 2959) | struct AVCodecTag
  type AVCodecTag (line 2963) | struct AVCodecTag
  type AVTimebaseSource (line 3033) | enum AVTimebaseSource {
  type AVTimebaseSource (line 3054) | enum AVTimebaseSource

FILE: ThirdParty/ffmpeg/include/libavformat/avio.h
  type AVIOInterruptCB (line 58) | typedef struct AVIOInterruptCB {
  type AVIODirEntryType (line 66) | enum AVIODirEntryType {
  type AVIODirEntry (line 86) | typedef struct AVIODirEntry {
  type AVIODirContext (line 103) | typedef struct AVIODirContext {
  type AVIODataMarkerType (line 111) | enum AVIODataMarkerType {
  type AVIOContext (line 161) | typedef struct AVIOContext {
  type AVIODataMarkerType (line 524) | enum AVIODataMarkerType
  function av_always_inline (line 557) | static av_always_inline int64_t avio_tell(AVIOContext *s)
  type AVBPrint (line 822) | struct AVBPrint
  type AVBPrint (line 830) | struct AVBPrint

FILE: ThirdParty/ffmpeg/include/libavutil/aes.h
  type AVAES (line 37) | struct AVAES
  type AVAES (line 42) | struct AVAES
  type AVAES (line 49) | struct AVAES
  type AVAES (line 59) | struct AVAES

FILE: ThirdParty/ffmpeg/include/libavutil/aes_ctr.h
  type AVAESCTR (line 33) | struct AVAESCTR
  type AVAESCTR (line 38) | struct AVAESCTR
  type AVAESCTR (line 44) | struct AVAESCTR
  type AVAESCTR (line 49) | struct AVAESCTR
  type AVAESCTR (line 57) | struct AVAESCTR
  type AVAESCTR (line 62) | struct AVAESCTR
  type AVAESCTR (line 67) | struct AVAESCTR
  type AVAESCTR (line 72) | struct AVAESCTR
  type AVAESCTR (line 77) | struct AVAESCTR
  type AVAESCTR (line 82) | struct AVAESCTR

FILE: ThirdParty/ffmpeg/include/libavutil/audio_fifo.h
  type AVAudioFifo (line 49) | typedef struct AVAudioFifo AVAudioFifo;
  type AVSampleFormat (line 66) | enum AVSampleFormat

FILE: ThirdParty/ffmpeg/include/libavutil/avstring.h
  function av_strnlen (line 140) | static inline size_t av_strnlen(const char *s, size_t len)
  function av_const (line 206) | static inline av_const int av_isdigit(int c)
  function av_const (line 214) | static inline av_const int av_isgraph(int c)
  function av_const (line 222) | static inline av_const int av_isspace(int c)
  function av_const (line 231) | static inline av_const int av_toupper(int c)
  function av_const (line 241) | static inline av_const int av_tolower(int c)
  function av_const (line 251) | static inline av_const int av_isxdigit(int c)
  type AVEscapeMode (line 313) | enum AVEscapeMode {
  type AVEscapeMode (line 354) | enum AVEscapeMode

FILE: ThirdParty/ffmpeg/include/libavutil/avutil.h
  type AVMediaType (line 199) | enum AVMediaType {
  type AVMediaType (line 213) | enum AVMediaType
  type AVPictureType (line 272) | enum AVPictureType {
  type AVPictureType (line 290) | enum AVPictureType

FILE: ThirdParty/ffmpeg/include/libavutil/blowfish.h
  type AVBlowfish (line 35) | typedef struct AVBlowfish {
  type AVBlowfish (line 52) | struct AVBlowfish
  type AVBlowfish (line 62) | struct AVBlowfish
  type AVBlowfish (line 75) | struct AVBlowfish

FILE: ThirdParty/ffmpeg/include/libavutil/bprint.h
  type tm (line 148) | struct tm
  type tm (line 160) | struct tm
  function av_bprint_is_complete (line 185) | static inline int av_bprint_is_complete(const AVBPrint *buf)
  type AVEscapeMode (line 217) | enum AVEscapeMode

FILE: ThirdParty/ffmpeg/include/libavutil/bswap.h
  function av_bswap16 (line 58) | uint16_t av_bswap16(uint16_t x)
  function av_bswap32 (line 66) | uint32_t av_bswap32(uint32_t x)
  function av_bswap64 (line 73) | static inline uint64_t av_const av_bswap64(uint64_t x)

FILE: ThirdParty/ffmpeg/include/libavutil/buffer.h
  type AVBuffer (line 73) | typedef struct AVBuffer AVBuffer;
  type AVBufferRef (line 81) | typedef struct AVBufferRef {
  type AVBufferPool (line 238) | typedef struct AVBufferPool AVBufferPool;

FILE: ThirdParty/ffmpeg/include/libavutil/camellia.h
  type AVCAMELLIA (line 38) | struct AVCAMELLIA
  type AVCAMELLIA (line 44) | struct AVCAMELLIA
  type AVCAMELLIA (line 53) | struct AVCAMELLIA
  type AVCAMELLIA (line 65) | struct AVCAMELLIA

FILE: ThirdParty/ffmpeg/include/libavutil/cast5.h
  type AVCAST5 (line 38) | struct AVCAST5
  type AVCAST5 (line 44) | struct AVCAST5
  type AVCAST5 (line 53) | struct AVCAST5
  type AVCAST5 (line 64) | struct AVCAST5
  type AVCAST5 (line 76) | struct AVCAST5

FILE: ThirdParty/ffmpeg/include/libavutil/channel_layout.h
  type AVMatrixEncoding (line 114) | enum AVMatrixEncoding {
  type AVBPrint (line 167) | struct AVBPrint
  type AVBPrint (line 171) | struct AVBPrint

FILE: ThirdParty/ffmpeg/include/libavutil/common.h
  function av_clip_c (line 127) | int av_clip_c(int a, int amin, int amax)
  function av_clip64_c (line 144) | int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
  function av_clip_uint8_c (line 159) | uint8_t av_clip_uint8_c(int a)
  function av_clip_int8_c (line 170) | int8_t av_clip_int8_c(int a)
  function av_clip_uint16_c (line 181) | uint16_t av_clip_uint16_c(int a)
  function av_clip_int16_c (line 192) | int16_t av_clip_int16_c(int a)
  function av_clipl_int32_c (line 203) | int32_t av_clipl_int32_c(int64_t a)
  function av_clip_intp2_c (line 215) | int av_clip_intp2_c(int a, int p)
  function av_clip_uintp2_c (line 229) | unsigned av_clip_uintp2_c(int a, int p)
  function av_mod_uintp2_c (line 241) | unsigned av_mod_uintp2_c(unsigned a, unsigned p)
  function av_always_inline (line 253) | static av_always_inline int av_sat_add32_c(int a, int b)
  function av_always_inline (line 265) | static av_always_inline int av_sat_dadd32_c(int a, int b)
  function av_always_inline (line 277) | static av_always_inline int av_sat_sub32_c(int a, int b)
  function av_always_inline (line 289) | static av_always_inline int av_sat_dsub32_c(int a, int b)
  function av_clipf_c (line 301) | float av_clipf_c(float a, float amin, float amax)
  function av_clipd_c (line 318) | double av_clipd_c(double a, double amin, double amax)
  function av_ceil_log2_c (line 332) | int av_ceil_log2_c(int x)
  function av_popcount_c (line 342) | int av_popcount_c(uint32_t x)
  function av_popcount64_c (line 356) | int av_popcount64_c(uint64_t x)
  function av_parity_c (line 361) | int av_parity_c(uint32_t v)

FILE: ThirdParty/ffmpeg/include/libavutil/crc.h
  type AVCRC (line 47) | typedef uint32_t AVCRC;
  type AVCRCId (line 49) | typedef enum {

FILE: ThirdParty/ffmpeg/include/libavutil/des.h
  type AVDES (line 33) | typedef struct AVDES {
  type AVDES (line 50) | struct AVDES
  type AVDES (line 62) | struct AVDES
  type AVDES (line 71) | struct AVDES

FILE: ThirdParty/ffmpeg/include/libavutil/dict.h
  type AVDictionaryEntry (line 81) | typedef struct AVDictionaryEntry {
  type AVDictionary (line 86) | typedef struct AVDictionary AVDictionary;

FILE: ThirdParty/ffmpeg/include/libavutil/downmix_info.h
  type AVDownmixType (line 44) | enum AVDownmixType {
  type AVDownmixInfo (line 58) | typedef struct AVDownmixInfo {

FILE: ThirdParty/ffmpeg/include/libavutil/encryption_info.h
  type AVSubsampleEncryptionInfo (line 25) | typedef struct AVSubsampleEncryptionInfo {
  type AVEncryptionInfo (line 43) | typedef struct AVEncryptionInfo {
  type AVEncryptionInitInfo (line 88) | typedef struct AVEncryptionInitInfo {

FILE: ThirdParty/ffmpeg/include/libavutil/eval.h
  type AVExpr (line 31) | typedef struct AVExpr AVExpr;

FILE: ThirdParty/ffmpeg/include/libavutil/fifo.h
  type AVFifoBuffer (line 31) | typedef struct AVFifoBuffer {

FILE: ThirdParty/ffmpeg/include/libavutil/frame.h
  type AVFrameSideDataType (line 48) | enum AVFrameSideDataType {
  type AVActiveFormatDescription (line 163) | enum AVActiveFormatDescription {
  type AVFrameSideData (line 180) | typedef struct AVFrameSideData {
  type AVFrame (line 218) | typedef struct AVFrame {
  type AVColorSpace (line 649) | enum AVColorSpace
  type AVColorRange (line 653) | enum AVColorRange
  type AVColorSpace (line 660) | enum AVColorSpace
  type AVFrameSideDataType (line 818) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 834) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 842) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 848) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 887) | enum AVFrameSideDataType

FILE: ThirdParty/ffmpeg/include/libavutil/hash.h
  type AVHashContext (line 116) | struct AVHashContext
  type AVHashContext (line 126) | struct AVHashContext
  type AVHashContext (line 141) | struct AVHashContext
  type AVHashContext (line 168) | struct AVHashContext
  type AVHashContext (line 175) | struct AVHashContext
  type AVHashContext (line 185) | struct AVHashContext
  type AVHashContext (line 187) | struct AVHashContext
  type AVHashContext (line 204) | struct AVHashContext
  type AVHashContext (line 219) | struct AVHashContext
  type AVHashContext (line 237) | struct AVHashContext
  type AVHashContext (line 255) | struct AVHashContext
  type AVHashContext (line 262) | struct AVHashContext

FILE: ThirdParty/ffmpeg/include/libavutil/hmac.h
  type AVHMACType (line 33) | enum AVHMACType {
  type AVHMAC (line 42) | typedef struct AVHMAC AVHMAC;
  type AVHMACType (line 48) | enum AVHMACType

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext.h
  type AVHWDeviceType (line 27) | enum AVHWDeviceType {
  type AVHWDeviceInternal (line 41) | typedef struct AVHWDeviceInternal AVHWDeviceInternal;
  type AVHWDeviceContext (line 60) | typedef struct AVHWDeviceContext {
  type AVHWFramesInternal (line 111) | typedef struct AVHWFramesInternal AVHWFramesInternal;
  type AVHWFramesContext (line 123) | typedef struct AVHWFramesContext {
  type AVHWDeviceType (line 238) | enum AVHWDeviceType
  type AVHWDeviceType (line 246) | enum AVHWDeviceType
  type AVHWDeviceType (line 256) | enum AVHWDeviceType
  type AVHWDeviceType (line 256) | enum AVHWDeviceType
  type AVHWDeviceType (line 265) | enum AVHWDeviceType
  type AVHWDeviceType (line 302) | enum AVHWDeviceType
  type AVHWDeviceType (line 327) | enum AVHWDeviceType
  type AVHWFrameTransferDirection (line 394) | enum AVHWFrameTransferDirection {
  type AVHWFrameTransferDirection (line 422) | enum AVHWFrameTransferDirection
  type AVPixelFormat (line 423) | enum AVPixelFormat
  type AVHWFramesConstraints (line 432) | typedef struct AVHWFramesConstraints {
  type AVPixelFormat (line 579) | enum AVPixelFormat

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_cuda.h
  type AVCUDADeviceContextInternal (line 37) | typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal;
  type AVCUDADeviceContext (line 42) | typedef struct AVCUDADeviceContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_d3d11va.h
  type AVD3D11VADeviceContext (line 45) | typedef struct AVD3D11VADeviceContext {
  type AVD3D11FrameDescriptor (line 109) | typedef struct AVD3D11FrameDescriptor {
  type AVD3D11VAFramesContext (line 131) | typedef struct AVD3D11VAFramesContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_drm.h
  type AVDRMObjectDescriptor (line 48) | typedef struct AVDRMObjectDescriptor {
  type AVDRMPlaneDescriptor (line 74) | typedef struct AVDRMPlaneDescriptor {
  type AVDRMLayerDescriptor (line 96) | typedef struct AVDRMLayerDescriptor {
  type AVDRMFrameDescriptor (line 133) | typedef struct AVDRMFrameDescriptor {
  type AVDRMDeviceContext (line 157) | typedef struct AVDRMDeviceContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_dxva2.h
  type AVDXVA2DeviceContext (line 39) | typedef struct AVDXVA2DeviceContext {
  type AVDXVA2FramesContext (line 46) | typedef struct AVDXVA2FramesContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_mediacodec.h
  type AVMediaCodecDeviceContext (line 27) | typedef struct AVMediaCodecDeviceContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_qsv.h
  type AVQSVDeviceContext (line 35) | typedef struct AVQSVDeviceContext {
  type AVQSVFramesContext (line 42) | typedef struct AVQSVFramesContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_vaapi.h
  type AVVAAPIDeviceContext (line 68) | typedef struct AVVAAPIDeviceContext {
  type AVVAAPIFramesContext (line 88) | typedef struct AVVAAPIFramesContext {
  type AVVAAPIHWConfig (line 110) | typedef struct AVVAAPIHWConfig {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_vdpau.h
  type AVVDPAUDeviceContext (line 35) | typedef struct AVVDPAUDeviceContext {

FILE: ThirdParty/ffmpeg/include/libavutil/hwcontext_videotoolbox.h
  type AVPixelFormat (line 46) | enum AVPixelFormat
  type AVPixelFormat (line 52) | enum AVPixelFormat

FILE: ThirdParty/ffmpeg/include/libavutil/imgutils.h
  type AVPixelFormat (line 59) | enum AVPixelFormat
  type AVPixelFormat (line 68) | enum AVPixelFormat
  type AVPixelFormat (line 81) | enum AVPixelFormat
  type AVPixelFormat (line 95) | enum AVPixelFormat
  type AVPixelFormat (line 121) | enum AVPixelFormat
  type AVPixelFormat (line 139) | enum AVPixelFormat
  type AVPixelFormat (line 169) | enum AVPixelFormat
  type AVPixelFormat (line 181) | enum AVPixelFormat
  type AVPixelFormat (line 202) | enum AVPixelFormat
  type AVPixelFormat (line 229) | enum AVPixelFormat
  type AVPixelFormat (line 269) | enum AVPixelFormat
  type AVColorRange (line 269) | enum AVColorRange

FILE: ThirdParty/ffmpeg/include/libavutil/intfloat.h
  function av_always_inline (line 40) | static av_always_inline float av_int2float(uint32_t i)
  function av_always_inline (line 50) | static av_always_inline uint32_t av_float2int(float f)
  function av_always_inline (line 60) | static av_always_inline double av_int2double(uint64_t i)
  function av_always_inline (line 70) | static av_always_inline uint64_t av_double2int(double f)

FILE: ThirdParty/ffmpeg/include/libavutil/intreadwrite.h
  type av_alias64 (line 27) | typedef union {
  type av_alias32 (line 36) | typedef union {
  type av_alias16 (line 43) | typedef union {

FILE: ThirdParty/ffmpeg/include/libavutil/lfg.h
  type AVLFG (line 27) | typedef struct AVLFG {
  function av_lfg_get (line 47) | static inline unsigned int av_lfg_get(AVLFG *c){
  function av_mlfg_get (line 57) | static inline unsigned int av_mlfg_get(AVLFG *c){

FILE: ThirdParty/ffmpeg/include/libavutil/log.h
  type AVClassCategory (line 29) | typedef enum {
  type AVOptionRanges (line 60) | struct AVOptionRanges
  type AVClass (line 67) | typedef struct AVClass {

FILE: ThirdParty/ffmpeg/include/libavutil/mastering_display_metadata.h
  type AVMasteringDisplayMetadata (line 38) | typedef struct AVMasteringDisplayMetadata {
  type AVContentLightMetadata (line 98) | typedef struct AVContentLightMetadata {

FILE: ThirdParty/ffmpeg/include/libavutil/mathematics.h
  type AVRounding (line 79) | enum AVRounding {
  type AVRounding (line 140) | enum AVRounding
  type AVRounding (line 161) | enum AVRounding

FILE: ThirdParty/ffmpeg/include/libavutil/md5.h
  type AVMD5 (line 46) | struct AVMD5
  type AVMD5 (line 51) | struct AVMD5
  type AVMD5 (line 58) | struct AVMD5
  type AVMD5 (line 68) | struct AVMD5
  type AVMD5 (line 70) | struct AVMD5
  type AVMD5 (line 79) | struct AVMD5

FILE: ThirdParty/ffmpeg/include/libavutil/mem.h
  function av_size_mult (line 669) | static inline int av_size_mult(size_t a, size_t b, size_t *r)

FILE: ThirdParty/ffmpeg/include/libavutil/motion_vector.h
  type AVMotionVector (line 24) | typedef struct AVMotionVector {

FILE: ThirdParty/ffmpeg/include/libavutil/murmur3.h
  type AVMurMur3 (line 68) | struct AVMurMur3
  type AVMurMur3 (line 80) | struct AVMurMur3
  type AVMurMur3 (line 93) | struct AVMurMur3
  type AVMurMur3 (line 103) | struct AVMurMur3
  type AVMurMur3 (line 105) | struct AVMurMur3
  type AVMurMur3 (line 114) | struct AVMurMur3

FILE: ThirdParty/ffmpeg/include/libavutil/opt.h
  type AVOptionType (line 221) | enum AVOptionType{
  type AVOption (line 246) | typedef struct AVOption {
  type AVOptionRange (line 305) | typedef struct AVOptionRange {
  type AVOptionRanges (line 328) | typedef struct AVOptionRanges {
  type AVDictionary (line 478) | struct AVDictionary
  type AVDictionary (line 496) | struct AVDictionary
  type AVPixelFormat (line 686) | enum AVPixelFormat
  type AVSampleFormat (line 687) | enum AVSampleFormat
  type AVPixelFormat (line 740) | enum AVPixelFormat
  type AVSampleFormat (line 741) | enum AVSampleFormat

FILE: ThirdParty/ffmpeg/include/libavutil/parseutils.h
  type tm (line 186) | struct tm
  type tm (line 191) | struct tm

FILE: ThirdParty/ffmpeg/include/libavutil/pixdesc.h
  type AVComponentDescriptor (line 31) | typedef struct AVComponentDescriptor {
  type AVPixFmtDescriptor (line 81) | typedef struct AVPixFmtDescriptor {
  type AVPixelFormat (line 215) | enum AVPixelFormat
  type AVPixelFormat (line 230) | enum AVPixelFormat
  type AVPixelFormat (line 242) | enum AVPixelFormat
  type AVPixelFormat (line 249) | enum AVPixelFormat
  type AVColorRange (line 254) | enum AVColorRange
  type AVColorPrimaries (line 264) | enum AVColorPrimaries
  type AVColorTransferCharacteristic (line 274) | enum AVColorTransferCharacteristic
  type AVColorSpace (line 284) | enum AVColorSpace
  type AVChromaLocation (line 294) | enum AVChromaLocation
  type AVPixelFormat (line 312) | enum AVPixelFormat
  type AVPixelFormat (line 320) | enum AVPixelFormat
  type AVPixelFormat (line 333) | enum AVPixelFormat
  type AVPixelFormat (line 381) | enum AVPixelFormat
  type AVPixelFormat (line 381) | enum AVPixelFormat
  type AVPixelFormat (line 408) | enum AVPixelFormat
  type AVPixelFormat (line 409) | enum AVPixelFormat
  type AVPixelFormat (line 430) | enum AVPixelFormat
  type AVPixelFormat (line 430) | enum AVPixelFormat
  type AVPixelFormat (line 430) | enum AVPixelFormat
  type AVPixelFormat (line 431) | enum AVPixelFormat

FILE: ThirdParty/ffmpeg/include/libavutil/pixfmt.h
  type AVPixelFormat (line 60) | enum AVPixelFormat {
  type AVColorPrimaries (line 420) | enum AVColorPrimaries {
  type AVColorTransferCharacteristic (line 444) | enum AVColorTransferCharacteristic {
  type AVColorSpace (line 473) | enum AVColorSpace {
  type AVColorRange (line 496) | enum AVColorRange {
  type AVChromaLocation (line 518) | enum AVChromaLocation {

FILE: ThirdParty/ffmpeg/include/libavutil/rational.h
  type AVRational (line 58) | typedef struct AVRational{
  function AVRational (line 71) | static inline AVRational av_make_q(int num, int den)
  function av_cmp_q (line 89) | static inline int av_cmp_q(AVRational a, AVRational b){
  function av_q2d (line 104) | static inline double av_q2d(AVRational a){
  function av_always_inline (line 159) | static av_always_inline AVRational av_inv_q(AVRational q)

FILE: ThirdParty/ffmpeg/include/libavutil/rc4.h
  type AVRC4 (line 32) | typedef struct AVRC4 {
  type AVRC4 (line 49) | struct AVRC4
  type AVRC4 (line 60) | struct AVRC4

FILE: ThirdParty/ffmpeg/include/libavutil/replaygain.h
  type AVReplayGain (line 29) | typedef struct AVReplayGain {

FILE: ThirdParty/ffmpeg/include/libavutil/ripemd.h
  type AVRIPEMD (line 46) | struct AVRIPEMD
  type AVRIPEMD (line 51) | struct AVRIPEMD
  type AVRIPEMD (line 60) | struct AVRIPEMD
  type AVRIPEMD (line 70) | struct AVRIPEMD
  type AVRIPEMD (line 72) | struct AVRIPEMD
  type AVRIPEMD (line 81) | struct AVRIPEMD

FILE: ThirdParty/ffmpeg/include/libavutil/samplefmt.h
  type AVSampleFormat (line 58) | enum AVSampleFormat {
  type AVSampleFormat (line 81) | enum AVSampleFormat
  type AVSampleFormat (line 87) | enum AVSampleFormat
  type AVSampleFormat (line 95) | enum AVSampleFormat
  type AVSampleFormat (line 95) | enum AVSampleFormat
  type AVSampleFormat (line 106) | enum AVSampleFormat
  type AVSampleFormat (line 106) | enum AVSampleFormat
  type AVSampleFormat (line 117) | enum AVSampleFormat
  type AVSampleFormat (line 117) | enum AVSampleFormat
  type AVSampleFormat (line 131) | enum AVSampleFormat
  type AVSampleFormat (line 140) | enum AVSampleFormat
  type AVSampleFormat (line 148) | enum AVSampleFormat
  type AVSampleFormat (line 161) | enum AVSampleFormat
  type AVSampleFormat (line 205) | enum AVSampleFormat
  type AVSampleFormat (line 227) | enum AVSampleFormat
  type AVSampleFormat (line 239) | enum AVSampleFormat
  type AVSampleFormat (line 254) | enum AVSampleFormat
  type AVSampleFormat (line 266) | enum AVSampleFormat

FILE: ThirdParty/ffmpeg/include/libavutil/sha.h
  type AVSHA (line 54) | struct AVSHA
  type AVSHA (line 59) | struct AVSHA
  type AVSHA (line 68) | struct AVSHA
  type AVSHA (line 78) | struct AVSHA
  type AVSHA (line 80) | struct AVSHA
  type AVSHA (line 89) | struct AVSHA

FILE: ThirdParty/ffmpeg/include/libavutil/sha512.h
  type AVSHA512 (line 56) | struct AVSHA512
  type AVSHA512 (line 61) | struct AVSHA512
  type AVSHA512 (line 70) | struct AVSHA512
  type AVSHA512 (line 80) | struct AVSHA512
  type AVSHA512 (line 82) | struct AVSHA512
  type AVSHA512 (line 91) | struct AVSHA512

FILE: ThirdParty/ffmpeg/include/libavutil/spherical.h
  type AVSphericalProjection (line 51) | enum AVSphericalProjection {
  type AVSphericalMapping (line 82) | typedef struct AVSphericalMapping {
  type AVSphericalProjection (line 217) | enum AVSphericalProjection

FILE: ThirdParty/ffmpeg/include/libavutil/stereo3d.h
  type AVStereo3DType (line 51) | enum AVStereo3DType {
  type AVStereo3DView (line 147) | enum AVStereo3DView {
  type AVStereo3D (line 176) | typedef struct AVStereo3D {

FILE: ThirdParty/ffmpeg/include/libavutil/tea.h
  type AVTEA (line 37) | struct AVTEA
  type AVTEA (line 43) | struct AVTEA
  type AVTEA (line 52) | struct AVTEA
  type AVTEA (line 64) | struct AVTEA

FILE: ThirdParty/ffmpeg/include/libavutil/threadmessage.h
  type AVThreadMessageQueue (line 22) | typedef struct AVThreadMessageQueue AVThreadMessageQueue;
  type AVThreadMessageFlags (line 24) | typedef enum AVThreadMessageFlags {

FILE: ThirdParty/ffmpeg/include/libavutil/timecode.h
  type AVTimecodeFlag (line 35) | enum AVTimecodeFlag {
  type AVTimecode (line 41) | typedef struct {

FILE: ThirdParty/ffmpeg/include/libavutil/tree.h
  type AVTreeNode (line 45) | struct AVTreeNode
  type AVTreeNode (line 51) | struct AVTreeNode
  type AVTreeNode (line 67) | struct AVTreeNode
  type AVTreeNode (line 114) | struct AVTreeNode
  type AVTreeNode (line 116) | struct AVTreeNode
  type AVTreeNode (line 118) | struct AVTreeNode
  type AVTreeNode (line 130) | struct AVTreeNode

FILE: ThirdParty/ffmpeg/include/libavutil/twofish.h
  type AVTWOFISH (line 38) | struct AVTWOFISH
  type AVTWOFISH (line 44) | struct AVTWOFISH
  type AVTWOFISH (line 53) | struct AVTWOFISH
  type AVTWOFISH (line 65) | struct AVTWOFISH

FILE: ThirdParty/ffmpeg/include/libavutil/xtea.h
  type AVXTEA (line 35) | typedef struct AVXTEA {
  type AVXTEA (line 51) | struct AVXTEA
  type AVXTEA (line 60) | struct AVXTEA
  type AVXTEA (line 73) | struct AVXTEA
  type AVXTEA (line 87) | struct AVXTEA

FILE: ThirdParty/ffmpeg/include/libpostproc/postprocess.h
  type pp_context (line 58) | typedef void pp_context;
  type pp_mode (line 59) | typedef void pp_mode;
  type pp_context (line 62) | typedef pp_context pp_context_t;
  type pp_mode (line 63) | typedef pp_mode pp_mode_t;

FILE: ThirdParty/ffmpeg/include/libswresample/swresample.h
  type SwrDitherType (line 141) | enum SwrDitherType {
  type SwrEngine (line 159) | enum SwrEngine {
  type SwrFilterType (line 166) | enum SwrFilterType {
  type SwrContext (line 182) | typedef struct SwrContext SwrContext;
  type SwrContext (line 207) | struct SwrContext
  type SwrContext (line 219) | struct SwrContext
  type SwrContext (line 228) | struct SwrContext
  type SwrContext (line 250) | struct SwrContext
  type SwrContext (line 250) | struct SwrContext
  type AVSampleFormat (line 251) | enum AVSampleFormat
  type AVSampleFormat (line 252) | enum AVSampleFormat
  type SwrContext (line 267) | struct SwrContext
  type SwrContext (line 279) | struct SwrContext
  type SwrContext (line 306) | struct SwrContext
  type SwrContext (line 326) | struct SwrContext
  type SwrContext (line 353) | struct SwrContext
  type SwrContext (line 363) | struct SwrContext
  type AVMatrixEncoding (line 392) | enum AVMatrixEncoding
  type SwrContext (line 404) | struct SwrContext
  type SwrContext (line 424) | struct SwrContext
  type SwrContext (line 437) | struct SwrContext
  type SwrContext (line 463) | struct SwrContext
  type SwrContext (line 481) | struct SwrContext

FILE: ThirdParty/ffmpeg/include/libswscale/swscale.h
  type SwsVector (line 109) | typedef struct SwsVector {
  type SwsFilter (line 115) | typedef struct SwsFilter {
  type SwsContext (line 122) | struct SwsContext
  type AVPixelFormat (line 128) | enum AVPixelFormat
  type AVPixelFormat (line 134) | enum AVPixelFormat
  type AVPixelFormat (line 141) | enum AVPixelFormat
  type SwsContext (line 148) | struct SwsContext
  type SwsContext (line 157) | struct SwsContext
  type SwsContext (line 163) | struct SwsContext
  type SwsContext (line 186) | struct SwsContext
  type AVPixelFormat (line 186) | enum AVPixelFormat
  type AVPixelFormat (line 187) | enum AVPixelFormat
  type SwsContext (line 217) | struct SwsContext
  type SwsContext (line 231) | struct SwsContext
  type SwsContext (line 238) | struct SwsContext
  type SwsContext (line 294) | struct SwsContext
  type SwsContext (line 294) | struct SwsContext
  type AVPixelFormat (line 295) | enum AVPixelFormat
  type AVPixelFormat (line 296) | enum AVPixelFormat

FILE: ThirdParty/libopusenc/include/opusenc.h
  type OpusEncCallbacks (line 161) | typedef struct {
  type OggOpusComments (line 171) | typedef struct OggOpusComments OggOpusComments;
  type OggOpusEnc (line 174) | typedef struct OggOpusEnc OggOpusEnc;

FILE: ThirdParty/libopusenc/src/arch.h
  type spx_int16_t (line 80) | typedef spx_int16_t spx_word16_t;
  type spx_int32_t (line 81) | typedef spx_int32_t spx_word32_t;
  type spx_word32_t (line 82) | typedef spx_word32_t spx_mem_t;
  type spx_word16_t (line 83) | typedef spx_word16_t spx_coef_t;
  type spx_word16_t (line 84) | typedef spx_word16_t spx_lsp_t;
  type spx_word32_t (line 85) | typedef spx_word32_t spx_sig_t;
  type spx_mem_t (line 128) | typedef float spx_mem_t;
  type spx_coef_t (line 129) | typedef float spx_coef_t;
  type spx_lsp_t (line 130) | typedef float spx_lsp_t;
  type spx_sig_t (line 131) | typedef float spx_sig_t;
  type spx_word16_t (line 132) | typedef float spx_word16_t;
  type spx_word32_t (line 133) | typedef float spx_word32_t;

FILE: ThirdParty/libopusenc/src/ogg_packer.c
  function ogg_page_checksum_set (line 105) | static void ogg_page_checksum_set(unsigned char *page, oggp_int32 len){
  type oggp_page (line 123) | typedef struct {
  type oggpacker (line 133) | struct oggpacker {
  function oggpacker (line 156) | oggpacker *oggp_create(oggp_int32 serialno) {
  function oggp_destroy (line 199) | void oggp_destroy(oggpacker *oggp) {
  function oggp_set_muxing_delay (line 208) | void oggp_set_muxing_delay(oggpacker *oggp, oggp_uint64 delay) {
  function shift_buffer (line 212) | static void shift_buffer(oggpacker *oggp) {
  function oggp_commit_packet (line 264) | int oggp_commit_packet(oggpacker *oggp, oggp_int32 bytes, oggp_uint64 gr...
  function oggp_flush_page (line 313) | int oggp_flush_page(oggpacker *oggp) {
  function oggp_get_next_page (line 368) | int oggp_get_next_page(oggpacker *oggp, unsigned char **page, oggp_int32...
  function oggp_chain (line 430) | int oggp_chain(oggpacker *oggp, oggp_int32 serialno) {

FILE: ThirdParty/libopusenc/src/ogg_packer.h
  type oggp_uint64 (line 35) | typedef unsigned long long oggp_uint64;
  type oggp_uint32 (line 36) | typedef unsigned oggp_uint32;
  type oggp_int32 (line 37) | typedef int oggp_int32;
  type oggpacker (line 39) | typedef struct oggpacker oggpacker;

FILE: ThirdParty/libopusenc/src/opus_header.c
  type Packet (line 60) | typedef struct {
  type ROPacket (line 66) | typedef struct {
  function write_uint32 (line 72) | static int write_uint32(Packet *p, opus_uint32 val)
  function write_uint16 (line 84) | static int write_uint16(Packet *p, opus_uint16 val)
  function write_chars (line 94) | static int write_chars(Packet *p, const unsigned char *str, int nb_chars)
  function opus_header_to_packet (line 104) | int opus_header_to_packet(const OpusHeader *h, unsigned char *packet, in...
  function comment_init (line 187) | void comment_init(char **comments, int* length, const char *vendor_string)
  function comment_add (line 203) | int comment_add(char **comments, int* length, const char *tag, const cha...
  function comment_pad (line 227) | void comment_pad(char **comments, int* length, int amount)
  function comment_replace_vendor_string (line 244) | int comment_replace_vendor_string(char **comments, int* length, const ch...

FILE: ThirdParty/libopusenc/src/opus_header.h
  type OpusHeader (line 34) | typedef struct {

FILE: ThirdParty/libopusenc/src/opusenc.c
  type StdioObject (line 71) | struct StdioObject {
  type OggOpusComments (line 75) | struct OggOpusComments {
  function OggOpusComments (line 82) | OggOpusComments *ope_comments_create() {
  function OggOpusComments (line 100) | OggOpusComments *ope_comments_copy(OggOpusComments *comments) {
  function ope_comments_destroy (line 116) | void ope_comments_destroy(OggOpusComments *comments){
  function ope_comments_add (line 122) | int ope_comments_add(OggOpusComments *comments, const char *tag, const c...
  function ope_comments_add_string (line 130) | int ope_comments_add_string(OggOpusComments *comments, const char *tag_a...
  function ope_comments_add_picture (line 136) | int ope_comments_add_picture(OggOpusComments *comments, const char *file...
  type EncStream (line 149) | typedef struct EncStream EncStream;
  type EncStream (line 151) | struct EncStream {
  type OggOpusEnc (line 167) | struct OggOpusEnc {
  function output_pages (line 197) | static void output_pages(OggOpusEnc *enc) {
  function oe_flush_page (line 204) | static void oe_flush_page(OggOpusEnc *enc) {
  function stdio_write (line 209) | int stdio_write(void *user_data, const unsigned char *ptr, opus_int32 le...
  function stdio_close (line 214) | int stdio_close(void *user_data) {
  function OggOpusEnc (line 228) | OggOpusEnc *ope_encoder_create_file(const char *path, OggOpusComments *c...
  function EncStream (line 245) | EncStream *stream_create(OggOpusComments *comments) {
  function stream_destroy (line 267) | static void stream_destroy(EncStream *stream) {
  function OggOpusEnc (line 273) | OggOpusEnc *ope_encoder_create_callbacks(const OpusEncCallbacks *callbac...
  function OPE_EXPORT (line 369) | OPE_EXPORT OggOpusEnc *ope_encoder_create_pull(OggOpusComments *comments...
  function init_stream (line 375) | static void init_stream(OggOpusEnc *enc) {
  function shift_buffer (line 411) | static void shift_buffer(OggOpusEnc *enc) {
  function encode_buffer (line 421) | static void encode_buffer(OggOpusEnc *enc) {
  function ope_encoder_write_float (line 528) | int ope_encoder_write_float(OggOpusEnc *enc, const float *pcm, int sampl...
  function ope_encoder_write (line 572) | int ope_encoder_write(OggOpusEnc *enc, const opus_int16 *pcm, int sample...
  function OPE_EXPORT (line 618) | OPE_EXPORT int ope_encoder_get_page(OggOpusEnc *enc, unsigned char **pag...
  function ope_encoder_drain (line 629) | int ope_encoder_drain(OggOpusEnc *enc) {
  function ope_encoder_destroy (line 666) | void ope_encoder_destroy(OggOpusEnc *enc) {
  function ope_encoder_chain_current (line 685) | int ope_encoder_chain_current(OggOpusEnc *enc, OggOpusComments *comments) {
  function ope_encoder_continue_new_file (line 691) | int ope_encoder_continue_new_file(OggOpusEnc *enc, const char *path, Ogg...
  function ope_encoder_continue_new_callbacks (line 709) | int ope_encoder_continue_new_callbacks(OggOpusEnc *enc, void *user_data,...
  function ope_encoder_flush_header (line 723) | int ope_encoder_flush_header(OggOpusEnc *enc) {
  function ope_encoder_ctl (line 732) | int ope_encoder_ctl(OggOpusEnc *enc, int request, ...) {
  function ope_get_abi_version (line 952) | int ope_get_abi_version(void) {
  function extend_signal (line 958) | static void extend_signal(float *x, int before, int after, int channels) {
  function vorbis_lpc_from_data (line 1023) | static void vorbis_lpc_from_data(float *data, float *lpci, int n, int st...

FILE: ThirdParty/libopusenc/src/picture.c
  function base64_encode (line 46) | void base64_encode(char *dst, const char *src, int len){
  function oi_strncasecmp (line 85) | int oi_strncasecmp(const char *a, const char *b, int n){
  function is_jpeg (line 107) | int is_jpeg(const unsigned char *buf, size_t length){
  function is_png (line 112) | int is_png(const unsigned char *buf, size_t length){
  function is_gif (line 116) | int is_gif(const unsigned char *buf, size_t length){
  function extract_png_params (line 127) | void extract_png_params(const unsigned char *data, size_t data_length,
  function extract_gif_params (line 171) | void extract_gif_params(const unsigned char *data, size_t data_length,
  function extract_jpeg_params (line 189) | void extract_jpeg_params(const unsigned char *data, size_t data_length,

FILE: ThirdParty/libopusenc/src/picture.h
  type picture_format (line 34) | typedef enum{

FILE: ThirdParty/libopusenc/src/resample.c
  function speex_free (line 67) | static void speex_free(void *ptr) { free(ptr); }
  type SpeexResamplerState_ (line 109) | struct SpeexResamplerState_ {
  type FuncDef (line 187) | struct FuncDef {
  type FuncDef (line 192) | struct FuncDef
  type FuncDef (line 196) | struct FuncDef
  type FuncDef (line 198) | struct FuncDef
  type FuncDef (line 200) | struct FuncDef
  type QualityMapping (line 203) | struct QualityMapping {
  type QualityMapping (line 221) | struct QualityMapping
  function compute_func (line 235) | static double compute_func(float x, const struct FuncDef *func)
  function main (line 257) | int main(int argc, char **argv)
  function spx_word16_t (line 270) | static spx_word16_t sinc(float cutoff, float x, int N, const struct Func...
  function spx_word16_t (line 283) | static spx_word16_t sinc(float cutoff, float x, int N, const struct Func...
  function cubic_coef (line 297) | static void cubic_coef(spx_word16_t x, spx_word16_t interp[4])
  function cubic_coef (line 313) | static void cubic_coef(spx_word16_t frac, spx_word16_t interp[4])
  function resampler_basic_direct_single (line 326) | static int resampler_basic_direct_single(SpeexResamplerState *st, spx_ui...
  function resampler_basic_direct_double (line 384) | static int resampler_basic_direct_double(SpeexResamplerState *st, spx_ui...
  function resampler_basic_interpolate_single (line 433) | static int resampler_basic_interpolate_single(SpeexResamplerState *st, s...
  function resampler_basic_interpolate_double (line 496) | static int resampler_basic_interpolate_double(SpeexResamplerState *st, s...
  function resampler_basic_zero (line 560) | static int resampler_basic_zero(SpeexResamplerState *st, spx_uint32_t ch...
  function _muldiv (line 587) | static int _muldiv(spx_uint32_t *result, spx_uint32_t value, spx_uint32_...
  function update_filter (line 600) | static int update_filter(SpeexResamplerState *st)
  function EXPORT (line 789) | EXPORT SpeexResamplerState *speex_resampler_init(spx_uint32_t nb_channel...
  function EXPORT (line 794) | EXPORT SpeexResamplerState *speex_resampler_init_frac(spx_uint32_t nb_ch...
  function EXPORT (line 864) | EXPORT void speex_resampler_destroy(SpeexResamplerState *st)
  function speex_resampler_process_native (line 874) | static int speex_resampler_process_native(SpeexResamplerState *st, spx_u...
  function speex_resampler_magic (line 900) | static int speex_resampler_magic(SpeexResamplerState *st, spx_uint32_t c...
  function EXPORT (line 921) | EXPORT int speex_resampler_process_int(SpeexResamplerState *st, spx_uint...
  function EXPORT (line 962) | EXPORT int speex_resampler_process_float(SpeexResamplerState *st, spx_ui...
  function EXPORT (line 1035) | EXPORT int speex_resampler_process_interleaved_float(SpeexResamplerState...
  function EXPORT (line 1058) | EXPORT int speex_resampler_process_interleaved_int(SpeexResamplerState *...
  function EXPORT (line 1081) | EXPORT int speex_resampler_set_rate(SpeexResamplerState *st, spx_uint32_...
  function EXPORT (line 1086) | EXPORT void speex_resampler_get_rate(SpeexResamplerState *st, spx_uint32...
  function spx_uint32_t (line 1092) | static inline spx_uint32_t _gcd(spx_uint32_t a, spx_uint32_t b)
  function EXPORT (line 1104) | EXPORT int speex_resampler_set_rate_frac(SpeexResamplerState *st, spx_ui...
  function EXPORT (line 1140) | EXPORT void speex_resampler_get_ratio(SpeexResamplerState *st, spx_uint3...
  function EXPORT (line 1146) | EXPORT int speex_resampler_set_quality(SpeexResamplerState *st, int qual...
  function EXPORT (line 1158) | EXPORT void speex_resampler_get_quality(SpeexResamplerState *st, int *qu...
  function EXPORT (line 1163) | EXPORT void speex_resampler_set_input_stride(SpeexResamplerState *st, sp...
  function EXPORT (line 1168) | EXPORT void speex_resampler_get_input_stride(SpeexResamplerState *st, sp...
  function EXPORT (line 1173) | EXPORT void speex_resampler_set_output_stride(SpeexResamplerState *st, s...
  function EXPORT (line 1178) | EXPORT void speex_resampler_get_output_stride(SpeexResamplerState *st, s...
  function EXPORT (line 1183) | EXPORT int speex_resampler_get_input_latency(SpeexResamplerState *st)
  function EXPORT (line 1188) | EXPORT int speex_resampler_get_output_latency(SpeexResamplerState *st)
  function EXPORT (line 1193) | EXPORT int speex_resampler_skip_zeros(SpeexResamplerState *st)
  function EXPORT (line 1201) | EXPORT int speex_resampler_reset_mem(SpeexResamplerState *st)
  function EXPORT (line 1215) | EXPORT const char *speex_resampler_strerror(int err)

FILE: ThirdParty/libopusenc/src/resample_sse.h
  function inner_product_single (line 40) | static inline float inner_product_single(const float *a, const float *b,...
  function interpolate_product_single (line 57) | static inline float interpolate_product_single(const float *a, const flo...
  function inner_product_double (line 78) | static inline double inner_product_double(const float *a, const float *b...
  function interpolate_product_double (line 100) | static inline double interpolate_product_double(const float *a, const fl...

FILE: ThirdParty/libopusenc/src/speex_resampler.h
  type SpeexResamplerState_ (line 95) | struct SpeexResamplerState_
  type SpeexResamplerState (line 96) | typedef struct SpeexResamplerState_ SpeexResamplerState;

FILE: ThirdParty/loopback/cleanup.h
  function class (line 3) | class AudioClientStopOnExit {
  function class (line 17) | class AvRevertMmThreadCharacteristicsOnExit {
  function class (line 29) | class CancelWaitableTimerOnExit {
  function class (line 41) | class CloseHandleOnExit {
  function class (line 54) | class CoTaskMemFreeOnExit {
  function class (line 65) | class CoUninitializeOnExit {
  function class (line 72) | class PropVariantClearOnExit {
  function class (line 86) | class ReleaseOnExit {
  function class (line 97) | class SetEventOnExit {
  function class (line 109) | class WaitForSingleObjectOnExit {

FILE: ThirdParty/loopback/loopback-capture.cpp
  function DWORD (line 17) | DWORD WINAPI LoopbackCaptureThreadFunction(LPVOID pContext) {
  function HRESULT (line 39) | HRESULT LoopbackCapture(
  function HRESULT (line 290) | HRESULT WriteWaveHeader(HMMIO hFile, LPCWAVEFORMATEX pwfx, MMCKINFO *pck...
  function HRESULT (line 367) | HRESULT FinishWaveFile(HMMIO hFile, MMCKINFO *pckRIFF, MMCKINFO *pckData) {

FILE: ThirdParty/loopback/loopback-capture.h
  type LoopbackCaptureThreadFunctionArguments (line 10) | struct LoopbackCaptureThreadFunctionArguments {

FILE: ThirdParty/loopback/main.cpp
  function wmain (line 7) | int _cdecl wmain(int argc, LPCWSTR argv[]) {
  function do_everything (line 20) | int do_everything(int argc, LPCWSTR argv[]) {

FILE: ThirdParty/loopback/prefs.cpp
  function usage (line 13) | void usage(LPCWSTR exe) {
  function HRESULT (line 150) | HRESULT get_default_device(IMMDevice **ppMMDevice) {
  function HRESULT (line 176) | HRESULT list_devices() {
  function HRESULT (line 253) | HRESULT get_specific_device(LPCWSTR szLongName, IMMDevice **ppMMDevice) {
  function HRESULT (line 346) | HRESULT open_file(LPCWSTR szFileName, HMMIO *phFile) {

FILE: ThirdParty/loopback/prefs.h
  function class (line 3) | class CPrefs {

FILE: ThirdParty/opus-1.2.1/include/opus.h
  type OpusEncoder (line 164) | typedef struct OpusEncoder OpusEncoder;
  type OpusDecoder (line 399) | typedef struct OpusDecoder OpusDecoder;
  type OpusRepacketizer (line 754) | typedef struct OpusRepacketizer OpusRepacketizer;

FILE: ThirdParty/opus-1.2.1/include/opus_custom.h
  type OpusCustomEncoder (line 95) | typedef struct OpusCustomEncoder OpusCustomEncoder;
  type OpusCustomDecoder (line 102) | typedef struct OpusCustomDecoder OpusCustomDecoder;
  type OpusCustomMode (line 110) | typedef struct OpusCustomMode OpusCustomMode;

FILE: ThirdParty/opus-1.2.1/include/opus_multistream.h
  type OpusMSEncoder (line 175) | typedef struct OpusMSEncoder OpusMSEncoder;
  type OpusMSDecoder (line 183) | typedef struct OpusMSDecoder OpusMSDecoder;

FILE: ThirdParty/opus-1.2.1/include/opus_types.h
  type opus_int16 (line 40) | typedef int16_t opus_int16;
  type opus_uint16 (line 41) | typedef uint16_t opus_uint16;
  type opus_int32 (line 42) | typedef int32_t opus_int32;
  type opus_uint32 (line 43) | typedef uint32_t opus_uint32;
  type _G_int32_t (line 48) | typedef _G_int32_t opus_int32;
  type _G_uint32_t (line 49) | typedef _G_uint32_t opus_uint32;
  type _G_int16 (line 50) | typedef _G_int16 opus_int16;
  type _G_uint16 (line 51) | typedef _G_uint16 opus_uint16;
  type opus_int16 (line 53) | typedef short opus_int16;
  type opus_uint16 (line 54) | typedef unsigned short opus_uint16;
  type opus_int32 (line 55) | typedef int opus_int32;
  type opus_uint32 (line 56) | typedef unsigned int opus_uint32;
  type opus_int32 (line 58) | typedef int opus_int32;
  type opus_uint32 (line 59) | typedef unsigned int opus_uint32;
  type opus_int16 (line 60) | typedef short opus_int16;
  type opus_uint16 (line 61) | typedef unsigned short opus_uint16;
  type __int32 (line 64) | typedef __int32 opus_int32;
  type opus_uint32 (line 65) | typedef unsigned __int32 opus_uint32;
  type __int16 (line 66) | typedef __int16 opus_int16;
  type opus_uint16 (line 67) | typedef unsigned __int16 opus_uint16;
  type SInt16 (line 73) | typedef SInt16 opus_int16;
  type UInt16 (line 74) | typedef UInt16 opus_uint16;
  type SInt32 (line 75) | typedef SInt32 opus_int32;
  type UInt32 (line 76) | typedef UInt32 opus_uint32;
  type opus_int16 (line 81) | typedef int16_t opus_int16;
  type u_int16_t (line 82) | typedef u_int16_t opus_uint16;
  type opus_int32 (line 83) | typedef int32_t opus_int32;
  type u_int32_t (line 84) | typedef u_int32_t opus_uint32;
  type int16 (line 90) | typedef int16 opus_int16;
  type u_int16 (line 91) | typedef u_int16 opus_uint16;
  type opus_int32 (line 92) | typedef int32_t opus_int32;
  type u_int32_t (line 93) | typedef u_int32_t opus_uint32;
  type opus_int16 (line 98) | typedef short opus_int16;
  type opus_uint16 (line 99) | typedef unsigned short opus_uint16;
  type opus_int32 (line 100) | typedef int opus_int32;
  type opus_uint32 (line 101) | typedef unsigned int opus_uint32;
  type opus_int16 (line 106) | typedef short opus_int16;
  type opus_uint16 (line 107) | typedef unsigned short opus_uint16;
  type opus_int32 (line 108) | typedef int opus_int32;
  type opus_uint32 (line 109) | typedef unsigned int opus_uint32;
  type opus_int32 (line 114) | typedef int opus_int32;
  type opus_uint32 (line 115) | typedef unsigned opus_uint32;
  type opus_int16 (line 116) | typedef short opus_int16;
  type opus_uint16 (line 117) | typedef unsigned short opus_uint16;
  type opus_int16 (line 122) | typedef signed short opus_int16;
  type opus_uint16 (line 123) | typedef unsigned short opus_uint16;
  type opus_int32 (line 124) | typedef signed int opus_int32;
  type opus_uint32 (line 125) | typedef unsigned int opus_uint32;
  type opus_int16 (line 129) | typedef short opus_int16;
  type opus_uint16 (line 130) | typedef unsigned short opus_uint16;
  type opus_int32 (line 131) | typedef long opus_int32;
  type opus_uint32 (line 132) | typedef unsigned long opus_uint32;
  type opus_int16 (line 136) | typedef short opus_int16;
  type opus_uint16 (line 137) | typedef unsigned short opus_uint16;
  type opus_int32 (line 138) | typedef int opus_int32;
  type opus_uint32 (line 139) | typedef unsigned int opus_uint32;
  type opus_int16 (line 144) | typedef short opus_int16;
  type opus_uint16 (line 145) | typedef unsigned short opus_uint16;
  type opus_int32 (line 146) | typedef int opus_int32;
  type opus_uint32 (line 147) | typedef unsigned int opus_uint32;

FILE: ThirdParty/opus-1.2.1/src/analysis.c
  function opus_val32 (line 111) | static opus_val32 silk_resampler_down2_hp(
  function opus_val32 (line 159) | static opus_val32 downmix_and_resample(downmix_func downmix, const void ...
  function tonality_analysis_init (line 213) | void tonality_analysis_init(TonalityAnalysisState *tonal, opus_int32 Fs)
  function tonality_analysis_reset (line 222) | void tonality_analysis_reset(TonalityAnalysisState *tonal)
  function tonality_get_info (line 231) | void tonality_get_info(TonalityAnalysisState *tonal, AnalysisInfo *info_...
  function tonality_analysis (line 315) | static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMo...
  function run_analysis (line 911) | void run_analysis(TonalityAnalysisState *analysis, const CELTMode *celt_...

FILE: ThirdParty/opus-1.2.1/src/analysis.h
  type TonalityAnalysisState (line 46) | typedef struct {

FILE: ThirdParty/opus-1.2.1/src/mlp.c
  function OPUS_INLINE (line 42) | static OPUS_INLINE opus_val16 tansig_approx(opus_val32 _x) /* Q19 */
  function OPUS_INLINE (line 68) | static OPUS_INLINE float tansig_approx(float x)
  function mlp_process (line 98) | void mlp_process(const MLP *m, const opus_val16 *in, opus_val16 *out)
  function mlp_process (line 122) | void mlp_process(const MLP *m, const float *in, float *out)

FILE: ThirdParty/opus-1.2.1/src/mlp.h
  type MLP (line 33) | typedef struct {

FILE: ThirdParty/opus-1.2.1/src/opus.c
  function OPUS_EXPORT (line 36) | OPUS_EXPORT void opus_pcm_soft_clip(float *_x, int N, int C, float *decl...
  function encode_size (line 140) | int encode_size(int size, unsigned char *data)
  function parse_size (line 153) | static int parse_size(const unsigned char *data, opus_int32 len, opus_in...
  function opus_packet_get_samples_per_frame (line 173) | int opus_packet_get_samples_per_frame(const unsigned char *data,
  function opus_packet_parse_impl (line 194) | int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
  function opus_packet_parse (line 349) | int opus_packet_parse(const unsigned char *data, opus_int32 len,

FILE: ThirdParty/opus-1.2.1/src/opus_compare.c
  function read_pcm16 (line 54) | static size_t read_pcm16(float **_samples,FILE *_fin,int _nchannels){
  function band_energy (line 88) | static void band_energy(float *_out,float *_ps,const int *_bands,int _nb...
  function main (line 165) | int main(int _argc,const char **_argv){

FILE: ThirdParty/opus-1.2.1/src/opus_decoder.c
  type OpusDecoder (line 55) | struct OpusDecoder {
  function opus_decoder_get_size (line 82) | int opus_decoder_get_size(int channels)
  function opus_decoder_init (line 96) | int opus_decoder_init(OpusDecoder *st, opus_int32 Fs, int channels)
  function OpusDecoder (line 139) | OpusDecoder *opus_decoder_create(opus_int32 Fs, int channels, int *error)
  function smooth_fade (line 168) | static void smooth_fade(const opus_val16 *in1, const opus_val16 *in2,
  function opus_packet_get_mode (line 185) | static int opus_packet_get_mode(const unsigned char *data)
  function opus_decode_frame (line 200) | static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
  function opus_decode_native (line 598) | int opus_decode_native(OpusDecoder *st, const unsigned char *data,
  function opus_decode (line 713) | int opus_decode(OpusDecoder *st, const unsigned char *data,
  function opus_decode_float (line 722) | int opus_decode_float(OpusDecoder *st, const unsigned char *data,
  function opus_decode (line 758) | int opus_decode(OpusDecoder *st, const unsigned char *data,
  function opus_decode_float (line 792) | int opus_decode_float(OpusDecoder *st, const unsigned char *data,
  function opus_decoder_ctl (line 802) | int opus_decoder_ctl(OpusDecoder *st, int request, ...)
  function opus_decoder_destroy (line 935) | void opus_decoder_destroy(OpusDecoder *st)
  function opus_packet_get_bandwidth (line 941) | int opus_packet_get_bandwidth(const unsigned char *data)
  function opus_packet_get_nb_channels (line 959) | int opus_packet_get_nb_channels(const unsigned char *data)
  function opus_packet_get_nb_frames (line 964) | int opus_packet_get_nb_frames(const unsigned char packet[], opus_int32 len)
  function opus_packet_get_nb_samples (line 980) | int opus_packet_get_nb_samples(const unsigned char packet[], opus_int32 ...
  function opus_decoder_get_nb_samples (line 997) | int opus_decoder_get_nb_samples(const OpusDecoder *dec,

FILE: ThirdParty/opus-1.2.1/src/opus_demo.c
  function print_usage (line 45) | void print_usage( char* argv[] )
  function int_to_char (line 68) | static void int_to_char(opus_uint32 i, unsigned char ch[4])
  function opus_uint32 (line 76) | static opus_uint32 char_to_int(unsigned char ch[4])
  function check_encoder_option (line 82) | static void check_encoder_option(int decode_only, const char *opt)
  function OpusEncoder (line 200) | static OpusEncoder *ms_opus_encoder_create(opus_int32 Fs, int channels, ...
  function OpusDecoder (line 206) | static OpusDecoder *ms_opus_decoder_create(opus_int32 Fs, int channels, ...
  function main (line 217) | int main(int argc, char *argv[])

FILE: ThirdParty/opus-1.2.1/src/opus_encoder.c
  type StereoWidthState (line 60) | typedef struct {
  type OpusEncoder (line 66) | struct OpusEncoder {
  function opus_encoder_get_size (line 168) | int opus_encoder_get_size(int channels)
  function opus_encoder_init (line 182) | int opus_encoder_init(OpusEncoder* st, opus_int32 Fs, int channels, int ...
  function gen_toc (line 273) | static unsigned char gen_toc(int mode, int framerate, int bandwidth, int...
  function silk_biquad_float (line 306) | static void silk_biquad_float(
  function hp_cutoff (line 345) | static void hp_cutoff(const opus_val16 *in, opus_int32 cutoff_Hz, opus_v...
  function dc_reject (line 383) | static void dc_reject(const opus_val16 *in, opus_int32 cutoff_Hz, opus_v...
  function dc_reject (line 408) | static void dc_reject(const opus_val16 *in, opus_int32 cutoff_Hz, opus_v...
  function stereo_fade (line 465) | static void stereo_fade(const opus_val16 *in, opus_val16 *out, opus_val1...
  function gain_fade (line 497) | static void gain_fade(const opus_val16 *in, opus_val16 *out, opus_val16 ...
  function OpusEncoder (line 536) | OpusEncoder *opus_encoder_create(opus_int32 Fs, int channels, int applic...
  function opus_int32 (line 566) | static opus_int32 user_bitrate_to_bitrate(OpusEncoder *st, int frame_siz...
  function downmix_float (line 584) | void downmix_float(const void *_x, opus_val32 *y, int subframe, int offs...
  function downmix_int (line 608) | void downmix_int(const void *_x, opus_val32 *y, int subframe, int offset...
  function opus_int32 (line 631) | opus_int32 frame_size_select(opus_int32 frame_size, int variable_duratio...
  function opus_val16 (line 656) | opus_val16 compute_stereo_width(const opus_val16 *pcm, int frame_size, o...
  function decide_fec (line 732) | static int decide_fec(int useInBandFEC, int PacketLoss_perc, int last_fe...
  function compute_silk_rate_for_hybrid (line 765) | static int compute_silk_rate_for_hybrid(int rate, int bandwidth, int fra...
  function opus_int32 (line 813) | static opus_int32 compute_equiv_rate(opus_int32 bitrate, int channels,
  function is_digital_silence (line 847) | static int is_digital_silence(const opus_val16* pcm, int frame_size, int...
  function opus_val32 (line 867) | static opus_val32 compute_frame_energy(const opus_val16 *pcm, int frame_...
  function opus_val32 (line 894) | static opus_val32 compute_frame_energy(const opus_val16 *pcm, int frame_...
  function decide_dtx_mode (line 902) | static int decide_dtx_mode(float activity_probability,    /* probability...
  function opus_int32 (line 947) | static opus_int32 encode_multiframe_packet(OpusEncoder *st,
  function compute_redundancy_bytes (line 1046) | static int compute_redundancy_bytes(opus_int32 max_data_bytes, opus_int3...
  function opus_int32 (line 2174) | opus_int32 opus_encode_float(OpusEncoder *st, const float *pcm, int anal...
  function opus_int32 (line 2199) | opus_int32 opus_encode(OpusEncoder *st, const opus_int16 *pcm, int analy...
  function opus_int32 (line 2209) | opus_int32 opus_encode(OpusEncoder *st, const opus_int16 *pcm, int analy...
  function opus_int32 (line 2232) | opus_int32 opus_encode_float(OpusEncoder *st, const float *pcm, int anal...
  function opus_encoder_ctl (line 2243) | int opus_encoder_ctl(OpusEncoder *st, int request, ...)
  function opus_encoder_destroy (line 2728) | void opus_encoder_destroy(OpusEncoder *st)

FILE: ThirdParty/opus-1.2.1/src/opus_multistream.c
  function validate_layout (line 41) | int validate_layout(const ChannelLayout *layout)
  function get_left_channel (line 57) | int get_left_channel(const ChannelLayout *layout, int stream_id, int prev)
  function get_right_channel (line 69) | int get_right_channel(const ChannelLayout *layout, int stream_id, int prev)
  function get_mono_channel (line 81) | int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev)

FILE: ThirdParty/opus-1.2.1/src/opus_multistream_decoder.c
  type OpusMSDecoder (line 40) | struct OpusMSDecoder {
  function opus_int32 (line 50) | opus_int32 opus_multistream_decoder_get_size(int nb_streams, int nb_coup...
  function opus_multistream_decoder_init (line 63) | int opus_multistream_decoder_init(
  function OpusMSDecoder (line 110) | OpusMSDecoder *opus_multistream_decoder_create(
  function opus_multistream_packet_validate (line 155) | static int opus_multistream_packet_validate(const unsigned char *data,
  function opus_multistream_decode_native (line 184) | static int opus_multistream_decode_native(
  function opus_copy_channel_out_float (line 306) | static void opus_copy_channel_out_float(
  function opus_copy_channel_out_short (line 335) | static void opus_copy_channel_out_short(
  function opus_multistream_decode (line 366) | int opus_multistream_decode(
  function opus_multistream_decode_float (line 380) | int opus_multistream_decode_float(OpusMSDecoder *st, const unsigned char...
  function opus_multistream_decode (line 390) | int opus_multistream_decode(OpusMSDecoder *st, const unsigned char *data,
  function opus_multistream_decode_float (line 397) | int opus_multistream_decode_float(
  function opus_multistream_decoder_ctl (line 411) | int opus_multistream_decoder_ctl(OpusMSDecoder *st, int request, ...)
  function opus_multistream_decoder_destroy (line 537) | void opus_multistream_decoder_destroy(OpusMSDecoder *st)

FILE: ThirdParty/opus-1.2.1/src/opus_multistream_encoder.c
  type VorbisLayout (line 46) | typedef struct {
  type MappingType (line 73) | typedef enum {
  type OpusMSEncoder (line 82) | struct OpusMSEncoder {
  function opus_val32 (line 95) | static opus_val32 *ms_get_preemph_mem(OpusMSEncoder *st)
  function opus_val32 (line 115) | static opus_val32 *ms_get_window_mem(OpusMSEncoder *st)
  function validate_ambisonics (line 136) | static int validate_ambisonics(int nb_channels, int *nb_streams, int *nb...
  function validate_encoder_layout (line 158) | static int validate_encoder_layout(const ChannelLayout *layout)
  function channel_pos (line 177) | static void channel_pos(int channels, int pos[8])
  function opus_val16 (line 218) | static opus_val16 logSum(opus_val16 a, opus_val16 b)
  function opus_val16 (line 249) | opus_val16 logSum(opus_val16 a, opus_val16 b)
  function surround_analysis (line 255) | void surround_analysis(const CELTMode *celt_mode, const void *pcm, opus_...
  function opus_int32 (line 407) | opus_int32 opus_multistream_encoder_get_size(int nb_streams, int nb_coup...
  function opus_int32 (line 420) | opus_int32 opus_multistream_surround_encoder_get_size(int channels, int ...
  function opus_multistream_encoder_init_impl (line 462) | static int opus_multistream_encoder_init_impl(
  function opus_multistream_encoder_init (line 532) | int opus_multistream_encoder_init(
  function opus_multistream_surround_encoder_init (line 547) | int opus_multistream_surround_encoder_init(
  function OpusMSEncoder (line 624) | OpusMSEncoder *opus_multistream_encoder_create(
  function OpusMSEncoder (line 661) | OpusMSEncoder *opus_multistream_surround_encoder_create(
  function surround_rate_allocation (line 706) | static void surround_rate_allocation(
  function ambisonics_rate_allocation (line 776) | static void ambisonics_rate_allocation(
  function opus_int32 (line 854) | static opus_int32 rate_allocation(
  function opus_multistream_encode_native (line 887) | static int opus_multistream_encode_native
  function opus_copy_channel_in_float (line 1102) | static void opus_copy_channel_in_float(
  function opus_copy_channel_in_short (line 1123) | static void opus_copy_channel_in_short(
  function opus_multistream_encode (line 1145) | int opus_multistream_encode(
  function opus_multistream_encode_float (line 1158) | int opus_multistream_encode_float(
  function opus_multistream_encode_float (line 1173) | int opus_multistream_encode_float
  function opus_multistream_encode (line 1186) | int opus_multistream_encode(
  function opus_multistream_encoder_ctl (line 1199) | int opus_multistream_encoder_ctl(OpusMSEncoder *st, int request, ...)
  function opus_multistream_encoder_destroy (line 1403) | void opus_multistream_encoder_destroy(OpusMSEncoder *st)

FILE: ThirdParty/opus-1.2.1/src/opus_private.h
  type OpusRepacketizer (line 38) | struct OpusRepacketizer {
  type ChannelLayout (line 46) | typedef struct ChannelLayout {
  function OPUS_INLINE (line 105) | static OPUS_INLINE int align(int i)

FILE: ThirdParty/opus-1.2.1/src/repacketizer.c
  function opus_repacketizer_get_size (line 37) | int opus_repacketizer_get_size(void)
  function OpusRepacketizer (line 42) | OpusRepacketizer *opus_repacketizer_init(OpusRepacketizer *rp)
  function OpusRepacketizer (line 48) | OpusRepacketizer *opus_repacketizer_create(void)
  function opus_repacketizer_destroy (line 56) | void opus_repacketizer_destroy(OpusRepacketizer *rp)
  function opus_repacketizer_cat_impl (line 61) | static int opus_repacketizer_cat_impl(OpusRepacketizer *rp, const unsign...
  function opus_repacketizer_cat (line 92) | int opus_repacketizer_cat(OpusRepacketizer *rp, const unsigned char *dat...
  function opus_repacketizer_get_nb_frames (line 97) | int opus_repacketizer_get_nb_frames(OpusRepacketizer *rp)
  function opus_int32 (line 102) | opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int be...
  function opus_int32 (line 229) | opus_int32 opus_repacketizer_out_range(OpusRepacketizer *rp, int begin, ...
  function opus_int32 (line 234) | opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *da...
  function opus_packet_pad (line 239) | int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_...
  function opus_int32 (line 262) | opus_int32 opus_packet_unpad(unsigned char *data, opus_int32 len)
  function opus_multistream_packet_pad (line 277) | int opus_multistream_packet_pad(unsigned char *data, opus_int32 len, opu...
  function opus_int32 (line 308) | opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32...

FILE: ThirdParty/opus-1.2.1/src/repacketizer_demo.c
  function usage (line 39) | void usage(char *argv0)
  function int_to_char (line 44) | static void int_to_char(opus_uint32 i, unsigned char ch[4])
  function opus_uint32 (line 52) | static opus_uint32 char_to_int(unsigned char ch[4])
  function main (line 58) | int main(int argc, char *argv[])

FILE: ThirdParty/opusfile-0.9/include/opusfile.h
  type OpusHead (line 128) | typedef struct OpusHead          OpusHead;
  type OpusTags (line 129) | typedef struct OpusTags          OpusTags;
  type OpusPictureTag (line 130) | typedef struct OpusPictureTag    OpusPictureTag;
  type OpusServerInfo (line 131) | typedef struct OpusServerInfo    OpusServerInfo;
  type OpusFileCallbacks (line 132) | typedef struct OpusFileCallbacks OpusFileCallbacks;
  type OggOpusFile (line 133) | typedef struct OggOpusFile       OggOpusFile;
  type OpusHead (line 215) | struct OpusHead{
  type OpusTags (line 301) | struct OpusTags{
  type OpusPictureTag (line 331) | struct OpusPictureTag{
  type OpusServerInfo (line 712) | struct OpusServerInfo{
  type opus_int64 (line 884) | typedef opus_int64 (*op_tell_func)(void *_stream);
  type OpusFileCallbacks (line 901) | struct OpusFileCallbacks{

FILE: ThirdParty/opusfile-0.9/src/http.c
  type OpusParsedURL (line 50) | typedef struct OpusParsedURL   OpusParsedURL;
  type OpusStringBuf (line 51) | typedef struct OpusStringBuf   OpusStringBuf;
  type OpusHTTPConn (line 52) | typedef struct OpusHTTPConn    OpusHTTPConn;
  type OpusHTTPStream (line 53) | typedef struct OpusHTTPStream  OpusHTTPStream;
  function op_validate_url_escapes (line 114) | static int op_validate_url_escapes(const char *_s){
  function op_hex_value (line 135) | static int op_hex_value(int _c){
  type SOCKET (line 220) | typedef SOCKET op_sock;
  type pollfd (line 250) | struct pollfd{
  type nfds_t (line 261) | typedef unsigned long nfds_t;
  function op_poll_win32 (line 266) | static int op_poll_win32(struct pollfd *_fds,nfds_t _nfds,int _timeout){
  type op_sock (line 350) | typedef int op_sock;
  type OpusParsedURL (line 438) | struct OpusParsedURL{
  function op_parse_url_impl (line 463) | static int op_parse_url_impl(OpusParsedURL *_dst,const char *_src){
  function op_parsed_url_init (line 592) | static void op_parsed_url_init(OpusParsedURL *_url){
  function op_parsed_url_clear (line 596) | static void op_parsed_url_clear(OpusParsedURL *_url){
  function op_parse_url (line 604) | static int op_parse_url(OpusParsedURL *_dst,const char *_src){
  type OpusStringBuf (line 617) | struct OpusStringBuf{
  function op_sb_init (line 623) | static void op_sb_init(OpusStringBuf *_sb){
  function op_sb_clear (line 629) | static void op_sb_clear(OpusStringBuf *_sb){
  function op_sb_ensure_capacity (line 635) | static int op_sb_ensure_capacity(OpusStringBuf *_sb,int _capacity){
  function op_sb_grow (line 654) | static int op_sb_grow(OpusStringBuf *_sb,int _max_size){
  function op_sb_append (line 668) | static int op_sb_append(OpusStringBuf *_sb,const char *_s,int _len){
  function op_sb_append_string (line 684) | static int op_sb_append_string(OpusStringBuf *_sb,const char *_s){
  function op_sb_append_port (line 691) | static int op_sb_append_port(OpusStringBuf *_sb,unsigned _port){
  function op_sb_append_nonnegative_int64 (line 698) | static int op_sb_append_nonnegative_int64(OpusStringBuf *_sb,opus_int64 ...
  type addrinfo (line 729) | struct addrinfo
  type addrinfo (line 730) | struct addrinfo
  type addrinfo (line 731) | struct addrinfo
  function op_sock_set_nonblocking (line 744) | static int op_sock_set_nonblocking(op_sock _fd,int _nonblocking){
  function op_sock_set_tcp_nodelay (line 761) | static void op_sock_set_tcp_nodelay(op_sock _fd,int _nodelay){
  function op_init_winsock (line 776) | static void op_init_winsock(){
  type OpusHTTPConn (line 785) | struct OpusHTTPConn{
  function op_http_conn_init (line 815) | static void op_http_conn_init(OpusHTTPConn *_conn){
  function op_http_conn_clear (line 822) | static void op_http_conn_clear(OpusHTTPConn *_conn){
  type OpusHTTPStream (line 829) | struct OpusHTTPStream{
  function op_http_stream_init (line 885) | static void op_http_stream_init(OpusHTTPStream *_stream){
  function op_http_conn_close (line 910) | static void op_http_conn_close(OpusHTTPStream *_stream,OpusHTTPConn *_conn,
  function op_http_stream_clear (line 932) | static void op_http_stream_clear(OpusHTTPStream *_stream){
  function op_http_conn_write_fully (line 945) | static int op_http_conn_write_fully(OpusHTTPConn *_conn,
  function op_http_conn_estimate_available (line 989) | static int op_http_conn_estimate_available(OpusHTTPConn *_conn){
  function opus_int32 (line 1007) | static opus_int32 op_time_diff_ms(const struct timeb *_end,
  function op_http_conn_read_rate_update (line 1019) | static void op_http_conn_read_rate_update(OpusHTTPConn *_conn){
  function op_http_conn_read (line 1043) | static int op_http_conn_read(OpusHTTPConn *_conn,
  function op_http_conn_peek (line 1119) | static int op_http_conn_peek(OpusHTTPConn *_conn,char *_buf,int _buf_size){
  function op_http_conn_read_response (line 1160) | static int op_http_conn_read_response(OpusHTTPConn *_conn,
  function op_http_lwsspn (line 1244) | static int op_http_lwsspn(const char *_s){
  function op_http_get_next_header (line 1321) | static int op_http_get_next_header(char **_header,char **_cdr,char **_s){
  function opus_int64 (line 1363) | static opus_int64 op_http_parse_nonnegative_int64(const char **_next,
  function opus_int64 (line 1384) | static opus_int64 op_http_parse_content_length(const char *_cdr){
  function op_http_parse_content_range (line 1392) | static int op_http_parse_content_range(opus_int64 *_first,opus_int64 *_l...
  function op_http_parse_connection (line 1440) | static int op_http_parse_connection(char *_cdr){
  function op_do_ssl_step (line 1467) | static int op_do_ssl_step(SSL *_ssl_conn,op_sock _fd,op_ssl_step_func _s...
  function op_bio_retry_write (line 1490) | static int op_bio_retry_write(BIO *_b,const char *_buf,int _num){
  function op_bio_retry_read (line 1498) | static int op_bio_retry_read(BIO *_b,char *_buf,int _num){
  function op_bio_retry_puts (line 1506) | static int op_bio_retry_puts(BIO *_b,const char *_str){
  function op_bio_retry_ctrl (line 1510) | static long op_bio_retry_ctrl(BIO *_b,int _cmd,long _num,void *_ptr){
  function op_bio_retry_new (line 1539) | static int op_bio_retry_new(BIO *_b){
  function op_bio_retry_free (line 1548) | static int op_bio_retry_free(BIO *_b){
  function op_http_conn_establish_tunnel (line 1571) | static int op_http_conn_establish_tunnel(OpusHTTPStream *_stream,
  type addrinfo (line 1628) | struct addrinfo
  type addrinfo (line 1629) | struct addrinfo
  type addrinfo (line 1630) | struct addrinfo
  function op_http_hostname_match (line 1642) | static int op_http_hostname_match(const char *_host,size_t _host_len,
  function op_http_verify_hostname (line 1716) | static int op_http_verify_hostname(OpusHTTPStream *_stream,SSL *_ssl_conn){
  function op_http_conn_start_tls (line 1882) | static int op_http_conn_start_tls(OpusHTTPStream *_stream,OpusHTTPConn *...
  function op_sock_connect_next (line 1997) | static int op_sock_connect_next(op_sock _fd,
  function op_http_connect_impl (line 2017) | static int op_http_connect_impl(OpusHTTPStream *_stream,OpusHTTPConn *_c...
  function op_http_connect (line 2149) | static int op_http_connect(OpusHTTPStream *_stream,OpusHTTPConn *_conn,
  function op_sb_append_basic_auth_header (line 2221) | static int op_sb_append_basic_auth_header(OpusStringBuf *_sb,
  function op_http_allow_pipelining (line 2254) | static int op_http_allow_pipelining(const char *_server){
  function op_http_stream_open (line 2285) | static int op_http_stream_open(OpusHTTPStream *_stream,const char *_url,
  function op_http_conn_send_request (line 2690) | static int op_http_conn_send_request(OpusHTTPStream *_stream,
  function op_http_conn_handle_response (line 2748) | static int op_http_conn_handle_response(OpusHTTPStream *_stream,
  function op_http_conn_open_pos (line 2853) | static int op_http_conn_open_pos(OpusHTTPStream *_stream,
  function op_http_conn_read_body (line 2888) | static int op_http_conn_read_body(OpusHTTPStream *_stream,
  function op_http_stream_read (line 3004) | static int op_http_stream_read(void *_stream,
  function op_http_conn_read_ahead (line 3045) | static int op_http_conn_read_ahead(OpusHTTPStream *_stream,
  function op_http_stream_seek (line 3117) | static int op_http_stream_seek(void *_stream,opus_int64 _offset,int _whe...
  function opus_int64 (line 3303) | static opus_int64 op_http_stream_tell(void *_stream){
  function op_http_stream_close (line 3311) | static int op_http_stream_close(void *_stream){
  function opus_server_info_init (line 3329) | void opus_server_info_init(OpusServerInfo *_info){
  function opus_server_info_clear (line 3341) | void opus_server_info_clear(OpusServerInfo *_info){
  function OggOpusFile (line 3492) | OggOpusFile *op_vopen_url(const char *_url,int *_error,va_list _ap){
  function OggOpusFile (line 3513) | OggOpusFile *op_open_url(const char *_url,int *_error,...){
  function OggOpusFile (line 3522) | OggOpusFile *op_vtest_url(const char *_url,int *_error,va_list _ap){
  function OggOpusFile (line 3543) | OggOpusFile *op_test_url(const char *_url,int *_error,...){

FILE: ThirdParty/opusfile-0.9/src/info.c
  function op_parse_uint16le (line 20) | static unsigned op_parse_uint16le(const unsigned char *_data){
  function op_parse_int16le (line 24) | static int op_parse_int16le(const unsigned char *_data){
  function opus_uint32 (line 30) | static opus_uint32 op_parse_uint32le(const unsigned char *_data){
  function opus_uint32 (line 35) | static opus_uint32 op_parse_uint32be(const unsigned char *_data){
  function opus_head_parse (line 40) | int opus_head_parse(OpusHead *_head,const unsigned char *_data,size_t _l...
  function opus_tags_init (line 90) | void opus_tags_init(OpusTags *_tags){
  function opus_tags_clear (line 94) | void opus_tags_clear(OpusTags *_tags){
  function op_tags_ensure_capacity (line 106) | static int op_tags_ensure_capacity(OpusTags *_tags,size_t _ncomments){
  function opus_tags_parse_impl (line 159) | static int opus_tags_parse_impl(OpusTags *_tags,
  function opus_tags_parse (line 228) | int opus_tags_parse(OpusTags *_tags,const unsigned char *_data,size_t _l...
  function opus_tags_copy_impl (line 245) | static int opus_tags_copy_impl(OpusTags *_dst,const OpusTags *_src){
  function opus_tags_copy (line 278) | int opus_tags_copy(OpusTags *_dst,const OpusTags *_src){
  function opus_tags_add (line 288) | int opus_tags_add(OpusTags *_tags,const char *_tag,const char *_value){
  function opus_tags_add_comment (line 313) | int opus_tags_add_comment(OpusTags *_tags,const char *_comment){
  function opus_tags_set_binary_suffix (line 330) | int opus_tags_set_binary_suffix(OpusTags *_tags,
  function opus_tagcompare (line 348) | int opus_tagcompare(const char *_tag_name,const char *_comment){
  function opus_tagncompare (line 355) | int opus_tagncompare(const char *_tag_name,int _tag_len,const char *_com...
  function opus_tags_query_count (line 383) | int opus_tags_query_count(const OpusTags *_tags,const char *_tag){
  function opus_tags_get_gain (line 411) | static int opus_tags_get_gain(const OpusTags *_tags,int *_gain_q8,
  function opus_tags_get_album_gain (line 448) | int opus_tags_get_album_gain(const OpusTags *_tags,int *_gain_q8){
  function opus_tags_get_track_gain (line 452) | int opus_tags_get_track_gain(const OpusTags *_tags,int *_gain_q8){
  function op_is_jpeg (line 456) | static int op_is_jpeg(const unsigned char *_buf,size_t _buf_sz){
  function op_extract_jpeg_params (line 464) | static void op_extract_jpeg_params(const unsigned char *_buf,size_t _buf...
  function op_is_png (line 503) | static int op_is_png(const unsigned char *_buf,size_t _buf_sz){
  function op_extract_png_params (line 510) | static void op_extract_png_params(const unsigned char *_buf,size_t _buf_sz,
  function op_is_gif (line 550) | static int op_is_gif(const unsigned char *_buf,size_t _buf_sz){
  function op_extract_gif_params (line 557) | static void op_extract_gif_params(const unsigned char *_buf,size_t _buf_sz,
  function opus_picture_tag_parse_impl (line 574) | static int opus_picture_tag_parse_impl(OpusPictureTag *_pic,const char *...
  function opus_picture_tag_parse (line 735) | int opus_picture_tag_parse(OpusPictureTag *_pic,const char *_tag){
  function opus_picture_tag_init (line 765) | void opus_picture_tag_init(OpusPictureTag *_pic){
  function opus_picture_tag_clear (line 769) | void opus_picture_tag_clear(OpusPictureTag *_pic){

FILE: ThirdParty/opusfile-0.9/src/internal.c
  function op_fatal_impl (line 19) | void op_fatal_impl(const char *_str,const char *_file,int _line){
  function op_strncasecmp (line 28) | int op_strncasecmp(const char *_a,const char *_b,int _n){

FILE: ThirdParty/opusfile-0.9/src/internal.h
  type OggOpusLink (line 34) | typedef struct OggOpusLink OggOpusLink;
  type opus_int16 (line 38) | typedef opus_int16 op_sample;
  type op_sample (line 42) | typedef float      op_sample;
  type OggOpusLink (line 128) | struct OggOpusLink{
  type OggOpusFile (line 155) | struct OggOpusFile{

FILE: ThirdParty/opusfile-0.9/src/opusfile.c
  function op_test (line 73) | int op_test(OpusHead *_head,
  function op_get_data (line 146) | static int op_get_data(OggOpusFile *_of,int _nbytes){
  function op_seek_helper (line 158) | static int op_seek_helper(OggOpusFile *_of,opus_int64 _offset){
  function opus_int64 (line 171) | static opus_int64 op_position(const OggOpusFile *_of){
  function opus_int64 (line 188) | static opus_int64 op_get_next_page(OggOpusFile *_of,ogg_page *_og,
  function op_add_serialno (line 230) | static int op_add_serialno(const ogg_page *_og,
  function op_lookup_serialno (line 258) | static int op_lookup_serialno(ogg_uint32_t _s,
  function op_lookup_page_serialno (line 265) | static int op_lookup_page_serialno(const ogg_page *_og,
  type OpusSeekRecord (line 270) | typedef struct OpusSeekRecord OpusSeekRecord;
  type OpusSeekRecord (line 279) | struct OpusSeekRecord{
  function op_get_prev_page_serial (line 320) | static int op_get_prev_page_serial(OggOpusFile *_of,OpusSeekRecord *_sr,
  function opus_int64 (line 408) | static opus_int64 op_get_last_page(OggOpusFile *_of,ogg_int64_t *_gp,
  function op_fetch_headers_impl (line 477) | static int op_fetch_headers_impl(OggOpusFile *_of,OpusHead *_head,
  function op_fetch_headers (line 569) | static int op_fetch_headers(OggOpusFile *_of,OpusHead *_head,
  function op_granpos_add (line 630) | static int op_granpos_add(ogg_int64_t *_dst_gp,ogg_int64_t _src_gp,
  function op_granpos_diff (line 677) | static int op_granpos_diff(ogg_int64_t *_delta,
  function op_granpos_cmp (line 719) | static int op_granpos_cmp(ogg_int64_t _gp_a,ogg_int64_t _gp_b){
  function op_get_packet_duration (line 739) | static int op_get_packet_duration(const unsigned char *_data,int _len){
  function ogg_int64_t (line 753) | ogg_int64_t opus_granule_sample(const OpusHead *_head,ogg_int64_t _gp){
  function opus_int32 (line 765) | static opus_int32 op_collect_audio_packets(OggOpusFile *_of,
  function op_find_initial_pcm_offset (line 829) | static int op_find_initial_pcm_offset(OggOpusFile *_of,
  function op_find_final_pcm_offset (line 972) | static int op_find_final_pcm_offset(OggOpusFile *_of,
  function opus_int64 (line 1009) | static opus_int64 op_rescale64(opus_int64 _x,opus_int64 _from,opus_int64...
  function opus_int64 (line 1043) | static opus_int64 op_predict_link_start(const OpusSeekRecord *_sr,int _nsr,
  function op_bisect_forward_serialno (line 1106) | static int op_bisect_forward_serialno(OggOpusFile *_of,
  function op_update_gain (line 1302) | static void op_update_gain(OggOpusFile *_of){
  function op_make_decode_ready (line 1346) | static int op_make_decode_ready(OggOpusFile *_of){
  function op_open_seekable2_impl (line 1390) | static int op_open_seekable2_impl(OggOpusFile *_of){
  function op_open_seekable2 (line 1417) | static int op_open_seekable2(OggOpusFile *_of){
  function op_decode_clear (line 1467) | static void op_decode_clear(OggOpusFile *_of){
  function op_clear (line 1481) | static void op_clear(OggOpusFile *_of){
  function op_open1 (line 1504) | static int op_open1(OggOpusFile *_of,
  function op_open2 (line 1578) | static int op_open2(OggOpusFile *_of){
  function OggOpusFile (line 1599) | OggOpusFile *op_test_callbacks(void *_stream,const OpusFileCallbacks *_cb,
  function OggOpusFile (line 1620) | OggOpusFile *op_open_callbacks(void *_stream,const OpusFileCallbacks *_cb,
  function OggOpusFile (line 1636) | static OggOpusFile *op_open_close_on_failure(void *_stream,
  function OggOpusFile (line 1648) | OggOpusFile *op_open_file(const char *_path,int *_error){
  function OggOpusFile (line 1653) | OggOpusFile *op_open_memory(const unsigned char *_data,size_t _size,
  function OggOpusFile (line 1662) | static OggOpusFile *op_test_close_on_failure(void *_stream,
  function OggOpusFile (line 1674) | OggOpusFile *op_test_file(const char *_path,int *_error){
  function OggOpusFile (line 1679) | OggOpusFile *op_test_memory(const unsigned char *_data,size_t _size,
  function op_test_open (line 1686) | int op_test_open(OggOpusFile *_of){
  function op_free (line 1696) | void op_free(OggOpusFile *_of){
  function op_seekable (line 1703) | int op_seekable(const OggOpusFile *_of){
  function op_link_count (line 1707) | int op_link_count(const OggOpusFile *_of){
  function opus_uint32 (line 1711) | opus_uint32 op_serialno(const OggOpusFile *_of,int _li){
  function op_channel_count (line 1717) | int op_channel_count(const OggOpusFile *_of,int _li){
  function opus_int64 (line 1721) | opus_int64 op_raw_total(const OggOpusFile *_of,int _li){
  function ogg_int64_t (line 1732) | ogg_int64_t op_pcm_total(const OggOpusFile *_of,int _li){
  function OpusHead (line 1757) | const OpusHead *op_head(const OggOpusFile *_of,int _li){
  function OpusTags (line 1763) | const OpusTags *op_tags(const OggOpusFile *_of,int _li){
  function op_current_link (line 1775) | int op_current_link(const OggOpusFile *_of){
  function opus_int32 (line 1782) | static opus_int32 op_calc_bitrate(opus_int64 _bytes,ogg_int64_t _samples){
  function opus_int32 (line 1804) | opus_int32 op_bitrate(const OggOpusFile *_of,int _li){
  function opus_int32 (line 1812) | opus_int32 op_bitrate_instant(OggOpusFile *_of){
  function op_get_link_from_serialno (line 1827) | static int op_get_link_from_serialno(const OggOpusFile *_of,int _cur_link,
  function op_fetch_and_process_page (line 1859) | static int op_fetch_and_process_page(OggOpusFile *_of,
  function op_raw_seek (line 2146) | int op_raw_seek(OggOpusFile *_of,opus_int64 _pos){
  function ogg_int64_t (line 2175) | static ogg_int64_t op_get_granulepos(const OggOpusFile *_of,
  function op_page_continues (line 2218) | static int op_page_continues(const ogg_page *_og){
  function op_buffer_continued_data (line 2229) | static void op_buffer_continued_data(OggOpusFile *_of,ogg_page *_og){
  function op_pcm_seek_page (line 2253) | static int op_pcm_seek_page(OggOpusFile *_of,
  function op_pcm_seek (line 2573) | int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset){
  function opus_int64 (line 2662) | opus_int64 op_raw_tell(const OggOpusFile *_of){
  function ogg_int64_t (line 2670) | static ogg_int64_t op_get_pcm_offset(const OggOpusFile *_of,
  function ogg_int64_t (line 2698) | ogg_int64_t op_pcm_tell(const OggOpusFile *_of){
  function op_set_decode_callback (line 2714) | void op_set_decode_callback(OggOpusFile *_of,
  function op_set_gain_offset (line 2720) | int op_set_gain_offset(OggOpusFile *_of,
  function op_set_dither_enabled (line 2735) | void op_set_dither_enabled(OggOpusFile *_of,int _enabled){
  function op_init_buffer (line 2745) | static int op_init_buffer(OggOpusFile *_of){
  function op_decode (line 2766) | static int op_decode(OggOpusFile *_of,op_sample *_pcm,
  function op_read_native (line 2800) | static int op_read_native(OggOpusFile *_of,
  function op_filter_read_native (line 2920) | static int op_filter_read_native(OggOpusFile *_of,void *_dst,int _dst_sz,
  function op_read (line 3021) | int op_read(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size,int *_li){
  function op_stereo_filter (line 3025) | static int op_stereo_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
  function op_read_stereo (line 3058) | int op_read_stereo(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size){
  function op_short2float_filter (line 3064) | static int op_short2float_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
  function op_read_float (line 3076) | int op_read_float(OggOpusFile *_of,float *_pcm,int _buf_size,int *_li){
  function op_short2float_stereo_filter (line 3080) | static int op_short2float_stereo_filter(OggOpusFile *_of,
  function op_read_float_stereo (line 3120) | int op_read_float_stereo(OggOpusFile *_of,float *_pcm,int _buf_size){
  function opus_uint32 (line 3139) | static opus_uint32 op_rand(opus_uint32 _seed){
  function op_float2short_filter (line 3177) | static int op_float2short_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
  function op_read (line 3254) | int op_read(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size,int *_li){
  function op_read_float (line 3258) | int op_read_float(OggOpusFile *_of,float *_pcm,int _buf_size,int *_li){
  function op_stereo_filter (line 3263) | static int op_stereo_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
  function op_float2short_stereo_filter (line 3293) | static int op_float2short_stereo_filter(OggOpusFile *_of,
  function op_read_stereo (line 3313) | int op_read_stereo(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size){
  function op_read_float_stereo (line 3318) | int op_read_float_stereo(OggOpusFile *_of,float *_pcm,int _buf_size){

FILE: ThirdParty/opusfile-0.9/src/stream.c
  type OpusMemStream (line 31) | typedef struct OpusMemStream OpusMemStream;
  type OpusMemStream (line 38) | struct OpusMemStream{
  function op_fread (line 52) | static int op_fread(void *_stream,unsigned char *_ptr,int _buf_size){
  function op_fseek (line 64) | static int op_fseek(void *_stream,opus_int64 _offset,int _whence){
  function opus_int64 (line 106) | static opus_int64 op_ftell(void *_stream){
  function wchar_t (line 139) | static wchar_t *op_utf8_to_utf16(const char *_src){
  function op_mem_read (line 284) | static int op_mem_read(void *_stream,unsigned char *_ptr,int _buf_size){
  function op_mem_seek (line 303) | static int op_mem_seek(void *_stream,opus_int64 _offset,int _whence){
  function opus_int64 (line 334) | static opus_int64 op_mem_tell(void *_stream){
  function op_mem_close (line 340) | static int op_mem_close(void *_stream){

FILE: ThirdParty/opusfile-0.9/src/wincerts.c
  function op_capi_new (line 36) | static int op_capi_new(X509_LOOKUP *_lu){
  function op_capi_free (line 48) | static void op_capi_free(X509_LOOKUP *_lu){
  function op_capi_retrieve_by_subject (line 58) | static int op_capi_retrieve_by_subject(X509_LOOKUP *_lu,int _type,
  function op_capi_get_by_subject (line 72) | static int op_capi_get_by_subject(X509_LOOKUP *_lu,int _type,X509_NAME *...
  function SSL_CTX_set_default_verify_paths_win32 (line 160) | int SSL_CTX_set_default_verify_paths_win32(SSL_CTX *_ssl_ctx){

FILE: ThirdParty/screen_capture_lite - Copy/ScreenCapture.h
  function namespace (line 21) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/SCCommon.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/ScreenCapture.h
  function namespace (line 21) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/ThreadManager.h
  function namespace (line 14) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/ios/CGFrameProcessor.h
  function namespace (line 5) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/ios/NSMouseProcessor.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/linux/X11FrameProcessor.h
  function namespace (line 8) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/linux/X11MouseProcessor.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/windows/DXFrameProcessor.h
  function namespace (line 15) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/windows/GDIFrameProcessor.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/windows/GDIHelpers.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/windows/GDIMouseProcessor.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/include/windows/GDIWindowProcessor.h
  function namespace (line 7) | namespace SL {

FILE: ThirdParty/screen_capture_lite - Copy/src/SCCommon.cpp
  type SL (line 8) | namespace SL {
    type Screen_Capture (line 9) | namespace Screen_Capture {
      function SanitizeRects (line 11) | void SanitizeRects(std::vector<ImageRect> &rects, const Image &img)
      function GetDifs (line 24) | std::vector<ImageRect> GetDifs(const Image &oldimg, const Image &new...
      function Monitor (line 126) | Monitor CreateMonitor(int index, int id, int h, int w, int ox, int o...
      function Image (line 141) | Image Create(const ImageRect &imgrect, int pixelstride, int rowpaddi...
      function Index (line 150) | int Index(const Monitor &mointor) { return mointor.Index; }
      function Id (line 151) | int Id(const Monitor &mointor) { return mointor.Id; }
      function OffsetX (line 152) | int OffsetX(const Monitor &mointor) { return mointor.OffsetX; }
      function OffsetY (line 153) | int OffsetY(const Monitor &mointor) { return mointor.OffsetY; }
      function Height (line 155) | int Height(const Monitor &mointor) { return mointor.Height; }
      function Width (line 156) | int Width(const Monitor &mointor) { return mointor.Width; }
      function Height (line 157) | int Height(const ImageRect &rect) { return rect.bottom - rect.top; }
      function Width (line 158) | int Width(const ImageRect &rect) { return rect.right - rect.left; }
      function Height (line 159) | int Height(const Image &img) { return Height(img.Bounds); }
      function Width (line 160) | int Width(const Image &img) { return Width(img.Bounds); }
      function ImageRect (line 161) | const ImageRect &Rect(const Image &img) { return img.Bounds; }
      function RowStride (line 164) | int RowStride(const Image &img) { return img.Pixelstride * Width(img...
      function RowPadding (line 166) | int RowPadding(const Image &img) { return img.RowPadding; }

FILE: ThirdParty/screen_capture_lite - Copy/src/ScreenCapture.cpp
  type SL (line 12) | namespace SL {
    type Screen_Capture (line 13) | namespace Screen_Capture {
      function Extract (line 15) | void Extract(const Image &img, unsigned char *dst, size_t dst_size)
      function ExtractAndConvertToRGBA (line 32) | void ExtractAndConvertToRGBA(const Image &img, unsigned char *dst, s...
      function ExtractAndConvertToRGB (line 49) | void ExtractAndConvertToRGB(const Image &img, unsigned char *dst, si...
      function ExtractAndConvertToRGB565 (line 65) | void ExtractAndConvertToRGB565(const Image &img, unsigned char *dst,...
      function isMonitorInsideBounds (line 84) | bool isMonitorInsideBounds(const std::vector<Monitor> &monitors, con...
      class ScreenCaptureManager (line 111) | class ScreenCaptureManager : public IScreenCaptureManager {
        method ScreenCaptureManager (line 120) | ScreenCaptureManager()
        method start (line 144) | void start()
        method setFrameChangeInterval (line 169) | virtual void setFrameChangeInterval(const std::shared_ptr<ITimer> ...
        method setMouseChangeInterval (line 174) | virtual void setMouseChangeInterval(const std::shared_ptr<ITimer> ...
        method pause (line 179) | virtual void pause() override { Thread_Data_->CommonData_.Paused =...
        method isPaused (line 180) | virtual bool isPaused() const override { return Thread_Data_->Comm...
        method resume (line 181) | virtual void resume() override { Thread_Data_->CommonData_.Paused ...
      class ScreenCaptureConfiguration (line 184) | class ScreenCaptureConfiguration : public ICaptureConfiguration<Scre...
        method ScreenCaptureConfiguration (line 188) | ScreenCaptureConfiguration(const std::shared_ptr<ScreenCaptureMana...
        method onNewFrame (line 190) | virtual std::shared_ptr<ICaptureConfiguration<ScreenCaptureCallbac...
        method onFrameChanged (line 196) | virtual std::shared_ptr<ICaptureConfiguration<ScreenCaptureCallbac...
        method onMouseChanged (line 202) | virtual std::shared_ptr<ICaptureConfiguration<ScreenCaptureCallbac...
        method start_capturing (line 208) | virtual std::shared_ptr<IScreenCaptureManager> start_capturing() o...
      class WindowCaptureConfiguration (line 217) | class WindowCaptureConfiguration : public ICaptureConfiguration<Wind...
        method WindowCaptureConfiguration (line 221) | WindowCaptureConfiguration(const std::shared_ptr<ScreenCaptureMana...
        method onNewFrame (line 223) | virtual std::shared_ptr<ICaptureConfiguration<WindowCaptureCallbac...
        method onFrameChanged (line 229) | virtual std::shared_ptr<ICaptureConfiguration<WindowCaptureCallbac...
        method onMouseChanged (line 235) | virtual std::shared_ptr<ICaptureConfiguration<WindowCaptureCallbac...
        method start_capturing (line 242) | virtual std::shared_ptr<IScreenCaptureManager> start_capturing() o...
      function CreateCaptureConfiguration (line 250) | std::shared_ptr<ICaptureConfiguration<ScreenCaptureCallback>> Create...
      function CreateCaptureConfiguration (line 257) | std::shared_ptr<ICaptureConfiguration<WindowCaptureCallback>> Create...

FILE: ThirdParty/screen_capture_lite - Copy/src/ios/CGFrameProcessor.cpp
  type SL (line 6) | namespace SL {
    type Screen_Capture (line 7) | namespace Screen_Capture {
      function DUPL_RETURN (line 9) | DUPL_RETURN CGFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 17) | DUPL_RETURN CGFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 23) | DUPL_RETURN CGFrameProcessor::ProcessFrame(const Monitor &curentmoni...
      function DUPL_RETURN (line 78) | DUPL_RETURN CGFrameProcessor::ProcessFrame(const Window &window)

FILE: ThirdParty/screen_capture_lite - Copy/src/ios/GetMonitors.cpp
  type SL (line 6) | namespace SL{
    type Screen_Capture (line 7) | namespace Screen_Capture{
      function GetMonitors (line 9) | std::vector<Monitor> GetMonitors() {

FILE: ThirdParty/screen_capture_lite - Copy/src/ios/GetWindows.cpp
  type SL (line 9) | namespace SL
    type Screen_Capture (line 11) | namespace Screen_Capture
      function GetWindows (line 14) | std::vector<Window> GetWindows()

FILE: ThirdParty/screen_capture_lite - Copy/src/ios/NSMouseProcessor.cpp
  type SL (line 5) | namespace SL {
    type Screen_Capture (line 6) | namespace Screen_Capture {
      function DUPL_RETURN (line 9) | DUPL_RETURN NSMouseProcessor::Init(std::shared_ptr<Thread_Data> data) {
      function DUPL_RETURN (line 19) | DUPL_RETURN NSMouseProcessor::ProcessFrame()

FILE: ThirdParty/screen_capture_lite - Copy/src/ios/ThreadRunner.cpp
  type SL (line 6) | namespace SL{
    type Screen_Capture (line 7) | namespace Screen_Capture{
      function RunCaptureMouse (line 8) | void RunCaptureMouse(std::shared_ptr<Thread_Data> data) {
      function RunCaptureMonitor (line 11) | void RunCaptureMonitor(std::shared_ptr<Thread_Data> data, Monitor mo...
      function RunCaptureWindow (line 14) | void RunCaptureWindow(std::shared_ptr<Thread_Data> data, Window wind...

FILE: ThirdParty/screen_capture_lite - Copy/src/linux/GetMonitors.cpp
  type SL (line 6) | namespace SL
    type Screen_Capture (line 8) | namespace Screen_Capture
      function GetMonitors (line 11) | std::vector<Monitor> GetMonitors()

FILE: ThirdParty/screen_capture_lite - Copy/src/linux/GetWindows.cpp
  type SL (line 7) | namespace SL
    type Screen_Capture (line 9) | namespace Screen_Capture
      function AddWindow (line 12) | void AddWindow(Display* display, XID& window, std::vector<Window>& wnd)
      function GetWindows (line 31) | std::vector<Window> GetWindows()

FILE: ThirdParty/screen_capture_lite - Copy/src/linux/ThreadRunner.cpp
  type SL (line 6) | namespace SL{
    type Screen_Capture (line 7) | namespace Screen_Capture{
      function RunCaptureMouse (line 8) | void RunCaptureMouse(std::shared_ptr<Thread_Data> data) {
      function RunCaptureMonitor (line 11) | void RunCaptureMonitor(std::shared_ptr<Thread_Data> data, Monitor mo...
      function RunCaptureWindow (line 14) | void RunCaptureWindow(std::shared_ptr<Thread_Data> data, Window wind...

FILE: ThirdParty/screen_capture_lite - Copy/src/linux/X11FrameProcessor.cpp
  type SL (line 7) | namespace SL
    type Screen_Capture (line 9) | namespace Screen_Capture
      function DUPL_RETURN (line 31) | DUPL_RETURN X11FrameProcessor::Init(std::shared_ptr<Thread_Data> dat...
      function DUPL_RETURN (line 61) | DUPL_RETURN X11FrameProcessor::Init(std::shared_ptr<Thread_Data> dat...
      function DUPL_RETURN (line 92) | DUPL_RETURN X11FrameProcessor::ProcessFrame(const Monitor& curentmon...
      function DUPL_RETURN (line 118) | DUPL_RETURN X11FrameProcessor::ProcessFrame(Window& selectedwindow){

FILE: ThirdParty/screen_capture_lite - Copy/src/linux/X11MouseProcessor.cpp
  type SL (line 6) | namespace SL {
    type Screen_Capture (line 7) | namespace Screen_Capture {
      function DUPL_RETURN (line 21) | DUPL_RETURN X11MouseProcessor::Init(std::shared_ptr<Thread_Data> dat...
      function DUPL_RETURN (line 37) | DUPL_RETURN X11MouseProcessor::ProcessFrame()

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/DXFrameProcessor.cpp
  type SL (line 9) | namespace SL {
    type Screen_Capture (line 10) | namespace Screen_Capture {
      function DUPL_RETURN (line 12) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 13) | DUPL_RETURN DXFrameProcessor::ProcessFrame() { return DUPL_RETURN::D...
      type DX_RESOURCES (line 21) | struct DX_RESOURCES {
      type DUPLE_RESOURCES (line 25) | struct DUPLE_RESOURCES {
      function DUPL_RETURN (line 55) | DUPL_RETURN ProcessFailure(ID3D11Device *Device, LPCWSTR Str, LPCWST...
      function DUPL_RETURN (line 105) | DUPL_RETURN Initialize(DX_RESOURCES &data)
      function DUPL_RETURN (line 140) | DUPL_RETURN Initialize(DUPLE_RESOURCES &r, ID3D11Device *device, con...
      function RECT (line 182) | RECT ConvertRect(RECT Dirty, const DXGI_OUTPUT_DESC &DeskDesc)
      class AquireFrameRAII (line 225) | class AquireFrameRAII {
        method TryRelease (line 229) | void TryRelease()
        method AquireFrameRAII (line 241) | AquireFrameRAII(IDXGIOutputDuplication *dupl) : _DuplLock(dupl), A...
        method HRESULT (line 244) | HRESULT AcquireNextFrame(UINT TimeoutInMilliseconds, DXGI_OUTDUPL_...
      class MAPPED_SUBRESOURCERAII (line 252) | class MAPPED_SUBRESOURCERAII {
        method MAPPED_SUBRESOURCERAII (line 258) | MAPPED_SUBRESOURCERAII(ID3D11DeviceContext *context) : _Context(co...
        method HRESULT (line 261) | HRESULT Map(ID3D11Resource *pResource, UINT Subresource, D3D11_MAP...
      function DUPL_RETURN (line 272) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 300) | DUPL_RETURN DXFrameProcessor::ProcessFrame(const Monitor &currentmon...
    type Screen_Capture (line 20) | namespace Screen_Capture {
      function DUPL_RETURN (line 12) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 13) | DUPL_RETURN DXFrameProcessor::ProcessFrame() { return DUPL_RETURN::D...
      type DX_RESOURCES (line 21) | struct DX_RESOURCES {
      type DUPLE_RESOURCES (line 25) | struct DUPLE_RESOURCES {
      function DUPL_RETURN (line 55) | DUPL_RETURN ProcessFailure(ID3D11Device *Device, LPCWSTR Str, LPCWST...
      function DUPL_RETURN (line 105) | DUPL_RETURN Initialize(DX_RESOURCES &data)
      function DUPL_RETURN (line 140) | DUPL_RETURN Initialize(DUPLE_RESOURCES &r, ID3D11Device *device, con...
      function RECT (line 182) | RECT ConvertRect(RECT Dirty, const DXGI_OUTPUT_DESC &DeskDesc)
      class AquireFrameRAII (line 225) | class AquireFrameRAII {
        method TryRelease (line 229) | void TryRelease()
        method AquireFrameRAII (line 241) | AquireFrameRAII(IDXGIOutputDuplication *dupl) : _DuplLock(dupl), A...
        method HRESULT (line 244) | HRESULT AcquireNextFrame(UINT TimeoutInMilliseconds, DXGI_OUTDUPL_...
      class MAPPED_SUBRESOURCERAII (line 252) | class MAPPED_SUBRESOURCERAII {
        method MAPPED_SUBRESOURCERAII (line 258) | MAPPED_SUBRESOURCERAII(ID3D11DeviceContext *context) : _Context(co...
        method HRESULT (line 261) | HRESULT Map(ID3D11Resource *pResource, UINT Subresource, D3D11_MAP...
      function DUPL_RETURN (line 272) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 300) | DUPL_RETURN DXFrameProcessor::ProcessFrame(const Monitor &currentmon...
  type SL (line 19) | namespace SL {
    type Screen_Capture (line 10) | namespace Screen_Capture {
      function DUPL_RETURN (line 12) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 13) | DUPL_RETURN DXFrameProcessor::ProcessFrame() { return DUPL_RETURN::D...
      type DX_RESOURCES (line 21) | struct DX_RESOURCES {
      type DUPLE_RESOURCES (line 25) | struct DUPLE_RESOURCES {
      function DUPL_RETURN (line 55) | DUPL_RETURN ProcessFailure(ID3D11Device *Device, LPCWSTR Str, LPCWST...
      function DUPL_RETURN (line 105) | DUPL_RETURN Initialize(DX_RESOURCES &data)
      function DUPL_RETURN (line 140) | DUPL_RETURN Initialize(DUPLE_RESOURCES &r, ID3D11Device *device, con...
      function RECT (line 182) | RECT ConvertRect(RECT Dirty, const DXGI_OUTPUT_DESC &DeskDesc)
      class AquireFrameRAII (line 225) | class AquireFrameRAII {
        method TryRelease (line 229) | void TryRelease()
        method AquireFrameRAII (line 241) | AquireFrameRAII(IDXGIOutputDuplication *dupl) : _DuplLock(dupl), A...
        method HRESULT (line 244) | HRESULT AcquireNextFrame(UINT TimeoutInMilliseconds, DXGI_OUTDUPL_...
      class MAPPED_SUBRESOURCERAII (line 252) | class MAPPED_SUBRESOURCERAII {
        method MAPPED_SUBRESOURCERAII (line 258) | MAPPED_SUBRESOURCERAII(ID3D11DeviceContext *context) : _Context(co...
        method HRESULT (line 261) | HRESULT Map(ID3D11Resource *pResource, UINT Subresource, D3D11_MAP...
      function DUPL_RETURN (line 272) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 300) | DUPL_RETURN DXFrameProcessor::ProcessFrame(const Monitor &currentmon...
    type Screen_Capture (line 20) | namespace Screen_Capture {
      function DUPL_RETURN (line 12) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 13) | DUPL_RETURN DXFrameProcessor::ProcessFrame() { return DUPL_RETURN::D...
      type DX_RESOURCES (line 21) | struct DX_RESOURCES {
      type DUPLE_RESOURCES (line 25) | struct DUPLE_RESOURCES {
      function DUPL_RETURN (line 55) | DUPL_RETURN ProcessFailure(ID3D11Device *Device, LPCWSTR Str, LPCWST...
      function DUPL_RETURN (line 105) | DUPL_RETURN Initialize(DX_RESOURCES &data)
      function DUPL_RETURN (line 140) | DUPL_RETURN Initialize(DUPLE_RESOURCES &r, ID3D11Device *device, con...
      function RECT (line 182) | RECT ConvertRect(RECT Dirty, const DXGI_OUTPUT_DESC &DeskDesc)
      class AquireFrameRAII (line 225) | class AquireFrameRAII {
        method TryRelease (line 229) | void TryRelease()
        method AquireFrameRAII (line 241) | AquireFrameRAII(IDXGIOutputDuplication *dupl) : _DuplLock(dupl), A...
        method HRESULT (line 244) | HRESULT AcquireNextFrame(UINT TimeoutInMilliseconds, DXGI_OUTDUPL_...
      class MAPPED_SUBRESOURCERAII (line 252) | class MAPPED_SUBRESOURCERAII {
        method MAPPED_SUBRESOURCERAII (line 258) | MAPPED_SUBRESOURCERAII(ID3D11DeviceContext *context) : _Context(co...
        method HRESULT (line 261) | HRESULT Map(ID3D11Resource *pResource, UINT Subresource, D3D11_MAP...
      function DUPL_RETURN (line 272) | DUPL_RETURN DXFrameProcessor::Init(std::shared_ptr<Thread_Data> data...
      function DUPL_RETURN (line 300) | DUPL_RETURN DXFrameProcessor::ProcessFrame(const Monitor &currentmon...

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/GDIFrameProcessor.cpp
  type SL (line 4) | namespace SL {
    type Screen_Capture (line 5) | namespace Screen_Capture {
      function DUPL_RETURN (line 7) | DUPL_RETURN GDIFrameProcessor::Init(std::shared_ptr<Thread_Data> dat...
      function DUPL_RETURN (line 23) | DUPL_RETURN GDIFrameProcessor::Init(std::shared_ptr<Thread_Data> dat...
      function DUPL_RETURN (line 46) | DUPL_RETURN GDIFrameProcessor::ProcessFrame(const Monitor &currentmo...
      function DUPL_RETURN (line 85) | DUPL_RETURN GDIFrameProcessor::ProcessFrame(Window &selectedwindow)

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/GDIMouseProcessor.cpp
  type SL (line 4) | namespace SL {
    type Screen_Capture (line 5) | namespace Screen_Capture {
      function DUPL_RETURN (line 7) | DUPL_RETURN GDIMouseProcessor::Init(std::shared_ptr<Thread_Data> dat...
      function DUPL_RETURN (line 19) | DUPL_RETURN GDIMouseProcessor::ProcessFrame()

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/GDIWindowProcessor.cpp
  type SL (line 3) | namespace SL {
    type Screen_Capture (line 4) | namespace Screen_Capture {

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/GetMonitors.cpp
  type SL (line 7) | namespace SL {
    type Screen_Capture (line 8) | namespace Screen_Capture {
      function GetMonitors (line 10) | std::vector<Monitor> GetMonitors()

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/GetWindows.cpp
  type SL (line 9) | namespace SL {
    type Screen_Capture (line 10) | namespace Screen_Capture {
      type srch (line 12) | struct srch {
      function BOOL (line 15) | BOOL CALLBACK EnumWindowsProc(_In_ HWND hwnd, _In_ LPARAM lParam)
      function GetWindows (line 33) | std::vector<Window> GetWindows()

FILE: ThirdParty/screen_capture_lite - Copy/src/windows/ThreadRunner.cpp
  type SL (line 16) | namespace SL {
    type Screen_Capture (line 17) | namespace Screen_Capture {
      function ProcessExit (line 20) | void ProcessExit(DUPL_RETURN Ret, T* TData) {
      function SwitchToInputDesktop (line 35) | bool SwitchToInputDesktop(const std::shared_ptr<T> data) {
      function RunCaptureMouse (line 59) | void RunCaptureMouse(std::shared_ptr<Thread_Data> data) {
      function RunCaptureMonitor (line 63) | void RunCaptureMonitor(std::shared_ptr<Thread_Data> data, Monitor mo...
      function RunCaptureWindow (line 78) | void RunCaptureWindow(std::shared_ptr<Thread_Data> data, Window wnd) {

FILE: ThirdParty/screen_capture_lite/include/ScreenCapture.h
  function namespace (line 21) | namespace SL {
Condensed preview — 407 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,616K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 1147,
    "preview": "Please, set a title for the issue that starts with \"BUG\" or \"FEATURE REQUEST\" accordingly. Use [the Pinbox Discord Serve"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 974,
    "preview": "Please, set a title for the pull request that starts with \"BUG\" or \"FEATURE REQUEST\" accordingly.\n\n<!--- Provide a gener"
  },
  {
    "path": ".gitignore",
    "chars": 6604,
    "preview": "## Ignore Visual Studio temporary files, build results, and\r\n## files generated by popular Visual Studio add-ons.\r\n##\r\n#"
  },
  {
    "path": "LICENSE",
    "chars": 939,
    "preview": "\t\tGLWT(Good Luck With That) Public License\n                 Copyright (c) Everyone, except Author\n\nEveryone is permitted"
  },
  {
    "path": "PinBox/PinBox/Makefile",
    "chars": 10019,
    "preview": "export DEVKITPRO = /c/devkitPro\r\nexport DEVKITARM = /c/devkitPro/devkitARM\r\n#-------------------------------------------"
  },
  {
    "path": "PinBox/PinBox/PinBox.rsf",
    "chars": 7779,
    "preview": "BasicInfo:\r\n  Title                   : PINBOX r0.2.1\r\n  ProductCode             : CTR-P-PINBOX\r\n  ContentType          "
  },
  {
    "path": "PinBox/PinBox/PinBox.vcxproj",
    "chars": 11999,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "PinBox/PinBox/PinBox.vcxproj.filters",
    "chars": 4141,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "PinBox/PinBox/build-cia.bat",
    "chars": 62,
    "preview": "start make clean & make all & make PinBox-strip.elf & make cia"
  },
  {
    "path": "PinBox/PinBox/create-smdh.bat",
    "chars": 145,
    "preview": "start smdhtool --create \"PinBox\" \"3DS Client - PC Desktop Streaming\" \"Namkazt\" \"E:\\3ds\\PinBoxStreaming\\PinBox\\PinBox\\ass"
  },
  {
    "path": "PinBox/PinBox/include/Anim.h",
    "chars": 400,
    "preview": "#ifndef _PP_ANIM_H_\n#define _PP_ANIM_H_\n\n#include <easing.h>\n#include <3ds/services/am.h>\n#include <3ds/ndsp/ndsp.h>\n#in"
  },
  {
    "path": "PinBox/PinBox/include/Color.h",
    "chars": 5217,
    "preview": "#ifndef _PP_COLOR_H_\n#define _PP_COLOR_H_\n\n#include <functional>\n\n#define M_MIN(a,b) (((a) < (b)) ? (a) : (b))\n#define M"
  },
  {
    "path": "PinBox/PinBox/include/ConfigManager.h",
    "chars": 776,
    "preview": "#pragma once\r\n#ifndef _CONFIG_MANAGER_H_\r\n#define _CONFIG_MANAGER_H_\r\n\r\n#include <3ds.h>\r\n#include \"libconfig.h\"\r\n#inclu"
  },
  {
    "path": "PinBox/PinBox/include/HubItem.h",
    "chars": 331,
    "preview": "#ifndef _PP_HUB_TITEM_H_\n#define _PP_HUB_TITEM_H_\n#include <3ds.h>\n\nenum HubItemType\n{\n\tHUB_SCREEN = 0x0,\n\tHUB_APP,\n\tHUB"
  },
  {
    "path": "PinBox/PinBox/include/Logger.h",
    "chars": 97,
    "preview": "#ifndef _PP_LOGGER_H_\n#define _PP_LOGGER_H_\n#include <cstdio>\n\n\nclass Logger\n{\npublic:\n};\n\n#endif"
  },
  {
    "path": "PinBox/PinBox/include/Mutex.h",
    "chars": 235,
    "preview": "#pragma once\r\n#include <3ds.h>\r\n#include <3ds/svc.h>\r\n\r\nclass Mutex\r\n{\r\nprivate:\r\n\tLightLock\t\t\t\t\t\t\t_handler;\r\n\tbool\t\t\t\t\t"
  },
  {
    "path": "PinBox/PinBox/include/PPAudio.h",
    "chars": 412,
    "preview": "#pragma once\n#ifndef _PP_AUDIO_H_\n#define _PP_AUDIO_H_\n\n#include <3ds.h>\n#include <libavutil/frame.h>\n#include \"Mutex.h\""
  },
  {
    "path": "PinBox/PinBox/include/PPDecoder.h",
    "chars": 1734,
    "preview": "#pragma once\n#include <3ds.h>\n#include \"Mutex.h\"\n#include \"yuv_rgb.h\"\n#include <3ds/services/y2r.h>\n//ffmpeg\nextern \"C\" "
  },
  {
    "path": "PinBox/PinBox/include/PPGraphics.h",
    "chars": 5485,
    "preview": "#pragma once\r\n#ifndef _PP_GRAPHICS_H_\r\n#define _PP_GRAPHICS_H_\r\n\r\n#include <3ds.h>\r\n#include <3ds/gfx.h>\r\n#include <citr"
  },
  {
    "path": "PinBox/PinBox/include/PPMessage.h",
    "chars": 2149,
    "preview": "#pragma once\r\n#ifndef _PP_MESSAGE_H_\r\n#define _PP_MESSAGE_H_\r\n\r\n#include <3ds.h>\r\n#include <cstdint>\r\n#include <cstring>"
  },
  {
    "path": "PinBox/PinBox/include/PPSession.h",
    "chars": 4359,
    "preview": "#pragma once\r\n#ifndef _PP_SESSION_H_\r\n#define _PP_SESSION_H_\r\n\r\n//======================================================"
  },
  {
    "path": "PinBox/PinBox/include/PPSessionManager.h",
    "chars": 4084,
    "preview": "#pragma once\r\n#include <vector>\r\n#include \"PPSession.h\"\r\n#include <webp/decode.h>\r\n#include <turbojpeg.h>\r\n#include \"opu"
  },
  {
    "path": "PinBox/PinBox/include/PPUI.h",
    "chars": 4852,
    "preview": "#pragma once\r\n#ifndef _PP_UI_H_\r\n#define _PP_UI_H_\r\n#include <3ds.h>\r\n#include <string>\r\n#include <citro3d.h>\r\n#include "
  },
  {
    "path": "PinBox/PinBox/include/constant.h",
    "chars": 122,
    "preview": "#pragma once\n\n#define SOC_ALIGN       0x1000\n#define SOC_BUFFERSIZE  0x100000\n\n#define CONSOLE_DEBUG 1\n#define USE_CITRA"
  },
  {
    "path": "PinBox/PinBox/include/easing.h",
    "chars": 602,
    "preview": "#pragma once \n\nenum easing_functions\n{\n\tEaseInSine,\n\tEaseOutSine,\n\tEaseInOutSine,\n\tEaseInQuad,\n\tEaseOutQuad,\n\tEaseInOutQ"
  },
  {
    "path": "PinBox/PinBox/include/lodepng.h",
    "chars": 90239,
    "preview": "/*\nLodePNG version 20180819\n\nCopyright (c) 2005-2018 Lode Vandevenne\n\nThis software is provided 'as-is', without any exp"
  },
  {
    "path": "PinBox/PinBox/include/yuv_rgb.h",
    "chars": 2916,
    "preview": "// Copyright 2016 Adrien Descamps\n// Distributed under BSD 3-Clause License\n\n// Provide optimized functions to convert i"
  },
  {
    "path": "PinBox/PinBox/source/ConfigManager.cpp",
    "chars": 7052,
    "preview": "#include \"ConfigManager.h\"\r\n#define CONFIG_FILE_NAME \"pinbox/pinbox.cfg\"\r\n\r\nstatic ConfigManager* ref;\r\n\r\nConfigManager*"
  },
  {
    "path": "PinBox/PinBox/source/Mutex.cpp",
    "chars": 394,
    "preview": "#include \"Mutex.h\"\r\n\r\n\r\n\r\nMutex::Mutex()\r\n{\r\n\t_isLocked = false;\r\n\tLightLock_Init(&_handler);\r\n}\r\n\r\n\r\nMutex::~Mutex()\r\n{"
  },
  {
    "path": "PinBox/PinBox/source/PPAudio.cpp",
    "chars": 2197,
    "preview": "#include \"PPAudio.h\"\n#include <cstring>\n#include <cstdio>\n\n#define SAMPLERATE 22050\n#define SAMPLESPERBUF 1152\n#define B"
  },
  {
    "path": "PinBox/PinBox/source/PPDecoder.cpp",
    "chars": 7908,
    "preview": "#include \"PPDecoder.h\"\n#include \"PPAudio.h\"\n\nstatic u8* pRGBBuffer = nullptr;\n\nvolatile bool initialized = false;\n\n\nPPDe"
  },
  {
    "path": "PinBox/PinBox/source/PPGraphics.cpp",
    "chars": 25876,
    "preview": "#include \"PPGraphics.h\"\r\n#include \"vshader_shbin.h\"\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <3ds/gpu/enums.h>\r\n"
  },
  {
    "path": "PinBox/PinBox/source/PPMessage.cpp",
    "chars": 1534,
    "preview": "#include \"PPMessage.h\"\r\n\r\nPPMessage::~PPMessage()\r\n{\r\n\tif (g_content != nullptr) \r\n\t\tfree(g_content);\r\n}\r\n\r\nu8* PPMessag"
  },
  {
    "path": "PinBox/PinBox/source/PPSession.cpp",
    "chars": 17150,
    "preview": "#include \"PPSession.h\"\r\n#include \"PPGraphics.h\"\r\n#include \"PPSessionManager.h\"\r\n#include \"ConfigManager.h\"\r\n\r\n#define ON"
  },
  {
    "path": "PinBox/PinBox/source/PPSessionManager.cpp",
    "chars": 4286,
    "preview": "#include \"PPSessionManager.h\"\r\n#include \"PPGraphics.h\"\r\n#include \"ConfigManager.h\"\r\n#include \"Logger.h\"\r\n\r\nPPSessionMana"
  },
  {
    "path": "PinBox/PinBox/source/PPUI.cpp",
    "chars": 45666,
    "preview": "#include \"PPUI.h\"\r\n#include <cstdio>\r\n#include \"ConfigManager.h\"\r\n#include \"Anim.h\"\r\n\r\nvolatile u32 kDown;\r\nvolatile u32"
  },
  {
    "path": "PinBox/PinBox/source/easing.cpp",
    "chars": 5902,
    "preview": "#include <cmath>\n#include <map>\n\n#include \"easing.h\"\n\n#ifndef PI\n#define PI 3.1415926545\n#endif\n\ndouble easeInSine( doub"
  },
  {
    "path": "PinBox/PinBox/source/lodepng.cpp",
    "chars": 229363,
    "preview": "/*\nLodePNG version 20180819\n\nCopyright (c) 2005-2018 Lode Vandevenne\n\nThis software is provided 'as-is', without any exp"
  },
  {
    "path": "PinBox/PinBox/source/main.cpp",
    "chars": 4924,
    "preview": "//===============================================================================\r\n// enable this for debug log console"
  },
  {
    "path": "PinBox/PinBox/source/vshader.v.pica",
    "chars": 606,
    "preview": "; Uniforms\n.fvec projection[4]\n\n; Constants\n.constf RGBA8_TO_FLOAT4(0.00392156862, 0, 0, 0)\n.constf ONES(1.0, 1.0, 1.0, "
  },
  {
    "path": "PinBox/PinBox/source/yuv_rgb.c",
    "chars": 29467,
    "preview": "// Copyright 2016 Adrien Descamps\n// Distributed under BSD 3-Clause License\n\n#include \"yuv_rgb.h\"\n\n//#include <x86intrin"
  },
  {
    "path": "PinBox/PinBox/tools/citra/README.md",
    "chars": 3352,
    "preview": "**BEFORE FILING AN ISSUE, READ THE RELEVANT SECTION IN THE [CONTRIBUTING](https://github.com/citra-emu/citra/blob/master"
  },
  {
    "path": "PinBox/PinBox/tools/citra/license.txt",
    "chars": 18731,
    "preview": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc."
  },
  {
    "path": "PinBox/PinBox.sln",
    "chars": 1680,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\r\nVisualStudioVersion = 14.0.25420.1\r\n"
  },
  {
    "path": "PinBoxServer/Check-Pinbox-Firewall-Rules.bat",
    "chars": 803,
    "preview": "@echo off\ntitle = Pinbox Firewall Setup\necho Checking PinBox Server executable...\nIF NOT EXIST %~dp0PinBoxServer.exe GOT"
  },
  {
    "path": "PinBoxServer/PinBoxServer/AudioStreamSession.cpp",
    "chars": 8295,
    "preview": "#include \"stdafx.h\"\r\n#include \"AudioStreamSession.h\"\r\n#include <iostream>\r\n#include <cassert>\r\n#include \"const.h\"\r\n\r\n#de"
  },
  {
    "path": "PinBoxServer/PinBoxServer/AudioStreamSession.h",
    "chars": 1150,
    "preview": "#pragma once\r\n#ifndef _AUDIO_STREAM_SESSION_H__\r\n#define _AUDIO_STREAM_SESSION_H__\r\n\r\n#include <windows.h>\r\n#include <mm"
  },
  {
    "path": "PinBoxServer/PinBoxServer/Check-Pinbox-Firewall-Rules.bat",
    "chars": 803,
    "preview": "@echo off\ntitle = Pinbox Firewall Setup\necho Checking PinBox Server executable...\nIF NOT EXIST %~dp0PinBoxServer.exe GOT"
  },
  {
    "path": "PinBoxServer/PinBoxServer/HubItem.h",
    "chars": 430,
    "preview": "#ifndef _PP_HUB_TITEM_H_\n#define _PP_HUB_TITEM_H_\n#include \"PPMessage.h\"\n\nenum HubItemType\n{\n\tHUB_SCREEN = 0x0,\n\tHUB_APP"
  },
  {
    "path": "PinBoxServer/PinBoxServer/InputStreamSession.cpp",
    "chars": 15851,
    "preview": "#include \"stdafx.h\"\r\n#include \"InputStreamSession.h\"\r\n#include <fakeinput.hpp>\r\n#include <libconfig.h++>\r\n#include <iost"
  },
  {
    "path": "PinBoxServer/PinBoxServer/InputStreamSession.h",
    "chars": 2844,
    "preview": "#pragma once\r\n#ifndef _PP_INPUT_STREAM_SESSION_H_\r\n#define _PP_INPUT_STREAM_SESSION_H_\r\n\r\n#define BIT(n) (1U<<(n))\r\n#inc"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PPClientSession.cpp",
    "chars": 9089,
    "preview": "#include \"stdafx.h\"\r\n#include \"PPClientSession.h\"\r\n#include \"PPMessage.h\"\r\n#include \"PPServer.h\"\r\n#include \"HubItem.h\"\r\n"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PPClientSession.h",
    "chars": 2395,
    "preview": "#pragma once\r\n#ifndef _PP_CLIENTSESISON_H_\r\n#define _PP_CLIENTSESISON_H_\r\n\r\n#include <fstream>\r\n#include \"PPMessage.h\"\r\n"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PPMessage.cpp",
    "chars": 1486,
    "preview": "#include \"stdafx.h\"\r\n#include \"PPMessage.h\"\r\n\r\n\r\nPPMessage::~PPMessage()\r\n{\r\n\tif (g_content != nullptr)\r\n\t\tfree(g_conten"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PPMessage.h",
    "chars": 2667,
    "preview": "#pragma once\r\n#ifndef _PP_MESSAGE_H_\r\n#define _PP_MESSAGE_H_\r\n\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <cstdli"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PPServer.cpp",
    "chars": 3964,
    "preview": "#include \"stdafx.h\"\r\n#include \"PPServer.h\"\r\n#include \"ServerConfig.h\"\r\n#include <string>\r\n\r\nvoid PPServer::PrintIPAddres"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PPServer.h",
    "chars": 591,
    "preview": "#pragma once\r\n\r\n#ifndef _PP_SERVER_H__\r\n#define _PP_SERVER_H__\r\n\r\n// socket\r\n#include <winsock2.h>\r\n#include <winsock.h>"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PinBoxServer.cpp",
    "chars": 269,
    "preview": "// PinBoxServer.cpp : Defines the entry point for the console application.\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"PPServe"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PinBoxServer.vcxproj",
    "chars": 11646,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "PinBoxServer/PinBoxServer/PinBoxServer.vcxproj.filters",
    "chars": 3266,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "PinBoxServer/PinBoxServer/ScreenCaptureSession.cpp",
    "chars": 10598,
    "preview": "#include \"stdafx.h\"\r\n\r\n#include \"ScreenCaptureSession.h\"\r\n\r\n#include \"PPServer.h\"\r\n#include \"ServerConfig.h\"\r\n#include <"
  },
  {
    "path": "PinBoxServer/PinBoxServer/ScreenCaptureSession.h",
    "chars": 3955,
    "preview": "#pragma once\r\n\r\n#ifndef _SCREEN_CAPTURE_SESSION_H__\r\n#define _SCREEN_CAPTURE_SESSION_H__\r\n\r\n// frame capture\r\n#include \""
  },
  {
    "path": "PinBoxServer/PinBoxServer/ServerConfig.cpp",
    "chars": 3875,
    "preview": "#include \"stdafx.h\"\r\n#include \"ServerConfig.h\"\r\n#include <ScreenCapture.h>\r\n#include <fstream>\r\n#include <sstream>\r\n\r\n\r\n"
  },
  {
    "path": "PinBoxServer/PinBoxServer/ServerConfig.h",
    "chars": 494,
    "preview": "#pragma once\r\n#ifndef _PP_SERVER_CONFIG_H__\r\n#define _PP_SERVER_CONFIG_H__\r\n#include <libconfig.h++>\r\n#include <iostream"
  },
  {
    "path": "PinBoxServer/PinBoxServer/UIMainWindow.cpp",
    "chars": 203,
    "preview": "#include \"stdafx.h\"\r\n#include \"UIMainWindow.h\"\r\n\r\n\r\n\r\nUIMainWindow::UIMainWindow(QWidget* parent) : QMainWindow(parent),"
  },
  {
    "path": "PinBoxServer/PinBoxServer/UIMainWindow.h",
    "chars": 215,
    "preview": "#pragma once\r\n#include <QtWidgets/QMainWindow>\r\n\r\nclass UIMainWindow : public QMainWindow\r\n{\r\n\tQ_OBJECT\r\npublic:\r\n\texpli"
  },
  {
    "path": "PinBoxServer/PinBoxServer/const.h",
    "chars": 868,
    "preview": "#pragma once\n#define RESET   \"\\033[0m\"\n#define BLACK   \"\\033[30m\"      /* Black */\n#define RED     \"\\033[31m\"      /* Re"
  },
  {
    "path": "PinBoxServer/PinBoxServer/hub.cfg",
    "chars": 586,
    "preview": "//--------------------------------------------\n// PinBox hub\n//--------------------------------------------\nhub = \n(\n\t{\n"
  },
  {
    "path": "PinBoxServer/PinBoxServer/input.cfg",
    "chars": 1672,
    "preview": "//--------------------------------------------\r\n// PinBox input config\r\n//--------------------------------------------\r\n"
  },
  {
    "path": "PinBoxServer/PinBoxServer/server.cfg",
    "chars": 806,
    "preview": "//--------------------------------------------\r\n// PinBox server config\r\n//--------------------------------------------\r"
  },
  {
    "path": "PinBoxServer/PinBoxServer/stdafx.cpp",
    "chars": 299,
    "preview": "// stdafx.cpp : source file that includes just the standard includes\r\n// PinBoxServer.pch will be the pre-compiled heade"
  },
  {
    "path": "PinBoxServer/PinBoxServer/stdafx.h",
    "chars": 320,
    "preview": "// stdafx.h : include file for standard system include files,\r\n// or project specific include files that are used freque"
  },
  {
    "path": "PinBoxServer/PinBoxServer/targetver.h",
    "chars": 314,
    "preview": "#pragma once\r\n\r\n// Including SDKDDKVer.h defines the highest available Windows platform.\r\n\r\n// If you wish to build your"
  },
  {
    "path": "PinBoxServer/PinBoxServer/winmain-inl.h",
    "chars": 357,
    "preview": "#pragma once\n\nnamespace {\n\tstruct OnApp {\n\t\tOnApp() {\n#ifdef WIN32\n\t\t\t// Initialize Winsock 2.2\n\t\t\tWSADATA wsaData;\n\t\t\ti"
  },
  {
    "path": "PinBoxServer/PinBoxServer.sln",
    "chars": 1316,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\r\nVisualStudioVersion = 14.0.25420.1\r\n"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPDecoder.cpp",
    "chars": 3932,
    "preview": "#include \"PPDecoder.h\"\n#include <iostream>\n#include <opencv2/core/mat.hpp>\n#include <opencv2/shape/hist_cost.hpp>\n#inclu"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPDecoder.h",
    "chars": 2486,
    "preview": "#pragma once\n#include \"PPMessage.h\"\n#include <mutex>\n\n//#include <3ds.h>\n\n//ffmpeg\nextern \"C\" {\n#include <libavutil/imgu"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPMessage.cpp",
    "chars": 1583,
    "preview": "#include \"PPMessage.h\"\r\n\r\n\r\nPPMessage::~PPMessage()\r\n{\r\n\tif (g_content != nullptr)\r\n\t\tfree(g_content);\r\n}\r\n\r\nu8* PPMessa"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPMessage.h",
    "chars": 2179,
    "preview": "#pragma once\r\n#ifndef _PP_MESSAGE_H_\r\n#define _PP_MESSAGE_H_\r\n\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <cstdli"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPNetwork.cpp",
    "chars": 13824,
    "preview": "#include \"PPNetwork.h\"\r\n#include <iostream>\r\n#include \"PPSession.h\"\r\n\r\n/*\r\n * @brief: thread handler function\r\n */\r\nvoid"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPNetwork.h",
    "chars": 2297,
    "preview": "#pragma once\r\n#ifndef _PP_NETWORK_H_\r\n#define _PP_NETWORK_H_\r\n\r\n#include <string.h>\r\n#include <WinSock2.h>\r\n#include <ip"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPSession.cpp",
    "chars": 10475,
    "preview": "#include \"PPSession.h\"\r\n#include \"PPSessionManager.h\"\r\n\r\nPPSession::~PPSession()\r\n{\r\n\tif (g_network != nullptr) delete g"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPSession.h",
    "chars": 4402,
    "preview": "#pragma once\r\n#ifndef _PP_SESSION_H_\r\n#define _PP_SESSION_H_\r\n\r\n//======================================================"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPSessionManager.cpp",
    "chars": 2327,
    "preview": "#include \"PPSessionManager.h\"\r\n\r\n\r\n\r\n\r\nPPSessionManager::PPSessionManager()\r\n{\r\n}\r\n\r\n\r\nPPSessionManager::~PPSessionManag"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PPSessionManager.h",
    "chars": 1232,
    "preview": "#pragma once\r\n#include <vector>\r\n#include \"PPSession.h\"\r\n#include <webp/decode.h>\r\n#include \"opusfile.h\"\r\n#include \"PPDe"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PinBoxTestProject.vcxproj",
    "chars": 6661,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/PinBoxTestProject.vcxproj.filters",
    "chars": 1938,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/main.cpp",
    "chars": 1176,
    "preview": "\r\n#include <iostream>\r\n#include \"PPSessionManager.h\"\r\n#define __STDC_CONSTANT_MACROS\r\n\r\nvoid updateSessionManager(void* "
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/yuv_rgb.c",
    "chars": 29467,
    "preview": "// Copyright 2016 Adrien Descamps\n// Distributed under BSD 3-Clause License\n\n#include \"yuv_rgb.h\"\n\n//#include <x86intrin"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject/yuv_rgb.h",
    "chars": 2916,
    "preview": "// Copyright 2016 Adrien Descamps\n// Distributed under BSD 3-Clause License\n\n// Provide optimized functions to convert i"
  },
  {
    "path": "PinBoxTestProject/PinBoxTestProject.sln",
    "chars": 1331,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\r\nVisualStudioVersion = 14.0.25420.1\r\n"
  },
  {
    "path": "README.md",
    "chars": 2216,
    "preview": "\r\n[![N|Solid](https://cdn.discordapp.com/attachments/340110838947905538/398531319048699905/test.png)](https://github.com"
  },
  {
    "path": "ThirdParty/FakeInput/LICENSE",
    "chars": 1109,
    "preview": "MIT license\n-----------\n\nCopyright (C) 2011 by Richard Jedlicka <uiii.dev@gmail.com>\n\nPermission is hereby granted, free"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/action.hpp",
    "chars": 1694,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/actions.hpp",
    "chars": 1372,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/actionsequence.cpp",
    "chars": 4051,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/actionsequence.hpp",
    "chars": 5984,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/commandaction.cpp",
    "chars": 1556,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/commandaction.hpp",
    "chars": 2009,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/keyaction.cpp",
    "chars": 2042,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/keyaction.hpp",
    "chars": 2967,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/mouseaction.cpp",
    "chars": 3091,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/mouseaction.hpp",
    "chars": 5723,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/waitaction.cpp",
    "chars": 1538,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/actions/waitaction.hpp",
    "chars": 1966,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/config.hpp",
    "chars": 1427,
    "preview": "/**\r\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\r\n *\r\n * Copyright (C) 2011 by Ric"
  },
  {
    "path": "ThirdParty/FakeInput/src/config.hpp.cmake",
    "chars": 1398,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/display_unix.cpp",
    "chars": 1398,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/display_unix.hpp",
    "chars": 1518,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/fakeinput.hpp",
    "chars": 1318,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key.hpp",
    "chars": 1716,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key_base.cpp",
    "chars": 1570,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key_base.hpp",
    "chars": 2000,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key_unix.cpp",
    "chars": 2414,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key_unix.hpp",
    "chars": 3546,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key_win.cpp",
    "chars": 3242,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/key_win.hpp",
    "chars": 3661,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/keyboard.cpp",
    "chars": 1454,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/keyboard.hpp",
    "chars": 2174,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/keyboard_unix.cpp",
    "chars": 1724,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/keyboard_win.cpp",
    "chars": 1815,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/mapper.hpp",
    "chars": 1607,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/mapper_unix.cpp",
    "chars": 2761,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/mapper_win.cpp",
    "chars": 3049,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/mouse.hpp",
    "chars": 2594,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/mouse_unix.cpp",
    "chars": 2548,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/mouse_win.cpp",
    "chars": 2953,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/system.hpp",
    "chars": 1913,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/system_unix.cpp",
    "chars": 1648,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/system_win.cpp",
    "chars": 1542,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/FakeInput/src/types.hpp",
    "chars": 3065,
    "preview": "/**\n * This file is part of the FakeInput library (https://github.com/uiii/FakeInput)\n *\n * Copyright (C) 2011 by Richar"
  },
  {
    "path": "ThirdParty/ViGEm/Include/ViGEmBusDriver.h",
    "chars": 2473,
    "preview": "/*\nMIT License\n\nCopyright (c) 2016 Benjamin \"Nefarius\" Hglinger\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "ThirdParty/ViGEm/Include/ViGEmBusShared.h",
    "chars": 10545,
    "preview": "/*\nMIT License\n\nCopyright (c) 2016 Benjamin \"Nefarius\" Hglinger\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "ThirdParty/ViGEm/Include/ViGEmClient.h",
    "chars": 15060,
    "preview": "/*\nMIT License\n\nCopyright (c) 2017 Benjamin \"Nefarius\" Hglinger\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "ThirdParty/ViGEm/Include/ViGEmCommon.h",
    "chars": 5158,
    "preview": "/*\nMIT License\n\nCopyright (c) 2017 Benjamin \"Nefarius\" Hglinger\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "ThirdParty/ViGEm/Include/ViGEmUtil.h",
    "chars": 2815,
    "preview": "#pragma once\n\n#include \"ViGEmCommon.h\"\n#include <limits.h>\n\nVOID FORCEINLINE XUSB_TO_DS4_REPORT(\n    _Out_ PXUSB_REPORT "
  },
  {
    "path": "ThirdParty/ViGEm/Include/XInputOverrides.h",
    "chars": 2444,
    "preview": "/*\nMIT License\n\nCopyright (c) 2016 Benjamin \"Nefarius\" Hglinger\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "ThirdParty/ViGEm/Include/XnaGuardianShared.h",
    "chars": 3164,
    "preview": "/*\nMIT License\n\nCopyright (c) 2016 Benjamin \"Nefarius\" Hglinger\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "ThirdParty/ViGEm/LICENSE",
    "chars": 1085,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Benjamin Höglinger\n\nPermission is hereby granted, free of charge, to any perso"
  },
  {
    "path": "ThirdParty/ffmpeg/LICENSE.txt",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "ThirdParty/ffmpeg/README.txt",
    "chars": 4373,
    "preview": "Zeranoe FFmpeg Builds <http://ffmpeg.zeranoe.com/builds/>\n\nBuild: ffmpeg-4.0.2-win32-shared\n\nConfiguration:\n  --disable-"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/Makefile",
    "chars": 1970,
    "preview": "# use pkg-config for getting CFLAGS and LDLIBS\nFFMPEG_LIBS=    libavdevice                        \\\n                liba"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/README",
    "chars": 888,
    "preview": "FFmpeg examples README\n----------------------\n\nBoth following use cases rely on pkg-config and make, thus make sure\nthat"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/avio_dir_cmd.c",
    "chars": 5551,
    "preview": "/*\n * Copyright (c) 2014 Lukasz Marek\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/avio_reading.c",
    "chars": 4015,
    "preview": "/*\n * Copyright (c) 2014 Stefano Sabatini\n *\n * Permission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/decode_audio.c",
    "chars": 5349,
    "preview": "/*\n * Copyright (c) 2001 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/decode_video.c",
    "chars": 5290,
    "preview": "/*\n * Copyright (c) 2001 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/demuxing_decoding.c",
    "chars": 14568,
    "preview": "/*\n * Copyright (c) 2012 Stefano Sabatini\n *\n * Permission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/encode_audio.c",
    "chars": 6579,
    "preview": "/*\n * Copyright (c) 2001 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/encode_video.c",
    "chars": 5544,
    "preview": "/*\n * Copyright (c) 2001 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/extract_mvs.c",
    "chars": 5639,
    "preview": "/*\n * Copyright (c) 2012 Stefano Sabatini\n * Copyright (c) 2014 Clément Bœsch\n *\n * Permission is hereby granted, free o"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/filter_audio.c",
    "chars": 11824,
    "preview": "/*\n * copyright (c) 2013 Andrew Kelley\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistr"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/filtering_audio.c",
    "chars": 10264,
    "preview": "/*\n * Copyright (c) 2010 Nicolas George\n * Copyright (c) 2011 Stefano Sabatini\n * Copyright (c) 2012 Clément Bœsch\n *\n *"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/filtering_video.c",
    "chars": 9675,
    "preview": "/*\n * Copyright (c) 2010 Nicolas George\n * Copyright (c) 2011 Stefano Sabatini\n *\n * Permission is hereby granted, free "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/http_multiclient.c",
    "chars": 5254,
    "preview": "/*\n * Copyright (c) 2015 Stephan Holljes\n *\n * Permission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/hw_decode.c",
    "chars": 7715,
    "preview": "/*\n * Copyright (c) 2017 Jun Zhao\n * Copyright (c) 2017 Kaixuan Liu\n *\n * HW Acceleration API (video decoding) decode sa"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/metadata.c",
    "chars": 1918,
    "preview": "/*\n * Copyright (c) 2011 Reinhard Tartler\n *\n * Permission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/muxing.c",
    "chars": 21513,
    "preview": "/*\n * Copyright (c) 2003 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/qsvdec.c",
    "chars": 8239,
    "preview": "/*\n * Copyright (c) 2015 Anton Khirnov\n *\n * Permission is hereby granted, free of charge, to any person obtaining a cop"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/remuxing.c",
    "chars": 6388,
    "preview": "/*\n * Copyright (c) 2013 Stefano Sabatini\n *\n * Permission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/resampling_audio.c",
    "chars": 8005,
    "preview": "/*\n * Copyright (c) 2012 Stefano Sabatini\n *\n * Permission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/scaling_video.c",
    "chars": 5028,
    "preview": "/*\n * Copyright (c) 2012 Stefano Sabatini\n *\n * Permission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/transcode_aac.c",
    "chars": 34630,
    "preview": "/*\n * Copyright (c) 2013-2018 Andreas Unterweger\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you c"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/transcoding.c",
    "chars": 22210,
    "preview": "/*\n * Copyright (c) 2010 Nicolas George\n * Copyright (c) 2011 Stefano Sabatini\n * Copyright (c) 2014 Andrey Utkin\n *\n * "
  },
  {
    "path": "ThirdParty/ffmpeg/examples/vaapi_encode.c",
    "chars": 6713,
    "preview": "/*\n * Video Acceleration API (video encoding) encode sample\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free soft"
  },
  {
    "path": "ThirdParty/ffmpeg/examples/vaapi_transcode.c",
    "chars": 9690,
    "preview": "/*\n * Video Acceleration API (video transcoding) transcode sample\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is fre"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/ac3_parser.h",
    "chars": 1207,
    "preview": "/*\n * AC-3 parser prototypes\n * Copyright (c) 2003 Fabrice Bellard\n * Copyright (c) 2003 Michael Niedermayer\n *\n * This "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/adts_parser.h",
    "chars": 1354,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/avcodec.h",
    "chars": 211684,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/avdct.h",
    "chars": 2570,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/avfft.h",
    "chars": 3111,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/d3d11va.h",
    "chars": 2853,
    "preview": "/*\n * Direct3D11 HW acceleration\n *\n * copyright (c) 2009 Laurent Aimar\n * copyright (c) 2015 Steve Lhomme\n *\n * This fi"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/dirac.h",
    "chars": 4044,
    "preview": "/*\n * Copyright (C) 2007 Marco Gerards <marco@gnu.org>\n * Copyright (C) 2009 David Conrad\n * Copyright (C) 2011 Jordi Or"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/dv_profile.h",
    "chars": 3715,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/dxva2.h",
    "chars": 2361,
    "preview": "/*\n * DXVA2 HW acceleration\n *\n * copyright (c) 2009 Laurent Aimar\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is fr"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/jni.h",
    "chars": 1650,
    "preview": "/*\n * JNI public API functions\n *\n * Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com>\n *\n * This "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/mediacodec.h",
    "chars": 2825,
    "preview": "/*\n * Android MediaCodec public API\n *\n * Copyright (c) 2016 Matthieu Bouron <matthieu.bouron stupeflix.com>\n *\n * This "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/qsv.h",
    "chars": 3763,
    "preview": "/*\n * Intel MediaSDK QSV public API\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribu"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/vaapi.h",
    "chars": 2297,
    "preview": "/*\n * Video Acceleration API (shared data between FFmpeg and the video player)\n * HW decode acceleration for MPEG-2, MPE"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/vdpau.h",
    "chars": 5796,
    "preview": "/*\n * The Video Decode and Presentation API for UNIX (VDPAU) is used for\n * hardware-accelerated decoding of MPEG-1/2, H"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/version.h",
    "chars": 4785,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/videotoolbox.h",
    "chars": 4029,
    "preview": "/*\n * Videotoolbox hardware acceleration\n *\n * copyright (c) 2012 Sebastien Zwickert\n *\n * This file is part of FFmpeg.\n"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/vorbis_parser.h",
    "chars": 2285,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavcodec/xvmc.h",
    "chars": 6062,
    "preview": "/*\n * Copyright (C) 2003 Ivan Kalvachev\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redist"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavdevice/avdevice.h",
    "chars": 17918,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavdevice/version.h",
    "chars": 1861,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavfilter/avfilter.h",
    "chars": 42263,
    "preview": "/*\n * filter layer\n * Copyright (c) 2007 Bobby Bingham\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software;"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavfilter/buffersink.h",
    "chars": 6316,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavfilter/buffersrc.h",
    "chars": 6608,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavfilter/version.h",
    "chars": 2334,
    "preview": "/*\n * Version macros.\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavformat/avformat.h",
    "chars": 117558,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavformat/avio.h",
    "chars": 31557,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavformat/version.h",
    "chars": 3781,
    "preview": "/*\n * Version macros.\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/adler32.h",
    "chars": 1673,
    "preview": "/*\n * copyright (c) 2006 Mans Rullgard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistr"
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/aes.h",
    "chars": 1834,
    "preview": "/*\n * copyright (c) 2007 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/aes_ctr.h",
    "chars": 2269,
    "preview": "/*\n * AES-CTR cipher\n * Copyright (c) 2015 Eran Kornblau <erankor at gmail dot com>\n *\n * This file is part of FFmpeg.\n "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/attributes.h",
    "chars": 4714,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/audio_fifo.h",
    "chars": 5914,
    "preview": "/*\n * Audio FIFO\n * Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/avassert.h",
    "chars": 2355,
    "preview": "/*\n * copyright (c) 2010 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "ThirdParty/ffmpeg/include/libavutil/avconfig.h",
    "chars": 180,
    "preview": "/* Generated by ffmpeg configure */\n#ifndef AVUTIL_AVCONFIG_H\n#define AVUTIL_AVCONFIG_H\n#define AV_HAVE_BIGENDIAN 0\n#def"
  }
]

// ... and 207 more files (download for full content)

About this extraction

This page contains the full source code of the namkazt/PinBox GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 407 files (3.3 MB), approximately 881.6k tokens, and a symbol index with 2011 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!