initial commit

This commit is contained in:
2026-02-12 00:45:31 -08:00
commit 5f168f370b
3024 changed files with 804889 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
#pragma once
#include "fl/bytestream.h"
#include "fl/file_system.h"
#include "fx/video/frame_interpolator.h"
#include "fx/video/pixel_stream.h"
#include "fl/stdint.h"
#include "fl/namespace.h"
namespace fl {
FASTLED_SMART_PTR(FileHandle);
FASTLED_SMART_PTR(ByteStream);
} // namespace fl
namespace fl {
FASTLED_SMART_PTR(VideoImpl);
FASTLED_SMART_PTR(FrameInterpolator);
FASTLED_SMART_PTR(PixelStream)
class VideoImpl {
public:
enum {
kSizeRGB8 = 3,
};
// frameHistoryCount is the number of frames to keep in the buffer after
// draw. This allows for time based effects like syncing video speed to
// audio triggers.
VideoImpl(size_t pixelsPerFrame, float fpsVideo,
size_t frameHistoryCount = 0);
~VideoImpl();
// Api
void begin(fl::FileHandlePtr h);
void beginStream(fl::ByteStreamPtr s);
void setFade(fl::u32 fadeInTime, fl::u32 fadeOutTime);
bool draw(fl::u32 now, CRGB *leds);
void end();
bool rewind();
// internal use
bool draw(fl::u32 now, Frame *frame);
bool full() const;
void setTimeScale(float timeScale);
float timeScale() const { return mTimeScale; }
size_t pixelsPerFrame() const { return mPixelsPerFrame; }
void pause(fl::u32 now);
void resume(fl::u32 now);
bool needsFrame(fl::u32 now) const;
int32_t durationMicros() const; // -1 if this is a stream.
private:
bool updateBufferIfNecessary(fl::u32 prev, fl::u32 now);
bool updateBufferFromFile(fl::u32 now, bool forward);
bool updateBufferFromStream(fl::u32 now);
fl::u32 mPixelsPerFrame = 0;
PixelStreamPtr mStream;
fl::u32 mPrevNow = 0;
FrameInterpolatorPtr mFrameInterpolator;
TimeWarpPtr mTime;
fl::u32 mFadeInTime = 1000;
fl::u32 mFadeOutTime = 1000;
float mTimeScale = 1.0f;
};
} // namespace fl