X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bmusb.h;h=17b5bc082d7a4dc266d25d80d93dcf1e3123b242;hb=29a8343d5cbbfdfc913b18fca7da0e14f0472f32;hp=5b7c0f9c8e35a501c91bf40bdc81fb8d79f3770f;hpb=30a75fd8110601c89ecc7c1a0832a96878917cd4;p=bmusb diff --git a/bmusb.h b/bmusb.h index 5b7c0f9..17b5bc0 100644 --- a/bmusb.h +++ b/bmusb.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -57,6 +58,26 @@ class FrameAllocator { virtual void release_frame(Frame frame) = 0; }; +// Audio is more important than video, and also much cheaper. +// By having many more audio frames available, hopefully if something +// starts to drop, we'll have CPU load go down (from not having to +// process as much video) before we have to drop audio. +#define NUM_QUEUED_VIDEO_FRAMES 16 +#define NUM_QUEUED_AUDIO_FRAMES 64 + +class MallocFrameAllocator : public FrameAllocator { +public: + MallocFrameAllocator(size_t frame_size, size_t num_queued_frames); + Frame alloc_frame() override; + void release_frame(Frame frame) override; + +private: + size_t frame_size; + + std::mutex freelist_mutex; + std::stack> freelist; // All of size . +}; + struct VideoFormat { uint16_t id = 0; // For debugging/logging only. unsigned width = 0, height = 0, second_field_start = 0;