winamp/Src/nsavi/demuxer.h

36 lines
1.1 KiB
C++

#pragma once
/* this parser is meant for actual playback */
#include "read.h"
#include "avi_header.h"
#include "avi_reader.h"
#include "info.h"
#include "ParserBase.h"
namespace nsavi
{
class Demuxer : public ParserBase
{
public:
Demuxer(nsavi::avi_reader *_reader);
int GetNextMovieChunk(nsavi::avi_reader *reader, void **data, uint32_t *chunk_size, uint32_t *chunk_type, int limit_stream_num=65536);
int GetSeekTable(nsavi::IDX1 **out_index); // get the idx1 chunk
int GetIndexChunk(nsavi::INDX **out_index, uint64_t offset); // get the INDX/##ix/##ix chunk at the given position
int Seek(uint64_t offset, bool absolute, nsavi::avi_reader *reader);
int GetHeaderList(HeaderList *header_list);
int FindMovieChunk();
int SeekToMovieChunk(nsavi::avi_reader *reader);
private:
/* movie chunk */
ParseState movie_found;
riff_chunk movi_header;
uint64_t movie_start;
/* idx1 seektable */
ParseState idx1_found;
riff_chunk idx1_header; // dunno if we really need it
nsavi::IDX1 *index;
/* INFO */
Info *info;
ParseState info_found;
};
}