/*
 * Copyright 2019 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkVideDecoder_DEFINED
#define SkVideDecoder_DEFINED

#include "include/core/SkImage.h"

extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
#include "libavutil/pixdesc.h"
#include "libswscale/swscale.h"
}

class SkVideoDecoder {
public:
    SkVideoDecoder(GrRecordingContext* = nullptr);
    ~SkVideoDecoder();

    void reset();
    void setGrContext(GrRecordingContext* rContext) { fRecordingContext = rContext; }

    bool loadStream(std::unique_ptr<SkStream>);
    bool rewind();

    SkISize dimensions() const;
    double duration() const;    // in seconds

    // Returns each image in the video, or nullptr on eof
    sk_sp<SkImage> nextImage(double* timeStamp = nullptr);

private:
    sk_sp<SkImage> convertFrame(const AVFrame*);
    double computeTimeStamp(const AVFrame*) const;

    struct ConvertedColorSpace {
        AVColorPrimaries              fPrimaries;
        AVColorTransferCharacteristic fTransfer;
        // fCS is the converted skia form of the above enums
        sk_sp<SkColorSpace> fCS;

        // Init with illegal values, so our first compare will fail, forcing us to compute
        // the skcolorspace.
        ConvertedColorSpace();

        void update(AVColorPrimaries, AVColorTransferCharacteristic);
    };

    GrRecordingContext* fRecordingContext = nullptr;  // not owned by us

    std::unique_ptr<SkStream>   fStream;

    AVIOContext*        fStreamCtx = nullptr;
    AVFormatContext*    fFormatCtx = nullptr;
    AVCodecContext*     fDecoderCtx = nullptr;
    int                 fStreamIndex = -1;  // fFormatCtx->stream[...]

    AVPacket            fPacket;
    AVFrame*            fFrame = nullptr;
    ConvertedColorSpace fCSCache;

    enum Mode {
        kProcessing_Mode,
        kDraining_Mode,
        kDone_Mode,
    };
    Mode    fMode = kDone_Mode;
};

#endif

