transcoderManager.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { transcodeTarget, sourceTextureFormat, Transcoder } from './transcoder';
  2. import { WASMMemoryManager } from './wasmMemoryManager';
  3. /**
  4. * @hidden
  5. */
  6. export class TranscoderManager {
  7. public static _Transcoders: Array<typeof Transcoder> = [];
  8. public static RegisterTranscoder(transcoder: typeof Transcoder) {
  9. TranscoderManager._Transcoders.push(transcoder);
  10. }
  11. private static _transcoderInstances: { [key: string]: Transcoder } = {};
  12. private _wasmMemoryManager: WASMMemoryManager;
  13. public findTranscoder(src: sourceTextureFormat, dst: transcodeTarget): Transcoder | null {
  14. let transcoder: Transcoder | null = null;
  15. for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {
  16. if (TranscoderManager._Transcoders[i].CanTranscode(src, dst)) {
  17. const key = sourceTextureFormat[src] + "_" + transcodeTarget[dst];
  18. transcoder = TranscoderManager._transcoderInstances[key];
  19. if (!transcoder) {
  20. transcoder = new TranscoderManager._Transcoders[i]();
  21. transcoder!.initialize();
  22. if (transcoder!.needMemoryManager()) {
  23. if (!this._wasmMemoryManager) {
  24. this._wasmMemoryManager = new WASMMemoryManager();
  25. }
  26. transcoder!.setMemoryManager(this._wasmMemoryManager);
  27. }
  28. TranscoderManager._transcoderInstances[key] = transcoder;
  29. }
  30. break;
  31. }
  32. }
  33. return transcoder;
  34. }
  35. }