diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/database.txt | 8 | ||||
| -rw-r--r-- | doc/design.txt | 54 | ||||
| -rw-r--r-- | doc/pal_vs_ntsc_aspect_ratio.png | bin | 0 -> 72101 bytes | |||
| -rw-r--r-- | doc/references.txt | 58 |
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 Binary files differnew file mode 100644 index 0000000..e570f70 --- /dev/null +++ b/doc/pal_vs_ntsc_aspect_ratio.png 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: |