summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/database.txt8
-rw-r--r--doc/design.txt54
-rw-r--r--doc/pal_vs_ntsc_aspect_ratio.pngbin0 -> 72101 bytes
-rw-r--r--doc/references.txt58
4 files changed, 120 insertions, 0 deletions
diff --git a/doc/database.txt b/doc/database.txt
new file mode 100644
index 0000000..3cf4d4b
--- /dev/null
+++ b/doc/database.txt
@@ -0,0 +1,8 @@
+Database
+--------
+* Tied to a single directory on the filesystem
+* index.json
+* Easily referenced external files.
+** external:<BLAKE3 checksum>
+
+// vim: set syntax=asciidoc:
diff --git a/doc/design.txt b/doc/design.txt
new file mode 100644
index 0000000..d06679c
--- /dev/null
+++ b/doc/design.txt
@@ -0,0 +1,54 @@
+= CAMU - Self-Hosted Media Streamer/Organizer/Archiver
+
+Breif on Components
+-------------------
+Server
+~~~~~~
+The "server" is the main hub responsible for all handling user account related functions and state, as well
+as managing the network of all other individual components.
+
+User Accounts
+^^^^^^^^^^^^^
+Users accounts contain 4 main concepts: lists, media lists, history, and settings.
+
+* *Lists*: Transient lists of media connected to a user-selected set of sinks. Resources retrived via browse/search instances get added to a list for playback. A list's active sinks can be changed on the fly.
+
+* *Media Lists*: A more organized way to collect related media. They are stored to the user's account and therefore saved to the disk.
+
+* *History*: A detailed history that tracks what a user played and when. Also saved to a user's account.
+
+* *Settings*: Various per-user settings. For example, tag blacklist, start/stop times per resource, skip settings per collection (album tracks).
+
+Node
+~~~~
+Nodes can be seen as distributed resource managers for the server. They each contain up to 3 main parts: A source manager and/or database, and a resource host. A node can have one or both of a source manager and database but a node without either is useless.
+
+Source Manager
+^^^^^^^^^^^^^^
+A source manager implements any or all of browsing, searching, and custom resource actions. A big point of a source manager is to be able to work entirely behind a proxy. Some examples of sources include a social media website, filesystem directory, dvd drive, or radio antenna. An example of browsing could be apple music's "New Music". An example of searching, youtube search. A custom action could be liking a post on twitter.
+
+Database
+^^^^^^^^
+Stores resources locally along with as much metadata as possible. Simply used to retrive resources locally instead of going through the source manager.
+
+Resource Host
+^^^^^^^^^^^^^
+Hosts node-local resources for the server to use for streaming. Should support anything a source manager can give it.
+
+Client
+~~~~~~
+Clients are only way a user interacts with the reset of the network besides the special case of play/pause/seek which can also be done from a sink.
+
+libclient
+^^^^^^^^^
+C library that integrates with the rest of the code-base to abstract communicating with the server as a client.
+
+Sink
+~~~~
+A sink's only purpose is to be a minimal yet optimal way to view the entries in a list.
+
+libsink
+^^^^^^^
+C library that abstracts communicating with the server as a sink in a platform- and environment-independent way. It makes no assumptions about what kind of device (physical or otherwise) it's running on or outputting to.
+
+// vim: set syntax=asciidoc:
diff --git a/doc/pal_vs_ntsc_aspect_ratio.png b/doc/pal_vs_ntsc_aspect_ratio.png
new file mode 100644
index 0000000..e570f70
--- /dev/null
+++ b/doc/pal_vs_ntsc_aspect_ratio.png
Binary files differ
diff --git a/doc/references.txt b/doc/references.txt
new file mode 100644
index 0000000..acd14f9
--- /dev/null
+++ b/doc/references.txt
@@ -0,0 +1,58 @@
+= References
+
+Video
+-----
+Vsync/VRR
+~~~~~~~~~
+* https://github.com/swaywm/sway/issues/5076
+* https://en.wikipedia.org/wiki/Motion_interpolation
+* https://gamedev.stackexchange.com/questions/82318/what-problem-does-double-or-triple-buffering-solve-in-modern-games
+ - Good explanation of vsync and multiple buffering
+* https://linustechtips.com/topic/1508075-no-vsync-with-no-screen-tearing-possible/?do=findComment&comment=15948456
+* https://forums.tomshardware.com/threads/games-screen-tearing-without-vsync.3272775/post-20062033
+* Current understanding of vsync and tearing:
+ - Vsync operates on an interupt.
+ - You cannot avoid tearing without vsync.
+ - A higher fps and refresh rate while tearing will be less noticable.
+ - VRR can eliminiate tearing.
+
+Latency/Present
+~~~~~~~~~~~~~~~
+* https://themaister.net/blog/2023/11/12/my-scuffed-game-streaming-adventure-pyrofling/
+
+Old Video Standards Stuff
+~~~~~~~~~~~~~~~~~~~~~~~~~
+* https://en.wikipedia.org/wiki/24p
+* https://en.wikipedia.org/wiki/Three-two_pull_down
+* https://cinematography.com/index.php?/forums/topic/71346-why-23976-and-not-24-fps/&tab=comments#comment-455454
+* https://forum.doom9.org/archive/index.php/t-163655.html
+* https://en.wikipedia.org/wiki/pixel_aspect_ratio
+* https://en.wikipedia.org/wiki/display_aspect_ratio
+ - PAL and NTSC are both supposed to be displayed on 4:3 physical aspect ratio screens even though they are internally different aspect ratios and resolutions. The difference is the size of the "pixel" (PAL has more, shorter scanlines).
+* https://en.wikipedia.org/wiki/Anamorphic_widescreen
+
+Python
+------
+* https://stackoverflow.com/questions/38243682/whats-the-standard-way-to-package-a-python-project-with-dependencies
+
+Audio
+-----
+Formats
+~~~~~~~
+* https://github.com/derselbst/ANMP
+* https://slack.net/~ant/libs/audio.html#Game_Music_Emu
+
+Drivers
+~~~~~~~
+* https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/plugins/alsa/test-timer.c
+* https://stackoverflow.com/questions/41263580/what-exactly-does-alsas-snd-pcm-delay-return
+* https://stackoverflow.com/questions/24040672/the-meaning-of-period-in-alsa
+
+Interface
+---------
+Terminal
+~~~~~~~~
+* https://www.amp-what.com/
+* https://www.unicode.org/charts/beta/nameslist/n_2B00.html
+
+// vim: set syntax=asciidoc: