summaryrefslogtreecommitdiff
path: root/ffmpeg_backend.h
blob: 62134fe3dbb7b8c5862cddef238fdc1acd12b3f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// NOTE(fox): Even though each layer has its own completely isolated AV
// instance, it appears two layers with the same file still share something.
// When the layers aren't at the same position in time, the playhead of one
// layer gets misaligned every few frames and causes a manual seek back to the
// position. Different files don't exhibit this behavior.

struct av_info {
    uint64 PreviousPTS = (uint64)-1; // PTS value of the previous frame, used to check timings.

    AVCodecParameters *VideoCodecParameters;  // Used to supply info about the decoder.
    const AVCodec* VideoCodec;
    // const AVCodecHWConfig* VideoHWConfig;  // Haven't done enough research to know if HW decoding is already done by default or if we need these.
    // AVPixelFormat HWPixFormat;
    AVStream *VideoStream;    // Which stream, or channel, the video is in. Holds FPS info and is used to verify that the decoded packet belongs to this stream.
    AVFormatContext *FileFormatContext; // Umbrella for everything else, seems to contain the playhead state
    AVCodecContext *VideoCodecContext;
    AVPacket *VideoPacket;
    AVFrame *VideoFrame;
    SwsContext *RGBContext;
};

static bool32 AV_TryFrame(av_info *AVPacket, int32 *err);     // Internal attempt to decode a frame. Typically run in a while loop until it returns true.