2
0

Codecs.SymU 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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, res: LONGINT);
  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, res: LONGINT);
  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, res: LONGINT);
  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. ImageDecoder* = OBJECT
  97. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  98. PROCEDURE ^ GetImageInfo*(VAR width, height, format, maxProgressionLevel: LONGINT);
  99. PROCEDURE ^ SetProgressionLevel*(progressionLevel: LONGINT);
  100. PROCEDURE ^ GetNativeImage*(VAR img: Raster.Image);
  101. PROCEDURE ^ Render*(img: Raster.Image);
  102. END ImageDecoder;
  103. ImageEncoder* = OBJECT
  104. PROCEDURE ^ Open*(out: Streams.Writer);
  105. PROCEDURE ^ SetQuality*(quality: LONGINT);
  106. PROCEDURE ^ WriteImage*(img: Raster.Image; VAR res: WORD);
  107. END ImageEncoder;
  108. TextDecoder* = OBJECT
  109. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  110. PROCEDURE ^ GetText*(): Texts.Text;
  111. END TextDecoder;
  112. TextEncoder* = OBJECT
  113. PROCEDURE ^ Open*(out: Streams.Writer);
  114. PROCEDURE ^ WriteText*(text: Texts.Text; VAR res: WORD);
  115. END TextEncoder;
  116. CryptoDecoder* = OBJECT
  117. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  118. PROCEDURE ^ GetReader*(): Streams.Reader;
  119. END CryptoDecoder;
  120. CryptoEncoder* = OBJECT
  121. PROCEDURE ^ Open*(out: Streams.Writer);
  122. PROCEDURE ^ GetWriter*(): Streams.Writer;
  123. END CryptoEncoder;
  124. ImageDescriptor* = OBJECT
  125. VAR
  126. left*, top*, width*, height*: LONGINT;
  127. image*: Raster.Image;
  128. delayTime*: LONGINT;
  129. disposeMode*: LONGINT;
  130. flags*: SET;
  131. previous*, next*: ImageDescriptor;
  132. PROCEDURE ^ & Init*;
  133. END ImageDescriptor;
  134. ImageSequence* = RECORD
  135. width*, height*: LONGINT;
  136. bgColor*: LONGINT;
  137. images*: ImageDescriptor;
  138. END;
  139. AnimationDecoder* = OBJECT
  140. PROCEDURE ^ Open*(in: Streams.Reader; VAR res: WORD);
  141. PROCEDURE ^ GetImageSequence*(VAR sequence: ImageSequence; VAR res: WORD);
  142. END AnimationDecoder;
  143. DemuxFactory = PROCEDURE ():AVDemultiplexer;
  144. AudioDecoderFactory = PROCEDURE ():AudioDecoder;
  145. AudioEncoderFactory = PROCEDURE ():AudioEncoder;
  146. VideoDecoderFactory = PROCEDURE ():VideoDecoder;
  147. ImageDecoderFactory = PROCEDURE ():ImageDecoder;
  148. ImageEncoderFactory = PROCEDURE ():ImageEncoder;
  149. TextDecoderFactory = PROCEDURE ():TextDecoder;
  150. TextEncoderFactory = PROCEDURE ():TextEncoder;
  151. CryptoDecoderFactory = PROCEDURE ():CryptoDecoder;
  152. CryptoEncoderFactory = PROCEDURE ():CryptoEncoder;
  153. AnimationDecoderFactory = PROCEDURE ():AnimationDecoder;
  154. PROCEDURE ^ GetDemuxFactoryName(CONST name: ARRAY OF CHAR; VAR module, procedure: Modules.Name; VAR res: WORD);
  155. PROCEDURE ^ GetDecoderFactoryName(CONST type, name: ARRAY OF CHAR; VAR module, procedure: Modules.Name; VAR res: WORD);
  156. PROCEDURE ^ GetEncoderFactoryName(CONST type, name: ARRAY OF CHAR; VAR module, procedure: Modules.Name; VAR res: WORD);
  157. PROCEDURE ^ GetDemultiplexer*(CONST name: ARRAY OF CHAR): AVDemultiplexer;
  158. PROCEDURE ^ GetImageDecoder*(CONST name: ARRAY OF CHAR): ImageDecoder;
  159. PROCEDURE ^ GetImageEncoder*(CONST name: ARRAY OF CHAR): ImageEncoder;
  160. PROCEDURE ^ GetVideoDecoder*(CONST name: ARRAY OF CHAR): VideoDecoder;
  161. PROCEDURE ^ GetAudioDecoder*(CONST name: ARRAY OF CHAR): AudioDecoder;
  162. PROCEDURE ^ GetAudioEncoder*(CONST name: ARRAY OF CHAR): AudioEncoder;
  163. PROCEDURE ^ GetTextDecoder*(CONST name: ARRAY OF CHAR): TextDecoder;
  164. PROCEDURE ^ GetTextEncoder*(CONST name: ARRAY OF CHAR): TextEncoder;
  165. PROCEDURE ^ GetCryptoDecoder*(CONST name: ARRAY OF CHAR): CryptoDecoder;
  166. PROCEDURE ^ GetCryptoEncoder*(CONST name: ARRAY OF CHAR): CryptoEncoder;
  167. PROCEDURE ^ GetAnimationDecoder*(CONST name: ARRAY OF CHAR): AnimationDecoder;
  168. PROCEDURE ^ SplitName*(CONST name: ARRAY OF CHAR; VAR protocol, filename: ARRAY OF CHAR);
  169. PROCEDURE ^ JoinName*(CONST protocol, filename: ARRAY OF CHAR; VAR name: ARRAY OF CHAR);
  170. PROCEDURE ^ OpenInputStream*(CONST name: ARRAY OF CHAR): Streams.Reader;
  171. PROCEDURE ^ OpenOutputStream*(CONST name: ARRAY OF CHAR): Streams.Writer;
  172. BEGIN
  173. END Codecs.