Codecs.SymU 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. MODULE Codecs;
  2. IMPORT Streams, Commands, Files, SoundDevices, Raster, Modules, Strings, Configuration, Unzip, Texts, Archives;
  3. CONST
  4. ResFailed* = -1;
  5. ResOk* = 0;
  6. ResSeekInexact* = 1;
  7. ImgFmtBW* = 0;
  8. ImgFmtGrey* = 1;
  9. ImgFmtRGB* = 2;
  10. ImgFmtRGBA* = 3;
  11. STError* = -1;
  12. STUnknown* = 0;
  13. STAudio* = 1;
  14. STVideo* = 2;
  15. STImage* = 3;
  16. SeekByte* = 0;
  17. SeekSample* = 1;
  18. SeekKeySample* = 2;
  19. SeekFrame* = 3;
  20. SeekKeyFrame* = 4;
  21. Unspecified* = 0;
  22. DoNotDispose* = 1;
  23. RestoreToBackground* = 2;
  24. RestoreToPrevious* = 3;
  25. WaitForUserInput* = 0;
  26. TYPE
  27. AVStreamInfo* = RECORD
  28. streamType*: LONGINT;
  29. seekability*: SET;
  30. contentType*: ARRAY 16 OF CHAR;
  31. length*: LONGINT;
  32. frames*: LONGINT;
  33. rate*: LONGINT;
  34. END;
  35. FileInputStream* = OBJECT (Streams.Reader)
  36. VAR
  37. r: Files.Rider;
  38. f*: Files.File;
  39. streamInfo*: AVStreamInfo;
  40. PROCEDURE ^ Receive(VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len: LONGINT; VAR res: WORD);
  41. PROCEDURE ^ & InitFileReader*(f: Files.File; pos: LONGINT);
  42. PROCEDURE ^ CanSetPos*(): BOOLEAN;
  43. PROCEDURE ^ SetPos*(pos: Streams.Position);
  44. END FileInputStream;
  45. AVDemultiplexer* = OBJECT
  46. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  47. PROCEDURE ^ GetNumberOfStreams*(): LONGINT;
  48. PROCEDURE ^ GetStreamType*(streamNr: LONGINT): LONGINT;
  49. PROCEDURE ^ GetStreamInfo*(streamNr: LONGINT): AVStreamInfo;
  50. PROCEDURE ^ GetStream*(streamNr: LONGINT): DemuxStream;
  51. PROCEDURE ^ GetData*(streamNr: LONGINT; VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len: LONGINT; VAR res: WORD);
  52. PROCEDURE ^ SetStreamPos*(streamNr: LONGINT; seekType: LONGINT; pos: LONGINT; VAR itemSize: LONGINT; VAR res: WORD);
  53. END AVDemultiplexer;
  54. DemuxStream* = OBJECT (Streams.Reader)
  55. VAR
  56. demultiplexer*: AVDemultiplexer;
  57. streamNr*: LONGINT;
  58. streamInfo*: AVStreamInfo;
  59. PROCEDURE ^ & Open*(demultiplexer: AVDemultiplexer; streamNr: LONGINT);
  60. PROCEDURE ^ Receive(VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len: LONGINT; VAR res: WORD);
  61. PROCEDURE ^ SetPos*(pos: Streams.Position);
  62. PROCEDURE ^ SetPosX*(seekType: LONGINT; pos: LONGINT; VAR itemSize: LONGINT; VAR res: WORD);
  63. END DemuxStream;
  64. AudioDecoder* = OBJECT
  65. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  66. PROCEDURE ^ HasMoreData*(): BOOLEAN;
  67. PROCEDURE ^ GetAudioInfo*(VAR nofChannels, samplesPerSecond, bitsPerSample: LONGINT);
  68. PROCEDURE ^ SetAudioInfo*(nofChannels, samplesPerSecond, bitsPerSample: LONGINT);
  69. PROCEDURE ^ CanSeek*(): BOOLEAN;
  70. PROCEDURE ^ GetCurrentSample*(): LONGINT;
  71. PROCEDURE ^ GetTotalSamples*(): LONGINT;
  72. PROCEDURE ^ GetCurrentTime*(): LONGINT;
  73. PROCEDURE ^ SetStreamLength*(length: LONGINT);
  74. PROCEDURE ^ SeekSample*(sample: LONGINT; goKeySample: BOOLEAN; VAR res: WORD);
  75. PROCEDURE ^ SeekMillisecond*(millisecond: LONGINT; goKeySample: BOOLEAN; VAR res: WORD);
  76. PROCEDURE ^ Next*;
  77. PROCEDURE ^ FillBuffer*(buffer: SoundDevices.Buffer);
  78. END AudioDecoder;
  79. AudioEncoder* = OBJECT
  80. PROCEDURE ^ Open*(out: Streams.Writer; sRate, sRes, nofCh: LONGINT; VAR res: WORD);
  81. PROCEDURE ^ Write*(buffer: SoundDevices.Buffer; VAR res: WORD);
  82. PROCEDURE ^ Close*(VAR res: WORD);
  83. END AudioEncoder;
  84. VideoDecoder* = OBJECT
  85. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  86. PROCEDURE ^ HasMoreData*(): BOOLEAN;
  87. PROCEDURE ^ GetVideoInfo*(VAR width, height, millisecondsPerFrame: LONGINT);
  88. PROCEDURE ^ CanSeek*(): BOOLEAN;
  89. PROCEDURE ^ GetCurrentFrame*(): LONGINT;
  90. PROCEDURE ^ GetCurrentTime*(): LONGINT;
  91. PROCEDURE ^ SeekFrame*(frame: LONGINT; goKeyFrame: BOOLEAN; VAR res: WORD);
  92. PROCEDURE ^ SeekMillisecond*(millisecond: LONGINT; goKeyFrame: BOOLEAN; VAR res: WORD);
  93. PROCEDURE ^ Next*;
  94. PROCEDURE ^ Render*(img: Raster.Image);
  95. END VideoDecoder;
  96. VideoEncoder* = OBJECT
  97. PROCEDURE ^ Open*(out: Streams.Writer; VAR res: WORD);
  98. PROCEDURE ^ Write*(img: Raster.Image);
  99. PROCEDURE ^ Close*(VAR res: WORD);
  100. END VideoEncoder;
  101. ImageDecoder* = OBJECT
  102. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  103. PROCEDURE ^ GetImageInfo*(VAR width, height, format, maxProgressionLevel: LONGINT);
  104. PROCEDURE ^ SetProgressionLevel*(progressionLevel: LONGINT);
  105. PROCEDURE ^ GetNativeImage*(VAR img: Raster.Image);
  106. PROCEDURE ^ Render*(img: Raster.Image);
  107. END ImageDecoder;
  108. ImageEncoder* = OBJECT
  109. PROCEDURE ^ Open*(out: Streams.Writer);
  110. PROCEDURE ^ SetQuality*(quality: LONGINT);
  111. PROCEDURE ^ WriteImage*(img: Raster.Image; VAR res: WORD);
  112. END ImageEncoder;
  113. TextDecoder* = OBJECT
  114. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  115. PROCEDURE ^ GetText*(): Texts.Text;
  116. END TextDecoder;
  117. TextEncoder* = OBJECT
  118. PROCEDURE ^ Open*(out: Streams.Writer);
  119. PROCEDURE ^ WriteText*(text: Texts.Text; VAR res: WORD);
  120. END TextEncoder;
  121. CryptoDecoder* = OBJECT
  122. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  123. PROCEDURE ^ GetReader*(): Streams.Reader;
  124. END CryptoDecoder;
  125. CryptoEncoder* = OBJECT
  126. PROCEDURE ^ Open*(out: Streams.Writer);
  127. PROCEDURE ^ GetWriter*(): Streams.Writer;
  128. END CryptoEncoder;
  129. ImageDescriptor* = OBJECT
  130. VAR
  131. left*, top*, width*, height*: LONGINT;
  132. image*: Raster.Image;
  133. delayTime*: LONGINT;
  134. disposeMode*: LONGINT;
  135. flags*: SET;
  136. previous*, next*: ImageDescriptor;
  137. PROCEDURE ^ & Init*;
  138. END ImageDescriptor;
  139. ImageSequence* = RECORD
  140. width*, height*: LONGINT;
  141. bgColor*: LONGINT;
  142. images*: ImageDescriptor;
  143. END;
  144. AnimationDecoder* = OBJECT
  145. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  146. PROCEDURE ^ GetImageSequence*(VAR sequence: ImageSequence; VAR res: WORD);
  147. END AnimationDecoder;
  148. DemuxFactory = PROCEDURE ():AVDemultiplexer;
  149. AudioDecoderFactory = PROCEDURE ():AudioDecoder;
  150. AudioEncoderFactory = PROCEDURE ():AudioEncoder;
  151. VideoDecoderFactory = PROCEDURE ():VideoDecoder;
  152. VideoEncoderFactory = PROCEDURE ():VideoEncoder;
  153. ImageDecoderFactory = PROCEDURE ():ImageDecoder;
  154. ImageEncoderFactory = PROCEDURE ():ImageEncoder;
  155. TextDecoderFactory = PROCEDURE ():TextDecoder;
  156. TextEncoderFactory = PROCEDURE ():TextEncoder;
  157. CryptoDecoderFactory = PROCEDURE ():CryptoDecoder;
  158. CryptoEncoderFactory = PROCEDURE ():CryptoEncoder;
  159. AnimationDecoderFactory = PROCEDURE ():AnimationDecoder;
  160. PROCEDURE ^ GetDemuxFactoryName(CONST name: ARRAY OF CHAR; VAR module, procedure: Modules.Name; VAR res: WORD);
  161. PROCEDURE ^ GetDecoderFactoryName(CONST type, name: ARRAY OF CHAR; VAR module, procedure: Modules.Name; VAR res: WORD);
  162. PROCEDURE ^ GetEncoderFactoryName(CONST type, name: ARRAY OF CHAR; VAR module, procedure: Modules.Name; VAR res: WORD);
  163. PROCEDURE ^ GetDemultiplexer*(CONST name: ARRAY OF CHAR): AVDemultiplexer;
  164. PROCEDURE ^ GetImageDecoder*(CONST name: ARRAY OF CHAR): ImageDecoder;
  165. PROCEDURE ^ GetImageEncoder*(CONST name: ARRAY OF CHAR): ImageEncoder;
  166. PROCEDURE ^ GetVideoDecoder*(CONST name: ARRAY OF CHAR): VideoDecoder;
  167. PROCEDURE ^ GetVideoEncoder*(CONST name: ARRAY OF CHAR): VideoEncoder;
  168. PROCEDURE ^ GetAudioDecoder*(CONST name: ARRAY OF CHAR): AudioDecoder;
  169. PROCEDURE ^ GetAudioEncoder*(CONST name: ARRAY OF CHAR): AudioEncoder;
  170. PROCEDURE ^ GetTextDecoder*(CONST name: ARRAY OF CHAR): TextDecoder;
  171. PROCEDURE ^ GetTextEncoder*(CONST name: ARRAY OF CHAR): TextEncoder;
  172. PROCEDURE ^ GetCryptoDecoder*(CONST name: ARRAY OF CHAR): CryptoDecoder;
  173. PROCEDURE ^ GetCryptoEncoder*(CONST name: ARRAY OF CHAR): CryptoEncoder;
  174. PROCEDURE ^ GetAnimationDecoder*(CONST name: ARRAY OF CHAR): AnimationDecoder;
  175. PROCEDURE ^ SplitName*(CONST name: ARRAY OF CHAR; VAR protocol, filename: ARRAY OF CHAR);
  176. PROCEDURE ^ JoinName*(CONST protocol, filename: ARRAY OF CHAR; VAR name: ARRAY OF CHAR);
  177. PROCEDURE ^ OpenInputStream*(CONST name: ARRAY OF CHAR): Streams.Reader;
  178. PROCEDURE ^ OpenOutputStream*(CONST name: ARRAY OF CHAR): Streams.Writer;
  179. BEGIN
  180. END Codecs.