#pragma once
#define FFMPEG_ENABLED
#ifdef FFMPEG_ENABLED


#ifndef VIDEO_STREAM_H_
#define VIDEO_STREAM_H_

#include <string>
#include "Bitmap.h"

extern "C" {
#   include <libavformat/avformat.h>
#   include <libavformat/avio.h>
#   include <libavcodec/avcodec.h>
#   include <libavformat/avformat.h>
#   include <libavutil/imgutils.h>
#   include <libavutil/opt.h>
#   include <libswscale/swscale.h>
}

class VideoStream
{
    const AVCodec* codec;
    AVCodecContext* codecContext;
    FILE* file;
    AVFrame* picture;
    AVPacket* pkt;
    SwsContext* swsContext;
    static const uint8_t endcode[];

    size_t width;
    size_t height;

    uint64_t frameIndex = 0;
public:
    VideoStream(::size_t width, ::size_t height, const std::string& filename);
    ~VideoStream(void);

    void addFrame(const Bitmap<RGBColor>& frame);
};

#endif // VIDEO_STREAM_H_

#endif // FFMPEG_ENABLED