www.pudn.com > mediator15src.zip > AVIIndex.h
/* * AVIIndex.h * Copyright (C) 1998-2001 Avery Lee * * This file is part of MPEG Mediator, a free MPEG stream converter. * * MPEG Mediator is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MPEG Mediator is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef f_AVIINDEX_H #define f_AVIINDEX_H #include "stdafx.h" #include#include #include class AVIIndexChainNode; class AVIIndexEntry2 { public: __int64 pos; union { FOURCC ckid; int fileno; }; LONG size; }; class AVIIndexEntry3 { public: DWORD dwOffset; DWORD dwSizeKeyframe; }; class AVIIndexChain { protected: AVIIndexChainNode *head, *tail; void delete_chain(); public: int total_ents; AVIIndexChain(); ~AVIIndexChain(); bool add(AVIINDEXENTRY *avie); bool add(AVIIndexEntry2 *avie2); bool add(FOURCC ckid, __int64 pos, long len, bool is_keyframe); void put(AVIINDEXENTRY *avietbl); void put(AVIIndexEntry2 *avie2tbl); void put(AVIIndexEntry3 *avie3tbl, __int64 offset); }; class AVIIndex : public AVIIndexChain { protected: AVIINDEXENTRY *index; AVIIndexEntry2 *index2; AVIIndexEntry3 *index3; int index_len; AVIINDEXENTRY *allocateIndex(int total_entries) { return index = new AVIINDEXENTRY[index_len = total_entries]; } AVIIndexEntry2 *allocateIndex2(int total_entries) { return index2 = new AVIIndexEntry2[index_len = total_entries]; } AVIIndexEntry3 *allocateIndex3(int total_entries) { return index3 = new AVIIndexEntry3[index_len = total_entries]; } public: AVIIndex(); ~AVIIndex(); bool makeIndex(); bool makeIndex2(); bool makeIndex3(__int64 offset); void clear(); AVIINDEXENTRY *indexPtr() { return index; } AVIIndexEntry2 *index2Ptr() { return index2; } AVIIndexEntry3 *index3Ptr() { return index3; } AVIIndexEntry2 *takeIndex2() { AVIIndexEntry2 *idx = index2; index2 = NULL; return idx; } int size() { return total_ents; } int indexLen() { return index_len; } }; #endif