AVIIndex.h
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. // VirtualDub - Video processing and capture application
  2. // Copyright (C) 1998-2001 Avery Lee
  3. //
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. #ifndef f_AVIINDEX_H
  18. #define f_AVIINDEX_H
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <windows.h>
  22. #include <vfw.h>
  23. class AVIIndexChainNode;
  24. class AVIIndexEntry2 {
  25. public:
  26. __int64 pos;
  27. union {
  28. FOURCC ckid;
  29. int fileno;
  30. };
  31. LONG size;
  32. };
  33. class AVIIndexEntry3 {
  34. public:
  35. DWORD dwOffset;
  36. DWORD dwSizeKeyframe;
  37. };
  38. class AVIIndexChain {
  39. protected:
  40. AVIIndexChainNode *head, *tail;
  41. void delete_chain();
  42. public:
  43. int total_ents;
  44. AVIIndexChain();
  45. ~AVIIndexChain();
  46. bool add(AVIINDEXENTRY *avie);
  47. bool add(AVIIndexEntry2 *avie2);
  48. bool add(FOURCC ckid, __int64 pos, long len, bool is_keyframe);
  49. void put(AVIINDEXENTRY *avietbl);
  50. void put(AVIIndexEntry2 *avie2tbl);
  51. void put(AVIIndexEntry3 *avie3tbl, __int64 offset);
  52. };
  53. class AVIIndex : public AVIIndexChain {
  54. protected:
  55. AVIINDEXENTRY *index;
  56. AVIIndexEntry2 *index2;
  57. AVIIndexEntry3 *index3;
  58. int index_len;
  59. AVIINDEXENTRY *allocateIndex(int total_entries) {
  60. return index = new AVIINDEXENTRY[index_len = total_entries];
  61. }
  62. AVIIndexEntry2 *allocateIndex2(int total_entries) {
  63. return index2 = new AVIIndexEntry2[index_len = total_entries];
  64. }
  65. AVIIndexEntry3 *allocateIndex3(int total_entries) {
  66. return index3 = new AVIIndexEntry3[index_len = total_entries];
  67. }
  68. public:
  69. AVIIndex();
  70. ~AVIIndex();
  71. bool makeIndex();
  72. bool makeIndex2();
  73. bool makeIndex3(__int64 offset);
  74. void clear();
  75. AVIINDEXENTRY *indexPtr() {
  76. return index;
  77. }
  78. AVIIndexEntry2 *index2Ptr() {
  79. return index2;
  80. }
  81. AVIIndexEntry3 *index3Ptr() {
  82. return index3;
  83. }
  84. AVIIndexEntry2 *takeIndex2() {
  85. AVIIndexEntry2 *idx = index2;
  86. index2 = NULL;
  87. return idx;
  88. }
  89. int size() { return total_ents; }
  90. int indexLen() {
  91. return index_len;
  92. }
  93. };
  94. #endif