init
This commit is contained in:
90
libEcliptPlayer/include/eclipt/Frame.h
Normal file
90
libEcliptPlayer/include/eclipt/Frame.h
Normal file
@@ -0,0 +1,90 @@
|
||||
#ifndef ECLIPT_FRAME_H
|
||||
#define ECLIPT_FRAME_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstddef>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
|
||||
namespace eclipt {
|
||||
|
||||
enum class PixelFormat {
|
||||
YUV420,
|
||||
RGB24,
|
||||
NV12,
|
||||
BGRA32
|
||||
};
|
||||
|
||||
enum class FrameType {
|
||||
Video,
|
||||
Audio,
|
||||
Subtitle
|
||||
};
|
||||
|
||||
struct FrameBuffer {
|
||||
uint8_t* data = nullptr;
|
||||
size_t size = 0;
|
||||
size_t stride = 0;
|
||||
|
||||
FrameBuffer() = default;
|
||||
FrameBuffer(uint8_t* d, size_t s, size_t st = 0) : data(d), size(s), stride(st) {}
|
||||
};
|
||||
|
||||
struct VideoFrame {
|
||||
uint32_t width = 0;
|
||||
uint32_t height = 0;
|
||||
PixelFormat format = PixelFormat::YUV420;
|
||||
int64_t pts = 0;
|
||||
int64_t dts = 0;
|
||||
int64_t duration = 0;
|
||||
|
||||
FrameBuffer planes[3];
|
||||
bool is_interpolated = false;
|
||||
float interpolation_factor = 0.0f;
|
||||
|
||||
VideoFrame() = default;
|
||||
|
||||
bool isValid() const { return width > 0 && height > 0 && planes[0].data != nullptr; }
|
||||
|
||||
size_t totalSize() const {
|
||||
switch (format) {
|
||||
case PixelFormat::YUV420:
|
||||
return width * height * 3 / 2;
|
||||
case PixelFormat::RGB24:
|
||||
return width * height * 3;
|
||||
case PixelFormat::NV12:
|
||||
return width * height * 3 / 2;
|
||||
case PixelFormat::BGRA32:
|
||||
return width * height * 4;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct AudioFrame {
|
||||
int sample_rate = 0;
|
||||
int channels = 0;
|
||||
int format = 0;
|
||||
int64_t pts = 0;
|
||||
int64_t duration = 0;
|
||||
FrameBuffer buffer;
|
||||
|
||||
size_t totalSize() const { return buffer.size; }
|
||||
};
|
||||
|
||||
class IFramePool {
|
||||
public:
|
||||
virtual ~IFramePool() = default;
|
||||
virtual VideoFrame acquire() = 0;
|
||||
virtual void release(VideoFrame&& frame) = 0;
|
||||
virtual void clear() = 0;
|
||||
virtual size_t available() const = 0;
|
||||
};
|
||||
|
||||
using FrameCallback = std::function<void(VideoFrame&&)>;
|
||||
using AudioCallback = std::function<void(AudioFrame&&)>;
|
||||
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user