initial commit
This commit is contained in:
63
libraries/FastLED/src/fx/video/pixel_stream.h
Normal file
63
libraries/FastLED/src/fx/video/pixel_stream.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#pragma once
|
||||
|
||||
#include "crgb.h"
|
||||
#include "fl/bytestream.h"
|
||||
#include "fl/file_system.h"
|
||||
#include "fl/namespace.h"
|
||||
#include "fl/memory.h"
|
||||
#include "fx/frame.h"
|
||||
#include "fl/int.h"
|
||||
namespace fl {
|
||||
FASTLED_SMART_PTR(FileHandle);
|
||||
FASTLED_SMART_PTR(ByteStream);
|
||||
} // namespace fl
|
||||
|
||||
namespace fl {
|
||||
|
||||
FASTLED_SMART_PTR(PixelStream);
|
||||
|
||||
// PixelStream takes either a file handle or a byte stream
|
||||
// and reads frames from it in order to serve data to the
|
||||
// video system.
|
||||
class PixelStream {
|
||||
public:
|
||||
enum Type {
|
||||
kStreaming,
|
||||
kFile,
|
||||
};
|
||||
|
||||
explicit PixelStream(int bytes_per_frame);
|
||||
|
||||
bool begin(fl::FileHandlePtr h);
|
||||
bool beginStream(fl::ByteStreamPtr s);
|
||||
void close();
|
||||
int32_t bytesPerFrame();
|
||||
bool readPixel(CRGB *dst); // Convenience function to read a pixel
|
||||
size_t readBytes(uint8_t *dst, size_t len);
|
||||
|
||||
bool readFrame(Frame *frame);
|
||||
bool readFrameAt(fl::u32 frameNumber, Frame *frame);
|
||||
bool hasFrame(fl::u32 frameNumber);
|
||||
int32_t framesRemaining() const; // -1 if this is a stream.
|
||||
int32_t framesDisplayed() const;
|
||||
bool available() const;
|
||||
bool atEnd() const;
|
||||
|
||||
int32_t bytesRemaining() const;
|
||||
int32_t bytesRemainingInFrame() const;
|
||||
bool
|
||||
rewind(); // Returns false on failure, which can happen for streaming mode.
|
||||
Type getType()
|
||||
const; // Returns the type of the video stream (kStreaming or kFile)
|
||||
|
||||
private:
|
||||
fl::i32 mbytesPerFrame;
|
||||
fl::FileHandlePtr mFileHandle;
|
||||
fl::ByteStreamPtr mByteStream;
|
||||
bool mUsingByteStream;
|
||||
|
||||
public:
|
||||
virtual ~PixelStream();
|
||||
};
|
||||
|
||||
} // namespace fl
|
||||
Reference in New Issue
Block a user