flow.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:4k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: flow.h 543 2006-01-07 22:06:24Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #ifndef __FLOW_H
  24. #define __FLOW_H
  25. #define SHOWAHEAD (TICKSPERSEC/25)
  26. //--------------------------------------------
  27. // flow objects have input/output packet pins 
  28. // from which a graph can be built
  29. // special flag for get/set format structure (packetformat)
  30. #define PIN_FORMAT 0x10000
  31. // special flag for get/set process function (packetprocess)
  32. #define PIN_PROCESS 0x20000
  33. // format not test
  34. #define PACKET_NONE 0
  35. // video (packet based)
  36. #define PACKET_VIDEO 1
  37. // audio (packet based)
  38. #define PACKET_AUDIO 2
  39. // subtitle (packet based)
  40. #define PACKET_SUBTITLE 3
  41. #define PACKET_MAX 4
  42. typedef struct packetformat
  43. {
  44. int Type;
  45. int ByteRate;
  46. fraction PacketRate;
  47. void* Extra;
  48. int ExtraLength;
  49. union
  50. {
  51. video Video;
  52. audio Audio;
  53. subtitle Subtitle;
  54. } Format;
  55. } packetformat;
  56. #define TIME_UNKNOWN -1
  57. #define TIME_RESEND -2
  58. #define TIME_BENCH -3
  59. #define TIME_SYNC -4
  60. typedef struct flowstate
  61. {
  62. int DropLevel;
  63. tick_t CurrTime;
  64. } flowstate;
  65. typedef struct packet
  66. {
  67. constplanes Data;
  68. constplanes LastData; // optional (for video it may increase performance)
  69. size_t Length; // length of data (in bytes, per planes, not filled for surfaces)
  70. tick_t RefTime; // packet time (-1 if unknown)
  71. bool_t Key;
  72. } packet;
  73. typedef int (*packetprocess)(void* This, const packet* Data, const flowstate* State);
  74. DLL void Disconnect(node* Src,int SrcNo,node* Dst,int DstNo);
  75. DLL int ConnectionUpdate(node* Src,int SrcNo,node* Dst,int DstNo);
  76. DLL int DummyProcess(void*,const packet*,const flowstate*);
  77. DLL void PacketFormatEnumClass(array* List,const packetformat* Format);
  78. DLL bool_t PacketFormatMatch(int Class, const packetformat*);
  79. DLL int PacketFormatCopy(packetformat* Dst,const packetformat* Src);
  80. DLL void PacketFormatClear(packetformat*);
  81. DLL void PacketFormatCombine(packetformat* Dst, const packetformat* Src);
  82. DLL bool_t PacketFormatExtra(packetformat* p, int Length);
  83. DLL void PacketFormatDefault(packetformat* p);
  84. DLL bool_t PacketFormatRotatedVideo(const packetformat* Current, const packetformat* New,int Mask);
  85. DLL bool_t PacketFormatSimilarAudio(const packetformat* Current, const packetformat* New);
  86. DLL void PacketFormatPCM(packetformat* p, const packetformat* In, int Bit);
  87. DLL bool_t PacketFormatName(packetformat* p, tchar_t* Name, int NameLen);
  88. DLL bool_t EqPacketFormat(const packetformat* a, const packetformat* b);
  89. //---------------------------------------------------------------
  90. // packet flow (abstract)
  91. #define FLOW_CLASS FOURCC('F','L','O','W')
  92. // buffered output (bool_t)
  93. #define FLOW_BUFFERED 0x15
  94. // resend buffered output (void)
  95. #define FLOW_RESEND 0x16
  96. // empty buffers (void)
  97. #define FLOW_FLUSH 0x17
  98. // event for not supported streams (pin)
  99. #define FLOW_NOT_SUPPORTED 0x18
  100. // release resources (bool)
  101. #define FLOW_BACKGROUND 0x19
  102. extern DLL int FlowEnum(void*, int* EnumNo, datadef* Out);
  103. //---------------------------------------------------------------
  104. // output flow (abstract)
  105. #define OUT_CLASS FOURCC('O','U','T','P')
  106. #define OUT_INPUT 0x20
  107. #define OUT_OUTPUT 0x21
  108. #define OUT_TOTAL 0x22
  109. #define OUT_DROPPED 0x23
  110. #define OUT_KEEPALIVE 0x24
  111. extern DLL int OutEnum(void*, int* EnumNo, datadef* Out);
  112. extern void Flow_Init();
  113. extern void Flow_Done();
  114. #endif