From: Steinar H. Gunderson Date: Sat, 27 Feb 2016 15:14:52 +0000 (+0100) Subject: Expose MallocFrameAllocator. X-Git-Tag: 0.4~19 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=29a8343d5cbbfdfc913b18fca7da0e14f0472f32;p=bmusb Expose MallocFrameAllocator. --- diff --git a/bmusb.cpp b/bmusb.cpp index 85b92a6..aa5b932 100644 --- a/bmusb.cpp +++ b/bmusb.cpp @@ -80,26 +80,6 @@ void change_xfer_size_for_width(int width, libusb_transfer *xfr) FrameAllocator::~FrameAllocator() {} -// 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; - - mutex freelist_mutex; - stack> freelist; // All of size . -}; - MallocFrameAllocator::MallocFrameAllocator(size_t frame_size, size_t num_queued_frames) : frame_size(frame_size) { 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;