#ifndef ka_vstream_h
#define ka_vstream_h

#include <stdbool.h>
#include "inttypes.h"
#include "ka_error.h"
#include "ka_stack.h"
#include "ka_vinfo.h"
#include "ka_vcodec.h"

typedef struct ka_vstream_s ka_vstream_t;

ka_vstream_t* ka_new_vstream(ka_error_t* pErrorBlock, const kav_vcodec_t* codec, const ka_vparams_t* params, uint32_t hardware);
void ka_delete_vstream(ka_vstream_t**);
void ka_vstream_reset(ka_vstream_t*);
uint32_t ka_vstream_count(ka_vstream_t* vs);
ka_vcodec_event ka_vstream_decode(ka_vstream_t*, ka_block_t* b, uint32_t exit_time);
bool ka_vstream_isCodecDone(ka_vstream_t*, bool isInputDone);
const ka_vinfo_t* ka_vstream_getInfo(ka_vstream_t*);
ka_vframe_t* ka_vstream_getDecodeFrame(ka_vstream_t*);
void ka_vstream_skipDecodeFrame(ka_vstream_t*);
void ka_vstream_setMonochromeDecode(ka_vstream_t* vs, int32_t mono);
ka_vframe_t* ka_vstream_getFrame(const ka_vstream_t*, uint32_t index);
void ka_vstream_releaseFrame(ka_vstream_t*, uint32_t index);

#endif
